@kecan0406/ttheme 1.2.11 → 1.2.13

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,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
- import{createRequire as uM}from"node:module";var nM=Object.create;var{getPrototypeOf:rM,defineProperty:$p,getOwnPropertyNames:iM}=Object;var sM=Object.prototype.hasOwnProperty;function oM(t){return this[t]}var aM,cM,Rl=(t,e,n)=>{var r=t!=null&&typeof t==="object";if(r){var i=e?aM??=new WeakMap:cM??=new WeakMap,s=i.get(t);if(s)return s}n=t!=null?nM(rM(t)):{};let o=e||!t||!t.__esModule?$p(n,"default",{value:t,enumerable:!0}):n;for(let a of iM(t))if(!sM.call(o,a))$p(o,a,{get:oM.bind(t,a),enumerable:!0});if(r)i.set(t,o);return o};var wt=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var Kt=uM(import.meta.url);var _l=wt((TL,Up)=>{var NM=Kt("util"),Wp=Kt("stream"),Ge=Up.exports=function(){Wp.call(this),this._buffers=[],this._buffered=0,this._reads=[],this._paused=!1,this._encoding="utf8",this.writable=!0};NM.inherits(Ge,Wp);Ge.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))};Ge.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};Ge.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()};Ge.prototype.destroySoon=Ge.prototype.end;Ge.prototype._end=function(){if(this._reads.length>0)this.emit("error",Error("Unexpected end of input"));this.destroy()};Ge.prototype.destroy=function(){if(!this._buffers)return;this.writable=!1,this._reads=null,this._buffers=null,this.emit("close")};Ge.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)};Ge.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++],s=Math.min(i.length,t.length-e);if(i.copy(r,e,0,s),e+=s,s!==i.length)this._buffers[--n]=i.slice(s)}if(n>0)this._buffers.splice(0,n);this._buffered-=t.length,t.func.call(this,r)};Ge.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 Bl=wt((RM)=>{var Zn=[{x:[0],y:[0]},{x:[4],y:[0]},{x:[0,4],y:[4]},{x:[2,6],y:[0,4]},{x:[0,2,4,6],y:[2,6]},{x:[1,3,5,7],y:[0,2,4,6]},{x:[0,1,2,3,4,5,6,7],y:[1,3,5,7]}];RM.getImagePasses=function(t,e){let n=[],r=t%8,i=e%8,s=(t-r)/8,o=(e-i)/8;for(let a=0;a<Zn.length;a++){let c=Zn[a],u=s*c.x.length,l=o*c.y.length;for(let f=0;f<c.x.length;f++)if(c.x[f]<r)u++;else break;for(let f=0;f<c.y.length;f++)if(c.y[f]<i)l++;else break;if(u>0&&l>0)n.push({width:u,height:l,index:a})}return n};RM.getInterlaceIterator=function(t){return function(e,n,r){let i=e%Zn[r].x.length,s=(e-i)/Zn[r].x.length*8+Zn[r].x[i],o=n%Zn[r].y.length,a=(n-o)/Zn[r].y.length*8+Zn[r].y[o];return s*4+a*t*4}}});var Wl=wt((HL,Kp)=>{Kp.exports=function(e,n,r){let i=e+n-r,s=Math.abs(i-e),o=Math.abs(i-n),a=Math.abs(i-r);if(s<=o&&s<=a)return e;if(o<=a)return n;return r}});var Ul=wt((AL,Dp)=>{var HM=Bl(),AM=Wl();function zp(t,e,n){let r=t*e;if(n!==8)r=Math.ceil(r/(8/n));return r}var Zi=Dp.exports=function(t,e){let{width:n,height:r,interlace:i,bpp:s,depth:o}=t;if(this.read=e.read,this.write=e.write,this.complete=e.complete,this._imageIndex=0,this._images=[],i){let a=HM.getImagePasses(n,r);for(let c=0;c<a.length;c++)this._images.push({byteWidth:zp(a[c].width,s,o),height:a[c].height,lineIndex:0})}else this._images.push({byteWidth:zp(n,s,o),height:r,lineIndex:0});if(o===8)this._xComparison=s;else if(o===16)this._xComparison=s*2;else this._xComparison=1};Zi.prototype.start=function(){this.read(this._images[this._imageIndex].byteWidth+1,this._reverseFilterLine.bind(this))};Zi.prototype._unFilterType1=function(t,e,n){let r=this._xComparison,i=r-1;for(let s=0;s<n;s++){let o=t[1+s],a=s>i?e[s-r]:0;e[s]=o+a}};Zi.prototype._unFilterType2=function(t,e,n){let r=this._lastLine;for(let i=0;i<n;i++){let s=t[1+i],o=r?r[i]:0;e[i]=s+o}};Zi.prototype._unFilterType3=function(t,e,n){let r=this._xComparison,i=r-1,s=this._lastLine;for(let o=0;o<n;o++){let a=t[1+o],c=s?s[o]:0,u=o>i?e[o-r]:0,l=Math.floor((u+c)/2);e[o]=a+l}};Zi.prototype._unFilterType4=function(t,e,n){let r=this._xComparison,i=r-1,s=this._lastLine;for(let o=0;o<n;o++){let a=t[1+o],c=s?s[o]:0,u=o>i?e[o-r]:0,l=o>i&&s?s[o-r]:0,f=AM(u,c,l);e[o]=a+f}};Zi.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 Jp=wt((FL,Yp)=>{var FM=Kt("util"),qp=_l(),CM=Ul(),LM=Yp.exports=function(t){qp.call(this);let e=[],n=this;this._filter=new CM(t,{read:this.read.bind(this),write:function(r){e.push(r)},complete:function(){n.emit("complete",Buffer.concat(e))}}),this._filter.start()};FM.inherits(LM,qp)});var Qi=wt((CL,Vp)=>{Vp.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 Dl=wt((LL,Zp)=>{var Kl=[];(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;Kl[t]=e}})();var zl=Zp.exports=function(){this._crc=-1};zl.prototype.write=function(t){for(let e=0;e<t.length;e++)this._crc=Kl[(this._crc^t[e])&255]^this._crc>>>8;return!0};zl.prototype.crc32=function(){return this._crc^-1};zl.crc32=function(t){let e=-1;for(let n=0;n<t.length;n++)e=Kl[(e^t[n])&255]^e>>>8;return e^-1}});var ql=wt((jL,Qp)=>{var Rt=Qi(),jM=Dl(),Ht=Qp.exports=function(t,e){this._options=t,t.checkCRC=t.checkCRC!==!1,this._hasIHDR=!1,this._hasIEND=!1,this._emittedHeadersFinished=!1,this._palette=[],this._colorType=0,this._chunks={},this._chunks[Rt.TYPE_IHDR]=this._handleIHDR.bind(this),this._chunks[Rt.TYPE_IEND]=this._handleIEND.bind(this),this._chunks[Rt.TYPE_IDAT]=this._handleIDAT.bind(this),this._chunks[Rt.TYPE_PLTE]=this._handlePLTE.bind(this),this._chunks[Rt.TYPE_tRNS]=this._handleTRNS.bind(this),this._chunks[Rt.TYPE_gAMA]=this._handleGAMA.bind(this),this.read=e.read,this.error=e.error,this.metadata=e.metadata,this.gamma=e.gamma,this.transColor=e.transColor,this.palette=e.palette,this.parsed=e.parsed,this.inflateData=e.inflateData,this.finished=e.finished,this.simpleTransparency=e.simpleTransparency,this.headersFinished=e.headersFinished||function(){}};Ht.prototype.start=function(){this.read(Rt.PNG_SIGNATURE.length,this._parseSignature.bind(this))};Ht.prototype._parseSignature=function(t){let e=Rt.PNG_SIGNATURE;for(let n=0;n<e.length;n++)if(t[n]!==e[n]){this.error(Error("Invalid file signature"));return}this.read(8,this._parseChunkBegin.bind(this))};Ht.prototype._parseChunkBegin=function(t){let e=t.readUInt32BE(0),n=t.readUInt32BE(4),r="";for(let s=4;s<8;s++)r+=String.fromCharCode(t[s]);let i=Boolean(t[4]&32);if(!this._hasIHDR&&n!==Rt.TYPE_IHDR){this.error(Error("Expected IHDR on beggining"));return}if(this._crc=new jM,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))};Ht.prototype._skipChunk=function(){this.read(8,this._parseChunkBegin.bind(this))};Ht.prototype._handleChunkEnd=function(){this.read(4,this._parseChunkEnd.bind(this))};Ht.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))};Ht.prototype._handleIHDR=function(t){this.read(t,this._parseIHDR.bind(this))};Ht.prototype._parseIHDR=function(t){this._crc.write(t);let e=t.readUInt32BE(0),n=t.readUInt32BE(4),r=t[8],i=t[9],s=t[10],o=t[11],a=t[12];if(r!==8&&r!==4&&r!==2&&r!==1&&r!==16){this.error(Error("Unsupported bit depth "+r));return}if(!(i in Rt.COLORTYPE_TO_BPP_MAP)){this.error(Error("Unsupported color type"));return}if(s!==0){this.error(Error("Unsupported compression method"));return}if(o!==0){this.error(Error("Unsupported filter method"));return}if(a!==0&&a!==1){this.error(Error("Unsupported interlace method"));return}this._colorType=i;let c=Rt.COLORTYPE_TO_BPP_MAP[this._colorType];this._hasIHDR=!0,this.metadata({width:e,height:n,depth:r,interlace:Boolean(a),palette:Boolean(i&Rt.COLORTYPE_PALETTE),color:Boolean(i&Rt.COLORTYPE_COLOR),alpha:Boolean(i&Rt.COLORTYPE_ALPHA),bpp:c,colorType:i}),this._handleChunkEnd()};Ht.prototype._handlePLTE=function(t){this.read(t,this._parsePLTE.bind(this))};Ht.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()};Ht.prototype._handleTRNS=function(t){this.simpleTransparency(),this.read(t,this._parseTRNS.bind(this))};Ht.prototype._parseTRNS=function(t){if(this._crc.write(t),this._colorType===Rt.COLORTYPE_PALETTE_COLOR){if(this._palette.length===0){this.error(Error("Transparency chunk must be after palette"));return}if(t.length>this._palette.length){this.error(Error("More transparent colors than palette size"));return}for(let e=0;e<t.length;e++)this._palette[e][3]=t[e];this.palette(this._palette)}if(this._colorType===Rt.COLORTYPE_GRAYSCALE)this.transColor([t.readUInt16BE(0)]);if(this._colorType===Rt.COLORTYPE_COLOR)this.transColor([t.readUInt16BE(0),t.readUInt16BE(2),t.readUInt16BE(4)]);this._handleChunkEnd()};Ht.prototype._handleGAMA=function(t){this.read(t,this._parseGAMA.bind(this))};Ht.prototype._parseGAMA=function(t){this._crc.write(t),this.gamma(t.readUInt32BE(0)/Rt.GAMMA_DIVISION),this._handleChunkEnd()};Ht.prototype._handleIDAT=function(t){if(!this._emittedHeadersFinished)this._emittedHeadersFinished=!0,this.headersFinished();this.read(-t,this._parseIDAT.bind(this,t))};Ht.prototype._parseIDAT=function(t,e){if(this._crc.write(e),this._colorType===Rt.COLORTYPE_PALETTE_COLOR&&this._palette.length===0)throw Error("Expected palette not found");this.inflateData(e);let n=t-e.length;if(n>0)this._handleIDAT(n);else this._handleChunkEnd()};Ht.prototype._handleIEND=function(t){this.read(t,this._parseIEND.bind(this))};Ht.prototype._parseIEND=function(t){if(this._crc.write(t),this._hasIEND=!0,this._handleChunkEnd(),this.finished)this.finished()}});var Yl=wt((KM)=>{var Xp=Bl(),GM=[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]}],_M=[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 BM(t,e){let n=[],r=0;function i(){if(r===t.length)throw Error("Ran out of data");let s=t[r];r++;let o,a,c,u,l,f,d,h;switch(e){default:throw Error("unrecognised depth");case 16:d=t[r],r++,n.push((s<<8)+d);break;case 4:d=s&15,h=s>>4,n.push(h,d);break;case 2:l=s&3,f=s>>2&3,d=s>>4&3,h=s>>6&3,n.push(h,d,f,l);break;case 1:o=s&1,a=s>>1&1,c=s>>2&1,u=s>>3&1,l=s>>4&1,f=s>>5&1,d=s>>6&1,h=s>>7&1,n.push(h,d,f,l,u,c,a,o);break}}return{get:function(s){while(n.length<s)i();let o=n.slice(0,s);return n=n.slice(s),o},resetAfterLine:function(){n.length=0},end:function(){if(r!==t.length)throw Error("extra data found")}}}function WM(t,e,n,r,i,s){let{width:o,height:a,index:c}=t;for(let u=0;u<a;u++)for(let l=0;l<o;l++){let f=n(l,u,c);GM[r](e,i,f,s),s+=r}return s}function UM(t,e,n,r,i,s){let{width:o,height:a,index:c}=t;for(let u=0;u<a;u++){for(let l=0;l<o;l++){let f=i.get(r),d=n(l,u,c);_M[r](e,f,d,s)}i.resetAfterLine()}}KM.dataToBitMap=function(t,e){let{width:n,height:r,depth:i,bpp:s,interlace:o}=e,a;if(i!==8)a=BM(t,i);let c;if(i<=8)c=Buffer.alloc(n*r*4);else c=new Uint16Array(n*r*4);let u=Math.pow(2,i)-1,l=0,f,d;if(o)f=Xp.getImagePasses(n,r),d=Xp.getInterlaceIterator(n,r);else{let h=0;d=function(){let p=h;return h+=4,p},f=[{width:n,height:r}]}for(let h=0;h<f.length;h++)if(i===8)l=WM(f[h],c,d,s,t,l);else UM(f[h],c,d,s,a,u);if(i===8){if(l!==t.length)throw Error("extra data found")}else a.end();return c}});var Jl=wt((_L,tg)=>{function DM(t,e,n,r,i){let s=0;for(let o=0;o<r;o++)for(let a=0;a<n;a++){let c=i[t[s]];if(!c)throw Error("index "+t[s]+" not in palette");for(let u=0;u<4;u++)e[s+u]=c[u];s+=4}}function qM(t,e,n,r,i){let s=0;for(let o=0;o<r;o++)for(let a=0;a<n;a++){let c=!1;if(i.length===1){if(i[0]===t[s])c=!0}else if(i[0]===t[s]&&i[1]===t[s+1]&&i[2]===t[s+2])c=!0;if(c)for(let u=0;u<4;u++)e[s+u]=0;s+=4}}function YM(t,e,n,r,i){let s=255,o=Math.pow(2,i)-1,a=0;for(let c=0;c<r;c++)for(let u=0;u<n;u++){for(let l=0;l<4;l++)e[a+l]=Math.floor(t[a+l]*s/o+0.5);a+=4}}tg.exports=function(t,e,n=!1){let{depth:r,width:i,height:s,colorType:o,transColor:a,palette:c}=e,u=t;if(o===3)DM(t,u,i,s,c);else{if(a)qM(t,u,i,s,a);if(r!==8&&!n){if(r===16)u=Buffer.alloc(i*s*4);YM(t,u,i,s,r)}}return u}});var rg=wt((BL,ng)=>{var JM=Kt("util"),Vl=Kt("zlib"),eg=_l(),VM=Jp(),ZM=ql(),QM=Yl(),XM=Jl(),nn=ng.exports=function(t){eg.call(this),this._parser=new ZM(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()};JM.inherits(nn,eg);nn.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};nn.prototype._inflateData=function(t){if(!this._inflate)if(this._bitmapInfo.interlace)this._inflate=Vl.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,Vl.Z_MIN_CHUNK);this._inflate=Vl.createInflate({chunkSize:r});let i=n,s=this.emit.bind(this,"error");this._inflate.on("error",function(a){if(!i)return;s(a)}),this._filter.on("complete",this._complete.bind(this));let o=this._filter.write.bind(this._filter);this._inflate.on("data",function(a){if(!i)return;if(a.length>i)a=a.slice(0,i);i-=a.length,o(a)}),this._inflate.on("end",this._filter.end.bind(this._filter))}this._inflate.write(t)};nn.prototype._handleMetaData=function(t){this._metaData=t,this._bitmapInfo=Object.create(t),this._filter=new VM(this._bitmapInfo)};nn.prototype._handleTransColor=function(t){this._bitmapInfo.transColor=t};nn.prototype._handlePalette=function(t){this._bitmapInfo.palette=t};nn.prototype._simpleTransparency=function(){this._metaData.alpha=!0};nn.prototype._headersFinished=function(){this.emit("metadata",this._metaData)};nn.prototype._finished=function(){if(this.errord)return;if(!this._inflate)this.emit("error","No Inflate block");else this._inflate.end()};nn.prototype._complete=function(t){if(this.errord)return;let e;try{let n=QM.dataToBitMap(t,this._bitmapInfo);e=XM(n,this._bitmapInfo,this._options.skipRescale),n=null}catch(n){this._handleError(n);return}this.emit("parsed",e)}});var sg=wt((WL,ig)=>{var Re=Qi();ig.exports=function(t,e,n,r){let i=[Re.COLORTYPE_COLOR_ALPHA,Re.COLORTYPE_ALPHA].indexOf(r.colorType)!==-1;if(r.colorType===r.inputColorType){let p=function(){let $=new ArrayBuffer(2);return new DataView($).setInt16(0,256,!0),new Int16Array($)[0]!==256}();if(r.bitDepth===8||r.bitDepth===16&&p)return t}let s=r.bitDepth!==16?t:new Uint16Array(t.buffer),o=255,a=Re.COLORTYPE_TO_BPP_MAP[r.inputColorType];if(a===4&&!r.inputHasAlpha)a=3;let c=Re.COLORTYPE_TO_BPP_MAP[r.colorType];if(r.bitDepth===16)o=65535,c*=2;let u=Buffer.alloc(e*n*c),l=0,f=0,d=r.bgColor||{};if(d.red===void 0)d.red=o;if(d.green===void 0)d.green=o;if(d.blue===void 0)d.blue=o;function h(){let p,$,g,b=o;switch(r.inputColorType){case Re.COLORTYPE_COLOR_ALPHA:b=s[l+3],p=s[l],$=s[l+1],g=s[l+2];break;case Re.COLORTYPE_COLOR:p=s[l],$=s[l+1],g=s[l+2];break;case Re.COLORTYPE_ALPHA:b=s[l+1],p=s[l],$=p,g=p;break;case Re.COLORTYPE_GRAYSCALE:p=s[l],$=p,g=p;break;default:throw Error("input color type:"+r.inputColorType+" is not supported at present")}if(r.inputHasAlpha){if(!i)b/=o,p=Math.min(Math.max(Math.round((1-b)*d.red+b*p),0),o),$=Math.min(Math.max(Math.round((1-b)*d.green+b*$),0),o),g=Math.min(Math.max(Math.round((1-b)*d.blue+b*g),0),o)}return{red:p,green:$,blue:g,alpha:b}}for(let p=0;p<n;p++)for(let $=0;$<e;$++){let g=h(s,l);switch(r.colorType){case Re.COLORTYPE_COLOR_ALPHA:case Re.COLORTYPE_COLOR:if(r.bitDepth===8){if(u[f]=g.red,u[f+1]=g.green,u[f+2]=g.blue,i)u[f+3]=g.alpha}else if(u.writeUInt16BE(g.red,f),u.writeUInt16BE(g.green,f+2),u.writeUInt16BE(g.blue,f+4),i)u.writeUInt16BE(g.alpha,f+6);break;case Re.COLORTYPE_ALPHA:case Re.COLORTYPE_GRAYSCALE:{let b=(g.red+g.green+g.blue)/3;if(r.bitDepth===8){if(u[f]=b,i)u[f+1]=g.alpha}else if(u.writeUInt16BE(b,f),i)u.writeUInt16BE(g.alpha,f+2);break}default:throw Error("unrecognised color Type "+r.colorType)}l+=a,f+=c}return u}});var cg=wt((UL,ag)=>{var og=Wl();function tO(t,e,n,r,i){for(let s=0;s<n;s++)r[i+s]=t[e+s]}function eO(t,e,n){let r=0,i=e+n;for(let s=e;s<i;s++)r+=Math.abs(t[s]);return r}function nO(t,e,n,r,i,s){for(let o=0;o<n;o++){let a=o>=s?t[e+o-s]:0,c=t[e+o]-a;r[i+o]=c}}function rO(t,e,n,r){let i=0;for(let s=0;s<n;s++){let o=s>=r?t[e+s-r]:0,a=t[e+s]-o;i+=Math.abs(a)}return i}function iO(t,e,n,r,i){for(let s=0;s<n;s++){let o=e>0?t[e+s-n]:0,a=t[e+s]-o;r[i+s]=a}}function sO(t,e,n){let r=0,i=e+n;for(let s=e;s<i;s++){let o=e>0?t[s-n]:0,a=t[s]-o;r+=Math.abs(a)}return r}function oO(t,e,n,r,i,s){for(let o=0;o<n;o++){let a=o>=s?t[e+o-s]:0,c=e>0?t[e+o-n]:0,u=t[e+o]-(a+c>>1);r[i+o]=u}}function aO(t,e,n,r){let i=0;for(let s=0;s<n;s++){let o=s>=r?t[e+s-r]:0,a=e>0?t[e+s-n]:0,c=t[e+s]-(o+a>>1);i+=Math.abs(c)}return i}function cO(t,e,n,r,i,s){for(let o=0;o<n;o++){let a=o>=s?t[e+o-s]:0,c=e>0?t[e+o-n]:0,u=e>0&&o>=s?t[e+o-(n+s)]:0,l=t[e+o]-og(a,c,u);r[i+o]=l}}function uO(t,e,n,r){let i=0;for(let s=0;s<n;s++){let o=s>=r?t[e+s-r]:0,a=e>0?t[e+s-n]:0,c=e>0&&s>=r?t[e+s-(n+r)]:0,u=t[e+s]-og(o,a,c);i+=Math.abs(u)}return i}var lO={0:tO,1:nO,2:iO,3:oO,4:cO},fO={0:eO,1:rO,2:sO,3:aO,4:uO};ag.exports=function(t,e,n,r,i){let s;if(!("filterType"in r)||r.filterType===-1)s=[0,1,2,3,4];else if(typeof r.filterType==="number")s=[r.filterType];else throw Error("unrecognised filter types");if(r.bitDepth===16)i*=2;let o=e*i,a=0,c=0,u=Buffer.alloc((o+1)*n),l=s[0];for(let f=0;f<n;f++){if(s.length>1){let d=1/0;for(let h=0;h<s.length;h++){let p=fO[s[h]](t,c,o,i);if(p<d)l=s[h],d=p}}u[a]=l,a++,lO[l](t,c,o,u,a,i),a+=o,c+=o}return u}});var Zl=wt((KL,ug)=>{var zt=Qi(),dO=Dl(),hO=sg(),mO=cg(),pO=Kt("zlib"),Qn=ug.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||pO.createDeflate,t.bitDepth=t.bitDepth||8,t.colorType=typeof t.colorType==="number"?t.colorType:zt.COLORTYPE_COLOR_ALPHA,t.inputColorType=typeof t.inputColorType==="number"?t.inputColorType:zt.COLORTYPE_COLOR_ALPHA,[zt.COLORTYPE_GRAYSCALE,zt.COLORTYPE_COLOR,zt.COLORTYPE_COLOR_ALPHA,zt.COLORTYPE_ALPHA].indexOf(t.colorType)===-1)throw Error("option color type:"+t.colorType+" is not supported at present");if([zt.COLORTYPE_GRAYSCALE,zt.COLORTYPE_COLOR,zt.COLORTYPE_COLOR_ALPHA,zt.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")};Qn.prototype.getDeflateOptions=function(){return{chunkSize:this._options.deflateChunkSize,level:this._options.deflateLevel,strategy:this._options.deflateStrategy}};Qn.prototype.createDeflate=function(){return this._options.deflateFactory(this.getDeflateOptions())};Qn.prototype.filterData=function(t,e,n){let r=hO(t,e,n,this._options),i=zt.COLORTYPE_TO_BPP_MAP[this._options.colorType];return mO(r,e,n,this._options,i)};Qn.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(dO.crc32(r.slice(4,r.length-4)),r.length-4),r};Qn.prototype.packGAMA=function(t){let e=Buffer.alloc(4);return e.writeUInt32BE(Math.floor(t*zt.GAMMA_DIVISION),0),this._packChunk(zt.TYPE_gAMA,e)};Qn.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(zt.TYPE_IHDR,n)};Qn.prototype.packIDAT=function(t){return this._packChunk(zt.TYPE_IDAT,t)};Qn.prototype.packIEND=function(){return this._packChunk(zt.TYPE_IEND,null)}});var hg=wt((zL,dg)=>{var gO=Kt("util"),lg=Kt("stream"),bO=Qi(),wO=Zl(),fg=dg.exports=function(t){lg.call(this);let e=t||{};this._packer=new wO(e),this._deflate=this._packer.createDeflate(),this.readable=!0};gO.inherits(fg,lg);fg.prototype.pack=function(t,e,n,r){if(this.emit("data",Buffer.from(bO.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(s){this.emit("data",this._packer.packIDAT(s))}.bind(this)),this._deflate.on("end",function(){this.emit("data",this._packer.packIEND()),this.emit("end")}.bind(this)),this._deflate.end(i)}});var $g=wt((ao,wg)=>{var mg=Kt("assert").ok,Xi=Kt("zlib"),$O=Kt("util"),pg=Kt("buffer").kMaxLength;function Xr(t){if(!(this instanceof Xr))return new Xr(t);if(t&&t.chunkSize<Xi.Z_MIN_CHUNK)t.chunkSize=Xi.Z_MIN_CHUNK;if(Xi.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 kO(t){return new Xr(t)}function gg(t,e){if(e)process.nextTick(e);if(!t._handle)return;t._handle.close(),t._handle=null}Xr.prototype._processChunk=function(t,e,n){if(typeof n==="function")return Xi.Inflate._processChunk.call(this,t,e,n);let r=this,i=t&&t.length,s=this._chunkSize-this._offset,o=this._maxLength,a=0,c=[],u=0,l;this.on("error",function(p){l=p});function f(p,$){if(r._hadError)return;let g=s-$;if(mg(g>=0,"have should not go down"),g>0){let b=r._buffer.slice(r._offset,r._offset+g);if(r._offset+=g,b.length>o)b=b.slice(0,o);if(c.push(b),u+=b.length,o-=b.length,o===0)return!1}if($===0||r._offset>=r._chunkSize)s=r._chunkSize,r._offset=0,r._buffer=Buffer.allocUnsafe(r._chunkSize);if($===0)return a+=i-p,i=p,!0;return!1}mg(this._handle,"zlib binding closed");let d;do d=this._handle.writeSync(e,t,a,i,this._buffer,this._offset,s),d=d||this._writeState;while(!this._hadError&&f(d[0],d[1]));if(this._hadError)throw l;if(u>=pg)throw gg(this),RangeError("Cannot create final Buffer. It would be larger than 0x"+pg.toString(16)+" bytes");let h=Buffer.concat(c,u);return gg(this),h};$O.inherits(Xr,Xi.Inflate);function yO(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=Xi.Z_FINISH;return t._processChunk(e,n)}function bg(t,e){return yO(new Xr(e),t)}wg.exports=ao=bg;ao.Inflate=Xr;ao.createInflate=kO;ao.inflateSync=bg});var Ql=wt((DL,yg)=>{var kg=yg.exports=function(t){this._buffer=t,this._reads=[]};kg.prototype.read=function(t,e){this._reads.push({length:Math.abs(t),allowLess:t<0,func:e})};kg.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 vg=wt((EO)=>{var vO=Ql(),SO=Ul();EO.process=function(t,e){let n=[],r=new vO(t);return new SO(e,{read:r.read.bind(r),write:function(s){n.push(s)},complete:function(){}}).start(),r.process(),Buffer.concat(n)}});var Og=wt((YL,Mg)=>{var Sg=!0,Eg=Kt("zlib"),OO=$g();if(!Eg.deflateSync)Sg=!1;var IO=Ql(),xO=vg(),NO=ql(),RO=Yl(),TO=Jl();Mg.exports=function(t,e){if(!Sg)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(E){n=E}let i;function s(E){i=E}function o(E){i.transColor=E}function a(E){i.palette=E}function c(){i.alpha=!0}let u;function l(E){u=E}let f=[];function d(E){f.push(E)}let h=new IO(t);if(new NO(e,{read:h.read.bind(h),error:r,metadata:s,gamma:l,palette:a,transColor:o,inflateData:d,simpleTransparency:c}).start(),h.process(),n)throw n;let $=Buffer.concat(f);f.length=0;let g;if(i.interlace)g=Eg.inflateSync($);else{let I=((i.width*i.bpp*i.depth+7>>3)+1)*i.height;g=OO($,{chunkSize:I,maxLength:I})}if($=null,!g||!g.length)throw Error("bad png - invalid inflate data response");let b=xO.process(g,i);$=null;let y=RO.dataToBitMap(b,i);b=null;let S=TO(y,i,e.skipRescale);return i.data=S,i.gamma=u||0,i}});var Rg=wt((JL,Ng)=>{var Ig=!0,xg=Kt("zlib");if(!xg.deflateSync)Ig=!1;var PO=Qi(),HO=Zl();Ng.exports=function(t,e){if(!Ig)throw Error("To use the sync capability of this library in old node versions, please pin pngjs to v2.3.0");let r=new HO(e||{}),i=[];if(i.push(Buffer.from(PO.PNG_SIGNATURE)),i.push(r.packIHDR(t.width,t.height)),t.gamma)i.push(r.packGAMA(t.gamma));let s=r.filterData(t.data,t.width,t.height),o=xg.deflateSync(s,r.getDeflateOptions());if(s=null,!o||!o.length)throw Error("bad png - invalid compressed data response");return i.push(r.packIDAT(o)),i.push(r.packIEND()),Buffer.concat(i)}});var Tg=wt((CO)=>{var AO=Og(),FO=Rg();CO.read=function(t,e){return AO(t,e||{})};CO.write=function(t,e){return FO(t,e)}});var Hg=wt((UO)=>{var GO=Kt("util"),Pg=Kt("stream"),_O=rg(),BO=hg(),WO=Tg(),Vt=UO.PNG=function(t){if(Pg.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 _O(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 BO(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"))};GO.inherits(Vt,Pg);Vt.sync=WO;Vt.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};Vt.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};Vt.prototype.write=function(t){return this._parser.write(t),!0};Vt.prototype.end=function(t){this._parser.end(t)};Vt.prototype._metadata=function(t){this.width=t.width,this.height=t.height,this.emit("metadata",t)};Vt.prototype._gamma=function(t){this.gamma=t};Vt.prototype._handleClose=function(){if(!this._parser.writable&&!this._packer.readable)this.emit("close")};Vt.bitblt=function(t,e,n,r,i,s,o,a){if(n|=0,r|=0,i|=0,s|=0,o|=0,a|=0,n>t.width||r>t.height||n+i>t.width||r+s>t.height)throw Error("bitblt reading outside image");if(o>e.width||a>e.height||o+i>e.width||a+s>e.height)throw Error("bitblt writing outside image");for(let c=0;c<s;c++)t.data.copy(e.data,(a+c)*e.width+o<<2,(r+c)*t.width+n<<2,(r+c)*t.width+n+i<<2)};Vt.prototype.bitblt=function(t,e,n,r,i,s,o){return Vt.bitblt(this,t,e,n,r,i,s,o),this};Vt.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 s=t.data[r+i]/255;s=Math.pow(s,0.45454545454545453/t.gamma),t.data[r+i]=Math.round(s*255)}}t.gamma=0}};Vt.prototype.adjustGamma=function(){Vt.adjustGamma(this)}});var ad=wt((c5,m0)=>{var od={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"},C2={up:(t=1)=>"\x1B[S".repeat(t),down:(t=1)=>"\x1B[T".repeat(t)},L2={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?od.up():"");if(t)e+=od.left;return e}};m0.exports={cursor:od,scroll:C2,erase:L2,beep:"\x07"}});import{spawnSync as hL}from"node:child_process";import{isMainThread as mL}from"node:worker_threads";import{parseArgs as sL}from"node:util";var xt={name:"@kecan0406/ttheme",version:"1.2.11",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, Warp and Konsole",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","konsole"],devDependencies:{"@biomejs/biome":"^2.3.0","@clack/prompts":"^1.7.0","@jsquash/jpeg":"^1.6.0","@material/material-color-utilities":"^0.4.0","@types/bun":"^1.3.0","@types/pngjs":"6.0.5","@xterm/headless":"6.0.0","fast-string-width":"^3.0.2",pngjs:"7.0.0","smol-toml":"^1.9.0",typescript:"^5.8.2"},engines:{bun:">=1.3",node:">=20.11"}};import{existsSync as JF,readFileSync as E1}from"node:fs";var kp=(()=>{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}})(),yp=(t)=>{return t===12288||t>=65281&&t<=65376||t>=65504&&t<=65510},vp=(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 fM=/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]|\u001b\]8;[^;]*;.*?(?:\u0007|\u001b\u005c)/y,dM=/[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y,Sp=/(?:(?![\uFF61-\uFF9F\uFF00-\uFFEF])[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}\p{Script=Tangut}]){1,1000}/yu,hM=/\t{1,1000}/y,Ep=/[\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,mM=/(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y,pM=/\p{M}+/gu,gM={limit:1/0,ellipsis:""},Mp=(t,e={},n={})=>{let r=e.limit??1/0,i=e.ellipsis??"",s=e?.ellipsisWidth??(i?Mp(i,gM,n).width:0),o=0,a=n.controlWidth??0,c=n.tabWidth??8,u=n.emojiWidth??2,l=2,f=n.regularWidth??1,d=n.wideWidth??2,h=[[mM,f],[fM,0],[dM,a],[hM,c],[Ep,u],[Sp,d]],p=0,$=0,g=t.length,b=0,y=!1,S=g,E=Math.max(0,r-s),I=0,N=0,R=0,F=0;t:while(!0){if(N>I||$>=g&&$>p){let j=t.slice(I,N)||t.slice(p,$);b=0;for(let B of j.replaceAll(pM,"")){let X=B.codePointAt(0)||0;if(yp(X))F=2;else if(vp(X))F=d;else F=f;if(R+F>E)S=Math.min(S,Math.max(I,p)+b);if(R+F>r){y=!0;break t}b+=B.length,R+=F}I=N=0}if($>=g)break t;for(let j=0,B=h.length;j<B;j++){let[X,U]=h[j];if(X.lastIndex=$,X.test(t)){if(b=X===Sp?kp(t.slice($,X.lastIndex)):X===Ep?1:X.lastIndex-$,F=b*U,R+F>E)S=Math.min(S,$+Math.floor((E-R)/U));if(R+F>r){y=!0;break t}R+=F,I=p,N=$,$=p=X.lastIndex;continue t}}$+=1}return{width:y?E:R,index:y?S:g,truncated:y,ellipsed:y&&r>=s}},Op=Mp;var bM={limit:1/0,ellipsis:"",ellipsisWidth:0},wM=(t,e={})=>{return Op(t,bM,e).width},Q=wM;function Tl(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 Le(t){return`\x1B[38;2;${Tl(t)}m`}function Ha(t,e){return`\x1B[48;2;${Tl(t)};38;2;${Tl(e)}m`}function Ip(t,e="\x1B[39m"){return`${t.map((n)=>`${Le(n)}■`).join(" ")}${e}`}var Pt="\x1B[0m",at="\x1B[1m",P="\x1B[2m",fe="\x1B[22m",Di="\x1B[32m",Jt="\x1B[33m",Aa="\x1B[36m",Sn=["⠋","⠙","⠹","⠸","⠼","⠴","⠦","⠧","⠇","⠏"],io="⧉";function Fa(t,e){return e?`\x1B]8;;${e}\x1B\\${t}\x1B]8;;\x1B\\`:t}function Pl(t,e){if(t[e]!=="\x1B")return 0;if(t[e+1]==="]"){let r=t.indexOf("\x07",e+2),i=t.indexOf("\x1B\\",e+2),s=r!==-1&&(i===-1||r<i)?r+1:i!==-1?i+2:0;return s?s-e:0}if(t[e+1]!=="[")return 0;let n=e+2;while(n<t.length&&!/[@-~]/.test(t[n]))n++;return n<t.length?n-e+1:0}function Hl(t,e){let n="",r=0,i=0;while(i<t.length){let s=Pl(t,i);if(s>0){n+=t.slice(i,i+s),i+=s;continue}let o=String.fromCodePoint(t.codePointAt(i)),a=Q(o);if(r+a>e)break;n+=o,r+=a,i+=o.length}return{head:n,used:r}}function ot(t,e,n=!0){if(e<=0)return"";let r=Q(t);if(r<=e)return n?t+" ".repeat(e-r):t;let{head:i,used:s}=Hl(t,e-1);return`${i}${t.includes("\x1B")?"\x1B[0m":""}…${n?" ".repeat(e-1-s):""}`}function xp(t,e){let{head:n,used:r}=Hl(t,e);return`${n}${t.includes("\x1B")?Pt:""}${" ".repeat(e-r)}`}function jt(t,e,n){let r=n-Q(e)-1;return r<=0?ot(t,n):`${ot(t,r)} ${e}`}function kt(t,e){let n=[],r="";for(let i of t.split(/\s+/).filter(Boolean)){let s=r?`${r} ${i}`:i;if(Q(s)<=e){r=s;continue}if(r)n.push(r);while(Q(i)>e){let{head:o}=Hl(i,e),a=Math.max(o.lastIndexOf("/")+1,o.lastIndexOf("#")),c=a>0?a:o.length;n.push(i.slice(0,c)),i=i.slice(c)}r=i}if(r)n.push(r);return n}import{existsSync as Jw,readFileSync as Zf}from"node:fs";import{join as Vw}from"node:path";var $M=/^#[0-9a-f]{6}$/;function ne(t){return $M.test(t)}function nt(t){let e=Number.parseInt(t.slice(1),16);return[e>>16&255,e>>8&255,e&255]}function Gt(t,e,n){let r=nt(t),i=nt(e);return`#${r.map((s,o)=>Math.round(s+((i[o]??0)-s)*n).toString(16).padStart(2,"0")).join("")}`}function yt(t){let[e,n,r]=nt(t).map((i)=>{let s=i/255;return s<=0.03928?s/12.92:((s+0.055)/1.055)**2.4});return 0.2126*e+0.7152*n+0.0722*r}function bt(t,e){let n=yt(t),r=yt(e);return(Math.max(n,r)+0.05)/(Math.min(n,r)+0.05)}function Ca(t,e){return Math.round(bt(t,e)*100)/100}function kM(t){let e=t/255;return e<=0.04045?e/12.92:((e+0.055)/1.055)**2.4}function St(t){let[e,n,r]=nt(t).map(kM),i=Math.cbrt(0.4122214708*e+0.5363325363*n+0.0514459929*r),s=Math.cbrt(0.2119034982*e+0.6806995451*n+0.1073969566*r),o=Math.cbrt(0.0883024619*e+0.2817188376*n+0.6299787005*r),a=1.9779984951*i-2.428592205*s+0.4505937099*o,c=0.0259040371*i+0.7827717662*s-0.808675766*o;return{l:0.2104542553*i+0.793617785*s-0.0040720468*o,c:Math.hypot(a,c),h:(Math.atan2(c,a)*180/Math.PI+360)%360}}var Yn=7,Np=3,Al=0.15,Rp=1.6,Cl=[1,2,3,4,5,6,9,10,11,12,13,14],Tp=[7,15],Jn=[1,2,3,4,5,6],de={1:{name:"red",center:19,width:25},2:{name:"green",center:132,width:35},3:{name:"yellow",center:88,width:35},4:{name:"blue",center:250,width:60},5:{name:"magenta",center:329,width:40},6:{name:"cyan",center:197,width:60}},oo=0.03,je=25,qi=15,Yi=0.08;function En(t,e){let n=t.ansi[e];if(n===void 0)throw Error(`${t.name}: missing ANSI ${e}`);return n}function Fl(t,e,n){let r=t.background;return e.flatMap((i)=>{let s=En(t,i);return bt(s,r)<n?[`ANSI ${i} ${s} on ${r} is ${Ca(s,r)}:1, needs ${n}:1`]:[]})}function Pp(t,e){return Math.min(...e.map((n)=>bt(En(t,n),t.background)))}var Hp=[{rule:"foreground",label:"foreground on background",unit:"ratio",min:Yn,measure:({foreground:t,background:e})=>bt(t,e),check:({foreground:t,background:e})=>bt(t,e)<Yn?[`foreground ${t} on ${e} is ${Ca(t,e)}:1, needs ${Yn}:1`]:[]},{rule:"accents",label:"weakest accent on background",unit:"ratio",min:Np,measure:(t)=>Pp(t,Cl),check:(t)=>Fl(t,Cl,Np)},{rule:"ansi0-dark",label:"ansi0 luminance",unit:"luminance",max:Al,measure:(t)=>yt(En(t,0)),check:(t)=>{let e=En(t,0);return yt(e)>Al?[`ANSI 0 ${e} has luminance ${yt(e).toFixed(3)}, needs <= ${Al}`]:[]}},{rule:"light-ansi",label:"ansi7 and ansi15 on background",unit:"ratio",min:Yn,measure:(t)=>Pp(t,Tp),check:(t)=>Fl(t,Tp,Yn)},{rule:"ansi8-visible",label:"ansi8 on background",unit:"ratio",min:Rp,measure:(t)=>bt(En(t,8),t.background),check:(t)=>Fl(t,[8],Rp)},{rule:"selection",label:"foreground on selection",unit:"ratio",min:Yn,measure:({foreground:t,selectionBackground:e})=>e===void 0?Number.NaN:bt(t,e),check:({foreground:t,selectionBackground:e})=>e!==void 0&&bt(t,e)<Yn?[`foreground ${t} on selection ${e} is ${Ca(t,e)}:1, needs ${Yn}:1`]:[]}];function Ne(t,e){let n=Math.abs(t-e)%360;return Math.min(n,360-n)}var Xe=(t)=>t>8?t-8:t;function Ji(t){let e=t.signatureSlots.filter((n)=>n.startsWith("ansi")).map((n)=>Number(n.slice(4)));return new Set(e.flatMap((n)=>Jn.includes(Xe(n))?[n,n>8?n-8:n+8]:[n]))}function so(t,e){let n=St(En(t,e));return n.c<oo?void 0:n}function Vn(t){let e=Ji(t);return Cl.flatMap((n)=>{let r=so(t,n),i=de[Xe(n)];if(r===void 0||i===void 0||e.has(n))return[];let s=Ne(r.h,i.center)-i.width;return s>0?[{slot:n,hue:r.h,over:s}]:[]})}function Mn(t){let e=new Set(t.signatureSlots);return Jn.flatMap((n)=>{let r=so(t,n),i=so(t,n+8);if(r===void 0||i===void 0||e.has(`ansi${n}`)&&e.has(`ansi${n+8}`))return[];return[{normal:n,gap:Ne(r.h,i.h)}]})}function On(t){let e=Ji(t);return[0,8].flatMap((n)=>Jn.flatMap((r)=>Jn.filter((i)=>i>r).flatMap((i)=>{let[s,o]=[n+r,n+i],a=so(t,s),c=so(t,o);if(a===void 0||c===void 0||e.has(s)&&e.has(o))return[];return Ne(a.h,c.h)<qi&&Math.abs(a.l-c.l)<Yi?[[s,o]]:[]})))}var yM=[{rule:"ansi-role",label:"accent hue outside its ANSI role",unit:"degrees",max:0,measure:(t)=>Math.max(0,...Vn(t).map((e)=>e.over)),check:(t)=>Vn(t).map(({slot:e,hue:n,over:r})=>{let i=de[Xe(e)];return`ANSI ${e} ${En(t,e)} has hue ${n.toFixed(0)}°, ${r.toFixed(0)}° outside ${i.name} (${i.center}±${i.width}°)`})},{rule:"bright-follows",label:"widest normal to bright hue gap",unit:"degrees",max:je,measure:(t)=>Math.max(0,...Mn(t).map((e)=>e.gap)),check:(t)=>Mn(t).filter((e)=>e.gap>je).map(({normal:e,gap:n})=>`ANSI ${e+8} is ${n.toFixed(0)}° from ANSI ${e}, needs <= ${je}°`)},{rule:"distinct",label:"accent pairs that read as one color",unit:"pairs",max:0,measure:(t)=>On(t).length,check:(t)=>On(t).map(([e,n])=>`ANSI ${e} ${En(t,e)} and ANSI ${n} ${En(t,n)} are within ${qi}° hue and ${Yi} lightness`)}],La=[...Hp,...yM],Ll=La.map((t)=>t.rule),he=La.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 tn(t){return La.map((e)=>Math.round(e.measure(t)*1000)/1000)}function Ap(t,e){return t.filter((n)=>!e.waive.includes(n.rule)).flatMap((n)=>n.check(e).map((r)=>({theme:e.name,rule:n.rule,detail:r})))}function Zr(t){return Ap(La,t)}function Fp(t){return Ap(Hp,t)}function Cp(t){return t.flatMap(Zr)}import{chmodSync as vM,copyFileSync as SM,existsSync as Vi,mkdirSync as EM,readFileSync as jl,realpathSync as MM,renameSync as jp,rmSync as Lp,statSync as OM,writeFileSync as Gp}from"node:fs";import{dirname as IM}from"node:path";function _p(t){return`${t}.ttheme.bak`}var xM=/^(?:#|--) ttheme begin$|path = "ttheme-|^DefaultProfile=ttheme-/m;function Gl(t){let e=_p(t);if(Vi(t)&&!Vi(e)&&!xM.test(jl(t,"utf8")))SM(t,e)}function H(t,e){let n=Vi(t)?MM(t):t;EM(IM(n),{recursive:!0});let r=`${n}.ttheme-${process.pid}`;if(Gp(r,e),Vi(n))vM(r,OM(n).mode&4095);jp(r,n)}function Qr(t,e,n){if(Gp(t,n),t!==e)jp(t,e)}function en(t,e){if((Vi(t)?jl(t,"utf8"):void 0)===e)return!1;return Gl(t),H(t,e),!0}function Bp(t,e){let n=_p(t),r=Vi(n)?jl(n,"utf8"):void 0;if(e===""&&r===void 0)return Lp(t,{force:!0}),"removed";if(H(t,e),r===void 0||r===e)return Lp(n,{force:!0}),"restored";return"kept backup"}import{createHash as Vb}from"node:crypto";import{copyFileSync as Sx,existsSync as Of,mkdirSync as Ex,readdirSync as Mx,readFileSync as us,renameSync as Zb,rmSync as cs,statSync as Ox}from"node:fs";import{basename as Qb,isAbsolute as Ix,join as z}from"node:path";import{createHash as JI}from"node:crypto";import{existsSync as VI,readdirSync as ZI,readFileSync as QI,rmSync as XI,statSync as tx,utimesSync as ex}from"node:fs";import{join as os}from"node:path";import{readdirSync as nI,rmSync as rI,statSync as iI}from"node:fs";import{setDefaultAutoSelectFamilyAttemptTimeout as sI}from"node:net";import{homedir as oI}from"node:os";import{join as ho}from"node:path";import{setTimeout as aI}from"node:timers/promises";var Lg=Rl(Hg(),1);import{constants as qO,deflateSync as YO,inflateSync as JO}from"node:zlib";import{inflateRawSync as zO}from"node:zlib";var KO=(()=>{var t=import.meta.url;return function(e={}){var n=e,r,i,s=new Promise((m,w)=>{r=m,i=w});let a=globalThis.ServiceWorkerGlobalScope!==void 0&&typeof self<"u"&&globalThis.caches&&globalThis.caches.default!==void 0,c=typeof process==="object"&&process.release&&process.release.name==="node";if(a||c){if(!globalThis.ImageData)globalThis.ImageData=class{constructor(w,k,v){this.data=w,this.width=k,this.height=v}};if(import.meta.url===void 0)import.meta.url="https://localhost";if(typeof self<"u"&&self.location===void 0)self.location={href:""}}var u=Object.assign({},n),l=[],f="./this.program",d=(m,w)=>{throw w},h=typeof window=="object",p=typeof importScripts=="function",$=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string",g="";function b(m){if(n.locateFile)return n.locateFile(m,g);return g+m}var y,S,E;if(h||p){if(p)g=self.location.href;else if(typeof document<"u"&&document.currentScript)g=document.currentScript.src;if(t)g=t;if(g.startsWith("blob:"))g="";else g=g.substr(0,g.replace(/[?#].*/,"").lastIndexOf("/")+1);{if(y=(m)=>{var w=new XMLHttpRequest;return w.open("GET",m,!1),w.send(null),w.responseText},p)E=(m)=>{var w=new XMLHttpRequest;return w.open("GET",m,!1),w.responseType="arraybuffer",w.send(null),new Uint8Array(w.response)};S=(m,w,k)=>{var v=new XMLHttpRequest;v.open("GET",m,!0),v.responseType="arraybuffer",v.onload=()=>{if(v.status==200||v.status==0&&v.response){w(v.response);return}k()},v.onerror=k,v.send(null)}}}var I=n.print||console.log.bind(console),N=n.printErr||console.error.bind(console);if(Object.assign(n,u),u=null,n.arguments)l=n.arguments;if(n.thisProgram)f=n.thisProgram;if(n.quit)d=n.quit;var R;if(n.wasmBinary)R=n.wasmBinary;var F,j=!1,B,X,U,Z,W,$t,tt,qn,Ve;function Ze(){var m=F.buffer;n.HEAP8=X=new Int8Array(m),n.HEAP16=Z=new Int16Array(m),n.HEAPU8=U=new Uint8Array(m),n.HEAPU16=W=new Uint16Array(m),n.HEAP32=$t=new Int32Array(m),n.HEAPU32=tt=new Uint32Array(m),n.HEAPF32=qn=new Float32Array(m),n.HEAPF64=Ve=new Float64Array(m)}var Qe=[],Na=[],zr=[],gl=!1;function bl(){if(n.preRun){if(typeof n.preRun=="function")n.preRun=[n.preRun];while(n.preRun.length)hS(n.preRun.shift())}kl(Qe)}function wl(){gl=!0,kl(Na)}function dS(){if(n.postRun){if(typeof n.postRun=="function")n.postRun=[n.postRun];while(n.postRun.length)pS(n.postRun.shift())}kl(zr)}function hS(m){Qe.unshift(m)}function mS(m){Na.unshift(m)}function pS(m){zr.unshift(m)}var Dr=0,$l=null,no=null;function gS(m){Dr++,n.monitorRunDependencies?.(Dr)}function bS(m){if(Dr--,n.monitorRunDependencies?.(Dr),Dr==0){if($l!==null)clearInterval($l),$l=null;if(no){var w=no;no=null,w()}}}function Xm(m){n.onAbort?.(m),m="Aborted("+m+")",N(m),j=!0,B=1,m+=". Build with -sASSERTIONS for more info.";var w=new WebAssembly.RuntimeError(m);throw i(w),w}var wS="data:application/octet-stream;base64,",tp=(m)=>m.startsWith(wS),qr;if(n.locateFile){if(qr="mozjpeg_dec.wasm",!tp(qr))qr=b(qr)}else qr=new URL("mozjpeg_dec.wasm",import.meta.url).href;function ep(m){if(m==qr&&R)return new Uint8Array(R);if(E)return E(m);throw"both async and sync fetching of the wasm failed"}function $S(m){if(!R&&(h||p)){if(typeof fetch=="function")return fetch(m,{credentials:"same-origin"}).then((w)=>{if(!w.ok)throw`failed to load wasm binary file at '${m}'`;return w.arrayBuffer()}).catch(()=>ep(m))}return Promise.resolve().then(()=>ep(m))}function np(m,w,k){return $S(m).then((v)=>WebAssembly.instantiate(v,w)).then(k,(v)=>{N(`failed to asynchronously prepare wasm: ${v}`),Xm(v)})}function kS(m,w,k,v){if(!m&&typeof WebAssembly.instantiateStreaming=="function"&&!tp(w)&&typeof fetch=="function")return fetch(w,{credentials:"same-origin"}).then((O)=>{var x=WebAssembly.instantiateStreaming(O,k);return x.then(v,function(C){return N(`wasm streaming compile failed: ${C}`),N("falling back to ArrayBuffer instantiation"),np(w,k,v)})});return np(w,k,v)}function yS(){var m={a:zE};function w(v,O){return qt=v.exports,F=qt.A,Ze(),lp=qt.F,mS(qt.B),bS("wasm-instantiate"),qt}gS("wasm-instantiate");function k(v){w(v.instance)}if(n.instantiateWasm)try{return n.instantiateWasm(m,w)}catch(v){N(`Module.instantiateWasm callback failed with error: ${v}`),i(v)}return kS(R,qr,m,k).catch(i),{}}function vS(m){this.name="ExitStatus",this.message=`Program terminated with exit(${m})`,this.status=m}var kl=(m)=>{while(m.length>0)m.shift()(n)},SS=n.noExitRuntime||!0;class rp{constructor(m){this.excPtr=m,this.ptr=m-24}set_type(m){tt[this.ptr+4>>2]=m}get_type(){return tt[this.ptr+4>>2]}set_destructor(m){tt[this.ptr+8>>2]=m}get_destructor(){return tt[this.ptr+8>>2]}set_caught(m){m=m?1:0,X[this.ptr+12]=m}get_caught(){return X[this.ptr+12]!=0}set_rethrown(m){m=m?1:0,X[this.ptr+13]=m}get_rethrown(){return X[this.ptr+13]!=0}init(m,w){this.set_adjusted_ptr(0),this.set_type(m),this.set_destructor(w)}set_adjusted_ptr(m){tt[this.ptr+16>>2]=m}get_adjusted_ptr(){return tt[this.ptr+16>>2]}get_exception_ptr(){var m=bp(this.get_type());if(m)return tt[this.excPtr>>2];var w=this.get_adjusted_ptr();if(w!==0)return w;return this.excPtr}}var ip=0,ES=0,MS=(m,w,k)=>{var v=new rp(m);throw v.init(w,k),ip=m,ES++,ip},OS=(m,w,k,v,O)=>{},IS=()=>{var m=Array(256);for(var w=0;w<256;++w)m[w]=String.fromCharCode(w);sp=m},sp,Ce=(m)=>{var w="",k=m;while(U[k])w+=sp[U[k++]];return w},Wi={},Yr={},Ra={},op,le=(m)=>{throw new op(m)},ap,cp=(m)=>{throw new ap(m)},xS=(m,w,k)=>{m.forEach(function(T){Ra[T]=w});function v(T){var G=k(T);if(G.length!==m.length)cp("Mismatched type converter count");for(var V=0;V<m.length;++V)kn(m[V],G[V])}var O=Array(w.length),x=[],C=0;if(w.forEach((T,G)=>{if(Yr.hasOwnProperty(T))O[G]=Yr[T];else{if(x.push(T),!Wi.hasOwnProperty(T))Wi[T]=[];Wi[T].push(()=>{if(O[G]=Yr[T],++C,C===x.length)v(O)})}}),x.length===0)v(O)};function NS(m,w,k={}){var v=w.name;if(!m)le(`type "${v}" must have a positive integer typeid pointer`);if(Yr.hasOwnProperty(m))if(k.ignoreDuplicateRegistrations)return;else le(`Cannot register type '${v}' twice`);if(Yr[m]=w,delete Ra[m],Wi.hasOwnProperty(m)){var O=Wi[m];delete Wi[m],O.forEach((x)=>x())}}function kn(m,w,k={}){if(!("argPackAdvance"in w))throw TypeError("registerType registeredInstance requires argPackAdvance");return NS(m,w,k)}var Jr=8,RS=(m,w,k,v)=>{w=Ce(w),kn(m,{name:w,fromWireType:function(O){return!!O},toWireType:function(O,x){return x?k:v},argPackAdvance:Jr,readValueFromPointer:function(O){return this.fromWireType(U[O])},destructorFunction:null})},yl=[],yn=[],vl=(m)=>{if(m>9&&--yn[m+1]===0)yn[m]=void 0,yl.push(m)},TS=()=>yn.length/2-5-yl.length,PS=()=>{yn.push(0,1,void 0,1,null,1,!0,1,!1,1),n.count_emval_handles=TS},Vr={toValue:(m)=>{if(!m)le("Cannot use deleted val. handle = "+m);return yn[m]},toHandle:(m)=>{switch(m){case void 0:return 2;case null:return 4;case!0:return 6;case!1:return 8;default:{let w=yl.pop()||yn.length;return yn[w]=m,yn[w+1]=1,w}}}};function Sl(m){return this.fromWireType(tt[m>>2])}var HS={name:"emscripten::val",fromWireType:(m)=>{var w=Vr.toValue(m);return vl(m),w},toWireType:(m,w)=>Vr.toHandle(w),argPackAdvance:Jr,readValueFromPointer:Sl,destructorFunction:null},AS=(m)=>kn(m,HS),FS=(m,w)=>{switch(w){case 4:return function(k){return this.fromWireType(qn[k>>2])};case 8:return function(k){return this.fromWireType(Ve[k>>3])};default:throw TypeError(`invalid float width (${w}): ${m}`)}},CS=(m,w,k)=>{w=Ce(w),kn(m,{name:w,fromWireType:(v)=>v,toWireType:(v,O)=>O,argPackAdvance:Jr,readValueFromPointer:FS(w,k),destructorFunction:null})},El=(m,w)=>Object.defineProperty(w,"name",{value:m}),up=(m)=>{while(m.length){var w=m.pop(),k=m.pop();k(w)}};function LS(m){for(var w=1;w<m.length;++w)if(m[w]!==null&&m[w].destructorFunction===void 0)return!0;return!1}function jS(m,w,k,v,O,x){var C=w.length;if(C<2)le("argTypes array size mismatch! Must at least get return value and 'this' types!");var T=w[1]!==null&&k!==null,G=LS(w),V=w[0].name!=="void",ht=C-2,It=Array(ht),Yt=[],xe=[],Ui=function(...xl){if(xl.length!==ht)le(`function ${m} called with ${xl.length} arguments, expected ${ht}`);xe.length=0;var Nl;if(Yt.length=T?2:1,Yt[0]=O,T)Nl=w[1].toWireType(xe,this),Yt[1]=Nl;for(var Ki=0;Ki<ht;++Ki)It[Ki]=w[Ki+2].toWireType(xe,xl[Ki]),Yt.push(It[Ki]);var QE=v(...Yt);function XE(tM){if(G)up(xe);else for(var zi=T?1:2;zi<w.length;zi++){var eM=zi===1?Nl:It[zi-2];if(w[zi].destructorFunction!==null)w[zi].destructorFunction(eM)}if(V)return w[0].fromWireType(tM)}return XE(QE)};return El(m,Ui)}var GS=(m,w,k)=>{if(m[w].overloadTable===void 0){var v=m[w];m[w]=function(...O){if(!m[w].overloadTable.hasOwnProperty(O.length))le(`Function '${k}' called with an invalid number of arguments (${O.length}) - expects one of (${m[w].overloadTable})!`);return m[w].overloadTable[O.length].apply(this,O)},m[w].overloadTable=[],m[w].overloadTable[v.argCount]=v}},_S=(m,w,k)=>{if(n.hasOwnProperty(m)){if(k===void 0||n[m].overloadTable!==void 0&&n[m].overloadTable[k]!==void 0)le(`Cannot register public name '${m}' twice`);if(GS(n,m,m),n.hasOwnProperty(k))le(`Cannot register multiple overloads of a function with the same number of arguments (${k})!`);n[m].overloadTable[k]=w}else if(n[m]=w,k!==void 0)n[m].numArguments=k},BS=(m,w)=>{var k=[];for(var v=0;v<m;v++)k.push(tt[w+v*4>>2]);return k},WS=(m,w,k)=>{if(!n.hasOwnProperty(m))cp("Replacing nonexistent public symbol");if(n[m].overloadTable!==void 0&&k!==void 0)n[m].overloadTable[k]=w;else n[m]=w,n[m].argCount=k},US=(m,w,k)=>{m=m.replace(/p/g,"i");var v=n["dynCall_"+m];return v(w,...k)},Ta=[],lp,fp=(m)=>{var w=Ta[m];if(!w){if(m>=Ta.length)Ta.length=m+1;Ta[m]=w=lp.get(m)}return w},KS=(m,w,k=[])=>{if(m.includes("j"))return US(m,w,k);var v=fp(w)(...k);return v},zS=(m,w)=>(...k)=>KS(m,w,k),DS=(m,w)=>{m=Ce(m);function k(){if(m.includes("j"))return zS(m,w);return fp(w)}var v=k();if(typeof v!="function")le(`unknown function pointer with signature ${m}: ${w}`);return v},qS=(m,w)=>{var k=El(w,function(v){this.name=w,this.message=v;var O=Error(v).stack;if(O!==void 0)this.stack=this.toString()+`
3
- `+O.replace(/^Error(:[^\n]*)?\n/,"")});return k.prototype=Object.create(m.prototype),k.prototype.constructor=k,k.prototype.toString=function(){if(this.message===void 0)return this.name;else return`${this.name}: ${this.message}`},k},dp,hp=(m)=>{var w=gp(m),k=Ce(w);return vn(w),k},YS=(m,w)=>{var k=[],v={};function O(x){if(v[x])return;if(Yr[x])return;if(Ra[x]){Ra[x].forEach(O);return}k.push(x),v[x]=!0}throw w.forEach(O),new dp(`${m}: `+k.map(hp).join([", "]))},JS=(m)=>{m=m.trim();let w=m.indexOf("(");if(w!==-1)return m.substr(0,w);else return m},VS=(m,w,k,v,O,x,C)=>{var T=BS(w,k);m=Ce(m),m=JS(m),O=DS(v,O),_S(m,function(){YS(`Cannot call ${m} due to unbound types`,T)},w-1),xS([],T,(G)=>{var V=[G[0],null].concat(G.slice(1));return WS(m,jS(m,V,null,O,x,C),w-1),[]})},ZS=(m,w,k)=>{switch(w){case 1:return k?(v)=>X[v]:(v)=>U[v];case 2:return k?(v)=>Z[v>>1]:(v)=>W[v>>1];case 4:return k?(v)=>$t[v>>2]:(v)=>tt[v>>2];default:throw TypeError(`invalid integer width (${w}): ${m}`)}},QS=(m,w,k,v,O)=>{if(w=Ce(w),O===-1)O=4294967295;var x=(ht)=>ht;if(v===0){var C=32-8*k;x=(ht)=>ht<<C>>>C}var T=w.includes("unsigned"),G=(ht,It)=>{},V;if(T)V=function(ht,It){return G(It,this.name),It>>>0};else V=function(ht,It){return G(It,this.name),It};kn(m,{name:w,fromWireType:x,toWireType:V,argPackAdvance:Jr,readValueFromPointer:ZS(w,k,v!==0),destructorFunction:null})},XS=(m,w,k)=>{var v=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array],O=v[w];function x(C){var T=tt[C>>2],G=tt[C+4>>2];return new O(X.buffer,G,T)}k=Ce(k),kn(m,{name:k,fromWireType:x,argPackAdvance:Jr,readValueFromPointer:x},{ignoreDuplicateRegistrations:!0})},tE=(m,w,k,v)=>{if(!(v>0))return 0;var O=k,x=k+v-1;for(var C=0;C<m.length;++C){var T=m.charCodeAt(C);if(T>=55296&&T<=57343){var G=m.charCodeAt(++C);T=65536+((T&1023)<<10)|G&1023}if(T<=127){if(k>=x)break;w[k++]=T}else if(T<=2047){if(k+1>=x)break;w[k++]=192|T>>6,w[k++]=128|T&63}else if(T<=65535){if(k+2>=x)break;w[k++]=224|T>>12,w[k++]=128|T>>6&63,w[k++]=128|T&63}else{if(k+3>=x)break;w[k++]=240|T>>18,w[k++]=128|T>>12&63,w[k++]=128|T>>6&63,w[k++]=128|T&63}}return w[k]=0,k-O},eE=(m,w,k)=>tE(m,U,w,k),nE=(m)=>{var w=0;for(var k=0;k<m.length;++k){var v=m.charCodeAt(k);if(v<=127)w++;else if(v<=2047)w+=2;else if(v>=55296&&v<=57343)w+=4,++k;else w+=3}return w},mp=(m,w,k)=>{var v=w+k,O="";while(!(w>=v)){var x=m[w++];if(!x)return O;if(!(x&128)){O+=String.fromCharCode(x);continue}var C=m[w++]&63;if((x&224)==192){O+=String.fromCharCode((x&31)<<6|C);continue}var T=m[w++]&63;if((x&240)==224)x=(x&15)<<12|C<<6|T;else x=(x&7)<<18|C<<12|T<<6|m[w++]&63;if(x<65536)O+=String.fromCharCode(x);else{var G=x-65536;O+=String.fromCharCode(55296|G>>10,56320|G&1023)}}return O},rE=(m,w)=>m?mp(U,m,w):"",iE=(m,w)=>{w=Ce(w);var k=w==="std::string";kn(m,{name:w,fromWireType(v){var O=tt[v>>2],x=v+4,C;if(k){var T=x;for(var G=0;G<=O;++G){var V=x+G;if(G==O||U[V]==0){var ht=V-T,It=rE(T,ht);if(C===void 0)C=It;else C+=String.fromCharCode(0),C+=It;T=V+1}}}else{var Yt=Array(O);for(var G=0;G<O;++G)Yt[G]=String.fromCharCode(U[x+G]);C=Yt.join("")}return vn(v),C},toWireType(v,O){if(O instanceof ArrayBuffer)O=new Uint8Array(O);var x,C=typeof O=="string";if(!(C||O instanceof Uint8Array||O instanceof Uint8ClampedArray||O instanceof Int8Array))le("Cannot pass non-string to std::string");if(k&&C)x=nE(O);else x=O.length;var T=Il(4+x+1),G=T+4;if(tt[T>>2]=x,k&&C)eE(O,G,x+1);else if(C)for(var V=0;V<x;++V){var ht=O.charCodeAt(V);if(ht>255)vn(G),le("String has UTF-16 code units that do not fit in 8 bits");U[G+V]=ht}else for(var V=0;V<x;++V)U[G+V]=O[V];if(v!==null)v.push(vn,T);return T},argPackAdvance:Jr,readValueFromPointer:Sl,destructorFunction(v){vn(v)}})},sE=(m,w)=>{var k="";for(var v=0;!(v>=w/2);++v){var O=Z[m+v*2>>1];if(O==0)break;k+=String.fromCharCode(O)}return k},oE=(m,w,k)=>{if(k??=2147483647,k<2)return 0;k-=2;var v=w,O=k<m.length*2?k/2:m.length;for(var x=0;x<O;++x){var C=m.charCodeAt(x);Z[w>>1]=C,w+=2}return Z[w>>1]=0,w-v},aE=(m)=>m.length*2,cE=(m,w)=>{var k=0,v="";while(!(k>=w/4)){var O=$t[m+k*4>>2];if(O==0)break;if(++k,O>=65536){var x=O-65536;v+=String.fromCharCode(55296|x>>10,56320|x&1023)}else v+=String.fromCharCode(O)}return v},uE=(m,w,k)=>{if(k??=2147483647,k<4)return 0;var v=w,O=v+k-4;for(var x=0;x<m.length;++x){var C=m.charCodeAt(x);if(C>=55296&&C<=57343){var T=m.charCodeAt(++x);C=65536+((C&1023)<<10)|T&1023}if($t[w>>2]=C,w+=4,w+4>O)break}return $t[w>>2]=0,w-v},lE=(m)=>{var w=0;for(var k=0;k<m.length;++k){var v=m.charCodeAt(k);if(v>=55296&&v<=57343)++k;w+=4}return w},fE=(m,w,k)=>{k=Ce(k);var v,O,x,C;if(w===2)v=sE,O=oE,C=aE,x=(T)=>W[T>>1];else if(w===4)v=cE,O=uE,C=lE,x=(T)=>tt[T>>2];kn(m,{name:k,fromWireType:(T)=>{var G=tt[T>>2],V,ht=T+4;for(var It=0;It<=G;++It){var Yt=T+4+It*w;if(It==G||x(Yt)==0){var xe=Yt-ht,Ui=v(ht,xe);if(V===void 0)V=Ui;else V+=String.fromCharCode(0),V+=Ui;ht=Yt+w}}return vn(T),V},toWireType:(T,G)=>{if(typeof G!="string")le(`Cannot pass non-string to C++ string type ${k}`);var V=C(G),ht=Il(4+V+w);if(tt[ht>>2]=V/w,O(G,ht+4,V+w),T!==null)T.push(vn,ht);return ht},argPackAdvance:Jr,readValueFromPointer:Sl,destructorFunction(T){vn(T)}})},dE=(m,w)=>{w=Ce(w),kn(m,{isVoid:!0,name:w,argPackAdvance:0,fromWireType:()=>{return},toWireType:(k,v)=>{return}})},hE=(m,w,k)=>U.copyWithin(m,w,w+k),Ml=[],mE=(m,w,k,v)=>{return m=Ml[m],w=Vr.toValue(w),m(null,w,k,v)},pE={},gE=(m)=>{var w=pE[m];if(w===void 0)return Ce(m);return w},pp=()=>{if(typeof globalThis=="object")return globalThis;function m(w){w.$$$embind_global$$$=w;var k=typeof $$$embind_global$$$=="object"&&w.$$$embind_global$$$==w;if(!k)delete w.$$$embind_global$$$;return k}if(typeof $$$embind_global$$$=="object")return $$$embind_global$$$;if(typeof global=="object"&&m(global))$$$embind_global$$$=global;else if(typeof self=="object"&&m(self))$$$embind_global$$$=self;if(typeof $$$embind_global$$$=="object")return $$$embind_global$$$;throw Error("unable to get global object.")},bE=(m)=>{if(m===0)return Vr.toHandle(pp());else return m=gE(m),Vr.toHandle(pp()[m])},wE=(m)=>{var w=Ml.length;return Ml.push(m),w},$E=(m,w)=>{var k=Yr[m];if(k===void 0)le(`${w} has unknown type ${hp(m)}`);return k},kE=(m,w)=>{var k=Array(m);for(var v=0;v<m;++v)k[v]=$E(tt[w+v*4>>2],"parameter "+v);return k},yE=Reflect.construct,vE=(m,w,k)=>{var v=[],O=m.toWireType(v,k);if(v.length)tt[w>>2]=Vr.toHandle(v);return O},SE=(m,w,k)=>{var v=kE(m,w),O=v.shift();m--;var x=Array(m),C=(G,V,ht,It)=>{var Yt=0;for(var xe=0;xe<m;++xe)x[xe]=v[xe].readValueFromPointer(It+Yt),Yt+=v[xe].argPackAdvance;var Ui=k===1?yE(V,x):V.apply(G,x);return vE(O,ht,Ui)},T=`methodCaller<(${v.map((G)=>G.name).join(", ")}) => ${O.name}>`;return wE(El(T,C))},EE=(m)=>{if(m>9)yn[m+1]+=1},ME=(m)=>{var w=Vr.toValue(m);up(w),vl(m)},OE=()=>{Xm("")},IE=()=>2147483648,xE=(m)=>{var w=F.buffer,k=(m-w.byteLength+65535)/65536;try{return F.grow(k),Ze(),1}catch(v){}},NE=(m)=>{var w=U.length;m>>>=0;var k=IE();if(m>k)return!1;var v=(G,V)=>G+(V-G%V)%V;for(var O=1;O<=4;O*=2){var x=w*(1+0.2/O);x=Math.min(x,m+100663296);var C=Math.min(k,v(Math.max(m,x),65536)),T=xE(C);if(T)return!0}return!1},Ol={},RE=()=>f||"./this.program",ro=()=>{if(!ro.strings){var m=(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",w={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:m,_:RE()};for(var k in Ol)if(Ol[k]===void 0)delete w[k];else w[k]=Ol[k];var v=[];for(var k in w)v.push(`${k}=${w[k]}`);ro.strings=v}return ro.strings},TE=(m,w)=>{for(var k=0;k<m.length;++k)X[w++]=m.charCodeAt(k);X[w]=0},PE=(m,w)=>{var k=0;return ro().forEach((v,O)=>{var x=w+k;tt[m+O*4>>2]=x,TE(v,x),k+=v.length+1}),0},HE=(m,w)=>{var k=ro();tt[m>>2]=k.length;var v=0;return k.forEach((O)=>v+=O.length+1),tt[w>>2]=v,0},AE=0,FE=()=>SS||AE>0,CE=(m)=>{if(B=m,!FE())n.onExit?.(m),j=!0;d(m,new vS(m))},LE=(m,w)=>{B=m,CE(m)},jE=LE,GE=(m)=>52,_E=(m,w)=>w+2097152>>>0<4194305-!!m?(m>>>0)+w*4294967296:NaN;function BE(m,w,k,v,O){var x=_E(w,k);return 70}var WE=[null,[],[]],UE=(m,w)=>{var k=WE[m];if(w===0||w===10)(m===1?I:N)(mp(k,0)),k.length=0;else k.push(w)},KE=(m,w,k,v)=>{var O=0;for(var x=0;x<k;x++){var C=tt[w>>2],T=tt[w+4>>2];w+=8;for(var G=0;G<T;G++)UE(m,U[C+G]);O+=T}return tt[v>>2]=O,0};IS(),op=n.BindingError=class extends Error{constructor(w){super(w);this.name="BindingError"}},ap=n.InternalError=class extends Error{constructor(w){super(w);this.name="InternalError"}},PS(),dp=n.UnboundTypeError=qS(Error,"UnboundTypeError");var zE={o:MS,q:OS,m:RS,l:AS,j:CS,f:VS,b:QS,a:XS,e:iE,c:fE,n:dE,v:hE,i:mE,d:vl,k:bE,h:SE,y:EE,g:ME,r:OE,s:NE,t:PE,u:HE,z:jE,w:GE,p:BE,x:KE},qt=yS(),DE=()=>(DE=qt.B)(),gp=(m)=>(gp=qt.C)(m),Il=(m)=>(Il=qt.D)(m),vn=(m)=>(vn=qt.E)(m),qE=(m)=>(qE=qt._emscripten_stack_restore)(m),YE=(m)=>(YE=qt._emscripten_stack_alloc)(m),JE=()=>(JE=qt.emscripten_stack_get_current)(),VE=(m)=>(VE=qt.__cxa_increment_exception_refcount)(m),bp=(m)=>(bp=qt.G)(m),ZE=n.dynCall_jiji=(m,w,k,v,O)=>(ZE=n.dynCall_jiji=qt.H)(m,w,k,v,O),Pa;no=function m(){if(!Pa)wp();if(!Pa)no=m};function wp(){if(Dr>0)return;if(bl(),Dr>0)return;function m(){if(Pa)return;if(Pa=!0,n.calledRun=!0,j)return;if(wl(),r(n),n.onRuntimeInitialized)n.onRuntimeInitialized();dS()}if(n.setStatus)n.setStatus("Running..."),setTimeout(function(){setTimeout(function(){n.setStatus("")},1),m()},1);else m()}if(n.preInit){if(typeof n.preInit=="function")n.preInit=[n.preInit];while(n.preInit.length>0)n.preInit.pop()()}return wp(),s}})(),Ag=KO;function tf(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}var Xl;function DO(){if(Xl)return Xl;let t=new WebAssembly.Module(zO(Buffer.from("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","base64"))),e={noInitialRun:!0,print:()=>{return},printErr:()=>{return},instantiateWasm:(n,r)=>{let i=new WebAssembly.Instance(t,n);return r(i),i.exports}};if(Ag(e),typeof e.decode!=="function")throw Error("the JPEG decoder did not start");return Xl=e,e}function Fg(t,e){let n=tf(t);if(n&&n.width*n.height>e)throw Error(`${n.width}×${n.height} is over ${e/1e6} megapixels`);let r=null;try{r=DO().decode(t,!0)}catch{r=null}if(!r)throw Error("not a JPEG image this decoder can read");return{width:r.width,height:r.height,data:new Uint8Array(r.data.buffer,r.data.byteOffset,r.data.length)}}var ts=[137,80,78,71,13,10,26,10],jg=13,Gg=3;function ti(t){return t.length>=ts.length&&ts.every((e,n)=>t[n]===e)}var _g={0:1,2:3,4:2,6:4};function VO(t){if(t.length<33||!ti(t))return;let e=Buffer.from(t.buffer,t.byteOffset,t.byteLength),n=e.readUInt32BE(16),r=e.readUInt32BE(20),i=e[25];if(e[24]!==8||e[28]!==0||_g[i]===void 0)return;let s=[];for(let o=8;o+12<=e.length;){let a=e.readUInt32BE(o),c=e.toString("latin1",o+4,o+8);if(c==="IDAT")s.push(e.subarray(o+8,o+8+a));else if(c==="tRNS"||c==="IEND"){if(c==="tRNS"&&i!==4&&i!==6)return;break}o+=12+a}return s.length>0?{width:n,height:r,type:i,idat:s}:void 0}function ZO(t,e,n,r){let i=new Uint8Array(e);for(let s=0;s<n;s++){let o=s*(e+1),a=t[o],c=o+1,u=s>0?t:i,l=s>0?c-e-1:0;if(a===1)for(let f=r;f<e;f++)t[c+f]=t[c+f]+t[c+f-r];else if(a===2)for(let f=0;f<e;f++)t[c+f]=t[c+f]+u[l+f];else if(a===3){for(let f=0;f<r;f++)t[c+f]=t[c+f]+(u[l+f]>>1);for(let f=r;f<e;f++)t[c+f]=t[c+f]+(t[c+f-r]+u[l+f]>>1)}else if(a===4){for(let f=0;f<r;f++)t[c+f]=t[c+f]+u[l+f];for(let f=r;f<e;f++){let d=t[c+f-r],h=u[l+f],p=u[l+f-r],$=Math.abs(h-p),g=Math.abs(d-p),b=Math.abs(d+h-2*p);t[c+f]=t[c+f]+($<=g&&$<=b?d:g<=b?h:p)}}else if(a!==0)throw Error(`bad PNG filter ${a}`)}}function QO(t){let{width:e,height:n,type:r}=t,i=_g[r],s=e*i,o=JO(Buffer.concat(t.idat),{chunkSize:Math.min(268435456,Math.max(65536,n*(s+1)))});if(o.length<n*(s+1))throw Error("truncated PNG");ZO(o,s,n,i);let a=new Uint8Array(e*n*4);for(let c=0;c<n;c++){let u=c*(s+1)+1,l=c*e*4;if(r===6)a.set(o.subarray(u,u+s),l);else if(r===2)for(let f=0,d=u,h=l;f<e;f++,d+=3,h+=4)a[h]=o[d],a[h+1]=o[d+1],a[h+2]=o[d+2],a[h+3]=255;else if(r===0)for(let f=0,d=l;f<e;f++,d+=4){let h=o[u+f];a[d]=h,a[d+1]=h,a[d+2]=h,a[d+3]=255}else for(let f=0,d=u,h=l;f<e;f++,d+=2,h+=4){let p=o[d];a[h]=p,a[h+1]=p,a[h+2]=p,a[h+3]=o[d+1]}}return{width:e,height:n,data:a}}function At(t){let e=VO(t);if(e)return QO(e);let n=Lg.PNG.sync.read(Buffer.from(t));return{width:n.width,height:n.height,data:new Uint8Array(n.data)}}function tr(t,e){if(ti(t)){let n=rn(t);if(n&&n.width*n.height>e)throw Error(`${n.width}×${n.height} is over ${e/1e6} megapixels`);return At(t)}if(t[0]===255&&t[1]===216)return Fg(t,e);throw Error("not a PNG or JPEG image")}function Bg(t,e){let{width:n,height:r,at:i}=e,s=Math.max(0,i.x),o=Math.max(0,i.y),a=Math.min(n,i.x+i.w),c=Math.min(r,i.y+i.h);if(a<=s||c<=o)return;let u={x:s,y:o,w:a-s,h:c-o};if(i.w===t.width&&i.h===t.height)return{part:t,box:u,dx:s-i.x,dy:o-i.y};let l={x:(s-i.x)*t.width/i.w,y:(o-i.y)*t.height/i.h,w:u.w*t.width/i.w,h:u.h*t.height/i.h};return{part:co(t,l,u.w,u.h),box:u,dx:0,dy:0}}function Wg(t,e){let n=new Uint8Array(e.width*e.height*4),r=Bg(t,e);if(r){let{part:i,box:s,dx:o,dy:a}=r;for(let c=0;c<s.h;c++){let u=((c+a)*i.width+o)*4;n.set(i.data.subarray(u,u+s.w*4),((s.y+c)*e.width+s.x)*4)}}return{width:e.width,height:e.height,data:n}}function er(t,e,n,r={width:t.width,height:t.height,at:{x:0,y:0,w:t.width,h:t.height}}){let i=nt(e),{width:s,height:o}=r,a=new Uint8Array(s*o*3);for(let h=0;h<s*3;h+=3)a.set(i,h);for(let h=1;h<o;h++)a.copyWithin(h*s*3,0,s*3);let c=Bg(t,r);if(!c)return{width:s,height:o,data:a};let{part:u,box:l,dx:f,dy:d}=c;for(let h=0;h<l.h;h++)for(let p=0;p<l.w;p++){let $=((h+d)*u.width+p+f)*4,g=((l.y+h)*s+l.x+p)*3,b=u.data[$+3]/255*n;for(let y=0;y<3;y++)a[g+y]=Math.round(i[y]*(1-b)+u.data[$+y]*b)}return{width:s,height:o,data:a}}function Cg(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 rn(t){if(t.length<33||!ti(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=Cg(t,"IDAT");return{width:n,height:r,alpha:Cg(i===-1?t:t.subarray(0,i),"tRNS")!==-1}}function Ug(t,e=jg){let{width:n,height:r,data:i}=t,s=(l)=>{for(let f=l*n*4+3,d=f+n*4;f<d;f+=4)if(i[f]>=e)return!0;return!1},o=0;while(o<r&&!s(o))o++;if(o===r)return null;let a=r-1;while(!s(a))a--;let c=n,u=-1;for(let l=o;l<=a;l++){let f=l*n*4+3;for(let d=0;d<c;d++)if(i[f+d*4]>=e){c=d;break}for(let d=n-1;d>u;d--)if(i[f+d*4]>=e){u=d;break}}return{x:c,y:o,w:u-c+1,h:a-o+1}}function In(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)<jg)n++;return Math.round(n*100/(e.w*e.h))}function Kg(t,e,n){let r=Math.min(e/t.width,n/t.height),i=Math.max(1,Math.round(t.width*r)),s=Math.max(1,Math.round(t.height*r)),o=co(t,{x:0,y:0,w:t.width,h:t.height},i,s),a=new Uint8Array(e*n*4),c=Math.floor((e-i)/2),u=Math.floor((n-s)/2);for(let l=0;l<s;l++)a.set(o.data.subarray(l*i*4,(l+1)*i*4),((u+l)*e+c)*4);return{width:e,height:n,data:a}}function XO(t){let e=Math.abs(t);if(e<1)return(7*e*e*e-12*e*e+5.333333333333333)/6;if(e<2)return(-2.3333333333333335*e*e*e+12*e*e-20*e+10.666666666666666)/6;return 0}function ef(t,e,n,r){if(n===r&&Number.isInteger(e)&&e>=0&&e+r<=t)return{first:Int32Array.from({length:r},(l,f)=>e+f),size:1,weights:new Float32Array(r).fill(1)};let i=n/r,s=Math.max(1,i),o=2*s,a=Math.min(t,Math.ceil(2*o)+2),c=new Int32Array(r),u=new Float32Array(r*a);for(let l=0;l<r;l++){let f=e+(l+0.5)*i,d=Math.floor(f-o-0.5),h=Math.max(0,Math.min(t-a,d));c[l]=h;let p=0;for(let $=d;$<=Math.ceil(f+o-0.5);$++){let g=XO(($+0.5-f)/s),b=l*a+Math.min(t-1,Math.max(0,$))-h;u[b]=(u[b]??0)+g,p+=g}for(let $=l*a;$<(l+1)*a;$++)u[$]=(u[$]??0)/p}return{first:c,size:a,weights:u}}function zg(t,e,n,r,i,s,o){let a=ef(t,e.y,e.h,r),c=n*i,u=a.size+1,l=Array.from({length:u},()=>new Float32Array(c)),f=new Int32Array(u).fill(-1),d=new Float32Array(c),h=[],p=[];for(let $=0;$<r;$++){h.length=0,p.length=0;let g=a.first[$];for(let y=0;y<a.size;y++){let S=a.weights[$*a.size+y];if(S===0)continue;let E=g+y,I=E%u,N=l[I];if(f[I]!==E)s(E,N),f[I]=E;h.push(N),p.push(S)}let b=0;while(b<h.length){let y=h[b],S=p[b];if(h.length-b>=4){let E=h[b+1],I=h[b+2],N=h[b+3],R=p[b+1],F=p[b+2],j=p[b+3];if(b===0)for(let B=0;B<c;B++)d[B]=y[B]*S+E[B]*R+I[B]*F+N[B]*j;else for(let B=0;B<c;B++)d[B]=d[B]+(y[B]*S+E[B]*R+I[B]*F+N[B]*j);b+=4}else{if(b===0)for(let E=0;E<c;E++)d[E]=y[E]*S;else for(let E=0;E<c;E++)d[E]=d[E]+y[E]*S;b+=1}}if(h.length===0)d.fill(0);o($,d)}}function Dg(t,e,n,r,i){let s=0,o=n;while(s<o){let c=s+o>>1;if(t[c]+e-1<r)s=c+1;else o=c}let a=s;o=n;while(s<o){let c=s+o>>1;if(t[c]<=i)s=c+1;else o=c}return[a,s]}function co(t,e,n,r){let i=ef(t.width,e.x,e.w,n),s=t.data,o=t.width,a=new Float32Array(o*4),c=new Uint8Array(n*r*4);return zg(t.height,e,n,r,4,(u,l)=>{let f=u*o*4,d=o,h=-1;for(let g=0,b=0;g<o*4;g+=4,b++){let y=s[f+g+3];if(y===0){a[g]=0,a[g+1]=0,a[g+2]=0,a[g+3]=0;continue}if(b<d)d=b;h=b,a[g]=s[f+g]*y,a[g+1]=s[f+g+1]*y,a[g+2]=s[f+g+2]*y,a[g+3]=y}if(l.fill(0),h<0)return;let[p,$]=Dg(i.first,i.size,n,d,h);for(let g=p;g<$;g++){let b=i.first[g]*4,y=g*i.size,S=0,E=0,I=0,N=0;for(let R=0;R<i.size;R++){let F=i.weights[y+R],j=b+R*4;S+=a[j]*F,E+=a[j+1]*F,I+=a[j+2]*F,N+=a[j+3]*F}l[g*4]=S,l[g*4+1]=E,l[g*4+2]=I,l[g*4+3]=N}},(u,l)=>{let f=u*n*4;for(let d=0;d<n;d++){let h=d*4,p=l[h+3];if(p<=0)continue;let $=l[h]/p;c[f+h]=($<0?0:$>255?255:$)+0.5,$=l[h+1]/p,c[f+h+1]=($<0?0:$>255?255:$)+0.5,$=l[h+2]/p,c[f+h+2]=($<0?0:$>255?255:$)+0.5,c[f+h+3]=(p>255?255:p)+0.5}}),{width:n,height:r,data:c}}function qg(t,e,n,r){let i=ef(t.width,e.x,e.w,n),s=t.data,o=t.width,a=new Float32Array(n*r);return zg(t.height,e,n,r,1,(c,u)=>{let l=c*o,f=o,d=-1;for(let $=0;$<o;$++)if(s[l+$]!==0){if($<f)f=$;d=$}if(u.fill(0),d<0)return;let[h,p]=Dg(i.first,i.size,n,f,d);for(let $=h;$<p;$++){let g=l+i.first[$],b=$*i.size,y=0;for(let S=0;S<i.size;S++)y+=s[g+S]*i.weights[b+S];u[$]=y}},(c,u)=>{a.set(u,c*n)}),{width:n,height:r,data:a}}function uo(t,e){if(e<=0)return t;let n=Math.max(1,Math.ceil(e*3)),r=Array.from({length:2*n+1},(l,f)=>Math.exp(-((f-n)**2)/(2*e*e))),i=r.reduce((l,f)=>l+f,0),{width:s,height:o,data:a}=t,c=new Float32Array(s*o);for(let l=0;l<o;l++){let f=l*s;for(let d=0;d<s;d++){let h=0;for(let p=-n;p<=n;p++)h+=(a[f+Math.min(s-1,Math.max(0,d+p))]??0)*(r[p+n]??0);c[f+d]=h/i}}let u=new Float32Array(s*o);for(let l=0;l<o;l++){let f=l*s;for(let d=-n;d<=n;d++){let h=(r[d+n]??0)/i,p=Math.min(o-1,Math.max(0,l+d))*s;for(let $=0;$<s;$++)u[f+$]=(u[f+$]??0)+(c[p+$]??0)*h}}return{width:s,height:o,data:u}}function lo(t){let e=new Uint8Array(t.data.length);for(let n=0;n<e.length;n++){let r=t.data[n];e[n]=(r<0?0:r>255?255:r)+0.5}return{width:t.width,height:t.height,data:e}}function ei(t){let e=new Uint8Array(t.width*t.height);for(let n=0;n<e.length;n++)e[n]=t.data[n*4+3]??0;return{width:t.width,height:t.height,data:e}}var tI=Array.from({length:256},(t,e)=>{let n=e;for(let r=0;r<8;r++)n=n&1?3988292384^n>>>1:n>>>1;return n>>>0});function eI(t){let e=4294967295;for(let n of t)e=(tI[(e^n)&255]??0)^e>>>8;return(e^4294967295)>>>0}function Xn(t,e){let n=Buffer.alloc(12+e.length);return n.writeUInt32BE(e.length,0),n.write(t,4,"latin1"),n.set(e,8),n.writeUInt32BE(eI(n.subarray(4,8+e.length)),8+e.length),n}function Yg(t,e,n){let r=new Uint8Array(n*(e+1));r.set(t.subarray(0,e),1);for(let i=1;i<n;i++){let s=i*(e+1),o=i*e,a=o-e;r[s]=2;for(let c=0;c<e;c++)r[s+1+c]=t[o+c]-t[a+c]}return r}function Jg(t){return YO(t,{level:1,strategy:qO.Z_RLE})}function Vg(t,e,n){let r=Buffer.alloc(13);return r.writeUInt32BE(t.width,0),r.writeUInt32BE(t.height,4),r[8]=8,r[9]=e,Buffer.concat([Buffer.from(ts),Xn("IHDR",r),...n,Xn("IDAT",Jg(Yg(t.data,t.width,t.height))),Xn("IEND",new Uint8Array)])}function Zg(t){let[e,n,r]=nt(t),i=new Uint8Array(768);for(let s=0;s<256;s++)i.set([e,n,r],s*3);return Xn("PLTE",i)}function Qg(t,e,n,r,i){let s=Buffer.alloc(13);return s.writeUInt32BE(t,0),s.writeUInt32BE(e,4),s[8]=8,s[9]=n,Buffer.concat([Buffer.from(ts),Xn("IHDR",s),Xn("IDAT",Jg(Yg(i,t*r,e))),Xn("IEND",new Uint8Array)])}function nr(t){return Qg(t.width,t.height,2,3,t.data)}function sn(t){return Qg(t.width,t.height,6,4,t.data)}function ni(t,e){return Vg(t,Gg,[Zg(e),Xn("tRNS",Uint8Array.from({length:256},(n,r)=>r))])}function nf(t){return Vg(t,0,[])}function ja(t,e){if(!ti(t)||t[25]!==Gg)return;let n=Buffer.from(t.buffer,t.byteOffset,t.byteLength),r=[Buffer.from(ts)],i=ts.length;while(i+8<=n.length){let s=i+12+n.readUInt32BE(i);r.push(n.toString("latin1",i+4,i+8)==="PLTE"?Zg(e):n.subarray(i,s)),i=s}return Buffer.concat(r)}var rr=100,me=25000000,cI=536870912,es=["safe","questionable","explicit"],ri=["nudity","underwear"],af=["comic","monochrome","sketch","chibi"],ab=["off","5","10","25","50","100"],cb=["off","720","1080","1440","1800","2560"],ub={nudity:new Set(["nude","naked","topless","bottomless","nipples","naked_towel","undressing"]),underwear:new Set(["underwear","panties","pantsu","bra","lingerie","pantyshot"])},uI={comic:new Set(["comic","4koma"]),monochrome:new Set(["monochrome","greyscale"]),sketch:new Set(["sketch","lineart","line_art"]),chibi:new Set(["chibi"])},lI=/^(?:rating|score|width|height|filetype|dimension):/,fo={safe:"s",questionable:"q",explicit:"e"},lb=8191,fI=20000,dI=5000,Xg=3000,tb=8,hI=8,mI=8000,pI=3000,fb=60000,eb=3,gI=3,bI="https://static.zerochan.net",db="https://s1.zerochan.net",cf=`ttheme/${xt.version} (+${xt.homepage})`,wI=["orig","tile","thumb","cut"],hb=new Map,$I=CI(process.env.TTHEME_FIND_HOSTS),kI=FI(process.env.TTHEME_FIND_CUTOUTS);sI(pI);var yI=["artist","character","copyright"];function nb(t){try{return nI(t)}catch{return[]}}function ns(t){return t.startsWith("//")?`https:${t}`:t}function sr(t){return(/\.([a-z0-9]+)(?:\?.*)?$/i.exec(t)?.[1]??"").toLowerCase()}function mo(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 vI(t){let e=t.trim(),r=(e?JSON.parse(e):{}).tags??{};return new Map(Object.entries(r).map(([i,s])=>[i,String(s)]))}function sf(t,e,n){let r=ns(String(t??""));return{file:r,width:Number(e)||0,height:Number(n)||0,ext:sr(r)}}function xn(t){return String(t??"").split(/\s+/).filter(Boolean)}function of(t){let e=typeof t==="number"?new Date(t*1000):typeof t==="string"?new Date(t):void 0;return e&&!Number.isNaN(e.getTime())?e.toISOString().slice(0,10):void 0}function mb(t,e){let n=ns(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??""),score:Number(t.score)||0,rating:String(t.rating??""),md5:String(e.md5??""),source:String(t.source??""),tags:xn(e.tags),named:e.named,...of(t.created_at)?{posted:of(t.created_at)}:{},solo:e.solo,family:Number(t.parent_id)||(t.has_children===!0?Number(t.id):0),smaller:e.versions.filter((s)=>s.file&&s.width>0&&s.height>0&&s.width*s.height<r*i)}]}function SI(t){let e=vI(t);return mo(t).flatMap((n)=>{let r=ns(String(n.file_url??"")),i=String(n.tags??""),s=(o)=>xn(i).filter((a)=>e.get(a)===o);return mb(n,{preview:n.preview_url,file:r,ext:String(n.file_ext||sr(r)).toLowerCase(),owner:n.author,md5:n.md5,tags:i,named:{artist:s("artist"),character:s("character"),copyright:s("copyright")},solo:void 0,versions:[sf(n.jpeg_url,n.jpeg_width,n.jpeg_height),sf(n.sample_url,n.sample_width,n.sample_height)]})})}function EI(t){return mo(t).flatMap((e)=>{let n=ns(String(e.file_url??"")),r=String(e.tag_string??""),i=e.media_asset??{};return mb(e,{preview:i.variants?.find((s)=>s.type==="360x360")?.url??e.preview_file_url,file:n,ext:String(e.file_ext||sr(n)).toLowerCase(),owner:"",md5:e.md5,tags:r,named:{artist:xn(e.tag_string_artist),character:xn(e.tag_string_character),copyright:xn(e.tag_string_copyright)},solo:r.split(/\s+/).includes("solo"),versions:(i.variants??[]).map((s)=>sf(s.url,s.width,s.height)).filter((s)=>s.ext==="jpg"||s.ext==="png").sort((s,o)=>o.width*o.height-s.width*s.height)})})}function pb(t){return t.toLowerCase().replace(/\s+/g,"_")}function MI(t){return(Array.isArray(t)?t:[]).map((e)=>pb(String(e)))}function OI(t){return String(t??"").replace(/[^0-9a-z]+/gi,".").replace(/^\.+|\.+$/g,"")||"zerochan"}function II(t){let e=t.trim(),n=e?JSON.parse(e):{};return(Array.isArray(n.items)?n.items:n.id?[n]:[]).flatMap((i)=>{let s=Number(i.id);if(!s)return[];let o=MI(i.tags),a=ns(String(i.full??""));return[{id:s,width:Number(i.width)||0,height:Number(i.height)||0,file:a,ext:sr(a),preview:`${db}/${OI(i.tag??i.primary)}.600.${s}.jpg`,owner:"",score:0,rating:o.some((c)=>ub.nudity.has(c))?"q":"g",md5:String(i.md5??i.hash??""),source:String(i.source??""),tags:o,named:{artist:[],character:[],copyright:[]},solo:o.includes("solo"),family:0,smaller:[]}]})}var xI={mangaka:"artist",studio:"artist",character:"character",series:"copyright",game:"copyright"};function rb(t){return t.replace(/&(?:#(\d+)|amp|quot|apos|lt|gt);/g,(e,n)=>n?String.fromCharCode(Number(n)):{"&amp;":"&","&quot;":'"',"&apos;":"'","&lt;":"<","&gt;":">"}[e]??e)}function NI(t){let e={artist:[],character:[],copyright:[]};for(let[,r,i]of t.matchAll(/<li class="([a-z]+)[^"]*"[^>]*\bdata-tag="([^"]*)"/g)){let s=xI[r],o=pb(rb(i));if(s&&!e[s].includes(o))e[s].push(o)}let n=of(/"datePublished":\s*"([^"]+)"/.exec(t)?.[1]);return{named:e,source:"",owner:rb(/\buploader = \{\s*name: '([^']*)'/.exec(t)?.[1]??""),...n?{posted:n}:{}}}function RI(t){return Number(/Zerochan has ([\d,]+) /.exec(t)?.[1]?.replace(/,/g,"")??0)}function TI(t){return mo(t).flatMap((e)=>{let n=String(e.value??"");return n?[{value:n,count:Number(e.post_count)||0}]:[]})}function PI(t){return mo(t).flatMap((e)=>{let n=String(e.name??"");return n?[{value:n,count:Number(e.count)||0}]:[]})}function HI(t){return Number(/count="(\d+)"/.exec(t)?.[1]??0)}function AI(t){let n=(t.trim()?JSON.parse(t):{}).counts?.posts;return n===null?Number.NaN:Number(n)||0}function FI(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 CI(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 s=new URL(n.slice(r+1));if(i&&s.protocol==="https:")e.set(i,s.origin)}catch{}}return e}function Ga(t,e,n,r){let i=(t??"").split(/\s+/);if(r!==void 0&&i.includes(r))return[];let s=e.filter((o)=>i.includes(o));return s.length>0?s:[...n]}function ii(t){return Ga(t,es,["safe"])}function rs(t){return Ga(t,ri,ri,"none")}function _a(t){return Ga(t,af,[],"none")}function po(t){let e=Y.map((n)=>n.name);return Ga(t,e,e)}function uf(t,e,n){return{score:Number(t)||0,size:Number(e)||0,png:n==="on"}}function go(t){return[...new Set((t??"").toLowerCase().split(/[\s,]+/).map((e)=>e.replace(/^-+/,"")).filter(Boolean))]}function lf(t,e,n){return{safe:new Set(t),questionable:new Set(e),explicit:new Set(n)}}function ff(t){let e=$I.get(t.key),n=kI.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 gb(t){return t.length<2?t.join(""):t.map((e)=>`~${e}`).join(" ")}function bb(t){return t>0?[`width:>=${t}`,`height:>=${t}`]:[]}function ib(t){let e=ff(t),n=(r)=>new URLSearchParams({api_version:"2",include_tags:"1",...r});return{...e,scored:!0,narrow:({score:r,size:i})=>[...r>0?[`score:>=${r}`]:[],...bb(i)],cutouts:gb(e.cutouts),ratings:lf([fo.safe],[fo.questionable],[fo.explicit]),rate:(r)=>{let[i]=r;if(r.length===1&&i)return`rating:${fo[i]}`;let s=es.filter((a)=>!r.includes(a)),[o]=s;return s.length===1&&o?`-rating:${fo[o]}`:""},best:"order:score",tagBudget:Number.POSITIVE_INFINITY,ors:!0,postsUrl:(r,i)=>`${e.origin}/post.json?${n({limit:String(rr),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:SI,count:HI,uploadedBy:(r)=>`user:${r}`}}function LI(t){let e=ff(t),n=lf(["g"],["s","q"],["e"]);return{...e,scored:!0,narrow:({score:r,size:i,png:s})=>[...r>0?[`score:>=${r}`]:[],...bb(i),...s?["filetype:png"]:[]],cutouts:gb(e.cutouts),ratings:n,rate:(r)=>r.length===es.length?"":`rating:${r.flatMap((i)=>[...n[i]]).join(",")}`,best:"order:score",tagBudget:2,ors:!0,postsUrl:(r,i)=>`${e.origin}/posts.json?${new URLSearchParams({limit:String(rr),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:EI,count:AI,uploadedBy:(r)=>`user:${r}`}}function rf(t){return t.split(/\s+/).filter((e)=>e&&!/^(?:order|dimension):/.test(e)).map((e)=>e.split("_").map(encodeURIComponent).join("+")).join(",")}function sb(t){let e=t.split(/\s+/),n=e.find((r)=>r.startsWith("dimension:"))?.slice(10);return{s:e.includes("order:fav")?"fav":"id",...n?{d:n}:{}}}function jI(t){let e=ff(t);return{...e,scored:!1,narrow:({size:n})=>n>=1800?["dimension:huge"]:n>0?["dimension:large"]:[],cutouts:e.cutouts[0]??"",ratings:lf(["g"],["q"],["e"]),rate:()=>"",best:"order:fav",tagBudget:3,ors:!1,missing:404,postsUrl:(n,r)=>`${e.origin}/${rf(n)}?${new URLSearchParams({json:"",l:String(rr),p:String(r+1),...sb(n)})}`,countUrl:(n)=>`${e.origin}/${rf(n)}?${new URLSearchParams({xml:"",l:"1"})}`,postUrl:(n)=>`${e.origin}/${n}?json=`,pageUrl:(n)=>`${e.origin}/${n}`,parse:II,count:RI,credits:NI,counts:(n)=>rf(n).split(",").length===1&&!("d"in sb(n)),guesses:(n)=>(n.tags.includes("transparent_background")?["png","jpg"]:["jpg","png"]).map((r)=>n.preview.replace(db,bI).replace(/\.600\.(\d+)\.jpg$/,`.full.$1.${r}`))}}function GI(t){let e=ob(`https://${t}`);return Y.find((n)=>ob(n.origin)===e)}function df(t){return t.split(/\s+/).filter((e)=>e&&!lI.test(e)).length}function Ba(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 a=Y.find((c)=>c.key===r[1]||c.name===r[1]);return a&&{site:a,id:Number(r[2])}}let i;try{i=new URL(n)}catch{return}let s=GI(i.host),o=Number(i.searchParams.get("id")??i.pathname.split("/").filter(Boolean).at(-1));return s&&o>0?{site:s,id:o}:void 0}var Y=[LI({key:"danbooru",name:"danbooru",origin:"https://shima.donmai.us",cutouts:["transparent_background"],vouched:!1,ansi:2}),ib({key:"konachan",name:"konachan",origin:"https://konachan.net",cutouts:["transparent","vector"],vouched:!1,ansi:6}),ib({key:"yande",name:"yande.re",origin:"https://yande.re",cutouts:["transparent_png"],vouched:!0,ansi:5}),jI({key:"zerochan",name:"zerochan",origin:"https://www.zerochan.net",cutouts:["transparent_background"],vouched:!1,ansi:3})],Zt=Y.find((t)=>t.key==="danbooru"),or=134217728;function pe(t,e){let n=Y.indexOf(t);return(n===-1?Y.length:n)*or+e}function ob(t){let e;try{e=new URL(t).hostname}catch{return""}return e.split(".").slice(-2).join(".")}function si(t,e,n=e){return e.mirror&&n===e?{site:Zt,url:e.mirror.file}:{site:t,url:n.file}}function Wa(t,e){return e.mirror?{site:Zt,url:e.mirror.preview}:{site:t,url:e.preview}}function Ua(t,e=ri){return t.tags.filter((n)=>e.some((r)=>ub[r].has(n)))}function wb(t,e){return t.tags.filter((n)=>e.some((r)=>uI[r].has(n)))}function Ka(t,e,n=["safe"]){return n.some((r)=>t.ratings[r].has(e.rating))}function $b(t,e){return t.rate(["safe"])===""?void 0:es.find((n)=>t.ratings[n].has(e.rating))}function on(t){return[t,...t.smaller].find((e)=>e.width*e.height<=me)}function kb(t){let e=new Map;for(let[n,r]of[...t].sort(([i],[s])=>i<s?-1:1)){if(r==="")continue;e.set(r,[...e.get(r)??[],n])}return e}function ar(){return ho(process.env.XDG_CACHE_HOME??ho(oI(),".cache"),"ttheme")}function _e(t){return ho(ar(),t.key)}function yb(t=cI,e=ar()){let n=[],r=0;for(let i of nb(e))for(let s of wI){let o=ho(e,i,s);for(let a of nb(o)){let c=ho(o,a);try{let{size:u,mtimeMs:l}=iI(c);n.push({path:c,size:u,at:l}),r+=u}catch{}}}n.sort((i,s)=>i.at-s.at);for(let i of n){if(r<=t)return;try{rI(i.path,{force:!0}),r-=i.size}catch{}}}function _I(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)?fb:Math.max(0,n-e)}function Nn(t){return hb.get(t.key)??0}function BI(t){for(let e=t;e instanceof Error;e=e.cause)if(e.code==="ECONNRESET")return!0;return!1}function WI(t){return(t.headers.get("server")??"").startsWith("cloudflare")&&t.headers.get("cf-mitigated")==="challenge"}function UI(t,e){let n=new URL(e,t);if(!n.search)n.search=new URL(t).search;return n.href}async function ir(t,e,n,r={},i=fI){let s=e;for(let o=1,a=0;;o++){let c=Nn(t)-Date.now();if(c>0)await aI(c,void 0,{signal:n});let u;try{u=await fetch(s,{headers:{"User-Agent":cf,Referer:`${t.origin}/`,...r},redirect:"manual",signal:i?AbortSignal.any([n,AbortSignal.timeout(i)]):n})}catch(f){if(o<eb&&!n.aborted&&BI(f))continue;throw f}let l=u.headers.get("location");if(l&&u.status>=300&&u.status<400&&a<gI){await u.body?.cancel(),s=UI(s,l),a++,o--;continue}if(u.status===429&&o<eb){await u.body?.cancel();let f=_I(u.headers.get("retry-after"),Date.now());if(f>fb)throw Error(`${t.name} asks to wait ${Math.ceil(f/1000)}s`);hb.set(t.key,Math.max(Nn(t),Date.now()+f));continue}if(!u.ok)throw await u.body?.cancel(),Object.assign(Error(WI(u)?`${t.name} is behind a Cloudflare challenge`:`${t.name} answered ${u.status}`),{status:u.status});return u}}async function za(t,e,n){try{return await(await ir(t,e,n)).text()}catch(r){if(t.missing!==void 0&&r.status===t.missing)return"";throw r}}async function vb(t,e,n,r){return t.parse(await za(t,t.postsUrl(e,n),r))}async function hf(t,e,n){return t.count(await za(t,t.countUrl(e),n))}async function is(t,e,n){let[r]=t.parse(await za(t,t.postUrl(e),n));return r}async function Da(t,e,n){return t.credits?.(await za(t,t.pageUrl(e),n))}var KI=/^https?:\/\/(?:i\.pximg\.net|i\d*\.pixiv\.net|img\d*\.pixiv\.net)\/\S*\/(\d+)(?:_p\d+)?(?:_\w+)?\.\w+(?:[?#]\S*)?$/i,zI=/^https?:\/\/(?:www\.)?pixiv\.net\/member_illust\.php\?\S*\billust_id=(\d+)/i;function bo(t){let e=KI.exec(t)?.[1]??zI.exec(t)?.[1];return e?`https://www.pixiv.net/artworks/${e}`:t}function qa(t,e){return t.credits!==void 0&&e.named.artist.length===0}function wo(t,e){for(let n of yI){let r=e.named?.[n]??[];if(t.named[n].length===0&&r.length>0)t.named[n]=r}if(t.source||=e.source??"",t.owner||=e.owner??"",!t.posted&&e.posted)t.posted=e.posted}function DI(t){let e=new URLSearchParams({limit:String(2*rr),only:"md5,tag_string,tag_string_artist,tag_string_character,tag_string_copyright,source,file_url",tags:`md5:${t.join(",")}`});return`${Zt.origin}/posts.json?${e}`}function qI(t){return new Map(mo(t).flatMap((e)=>{let n=String(e.md5??"");return n?[[n,{tags:xn(e.tag_string),named:{artist:xn(e.tag_string_artist),character:xn(e.tag_string_character),copyright:xn(e.tag_string_copyright)},source:String(e.source??""),file:ns(String(e.file_url??""))}]]:[]}))}function Ya(t,e){for(let n of t){let r=e.get(n.md5);if(!r)continue;if(n.tags=[...new Set([...n.tags,...r.tags])],wo(n,r),n.solo=r.tags.includes("solo"),r.file.includes("/original/")){if(n.mirror={file:r.file,preview:r.file.replace("/original/","/360x360/").replace(/\.[a-z0-9]+$/i,".jpg")},!n.file)n.file=r.file,n.ext=sr(r.file)}}}async function Ja(t,e){let n=new Map;if(Nn(Zt)>Date.now())return n;for(let r=0;r<t.length;r+=rr){let i=await(await ir(Zt,DI(t.slice(r,r+rr)),e,{},dI)).text();for(let[s,o]of qI(i))n.set(s,o)}return n}async function $o(t,e,n){if(e.file||!t.guesses)return;for(let r of t.guesses(e))try{let i=await ir(t,r,n,{Range:`bytes=0-${lb}`}),s=rn(new Uint8Array(await i.arrayBuffer()));return e.file=r,e.ext=sr(r),s}catch(i){if(n.aborted||i.status!==404)throw i}throw Error(`${t.name} keeps no png or jpg of ${e.id}`)}async function Sb(t,e){if(Nn(Zt)<=Date.now())try{let i=new URLSearchParams({"search[query]":t,"search[type]":"tag_query",limit:String(tb)}),s=`${Zt.origin}/autocomplete.json?${i}`;return TI(await(await ir(Zt,s,e,{},Xg)).text())}catch(i){if(e.aborted)throw i}let n=Y.find((i)=>i.key==="yande"),r=new URLSearchParams({name:t,order:"count",limit:String(tb)});return PI(await(await ir(n,`${n.origin}/tag.json?${r}`,e,{},Xg)).text())}function YI(t){try{return(JSON.parse(t).related_tags??[]).flatMap(({tag:n})=>n?.name?[{value:n.name,count:Number(n.post_count)||0}]:[])}catch{return[]}}async function Eb(t,e){if(Nn(Zt)>Date.now())return[];let n=new URLSearchParams({"search[query]":t,"search[category]":"character",limit:String(hI)});return YI(await(await ir(Zt,`${Zt.origin}/related_tag.json?${n}`,e,{},mI)).text())}function Mb(t,e){return e.slice(0,t.ors?t.tagBudget:1)}async function Ob(t,e,n){let r=await ir(t,e,n,{Range:`bytes=0-${lb}`});return rn(new Uint8Array(await r.arrayBuffer()))}async function Va(t,e,n,r){let i=await ir(t,e,n,{},0),s=Number(i.headers.get("content-length"))||0,o=i.body?.getReader();if(!o)return new Uint8Array(await i.arrayBuffer());let a=[],c=0;for(;;){let{done:f,value:d}=await o.read();if(f)break;a.push(d),c+=d.length,r?.(c,s)}let u=new Uint8Array(c),l=0;for(let f of a)u.set(f,l),l+=f.length;return u}var nx=12,rx=/^[0-9a-f]{40}$/;function ss(){return os(ar(),"drawn")}function Ib(t){return JI("sha1").update(JSON.stringify(t)).digest("hex")}function xb(t){return VI(os(ss(),t))}function Nb(t){let e=os(ss(),t);try{let n=QI(e),r=n.readUInt32BE(0),i=JSON.parse(n.toString("utf8",4,4+r)),s=n.subarray(4+r,4+r+i.figure),o=n.subarray(4+r+i.figure,4+r+i.figure+i.picture);if(s.length!==i.figure||o.length!==i.picture)return;let a=new Date;return ex(e,a,a),{stem:i.stem,fill:i.fill,...i.peak?{peak:i.peak}:{},figure:s,picture:o}}catch{return}}function mf(t,e){let n=Buffer.from(JSON.stringify({stem:e.stem,fill:e.fill,...e.peak?{peak:e.peak}:{},figure:e.figure.length,picture:e.picture.length})),r=Buffer.alloc(4);r.writeUInt32BE(n.length),H(os(ss(),t),Buffer.concat([r,n,e.figure,e.picture])),ix()}function ix(){let t=ZI(ss()).filter((e)=>rx.test(e)).flatMap((e)=>{try{return[{name:e,at:tx(os(ss(),e)).mtimeMs}]}catch{return[]}}).sort((e,n)=>n.at-e.at);for(let{name:e}of t.slice(nx))XI(os(ss(),e),{force:!0})}import{readdirSync as fx,readFileSync as jb}from"node:fs";import{basename as dx,join as Gb}from"node:path";/*!
2
+ import{createRequire as BM}from"node:module";var HM=Object.create;var{getPrototypeOf:FM,defineProperty:Hp,getOwnPropertyNames:CM}=Object;var LM=Object.prototype.hasOwnProperty;function jM(t){return this[t]}var _M,GM,Ll=(t,e,n)=>{var r=t!=null&&typeof t==="object";if(r){var i=e?_M??=new WeakMap:GM??=new WeakMap,s=i.get(t);if(s)return s}n=t!=null?HM(FM(t)):{};let o=e||!t||!t.__esModule?Hp(n,"default",{value:t,enumerable:!0}):n;for(let a of CM(t))if(!LM.call(o,a))Hp(o,a,{get:jM.bind(t,a),enumerable:!0});if(r)i.set(t,o);return o};var $t=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var zt=BM(import.meta.url);var ql=$t((v3,ig)=>{var aO=zt("util"),rg=zt("stream"),We=ig.exports=function(){rg.call(this),this._buffers=[],this._buffered=0,this._reads=[],this._paused=!1,this._encoding="utf8",this.writable=!0};aO.inherits(We,rg);We.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))};We.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};We.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()};We.prototype.destroySoon=We.prototype.end;We.prototype._end=function(){if(this._reads.length>0)this.emit("error",Error("Unexpected end of input"));this.destroy()};We.prototype.destroy=function(){if(!this._buffers)return;this.writable=!1,this._reads=null,this._buffers=null,this.emit("close")};We.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)};We.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++],s=Math.min(i.length,t.length-e);if(i.copy(r,e,0,s),e+=s,s!==i.length)this._buffers[--n]=i.slice(s)}if(n>0)this._buffers.splice(0,n);this._buffered-=t.length,t.func.call(this,r)};We.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 Yl=$t((cO)=>{var rr=[{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]}];cO.getImagePasses=function(t,e){let n=[],r=t%8,i=e%8,s=(t-r)/8,o=(e-i)/8;for(let a=0;a<rr.length;a++){let c=rr[a],u=s*c.x.length,l=o*c.y.length;for(let f=0;f<c.x.length;f++)if(c.x[f]<r)u++;else break;for(let f=0;f<c.y.length;f++)if(c.y[f]<i)l++;else break;if(u>0&&l>0)n.push({width:u,height:l,index:a})}return n};cO.getInterlaceIterator=function(t){return function(e,n,r){let i=e%rr[r].x.length,s=(e-i)/rr[r].x.length*8+rr[r].x[i],o=n%rr[r].y.length,a=(n-o)/rr[r].y.length*8+rr[r].y[o];return s*4+a*t*4}}});var Jl=$t((S3,sg)=>{sg.exports=function(e,n,r){let i=e+n-r,s=Math.abs(i-e),o=Math.abs(i-n),a=Math.abs(i-r);if(s<=o&&s<=a)return e;if(o<=a)return n;return r}});var Vl=$t((M3,ag)=>{var fO=Yl(),dO=Jl();function og(t,e,n){let r=t*e;if(n!==8)r=Math.ceil(r/(8/n));return r}var ns=ag.exports=function(t,e){let{width:n,height:r,interlace:i,bpp:s,depth:o}=t;if(this.read=e.read,this.write=e.write,this.complete=e.complete,this._imageIndex=0,this._images=[],i){let a=fO.getImagePasses(n,r);for(let c=0;c<a.length;c++)this._images.push({byteWidth:og(a[c].width,s,o),height:a[c].height,lineIndex:0})}else this._images.push({byteWidth:og(n,s,o),height:r,lineIndex:0});if(o===8)this._xComparison=s;else if(o===16)this._xComparison=s*2;else this._xComparison=1};ns.prototype.start=function(){this.read(this._images[this._imageIndex].byteWidth+1,this._reverseFilterLine.bind(this))};ns.prototype._unFilterType1=function(t,e,n){let r=this._xComparison,i=r-1;for(let s=0;s<n;s++){let o=t[1+s],a=s>i?e[s-r]:0;e[s]=o+a}};ns.prototype._unFilterType2=function(t,e,n){let r=this._lastLine;for(let i=0;i<n;i++){let s=t[1+i],o=r?r[i]:0;e[i]=s+o}};ns.prototype._unFilterType3=function(t,e,n){let r=this._xComparison,i=r-1,s=this._lastLine;for(let o=0;o<n;o++){let a=t[1+o],c=s?s[o]:0,u=o>i?e[o-r]:0,l=Math.floor((u+c)/2);e[o]=a+l}};ns.prototype._unFilterType4=function(t,e,n){let r=this._xComparison,i=r-1,s=this._lastLine;for(let o=0;o<n;o++){let a=t[1+o],c=s?s[o]:0,u=o>i?e[o-r]:0,l=o>i&&s?s[o-r]:0,f=dO(u,c,l);e[o]=a+f}};ns.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 lg=$t((O3,ug)=>{var hO=zt("util"),cg=ql(),mO=Vl(),pO=ug.exports=function(t){cg.call(this);let e=[],n=this;this._filter=new mO(t,{read:this.read.bind(this),write:function(r){e.push(r)},complete:function(){n.emit("complete",Buffer.concat(e))}}),this._filter.start()};hO.inherits(pO,cg)});var rs=$t((x3,fg)=>{fg.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 Xl=$t((I3,dg)=>{var Zl=[];(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;Zl[t]=e}})();var Ql=dg.exports=function(){this._crc=-1};Ql.prototype.write=function(t){for(let e=0;e<t.length;e++)this._crc=Zl[(this._crc^t[e])&255]^this._crc>>>8;return!0};Ql.prototype.crc32=function(){return this._crc^-1};Ql.crc32=function(t){let e=-1;for(let n=0;n<t.length;n++)e=Zl[(e^t[n])&255]^e>>>8;return e^-1}});var tf=$t((R3,hg)=>{var Nt=rs(),gO=Xl(),Pt=hg.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[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=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(){}};Pt.prototype.start=function(){this.read(Nt.PNG_SIGNATURE.length,this._parseSignature.bind(this))};Pt.prototype._parseSignature=function(t){let e=Nt.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))};Pt.prototype._parseChunkBegin=function(t){let e=t.readUInt32BE(0),n=t.readUInt32BE(4),r="";for(let s=4;s<8;s++)r+=String.fromCharCode(t[s]);let i=Boolean(t[4]&32);if(!this._hasIHDR&&n!==Nt.TYPE_IHDR){this.error(Error("Expected IHDR on beggining"));return}if(this._crc=new gO,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))};Pt.prototype._skipChunk=function(){this.read(8,this._parseChunkBegin.bind(this))};Pt.prototype._handleChunkEnd=function(){this.read(4,this._parseChunkEnd.bind(this))};Pt.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))};Pt.prototype._handleIHDR=function(t){this.read(t,this._parseIHDR.bind(this))};Pt.prototype._parseIHDR=function(t){this._crc.write(t);let e=t.readUInt32BE(0),n=t.readUInt32BE(4),r=t[8],i=t[9],s=t[10],o=t[11],a=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(s!==0){this.error(Error("Unsupported compression method"));return}if(o!==0){this.error(Error("Unsupported filter method"));return}if(a!==0&&a!==1){this.error(Error("Unsupported interlace method"));return}this._colorType=i;let c=Nt.COLORTYPE_TO_BPP_MAP[this._colorType];this._hasIHDR=!0,this.metadata({width:e,height:n,depth:r,interlace:Boolean(a),palette:Boolean(i&Nt.COLORTYPE_PALETTE),color:Boolean(i&Nt.COLORTYPE_COLOR),alpha:Boolean(i&Nt.COLORTYPE_ALPHA),bpp:c,colorType:i}),this._handleChunkEnd()};Pt.prototype._handlePLTE=function(t){this.read(t,this._parsePLTE.bind(this))};Pt.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()};Pt.prototype._handleTRNS=function(t){this.simpleTransparency(),this.read(t,this._parseTRNS.bind(this))};Pt.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 e=0;e<t.length;e++)this._palette[e][3]=t[e];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()};Pt.prototype._handleGAMA=function(t){this.read(t,this._parseGAMA.bind(this))};Pt.prototype._parseGAMA=function(t){this._crc.write(t),this.gamma(t.readUInt32BE(0)/Nt.GAMMA_DIVISION),this._handleChunkEnd()};Pt.prototype._handleIDAT=function(t){if(!this._emittedHeadersFinished)this._emittedHeadersFinished=!0,this.headersFinished();this.read(-t,this._parseIDAT.bind(this,t))};Pt.prototype._parseIDAT=function(t,e){if(this._crc.write(e),this._colorType===Nt.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()};Pt.prototype._handleIEND=function(t){this.read(t,this._parseIEND.bind(this))};Pt.prototype._parseIEND=function(t){if(this._crc.write(t),this._hasIEND=!0,this._handleChunkEnd(),this.finished)this.finished()}});var ef=$t((vO)=>{var mg=Yl(),bO=[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]}],wO=[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 $O(t,e){let n=[],r=0;function i(){if(r===t.length)throw Error("Ran out of data");let s=t[r];r++;let o,a,c,u,l,f,d,h;switch(e){default:throw Error("unrecognised depth");case 16:d=t[r],r++,n.push((s<<8)+d);break;case 4:d=s&15,h=s>>4,n.push(h,d);break;case 2:l=s&3,f=s>>2&3,d=s>>4&3,h=s>>6&3,n.push(h,d,f,l);break;case 1:o=s&1,a=s>>1&1,c=s>>2&1,u=s>>3&1,l=s>>4&1,f=s>>5&1,d=s>>6&1,h=s>>7&1,n.push(h,d,f,l,u,c,a,o);break}}return{get:function(s){while(n.length<s)i();let o=n.slice(0,s);return n=n.slice(s),o},resetAfterLine:function(){n.length=0},end:function(){if(r!==t.length)throw Error("extra data found")}}}function kO(t,e,n,r,i,s){let{width:o,height:a,index:c}=t;for(let u=0;u<a;u++)for(let l=0;l<o;l++){let f=n(l,u,c);bO[r](e,i,f,s),s+=r}return s}function yO(t,e,n,r,i,s){let{width:o,height:a,index:c}=t;for(let u=0;u<a;u++){for(let l=0;l<o;l++){let f=i.get(r),d=n(l,u,c);wO[r](e,f,d,s)}i.resetAfterLine()}}vO.dataToBitMap=function(t,e){let{width:n,height:r,depth:i,bpp:s,interlace:o}=e,a;if(i!==8)a=$O(t,i);let c;if(i<=8)c=Buffer.alloc(n*r*4);else c=new Uint16Array(n*r*4);let u=Math.pow(2,i)-1,l=0,f,d;if(o)f=mg.getImagePasses(n,r),d=mg.getInterlaceIterator(n,r);else{let h=0;d=function(){let m=h;return h+=4,m},f=[{width:n,height:r}]}for(let h=0;h<f.length;h++)if(i===8)l=kO(f[h],c,d,s,t,l);else yO(f[h],c,d,s,a,u);if(i===8){if(l!==t.length)throw Error("extra data found")}else a.end();return c}});var nf=$t((T3,pg)=>{function SO(t,e,n,r,i){let s=0;for(let o=0;o<r;o++)for(let a=0;a<n;a++){let c=i[t[s]];if(!c)throw Error("index "+t[s]+" not in palette");for(let u=0;u<4;u++)e[s+u]=c[u];s+=4}}function MO(t,e,n,r,i){let s=0;for(let o=0;o<r;o++)for(let a=0;a<n;a++){let c=!1;if(i.length===1){if(i[0]===t[s])c=!0}else if(i[0]===t[s]&&i[1]===t[s+1]&&i[2]===t[s+2])c=!0;if(c)for(let u=0;u<4;u++)e[s+u]=0;s+=4}}function OO(t,e,n,r,i){let s=255,o=Math.pow(2,i)-1,a=0;for(let c=0;c<r;c++)for(let u=0;u<n;u++){for(let l=0;l<4;l++)e[a+l]=Math.floor(t[a+l]*s/o+0.5);a+=4}}pg.exports=function(t,e,n=!1){let{depth:r,width:i,height:s,colorType:o,transColor:a,palette:c}=e,u=t;if(o===3)SO(t,u,i,s,c);else{if(a)MO(t,u,i,s,a);if(r!==8&&!n){if(r===16)u=Buffer.alloc(i*s*4);OO(t,u,i,s,r)}}return u}});var wg=$t((A3,bg)=>{var xO=zt("util"),rf=zt("zlib"),gg=ql(),IO=lg(),RO=tf(),NO=ef(),TO=nf(),cn=bg.exports=function(t){gg.call(this),this._parser=new RO(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()};xO.inherits(cn,gg);cn.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};cn.prototype._inflateData=function(t){if(!this._inflate)if(this._bitmapInfo.interlace)this._inflate=rf.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,rf.Z_MIN_CHUNK);this._inflate=rf.createInflate({chunkSize:r});let i=n,s=this.emit.bind(this,"error");this._inflate.on("error",function(a){if(!i)return;s(a)}),this._filter.on("complete",this._complete.bind(this));let o=this._filter.write.bind(this._filter);this._inflate.on("data",function(a){if(!i)return;if(a.length>i)a=a.slice(0,i);i-=a.length,o(a)}),this._inflate.on("end",this._filter.end.bind(this._filter))}this._inflate.write(t)};cn.prototype._handleMetaData=function(t){this._metaData=t,this._bitmapInfo=Object.create(t),this._filter=new IO(this._bitmapInfo)};cn.prototype._handleTransColor=function(t){this._bitmapInfo.transColor=t};cn.prototype._handlePalette=function(t){this._bitmapInfo.palette=t};cn.prototype._simpleTransparency=function(){this._metaData.alpha=!0};cn.prototype._headersFinished=function(){this.emit("metadata",this._metaData)};cn.prototype._finished=function(){if(this.errord)return;if(!this._inflate)this.emit("error","No Inflate block");else this._inflate.end()};cn.prototype._complete=function(t){if(this.errord)return;let e;try{let n=NO.dataToBitMap(t,this._bitmapInfo);e=TO(n,this._bitmapInfo,this._options.skipRescale),n=null}catch(n){this._handleError(n);return}this.emit("parsed",e)}});var kg=$t((P3,$g)=>{var Pe=rs();$g.exports=function(t,e,n,r){let i=[Pe.COLORTYPE_COLOR_ALPHA,Pe.COLORTYPE_ALPHA].indexOf(r.colorType)!==-1;if(r.colorType===r.inputColorType){let m=function(){let $=new ArrayBuffer(2);return new DataView($).setInt16(0,256,!0),new Int16Array($)[0]!==256}();if(r.bitDepth===8||r.bitDepth===16&&m)return t}let s=r.bitDepth!==16?t:new Uint16Array(t.buffer),o=255,a=Pe.COLORTYPE_TO_BPP_MAP[r.inputColorType];if(a===4&&!r.inputHasAlpha)a=3;let c=Pe.COLORTYPE_TO_BPP_MAP[r.colorType];if(r.bitDepth===16)o=65535,c*=2;let u=Buffer.alloc(e*n*c),l=0,f=0,d=r.bgColor||{};if(d.red===void 0)d.red=o;if(d.green===void 0)d.green=o;if(d.blue===void 0)d.blue=o;function h(){let m,$,g,b=o;switch(r.inputColorType){case Pe.COLORTYPE_COLOR_ALPHA:b=s[l+3],m=s[l],$=s[l+1],g=s[l+2];break;case Pe.COLORTYPE_COLOR:m=s[l],$=s[l+1],g=s[l+2];break;case Pe.COLORTYPE_ALPHA:b=s[l+1],m=s[l],$=m,g=m;break;case Pe.COLORTYPE_GRAYSCALE:m=s[l],$=m,g=m;break;default:throw Error("input color type:"+r.inputColorType+" is not supported at present")}if(r.inputHasAlpha){if(!i)b/=o,m=Math.min(Math.max(Math.round((1-b)*d.red+b*m),0),o),$=Math.min(Math.max(Math.round((1-b)*d.green+b*$),0),o),g=Math.min(Math.max(Math.round((1-b)*d.blue+b*g),0),o)}return{red:m,green:$,blue:g,alpha:b}}for(let m=0;m<n;m++)for(let $=0;$<e;$++){let g=h(s,l);switch(r.colorType){case Pe.COLORTYPE_COLOR_ALPHA:case Pe.COLORTYPE_COLOR:if(r.bitDepth===8){if(u[f]=g.red,u[f+1]=g.green,u[f+2]=g.blue,i)u[f+3]=g.alpha}else if(u.writeUInt16BE(g.red,f),u.writeUInt16BE(g.green,f+2),u.writeUInt16BE(g.blue,f+4),i)u.writeUInt16BE(g.alpha,f+6);break;case Pe.COLORTYPE_ALPHA:case Pe.COLORTYPE_GRAYSCALE:{let b=(g.red+g.green+g.blue)/3;if(r.bitDepth===8){if(u[f]=b,i)u[f+1]=g.alpha}else if(u.writeUInt16BE(b,f),i)u.writeUInt16BE(g.alpha,f+2);break}default:throw Error("unrecognised color Type "+r.colorType)}l+=a,f+=c}return u}});var Eg=$t((H3,vg)=>{var yg=Jl();function AO(t,e,n,r,i){for(let s=0;s<n;s++)r[i+s]=t[e+s]}function PO(t,e,n){let r=0,i=e+n;for(let s=e;s<i;s++)r+=Math.abs(t[s]);return r}function HO(t,e,n,r,i,s){for(let o=0;o<n;o++){let a=o>=s?t[e+o-s]:0,c=t[e+o]-a;r[i+o]=c}}function FO(t,e,n,r){let i=0;for(let s=0;s<n;s++){let o=s>=r?t[e+s-r]:0,a=t[e+s]-o;i+=Math.abs(a)}return i}function CO(t,e,n,r,i){for(let s=0;s<n;s++){let o=e>0?t[e+s-n]:0,a=t[e+s]-o;r[i+s]=a}}function LO(t,e,n){let r=0,i=e+n;for(let s=e;s<i;s++){let o=e>0?t[s-n]:0,a=t[s]-o;r+=Math.abs(a)}return r}function jO(t,e,n,r,i,s){for(let o=0;o<n;o++){let a=o>=s?t[e+o-s]:0,c=e>0?t[e+o-n]:0,u=t[e+o]-(a+c>>1);r[i+o]=u}}function _O(t,e,n,r){let i=0;for(let s=0;s<n;s++){let o=s>=r?t[e+s-r]:0,a=e>0?t[e+s-n]:0,c=t[e+s]-(o+a>>1);i+=Math.abs(c)}return i}function GO(t,e,n,r,i,s){for(let o=0;o<n;o++){let a=o>=s?t[e+o-s]:0,c=e>0?t[e+o-n]:0,u=e>0&&o>=s?t[e+o-(n+s)]:0,l=t[e+o]-yg(a,c,u);r[i+o]=l}}function BO(t,e,n,r){let i=0;for(let s=0;s<n;s++){let o=s>=r?t[e+s-r]:0,a=e>0?t[e+s-n]:0,c=e>0&&s>=r?t[e+s-(n+r)]:0,u=t[e+s]-yg(o,a,c);i+=Math.abs(u)}return i}var UO={0:AO,1:HO,2:CO,3:jO,4:GO},WO={0:PO,1:FO,2:LO,3:_O,4:BO};vg.exports=function(t,e,n,r,i){let s;if(!("filterType"in r)||r.filterType===-1)s=[0,1,2,3,4];else if(typeof r.filterType==="number")s=[r.filterType];else throw Error("unrecognised filter types");if(r.bitDepth===16)i*=2;let o=e*i,a=0,c=0,u=Buffer.alloc((o+1)*n),l=s[0];for(let f=0;f<n;f++){if(s.length>1){let d=1/0;for(let h=0;h<s.length;h++){let m=WO[s[h]](t,c,o,i);if(m<d)l=s[h],d=m}}u[a]=l,a++,UO[l](t,c,o,u,a,i),a+=o,c+=o}return u}});var sf=$t((F3,Sg)=>{var Dt=rs(),KO=Xl(),zO=kg(),DO=Eg(),qO=zt("zlib"),ir=Sg.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||qO.createDeflate,t.bitDepth=t.bitDepth||8,t.colorType=typeof t.colorType==="number"?t.colorType:Dt.COLORTYPE_COLOR_ALPHA,t.inputColorType=typeof t.inputColorType==="number"?t.inputColorType:Dt.COLORTYPE_COLOR_ALPHA,[Dt.COLORTYPE_GRAYSCALE,Dt.COLORTYPE_COLOR,Dt.COLORTYPE_COLOR_ALPHA,Dt.COLORTYPE_ALPHA].indexOf(t.colorType)===-1)throw Error("option color type:"+t.colorType+" is not supported at present");if([Dt.COLORTYPE_GRAYSCALE,Dt.COLORTYPE_COLOR,Dt.COLORTYPE_COLOR_ALPHA,Dt.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")};ir.prototype.getDeflateOptions=function(){return{chunkSize:this._options.deflateChunkSize,level:this._options.deflateLevel,strategy:this._options.deflateStrategy}};ir.prototype.createDeflate=function(){return this._options.deflateFactory(this.getDeflateOptions())};ir.prototype.filterData=function(t,e,n){let r=zO(t,e,n,this._options),i=Dt.COLORTYPE_TO_BPP_MAP[this._options.colorType];return DO(r,e,n,this._options,i)};ir.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(KO.crc32(r.slice(4,r.length-4)),r.length-4),r};ir.prototype.packGAMA=function(t){let e=Buffer.alloc(4);return e.writeUInt32BE(Math.floor(t*Dt.GAMMA_DIVISION),0),this._packChunk(Dt.TYPE_gAMA,e)};ir.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(Dt.TYPE_IHDR,n)};ir.prototype.packIDAT=function(t){return this._packChunk(Dt.TYPE_IDAT,t)};ir.prototype.packIEND=function(){return this._packChunk(Dt.TYPE_IEND,null)}});var Ig=$t((C3,xg)=>{var YO=zt("util"),Mg=zt("stream"),JO=rs(),VO=sf(),Og=xg.exports=function(t){Mg.call(this);let e=t||{};this._packer=new VO(e),this._deflate=this._packer.createDeflate(),this.readable=!0};YO.inherits(Og,Mg);Og.prototype.pack=function(t,e,n,r){if(this.emit("data",Buffer.from(JO.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(s){this.emit("data",this._packer.packIDAT(s))}.bind(this)),this._deflate.on("end",function(){this.emit("data",this._packer.packIEND()),this.emit("end")}.bind(this)),this._deflate.end(i)}});var Hg=$t((ho,Pg)=>{var Rg=zt("assert").ok,is=zt("zlib"),ZO=zt("util"),Ng=zt("buffer").kMaxLength;function ti(t){if(!(this instanceof ti))return new ti(t);if(t&&t.chunkSize<is.Z_MIN_CHUNK)t.chunkSize=is.Z_MIN_CHUNK;if(is.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 QO(t){return new ti(t)}function Tg(t,e){if(e)process.nextTick(e);if(!t._handle)return;t._handle.close(),t._handle=null}ti.prototype._processChunk=function(t,e,n){if(typeof n==="function")return is.Inflate._processChunk.call(this,t,e,n);let r=this,i=t&&t.length,s=this._chunkSize-this._offset,o=this._maxLength,a=0,c=[],u=0,l;this.on("error",function(m){l=m});function f(m,$){if(r._hadError)return;let g=s-$;if(Rg(g>=0,"have should not go down"),g>0){let b=r._buffer.slice(r._offset,r._offset+g);if(r._offset+=g,b.length>o)b=b.slice(0,o);if(c.push(b),u+=b.length,o-=b.length,o===0)return!1}if($===0||r._offset>=r._chunkSize)s=r._chunkSize,r._offset=0,r._buffer=Buffer.allocUnsafe(r._chunkSize);if($===0)return a+=i-m,i=m,!0;return!1}Rg(this._handle,"zlib binding closed");let d;do d=this._handle.writeSync(e,t,a,i,this._buffer,this._offset,s),d=d||this._writeState;while(!this._hadError&&f(d[0],d[1]));if(this._hadError)throw l;if(u>=Ng)throw Tg(this),RangeError("Cannot create final Buffer. It would be larger than 0x"+Ng.toString(16)+" bytes");let h=Buffer.concat(c,u);return Tg(this),h};ZO.inherits(ti,is.Inflate);function XO(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=is.Z_FINISH;return t._processChunk(e,n)}function Ag(t,e){return XO(new ti(e),t)}Pg.exports=ho=Ag;ho.Inflate=ti;ho.createInflate=QO;ho.inflateSync=Ag});var of=$t((L3,Cg)=>{var Fg=Cg.exports=function(t){this._buffer=t,this._reads=[]};Fg.prototype.read=function(t,e){this._reads.push({length:Math.abs(t),allowLess:t<0,func:e})};Fg.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 Lg=$t((nx)=>{var tx=of(),ex=Vl();nx.process=function(t,e){let n=[],r=new tx(t);return new ex(e,{read:r.read.bind(r),write:function(s){n.push(s)},complete:function(){}}).start(),r.process(),Buffer.concat(n)}});var Bg=$t((_3,Gg)=>{var jg=!0,_g=zt("zlib"),ix=Hg();if(!_g.deflateSync)jg=!1;var sx=of(),ox=Lg(),ax=tf(),cx=ef(),ux=nf();Gg.exports=function(t,e){if(!jg)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(S){n=S}let i;function s(S){i=S}function o(S){i.transColor=S}function a(S){i.palette=S}function c(){i.alpha=!0}let u;function l(S){u=S}let f=[];function d(S){f.push(S)}let h=new sx(t);if(new ax(e,{read:h.read.bind(h),error:r,metadata:s,gamma:l,palette:a,transColor:o,inflateData:d,simpleTransparency:c}).start(),h.process(),n)throw n;let $=Buffer.concat(f);f.length=0;let g;if(i.interlace)g=_g.inflateSync($);else{let x=((i.width*i.bpp*i.depth+7>>3)+1)*i.height;g=ix($,{chunkSize:x,maxLength:x})}if($=null,!g||!g.length)throw Error("bad png - invalid inflate data response");let b=ox.process(g,i);$=null;let y=cx.dataToBitMap(b,i);b=null;let E=ux(y,i,e.skipRescale);return i.data=E,i.gamma=u||0,i}});var zg=$t((G3,Kg)=>{var Ug=!0,Wg=zt("zlib");if(!Wg.deflateSync)Ug=!1;var lx=rs(),fx=sf();Kg.exports=function(t,e){if(!Ug)throw Error("To use the sync capability of this library in old node versions, please pin pngjs to v2.3.0");let r=new fx(e||{}),i=[];if(i.push(Buffer.from(lx.PNG_SIGNATURE)),i.push(r.packIHDR(t.width,t.height)),t.gamma)i.push(r.packGAMA(t.gamma));let s=r.filterData(t.data,t.width,t.height),o=Wg.deflateSync(s,r.getDeflateOptions());if(s=null,!o||!o.length)throw Error("bad png - invalid compressed data response");return i.push(r.packIDAT(o)),i.push(r.packIEND()),Buffer.concat(i)}});var Dg=$t((mx)=>{var dx=Bg(),hx=zg();mx.read=function(t,e){return dx(t,e||{})};mx.write=function(t,e){return hx(t,e)}});var Yg=$t((yx)=>{var bx=zt("util"),qg=zt("stream"),wx=wg(),$x=Ig(),kx=Dg(),Zt=yx.PNG=function(t){if(qg.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 wx(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 $x(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"))};bx.inherits(Zt,qg);Zt.sync=kx;Zt.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};Zt.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};Zt.prototype.write=function(t){return this._parser.write(t),!0};Zt.prototype.end=function(t){this._parser.end(t)};Zt.prototype._metadata=function(t){this.width=t.width,this.height=t.height,this.emit("metadata",t)};Zt.prototype._gamma=function(t){this.gamma=t};Zt.prototype._handleClose=function(){if(!this._parser.writable&&!this._packer.readable)this.emit("close")};Zt.bitblt=function(t,e,n,r,i,s,o,a){if(n|=0,r|=0,i|=0,s|=0,o|=0,a|=0,n>t.width||r>t.height||n+i>t.width||r+s>t.height)throw Error("bitblt reading outside image");if(o>e.width||a>e.height||o+i>e.width||a+s>e.height)throw Error("bitblt writing outside image");for(let c=0;c<s;c++)t.data.copy(e.data,(a+c)*e.width+o<<2,(r+c)*t.width+n<<2,(r+c)*t.width+n+i<<2)};Zt.prototype.bitblt=function(t,e,n,r,i,s,o){return Zt.bitblt(this,t,e,n,r,i,s,o),this};Zt.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 s=t.data[r+i]/255;s=Math.pow(s,0.45454545454545453/t.gamma),t.data[r+i]=Math.round(s*255)}}t.gamma=0}};Zt.prototype.adjustGamma=function(){Zt.adjustGamma(this)}});var yd=$t((t5,j0)=>{var kd={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"},wR={up:(t=1)=>"\x1B[S".repeat(t),down:(t=1)=>"\x1B[T".repeat(t)},$R={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?kd.up():"");if(t)e+=kd.left;return e}};j0.exports={cursor:kd,scroll:wR,erase:$R,beep:"\x07"}});import{spawnSync as i3}from"node:child_process";import{isMainThread as s3}from"node:worker_threads";import{parseArgs as VL}from"node:util";var It={name:"@kecan0406/ttheme",version:"1.2.13",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, Warp and Konsole",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","konsole"],devDependencies:{"@biomejs/biome":"^2.3.0","@clack/prompts":"^1.7.0","@jsquash/jpeg":"^1.6.0","@material/material-color-utilities":"^0.4.0","@types/bun":"^1.3.0","@types/pngjs":"6.0.5","@xterm/headless":"6.0.0","fast-string-width":"^3.0.2",pngjs:"7.0.0","smol-toml":"^1.9.0",typescript:"^5.8.2"},engines:{bun:">=1.3",node:">=20.11"}};import{existsSync as _C,readFileSync as GC}from"node:fs";var Fp=(()=>{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}})(),Cp=(t)=>{return t===12288||t>=65281&&t<=65376||t>=65504&&t<=65510},Lp=(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 WM=/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]|\u001b\]8;[^;]*;.*?(?:\u0007|\u001b\u005c)/y,KM=/[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y,jp=/(?:(?![\uFF61-\uFF9F\uFF00-\uFFEF])[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}\p{Script=Tangut}]){1,1000}/yu,zM=/\t{1,1000}/y,_p=/[\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,DM=/(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y,qM=/\p{M}+/gu,YM={limit:1/0,ellipsis:""},Gp=(t,e={},n={})=>{let r=e.limit??1/0,i=e.ellipsis??"",s=e?.ellipsisWidth??(i?Gp(i,YM,n).width:0),o=0,a=n.controlWidth??0,c=n.tabWidth??8,u=n.emojiWidth??2,l=2,f=n.regularWidth??1,d=n.wideWidth??2,h=[[DM,f],[WM,0],[KM,a],[zM,c],[_p,u],[jp,d]],m=0,$=0,g=t.length,b=0,y=!1,E=g,S=Math.max(0,r-s),x=0,R=0,N=0,F=0;t:while(!0){if(R>x||$>=g&&$>m){let _=t.slice(x,R)||t.slice(m,$);b=0;for(let B of _.replaceAll(qM,"")){let tt=B.codePointAt(0)||0;if(Cp(tt))F=2;else if(Lp(tt))F=d;else F=f;if(N+F>S)E=Math.min(E,Math.max(x,m)+b);if(N+F>r){y=!0;break t}b+=B.length,N+=F}x=R=0}if($>=g)break t;for(let _=0,B=h.length;_<B;_++){let[tt,W]=h[_];if(tt.lastIndex=$,tt.test(t)){if(b=tt===jp?Fp(t.slice($,tt.lastIndex)):tt===_p?1:tt.lastIndex-$,F=b*W,N+F>S)E=Math.min(E,$+Math.floor((S-N)/W));if(N+F>r){y=!0;break t}N+=F,x=m,R=$,$=m=tt.lastIndex;continue t}}$+=1}return{width:y?S:N,index:y?E:g,truncated:y,ellipsed:y&&r>=s}},Bp=Gp;var JM={limit:1/0,ellipsis:"",ellipsisWidth:0},VM=(t,e={})=>{return Bp(t,JM,e).width},X=VM;function jl(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 Be(t){return`\x1B[38;2;${jl(t)}m`}function Ga(t,e){return`\x1B[48;2;${jl(t)};38;2;${jl(e)}m`}function Up(t,e="\x1B[39m"){return`${t.map((n)=>`${Be(n)}■`).join(" ")}${e}`}var At="\x1B[0m",at="\x1B[1m",A="\x1B[2m",ge="\x1B[22m",Zi="\x1B[32m",Vt="\x1B[33m",Ba="\x1B[36m",xn=["⠋","⠙","⠹","⠸","⠼","⠴","⠦","⠧","⠇","⠏"],uo="⧉";function Ua(t,e){return e?`\x1B]8;;${e}\x1B\\${t}\x1B]8;;\x1B\\`:t}function _l(t,e){if(t[e]!=="\x1B")return 0;if(t[e+1]==="]"){let r=t.indexOf("\x07",e+2),i=t.indexOf("\x1B\\",e+2),s=r!==-1&&(i===-1||r<i)?r+1:i!==-1?i+2:0;return s?s-e:0}if(t[e+1]!=="[")return 0;let n=e+2;while(n<t.length&&!/[@-~]/.test(t[n]))n++;return n<t.length?n-e+1:0}function Gl(t,e){let n="",r=0,i=0;while(i<t.length){let s=_l(t,i);if(s>0){n+=t.slice(i,i+s),i+=s;continue}let o=String.fromCodePoint(t.codePointAt(i)),a=X(o);if(r+a>e)break;n+=o,r+=a,i+=o.length}return{head:n,used:r}}function ot(t,e,n=!0){if(e<=0)return"";let r=X(t);if(r<=e)return n?t+" ".repeat(e-r):t;let{head:i,used:s}=Gl(t,e-1);return`${i}${t.includes("\x1B")?"\x1B[0m":""}…${n?" ".repeat(e-1-s):""}`}function Wp(t,e){let{head:n,used:r}=Gl(t,e);return`${n}${t.includes("\x1B")?At:""}${" ".repeat(e-r)}`}function Gt(t,e,n){let r=n-X(e)-1;return r<=0?ot(t,n):`${ot(t,r)} ${e}`}function bt(t,e){let n=[],r="";for(let i of t.split(/\s+/).filter(Boolean)){let s=r?`${r} ${i}`:i;if(X(s)<=e){r=s;continue}if(r)n.push(r);while(X(i)>e){let{head:o}=Gl(i,e),a=Math.max(o.lastIndexOf("/")+1,o.lastIndexOf("#")),c=a>0?a:o.length;n.push(i.slice(0,c)),i=i.slice(c)}r=i}if(r)n.push(r);return n}import{existsSync as g0,readFileSync as dd}from"node:fs";import{join as b0}from"node:path";var ZM=/^#[0-9a-f]{6}$/;function oe(t){return ZM.test(t)}function rt(t){let e=Number.parseInt(t.slice(1),16);return[e>>16&255,e>>8&255,e&255]}function Bt(t,e,n){let r=rt(t),i=rt(e);return`#${r.map((s,o)=>Math.round(s+((i[o]??0)-s)*n).toString(16).padStart(2,"0")).join("")}`}function vt(t){let[e,n,r]=rt(t).map((i)=>{let s=i/255;return s<=0.03928?s/12.92:((s+0.055)/1.055)**2.4});return 0.2126*e+0.7152*n+0.0722*r}function wt(t,e){let n=vt(t),r=vt(e);return(Math.max(n,r)+0.05)/(Math.min(n,r)+0.05)}function Wa(t,e){return Math.round(wt(t,e)*100)/100}function QM(t){let e=t/255;return e<=0.04045?e/12.92:((e+0.055)/1.055)**2.4}function St(t){let[e,n,r]=rt(t).map(QM),i=Math.cbrt(0.4122214708*e+0.5363325363*n+0.0514459929*r),s=Math.cbrt(0.2119034982*e+0.6806995451*n+0.1073969566*r),o=Math.cbrt(0.0883024619*e+0.2817188376*n+0.6299787005*r),a=1.9779984951*i-2.428592205*s+0.4505937099*o,c=0.0259040371*i+0.7827717662*s-0.808675766*o;return{l:0.2104542553*i+0.793617785*s-0.0040720468*o,c:Math.hypot(a,c),h:(Math.atan2(c,a)*180/Math.PI+360)%360}}var tr=7,Kp=3,Bl=0.15,zp=1.6,Wl=[1,2,3,4,5,6,9,10,11,12,13,14],Dp=[7,15],er=[1,2,3,4,5,6],be={1:{name:"red",center:19,width:25},2:{name:"green",center:132,width:35},3:{name:"yellow",center:88,width:35},4:{name:"blue",center:250,width:60},5:{name:"magenta",center:329,width:40},6:{name:"cyan",center:197,width:60}},fo=0.03,Ue=25,Qi=15,Xi=0.08;function In(t,e){let n=t.ansi[e];if(n===void 0)throw Error(`${t.name}: missing ANSI ${e}`);return n}function Ul(t,e,n){let r=t.background;return e.flatMap((i)=>{let s=In(t,i);return wt(s,r)<n?[`ANSI ${i} ${s} on ${r} is ${Wa(s,r)}:1, needs ${n}:1`]:[]})}function qp(t,e){return Math.min(...e.map((n)=>wt(In(t,n),t.background)))}var Yp=[{rule:"foreground",label:"foreground on background",unit:"ratio",min:tr,measure:({foreground:t,background:e})=>wt(t,e),check:({foreground:t,background:e})=>wt(t,e)<tr?[`foreground ${t} on ${e} is ${Wa(t,e)}:1, needs ${tr}:1`]:[]},{rule:"accents",label:"weakest accent on background",unit:"ratio",min:Kp,measure:(t)=>qp(t,Wl),check:(t)=>Ul(t,Wl,Kp)},{rule:"ansi0-dark",label:"ansi0 luminance",unit:"luminance",max:Bl,measure:(t)=>vt(In(t,0)),check:(t)=>{let e=In(t,0);return vt(e)>Bl?[`ANSI 0 ${e} has luminance ${vt(e).toFixed(3)}, needs <= ${Bl}`]:[]}},{rule:"light-ansi",label:"ansi7 and ansi15 on background",unit:"ratio",min:tr,measure:(t)=>qp(t,Dp),check:(t)=>Ul(t,Dp,tr)},{rule:"ansi8-visible",label:"ansi8 on background",unit:"ratio",min:zp,measure:(t)=>wt(In(t,8),t.background),check:(t)=>Ul(t,[8],zp)},{rule:"selection",label:"foreground on selection",unit:"ratio",min:tr,measure:({foreground:t,selectionBackground:e})=>e===void 0?Number.NaN:wt(t,e),check:({foreground:t,selectionBackground:e})=>e!==void 0&&wt(t,e)<tr?[`foreground ${t} on selection ${e} is ${Wa(t,e)}:1, needs ${tr}:1`]:[]}];function Ae(t,e){let n=Math.abs(t-e)%360;return Math.min(n,360-n)}var sn=(t)=>t>8?t-8:t;function ts(t){let e=t.signatureSlots.filter((n)=>n.startsWith("ansi")).map((n)=>Number(n.slice(4)));return new Set(e.flatMap((n)=>er.includes(sn(n))?[n,n>8?n-8:n+8]:[n]))}function lo(t,e){let n=St(In(t,e));return n.c<fo?void 0:n}function nr(t){let e=ts(t);return Wl.flatMap((n)=>{let r=lo(t,n),i=be[sn(n)];if(r===void 0||i===void 0||e.has(n))return[];let s=Ae(r.h,i.center)-i.width;return s>0?[{slot:n,hue:r.h,over:s}]:[]})}function Rn(t){let e=new Set(t.signatureSlots);return er.flatMap((n)=>{let r=lo(t,n),i=lo(t,n+8);if(r===void 0||i===void 0||e.has(`ansi${n}`)&&e.has(`ansi${n+8}`))return[];return[{normal:n,gap:Ae(r.h,i.h)}]})}function Nn(t){let e=ts(t);return[0,8].flatMap((n)=>er.flatMap((r)=>er.filter((i)=>i>r).flatMap((i)=>{let[s,o]=[n+r,n+i],a=lo(t,s),c=lo(t,o);if(a===void 0||c===void 0||e.has(s)&&e.has(o))return[];return Ae(a.h,c.h)<Qi&&Math.abs(a.l-c.l)<Xi?[[s,o]]:[]})))}var XM=[{rule:"ansi-role",label:"accent hue outside its ANSI role",unit:"degrees",max:0,measure:(t)=>Math.max(0,...nr(t).map((e)=>e.over)),check:(t)=>nr(t).map(({slot:e,hue:n,over:r})=>{let i=be[sn(e)];return`ANSI ${e} ${In(t,e)} has hue ${n.toFixed(0)}°, ${r.toFixed(0)}° outside ${i.name} (${i.center}±${i.width}°)`})},{rule:"bright-follows",label:"widest normal to bright hue gap",unit:"degrees",max:Ue,measure:(t)=>Math.max(0,...Rn(t).map((e)=>e.gap)),check:(t)=>Rn(t).filter((e)=>e.gap>Ue).map(({normal:e,gap:n})=>`ANSI ${e+8} is ${n.toFixed(0)}° from ANSI ${e}, needs <= ${Ue}°`)},{rule:"distinct",label:"accent pairs that read as one color",unit:"pairs",max:0,measure:(t)=>Nn(t).length,check:(t)=>Nn(t).map(([e,n])=>`ANSI ${e} ${In(t,e)} and ANSI ${n} ${In(t,n)} are within ${Qi}° hue and ${Xi} lightness`)}],Ka=[...Yp,...XM],Kl=Ka.map((t)=>t.rule),we=Ka.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 on(t){return Ka.map((e)=>Math.round(e.measure(t)*1000)/1000)}function Jp(t,e){return t.filter((n)=>!e.waive.includes(n.rule)).flatMap((n)=>n.check(e).map((r)=>({theme:e.name,rule:n.rule,detail:r})))}function Qr(t){return Jp(Ka,t)}function Vp(t){return Jp(Yp,t)}function Zp(t){return t.flatMap(Qr)}import{chmodSync as tO,copyFileSync as eO,existsSync as es,mkdirSync as nO,readFileSync as zl,realpathSync as rO,renameSync as Xp,rmSync as Qp,statSync as iO,writeFileSync as tg}from"node:fs";import{dirname as sO}from"node:path";function eg(t){return`${t}.ttheme.bak`}var oO=/^(?:#|--) ttheme begin$|path = "ttheme-|^DefaultProfile=ttheme-/m;function Dl(t){let e=eg(t);if(es(t)&&!es(e)&&!oO.test(zl(t,"utf8")))eO(t,e)}function P(t,e){let n=es(t)?rO(t):t;nO(sO(n),{recursive:!0});let r=`${n}.ttheme-${process.pid}`;if(tg(r,e),es(n))tO(r,iO(n).mode&4095);Xp(r,n)}function Xr(t,e,n){if(tg(t,n),t!==e)Xp(t,e)}function an(t,e){if((es(t)?zl(t,"utf8"):void 0)===e)return!1;return Dl(t),P(t,e),!0}function ng(t,e){let n=eg(t),r=es(n)?zl(n,"utf8"):void 0;if(e===""&&r===void 0)return Qp(t,{force:!0}),"removed";if(P(t,e),r===void 0||r===e)return Qp(n,{force:!0}),"restored";return"kept backup"}import{createHash as fw}from"node:crypto";import{copyFileSync as e2,existsSync as Hf,mkdirSync as n2,readdirSync as r2,readFileSync as ms,renameSync as dw,rmSync as hs,statSync as i2}from"node:fs";import{basename as hw,isAbsolute as s2,join as D}from"node:path";import{createHash as xI}from"node:crypto";import{existsSync as II,readdirSync as RI,readFileSync as NI,rmSync as TI,statSync as AI,utimesSync as PI}from"node:fs";import{join as fs}from"node:path";import{readdirSync as Hx,rmSync as Fx,statSync as Cx}from"node:fs";import{setDefaultAutoSelectFamilyAttemptTimeout as Lx}from"node:net";import{homedir as jx}from"node:os";import{join as wo}from"node:path";import{setTimeout as _x}from"node:timers/promises";var Qg=Ll(Yg(),1);import{constants as Mx,deflateSync as Ox,inflateSync as xx}from"node:zlib";import{inflateRawSync as Ex}from"node:zlib";var vx=(()=>{var t=import.meta.url;return function(e={}){var n=e,r,i,s=new Promise((p,w)=>{r=p,i=w});let a=globalThis.ServiceWorkerGlobalScope!==void 0&&typeof self<"u"&&globalThis.caches&&globalThis.caches.default!==void 0,c=typeof process==="object"&&process.release&&process.release.name==="node";if(a||c){if(!globalThis.ImageData)globalThis.ImageData=class{constructor(w,k,v){this.data=w,this.width=k,this.height=v}};if(import.meta.url===void 0)import.meta.url="https://localhost";if(typeof self<"u"&&self.location===void 0)self.location={href:""}}var u=Object.assign({},n),l=[],f="./this.program",d=(p,w)=>{throw w},h=typeof window=="object",m=typeof importScripts=="function",$=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string",g="";function b(p){if(n.locateFile)return n.locateFile(p,g);return g+p}var y,E,S;if(h||m){if(m)g=self.location.href;else if(typeof document<"u"&&document.currentScript)g=document.currentScript.src;if(t)g=t;if(g.startsWith("blob:"))g="";else g=g.substr(0,g.replace(/[?#].*/,"").lastIndexOf("/")+1);{if(y=(p)=>{var w=new XMLHttpRequest;return w.open("GET",p,!1),w.send(null),w.responseText},m)S=(p)=>{var w=new XMLHttpRequest;return w.open("GET",p,!1),w.responseType="arraybuffer",w.send(null),new Uint8Array(w.response)};E=(p,w,k)=>{var v=new XMLHttpRequest;v.open("GET",p,!0),v.responseType="arraybuffer",v.onload=()=>{if(v.status==200||v.status==0&&v.response){w(v.response);return}k()},v.onerror=k,v.send(null)}}}var x=n.print||console.log.bind(console),R=n.printErr||console.error.bind(console);if(Object.assign(n,u),u=null,n.arguments)l=n.arguments;if(n.thisProgram)f=n.thisProgram;if(n.quit)d=n.quit;var N;if(n.wasmBinary)N=n.wasmBinary;var F,_=!1,B,tt,W,Q,U,yt,et,Xn,en;function nn(){var p=F.buffer;n.HEAP8=tt=new Int8Array(p),n.HEAP16=Q=new Int16Array(p),n.HEAPU8=W=new Uint8Array(p),n.HEAPU16=U=new Uint16Array(p),n.HEAP32=yt=new Int32Array(p),n.HEAPU32=et=new Uint32Array(p),n.HEAPF32=Xn=new Float32Array(p),n.HEAPF64=en=new Float64Array(p)}var rn=[],Ca=[],Dr=[],El=!1;function Sl(){if(n.preRun){if(typeof n.preRun=="function")n.preRun=[n.preRun];while(n.preRun.length)zE(n.preRun.shift())}xl(rn)}function Ml(){El=!0,xl(Ca)}function KE(){if(n.postRun){if(typeof n.postRun=="function")n.postRun=[n.postRun];while(n.postRun.length)qE(n.postRun.shift())}xl(Dr)}function zE(p){rn.unshift(p)}function DE(p){Ca.unshift(p)}function qE(p){Dr.unshift(p)}var qr=0,Ol=null,ao=null;function YE(p){qr++,n.monitorRunDependencies?.(qr)}function JE(p){if(qr--,n.monitorRunDependencies?.(qr),qr==0){if(Ol!==null)clearInterval(Ol),Ol=null;if(ao){var w=ao;ao=null,w()}}}function mp(p){n.onAbort?.(p),p="Aborted("+p+")",R(p),_=!0,B=1,p+=". Build with -sASSERTIONS for more info.";var w=new WebAssembly.RuntimeError(p);throw i(w),w}var VE="data:application/octet-stream;base64,",pp=(p)=>p.startsWith(VE),Yr;if(n.locateFile){if(Yr="mozjpeg_dec.wasm",!pp(Yr))Yr=b(Yr)}else Yr=new URL("mozjpeg_dec.wasm",import.meta.url).href;function gp(p){if(p==Yr&&N)return new Uint8Array(N);if(S)return S(p);throw"both async and sync fetching of the wasm failed"}function ZE(p){if(!N&&(h||m)){if(typeof fetch=="function")return fetch(p,{credentials:"same-origin"}).then((w)=>{if(!w.ok)throw`failed to load wasm binary file at '${p}'`;return w.arrayBuffer()}).catch(()=>gp(p))}return Promise.resolve().then(()=>gp(p))}function bp(p,w,k){return ZE(p).then((v)=>WebAssembly.instantiate(v,w)).then(k,(v)=>{R(`failed to asynchronously prepare wasm: ${v}`),mp(v)})}function QE(p,w,k,v){if(!p&&typeof WebAssembly.instantiateStreaming=="function"&&!pp(w)&&typeof fetch=="function")return fetch(w,{credentials:"same-origin"}).then((O)=>{var I=WebAssembly.instantiateStreaming(O,k);return I.then(v,function(C){return R(`wasm streaming compile failed: ${C}`),R("falling back to ArrayBuffer instantiation"),bp(w,k,v)})});return bp(w,k,v)}function XE(){var p={a:EM};function w(v,O){return Yt=v.exports,F=Yt.A,nn(),Mp=Yt.F,DE(Yt.B),JE("wasm-instantiate"),Yt}YE("wasm-instantiate");function k(v){w(v.instance)}if(n.instantiateWasm)try{return n.instantiateWasm(p,w)}catch(v){R(`Module.instantiateWasm callback failed with error: ${v}`),i(v)}return QE(N,Yr,p,k).catch(i),{}}function tS(p){this.name="ExitStatus",this.message=`Program terminated with exit(${p})`,this.status=p}var xl=(p)=>{while(p.length>0)p.shift()(n)},eS=n.noExitRuntime||!0;class wp{constructor(p){this.excPtr=p,this.ptr=p-24}set_type(p){et[this.ptr+4>>2]=p}get_type(){return et[this.ptr+4>>2]}set_destructor(p){et[this.ptr+8>>2]=p}get_destructor(){return et[this.ptr+8>>2]}set_caught(p){p=p?1:0,tt[this.ptr+12]=p}get_caught(){return tt[this.ptr+12]!=0}set_rethrown(p){p=p?1:0,tt[this.ptr+13]=p}get_rethrown(){return tt[this.ptr+13]!=0}init(p,w){this.set_adjusted_ptr(0),this.set_type(p),this.set_destructor(w)}set_adjusted_ptr(p){et[this.ptr+16>>2]=p}get_adjusted_ptr(){return et[this.ptr+16>>2]}get_exception_ptr(){var p=Ap(this.get_type());if(p)return et[this.excPtr>>2];var w=this.get_adjusted_ptr();if(w!==0)return w;return this.excPtr}}var $p=0,nS=0,rS=(p,w,k)=>{var v=new wp(p);throw v.init(w,k),$p=p,nS++,$p},iS=(p,w,k,v,O)=>{},sS=()=>{var p=Array(256);for(var w=0;w<256;++w)p[w]=String.fromCharCode(w);kp=p},kp,Ge=(p)=>{var w="",k=p;while(W[k])w+=kp[W[k++]];return w},qi={},Jr={},La={},yp,pe=(p)=>{throw new yp(p)},vp,Ep=(p)=>{throw new vp(p)},oS=(p,w,k)=>{p.forEach(function(T){La[T]=w});function v(T){var G=k(T);if(G.length!==p.length)Ep("Mismatched type converter count");for(var V=0;V<p.length;++V)Sn(p[V],G[V])}var O=Array(w.length),I=[],C=0;if(w.forEach((T,G)=>{if(Jr.hasOwnProperty(T))O[G]=Jr[T];else{if(I.push(T),!qi.hasOwnProperty(T))qi[T]=[];qi[T].push(()=>{if(O[G]=Jr[T],++C,C===I.length)v(O)})}}),I.length===0)v(O)};function aS(p,w,k={}){var v=w.name;if(!p)pe(`type "${v}" must have a positive integer typeid pointer`);if(Jr.hasOwnProperty(p))if(k.ignoreDuplicateRegistrations)return;else pe(`Cannot register type '${v}' twice`);if(Jr[p]=w,delete La[p],qi.hasOwnProperty(p)){var O=qi[p];delete qi[p],O.forEach((I)=>I())}}function Sn(p,w,k={}){if(!("argPackAdvance"in w))throw TypeError("registerType registeredInstance requires argPackAdvance");return aS(p,w,k)}var Vr=8,cS=(p,w,k,v)=>{w=Ge(w),Sn(p,{name:w,fromWireType:function(O){return!!O},toWireType:function(O,I){return I?k:v},argPackAdvance:Vr,readValueFromPointer:function(O){return this.fromWireType(W[O])},destructorFunction:null})},Il=[],Mn=[],Rl=(p)=>{if(p>9&&--Mn[p+1]===0)Mn[p]=void 0,Il.push(p)},uS=()=>Mn.length/2-5-Il.length,lS=()=>{Mn.push(0,1,void 0,1,null,1,!0,1,!1,1),n.count_emval_handles=uS},Zr={toValue:(p)=>{if(!p)pe("Cannot use deleted val. handle = "+p);return Mn[p]},toHandle:(p)=>{switch(p){case void 0:return 2;case null:return 4;case!0:return 6;case!1:return 8;default:{let w=Il.pop()||Mn.length;return Mn[w]=p,Mn[w+1]=1,w}}}};function Nl(p){return this.fromWireType(et[p>>2])}var fS={name:"emscripten::val",fromWireType:(p)=>{var w=Zr.toValue(p);return Rl(p),w},toWireType:(p,w)=>Zr.toHandle(w),argPackAdvance:Vr,readValueFromPointer:Nl,destructorFunction:null},dS=(p)=>Sn(p,fS),hS=(p,w)=>{switch(w){case 4:return function(k){return this.fromWireType(Xn[k>>2])};case 8:return function(k){return this.fromWireType(en[k>>3])};default:throw TypeError(`invalid float width (${w}): ${p}`)}},mS=(p,w,k)=>{w=Ge(w),Sn(p,{name:w,fromWireType:(v)=>v,toWireType:(v,O)=>O,argPackAdvance:Vr,readValueFromPointer:hS(w,k),destructorFunction:null})},Tl=(p,w)=>Object.defineProperty(w,"name",{value:p}),Sp=(p)=>{while(p.length){var w=p.pop(),k=p.pop();k(w)}};function pS(p){for(var w=1;w<p.length;++w)if(p[w]!==null&&p[w].destructorFunction===void 0)return!0;return!1}function gS(p,w,k,v,O,I){var C=w.length;if(C<2)pe("argTypes array size mismatch! Must at least get return value and 'this' types!");var T=w[1]!==null&&k!==null,G=pS(w),V=w[0].name!=="void",ht=C-2,xt=Array(ht),Jt=[],Te=[],Yi=function(...Fl){if(Fl.length!==ht)pe(`function ${p} called with ${Fl.length} arguments, expected ${ht}`);Te.length=0;var Cl;if(Jt.length=T?2:1,Jt[0]=O,T)Cl=w[1].toWireType(Te,this),Jt[1]=Cl;for(var Ji=0;Ji<ht;++Ji)xt[Ji]=w[Ji+2].toWireType(Te,Fl[Ji]),Jt.push(xt[Ji]);var NM=v(...Jt);function TM(AM){if(G)Sp(Te);else for(var Vi=T?1:2;Vi<w.length;Vi++){var PM=Vi===1?Cl:xt[Vi-2];if(w[Vi].destructorFunction!==null)w[Vi].destructorFunction(PM)}if(V)return w[0].fromWireType(AM)}return TM(NM)};return Tl(p,Yi)}var bS=(p,w,k)=>{if(p[w].overloadTable===void 0){var v=p[w];p[w]=function(...O){if(!p[w].overloadTable.hasOwnProperty(O.length))pe(`Function '${k}' called with an invalid number of arguments (${O.length}) - expects one of (${p[w].overloadTable})!`);return p[w].overloadTable[O.length].apply(this,O)},p[w].overloadTable=[],p[w].overloadTable[v.argCount]=v}},wS=(p,w,k)=>{if(n.hasOwnProperty(p)){if(k===void 0||n[p].overloadTable!==void 0&&n[p].overloadTable[k]!==void 0)pe(`Cannot register public name '${p}' twice`);if(bS(n,p,p),n.hasOwnProperty(k))pe(`Cannot register multiple overloads of a function with the same number of arguments (${k})!`);n[p].overloadTable[k]=w}else if(n[p]=w,k!==void 0)n[p].numArguments=k},$S=(p,w)=>{var k=[];for(var v=0;v<p;v++)k.push(et[w+v*4>>2]);return k},kS=(p,w,k)=>{if(!n.hasOwnProperty(p))Ep("Replacing nonexistent public symbol");if(n[p].overloadTable!==void 0&&k!==void 0)n[p].overloadTable[k]=w;else n[p]=w,n[p].argCount=k},yS=(p,w,k)=>{p=p.replace(/p/g,"i");var v=n["dynCall_"+p];return v(w,...k)},ja=[],Mp,Op=(p)=>{var w=ja[p];if(!w){if(p>=ja.length)ja.length=p+1;ja[p]=w=Mp.get(p)}return w},vS=(p,w,k=[])=>{if(p.includes("j"))return yS(p,w,k);var v=Op(w)(...k);return v},ES=(p,w)=>(...k)=>vS(p,w,k),SS=(p,w)=>{p=Ge(p);function k(){if(p.includes("j"))return ES(p,w);return Op(w)}var v=k();if(typeof v!="function")pe(`unknown function pointer with signature ${p}: ${w}`);return v},MS=(p,w)=>{var k=Tl(w,function(v){this.name=w,this.message=v;var O=Error(v).stack;if(O!==void 0)this.stack=this.toString()+`
3
+ `+O.replace(/^Error(:[^\n]*)?\n/,"")});return k.prototype=Object.create(p.prototype),k.prototype.constructor=k,k.prototype.toString=function(){if(this.message===void 0)return this.name;else return`${this.name}: ${this.message}`},k},xp,Ip=(p)=>{var w=Tp(p),k=Ge(w);return On(w),k},OS=(p,w)=>{var k=[],v={};function O(I){if(v[I])return;if(Jr[I])return;if(La[I]){La[I].forEach(O);return}k.push(I),v[I]=!0}throw w.forEach(O),new xp(`${p}: `+k.map(Ip).join([", "]))},xS=(p)=>{p=p.trim();let w=p.indexOf("(");if(w!==-1)return p.substr(0,w);else return p},IS=(p,w,k,v,O,I,C)=>{var T=$S(w,k);p=Ge(p),p=xS(p),O=SS(v,O),wS(p,function(){OS(`Cannot call ${p} due to unbound types`,T)},w-1),oS([],T,(G)=>{var V=[G[0],null].concat(G.slice(1));return kS(p,gS(p,V,null,O,I,C),w-1),[]})},RS=(p,w,k)=>{switch(w){case 1:return k?(v)=>tt[v]:(v)=>W[v];case 2:return k?(v)=>Q[v>>1]:(v)=>U[v>>1];case 4:return k?(v)=>yt[v>>2]:(v)=>et[v>>2];default:throw TypeError(`invalid integer width (${w}): ${p}`)}},NS=(p,w,k,v,O)=>{if(w=Ge(w),O===-1)O=4294967295;var I=(ht)=>ht;if(v===0){var C=32-8*k;I=(ht)=>ht<<C>>>C}var T=w.includes("unsigned"),G=(ht,xt)=>{},V;if(T)V=function(ht,xt){return G(xt,this.name),xt>>>0};else V=function(ht,xt){return G(xt,this.name),xt};Sn(p,{name:w,fromWireType:I,toWireType:V,argPackAdvance:Vr,readValueFromPointer:RS(w,k,v!==0),destructorFunction:null})},TS=(p,w,k)=>{var v=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array],O=v[w];function I(C){var T=et[C>>2],G=et[C+4>>2];return new O(tt.buffer,G,T)}k=Ge(k),Sn(p,{name:k,fromWireType:I,argPackAdvance:Vr,readValueFromPointer:I},{ignoreDuplicateRegistrations:!0})},AS=(p,w,k,v)=>{if(!(v>0))return 0;var O=k,I=k+v-1;for(var C=0;C<p.length;++C){var T=p.charCodeAt(C);if(T>=55296&&T<=57343){var G=p.charCodeAt(++C);T=65536+((T&1023)<<10)|G&1023}if(T<=127){if(k>=I)break;w[k++]=T}else if(T<=2047){if(k+1>=I)break;w[k++]=192|T>>6,w[k++]=128|T&63}else if(T<=65535){if(k+2>=I)break;w[k++]=224|T>>12,w[k++]=128|T>>6&63,w[k++]=128|T&63}else{if(k+3>=I)break;w[k++]=240|T>>18,w[k++]=128|T>>12&63,w[k++]=128|T>>6&63,w[k++]=128|T&63}}return w[k]=0,k-O},PS=(p,w,k)=>AS(p,W,w,k),HS=(p)=>{var w=0;for(var k=0;k<p.length;++k){var v=p.charCodeAt(k);if(v<=127)w++;else if(v<=2047)w+=2;else if(v>=55296&&v<=57343)w+=4,++k;else w+=3}return w},Rp=(p,w,k)=>{var v=w+k,O="";while(!(w>=v)){var I=p[w++];if(!I)return O;if(!(I&128)){O+=String.fromCharCode(I);continue}var C=p[w++]&63;if((I&224)==192){O+=String.fromCharCode((I&31)<<6|C);continue}var T=p[w++]&63;if((I&240)==224)I=(I&15)<<12|C<<6|T;else I=(I&7)<<18|C<<12|T<<6|p[w++]&63;if(I<65536)O+=String.fromCharCode(I);else{var G=I-65536;O+=String.fromCharCode(55296|G>>10,56320|G&1023)}}return O},FS=(p,w)=>p?Rp(W,p,w):"",CS=(p,w)=>{w=Ge(w);var k=w==="std::string";Sn(p,{name:w,fromWireType(v){var O=et[v>>2],I=v+4,C;if(k){var T=I;for(var G=0;G<=O;++G){var V=I+G;if(G==O||W[V]==0){var ht=V-T,xt=FS(T,ht);if(C===void 0)C=xt;else C+=String.fromCharCode(0),C+=xt;T=V+1}}}else{var Jt=Array(O);for(var G=0;G<O;++G)Jt[G]=String.fromCharCode(W[I+G]);C=Jt.join("")}return On(v),C},toWireType(v,O){if(O instanceof ArrayBuffer)O=new Uint8Array(O);var I,C=typeof O=="string";if(!(C||O instanceof Uint8Array||O instanceof Uint8ClampedArray||O instanceof Int8Array))pe("Cannot pass non-string to std::string");if(k&&C)I=HS(O);else I=O.length;var T=Hl(4+I+1),G=T+4;if(et[T>>2]=I,k&&C)PS(O,G,I+1);else if(C)for(var V=0;V<I;++V){var ht=O.charCodeAt(V);if(ht>255)On(G),pe("String has UTF-16 code units that do not fit in 8 bits");W[G+V]=ht}else for(var V=0;V<I;++V)W[G+V]=O[V];if(v!==null)v.push(On,T);return T},argPackAdvance:Vr,readValueFromPointer:Nl,destructorFunction(v){On(v)}})},LS=(p,w)=>{var k="";for(var v=0;!(v>=w/2);++v){var O=Q[p+v*2>>1];if(O==0)break;k+=String.fromCharCode(O)}return k},jS=(p,w,k)=>{if(k??=2147483647,k<2)return 0;k-=2;var v=w,O=k<p.length*2?k/2:p.length;for(var I=0;I<O;++I){var C=p.charCodeAt(I);Q[w>>1]=C,w+=2}return Q[w>>1]=0,w-v},_S=(p)=>p.length*2,GS=(p,w)=>{var k=0,v="";while(!(k>=w/4)){var O=yt[p+k*4>>2];if(O==0)break;if(++k,O>=65536){var I=O-65536;v+=String.fromCharCode(55296|I>>10,56320|I&1023)}else v+=String.fromCharCode(O)}return v},BS=(p,w,k)=>{if(k??=2147483647,k<4)return 0;var v=w,O=v+k-4;for(var I=0;I<p.length;++I){var C=p.charCodeAt(I);if(C>=55296&&C<=57343){var T=p.charCodeAt(++I);C=65536+((C&1023)<<10)|T&1023}if(yt[w>>2]=C,w+=4,w+4>O)break}return yt[w>>2]=0,w-v},US=(p)=>{var w=0;for(var k=0;k<p.length;++k){var v=p.charCodeAt(k);if(v>=55296&&v<=57343)++k;w+=4}return w},WS=(p,w,k)=>{k=Ge(k);var v,O,I,C;if(w===2)v=LS,O=jS,C=_S,I=(T)=>U[T>>1];else if(w===4)v=GS,O=BS,C=US,I=(T)=>et[T>>2];Sn(p,{name:k,fromWireType:(T)=>{var G=et[T>>2],V,ht=T+4;for(var xt=0;xt<=G;++xt){var Jt=T+4+xt*w;if(xt==G||I(Jt)==0){var Te=Jt-ht,Yi=v(ht,Te);if(V===void 0)V=Yi;else V+=String.fromCharCode(0),V+=Yi;ht=Jt+w}}return On(T),V},toWireType:(T,G)=>{if(typeof G!="string")pe(`Cannot pass non-string to C++ string type ${k}`);var V=C(G),ht=Hl(4+V+w);if(et[ht>>2]=V/w,O(G,ht+4,V+w),T!==null)T.push(On,ht);return ht},argPackAdvance:Vr,readValueFromPointer:Nl,destructorFunction(T){On(T)}})},KS=(p,w)=>{w=Ge(w),Sn(p,{isVoid:!0,name:w,argPackAdvance:0,fromWireType:()=>{return},toWireType:(k,v)=>{return}})},zS=(p,w,k)=>W.copyWithin(p,w,w+k),Al=[],DS=(p,w,k,v)=>{return p=Al[p],w=Zr.toValue(w),p(null,w,k,v)},qS={},YS=(p)=>{var w=qS[p];if(w===void 0)return Ge(p);return w},Np=()=>{if(typeof globalThis=="object")return globalThis;function p(w){w.$$$embind_global$$$=w;var k=typeof $$$embind_global$$$=="object"&&w.$$$embind_global$$$==w;if(!k)delete w.$$$embind_global$$$;return k}if(typeof $$$embind_global$$$=="object")return $$$embind_global$$$;if(typeof global=="object"&&p(global))$$$embind_global$$$=global;else if(typeof self=="object"&&p(self))$$$embind_global$$$=self;if(typeof $$$embind_global$$$=="object")return $$$embind_global$$$;throw Error("unable to get global object.")},JS=(p)=>{if(p===0)return Zr.toHandle(Np());else return p=YS(p),Zr.toHandle(Np()[p])},VS=(p)=>{var w=Al.length;return Al.push(p),w},ZS=(p,w)=>{var k=Jr[p];if(k===void 0)pe(`${w} has unknown type ${Ip(p)}`);return k},QS=(p,w)=>{var k=Array(p);for(var v=0;v<p;++v)k[v]=ZS(et[w+v*4>>2],"parameter "+v);return k},XS=Reflect.construct,tM=(p,w,k)=>{var v=[],O=p.toWireType(v,k);if(v.length)et[w>>2]=Zr.toHandle(v);return O},eM=(p,w,k)=>{var v=QS(p,w),O=v.shift();p--;var I=Array(p),C=(G,V,ht,xt)=>{var Jt=0;for(var Te=0;Te<p;++Te)I[Te]=v[Te].readValueFromPointer(xt+Jt),Jt+=v[Te].argPackAdvance;var Yi=k===1?XS(V,I):V.apply(G,I);return tM(O,ht,Yi)},T=`methodCaller<(${v.map((G)=>G.name).join(", ")}) => ${O.name}>`;return VS(Tl(T,C))},nM=(p)=>{if(p>9)Mn[p+1]+=1},rM=(p)=>{var w=Zr.toValue(p);Sp(w),Rl(p)},iM=()=>{mp("")},sM=()=>2147483648,oM=(p)=>{var w=F.buffer,k=(p-w.byteLength+65535)/65536;try{return F.grow(k),nn(),1}catch(v){}},aM=(p)=>{var w=W.length;p>>>=0;var k=sM();if(p>k)return!1;var v=(G,V)=>G+(V-G%V)%V;for(var O=1;O<=4;O*=2){var I=w*(1+0.2/O);I=Math.min(I,p+100663296);var C=Math.min(k,v(Math.max(p,I),65536)),T=oM(C);if(T)return!0}return!1},Pl={},cM=()=>f||"./this.program",co=()=>{if(!co.strings){var p=(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",w={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:p,_:cM()};for(var k in Pl)if(Pl[k]===void 0)delete w[k];else w[k]=Pl[k];var v=[];for(var k in w)v.push(`${k}=${w[k]}`);co.strings=v}return co.strings},uM=(p,w)=>{for(var k=0;k<p.length;++k)tt[w++]=p.charCodeAt(k);tt[w]=0},lM=(p,w)=>{var k=0;return co().forEach((v,O)=>{var I=w+k;et[p+O*4>>2]=I,uM(v,I),k+=v.length+1}),0},fM=(p,w)=>{var k=co();et[p>>2]=k.length;var v=0;return k.forEach((O)=>v+=O.length+1),et[w>>2]=v,0},dM=0,hM=()=>eS||dM>0,mM=(p)=>{if(B=p,!hM())n.onExit?.(p),_=!0;d(p,new tS(p))},pM=(p,w)=>{B=p,mM(p)},gM=pM,bM=(p)=>52,wM=(p,w)=>w+2097152>>>0<4194305-!!p?(p>>>0)+w*4294967296:NaN;function $M(p,w,k,v,O){var I=wM(w,k);return 70}var kM=[null,[],[]],yM=(p,w)=>{var k=kM[p];if(w===0||w===10)(p===1?x:R)(Rp(k,0)),k.length=0;else k.push(w)},vM=(p,w,k,v)=>{var O=0;for(var I=0;I<k;I++){var C=et[w>>2],T=et[w+4>>2];w+=8;for(var G=0;G<T;G++)yM(p,W[C+G]);O+=T}return et[v>>2]=O,0};sS(),yp=n.BindingError=class extends Error{constructor(w){super(w);this.name="BindingError"}},vp=n.InternalError=class extends Error{constructor(w){super(w);this.name="InternalError"}},lS(),xp=n.UnboundTypeError=MS(Error,"UnboundTypeError");var EM={o:rS,q:iS,m:cS,l:dS,j:mS,f:IS,b:NS,a:TS,e:CS,c:WS,n:KS,v:zS,i:DS,d:Rl,k:JS,h:eM,y:nM,g:rM,r:iM,s:aM,t:lM,u:fM,z:gM,w:bM,p:$M,x:vM},Yt=XE(),SM=()=>(SM=Yt.B)(),Tp=(p)=>(Tp=Yt.C)(p),Hl=(p)=>(Hl=Yt.D)(p),On=(p)=>(On=Yt.E)(p),MM=(p)=>(MM=Yt._emscripten_stack_restore)(p),OM=(p)=>(OM=Yt._emscripten_stack_alloc)(p),xM=()=>(xM=Yt.emscripten_stack_get_current)(),IM=(p)=>(IM=Yt.__cxa_increment_exception_refcount)(p),Ap=(p)=>(Ap=Yt.G)(p),RM=n.dynCall_jiji=(p,w,k,v,O)=>(RM=n.dynCall_jiji=Yt.H)(p,w,k,v,O),_a;ao=function p(){if(!_a)Pp();if(!_a)ao=p};function Pp(){if(qr>0)return;if(Sl(),qr>0)return;function p(){if(_a)return;if(_a=!0,n.calledRun=!0,_)return;if(Ml(),r(n),n.onRuntimeInitialized)n.onRuntimeInitialized();KE()}if(n.setStatus)n.setStatus("Running..."),setTimeout(function(){setTimeout(function(){n.setStatus("")},1),p()},1);else p()}if(n.preInit){if(typeof n.preInit=="function")n.preInit=[n.preInit];while(n.preInit.length>0)n.preInit.pop()()}return Pp(),s}})(),Jg=vx;function cf(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}var af;function Sx(){if(af)return af;let t=new WebAssembly.Module(Ex(Buffer.from("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","base64"))),e={noInitialRun:!0,print:()=>{return},printErr:()=>{return},instantiateWasm:(n,r)=>{let i=new WebAssembly.Instance(t,n);return r(i),i.exports}};if(Jg(e),typeof e.decode!=="function")throw Error("the JPEG decoder did not start");return af=e,e}function Vg(t,e){let n=cf(t);if(n&&n.width*n.height>e)throw Error(`${n.width}×${n.height} is over ${e/1e6} megapixels`);let r=null;try{r=Sx().decode(t,!0)}catch{r=null}if(!r)throw Error("not a JPEG image this decoder can read");return{width:r.width,height:r.height,data:new Uint8Array(r.data.buffer,r.data.byteOffset,r.data.length)}}var ss=[137,80,78,71,13,10,26,10],Xg=13,tb=3;function ei(t){return t.length>=ss.length&&ss.every((e,n)=>t[n]===e)}var eb={0:1,2:3,4:2,6:4};function Ix(t){if(t.length<33||!ei(t))return;let e=Buffer.from(t.buffer,t.byteOffset,t.byteLength),n=e.readUInt32BE(16),r=e.readUInt32BE(20),i=e[25];if(e[24]!==8||e[28]!==0||eb[i]===void 0)return;let s=[];for(let o=8;o+12<=e.length;){let a=e.readUInt32BE(o),c=e.toString("latin1",o+4,o+8);if(c==="IDAT")s.push(e.subarray(o+8,o+8+a));else if(c==="tRNS"||c==="IEND"){if(c==="tRNS"&&i!==4&&i!==6)return;break}o+=12+a}return s.length>0?{width:n,height:r,type:i,idat:s}:void 0}function Rx(t,e,n,r){let i=new Uint8Array(e);for(let s=0;s<n;s++){let o=s*(e+1),a=t[o],c=o+1,u=s>0?t:i,l=s>0?c-e-1:0;if(a===1)for(let f=r;f<e;f++)t[c+f]=t[c+f]+t[c+f-r];else if(a===2)for(let f=0;f<e;f++)t[c+f]=t[c+f]+u[l+f];else if(a===3){for(let f=0;f<r;f++)t[c+f]=t[c+f]+(u[l+f]>>1);for(let f=r;f<e;f++)t[c+f]=t[c+f]+(t[c+f-r]+u[l+f]>>1)}else if(a===4){for(let f=0;f<r;f++)t[c+f]=t[c+f]+u[l+f];for(let f=r;f<e;f++){let d=t[c+f-r],h=u[l+f],m=u[l+f-r],$=Math.abs(h-m),g=Math.abs(d-m),b=Math.abs(d+h-2*m);t[c+f]=t[c+f]+($<=g&&$<=b?d:g<=b?h:m)}}else if(a!==0)throw Error(`bad PNG filter ${a}`)}}function Nx(t){let{width:e,height:n,type:r}=t,i=eb[r],s=e*i,o=xx(Buffer.concat(t.idat),{chunkSize:Math.min(268435456,Math.max(65536,n*(s+1)))});if(o.length<n*(s+1))throw Error("truncated PNG");Rx(o,s,n,i);let a=new Uint8Array(e*n*4);for(let c=0;c<n;c++){let u=c*(s+1)+1,l=c*e*4;if(r===6)a.set(o.subarray(u,u+s),l);else if(r===2)for(let f=0,d=u,h=l;f<e;f++,d+=3,h+=4)a[h]=o[d],a[h+1]=o[d+1],a[h+2]=o[d+2],a[h+3]=255;else if(r===0)for(let f=0,d=l;f<e;f++,d+=4){let h=o[u+f];a[d]=h,a[d+1]=h,a[d+2]=h,a[d+3]=255}else for(let f=0,d=u,h=l;f<e;f++,d+=2,h+=4){let m=o[d];a[h]=m,a[h+1]=m,a[h+2]=m,a[h+3]=o[d+1]}}return{width:e,height:n,data:a}}function Ht(t){let e=Ix(t);if(e)return Nx(e);let n=Qg.PNG.sync.read(Buffer.from(t));return{width:n.width,height:n.height,data:new Uint8Array(n.data)}}function or(t,e){if(ei(t)){let n=un(t);if(n&&n.width*n.height>e)throw Error(`${n.width}×${n.height} is over ${e/1e6} megapixels`);return Ht(t)}if(t[0]===255&&t[1]===216)return Vg(t,e);throw Error("not a PNG or JPEG image")}function nb(t,e){let{width:n,height:r,at:i}=e,s=Math.max(0,i.x),o=Math.max(0,i.y),a=Math.min(n,i.x+i.w),c=Math.min(r,i.y+i.h);if(a<=s||c<=o)return;let u={x:s,y:o,w:a-s,h:c-o};if(i.w===t.width&&i.h===t.height)return{part:t,box:u,dx:s-i.x,dy:o-i.y};let l={x:(s-i.x)*t.width/i.w,y:(o-i.y)*t.height/i.h,w:u.w*t.width/i.w,h:u.h*t.height/i.h};return{part:mo(t,l,u.w,u.h),box:u,dx:0,dy:0}}function rb(t,e){let n=new Uint8Array(e.width*e.height*4),r=nb(t,e);if(r){let{part:i,box:s,dx:o,dy:a}=r;for(let c=0;c<s.h;c++){let u=((c+a)*i.width+o)*4;n.set(i.data.subarray(u,u+s.w*4),((s.y+c)*e.width+s.x)*4)}}return{width:e.width,height:e.height,data:n}}function ar(t,e,n,r={width:t.width,height:t.height,at:{x:0,y:0,w:t.width,h:t.height}}){let i=rt(e),{width:s,height:o}=r,a=new Uint8Array(s*o*3);for(let h=0;h<s*3;h+=3)a.set(i,h);for(let h=1;h<o;h++)a.copyWithin(h*s*3,0,s*3);let c=nb(t,r);if(!c)return{width:s,height:o,data:a};let{part:u,box:l,dx:f,dy:d}=c;for(let h=0;h<l.h;h++)for(let m=0;m<l.w;m++){let $=((h+d)*u.width+m+f)*4,g=((l.y+h)*s+l.x+m)*3,b=u.data[$+3]/255*n;for(let y=0;y<3;y++)a[g+y]=Math.round(i[y]*(1-b)+u.data[$+y]*b)}return{width:s,height:o,data:a}}function Zg(t,e){for(let n=0;n+e.length<=t.length;n++){let r=!0;for(let i=0;i<e.length&&r;i++)r=t[n+i]===e.charCodeAt(i);if(r)return n}return-1}function un(t){if(t.length<33||!ei(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=Zg(t,"IDAT");return{width:n,height:r,alpha:Zg(i===-1?t:t.subarray(0,i),"tRNS")!==-1}}function ib(t,e=Xg){let{width:n,height:r,data:i}=t,s=(l)=>{for(let f=l*n*4+3,d=f+n*4;f<d;f+=4)if(i[f]>=e)return!0;return!1},o=0;while(o<r&&!s(o))o++;if(o===r)return null;let a=r-1;while(!s(a))a--;let c=n,u=-1;for(let l=o;l<=a;l++){let f=l*n*4+3;for(let d=0;d<c;d++)if(i[f+d*4]>=e){c=d;break}for(let d=n-1;d>u;d--)if(i[f+d*4]>=e){u=d;break}}return{x:c,y:o,w:u-c+1,h:a-o+1}}function Tn(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)<Xg)n++;return Math.round(n*100/(e.w*e.h))}function sb(t,e,n){let r=Math.min(e/t.width,n/t.height),i=Math.max(1,Math.round(t.width*r)),s=Math.max(1,Math.round(t.height*r)),o=mo(t,{x:0,y:0,w:t.width,h:t.height},i,s),a=new Uint8Array(e*n*4),c=Math.floor((e-i)/2),u=Math.floor((n-s)/2);for(let l=0;l<s;l++)a.set(o.data.subarray(l*i*4,(l+1)*i*4),((u+l)*e+c)*4);return{width:e,height:n,data:a}}function Tx(t){let e=Math.abs(t);if(e<1)return(7*e*e*e-12*e*e+5.333333333333333)/6;if(e<2)return(-2.3333333333333335*e*e*e+12*e*e-20*e+10.666666666666666)/6;return 0}function uf(t,e,n,r){if(n===r&&Number.isInteger(e)&&e>=0&&e+r<=t)return{first:Int32Array.from({length:r},(l,f)=>e+f),size:1,weights:new Float32Array(r).fill(1)};let i=n/r,s=Math.max(1,i),o=2*s,a=Math.min(t,Math.ceil(2*o)+2),c=new Int32Array(r),u=new Float32Array(r*a);for(let l=0;l<r;l++){let f=e+(l+0.5)*i,d=Math.floor(f-o-0.5),h=Math.max(0,Math.min(t-a,d));c[l]=h;let m=0;for(let $=d;$<=Math.ceil(f+o-0.5);$++){let g=Tx(($+0.5-f)/s),b=l*a+Math.min(t-1,Math.max(0,$))-h;u[b]=(u[b]??0)+g,m+=g}for(let $=l*a;$<(l+1)*a;$++)u[$]=(u[$]??0)/m}return{first:c,size:a,weights:u}}function ob(t,e,n,r,i,s,o){let a=uf(t,e.y,e.h,r),c=n*i,u=a.size+1,l=Array.from({length:u},()=>new Float32Array(c)),f=new Int32Array(u).fill(-1),d=new Float32Array(c),h=[],m=[];for(let $=0;$<r;$++){h.length=0,m.length=0;let g=a.first[$];for(let y=0;y<a.size;y++){let E=a.weights[$*a.size+y];if(E===0)continue;let S=g+y,x=S%u,R=l[x];if(f[x]!==S)s(S,R),f[x]=S;h.push(R),m.push(E)}let b=0;while(b<h.length){let y=h[b],E=m[b];if(h.length-b>=4){let S=h[b+1],x=h[b+2],R=h[b+3],N=m[b+1],F=m[b+2],_=m[b+3];if(b===0)for(let B=0;B<c;B++)d[B]=y[B]*E+S[B]*N+x[B]*F+R[B]*_;else for(let B=0;B<c;B++)d[B]=d[B]+(y[B]*E+S[B]*N+x[B]*F+R[B]*_);b+=4}else{if(b===0)for(let S=0;S<c;S++)d[S]=y[S]*E;else for(let S=0;S<c;S++)d[S]=d[S]+y[S]*E;b+=1}}if(h.length===0)d.fill(0);o($,d)}}function ab(t,e,n,r,i){let s=0,o=n;while(s<o){let c=s+o>>1;if(t[c]+e-1<r)s=c+1;else o=c}let a=s;o=n;while(s<o){let c=s+o>>1;if(t[c]<=i)s=c+1;else o=c}return[a,s]}function mo(t,e,n,r){let i=uf(t.width,e.x,e.w,n),s=t.data,o=t.width,a=new Float32Array(o*4),c=new Uint8Array(n*r*4);return ob(t.height,e,n,r,4,(u,l)=>{let f=u*o*4,d=o,h=-1;for(let g=0,b=0;g<o*4;g+=4,b++){let y=s[f+g+3];if(y===0){a[g]=0,a[g+1]=0,a[g+2]=0,a[g+3]=0;continue}if(b<d)d=b;h=b,a[g]=s[f+g]*y,a[g+1]=s[f+g+1]*y,a[g+2]=s[f+g+2]*y,a[g+3]=y}if(l.fill(0),h<0)return;let[m,$]=ab(i.first,i.size,n,d,h);for(let g=m;g<$;g++){let b=i.first[g]*4,y=g*i.size,E=0,S=0,x=0,R=0;for(let N=0;N<i.size;N++){let F=i.weights[y+N],_=b+N*4;E+=a[_]*F,S+=a[_+1]*F,x+=a[_+2]*F,R+=a[_+3]*F}l[g*4]=E,l[g*4+1]=S,l[g*4+2]=x,l[g*4+3]=R}},(u,l)=>{let f=u*n*4;for(let d=0;d<n;d++){let h=d*4,m=l[h+3];if(m<=0)continue;let $=l[h]/m;c[f+h]=($<0?0:$>255?255:$)+0.5,$=l[h+1]/m,c[f+h+1]=($<0?0:$>255?255:$)+0.5,$=l[h+2]/m,c[f+h+2]=($<0?0:$>255?255:$)+0.5,c[f+h+3]=(m>255?255:m)+0.5}}),{width:n,height:r,data:c}}function cb(t,e,n,r){let i=uf(t.width,e.x,e.w,n),s=t.data,o=t.width,a=new Float32Array(n*r);return ob(t.height,e,n,r,1,(c,u)=>{let l=c*o,f=o,d=-1;for(let $=0;$<o;$++)if(s[l+$]!==0){if($<f)f=$;d=$}if(u.fill(0),d<0)return;let[h,m]=ab(i.first,i.size,n,f,d);for(let $=h;$<m;$++){let g=l+i.first[$],b=$*i.size,y=0;for(let E=0;E<i.size;E++)y+=s[g+E]*i.weights[b+E];u[$]=y}},(c,u)=>{a.set(u,c*n)}),{width:n,height:r,data:a}}function po(t,e){if(e<=0)return t;let n=Math.max(1,Math.ceil(e*3)),r=Array.from({length:2*n+1},(l,f)=>Math.exp(-((f-n)**2)/(2*e*e))),i=r.reduce((l,f)=>l+f,0),{width:s,height:o,data:a}=t,c=new Float32Array(s*o);for(let l=0;l<o;l++){let f=l*s;for(let d=0;d<s;d++){let h=0;for(let m=-n;m<=n;m++)h+=(a[f+Math.min(s-1,Math.max(0,d+m))]??0)*(r[m+n]??0);c[f+d]=h/i}}let u=new Float32Array(s*o);for(let l=0;l<o;l++){let f=l*s;for(let d=-n;d<=n;d++){let h=(r[d+n]??0)/i,m=Math.min(o-1,Math.max(0,l+d))*s;for(let $=0;$<s;$++)u[f+$]=(u[f+$]??0)+(c[m+$]??0)*h}}return{width:s,height:o,data:u}}function go(t){let e=new Uint8Array(t.data.length);for(let n=0;n<e.length;n++){let r=t.data[n];e[n]=(r<0?0:r>255?255:r)+0.5}return{width:t.width,height:t.height,data:e}}function ni(t){let e=new Uint8Array(t.width*t.height);for(let n=0;n<e.length;n++)e[n]=t.data[n*4+3]??0;return{width:t.width,height:t.height,data:e}}var Ax=Array.from({length:256},(t,e)=>{let n=e;for(let r=0;r<8;r++)n=n&1?3988292384^n>>>1:n>>>1;return n>>>0});function Px(t){let e=4294967295;for(let n of t)e=(Ax[(e^n)&255]??0)^e>>>8;return(e^4294967295)>>>0}function sr(t,e){let n=Buffer.alloc(12+e.length);return n.writeUInt32BE(e.length,0),n.write(t,4,"latin1"),n.set(e,8),n.writeUInt32BE(Px(n.subarray(4,8+e.length)),8+e.length),n}function ub(t,e,n){let r=new Uint8Array(n*(e+1));r.set(t.subarray(0,e),1);for(let i=1;i<n;i++){let s=i*(e+1),o=i*e,a=o-e;r[s]=2;for(let c=0;c<e;c++)r[s+1+c]=t[o+c]-t[a+c]}return r}function lb(t){return Ox(t,{level:1,strategy:Mx.Z_RLE})}function fb(t,e,n){let r=Buffer.alloc(13);return r.writeUInt32BE(t.width,0),r.writeUInt32BE(t.height,4),r[8]=8,r[9]=e,Buffer.concat([Buffer.from(ss),sr("IHDR",r),...n,sr("IDAT",lb(ub(t.data,t.width,t.height))),sr("IEND",new Uint8Array)])}function db(t){let[e,n,r]=rt(t),i=new Uint8Array(768);for(let s=0;s<256;s++)i.set([e,n,r],s*3);return sr("PLTE",i)}function hb(t,e,n,r,i){let s=Buffer.alloc(13);return s.writeUInt32BE(t,0),s.writeUInt32BE(e,4),s[8]=8,s[9]=n,Buffer.concat([Buffer.from(ss),sr("IHDR",s),sr("IDAT",lb(ub(i,t*r,e))),sr("IEND",new Uint8Array)])}function cr(t){return hb(t.width,t.height,2,3,t.data)}function ln(t){return hb(t.width,t.height,6,4,t.data)}function ri(t,e){return fb(t,tb,[db(e),sr("tRNS",Uint8Array.from({length:256},(n,r)=>r))])}function lf(t){return fb(t,0,[])}function za(t,e){if(!ei(t)||t[25]!==tb)return;let n=Buffer.from(t.buffer,t.byteOffset,t.byteLength),r=[Buffer.from(ss)],i=ss.length;while(i+8<=n.length){let s=i+12+n.readUInt32BE(i);r.push(n.toString("latin1",i+4,i+8)==="PLTE"?db(e):n.subarray(i,s)),i=s}return Buffer.concat(r)}var ur=100,$e=25000000,Gx=536870912,os=["safe","questionable","explicit"],ii=["nudity","underwear"],mf=["comic","monochrome","sketch","chibi"],vb=["off","5","10","25","50","100"],Eb=["off","720","1080","1440","1800","2560"],Sb={nudity:new Set(["nude","naked","topless","bottomless","nipples","naked_towel","undressing"]),underwear:new Set(["underwear","panties","pantsu","bra","lingerie","pantyshot"])},Bx={comic:new Set(["comic","4koma"]),monochrome:new Set(["monochrome","greyscale"]),sketch:new Set(["sketch","lineart","line_art"]),chibi:new Set(["chibi"])},Ux=/^(?:rating|score|width|height|filetype|dimension):/,bo={safe:"s",questionable:"q",explicit:"e"},Mb=8191,Wx=20000,Kx=5000,mb=3000,pb=8,zx=8,Dx=8000,qx=3000,Ob=60000,gb=3,Yx=3,Jx="https://static.zerochan.net",xb="https://s1.zerochan.net",pf=`ttheme/${It.version} (+${It.homepage})`,Vx=["orig","tile","thumb","cut"],Ib=new Map,Zx=mI(process.env.TTHEME_FIND_HOSTS),Qx=hI(process.env.TTHEME_FIND_CUTOUTS);Lx(qx);var Xx=["artist","character","copyright"];function bb(t){try{return Hx(t)}catch{return[]}}function as(t){return t.startsWith("//")?`https:${t}`:t}function fr(t){return(/\.([a-z0-9]+)(?:\?.*)?$/i.exec(t)?.[1]??"").toLowerCase()}function $o(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 tI(t){let e=t.trim(),r=(e?JSON.parse(e):{}).tags??{};return new Map(Object.entries(r).map(([i,s])=>[i,String(s)]))}function df(t,e,n){let r=as(String(t??""));return{file:r,width:Number(e)||0,height:Number(n)||0,ext:fr(r)}}function An(t){return String(t??"").split(/\s+/).filter(Boolean)}function hf(t){let e=typeof t==="number"?new Date(t*1000):typeof t==="string"?new Date(t):void 0;return e&&!Number.isNaN(e.getTime())?e.toISOString().slice(0,10):void 0}function Rb(t,e){let n=as(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??""),score:Number(t.score)||0,rating:String(t.rating??""),md5:String(e.md5??""),source:String(t.source??""),tags:An(e.tags),named:e.named,...hf(t.created_at)?{posted:hf(t.created_at)}:{},solo:e.solo,family:Number(t.parent_id)||(t.has_children===!0?Number(t.id):0),smaller:e.versions.filter((s)=>s.file&&s.width>0&&s.height>0&&s.width*s.height<r*i)}]}function eI(t){let e=tI(t);return $o(t).flatMap((n)=>{let r=as(String(n.file_url??"")),i=String(n.tags??""),s=(o)=>An(i).filter((a)=>e.get(a)===o);return Rb(n,{preview:n.preview_url,file:r,ext:String(n.file_ext||fr(r)).toLowerCase(),owner:n.author,md5:n.md5,tags:i,named:{artist:s("artist"),character:s("character"),copyright:s("copyright")},solo:void 0,versions:[df(n.jpeg_url,n.jpeg_width,n.jpeg_height),df(n.sample_url,n.sample_width,n.sample_height)]})})}function nI(t){return $o(t).flatMap((e)=>{let n=as(String(e.file_url??"")),r=String(e.tag_string??""),i=e.media_asset??{};return Rb(e,{preview:i.variants?.find((s)=>s.type==="360x360")?.url??e.preview_file_url,file:n,ext:String(e.file_ext||fr(n)).toLowerCase(),owner:"",md5:e.md5,tags:r,named:{artist:An(e.tag_string_artist),character:An(e.tag_string_character),copyright:An(e.tag_string_copyright)},solo:r.split(/\s+/).includes("solo"),versions:(i.variants??[]).map((s)=>df(s.url,s.width,s.height)).filter((s)=>s.ext==="jpg"||s.ext==="png").sort((s,o)=>o.width*o.height-s.width*s.height)})})}function Nb(t){return t.toLowerCase().replace(/\s+/g,"_")}function rI(t){return(Array.isArray(t)?t:[]).map((e)=>Nb(String(e)))}function iI(t){return String(t??"").replace(/[^0-9a-z]+/gi,".").replace(/^\.+|\.+$/g,"")||"zerochan"}function sI(t){let e=t.trim(),n=e?JSON.parse(e):{};return(Array.isArray(n.items)?n.items:n.id?[n]:[]).flatMap((i)=>{let s=Number(i.id);if(!s)return[];let o=rI(i.tags),a=as(String(i.full??""));return[{id:s,width:Number(i.width)||0,height:Number(i.height)||0,file:a,ext:fr(a),preview:`${xb}/${iI(i.tag??i.primary)}.600.${s}.jpg`,owner:"",score:0,rating:o.some((c)=>Sb.nudity.has(c))?"q":"g",md5:String(i.md5??i.hash??""),source:String(i.source??""),tags:o,named:{artist:[],character:[],copyright:[]},solo:o.includes("solo"),family:0,smaller:[]}]})}var oI={mangaka:"artist",studio:"artist",character:"character",series:"copyright",game:"copyright"};function wb(t){return t.replace(/&(?:#(\d+)|amp|quot|apos|lt|gt);/g,(e,n)=>n?String.fromCharCode(Number(n)):{"&amp;":"&","&quot;":'"',"&apos;":"'","&lt;":"<","&gt;":">"}[e]??e)}function aI(t){let e={artist:[],character:[],copyright:[]};for(let[,r,i]of t.matchAll(/<li class="([a-z]+)[^"]*"[^>]*\bdata-tag="([^"]*)"/g)){let s=oI[r],o=Nb(wb(i));if(s&&!e[s].includes(o))e[s].push(o)}let n=hf(/"datePublished":\s*"([^"]+)"/.exec(t)?.[1]);return{named:e,source:"",owner:wb(/\buploader = \{\s*name: '([^']*)'/.exec(t)?.[1]??""),...n?{posted:n}:{}}}function cI(t){return Number(/Zerochan has ([\d,]+) /.exec(t)?.[1]?.replace(/,/g,"")??0)}function uI(t){return $o(t).flatMap((e)=>{let n=String(e.value??"");return n?[{value:n,count:Number(e.post_count)||0}]:[]})}function lI(t){return $o(t).flatMap((e)=>{let n=String(e.name??"");return n?[{value:n,count:Number(e.count)||0}]:[]})}function fI(t){return Number(/count="(\d+)"/.exec(t)?.[1]??0)}function dI(t){let n=(t.trim()?JSON.parse(t):{}).counts?.posts;return n===null?Number.NaN:Number(n)||0}function hI(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 mI(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 s=new URL(n.slice(r+1));if(i&&s.protocol==="https:")e.set(i,s.origin)}catch{}}return e}function Da(t,e,n,r){let i=(t??"").split(/\s+/);if(r!==void 0&&i.includes(r))return[];let s=e.filter((o)=>i.includes(o));return s.length>0?s:[...n]}function si(t){return Da(t,os,["safe"])}function cs(t){return Da(t,ii,ii,"none")}function qa(t){return Da(t,mf,[],"none")}function ko(t){let e=Y.map((n)=>n.name);return Da(t,e,e)}function gf(t,e,n){return{score:Number(t)||0,size:Number(e)||0,png:n==="on"}}function yo(t){return[...new Set((t??"").toLowerCase().split(/[\s,]+/).map((e)=>e.replace(/^-+/,"")).filter(Boolean))]}function bf(t,e,n){return{safe:new Set(t),questionable:new Set(e),explicit:new Set(n)}}function wf(t){let e=Zx.get(t.key),n=Qx.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 Tb(t){return t.length<2?t.join(""):t.map((e)=>`~${e}`).join(" ")}function Ab(t){return t>0?[`width:>=${t}`,`height:>=${t}`]:[]}function $b(t){let e=wf(t),n=(r)=>new URLSearchParams({api_version:"2",include_tags:"1",...r});return{...e,scored:!0,narrow:({score:r,size:i})=>[...r>0?[`score:>=${r}`]:[],...Ab(i)],cutouts:Tb(e.cutouts),ratings:bf([bo.safe],[bo.questionable],[bo.explicit]),rate:(r)=>{let[i]=r;if(r.length===1&&i)return`rating:${bo[i]}`;let s=os.filter((a)=>!r.includes(a)),[o]=s;return s.length===1&&o?`-rating:${bo[o]}`:""},best:"order:score",tagBudget:Number.POSITIVE_INFINITY,ors:!0,postsUrl:(r,i)=>`${e.origin}/post.json?${n({limit:String(ur),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:eI,count:fI,uploadedBy:(r)=>`user:${r}`}}function pI(t){let e=wf(t),n=bf(["g"],["s","q"],["e"]);return{...e,scored:!0,narrow:({score:r,size:i,png:s})=>[...r>0?[`score:>=${r}`]:[],...Ab(i),...s?["filetype:png"]:[]],cutouts:Tb(e.cutouts),ratings:n,rate:(r)=>r.length===os.length?"":`rating:${r.flatMap((i)=>[...n[i]]).join(",")}`,best:"order:score",tagBudget:2,ors:!0,postsUrl:(r,i)=>`${e.origin}/posts.json?${new URLSearchParams({limit:String(ur),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:nI,count:dI,uploadedBy:(r)=>`user:${r}`}}function ff(t){return t.split(/\s+/).filter((e)=>e&&!/^(?:order|dimension):/.test(e)).map((e)=>e.split("_").map(encodeURIComponent).join("+")).join(",")}function kb(t){let e=t.split(/\s+/),n=e.find((r)=>r.startsWith("dimension:"))?.slice(10);return{s:e.includes("order:fav")?"fav":"id",...n?{d:n}:{}}}function gI(t){let e=wf(t);return{...e,scored:!1,narrow:({size:n})=>n>=1800?["dimension:huge"]:n>0?["dimension:large"]:[],cutouts:e.cutouts[0]??"",ratings:bf(["g"],["q"],["e"]),rate:()=>"",best:"order:fav",tagBudget:3,ors:!1,missing:404,postsUrl:(n,r)=>`${e.origin}/${ff(n)}?${new URLSearchParams({json:"",l:String(ur),p:String(r+1),...kb(n)})}`,countUrl:(n)=>`${e.origin}/${ff(n)}?${new URLSearchParams({xml:"",l:"1"})}`,postUrl:(n)=>`${e.origin}/${n}?json=`,pageUrl:(n)=>`${e.origin}/${n}`,parse:sI,count:cI,credits:aI,counts:(n)=>ff(n).split(",").length===1&&!("d"in kb(n)),guesses:(n)=>(n.tags.includes("transparent_background")?["png","jpg"]:["jpg","png"]).map((r)=>n.preview.replace(xb,Jx).replace(/\.600\.(\d+)\.jpg$/,`.full.$1.${r}`))}}function bI(t){let e=yb(`https://${t}`);return Y.find((n)=>yb(n.origin)===e)}function $f(t){return t.split(/\s+/).filter((e)=>e&&!Ux.test(e)).length}function Ya(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 a=Y.find((c)=>c.key===r[1]||c.name===r[1]);return a&&{site:a,id:Number(r[2])}}let i;try{i=new URL(n)}catch{return}let s=bI(i.host),o=Number(i.searchParams.get("id")??i.pathname.split("/").filter(Boolean).at(-1));return s&&o>0?{site:s,id:o}:void 0}var Y=[pI({key:"danbooru",name:"danbooru",origin:"https://shima.donmai.us",cutouts:["transparent_background"],vouched:!1,ansi:2}),$b({key:"konachan",name:"konachan",origin:"https://konachan.net",cutouts:["transparent","vector"],vouched:!1,ansi:6}),$b({key:"yande",name:"yande.re",origin:"https://yande.re",cutouts:["transparent_png"],vouched:!0,ansi:5}),gI({key:"zerochan",name:"zerochan",origin:"https://www.zerochan.net",cutouts:["transparent_background"],vouched:!1,ansi:3})],Qt=Y.find((t)=>t.key==="danbooru"),dr=134217728;function ke(t,e){let n=Y.indexOf(t);return(n===-1?Y.length:n)*dr+e}function yb(t){let e;try{e=new URL(t).hostname}catch{return""}return e.split(".").slice(-2).join(".")}function oi(t,e,n=e){return e.mirror&&n===e?{site:Qt,url:e.mirror.file}:{site:t,url:n.file}}function Ja(t,e){return e.mirror?{site:Qt,url:e.mirror.preview}:{site:t,url:e.preview}}function Va(t,e=ii){return t.tags.filter((n)=>e.some((r)=>Sb[r].has(n)))}function Pb(t,e){return t.tags.filter((n)=>e.some((r)=>Bx[r].has(n)))}function Za(t,e,n=["safe"]){return n.some((r)=>t.ratings[r].has(e.rating))}function Hb(t,e){return t.rate(["safe"])===""?void 0:os.find((n)=>t.ratings[n].has(e.rating))}function fn(t){return[t,...t.smaller].find((e)=>e.width*e.height<=$e)}function Fb(t){let e=new Map;for(let[n,r]of[...t].sort(([i],[s])=>i<s?-1:1)){if(r==="")continue;e.set(r,[...e.get(r)??[],n])}return e}function hr(){return wo(process.env.XDG_CACHE_HOME??wo(jx(),".cache"),"ttheme")}function Ke(t){return wo(hr(),t.key)}function Cb(t=Gx,e=hr()){let n=[],r=0;for(let i of bb(e))for(let s of Vx){let o=wo(e,i,s);for(let a of bb(o)){let c=wo(o,a);try{let{size:u,mtimeMs:l}=Cx(c);n.push({path:c,size:u,at:l}),r+=u}catch{}}}n.sort((i,s)=>i.at-s.at);for(let i of n){if(r<=t)return;try{Fx(i.path,{force:!0}),r-=i.size}catch{}}}function wI(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)?Ob:Math.max(0,n-e)}function Pn(t){return Ib.get(t.key)??0}function $I(t){for(let e=t;e instanceof Error;e=e.cause)if(e.code==="ECONNRESET")return!0;return!1}function kI(t){return(t.headers.get("server")??"").startsWith("cloudflare")&&t.headers.get("cf-mitigated")==="challenge"}function yI(t,e){let n=new URL(e,t);if(!n.search)n.search=new URL(t).search;return n.href}async function lr(t,e,n,r={},i=Wx){let s=e;for(let o=1,a=0;;o++){let c=Pn(t)-Date.now();if(c>0)await _x(c,void 0,{signal:n});let u;try{u=await fetch(s,{headers:{"User-Agent":pf,Referer:`${t.origin}/`,...r},redirect:"manual",signal:i?AbortSignal.any([n,AbortSignal.timeout(i)]):n})}catch(f){if(o<gb&&!n.aborted&&$I(f))continue;throw f}let l=u.headers.get("location");if(l&&u.status>=300&&u.status<400&&a<Yx){await u.body?.cancel(),s=yI(s,l),a++,o--;continue}if(u.status===429&&o<gb){await u.body?.cancel();let f=wI(u.headers.get("retry-after"),Date.now());if(f>Ob)throw Error(`${t.name} asks to wait ${Math.ceil(f/1000)}s`);Ib.set(t.key,Math.max(Pn(t),Date.now()+f));continue}if(!u.ok)throw await u.body?.cancel(),Object.assign(Error(kI(u)?`${t.name} is behind a Cloudflare challenge`:`${t.name} answered ${u.status}`),{status:u.status});return u}}async function Qa(t,e,n){try{return await(await lr(t,e,n)).text()}catch(r){if(t.missing!==void 0&&r.status===t.missing)return"";throw r}}async function Lb(t,e,n,r){return t.parse(await Qa(t,t.postsUrl(e,n),r))}async function kf(t,e,n){return t.count(await Qa(t,t.countUrl(e),n))}async function us(t,e,n){let[r]=t.parse(await Qa(t,t.postUrl(e),n));return r}async function Xa(t,e,n){return t.credits?.(await Qa(t,t.pageUrl(e),n))}var vI=/^https?:\/\/(?:i\.pximg\.net|i\d*\.pixiv\.net|img\d*\.pixiv\.net)\/\S*\/(\d+)(?:_p\d+)?(?:_\w+)?\.\w+(?:[?#]\S*)?$/i,EI=/^https?:\/\/(?:www\.)?pixiv\.net\/member_illust\.php\?\S*\billust_id=(\d+)/i;function vo(t){let e=vI.exec(t)?.[1]??EI.exec(t)?.[1];return e?`https://www.pixiv.net/artworks/${e}`:t}function tc(t,e){return t.credits!==void 0&&e.named.artist.length===0}function Eo(t,e){for(let n of Xx){let r=e.named?.[n]??[];if(t.named[n].length===0&&r.length>0)t.named[n]=r}if(t.source||=e.source??"",t.owner||=e.owner??"",!t.posted&&e.posted)t.posted=e.posted}function SI(t){let e=new URLSearchParams({limit:String(2*ur),only:"md5,tag_string,tag_string_artist,tag_string_character,tag_string_copyright,source,file_url",tags:`md5:${t.join(",")}`});return`${Qt.origin}/posts.json?${e}`}function MI(t){return new Map($o(t).flatMap((e)=>{let n=String(e.md5??"");return n?[[n,{tags:An(e.tag_string),named:{artist:An(e.tag_string_artist),character:An(e.tag_string_character),copyright:An(e.tag_string_copyright)},source:String(e.source??""),file:as(String(e.file_url??""))}]]:[]}))}function ec(t,e){for(let n of t){let r=e.get(n.md5);if(!r)continue;if(n.tags=[...new Set([...n.tags,...r.tags])],Eo(n,r),n.solo=r.tags.includes("solo"),r.file.includes("/original/")){if(n.mirror={file:r.file,preview:r.file.replace("/original/","/360x360/").replace(/\.[a-z0-9]+$/i,".jpg")},!n.file)n.file=r.file,n.ext=fr(r.file)}}}async function nc(t,e){let n=new Map;if(Pn(Qt)>Date.now())return n;for(let r=0;r<t.length;r+=ur){let i=await(await lr(Qt,SI(t.slice(r,r+ur)),e,{},Kx)).text();for(let[s,o]of MI(i))n.set(s,o)}return n}async function So(t,e,n){if(e.file||!t.guesses)return;for(let r of t.guesses(e))try{let i=await lr(t,r,n,{Range:`bytes=0-${Mb}`}),s=un(new Uint8Array(await i.arrayBuffer()));return e.file=r,e.ext=fr(r),s}catch(i){if(n.aborted||i.status!==404)throw i}throw Error(`${t.name} keeps no png or jpg of ${e.id}`)}async function jb(t,e){if(Pn(Qt)<=Date.now())try{let i=new URLSearchParams({"search[query]":t,"search[type]":"tag_query",limit:String(pb)}),s=`${Qt.origin}/autocomplete.json?${i}`;return uI(await(await lr(Qt,s,e,{},mb)).text())}catch(i){if(e.aborted)throw i}let n=Y.find((i)=>i.key==="yande"),r=new URLSearchParams({name:t,order:"count",limit:String(pb)});return lI(await(await lr(n,`${n.origin}/tag.json?${r}`,e,{},mb)).text())}function OI(t){try{return(JSON.parse(t).related_tags??[]).flatMap(({tag:n})=>n?.name?[{value:n.name,count:Number(n.post_count)||0}]:[])}catch{return[]}}async function _b(t,e){if(Pn(Qt)>Date.now())return[];let n=new URLSearchParams({"search[query]":t,"search[category]":"character",limit:String(zx)});return OI(await(await lr(Qt,`${Qt.origin}/related_tag.json?${n}`,e,{},Dx)).text())}function Gb(t,e){return e.slice(0,t.ors?t.tagBudget:1)}async function Bb(t,e,n){let r=await lr(t,e,n,{Range:`bytes=0-${Mb}`});return un(new Uint8Array(await r.arrayBuffer()))}async function rc(t,e,n,r){let i=await lr(t,e,n,{},0),s=Number(i.headers.get("content-length"))||0,o=i.body?.getReader();if(!o)return new Uint8Array(await i.arrayBuffer());let a=[],c=0;for(;;){let{done:f,value:d}=await o.read();if(f)break;a.push(d),c+=d.length,r?.(c,s)}let u=new Uint8Array(c),l=0;for(let f of a)u.set(f,l),l+=f.length;return u}var HI=12,FI=/^[0-9a-f]{40}$/;function ls(){return fs(hr(),"drawn")}function Ub(t){return xI("sha1").update(JSON.stringify(t)).digest("hex")}function Wb(t){return II(fs(ls(),t))}function Kb(t){let e=fs(ls(),t);try{let n=NI(e),r=n.readUInt32BE(0),i=JSON.parse(n.toString("utf8",4,4+r)),s=n.subarray(4+r,4+r+i.figure),o=n.subarray(4+r+i.figure,4+r+i.figure+i.picture);if(s.length!==i.figure||o.length!==i.picture)return;let a=new Date;return PI(e,a,a),{stem:i.stem,fill:i.fill,...i.peak?{peak:i.peak}:{},figure:s,picture:o}}catch{return}}function yf(t,e){let n=Buffer.from(JSON.stringify({stem:e.stem,fill:e.fill,...e.peak?{peak:e.peak}:{},figure:e.figure.length,picture:e.picture.length})),r=Buffer.alloc(4);r.writeUInt32BE(n.length),P(fs(ls(),t),Buffer.concat([r,n,e.figure,e.picture])),CI()}function CI(){let t=RI(ls()).filter((e)=>FI.test(e)).flatMap((e)=>{try{return[{name:e,at:AI(fs(ls(),e)).mtimeMs}]}catch{return[]}}).sort((e,n)=>n.at-e.at);for(let{name:e}of t.slice(HI))TI(fs(ls(),e),{force:!0})}import{readdirSync as WI,readFileSync as Xb}from"node:fs";import{basename as KI,join as tw}from"node:path";/*!
4
4
  * Copyright (c) Squirrel Chat et al., All rights reserved.
5
5
  * SPDX-License-Identifier: BSD-3-Clause
6
6
  *
@@ -26,9 +26,9 @@ import{createRequire as uM}from"node:module";var nM=Object.create;var{getPrototy
26
26
  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
27
27
  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28
28
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29
- */function sx(t,e){let n=t.slice(0,e).split(/\r?\n/);return[n.length,n.pop().length+1]}function ox(t,e,n){let r=t.split(/\r?\n/),i="",s=(Math.log10(e+1)|0)+1;for(let o=e-1;o<=e+1;o++){let a=r[o-1];if(!a)continue;if(i+=o.toString().padEnd(s," "),i+=": ",i+=a,i+=`
29
+ */function LI(t,e){let n=t.slice(0,e).split(/\r?\n/);return[n.length,n.pop().length+1]}function jI(t,e,n){let r=t.split(/\r?\n/),i="",s=(Math.log10(e+1)|0)+1;for(let o=e-1;o<=e+1;o++){let a=r[o-1];if(!a)continue;if(i+=o.toString().padEnd(s," "),i+=": ",i+=a,i+=`
30
30
  `,o===e)i+=" ".repeat(s+n+2),i+=`^
31
- `}return i}class K extends Error{line;column;codeblock;constructor(t,e){let[n,r]=sx(e.toml,e.ptr),i=ox(e.toml,n,r);super(`Invalid TOML document: ${t}
31
+ `}return i}class K extends Error{line;column;codeblock;constructor(t,e){let[n,r]=LI(e.toml,e.ptr),i=jI(e.toml,n,r);super(`Invalid TOML document: ${t}
32
32
 
33
33
  ${i}`,e);this.line=n,this.column=r,this.codeblock=i}static x(t,e,n){throw new K(t,{toml:e.s,ptr:n??e.p})}}/*!
34
34
  * Copyright (c) Squirrel Chat et al., All rights reserved.
@@ -56,7 +56,7 @@ ${i}`,e);this.line=n,this.column=r,this.codeblock=i}static x(t,e,n){throw new K(
56
56
  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
57
57
  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
58
58
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
59
- */function Za(t){let e=t.p,n=t.s.charCodeAt(t.p++),r=n,i=n===39,s=n===t.s.charCodeAt(t.p)&&n===t.s.charCodeAt(t.p+1);if(s){if((n=t.s.charCodeAt(t.p+=2))===10)t.p++;else if(n===13&&t.s.charCodeAt(t.p+1)===10)t.p+=2}let o="",a=t.p,c=0;for(;t.p<t.s.length;t.p++)if(n=t.s.charCodeAt(t.p),s&&(n===10||n===13&&t.s.charCodeAt(t.p+1)===10))c=c&&3;else if(n<32&&n!==9||n===127)K.x("control characters are not allowed in strings",t);else if((!c||c===3)&&n===r&&(!s||t.s.charCodeAt(t.p+1)===r&&t.s.charCodeAt(t.p+2)===r)){if(s){if(t.s.charCodeAt(t.p+3)===r)t.p++;if(t.s.charCodeAt(t.p+3)===r)t.p++}if(!c){let u=t.s.slice(a,t.p);o=o?o+u:u}return t.p+=s?3:1,o}else if(!c){if(!i&&n===92)o+=t.s.slice(a,a=t.p),c=1}else if(c===1)if(n===120||n===117||n===85){let u=t.p++-1,l=0,f=n===120?2:n===117?4:8;for(let d=0;d<f;d++,t.p++){let h=t.s.charCodeAt(t.p),p=h>=48&&h<=57?h-48:h>=65&&h<=70?h-65+10:h>=97&&h<=102?h-97+10:-1;if(p<0)K.x("invalid non-hex character in unicode escape",t);l=l<<4|p}if(l<0||l>1114111||l>=55296&&l<=57343)K.x("invalid unicode escape",t,u);o+=String.fromCodePoint(l),a=t.p--,c=0}else if(s&&(n===32||n===9))c=2;else{if(n===98)o+="\b";else if(n===116)o+="\t";else if(n===110)o+=`
59
+ */function ic(t){let e=t.p,n=t.s.charCodeAt(t.p++),r=n,i=n===39,s=n===t.s.charCodeAt(t.p)&&n===t.s.charCodeAt(t.p+1);if(s){if((n=t.s.charCodeAt(t.p+=2))===10)t.p++;else if(n===13&&t.s.charCodeAt(t.p+1)===10)t.p+=2}let o="",a=t.p,c=0;for(;t.p<t.s.length;t.p++)if(n=t.s.charCodeAt(t.p),s&&(n===10||n===13&&t.s.charCodeAt(t.p+1)===10))c=c&&3;else if(n<32&&n!==9||n===127)K.x("control characters are not allowed in strings",t);else if((!c||c===3)&&n===r&&(!s||t.s.charCodeAt(t.p+1)===r&&t.s.charCodeAt(t.p+2)===r)){if(s){if(t.s.charCodeAt(t.p+3)===r)t.p++;if(t.s.charCodeAt(t.p+3)===r)t.p++}if(!c){let u=t.s.slice(a,t.p);o=o?o+u:u}return t.p+=s?3:1,o}else if(!c){if(!i&&n===92)o+=t.s.slice(a,a=t.p),c=1}else if(c===1)if(n===120||n===117||n===85){let u=t.p++-1,l=0,f=n===120?2:n===117?4:8;for(let d=0;d<f;d++,t.p++){let h=t.s.charCodeAt(t.p),m=h>=48&&h<=57?h-48:h>=65&&h<=70?h-65+10:h>=97&&h<=102?h-97+10:-1;if(m<0)K.x("invalid non-hex character in unicode escape",t);l=l<<4|m}if(l<0||l>1114111||l>=55296&&l<=57343)K.x("invalid unicode escape",t,u);o+=String.fromCodePoint(l),a=t.p--,c=0}else if(s&&(n===32||n===9))c=2;else{if(n===98)o+="\b";else if(n===116)o+="\t";else if(n===110)o+=`
60
60
  `;else if(n===102)o+="\f";else if(n===114)o+="\r";else if(n===101)o+="\x1B";else if(n===34)o+='"';else if(n===92)o+="\\";else K.x("unrecognised escape sequence",t);a=t.p+1,c=0}else if(n!==32&&n!==9){if(c===2)K.x("invalid escape: only line-ending whitespace may be escaped",t,a);c=!i&&n===92?1:0,a=t.p}K.x("unfinished string",t,e)}/*!
61
61
  * Copyright (c) Squirrel Chat et al., All rights reserved.
62
62
  * SPDX-License-Identifier: BSD-3-Clause
@@ -83,7 +83,7 @@ ${i}`,e);this.line=n,this.column=r,this.codeblock=i}static x(t,e,n){throw new K(
83
83
  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
84
84
  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
85
85
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
86
- */var ax=/^(\d{4}-\d{2}-\d{2})?[Tt ]?(?:(\d{2}):\d{2}(?::\d{2}(?:\.\d+)?)?)?(Z|z|[-+]\d{2}:\d{2})?$/i;class cr extends Date{#e=!1;#n=!1;#t=null;constructor(t,e,n){let r=!0,i=!0,s="Z",o;if(typeof t==="string")if(e)t:{if(e<3){if(+t.slice(11,13)>23){t="";break t}if(e===2)s=null,t+="Z";else if((o=t.charCodeAt(t.length-1))!==90&&o!==122)s=t.slice(t.length-6);if(n)t=t.slice(0,10)+"T"+t.slice(11)}else if(e===4)t=+t.slice(0,2)>23?"":`0000-01-01T${t}Z`;r=e!==4,i=e!==3}else{let a=t.match(ax);if(a){if(!a[1])r=!1,t=`0000-01-01T${t}`;if(i=!!a[2],i&&t[10]===" "&&(t=t.replace(" ","T")),a[2]&&+a[2]>23)t="";else if(s=a[3]||null,!s&&i)t+="Z"}else t=""}super(t);if(!isNaN(this.getTime()))this.#e=r,this.#n=i,this.#t=s}isDateTime(){return this.#e&&this.#n}isLocal(){return!this.#e||!this.#n||!this.#t}isDate(){return this.#e&&!this.#n}isTime(){return this.#n&&!this.#e}isValid(){return this.#e||this.#n}toISOString(){let t=super.toISOString();if(this.isDate())return t.slice(0,10);if(this.isTime())return t.slice(11,23);if(this.#t===null)return t.slice(0,-1);if(this.#t==="Z"||this.#t==="z")return t;let e=+this.#t.slice(1,3)*60+ +this.#t.slice(4,6);return e=this.#t[0]==="-"?e:-e,new Date(this.getTime()-e*60000).toISOString().slice(0,-1)+this.#t}static wrapAsOffsetDateTime(t,e="Z"){let n=new cr(t);return n.#t=e,n}static wrapAsLocalDateTime(t){let e=new cr(t);return e.#t=null,e}static wrapAsLocalDate(t){let e=new cr(t);return e.#n=!1,e.#t=null,e}static wrapAsLocalTime(t){let e=new cr(t);return e.#e=!1,e.#t=null,e}}/*!
86
+ */var _I=/^(\d{4}-\d{2}-\d{2})?[Tt ]?(?:(\d{2}):\d{2}(?::\d{2}(?:\.\d+)?)?)?(Z|z|[-+]\d{2}:\d{2})?$/i;class mr extends Date{#e=!1;#n=!1;#t=null;constructor(t,e,n){let r=!0,i=!0,s="Z",o;if(typeof t==="string")if(e)t:{if(e<3){if(+t.slice(11,13)>23){t="";break t}if(e===2)s=null,t+="Z";else if((o=t.charCodeAt(t.length-1))!==90&&o!==122)s=t.slice(t.length-6);if(n)t=t.slice(0,10)+"T"+t.slice(11)}else if(e===4)t=+t.slice(0,2)>23?"":`0000-01-01T${t}Z`;r=e!==4,i=e!==3}else{let a=t.match(_I);if(a){if(!a[1])r=!1,t=`0000-01-01T${t}`;if(i=!!a[2],i&&t[10]===" "&&(t=t.replace(" ","T")),a[2]&&+a[2]>23)t="";else if(s=a[3]||null,!s&&i)t+="Z"}else t=""}super(t);if(!isNaN(this.getTime()))this.#e=r,this.#n=i,this.#t=s}isDateTime(){return this.#e&&this.#n}isLocal(){return!this.#e||!this.#n||!this.#t}isDate(){return this.#e&&!this.#n}isTime(){return this.#n&&!this.#e}isValid(){return this.#e||this.#n}toISOString(){let t=super.toISOString();if(this.isDate())return t.slice(0,10);if(this.isTime())return t.slice(11,23);if(this.#t===null)return t.slice(0,-1);if(this.#t==="Z"||this.#t==="z")return t;let e=+this.#t.slice(1,3)*60+ +this.#t.slice(4,6);return e=this.#t[0]==="-"?e:-e,new Date(this.getTime()-e*60000).toISOString().slice(0,-1)+this.#t}static wrapAsOffsetDateTime(t,e="Z"){let n=new mr(t);return n.#t=e,n}static wrapAsLocalDateTime(t){let e=new mr(t);return e.#t=null,e}static wrapAsLocalDate(t){let e=new mr(t);return e.#n=!1,e.#t=null,e}static wrapAsLocalTime(t){let e=new mr(t);return e.#e=!1,e.#t=null,e}}/*!
87
87
  * Copyright (c) Squirrel Chat et al., All rights reserved.
88
88
  * SPDX-License-Identifier: BSD-3-Clause
89
89
  *
@@ -109,7 +109,7 @@ ${i}`,e);this.line=n,this.column=r,this.codeblock=i}static x(t,e,n){throw new K(
109
109
  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
110
110
  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
111
111
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
112
- */function ge(t,e=10){return e===16?t>47&&t<58||t>64&&t<71||t>96&&t<103:t>47&&t<48+e}function gf(t,e){return t===32||t===9||t===10||t===13||e&&(t===e||t===44)||t===35}function yo(t,e){let n=t.p,r=t.s.charCodeAt(t.p);if(r===91||r===123){t.d--||K.x("document contains excessively nested structures. aborting.",t);let i=r===91?Pb(t):Tb(t);return t.d++,i}if(r===34||r===39)return Za(t);if(r===116){if(t.s.charCodeAt(++t.p)!==114||t.s.charCodeAt(++t.p)!==117||t.s.charCodeAt(++t.p)!==101)K.x("invalid value",t,n);return t.p++,!0}if(r===102){if(t.s.charCodeAt(++t.p)!==97||t.s.charCodeAt(++t.p)!==108||t.s.charCodeAt(++t.p)!==115||t.s.charCodeAt(++t.p)!==101)K.x("invalid value",t,n);return t.p++,!1}if(r===43||r===45)return Qa(t,t.p,t.s.charCodeAt(++t.p),44-r,e);if(t.s.charCodeAt(t.p+4)===45&&t.s.charCodeAt(t.p+7)===45)return cx(t,r,e);if(t.s.charCodeAt(t.p+2)===58)return ux(t,r,e);return Qa(t,t.p,r,0,e)}function Qa(t,e,n,r,i){let s=n,o=0,a=!1;if(s===105){if(t.s.charCodeAt(++t.p)!==110||t.s.charCodeAt(++t.p)!==102)K.x("invalid value",t,e);return t.p++,(r||1)/0}if(s===110){if(t.s.charCodeAt(++t.p)!==97||t.s.charCodeAt(++t.p)!==110)K.x("invalid value",t,e);return t.p++,NaN}if(s===48){if(++t.p>=t.s.length||gf(s=t.s.charCodeAt(t.p),i))return t.bi===!0?0n:0;if(!r){if(s===120)return pf(t,e,16,i);else if(s===98)return pf(t,e,2,i);else if(s===111)return pf(t,e,8,i)}if(s===46)o=2;else if(s===101||s===69)o=4;else K.x("illegal leading zero",t,e)}else if(!ge(s))K.x("invalid value",t,e);while(++t.p<t.s.length&&(s=t.s.charCodeAt(t.p),!gf(s,i))){if(!o)o=1;if(s===95){if(!(o&1))K.x("illegal underscore",t);o+=11,a=!0}else if(o===1&&s===46)o=2;else if((o===1||o===3)&&(s===101||s===69))o=4;else if(o===4&&(s===43||s===45));else if(!ge(s))K.x("illegal character in numeric literal",t);else if(o>9)o-=11;else if(!(o&1))o++}if(!o){let u=(n-48)*(r||1);return t.bi===!0?BigInt(u):u}if(!(o&1))K.x("unfinished numeric value",t,e);let c=t.s.slice(e,t.p);if(a)c=c.replaceAll("_","");return o>1?parseFloat(c):Rb(t,c,10,e)}function pf(t,e,n,r){let i,s=1;while(++t.p<t.s.length&&(i=t.s.charCodeAt(t.p),!gf(i,r)))if(i===95){if(s&1)K.x("illegal underscore",t);s=3}else if(!ge(i,n))K.x("illegal character in numeric literal",t);else if(s&1)s--;if(s&1)K.x("unfinished numeric value",t);let o=t.s.slice(e+2,t.p);if(s)o=o.replaceAll("_","");return Rb(t,o,n,e)}function Rb(t,e,n,r){if(t.bi!==!0)t:{let i=parseInt(e,n);if(!Number.isSafeInteger(i)){if(t.bi)break t;K.x("integer value cannot be represented losslessly",t,r)}return i}return n===10?BigInt(e):BigInt((n===2?"0b":n===8?"0o":"0x")+e)}function cx(t,e,n){let r=t.p++,i;if(!ge(e)||!ge(t.s.charCodeAt(t.p++))||!ge(t.s.charCodeAt(t.p++))||!ge(t.s.charCodeAt(t.p++)))return Qa(t,t.p=r,e,0,n);if(t.p+=5,!ge(t.s.charCodeAt(t.p++)))K.x("invalid date-time: date part is malformed",t,r);if(t.p>=t.s.length||((e=t.s.charCodeAt(t.p))!==32||(i=!0,!ge(t.s.charCodeAt(t.p+1))))&&e!==84&&e!==116){let o=t.s.slice(r,t.p);return ko(t,o,3,!1,r)}if(t.s.charCodeAt(t.p+=3)!==58)K.x("invalid date-time: time part is malformed",t,r);if(t.s.charCodeAt(t.p+=3)===58)t.p+=3;if(t.s.charCodeAt(t.p)===46)while(ge(t.s.charCodeAt(++t.p)));if(e=t.s.charCodeAt(t.p)){if(e===90||e===122){let o=t.s.slice(r,++t.p);return ko(t,o,1,i,r,"[+00:00]")}if(e===43||e===45){let o=t.s.slice(r,t.p+=6);return ko(t,o,1,i,r,!t.ld&&"["+t.s.slice(t.p-6,t.p)+"]")}}let s=t.s.slice(r,t.p);return ko(t,s,2,i,r)}function ux(t,e,n){let r=t.p;if(!ge(e)||!ge(t.s.charCodeAt(++t.p)))return Qa(t,--t.p,e,0,n);if(t.s.charCodeAt(t.p+=4)===58)t.p+=3;if(t.s.charCodeAt(t.p)===46)while(ge(t.s.charCodeAt(++t.p)));let i=t.s.slice(r,t.p);return ko(t,i,4,!1,r)}function ko(t,e,n,r,i,s){if(t.ld){let o=new cr(e,n,r);if(!o.isValid())K.x("invalid date",t,i);return o}try{if(s)e+=s;switch(n){case 1:return Temporal.ZonedDateTime.from(e);case 2:return Temporal.PlainDateTime.from(e);case 3:return Temporal.PlainDate.from(e);case 4:return Temporal.PlainTime.from(e)}}catch(o){K.x(o instanceof Error?o.message:""+o,t,i)}}/*!
112
+ */function ye(t,e=10){return e===16?t>47&&t<58||t>64&&t<71||t>96&&t<103:t>47&&t<48+e}function Ef(t,e){return t===32||t===9||t===10||t===13||e&&(t===e||t===44)||t===35}function Oo(t,e){let n=t.p,r=t.s.charCodeAt(t.p);if(r===91||r===123){t.d--||K.x("document contains excessively nested structures. aborting.",t);let i=r===91?qb(t):Db(t);return t.d++,i}if(r===34||r===39)return ic(t);if(r===116){if(t.s.charCodeAt(++t.p)!==114||t.s.charCodeAt(++t.p)!==117||t.s.charCodeAt(++t.p)!==101)K.x("invalid value",t,n);return t.p++,!0}if(r===102){if(t.s.charCodeAt(++t.p)!==97||t.s.charCodeAt(++t.p)!==108||t.s.charCodeAt(++t.p)!==115||t.s.charCodeAt(++t.p)!==101)K.x("invalid value",t,n);return t.p++,!1}if(r===43||r===45)return sc(t,t.p,t.s.charCodeAt(++t.p),44-r,e);if(t.s.charCodeAt(t.p+4)===45&&t.s.charCodeAt(t.p+7)===45)return GI(t,r,e);if(t.s.charCodeAt(t.p+2)===58)return BI(t,r,e);return sc(t,t.p,r,0,e)}function sc(t,e,n,r,i){let s=n,o=0,a=!1;if(s===105){if(t.s.charCodeAt(++t.p)!==110||t.s.charCodeAt(++t.p)!==102)K.x("invalid value",t,e);return t.p++,(r||1)/0}if(s===110){if(t.s.charCodeAt(++t.p)!==97||t.s.charCodeAt(++t.p)!==110)K.x("invalid value",t,e);return t.p++,NaN}if(s===48){if(++t.p>=t.s.length||Ef(s=t.s.charCodeAt(t.p),i))return t.bi===!0?0n:0;if(!r){if(s===120)return vf(t,e,16,i);else if(s===98)return vf(t,e,2,i);else if(s===111)return vf(t,e,8,i)}if(s===46)o=2;else if(s===101||s===69)o=4;else K.x("illegal leading zero",t,e)}else if(!ye(s))K.x("invalid value",t,e);while(++t.p<t.s.length&&(s=t.s.charCodeAt(t.p),!Ef(s,i))){if(!o)o=1;if(s===95){if(!(o&1))K.x("illegal underscore",t);o+=11,a=!0}else if(o===1&&s===46)o=2;else if((o===1||o===3)&&(s===101||s===69))o=4;else if(o===4&&(s===43||s===45));else if(!ye(s))K.x("illegal character in numeric literal",t);else if(o>9)o-=11;else if(!(o&1))o++}if(!o){let u=(n-48)*(r||1);return t.bi===!0?BigInt(u):u}if(!(o&1))K.x("unfinished numeric value",t,e);let c=t.s.slice(e,t.p);if(a)c=c.replaceAll("_","");return o>1?parseFloat(c):zb(t,c,10,e)}function vf(t,e,n,r){let i,s=1;while(++t.p<t.s.length&&(i=t.s.charCodeAt(t.p),!Ef(i,r)))if(i===95){if(s&1)K.x("illegal underscore",t);s=3}else if(!ye(i,n))K.x("illegal character in numeric literal",t);else if(s&1)s--;if(s&1)K.x("unfinished numeric value",t);let o=t.s.slice(e+2,t.p);if(s)o=o.replaceAll("_","");return zb(t,o,n,e)}function zb(t,e,n,r){if(t.bi!==!0)t:{let i=parseInt(e,n);if(!Number.isSafeInteger(i)){if(t.bi)break t;K.x("integer value cannot be represented losslessly",t,r)}return i}return n===10?BigInt(e):BigInt((n===2?"0b":n===8?"0o":"0x")+e)}function GI(t,e,n){let r=t.p++,i;if(!ye(e)||!ye(t.s.charCodeAt(t.p++))||!ye(t.s.charCodeAt(t.p++))||!ye(t.s.charCodeAt(t.p++)))return sc(t,t.p=r,e,0,n);if(t.p+=5,!ye(t.s.charCodeAt(t.p++)))K.x("invalid date-time: date part is malformed",t,r);if(t.p>=t.s.length||((e=t.s.charCodeAt(t.p))!==32||(i=!0,!ye(t.s.charCodeAt(t.p+1))))&&e!==84&&e!==116){let o=t.s.slice(r,t.p);return Mo(t,o,3,!1,r)}if(t.s.charCodeAt(t.p+=3)!==58)K.x("invalid date-time: time part is malformed",t,r);if(t.s.charCodeAt(t.p+=3)===58)t.p+=3;if(t.s.charCodeAt(t.p)===46)while(ye(t.s.charCodeAt(++t.p)));if(e=t.s.charCodeAt(t.p)){if(e===90||e===122){let o=t.s.slice(r,++t.p);return Mo(t,o,1,i,r,"[+00:00]")}if(e===43||e===45){let o=t.s.slice(r,t.p+=6);return Mo(t,o,1,i,r,!t.ld&&"["+t.s.slice(t.p-6,t.p)+"]")}}let s=t.s.slice(r,t.p);return Mo(t,s,2,i,r)}function BI(t,e,n){let r=t.p;if(!ye(e)||!ye(t.s.charCodeAt(++t.p)))return sc(t,--t.p,e,0,n);if(t.s.charCodeAt(t.p+=4)===58)t.p+=3;if(t.s.charCodeAt(t.p)===46)while(ye(t.s.charCodeAt(++t.p)));let i=t.s.slice(r,t.p);return Mo(t,i,4,!1,r)}function Mo(t,e,n,r,i,s){if(t.ld){let o=new mr(e,n,r);if(!o.isValid())K.x("invalid date",t,i);return o}try{if(s)e+=s;switch(n){case 1:return Temporal.ZonedDateTime.from(e);case 2:return Temporal.PlainDateTime.from(e);case 3:return Temporal.PlainDate.from(e);case 4:return Temporal.PlainTime.from(e)}}catch(o){K.x(o instanceof Error?o.message:""+o,t,i)}}/*!
113
113
  * Copyright (c) Squirrel Chat et al., All rights reserved.
114
114
  * SPDX-License-Identifier: BSD-3-Clause
115
115
  *
@@ -135,7 +135,7 @@ ${i}`,e);this.line=n,this.column=r,this.codeblock=i}static x(t,e,n){throw new K(
135
135
  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
136
136
  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
137
137
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
138
- */function lx(t){for(;t.p<t.s.length;t.p++){let e=t.s.charCodeAt(t.p);if(e===10)break;if(e===13&&t.s.charCodeAt(t.p+1)===10){t.p++;break}if(e<32&&e!==9||e===127)K.x("control characters are not allowed in comments",t)}}function Be(t,e,n){let r;while(t.p<t.s.length){while(t.p<t.s.length&&((r=t.s.charCodeAt(t.p))===32||r===9||!e&&(r===10||r===13&&t.s.charCodeAt(t.p+1)===10)))t.p++;if(n||r!==35)break;lx(t)}}/*!
138
+ */function UI(t){for(;t.p<t.s.length;t.p++){let e=t.s.charCodeAt(t.p);if(e===10)break;if(e===13&&t.s.charCodeAt(t.p+1)===10){t.p++;break}if(e<32&&e!==9||e===127)K.x("control characters are not allowed in comments",t)}}function ze(t,e,n){let r;while(t.p<t.s.length){while(t.p<t.s.length&&((r=t.s.charCodeAt(t.p))===32||r===9||!e&&(r===10||r===13&&t.s.charCodeAt(t.p+1)===10)))t.p++;if(n||r!==35)break;UI(t)}}/*!
139
139
  * Copyright (c) Squirrel Chat et al., All rights reserved.
140
140
  * SPDX-License-Identifier: BSD-3-Clause
141
141
  *
@@ -161,7 +161,7 @@ ${i}`,e);this.line=n,this.column=r,this.codeblock=i}static x(t,e,n){throw new K(
161
161
  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
162
162
  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
163
163
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
164
- */function Xa(t,e=61){let n,r=0,i=[],s,o=t.s.charCodeAt(n=t.p);do if(o===e){if(!r)K.x("unexpected end of key",t);if(r===1)i.push(t.s.slice(s,t.p));return t.p++,i}else if(o===46){if(!r)K.x("illegal empty bare key",t);if(r===1)i.push(t.s.slice(s,t.p));r=0}else if(!r&&(o===34||o===39)){if(o===t.s.charCodeAt(t.p+1)&&o===t.s.charCodeAt(t.p+2))K.x("illegal quoted key: multiline strings are not allowed",t);i.push(Za(t)),r=2,t.p--}else if(o===32||o===9){if(r===1)i.push(t.s.slice(s,t.p)),r=2}else if(r===2||o<48&&o!==45||o>57&&o<65||o>90&&o<97&&o!==95||o>122)K.x("illegal character in key",t);else if(!r)r=1,s=t.p;while(o=t.s.charCodeAt(++t.p));K.x("incomplete key-value: cannot find end of key",t,n)}function Tb(t){let e=t.p++,n=Object.create(null),r=new Set,i;while(t.p<t.s.length){if(Be(t),(i=t.s.charCodeAt(t.p))===125)return t.p++,n;let s,o=n,a=!1,c=t.p,u=Xa(t);for(let f=0;f<u.length;f++){if(f)o=a?o[s]:o[s]=Object.create(null);if(s=u[f],(a=Object.hasOwn(o,s))&&(typeof o[s]!=="object"||r.has(o[s])))K.x("trying to redefine an already defined value",t,c);let d=s==="__proto__";if(t.uk&&(d||s==="constructor")){o=t.uk!==1&&K.x("document contains an unsafe property",t,c);break}if(!a&&d)Object.defineProperty(o,s,{enumerable:!0,configurable:!0,writable:!0})}if(a)K.x("trying to redefine an already defined value",t,c);Be(t,!0,!0);let l=yo(t,125);if(o&&typeof(o[s]=l)==="object")r.add(l);if(Be(t),(i=t.s.charCodeAt(t.p++))===125)return n;if(i!==44)K.x("expected comma or end of structure",t,t.p-1)}K.x("unfinished table",t,e)}function Pb(t){let e=t.p++,n=[],r;while(t.p<t.s.length){if(Be(t),(r=t.s.charCodeAt(t.p))===93)return t.p++,n;if(n.push(yo(t,93)),Be(t),(r=t.s.charCodeAt(t.p++))===93)return n;if(r!==44)K.x("expected comma or end of structure",t,t.p-1)}K.x("unfinished array",t,e)}/*!
164
+ */function oc(t,e=61){let n,r=0,i=[],s,o=t.s.charCodeAt(n=t.p);do if(o===e){if(!r)K.x("unexpected end of key",t);if(r===1)i.push(t.s.slice(s,t.p));return t.p++,i}else if(o===46){if(!r)K.x("illegal empty bare key",t);if(r===1)i.push(t.s.slice(s,t.p));r=0}else if(!r&&(o===34||o===39)){if(o===t.s.charCodeAt(t.p+1)&&o===t.s.charCodeAt(t.p+2))K.x("illegal quoted key: multiline strings are not allowed",t);i.push(ic(t)),r=2,t.p--}else if(o===32||o===9){if(r===1)i.push(t.s.slice(s,t.p)),r=2}else if(r===2||o<48&&o!==45||o>57&&o<65||o>90&&o<97&&o!==95||o>122)K.x("illegal character in key",t);else if(!r)r=1,s=t.p;while(o=t.s.charCodeAt(++t.p));K.x("incomplete key-value: cannot find end of key",t,n)}function Db(t){let e=t.p++,n=Object.create(null),r=new Set,i;while(t.p<t.s.length){if(ze(t),(i=t.s.charCodeAt(t.p))===125)return t.p++,n;let s,o=n,a=!1,c=t.p,u=oc(t);for(let f=0;f<u.length;f++){if(f)o=a?o[s]:o[s]=Object.create(null);if(s=u[f],(a=Object.hasOwn(o,s))&&(typeof o[s]!=="object"||r.has(o[s])))K.x("trying to redefine an already defined value",t,c);let d=s==="__proto__";if(t.uk&&(d||s==="constructor")){o=t.uk!==1&&K.x("document contains an unsafe property",t,c);break}if(!a&&d)Object.defineProperty(o,s,{enumerable:!0,configurable:!0,writable:!0})}if(a)K.x("trying to redefine an already defined value",t,c);ze(t,!0,!0);let l=Oo(t,125);if(o&&typeof(o[s]=l)==="object")r.add(l);if(ze(t),(i=t.s.charCodeAt(t.p++))===125)return n;if(i!==44)K.x("expected comma or end of structure",t,t.p-1)}K.x("unfinished table",t,e)}function qb(t){let e=t.p++,n=[],r;while(t.p<t.s.length){if(ze(t),(r=t.s.charCodeAt(t.p))===93)return t.p++,n;if(n.push(Oo(t,93)),ze(t),(r=t.s.charCodeAt(t.p++))===93)return n;if(r!==44)K.x("expected comma or end of structure",t,t.p-1)}K.x("unfinished array",t,e)}/*!
165
165
  * Copyright (c) Squirrel Chat et al., All rights reserved.
166
166
  * SPDX-License-Identifier: BSD-3-Clause
167
167
  *
@@ -187,7 +187,7 @@ ${i}`,e);this.line=n,this.column=r,this.codeblock=i}static x(t,e,n){throw new K(
187
187
  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
188
188
  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
189
189
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
190
- */function Hb(t,e,n,r,i){let s=n,o=r,a,c=!1,u;for(let l=0;l<e.length;l++){if(l){if(s=c?s[a]:s[a]=Object.create(null),o=(u=o[a]).c,i===0&&(u.t===1||u.t===2))return null;if(u.t===2){let f=s.length-1;s=s[f],o=o[f].c}}if(a=e[l],(c=Object.hasOwn(s,a))&&o[a]?.t===0&&o[a]?.d)return null;if(!c){let f=a==="__proto__";if(t.uk&&(f||a==="constructor"))return!1;if(f)Object.defineProperty(s,a,{enumerable:!0,configurable:!0,writable:!0}),Object.defineProperty(o,a,{enumerable:!0,configurable:!0,writable:!0});o[a]={t:l<e.length-1&&i===2?3:i,d:!1,i:0,c:Object.create(null)}}}if(u=o[a],u.t!==i&&!(i===1&&u.t===3))return null;if(i===2){if(!u.d)u.d=!0,s[a]=[];s[a].push(s=Object.create(null)),u.c[u.i++]=u={t:1,d:!1,i:0,c:Object.create(null)}}if(u.d)return null;if(u.d=!0,i===1)s=c?s[a]:s[a]=Object.create(null);else if(i===0&&c)return null;return[a,s,u.c]}function Ab(t,e,n){if(e===null||t.uk===2)K.x(e===null?"trying to redefine an already defined table or value":"document contains an unsafe property",t,n)}function bf(t,e={}){let n={s:t,p:0,d:e.maxDepth??1000,bi:e.integersAsBigInt??!1,ld:e.useLegacyDate??!0,uk:e.unsafeKeyBehaviour==="throw"?2:e.unsafeKeyBehaviour==="drop"?1:0},r=Object.create(null),i=Object.create(null),s,o=!1,a=r,c=i;if(t.charCodeAt(0)===65279)n.p++;Be(n);while(n.p<t.length){if(t.charCodeAt(n.p)===91){let u=t.charCodeAt(++n.p)===91;s=n.p+=+u,o=!1;let l=Xa(n,93);if(u){if(t.charCodeAt(n.p)!==93)K.x("expected end of table array declaration",n);n.p++}let f=Hb(n,l,r,i,u?2:1);if(!f)Ab(n,f,s),o=!0;else c=f[2],a=f[1]}else{s=n.p;let u=Xa(n),l=Hb(n,u,a,c,0);if(!l&&!o)Ab(n,l,s);Be(n,!0,!0);let f=yo(n,void 0);if(l&&!o)l[1][l[0]]=f}if(Be(n,!0),n.p<t.length&&(s=t.charCodeAt(n.p))!==10&&(s!==13||t.charCodeAt(n.p+1)!==10))K.x("each key-value declaration must be followed by an end-of-line",n);Be(n)}return r}/*!
190
+ */function Yb(t,e,n,r,i){let s=n,o=r,a,c=!1,u;for(let l=0;l<e.length;l++){if(l){if(s=c?s[a]:s[a]=Object.create(null),o=(u=o[a]).c,i===0&&(u.t===1||u.t===2))return null;if(u.t===2){let f=s.length-1;s=s[f],o=o[f].c}}if(a=e[l],(c=Object.hasOwn(s,a))&&o[a]?.t===0&&o[a]?.d)return null;if(!c){let f=a==="__proto__";if(t.uk&&(f||a==="constructor"))return!1;if(f)Object.defineProperty(s,a,{enumerable:!0,configurable:!0,writable:!0}),Object.defineProperty(o,a,{enumerable:!0,configurable:!0,writable:!0});o[a]={t:l<e.length-1&&i===2?3:i,d:!1,i:0,c:Object.create(null)}}}if(u=o[a],u.t!==i&&!(i===1&&u.t===3))return null;if(i===2){if(!u.d)u.d=!0,s[a]=[];s[a].push(s=Object.create(null)),u.c[u.i++]=u={t:1,d:!1,i:0,c:Object.create(null)}}if(u.d)return null;if(u.d=!0,i===1)s=c?s[a]:s[a]=Object.create(null);else if(i===0&&c)return null;return[a,s,u.c]}function Jb(t,e,n){if(e===null||t.uk===2)K.x(e===null?"trying to redefine an already defined table or value":"document contains an unsafe property",t,n)}function ai(t,e={}){let n={s:t,p:0,d:e.maxDepth??1000,bi:e.integersAsBigInt??!1,ld:e.useLegacyDate??!0,uk:e.unsafeKeyBehaviour==="throw"?2:e.unsafeKeyBehaviour==="drop"?1:0},r=Object.create(null),i=Object.create(null),s,o=!1,a=r,c=i;if(t.charCodeAt(0)===65279)n.p++;ze(n);while(n.p<t.length){if(t.charCodeAt(n.p)===91){let u=t.charCodeAt(++n.p)===91;s=n.p+=+u,o=!1;let l=oc(n,93);if(u){if(t.charCodeAt(n.p)!==93)K.x("expected end of table array declaration",n);n.p++}let f=Yb(n,l,r,i,u?2:1);if(!f)Jb(n,f,s),o=!0;else c=f[2],a=f[1]}else{s=n.p;let u=oc(n),l=Yb(n,u,a,c,0);if(!l&&!o)Jb(n,l,s);ze(n,!0,!0);let f=Oo(n,void 0);if(l&&!o)l[1][l[0]]=f}if(ze(n,!0),n.p<t.length&&(s=t.charCodeAt(n.p))!==10&&(s!==13||t.charCodeAt(n.p+1)!==10))K.x("each key-value declaration must be followed by an end-of-line",n);ze(n)}return r}/*!
191
191
  * Copyright (c) Squirrel Chat et al., All rights reserved.
192
192
  * SPDX-License-Identifier: BSD-3-Clause
193
193
  *
@@ -213,7 +213,7 @@ ${i}`,e);this.line=n,this.column=r,this.codeblock=i}static x(t,e,n){throw new K(
213
213
  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
214
214
  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
215
215
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
216
- */var W3=!!"".isWellFormed;/*!
216
+ */var P8=!!"".isWellFormed;/*!
217
217
  * Copyright (c) Squirrel Chat et al., All rights reserved.
218
218
  * SPDX-License-Identifier: BSD-3-Clause
219
219
  *
@@ -239,162 +239,168 @@ ${i}`,e);this.line=n,this.column=r,this.codeblock=i}static x(t,e,n){throw new K(
239
239
  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
240
240
  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
241
241
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
242
- */var _t=["top-left","top-center","top-right","center-left","center","center-right","bottom-left","bottom-center","bottom-right"],vo="Original",hx=1e6,an="_groups.toml",Fb=3,Cb=8,wf="[a-z0-9]+(?:-[a-z0-9]+)*",mx=new RegExp(`^(?:(${wf})@(${wf})/)?(${wf})$`),_b=["background","foreground","cursor","selection"];function rt(t,e){throw Error(`${t}: ${e}`)}function oi(t,e,n){if(typeof n!=="string"||!ne(n))rt(t,`${e} must be "#rrggbb" (lowercase), got ${JSON.stringify(n)}`);return n}function Eo(t,e,n){if(typeof n!=="string"||n.length===0)rt(t,`${e} must be a non-empty string`);return n}function Qt(t){return t.replace("@","--").replace("/","--")}function A(t){return`ttheme-${Qt(t)}`}function ct(t){let e=t.indexOf("/");return e<0?void 0:t.slice(0,e)}function ur(t){return t.slice(t.indexOf("/")+1)}function We(t){let e=mx.exec(t);if(!e)return"takes lowercase letters, digits and single hyphens, as <palette> or <owner>@<market>/<palette>";if((e[1]?.length??0)>39)return"has an owner longer than a GitHub handle can be";return(e[2]?.length??0)>40||(e[3]?.length??0)>40?"is longer than 40 characters":void 0}function Mo(t){if(/[\p{Cc}"$`\\]/u.test(t))return"holds a control character, a quote, $, ` or \\";return t.length>80?"is longer than 80 characters":void 0}function So(t,e,n){let r=Eo(t,e,n),i=Mo(r);if(i)rt(t,`${e} ${JSON.stringify(r)} ${i}`);return r}function Lb(t,e,n){let r=Eo(t,e,n),i=We(r);if(i)rt(t,`${e} "${r}" ${i}`);return r}function as(t){return t&&typeof t==="object"?t:{}}function px(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)rt(t,"ghostty.icon_screen must not be empty");return r.map((i,s)=>oi(t,`ghostty.icon_screen[${s}]`,i))}function gx(t,e,n){let r=as(e);return{iconGhost:r.icon_ghost===void 0?n.cursor:oi(t,"ghostty.icon_ghost",r.icon_ghost),iconScreen:px(t,r.icon_screen,n)}}function bx(t){return new Map([..._b.map((e)=>[e,t[e]]),...t.ansi.map((e,n)=>[`ansi${n}`,e])])}function wx(t,e,n){if(!Array.isArray(e)||e.length!==Fb)rt(t,`meta.signature must name exactly ${Fb} palette slots`);let r=bx(n),i=[],s=[];for(let[o,a]of e.entries()){let c=`meta.signature[${o}]`,u=Eo(t,c,a),l=r.get(u);if(l===void 0)rt(t,`${c} ${JSON.stringify(a)} is not a palette slot — use ${_b.join(", ")} or ansi0-ansi15`);i.push(u),s.push(l)}if(new Set(s).size!==s.length)rt(t,"meta.signature slots must resolve to three different colors");return{names:i,colors:s}}function $x(t,e,n){if(e===void 0)return;if(!n)rt(t,"meta.booru_sites renames meta.booru per site, so it needs meta.booru");if(!e||typeof e!=="object"||Array.isArray(e))rt(t,'meta.booru_sites must be a table of site = "tag" or site = ["tag", ...]');let r={};for(let[i,s]of Object.entries(e)){let o=Y.find((c)=>c.key===i);if(!o)rt(t,`meta.booru_sites.${i} is not a find site — use ${Y.map((c)=>c.key).join(", ")}`);let a=typeof s==="string"?[s]:Array.isArray(s)?s:void 0;if(!a||a.some((c)=>typeof c!=="string"||c===""||/\s/.test(c)))rt(t,`meta.booru_sites.${i} must be one tag or a list of tags, got ${JSON.stringify(s)}`);if(a.length>1&&!o.ors)rt(t,`meta.booru_sites.${i} takes one tag — ${o.name} does not OR tags`);if(a.length>o.tagBudget)rt(t,`meta.booru_sites.${i} takes ${o.tagBudget} tags at most — ${o.name} searches that many at a time`);r[i]=a}return r}function kx(t,e){if(e===void 0)return;if(!Array.isArray(e)||e.length===0||e.length>Cb)rt(t,`[[picture]] holds 1 to ${Cb} pictures`);return e.map((n,r)=>{let i=as(n),s=`picture[${r}]`,o=Y.find((l)=>l.key===i.site);if(!o)rt(t,`${s}.site must be one of ${Y.map((l)=>l.key).join(", ")}`);if(typeof i.id!=="number"||!Number.isSafeInteger(i.id)||i.id<=0)rt(t,`${s}.id must be the post's number on ${o.name}`);let{size:a,position:c,opacity:u}=i;if(a!==void 0&&a!=="fill"&&!(Number.isInteger(a)&&Number(a)>=20&&Number(a)<=999))rt(t,`${s}.size must be "fill" or a percentage from 20 to 999`);if(c!==void 0&&!_t.includes(c))rt(t,`${s}.position must be one of ${_t.join(", ")}`);if(u!==void 0&&!(typeof u==="number"&&u>=0&&u<=1))rt(t,`${s}.opacity must be a number from 0 to 1`);return{site:o.key,id:i.id,...a!==void 0?{size:a}:{},...c!==void 0?{position:c}:{},...u!==void 0?{opacity:u}:{}}})}function Bb(t,e){try{return bf(e)}catch(n){rt(t,`is not valid TOML — ${(n instanceof Error?n.message:String(n)).split(`
243
- `)[0]}`)}}function yx(t){let n=Bb(an,jb(Gb(t,an),"utf8")).group;if(!Array.isArray(n)||n.length===0)rt(an,"needs at least one [[group]] table");return n.map((r)=>{let i=as(r);return{name:So(an,"group.name",i.name),native:i.native===void 0?void 0:So(an,"group.native",i.native),lead:Eo(an,"group.lead",i.lead)}})}function vx(t,e){if(!Array.isArray(e)||e.length===0)rt(t,'meta.native_names must be a list of names, like ["後藤ひとり"]');return e.map((n,r)=>{let i=So(t,`meta.native_names[${r}]`,n);if(i.includes("|"))rt(t,`meta.native_names[${r}] ${JSON.stringify(i)} contains |`);return i})}function $f(t,e,n){let r=Bb(t,e),i=as(r.meta),s=as(r.colors),o=as(r.contrast),a=s.ansi;if(!Array.isArray(a)||a.length!==16)rt(t,`colors.ansi must hold exactly 16 colors, got ${Array.isArray(a)?a.length:typeof a}`);let c=Lb(t,"meta.name",i.name);if(c!==n.name)rt(t,`meta.name "${c}" does not match its file — it lives at ${n.name}`);let u=n.open===!0;for(let B of["order","role"])if(u&&i[B]!==void 0)rt(t,`meta.${B} is for the official palettes — a market palette follows its base`);let l=i.role;if(l!==void 0&&l!=="default")rt(t,`meta.role must be "default", got ${JSON.stringify(l)}`);let f=i.base===void 0?void 0:Lb(t,"meta.base",i.base);if(f!==void 0&&!u)rt(t,"meta.base is for market palettes");let d=f===void 0?void 0:n.bases?.get(f),h=u&&i.group===void 0?d?.group??vo:So(t,"meta.group",i.group),p=n.groups.get(h);if(!p&&!(u&&(h===vo||n.open)))rt(t,`meta.group "${h}" has no [[group]] table in ${an}`);let $=oi(t,"colors.background",s.background),g=oi(t,"colors.foreground",s.foreground),b=oi(t,"colors.cursor",s.cursor),y=oi(t,"colors.selection_background",s.selection_background),S=a.map((B,X)=>oi(t,`colors.ansi[${X}]`,B)),E=wx(t,i.signature,{background:$,foreground:g,cursor:b,selection:y,ansi:S}),I=i.booru===void 0?void 0:Eo(t,"meta.booru",i.booru);if(I!==void 0&&/[\s\p{Cc}]/u.test(I))rt(t,`meta.booru must be a single booru tag, got ${JSON.stringify(I)}`);let N=$x(t,i.booru_sites,I),R=i.native_names===void 0?void 0:vx(t,i.native_names),F=Array.isArray(o.waive)?o.waive.map(String):[];if(F.length>0&&typeof o.reason!=="string")rt(t,"contrast.waive needs a contrast.reason explaining why");let j=kx(t,r.picture);return{name:c,...f?{base:f}:{},group:h,native:p?.native,...R?{nativeNames:R}:{},lead:!u&&p?.lead===c,order:u?d?.order??hx:Number(i.order),role:l,ansiSource:u&&i.ansi_source===void 0?f??"original":So(t,"meta.ansi_source",i.ansi_source),...I?{booru:I}:{},...N?{booruSites:N}:{},background:$,foreground:g,cursor:b,selectionBackground:y,ansi:S,signature:E.colors,signatureSlots:E.names,ghostty:gx(t,r.ghostty,{background:$,cursor:b,selectionBackground:y}),waive:F,waiveReason:typeof o.reason==="string"?o.reason:void 0,...j?{pictures:j}:{}}}function Wb(t){let e=yx(t),n=new Map(e.map((s)=>[s.name,s]));if(n.size!==e.length)rt(an,"group.name must be unique");let r=fx(t).filter((s)=>s.endsWith(".toml")&&!s.startsWith("_")).map((s)=>$f(s,jb(Gb(t,s),"utf8"),{name:dx(s,".toml"),groups:n})).sort((s,o)=>s.order-o.order);if(new Set(r.map((s)=>s.order)).size!==r.length)throw Error("themes: meta.order must be unique across all themes");for(let s of e){let o=r.filter((a)=>a.group===s.name);if(o.length===0)rt(an,`group "${s.name}" has no themes`);if(!o.some((a)=>a.name===s.lead))rt(an,`group "${s.name}" lead "${s.lead}" is not one of its themes`)}return r}function Ub(t){return t.filter((e)=>e.role===void 0)}function ai(t){let e=(r,i)=>r<i?-1:r>i?1:0,n=(r)=>ct(r.name)?r.name:r.base??r.name;return[...t].sort((r,i)=>Number(ct(r.name)!==void 0)-Number(ct(i.name)!==void 0)||e(r.group.toLowerCase(),i.group.toLowerCase())||Number(r.catalog===void 0)-Number(i.catalog===void 0)||e((r.catalog??"").toLowerCase(),(i.catalog??"").toLowerCase())||e(n(r),n(i))||Number(r.base!==void 0)-Number(i.base!==void 0)||e(r.name,i.name))}var Oo={width:2560,height:1550},xx=1,Nx=2560,Rx=0.1,Xb=0.99,Tx=2,ci={tall:1.15,reach:0.4,widest:0.95,headroom:0.04,margin:0.03,stands:12},Px=yt(Gt("#19161e","#9b86c8",0.2)),Hx="shelf",nc="originals",Ax="images.json",yf=1;function Fx(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 Kb(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 tw(t,e){let r=Kb((s)=>Fp({name:t.name,background:Gt(t.background,e,s),foreground:t.foreground,ansi:t.ansi,waive:t.waived??[]}).length===0),i=Kb((s)=>yt(Gt(t.background,e,s))<=Px);return{cap:r,matched:i,opacity:Math.floor(Math.min(r,i)*100)/100}}function zb(t,e){let n=Fx(t,e),{cap:r,matched:i,opacity:s}=tw(t,n),o=nt(t.background),a=Math.hypot(...nt(n).map((c,u)=>(c-(o[u]??0))*s));return{slot:e,color:n,cap:r,matched:i,opacity:s,reach:a}}function ls(t,e){return tw(t,e).opacity}function cn(t,e){let n=zb(t,"cursor");if(n.opacity>=Rx)return n;return e.filter((r)=>r!=="cursor"&&r!=="background").map((r)=>zb(t,r)).reduce((r,i)=>i.reach>r.reach?i:r,n)}function Cx(t){return Ug(t)??{x:0,y:0,w:t.width,h:t.height}}function If(t,e){if(t<=0||e<=0)return Oo;let n=Math.min(1,Oo.width/Math.max(t,e));return{width:Math.round(t*n),height:Math.round(e*n)}}function ew(t,e,n,r){if(r<ci.stands){let c=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:c,at:{x:0,y:0,w:e,h:n},focus:(c.y-t.y+c.h/2)/t.h}}let i=Math.max(ci.tall*n,ci.reach*e*t.h/t.w),s=i*t.w/t.h;if(s>ci.widest*e)s=ci.widest*e,i=s*t.h/t.w;let o=ci.headroom*n,a=Math.min(1,(n-o)/i);return{crop:{x:t.x,y:t.y,w:t.w,h:t.h*a},at:{x:e*(1-ci.margin)-s,y:o,w:s,h:i*a},focus:Math.min(1,(n/2-o)/i)}}function Lx(t,e){return 0.299*(t[e]??0)+0.587*(t[e+1]??0)+0.114*(t[e+2]??0)}function jx(t,e){let n=new Uint32Array(256),r=Math.max(1,Math.floor(e.w*e.h/400000)),i=0;for(let o=0;o<e.w*e.h;o+=r){let a=((e.y+Math.floor(o/e.w))*t.width+e.x+o%e.w)*4;if((t.data[a+3]??0)>=128){let c=Math.round(Lx(t.data,a));n[c]=(n[c]??0)+1,i++}}let s=0;for(let o=0;o<256&&i>0;o++)if(s+=n[o]??0,s>=i*Xb)return Math.min(Tx,Math.max(1,255/Math.max(1,o)));return 1}var kf=Float64Array.from({length:256},(t,e)=>{let n=e/255;return n<=0.04045?n/12.92:((n+0.055)/1.055)**2.4});function Gx(t,e,n){return`#${[t,e,n].map((r)=>Math.round(r).toString(16).padStart(2,"0")).join("")}`}function _x(t,e){let n=new Uint32Array(256),r=new Float64Array(768),i=Math.max(1,Math.floor(e.w*e.h/400000)),s=0;for(let a=0;a<e.w*e.h;a+=i){let c=((e.y+Math.floor(a/e.w))*t.width+e.x+a%e.w)*4;if((t.data[c+3]??0)>=128){let u=t.data[c]??0,l=t.data[c+1]??0,f=t.data[c+2]??0,d=Math.round(255*Math.sqrt(0.2126*(kf[u]??0)+0.7152*(kf[l]??0)+0.0722*(kf[f]??0)));n[d]=(n[d]??0)+1,r[d*3]=(r[d*3]??0)+u,r[d*3+1]=(r[d*3+1]??0)+l,r[d*3+2]=(r[d*3+2]??0)+f,s++}}let o=0;for(let a=0;a<256&&s>0;a++)if(o+=n[a]??0,o>=s*Xb){let c=Math.max(1,n[a]??1);return Gx((r[a*3]??0)/c,(r[a*3+1]??0)/c,(r[a*3+2]??0)/c)}return"#ffffff"}function Bx(t,e){let n=t.data,r=new Uint8Array(t.width*t.height);for(let i=0,s=0;i<r.length;i++,s+=4){let o=n[s+3];if(o===0)continue;let a=(0.299*n[s]+0.587*n[s+1]+0.114*n[s+2])*e;r[i]=(a>255?255:a)*o/255+0.5}return{width:t.width,height:t.height,data:r}}function nw(t,e,n){let r=Math.max(0,Math.round(t.at.x)),i=Math.max(0,Math.round(t.at.y)),s=Math.min(e,Math.round(t.at.x+t.at.w)),o=Math.min(n,Math.round(t.at.y+t.at.h));if(s<=r||o<=i)return;let a=t.crop.w/t.at.w,c=t.crop.h/t.at.h;return{x0:r,y0:i,x1:s,y1:o,box:{x:t.crop.x+(r-t.at.x)*a,y:t.crop.y+(i-t.at.y)*c,w:(s-r)*a,h:(o-i)*c}}}function tc(t,e,n,r){let i=new Float32Array(n*r),s=nw(e,n,r);if(s){let o=qg(t,s.box,s.x1-s.x0,s.y1-s.y0);for(let a=s.y0;a<s.y1;a++)i.set(o.data.subarray((a-s.y0)*(s.x1-s.x0),(a-s.y0+1)*(s.x1-s.x0)),a*n+s.x0)}return{width:n,height:r,data:i}}function xf(t,e,n,r){let i=new Uint8Array(n*r*4),s=nw(e,n,r);if(s){let o=s.x1-s.x0,a=co(t,s.box,o,s.y1-s.y0);for(let c=s.y0;c<s.y1;c++)i.set(a.data.subarray((c-s.y0)*o*4,(c-s.y0+1)*o*4),(c*n+s.x0)*4)}return{width:n,height:r,data:i}}function vf(t,e){if(e<=0)return t;let{width:n,height:r}=t,i=[0,1,2,3].map(()=>({width:n,height:r,data:new Float32Array(n*r)}));for(let a=0;a<n*r;a++){let c=t.data[a*4+3]??0;for(let u=0;u<3;u++)i[u].data[a]=(t.data[a*4+u]??0)*c/255;i[3].data[a]=c}let s=i.map((a)=>uo(a,e).data),o=new Uint8Array(n*r*4);for(let a=0;a<n*r;a++){let c=s[3]?.[a]??0;if(c<=0)continue;for(let u=0;u<3;u++)o[a*4+u]=Math.min(255,Math.max(0,Math.round((s[u]?.[a]??0)*255/c)));o[a*4+3]=Math.min(255,Math.round(c))}return{width:n,height:r,data:o}}function Nf(t){let e=Cx(t),n,r;return{box:e,clear:In(t,e),get ink(){return n??=Bx(t,jx(t,e)),n},image:t,get peak(){return r??=_x(t,e),r}}}function rw(t,e,n,r,i){let s=Nf(t),{box:o,clear:a,ink:c}=s,u=ew(o,e,n,a),l=Math.min(1,Nx/Math.max(o.w,o.h)),f={x:0,y:0,w:Math.round(o.w*l),h:Math.round(o.h*l)},d=r*f.w*u.crop.w/(o.w*u.at.w);if(i==="original")return{coloring:i,figure:vf(co(t,o,f.w,f.h),d),fill:vf(xf(t,u,e,n),r),focus:u.focus,peak:s.peak};let h=tc(c,{crop:o,at:f,focus:u.focus},f.w,f.h),p=tc(c,u,e,n);return{coloring:i,figure:lo(uo(h,d)),fill:lo(uo(p,r)),focus:u.focus}}function Wx(t,e,n,r){let i=nt(e),s=nt(n),o=new Uint8Array(t.width*t.height*4);for(let a=0;a<t.data.length;a++){let c=(t.data[a]??0)/255*r;for(let u=0;u<3;u++)o[a*4+u]=Math.round((i[u]??0)+((s[u]??0)-(i[u]??0))*c);o[a*4+3]=255}return{width:t.width,height:t.height,data:o}}function Ux(t,e,n){let r=nt(e),i=new Uint8Array(t.width*t.height*4);for(let s=0;s<t.width*t.height;s++){let o=(t.data[s*4+3]??0)/255*n;for(let a=0;a<3;a++)i[s*4+a]=Math.round((r[a]??0)+((t.data[s*4+a]??0)-(r[a]??0))*o);i[s*4+3]=255}return{width:t.width,height:t.height,data:i}}function iw(t,e,n,r,i,s,o,a="tone"){let{box:c,clear:u,ink:l}=t,f=ew(c,r,i,u),d=Math.round(100*f.at.w/f.crop.w/Math.min(r/c.w,i/c.h)),h=o?.size??"fill",p=h==="fill"?f:{crop:c,at:ms(c.w,c.h,r,i,h,o?.at??5,!1,h>100?Math.round(f.focus*100):-1),focus:f.focus},$=a==="original"?ls(e,t.peak):n.opacity,g=o?.opacity??$;return{image:a==="original"?Ux(vf(xf(t.image,p,r,i),s),e.background,g):Wx(lo(uo(tc(l,p,r,i),s)),e.background,n.color,g),fill:d,opacity:$}}function D(t){return z(t,"ttheme","backgrounds")}function Sf(t){return z(t,Ax)}function fr(t){try{return us(t,"utf8")}catch{return}}function lr(t){try{return Mx(t)}catch{return[]}}function vt(t){let e=fr(Sf(t));if(e===void 0)return Kx(t);let n=JSON.parse(e);if(n.version!==yf)throw Error(`${Sf(t)} is version ${n.version} — this ttheme reads version ${yf}`);return n}function be(t){return t.coloring??"tone"}function Rf(t){return{name:t.name,background:t.background,foreground:t.foreground,cursor:t.cursor,...t.selection?{selection:t.selection}:{},ansi:t.ansi,...t.waived?{waived:t.waived}:{}}}function dr(t){return{hue:{color:t.backdrop.color,opacity:t.backdrop.opacity},colors:Rf(t)}}function fs(t){return t.tone===void 0&&be(t)==="tone"}function Db(t){return(t.artist??[]).map((e)=>e.replace(/[\s,]+/g,"_")).join(",")}function sw(t,e){let n=e.pictures.findIndex((i)=>i.key===e.active),r=e.pictures[n];return[...r.artist?.length?[`# by ${Db(r)}`]:[],...r.from?[`# from ${r.from}`]:[],`# image ${r.key} ${n+1}/${e.pictures.length}`,...e.pictures.map((i)=>[`# picture ${i.key} ${i.stem} ${i.fill} ${i.opacity} ${i.artist?.length?Db(i):"-"}`,...i.from?[i.from]:[]].join(" ")),...e.pictures.filter((i)=>be(i)==="original").map((i)=>`# colors ${i.key} original`),`background-image = ${z(t,r.fill)}`,"background-image-fit = cover","background-image-position = top-right",`background-image-opacity = ${r.opacity}`,`config-file = ?${r.stem}.tune.conf`,`config-file = ?${r.stem}.off.conf`,""].join(`
244
- `)}function ow(t){let e=D(t);for(let[n,r]of Object.entries(vt(e).palettes)){let i=z(e,`${Qt(n)}.conf`),s=sw(e,r);if(fr(i)!==s)H(i,s)}}function ds(t,e,n){H(Sf(t),`${JSON.stringify(e,null,2)}
245
- `);for(let r of n){let i=e.palettes[r],s=z(t,`${Qt(r)}.conf`);if(i)H(s,sw(t,i));else cs(s,{force:!0})}}function aw(t,e){return lr(t).filter((n)=>n.startsWith(`${e}.`)||n.startsWith(`${e}@`))}function Tf(t,e){for(let n of aw(t,e))cs(z(t,n),{force:!0})}function cw(t,e){Tf(t,e.stem);for(let n of[e.original,e.cut])if(n)cs(z(t,n),{force:!0})}function qb(t,e,n,r){let i=Qb(/^background-image\s*=\s*(.*?)\s*$/m.exec(e??"")?.[1]??"");if(!i.startsWith(`${t}.`)||!/^\.[0-9a-f]{8}@fill-\d+\.png$/.test(i.slice(t.length)))return;let s=i.slice(0,i.indexOf("@")),o=r??/^# image (\S+)$/m.exec(e??"")?.[1]??`picture_${s.slice(t.length+1)}`,a=/^# from (.+)$/m.exec(e??"")?.[1],c=Number(/^background-image-opacity\s*=\s*(\S+)/m.exec(e??"")?.[1]??1),u=n.find((l)=>l.startsWith(`${t}-${o}.`));return{key:o,stem:s,fill:i,opacity:Number.isFinite(c)?c:1,...a?{from:a}:{},...u?{original:z(nc,u)}:{}}}function Yb(t,e){if(Of(t))Zb(t,e)}function Kx(t){let e={version:yf,palettes:{}};if(!Of(t))return e;let n=lr(z(t,nc)),r=lr(t).filter((s)=>s.endsWith(".conf")&&s!=="shown.conf"&&!/\.(tune|off)\.conf$/.test(s)).map((s)=>s.slice(0,-5)),i=z(t,Hx);for(let s of new Set([...r,...lr(i)])){let o=[],a=qb(s,fr(z(t,`${s}.conf`)),n);if(a)Yb(z(t,`${s}.tune.conf`),z(t,`${a.stem}.tune.conf`)),Yb(z(t,`${s}.off.conf`),z(t,`${a.stem}.off.conf`)),o.push(a);for(let c of lr(z(i,s))){let u=z(i,s,c),l=qb(s,fr(z(u,".conf")),n,c);if(!l)continue;for(let f of lr(u)){let d=f===".tune.conf"||f===".off.conf"?`${l.stem}${f}`:`${s}${f}`;if(f!==".conf")Zb(z(u,f),z(t,d))}cs(u,{recursive:!0}),o.push(l)}if(lr(z(i,s)).length===0)cs(z(i,s),{recursive:!0,force:!0});if(o.length>0)o.sort((c,u)=>c.key<u.key?-1:c.key>u.key?1:0),e.palettes[s]={active:(a??o[0]).key,pictures:o}}if(lr(i).length===0)cs(i,{recursive:!0,force:!0});return ds(t,e,Object.keys(e.palettes)),e}function Jb(t,e,n){return e.startsWith("~/")?z(n,e.slice(2)):Ix(e)?e:z(t,e)}function we(t,e,n){let r=new Map,i=(a,c)=>{let u=fr(a);if(u===void 0)return!1;for(let l of u.split(`
246
- `)){let f=/^([a-z-]+)\s*=\s*(.*?)\s*$/.exec(l);if(f?.[1]==="config-file"&&c<4)i(Jb(t,f[2].replace(/^\?/,""),n),c+1);else if(f&&/^background-image(?:-fit|-opacity|-position)?$/.test(f[1]))r.set(f[1],f[2])}return!0};if(!i(z(t,`${Qt(e)}.conf`),0))return;let s=r.get("background-image")??"";if(s==="")return;let o=Number(r.get("background-image-opacity")??1);return{image:Jb(t,s,n),opacity:Number.isFinite(o)?o:1,cover:r.get("background-image-fit")==="cover",position:r.get("background-image-position")??"center"}}function Xt(t){return`${t.site}_${t.id}`}function rc(t,e,n){let r=D(t),i=vt(r),s=i.palettes[e];if(!s)throw Error(`${e} has no image`);let o=s.pictures.findIndex((u)=>u.key===(n??s.active));if(o===-1)throw Error(`${e} has no picture ${n}`);let[a]=s.pictures.splice(o,1);cw(r,a);let c=s.pictures[o%Math.max(s.pictures.length,1)];if(!c)delete i.palettes[e];else if(a.key===s.active)s.active=c.key;return ds(r,i,[e]),{key:a.key,left:s.pictures.length}}function uw(t,e,n,r){let i=n.coloring==="original"?sn(n.figure):ni(n.figure,r),s=n.coloring==="original"?sn(n.fill):ni(n.fill,r),o=`${Qt(t)}.${Vb("sha1").update(e).update(i).update(s).digest("hex").slice(0,8)}`,a=`${o}@fill-${Math.round(n.focus*100)}.png`;return{stem:o,fill:a,files:[[`${o}.png`,i],[a,s]]}}function lw(t,e,n,r){return n==="original"&&r?{coloring:"original",opacity:ls(t,r),peak:r}:{coloring:"tone",opacity:e.opacity,tone:e.color}}function Ef(t,e){return z(nc,`${Qt(t)}-${e}`)}function Pf(t,e){return e.map(([n,r])=>{let i=z(t,n);return H(i,r),i})}function ic(t,e,n,r,i,s,o,a="tone"){let c=D(t),u=e.name,l=Xt(i),f=vt(c),d=f.palettes[u]??{active:l,pictures:[]},h=If(s.width,s.height),p=rw(r,h.width,h.height,o,a),$=uw(u,l,p,n.color),g=Ef(u,l),b={key:l,stem:$.stem,fill:$.fill,...lw(e,n,p.coloring,p.coloring==="original"?p.peak:void 0),blur:o,window:h,...i.from?{from:i.from}:{},...i.artist?.length?{artist:i.artist}:{},...i.source?{source:i.source}:{},original:`${g}.${i.ext}`,...i.cut?{cut:`${g}.cut.png`}:{}},y=d.pictures.find((E)=>E.key===l);if(y)cw(c,y);Ex(z(c,nc),{recursive:!0});let S=Pf(c,[...$.files,[b.original,i.bytes],...b.cut?[[b.cut,nf(ei(r))]]:[]]);return d.pictures=y?d.pictures.map((E)=>E===y?b:E):[...d.pictures,b],d.active=l,f.palettes[u]=d,ds(c,f,[u]),[...S,z(c,`${Qt(u)}.conf`)]}function hs(t,e,n){let r=D(t),i=vt(r),s=i.palettes[e],o=s?s.pictures.findIndex((a)=>a.key===n):-1;if(!s||o===-1)throw Error(`${e} has no picture ${n}`);if(s.active!==n)s.active=n,ds(r,i,[e]);return{at:o+1,of:s.pictures.length}}function re(t,e){let n=vt(D(t)).palettes[e];if(!n)return[];return[...n.pictures.filter((i)=>i.key===n.active),...n.pictures.filter((i)=>i.key!==n.active)]}var Mf="top-right";function ms(t,e,n,r,i,s,o,a=-1){let c=Math.trunc,u=(s-1)%3,l=c((s-1)/3),f=n*e>=r*t!==!o,d=f?c(i*n/100):c(i*r*t/(100*e)),h=f?c(i*n*e/(100*t)):c(i*r/100),p=c(u*(n-d)/2),$=c(l*(r-h)/2);if(a>=0){if(d>n)p=c((n-d)/2);if(h>r)$=Math.max(r-h,Math.min(0,c(r/2)-c(a*h/100)))}return{x:p,y:$,w:d,h}}function Hf(t,e){let n=fr(z(t,`${e.stem}.tune.conf`));if(n===void 0)return{};let r=(u)=>new RegExp(`^${u}\\s*=\\s*(.*?)\\s*$`,"m").exec(n)?.[1]??"",i=Qb(r("background-image")),s=/@(\d+)-/.exec(i)?.[1],o=/@fill-\d+\.png$/.test(i)?"fill":s?Number(s):r("background-image-fit")==="cover"?"fill":100,a=r("background-image-position").replace("center-center","center")||"center",c=Number(r("background-image-opacity")||1);return{...o!=="fill"?{size:o}:{},...a!==Mf?{position:a}:{},...Number.isFinite(c)&&c!==e.opacity?{opacity:c}:{}}}function Io(t,e,n,r,i){let s=n.size??"fill",o=n.position??Mf,a=n.opacity??e.opacity;if(s==="fill"&&o===Mf&&a===e.opacity)return;let c=_t.indexOf(o)+1,u=z(t,`${e.stem}.png`),l=z(t,e.fill),f=!0,d=typeof s==="number"&&(s>100||!r&&o!=="center");if(s===100&&!d)l=u,f=!1;else if(typeof s==="number"){if(fs(e))throw Error(`${e.stem} was drawn before pictures kept their tone — init draws it again`);let p=At(new Uint8Array(us(u))),{width:$,height:g}=d?Oo:p,b=d?Number(/@fill-(\d+)\.png$/.exec(e.fill)?.[1]??50):-1,y=ms(p.width,p.height,$,g,s,c,!1,b);l=z(t,`${e.stem}@${s}-${o}${d?`-${$}x${g}`:""}.png`);let E={crop:{x:0,y:0,w:p.width,h:p.height},at:y,focus:b};H(l,e.tone?ni(lo(tc(ei(p),E,$,g)),e.tone):sn(xf(p,E,$,g))),f=d}let h=z(t,`${e.stem}.tune.conf`);return H(h,[`background-image = ${l.startsWith(`${i}/`)?`~${l.slice(i.length)}`:l}`,`background-image-fit = ${f?"cover":"contain"}`,`background-image-position = ${o}`,`background-image-opacity = ${a}`,""].join(`
247
- `)),h}function fw(t){let e=new Map;for(let[n,r]of Object.entries(vt(D(t)).palettes)){let[,i,s]=/^([a-z.]+)_(\d+)$/.exec(r.active)??[];if(i&&s)e.set(n,{site:i,id:Number(s)})}return e}function dw(t){try{let e=rn(new Uint8Array(us(t)));return e?{width:e.width,height:e.height}:void 0}catch{return}}function hw(t,e,n,r,i,s,o){let a=[n.original,n.cut].map((c)=>{if(!c)return"";try{let{size:u,mtimeMs:l}=Ox(z(t,c));return`${c}:${u}:${l}`}catch{return}});if(!n.original||a.includes(void 0))return;return Ib([xx,Qt(e),n.key,...a,r.width,r.height,i,s,s==="tone"?o:""])}function zx(t,e,n){if(!n.window||n.blur===void 0)return;let r=hw(t,e,n,n.window,n.blur,be(n),n.tone??"");if(!r||xb(r))return;try{mf(r,{stem:n.stem,fill:n.fill,...n.peak?{peak:n.peak}:{},figure:us(z(t,`${n.stem}.png`)),picture:us(z(t,n.fill))})}catch{}}function mw(t,e,n,r,i,s,o,a,c){let u=c?void 0:hw(t,e,n,r,o,a,s.hue.color),l=u?Nb(u):void 0;if(l)return{made:{stem:l.stem,fill:l.fill,files:[[`${l.stem}.png`,l.figure],[l.fill,l.picture]]},peak:l.peak,image:void 0};let f=i();if(!f)return null;let d=rw(f,r.width,r.height,o,a),h=uw(e,n.key,d,s.hue.color),p=d.coloring==="original"?d.peak:void 0;if(u)mf(u,{stem:h.stem,fill:h.fill,...p?{peak:p}:{},figure:h.files[0]?.[1],picture:h.files[1]?.[1]});return{made:h,peak:p,image:f}}function xo(t,e,n,r,i,s,o,a,c,u=be(n)){let l=D(t),f=n.window??dw(z(l,n.fill))??Oo,d=mw(l,e,n,f,r,i,s,u,c);if(!d)return null;let{made:h,peak:p,image:$}=d,g={...n,stem:h.stem,fill:h.fill,...lw(i.colors,i.hue,u,p),blur:s,window:f,...c?{cut:`${Ef(e,n.key)}.cut.png`}:{}};if(u==="original")delete g.tone;else delete g.peak;if(c&&$)H(z(l,`${Ef(e,n.key)}.cut.png`),nf(ei($)));if(h.stem===n.stem)return g;if(be(n)!==u)zx(l,e,n);Pf(l,h.files);let b=Hf(l,n);Io(l,g,be(n)===u?b:{...b,opacity:void 0},o,a);let y=z(l,`${n.stem}.off.conf`);if(Of(y))Sx(y,z(l,`${g.stem}.off.conf`));return g}function pw(t,e,n,r,i,s,o){let a=D(t),c=n.window??dw(z(a,n.fill))??Oo;return mw(a,e,n,c,r,i,s,o,!1)!==null}function Af(t,e){let n=D(t),r=vt(n),i=new Set,s=[];for(let{name:o,picture:a}of e){let c=r.palettes[o],u=c?.pictures.findIndex((f)=>f.key===a.key)??-1,l=c?.pictures[u];if(!c||!l)continue;if(c.pictures[u]=a,i.add(o),l.stem!==a.stem)s.push(l.stem)}if(i.size===0)return;ds(n,r,[...i]);for(let o of s)Tf(n,o)}function gw(t,e,n){return t.replace(/^background-image-opacity = (\S+)$/m,(r,i)=>Number(i)===e?`background-image-opacity = ${n}`:r)}function bw(t,e,n){let r=z(t,`${e.stem}.tune.conf`),i=fr(r);if(i!==void 0)H(r,gw(i,e.opacity,n));return{...e,opacity:n}}function Dx(t,e,n,r){if(n.tone===r.color)return bw(t,n,r.opacity);let i=aw(t,n.stem).filter((a)=>a.endsWith(".png")).map((a)=>{let c=new Uint8Array(us(z(t,a)));return[a,ja(c,r.color)??ni(ei(At(c)),r.color)]}),s=(a)=>i.find(([c])=>c===a)?.[1]??new Uint8Array,o=`${Qt(e)}.${Vb("sha1").update(n.key).update(s(`${n.stem}.png`)).update(s(n.fill)).digest("hex").slice(0,8)}`;Pf(t,i.map(([a,c])=>[o+a.slice(n.stem.length),c]));for(let a of["tune","off"]){let c=fr(z(t,`${n.stem}.${a}.conf`));if(c!==void 0)H(z(t,`${o}.${a}.conf`),gw(c.split(n.stem).join(o),n.opacity,r.opacity))}return{...n,stem:o,fill:o+n.fill.slice(n.stem.length),opacity:r.opacity,tone:r.color}}function ec(t,e){if(be(t)==="original")return t.peak!==void 0&&ls(e.colors,t.peak)!==t.opacity;return t.tone!==void 0&&(t.tone!==e.hue.color||t.opacity!==e.hue.opacity)}function ww(t,e){let n=D(t),r=vt(n),i=[],s=[];for(let[o,a]of Object.entries(r.palettes)){let c=e.get(o);if(!c||!a.pictures.some((u)=>ec(u,c)))continue;a.pictures=a.pictures.map((u)=>{if(!ec(u,c))return u;let l=be(u)==="original"?bw(n,u,ls(c.colors,u.peak)):Dx(n,o,u,c.hue);if(l.stem!==u.stem)s.push(u.stem);return l}),i.push(o)}if(i.length>0){ds(n,r,i);for(let o of s)Tf(n,o)}return i}var sc=1;function Te(t){let{slot:e,color:n,opacity:r}=cn({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,...t.base?{base:t.base}:{},group:t.group,...t.native?{native:t.native}:{},...t.nativeNames?{nativeNames:t.nativeNames}:{},...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:tn(t),...t.waive.length>0?{waived:t.waive}:{},backdrop:{slot:e,color:n,opacity:r},...t.pictures?{pictures:t.pictures}:{}}}function Ue(t){return{name:t.name,...t.base?{base:t.base}:{},group:t.group,...t.native?{native:t.native}:{},...t.nativeNames?{nativeNames:t.nativeNames}:{},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??[],...t.pictures?{pictures:t.pictures}:{}}}var qx=6,Yx=["ansi1","ansi2","ansi4","ansi3","ansi5","ansi6"];function oc(t){let e=(s)=>s.startsWith("ansi")?t.ansi[Number(s.slice(4))]:s==="foreground"?t.foreground:s==="cursor"?t.cursor:s==="selection"?t.selection:void 0,n=(s)=>s.startsWith("ansi")?`ansi${Number(s.slice(4))%8}`:s,r=new Set,i=[];for(let s of["foreground",...t.signatureSlots,...Yx]){let o=e(s);if(i.length===qx||!o||r.has(n(s))||i.includes(o))continue;r.add(n(s)),i.push(o)}return i}function Et(t){return t.filter((e)=>e.default!==!0)}function ps(){return{schema:sc,version:xt.version,gate:he,palettes:[]}}import{existsSync as Jx,readFileSync as uc,statSync as $w}from"node:fs";import{homedir as ws}from"node:os";import{join as bs}from"node:path";var Vx=["core","kowiki","unlicensed"],Zx=["ko","ja","en","zh","other"],vw=["keys","keyAt","ownAt","owners","cards","cardAt","ranks","tags","tagAt","tagCard"],Sw="TTNI";function hr(t=ws()){return bs(process.env.XDG_CACHE_HOME??bs(t,".cache"),"ttheme","aninames")}var Qx=/[ァ-ヶ]/g,Xx=/[\s\p{P}\p{S}]+/gu;function cc(t){return t.normalize("NFKC").toLowerCase().replace(Qx,(e)=>String.fromCharCode(e.charCodeAt(0)-96)).replace(Xx,"")}function jf(t){return t.length>=2||/[\p{Script=Han}\p{Script=Hangul}\p{Script=Hiragana}]/u.test(t)}function Ew(t){let e=hr(t);return Vx.map((n)=>bs(e,`ttheme-${n}.json`)).filter((n)=>Jx(n))}var t2=6;function Mw(t){return[`format ${t2}`,...t.map((e)=>`${e}:${$w(e).size}:${$w(e).mtimeMs}`)].join("|")}function e2(t){try{return JSON.parse(uc(t,"utf8"))}catch{return{}}}function n2(t){let e=new Map;for(let i of t)for(let[s,o]of Object.entries(e2(i))){let a=e.get(s)??{tags:new Set,names:[],japanese:[],generated:[],rank:0,weight:0,posts:0};a.posts=Math.max(a.posts,o.posts??0),a.generated.push(...o.generated??[]),a.japanese.push(...o.names?.ja??[]),a.tag??=o.tag;for(let c of o.danbooru??[])a.tags.add(c);for(let c of Zx)a.names.push(...o.names?.[c]??[]);if(o.rank!==void 0){let c=o.weight??1;a.rank=(a.rank*a.weight+o.rank*c)/(a.weight+c),a.weight+=c}e.set(s,a)}let n=[],r=Math.log1p([...e.values()].reduce((i,s)=>Math.max(i,s.posts),1));for(let i of e.values()){if(i.tags.size===0)continue;let s=[...i.tags];n.push({tag:i.tag&&i.tags.has(i.tag)?i.tag:s[0],tags:s,names:[...new Set(i.names)],japanese:[...new Set(i.japanese)],generated:[...new Set(i.generated)],rank:i.posts>0?Math.log1p(i.posts)/r:i.rank})}return n}function No(t,e){let n=new t(e.length);return n.set(e),n}function Ff(t){let e=[0];for(let n of t)e.push(e.at(-1)+n.length);return{bytes:Buffer.concat(t),at:No(Uint32Array,e)}}function r2(t,e){let n=n2(t),r=new Map,i=(S,E,I)=>{let N=r.get(S),R=E*4+I;if(!N)r.set(S,[R]);else if(N.at(-1)>>>2!==E)N.push(R);else if(N.at(-1)<R)N[N.length-1]=R};n.forEach((S,E)=>{let I=[...S.names,...S.tags.map((N)=>N.replaceAll("_"," "))];for(let[N,R]of[[I,1],[S.generated,0]])for(let F of N){let j=cc(F);if(j&&jf(j))i(j,E,2|R);let B=F.split(/[\s・·_]+/);if(B.length<2)continue;for(let X of B){let U=cc(X);if(U&&jf(U))i(U,E,R)}}});let s=[...r.keys()].sort(),o=[0],a=[];for(let S of s){for(let E of r.get(S)??[])a.push(E);o.push(a.length)}let c=n.flatMap((S,E)=>S.tags.map((I)=>[I,E])).sort(([S],[E])=>S<E?-1:S>E?1:0),u=Ff(s.map((S)=>Buffer.from(S))),l=Ff(n.map((S)=>Buffer.from(JSON.stringify([S.tag,S.tags,S.names,S.japanese,S.generated])))),f=Ff(c.map(([S])=>Buffer.from(S))),d={keys:u.bytes,keyAt:u.at,ownAt:No(Uint32Array,o),owners:No(Uint32Array,a),cards:l.bytes,cardAt:l.at,ranks:No(Float32Array,n.map((S)=>S.rank)),tags:f.bytes,tagAt:f.at,tagCard:No(Uint32Array,c.map(([,S])=>S))},h=vw.map((S)=>{let E=d[S];return Buffer.from(E.buffer,E.byteOffset,E.byteLength)}),p=0,$=h.map((S)=>{let E=[p,S.length];return p+=Math.ceil(S.length/4)*4,E}),g=Buffer.from(JSON.stringify({stamp:e,sections:$})),b=Math.ceil((8+g.length)/4)*4,y=Buffer.alloc(b+p);y.write(Sw,0,"latin1"),y.writeUInt32LE(g.length,4),g.copy(y,8);for(let[S,E]of h.entries())E.copy(y,b+($[S]?.[0]??0));return y}function kw(t,e,n,r){let i=e.byteOffset+n;if(i%4===0)return new t(e.buffer,i,r/4);return new t(e.buffer.slice(i,i+r),0,r/4)}function yw(t,e){if(t.toString("latin1",0,4)!==Sw)return;let n=t.readUInt32LE(4),r=JSON.parse(t.toString("utf8",8,8+n));if(r.stamp!==e)return;let i=Math.ceil((8+n)/4)*4,s=(c)=>{let[u,l]=r.sections[vw.indexOf(c)];return[i+u,l]},o=(c)=>{let[u,l]=s(c);return t.subarray(u,u+l)},a=(c)=>kw(Uint32Array,t,...s(c));return{keys:o("keys"),keyAt:a("keyAt"),ownAt:a("ownAt"),owners:a("owners"),cards:o("cards"),cardAt:a("cardAt"),ranks:kw(Float32Array,t,...s("ranks")),tags:o("tags"),tagAt:a("tagAt"),tagCard:a("tagCard")}}var Cf;function Gf(t){try{let e=Ew(t);if(e.length===0)return;let n=Mw(e);if(Cf?.stamp===n)return Cf.index;let r=bs(hr(t),"index.bin"),i;try{i=yw(uc(r),n)}catch{}if(!i){let s=r2(e,n);try{H(r,s)}catch{}i=yw(s,n)}if(i)Cf={stamp:n,index:i};return i}catch{return}}function Ow(t,e){let[n,r,i,s,o]=JSON.parse(t.cards.toString("utf8",t.cardAt[e],t.cardAt[e+1]));return{tag:n,tags:r,names:i,japanese:s,generated:o,rank:t.ranks[e]??0}}function Iw(t,e,n,r){let i=0,s=n;while(i<s){let o=i+s>>1;if(t.toString("utf8",e[o],e[o+1])<r)i=o+1;else s=o}return i}function xw(t,e){let n=Buffer.from(e),r=t.tagCard.length,i=Iw(t.tags,t.tagAt,r,e);if(i>=r||t.tags.compare(n,0,n.length,t.tagAt[i],t.tagAt[i+1])!==0)return;return t.tagCard[i]}var Lf=/\s*[((][^()()]*[))]$/u,ac={ko:4,en:4,ja:5,zh:3};function i2(t){if(!t)return[];let e=/\p{Script=Hangul}/u,n=/^[\p{Script=Latin}\p{N}\s.'’-]+$/u,r=new Set([...t.names,...t.generated].filter((f)=>!Lf.test(f))),i=(f)=>!Lf.test(f)||!r.has(f.replace(Lf,"")),s=t.names.filter(i),o=s.filter((f)=>e.test(f)),a=[...o,...t.generated.slice(0,o.length>0?0:2)],c=s.filter((f)=>n.test(f)),u=t.japanese.filter(i),l=s.filter((f)=>!e.test(f)&&!n.test(f)&&!u.includes(f));return[...new Set([...a.slice(0,ac.ko),...c.slice(0,ac.en),...u.slice(0,ac.ja),...l.slice(0,ac.zh)])]}var gs;function lc(t,e=ws()){if(!t)return[];if(!gs)try{gs=JSON.parse(uc(bs(hr(e),"aliases.json"),"utf8")).tags}catch{gs={}}return gs[t]??[]}function _f(t,e=ws()){try{return s2(t,e)}catch{return new Map}}function s2(t,e){let n=new Map,r=Ew(e);if(r.length===0||t.length===0)return n;let i=Mw(r),s=bs(hr(e),"aliases.json"),o;try{o=JSON.parse(uc(s,"utf8"))}catch{}if(o?.stamp===i&&t.every((l)=>(l in o.tags))){gs=o.tags;for(let l of t)n.set(l,o.tags[l]??[]);return n}let a=Gf(e);if(!a)return n;let c=new Set([...t,...o?.stamp===i?Object.keys(o.tags):[]]),u={};for(let l of c){let f=xw(a,l);u[l]=f===void 0?[]:i2(Ow(a,f))}try{H(s,`${JSON.stringify({stamp:i,tags:u})}
248
- `)}catch{}gs=u;for(let l of t)n.set(l,u[l]??[]);return n}function ui(t,e=ws()){_f(t.flatMap((n)=>n.booru?[n.booru]:[]),e)}var o2=0.25,a2=0.1;function Nw(t,e,n=new Set,r=ws()){let i=cc(t);if(!i||!jf(i))return[];let s=Gf(r);if(!s)return[];let o=Buffer.from(i),a=s.ownAt.length-1,c=new Set([...n].flatMap((l)=>xw(s,l)??[])),u=new Map;for(let l=Iw(s.keys,s.keyAt,a,i);l<a;l++){let f=s.keyAt[l],d=s.keyAt[l+1]-f;if(d<o.length||s.keys.compare(o,0,o.length,f,f+o.length)!==0)break;let h=d===o.length;for(let p=s.ownAt[l];p<s.ownAt[l+1];p++){let $=s.owners[p],g=$>>>2,b=h?Math.max(0,($&2?2:1)-($&1?0:1)):0,y=(s.ranks[g]??0)+o2*b+(c.has(g)?a2:0);if((u.get(g)?.score??-1)<y)u.set(g,{score:y,key:l})}}return[...u].sort(([,l],[,f])=>f.score-l.score).slice(0,e).map(([l,{key:f}])=>{let d=Ow(s,l),h=s.keys.toString("utf8",s.keyAt[f],s.keyAt[f+1]);return{tag:d.tags.find((p)=>n.has(p))??d.tag,name:[...d.names,...d.generated].find((p)=>cc(p).includes(h))??d.tag.replaceAll("_"," ")}})}function fc(t=ws()){Gf(t)}import{existsSync as m2,readdirSync as Fw,readFileSync as p2}from"node:fs";import{basename as Cw,join as Ro}from"node:path";import{existsSync as c2,readFileSync as Rw}from"node:fs";import{homedir as Tw}from"node:os";import{isAbsolute as Pw,join as li,resolve as u2}from"node:path";var q="official",un="ttheme-market.json",$s="ttheme-market",l2=/^[a-z0-9](?:[a-z0-9]|-(?=[a-z0-9])){0,38}$/i,f2=/^[\w.-]{1,100}$/,d2=/^\w[\w.+/-]{0,199}$/;function pr(t){return li(t,"ttheme","installed.json")}function Bt(t){return t??[q]}function ks(t){try{let{markets:e}=JSON.parse(Rw(pr(t),"utf8"));return Bt(Array.isArray(e)?e.filter((n)=>typeof n==="string"):void 0)}catch{return[q]}}function ut(t){return Pw(t)}function $e(t){return t!==q&&!ut(t)}function mr(t){let e=t.indexOf("#");return $e(t)&&e>=0?t.slice(0,e):t}function Bf(t){let e=t.indexOf("#");return $e(t)&&e>=0?t.slice(e+1):void 0}function ys(t,e){return mr(t)===mr(e)}function gr(t,e){return!ut(t)&&(e?.[t]??t===q)}function h2(t){return!d2.test(t)||t.includes("..")||t.includes("//")||/(?:[./]|\.lock)$/.test(t)}function br(t,e=process.cwd()){if(t===q)return q;if(t==="~"||t.startsWith("~/"))return li(Tw(),t.slice(1));if(t.startsWith(".")||Pw(t))return u2(e,t);let[n="",r,...i]=t.split("#"),[s,o,...a]=n.replace(/^https:\/\/github\.com\//,"").replace(/\.git$/,"").split("/");if(!s||!l2.test(s)||!o||!f2.test(o)||a.length>0||i.length>0||r!==void 0&&h2(r))throw Error(`${t} is not a market — give a repository (alice/ttheme-dust, #v1 pins a tag or branch) or a path (./my-market)`);return`${s.toLowerCase()}/${o}${r===void 0?"":`#${r}`}`}function Hw(t){let e=Bf(t)?.split("/").map(encodeURIComponent).join("/")??"HEAD";return`https://raw.githubusercontent.com/${mr(t)}/${e}/${un}`}function Aw(t){return t.slice(0,t.indexOf("/"))}function Wf(t){return li(t,"ttheme","markets")}function Ke(t,e){return li(Wf(t),`${mr(e).replace("/","--")}.json`)}function dc(t){return li(t,"ttheme","market")}function Uf(t,e){return li(dc(t),e)}function Kf(t,e){if(typeof t!=="string"||typeof e!=="string")return'needs an "owner" (the GitHub handle) and a "name"';return We(`${t}@${e}/x`)}function ke({owner:t,name:e}){return`${t}@${e}`}function ln(t){let e=li(t,un);if(!c2(e))throw Error(`${t} has no ${un} — \`ttheme market init ${t}\` makes one`);let n;try{n=JSON.parse(Rw(e,"utf8"))}catch{throw Error(`${e} is not valid JSON`)}let r=Kf(n.owner,n.name);if(r)throw Error(`${e} ${r}`);return{owner:n.owner,name:n.name}}function st(t){if(t===q)return"the ttheme catalog";if(!ut(t))return`github.com/${t}`;let e=Tw();return t===e||t.startsWith(`${e}/`)?`~${t.slice(e.length)}`:t}var Rn="tt1:",Lw=["background","foreground","cursor","selection",...Array.from({length:16},(t,e)=>`ansi${e}`)];function fi(t,e=!0){return ks(t).filter(ut).flatMap((n)=>{try{let r=ln(n);return[{dir:n,...r,id:ke(r)}]}catch(r){if(e)process.stderr.write(`ttheme: skipping the market at ${n} — ${r.message}
249
- `);return[]}})}function hc(t){return Ro(t,"palettes")}function wr(t){let e=hc(t);if(!m2(e))return[];let n=[],r=[];for(let i of Fw(e,{withFileTypes:!0}).sort((s,o)=>s.name<o.name?-1:1)){if(i.name.startsWith("."))continue;if(i.isDirectory()){for(let s of Fw(Ro(e,i.name)).sort())if(s.endsWith(".toml"))n.push({path:Ro(e,i.name,s),slug:Cw(s,".toml"),catalog:i.name})}else if(i.name.endsWith(".toml"))r.push({path:Ro(e,i.name),slug:Cw(i.name,".toml")})}return[...n,...r]}function To(t,e){let n=e.get(t.slug);if(n)return`${t.slug} is also ${n.catalog?`in ${n.catalog}`:"outside a catalog"} — a palette name is used once in a market`;let r=t.catalog===void 0?void 0:Mo(t.catalog);return r?`the catalog folder ${JSON.stringify(t.catalog)} ${r}`:void 0}function zf(t,e){let n=ct(e);if(!n)throw Error(`${e} is an official palette — yours are named <you>@<market>/<palette>`);let r=fi(t,!1).find((s)=>s.id===n);if(!r)throw Error(`${n} is not a local market — \`ttheme market add <dir>\` adds the folder that holds it`);let i=ur(e);return wr(r.dir).find((s)=>s.slug===i)?.path??Ro(hc(r.dir),`${i}.toml`)}function g2(t,e){let n=new Map;for(let i of e)if(i.group!==vo&&!n.has(i.group)){let s=e.find((o)=>o.group===i.group&&o.lead)?.name??"";n.set(i.group,{name:i.group,...i.native?{native:i.native}:{},lead:s})}let r=new Map(e.filter((i)=>!i.default&&!ct(i.name)).map((i)=>[i.name,{group:i.group,order:i.order}]));return{name:t,groups:n,bases:r,open:!0}}function ye(t,e,n){let r=ur(t),{native:i,...s}=$f(`${r}.toml`,e,g2(r,n)),o=ct(t);return{...s,name:t,...o?{group:o,lead:!1}:{}}}function $r(t,e,n,r=!0){let i=new Map;return wr(t).flatMap((s)=>{try{let o=To(s,i);if(o)throw Error(o);i.set(s.slug,s);let a=Te(ye(`${e}/${s.slug}`,p2(s.path,"utf8"),n));return[s.catalog?{...a,catalog:s.catalog}:a]}catch(o){if(r)process.stderr.write(`ttheme: skipping ${s.path} — ${o.message}
250
- `);return[]}})}function mc(t,e,n=!0){return fi(t,n).flatMap(({dir:r,id:i})=>$r(r,i,e,n))}function Df(t,e=t.name,n){return{name:e,...t.base?{base:t.base}:{},...t.group!==vo?{group:t.group}:{},ansiSource:t.ansiSource,...t.booru?{booru:t.booru}:{},...t.booruSites?{booruSites:t.booruSites}:{},signature:t.signatureSlots,background:t.background,foreground:t.foreground,cursor:t.cursor,selection:t.selection,ansi:t.ansi,...t.waived&&t.waived.length>0?{waive:t.waived,reason:n??"kept from the palette"}:{},...t.pictures?{pictures:t.pictures}:{}}}var Mt=(t)=>JSON.stringify(t);function jw(t){return["[[picture]]",`site = ${Mt(t.site)}`,`id = ${t.id}`,...t.size===void 0?[]:[`size = ${typeof t.size==="number"?t.size:Mt(t.size)}`],...t.position===void 0?[]:[`position = ${Mt(t.position)}`],...t.opacity===void 0?[]:[`opacity = ${t.opacity}`]]}function Gw(t,e){return e.length===0?t:`${t.replace(/\n*$/,`
242
+ */var Ut=["top-left","top-center","top-right","center-left","center","center-right","bottom-left","bottom-center","bottom-right"],xo="Original",zI=1e6,dn="_groups.toml",Vb=3,Zb=8,Sf="[a-z0-9]+(?:-[a-z0-9]+)*",DI=new RegExp(`^(?:(${Sf})@(${Sf})/)?(${Sf})$`),ew=["background","foreground","cursor","selection"];function it(t,e){throw Error(`${t}: ${e}`)}function ci(t,e,n){if(typeof n!=="string"||!oe(n))it(t,`${e} must be "#rrggbb" (lowercase), got ${JSON.stringify(n)}`);return n}function Ro(t,e,n){if(typeof n!=="string"||n.length===0)it(t,`${e} must be a non-empty string`);return n}function Xt(t){return t.replace("@","--").replace("/","--")}function H(t){return`ttheme-${Xt(t)}`}function lt(t){let e=t.indexOf("/");return e<0?void 0:t.slice(0,e)}function ae(t){return t.slice(t.indexOf("/")+1)}function ve(t){let e=DI.exec(t);if(!e)return"takes lowercase letters, digits and single hyphens, as <palette> or <owner>@<market>/<palette>";if((e[1]?.length??0)>39)return"has an owner longer than a GitHub handle can be";return(e[2]?.length??0)>40||(e[3]?.length??0)>40?"is longer than 40 characters":void 0}function No(t){if(/[\p{Cc}"$`\\]/u.test(t))return"holds a control character, a quote, $, ` or \\";return t.length>80?"is longer than 80 characters":void 0}function Io(t,e,n){let r=Ro(t,e,n),i=No(r);if(i)it(t,`${e} ${JSON.stringify(r)} ${i}`);return r}function Qb(t,e,n){let r=Ro(t,e,n),i=ve(r);if(i)it(t,`${e} "${r}" ${i}`);return r}function ds(t){return t&&typeof t==="object"?t:{}}function qI(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,s)=>ci(t,`ghostty.icon_screen[${s}]`,i))}function YI(t,e,n){let r=ds(e);return{iconGhost:r.icon_ghost===void 0?n.cursor:ci(t,"ghostty.icon_ghost",r.icon_ghost),iconScreen:qI(t,r.icon_screen,n)}}function JI(t){return new Map([...ew.map((e)=>[e,t[e]]),...t.ansi.map((e,n)=>[`ansi${n}`,e])])}function VI(t,e,n){if(!Array.isArray(e)||e.length!==Vb)it(t,`meta.signature must name exactly ${Vb} palette slots`);let r=JI(n),i=[],s=[];for(let[o,a]of e.entries()){let c=`meta.signature[${o}]`,u=Ro(t,c,a),l=r.get(u);if(l===void 0)it(t,`${c} ${JSON.stringify(a)} is not a palette slot — use ${ew.join(", ")} or ansi0-ansi15`);i.push(u),s.push(l)}if(new Set(s).size!==s.length)it(t,"meta.signature slots must resolve to three different colors");return{names:i,colors:s}}function ZI(t,e,n,r=!1){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 i={};for(let[s,o]of Object.entries(e)){let a=Y.find((u)=>u.key===s);if(!a){if(r)continue;it(t,`meta.booru_sites.${s} is not a find site — use ${Y.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.${s} must be one tag or a list of tags, got ${JSON.stringify(o)}`);if(c.length>1&&!a.ors)it(t,`meta.booru_sites.${s} takes one tag — ${a.name} does not OR tags`);if(c.length>a.tagBudget)it(t,`meta.booru_sites.${s} takes ${a.tagBudget} tags at most — ${a.name} searches that many at a time`);i[s]=c}return i}function QI(t,e,n){if(e===void 0)return;if(!Array.isArray(e)||e.length===0||e.length>Zb)it(t,`[[picture]] holds 1 to ${Zb} pictures`);let r=e.flatMap((i,s)=>{let o=ds(i),a=`picture[${s}]`,c=Y.find((h)=>h.key===o.site);if(!c){if(n)return[];it(t,`${a}.site must be one of ${Y.map((h)=>h.key).join(", ")}`)}if(typeof o.id!=="number"||!Number.isSafeInteger(o.id)||o.id<=0)it(t,`${a}.id must be the post's number on ${c.name}`);let{size:u,position:l,opacity:f}=o;if(u!==void 0&&u!=="fill"&&!(Number.isInteger(u)&&Number(u)>=20&&Number(u)<=999))it(t,`${a}.size must be "fill" or a percentage from 20 to 999`);let d=l===void 0||Ut.includes(l);if(!d&&!n)it(t,`${a}.position must be one of ${Ut.join(", ")}`);if(f!==void 0&&!(typeof f==="number"&&f>=0&&f<=1))it(t,`${a}.opacity must be a number from 0 to 1`);return[{site:c.key,id:o.id,...u!==void 0?{size:u}:{},...l!==void 0&&d?{position:l}:{},...f!==void 0?{opacity:f}:{}}]});return r.length>0?r:void 0}function Of(t,e){try{return ai(e)}catch(n){it(t,`is not valid TOML — ${(n instanceof Error?n.message:String(n)).split(`
243
+ `)[0]}`)}}function XI(t){let n=Of(dn,Xb(tw(t,dn),"utf8")).group;if(!Array.isArray(n)||n.length===0)it(dn,"needs at least one [[group]] table");return n.map((r)=>{let i=ds(r);return{name:Io(dn,"group.name",i.name),native:i.native===void 0?void 0:Io(dn,"group.native",i.native),lead:Ro(dn,"group.lead",i.lead)}})}function t2(t,e){if(!Array.isArray(e)||e.length===0)it(t,'meta.native_names must be a list of names, like ["後藤ひとり"]');return e.map((n,r)=>{let i=Io(t,`meta.native_names[${r}]`,n);if(i.includes("|"))it(t,`meta.native_names[${r}] ${JSON.stringify(i)} contains |`);return i})}var Mf={"":["$schema","meta","colors","contrast","ghostty","picture"],meta:["name","base","group","ansi_source","booru","booru_sites","native_names","signature","order","role"],colors:["background","foreground","cursor","selection_background","ansi"],contrast:["waive","reason"],ghostty:["icon_ghost","icon_screen"],picture:["site","id","size","position","opacity"]};function nw(t,e){let n=Of(t,e),r=(i,s,o=[])=>s&&typeof s==="object"&&!Array.isArray(s)?Object.keys(s).filter((a)=>!o.includes(a)).map((a)=>i?`${i}.${a}`:a):[];return[...r("",n,Mf[""]),...["meta","colors","contrast","ghostty"].flatMap((i)=>r(i,n[i],Mf[i])),...(Array.isArray(n.picture)?n.picture:[]).flatMap((i,s)=>r(`picture[${s}]`,i,Mf.picture))]}function xf(t,e,n){let r=Of(t,e),i=ds(r.meta),s=ds(r.colors),o=ds(r.contrast),a=s.ansi;if(!Array.isArray(a)||a.length!==16)it(t,`colors.ansi must hold exactly 16 colors, got ${Array.isArray(a)?a.length:typeof a}`);let c=Qb(t,"meta.name",i.name);if(c!==n.name)it(t,`meta.name "${c}" does not match its file — it lives at ${n.name}`);let u=n.open===!0;for(let B of["order","role"])if(u&&i[B]!==void 0)it(t,`meta.${B} is for the official palettes — a market palette follows its base`);let l=i.role;if(l!==void 0&&l!=="default")it(t,`meta.role must be "default", got ${JSON.stringify(l)}`);let f=i.base===void 0?void 0:Qb(t,"meta.base",i.base);if(f!==void 0&&!u)it(t,"meta.base is for market palettes");let d=f===void 0?void 0:n.bases?.get(f),h=u&&i.group===void 0?d?.group??xo:Io(t,"meta.group",i.group),m=n.groups.get(h);if(!m&&!(u&&(h===xo||n.open)))it(t,`meta.group "${h}" has no [[group]] table in ${dn}`);let $=ci(t,"colors.background",s.background),g=ci(t,"colors.foreground",s.foreground),b=ci(t,"colors.cursor",s.cursor),y=ci(t,"colors.selection_background",s.selection_background),E=a.map((B,tt)=>ci(t,`colors.ansi[${tt}]`,B)),S=VI(t,i.signature,{background:$,foreground:g,cursor:b,selection:y,ansi:E}),x=i.booru===void 0?void 0:Ro(t,"meta.booru",i.booru);if(x!==void 0&&/[\s\p{Cc}]/u.test(x))it(t,`meta.booru must be a single booru tag, got ${JSON.stringify(x)}`);let R=ZI(t,i.booru_sites,x,n.foreign===!0),N=i.native_names===void 0?void 0:t2(t,i.native_names),F=Array.isArray(o.waive)?o.waive.map(String):[];if(F.length>0&&typeof o.reason!=="string")it(t,"contrast.waive needs a contrast.reason explaining why");let _=QI(t,r.picture,n.foreign===!0);return{name:c,...f?{base:f}:{},group:h,native:m?.native,...N?{nativeNames:N}:{},lead:!u&&m?.lead===c,order:u?d?.order??zI:Number(i.order),role:l,ansiSource:u&&i.ansi_source===void 0?f??"original":Io(t,"meta.ansi_source",i.ansi_source),...x?{booru:x}:{},...R?{booruSites:R}:{},background:$,foreground:g,cursor:b,selectionBackground:y,ansi:E,signature:S.colors,signatureSlots:S.names,ghostty:YI(t,r.ghostty,{background:$,cursor:b,selectionBackground:y}),waive:F,waiveReason:typeof o.reason==="string"?o.reason:void 0,..._?{pictures:_}:{}}}function rw(t){let e=XI(t),n=new Map(e.map((s)=>[s.name,s]));if(n.size!==e.length)it(dn,"group.name must be unique");let r=WI(t).filter((s)=>s.endsWith(".toml")&&!s.startsWith("_")).map((s)=>xf(s,Xb(tw(t,s),"utf8"),{name:KI(s,".toml"),groups:n})).sort((s,o)=>s.order-o.order);if(new Set(r.map((s)=>s.order)).size!==r.length)throw Error("themes: meta.order must be unique across all themes");for(let s of e){let o=r.filter((a)=>a.group===s.name);if(o.length===0)it(dn,`group "${s.name}" has no themes`);if(!o.some((a)=>a.name===s.lead))it(dn,`group "${s.name}" lead "${s.lead}" is not one of its themes`)}return r}function iw(t){return t.filter((e)=>e.role===void 0)}function ui(t){let e=(r,i)=>r<i?-1:r>i?1:0,n=(r)=>lt(r.name)?r.name:r.base??r.name;return[...t].sort((r,i)=>Number(lt(r.name)!==void 0)-Number(lt(i.name)!==void 0)||e(r.group.toLowerCase(),i.group.toLowerCase())||Number(r.catalog===void 0)-Number(i.catalog===void 0)||e((r.catalog??"").toLowerCase(),(i.catalog??"").toLowerCase())||e(n(r),n(i))||Number(r.base!==void 0)-Number(i.base!==void 0)||e(r.name,i.name))}var To={width:2560,height:1550},o2=1,a2=2560,c2=0.1,mw=0.99,u2=2,li={tall:1.15,reach:0.4,widest:0.95,headroom:0.04,margin:0.03,stands:12},l2=vt(Bt("#19161e","#9b86c8",0.2)),f2="shelf",uc="originals",d2="images.json",Rf=1;function h2(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 sw(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 pw(t,e){let r=sw((s)=>Vp({name:t.name,background:Bt(t.background,e,s),foreground:t.foreground,ansi:t.ansi,waive:t.waived??[]}).length===0),i=sw((s)=>vt(Bt(t.background,e,s))<=l2);return{cap:r,matched:i,opacity:Math.floor(Math.min(r,i)*100)/100}}function ow(t,e){let n=h2(t,e),{cap:r,matched:i,opacity:s}=pw(t,n),o=rt(t.background),a=Math.hypot(...rt(n).map((c,u)=>(c-(o[u]??0))*s));return{slot:e,color:n,cap:r,matched:i,opacity:s,reach:a}}function ps(t,e){return pw(t,e).opacity}function hn(t,e){let n=ow(t,"cursor");if(n.opacity>=c2)return n;return e.filter((r)=>r!=="cursor"&&r!=="background").map((r)=>ow(t,r)).reduce((r,i)=>i.reach>r.reach?i:r,n)}function m2(t){return ib(t)??{x:0,y:0,w:t.width,h:t.height}}function Ff(t,e){if(t<=0||e<=0)return To;let n=Math.min(1,To.width/Math.max(t,e));return{width:Math.round(t*n),height:Math.round(e*n)}}function gw(t,e,n,r){if(r<li.stands){let c=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:c,at:{x:0,y:0,w:e,h:n},focus:(c.y-t.y+c.h/2)/t.h}}let i=Math.max(li.tall*n,li.reach*e*t.h/t.w),s=i*t.w/t.h;if(s>li.widest*e)s=li.widest*e,i=s*t.h/t.w;let o=li.headroom*n,a=Math.min(1,(n-o)/i);return{crop:{x:t.x,y:t.y,w:t.w,h:t.h*a},at:{x:e*(1-li.margin)-s,y:o,w:s,h:i*a},focus:Math.min(1,(n/2-o)/i)}}function p2(t,e){return 0.299*(t[e]??0)+0.587*(t[e+1]??0)+0.114*(t[e+2]??0)}function g2(t,e){let n=new Uint32Array(256),r=Math.max(1,Math.floor(e.w*e.h/400000)),i=0;for(let o=0;o<e.w*e.h;o+=r){let a=((e.y+Math.floor(o/e.w))*t.width+e.x+o%e.w)*4;if((t.data[a+3]??0)>=128){let c=Math.round(p2(t.data,a));n[c]=(n[c]??0)+1,i++}}let s=0;for(let o=0;o<256&&i>0;o++)if(s+=n[o]??0,s>=i*mw)return Math.min(u2,Math.max(1,255/Math.max(1,o)));return 1}var If=Float64Array.from({length:256},(t,e)=>{let n=e/255;return n<=0.04045?n/12.92:((n+0.055)/1.055)**2.4});function b2(t,e,n){return`#${[t,e,n].map((r)=>Math.round(r).toString(16).padStart(2,"0")).join("")}`}function w2(t,e){let n=new Uint32Array(256),r=new Float64Array(768),i=Math.max(1,Math.floor(e.w*e.h/400000)),s=0;for(let a=0;a<e.w*e.h;a+=i){let c=((e.y+Math.floor(a/e.w))*t.width+e.x+a%e.w)*4;if((t.data[c+3]??0)>=128){let u=t.data[c]??0,l=t.data[c+1]??0,f=t.data[c+2]??0,d=Math.round(255*Math.sqrt(0.2126*(If[u]??0)+0.7152*(If[l]??0)+0.0722*(If[f]??0)));n[d]=(n[d]??0)+1,r[d*3]=(r[d*3]??0)+u,r[d*3+1]=(r[d*3+1]??0)+l,r[d*3+2]=(r[d*3+2]??0)+f,s++}}let o=0;for(let a=0;a<256&&s>0;a++)if(o+=n[a]??0,o>=s*mw){let c=Math.max(1,n[a]??1);return b2((r[a*3]??0)/c,(r[a*3+1]??0)/c,(r[a*3+2]??0)/c)}return"#ffffff"}function $2(t,e){let n=t.data,r=new Uint8Array(t.width*t.height);for(let i=0,s=0;i<r.length;i++,s+=4){let o=n[s+3];if(o===0)continue;let a=(0.299*n[s]+0.587*n[s+1]+0.114*n[s+2])*e;r[i]=(a>255?255:a)*o/255+0.5}return{width:t.width,height:t.height,data:r}}function bw(t,e,n){let r=Math.max(0,Math.round(t.at.x)),i=Math.max(0,Math.round(t.at.y)),s=Math.min(e,Math.round(t.at.x+t.at.w)),o=Math.min(n,Math.round(t.at.y+t.at.h));if(s<=r||o<=i)return;let a=t.crop.w/t.at.w,c=t.crop.h/t.at.h;return{x0:r,y0:i,x1:s,y1:o,box:{x:t.crop.x+(r-t.at.x)*a,y:t.crop.y+(i-t.at.y)*c,w:(s-r)*a,h:(o-i)*c}}}function ac(t,e,n,r){let i=new Float32Array(n*r),s=bw(e,n,r);if(s){let o=cb(t,s.box,s.x1-s.x0,s.y1-s.y0);for(let a=s.y0;a<s.y1;a++)i.set(o.data.subarray((a-s.y0)*(s.x1-s.x0),(a-s.y0+1)*(s.x1-s.x0)),a*n+s.x0)}return{width:n,height:r,data:i}}function Cf(t,e,n,r){let i=new Uint8Array(n*r*4),s=bw(e,n,r);if(s){let o=s.x1-s.x0,a=mo(t,s.box,o,s.y1-s.y0);for(let c=s.y0;c<s.y1;c++)i.set(a.data.subarray((c-s.y0)*o*4,(c-s.y0+1)*o*4),(c*n+s.x0)*4)}return{width:n,height:r,data:i}}function Nf(t,e){if(e<=0)return t;let{width:n,height:r}=t,i=[0,1,2,3].map(()=>({width:n,height:r,data:new Float32Array(n*r)}));for(let a=0;a<n*r;a++){let c=t.data[a*4+3]??0;for(let u=0;u<3;u++)i[u].data[a]=(t.data[a*4+u]??0)*c/255;i[3].data[a]=c}let s=i.map((a)=>po(a,e).data),o=new Uint8Array(n*r*4);for(let a=0;a<n*r;a++){let c=s[3]?.[a]??0;if(c<=0)continue;for(let u=0;u<3;u++)o[a*4+u]=Math.min(255,Math.max(0,Math.round((s[u]?.[a]??0)*255/c)));o[a*4+3]=Math.min(255,Math.round(c))}return{width:n,height:r,data:o}}function Lf(t){let e=m2(t),n,r;return{box:e,clear:Tn(t,e),get ink(){return n??=$2(t,g2(t,e)),n},image:t,get peak(){return r??=w2(t,e),r}}}function ww(t,e,n,r,i){let s=Lf(t),{box:o,clear:a,ink:c}=s,u=gw(o,e,n,a),l=Math.min(1,a2/Math.max(o.w,o.h)),f={x:0,y:0,w:Math.round(o.w*l),h:Math.round(o.h*l)},d=r*f.w*u.crop.w/(o.w*u.at.w);if(i==="original")return{coloring:i,figure:Nf(mo(t,o,f.w,f.h),d),fill:Nf(Cf(t,u,e,n),r),focus:u.focus,peak:s.peak};let h=ac(c,{crop:o,at:f,focus:u.focus},f.w,f.h),m=ac(c,u,e,n);return{coloring:i,figure:go(po(h,d)),fill:go(po(m,r)),focus:u.focus}}function k2(t,e,n,r){let i=rt(e),s=rt(n),o=new Uint8Array(t.width*t.height*4);for(let a=0;a<t.data.length;a++){let c=(t.data[a]??0)/255*r;for(let u=0;u<3;u++)o[a*4+u]=Math.round((i[u]??0)+((s[u]??0)-(i[u]??0))*c);o[a*4+3]=255}return{width:t.width,height:t.height,data:o}}function y2(t,e,n){let r=rt(e),i=new Uint8Array(t.width*t.height*4);for(let s=0;s<t.width*t.height;s++){let o=(t.data[s*4+3]??0)/255*n;for(let a=0;a<3;a++)i[s*4+a]=Math.round((r[a]??0)+((t.data[s*4+a]??0)-(r[a]??0))*o);i[s*4+3]=255}return{width:t.width,height:t.height,data:i}}function $w(t,e,n,r,i,s,o,a="tone"){let{box:c,clear:u,ink:l}=t,f=gw(c,r,i,u),d=Math.round(100*f.at.w/f.crop.w/Math.min(r/c.w,i/c.h)),h=o?.size??"fill",m=h==="fill"?f:{crop:c,at:ws(c.w,c.h,r,i,h,o?.at??5,!1,h>100?Math.round(f.focus*100):-1),focus:f.focus},$=a==="original"?ps(e,t.peak):n.opacity,g=o?.opacity??$;return{image:a==="original"?y2(Nf(Cf(t.image,m,r,i),s),e.background,g):k2(go(po(ac(l,m,r,i),s)),e.background,n.color,g),fill:d,opacity:$}}function q(t){return D(t,"ttheme","backgrounds")}function Tf(t){return D(t,d2)}function gr(t){try{return ms(t,"utf8")}catch{return}}function pr(t){try{return r2(t)}catch{return[]}}function kt(t){let e=gr(Tf(t));if(e===void 0)return v2(t);let n=JSON.parse(e);if(n.version!==Rf)throw Error(`${Tf(t)} is version ${n.version} — this ttheme reads version ${Rf}`);return n}function Ee(t){return t.coloring??"tone"}function jf(t){return{name:t.name,background:t.background,foreground:t.foreground,cursor:t.cursor,...t.selection?{selection:t.selection}:{},ansi:t.ansi,...t.waived?{waived:t.waived}:{}}}function br(t){return{hue:{color:t.backdrop.color,opacity:t.backdrop.opacity},colors:jf(t)}}function gs(t){return t.tone===void 0&&Ee(t)==="tone"}function aw(t){return(t.artist??[]).map((e)=>e.replace(/[\s,]+/g,"_")).join(",")}function kw(t,e){let n=e.pictures.findIndex((i)=>i.key===e.active),r=e.pictures[n];return[...r.artist?.length?[`# by ${aw(r)}`]:[],...r.from?[`# from ${r.from}`]:[],`# image ${r.key} ${n+1}/${e.pictures.length}`,...e.pictures.map((i)=>[`# picture ${i.key} ${i.stem} ${i.fill} ${i.opacity} ${i.artist?.length?aw(i):"-"}`,...i.from?[i.from]:[]].join(" ")),...e.pictures.filter((i)=>Ee(i)==="original").map((i)=>`# colors ${i.key} original`),`background-image = ${D(t,r.fill)}`,"background-image-fit = cover","background-image-position = top-right",`background-image-opacity = ${r.opacity}`,`config-file = ?${r.stem}.tune.conf`,`config-file = ?${r.stem}.off.conf`,""].join(`
244
+ `)}function yw(t){let e=q(t);for(let[n,r]of Object.entries(kt(e).palettes)){let i=D(e,`${Xt(n)}.conf`),s=kw(e,r);if(gr(i)!==s)P(i,s)}}function fi(t,e,n){P(Tf(t),`${JSON.stringify(e,null,2)}
245
+ `);for(let r of n){let i=e.palettes[r],s=D(t,`${Xt(r)}.conf`);if(i)P(s,kw(t,i));else hs(s,{force:!0})}}function vw(t,e){let n=q(t),r=kt(n),i=[];for(let[s,o]of e){let a=r.palettes[s];if(a&&!r.palettes[o])r.palettes[o]=a,delete r.palettes[s],i.push(s,o)}if(i.length>0)fi(n,r,i)}function Ew(t,e){return pr(t).filter((n)=>n.startsWith(`${e}.`)||n.startsWith(`${e}@`))}function _f(t,e){for(let n of Ew(t,e))hs(D(t,n),{force:!0})}function Sw(t,e){_f(t,e.stem);for(let n of[e.original,e.cut])if(n)hs(D(t,n),{force:!0})}function cw(t,e,n,r){let i=hw(/^background-image\s*=\s*(.*?)\s*$/m.exec(e??"")?.[1]??"");if(!i.startsWith(`${t}.`)||!/^\.[0-9a-f]{8}@fill-\d+\.png$/.test(i.slice(t.length)))return;let s=i.slice(0,i.indexOf("@")),o=r??/^# image (\S+)$/m.exec(e??"")?.[1]??`picture_${s.slice(t.length+1)}`,a=/^# from (.+)$/m.exec(e??"")?.[1],c=Number(/^background-image-opacity\s*=\s*(\S+)/m.exec(e??"")?.[1]??1),u=n.find((l)=>l.startsWith(`${t}-${o}.`));return{key:o,stem:s,fill:i,opacity:Number.isFinite(c)?c:1,...a?{from:a}:{},...u?{original:D(uc,u)}:{}}}function uw(t,e){if(Hf(t))dw(t,e)}function v2(t){let e={version:Rf,palettes:{}};if(!Hf(t))return e;let n=pr(D(t,uc)),r=pr(t).filter((s)=>s.endsWith(".conf")&&s!=="shown.conf"&&!/\.(tune|off)\.conf$/.test(s)).map((s)=>s.slice(0,-5)),i=D(t,f2);for(let s of new Set([...r,...pr(i)])){let o=[],a=cw(s,gr(D(t,`${s}.conf`)),n);if(a)uw(D(t,`${s}.tune.conf`),D(t,`${a.stem}.tune.conf`)),uw(D(t,`${s}.off.conf`),D(t,`${a.stem}.off.conf`)),o.push(a);for(let c of pr(D(i,s))){let u=D(i,s,c),l=cw(s,gr(D(u,".conf")),n,c);if(!l)continue;for(let f of pr(u)){let d=f===".tune.conf"||f===".off.conf"?`${l.stem}${f}`:`${s}${f}`;if(f!==".conf")dw(D(u,f),D(t,d))}hs(u,{recursive:!0}),o.push(l)}if(pr(D(i,s)).length===0)hs(D(i,s),{recursive:!0,force:!0});if(o.length>0)o.sort((c,u)=>c.key<u.key?-1:c.key>u.key?1:0),e.palettes[s]={active:(a??o[0]).key,pictures:o}}if(pr(i).length===0)hs(i,{recursive:!0,force:!0});return fi(t,e,Object.keys(e.palettes)),e}function lw(t,e,n){return e.startsWith("~/")?D(n,e.slice(2)):s2(e)?e:D(t,e)}function Se(t,e,n){let r=new Map,i=(a,c)=>{let u=gr(a);if(u===void 0)return!1;for(let l of u.split(`
246
+ `)){let f=/^([a-z-]+)\s*=\s*(.*?)\s*$/.exec(l);if(f?.[1]==="config-file"&&c<4)i(lw(t,f[2].replace(/^\?/,""),n),c+1);else if(f&&/^background-image(?:-fit|-opacity|-position)?$/.test(f[1]))r.set(f[1],f[2])}return!0};if(!i(D(t,`${Xt(e)}.conf`),0))return;let s=r.get("background-image")??"";if(s==="")return;let o=Number(r.get("background-image-opacity")??1);return{image:lw(t,s,n),opacity:Number.isFinite(o)?o:1,cover:r.get("background-image-fit")==="cover",position:r.get("background-image-position")??"center"}}function te(t){return`${t.site}_${t.id}`}function lc(t,e,n){let r=q(t),i=kt(r),s=i.palettes[e];if(!s)throw Error(`${e} has no image`);let o=s.pictures.findIndex((u)=>u.key===(n??s.active));if(o===-1)throw Error(`${e} has no picture ${n}`);let[a]=s.pictures.splice(o,1);Sw(r,a);let c=s.pictures[o%Math.max(s.pictures.length,1)];if(!c)delete i.palettes[e];else if(a.key===s.active)s.active=c.key;return fi(r,i,[e]),{key:a.key,left:s.pictures.length}}function Mw(t,e,n,r){let i=n.coloring==="original"?ln(n.figure):ri(n.figure,r),s=n.coloring==="original"?ln(n.fill):ri(n.fill,r),o=`${Xt(t)}.${fw("sha1").update(e).update(i).update(s).digest("hex").slice(0,8)}`,a=`${o}@fill-${Math.round(n.focus*100)}.png`;return{stem:o,fill:a,files:[[`${o}.png`,i],[a,s]]}}function Ow(t,e,n,r){return n==="original"&&r?{coloring:"original",opacity:ps(t,r),peak:r}:{coloring:"tone",opacity:e.opacity,tone:e.color}}function Af(t,e){return D(uc,`${Xt(t)}-${e}`)}function Gf(t,e){return e.map(([n,r])=>{let i=D(t,n);return P(i,r),i})}function fc(t,e,n,r,i,s,o,a="tone"){let c=q(t),u=e.name,l=te(i),f=kt(c),d=f.palettes[u]??{active:l,pictures:[]},h=Ff(s.width,s.height),m=ww(r,h.width,h.height,o,a),$=Mw(u,l,m,n.color),g=Af(u,l),b={key:l,stem:$.stem,fill:$.fill,...Ow(e,n,m.coloring,m.coloring==="original"?m.peak:void 0),blur:o,window:h,...i.from?{from:i.from}:{},...i.artist?.length?{artist:i.artist}:{},...i.source?{source:i.source}:{},original:`${g}.${i.ext}`,...i.cut?{cut:`${g}.cut.png`}:{}},y=d.pictures.find((S)=>S.key===l);if(y)Sw(c,y);n2(D(c,uc),{recursive:!0});let E=Gf(c,[...$.files,[b.original,i.bytes],...b.cut?[[b.cut,lf(ni(r))]]:[]]);return d.pictures=y?d.pictures.map((S)=>S===y?b:S):[...d.pictures,b],d.active=l,f.palettes[u]=d,fi(c,f,[u]),[...E,D(c,`${Xt(u)}.conf`)]}function bs(t,e,n){let r=q(t),i=kt(r),s=i.palettes[e],o=s?s.pictures.findIndex((a)=>a.key===n):-1;if(!s||o===-1)throw Error(`${e} has no picture ${n}`);if(s.active!==n)s.active=n,fi(r,i,[e]);return{at:o+1,of:s.pictures.length}}function ce(t,e){let n=kt(q(t)).palettes[e];if(!n)return[];return[...n.pictures.filter((i)=>i.key===n.active),...n.pictures.filter((i)=>i.key!==n.active)]}var Pf="top-right";function ws(t,e,n,r,i,s,o,a=-1){let c=Math.trunc,u=(s-1)%3,l=c((s-1)/3),f=n*e>=r*t!==!o,d=f?c(i*n/100):c(i*r*t/(100*e)),h=f?c(i*n*e/(100*t)):c(i*r/100),m=c(u*(n-d)/2),$=c(l*(r-h)/2);if(a>=0){if(d>n)m=c((n-d)/2);if(h>r)$=Math.max(r-h,Math.min(0,c(r/2)-c(a*h/100)))}return{x:m,y:$,w:d,h}}function Bf(t,e){let n=gr(D(t,`${e.stem}.tune.conf`));if(n===void 0)return{};let r=(u)=>new RegExp(`^${u}\\s*=\\s*(.*?)\\s*$`,"m").exec(n)?.[1]??"",i=hw(r("background-image")),s=/@(\d+)-/.exec(i)?.[1],o=/@fill-\d+\.png$/.test(i)?"fill":s?Number(s):r("background-image-fit")==="cover"?"fill":100,a=r("background-image-position").replace("center-center","center")||"center",c=Number(r("background-image-opacity")||1);return{...o!=="fill"?{size:o}:{},...a!==Pf?{position:a}:{},...Number.isFinite(c)&&c!==e.opacity?{opacity:c}:{}}}function Ao(t,e,n,r,i){let s=n.size??"fill",o=n.position??Pf,a=n.opacity??e.opacity;if(s==="fill"&&o===Pf&&a===e.opacity)return;let c=Ut.indexOf(o)+1,u=D(t,`${e.stem}.png`),l=D(t,e.fill),f=!0,d=typeof s==="number"&&(s>100||!r&&o!=="center");if(s===100&&!d)l=u,f=!1;else if(typeof s==="number"){if(gs(e))throw Error(`${e.stem} was drawn before pictures kept their tone — init draws it again`);let m=Ht(new Uint8Array(ms(u))),{width:$,height:g}=d?To:m,b=d?Number(/@fill-(\d+)\.png$/.exec(e.fill)?.[1]??50):-1,y=ws(m.width,m.height,$,g,s,c,!1,b);l=D(t,`${e.stem}@${s}-${o}${d?`-${$}x${g}`:""}.png`);let S={crop:{x:0,y:0,w:m.width,h:m.height},at:y,focus:b};P(l,e.tone?ri(go(ac(ni(m),S,$,g)),e.tone):ln(Cf(m,S,$,g))),f=d}let h=D(t,`${e.stem}.tune.conf`);return P(h,[`background-image = ${l.startsWith(`${i}/`)?`~${l.slice(i.length)}`:l}`,`background-image-fit = ${f?"cover":"contain"}`,`background-image-position = ${o}`,`background-image-opacity = ${a}`,""].join(`
247
+ `)),h}function xw(t){let e=new Map;for(let[n,r]of Object.entries(kt(q(t)).palettes)){let[,i,s]=/^([a-z.]+)_(\d+)$/.exec(r.active)??[];if(i&&s)e.set(n,{site:i,id:Number(s)})}return e}function Iw(t){try{let e=un(new Uint8Array(ms(t)));return e?{width:e.width,height:e.height}:void 0}catch{return}}function Rw(t,e,n,r,i,s,o){let a=[n.original,n.cut].map((c)=>{if(!c)return"";try{let{size:u,mtimeMs:l}=i2(D(t,c));return`${c}:${u}:${l}`}catch{return}});if(!n.original||a.includes(void 0))return;return Ub([o2,Xt(e),n.key,...a,r.width,r.height,i,s,s==="tone"?o:""])}function E2(t,e,n){if(!n.window||n.blur===void 0)return;let r=Rw(t,e,n,n.window,n.blur,Ee(n),n.tone??"");if(!r||Wb(r))return;try{yf(r,{stem:n.stem,fill:n.fill,...n.peak?{peak:n.peak}:{},figure:ms(D(t,`${n.stem}.png`)),picture:ms(D(t,n.fill))})}catch{}}function Nw(t,e,n,r,i,s,o,a,c){let u=c?void 0:Rw(t,e,n,r,o,a,s.hue.color),l=u?Kb(u):void 0;if(l)return{made:{stem:l.stem,fill:l.fill,files:[[`${l.stem}.png`,l.figure],[l.fill,l.picture]]},peak:l.peak,image:void 0};let f=i();if(!f)return null;let d=ww(f,r.width,r.height,o,a),h=Mw(e,n.key,d,s.hue.color),m=d.coloring==="original"?d.peak:void 0;if(u)yf(u,{stem:h.stem,fill:h.fill,...m?{peak:m}:{},figure:h.files[0]?.[1],picture:h.files[1]?.[1]});return{made:h,peak:m,image:f}}function Po(t,e,n,r,i,s,o,a,c,u=Ee(n)){let l=q(t),f=n.window??Iw(D(l,n.fill))??To,d=Nw(l,e,n,f,r,i,s,u,c);if(!d)return null;let{made:h,peak:m,image:$}=d,g={...n,stem:h.stem,fill:h.fill,...Ow(i.colors,i.hue,u,m),blur:s,window:f,...c?{cut:`${Af(e,n.key)}.cut.png`}:{}};if(u==="original")delete g.tone;else delete g.peak;if(c&&$)P(D(l,`${Af(e,n.key)}.cut.png`),lf(ni($)));if(h.stem===n.stem)return g;if(Ee(n)!==u)E2(l,e,n);Gf(l,h.files);let b=Bf(l,n);Ao(l,g,Ee(n)===u?b:{...b,opacity:void 0},o,a);let y=D(l,`${n.stem}.off.conf`);if(Hf(y))e2(y,D(l,`${g.stem}.off.conf`));return g}function Tw(t,e,n,r,i,s,o){let a=q(t),c=n.window??Iw(D(a,n.fill))??To;return Nw(a,e,n,c,r,i,s,o,!1)!==null}function Uf(t,e){let n=q(t),r=kt(n),i=new Set,s=[];for(let{name:o,picture:a}of e){let c=r.palettes[o],u=c?.pictures.findIndex((f)=>f.key===a.key)??-1,l=c?.pictures[u];if(!c||!l)continue;if(c.pictures[u]=a,i.add(o),l.stem!==a.stem)s.push(l.stem)}if(i.size===0)return;fi(n,r,[...i]);for(let o of s)_f(n,o)}function Aw(t,e,n){return t.replace(/^background-image-opacity = (\S+)$/m,(r,i)=>Number(i)===e?`background-image-opacity = ${n}`:r)}function Pw(t,e,n){let r=D(t,`${e.stem}.tune.conf`),i=gr(r);if(i!==void 0)P(r,Aw(i,e.opacity,n));return{...e,opacity:n}}function S2(t,e,n,r){if(n.tone===r.color)return Pw(t,n,r.opacity);let i=Ew(t,n.stem).filter((a)=>a.endsWith(".png")).map((a)=>{let c=new Uint8Array(ms(D(t,a)));return[a,za(c,r.color)??ri(ni(Ht(c)),r.color)]}),s=(a)=>i.find(([c])=>c===a)?.[1]??new Uint8Array,o=`${Xt(e)}.${fw("sha1").update(n.key).update(s(`${n.stem}.png`)).update(s(n.fill)).digest("hex").slice(0,8)}`;Gf(t,i.map(([a,c])=>[o+a.slice(n.stem.length),c]));for(let a of["tune","off"]){let c=gr(D(t,`${n.stem}.${a}.conf`));if(c!==void 0)P(D(t,`${o}.${a}.conf`),Aw(c.split(n.stem).join(o),n.opacity,r.opacity))}return{...n,stem:o,fill:o+n.fill.slice(n.stem.length),opacity:r.opacity,tone:r.color}}function cc(t,e){if(Ee(t)==="original")return t.peak!==void 0&&ps(e.colors,t.peak)!==t.opacity;return t.tone!==void 0&&(t.tone!==e.hue.color||t.opacity!==e.hue.opacity)}function Hw(t,e){let n=q(t),r=kt(n),i=[],s=[];for(let[o,a]of Object.entries(r.palettes)){let c=e.get(o);if(!c||!a.pictures.some((u)=>cc(u,c)))continue;a.pictures=a.pictures.map((u)=>{if(!cc(u,c))return u;let l=Ee(u)==="original"?Pw(n,u,ps(c.colors,u.peak)):S2(n,o,u,c.hue);if(l.stem!==u.stem)s.push(u.stem);return l}),i.push(o)}if(i.length>0){fi(n,r,i);for(let o of s)_f(n,o)}return i}var Wf=1,Kf="npx @kecan0406/ttheme@latest init";class dc extends Error{}function Fw(t,e,n){if(typeof t!=="number"||!Number.isInteger(t)||t<1)throw Error(`${e} schema is not a whole number from 1`);if(t>n)throw new dc(`${e} is schema ${t}, newer than the schema ${n} this ttheme reads — \`${Kf}\` updates it`)}function mn(t){let{slot:e,color:n,opacity:r}=hn({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,...t.base?{base:t.base}:{},group:t.group,...t.native?{native:t.native}:{},...t.nativeNames?{nativeNames:t.nativeNames}:{},...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:on(t),...t.waive.length>0?{waived:t.waive}:{},backdrop:{slot:e,color:n,opacity:r},...t.pictures?{pictures:t.pictures}:{}}}function De(t){return{name:t.name,...t.base?{base:t.base}:{},group:t.group,...t.native?{native:t.native}:{},...t.nativeNames?{nativeNames:t.nativeNames}:{},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??[],...t.pictures?{pictures:t.pictures}:{}}}var M2=6,O2=["ansi1","ansi2","ansi4","ansi3","ansi5","ansi6"];function hc(t){let e=(s)=>s.startsWith("ansi")?t.ansi[Number(s.slice(4))]:s==="foreground"?t.foreground:s==="cursor"?t.cursor:s==="selection"?t.selection:void 0,n=(s)=>s.startsWith("ansi")?`ansi${Number(s.slice(4))%8}`:s,r=new Set,i=[];for(let s of["foreground",...t.signatureSlots,...O2]){let o=e(s);if(i.length===M2||!o||r.has(n(s))||i.includes(o))continue;r.add(n(s)),i.push(o)}return i}function Mt(t){return t.filter((e)=>e.default!==!0)}function mc(){return{schema:Wf,version:It.version,gate:we,palettes:[]}}import{existsSync as x2,readFileSync as gc,statSync as Cw}from"node:fs";import{homedir as vs}from"node:os";import{join as ks}from"node:path";var I2=["core","kowiki","unlicensed"],R2=["ko","ja","en","zh","other"],_w=["keys","keyAt","ownAt","owners","cards","cardAt","ranks","tags","tagAt","tagCard"],Gw="TTNI";function wr(t=vs()){return ks(process.env.XDG_CACHE_HOME??ks(t,".cache"),"ttheme","aninames")}var N2=/[ァ-ヶ]/g,T2=/[\s\p{P}\p{S}]+/gu;function ys(t){return t.normalize("NFKC").toLowerCase().replace(N2,(e)=>String.fromCharCode(e.charCodeAt(0)-96)).replace(T2,"")}function di(t,e){let n=ys(e);if(n===""){let r=e.toLowerCase();return t.some((i)=>i.toLowerCase().includes(r))}return t.some((r)=>ys(r).includes(n))}function Yf(t){return t.length>=2||/[\p{Script=Han}\p{Script=Hangul}\p{Script=Hiragana}]/u.test(t)}function Bw(t){let e=wr(t);return I2.map((n)=>ks(e,`ttheme-${n}.json`)).filter((n)=>x2(n))}var A2=6;function Uw(t){return[`format ${A2}`,...t.map((e)=>`${e}:${Cw(e).size}:${Cw(e).mtimeMs}`)].join("|")}function P2(t){try{return JSON.parse(gc(t,"utf8"))}catch{return{}}}function H2(t){let e=new Map;for(let i of t)for(let[s,o]of Object.entries(P2(i))){let a=e.get(s)??{tags:new Set,names:[],japanese:[],generated:[],rank:0,weight:0,posts:0};a.posts=Math.max(a.posts,o.posts??0),a.generated.push(...o.generated??[]),a.japanese.push(...o.names?.ja??[]),a.tag??=o.tag;for(let c of o.danbooru??[])a.tags.add(c);for(let c of R2)a.names.push(...o.names?.[c]??[]);if(o.rank!==void 0){let c=o.weight??1;a.rank=(a.rank*a.weight+o.rank*c)/(a.weight+c),a.weight+=c}e.set(s,a)}let n=[],r=Math.log1p([...e.values()].reduce((i,s)=>Math.max(i,s.posts),1));for(let i of e.values()){if(i.tags.size===0)continue;let s=[...i.tags];n.push({tag:i.tag&&i.tags.has(i.tag)?i.tag:s[0],tags:s,names:[...new Set(i.names)],japanese:[...new Set(i.japanese)],generated:[...new Set(i.generated)],rank:i.posts>0?Math.log1p(i.posts)/r:i.rank})}return n}function Ho(t,e){let n=new t(e.length);return n.set(e),n}function zf(t){let e=[0];for(let n of t)e.push(e.at(-1)+n.length);return{bytes:Buffer.concat(t),at:Ho(Uint32Array,e)}}function F2(t,e){let n=H2(t),r=new Map,i=(E,S,x)=>{let R=r.get(E),N=S*4+x;if(!R)r.set(E,[N]);else if(R.at(-1)>>>2!==S)R.push(N);else if(R.at(-1)<N)R[R.length-1]=N};n.forEach((E,S)=>{let x=[...E.names,...E.tags.map((R)=>R.replaceAll("_"," "))];for(let[R,N]of[[x,1],[E.generated,0]])for(let F of R){let _=ys(F);if(_&&Yf(_))i(_,S,2|N);let B=F.split(/[\s・·_]+/);if(B.length<2)continue;for(let tt of B){let W=ys(tt);if(W&&Yf(W))i(W,S,N)}}});let s=[...r.keys()].sort(),o=[0],a=[];for(let E of s){for(let S of r.get(E)??[])a.push(S);o.push(a.length)}let c=n.flatMap((E,S)=>E.tags.map((x)=>[x,S])).sort(([E],[S])=>E<S?-1:E>S?1:0),u=zf(s.map((E)=>Buffer.from(E))),l=zf(n.map((E)=>Buffer.from(JSON.stringify([E.tag,E.tags,E.names,E.japanese,E.generated])))),f=zf(c.map(([E])=>Buffer.from(E))),d={keys:u.bytes,keyAt:u.at,ownAt:Ho(Uint32Array,o),owners:Ho(Uint32Array,a),cards:l.bytes,cardAt:l.at,ranks:Ho(Float32Array,n.map((E)=>E.rank)),tags:f.bytes,tagAt:f.at,tagCard:Ho(Uint32Array,c.map(([,E])=>E))},h=_w.map((E)=>{let S=d[E];return Buffer.from(S.buffer,S.byteOffset,S.byteLength)}),m=0,$=h.map((E)=>{let S=[m,E.length];return m+=Math.ceil(E.length/4)*4,S}),g=Buffer.from(JSON.stringify({stamp:e,sections:$})),b=Math.ceil((8+g.length)/4)*4,y=Buffer.alloc(b+m);y.write(Gw,0,"latin1"),y.writeUInt32LE(g.length,4),g.copy(y,8);for(let[E,S]of h.entries())S.copy(y,b+($[E]?.[0]??0));return y}function Lw(t,e,n,r){let i=e.byteOffset+n;if(i%4===0)return new t(e.buffer,i,r/4);return new t(e.buffer.slice(i,i+r),0,r/4)}function jw(t,e){if(t.toString("latin1",0,4)!==Gw)return;let n=t.readUInt32LE(4),r=JSON.parse(t.toString("utf8",8,8+n));if(r.stamp!==e)return;let i=Math.ceil((8+n)/4)*4,s=(c)=>{let[u,l]=r.sections[_w.indexOf(c)];return[i+u,l]},o=(c)=>{let[u,l]=s(c);return t.subarray(u,u+l)},a=(c)=>Lw(Uint32Array,t,...s(c));return{keys:o("keys"),keyAt:a("keyAt"),ownAt:a("ownAt"),owners:a("owners"),cards:o("cards"),cardAt:a("cardAt"),ranks:Lw(Float32Array,t,...s("ranks")),tags:o("tags"),tagAt:a("tagAt"),tagCard:a("tagCard")}}var Df;function Jf(t){try{let e=Bw(t);if(e.length===0)return;let n=Uw(e);if(Df?.stamp===n)return Df.index;let r=ks(wr(t),"index.bin"),i;try{i=jw(gc(r),n)}catch{}if(!i){let s=F2(e,n);try{P(r,s)}catch{}i=jw(s,n)}if(i)Df={stamp:n,index:i};return i}catch{return}}function Ww(t,e){let[n,r,i,s,o]=JSON.parse(t.cards.toString("utf8",t.cardAt[e],t.cardAt[e+1]));return{tag:n,tags:r,names:i,japanese:s,generated:o,rank:t.ranks[e]??0}}function Kw(t,e,n,r){let i=0,s=n;while(i<s){let o=i+s>>1;if(t.toString("utf8",e[o],e[o+1])<r)i=o+1;else s=o}return i}function zw(t,e){let n=Buffer.from(e),r=t.tagCard.length,i=Kw(t.tags,t.tagAt,r,e);if(i>=r||t.tags.compare(n,0,n.length,t.tagAt[i],t.tagAt[i+1])!==0)return;return t.tagCard[i]}var qf=/\s*[((][^()()]*[))]$/u,pc={ko:4,en:4,ja:5,zh:3};function C2(t){if(!t)return[];let e=/\p{Script=Hangul}/u,n=/^[\p{Script=Latin}\p{N}\s.'’-]+$/u,r=new Set([...t.names,...t.generated].filter((f)=>!qf.test(f))),i=(f)=>!qf.test(f)||!r.has(f.replace(qf,"")),s=t.names.filter(i),o=s.filter((f)=>e.test(f)),a=[...o,...t.generated.slice(0,o.length>0?0:2)],c=s.filter((f)=>n.test(f)),u=t.japanese.filter(i),l=s.filter((f)=>!e.test(f)&&!n.test(f)&&!u.includes(f));return[...new Set([...a.slice(0,pc.ko),...c.slice(0,pc.en),...u.slice(0,pc.ja),...l.slice(0,pc.zh)])]}var $s;function bc(t,e=vs()){if(!t)return[];if(!$s)try{$s=JSON.parse(gc(ks(wr(e),"aliases.json"),"utf8")).tags}catch{$s={}}return $s[t]??[]}function Vf(t,e=vs()){try{return L2(t,e)}catch{return new Map}}function L2(t,e){let n=new Map,r=Bw(e);if(r.length===0||t.length===0)return n;let i=Uw(r),s=ks(wr(e),"aliases.json"),o;try{o=JSON.parse(gc(s,"utf8"))}catch{}if(o?.stamp===i&&t.every((l)=>(l in o.tags))){$s=o.tags;for(let l of t)n.set(l,o.tags[l]??[]);return n}let a=Jf(e);if(!a)return n;let c=new Set([...t,...o?.stamp===i?Object.keys(o.tags):[]]),u={};for(let l of c){let f=zw(a,l);u[l]=f===void 0?[]:C2(Ww(a,f))}try{P(s,`${JSON.stringify({stamp:i,tags:u})}
248
+ `)}catch{}$s=u;for(let l of t)n.set(l,u[l]??[]);return n}function hi(t,e=vs()){Vf(t.flatMap((n)=>n.booru?[n.booru]:[]),e)}var j2=0.25,_2=0.1;function Dw(t,e,n=new Set,r=vs()){let i=ys(t);if(!i||!Yf(i))return[];let s=Jf(r);if(!s)return[];let o=Buffer.from(i),a=s.ownAt.length-1,c=new Set([...n].flatMap((l)=>zw(s,l)??[])),u=new Map;for(let l=Kw(s.keys,s.keyAt,a,i);l<a;l++){let f=s.keyAt[l],d=s.keyAt[l+1]-f;if(d<o.length||s.keys.compare(o,0,o.length,f,f+o.length)!==0)break;let h=d===o.length;for(let m=s.ownAt[l];m<s.ownAt[l+1];m++){let $=s.owners[m],g=$>>>2,b=h?Math.max(0,($&2?2:1)-($&1?0:1)):0,y=(s.ranks[g]??0)+j2*b+(c.has(g)?_2:0);if((u.get(g)?.score??-1)<y)u.set(g,{score:y,key:l})}}return[...u].sort(([,l],[,f])=>f.score-l.score).slice(0,e).map(([l,{key:f}])=>{let d=Ww(s,l),h=s.keys.toString("utf8",s.keyAt[f],s.keyAt[f+1]);return{tag:d.tags.find((m)=>n.has(m))??d.tag,name:[...d.names,...d.generated].find((m)=>ys(m).includes(h))??d.tag.replaceAll("_"," ")}})}function wc(t=vs()){Jf(t)}import{existsSync as J2,readdirSync as n0,readFileSync as V2}from"node:fs";import{basename as r0,join as kc}from"node:path";import{existsSync as G2,readFileSync as qw}from"node:fs";import{homedir as Yw}from"node:os";import{isAbsolute as Jw,join as mi,resolve as B2}from"node:path";var z="official",Ft="ttheme-market.toml",U2="https://www.schemastore.org/ttheme-market.json",Vw="https://www.schemastore.org/ttheme-palette.json",Zw=["$schema","name","description","owner","renames","force_remove_deleted_palettes","metadata"],Qw=["name","email","url"],Es="ttheme-market",W2=/^[a-z0-9](?:[a-z0-9]|-(?=[a-z0-9])){0,38}$/i,K2=/^[\w.-]{1,100}$/,z2=/^\w[\w.+/-]{0,199}$/;function Hn(t){return mi(t,"ttheme","installed.json")}function Ct(t){return t??[z]}function Ss(t){try{let{markets:e}=JSON.parse(qw(Hn(t),"utf8"));return Ct(Array.isArray(e)?e.filter((n)=>typeof n==="string"):void 0)}catch{return[z]}}function ct(t){return Jw(t)}function ee(t){return t!==z&&!ct(t)}function $r(t){let e=t.indexOf("#");return ee(t)&&e>=0?t.slice(0,e):t}function Fo(t){let e=t.indexOf("#");return ee(t)&&e>=0?t.slice(e+1):void 0}function Ms(t,e){return $r(t)===$r(e)}function kr(t,e){return!ct(t)&&(e?.[t]??t===z)}function D2(t){return!z2.test(t)||t.includes("..")||t.includes("//")||/(?:[./]|\.lock)$/.test(t)}function yr(t,e=process.cwd()){if(t===z)return z;if(t==="~"||t.startsWith("~/"))return mi(Yw(),t.slice(1));if(t.startsWith(".")||Jw(t))return B2(e,t);let[n="",r,...i]=t.split("#"),[s,o,...a]=n.replace(/^https:\/\/github\.com\//,"").replace(/\.git$/,"").split("/");if(!s||!W2.test(s)||!o||!K2.test(o)||a.length>0||i.length>0||r!==void 0&&D2(r))throw Error(`${t} is not a market — give a repository (alice/ttheme-dust, #v1 pins a tag or branch) or a path (./my-market)`);return`${s.toLowerCase()}/${o}${r===void 0?"":`#${r}`}`}function Xw(t){let e=Fo(t)?.split("/").map(encodeURIComponent).join("/")??"HEAD";return`https://codeload.github.com/${$r(t)}/tar.gz/${e}`}function t0(t){return t.slice(0,t.indexOf("/"))}function Xf(t){return mi(t,"ttheme","markets")}function He(t,e){return mi(Xf(t),`${$r(e).replace("/","--")}.json`)}function $c(t){return mi(t,"ttheme","market")}function td(t,e){return mi($c(t),e)}function q2(t,e){if(typeof t!=="string"||typeof e!=="string")return'needs a "name" and an [owner] table whose name is the GitHub handle';return ve(`${t}@${e}/x`)}function ne({owner:t,name:e}){return`${t}@${e}`}function e0({owner:t,name:e}){return`"$schema" = ${JSON.stringify(U2)}
249
+ name = ${JSON.stringify(e)}
250
+
251
+ [owner]
252
+ name = ${JSON.stringify(t)}
253
+ `}function Qf(t,e,n,r){if(typeof n!=="string"||n===""||/\p{Cc}/u.test(n)||n.length>200)throw Error(`${t}: ${e} must be ${r}`);return n}function Zf(t,e,n){return n===void 0?void 0:Qf(t,e,n,"one line of text, 200 characters at most")}function Y2(t,e){if(e===void 0)return{};if(!e||typeof e!=="object"||Array.isArray(e))throw Error(`${t}: [renames] maps an old palette name to its new name, or to false once it is gone`);let n={};for(let[r,i]of Object.entries(e)){if(ve(r)||i!==!1&&(typeof i!=="string"||ve(i)))throw Error(`${t}: renames.${r} must map a palette name to a palette name, or to false`);n[r]=i}return n}function ed(t,e){let n;try{n=ai(t)}catch(d){throw Error(`${e} is not valid TOML — ${d.message.split(`
254
+ `)[0]}`)}let r=Qf(e,"name",n.name,"the market name"),i=n.owner;if(!i||typeof i!=="object"||Array.isArray(i))throw Error(`${e}: owner is a table — [owner] with name = "<GitHub handle>"`);let s=i,o={name:Qf(e,"owner.name",s.name,"the GitHub handle")},a=Zf(e,"owner.email",s.email),c=Zf(e,"owner.url",s.url),u=Zf(e,"description",n.description),l=n.force_remove_deleted_palettes;if(l!==void 0&&typeof l!=="boolean")throw Error(`${e}: force_remove_deleted_palettes must be true or false`);let f=q2(o.name,r);if(f)throw Error(`${e} ${f}`);return{owner:o.name,name:r,about:{...o,...a?{email:a}:{},...c?{url:c}:{}},...u?{description:u}:{},renames:Y2(e,n.renames),forceRemove:l===!0}}function Fe(t){let e=mi(t,Ft);if(!G2(e))throw Error(`${t} has no ${Ft} — \`ttheme market init ${t}\` makes one`);return ed(qw(e,"utf8"),e)}function Z(t){if(t===z)return"the ttheme catalog";if(!ct(t))return`github.com/${t}`;let e=Yw();return t===e||t.startsWith(`${e}/`)?`~${t.slice(e.length)}`:t}var Fn="tt1:",i0=["background","foreground","cursor","selection",...Array.from({length:16},(t,e)=>`ansi${e}`)];function pi(t,e=!0){return Ss(t).filter(ct).flatMap((n)=>{try{let r=Fe(n);return[{dir:n,...r,id:ne(r)}]}catch(r){if(e)process.stderr.write(`ttheme: skipping the market at ${n} — ${r.message}
255
+ `);return[]}})}function yc(t){return kc(t,"palettes")}function nd(t,e){return t<e?-1:t>e?1:0}function rd(t,e){let n=[],r=[];for(let i of t){let[s,o,a,...c]=i.split("/");if(s!=="palettes"||!o||o.startsWith(".")||c.length>0)continue;if(a===void 0){if(o.endsWith(".toml"))r.push({file:{path:e(i),slug:r0(o,".toml")},name:o})}else if(a.endsWith(".toml"))n.push({file:{path:e(i),slug:r0(a,".toml"),catalog:o},name:a})}return n.sort((i,s)=>nd(i.file.catalog??"",s.file.catalog??"")||nd(i.name,s.name)),r.sort((i,s)=>nd(i.name,s.name)),[...n,...r].map(({file:i})=>i)}function Os(t){let e=yc(t);if(!J2(e))return[];let n=n0(e,{withFileTypes:!0}).flatMap((r)=>r.isDirectory()?n0(kc(e,r.name)).map((i)=>`palettes/${r.name}/${i}`):[`palettes/${r.name}`]);return rd(n,(r)=>kc(t,r))}function Z2(t,e){let n=e.get(t.slug);if(n)return`${t.slug} is also ${n.catalog?`in ${n.catalog}`:"outside a catalog"} — a palette name is used once in a market`;let r=t.catalog===void 0?void 0:No(t.catalog);return r?`the catalog folder ${JSON.stringify(t.catalog)} ${r}`:void 0}function id(t,e){let n=lt(e);if(!n)throw Error(`${e} is an official palette — yours are named <you>@<market>/<palette>`);let r=pi(t,!1).find((s)=>s.id===n);if(!r)throw Error(`${n} is not a local market — \`ttheme market add <dir>\` adds the folder that holds it`);let i=ae(e);return Os(r.dir).find((s)=>s.slug===i)?.path??kc(yc(r.dir),`${i}.toml`)}function Q2(t,e,n=!1){let r=new Map;for(let s of e)if(s.group!==xo&&!r.has(s.group)){let o=e.find((a)=>a.group===s.group&&a.lead)?.name??"";r.set(s.group,{name:s.group,...s.native?{native:s.native}:{},lead:o})}let i=new Map(e.filter((s)=>!s.default&&!lt(s.name)).map((s)=>[s.name,{group:s.group,order:s.order}]));return{name:t,groups:r,bases:i,open:!0,...n?{foreign:!0}:{}}}function Cn(t,e,n,r=!1){let i=ae(t),{native:s,...o}=xf(`${i}.toml`,e,Q2(i,n,r)),a=lt(t);return{...o,name:t,...a?{group:a,lead:!1}:{}}}function re(t){return t?(e,n)=>process.stderr.write(`ttheme: skipping ${e} — ${n}
256
+ `):()=>{}}function sd(t,e,n,r,i,s=!1){let o=new Map;return t.flatMap((a)=>{try{let c=Z2(a,o);if(c)throw Error(c);o.set(a.slug,a);let u=mn(Cn(`${n}/${a.slug}`,e(a),r,s));return[a.catalog?{...u,catalog:a.catalog}:u]}catch(c){return i(a.path,c.message),[]}})}function qe(t,e,n,r=re(!0)){return sd(Os(t),(i)=>V2(i.path,"utf8"),e,n,r)}function vc(t,e,n=!0){return pi(t,n).flatMap(({dir:r,id:i})=>qe(r,i,e,re(n)))}function od(t,e=t.name,n){return{name:e,...t.base?{base:t.base}:{},...t.group!==xo?{group:t.group}:{},ansiSource:t.ansiSource,...t.booru?{booru:t.booru}:{},...t.booruSites?{booruSites:t.booruSites}:{},signature:t.signatureSlots,background:t.background,foreground:t.foreground,cursor:t.cursor,selection:t.selection,ansi:t.ansi,...t.waived&&t.waived.length>0?{waive:t.waived,reason:n??"kept from the palette"}:{},...t.pictures?{pictures:t.pictures}:{}}}var Et=(t)=>JSON.stringify(t);function s0(t){return["[[picture]]",`site = ${Et(t.site)}`,`id = ${t.id}`,...t.size===void 0?[]:[`size = ${typeof t.size==="number"?t.size:Et(t.size)}`],...t.position===void 0?[]:[`position = ${Et(t.position)}`],...t.opacity===void 0?[]:[`opacity = ${t.opacity}`]]}function o0(t,e){return e.length===0?t:`${t.replace(/\n*$/,`
251
257
  `)}${e.map((n)=>`
252
- ${jw(n).join(`
258
+ ${s0(n).join(`
253
259
  `)}
254
- `).join("")}`}function qf(t){let e=["[meta]",`name = ${Mt(ur(t.name))}`,...t.base?[`base = ${Mt(t.base)}`]:[],...t.group?[`group = ${Mt(t.group)}`]:[],...t.ansiSource?[`ansi_source = ${Mt(t.ansiSource)}`]:[],...t.booru?[`booru = ${Mt(t.booru)}`]:[],`signature = [${t.signature.map(Mt).join(", ")}]`,...t.booruSites?["","[meta.booru_sites]",...Object.entries(t.booruSites).map(([n,r])=>`${n} = [${r.map(Mt).join(", ")}]`)]:[],"","[colors]",`background = ${Mt(t.background)}`,`foreground = ${Mt(t.foreground)}`,`cursor = ${Mt(t.cursor)}`,`selection_background = ${Mt(t.selection)}`,"ansi = [",...t.ansi.slice(0,8).map((n)=>` ${Mt(n)},`),"",...t.ansi.slice(8).map((n)=>` ${Mt(n)},`),"]"];if(t.waive&&t.waive.length>0)e.push("","[contrast]",`waive = [${t.waive.map(Mt).join(", ")}]`,`reason = ${Mt(t.reason??"")}`);for(let n of t.pictures??[])e.push("",...jw(n));return`${e.join(`
260
+ `).join("")}`}function ad(t){let e=[`"$schema" = ${Et(Vw)}`,"","[meta]",`name = ${Et(ae(t.name))}`,...t.base?[`base = ${Et(t.base)}`]:[],...t.group?[`group = ${Et(t.group)}`]:[],...t.ansiSource?[`ansi_source = ${Et(t.ansiSource)}`]:[],...t.booru?[`booru = ${Et(t.booru)}`]:[],`signature = [${t.signature.map(Et).join(", ")}]`,...t.booruSites?["","[meta.booru_sites]",...Object.entries(t.booruSites).map(([n,r])=>`${n} = [${r.map(Et).join(", ")}]`)]:[],"","[colors]",`background = ${Et(t.background)}`,`foreground = ${Et(t.foreground)}`,`cursor = ${Et(t.cursor)}`,`selection_background = ${Et(t.selection)}`,"ansi = [",...t.ansi.slice(0,8).map((n)=>` ${Et(n)},`),"",...t.ansi.slice(8).map((n)=>` ${Et(n)},`),"]"];if(t.waive&&t.waive.length>0)e.push("","[contrast]",`waive = [${t.waive.map(Et).join(", ")}]`,`reason = ${Et(t.reason??"")}`);for(let n of t.pictures??[])e.push("",...s0(n));return`${e.join(`
255
261
  `)}
256
- `}class _w{bytes=[];u8(t){this.bytes.push(t&255)}u16(t){this.u8(t>>8),this.u8(t)}u32(t){this.u16(Math.floor(t/65536)),this.u16(t%65536)}str(t=""){let e=new TextEncoder().encode(t);if(e.length>255)throw Error(`"${t}" is too long to share`);this.u8(e.length),this.bytes.push(...e)}color(t){let e=Number.parseInt(t.slice(1),16);this.u8(e>>16),this.u8(e>>8),this.u8(e)}done(){return Buffer.from(this.bytes).toString("base64url")}}class Bw{at=0;bytes;constructor(t){this.bytes=t}u8(){let t=this.bytes[this.at++];if(t===void 0)throw Error("the share code is cut short");return t}u16(){return this.u8()*256+this.u8()}u32(){return this.u16()*65536+this.u16()}str(){let t=this.u8(),e=this.bytes.subarray(this.at,this.at+t);if(e.length!==t)throw Error("the share code is cut short");return this.at+=t,new TextDecoder("utf-8",{fatal:!0}).decode(e)}color(){return`#${[this.u8(),this.u8(),this.u8()].map((t)=>t.toString(16).padStart(2,"0")).join("")}`}end(){if(this.at!==this.bytes.length)throw Error("the share code has bytes left over")}}function Ww(t){let e=new _w;e.str(t.name);for(let r of[t.background,t.foreground,t.cursor,t.selection,...t.ansi])e.color(r);for(let r of t.signature)e.u8(Lw.indexOf(r));e.str(t.base),e.str(t.group),e.str(t.ansiSource),e.str(t.booru),e.u16((t.waive??[]).reduce((r,i)=>r|1<<Ll.indexOf(i),0)),e.str(t.waive&&t.waive.length>0?t.reason:"");let n=t.pictures??[];e.u8(n.length);for(let r of n)e.u8(Y.findIndex((i)=>i.key===r.site)),e.u32(r.id),e.u16(r.size===void 0?0:r.size==="fill"?1:r.size),e.u8(r.position===void 0?0:_t.indexOf(r.position)+1),e.u16(r.opacity===void 0?0:Math.round(r.opacity*1000)+1);return`${Rn}${e.done()}`}function Uw(t){if(!t.startsWith(Rn))throw Error(`a share code starts with ${Rn}`);let e=t.slice(Rn.length);if(!/^[A-Za-z0-9_-]+$/.test(e))throw Error("the share code holds characters it never uses — was it copied whole?");let n=new Bw(new Uint8Array(Buffer.from(e,"base64url"))),r=n.str(),[i,s,o,a,...c]=Array.from({length:20},()=>n.color()),u=[n.u8(),n.u8(),n.u8()].map((y)=>Lw[y]??`slot${y}`),l=n.str(),f=n.str(),d=n.str(),h=n.str(),p=n.u16(),$=n.str(),g=Ll.filter((y,S)=>p&1<<S),b=Array.from({length:n.u8()},()=>{let y=Y[n.u8()]?.key??"unknown",S=n.u32(),E=n.u16(),I=n.u8(),N=n.u16();return{site:y,id:S,...E===1?{size:"fill"}:E>1?{size:E}:{},...I>0?{position:_t[I-1]??"unknown"}:{},...N>0?{opacity:(N-1)/1000}:{}}});if(n.end(),![i,s,o,a,...c].every(ne))throw Error("the share code holds a color that is not one");return{name:r,...l?{base:l}:{},...f?{group:f}:{},...d?{ansiSource:d}:{},...h?{booru:h}:{},signature:u,background:i,foreground:s,cursor:o,selection:a,ansi:c,...g.length>0?{waive:g,reason:$}:{},...b.length>0?{pictures:b}:{}}}function Yf(t){return{background:t.background,foreground:t.foreground,cursor:t.cursor,selection:t.selectionBackground,ansi:t.ansi}}function Jf(t,e){let n=t.indexOf("ansi = ["),r=t.indexOf("]",n);if(n<0||r<0)throw Error("no ansi = [...] list to rewrite");let i=0,s=t.slice(n,r).replace(/"#[0-9a-fA-F]{6}"/g,()=>Mt(e.ansi[i++]));return[["background",e.background],["foreground",e.foreground],["cursor",e.cursor],["selection_background",e.selection]].reduce((a,[c,u])=>a.replace(new RegExp(`^(${c}\\s*=\\s*)"#[0-9a-fA-F]{6}"`,"m"),(l,f)=>`${f}${Mt(u)}`),t.slice(0,n)+s+t.slice(r))}function Kw(t,e){return t.replace(/^(signature\s*=\s*)\[[^\]]*\]/m,(n,r)=>`${r}[${e.map(Mt).join(", ")}]`)}function Po(t){let e=tn(Ue(t)),n=new Set(t.waived??[]),r=Math.max(...he.map((i)=>i.label.length));return he.map((i,s)=>{let o=e[s],a=n.has(i.rule)||Number.isNaN(o)||(i.min===void 0||o>=i.min)&&(i.max===void 0||o<=i.max),c=i.min!==void 0?`≥ ${i.min}`:i.max!==void 0?`≤ ${i.max}`:"",u=Number.isNaN(o)?"—":Number.isInteger(o)?String(o):o.toFixed(2);return` ${a?"✓":"✗"} ${i.label.padEnd(r)} ${u.padStart(6)} ${c}${n.has(i.rule)?" waived":""}`})}import{existsSync as b2,readFileSync as w2,rmSync as $2}from"node:fs";import{join as k2}from"node:path";var gc=["background","foreground","cursor","selection",...Array.from({length:16},(t,e)=>`ansi${e}`)],y2=1;function zw(t){return k2(t,"ttheme","tone.json")}function Dw(t){return gc.includes(t)}function Tn(t){let e=zw(t);if(!b2(e))return{};let n;try{n=JSON.parse(w2(e,"utf8"))}catch{return{}}let r=n?.palettes;if(typeof r!=="object"||r===null)return{};let i={};for(let[s,o]of Object.entries(r)){if(typeof o!=="object"||o===null)continue;let a={};for(let[c,u]of Object.entries(o))if(Dw(c)&&typeof u==="string"&&ne(u.toLowerCase()))a[c]=u.toLowerCase();if(Object.keys(a).length>0)i[s]=a}return i}function qw(t,e){let n=zw(t),r=Object.fromEntries(Object.entries(e).filter(([,i])=>Object.keys(i).length>0));if(Object.keys(r).length===0){$2(n,{force:!0});return}H(n,`${JSON.stringify({version:y2,palettes:r},null,2)}
257
- `)}function pc(t,e){if(e==="background"||e==="foreground"||e==="cursor"||e==="selection")return t[e];return t.ansi[Number(e.slice(4))]}function Vf(t,e){let n={};return gc.forEach((r,i)=>{let s=e[i].toLowerCase();if(s!==pc(t,r).toLowerCase())n[r]=s}),n}function vs(t,e){if(!e)return t;let n=(u)=>e[u]===void 0||e[u]===pc(t,u).toLowerCase();if(gc.every(n))return t;let r=(u)=>e[u]??pc(t,u),i={background:r("background"),foreground:r("foreground"),cursor:r("cursor"),selection:r("selection"),ansi:gc.slice(4).map(r)},s=t.signatureSlots.map((u)=>Dw(u)?r(u):pc(i,u)),o={...t,...i,signature:s},a=Ue(o),c=cn({name:o.name,background:i.background,foreground:i.foreground,cursor:i.cursor,selection:i.selection,ansi:i.ansi,waived:a.waive},o.signatureSlots);return{...o,gate:tn(a),backdrop:c}}function bc(t,e){return Object.keys(e).length===0?t:t.map((n)=>vs(n,e[n.name]))}function Yw(t,e,n){let r={...t};if(Object.keys(n).length===0)delete r[e];else r[e]=n;return r}var Zw="https://kecan0406.github.io/ttheme/manifest.json",v2=20000;function ve(t){return Vw(t,"ttheme","catalog.json")}function wc(t,e){H(ve(t),`${JSON.stringify(e,null,2)}
258
- `)}function lt(t,e=!0,n){let r=ks(t),i=ve(t),s=ps();if(r.includes(q))if(n)s=n;else{if(!Jw(i))throw Error(`no catalog at ${i} — run \`ttheme init\` first`);s=Pe(Zf(i,"utf8"))}let o=r.filter($e).flatMap((a)=>S2(t,a,e));return{...s,palettes:[...s.palettes,...o]}}function kr(t,e){return Qf(Zf(Ke(t,e),"utf8"))}function Ss(t,e){return ke({owner:Aw(t),name:e.name})}function S2(t,e,n){let r=Ke(t,e);if(!Jw(r))return[];try{let i=kr(t,e);return $c(i,Ss(e,i))}catch(i){if(n)process.stderr.write(`ttheme: skipping ${r} — ${i.message}
259
- `);return[]}}function Qf(t){let e=Pe(t),n=Kf(e.owner,e.name);if(n)throw Error(`market index ${n}`);let r=e.palettes.find((i)=>ct(i.name)!==void 0);if(r)throw Error(`market index names ${r.name} with its market — its entries are bare palette names`);return e}function $c(t,e){return t.palettes.map(({lead:n,default:r,native:i,...s})=>({...s,name:`${e}/${s.name}`,group:e}))}var Xf="npx @kecan0406/ttheme@latest init";class kc extends Error{}function Pe(t){let e;try{e=JSON.parse(t)}catch{throw Error("catalog is not valid JSON")}let n=e?.schema;if(n===void 0)throw Error("catalog has no schema — a market is rebuilt with `ttheme market build`, then `ttheme update` fetches it");if(typeof n!=="number"||!Number.isInteger(n)||n<1)throw Error("catalog schema is not a whole number from 1");if(n>sc)throw new kc(`catalog is schema ${n}, newer than the schema ${sc} this ttheme reads — \`${Xf}\` updates it`);let r=e;if(typeof r.version!=="string"||!Array.isArray(r.palettes))throw Error("catalog has no version or palettes");for(let i of r.palettes){let s=Qw(i);if(s)throw Error(`catalog entry ${JSON.stringify(i?.name)} ${s}`)}return r}function Qw(t){if(typeof t?.name!=="string"||!Array.isArray(t.ansi)||t.ansi.length!==16)return"is missing name or its 16 ANSI colors";let e=We(t.name)??(t.base===void 0?void 0:We(t.base));if(e)return e;if(![t.background,t.foreground,t.cursor,t.selection,...t.ansi].every((n)=>typeof n==="string"&&ne(n)))return'holds a color that is not "#rrggbb"';for(let n of[t.group,t.native??"-",t.catalog??"-",t.ansiSource]){let r=typeof n==="string"?Mo(n):"has a field that is not text";if(r)return r}return}function Xw(t){return Vw(t,"ttheme","kept.json")}function yc(t,e){H(Xw(t),`${JSON.stringify({palettes:e},null,2)}
260
- `)}function Pn(t){try{let{palettes:e}=JSON.parse(Zf(Xw(t),"utf8"));return Array.isArray(e)?e.filter((n)=>Qw(n)===void 0):[]}catch{return[]}}function di(t,e,n=!0){let r=[...e.palettes,...mc(t,e.palettes,n)],i=new Set(r.map((s)=>s.name));return{...e,palettes:[...r,...Pn(t).filter((s)=>!i.has(s.name))]}}function Ot(t,e,n=!0){let r=di(t,e,n);return{...r,palettes:bc(r.palettes,Tn(t))}}function ie(t){return Ot(t,lt(t))}class vc extends Error{}class Sc extends Error{}async function Ho(t,e,n=v2,r){let i;try{let s=AbortSignal.timeout(n);i=await fetch(t,{signal:r?AbortSignal.any([s,r]):s})}catch(s){throw Error(`cannot reach ${t} — ${s instanceof Error?s.message:String(s)}`)}if(i.status===404)throw new vc(`nothing at ${t}`);if(i.status===403||i.status===429)throw new Sc(`${new URL(t).host} is turning requests away for now (${i.status}) — try again in a minute`);if(!i.ok)throw Error(`${t} answered ${i.status}`);return e(await i.text())}function Ao(t){let e=new Set(t.waived??[]),n=t.gate??tn(Ue(t));return he.flatMap((r,i)=>{let s=n[i];if(e.has(r.rule)||typeof s!=="number"||Number.isNaN(s))return[];if(r.min!==void 0&&s<r.min)return[`${r.label} ${s} < ${r.min}`];if(r.max!==void 0&&s>r.max)return[`${r.label} ${s} > ${r.max}`];return[]})}function Hn(t,e){let n=t.find((r)=>r.name===e);if(!n)throw Error(`no palette named ${e} in the catalog — ${td(t,[e])}`);return n}function td(t,e){let n=e.map((o)=>o.toLowerCase()),r=t.filter((o)=>n.some((a)=>o.name.includes(a))),i=t.filter((o)=>!r.includes(o)&&n.some((a)=>o.group.toLowerCase().includes(a))),s=[...r,...i].map((o)=>o.name).slice(0,3);return s.length>0?`did you mean: ${s.join(", ")}?`:"`ttheme list` shows what is there"}function t0(t,e){let n=e.toLowerCase();return t.filter((r)=>[r.name,r.group,r.native??"",r.ansiSource,...r.nativeNames??[],...lc(r.booru)].some((i)=>i.toLowerCase().includes(n)))}function e0(t,e,n){let r=n.toLowerCase(),i=(s)=>s.name===e.name?0:s.group===e.group?1:2;return t.filter((s)=>s.booru?.toLowerCase().includes(r)).map((s,o)=>({p:s,at:o})).sort((s,o)=>i(s.p)-i(o.p)||s.at-o.at).map(({p:s})=>s)}function n0(t,e){return t.booruSites?.[e]??(t.booru?[t.booru]:[])}var E2=9999,Es;function se(t,e){if(!Es||e===""||Es.length>=E2)return e;return`\x1B[?${Es.push(t)}y${e}\x1B[?0y`}function Ec(t){let e=Es,n=[];Es=n;try{return{drawn:t(),targets:n}}finally{Es=e}}function M2(t){let e=t.slice(3,-1);return t.startsWith("\x1B[?")&&t.endsWith("y")&&/^\d{1,4}$/.test(e)?Number(e):void 0}function O2(t){let e=t.slice(2,-1);return t.startsWith("\x1B[")&&t.endsWith("G")&&/^\d*$/.test(e)?Math.max(1,Number(e||1))-1:void 0}function I2(t,e,n){if(!t.includes("\x1B[?"))return{text:t,zones:[]};let r=[],i=[],s="",o=0,a="",c=()=>{let l=i.pop();if(l&&o>l.col)r.push({row:e,col:l.col,width:o-l.col,height:1,target:l.target})},u=0;while(u<t.length){let l=t.indexOf("\x1B",u);if(l!==u){let p=l===-1?t.length:l;a+=t.slice(u,p),s+=t.slice(u,p),u=p;continue}let f=t.slice(u,u+(Pl(t,u)||1));u+=f.length;let d=M2(f),h=d===void 0?O2(f):void 0;if(d===void 0&&h===void 0){s+=f;continue}if(o+=Q(a),a="",h!==void 0)o=h,s+=f;else if(d===0)c();else if(d!==void 0)i.push({target:n[d-1],col:o})}o+=Q(a);while(i.length>0)c();return{text:s,zones:r}}function Mc(t,e){let n=[];return{lines:t.map((i,s)=>{let o=I2(i,s,e);return n.push(...o.zones),o.text}),zones:n}}function r0(t,e,n){let r=n-t.col,i=e-t.row;return{target:t.target,x:r,y:i,width:t.width,height:t.height,inside:r>=0&&r<t.width&&i>=0&&i<t.height}}function x2(t,e,n){let r;for(let i of t)if(e>=i.row&&e<i.row+i.height&&n>=i.col&&n<i.col+i.width&&(!r||i.width*i.height<=r.width*r.height))r=i;return r}var N2={space:" ",enter:"enter",esc:"esc",tab:"tab",bksp:"backspace","←":"left","→":"right"};function ed(t){let e=/^(ctrl|alt)\+([a-z])$/.exec(t);if(e)return`${e[1]}-${e[2]}`;return N2[t]??([...t].length===1&&t!==" "?t:void 0)}function fn(t,e){let n=ed(t);return n?se({kind:"key",key:n},e):e}class Fo{zones=[];held;point(t){if(t.action==="drag"||t.action==="release"){let n=this.held;if(t.action==="release")this.held=void 0;return n&&r0(n,t.row,t.col)}let e=x2(this.zones,t.row,t.col);if(t.action==="press")this.held=t.button==="left"?e:void 0;return e&&r0(e,t.row,t.col)}drop(){this.held=void 0}}var An=[{name:"preview",title:"Preview"},{name:"browse",title:"Browse"}],Oc=10,Ic=20,R2="\x1B[7;1m\x1B[36m";function i0(t){return An.find((e)=>e.name===t.TTHEME_HUB)?.name}function s0(t,e){let n=An.findIndex((r)=>r.name===t);return Ic+(n+e+An.length)%An.length+1}function o0(t){return Ic+An.findIndex((e)=>e.name===t)+1}function nd(t,e){let n=An.map(({name:i,title:s})=>{let o={kind:"hub",tab:i};if(!e)return se(o,i===t?`[${s}]`:` ${s} `);return i===t?`${R2}${se(o,` ${s} `)}${Pt}`:`${P}${se(o,` ${s} `)}${Pt}`}),r="tab next";return` ${n.join(" ")} ${e?`${P}tab next${Pt}`:"tab next"}`}import{execFileSync as wT}from"node:child_process";import{existsSync as Nh,mkdirSync as kk,readdirSync as $T,readFileSync as Th,rmSync as yk}from"node:fs";import{basename as kT,join as Ii,relative as yT}from"node:path";import{styleText as Pc}from"node:util";import{stdout as b0,stdin as j2}from"node:process";import G2 from"node:readline";var xc="\x1B",f0="›",T2=39,id="\x07",d0="[",P2="]",h0="m",sd=`${P2}8;;`,a0=new RegExp(`(?:\\${d0}(?<code>\\d+)m|\\${sd}(?<uri>.*)${id})`,"y"),c0=(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},u0=(t)=>`${xc}${d0}${t}${h0}`,l0=(t)=>`${xc}${sd}${t}${id}`,rd=(t,e,n)=>{let r=e[Symbol.iterator](),i=!1,s=!1,o=t.at(-1),a=o===void 0?0:Q(o),c=r.next(),u=r.next(),l=0;while(!c.done){let f=c.value,d=Q(f);if(a+d<=n)t[t.length-1]+=f;else t.push(f),a=0;if(f===xc||f===f0)i=!0,s=e.startsWith(sd,l+1);if(i){if(s){if(f===id)i=!1,s=!1}else if(f===h0)i=!1}else if(a+=d,a===n&&!u.done)t.push(""),a=0;c=u,u=r.next(),l+=f.length}if(o=t.at(-1),!a&&o!==void 0&&o.length&&t.length>1)t[t.length-2]+=t.pop()},H2=(t)=>{let e=t.split(" "),n=e.length;while(n){if(Q(e[n-1]))break;n--}if(n===e.length)return t;return e.slice(0,n).join(" ")+e.slice(n).join("")},A2=(t,e,n={})=>{if(n.trim!==!1&&t.trim()==="")return"";let r="",i,s,o=t.split(" "),a=[""],c=0;for(let f=0;f<o.length;f++){let d=o[f];if(n.trim!==!1){let p=a.at(-1)??"",$=p.trimStart();if(p.length!==$.length)a[a.length-1]=$,c=Q($)}if(f!==0){if(c>=e&&(n.wordWrap===!1||n.trim===!1))a.push(""),c=0;if(c||n.trim===!1)a[a.length-1]+=" ",c++}let h=Q(d);if(n.hard&&h>e){let p=e-c,$=1+Math.floor((h-p-1)/e);if(Math.floor((h-1)/e)<$)a.push("");rd(a,d,e),c=Q(a.at(-1)??"");continue}if(c+h>e&&c&&h){if(n.wordWrap===!1&&c<e){rd(a,d,e),c=Q(a.at(-1)??"");continue}a.push(""),c=0}if(c+h>e&&n.wordWrap===!1){rd(a,d,e),c=Q(a.at(-1)??"");continue}a[a.length-1]+=d,c+=h}if(n.trim!==!1)a=a.map((f)=>H2(f));let u=a.join(`
261
- `),l=!1;for(let f=0;f<u.length;f++){let d=u[f];if(r+=d,!l){if(l=d>="\uD800"&&d<="\uDBFF",l)continue}else l=!1;if(d===xc||d===f0){a0.lastIndex=f+1;let p=a0.exec(u)?.groups;if(p?.code!==void 0){let $=Number.parseFloat(p.code);i=$===T2?void 0:$}else if(p?.uri!==void 0)s=p.uri.length===0?void 0:p.uri}if(u[f+1]===`
262
- `){if(s)r+=l0("");let h=i?c0(i):void 0;if(i&&h)r+=u0(h)}else if(d===`
263
- `){if(i&&c0(i))r+=u0(i);if(s)r+=l0(s)}}return r},F2=/\r?\n/;function yr(t,e,n){return String(t).normalize().split(F2).map((r)=>A2(r,e,n)).join(`
264
- `)}var Se=Rl(ad(),1);function Fn(t,e,n){if(!n.some((o)=>!o.disabled))return t;let r=t+e,i=Math.max(n.length-1,0),s=r<0?i:r>i?0:r;return n[s]?.disabled?Fn(s,e<0?-1:1,n):s}function Nc(t,e,n,r){let i=r.split(`
265
- `),s=0,o=t;for(let c of i){if(o<=c.length)break;o-=c.length+1,s++}for(s=Math.max(0,Math.min(i.length-1,s+n)),o=Math.min(o,i[s].length)+e;o<0&&s>0;)s--,o+=i[s].length+1;for(;o>i[s].length&&s<i.length-1;)o-=i[s].length+1,s++;o=Math.max(0,Math.min(i[s].length,o));let a=0;for(let c=0;c<s;c++)a+=i[c].length+1;return a+o}var _2=["up","down","left","right","space","enter","cancel"],B2=["January","February","March","April","May","June","July","August","September","October","November","December"],Wt={actions:new Set(_2),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:[...B2],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 w0(t,e){if(typeof t=="string")return Wt.aliases.get(t)===e;for(let n of t)if(n!==void 0&&w0(n,e))return!0;return!1}function W2(t,e){if(t===e)return;let n=t.split(`
262
+ `}class a0{bytes=[];u8(t){this.bytes.push(t&255)}u16(t){this.u8(t>>8),this.u8(t)}u32(t){this.u16(Math.floor(t/65536)),this.u16(t%65536)}str(t=""){let e=new TextEncoder().encode(t);if(e.length>255)throw Error(`"${t}" is too long to share`);this.u8(e.length),this.bytes.push(...e)}color(t){let e=Number.parseInt(t.slice(1),16);this.u8(e>>16),this.u8(e>>8),this.u8(e)}done(){return Buffer.from(this.bytes).toString("base64url")}}class c0{at=0;bytes;constructor(t){this.bytes=t}u8(){let t=this.bytes[this.at++];if(t===void 0)throw Error("the share code is cut short");return t}u16(){return this.u8()*256+this.u8()}u32(){return this.u16()*65536+this.u16()}str(){let t=this.u8(),e=this.bytes.subarray(this.at,this.at+t);if(e.length!==t)throw Error("the share code is cut short");return this.at+=t,new TextDecoder("utf-8",{fatal:!0}).decode(e)}color(){return`#${[this.u8(),this.u8(),this.u8()].map((t)=>t.toString(16).padStart(2,"0")).join("")}`}end(){if(this.at!==this.bytes.length)throw Error("the share code has bytes left over")}}function u0(t){let e=new a0;e.str(t.name);for(let r of[t.background,t.foreground,t.cursor,t.selection,...t.ansi])e.color(r);for(let r of t.signature)e.u8(i0.indexOf(r));e.str(t.base),e.str(t.group),e.str(t.ansiSource),e.str(t.booru),e.u16((t.waive??[]).reduce((r,i)=>r|1<<Kl.indexOf(i),0)),e.str(t.waive&&t.waive.length>0?t.reason:"");let n=t.pictures??[];e.u8(n.length);for(let r of n)e.u8(Y.findIndex((i)=>i.key===r.site)),e.u32(r.id),e.u16(r.size===void 0?0:r.size==="fill"?1:r.size),e.u8(r.position===void 0?0:Ut.indexOf(r.position)+1),e.u16(r.opacity===void 0?0:Math.round(r.opacity*1000)+1);return`${Fn}${e.done()}`}function l0(t){if(!t.startsWith(Fn))throw Error(`a share code starts with ${Fn}`);let e=t.slice(Fn.length);if(!/^[A-Za-z0-9_-]+$/.test(e))throw Error("the share code holds characters it never uses — was it copied whole?");let n=new c0(new Uint8Array(Buffer.from(e,"base64url"))),r=n.str(),[i,s,o,a,...c]=Array.from({length:20},()=>n.color()),u=[n.u8(),n.u8(),n.u8()].map((y)=>i0[y]??`slot${y}`),l=n.str(),f=n.str(),d=n.str(),h=n.str(),m=n.u16(),$=n.str(),g=Kl.filter((y,E)=>m&1<<E),b=Array.from({length:n.u8()},()=>{let y=Y[n.u8()]?.key??"unknown",E=n.u32(),S=n.u16(),x=n.u8(),R=n.u16();return{site:y,id:E,...S===1?{size:"fill"}:S>1?{size:S}:{},...x>0?{position:Ut[x-1]??"unknown"}:{},...R>0?{opacity:(R-1)/1000}:{}}});if(n.end(),![i,s,o,a,...c].every(oe))throw Error("the share code holds a color that is not one");return{name:r,...l?{base:l}:{},...f?{group:f}:{},...d?{ansiSource:d}:{},...h?{booru:h}:{},signature:u,background:i,foreground:s,cursor:o,selection:a,ansi:c,...g.length>0?{waive:g,reason:$}:{},...b.length>0?{pictures:b}:{}}}function cd(t){return{background:t.background,foreground:t.foreground,cursor:t.cursor,selection:t.selectionBackground,ansi:t.ansi}}function ud(t,e){let n=t.indexOf("ansi = ["),r=t.indexOf("]",n);if(n<0||r<0)throw Error("no ansi = [...] list to rewrite");let i=0,s=t.slice(n,r).replace(/"#[0-9a-fA-F]{6}"/g,()=>Et(e.ansi[i++]));return[["background",e.background],["foreground",e.foreground],["cursor",e.cursor],["selection_background",e.selection]].reduce((a,[c,u])=>a.replace(new RegExp(`^(${c}\\s*=\\s*)"#[0-9a-fA-F]{6}"`,"m"),(l,f)=>`${f}${Et(u)}`),t.slice(0,n)+s+t.slice(r))}function f0(t,e){return t.replace(/^(signature\s*=\s*)\[[^\]]*\]/m,(n,r)=>`${r}[${e.map(Et).join(", ")}]`)}function Co(t){let e=on(De(t)),n=new Set(t.waived??[]),r=Math.max(...we.map((i)=>i.label.length));return we.map((i,s)=>{let o=e[s],a=n.has(i.rule)||Number.isNaN(o)||(i.min===void 0||o>=i.min)&&(i.max===void 0||o<=i.max),c=i.min!==void 0?`≥ ${i.min}`:i.max!==void 0?`≤ ${i.max}`:"",u=Number.isNaN(o)?"—":Number.isInteger(o)?String(o):o.toFixed(2);return` ${a?"✓":"✗"} ${i.label.padEnd(r)} ${u.padStart(6)} ${c}${n.has(i.rule)?" waived":""}`})}import{existsSync as X2,readFileSync as tR,rmSync as eR}from"node:fs";import{join as nR}from"node:path";var Sc=["background","foreground","cursor","selection",...Array.from({length:16},(t,e)=>`ansi${e}`)],rR=1;function d0(t){return nR(t,"ttheme","tone.json")}function h0(t){return Sc.includes(t)}function pn(t){let e=d0(t);if(!X2(e))return{};let n;try{n=JSON.parse(tR(e,"utf8"))}catch{return{}}let r=n?.palettes;if(typeof r!=="object"||r===null)return{};let i={};for(let[s,o]of Object.entries(r)){if(typeof o!=="object"||o===null)continue;let a={};for(let[c,u]of Object.entries(o))if(h0(c)&&typeof u==="string"&&oe(u.toLowerCase()))a[c]=u.toLowerCase();if(Object.keys(a).length>0)i[s]=a}return i}function ld(t,e){let n=d0(t),r=Object.fromEntries(Object.entries(e).filter(([,i])=>Object.keys(i).length>0));if(Object.keys(r).length===0){eR(n,{force:!0});return}P(n,`${JSON.stringify({version:rR,palettes:r},null,2)}
263
+ `)}function Ec(t,e){if(e==="background"||e==="foreground"||e==="cursor"||e==="selection")return t[e];return t.ansi[Number(e.slice(4))]}function fd(t,e){let n={};return Sc.forEach((r,i)=>{let s=e[i].toLowerCase();if(s!==Ec(t,r).toLowerCase())n[r]=s}),n}function xs(t,e){if(!e)return t;let n=(u)=>e[u]===void 0||e[u]===Ec(t,u).toLowerCase();if(Sc.every(n))return t;let r=(u)=>e[u]??Ec(t,u),i={background:r("background"),foreground:r("foreground"),cursor:r("cursor"),selection:r("selection"),ansi:Sc.slice(4).map(r)},s=t.signatureSlots.map((u)=>h0(u)?r(u):Ec(i,u)),o={...t,...i,signature:s},a=De(o),c=hn({name:o.name,background:i.background,foreground:i.foreground,cursor:i.cursor,selection:i.selection,ansi:i.ansi,waived:a.waive},o.signatureSlots);return{...o,gate:on(a),backdrop:c}}function Mc(t,e){return Object.keys(e).length===0?t:t.map((n)=>xs(n,e[n.name]))}function m0(t,e,n){let r={...t};if(Object.keys(n).length===0)delete r[e];else r[e]=n;return r}function p0(t,e,n){let r=pn(t);if(!Object.keys(r).some((s)=>e.has(s)||n.includes(s)))return;ld(t,Object.fromEntries(Object.entries(r).filter(([s])=>!n.includes(s)).map(([s,o])=>[e.get(s)??s,o])))}var w0="https://kecan0406.github.io/ttheme/manifest.json",$0=20000;function Me(t){return b0(t,"ttheme","catalog.json")}function Oc(t,e){P(Me(t),`${JSON.stringify(e,null,2)}
264
+ `)}function ut(t,e=!0,n){let r=Ss(t),i=Me(t),s=mc();if(r.includes(z))if(n)s=n;else{if(!g0(i))throw Error(`no catalog at ${i} — run \`ttheme init\` first`);s=Je(dd(i,"utf8"))}let o=r.filter(ee).flatMap((a)=>sR(t,a,s.palettes,e));return{...s,palettes:[...s.palettes,...o]}}function iR(t){let e;try{e=JSON.parse(t)}catch{throw Error("is not valid JSON")}let n=e?.files;if(!n||typeof n!=="object"||Object.values(n).some((r)=>typeof r!=="string"))throw Error("is not a copy of a market this ttheme fetched — `ttheme update` fetches it again");return{...typeof e?.etag==="string"?{etag:e.etag}:{},files:n}}function Ye(t,e){return iR(dd(He(t,e),"utf8"))}function k0(t,e){return ne({owner:t0(t),name:e.name})}function y0(t,e){let n=e.files[Ft];if(n===void 0)throw Error(`${Z(t)} has no ${Ft} — \`ttheme market init\` makes one`);return ed(n,Ft)}function xc(t,e){return k0(t,y0(t,e))}function Ln(t,e,n,r){let i=y0(t,e),s=k0(t,i),o=Z(t),a=new Map(Object.entries(e.files).map(([u,l])=>[`${o}/${u}`,l])),c=rd(Object.keys(e.files),(u)=>`${o}/${u}`);return{id:s,info:i,entries:sd(c,(u)=>a.get(u.path)??"",s,n,r,!0)}}function sR(t,e,n,r){let i=He(t,e);if(!g0(i))return[];try{return Ln(e,Ye(t,e),n,re(!1)).entries}catch(s){if(r)process.stderr.write(`ttheme: skipping ${i} — ${s.message}
265
+ `);return[]}}function Je(t){let e;try{e=JSON.parse(t)}catch{throw Error("catalog is not valid JSON")}let n=e?.schema;if(n===void 0)throw Error("catalog has no schema — `ttheme update` fetches it again");Fw(n,"catalog",Wf);let r=e;if(typeof r.version!=="string"||!Array.isArray(r.palettes))throw Error("catalog has no version or palettes");for(let i of r.palettes){let s=v0(i);if(s)throw Error(`catalog entry ${JSON.stringify(i?.name)} ${s}`)}return r}function v0(t){if(typeof t?.name!=="string"||!Array.isArray(t.ansi)||t.ansi.length!==16)return"is missing name or its 16 ANSI colors";let e=ve(t.name)??(t.base===void 0?void 0:ve(t.base));if(e)return e;if(![t.background,t.foreground,t.cursor,t.selection,...t.ansi].every((n)=>typeof n==="string"&&oe(n)))return'holds a color that is not "#rrggbb"';for(let n of[t.group,t.native??"-",t.catalog??"-",t.ansiSource]){let r=typeof n==="string"?No(n):"has a field that is not text";if(r)return r}return}function E0(t){return b0(t,"ttheme","kept.json")}function Ic(t,e){P(E0(t),`${JSON.stringify({palettes:e},null,2)}
266
+ `)}function jn(t){try{let{palettes:e}=JSON.parse(dd(E0(t),"utf8"));return Array.isArray(e)?e.filter((n)=>v0(n)===void 0):[]}catch{return[]}}function gi(t,e,n=!0){let r=[...e.palettes,...vc(t,e.palettes,n)],i=new Set(r.map((s)=>s.name));return{...e,palettes:[...r,...jn(t).filter((s)=>!i.has(s.name))]}}function Ot(t,e,n=!0){let r=gi(t,e,n);return{...r,palettes:Mc(r.palettes,pn(t))}}function ue(t){return Ot(t,ut(t))}class Rc extends Error{}class Nc extends Error{}async function hd(t,e=$0,n,r={}){let i;try{let s=AbortSignal.timeout(e);i=await fetch(t,{headers:r,signal:n?AbortSignal.any([s,n]):s})}catch(s){throw Error(`cannot reach ${t} — ${s instanceof Error?s.message:String(s)}`)}if(i.status===404)throw new Rc(`nothing at ${t}`);if(i.status===403||i.status===429)throw new Nc(`${new URL(t).host} is turning requests away for now (${i.status}) — try again in a minute`);if(!i.ok&&i.status!==304)throw Error(`${t} answered ${i.status}`);return i}async function Tc(t,e,n=$0,r){return e(await(await hd(t,n,r)).text())}function Lo(t){let e=new Set(t.waived??[]),n=t.gate??on(De(t));return we.flatMap((r,i)=>{let s=n[i];if(e.has(r.rule)||typeof s!=="number"||Number.isNaN(s))return[];if(r.min!==void 0&&s<r.min)return[`${r.label} ${s} < ${r.min}`];if(r.max!==void 0&&s>r.max)return[`${r.label} ${s} > ${r.max}`];return[]})}function _n(t,e){let n=t.find((r)=>r.name===e);if(!n)throw Error(`no palette named ${e} in the catalog — ${md(t,[e])}`);return n}function md(t,e){let n=e.map((o)=>o.toLowerCase()),r=t.filter((o)=>n.some((a)=>o.name.includes(a))),i=t.filter((o)=>!r.includes(o)&&n.some((a)=>o.group.toLowerCase().includes(a))),s=[...r,...i].map((o)=>o.name).slice(0,3);return s.length>0?`did you mean: ${s.join(", ")}?`:"`ttheme list` shows what is there"}function S0(t,e){return t.filter((n)=>di([n.name,n.group,n.native??"",n.ansiSource,...n.nativeNames??[],...bc(n.booru)],e))}function M0(t,e,n){let r=n.toLowerCase(),i=(s)=>s.name===e.name?0:s.group===e.group?1:2;return t.filter((s)=>s.booru?.toLowerCase().includes(r)).map((s,o)=>({p:s,at:o})).sort((s,o)=>i(s.p)-i(o.p)||s.at-o.at).map(({p:s})=>s)}function O0(t,e){return t.booruSites?.[e]??(t.booru?[t.booru]:[])}var oR=9999,Is;function le(t,e){if(!Is||e===""||Is.length>=oR)return e;return`\x1B[?${Is.push(t)}y${e}\x1B[?0y`}function Ac(t){let e=Is,n=[];Is=n;try{return{drawn:t(),targets:n}}finally{Is=e}}function aR(t){let e=t.slice(3,-1);return t.startsWith("\x1B[?")&&t.endsWith("y")&&/^\d{1,4}$/.test(e)?Number(e):void 0}function cR(t){let e=t.slice(2,-1);return t.startsWith("\x1B[")&&t.endsWith("G")&&/^\d*$/.test(e)?Math.max(1,Number(e||1))-1:void 0}function uR(t,e,n){if(!t.includes("\x1B[?"))return{text:t,zones:[]};let r=[],i=[],s="",o=0,a="",c=()=>{let l=i.pop();if(l&&o>l.col)r.push({row:e,col:l.col,width:o-l.col,height:1,target:l.target})},u=0;while(u<t.length){let l=t.indexOf("\x1B",u);if(l!==u){let m=l===-1?t.length:l;a+=t.slice(u,m),s+=t.slice(u,m),u=m;continue}let f=t.slice(u,u+(_l(t,u)||1));u+=f.length;let d=aR(f),h=d===void 0?cR(f):void 0;if(d===void 0&&h===void 0){s+=f;continue}if(o+=X(a),a="",h!==void 0)o=h,s+=f;else if(d===0)c();else if(d!==void 0)i.push({target:n[d-1],col:o})}o+=X(a);while(i.length>0)c();return{text:s,zones:r}}function Pc(t,e){let n=[];return{lines:t.map((i,s)=>{let o=uR(i,s,e);return n.push(...o.zones),o.text}),zones:n}}function x0(t,e,n){let r=n-t.col,i=e-t.row;return{target:t.target,x:r,y:i,width:t.width,height:t.height,inside:r>=0&&r<t.width&&i>=0&&i<t.height}}function lR(t,e,n){let r;for(let i of t)if(e>=i.row&&e<i.row+i.height&&n>=i.col&&n<i.col+i.width&&(!r||i.width*i.height<=r.width*r.height))r=i;return r}var fR={space:" ",enter:"enter",esc:"esc",tab:"tab",bksp:"backspace","←":"left","→":"right"};function pd(t){let e=/^(ctrl|alt)\+([a-z])$/.exec(t);if(e)return`${e[1]}-${e[2]}`;return fR[t]??([...t].length===1&&t!==" "?t:void 0)}function gn(t,e){let n=pd(t);return n?le({kind:"key",key:n},e):e}class jo{zones=[];held;point(t){if(t.action==="drag"||t.action==="release"){let n=this.held;if(t.action==="release")this.held=void 0;return n&&x0(n,t.row,t.col)}let e=lR(this.zones,t.row,t.col);if(t.action==="press")this.held=t.button==="left"?e:void 0;return e&&x0(e,t.row,t.col)}drop(){this.held=void 0}}var Gn=[{name:"preview",title:"Preview"},{name:"browse",title:"Browse"}],Hc=10,Fc=20,dR="\x1B[7;1m\x1B[36m";function I0(t){return Gn.find((e)=>e.name===t.TTHEME_HUB)?.name}function R0(t,e){let n=Gn.findIndex((r)=>r.name===t);return Fc+(n+e+Gn.length)%Gn.length+1}function N0(t){return Fc+Gn.findIndex((e)=>e.name===t)+1}function gd(t,e){let n=Gn.map(({name:i,title:s})=>{let o={kind:"hub",tab:i};if(!e)return le(o,i===t?`[${s}]`:` ${s} `);return i===t?`${dR}${le(o,` ${s} `)}${At}`:`${A}${le(o,` ${s} `)}${At}`}),r="tab next";return` ${n.join(" ")} ${e?`${A}tab next${At}`:"tab next"}`}import{execFileSync as lA}from"node:child_process";import{existsSync as Au,mkdirSync as fA,readdirSync as dA,readFileSync as Pu,rmSync as Xk}from"node:fs";import{basename as ry,join as aa,relative as ty}from"node:path";import{styleText as Gc}from"node:util";import{stdout as B0,stdin as kR}from"node:process";import yR from"node:readline";var Cc="\x1B",F0="›",hR=39,wd="\x07",C0="[",mR="]",L0="m",$d=`${mR}8;;`,T0=new RegExp(`(?:\\${C0}(?<code>\\d+)m|\\${$d}(?<uri>.*)${wd})`,"y"),A0=(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},P0=(t)=>`${Cc}${C0}${t}${L0}`,H0=(t)=>`${Cc}${$d}${t}${wd}`,bd=(t,e,n)=>{let r=e[Symbol.iterator](),i=!1,s=!1,o=t.at(-1),a=o===void 0?0:X(o),c=r.next(),u=r.next(),l=0;while(!c.done){let f=c.value,d=X(f);if(a+d<=n)t[t.length-1]+=f;else t.push(f),a=0;if(f===Cc||f===F0)i=!0,s=e.startsWith($d,l+1);if(i){if(s){if(f===wd)i=!1,s=!1}else if(f===L0)i=!1}else if(a+=d,a===n&&!u.done)t.push(""),a=0;c=u,u=r.next(),l+=f.length}if(o=t.at(-1),!a&&o!==void 0&&o.length&&t.length>1)t[t.length-2]+=t.pop()},pR=(t)=>{let e=t.split(" "),n=e.length;while(n){if(X(e[n-1]))break;n--}if(n===e.length)return t;return e.slice(0,n).join(" ")+e.slice(n).join("")},gR=(t,e,n={})=>{if(n.trim!==!1&&t.trim()==="")return"";let r="",i,s,o=t.split(" "),a=[""],c=0;for(let f=0;f<o.length;f++){let d=o[f];if(n.trim!==!1){let m=a.at(-1)??"",$=m.trimStart();if(m.length!==$.length)a[a.length-1]=$,c=X($)}if(f!==0){if(c>=e&&(n.wordWrap===!1||n.trim===!1))a.push(""),c=0;if(c||n.trim===!1)a[a.length-1]+=" ",c++}let h=X(d);if(n.hard&&h>e){let m=e-c,$=1+Math.floor((h-m-1)/e);if(Math.floor((h-1)/e)<$)a.push("");bd(a,d,e),c=X(a.at(-1)??"");continue}if(c+h>e&&c&&h){if(n.wordWrap===!1&&c<e){bd(a,d,e),c=X(a.at(-1)??"");continue}a.push(""),c=0}if(c+h>e&&n.wordWrap===!1){bd(a,d,e),c=X(a.at(-1)??"");continue}a[a.length-1]+=d,c+=h}if(n.trim!==!1)a=a.map((f)=>pR(f));let u=a.join(`
267
+ `),l=!1;for(let f=0;f<u.length;f++){let d=u[f];if(r+=d,!l){if(l=d>="\uD800"&&d<="\uDBFF",l)continue}else l=!1;if(d===Cc||d===F0){T0.lastIndex=f+1;let m=T0.exec(u)?.groups;if(m?.code!==void 0){let $=Number.parseFloat(m.code);i=$===hR?void 0:$}else if(m?.uri!==void 0)s=m.uri.length===0?void 0:m.uri}if(u[f+1]===`
268
+ `){if(s)r+=H0("");let h=i?A0(i):void 0;if(i&&h)r+=P0(h)}else if(d===`
269
+ `){if(i&&A0(i))r+=P0(i);if(s)r+=H0(s)}}return r},bR=/\r?\n/;function vr(t,e,n){return String(t).normalize().split(bR).map((r)=>gR(r,e,n)).join(`
270
+ `)}var Oe=Ll(yd(),1);function Bn(t,e,n){if(!n.some((o)=>!o.disabled))return t;let r=t+e,i=Math.max(n.length-1,0),s=r<0?i:r>i?0:r;return n[s]?.disabled?Bn(s,e<0?-1:1,n):s}function Lc(t,e,n,r){let i=r.split(`
271
+ `),s=0,o=t;for(let c of i){if(o<=c.length)break;o-=c.length+1,s++}for(s=Math.max(0,Math.min(i.length-1,s+n)),o=Math.min(o,i[s].length)+e;o<0&&s>0;)s--,o+=i[s].length+1;for(;o>i[s].length&&s<i.length-1;)o-=i[s].length+1,s++;o=Math.max(0,Math.min(i[s].length,o));let a=0;for(let c=0;c<s;c++)a+=i[c].length+1;return a+o}var vR=["up","down","left","right","space","enter","cancel"],ER=["January","February","March","April","May","June","July","August","September","October","November","December"],Wt={actions:new Set(vR),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:[...ER],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 U0(t,e){if(typeof t=="string")return Wt.aliases.get(t)===e;for(let n of t)if(n!==void 0&&U0(n,e))return!0;return!1}function SR(t,e){if(t===e)return;let n=t.split(`
266
272
  `),r=e.split(`
267
- `),i=Math.max(n.length,r.length),s=[];for(let o=0;o<i;o++)n[o]!==r[o]&&s.push(o);return{lines:s,numLinesBefore:n.length,numLinesAfter:r.length,numLines:i}}var h5=globalThis.process.platform.startsWith("win"),ud=Symbol("clack:cancel");function oe(t){return t===ud}function Rc(t,e){let n=t;n.isTTY&&n.setRawMode(e)}var Hc=(t)=>("columns"in t)&&typeof t.columns=="number"?t.columns:80,fd=(t)=>("rows"in t)&&typeof t.rows=="number"?t.rows:20;function vr(t,e,n,r=n,i=n,s){let o=Hc(t??b0);return yr(e,o-n.length,{hard:!0,trim:!1}).split(`
273
+ `),i=Math.max(n.length,r.length),s=[];for(let o=0;o<i;o++)n[o]!==r[o]&&s.push(o);return{lines:s,numLinesBefore:n.length,numLinesAfter:r.length,numLines:i}}var s5=globalThis.process.platform.startsWith("win"),Ed=Symbol("clack:cancel");function fe(t){return t===Ed}function jc(t,e){let n=t;n.isTTY&&n.setRawMode(e)}var Bc=(t)=>("columns"in t)&&typeof t.columns=="number"?t.columns:80,Md=(t)=>("rows"in t)&&typeof t.rows=="number"?t.rows:20;function Er(t,e,n,r=n,i=n,s){let o=Bc(t??B0);return vr(e,o-n.length,{hard:!0,trim:!1}).split(`
268
274
  `).map((a,c,u)=>{let l=s?s(a,c):a;return c===0?`${r}${l}`:c===u.length-1?`${i}${l}`:`${n}${l}`}).join(`
269
- `)}function $0(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 Cn{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=j2,output:r=b0,render:i,signal:s,...o}=t;this.opts=o,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=s,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(ud);this._abortSignal.addEventListener("abort",()=>{this.state="cancel",this.close()},{once:!0})}this.rl=G2.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),Rc(this.input,!0),this.output.on("resize",this.render),this.render(),this.once("submit",()=>{this.output.write(Se.cursor.show),this.output.off("resize",this.render),Rc(this.input,!1),t(this.value)}),this.once("cancel",()=>{this.output.write(Se.cursor.show),this.output.off("resize",this.render),Rc(this.input,!1),t(ud)})})}_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=$0(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")}w0([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(`
270
- `),Rc(this.input,!1),this.rl?.close(),this.rl=void 0,this.emit(`${this.state}`,this.value),this.unsubscribe()}restoreCursor(){let t=yr(this._prevFrame,process.stdout.columns,{hard:!0,trim:!1}).split(`
271
- `).length-1;this.output.write(Se.cursor.move(-999,t*-1))}render(){let t=yr(this._render(this)??"",process.stdout.columns,{hard:!0,trim:!1});if(t!==this._prevFrame){if(this.state==="initial")this.output.write(Se.cursor.hide);else{let e=W2(this._prevFrame,t),n=fd(this.output);if(this.restoreCursor(),e){let r=Math.max(0,e.numLinesAfter-n),i=Math.max(0,e.numLinesBefore-n),s=e.lines.find((o)=>o>=r);if(s===void 0){this._prevFrame=t;return}if(e.lines.length===1){this.output.write(Se.cursor.move(0,s-i)),this.output.write(Se.erase.lines(1));let o=t.split(`
272
- `);this.output.write(o[s]),this._prevFrame=t,this.output.write(Se.cursor.move(0,o.length-s-1));return}else if(e.lines.length>1){if(r<i)s=r;else{let a=s-i;a>0&&this.output.write(Se.cursor.move(0,a))}this.output.write(Se.erase.down());let o=t.split(`
275
+ `)}function W0(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 Un{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=kR,output:r=B0,render:i,signal:s,...o}=t;this.opts=o,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=s,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(Ed);this._abortSignal.addEventListener("abort",()=>{this.state="cancel",this.close()},{once:!0})}this.rl=yR.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),jc(this.input,!0),this.output.on("resize",this.render),this.render(),this.once("submit",()=>{this.output.write(Oe.cursor.show),this.output.off("resize",this.render),jc(this.input,!1),t(this.value)}),this.once("cancel",()=>{this.output.write(Oe.cursor.show),this.output.off("resize",this.render),jc(this.input,!1),t(Ed)})})}_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=W0(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")}U0([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(`
276
+ `),jc(this.input,!1),this.rl?.close(),this.rl=void 0,this.emit(`${this.state}`,this.value),this.unsubscribe()}restoreCursor(){let t=vr(this._prevFrame,process.stdout.columns,{hard:!0,trim:!1}).split(`
277
+ `).length-1;this.output.write(Oe.cursor.move(-999,t*-1))}render(){let t=vr(this._render(this)??"",process.stdout.columns,{hard:!0,trim:!1});if(t!==this._prevFrame){if(this.state==="initial")this.output.write(Oe.cursor.hide);else{let e=SR(this._prevFrame,t),n=Md(this.output);if(this.restoreCursor(),e){let r=Math.max(0,e.numLinesAfter-n),i=Math.max(0,e.numLinesBefore-n),s=e.lines.find((o)=>o>=r);if(s===void 0){this._prevFrame=t;return}if(e.lines.length===1){this.output.write(Oe.cursor.move(0,s-i)),this.output.write(Oe.erase.lines(1));let o=t.split(`
278
+ `);this.output.write(o[s]),this._prevFrame=t,this.output.write(Oe.cursor.move(0,o.length-s-1));return}else if(e.lines.length>1){if(r<i)s=r;else{let a=s-i;a>0&&this.output.write(Oe.cursor.move(0,a))}this.output.write(Oe.erase.down());let o=t.split(`
273
279
  `).slice(s);this.output.write(o.join(`
274
- `)),this._prevFrame=t;return}}this.output.write(Se.erase.down())}this.output.write(t),this.state==="initial"&&(this.state="active"),this._prevFrame=t}}}function U2(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 K2(t,e){return(e.label??String(e.value)).toLowerCase().includes(t.toLowerCase())}function z2(t,e){if(e)return t?e:e[0]}var D2=class extends Cn{filteredOptions;multiple;isNavigating=!1;selectedValues=[];focusedValue;#e=0;#n="";#t;#s;#a;get cursor(){return this.#e}get userInputWithCursor(){if(!this.userInput)return Pc(["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}${Pc("inverse",n)}${r}`}get options(){return typeof this.#s=="function"?this.#s():this.#s}constructor(e){super(e),this.#s=e.options,this.#a=e.placeholder;let n=this.options;this.filteredOptions=[...n],this.multiple=e.multiple===!0,this.#t=typeof e.options=="function"?e.filter:e.filter??K2;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 s=n.findIndex((o)=>o.value===i);s!==-1&&(this.toggleSelected(i),this.#e=s)}this.focusedValue=this.options[this.#e]?.value,this.on("key",(i,s)=>this.#r(i,s)),this.on("userInput",(i)=>this.#i(i))}_isActionKey(e,n){return e==="\t"||this.multiple&&this.isNavigating&&n.name==="space"&&e!==void 0&&e!==""}#r(e,n){let r=n.name==="up",i=n.name==="down",s=n.name==="return",o=this.userInput===""||this.userInput==="\t",a=this.#a,c=this.options,u=a!==void 0&&a!==""&&c.some((l)=>!l.disabled&&(this.#t?this.#t(a,l):!0));if(n.name==="tab"&&o&&u){this.userInput==="\t"&&this._clearUserInput(),this._setUserInput(a,!0),this.isNavigating=!1;return}r||i?(this.#e=Fn(this.#e,r?-1:1,this.filteredOptions),this.focusedValue=this.filteredOptions[this.#e]?.value,this.multiple||(this.selectedValues=[this.focusedValue]),this.isNavigating=!0):s?this.value=z2(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])}#i(e){if(e!==this.#n){this.#n=e;let n=this.options;e&&this.#t?this.filteredOptions=n.filter((s)=>this.#t?.(e,s)):this.filteredOptions=[...n];let r=U2(this.focusedValue,this.filteredOptions);this.#e=Fn(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 dd extends Cn{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(Se.cursor.move(0,-1)),this.value=e,this.state="submit",this.close()}),this.on("cursor",()=>{this.value=!this.value})}}var q2={Y:{type:"year",len:4},M:{type:"month",len:2},D:{type:"day",len:2}};function p0(t){return[...t].map((e)=>q2[e])}function Y2(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 cd(t){return Number.parseInt((t||"0").replace(/_/g,"0"),10)||0}function Tc(t){return{year:cd(t.year),month:cd(t.month),day:cd(t.day)}}function ld(t,e){return new Date(t||2001,e||1,0).getDate()}function k0(t){let{year:e,month:n,day:r}=Tc(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 g0(t){let e=k0(t);return e?new Date(Date.UTC(e.year,e.month-1,e.day)):void 0}function J2(t,e,n,r){let i=n?{year:n.getUTCFullYear(),month:n.getUTCMonth()+1,day:n.getUTCDate()}:null,s=r?{year:r.getUTCFullYear(),month:r.getUTCMonth()+1,day:r.getUTCDate()}:null;return t==="year"?{min:i?.year??1,max:s?.year??9999}:t==="month"?{min:i&&e.year===i.year?i.month:1,max:s&&e.year===s.year?s.month:12}:{min:i&&e.year===i.year&&e.month===i.month?i.day:1,max:s&&e.year===s.year&&e.month===s.month?s.day:ld(e.year,e.month)}}class y0 extends Cn{#e;#n;#t;#s;#a;#r={segmentIndex:0,positionInSegment:0};#i=!0;#o=null;inlineError="";get segmentCursor(){return{...this.#r}}get segmentValues(){return{...this.#t}}get segments(){return this.#e}get separator(){return this.#n}get formattedValue(){return this.#f(this.#t)}#f(t){return this.#e.map((e)=>t[e.type]).join(this.#n)}#c(){this._setUserInput(this.#f(this.#t)),this._setValue(g0(this.#t)??void 0)}constructor(t){let e=t.format?{segments:p0(t.format),separator:t.separator??"/"}:Y2(t.locale),n=t.separator??e.separator,r=t.format?p0(t.format):e.segments,i=t.initialValue??t.defaultValue,s=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:"__"},o=r.map((a)=>s[a.type]).join(n);super({...t,initialUserInput:o},!1),this.#e=r,this.#n=n,this.#t=s,this.#s=t.minDate,this.#a=t.maxDate,this.#c(),this.on("cursor",(a)=>this.#m(a)),this.on("key",(a,c)=>this.#p(a,c)),this.on("finalize",()=>this.#g(t))}#u(){let t=Math.max(0,Math.min(this.#r.segmentIndex,this.#e.length-1)),e=this.#e[t];if(e)return this.#r.positionInSegment=Math.max(0,Math.min(this.#r.positionInSegment,e.len-1)),{segment:e,index:t}}#l(t){this.inlineError="",this.#o=null;let e=this.#u();e&&(this.#r.segmentIndex=Math.max(0,Math.min(this.#e.length-1,e.index+t)),this.#r.positionInSegment=0,this.#i=!0)}#d(t){let e=this.#u();if(!e)return;let{segment:n}=e,r=this.#t[n.type],i=!r||r.replace(/_/g,"")==="",s=Number.parseInt((r||"0").replace(/_/g,"0"),10)||0,o=J2(n.type,Tc(this.#t),this.#s,this.#a),a;i?a=t===1?o.min:o.max:a=Math.max(Math.min(o.max,s+t),o.min),this.#t={...this.#t,[n.type]:a.toString().padStart(n.len,"0")},this.#i=!0,this.#o=null,this.#c()}#m(t){if(t)switch(t){case"right":return this.#l(1);case"left":return this.#l(-1);case"up":return this.#d(1);case"down":return this.#d(-1)}}#p(t,e){if(e?.name==="backspace"||e?.sequence===""||e?.sequence==="\b"||t===""||t==="\b"){this.inlineError="";let n=this.#u();if(!n)return;if(!this.#t[n.segment.type].replace(/_/g,"")){this.#l(-1);return}this.#t[n.segment.type]="_".repeat(n.segment.len),this.#i=!0,this.#r.positionInSegment=0,this.#c();return}if(e?.name==="tab"){this.inlineError="";let n=this.#u();if(!n)return;let r=e.shift?-1:1,i=n.index+r;i>=0&&i<this.#e.length&&(this.#r.segmentIndex=i,this.#r.positionInSegment=0,this.#i=!0);return}if(t&&/^[0-9]$/.test(t)){let n=this.#u();if(!n)return;let{segment:r}=n,i=!this.#t[r.type].replace(/_/g,"");if(this.#i&&this.#o!==null&&!i){let d=this.#o+t,h={...this.#t,[r.type]:d},p=this.#h(h,r);if(p){this.inlineError=p,this.#o=null,this.#i=!1;return}this.inlineError="",this.#t[r.type]=d,this.#o=null,this.#i=!1,this.#c(),n.index<this.#e.length-1&&(this.#r.segmentIndex=n.index+1,this.#r.positionInSegment=0,this.#i=!0);return}this.#i&&!i&&(this.#t[r.type]="_".repeat(r.len),this.#r.positionInSegment=0),this.#i=!1,this.#o=null;let s=this.#t[r.type],o=s.indexOf("_"),a=o>=0?o:Math.min(this.#r.positionInSegment,r.len-1);if(a<0||a>=r.len)return;let c=s.slice(0,a)+t+s.slice(a+1),u=!1;if(a===0&&s==="__"&&(r.type==="month"||r.type==="day")){let d=Number.parseInt(t,10);c=`0${t}`,u=d<=(r.type==="month"?1:2)}if(r.type==="year"&&(c=(s.replace(/_/g,"")+t).padStart(r.len,"_")),!c.includes("_")){let d={...this.#t,[r.type]:c},h=this.#h(d,r);if(h){this.inlineError=h;return}}this.inlineError="",this.#t[r.type]=c;let l=c.includes("_")?void 0:k0(this.#t);if(l){let{year:d,month:h}=l,p=ld(d,h);this.#t={year:String(Math.max(0,Math.min(9999,d))).padStart(4,"0"),month:String(Math.max(1,Math.min(12,h))).padStart(2,"0"),day:String(Math.max(1,Math.min(p,l.day))).padStart(2,"0")}}this.#c();let f=c.indexOf("_");u?(this.#i=!0,this.#o=t):f>=0?this.#r.positionInSegment=f:o>=0&&n.index<this.#e.length-1?(this.#r.segmentIndex=n.index+1,this.#r.positionInSegment=0,this.#i=!0):this.#r.positionInSegment=Math.min(a+1,r.len-1)}}#h(t,e){let{month:n,day:r}=Tc(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")}#g(t){let{year:e,month:n,day:r}=Tc(this.#t);if(e&&n&&r){let i=ld(e,n);this.#t={...this.#t,day:String(Math.min(r,i)).padStart(2,"0")}}this.value=g0(this.#t)??t.defaultValue??void 0}}var V2=class extends Cn{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((s)=>s.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((s)=>({...s,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}})}},Z2=new Set(["up","down","left","right"]);class v0 extends Cn{#e=!1;#n;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===`
280
+ `)),this._prevFrame=t;return}}this.output.write(Oe.erase.down())}this.output.write(t),this.state==="initial"&&(this.state="active"),this._prevFrame=t}}}function MR(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 OR(t,e){return(e.label??String(e.value)).toLowerCase().includes(t.toLowerCase())}function xR(t,e){if(e)return t?e:e[0]}var IR=class extends Un{filteredOptions;multiple;isNavigating=!1;selectedValues=[];focusedValue;#e=0;#n="";#t;#s;#a;get cursor(){return this.#e}get userInputWithCursor(){if(!this.userInput)return Gc(["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}${Gc("inverse",n)}${r}`}get options(){return typeof this.#s=="function"?this.#s():this.#s}constructor(e){super(e),this.#s=e.options,this.#a=e.placeholder;let n=this.options;this.filteredOptions=[...n],this.multiple=e.multiple===!0,this.#t=typeof e.options=="function"?e.filter:e.filter??OR;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 s=n.findIndex((o)=>o.value===i);s!==-1&&(this.toggleSelected(i),this.#e=s)}this.focusedValue=this.options[this.#e]?.value,this.on("key",(i,s)=>this.#r(i,s)),this.on("userInput",(i)=>this.#i(i))}_isActionKey(e,n){return e==="\t"||this.multiple&&this.isNavigating&&n.name==="space"&&e!==void 0&&e!==""}#r(e,n){let r=n.name==="up",i=n.name==="down",s=n.name==="return",o=this.userInput===""||this.userInput==="\t",a=this.#a,c=this.options,u=a!==void 0&&a!==""&&c.some((l)=>!l.disabled&&(this.#t?this.#t(a,l):!0));if(n.name==="tab"&&o&&u){this.userInput==="\t"&&this._clearUserInput(),this._setUserInput(a,!0),this.isNavigating=!1;return}r||i?(this.#e=Bn(this.#e,r?-1:1,this.filteredOptions),this.focusedValue=this.filteredOptions[this.#e]?.value,this.multiple||(this.selectedValues=[this.focusedValue]),this.isNavigating=!0):s?this.value=xR(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])}#i(e){if(e!==this.#n){this.#n=e;let n=this.options;e&&this.#t?this.filteredOptions=n.filter((s)=>this.#t?.(e,s)):this.filteredOptions=[...n];let r=MR(this.focusedValue,this.filteredOptions);this.#e=Bn(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 Od extends Un{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(Oe.cursor.move(0,-1)),this.value=e,this.state="submit",this.close()}),this.on("cursor",()=>{this.value=!this.value})}}var RR={Y:{type:"year",len:4},M:{type:"month",len:2},D:{type:"day",len:2}};function _0(t){return[...t].map((e)=>RR[e])}function NR(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 vd(t){return Number.parseInt((t||"0").replace(/_/g,"0"),10)||0}function _c(t){return{year:vd(t.year),month:vd(t.month),day:vd(t.day)}}function Sd(t,e){return new Date(t||2001,e||1,0).getDate()}function K0(t){let{year:e,month:n,day:r}=_c(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 G0(t){let e=K0(t);return e?new Date(Date.UTC(e.year,e.month-1,e.day)):void 0}function TR(t,e,n,r){let i=n?{year:n.getUTCFullYear(),month:n.getUTCMonth()+1,day:n.getUTCDate()}:null,s=r?{year:r.getUTCFullYear(),month:r.getUTCMonth()+1,day:r.getUTCDate()}:null;return t==="year"?{min:i?.year??1,max:s?.year??9999}:t==="month"?{min:i&&e.year===i.year?i.month:1,max:s&&e.year===s.year?s.month:12}:{min:i&&e.year===i.year&&e.month===i.month?i.day:1,max:s&&e.year===s.year&&e.month===s.month?s.day:Sd(e.year,e.month)}}class z0 extends Un{#e;#n;#t;#s;#a;#r={segmentIndex:0,positionInSegment:0};#i=!0;#o=null;inlineError="";get segmentCursor(){return{...this.#r}}get segmentValues(){return{...this.#t}}get segments(){return this.#e}get separator(){return this.#n}get formattedValue(){return this.#f(this.#t)}#f(t){return this.#e.map((e)=>t[e.type]).join(this.#n)}#c(){this._setUserInput(this.#f(this.#t)),this._setValue(G0(this.#t)??void 0)}constructor(t){let e=t.format?{segments:_0(t.format),separator:t.separator??"/"}:NR(t.locale),n=t.separator??e.separator,r=t.format?_0(t.format):e.segments,i=t.initialValue??t.defaultValue,s=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:"__"},o=r.map((a)=>s[a.type]).join(n);super({...t,initialUserInput:o},!1),this.#e=r,this.#n=n,this.#t=s,this.#s=t.minDate,this.#a=t.maxDate,this.#c(),this.on("cursor",(a)=>this.#m(a)),this.on("key",(a,c)=>this.#p(a,c)),this.on("finalize",()=>this.#g(t))}#u(){let t=Math.max(0,Math.min(this.#r.segmentIndex,this.#e.length-1)),e=this.#e[t];if(e)return this.#r.positionInSegment=Math.max(0,Math.min(this.#r.positionInSegment,e.len-1)),{segment:e,index:t}}#l(t){this.inlineError="",this.#o=null;let e=this.#u();e&&(this.#r.segmentIndex=Math.max(0,Math.min(this.#e.length-1,e.index+t)),this.#r.positionInSegment=0,this.#i=!0)}#d(t){let e=this.#u();if(!e)return;let{segment:n}=e,r=this.#t[n.type],i=!r||r.replace(/_/g,"")==="",s=Number.parseInt((r||"0").replace(/_/g,"0"),10)||0,o=TR(n.type,_c(this.#t),this.#s,this.#a),a;i?a=t===1?o.min:o.max:a=Math.max(Math.min(o.max,s+t),o.min),this.#t={...this.#t,[n.type]:a.toString().padStart(n.len,"0")},this.#i=!0,this.#o=null,this.#c()}#m(t){if(t)switch(t){case"right":return this.#l(1);case"left":return this.#l(-1);case"up":return this.#d(1);case"down":return this.#d(-1)}}#p(t,e){if(e?.name==="backspace"||e?.sequence===""||e?.sequence==="\b"||t===""||t==="\b"){this.inlineError="";let n=this.#u();if(!n)return;if(!this.#t[n.segment.type].replace(/_/g,"")){this.#l(-1);return}this.#t[n.segment.type]="_".repeat(n.segment.len),this.#i=!0,this.#r.positionInSegment=0,this.#c();return}if(e?.name==="tab"){this.inlineError="";let n=this.#u();if(!n)return;let r=e.shift?-1:1,i=n.index+r;i>=0&&i<this.#e.length&&(this.#r.segmentIndex=i,this.#r.positionInSegment=0,this.#i=!0);return}if(t&&/^[0-9]$/.test(t)){let n=this.#u();if(!n)return;let{segment:r}=n,i=!this.#t[r.type].replace(/_/g,"");if(this.#i&&this.#o!==null&&!i){let d=this.#o+t,h={...this.#t,[r.type]:d},m=this.#h(h,r);if(m){this.inlineError=m,this.#o=null,this.#i=!1;return}this.inlineError="",this.#t[r.type]=d,this.#o=null,this.#i=!1,this.#c(),n.index<this.#e.length-1&&(this.#r.segmentIndex=n.index+1,this.#r.positionInSegment=0,this.#i=!0);return}this.#i&&!i&&(this.#t[r.type]="_".repeat(r.len),this.#r.positionInSegment=0),this.#i=!1,this.#o=null;let s=this.#t[r.type],o=s.indexOf("_"),a=o>=0?o:Math.min(this.#r.positionInSegment,r.len-1);if(a<0||a>=r.len)return;let c=s.slice(0,a)+t+s.slice(a+1),u=!1;if(a===0&&s==="__"&&(r.type==="month"||r.type==="day")){let d=Number.parseInt(t,10);c=`0${t}`,u=d<=(r.type==="month"?1:2)}if(r.type==="year"&&(c=(s.replace(/_/g,"")+t).padStart(r.len,"_")),!c.includes("_")){let d={...this.#t,[r.type]:c},h=this.#h(d,r);if(h){this.inlineError=h;return}}this.inlineError="",this.#t[r.type]=c;let l=c.includes("_")?void 0:K0(this.#t);if(l){let{year:d,month:h}=l,m=Sd(d,h);this.#t={year:String(Math.max(0,Math.min(9999,d))).padStart(4,"0"),month:String(Math.max(1,Math.min(12,h))).padStart(2,"0"),day:String(Math.max(1,Math.min(m,l.day))).padStart(2,"0")}}this.#c();let f=c.indexOf("_");u?(this.#i=!0,this.#o=t):f>=0?this.#r.positionInSegment=f:o>=0&&n.index<this.#e.length-1?(this.#r.segmentIndex=n.index+1,this.#r.positionInSegment=0,this.#i=!0):this.#r.positionInSegment=Math.min(a+1,r.len-1)}}#h(t,e){let{month:n,day:r}=_c(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")}#g(t){let{year:e,month:n,day:r}=_c(this.#t);if(e&&n&&r){let i=Sd(e,n);this.#t={...this.#t,day:String(Math.min(r,i)).padStart(2,"0")}}this.value=G0(this.#t)??t.defaultValue??void 0}}var AR=class extends Un{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((s)=>s.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((s)=>({...s,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}})}},PR=new Set(["up","down","left","right"]);class D0 extends Un{#e=!1;#n;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===`
275
281
  `?`${e}█
276
- ${r}`:`${e}${Pc("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))}#s(t){let e=this.value??"";switch(t){case"up":this._cursor=Nc(this._cursor,0,-1,e);return;case"down":this._cursor=Nc(this._cursor,0,1,e);return;case"left":this._cursor=Nc(this._cursor,-1,0,e);return;case"right":this._cursor=Nc(this._cursor,1,0,e);return}}_shouldSubmit(t,e){if(this.#n)return this.focused==="submit"?!0:(this.#t(`
282
+ ${r}`:`${e}${Gc("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))}#s(t){let e=this.value??"";switch(t){case"up":this._cursor=Lc(this._cursor,0,-1,e);return;case"down":this._cursor=Lc(this._cursor,0,1,e);return;case"left":this._cursor=Lc(this._cursor,-1,0,e);return;case"right":this._cursor=Lc(this._cursor,1,0,e);return}}_shouldSubmit(t,e){if(this.#n)return this.focused==="submit"?!0:(this.#t(`
277
283
  `),this._cursor++,!1);let n=this.#e;return this.#e=!0,n&&this.cursor===this.userInput.length?(this.userInput[this.cursor-1]===`
278
284
  `&&(this._setUserInput(this.userInput.slice(0,this.cursor-1)+this.userInput.slice(this.cursor)),this._cursor--),!0):(this.#t(`
279
- `),this._cursor++,!1)}constructor(t){let e=t.initialUserInput??t.initialValue;super({...t,initialUserInput:e},!1),e!==void 0&&(this._cursor=e.length),this.#n=t.showSubmit??!1,this.on("key",(n,r)=>{if(r?.name&&Z2.has(r.name)){this.#e=!1,this.#s(r.name);return}if(n==="\t"&&this.#n){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.#n&&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 hd extends Cn{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?Fn(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=Fn(this.cursor,-1,this.options);break;case"down":case"right":this.cursor=Fn(this.cursor,1,this.options);break;case"space":this.toggleValue();break}})}}var S0=class extends Cn{options;cursor=0;get _selectedValue(){return this.options[this.cursor]}changeValue(){let e=this._selectedValue;this.value=e===void 0?void 0:e.value}constructor(e){super(e,!1),this.options=e.options;let n=this.options.findIndex(({value:i})=>i===e.initialValue),r=n===-1?0:n;this.cursor=this.options[r]?.disabled?Fn(r,1,this.options):r,this.changeValue(),this.on("cursor",(i)=>{switch(i){case"left":case"up":this.cursor=Fn(this.cursor,-1,this.options);break;case"down":case"right":this.cursor=Fn(this.cursor,1,this.options);break}this.changeValue()})}};class md extends Cn{get userInputWithCursor(){if(this.state==="submit")return this.userInput;let t=this.userInput;if(this.cursor>=t.length)return`${this.userInput}█`;let e=t.slice(0,this.cursor),n=t.slice(this.cursor,this.cursor+1),r=t.slice(this.cursor+1);return`${e}${Pc("inverse",n)}${r}`}get cursor(){return this._cursor}constructor(t){super({...t,initialUserInput:t.initialUserInput??t.initialValue}),this.on("userInput",(e)=>{this._setValue(e)}),this.on("finalize",()=>{this.value||(this.value=t.defaultValue),this.value===void 0&&(this.value="")})}}import{styleText as M,stripVTControlCharacters as y5}from"node:util";import He from"node:process";var x0=Rl(ad(),1);function Q2(){if(He.platform!=="win32")return He.env.TERM!=="linux";return Boolean(He.env.CI)||Boolean(He.env.WT_SESSION)||Boolean(He.env.TERMINUS_SUBLIME)||He.env.ConEmuTask==="{cmd::Cmder}"||He.env.TERM_PROGRAM==="Terminus-Sublime"||He.env.TERM_PROGRAM==="vscode"||He.env.TERM==="xterm-256color"||He.env.TERM==="alacritty"||He.env.TERMINAL_EMULATOR==="JetBrains-JediTerm"}var X2=Q2();var dt=(t,e)=>X2?t:e,tN=dt("◆","*"),eN=dt("■","x"),nN=dt("▲","x"),bd=dt("◇","o"),rN=dt("┌","T"),et=dt("│","|"),Ln=dt("└","—"),M5=dt("┐","T"),O5=dt("┘","—"),pd=dt("●",">"),Fc=dt("○"," "),iN=dt("◻","[•]"),E0=dt("◼","[+]"),M0=dt("◻","[ ]"),I5=dt("▪","•"),O0=dt("─","-"),sN=dt("╮","+"),oN=dt("├","+"),aN=dt("╯","+"),cN=dt("╰","+"),x5=dt("╭","+"),uN=dt("●","•"),lN=dt("◆","*"),fN=dt("▲","!"),dN=dt("■","x"),Cc=(t)=>{switch(t){case"initial":case"active":return M("cyan",tN);case"cancel":return M("red",eN);case"error":return M("yellow",nN);case"submit":return M("green",bd)}},N0=(t)=>{switch(t){case"initial":case"active":return M("cyan",et);case"cancel":return M("red",et);case"error":return M("yellow",et);case"submit":return M("green",et)}};function R0(t,e){let n=[`${e?`${M("cyan",et)} `:""}${t.join(" • ")}`];return e&&n.push(M("cyan",Ln)),n}var I0=(t,e,n,r,i,s=!1)=>{let o=e,a=0;if(s)for(let c=r-1;c>=n;c--){let u=t[c];if(u&&(o-=u.length),a++,o<=i)break}else for(let c=n;c<r;c++){let u=t[c];if(u&&(o-=u.length),a++,o<=i)break}return{lineCount:o,removals:a}},gd=({cursor:t,options:e,style:n,output:r=process.stdout,maxItems:i=Number.POSITIVE_INFINITY,columnPadding:s=0,rowPadding:o=4})=>{let a=Hc(r)-s,c=fd(r),u=M("dim","..."),l=Math.max(c-o,0),f=Math.max(Math.min(i,l),5),d=0;t>=f-3&&(d=Math.max(Math.min(t-f+3,e.length-f),0));let h=f<e.length&&d>0,p=f<e.length&&d+f<e.length,$=Math.min(d+f,e.length),g=[],b=0;h&&b++,p&&b++;let y=d+(h?1:0),S=$-(p?1:0);for(let I=y;I<S;I++){let N=e[I],R=N?n(N,I===t):"",F=yr(R,a,{hard:!0,trim:!1}).split(`
280
- `);g.push(F),b+=F.length}if(b>l){let I=0,N=0,R=b,F=t-y,j=l,B=()=>I0(g,R,0,F,j),X=()=>I0(g,R,F+1,g.length,j,!0);h?({lineCount:R,removals:I}=B(),R>j&&(p||(j-=1),{lineCount:R,removals:N}=X())):(p||(j-=1),{lineCount:R,removals:N}=X(),R>j&&(j-=1,{lineCount:R,removals:I}=B())),I>0&&(h=!0,g.splice(0,I)),N>0&&(p=!0,g.splice(g.length-N,N))}let E=[];h&&E.push(u);for(let I of g)for(let N of I)E.push(N);return p&&E.push(u),E};var ze=(t)=>{let e=t.active??"Yes",n=t.inactive??"No";return new dd({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=`${Cc(this.state)} `,s=r?`${M("gray",et)} `:"",o=vr(t.output,t.message,s,i),a=`${r?`${M("gray",et)}
285
+ `),this._cursor++,!1)}constructor(t){let e=t.initialUserInput??t.initialValue;super({...t,initialUserInput:e},!1),e!==void 0&&(this._cursor=e.length),this.#n=t.showSubmit??!1,this.on("key",(n,r)=>{if(r?.name&&PR.has(r.name)){this.#e=!1,this.#s(r.name);return}if(n==="\t"&&this.#n){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.#n&&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 xd extends Un{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?Bn(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=Bn(this.cursor,-1,this.options);break;case"down":case"right":this.cursor=Bn(this.cursor,1,this.options);break;case"space":this.toggleValue();break}})}}var q0=class extends Un{options;cursor=0;get _selectedValue(){return this.options[this.cursor]}changeValue(){let e=this._selectedValue;this.value=e===void 0?void 0:e.value}constructor(e){super(e,!1),this.options=e.options;let n=this.options.findIndex(({value:i})=>i===e.initialValue),r=n===-1?0:n;this.cursor=this.options[r]?.disabled?Bn(r,1,this.options):r,this.changeValue(),this.on("cursor",(i)=>{switch(i){case"left":case"up":this.cursor=Bn(this.cursor,-1,this.options);break;case"down":case"right":this.cursor=Bn(this.cursor,1,this.options);break}this.changeValue()})}};class Id extends Un{get userInputWithCursor(){if(this.state==="submit")return this.userInput;let t=this.userInput;if(this.cursor>=t.length)return`${this.userInput}█`;let e=t.slice(0,this.cursor),n=t.slice(this.cursor,this.cursor+1),r=t.slice(this.cursor+1);return`${e}${Gc("inverse",n)}${r}`}get cursor(){return this._cursor}constructor(t){super({...t,initialUserInput:t.initialUserInput??t.initialValue}),this.on("userInput",(e)=>{this._setValue(e)}),this.on("finalize",()=>{this.value||(this.value=t.defaultValue),this.value===void 0&&(this.value="")})}}import{styleText as M,stripVTControlCharacters as h5}from"node:util";import Ce from"node:process";var Q0=Ll(yd(),1);function HR(){if(Ce.platform!=="win32")return Ce.env.TERM!=="linux";return Boolean(Ce.env.CI)||Boolean(Ce.env.WT_SESSION)||Boolean(Ce.env.TERMINUS_SUBLIME)||Ce.env.ConEmuTask==="{cmd::Cmder}"||Ce.env.TERM_PROGRAM==="Terminus-Sublime"||Ce.env.TERM_PROGRAM==="vscode"||Ce.env.TERM==="xterm-256color"||Ce.env.TERM==="alacritty"||Ce.env.TERMINAL_EMULATOR==="JetBrains-JediTerm"}var FR=HR();var dt=(t,e)=>FR?t:e,CR=dt("◆","*"),LR=dt("■","x"),jR=dt("▲","x"),Td=dt("◇","o"),_R=dt("┌","T"),nt=dt("│","|"),Wn=dt("└","—"),b5=dt("┐","T"),w5=dt("┘","—"),Rd=dt("●",">"),Wc=dt("○"," "),GR=dt("◻","[•]"),Y0=dt("◼","[+]"),J0=dt("◻","[ ]"),$5=dt("▪","•"),V0=dt("─","-"),BR=dt("╮","+"),UR=dt("├","+"),WR=dt("╯","+"),KR=dt("╰","+"),k5=dt("╭","+"),zR=dt("●","•"),DR=dt("◆","*"),qR=dt("▲","!"),YR=dt("■","x"),Kc=(t)=>{switch(t){case"initial":case"active":return M("cyan",CR);case"cancel":return M("red",LR);case"error":return M("yellow",jR);case"submit":return M("green",Td)}},X0=(t)=>{switch(t){case"initial":case"active":return M("cyan",nt);case"cancel":return M("red",nt);case"error":return M("yellow",nt);case"submit":return M("green",nt)}};function t$(t,e){let n=[`${e?`${M("cyan",nt)} `:""}${t.join(" • ")}`];return e&&n.push(M("cyan",Wn)),n}var Z0=(t,e,n,r,i,s=!1)=>{let o=e,a=0;if(s)for(let c=r-1;c>=n;c--){let u=t[c];if(u&&(o-=u.length),a++,o<=i)break}else for(let c=n;c<r;c++){let u=t[c];if(u&&(o-=u.length),a++,o<=i)break}return{lineCount:o,removals:a}},Nd=({cursor:t,options:e,style:n,output:r=process.stdout,maxItems:i=Number.POSITIVE_INFINITY,columnPadding:s=0,rowPadding:o=4})=>{let a=Bc(r)-s,c=Md(r),u=M("dim","..."),l=Math.max(c-o,0),f=Math.max(Math.min(i,l),5),d=0;t>=f-3&&(d=Math.max(Math.min(t-f+3,e.length-f),0));let h=f<e.length&&d>0,m=f<e.length&&d+f<e.length,$=Math.min(d+f,e.length),g=[],b=0;h&&b++,m&&b++;let y=d+(h?1:0),E=$-(m?1:0);for(let x=y;x<E;x++){let R=e[x],N=R?n(R,x===t):"",F=vr(N,a,{hard:!0,trim:!1}).split(`
286
+ `);g.push(F),b+=F.length}if(b>l){let x=0,R=0,N=b,F=t-y,_=l,B=()=>Z0(g,N,0,F,_),tt=()=>Z0(g,N,F+1,g.length,_,!0);h?({lineCount:N,removals:x}=B(),N>_&&(m||(_-=1),{lineCount:N,removals:R}=tt())):(m||(_-=1),{lineCount:N,removals:R}=tt(),N>_&&(_-=1,{lineCount:N,removals:x}=B())),x>0&&(h=!0,g.splice(0,x)),R>0&&(m=!0,g.splice(g.length-R,R))}let S=[];h&&S.push(u);for(let x of g)for(let R of x)S.push(R);return m&&S.push(u),S};var Ve=(t)=>{let e=t.active??"Yes",n=t.inactive??"No";return new Od({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=`${Kc(this.state)} `,s=r?`${M("gray",nt)} `:"",o=Er(t.output,t.message,s,i),a=`${r?`${M("gray",nt)}
281
287
  `:""}${o}
282
- `,c=this.value?e:n;switch(this.state){case"submit":{let u=r?`${M("gray",et)} `:"";return`${a}${u}${M("dim",c)}`}case"cancel":{let u=r?`${M("gray",et)} `:"";return`${a}${u}${M(["strikethrough","dim"],c)}${r?`
283
- ${M("gray",et)}`:""}`}default:{let u=r?`${M("cyan",et)} `:"",l=r?M("cyan",Ln):"";return`${a}${u}${this.value?`${M("green",pd)} ${e}`:`${M("dim",Fc)} ${M("dim",e)}`}${t.vertical?r?`
284
- ${M("cyan",et)} `:`
285
- `:` ${M("dim","/")} `}${this.value?`${M("dim",Fc)} ${M("dim",n)}`:`${M("green",pd)} ${n}`}
288
+ `,c=this.value?e:n;switch(this.state){case"submit":{let u=r?`${M("gray",nt)} `:"";return`${a}${u}${M("dim",c)}`}case"cancel":{let u=r?`${M("gray",nt)} `:"";return`${a}${u}${M(["strikethrough","dim"],c)}${r?`
289
+ ${M("gray",nt)}`:""}`}default:{let u=r?`${M("cyan",nt)} `:"",l=r?M("cyan",Wn):"";return`${a}${u}${this.value?`${M("green",Rd)} ${e}`:`${M("dim",Wc)} ${M("dim",e)}`}${t.vertical?r?`
290
+ ${M("cyan",nt)} `:`
291
+ `:` ${M("dim","/")} `}${this.value?`${M("dim",Wc)} ${M("dim",n)}`:`${M("green",Rd)} ${n}`}
286
292
  ${l}
287
- `}}}}).prompt()};var hN=[`${M("dim","↑/↓")} to navigate`,`${M("dim","Space:")} select`,`${M("dim","Enter:")} confirm`],Co=(t,e)=>t.split(`
293
+ `}}}}).prompt()};var JR=[`${M("dim","↑/↓")} to navigate`,`${M("dim","Space:")} select`,`${M("dim","Enter:")} confirm`],_o=(t,e)=>t.split(`
288
294
  `).map((n)=>e(n)).join(`
289
- `),T0=(t)=>{let e=(i,s)=>{let o=i.label??String(i.value);return s==="disabled"?`${M("gray",M0)} ${Co(o,(a)=>M(["strikethrough","gray"],a))}${i.hint?` ${M("dim",`(${i.hint??"disabled"})`)}`:""}`:s==="active"?`${M("cyan",iN)} ${o}${i.hint?` ${M("dim",`(${i.hint})`)}`:""}`:s==="selected"?`${M("green",E0)} ${Co(o,(a)=>M("dim",a))}${i.hint?` ${M("dim",`(${i.hint})`)}`:""}`:s==="cancelled"?`${Co(o,(a)=>M(["strikethrough","dim"],a))}`:s==="active-selected"?`${M("green",E0)} ${o}${i.hint?` ${M("dim",`(${i.hint})`)}`:""}`:s==="submitted"?`${Co(o,(a)=>M("dim",a))}`:`${M("dim",M0)} ${Co(o,(a)=>M("dim",a))}`},n=t.required??!0,r=t.showInstructions??!0;return new hd({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.
290
- ${M("reset",M("dim",`Press ${M(["gray","bgWhite","inverse"]," space ")} to select, ${M("gray",M("bgWhite",M("inverse"," enter ")))} to submit`))}`},render(){let i=t.withGuide??Wt.withGuide,s=vr(t.output,t.message,i?`${N0(this.state)} `:"",`${Cc(this.state)} `),o=`${i?`${M("gray",et)}
295
+ `),e$=(t)=>{let e=(i,s)=>{let o=i.label??String(i.value);return s==="disabled"?`${M("gray",J0)} ${_o(o,(a)=>M(["strikethrough","gray"],a))}${i.hint?` ${M("dim",`(${i.hint??"disabled"})`)}`:""}`:s==="active"?`${M("cyan",GR)} ${o}${i.hint?` ${M("dim",`(${i.hint})`)}`:""}`:s==="selected"?`${M("green",Y0)} ${_o(o,(a)=>M("dim",a))}${i.hint?` ${M("dim",`(${i.hint})`)}`:""}`:s==="cancelled"?`${_o(o,(a)=>M(["strikethrough","dim"],a))}`:s==="active-selected"?`${M("green",Y0)} ${o}${i.hint?` ${M("dim",`(${i.hint})`)}`:""}`:s==="submitted"?`${_o(o,(a)=>M("dim",a))}`:`${M("dim",J0)} ${_o(o,(a)=>M("dim",a))}`},n=t.required??!0,r=t.showInstructions??!0;return new xd({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.
296
+ ${M("reset",M("dim",`Press ${M(["gray","bgWhite","inverse"]," space ")} to select, ${M("gray",M("bgWhite",M("inverse"," enter ")))} to submit`))}`},render(){let i=t.withGuide??Wt.withGuide,s=Er(t.output,t.message,i?`${X0(this.state)} `:"",`${Kc(this.state)} `),o=`${i?`${M("gray",nt)}
291
297
  `:""}${s}
292
- `,a=this.value??[],c=(u,l)=>{if(u.disabled)return e(u,"disabled");let f=a.includes(u.value);return l&&f?e(u,"active-selected"):f?e(u,"selected"):e(u,l?"active":"inactive")};switch(this.state){case"submit":{let u=this.options.filter(({value:f})=>a.includes(f)).map((f)=>e(f,"submitted")).join(M("dim",", "))||M("dim","none"),l=vr(t.output,u,i?`${M("gray",et)} `:"");return`${o}${l}`}case"cancel":{let u=this.options.filter(({value:f})=>a.includes(f)).map((f)=>e(f,"cancelled")).join(M("dim",", "));if(u.trim()==="")return`${o}${M("gray",et)}`;let l=vr(t.output,u,i?`${M("gray",et)} `:"");return`${o}${l}${i?`
293
- ${M("gray",et)}`:""}`}case"error":{let u=i?`${M("yellow",et)} `:"",l=this.error.split(`
294
- `).map((h,p)=>p===0?`${i?`${M("yellow",Ln)} `:""}${M("yellow",h)}`:` ${h}`).join(`
298
+ `,a=this.value??[],c=(u,l)=>{if(u.disabled)return e(u,"disabled");let f=a.includes(u.value);return l&&f?e(u,"active-selected"):f?e(u,"selected"):e(u,l?"active":"inactive")};switch(this.state){case"submit":{let u=this.options.filter(({value:f})=>a.includes(f)).map((f)=>e(f,"submitted")).join(M("dim",", "))||M("dim","none"),l=Er(t.output,u,i?`${M("gray",nt)} `:"");return`${o}${l}`}case"cancel":{let u=this.options.filter(({value:f})=>a.includes(f)).map((f)=>e(f,"cancelled")).join(M("dim",", "));if(u.trim()==="")return`${o}${M("gray",nt)}`;let l=Er(t.output,u,i?`${M("gray",nt)} `:"");return`${o}${l}${i?`
299
+ ${M("gray",nt)}`:""}`}case"error":{let u=i?`${M("yellow",nt)} `:"",l=this.error.split(`
300
+ `).map((h,m)=>m===0?`${i?`${M("yellow",Wn)} `:""}${M("yellow",h)}`:` ${h}`).join(`
295
301
  `),f=o.split(`
296
302
  `).length,d=l.split(`
297
- `).length+1;return`${o}${u}${gd({output:t.output,options:this.options,cursor:this.cursor,maxItems:t.maxItems,columnPadding:u.length,rowPadding:f+d,style:c}).join(`
303
+ `).length+1;return`${o}${u}${Nd({output:t.output,options:this.options,cursor:this.cursor,maxItems:t.maxItems,columnPadding:u.length,rowPadding:f+d,style:c}).join(`
298
304
  ${u}`)}
299
305
  ${l}
300
- `}default:{let u=i?`${M("cyan",et)} `:"",l=o.split(`
301
- `).length,f=r?R0(hN,i):i?[M("cyan",Ln)]:[],d=f.join(`
302
- `),h=f.length+1;return`${o}${u}${gd({output:t.output,options:this.options,cursor:this.cursor,maxItems:t.maxItems,columnPadding:u.length,rowPadding:l+h,style:c}).join(`
306
+ `}default:{let u=i?`${M("cyan",nt)} `:"",l=o.split(`
307
+ `).length,f=r?t$(JR,i):i?[M("cyan",Wn)]:[],d=f.join(`
308
+ `),h=f.length+1;return`${o}${u}${Nd({output:t.output,options:this.options,cursor:this.cursor,maxItems:t.maxItems,columnPadding:u.length,rowPadding:l+h,style:c}).join(`
303
309
  ${u}`)}
304
310
  ${d}
305
- `}}}}).prompt()};var Sr={message:(t=[],{symbol:e=M("gray",et),secondarySymbol:n=M("gray",et),output:r=process.stdout,spacing:i=1,withGuide:s}={})=>{let o=[],a=s??Wt.withGuide,c=a?n:"",u=a?`${e} `:"",l=a?`${n} `:"";for(let d=0;d<i;d++)o.push(c);let f=Array.isArray(t)?t:t.split(`
306
- `);if(f.length>0){let[d,...h]=f;d.length>0?o.push(`${u}${d}`):o.push(a?e:"");for(let p of h)p.length>0?o.push(`${l}${p}`):o.push(a?n:"")}r.write(`${o.join(`
311
+ `}}}}).prompt()};var Sr={message:(t=[],{symbol:e=M("gray",nt),secondarySymbol:n=M("gray",nt),output:r=process.stdout,spacing:i=1,withGuide:s}={})=>{let o=[],a=s??Wt.withGuide,c=a?n:"",u=a?`${e} `:"",l=a?`${n} `:"";for(let d=0;d<i;d++)o.push(c);let f=Array.isArray(t)?t:t.split(`
312
+ `);if(f.length>0){let[d,...h]=f;d.length>0?o.push(`${u}${d}`):o.push(a?e:"");for(let m of h)m.length>0?o.push(`${l}${m}`):o.push(a?n:"")}r.write(`${o.join(`
307
313
  `)}
308
- `)},info:(t,e)=>{Sr.message(t,{...e,symbol:M("blue",uN)})},success:(t,e)=>{Sr.message(t,{...e,symbol:M("green",lN)})},step:(t,e)=>{Sr.message(t,{...e,symbol:M("green",bd)})},warn:(t,e)=>{Sr.message(t,{...e,symbol:M("yellow",fN)})},warning:(t,e)=>{Sr.warn(t,e)},error:(t,e)=>{Sr.message(t,{...e,symbol:M("red",dN)})}},Er=(t="",e)=>{let n=e?.output??process.stdout,r=e?.withGuide??Wt.withGuide?`${M("gray",Ln)} `:"";n.write(`${r}${M("red",t)}
314
+ `)},info:(t,e)=>{Sr.message(t,{...e,symbol:M("blue",zR)})},success:(t,e)=>{Sr.message(t,{...e,symbol:M("green",DR)})},step:(t,e)=>{Sr.message(t,{...e,symbol:M("green",Td)})},warn:(t,e)=>{Sr.message(t,{...e,symbol:M("yellow",qR)})},warning:(t,e)=>{Sr.warn(t,e)},error:(t,e)=>{Sr.message(t,{...e,symbol:M("red",YR)})}},Mr=(t="",e)=>{let n=e?.output??process.stdout,r=e?.withGuide??Wt.withGuide?`${M("gray",Wn)} `:"";n.write(`${r}${M("red",t)}
309
315
 
310
- `)},Lc=(t="",e)=>{let n=e?.output??process.stdout,r=e?.withGuide??Wt.withGuide?`${M("gray",rN)} `:"";n.write(`${r}${t}
311
- `)},Lo=(t="",e)=>{let n=e?.output??process.stdout,r=e?.withGuide??Wt.withGuide?`${M("gray",et)}
312
- ${M("gray",Ln)} `:"";n.write(`${r}${t}
316
+ `)},zc=(t="",e)=>{let n=e?.output??process.stdout,r=e?.withGuide??Wt.withGuide?`${M("gray",_R)} `:"";n.write(`${r}${t}
317
+ `)},Go=(t="",e)=>{let n=e?.output??process.stdout,r=e?.withGuide??Wt.withGuide?`${M("gray",nt)}
318
+ ${M("gray",Wn)} `:"";n.write(`${r}${t}
313
319
 
314
- `)};var mN=(t)=>t,pN=(t,e,n)=>{let r={hard:!0,trim:!1},i=yr(t,e,r).split(`
315
- `),s=i.reduce((c,u)=>Math.max(Q(u),c),0),o=i.map(n).reduce((c,u)=>Math.max(Q(u),c),0),a=e-(o-s);return yr(t,a,r)},dn=(t="",e="",n)=>{let r=n?.output??He.stdout,i=n?.withGuide??Wt.withGuide,s=n?.format??mN,o=["",...pN(t,Hc(r)-6,s).split(`
316
- `).map(s),""],a=Q(e),c=Math.max(o.reduce((d,h)=>{let p=Q(h);return p>d?p:d},0),a)+2,u=o.map((d)=>`${M("gray",et)} ${d}${" ".repeat(c-Q(d))}${M("gray",et)}`).join(`
317
- `),l=i?`${M("gray",et)}
318
- `:"",f=i?oN:cN;r.write(`${l}${M("green",bd)} ${M("reset",e)} ${M("gray",O0.repeat(Math.max(c-a-1,1))+sN)}
320
+ `)};var VR=(t)=>t,ZR=(t,e,n)=>{let r={hard:!0,trim:!1},i=vr(t,e,r).split(`
321
+ `),s=i.reduce((c,u)=>Math.max(X(u),c),0),o=i.map(n).reduce((c,u)=>Math.max(X(u),c),0),a=e-(o-s);return vr(t,a,r)},bn=(t="",e="",n)=>{let r=n?.output??Ce.stdout,i=n?.withGuide??Wt.withGuide,s=n?.format??VR,o=["",...ZR(t,Bc(r)-6,s).split(`
322
+ `).map(s),""],a=X(e),c=Math.max(o.reduce((d,h)=>{let m=X(h);return m>d?m:d},0),a)+2,u=o.map((d)=>`${M("gray",nt)} ${d}${" ".repeat(c-X(d))}${M("gray",nt)}`).join(`
323
+ `),l=i?`${M("gray",nt)}
324
+ `:"",f=i?UR:KR;r.write(`${l}${M("green",Td)} ${M("reset",e)} ${M("gray",V0.repeat(Math.max(c-a-1,1))+BR)}
319
325
  ${u}
320
- ${M("gray",f+O0.repeat(c+2)+aN)}
321
- `)};var N5={light:dt("─","-"),heavy:dt("━","="),block:dt("█","#")};var gN=[`${M("dim","↑/↓")} to navigate`,`${M("dim","Enter:")} confirm`],Ac=(t,e)=>t.includes(`
326
+ ${M("gray",f+V0.repeat(c+2)+WR)}
327
+ `)};var y5={light:dt("─","-"),heavy:dt("━","="),block:dt("█","#")};var QR=[`${M("dim","↑/↓")} to navigate`,`${M("dim","Enter:")} confirm`],Uc=(t,e)=>t.includes(`
322
328
  `)?t.split(`
323
329
  `).map((n)=>e(n)).join(`
324
- `):e(t),P0=(t)=>{let e=(r,i)=>{if(r===void 0)return"";let s=r.label??String(r.value);switch(i){case"disabled":return`${M("gray",Fc)} ${Ac(s,(o)=>M("gray",o))}${r.hint?` ${M("dim",`(${r.hint??"disabled"})`)}`:""}`;case"selected":return`${Ac(s,(o)=>M("dim",o))}`;case"active":return`${M("green",pd)} ${s}${r.hint?` ${M("dim",`(${r.hint})`)}`:""}`;case"cancelled":return`${Ac(s,(o)=>M(["strikethrough","dim"],o))}`;default:return`${M("dim",Fc)} ${Ac(s,(o)=>M("dim",o))}`}},n=t.showInstructions??!0;return new S0({options:t.options,signal:t.signal,input:t.input,output:t.output,initialValue:t.initialValue,render(){let r=t.withGuide??Wt.withGuide,i=`${Cc(this.state)} `,s=`${N0(this.state)} `,o=vr(t.output,t.message,s,i),a=`${r?`${M("gray",et)}
330
+ `):e(t),n$=(t)=>{let e=(r,i)=>{if(r===void 0)return"";let s=r.label??String(r.value);switch(i){case"disabled":return`${M("gray",Wc)} ${Uc(s,(o)=>M("gray",o))}${r.hint?` ${M("dim",`(${r.hint??"disabled"})`)}`:""}`;case"selected":return`${Uc(s,(o)=>M("dim",o))}`;case"active":return`${M("green",Rd)} ${s}${r.hint?` ${M("dim",`(${r.hint})`)}`:""}`;case"cancelled":return`${Uc(s,(o)=>M(["strikethrough","dim"],o))}`;default:return`${M("dim",Wc)} ${Uc(s,(o)=>M("dim",o))}`}},n=t.showInstructions??!0;return new q0({options:t.options,signal:t.signal,input:t.input,output:t.output,initialValue:t.initialValue,render(){let r=t.withGuide??Wt.withGuide,i=`${Kc(this.state)} `,s=`${X0(this.state)} `,o=Er(t.output,t.message,s,i),a=`${r?`${M("gray",nt)}
325
331
  `:""}${o}
326
- `;switch(this.state){case"submit":{let c=r?`${M("gray",et)} `:"",u=vr(t.output,e(this.options[this.cursor],"selected"),c);return`${a}${u}`}case"cancel":{let c=r?`${M("gray",et)} `:"",u=vr(t.output,e(this.options[this.cursor],"cancelled"),c);return`${a}${u}${r?`
327
- ${M("gray",et)}`:""}`}default:{let c=r?`${M("cyan",et)} `:"",u=a.split(`
328
- `).length,l=n?R0(gN,r):r?[M("cyan",Ln)]:[],f=l.join(`
329
- `),d=l.length+1;return`${a}${c}${gd({output:t.output,cursor:this.cursor,options:this.options,maxItems:t.maxItems,columnPadding:c.length,rowPadding:u+d,style:(h,p)=>e(h,h.disabled?"disabled":p?"active":"inactive")}).join(`
332
+ `;switch(this.state){case"submit":{let c=r?`${M("gray",nt)} `:"",u=Er(t.output,e(this.options[this.cursor],"selected"),c);return`${a}${u}`}case"cancel":{let c=r?`${M("gray",nt)} `:"",u=Er(t.output,e(this.options[this.cursor],"cancelled"),c);return`${a}${u}${r?`
333
+ ${M("gray",nt)}`:""}`}default:{let c=r?`${M("cyan",nt)} `:"",u=a.split(`
334
+ `).length,l=n?t$(QR,r):r?[M("cyan",Wn)]:[],f=l.join(`
335
+ `),d=l.length+1;return`${a}${c}${Nd({output:t.output,cursor:this.cursor,options:this.options,maxItems:t.maxItems,columnPadding:c.length,rowPadding:u+d,style:(h,m)=>e(h,h.disabled?"disabled":m?"active":"inactive")}).join(`
330
336
  ${c}`)}
331
337
  ${f}
332
- `}}}}).prompt()};var R5=`${M("gray",et)} `;var wd=(t)=>new md({validate:t.validate,placeholder:t.placeholder,defaultValue:t.defaultValue,initialValue:t.initialValue,output:t.output,signal:t.signal,input:t.input,render(){let e=t?.withGuide??Wt.withGuide,n=`${`${e?`${M("gray",et)}
333
- `:""}${Cc(this.state)} `}${t.message}
334
- `,r=t.placeholder&&t.placeholder.length>0?M("inverse",t.placeholder[0])+M("dim",t.placeholder.slice(1)):M(["inverse","hidden"],"_"),i=this.userInput?this.userInputWithCursor:r,s=this.value??"";switch(this.state){case"error":{let o=this.error?` ${M("yellow",this.error)}`:"",a=e?`${M("yellow",et)} `:"",c=e?M("yellow",Ln):"";return`${n.trim()}
338
+ `}}}}).prompt()};var v5=`${M("gray",nt)} `;var Ad=(t)=>new Id({validate:t.validate,placeholder:t.placeholder,defaultValue:t.defaultValue,initialValue:t.initialValue,output:t.output,signal:t.signal,input:t.input,render(){let e=t?.withGuide??Wt.withGuide,n=`${`${e?`${M("gray",nt)}
339
+ `:""}${Kc(this.state)} `}${t.message}
340
+ `,r=t.placeholder&&t.placeholder.length>0?M("inverse",t.placeholder[0])+M("dim",t.placeholder.slice(1)):M(["inverse","hidden"],"_"),i=this.userInput?this.userInputWithCursor:r,s=this.value??"";switch(this.state){case"error":{let o=this.error?` ${M("yellow",this.error)}`:"",a=e?`${M("yellow",nt)} `:"",c=e?M("yellow",Wn):"";return`${n.trim()}
335
341
  ${a}${i}
336
342
  ${c}${o}
337
- `}case"submit":{let o=s?` ${M("dim",s)}`:"",a=e?M("gray",et):"";return`${n}${a}${o}`}case"cancel":{let o=s?` ${M(["strikethrough","dim"],s)}`:"",a=e?M("gray",et):"";return`${n}${a}${o}${s.trim()?`
338
- ${a}`:""}`}default:{let o=e?`${M("cyan",et)} `:"",a=e?M("cyan",Ln):"";return`${n}${o}${i}
343
+ `}case"submit":{let o=s?` ${M("dim",s)}`:"",a=e?M("gray",nt):"";return`${n}${a}${o}`}case"cancel":{let o=s?` ${M(["strikethrough","dim"],s)}`:"",a=e?M("gray",nt):"";return`${n}${a}${o}${s.trim()?`
344
+ ${a}`:""}`}default:{let o=e?`${M("cyan",nt)} `:"",a=e?M("cyan",Wn):"";return`${n}${o}${i}
339
345
  ${a}
340
- `}}}}).prompt();import{existsSync as mu,readFileSync as J$,rmSync as mh}from"node:fs";import{homedir as Ye}from"node:os";import{join as Hs}from"node:path";var H0=44,te=[{name:"Shell",lines:["«B4»~/code/demo«d» on «5»main«2» +2«3» ~1","«2»❯ «»git status -sb","«w»## «2»main«»...«1»origin/main«3» [ahead 1]","«1» M«» src/main.rs","«1»??«» notes.md","","«w»«2»❯ «»ls","«w»«B4»docs«» «B4»src«» «B4»tests«» Cargo.toml README.md","«w»","«2»❯ «»cargo test","«2» ✓«» parses config","«n»«1» ✗«» renders frame","«w»«1» ✗«» renders frame«d» expected «2»3«d», received «1»2","","«2»❯ «»echo «s»selected text«» «c» "]},{name:"Code",lines:["«d» 12 │ «5»import«» { readFile } «5»from «2»'node:fs/promises'","«d» 13 │","«d» 14 │ «8»// Read a palette and check its sixteen colors","«d» 15 │ «5»export async function «4»load«»(path: «6»string«») {","«d» 16 │ «5»const«» text = «5»await «4»readFile«»(path, «2»'utf8'«»)","«b» 17 «d»│ «5»const«» colors = «s»parse(text)«».colors ?? {}","«d» 18 │ «5»if«» (colors.ansi.length !== «3»16«») {","«d» 19 │ «5»throw new «6»Error«»(«2»'needs 16 colors'«»)","«d» 20 │ }","«d» 21 │ «5»return«» { ...colors, ratio: «c»4«3».5«» }","«d» 22 │ }"]},{name:"Diff",lines:["«2»❯ «»git diff --stat","«» src/theme.ts | 3 «2»++«1»-","«2»❯ «»git diff","«b»diff --git a/src/theme.ts b/src/theme.ts","«6»@@ -16,3 +16,4 @@«» export async function load(","«» const text = await readFile(path, 'utf8')","«1»- const colors = parse(text).colors","«2»+ const colors = parse(text).colors ?? {}","«2»+ const ratio = contrast(colors)","«2»❯ «»git log --oneline --graph -4","«3»* 3f2a1c9 («B6»HEAD -> «B2»main«3»)«» Check contrast on load","«3»* 9b04e7d«» Merge branch ansi","«1»|«5»\\","«1»| «5»* «3»51cd0aa«» Add sixteen ANSI colors","«1»|«5»/","«3»* 07be2f1 («B1»origin/main«3», «B3»tag: v1.0«3»)«» Read palette files"]},{name:"Logs",lines:["«2»❯ «»npm run dev","«B2» VITE v6.2.0«d» ready in «b»412«d» ms","«2» ➜ «b»Local«»: «6»http://localhost:5173/","«d»10:42:07 «2»INFO «» GET /api/palettes «2»200«d» 12 ms","«d»10:42:08 «2»INFO «» GET /api/themes/kita «2»200«d» 8 ms","«d»10:42:09 «3»WARN «» slow query: palettes «3»812 ms","«d»10:42:10 «4»DEBUG«» cache hit themes/kita","«d»10:42:11 «B1»ERROR«» POST /api/share «1»500«d» 41 ms","«1» Error«»: read ECONNRESET","«d» at «»TCP.onStreamRead «d»(«6»node:net:216:20«d»)","«d» at «»share «d»(«6»src/share.ts:48:11«d»)","«d»10:42:12 «2»INFO «» retry 1/3 in 200 ms"]},{name:"Monitor",lines:["«6» 1 «b»[«2»|||||||||||||«1»||«» 42.1%«b»]«6» Tasks: «b»128«», 412 thr; «B2»3«» running","«6» 2 «b»[«2»||||||«4»||«» 21.4%«b»]«6» Load average: «b»1.42 «»1.18 0.97","«6» 3 «b»[«2»||||||||||||||«1»|||||«» 71.0%«b»]«6» Uptime: «b»3 days, 04:12:55","«6» 4 «b»[«2»||«» 7.9%«b»]","«6» Mem«b»[«2»||||||||«4»||«3»||«» 6.21G/16.0G«b»]","«6» Swp«b»[«1»|«» 0.10G/2.00G«b»]","","«K2» PID USER CPU% MEM% TIME+ Command ","«s» 4127 kec 38.2 2.1 3:12.44 node dev.js ","«» 2210 kec 12.0 4.8 1:02.10 «b»ghostty","«» 3301 kec 4.4 1.2 0:05.61 «b»zsh","«» 812 «1»root«» 3.1 0.3 0:44.02 «d»kernel_task","«» 167 «1»root«» 0.9 0.1 0:12.80 «d»WindowServer"]}];function hi(t){let e=te.length;return te[(t%e+e)%e]}function jc(t,e){let n=t.split("«"),r=n[0]?[[n[0],""]]:[];for(let i of n.slice(1)){let s=i.indexOf("»"),o=i.slice(0,s),a=i.slice(s+1);if(o==="w"||o==="n"){if(o==="w"!==e>=44)return}if(a)r.push([a,o==="w"||o==="n"?"":o])}return r}import{createHash as ON}from"node:crypto";import{existsSync as Bc,readFileSync as Md,rmSync as F0}from"node:fs";import{homedir as C0}from"node:os";import{join as mi}from"node:path";function Mr(t){return[`# ${t.name} — ${t.group}${t.native?` (${t.native})`:""}`,`# ANSI: ${t.ansiSource}`]}function jn(t,e){return[`[${t}]`,`Color=${nt(e).join(",")}`,""]}function $d(t,e,n=["Wallpaper="]){let r=(i)=>Gt(i,t.background,0.5);return[...jn("Background",t.background),...jn("BackgroundFaint",t.background),...jn("BackgroundIntense",t.background),...t.ansi.slice(0,8).flatMap((i,s)=>[...jn(`Color${s}`,i),...jn(`Color${s}Faint`,r(i)),...jn(`Color${s}Intense`,t.ansi[s+8])]),...jn("Foreground",t.foreground),...jn("ForegroundFaint",r(t.foreground)),...jn("ForegroundIntense",t.foreground),"[General]","Blur=false","ColorRandomization=false",`Description=${e}`,"Opacity=1",...n,""]}var A0={left:"0",top:"0",center:"0.5",right:"1",bottom:"1"};function bN(t){if(!t||t.opacity<=0)return["Wallpaper="];let[e="center",n="center"]=t.position.split("-");return[`Wallpaper=${t.image}`,`FillStyle=${t.cover?"Crop":"Adapt"}`,`Anchor=${A0[n]??"0.5"},${A0[e]??"0.5"}`,`WallpaperOpacity=${t.opacity}`]}function kd(t,e){return[...Mr(t),"",...$d(t,`ttheme · ${t.name}`,bN(e))].join(`
341
- `)}var yd={id:"konsole",limits:"draws no OSC 4, so a tab repaints by switching color scheme",emit(t){return[{path:`konsole/${A(t.name)}.colorscheme`,content:kd(t)}]}};import{openSync as wN,writeSync as $N}from"node:fs";import{ReadStream as kN}from"node:tty";var Or=["11","10","12","17",...Array.from({length:16},(t,e)=>`4;${e}`)];function Ft(t=process.env){return Boolean(t.NO_COLOR)||t.TERM==="dumb"}function Go(t,e){return`\x1B]${Or[t]};${e}\x1B\\`}function Gn(t,e){return[t.background,t.foreground,t.cursor,t.selection,...t.ansi].map((n,r)=>e&&!e.includes(r)?"":Go(r,n)).join("")}function yN(t){return`\x1B]${t.startsWith("4;")?`104;${t.slice(2)}`:`1${t}`}\x1B\\`}function vN(t){let e=new Map;for(let n of t.split("\x1B")){let r=n.match(/^\](\d+(?:;\d+)?);(rgba?:[0-9a-fA-F/]+)/),[,i,s]=r??[];if(i&&s)e.set(i,s)}return e}function SN(t){return`#${t.slice(t.indexOf(":")+1).split("/").slice(0,3).map((n)=>n.slice(0,2).padStart(2,"0")).join("")}`}function Gc(t,e=[...t.keys()],n=!1){return e.map((r)=>{let i=t.get(r);return i?`\x1B]${r};${n?SN(i):i}\x1B\\`:yN(r)}).join("")}function _c(t,e){return`\x1B]50;ColorScheme=${t};UseCustomCursorColor=true;customCursorColor=${e}\x07`}function EN(t=Or){return`${t.map((e)=>`\x1B]${e};?\x1B\\`).join("")}\x1B[5n`}function MN(t){return t.includes("\x1B[0n")}async function vd(t=Or){let e,n;try{e=wN("/dev/tty","r+"),n=new kN(e),n.setRawMode(!0)}catch{return new Map}try{$N(e,EN(t));let r="";return await new Promise((i)=>{let s=setTimeout(i,120);n.on("data",(o)=>{if(r+=o.toString(),MN(r))clearTimeout(s),i()})}),vN(r)}finally{n.setRawMode(!1),n.destroy()}}function Od(t){if(t.NVIM)return"nvim";if(t.VIM_TERMINAL)return"vim";if(t.INSIDE_EMACS)return"emacs";return t.TERM_PROGRAM==="vscode"?"vscode":void 0}function Ut(t){if(Od(t))return"editor";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.KONSOLE_VERSION)return"konsole";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"}var ae={ghostty:{links:!0,pictures:!0,bands:!1,files:!0,moves:!0,layers:!0,paints:!0},kitty:{links:!0,pictures:!0,bands:!1,files:!0,moves:!0,layers:!0,paints:!0},iterm2:{links:!0,pictures:!0,bands:!0,files:!0,moves:!0,layers:!0,paints:!0,repaint:[0,1]},wezterm:{links:!0,pictures:!0,bands:!1,files:!0,moves:!0,layers:!1,paints:!0,wipes:!0,views:!0},alacritty:{links:!0,pictures:!1,bands:!1,files:!0,moves:!0,layers:!0,paints:!0},"windows-terminal":{links:!0,pictures:!1,bands:!1,files:!0,moves:!0,layers:!0,paints:!0},konsole:{links:!1,pictures:!0,bands:!1,files:!0,moves:!0,layers:!0,paints:!0,repaint:[0,1],hex:!0,schemes:!0},foot:{links:!0,pictures:!1,bands:!1,files:!0,moves:!0,layers:!0,paints:!0},"terminal-app":{links:!1,pictures:!1,bands:!1,files:!0,moves:!0,layers:!0,paints:!0},warp:{links:!0,pictures:!0,bands:!0,files:!1,moves:!1,layers:!1,paints:!1},editor:{links:!1,pictures:!1,bands:!1,files:!0,moves:!0,layers:!0,paints:!1},unknown:{links:!1,pictures:!1,bands:!1,files:!0,moves:!0,layers:!0,paints:!0}};function Sd(t,e,n){let r="";for(let i of t.split(`
342
- `)){let s=i.trim();if(s.startsWith("[")&&s.endsWith("]"))r=s.slice(1,-1);else if(r===e&&s.startsWith(`${n}=`))return s.slice(n.length+1)}return}function IN(t){let e=t.XDG_CONFIG_HOME??mi(C0(),".config"),n=mi(e,"konsolerc"),r=Bc(n)?Sd(Md(n,"utf8"),"Desktop Entry","DefaultProfile"):void 0;for(let i=0;i<8&&r&&r!=="FALLBACK/";i++){let s=r.endsWith(".profile")?r:`${r}.profile`,o=_0(t).map((u)=>mi(u,s)).find((u)=>Bc(u));if(!o)return!1;let a=Md(o,"utf8"),c=Sd(a,"Interaction Options","AllowEscapedLinks");if(c!==void 0)return c==="true";r=Sd(a,"General","Parent")}return!1}function L0(t){let e=Ut(t);return e==="konsole"?IN(t):ae[e].links}function Wc(t,e){let n=Ut(t),r=ae[n];return r.pictures&&!t.TMUX&&(!r.views||e.includes(n))}function Uc(t){return ae[Ut(t)].bands}function Kc(t){return ae[Ut(t)].files}function zc(t){return ae[Ut(t)].layers}function j0(t){return ae[Ut(t)].moves}function G0(t){return ae[Ut(t)].wipes===!0}function pi(t){return ae[Ut(t)].views===!0}function gi(t){return`\x1B]1337;SetUserVar=ttheme_view=${Buffer.from(t).toString("base64")}\x07`}var bi="\x1B[H\x1B[K\x1B[2H\x1B[J\x1B[H",Id=120,Ed=4,xN=40;function NN(t){let e=t.TTHEME_ITERM_SHOWN;return t.TTHEME_ITERM_SWITCH==="1"&&t.TTHEME_ITERM_DYED==="0"&&e?`ttheme · ${e}`:void 0}function RN(t,e){let n=ae.iterm2.repaint??[],r=Or.map((c,u)=>u).filter((c)=>!n.includes(c)),i=new Set(n),s=NN(t),o=[],a=()=>{for(let c of o)clearTimeout(c);o=[]};return{slots:n,paint(c){a();for(let u=0;u<r.length;u+=Ed){let l=r.slice(u,u+Ed),f=setTimeout(()=>{for(let d of l)i.add(d);e(Gn(c,l))},Id+u/Ed*xN);f.unref?.(),o.push(f)}return Gn(c,n)},wear:(c)=>Gn(c),saved:()=>vd(),restore(c){a();let u=Or.filter((l,f)=>i.has(f));return s?`\x1B[?2026h${Gc(new Map,u)}\x1B]1337;SetProfile=${s}\x07\x1B[?2026l`:Gc(c,u)},stop:a}}var TN=3,PN=/^(Wallpaper|FillStyle|Anchor|WallpaperOpacity|WallpaperFlipType)=/;function _0(t){return[t.XDG_DATA_HOME??mi(C0(),".local","share"),...(t.XDG_DATA_DIRS||"/usr/local/share:/usr/share").split(":")].map((e)=>mi(e,"konsole"))}function HN(t,e){let n=/(?:^|;)ColorScheme=([^;]+)/.exec(e)?.[1],r=n&&t.map((c)=>mi(c,`${n}.colorscheme`)).find((c)=>Bc(c));if(!r)return["Wallpaper="];let i=Md(r,"utf8").split(`
343
- `),s=i.findIndex((c)=>c.trim()==="[General]"),o=i.findIndex((c,u)=>u>s&&c.trimStart().startsWith("[")),a=s<0?[]:i.slice(s+1,o<0?void 0:o).filter((c)=>PN.test(c));return a.length>0?a:["Wallpaper="]}function AN(t,e,n){let r=_0(t),i=r[0],s=HN(r,e),o=[],a=(u,l,f)=>{let d=$d(l,`ttheme · ${u}`,s).join(`
344
- `),h=`${A("view")}.${ON("sha1").update(d).digest("hex").slice(0,10)}`,p=mi(i,`${h}.colorscheme`);if(!Bc(p))H(p,d);if(!o.includes(p))o.push(p);for(let $ of o.splice(0,Math.max(0,o.length-TN)))F0($,{force:!0});return _c(h,f)},c=()=>{for(let u of o.splice(0))F0(u,{force:!0})};return{slots:[],paint:(u)=>a(u.name,u,u.cursor),look:(u,l)=>{let[f="",d="",h="",,...p]=l;n(a(u,{background:f,foreground:d,ansi:p},h))},wear:(u,l)=>l.includes("konsole")?_c(A(u.name),u.cursor):void 0,saved:async()=>new Map,restore:()=>{return c(),`\x1B]50;${e}\x07`},stop:c}}function B0(t,e,n=(r)=>{process.stdout.write(r)}){let r=Ut(t),i=ae[r];if(!e||Ft(t)||t.TMUX||!i.paints)return;if(r==="iterm2")return RN(t,n);if(r==="konsole"&&t.TTHEME_KONSOLE_LOOK)return AN(t,t.TTHEME_KONSOLE_LOOK,n);let s=i.repaint??Or.map((a,c)=>c),o=Or.filter((a,c)=>s.includes(c));return{slots:s,paint:(a)=>Gn(a,s),wear:(a,c)=>!i.schemes?Gn(a):c.includes(r)?_c(A(a.name),a.cursor):void 0,saved:()=>vd(o),restore:(a)=>Gc(a,o,i.hex===!0)}}var Dt=["ghostty","kitty","alacritty","wezterm","iterm2","windows-terminal","warp","konsole","terminal-app"];var FN=[{section:"tab",title:"This tab"},{section:"startup",title:"New tabs"},{section:"catalog",title:"Palettes"},{section:"own",title:"Your own"},{section:"setup",title:"Setup"},{section:"support",title:"Support"}],Bo=[{name:"preview",args:[],about:"Try palettes live — focus repaints, enter edits its tone and picture and applies it, esc restores, ? lists keys",section:"tab",start:"Try every palette live — enter tunes the one you land on and applies it",shell:!0},{name:"use",args:["<palette>"],about:"Paint this tab — a unique prefix works: ttheme use ho",section:"tab",start:"Paint this tab with one — ttheme use homura",shell:!0},{name:"next",args:[],about:"Advance this tab to the next palette",section:"tab",shell:!0},{name:"default",args:["<palette>"],about:"Make a palette the one new tabs open with",section:"startup"},{name:"on",args:[],about:"Wear the default palette in new tabs again",section:"startup"},{name:"off",args:[],about:"Take the palette and picture off every tab — the terminal's own colors until `ttheme on`",section:"startup"},{name:"pin",args:["[directory|ssh:<host>]"],about:"Pick a palette for this directory, everything below it, its repository or an ssh host — cd or ssh in repaints, leaving restores",section:"tab",shell:!0},{name:"unpin",args:["[directory|ssh:<host>]"],about:"Drop a pin — this directory's, every one below it, the one above that paints it, or an ssh host's",section:"tab",shell:!0},{name:"pins",args:[],about:"Map every pinned directory as a tree in its palette's colors, every ssh host, and the pin that covers this one",section:"tab",shell:!0},{name:"config",args:[],about:"Edit settings in $EDITOR — they apply in new tabs",section:"startup",shell:!0},{name:"browse",args:[],about:"Pick palettes and markets in a live picker — shift+←/→ moves between Catalog, Installed, Markets and Errors",section:"catalog",start:"Install or drop palettes, add markets — every change applies at once on enter"},{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, catalog, installed"}}},{name:"add",args:["<palette...>"],about:"Install palettes from the catalog, or from a share code: ttheme add tt1:…",section:"catalog",flags:{market:{type:"string",value:"<source>",about:"Add this market first — a repository, a folder or official — and take bare palette names from it"}}},{name:"remove",args:["<palette...>"],about:"Uninstall palettes",section:"catalog"},{name:"update",args:[],about:"Refresh every market you added now — those with auto-update refresh on their own once a day",section:"catalog"},{name:"market",args:["[action]","[source]"],about:"The markets you added — add, remove and search them; init makes one of your own",actions:[["(none)","List the markets you added: palettes, auto-update and the last update"],["add <source>","Add one: a repository (alice/ttheme-pastel, #v1 pins a tag or branch), a folder, or official — asks whether it updates on its own"],["remove <market>","Drop one by its name (alice@pastel) — the palettes you installed from it keep working"],["search [query]","Repositories on GitHub with the ttheme-market topic"],["init [name]","Make a market of your own, <you>@<name>, in ~/.config/ttheme/market/<name> (or give a folder)"]],section:"catalog"},{name:"new",args:["<name>"],about:"Make a palette of your own, <you>@<market>/<name>, from blank in the palette editor — installed at once",section:"own",flags:{from:{type:"string",value:"<palette>",about:"Open the editor on this palette's colors instead of blank"},in:{type:"string",value:"<market>",about:"The local market to put it in, when you have more than one"}}},{name:"edit",args:["<palette>"],about:"Change one of your palettes in the palette editor — the contrast gate advises, never refuses",section:"own"},{name:"check",args:["<palette>"],about:"Measure a palette against the contrast gate and suggest colors that pass",section:"own",flags:{fix:{type:"boolean",about:"Write the suggested colors into your palette"}}},{name:"share",args:["<palette>"],about:"Print a share code — ttheme add <code> installs it anywhere, pictures included",section:"own",flags:{tone:{type:"string",value:"<tuned|original>",choices:["tuned","original"],about:"Share the palette as you tuned its colors, or as it was — asked when you tuned it and omit this"}}},{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:"wire",args:["<terminal>"],about:"Wire one more terminal into this setup, after showing what it edits — the shell offers it in a terminal that paints only through the config init would have wired",section:"setup",hidden:!0},{name:"info",args:[],about:"Print what a bug report needs — version, OS, shell, terminal and the settings you changed",section:"support"},{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:Dt,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>","[picture]"],about:"Show one of a palette's saved backgrounds, remove one, draw one in its palette's tone or its own colors (or get the other ready before it is asked for), or pass on tuning — preview calls this",section:"setup",hidden:!0},{name:"flatten",args:["<source>","<out>","<background>","<opacity>","[canvas]","[place]","[into]"],about:"Lay a picture on a background color at an opacity, placed on a canvas when given one, for Warp, which fades the window instead, and Terminal.app, which takes it written into the file its profile points at and renamed to the out — preview calls this",section:"setup",hidden:!0},{name:"bake",args:["<source>","<out>","<canvas>","<place>"],about:"Place a picture on a transparent canvas the way sips bakes preview's tuning — preview in Warp calls this",section:"setup",hidden:!0},{name:"tone",args:["<palette>"],about:"Serve a palette's tone editor over stdin and stdout — preview's palette panel runs it",section:"setup",hidden:!0},{name:"redraw",args:[],about:"Draw the background pictures again after TTHEME_BG_BLUR changed — ttheme config and preview call this",section:"setup",hidden:!0},{name:"names",args:[],about:"Download aninames' character names when its release changed and index them — any command starts this in the background once a day",section:"setup",hidden:!0}];function _o(t){let e=Object.entries(t.flags??{}).map(([n,{value:r}])=>`[--${n}${r?` ${r}`:""}]`);return[t.name,...e,...t.args].join(" ")}function xd(t,e=Math.max(...t.map(([n])=>n.length))){return t.map(([n,r])=>` ${n.padEnd(e)} ${r}`)}var CN=[["npx @kecan0406/ttheme init -y","Wire the terminals found here, no prompts"],["ttheme add homura madoka","Install two palettes"],["ttheme use homura","Paint this tab with one"],["ttheme list --json madoka","The madoka series as JSON"],["ttheme market add alice/ttheme-pastel","alice's market, alice@pastel — ttheme add alice@pastel/dusk"],["ttheme add dusk --market alice/ttheme-pastel","The same in one step"],["ttheme new rei --from rei","Your own rei, <you>@<market>/rei, to edit and share"]];function Wo(t,e=!1){let n=Bo.filter((o)=>!o.hidden&&!(e&&o.section==="setup")),r=FN.filter(({section:o})=>n.some((a)=>a.section===o)),i=[...e?["ttheme alone opens preview and browse as tabs — tab and shift+tab move between them"]:[],t?"ttheme help <command> describes one command · ttheme --version prints the version":"ttheme help <command> describes one · ttheme help all lists every command with what it does","https://kecan0406.github.io/ttheme"];if(!t){let o=n.filter((c)=>c.start),a=Math.max(...r.map(({title:c})=>c.length));return["Usage: ttheme <command>","",xt.description,"","Start here",...xd(o.map((c)=>[_o(c),c.start])),"",...r.map(({section:c,title:u})=>`${u.padEnd(a)} ${n.filter((l)=>l.section===c).map((l)=>l.name).join(" · ")}`),"",...i].join(`
345
- `)}let s=Math.max(...n.map((o)=>_o(o).length));return["Usage: ttheme <command>","",xt.description,...r.flatMap(({section:o,title:a})=>["",a,...xd(n.filter((c)=>c.section===o).map((c)=>[_o(c),c.about]),s)]),"","Examples",...xd(CN),"",...i].join(`
346
- `)}import{readFileSync as LN}from"node:fs";import{join as jN}from"node:path";var Nd="# ttheme begin",Rd="# ttheme end",Ms=/# ttheme begin\n[\s\S]*?# ttheme end\n?/;function Ir(t,e){let n=`${Nd}
346
+ `}}}}).prompt();import{existsSync as vu,readFileSync as $k,rmSync as Ih}from"node:fs";import{homedir as Xe}from"node:os";import{join as Ls}from"node:path";var r$=44,ie=[{name:"Shell",lines:["«B4»~/code/demo«d» on «5»main«2» +2«3» ~1","«2»❯ «»git status -sb","«w»## «2»main«»...«1»origin/main«3» [ahead 1]","«1» M«» src/main.rs","«1»??«» notes.md","","«w»«2»❯ «»ls","«w»«B4»docs«» «B4»src«» «B4»tests«» Cargo.toml README.md","«w»","«2»❯ «»cargo test","«2» ✓«» parses config","«n»«1» ✗«» renders frame","«w»«1» ✗«» renders frame«d» expected «2»3«d», received «1»2","","«2»❯ «»echo «s»selected text«» «c» "]},{name:"Code",lines:["«d» 12 │ «5»import«» { readFile } «5»from «2»'node:fs/promises'","«d» 13 │","«d» 14 │ «8»// Read a palette and check its sixteen colors","«d» 15 │ «5»export async function «4»load«»(path: «6»string«») {","«d» 16 │ «5»const«» text = «5»await «4»readFile«»(path, «2»'utf8'«»)","«b» 17 «d»│ «5»const«» colors = «s»parse(text)«».colors ?? {}","«d» 18 │ «5»if«» (colors.ansi.length !== «3»16«») {","«d» 19 │ «5»throw new «6»Error«»(«2»'needs 16 colors'«»)","«d» 20 │ }","«d» 21 │ «5»return«» { ...colors, ratio: «c»4«3».5«» }","«d» 22 │ }"]},{name:"Diff",lines:["«2»❯ «»git diff --stat","«» src/theme.ts | 3 «2»++«1»-","«2»❯ «»git diff","«b»diff --git a/src/theme.ts b/src/theme.ts","«6»@@ -16,3 +16,4 @@«» export async function load(","«» const text = await readFile(path, 'utf8')","«1»- const colors = parse(text).colors","«2»+ const colors = parse(text).colors ?? {}","«2»+ const ratio = contrast(colors)","«2»❯ «»git log --oneline --graph -4","«3»* 3f2a1c9 («B6»HEAD -> «B2»main«3»)«» Check contrast on load","«3»* 9b04e7d«» Merge branch ansi","«1»|«5»\\","«1»| «5»* «3»51cd0aa«» Add sixteen ANSI colors","«1»|«5»/","«3»* 07be2f1 («B1»origin/main«3», «B3»tag: v1.0«3»)«» Read palette files"]},{name:"Logs",lines:["«2»❯ «»npm run dev","«B2» VITE v6.2.0«d» ready in «b»412«d» ms","«2» ➜ «b»Local«»: «6»http://localhost:5173/","«d»10:42:07 «2»INFO «» GET /api/palettes «2»200«d» 12 ms","«d»10:42:08 «2»INFO «» GET /api/themes/kita «2»200«d» 8 ms","«d»10:42:09 «3»WARN «» slow query: palettes «3»812 ms","«d»10:42:10 «4»DEBUG«» cache hit themes/kita","«d»10:42:11 «B1»ERROR«» POST /api/share «1»500«d» 41 ms","«1» Error«»: read ECONNRESET","«d» at «»TCP.onStreamRead «d»(«6»node:net:216:20«d»)","«d» at «»share «d»(«6»src/share.ts:48:11«d»)","«d»10:42:12 «2»INFO «» retry 1/3 in 200 ms"]},{name:"Monitor",lines:["«6» 1 «b»[«2»|||||||||||||«1»||«» 42.1%«b»]«6» Tasks: «b»128«», 412 thr; «B2»3«» running","«6» 2 «b»[«2»||||||«4»||«» 21.4%«b»]«6» Load average: «b»1.42 «»1.18 0.97","«6» 3 «b»[«2»||||||||||||||«1»|||||«» 71.0%«b»]«6» Uptime: «b»3 days, 04:12:55","«6» 4 «b»[«2»||«» 7.9%«b»]","«6» Mem«b»[«2»||||||||«4»||«3»||«» 6.21G/16.0G«b»]","«6» Swp«b»[«1»|«» 0.10G/2.00G«b»]","","«K2» PID USER CPU% MEM% TIME+ Command ","«s» 4127 kec 38.2 2.1 3:12.44 node dev.js ","«» 2210 kec 12.0 4.8 1:02.10 «b»ghostty","«» 3301 kec 4.4 1.2 0:05.61 «b»zsh","«» 812 «1»root«» 3.1 0.3 0:44.02 «d»kernel_task","«» 167 «1»root«» 0.9 0.1 0:12.80 «d»WindowServer"]}];function bi(t){let e=ie.length;return ie[(t%e+e)%e]}function Dc(t,e){let n=t.split("«"),r=n[0]?[[n[0],""]]:[];for(let i of n.slice(1)){let s=i.indexOf("»"),o=i.slice(0,s),a=i.slice(s+1);if(o==="w"||o==="n"){if(o==="w"!==e>=44)return}if(a)r.push([a,o==="w"||o==="n"?"":o])}return r}import{createHash as cN}from"node:crypto";import{existsSync as Jc,readFileSync as _d,rmSync as s$}from"node:fs";import{homedir as o$}from"node:os";import{join as wi}from"node:path";function Or(t){return[`# ${t.name} — ${t.group}${t.native?` (${t.native})`:""}`,`# ANSI: ${t.ansiSource}`]}function Kn(t,e){return[`[${t}]`,`Color=${rt(e).join(",")}`,""]}function Pd(t,e,n=["Wallpaper="]){let r=(i)=>Bt(i,t.background,0.5);return[...Kn("Background",t.background),...Kn("BackgroundFaint",t.background),...Kn("BackgroundIntense",t.background),...t.ansi.slice(0,8).flatMap((i,s)=>[...Kn(`Color${s}`,i),...Kn(`Color${s}Faint`,r(i)),...Kn(`Color${s}Intense`,t.ansi[s+8])]),...Kn("Foreground",t.foreground),...Kn("ForegroundFaint",r(t.foreground)),...Kn("ForegroundIntense",t.foreground),"[General]","Blur=false","ColorRandomization=false",`Description=${e}`,"Opacity=1",...n,""]}var i$={left:"0",top:"0",center:"0.5",right:"1",bottom:"1"};function XR(t){if(!t||t.opacity<=0)return["Wallpaper="];let[e="center",n="center"]=t.position.split("-");return[`Wallpaper=${t.image}`,`FillStyle=${t.cover?"Crop":"Adapt"}`,`Anchor=${i$[n]??"0.5"},${i$[e]??"0.5"}`,`WallpaperOpacity=${t.opacity}`]}function Hd(t,e){return[...Or(t),"",...Pd(t,`ttheme · ${t.name}`,XR(e))].join(`
347
+ `)}var Fd={id:"konsole",limits:"draws no OSC 4, so a tab repaints by switching color scheme",emit(t){return[{path:`konsole/${H(t.name)}.colorscheme`,content:Hd(t)}]}};import{openSync as tN,writeSync as eN}from"node:fs";import{ReadStream as nN}from"node:tty";var xr=["11","10","12","17",...Array.from({length:16},(t,e)=>`4;${e}`)];function Lt(t=process.env){return Boolean(t.NO_COLOR)||t.TERM==="dumb"}function Uo(t,e){return`\x1B]${xr[t]};${e}\x1B\\`}function zn(t,e){return[t.background,t.foreground,t.cursor,t.selection,...t.ansi].map((n,r)=>e&&!e.includes(r)?"":Uo(r,n)).join("")}function rN(t){return`\x1B]${t.startsWith("4;")?`104;${t.slice(2)}`:`1${t}`}\x1B\\`}function iN(t){let e=new Map;for(let n of t.split("\x1B")){let r=n.match(/^\](\d+(?:;\d+)?);(rgba?:[0-9a-fA-F/]+)/),[,i,s]=r??[];if(i&&s)e.set(i,s)}return e}function sN(t){return`#${t.slice(t.indexOf(":")+1).split("/").slice(0,3).map((n)=>n.slice(0,2).padStart(2,"0")).join("")}`}function qc(t,e=[...t.keys()],n=!1){return e.map((r)=>{let i=t.get(r);return i?`\x1B]${r};${n?sN(i):i}\x1B\\`:rN(r)}).join("")}function Yc(t,e){return`\x1B]50;ColorScheme=${t};UseCustomCursorColor=true;customCursorColor=${e}\x07`}function oN(t=xr){return`${t.map((e)=>`\x1B]${e};?\x1B\\`).join("")}\x1B[5n`}function aN(t){return t.includes("\x1B[0n")}async function Cd(t=xr){let e,n;try{e=tN("/dev/tty","r+"),n=new nN(e),n.setRawMode(!0)}catch{return new Map}try{eN(e,oN(t));let r="";return await new Promise((i)=>{let s=setTimeout(i,120);n.on("data",(o)=>{if(r+=o.toString(),aN(r))clearTimeout(s),i()})}),iN(r)}finally{n.setRawMode(!1),n.destroy()}}function Gd(t){if(t.NVIM)return"nvim";if(t.VIM_TERMINAL)return"vim";if(t.INSIDE_EMACS)return"emacs";return t.TERM_PROGRAM==="vscode"?"vscode":void 0}function Kt(t){if(Gd(t))return"editor";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.KONSOLE_VERSION)return"konsole";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"}var de={ghostty:{links:!0,pictures:!0,bands:!1,files:!0,moves:!0,layers:!0,paints:!0},kitty:{links:!0,pictures:!0,bands:!1,files:!0,moves:!0,layers:!0,paints:!0},iterm2:{links:!0,pictures:!0,bands:!0,files:!0,moves:!0,layers:!0,paints:!0,repaint:[0,1]},wezterm:{links:!0,pictures:!0,bands:!1,files:!0,moves:!0,layers:!1,paints:!0,wipes:!0,views:!0},alacritty:{links:!0,pictures:!1,bands:!1,files:!0,moves:!0,layers:!0,paints:!0},"windows-terminal":{links:!0,pictures:!1,bands:!1,files:!0,moves:!0,layers:!0,paints:!0},konsole:{links:!1,pictures:!0,bands:!1,files:!0,moves:!0,layers:!0,paints:!0,repaint:[0,1],hex:!0,schemes:!0},foot:{links:!0,pictures:!1,bands:!1,files:!0,moves:!0,layers:!0,paints:!0},"terminal-app":{links:!1,pictures:!1,bands:!1,files:!0,moves:!0,layers:!0,paints:!0},warp:{links:!0,pictures:!0,bands:!0,files:!1,moves:!1,layers:!1,paints:!1},editor:{links:!1,pictures:!1,bands:!1,files:!0,moves:!0,layers:!0,paints:!1},unknown:{links:!1,pictures:!1,bands:!1,files:!0,moves:!0,layers:!0,paints:!0}};function Ld(t,e,n){let r="";for(let i of t.split(`
348
+ `)){let s=i.trim();if(s.startsWith("[")&&s.endsWith("]"))r=s.slice(1,-1);else if(r===e&&s.startsWith(`${n}=`))return s.slice(n.length+1)}return}function uN(t){let e=t.XDG_CONFIG_HOME??wi(o$(),".config"),n=wi(e,"konsolerc"),r=Jc(n)?Ld(_d(n,"utf8"),"Desktop Entry","DefaultProfile"):void 0;for(let i=0;i<8&&r&&r!=="FALLBACK/";i++){let s=r.endsWith(".profile")?r:`${r}.profile`,o=l$(t).map((u)=>wi(u,s)).find((u)=>Jc(u));if(!o)return!1;let a=_d(o,"utf8"),c=Ld(a,"Interaction Options","AllowEscapedLinks");if(c!==void 0)return c==="true";r=Ld(a,"General","Parent")}return!1}function a$(t){let e=Kt(t);return e==="konsole"?uN(t):de[e].links}function Vc(t,e){let n=Kt(t),r=de[n];return r.pictures&&!t.TMUX&&(!r.views||e.includes(n))}function Zc(t){return de[Kt(t)].bands}function Qc(t){return de[Kt(t)].files}function Xc(t){return de[Kt(t)].layers}function c$(t){return de[Kt(t)].moves}function u$(t){return de[Kt(t)].wipes===!0}function $i(t){return de[Kt(t)].views===!0}function ki(t){return`\x1B]1337;SetUserVar=ttheme_view=${Buffer.from(t).toString("base64")}\x07`}var yi="\x1B[H\x1B[K\x1B[2H\x1B[J\x1B[H",Bd=120,jd=4,lN=40;function fN(t){let e=t.TTHEME_ITERM_SHOWN;return t.TTHEME_ITERM_SWITCH==="1"&&t.TTHEME_ITERM_DYED==="0"&&e?`ttheme · ${e}`:void 0}function dN(t,e){let n=de.iterm2.repaint??[],r=xr.map((c,u)=>u).filter((c)=>!n.includes(c)),i=new Set(n),s=fN(t),o=[],a=()=>{for(let c of o)clearTimeout(c);o=[]};return{slots:n,paint(c){a();for(let u=0;u<r.length;u+=jd){let l=r.slice(u,u+jd),f=setTimeout(()=>{for(let d of l)i.add(d);e(zn(c,l))},Bd+u/jd*lN);f.unref?.(),o.push(f)}return zn(c,n)},wear:(c)=>zn(c),saved:()=>Cd(),restore(c){a();let u=xr.filter((l,f)=>i.has(f));return s?`\x1B[?2026h${qc(new Map,u)}\x1B]1337;SetProfile=${s}\x07\x1B[?2026l`:qc(c,u)},stop:a}}var hN=3,mN=/^(Wallpaper|FillStyle|Anchor|WallpaperOpacity|WallpaperFlipType)=/;function l$(t){return[t.XDG_DATA_HOME??wi(o$(),".local","share"),...(t.XDG_DATA_DIRS||"/usr/local/share:/usr/share").split(":")].map((e)=>wi(e,"konsole"))}function pN(t,e){let n=/(?:^|;)ColorScheme=([^;]+)/.exec(e)?.[1],r=n&&t.map((c)=>wi(c,`${n}.colorscheme`)).find((c)=>Jc(c));if(!r)return["Wallpaper="];let i=_d(r,"utf8").split(`
349
+ `),s=i.findIndex((c)=>c.trim()==="[General]"),o=i.findIndex((c,u)=>u>s&&c.trimStart().startsWith("[")),a=s<0?[]:i.slice(s+1,o<0?void 0:o).filter((c)=>mN.test(c));return a.length>0?a:["Wallpaper="]}function gN(t,e,n){let r=l$(t),i=r[0],s=pN(r,e),o=[],a=(u,l,f)=>{let d=Pd(l,`ttheme · ${u}`,s).join(`
350
+ `),h=`${H("view")}.${cN("sha1").update(d).digest("hex").slice(0,10)}`,m=wi(i,`${h}.colorscheme`);if(!Jc(m))P(m,d);if(!o.includes(m))o.push(m);for(let $ of o.splice(0,Math.max(0,o.length-hN)))s$($,{force:!0});return Yc(h,f)},c=()=>{for(let u of o.splice(0))s$(u,{force:!0})};return{slots:[],paint:(u)=>a(u.name,u,u.cursor),look:(u,l)=>{let[f="",d="",h="",,...m]=l;n(a(u,{background:f,foreground:d,ansi:m},h))},wear:(u,l)=>l.includes("konsole")?Yc(H(u.name),u.cursor):void 0,saved:async()=>new Map,restore:()=>{return c(),`\x1B]50;${e}\x07`},stop:c}}function f$(t,e,n=(r)=>{process.stdout.write(r)}){let r=Kt(t),i=de[r];if(!e||Lt(t)||t.TMUX||!i.paints)return;if(r==="iterm2")return dN(t,n);if(r==="konsole"&&t.TTHEME_KONSOLE_LOOK)return gN(t,t.TTHEME_KONSOLE_LOOK,n);let s=i.repaint??xr.map((a,c)=>c),o=xr.filter((a,c)=>s.includes(c));return{slots:s,paint:(a)=>zn(a,s),wear:(a,c)=>!i.schemes?zn(a):c.includes(r)?Yc(H(a.name),a.cursor):void 0,saved:()=>Cd(o),restore:(a)=>qc(a,o,i.hex===!0)}}var qt=["ghostty","kitty","alacritty","wezterm","iterm2","windows-terminal","warp","konsole","terminal-app"];var bN=[{section:"tab",title:"This tab"},{section:"startup",title:"New tabs"},{section:"catalog",title:"Palettes"},{section:"own",title:"Your own"},{section:"setup",title:"Setup"},{section:"support",title:"Support"}],Ko=[{name:"preview",args:[],about:"Try palettes live — focus repaints, enter edits its tone and picture and applies it, esc restores, ? lists keys",section:"tab",start:"Try every palette live — enter tunes the one you land on and applies it",shell:!0},{name:"use",args:["<palette>"],about:"Paint this tab — a unique prefix works: ttheme use ho",section:"tab",start:"Paint this tab with one — ttheme use homura",shell:!0},{name:"next",args:[],about:"Advance this tab to the next palette",section:"tab",shell:!0},{name:"default",args:["<palette>"],about:"Make a palette the one new tabs open with",section:"startup"},{name:"on",args:[],about:"Wear the default palette in new tabs again",section:"startup"},{name:"off",args:[],about:"Take the palette and picture off every tab — the terminal's own colors until `ttheme on`",section:"startup"},{name:"pin",args:["[directory|ssh:<host>]"],about:"Pick a palette for this directory, everything below it, its repository or an ssh host — cd or ssh in repaints, leaving restores",section:"tab",shell:!0},{name:"unpin",args:["[directory|ssh:<host>]"],about:"Drop a pin — this directory's, every one below it, the one above that paints it, or an ssh host's",section:"tab",shell:!0},{name:"pins",args:[],about:"Map every pinned directory as a tree in its palette's colors, every ssh host, and the pin that covers this one",section:"tab",shell:!0},{name:"config",args:[],about:"Edit settings in $EDITOR — they apply in new tabs",section:"startup",shell:!0},{name:"browse",args:[],about:"Pick palettes and markets in a live picker — shift+←/→ moves between Catalog, Installed, Markets and Errors",section:"catalog",start:"Install or drop palettes, add markets — every change applies at once on enter"},{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, catalog, installed"}}},{name:"add",args:["<palette...>"],about:"Install palettes from the catalog, or from a share code: ttheme add tt1:…",section:"catalog",flags:{market:{type:"string",value:"<source>",about:"Add this market first — a repository, a folder or official — and take bare palette names from it"}}},{name:"remove",args:["<palette...>"],about:"Uninstall palettes",section:"catalog"},{name:"update",args:[],about:"Refresh every market you added now — those with auto-update refresh on their own once a day",section:"catalog"},{name:"market",args:["[action]","[source]"],about:"The markets you added — add, remove and search them; init makes one of your own",actions:[["(none)","List the markets you added: palettes, auto-update and the last update"],["add <source>","Add one: a repository (alice/ttheme-pastel, #v1 pins a tag or branch), a folder, or official — asks whether it updates on its own"],["remove <market>","Drop one by its name (alice@pastel) — the palettes you installed from it keep working"],["search [query]","Repositories on GitHub with the ttheme-market topic"],["init [name]","Make a market of your own, <you>@<name>, in ~/.config/ttheme/market/<name> (or give a folder)"],["check [dir]","Check a market's folder before you push it — ttheme-market.toml, every palette, the renames and the gate; nothing is written"]],section:"catalog"},{name:"new",args:["<name>"],about:"Make a palette of your own, <you>@<market>/<name>, from blank in the palette editor — installed at once",section:"own",flags:{from:{type:"string",value:"<palette>",about:"Open the editor on this palette's colors instead of blank"},in:{type:"string",value:"<market>",about:"The local market to put it in, when you have more than one"}}},{name:"edit",args:["<palette>"],about:"Change one of your palettes in the palette editor — the contrast gate advises, never refuses",section:"own"},{name:"check",args:["<palette>"],about:"Measure a palette against the contrast gate and suggest colors that pass",section:"own",flags:{fix:{type:"boolean",about:"Write the suggested colors into your palette"}}},{name:"share",args:["<palette>"],about:"Print a share code — ttheme add <code> installs it anywhere, pictures included",section:"own",flags:{tone:{type:"string",value:"<tuned|original>",choices:["tuned","original"],about:"Share the palette as you tuned its colors, or as it was — asked when you tuned it and omit this"}}},{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:"wire",args:["<terminal>"],about:"Wire one more terminal into this setup, after showing what it edits — the shell offers it in a terminal that paints only through the config init would have wired",section:"setup",hidden:!0},{name:"info",args:[],about:"Print what a bug report needs — version, OS, shell, terminal and the settings you changed",section:"support"},{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:qt,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>","[picture]"],about:"Show one of a palette's saved backgrounds, remove one, draw one in its palette's tone or its own colors (or get the other ready before it is asked for), or pass on tuning — preview calls this",section:"setup",hidden:!0},{name:"flatten",args:["<source>","<out>","<background>","<opacity>","[canvas]","[place]","[into]"],about:"Lay a picture on a background color at an opacity, placed on a canvas when given one, for Warp, which fades the window instead, and Terminal.app, which takes it written into the file its profile points at and renamed to the out — preview calls this",section:"setup",hidden:!0},{name:"bake",args:["<source>","<out>","<canvas>","<place>"],about:"Place a picture on a transparent canvas the way sips bakes preview's tuning — preview in Warp calls this",section:"setup",hidden:!0},{name:"tone",args:["<palette>"],about:"Serve a palette's tone editor over stdin and stdout — preview's palette panel runs it",section:"setup",hidden:!0},{name:"redraw",args:[],about:"Draw the background pictures again after TTHEME_BG_BLUR changed — ttheme config and preview call this",section:"setup",hidden:!0},{name:"names",args:[],about:"Download aninames' character names when its release changed and index them — any command starts this in the background once a day",section:"setup",hidden:!0}];function Wo(t){let e=Object.entries(t.flags??{}).map(([n,{value:r}])=>`[--${n}${r?` ${r}`:""}]`);return[t.name,...e,...t.args].join(" ")}function Ud(t,e=Math.max(...t.map(([n])=>n.length))){return t.map(([n,r])=>` ${n.padEnd(e)} ${r}`)}var wN=[["npx @kecan0406/ttheme init -y","Wire the terminals found here, no prompts"],["ttheme add homura madoka","Install two palettes"],["ttheme use homura","Paint this tab with one"],["ttheme list --json madoka","The madoka series as JSON"],["ttheme market add alice/ttheme-pastel","alice's market, alice@pastel — ttheme add alice@pastel/dusk"],["ttheme add dusk --market alice/ttheme-pastel","The same in one step"],["ttheme new rei --from rei","Your own rei, <you>@<market>/rei, to edit and share"]];function zo(t,e=!1){let n=Ko.filter((o)=>!o.hidden&&!(e&&o.section==="setup")),r=bN.filter(({section:o})=>n.some((a)=>a.section===o)),i=[...e?["ttheme alone opens preview and browse as tabs — tab and shift+tab move between them"]:[],t?"ttheme help <command> describes one command · ttheme --version prints the version":"ttheme help <command> describes one · ttheme help all lists every command with what it does","https://kecan0406.github.io/ttheme"];if(!t){let o=n.filter((c)=>c.start),a=Math.max(...r.map(({title:c})=>c.length));return["Usage: ttheme <command>","",It.description,"","Start here",...Ud(o.map((c)=>[Wo(c),c.start])),"",...r.map(({section:c,title:u})=>`${u.padEnd(a)} ${n.filter((l)=>l.section===c).map((l)=>l.name).join(" · ")}`),"",...i].join(`
351
+ `)}let s=Math.max(...n.map((o)=>Wo(o).length));return["Usage: ttheme <command>","",It.description,...r.flatMap(({section:o,title:a})=>["",a,...Ud(n.filter((c)=>c.section===o).map((c)=>[Wo(c),c.about]),s)]),"","Examples",...Ud(wN),"",...i].join(`
352
+ `)}import{readFileSync as $N}from"node:fs";import{join as kN}from"node:path";var Wd="# ttheme begin",Kd="# ttheme end",Rs=/# ttheme begin\n[\s\S]*?# ttheme end\n?/;function Ir(t,e){let n=`${Wd}
347
353
  ${e}
348
- ${Rd}
349
- `;if(Ms.test(t))return t.replace(Ms,n);if(t==="")return n;return`${t.replace(/\n*$/,`
354
+ ${Kd}
355
+ `;if(Rs.test(t))return t.replace(Rs,n);if(t==="")return n;return`${t.replace(/\n*$/,`
350
356
  `)}
351
- ${n}`}function xr(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*$/,`
352
- `)}function Nr(t,e){let n=t.replace(Ms,"");return new RegExp(String.raw`^[ \t]*${e}(?:[ \t]*=|[ \t]+\S)`,"m").test(n)}function W0(t){return`source ${t}/ttheme.zsh`}var GN="# ttheme settings — uncomment a line to change it; exported variables win over this file",Os={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_MOUSE:{doc:"# clicks, the wheel and drags in preview, browse, the palette editor and find: on, or off to leave the mouse to the terminal, so a drag selects text again without a modifier (default on)",default:"on"},TTHEME_BG_BLUR:{doc:"# soften the background pictures behind the text: a blur radius in screen pixels, 0 keeps them sharp — changing it draws every picture again (default 0)",default:"0"},TTHEME_BG_COLORS:{doc:"# the colors new background pictures are drawn in: tone tints a picture in one color of its palette, original keeps its own — preview switches each picture later (default tone)",default:"tone"},TTHEME_WARP_FAST:{doc:"# Warp tab switches: on keeps Warp rereading its settings while it is in front with tabs of different palettes, so the tab you switch to shows its palette in about 0.2 s instead of 0.6 s — about 8% CPU meanwhile; off leaves it to Warp (default on)",default:"on"},TTHEME_NAMES:{doc:"# character names in every language for searching palettes and find's search box, from aninames' weekly release: on downloads them (about 7 MB) and checks once a day in the background; off leaves them as they are (default on)",default:"on"},TTHEME_MARKET_LOOKUP:{doc:"# the Markets tab in browse: on looks GitHub up by itself — the markets carrying the ttheme-market topic when the tab opens or you type, and the index of a repository you type or move onto; off waits for space (default on)",default:"on"},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 posts tagged solo, the character alone, by danbooru or zerochan; 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_MIN_SCORE:{doc:"# the lowest score find lists: off, or a number such as 5, 10, 25, 50 or 100 — danbooru, konachan and yande.re filter by it, zerochan keeps no score (default off)",default:"off"},TTHEME_FIND_MIN_SIZE:{doc:"# the shortest side a picture find lists must reach, in pixels: off, or a number such as 720, 1080, 1440, 1800 or 2560 (default off)",default:"off"},TTHEME_FIND_SITES:{doc:"# the sites find mixes in its all tab: any of danbooru, konachan, yande.re and zerochan (default all four)",default:"danbooru konachan yande.re zerochan"},TTHEME_FIND_HIDE:{doc:"# the kinds of picture find leaves out by tag: comic, monochrome, sketch, chibi, or none to keep them all (default none)",default:"none"},TTHEME_FIND_HIDE_TAGS:{doc:'# more tags find leaves out, spaced — e.g. "cosplay multiple_girls" (default none)',default:""},TTHEME_FIND_PNG:{doc:"# on lists PNG originals only — a zerochan post counts only where danbooru holds the same file (default off)",default:"off"},TTHEME_FIND_HOSTS:{doc:'# send a find site somewhere else, as key=https://host pairs — e.g. "danbooru=https://danbooru.donmai.us" (default none)',default:""}};function Uo(t){return Os[t]?.default}function Td(t,e){let n=`: \${${t}:=${e}}`;return Uo(t)===e?`# ${n}`:n}function U0(t){return new RegExp(String.raw`^#? ?: \$\{${t}[^\n]*$`,"m")}function _N(t,e){if(U0(e).test(t))return t;let n=Os[e];return`${t.replace(/\n*$/,`
357
+ ${n}`}function Rr(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*$/,`
358
+ `)}function Nr(t,e){let n=t.replace(Rs,"");return new RegExp(String.raw`^[ \t]*${e}(?:[ \t]*=|[ \t]+\S)`,"m").test(n)}function d$(t){return`source ${t}/ttheme.zsh`}var yN="# ttheme settings — uncomment a line to change it; exported variables win over this file",Ns={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_MOUSE:{doc:"# clicks, the wheel and drags in preview, browse, the palette editor and find: on, or off to leave the mouse to the terminal, so a drag selects text again without a modifier (default on)",default:"on"},TTHEME_BG_BLUR:{doc:"# soften the background pictures behind the text: a blur radius in screen pixels, 0 keeps them sharp — changing it draws every picture again (default 0)",default:"0"},TTHEME_BG_COLORS:{doc:"# the colors new background pictures are drawn in: tone tints a picture in one color of its palette, original keeps its own — preview switches each picture later (default tone)",default:"tone"},TTHEME_WARP_FAST:{doc:"# Warp tab switches: on keeps Warp rereading its settings while it is in front with tabs of different palettes, so the tab you switch to shows its palette in about 0.2 s instead of 0.6 s — about 8% CPU meanwhile; off leaves it to Warp (default on)",default:"on"},TTHEME_NAMES:{doc:"# character names in every language for searching palettes and find's search box, from aninames' weekly release: on downloads them (about 7 MB) and checks once a day in the background; off leaves them as they are (default on)",default:"on"},TTHEME_MARKET_LOOKUP:{doc:"# the Markets tab in browse: on looks GitHub up by itself — the markets carrying the ttheme-market topic when the tab opens or you type, and the palettes of a repository you type or move onto; off waits for space (default on)",default:"on"},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 posts tagged solo, the character alone, by danbooru or zerochan; 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_MIN_SCORE:{doc:"# the lowest score find lists: off, or a number such as 5, 10, 25, 50 or 100 — danbooru, konachan and yande.re filter by it, zerochan keeps no score (default off)",default:"off"},TTHEME_FIND_MIN_SIZE:{doc:"# the shortest side a picture find lists must reach, in pixels: off, or a number such as 720, 1080, 1440, 1800 or 2560 (default off)",default:"off"},TTHEME_FIND_SITES:{doc:"# the sites find mixes in its all tab: any of danbooru, konachan, yande.re and zerochan (default all four)",default:"danbooru konachan yande.re zerochan"},TTHEME_FIND_HIDE:{doc:"# the kinds of picture find leaves out by tag: comic, monochrome, sketch, chibi, or none to keep them all (default none)",default:"none"},TTHEME_FIND_HIDE_TAGS:{doc:'# more tags find leaves out, spaced — e.g. "cosplay multiple_girls" (default none)',default:""},TTHEME_FIND_PNG:{doc:"# on lists PNG originals only — a zerochan post counts only where danbooru holds the same file (default off)",default:"off"},TTHEME_FIND_HOSTS:{doc:'# send a find site somewhere else, as key=https://host pairs — e.g. "danbooru=https://danbooru.donmai.us" (default none)',default:""}};function Do(t){return Ns[t]?.default}function zd(t,e){let n=`: \${${t}:=${e}}`;return Do(t)===e?`# ${n}`:n}function h$(t){return new RegExp(String.raw`^#? ?: \$\{${t}[^\n]*$`,"m")}function vN(t,e){if(h$(e).test(t))return t;let n=Ns[e];return`${t.replace(/\n*$/,`
353
359
  `)}
354
360
  ${n.doc}
355
- ${Td(e,n.default)}
356
- `}var Dc=Object.keys(Os),BN=8;function qc(t,e){let n="";try{n=LN(jN(t,"ttheme","config.zsh"),"utf8")}catch{}return(new RegExp(String.raw`^: \$\{${e}:=([^}\n]*)\}`,"m").exec(n)?.[1]??Os[e].default).replace(/^(["'])(.*)\1$/,"$2")}function Rr(t){let e=Number(qc(t,"TTHEME_BG_BLUR"));return Number.isFinite(e)?Math.min(BN,Math.max(0,e)):0}function Yc(t){return qc(t,"TTHEME_BG_COLORS")==="original"?"original":"tone"}function Pd(){let t=Object.entries(Os).map(([e,n])=>`${n.doc}
357
- ${Td(e,n.default)}`);return`${[GN,...t].join(`
361
+ ${zd(e,n.default)}
362
+ `}var tu=Object.keys(Ns),EN=8;function eu(t,e){let n="";try{n=$N(kN(t,"ttheme","config.zsh"),"utf8")}catch{}return(new RegExp(String.raw`^: \$\{${e}:=([^}\n]*)\}`,"m").exec(n)?.[1]??Ns[e].default).replace(/^(["'])(.*)\1$/,"$2")}function Tr(t){let e=Number(eu(t,"TTHEME_BG_BLUR"));return Number.isFinite(e)?Math.min(EN,Math.max(0,e)):0}function nu(t){return eu(t,"TTHEME_BG_COLORS")==="original"?"original":"tone"}function Dd(){let t=Object.entries(Ns).map(([e,n])=>`${n.doc}
363
+ ${zd(e,n.default)}`);return`${[yN,...t].join(`
358
364
 
359
365
  `)}
360
- `}function Jc(t,e,n){let r=Td(e,n),i=U0(e);if(i.test(t))return t.replace(i,r);return`${t.replace(/\n*$/,`
366
+ `}function ru(t,e,n){let r=zd(e,n),i=h$(e);if(i.test(t))return t.replace(i,r);return`${t.replace(/\n*$/,`
361
367
  `)}
362
368
  ${r}
363
- `}function K0(t){if(t==="")return Pd();return Object.keys(Os).reduce(_N,t)}var Vc=/["$`\\]/;function WN(t){return t.replace(/_\([^)]*\)$/,"").replaceAll("_"," ")}function Hd(t,e,n=[],r={}){for(let l of t)for(let f of[l.name,l.group,l.native??"",...l.nativeNames??[],l.ansiSource])if(Vc.test(f))throw Error(`${l.name}: "${f}" contains a character that breaks zsh quoting`);let i=Math.max(0,...t.map((l)=>l.name.length)),s=(l,f)=>` ${l.name.padEnd(i)} "${f}"`,o=(l)=>l.map((f)=>f.name).join(" "),a=Et(t),c=(l)=>`'${l.replaceAll("'","'\\''")}'`,u=Bo.filter((l)=>l.section!=="setup"&&!l.hidden);return["# Generated by `mise run build` — do not edit.","# Source of truth: themes/*.toml in the ttheme repo.","",`typeset -g TTHEME_VERSION=${xt.version}`,"",'# the palette new tabs open with, which the iTerm2 "ttheme · default" profile wears',`typeset -g TTHEME_STARTUP=${e??""}`,"","# the terminals ttheme is wired into: a picture change reaches every one of them, from whichever runs the shell",`typeset -ga TTHEME_TERMINALS=(${n.join(" ")})`,...Object.keys(r).length>0?["","# what a wired terminal's adapter needs to know of it (src/terminals/)",...Object.entries(r).map(([l,f])=>`typeset -g ${l}=${c(f)}`)]:[],"","# the commands the shell layer knows (src/verbs.ts): help, completion and argument checks read them",`typeset -ga TTHEME_VERBS=(${u.map((l)=>l.name).join(" ")})`,`typeset -ga TTHEME_TAB_VERBS=(${u.filter((l)=>l.section==="tab").map((l)=>l.name).join(" ")})`,`typeset -ga TTHEME_SHELL_VERBS=(${u.filter((l)=>l.shell).map((l)=>l.name).join(" ")})`,"typeset -gA TTHEME_VERB_ARGS=(",...u.map((l)=>` ${l.name} ${c(l.args.join(" "))}`),")","typeset -gA TTHEME_VERB_ABOUT=(",...u.map((l)=>` ${l.name} ${c(l.about)}`),")",`typeset -g TTHEME_HELP=${c(Wo(!1,!0))}`,`typeset -g TTHEME_HELP_ALL=${c(Wo(!0,!0))}`,"","# the screens the bare ttheme switches between (src/hub.ts): the exit status of a screen run by the CLI says where it went",`typeset -ga TTHEME_HUB_TABS=(${An.map((l)=>l.name).join(" ")})`,`typeset -ga TTHEME_HUB_TITLES=(${An.map((l)=>l.title).join(" ")})`,`typeset -gi TTHEME_HUB_CLOSED=${Oc} TTHEME_HUB_SWITCH=${Ic}`,"","# the settings config.zsh holds, handed to the CLI on every call",`typeset -ga TTHEME_SETTINGS=(${Dc.join(" ")})`,"","# seed for `ttheme config` when no config.zsh exists yet",`typeset -g TTHEME_CONFIG_TEMPLATE='${Pd().trimEnd().replaceAll("'","'\\''")}'`,"","typeset -gA TTHEME_PALETTE=(",...t.map((l)=>s(l,[l.background,l.foreground,l.cursor,l.selection,...l.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(a)})`,"","# the same palettes by series name, then palette name: TTHEME_SORT=abc lists them this way",`typeset -ga TTHEME_ABC=(${o(ai(a))})`,"","typeset -gA TTHEME_GROUP=(",...t.map((l)=>s(l,l.group)),")","","# the catalog a market palette sits in — the folder under the market's palettes/, one level below the market in every list","typeset -gA TTHEME_CATALOG=(",...t.filter((l)=>l.catalog).map((l)=>s(l,l.catalog??"")),")","","# original-language title, rendered dim next to the group","typeset -gA TTHEME_NATIVE=(",...t.filter((l)=>l.native).map((l)=>s(l,l.native??"")),")","","# the character's names in its original language, |-separated, and as its booru tag spells it: preview searches both","typeset -gA TTHEME_NATIVE_NAMES=(",...t.filter((l)=>l.nativeNames).map((l)=>s(l,(l.nativeNames??[]).join("|"))),")","typeset -gA TTHEME_CHARACTER=(",...t.filter((l)=>l.booru&&!Vc.test(l.booru)).map((l)=>s(l,WN(l.booru??""))),")","","# the example scenes preview draws beside the list (src/scenes.ts), each line as «role»text runs",`typeset -ga TTHEME_SCENES=(${te.map((l)=>l.name).join(" ")})`,...te.flatMap((l,f)=>[`typeset -ga TTHEME_SCENE_${f+1}=(`,...l.lines.map((d)=>` ${c(d)}`),")"]),"","# each booru's ANSI color, which marks a link to one of its posts",`typeset -gA TTHEME_SITE_ANSI=(${Y.map((l)=>`${l.name} ${l.ansi}`).join(" ")})`,"","# the terminals that open OSC 8 links (src/terminal.ts)",`typeset -ga TTHEME_LINKS=(${Object.entries(ae).flatMap(([l,f])=>f.links?[l]:[]).join(" ")})`,"","# the six colors a list row shows: foreground, the signature, then red and green","typeset -gA TTHEME_SWATCH=(",...t.map((l)=>s(l,oc(l).join(" "))),")","","# where each palette's 16 ANSI colors came from","typeset -gA TTHEME_SRC=(",...t.map((l)=>s(l,l.ansiSource)),")",""].join(`
364
- `)}function z0(t){let e=Object.entries(t).flatMap(([r,i])=>{let s=i.filter((o)=>!Vc.test(o)&&!o.includes("|"));return s.length>0&&!Vc.test(r)?[[r,s.join("|")]]:[]}),n=Math.max(0,...e.map(([r])=>r.length));return["# the character's other names in every language, |-separated, from the aninames index in the cache: preview reads this when it opens and searches them too","typeset -gA TTHEME_ALIASES=(",...e.map(([r,i])=>` ${r.padEnd(n)} "${i}"`),")",""].join(`
365
- `)}var Ad={id:"shell",emitShared(t){return[{path:"shell/palettes.zsh",content:Hd(t.map(Te))}]}};import{execFileSync as UN}from"node:child_process";import{existsSync as D0,readdirSync as KN,readFileSync as zN}from"node:fs";import{join as q0}from"node:path";function it(t){return D0(t)?zN(t,"utf8"):""}function Tt(t,e){return t.startsWith(`${e}/`)?`~${t.slice(e.length)}`:t}function Zc(t){return[...new Set(t.split(`
366
- `).map((e)=>e.split(/[ =]/)[0]))].join(", ")}function hn(t,e){let n=it(t),r=e(n);return r===n?[]:[{file:t,content:r}]}function Ko(t){return process.env.XDG_DATA_HOME??q0(t,".local","share")}function Is(t){return D0(t)?KN(t).flatMap((e)=>e.startsWith(A(""))?[q0(t,e)]:[]):[]}function Fd(t,e){if(!t.shelf)return[];let n=`${[t.id,t.shelf.from].filter(Boolean).join("/")}/`;return(t.emitter.emit?.(e)??[]).flatMap((r)=>{let i=r.path.startsWith(n)?r.path.slice(n.length):"";return i!==""&&!i.includes("/")?[{file:i,content:r.content}]:[]})}function De(){return{platform:process.platform,env:process.env,run:(t,e)=>{try{return UN(t,[...e],{encoding:"utf8",stdio:["ignore","pipe","ignore"],timeout:5000}).trim()}catch{return}}}}import{existsSync as o$}from"node:fs";import{join as Xc}from"node:path";var DN=["black","red","green","yellow","blue","magenta","cyan","white"];function Y0(t,e){return[t,...DN.map((n,r)=>`${n} = '${e[r]}'`),""].join(`
367
- `)}var Cd={id:"alacritty",limits:"no runtime color API (OSC only)",emit(t){let e=[...Mr(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}'`,"",Y0("[colors.normal]",t.ansi.slice(0,8)),Y0("[colors.bright]",t.ansi.slice(8,16))].join(`
368
- `);return[{path:`alacritty/themes/${A(t.name)}.toml`,content:e}]}};var Ld={id:"ghostty",emit(t){let e=[...Mr(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}`),"","macos-icon = custom-style",`macos-icon-ghost-color = ${t.ghostty.iconGhost}`,`macos-icon-screen-color = ${t.ghostty.iconScreen.join(",")}`,"macos-icon-frame = chrome",""].join(`
369
- `);return[{path:`ghostty/themes/${A(t.name)}`,content:e}]}};function Tr(t){let[e,n,r]=nt(t);return{"Alpha Component":1,"Blue Component":r/255,"Color Space":"P3","Green Component":n/255,"Red Component":e/255}}function V0(t){return{...Object.fromEntries(t.ansi.map((e,n)=>[`Ansi ${n} Color`,Tr(e)])),"Background Color":Tr(t.background),"Bold Color":Tr(t.foreground),"Cursor Color":Tr(t.cursor),"Cursor Text Color":Tr(t.background),"Foreground Color":Tr(t.foreground),"Selected Text Color":Tr(t.foreground),"Selection Color":Tr(t.selectionBackground)}}function J0(t){return t?{"Background Image Location":t.image,"Background Image Mode":t.cover?2:3,Blend:t.opacity}:{"Background Image Location":""}}function Z0(t,e,n,r,i=!1){let s=(c,u)=>({Name:`ttheme · ${u}`,Guid:A(u),...r?{"Dynamic Profile Parent GUID":r}:{},"Use Separate Colors for Light and Dark Mode":!1,...J0(e.get(c.name)),...V0(c)}),o={Name:"ttheme · default",Guid:A("default"),"Dynamic Profile Parent GUID":r,...J0(void 0)},a=[...n?[s(n,"default")]:i&&r?[o]:[],...t.map((c)=>s(c,c.name))];return`${JSON.stringify({Profiles:a},null,2)}
370
- `}function qN(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(`
371
- `)}var jd={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(V0(t)).map(([n,r])=>qN(n,r)),"</dict>","</plist>",""].join(`
372
- `);return[{path:`iterm2/${A(t.name)}.itermcolors`,content:e}]}};var Gd={id:"kitty",emit(t){let e=[...Mr(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(`
373
- `);return[{path:`kitty/themes/${A(t.name)}.conf`,content:e}]}};function Q0(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.replace('@', '--', 1).replace('/', '--', 1) + '.conf'), c):"," return None"," image = c.get('background-image', '')"," try:"," opacity = min(float(c.get('background-image-opacity', '1')), 1.0)"," except ValueError:"," opacity = 1.0"," if not image or opacity <= 0:"," return None"," return locate(image), PLACES.get(c.get('background-image-position', 'center'), 'center'), opacity","","","def fade(path, opacity):"," key = f'{path}#{opacity}'"," if key not in faded:"," from kitty.fast_data_types import load_png_data, png_from_32bit_rgba_data"," with open(path, 'rb') as f:"," rgba, width, height = load_png_data(f.read())"," data = bytearray(rgba)"," data[3::4] = data[3::4].translate(bytes(round(a * opacity) for a in range(256)))"," if len(faded) > 8:"," faded.clear()"," faded[key] = png_from_32bit_rgba_data(bytes(data), width, height)"," return key, faded[key]","","","def show(window):"," want = logo(window.user_vars.get('ttheme_shown') or '')"," if window.id in shown and shown[window.id] == want:"," return"," shown[window.id] = want"," try:"," if want is None:"," window.set_logo('')"," elif want[2] < 1:"," key, png = fade(want[0], want[2])"," window.set_logo(key, want[1], 1, png)"," else:"," window.set_logo(want[0], want[1], 1)"," except Exception:"," shown.pop(window.id, None)","","","def theme(palette):"," path = os.path.join(THEMES, 'ttheme-' + palette.replace('@', '--', 1).replace('/', '--', 1) + '.conf')"," if not palette or not os.path.exists(path):"," return None"," from kitty.colors import parse_colors"," return parse_colors([path])","","","def wear(palette):"," colors = theme(palette) if worn.get('startup') != palette else None"," if colors is None:"," return"," from kitty.colors import patch_colors"," patch_colors(colors[0], colors[1], True, ())"," worn['startup'] = palette","","","def rewear(boss):"," from kitty.colors import patch_colors"," for window in tuple(boss.all_windows):"," colors = theme(window.user_vars.get('ttheme_worn') or '')"," if colors is not None:"," patch_colors(colors[0], colors[1], False, (window,))","","","def on_load(boss, data):"," if getattr(boss, 'ttheme_rewears', False):"," return"," load = boss.load_config_file",""," def reload(*args, **kwargs):"," load(*args, **kwargs)"," worn.pop('startup', None)"," rewear(boss)",""," boss.load_config_file = reload"," boss.ttheme_rewears = True","","","def on_set_user_var(boss, window, data):"," if data['key'] == 'ttheme_shown':"," show(window)"," elif data['key'] == 'ttheme_startup':"," wear(data['value'] or '')","","","def on_focus_change(boss, window, data):"," if data['focused']:"," show(window)","","","def on_close(boss, window, data):"," shown.pop(window.id, None)",""].join(`
374
- `)}function YN(t){let[e]=t;if(!e)throw Error("manifest needs at least one theme");return{...ps(),palettes:t.map(Te)}}var _d={id:"meta",emitShared(t){return[{path:"manifest.json",content:`${JSON.stringify(YN(t),null,2)}
375
- `}]}};var Bd={id:"terminal-app",limits:"profiles go into its own settings at init, so the archive carries none"};import{createHash as JN}from"node:crypto";var VN=["black","red","green","yellow","blue","magenta","cyan","white"];function X0(t,e){return[` ${t}:`,...VN.map((n,r)=>` ${n}: "${e[r]}"`)]}function ZN(t,e,n){let r=JN("sha1");for(let i of e)r.update(i);return`${A(t)}.${r.digest("hex").slice(0,8)}.${n}`}function t$(t,e,n){let r=2166136261;for(let i of Buffer.from(`${e}
376
- ${n.toLowerCase()}`,"utf8"))r=Math.imul(r^i,16777619)>>>0;return`${A(t)}.${r.toString(16).padStart(8,"0")}.png`}function zo(t,e){return e?ZN(t,[e.image,String(e$(e))],"yaml"):`${A(t)}.yaml`}function e$(t){return Math.max(0,Math.min(100,Math.round(t.opacity*100)))}function Do(t,e){return[`name: "${t.name}"`,`background: "${t.background}"`,`foreground: "${t.foreground}"`,`accent: "${t.cursor}"`,`cursor: "${t.cursor}"`,`details: ${yt(t.background)<0.18?"darker":"lighter"}`,...e?["background_image:",` path: "${e.image}"`,` opacity: ${e$(e)}`]:[],"terminal_colors:",...X0("normal",t.ansi.slice(0,8)),...X0("bright",t.ansi.slice(8,16)),""].join(`
377
- `)}var Wd={id:"warp",limits:"no selection color, and Warp paints one theme app-wide",emit(t){return[{path:`warp/themes/${zo(t.name)}`,content:Do(t)}]}};var n$=(t)=>`[${t.map((e)=>`"${e}"`).join(", ")}]`,Ud={id:"wezterm",limits:"OSC repaints per pane, pictures show per window",emit(t){let e=["[metadata]",`name = "${A(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 = ${n$(t.ansi.slice(0,8))}`,`brights = ${n$(t.ansi.slice(8,16))}`,""].join(`
378
- `);return[{path:`wezterm/colors/${A(t.name)}.toml`,content:e}]}},xs=(t)=>JSON.stringify(t);function r$(t){return["-- Generated by ttheme — rewritten on every add, remove and default; do not edit.","local wezterm = require 'wezterm'","",`local MODULE = ${xs(t.path)}`,`local COLORS = ${xs(t.colors)}`,`local BACKGROUNDS = ${xs(t.backgrounds)}`,`local STARTUP = ${t.startup?xs(A(t.startup)):"nil"}`,"local PALETTES = {",...t.palettes.map((e)=>` [${xs(e.name)}] = ${xs(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:gsub('@', '--', 1)):gsub('/', '--', 1)) .. '.conf', c) then"," return nil, 'none'"," end"," local image = c['background-image'] or ''"," local opacity = tonumber(c['background-image-opacity'] or '1') or 1"," if image == '' or opacity <= 0 then"," return nil, 'none'"," end"," local fit = c['background-image-fit'] or 'contain'"," local position = c['background-image-position'] or 'center'"," local y, x = position:match('^(%a+)-(%a+)$')"," local rep = c['background-image-repeat'] == 'true' and 'Repeat' or 'NoRepeat'"," return {"," { source = { Color = color }, width = '100%', height = '100%' },"," {"," source = { File = locate(image) },"," opacity = opacity,"," width = SIZE[fit],"," height = SIZE[fit],"," horizontal_align = X[x or 'center'],"," vertical_align = Y[y or 'center'],"," repeat_x = rep,"," repeat_y = rep,"," },"," }, table.concat({ color, image, opacity, fit, position, rep }, '|')","end","","local function framed(window, view)"," local color, image, opacity, W, H, w, h, x, y, at ="," view:match('^([^|]*)|([^|]*)|([^|]*)|(%d+)|(%d+)|(%-?%d+)|(%-?%d+)|(%-?%d+)|(%-?%d+)|(%d)$')"," if not image or image == '' or tonumber(W) == 0 or tonumber(H) == 0 then"," return nil, 'none'"," end"," local d = window:get_dimensions()"," local k = math.max(d.pixel_width / W, d.pixel_height / H)"," local n = tonumber(at) - 1"," local ax, ay = n % 3, n // 3"," local px = function(n) return string.format('%.2fpx', n) end"," return {"," { source = { Color = color }, width = '100%', height = '100%' },"," {"," source = { File = image },"," opacity = tonumber(opacity) or 1,"," width = px(w * k),"," height = px(h * k),"," horizontal_align = 'Left',"," vertical_align = 'Top',"," horizontal_offset = px(ax * (d.pixel_width - W * k) / 2 + x * k),"," vertical_offset = px(ay * (d.pixel_height - H * k) / 2 + y * k),"," repeat_x = 'NoRepeat',"," repeat_y = 'NoRepeat',"," },"," }, table.concat({ view, d.pixel_width, d.pixel_height }, '|')","end","","local shown = {}","","local function show(window, pane)"," local vars = pane:get_user_vars()"," local id = window:window_id()"," local background, key"," if vars.ttheme_view and vars.ttheme_view ~= '' then"," background, key = framed(window, vars.ttheme_view)"," elseif vars.ttheme_shown and vars.ttheme_shown ~= '' then"," background, key = layers(vars.ttheme_shown)"," elseif shown[id] == nil then"," return"," end"," 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' or name == 'ttheme_view' 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(`
379
- `)}var i$=["black","red","green","yellow","blue","purple","cyan","white"];function s$(t){return{name:A(t.name),background:t.background,foreground:t.foreground,cursorColor:t.cursor,selectionBackground:t.selectionBackground,...Object.fromEntries(i$.map((e,n)=>[e,t.ansi[n]])),...Object.fromEntries(i$.map((e,n)=>[`bright${e[0]?.toUpperCase()}${e.slice(1)}`,t.ansi[n+8]]))}}function Kd(t,e,n){let r={...e&&n?{profiles:[{updates:e,colorScheme:A(n)}]}:{},schemes:t.map(s$)};return`${JSON.stringify(r,null,2)}
380
- `}var zd={id:"windows-terminal",limits:"a picture belongs to a profile, which a pane cannot change, so none; OSC repaints per pane",emit(t){return[{path:`windows-terminal/schemes/${A(t.name)}.json`,content:`${JSON.stringify(s$(t),null,2)}
381
- `}]},emitShared(t){return[{path:"windows-terminal/ttheme.json",content:Kd(t)}]}};function QN(t){let e=t.replace(Ms,"");return/^[ \t]*\[colors[\].]/m.test(e)||/^[ \t]*colors[ \t]*[.=]/m.test(e)}var XN=/^[ \t]*\[general\][ \t]*(?:#.*)?$/m,a$=/^[ \t]*\[/m,c$=/^[ \t]*import[ \t]*=/m,tR=/^[ \t]*general[ \t]*[.=]/m;function eR(t){return t?`[general]
382
- import = ["${t}"]`:""}function Dd(t,e){let n=t.replace(Ms,""),r=XN.exec(n);if(!r){let c=n.search(a$),u=c<0?n:n.slice(0,c);if(tR.test(n)||c$.test(u))return;return Ir(t,eR(e))}let i=r.index+r[0].length,s=n.slice(i),o=s.search(a$);if(c$.test(o<0?s:s.slice(0,o)))return;let a=e?`import = ["${e}"]
369
+ `}function m$(t){if(t==="")return Dd();return Object.keys(Ns).reduce(vN,t)}var iu=/["$`\\]/;function SN(t){return t.replace(/_\([^)]*\)$/,"").replaceAll("_"," ")}function qd(t,e,n=[],r={}){for(let l of t)for(let f of[l.name,l.group,l.native??"",...l.nativeNames??[],l.ansiSource])if(iu.test(f))throw Error(`${l.name}: "${f}" contains a character that breaks zsh quoting`);let i=Math.max(0,...t.map((l)=>l.name.length)),s=(l,f)=>` ${l.name.padEnd(i)} "${f}"`,o=(l)=>l.map((f)=>f.name).join(" "),a=Mt(t),c=(l)=>`'${l.replaceAll("'","'\\''")}'`,u=Ko.filter((l)=>l.section!=="setup"&&!l.hidden);return["# Generated by `mise run build` — do not edit.","# Source of truth: themes/*.toml in the ttheme repo.","",`typeset -g TTHEME_VERSION=${It.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(" ")})`,...Object.keys(r).length>0?["","# what a wired terminal's adapter needs to know of it (src/terminals/)",...Object.entries(r).map(([l,f])=>`typeset -g ${l}=${c(f)}`)]:[],"","# the commands the shell layer knows (src/verbs.ts): help, completion and argument checks read them",`typeset -ga TTHEME_VERBS=(${u.map((l)=>l.name).join(" ")})`,`typeset -ga TTHEME_TAB_VERBS=(${u.filter((l)=>l.section==="tab").map((l)=>l.name).join(" ")})`,`typeset -ga TTHEME_SHELL_VERBS=(${u.filter((l)=>l.shell).map((l)=>l.name).join(" ")})`,"typeset -gA TTHEME_VERB_ARGS=(",...u.map((l)=>` ${l.name} ${c(l.args.join(" "))}`),")","typeset -gA TTHEME_VERB_ABOUT=(",...u.map((l)=>` ${l.name} ${c(l.about)}`),")",`typeset -g TTHEME_HELP=${c(zo(!1,!0))}`,`typeset -g TTHEME_HELP_ALL=${c(zo(!0,!0))}`,"","# the screens the bare ttheme switches between (src/hub.ts): the exit status of a screen run by the CLI says where it went",`typeset -ga TTHEME_HUB_TABS=(${Gn.map((l)=>l.name).join(" ")})`,`typeset -ga TTHEME_HUB_TITLES=(${Gn.map((l)=>l.title).join(" ")})`,`typeset -gi TTHEME_HUB_CLOSED=${Hc} TTHEME_HUB_SWITCH=${Fc}`,"","# the settings config.zsh holds, handed to the CLI on every call",`typeset -ga TTHEME_SETTINGS=(${tu.join(" ")})`,"","# seed for `ttheme config` when no config.zsh exists yet",`typeset -g TTHEME_CONFIG_TEMPLATE='${Dd().trimEnd().replaceAll("'","'\\''")}'`,"","typeset -gA TTHEME_PALETTE=(",...t.map((l)=>s(l,[l.background,l.foreground,l.cursor,l.selection,...l.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(a)})`,"","# the same palettes by series name, then palette name: TTHEME_SORT=abc lists them this way",`typeset -ga TTHEME_ABC=(${o(ui(a))})`,"","typeset -gA TTHEME_GROUP=(",...t.map((l)=>s(l,l.group)),")","","# the catalog a market palette sits in — the folder under the market's palettes/, one level below the market in every list","typeset -gA TTHEME_CATALOG=(",...t.filter((l)=>l.catalog).map((l)=>s(l,l.catalog??"")),")","","# original-language title, rendered dim next to the group","typeset -gA TTHEME_NATIVE=(",...t.filter((l)=>l.native).map((l)=>s(l,l.native??"")),")","","# the character's names in its original language, |-separated, and as its booru tag spells it: preview searches both","typeset -gA TTHEME_NATIVE_NAMES=(",...t.filter((l)=>l.nativeNames).map((l)=>s(l,(l.nativeNames??[]).join("|"))),")","typeset -gA TTHEME_CHARACTER=(",...t.filter((l)=>l.booru&&!iu.test(l.booru)).map((l)=>s(l,SN(l.booru??""))),")","","# the example scenes preview draws beside the list (src/scenes.ts), each line as «role»text runs",`typeset -ga TTHEME_SCENES=(${ie.map((l)=>l.name).join(" ")})`,...ie.flatMap((l,f)=>[`typeset -ga TTHEME_SCENE_${f+1}=(`,...l.lines.map((d)=>` ${c(d)}`),")"]),"","# each booru's ANSI color, which marks a link to one of its posts",`typeset -gA TTHEME_SITE_ANSI=(${Y.map((l)=>`${l.name} ${l.ansi}`).join(" ")})`,"","# the terminals that open OSC 8 links (src/terminal.ts)",`typeset -ga TTHEME_LINKS=(${Object.entries(de).flatMap(([l,f])=>f.links?[l]:[]).join(" ")})`,"","# the six colors a list row shows: foreground, the signature, then red and green","typeset -gA TTHEME_SWATCH=(",...t.map((l)=>s(l,hc(l).join(" "))),")","","# where each palette's 16 ANSI colors came from","typeset -gA TTHEME_SRC=(",...t.map((l)=>s(l,l.ansiSource)),")",""].join(`
370
+ `)}function p$(t){let e=Object.entries(t).flatMap(([r,i])=>{let s=i.filter((o)=>!iu.test(o)&&!o.includes("|"));return s.length>0&&!iu.test(r)?[[r,s.join("|")]]:[]}),n=Math.max(0,...e.map(([r])=>r.length));return["# the character's other names in every language, |-separated, from the aninames index in the cache: preview reads this when it opens and searches them too","typeset -gA TTHEME_ALIASES=(",...e.map(([r,i])=>` ${r.padEnd(n)} "${i}"`),")",""].join(`
371
+ `)}var Yd={id:"shell",emitShared(t){return[{path:"shell/palettes.zsh",content:qd(t.map(mn))}]}};import{execFileSync as MN}from"node:child_process";import{existsSync as g$,readdirSync as ON,readFileSync as xN}from"node:fs";import{join as b$}from"node:path";function st(t){return g$(t)?xN(t,"utf8"):""}function Tt(t,e){return t.startsWith(`${e}/`)?`~${t.slice(e.length)}`:t}function su(t){return[...new Set(t.split(`
372
+ `).map((e)=>e.split(/[ =]/)[0]))].join(", ")}function wn(t,e){let n=st(t),r=e(n);return r===n?[]:[{file:t,content:r}]}function qo(t){return process.env.XDG_DATA_HOME??b$(t,".local","share")}function Ts(t){return g$(t)?ON(t).flatMap((e)=>e.startsWith(H(""))?[b$(t,e)]:[]):[]}function Jd(t,e){if(!t.shelf)return[];let n=`${[t.id,t.shelf.from].filter(Boolean).join("/")}/`;return(t.emitter.emit?.(e)??[]).flatMap((r)=>{let i=r.path.startsWith(n)?r.path.slice(n.length):"";return i!==""&&!i.includes("/")?[{file:i,content:r.content}]:[]})}function Ze(){return{platform:process.platform,env:process.env,run:(t,e)=>{try{return MN(t,[...e],{encoding:"utf8",stdio:["ignore","pipe","ignore"],timeout:5000}).trim()}catch{return}}}}import{existsSync as N$}from"node:fs";import{join as au}from"node:path";var IN=["black","red","green","yellow","blue","magenta","cyan","white"];function w$(t,e){return[t,...IN.map((n,r)=>`${n} = '${e[r]}'`),""].join(`
373
+ `)}var Vd={id:"alacritty",limits:"no runtime color API (OSC only)",emit(t){let e=[...Or(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}'`,"",w$("[colors.normal]",t.ansi.slice(0,8)),w$("[colors.bright]",t.ansi.slice(8,16))].join(`
374
+ `);return[{path:`alacritty/themes/${H(t.name)}.toml`,content:e}]}};var Zd={id:"ghostty",emit(t){let e=[...Or(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}`),"","macos-icon = custom-style",`macos-icon-ghost-color = ${t.ghostty.iconGhost}`,`macos-icon-screen-color = ${t.ghostty.iconScreen.join(",")}`,"macos-icon-frame = chrome",""].join(`
375
+ `);return[{path:`ghostty/themes/${H(t.name)}`,content:e}]}};function Ar(t){let[e,n,r]=rt(t);return{"Alpha Component":1,"Blue Component":r/255,"Color Space":"P3","Green Component":n/255,"Red Component":e/255}}function k$(t){return{...Object.fromEntries(t.ansi.map((e,n)=>[`Ansi ${n} Color`,Ar(e)])),"Background Color":Ar(t.background),"Bold Color":Ar(t.foreground),"Cursor Color":Ar(t.cursor),"Cursor Text Color":Ar(t.background),"Foreground Color":Ar(t.foreground),"Selected Text Color":Ar(t.foreground),"Selection Color":Ar(t.selectionBackground)}}function $$(t){return t?{"Background Image Location":t.image,"Background Image Mode":t.cover?2:3,Blend:t.opacity}:{"Background Image Location":""}}function y$(t,e,n,r,i=!1){let s=(c,u)=>({Name:`ttheme · ${u}`,Guid:H(u),...r?{"Dynamic Profile Parent GUID":r}:{},"Use Separate Colors for Light and Dark Mode":!1,...$$(e.get(c.name)),...k$(c)}),o={Name:"ttheme · default",Guid:H("default"),"Dynamic Profile Parent GUID":r,...$$(void 0)},a=[...n?[s(n,"default")]:i&&r?[o]:[],...t.map((c)=>s(c,c.name))];return`${JSON.stringify({Profiles:a},null,2)}
376
+ `}function RN(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(`
377
+ `)}var Qd={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(k$(t)).map(([n,r])=>RN(n,r)),"</dict>","</plist>",""].join(`
378
+ `);return[{path:`iterm2/${H(t.name)}.itermcolors`,content:e}]}};var Xd={id:"kitty",emit(t){let e=[...Or(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(`
379
+ `);return[{path:`kitty/themes/${H(t.name)}.conf`,content:e}]}};function v$(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.replace('@', '--', 1).replace('/', '--', 1) + '.conf'), c):"," return None"," image = c.get('background-image', '')"," try:"," opacity = min(float(c.get('background-image-opacity', '1')), 1.0)"," except ValueError:"," opacity = 1.0"," if not image or opacity <= 0:"," return None"," return locate(image), PLACES.get(c.get('background-image-position', 'center'), 'center'), opacity","","","def fade(path, opacity):"," key = f'{path}#{opacity}'"," if key not in faded:"," from kitty.fast_data_types import load_png_data, png_from_32bit_rgba_data"," with open(path, 'rb') as f:"," rgba, width, height = load_png_data(f.read())"," data = bytearray(rgba)"," data[3::4] = data[3::4].translate(bytes(round(a * opacity) for a in range(256)))"," if len(faded) > 8:"," faded.clear()"," faded[key] = png_from_32bit_rgba_data(bytes(data), width, height)"," return key, faded[key]","","","def show(window):"," want = logo(window.user_vars.get('ttheme_shown') or '')"," if window.id in shown and shown[window.id] == want:"," return"," shown[window.id] = want"," try:"," if want is None:"," window.set_logo('')"," elif want[2] < 1:"," key, png = fade(want[0], want[2])"," window.set_logo(key, want[1], 1, png)"," else:"," window.set_logo(want[0], want[1], 1)"," except Exception:"," shown.pop(window.id, None)","","","def theme(palette):"," path = os.path.join(THEMES, 'ttheme-' + palette.replace('@', '--', 1).replace('/', '--', 1) + '.conf')"," if not palette or not os.path.exists(path):"," return None"," from kitty.colors import parse_colors"," return parse_colors([path])","","","def wear(palette):"," colors = theme(palette) if worn.get('startup') != palette else None"," if colors is None:"," return"," from kitty.colors import patch_colors"," patch_colors(colors[0], colors[1], True, ())"," worn['startup'] = palette","","","def rewear(boss):"," from kitty.colors import patch_colors"," for window in tuple(boss.all_windows):"," colors = theme(window.user_vars.get('ttheme_worn') or '')"," if colors is not None:"," patch_colors(colors[0], colors[1], False, (window,))","","","def on_load(boss, data):"," if getattr(boss, 'ttheme_rewears', False):"," return"," load = boss.load_config_file",""," def reload(*args, **kwargs):"," load(*args, **kwargs)"," worn.pop('startup', None)"," rewear(boss)",""," boss.load_config_file = reload"," boss.ttheme_rewears = True","","","def on_set_user_var(boss, window, data):"," if data['key'] == 'ttheme_shown':"," show(window)"," elif data['key'] == 'ttheme_startup':"," wear(data['value'] or '')","","","def on_focus_change(boss, window, data):"," if data['focused']:"," show(window)","","","def on_close(boss, window, data):"," shown.pop(window.id, None)",""].join(`
380
+ `)}function NN(t){let[e]=t;if(!e)throw Error("manifest needs at least one theme");return{...mc(),palettes:t.map(mn)}}var th={id:"meta",emitShared(t){return[{path:"manifest.json",content:`${JSON.stringify(NN(t),null,2)}
381
+ `}]}};var eh={id:"terminal-app",limits:"profiles go into its own settings at init, so the archive carries none"};import{createHash as TN}from"node:crypto";var AN=["black","red","green","yellow","blue","magenta","cyan","white"];function E$(t,e){return[` ${t}:`,...AN.map((n,r)=>` ${n}: "${e[r]}"`)]}function PN(t,e,n){let r=TN("sha1");for(let i of e)r.update(i);return`${H(t)}.${r.digest("hex").slice(0,8)}.${n}`}function S$(t,e,n){let r=2166136261;for(let i of Buffer.from(`${e}
382
+ ${n.toLowerCase()}`,"utf8"))r=Math.imul(r^i,16777619)>>>0;return`${H(t)}.${r.toString(16).padStart(8,"0")}.png`}function Yo(t,e){return e?PN(t,[e.image,String(M$(e))],"yaml"):`${H(t)}.yaml`}function M$(t){return Math.max(0,Math.min(100,Math.round(t.opacity*100)))}function Jo(t,e){return[`name: "${t.name}"`,`background: "${t.background}"`,`foreground: "${t.foreground}"`,`accent: "${t.cursor}"`,`cursor: "${t.cursor}"`,`details: ${vt(t.background)<0.18?"darker":"lighter"}`,...e?["background_image:",` path: "${e.image}"`,` opacity: ${M$(e)}`]:[],"terminal_colors:",...E$("normal",t.ansi.slice(0,8)),...E$("bright",t.ansi.slice(8,16)),""].join(`
383
+ `)}var nh={id:"warp",limits:"no selection color, and Warp paints one theme app-wide",emit(t){return[{path:`warp/themes/${Yo(t.name)}`,content:Jo(t)}]}};var O$=(t)=>`[${t.map((e)=>`"${e}"`).join(", ")}]`,rh={id:"wezterm",limits:"OSC repaints per pane, pictures show per window",emit(t){let e=["[metadata]",`name = "${H(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 = ${O$(t.ansi.slice(0,8))}`,`brights = ${O$(t.ansi.slice(8,16))}`,""].join(`
384
+ `);return[{path:`wezterm/colors/${H(t.name)}.toml`,content:e}]}},As=(t)=>JSON.stringify(t);function x$(t){return["-- Generated by ttheme — rewritten on every add, remove and default; do not edit.","local wezterm = require 'wezterm'","",`local MODULE = ${As(t.path)}`,`local COLORS = ${As(t.colors)}`,`local BACKGROUNDS = ${As(t.backgrounds)}`,`local STARTUP = ${t.startup?As(H(t.startup)):"nil"}`,"local PALETTES = {",...t.palettes.map((e)=>` [${As(e.name)}] = ${As(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:gsub('@', '--', 1)):gsub('/', '--', 1)) .. '.conf', c) then"," return nil, 'none'"," end"," local image = c['background-image'] or ''"," local opacity = tonumber(c['background-image-opacity'] or '1') or 1"," if image == '' or opacity <= 0 then"," return nil, 'none'"," end"," local fit = c['background-image-fit'] or 'contain'"," local position = c['background-image-position'] or 'center'"," local y, x = position:match('^(%a+)-(%a+)$')"," local rep = c['background-image-repeat'] == 'true' and 'Repeat' or 'NoRepeat'"," return {"," { source = { Color = color }, width = '100%', height = '100%' },"," {"," source = { File = locate(image) },"," opacity = opacity,"," width = SIZE[fit],"," height = SIZE[fit],"," horizontal_align = X[x or 'center'],"," vertical_align = Y[y or 'center'],"," repeat_x = rep,"," repeat_y = rep,"," },"," }, table.concat({ color, image, opacity, fit, position, rep }, '|')","end","","local function framed(window, view)"," local color, image, opacity, W, H, w, h, x, y, at ="," view:match('^([^|]*)|([^|]*)|([^|]*)|(%d+)|(%d+)|(%-?%d+)|(%-?%d+)|(%-?%d+)|(%-?%d+)|(%d)$')"," if not image or image == '' or tonumber(W) == 0 or tonumber(H) == 0 then"," return nil, 'none'"," end"," local d = window:get_dimensions()"," local k = math.max(d.pixel_width / W, d.pixel_height / H)"," local n = tonumber(at) - 1"," local ax, ay = n % 3, n // 3"," local px = function(n) return string.format('%.2fpx', n) end"," return {"," { source = { Color = color }, width = '100%', height = '100%' },"," {"," source = { File = image },"," opacity = tonumber(opacity) or 1,"," width = px(w * k),"," height = px(h * k),"," horizontal_align = 'Left',"," vertical_align = 'Top',"," horizontal_offset = px(ax * (d.pixel_width - W * k) / 2 + x * k),"," vertical_offset = px(ay * (d.pixel_height - H * k) / 2 + y * k),"," repeat_x = 'NoRepeat',"," repeat_y = 'NoRepeat',"," },"," }, table.concat({ view, d.pixel_width, d.pixel_height }, '|')","end","","local shown = {}","","local function show(window, pane)"," local vars = pane:get_user_vars()"," local id = window:window_id()"," local background, key"," if vars.ttheme_view and vars.ttheme_view ~= '' then"," background, key = framed(window, vars.ttheme_view)"," elseif vars.ttheme_shown and vars.ttheme_shown ~= '' then"," background, key = layers(vars.ttheme_shown)"," elseif shown[id] == nil then"," return"," end"," 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' or name == 'ttheme_view' 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(`
385
+ `)}var I$=["black","red","green","yellow","blue","purple","cyan","white"];function R$(t){return{name:H(t.name),background:t.background,foreground:t.foreground,cursorColor:t.cursor,selectionBackground:t.selectionBackground,...Object.fromEntries(I$.map((e,n)=>[e,t.ansi[n]])),...Object.fromEntries(I$.map((e,n)=>[`bright${e[0]?.toUpperCase()}${e.slice(1)}`,t.ansi[n+8]]))}}function ih(t,e,n){let r={...e&&n?{profiles:[{updates:e,colorScheme:H(n)}]}:{},schemes:t.map(R$)};return`${JSON.stringify(r,null,2)}
386
+ `}var sh={id:"windows-terminal",limits:"a picture belongs to a profile, which a pane cannot change, so none; OSC repaints per pane",emit(t){return[{path:`windows-terminal/schemes/${H(t.name)}.json`,content:`${JSON.stringify(R$(t),null,2)}
387
+ `}]},emitShared(t){return[{path:"windows-terminal/ttheme.json",content:ih(t)}]}};function HN(t){let e=t.replace(Rs,"");return/^[ \t]*\[colors[\].]/m.test(e)||/^[ \t]*colors[ \t]*[.=]/m.test(e)}var FN=/^[ \t]*\[general\][ \t]*(?:#.*)?$/m,T$=/^[ \t]*\[/m,A$=/^[ \t]*import[ \t]*=/m,CN=/^[ \t]*general[ \t]*[.=]/m;function LN(t){return t?`[general]
388
+ import = ["${t}"]`:""}function oh(t,e){let n=t.replace(Rs,""),r=FN.exec(n);if(!r){let c=n.search(T$),u=c<0?n:n.slice(0,c);if(CN.test(n)||A$.test(u))return;return Ir(t,LN(e))}let i=r.index+r[0].length,s=n.slice(i),o=s.search(T$);if(A$.test(o<0?s:s.slice(0,o)))return;let a=e?`import = ["${e}"]
383
389
  `:"";return`${n.slice(0,i)}
384
- ${Nd}
385
- ${a}${Rd}${s}`}function Qc(t){return Xc(t,"alacritty","alacritty.toml")}function u$(t){return Xc(t.configHome,"alacritty","themes")}function nR(t,e){return e?Xc(t,"alacritty","themes",`${A(e)}.toml`):void 0}var qd={id:"alacritty",name:"Alacritty",emitter:Cd,shelf:{from:"themes",dir:u$},offered:()=>!0,present:(t)=>o$(Xc(t.configHome,"alacritty")),sync(t,e){e.themes(qd);let n=Qc(t.configHome),r=Dd(it(n),nR(t.configHome,t.startup));if(r!==void 0)e.wire(n,r)},plan(t){let e=Qc(t.configHome);return Dd(it(e),void 0)!==void 0?[`Edit ${Tt(e,t.home)} — a ttheme block: general.import`]:[]},notes(t){let e=Qc(t.configHome),n=it(e);return[...o$(e)&&Dd(n,void 0)===void 0?[`${e} already imports files under [general] — ttheme left it alone; add ${u$(t)}/<palette>.toml to that import list yourself`]:[],...QN(n)?[`${Tt(e,t.home)} sets its own colors, which win over an imported palette — remove them to open with ttheme's`]:[]]},next:()=>["Alacritty Reloads its config by itself"],unwire:(t)=>({edits:hn(Qc(t.configHome),xr),removals:[],touches:[]})};import{existsSync as rR}from"node:fs";import{join as eu}from"node:path";function iR(t,e,n=""){let r=[];if(!Nr(n,"command")){if(r.push(`command = ${t}/launch-tab.zsh`),!Nr(n,"shell-integration"))r.push("shell-integration = zsh")}if(e)r.push(`theme = ${A(e)}`);return r.push(`config-file = ?${t}/backgrounds/shown.conf`),r.join(`
386
- `)}function tu(t){return eu(t,"ghostty","config")}function l$(t,e,n){return iR(eu(t.configHome,"ttheme"),e,n)}var Yd={id:"ghostty",name:"Ghostty",emitter:Ld,shelf:{from:"themes",dir:(t)=>eu(t.configHome,"ghostty","themes")},offered:()=>!0,present:(t)=>rR(eu(t.configHome,"ghostty")),sync(t,e){e.themes(Yd);let n=tu(t.configHome),r=it(n);e.wire(n,Ir(r,l$(t,t.startup,r)))},plan(t){let e=tu(t.configHome);return[`Edit ${Tt(e,t.home)} — a ttheme block: ${Zc(l$(t,t.startup,it(e)))}`]},notes(t){let e=tu(t.configHome);return Nr(it(e),"command")?[`${Tt(e,t.home)} sets its own command — ttheme leaves it, so a new tab takes its palette once zsh starts`]:[]},next:()=>["Restart Ghostty New tabs pick up its config"],unwire:(t)=>({edits:hn(tu(t.configHome),xr),removals:[],touches:[]})};import{existsSync as f$}from"node:fs";import{join as m$}from"node:path";var Jd="ttheme-default";function Ns(t){return m$(t,"Library","Application Support","iTerm2","DynamicProfiles","ttheme.json")}function p$(t){return t.itermBase!==void 0&&t.palettes.length>0}function d$(t){let e=D(t.configHome),n=new Map;for(let i of t.themes){let s=we(e,i.name,t.home);if(s)n.set(i.name,s)}let r=new Set(Et(t.entries).map((i)=>i.name));return Z0(t.themes.filter((i)=>r.has(i.name)),n,t.themes.find((i)=>i.name===t.startup),t.state.itermBase,p$(t.state))}function Vd(t){return t.env.TTHEME_ITERM_SUITE??"com.googlecode.iterm2"}function h$(t){return t.run("defaults",["read",Vd(t),"Default Bookmark Guid"])||void 0}function sR(t){return t.run("defaults",["read",Vd(t),"PreventEscapeSequenceFromChangingProfile"])==="0"}var oR={key:"itermBase",profile:()=>"ttheme · default",base(t){let e=h$(t.host);return e&&!e.startsWith("ttheme-")?{...t.state,itermBase:e}:t.state},point(t,e){let n=h$(t.host),r=t.startup?e||n===Jd?Jd:void 0:n===Jd&&!p$(t.state)?t.state.itermBase:void 0;if(!r||r===n)return;return t.host.run("defaults",["write",Vd(t.host),"Default Bookmark Guid","-string",r]),{restart:Boolean(t.host.run("pgrep",["-x","iTerm2"]))}}},g$={id:"iterm2",name:"iTerm2",emitter:jd,bakes:!0,offered:(t,e)=>e.platform==="darwin",present:(t)=>f$(m$(t.home,"Library","Application Support","iTerm2")),sync(t,e){e.write(Ns(t.home),d$(t))},pictures(t,e){e.write(Ns(t.home),d$(t))},layer:(t,e)=>({TTHEME_ITERM_SWITCH:sR(e)?"1":"",TTHEME_ITERM_PROFILES:Ns(t.home)}),plan:(t)=>[`Write ${Tt(Ns(t.home),t.home)} — a "ttheme · <palette>" profile per palette`],notes:()=>[],next(t,e){let n=['iTerm2 profiles A "ttheme · <palette>" per palette in Settings › Profiles'];if(t.startup)n.push(e?.restart?`Restart iTerm2 New tabs open on "ttheme · default", which wears ${t.startup}`:`iTerm2 default "ttheme · default" wears ${t.startup} and follows \`ttheme default\``);return n},unwire:(t)=>({edits:[],removals:f$(Ns(t.home))?[Ns(t.home)]:[],touches:[]}),defaults:oR};import{existsSync as aR}from"node:fs";import{join as ru}from"node:path";function b$(t,e,n=""){return[...t?[`include themes/${A(t)}.conf`]:[],`watcher ${e}`,...["window_logo_scale 100","window_logo_alpha 1"].filter((r)=>!Nr(n,r.split(" ")[0]))].join(`
387
- `)}function nu(t){return ru(t,"kitty","kitty.conf")}function Zd(t){return ru(t,"ttheme","kitty.py")}function w$(t){return ru(t.configHome,"kitty","themes")}var Qd={id:"kitty",name:"kitty",emitter:Gd,shelf:{from:"themes",dir:w$},offered:()=>!0,present:(t)=>aR(ru(t.configHome,"kitty")),sync(t,e){e.themes(Qd),e.write(Zd(t.configHome),Q0({themes:w$(t),backgrounds:D(t.configHome)}));let n=nu(t.configHome),r=it(n);e.wire(n,Ir(r,b$(t.startup,Zd(t.configHome),r)))},plan(t){let e=nu(t.configHome),n=b$(t.startup,Zd(t.configHome),it(e));return[`Edit ${Tt(e,t.home)} — a ttheme block: ${Zc(n)}`]},notes(t){let e=it(nu(t.configHome));return Nr(e,"window_logo_scale")||Nr(e,"window_logo_alpha")?["kitty.conf sets its own window_logo_scale or window_logo_alpha — pictures are drawn with them"]:[]},next:()=>["New kitty window Pictures follow it — kitty reloads its colors by itself"],unwire:(t)=>({edits:hn(nu(t.configHome),xr),removals:[],touches:[]})};import{createHash as cR}from"node:crypto";import{existsSync as iu}from"node:fs";import{basename as k$,isAbsolute as uR,join as wi}from"node:path";function Rs(t){return wi(Ko(t),"konsole")}function qo(t){return wi(t,"konsolerc")}function y$(t){return`${A(t)}.profile`}function Yo(t){return`ttheme · ${t}`}function v$(t,e){let n=t.findIndex((i)=>i.trim()===`[${e}]`);if(n<0)return;let r=t.findIndex((i,s)=>s>n&&i.trimStart().startsWith("["));return[n,r<0?t.length:r]}function Xd(t){return new RegExp(String.raw`^\s*${t}\s*=`)}function Pr(t,e,n){let r=t.split(`
388
- `),i=v$(r,e);return(i&&r.slice(i[0]+1,i[1]).find((o)=>Xd(n).test(o)))?.replace(Xd(n),"").trim()}function S$(t,e){let n=t.split(`
389
- `),r=v$(n,"Desktop Entry"),i=e===void 0?[]:[`DefaultProfile=${e}`];if(!r)return e===void 0?t:`${t===""?"":t.replace(/\n*$/,`
390
+ ${Wd}
391
+ ${a}${Kd}${s}`}function ou(t){return au(t,"alacritty","alacritty.toml")}function P$(t){return au(t.configHome,"alacritty","themes")}function jN(t,e){return e?au(t,"alacritty","themes",`${H(e)}.toml`):void 0}var ah={id:"alacritty",name:"Alacritty",emitter:Vd,shelf:{from:"themes",dir:P$},offered:()=>!0,present:(t)=>N$(au(t.configHome,"alacritty")),sync(t,e){e.themes(ah);let n=ou(t.configHome),r=oh(st(n),jN(t.configHome,t.startup));if(r!==void 0)e.wire(n,r)},plan(t){let e=ou(t.configHome);return oh(st(e),void 0)!==void 0?[`Edit ${Tt(e,t.home)} — a ttheme block: general.import`]:[]},notes(t){let e=ou(t.configHome),n=st(e);return[...N$(e)&&oh(n,void 0)===void 0?[`${e} already imports files under [general] — ttheme left it alone; add ${P$(t)}/<palette>.toml to that import list yourself`]:[],...HN(n)?[`${Tt(e,t.home)} sets its own colors, which win over an imported palette — remove them to open with ttheme's`]:[]]},next:()=>["Alacritty Reloads its config by itself"],unwire:(t)=>({edits:wn(ou(t.configHome),Rr),removals:[],touches:[]})};import{existsSync as _N}from"node:fs";import{join as uu}from"node:path";function GN(t,e,n=""){let r=[];if(!Nr(n,"command")){if(r.push(`command = ${t}/launch-tab.zsh`),!Nr(n,"shell-integration"))r.push("shell-integration = zsh")}if(e)r.push(`theme = ${H(e)}`);return r.push(`config-file = ?${t}/backgrounds/shown.conf`),r.join(`
392
+ `)}function cu(t){return uu(t,"ghostty","config")}function H$(t,e,n){return GN(uu(t.configHome,"ttheme"),e,n)}var ch={id:"ghostty",name:"Ghostty",emitter:Zd,shelf:{from:"themes",dir:(t)=>uu(t.configHome,"ghostty","themes")},offered:()=>!0,present:(t)=>_N(uu(t.configHome,"ghostty")),sync(t,e){e.themes(ch);let n=cu(t.configHome),r=st(n);e.wire(n,Ir(r,H$(t,t.startup,r)))},plan(t){let e=cu(t.configHome);return[`Edit ${Tt(e,t.home)} — a ttheme block: ${su(H$(t,t.startup,st(e)))}`]},notes(t){let e=cu(t.configHome);return Nr(st(e),"command")?[`${Tt(e,t.home)} sets its own command — ttheme leaves it, so a new tab takes its palette once zsh starts`]:[]},next:()=>["Restart Ghostty New tabs pick up its config"],unwire:(t)=>({edits:wn(cu(t.configHome),Rr),removals:[],touches:[]})};import{existsSync as F$}from"node:fs";import{join as j$}from"node:path";var uh="ttheme-default";function Ps(t){return j$(t,"Library","Application Support","iTerm2","DynamicProfiles","ttheme.json")}function _$(t){return t.itermBase!==void 0&&t.palettes.length>0}function C$(t){let e=q(t.configHome),n=new Map;for(let i of t.themes){let s=Se(e,i.name,t.home);if(s)n.set(i.name,s)}let r=new Set(Mt(t.entries).map((i)=>i.name));return y$(t.themes.filter((i)=>r.has(i.name)),n,t.themes.find((i)=>i.name===t.startup),t.state.itermBase,_$(t.state))}function lh(t){return t.env.TTHEME_ITERM_SUITE??"com.googlecode.iterm2"}function L$(t){return t.run("defaults",["read",lh(t),"Default Bookmark Guid"])||void 0}function BN(t){return t.run("defaults",["read",lh(t),"PreventEscapeSequenceFromChangingProfile"])==="0"}var UN={key:"itermBase",profile:()=>"ttheme · default",base(t){let e=L$(t.host);return e&&!e.startsWith("ttheme-")?{...t.state,itermBase:e}:t.state},point(t,e){let n=L$(t.host),r=t.startup?e||n===uh?uh:void 0:n===uh&&!_$(t.state)?t.state.itermBase:void 0;if(!r||r===n)return;return t.host.run("defaults",["write",lh(t.host),"Default Bookmark Guid","-string",r]),{restart:Boolean(t.host.run("pgrep",["-x","iTerm2"]))}}},G$={id:"iterm2",name:"iTerm2",emitter:Qd,bakes:!0,offered:(t,e)=>e.platform==="darwin",present:(t)=>F$(j$(t.home,"Library","Application Support","iTerm2")),sync(t,e){e.write(Ps(t.home),C$(t))},pictures(t,e){e.write(Ps(t.home),C$(t))},layer:(t,e)=>({TTHEME_ITERM_SWITCH:BN(e)?"1":"",TTHEME_ITERM_PROFILES:Ps(t.home)}),plan:(t)=>[`Write ${Tt(Ps(t.home),t.home)} — a "ttheme · <palette>" profile per palette`],notes:()=>[],next(t,e){let n=['iTerm2 profiles A "ttheme · <palette>" per palette in Settings › Profiles'];if(t.startup)n.push(e?.restart?`Restart iTerm2 New tabs open on "ttheme · default", which wears ${t.startup}`:`iTerm2 default "ttheme · default" wears ${t.startup} and follows \`ttheme default\``);return n},unwire:(t)=>({edits:[],removals:F$(Ps(t.home))?[Ps(t.home)]:[],touches:[]}),defaults:UN};import{existsSync as WN}from"node:fs";import{join as fu}from"node:path";function B$(t,e,n=""){return[...t?[`include themes/${H(t)}.conf`]:[],`watcher ${e}`,...["window_logo_scale 100","window_logo_alpha 1"].filter((r)=>!Nr(n,r.split(" ")[0]))].join(`
393
+ `)}function lu(t){return fu(t,"kitty","kitty.conf")}function fh(t){return fu(t,"ttheme","kitty.py")}function U$(t){return fu(t.configHome,"kitty","themes")}var dh={id:"kitty",name:"kitty",emitter:Xd,shelf:{from:"themes",dir:U$},offered:()=>!0,present:(t)=>WN(fu(t.configHome,"kitty")),sync(t,e){e.themes(dh),e.write(fh(t.configHome),v$({themes:U$(t),backgrounds:q(t.configHome)}));let n=lu(t.configHome),r=st(n);e.wire(n,Ir(r,B$(t.startup,fh(t.configHome),r)))},plan(t){let e=lu(t.configHome),n=B$(t.startup,fh(t.configHome),st(e));return[`Edit ${Tt(e,t.home)} — a ttheme block: ${su(n)}`]},notes(t){let e=st(lu(t.configHome));return Nr(e,"window_logo_scale")||Nr(e,"window_logo_alpha")?["kitty.conf sets its own window_logo_scale or window_logo_alpha — pictures are drawn with them"]:[]},next:()=>["New kitty window Pictures follow it — kitty reloads its colors by itself"],unwire:(t)=>({edits:wn(lu(t.configHome),Rr),removals:[],touches:[]})};import{createHash as KN}from"node:crypto";import{existsSync as du}from"node:fs";import{basename as K$,isAbsolute as zN,join as vi}from"node:path";function Hs(t){return vi(qo(t),"konsole")}function Vo(t){return vi(t,"konsolerc")}function z$(t){return`${H(t)}.profile`}function Zo(t){return`ttheme · ${t}`}function D$(t,e){let n=t.findIndex((i)=>i.trim()===`[${e}]`);if(n<0)return;let r=t.findIndex((i,s)=>s>n&&i.trimStart().startsWith("["));return[n,r<0?t.length:r]}function hh(t){return new RegExp(String.raw`^\s*${t}\s*=`)}function Pr(t,e,n){let r=t.split(`
394
+ `),i=D$(r,e);return(i&&r.slice(i[0]+1,i[1]).find((o)=>hh(n).test(o)))?.replace(hh(n),"").trim()}function q$(t,e){let n=t.split(`
395
+ `),r=D$(n,"Desktop Entry"),i=e===void 0?[]:[`DefaultProfile=${e}`];if(!r)return e===void 0?t:`${t===""?"":t.replace(/\n*$/,`
390
396
 
391
397
  `)}[Desktop Entry]
392
398
  ${i[0]}
393
- `;let s=n.findIndex((a,c)=>c>r[0]&&c<r[1]&&Xd("DefaultProfile").test(a));if(s>=0)n.splice(s,1,...i);else n.splice(r[0]+1,0,...i);let o=r[1]+i.length-(s>=0?1:0);if(n.slice(r[0]+1,o).every((a)=>a.trim()==="")){let a=r[0]>0&&n[r[0]-1]?.trim()===""?r[0]-1:r[0],c=o===n.length&&n[o-1]===""?o-1:o;n.splice(a,c-a)}return n.join(`
394
- `)}function lR(t){if(t&&ne(t.toLowerCase()))return t.toLowerCase();let e=t?.split(",").map((n)=>Number(n.trim()));if(!e||e.length<3||e.slice(0,3).some((n)=>!Number.isInteger(n)||n<0||n>255))return;return`#${e.slice(0,3).map((n)=>n.toString(16).padStart(2,"0")).join("")}`}function E$(t,e){let n=e.endsWith(".profile")?e:`${e}.profile`;if(uR(n))return iu(n)?n:void 0;let r=n.includes("/")?n:wi("konsole",n);return[Ko(t.home),...(process.env.XDG_DATA_DIRS||"/usr/local/share:/usr/share").split(":")].map((s)=>wi(s,r)).find((s)=>iu(s))}function M$(t,e,n=0){let r=e&&e!=="FALLBACK/"&&n<8?E$(t,e):void 0;if(!r)return{};let i=it(r),s=M$(t,Pr(i,"General","Parent"),n+1);return{scheme:Pr(i,"Appearance","ColorScheme")||s.scheme,use:Pr(i,"Cursor Options","UseCustomCursorColor")??s.use,cursor:Pr(i,"Cursor Options","CustomCursorColor")??s.cursor}}function fR(t,e){let n=M$(t,e),r=n.use==="true"?lR(n.cursor):void 0;return[`ColorScheme=${n.scheme??"Breeze"}`,`UseCustomCursorColor=${r?"true":"false"}`,...r?[`customCursorColor=${r}`]:[]].join(";")}function dR(t,e){return["[Appearance]",`ColorScheme=${A(t.name)}`,"","[Cursor Options]",`CustomCursorColor=${nt(t.cursor).join(",")}`,`CustomCursorTextColor=${nt(t.background).join(",")}`,"UseCustomCursorColor=true","","[General]",`Name=${Yo(t.name)}`,`Parent=${e}`,""].join(`
395
- `)}var O$=/^ttheme-(.+)\.([0-9a-f]{8})\.colorscheme$/;function hR(t){return cR("sha1").update(t).digest("hex").slice(0,8)}function $$(t,e){let n=Rs(t.home),r=D(t.configHome),i=new Set;for(let s of t.themes){let o=kd(s,we(r,s.name,t.home)),a=wi(n,`${A(s.name)}.${hR(o)}.colorscheme`);i.add(a),e.write(wi(n,`${A(s.name)}.colorscheme`),o),e.write(a,o)}for(let s of Is(n))if(O$.test(k$(s))&&!i.has(s))e.remove(s)}function mR(t){return Is(t).flatMap((e)=>{let[,n,r]=O$.exec(k$(e))??[];return n&&r?[`${n} ${r}`]:[]}).sort().join(" ")}function pR(t){let e=new Set(Et(t.entries).map((n)=>n.name));return t.themes.filter((n)=>e.has(n.name)||n.name===t.startup)}var th=["--session","--print-reply","--reply-timeout=2000"];function gR(t){return[...(t.run("dbus-send",[...th,"--dest=org.freedesktop.DBus","/org/freedesktop/DBus","org.freedesktop.DBus.ListNames"])??"").matchAll(/string "(org\.kde\.konsole(?:-\d+)?)"/g)].flatMap(([,n=""])=>{let i=t.run("dbus-send",[...th,`--dest=${n}`,"/Windows","org.freedesktop.DBus.Introspectable.Introspect"])?.match(/<node name="(\d+)"/)?.[1];return i?[{service:n,window:`/Windows/${i}`}]:[]})}function bR(t,{service:e,window:n},r){let i=(s,...o)=>t.run("dbus-send",[...th,`--dest=${e}`,n,`org.kde.konsole.Window.${s}`,...o]);return i("setDefaultProfile",`string:${r}`),i("defaultProfile")?.includes(`string "${r}"`)===!0}function wR(t,e){let n=E$(t,e);return n?Pr(it(n),"General","Name"):void 0}function $R(t){return Pr(it(qo(t)),"Desktop Entry","DefaultProfile")}var kR={key:"konsoleBase",profile:Yo,base(t){let e=$R(t.configHome);return e&&!e.startsWith(A(""))?{...t.state,konsoleBase:e}:t.state},point(t,e){let n=qo(t.configHome),r=it(n),i=Pr(r,"Desktop Entry","DefaultProfile"),s=i?.startsWith(A(""))===!0,o=t.startup?e||s?y$(t.startup):void 0:s?t.state.konsoleBase??"":void 0;if(o===void 0||o===(i??"")&&!e)return;if(o!==(i??""))en(n,S$(r,o||void 0));let a=t.startup?Yo(t.startup):o?wR(t,o):void 0,c=gR(t.host),u=a!==void 0&&c.every((l)=>bR(t.host,l,a));return{restart:c.length>0&&!u}}},I$={id:"konsole",name:"Konsole",emitter:yd,shelf:{from:"",dir:(t)=>Rs(t.home)},offered:(t,e)=>e.platform!=="darwin"&&e.platform!=="win32",present:(t)=>iu(Rs(t.home))||iu(qo(t.configHome)),sync(t,e){$$(t,e);let n=Rs(t.home),r=t.state.konsoleBase??"FALLBACK/",i=new Set;for(let s of pR(t)){let o=wi(n,y$(s.name));i.add(o),e.write(o,dR(s,r))}for(let s of Is(n))if(s.endsWith(".profile")&&!i.has(s))e.remove(s)},pictures:$$,layer:(t)=>({TTHEME_KONSOLE_BASE:fR(t,t.state.konsoleBase),TTHEME_KONSOLE_SCHEMES:mR(Rs(t.home))}),plan(t){return[`Write ${Tt(Rs(t.home),t.home)}/${A("*")}.profile — a "ttheme · <palette>" profile per palette, on top of your own`,...t.startup?[`Edit ${Tt(qo(t.configHome),t.home)} — DefaultProfile; \`ttheme off\` puts yours back`]:[]]},notes:()=>[],next(t,e){let n=['Konsole profiles A "ttheme · <palette>" per palette in its profile list'];if(t.startup)n.push(e?.restart?`Restart Konsole New tabs open on "${Yo(t.startup)}"`:`Konsole default "${Yo(t.startup)}", which follows \`ttheme default\``);return n},unwire(t,e){let n=qo(t.configHome),r=it(n);return{edits:Pr(r,"Desktop Entry","DefaultProfile")?.startsWith(A(""))?[{file:n,content:S$(r,e?.konsoleBase)}]:[],removals:[],touches:[]}},defaults:kR};import{createHash as yR}from"node:crypto";import{existsSync as R$,readdirSync as vR,readFileSync as SR,rmSync as ER}from"node:fs";import{join as $i}from"node:path";var T$="com.apple.Terminal",Jo="ttheme · ";function qe(t){return`${Jo}${t}`}function su(t){return $i(t,"ttheme","terminal-app.js")}function Ts(t){return $i(t,"ttheme","terminal-app")}function MR(t,e){return $i(t.XDG_STATE_HOME??$i(e,".local","state"),"ttheme","terminal-app.window")}var OR=`ObjC.import('AppKit')
399
+ `;let s=n.findIndex((a,c)=>c>r[0]&&c<r[1]&&hh("DefaultProfile").test(a));if(s>=0)n.splice(s,1,...i);else n.splice(r[0]+1,0,...i);let o=r[1]+i.length-(s>=0?1:0);if(n.slice(r[0]+1,o).every((a)=>a.trim()==="")){let a=r[0]>0&&n[r[0]-1]?.trim()===""?r[0]-1:r[0],c=o===n.length&&n[o-1]===""?o-1:o;n.splice(a,c-a)}return n.join(`
400
+ `)}function DN(t){if(t&&oe(t.toLowerCase()))return t.toLowerCase();let e=t?.split(",").map((n)=>Number(n.trim()));if(!e||e.length<3||e.slice(0,3).some((n)=>!Number.isInteger(n)||n<0||n>255))return;return`#${e.slice(0,3).map((n)=>n.toString(16).padStart(2,"0")).join("")}`}function Y$(t,e){let n=e.endsWith(".profile")?e:`${e}.profile`;if(zN(n))return du(n)?n:void 0;let r=n.includes("/")?n:vi("konsole",n);return[qo(t.home),...(process.env.XDG_DATA_DIRS||"/usr/local/share:/usr/share").split(":")].map((s)=>vi(s,r)).find((s)=>du(s))}function J$(t,e,n=0){let r=e&&e!=="FALLBACK/"&&n<8?Y$(t,e):void 0;if(!r)return{};let i=st(r),s=J$(t,Pr(i,"General","Parent"),n+1);return{scheme:Pr(i,"Appearance","ColorScheme")||s.scheme,use:Pr(i,"Cursor Options","UseCustomCursorColor")??s.use,cursor:Pr(i,"Cursor Options","CustomCursorColor")??s.cursor}}function qN(t,e){let n=J$(t,e),r=n.use==="true"?DN(n.cursor):void 0;return[`ColorScheme=${n.scheme??"Breeze"}`,`UseCustomCursorColor=${r?"true":"false"}`,...r?[`customCursorColor=${r}`]:[]].join(";")}function YN(t,e){return["[Appearance]",`ColorScheme=${H(t.name)}`,"","[Cursor Options]",`CustomCursorColor=${rt(t.cursor).join(",")}`,`CustomCursorTextColor=${rt(t.background).join(",")}`,"UseCustomCursorColor=true","","[General]",`Name=${Zo(t.name)}`,`Parent=${e}`,""].join(`
401
+ `)}var V$=/^ttheme-(.+)\.([0-9a-f]{8})\.colorscheme$/;function JN(t){return KN("sha1").update(t).digest("hex").slice(0,8)}function W$(t,e){let n=Hs(t.home),r=q(t.configHome),i=new Set;for(let s of t.themes){let o=Hd(s,Se(r,s.name,t.home)),a=vi(n,`${H(s.name)}.${JN(o)}.colorscheme`);i.add(a),e.write(vi(n,`${H(s.name)}.colorscheme`),o),e.write(a,o)}for(let s of Ts(n))if(V$.test(K$(s))&&!i.has(s))e.remove(s)}function VN(t){return Ts(t).flatMap((e)=>{let[,n,r]=V$.exec(K$(e))??[];return n&&r?[`${n} ${r}`]:[]}).sort().join(" ")}function ZN(t){let e=new Set(Mt(t.entries).map((n)=>n.name));return t.themes.filter((n)=>e.has(n.name)||n.name===t.startup)}var mh=["--session","--print-reply","--reply-timeout=2000"];function QN(t){return[...(t.run("dbus-send",[...mh,"--dest=org.freedesktop.DBus","/org/freedesktop/DBus","org.freedesktop.DBus.ListNames"])??"").matchAll(/string "(org\.kde\.konsole(?:-\d+)?)"/g)].flatMap(([,n=""])=>{let i=t.run("dbus-send",[...mh,`--dest=${n}`,"/Windows","org.freedesktop.DBus.Introspectable.Introspect"])?.match(/<node name="(\d+)"/)?.[1];return i?[{service:n,window:`/Windows/${i}`}]:[]})}function XN(t,{service:e,window:n},r){let i=(s,...o)=>t.run("dbus-send",[...mh,`--dest=${e}`,n,`org.kde.konsole.Window.${s}`,...o]);return i("setDefaultProfile",`string:${r}`),i("defaultProfile")?.includes(`string "${r}"`)===!0}function tT(t,e){let n=Y$(t,e);return n?Pr(st(n),"General","Name"):void 0}function eT(t){return Pr(st(Vo(t)),"Desktop Entry","DefaultProfile")}var nT={key:"konsoleBase",profile:Zo,base(t){let e=eT(t.configHome);return e&&!e.startsWith(H(""))?{...t.state,konsoleBase:e}:t.state},point(t,e){let n=Vo(t.configHome),r=st(n),i=Pr(r,"Desktop Entry","DefaultProfile"),s=i?.startsWith(H(""))===!0,o=t.startup?e||s?z$(t.startup):void 0:s?t.state.konsoleBase??"":void 0;if(o===void 0||o===(i??"")&&!e)return;if(o!==(i??""))an(n,q$(r,o||void 0));let a=t.startup?Zo(t.startup):o?tT(t,o):void 0,c=QN(t.host),u=a!==void 0&&c.every((l)=>XN(t.host,l,a));return{restart:c.length>0&&!u}}},Z$={id:"konsole",name:"Konsole",emitter:Fd,shelf:{from:"",dir:(t)=>Hs(t.home)},offered:(t,e)=>e.platform!=="darwin"&&e.platform!=="win32",present:(t)=>du(Hs(t.home))||du(Vo(t.configHome)),sync(t,e){W$(t,e);let n=Hs(t.home),r=t.state.konsoleBase??"FALLBACK/",i=new Set;for(let s of ZN(t)){let o=vi(n,z$(s.name));i.add(o),e.write(o,YN(s,r))}for(let s of Ts(n))if(s.endsWith(".profile")&&!i.has(s))e.remove(s)},pictures:W$,layer:(t)=>({TTHEME_KONSOLE_BASE:qN(t,t.state.konsoleBase),TTHEME_KONSOLE_SCHEMES:VN(Hs(t.home))}),plan(t){return[`Write ${Tt(Hs(t.home),t.home)}/${H("*")}.profile — a "ttheme · <palette>" profile per palette, on top of your own`,...t.startup?[`Edit ${Tt(Vo(t.configHome),t.home)} — DefaultProfile; \`ttheme off\` puts yours back`]:[]]},notes:()=>[],next(t,e){let n=['Konsole profiles A "ttheme · <palette>" per palette in its profile list'];if(t.startup)n.push(e?.restart?`Restart Konsole New tabs open on "${Zo(t.startup)}"`:`Konsole default "${Zo(t.startup)}", which follows \`ttheme default\``);return n},unwire(t,e){let n=Vo(t.configHome),r=st(n);return{edits:Pr(r,"Desktop Entry","DefaultProfile")?.startsWith(H(""))?[{file:n,content:q$(r,e?.konsoleBase)}]:[],removals:[],touches:[]}},defaults:nT};import{createHash as rT}from"node:crypto";import{existsSync as tk,readdirSync as iT,readFileSync as sT,rmSync as oT}from"node:fs";import{join as Ei}from"node:path";var ek="com.apple.Terminal",Qo="ttheme · ";function Qe(t){return`${Qo}${t}`}function hu(t){return Ei(t,"ttheme","terminal-app.js")}function Fs(t){return Ei(t,"ttheme","terminal-app")}function aT(t,e){return Ei(t.XDG_STATE_HOME??Ei(e,".local","state"),"ttheme","terminal-app.window")}var cT=`ObjC.import('AppKit')
396
402
 
397
- const OURS = '${Jo}'
403
+ const OURS = '${Qo}'
398
404
  const IMAGE = 'BackgroundImageBookmark'
399
405
  const KEYS = ['BackgroundColor', 'TextColor', 'CursorColor', 'SelectionColor', 'ANSIBlackColor', 'ANSIRedColor',
400
406
  'ANSIGreenColor', 'ANSIYellowColor', 'ANSIBlueColor', 'ANSIMagentaColor', 'ANSICyanColor', 'ANSIWhiteColor',
@@ -578,32 +584,32 @@ function run(argv) {
578
584
  }
579
585
  return changed ? 'wrote' : 'same'
580
586
  }
581
- `;function eh(t,e,n){return t.run("osascript",["-l","JavaScript",su(e),...n])}function nh(t){return t.run("defaults",["read",T$,"Default Window Settings"])||void 0}function IR(t){return[t.background,t.foreground,t.cursor,t.selectionBackground,...t.ansi]}function P$(t){let e=new Set(Et(t.entries).map((n)=>n.name));return t.themes.filter((n)=>e.has(n.name)||n.name===t.startup)}function rh(t,e){let n=nh(e);return t.terminalBase??(n&&!n.startsWith(Jo)?n:"Basic")}function ih(t,e){let n=/^(\d+)x(\d+)$/.exec(it(MR(t,e)).trim());return n?{width:Number(n[1])*2,height:Number(n[2])*2}:void 0}function sh(t,e,n,r){let i=r?.width??t,s=r?.height??e,o=_t.indexOf(n.position)+1||5,a=ms(t,e,i,s,100,o,n.cover),c=Math.min(1,t/Math.max(1,a.w));return{width:Math.max(1,Math.round(i*c)),height:Math.max(1,Math.round(s*c)),at:{x:Math.round(a.x*c),y:Math.round(a.y*c),w:Math.round(a.w*c),h:Math.round(a.h*c)}}}var H$=/^ttheme-(.+)\.([0-9a-z-]+)\.png$/;function ou(t){let e=new Map;for(let n of R$(t)?vR(t):[]){let[,r]=H$.exec(n)??[];if(r)e.set(r,[...e.get(r)??[],n])}return e}function xR(t){return[...ou(t)].map(([e,n])=>`${e} ${(H$.exec(n[0])??[])[2]}`).sort().join(" ")}function x$(t){let e=Ts(t.configHome),n=ou(e),r=ih(t.host.env,t.home),i=new Map,s=(o)=>{for(let a of o)ER($i(e,a),{force:!0})};for(let o of P$(t)){let a=n.get(Qt(o.name))??[];n.delete(Qt(o.name));let c=we(D(t.configHome),o.name,t.home),u=c&&R$(c.image)?new Uint8Array(SR(c.image)):void 0,l=u&&rn(u);if(!c||!u||!l||c.opacity<=0){s(a);continue}let f=sh(l.width,l.height,c,r),d=yR("sha1").update(u).update(JSON.stringify([o.background.toLowerCase(),c.opacity,f])).digest("hex").slice(0,8),h=`${A(o.name)}.${d}.png`,p=$i(e,h);if(!a.includes(h)){let $;try{$=nr(er(At(u),o.background,c.opacity,f))}catch{s(a);continue}let[g,...b]=a;if(g)Qr($i(e,g),p,$);else H(p,$);s(b)}else s(a.filter(($)=>$!==h));i.set(o.name,p)}for(let o of n.values())s(o);return i}function N$(t,e){eh(t.host,t.configHome,["write",rh(t.state,t.host),...P$(t).flatMap((n)=>[qe(n.name),...IR(n),e.get(n.name)??"-"])])}var NR={key:"terminalBase",profile:qe,base(t){let e=nh(t.host);return e&&!e.startsWith(Jo)?{...t.state,terminalBase:e}:t.state},point(t,e){let n=nh(t.host),r=n?.startsWith(Jo)===!0;if(t.state.palettes.length===0)eh(t.host,t.configHome,["drop"]);let i=t.startup?e||r?qe(t.startup):void 0:r?rh(t.state,t.host):void 0;if(i===void 0||i===n&&!e)return;for(let o of["Default Window Settings","Startup Window Settings"])t.host.run("defaults",["write",T$,o,"-string",i]);return{restart:Boolean(t.host.run("pgrep",["-x","Terminal"]))&&eh(t.host,t.configHome,["loaded",i])!=="1"}}},A$={id:"terminal-app",name:"Terminal.app",emitter:Bd,offered:(t,e)=>e.platform==="darwin",present:()=>!1,sync(t,e){e.write(su(t.configHome),OR),N$(t,x$(t))},pictures(t){N$(t,x$(t))},layer:(t,e)=>({TTHEME_TERMINAL_APP_BASE:rh(t.state,e),TTHEME_TERMINAL_PICTURES:xR(Ts(t.configHome))}),plan:(t)=>[`Add a "${qe("<palette>")}" profile per palette to Terminal.app's settings — a copy of your own profile in the palette's colors, with its picture`,...t.startup?[`Make "${qe(t.startup)}" Terminal.app's default — \`ttheme off\` puts yours back`]:[]],notes:()=>[],next(t,e){let n=[`Terminal.app A "${qe("<palette>")}" profile per palette in Settings › Profiles`];if(t.startup)n.push(e?.restart?`Restart Terminal New windows and tabs open on "${qe(t.startup)}"`:`Terminal default "${qe(t.startup)}", which follows \`ttheme default\``);return n},unwire:()=>({edits:[],removals:[],touches:[]}),defaults:NR};import{spawn as RR}from"node:child_process";import{existsSync as Hr,mkdirSync as TR,readdirSync as oh,readFileSync as ah,realpathSync as PR,rmSync as HR,writeFileSync as AR}from"node:fs";import{dirname as j$,join as Ee}from"node:path";function ki(t){return process.platform==="darwin"?Ee(t,".warp","themes"):Ee(Ko(t),"warp-terminal","themes")}function Ar(t,e){return process.platform==="darwin"?Ee(t,".warp","settings.toml"):Ee(e,"warp-terminal","settings.toml")}var au='"dark"';function cu(t){return Ee(t,"ttheme","warp.base")}var G$="[appearance.themes]";function _$(t){let e=t.findIndex((r)=>r.trim()===G$);if(e<0)return;let n=t.findIndex((r,i)=>i>e&&r.trimStart().startsWith("["));return[e,n<0?t.length:n]}function Fr(t){let e=t.split(`
582
- `),n=_$(e);if(!n)return;return e.slice(n[0]+1,n[1]).find((i)=>/^theme\s*=/.test(i))?.replace(/^theme\s*=\s*/,"").trim()}function uh(t,e=`${A(t)}.yaml`){return`{ custom = { name = "${t}", path = "${e}" } }`}function FR(t){return t?.includes(`path = "${A("")}`)===!0?/name = "([^"]+)"/.exec(t)?.[1]:void 0}function uu(t,e){let n=t.split(`
583
- `),r=_$(n);if(!r)return e===void 0?t:`${t.replace(/\n*$/,`
587
+ `;function ph(t,e,n){return t.run("osascript",["-l","JavaScript",hu(e),...n])}function gh(t){return t.run("defaults",["read",ek,"Default Window Settings"])||void 0}function uT(t){return[t.background,t.foreground,t.cursor,t.selectionBackground,...t.ansi]}function nk(t){let e=new Set(Mt(t.entries).map((n)=>n.name));return t.themes.filter((n)=>e.has(n.name)||n.name===t.startup)}function bh(t,e){let n=gh(e);return t.terminalBase??(n&&!n.startsWith(Qo)?n:"Basic")}function wh(t,e){let n=/^(\d+)x(\d+)$/.exec(st(aT(t,e)).trim());return n?{width:Number(n[1])*2,height:Number(n[2])*2}:void 0}function $h(t,e,n,r){let i=r?.width??t,s=r?.height??e,o=Ut.indexOf(n.position)+1||5,a=ws(t,e,i,s,100,o,n.cover),c=Math.min(1,t/Math.max(1,a.w));return{width:Math.max(1,Math.round(i*c)),height:Math.max(1,Math.round(s*c)),at:{x:Math.round(a.x*c),y:Math.round(a.y*c),w:Math.round(a.w*c),h:Math.round(a.h*c)}}}var rk=/^ttheme-(.+)\.([0-9a-z-]+)\.png$/;function mu(t){let e=new Map;for(let n of tk(t)?iT(t):[]){let[,r]=rk.exec(n)??[];if(r)e.set(r,[...e.get(r)??[],n])}return e}function lT(t){return[...mu(t)].map(([e,n])=>`${e} ${(rk.exec(n[0])??[])[2]}`).sort().join(" ")}function Q$(t){let e=Fs(t.configHome),n=mu(e),r=wh(t.host.env,t.home),i=new Map,s=(o)=>{for(let a of o)oT(Ei(e,a),{force:!0})};for(let o of nk(t)){let a=n.get(Xt(o.name))??[];n.delete(Xt(o.name));let c=Se(q(t.configHome),o.name,t.home),u=c&&tk(c.image)?new Uint8Array(sT(c.image)):void 0,l=u&&un(u);if(!c||!u||!l||c.opacity<=0){s(a);continue}let f=$h(l.width,l.height,c,r),d=rT("sha1").update(u).update(JSON.stringify([o.background.toLowerCase(),c.opacity,f])).digest("hex").slice(0,8),h=`${H(o.name)}.${d}.png`,m=Ei(e,h);if(!a.includes(h)){let $;try{$=cr(ar(Ht(u),o.background,c.opacity,f))}catch{s(a);continue}let[g,...b]=a;if(g)Xr(Ei(e,g),m,$);else P(m,$);s(b)}else s(a.filter(($)=>$!==h));i.set(o.name,m)}for(let o of n.values())s(o);return i}function X$(t,e){ph(t.host,t.configHome,["write",bh(t.state,t.host),...nk(t).flatMap((n)=>[Qe(n.name),...uT(n),e.get(n.name)??"-"])])}var fT={key:"terminalBase",profile:Qe,base(t){let e=gh(t.host);return e&&!e.startsWith(Qo)?{...t.state,terminalBase:e}:t.state},point(t,e){let n=gh(t.host),r=n?.startsWith(Qo)===!0;if(t.state.palettes.length===0)ph(t.host,t.configHome,["drop"]);let i=t.startup?e||r?Qe(t.startup):void 0:r?bh(t.state,t.host):void 0;if(i===void 0||i===n&&!e)return;for(let o of["Default Window Settings","Startup Window Settings"])t.host.run("defaults",["write",ek,o,"-string",i]);return{restart:Boolean(t.host.run("pgrep",["-x","Terminal"]))&&ph(t.host,t.configHome,["loaded",i])!=="1"}}},ik={id:"terminal-app",name:"Terminal.app",emitter:eh,offered:(t,e)=>e.platform==="darwin",present:()=>!1,sync(t,e){e.write(hu(t.configHome),cT),X$(t,Q$(t))},pictures(t){X$(t,Q$(t))},layer:(t,e)=>({TTHEME_TERMINAL_APP_BASE:bh(t.state,e),TTHEME_TERMINAL_PICTURES:lT(Fs(t.configHome))}),plan:(t)=>[`Add a "${Qe("<palette>")}" profile per palette to Terminal.app's settings — a copy of your own profile in the palette's colors, with its picture`,...t.startup?[`Make "${Qe(t.startup)}" Terminal.app's default — \`ttheme off\` puts yours back`]:[]],notes:()=>[],next(t,e){let n=[`Terminal.app A "${Qe("<palette>")}" profile per palette in Settings › Profiles`];if(t.startup)n.push(e?.restart?`Restart Terminal New windows and tabs open on "${Qe(t.startup)}"`:`Terminal default "${Qe(t.startup)}", which follows \`ttheme default\``);return n},unwire:()=>({edits:[],removals:[],touches:[]}),defaults:fT};import{spawn as dT}from"node:child_process";import{existsSync as Hr,mkdirSync as hT,readdirSync as kh,readFileSync as yh,realpathSync as mT,rmSync as pT,writeFileSync as gT}from"node:fs";import{dirname as ck,join as xe}from"node:path";function Si(t){return process.platform==="darwin"?xe(t,".warp","themes"):xe(qo(t),"warp-terminal","themes")}function Fr(t,e){return process.platform==="darwin"?xe(t,".warp","settings.toml"):xe(e,"warp-terminal","settings.toml")}var pu='"dark"';function gu(t){return xe(t,"ttheme","warp.base")}var uk="[appearance.themes]";function lk(t){let e=t.findIndex((r)=>r.trim()===uk);if(e<0)return;let n=t.findIndex((r,i)=>i>e&&r.trimStart().startsWith("["));return[e,n<0?t.length:n]}function Cr(t){let e=t.split(`
588
+ `),n=lk(e);if(!n)return;return e.slice(n[0]+1,n[1]).find((i)=>/^theme\s*=/.test(i))?.replace(/^theme\s*=\s*/,"").trim()}function Eh(t,e=`${H(t)}.yaml`){return`{ custom = { name = "${t}", path = "${e}" } }`}function bT(t){return t?.includes(`path = "${H("")}`)===!0?/name = "([^"]+)"/.exec(t)?.[1]:void 0}function bu(t,e){let n=t.split(`
589
+ `),r=lk(n);if(!r)return e===void 0?t:`${t.replace(/\n*$/,`
584
590
  `)}
585
- ${G$}
591
+ ${uk}
586
592
  theme = ${e}
587
593
  `;let i=n.findIndex((s,o)=>o>r[0]&&o<r[1]&&/^theme\s*=/.test(s));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(`
588
- `)}function ch(t){return Fr(t)?.includes(`path = "${A("")}`)===!0}var CR="setTimeout(() => { const fs = require('node:fs'); const [file, next, seen, theme] = process.argv.slice(-4); if (fs.readFileSync(file, 'utf8') !== seen || !fs.existsSync(theme)) return; const tmp = file + '.ttheme-' + process.pid; fs.writeFileSync(tmp, next); fs.chmodSync(tmp, fs.statSync(file).mode & 0o7777); fs.renameSync(tmp, file) }, 500)";function B$(t,e,n){return{image:Ee(t,t$(e.name,n.image,e.background)),opacity:n.opacity}}function F$(t){let e=ki(t.home),n=D(t.configHome),r=new Map,i=new Set;for(let s of t.themes){let o=we(n,s.name,t.home),a=zo(s.name,o&&B$(e,s,o));r.set(s.name,a);for(let c of new Set([a,zo(s.name)]))if(!Hr(Ee(e,c)))i.add(c)}return{files:r,fresh:i}}function C$(t,e,n){let r=ki(t.home),i=D(t.configHome),s=new Set(n.values()),o=Fr(it(Ar(t.home,t.configHome)))??"";for(let u of t.themes){let l=we(i,u.name,t.home),f=n.get(u.name);if(l&&f){let d=B$(r,u,l);if(!Hr(d.image))try{let h=At(new Uint8Array(ah(l.image)));H(d.image,nr(er(h,u.background,1)))}catch{n.set(u.name,zo(u.name));continue}e.write(Ee(r,f),Do(u,d))}}if(!Hr(r))return;let a=(u,l)=>u.startsWith(A(""))&&new RegExp(`\\.[0-9a-f]{8}\\.${l}$`).test(u);for(let u of oh(r))if(a(u,"yaml")&&!s.has(u)&&!o.includes(`path = "${u}"`))e.remove(Ee(r,u));let c=new Set;for(let u of oh(r)){let l=u.startsWith(A(""))&&u.endsWith(".yaml")?/^ {2}path: "(.+)"$/m.exec(it(Ee(r,u)))?.[1]:void 0;if(l)c.add(l)}for(let u of oh(r))if(a(u,"png")&&!c.has(Ee(r,u)))e.remove(Ee(r,u))}function LR(t,e){let n=process.env.TTHEME_WARP_WEARS;return t!==void 0&&n!==void 0&&e.files.has(n)?n:t}function L$(t,e,n,r=!1){let i=Ar(t.home,t.configHome);if(!Hr(i))return;let s=cu(t.configHome),o=ah(i,"utf8"),a=r?FR(Fr(o)):e;if(r&&(a===void 0||!n.files.has(a)))return;let c;if(a){if(!ch(o)&&!Hr(s))TR(j$(s),{recursive:!0}),AR(s,Fr(o)??"");c=uh(a,n.files.get(a))}else{if(!ch(o))return;c=Hr(s)&&ah(s,"utf8")||au,HR(s,{force:!0})}let u=uu(o,c);if(u===o)return;let l=a===void 0?void 0:n.files.get(a)??`${A(a)}.yaml`;if(l!==void 0&&n.fresh.has(l))Gl(i),RR(process.execPath,["-e",CR,PR(i),u,o,Ee(ki(t.home),l)],{detached:!0,stdio:"ignore"}).unref();else en(i,u);return i}var lh={id:"warp",name:"Warp",emitter:Wd,shelf:{from:"themes",dir:(t)=>ki(t.home)},bakes:!0,offered:(t,e)=>e.platform!=="win32",present:(t)=>Hr(j$(ki(t.home))),sync(t,e){let n=F$(t);e.themes(lh),C$(t,e,n.files);let r=L$(t,LR(t.startup,n),n);if(r)e.note(r)},pictures(t,e){let n=F$(t);C$(t,e,n.files),L$(t,void 0,n,!0)},plan(t){let e=Ar(t.home,t.configHome);return t.startup&&Hr(e)?[`Edit ${Tt(e,t.home)} — [appearance.themes] theme; \`ttheme off\` puts yours back`]:[]},notes:()=>["Warp wears one theme for the whole app, set through its settings.toml — a tab that takes a palette (`ttheme use`, a pin, preview) switches it, and switching tabs puts on the palette of the tab in front, read from Warp’s session database with sqlite3"],next:()=>[],unwire(t){let e=Ar(t.home,t.configHome),n=it(e);return{edits:ch(n)?[{file:e,content:uu(n,it(cu(t.configHome))||au)}]:[],removals:[],touches:[]}}};import{existsSync as du}from"node:fs";import{join as Ps}from"node:path";var W$=/-- ttheme begin\n[\s\S]*?-- ttheme end\n?/,jR=/^return config[ \t]*$/gm;function GR(t){return`dofile(${JSON.stringify(t)})(config)`}var K$=`local wezterm = require 'wezterm'
594
+ `)}function vh(t){return Cr(t)?.includes(`path = "${H("")}`)===!0}var wT="setTimeout(() => { const fs = require('node:fs'); const [file, next, seen, theme] = process.argv.slice(-4); if (fs.readFileSync(file, 'utf8') !== seen || !fs.existsSync(theme)) return; const tmp = file + '.ttheme-' + process.pid; fs.writeFileSync(tmp, next); fs.chmodSync(tmp, fs.statSync(file).mode & 0o7777); fs.renameSync(tmp, file) }, 500)";function fk(t,e,n){return{image:xe(t,S$(e.name,n.image,e.background)),opacity:n.opacity}}function sk(t){let e=Si(t.home),n=q(t.configHome),r=new Map,i=new Set;for(let s of t.themes){let o=Se(n,s.name,t.home),a=Yo(s.name,o&&fk(e,s,o));r.set(s.name,a);for(let c of new Set([a,Yo(s.name)]))if(!Hr(xe(e,c)))i.add(c)}return{files:r,fresh:i}}function ok(t,e,n){let r=Si(t.home),i=q(t.configHome),s=new Set(n.values()),o=Cr(st(Fr(t.home,t.configHome)))??"";for(let u of t.themes){let l=Se(i,u.name,t.home),f=n.get(u.name);if(l&&f){let d=fk(r,u,l);if(!Hr(d.image))try{let h=Ht(new Uint8Array(yh(l.image)));P(d.image,cr(ar(h,u.background,1)))}catch{n.set(u.name,Yo(u.name));continue}e.write(xe(r,f),Jo(u,d))}}if(!Hr(r))return;let a=(u,l)=>u.startsWith(H(""))&&new RegExp(`\\.[0-9a-f]{8}\\.${l}$`).test(u);for(let u of kh(r))if(a(u,"yaml")&&!s.has(u)&&!o.includes(`path = "${u}"`))e.remove(xe(r,u));let c=new Set;for(let u of kh(r)){let l=u.startsWith(H(""))&&u.endsWith(".yaml")?/^ {2}path: "(.+)"$/m.exec(st(xe(r,u)))?.[1]:void 0;if(l)c.add(l)}for(let u of kh(r))if(a(u,"png")&&!c.has(xe(r,u)))e.remove(xe(r,u))}function $T(t,e){let n=process.env.TTHEME_WARP_WEARS;return t!==void 0&&n!==void 0&&e.files.has(n)?n:t}function ak(t,e,n,r=!1){let i=Fr(t.home,t.configHome);if(!Hr(i))return;let s=gu(t.configHome),o=yh(i,"utf8"),a=r?bT(Cr(o)):e;if(r&&(a===void 0||!n.files.has(a)))return;let c;if(a){if(!vh(o)&&!Hr(s))hT(ck(s),{recursive:!0}),gT(s,Cr(o)??"");c=Eh(a,n.files.get(a))}else{if(!vh(o))return;c=Hr(s)&&yh(s,"utf8")||pu,pT(s,{force:!0})}let u=bu(o,c);if(u===o)return;let l=a===void 0?void 0:n.files.get(a)??`${H(a)}.yaml`;if(l!==void 0&&n.fresh.has(l))Dl(i),dT(process.execPath,["-e",wT,mT(i),u,o,xe(Si(t.home),l)],{detached:!0,stdio:"ignore"}).unref();else an(i,u);return i}var Sh={id:"warp",name:"Warp",emitter:nh,shelf:{from:"themes",dir:(t)=>Si(t.home)},bakes:!0,offered:(t,e)=>e.platform!=="win32",present:(t)=>Hr(ck(Si(t.home))),sync(t,e){let n=sk(t);e.themes(Sh),ok(t,e,n.files);let r=ak(t,$T(t.startup,n),n);if(r)e.note(r)},pictures(t,e){let n=sk(t);ok(t,e,n.files),ak(t,void 0,n,!0)},plan(t){let e=Fr(t.home,t.configHome);return t.startup&&Hr(e)?[`Edit ${Tt(e,t.home)} — [appearance.themes] theme; \`ttheme off\` puts yours back`]:[]},notes:()=>["Warp wears one theme for the whole app, set through its settings.toml — a tab that takes a palette (`ttheme use`, a pin, preview) switches it, and switching tabs puts on the palette of the tab in front, read from Warp’s session database with sqlite3"],next:()=>[],unwire(t){let e=Fr(t.home,t.configHome),n=st(e);return{edits:vh(n)?[{file:e,content:bu(n,st(gu(t.configHome))||pu)}]:[],removals:[],touches:[]}}};import{existsSync as ku}from"node:fs";import{join as Cs}from"node:path";var dk=/-- ttheme begin\n[\s\S]*?-- ttheme end\n?/,kT=/^return config[ \t]*$/gm;function yT(t){return`dofile(${JSON.stringify(t)})(config)`}var mk=`local wezterm = require 'wezterm'
589
595
  local config = wezterm.config_builder()
590
596
 
591
- `;function _R(t){let e=t.replace(/-- ttheme begin\n[\s\S]*?-- ttheme end\n\n?/,"");return e===`${K$}return config
592
- `?"":e}function fh(t,e){let n=`-- ttheme begin
597
+ `;function vT(t){let e=t.replace(/-- ttheme begin\n[\s\S]*?-- ttheme end\n\n?/,"");return e===`${mk}return config
598
+ `?"":e}function Mh(t,e){let n=`-- ttheme begin
593
599
  ${e}
594
600
  -- ttheme end
595
- `;if(W$.test(t))return t.replace(W$,n);if(t==="")return`${K$}${n}
601
+ `;if(dk.test(t))return t.replace(dk,n);if(t==="")return`${mk}${n}
596
602
  return config
597
- `;let r=[...t.matchAll(jR)].at(-1);if(r?.index===void 0)return;return`${t.slice(0,r.index)}${n}
598
- ${t.slice(r.index)}`}function lu(t,e){let n=Ps(e,".wezterm.lua");return du(n)?n:Ps(t,"wezterm","wezterm.lua")}function U$(t){return Ps(t.configHome,"wezterm","colors")}function fu(t){return Ps(t.configHome,"ttheme","wezterm.lua")}var dh={id:"wezterm",name:"WezTerm",emitter:Ud,shelf:{from:"colors",dir:U$},offered:()=>!0,present:(t)=>du(Ps(t.configHome,"wezterm"))||du(Ps(t.home,".wezterm.lua")),sync(t,e){e.themes(dh),e.write(fu(t),r$({path:fu(t),colors:U$(t),backgrounds:D(t.configHome),...t.startup?{startup:t.startup}:{},palettes:t.themes}));let n=lu(t.configHome,t.home),r=fh(it(n),GR(fu(t)));if(r!==void 0)e.wire(n,r)},plan(t){let e=lu(t.configHome,t.home);return fh(it(e),"")!==void 0?[`Edit ${Tt(e,t.home)} — a ttheme block before \`return config\`: color_scheme_dirs, color_scheme, pictures`]:[]},notes(t){let e=lu(t.configHome,t.home);return du(e)&&fh(it(e),"")===void 0?[`${e} has no \`return config\` line — ttheme left it alone; call \`dofile("${fu(t)}")(config)\` from it yourself`]:[]},next:()=>["WezTerm Reloads its config by itself"],unwire:(t)=>({edits:hn(lu(t.configHome,t.home),_R),removals:[],touches:[]})};import{existsSync as D$,readFileSync as BR,utimesSync as WR}from"node:fs";import{dirname as UR,join as hu}from"node:path";function hh(t){return hu(t,"Microsoft","Windows Terminal","Fragments","ttheme","ttheme.json")}function z$(t){return[hu(t,"Packages","Microsoft.WindowsTerminal_8wekyb3d8bbwe","LocalState","settings.json"),hu(t,"Packages","Microsoft.WindowsTerminalPreview_8wekyb3d8bbwe","LocalState","settings.json"),hu(t,"Microsoft","Windows Terminal","settings.json")].filter((e)=>D$(e))}function KR(t){for(let e of t){let n=/"defaultProfile"\s*:\s*"(\{[0-9a-fA-F-]+\})"/.exec(BR(e,"utf8"))?.[1];if(n)return n}return}function q$(t){if(t.platform==="win32")return t.env.LOCALAPPDATA;if(!t.env.WSL_DISTRO_NAME)return;let e=t.run("cmd.exe",["/d","/c","echo %LOCALAPPDATA%"]);return e&&t.run("wslpath",["-u",e])||void 0}var Y$={id:"windows-terminal",name:"Windows Terminal",emitter:zd,offered:(t)=>t.wtHome!==void 0,present:(t)=>t.wtHome!==void 0,installs:(t)=>({wtHome:t.wtHome,wtProfile:t.wtProfile}),sync(t,e){let{wtHome:n,wtProfile:r}=t.state;if(!n)return;let i=z$(n);if(e.write(hh(n),Kd(t.themes,r??KR(i),t.startup))){let s=new Date;for(let o of i)WR(o,s,s);if(i.length>0)e.repaint()}},plan:(t)=>t.state.wtHome?[`Write ${hh(t.state.wtHome)} — its schemes, and touch settings.json so it reloads`]:[],notes:(t)=>t.state.wtHome?[]:["Windows Terminal: %LOCALAPPDATA% was not found — drop the release fragment into its Fragments folder yourself"],next:()=>["Windows Terminal Reloads its settings by itself"],unwire(t,e){let n=e?.wtHome,r=n?UR(hh(n)):void 0;return{edits:[],removals:r&&D$(r)?[r]:[],touches:n?z$(n):[]}}};var mn={ghostty:Yd,kitty:Qd,alacritty:qd,wezterm:dh,iterm2:g$,"windows-terminal":Y$,warp:lh,konsole:I$,"terminal-app":A$};function pt(t=Dt){return t.map((e)=>mn[e])}function vi(t){return t.startup&&t.palettes.includes(t.startup)?t.startup:t.palettes[0]}function Me(t){return t.off?void 0:vi(t)}function J(){return process.env.XDG_CONFIG_HOME??Hs(Ye(),".config")}var yi=(t)=>typeof t==="string"&&t!==""?t:void 0,zR={author:yi,startup:yi,off:(t)=>t?!0:void 0,itermBase:yi,konsoleBase:yi,terminalBase:yi,wtHome:yi,wtProfile:yi,markets:(t)=>Array.isArray(t)?t.filter((e)=>typeof e==="string"):void 0,updates:(t)=>t&&typeof t==="object"?Object.fromEntries(Object.entries(t).filter((e)=>typeof e[1]==="boolean")):void 0};function _(t){let e=pr(t);if(!mu(e))throw Error(`nothing installed yet at ${e} — run \`ttheme init\` first`);let n=JSON.parse(J$(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)=>Dt.includes(r)),...Object.fromEntries(Object.entries(zR).flatMap(([r,i])=>{let s=i(n[r]);return s===void 0?[]:[[r,s]]})),palettes:n.palettes}}function Ae(t,e){H(pr(t),`${JSON.stringify(e,null,2)}
599
- `)}function V$(t,e){let n=new Map(t.palettes.map((i)=>[i.name,i])),r=e.filter((i)=>!n.has(i));if(r.length>0){let i=[...new Set(r.flatMap((o)=>ct(o)??[]))].filter((o)=>!t.palettes.some((a)=>ct(a.name)===o)),s=i.length>0?`add ${i.join(", ")} first — \`ttheme market search\` finds a market's repository`:td(Et(t.palettes),r);throw Error(`not in any market: ${r.join(", ")} — ${s}`)}return t.palettes.filter((i)=>e.includes(i.name))}function Vo(t,e,n){return{configHome:t,home:n,state:e,startup:Me(e)}}function Z$(t,e,n,r,i){return{...Vo(t,n,r),entries:e,themes:e.map(Ue),host:i}}function Q$(t){let e=[],n={written:e,repainted:!1,write(r,i){if(e.push(r),mu(r)&&J$(r,"utf8")===i)return!1;return H(r,i),!0},wire(r,i){e.push(r),en(r,i)},note(r){e.push(r)},remove(r){mh(r,{force:!0})},themes(r){let i=r.shelf?.dir(t);if(!i)return;for(let s of t.themes)for(let{file:o,content:a}of Fd(r,s))n.write(Hs(i,o),a)},repaint(){n.repainted=!0}};return n}function DR(t,e){return Object.assign({},...pt(t.state.terminals).map((n)=>n.layer?.(t,e)??{}))}function Ct(t,e,n,r=Ye(),i=De()){vt(D(t));let s=V$(di(t,e),n.palettes),o=bc(s,Tn(t));ww(t,new Map(o.map((u)=>[u.name,dr(u)]))),ow(t),yc(t,s);let a=Z$(t,o,n,r,i),c=Q$(a);for(let u of pt(n.terminals))u.sync(a,c);return c.written.push(ek(a,i,c.repainted)),tk(t,o,r),c.written}function X$(t,e=Ye()){if(!mu(Hs(t,"ttheme","palettes.zsh")))return;let n=new Set(_(t).palettes);tk(t,ie(t).palettes.filter((r)=>n.has(r.name)),e)}function tk(t,e,n){let r=Hs(t,"ttheme","aliases.zsh"),i=z0(qR(e,n));if(it(r)!==i)H(r,i)}function qR(t,e){let n=t.flatMap((s)=>s.booru?[s.booru]:[]),r=_f(n,e),i={};for(let s of t){let o=new Set(s.nativeNames??[]),a=(s.booru?r.get(s.booru)??[]:[]).filter((c)=>!o.has(c));if(a.length>0)i[s.name]=a}return i}function ek(t,e,n){let r=Hs(t.configHome,"ttheme","palettes.zsh"),i=Hd(t.entries,t.startup,t.state.terminals,DR(t,e));if(n||it(r)!==i)H(r,i),mh(`${r}.zwc`,{force:!0});return r}function Oe(t,e=Ye(),n=De()){let r=_(t),i=pt(r.terminals).filter((a)=>a.pictures);if(i.length===0)return;let s=Z$(t,V$(ie(t),r.palettes),r,e,n),o=Q$(s);for(let a of i)a.pictures?.(s,o);ek(s,n,!1)}function Si(t){return!pt(t).some((e)=>e.bakes)}function pu(t,e,n=Ye()){let r=Vo(t,e,n);return pt(e.terminals).flatMap((i)=>[...i.shelf?[`Write ${Tt(i.shelf.dir(r),n)}/${A("*")} — a theme file per palette`]:[],...i.plan(r)])}function gu(t,e,n=Ye()){let r=Vo(t,e,n);return pt(e.terminals).flatMap((i)=>i.notes(r))}function bu(t,e,n,r=Ye()){let i=Vo(t,e,r);return pt(e.terminals).flatMap((s)=>s.next(i,n.get(s.id)))}function wu(t,e,n,r,i=Ye()){let s=[],o=Ot(t,e,!1).palettes;for(let a of pt(n)){let c=a.shelf?.dir({configHome:t,home:i});for(let u of c?o.filter((l)=>r.includes(l.name)):[])for(let{file:l}of Fd(a,Ue(u))){let f=Hs(c,l);if(mu(f))mh(f,{force:!0}),s.push(f)}}return s}function nk(t,e,n,r){return{...Vo(t,e,r),host:n}}function Zo(t,e,n,r=Ye()){return pt(e.terminals).reduce((i,s)=>s.defaults?.base(nk(t,i,n,r))??i,e)}function Ei(t,e,n,r,i=Ye()){let s=new Map;for(let o of pt(e.terminals)){let a=o.defaults?.point(nk(t,e,r,i),n);if(a)s.set(o.id,a)}return s}function pn(t,e,n,r,i=!1,s=De(),o=Ye()){let a=i||!Me(n)&&Me(r)!==void 0,c=a?Zo(t,r,s,o):r;return Ct(t,e,c,o,s),Ae(t,c),a||Me(n)!==Me(r)?Ei(t,c,a,s,o):new Map}import{performance as rk}from"node:perf_hooks";var YR=16,ph=80,ik="\x1B[?2026h",sk="\x1B[?2026l";class Mi{shown=[];pointer=new Fo;cursor="";wipe="";immediate;delayed;ticker;last=Number.NEGATIVE_INFINITY;stopped=!1;write;view;beat;constructor(t){this.write=t.write,this.view=t.view,this.beat=t.beat??(()=>{})}request(){if(this.stopped||this.immediate||this.delayed)return;let t=this.last+YR-rk.now();if(t>0)this.delayed=setTimeout(this.paint,t);else this.immediate=setImmediate(this.paint)}soon(){if(this.stopped||this.immediate)return;clearTimeout(this.delayed),this.delayed=void 0,this.immediate=setImmediate(this.paint)}now(){this.cancel(),this.paint()}reset(t=""){this.shown=[],this.cursor="",this.wipe=t}stop(){this.stopped=!0,this.cancel(),clearInterval(this.ticker),this.ticker=void 0}point(t){return this.pointer.point(t)}drop(){this.pointer.drop()}cancel(){clearImmediate(this.immediate),clearTimeout(this.delayed),this.immediate=void 0,this.delayed=void 0}paint=()=>{if(this.immediate=void 0,this.delayed=void 0,this.stopped)return;let{drawn:t,targets:e}=Ec(()=>this.view());if(!t)return;this.last=rk.now();let{lines:n,zones:r}=Mc(t.lines,e);this.pointer.zones=[...t.zones??[],...r];let i=this.wipe;this.wipe="";let s=new Set,o=Math.max(n.length,this.shown.length);for(let l=0;l<o;l++){let f=n[l];if(f!==this.shown[l])i+=`\x1B[${l+1};1H\x1B[0m\x1B[2K${f??""}`,s.add(l)}this.shown=n;let a=t.after?.(s)??"",c=t.cursor??"",u=c!==""&&(i!==""||a!==""||c!==this.cursor);if(this.cursor=c,i||a||u)this.write(`${ik}${i}${a}\x1B[0m${u?c:""}${sk}`);this.tick(t.ticking===!0)};tick(t){if(t&&!this.ticker)this.ticker=setInterval(()=>{this.beat(),this.request()},ph);else if(!t&&this.ticker)clearInterval(this.ticker),this.ticker=void 0}}class gh{shown=[];write;cols;constructor(t,e){this.write=t,this.cols=e}draw(t){this.put(t,"")}redraw(t){let e=`${this.shown.length>1?`\x1B[${this.shown.length-1}A`:""}${this.shown.length>0?"\r\x1B[J":""}`;this.shown=[],this.put(t,e)}end(t){this.put(t,""),this.write(`
603
+ `;let r=[...t.matchAll(kT)].at(-1);if(r?.index===void 0)return;return`${t.slice(0,r.index)}${n}
604
+ ${t.slice(r.index)}`}function wu(t,e){let n=Cs(e,".wezterm.lua");return ku(n)?n:Cs(t,"wezterm","wezterm.lua")}function hk(t){return Cs(t.configHome,"wezterm","colors")}function $u(t){return Cs(t.configHome,"ttheme","wezterm.lua")}var Oh={id:"wezterm",name:"WezTerm",emitter:rh,shelf:{from:"colors",dir:hk},offered:()=>!0,present:(t)=>ku(Cs(t.configHome,"wezterm"))||ku(Cs(t.home,".wezterm.lua")),sync(t,e){e.themes(Oh),e.write($u(t),x$({path:$u(t),colors:hk(t),backgrounds:q(t.configHome),...t.startup?{startup:t.startup}:{},palettes:t.themes}));let n=wu(t.configHome,t.home),r=Mh(st(n),yT($u(t)));if(r!==void 0)e.wire(n,r)},plan(t){let e=wu(t.configHome,t.home);return Mh(st(e),"")!==void 0?[`Edit ${Tt(e,t.home)} — a ttheme block before \`return config\`: color_scheme_dirs, color_scheme, pictures`]:[]},notes(t){let e=wu(t.configHome,t.home);return ku(e)&&Mh(st(e),"")===void 0?[`${e} has no \`return config\` line — ttheme left it alone; call \`dofile("${$u(t)}")(config)\` from it yourself`]:[]},next:()=>["WezTerm Reloads its config by itself"],unwire:(t)=>({edits:wn(wu(t.configHome,t.home),vT),removals:[],touches:[]})};import{existsSync as gk,readFileSync as ET,utimesSync as ST}from"node:fs";import{dirname as MT,join as yu}from"node:path";function xh(t){return yu(t,"Microsoft","Windows Terminal","Fragments","ttheme","ttheme.json")}function pk(t){return[yu(t,"Packages","Microsoft.WindowsTerminal_8wekyb3d8bbwe","LocalState","settings.json"),yu(t,"Packages","Microsoft.WindowsTerminalPreview_8wekyb3d8bbwe","LocalState","settings.json"),yu(t,"Microsoft","Windows Terminal","settings.json")].filter((e)=>gk(e))}function OT(t){for(let e of t){let n=/"defaultProfile"\s*:\s*"(\{[0-9a-fA-F-]+\})"/.exec(ET(e,"utf8"))?.[1];if(n)return n}return}function bk(t){if(t.platform==="win32")return t.env.LOCALAPPDATA;if(!t.env.WSL_DISTRO_NAME)return;let e=t.run("cmd.exe",["/d","/c","echo %LOCALAPPDATA%"]);return e&&t.run("wslpath",["-u",e])||void 0}var wk={id:"windows-terminal",name:"Windows Terminal",emitter:sh,offered:(t)=>t.wtHome!==void 0,present:(t)=>t.wtHome!==void 0,installs:(t)=>({wtHome:t.wtHome,wtProfile:t.wtProfile}),sync(t,e){let{wtHome:n,wtProfile:r}=t.state;if(!n)return;let i=pk(n);if(e.write(xh(n),ih(t.themes,r??OT(i),t.startup))){let s=new Date;for(let o of i)ST(o,s,s);if(i.length>0)e.repaint()}},plan:(t)=>t.state.wtHome?[`Write ${xh(t.state.wtHome)} — its schemes, and touch settings.json so it reloads`]:[],notes:(t)=>t.state.wtHome?[]:["Windows Terminal: %LOCALAPPDATA% was not found — drop the release fragment into its Fragments folder yourself"],next:()=>["Windows Terminal Reloads its settings by itself"],unwire(t,e){let n=e?.wtHome,r=n?MT(xh(n)):void 0;return{edits:[],removals:r&&gk(r)?[r]:[],touches:n?pk(n):[]}}};var $n={ghostty:ch,kitty:dh,alacritty:ah,wezterm:Oh,iterm2:G$,"windows-terminal":wk,warp:Sh,konsole:Z$,"terminal-app":ik};function pt(t=qt){return t.map((e)=>$n[e])}function Oi(t){return t.startup&&t.palettes.includes(t.startup)?t.startup:t.palettes[0]}function Ie(t){return t.off?void 0:Oi(t)}function J(){return process.env.XDG_CONFIG_HOME??Ls(Xe(),".config")}var Mi=(t)=>typeof t==="string"&&t!==""?t:void 0,xT={author:Mi,startup:Mi,off:(t)=>t?!0:void 0,itermBase:Mi,konsoleBase:Mi,terminalBase:Mi,wtHome:Mi,wtProfile:Mi,markets:(t)=>Array.isArray(t)?t.filter((e)=>typeof e==="string"):void 0,updates:(t)=>t&&typeof t==="object"?Object.fromEntries(Object.entries(t).filter((e)=>typeof e[1]==="boolean")):void 0};function L(t){let e=Hn(t);if(!vu(e))throw Error(`nothing installed yet at ${e} — run \`ttheme init\` first`);let n=JSON.parse($k(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)=>qt.includes(r)),...Object.fromEntries(Object.entries(xT).flatMap(([r,i])=>{let s=i(n[r]);return s===void 0?[]:[[r,s]]})),palettes:n.palettes}}function Le(t,e){P(Hn(t),`${JSON.stringify(e,null,2)}
605
+ `)}function kk(t,e){let n=new Map(t.palettes.map((i)=>[i.name,i])),r=e.filter((i)=>!n.has(i));if(r.length>0){let i=[...new Set(r.flatMap((o)=>lt(o)??[]))].filter((o)=>!t.palettes.some((a)=>lt(a.name)===o)),s=i.length>0?`add ${i.join(", ")} first — \`ttheme market search\` finds a market's repository`:md(Mt(t.palettes),r);throw Error(`not in any market: ${r.join(", ")} — ${s}`)}return t.palettes.filter((i)=>e.includes(i.name))}function Xo(t,e,n){return{configHome:t,home:n,state:e,startup:Ie(e)}}function yk(t,e,n,r,i){return{...Xo(t,n,r),entries:e,themes:e.map(De),host:i}}function vk(t){let e=[],n={written:e,repainted:!1,write(r,i){if(e.push(r),vu(r)&&$k(r,"utf8")===i)return!1;return P(r,i),!0},wire(r,i){e.push(r),an(r,i)},note(r){e.push(r)},remove(r){Ih(r,{force:!0})},themes(r){let i=r.shelf?.dir(t);if(!i)return;for(let s of t.themes)for(let{file:o,content:a}of Jd(r,s))n.write(Ls(i,o),a)},repaint(){n.repainted=!0}};return n}function IT(t,e){return Object.assign({},...pt(t.state.terminals).map((n)=>n.layer?.(t,e)??{}))}function jt(t,e,n,r=Xe(),i=Ze()){kt(q(t));let s=kk(gi(t,e),n.palettes),o=Mc(s,pn(t));Hw(t,new Map(o.map((u)=>[u.name,br(u)]))),yw(t),Ic(t,s);let a=yk(t,o,n,r,i),c=vk(a);for(let u of pt(n.terminals))u.sync(a,c);return c.written.push(Mk(a,i,c.repainted)),Sk(t,o,r),c.written}function Ek(t,e=Xe()){if(!vu(Ls(t,"ttheme","palettes.zsh")))return;let n=new Set(L(t).palettes);Sk(t,ue(t).palettes.filter((r)=>n.has(r.name)),e)}function Sk(t,e,n){let r=Ls(t,"ttheme","aliases.zsh"),i=p$(RT(e,n));if(st(r)!==i)P(r,i)}function RT(t,e){let n=t.flatMap((s)=>s.booru?[s.booru]:[]),r=Vf(n,e),i={};for(let s of t){let o=new Set(s.nativeNames??[]),a=(s.booru?r.get(s.booru)??[]:[]).filter((c)=>!o.has(c));if(a.length>0)i[s.name]=a}return i}function Mk(t,e,n){let r=Ls(t.configHome,"ttheme","palettes.zsh"),i=qd(t.entries,t.startup,t.state.terminals,IT(t,e));if(n||st(r)!==i)P(r,i),Ih(`${r}.zwc`,{force:!0});return r}function Re(t,e=Xe(),n=Ze()){let r=L(t),i=pt(r.terminals).filter((a)=>a.pictures);if(i.length===0)return;let s=yk(t,kk(ue(t),r.palettes),r,e,n),o=vk(s);for(let a of i)a.pictures?.(s,o);Mk(s,n,!1)}function xi(t){return!pt(t).some((e)=>e.bakes)}function Eu(t,e,n=Xe()){let r=Xo(t,e,n);return pt(e.terminals).flatMap((i)=>[...i.shelf?[`Write ${Tt(i.shelf.dir(r),n)}/${H("*")} — a theme file per palette`]:[],...i.plan(r)])}function Su(t,e,n=Xe()){let r=Xo(t,e,n);return pt(e.terminals).flatMap((i)=>i.notes(r))}function Mu(t,e,n,r=Xe()){let i=Xo(t,e,r);return pt(e.terminals).flatMap((s)=>s.next(i,n.get(s.id)))}function js(t,e,n,r,i=Xe()){let s=[],o=Ot(t,e,!1).palettes;for(let a of pt(n)){let c=a.shelf?.dir({configHome:t,home:i});for(let u of c?o.filter((l)=>r.includes(l.name)):[])for(let{file:l}of Jd(a,De(u))){let f=Ls(c,l);if(vu(f))Ih(f,{force:!0}),s.push(f)}}return s}function Ok(t,e,n,r){return{...Xo(t,e,r),host:n}}function ta(t,e,n,r=Xe()){return pt(e.terminals).reduce((i,s)=>s.defaults?.base(Ok(t,i,n,r))??i,e)}function Ii(t,e,n,r,i=Xe()){let s=new Map;for(let o of pt(e.terminals)){let a=o.defaults?.point(Ok(t,e,r,i),n);if(a)s.set(o.id,a)}return s}function je(t,e,n,r,i=!1,s=Ze(),o=Xe()){let a=i||!Ie(n)&&Ie(r)!==void 0,c=a?ta(t,r,s,o):r;return jt(t,e,c,o,s),Le(t,c),a||Ie(n)!==Ie(r)?Ii(t,c,a,s,o):new Map}import{performance as xk}from"node:perf_hooks";var NT=16,Rh=80,Ik="\x1B[?2026h",Rk="\x1B[?2026l";class Ri{shown=[];pointer=new jo;cursor="";wipe="";immediate;delayed;ticker;last=Number.NEGATIVE_INFINITY;stopped=!1;write;view;beat;constructor(t){this.write=t.write,this.view=t.view,this.beat=t.beat??(()=>{})}request(){if(this.stopped||this.immediate||this.delayed)return;let t=this.last+NT-xk.now();if(t>0)this.delayed=setTimeout(this.paint,t);else this.immediate=setImmediate(this.paint)}soon(){if(this.stopped||this.immediate)return;clearTimeout(this.delayed),this.delayed=void 0,this.immediate=setImmediate(this.paint)}now(){this.cancel(),this.paint()}reset(t=""){this.shown=[],this.cursor="",this.wipe=t}stop(){this.stopped=!0,this.cancel(),clearInterval(this.ticker),this.ticker=void 0}point(t){return this.pointer.point(t)}drop(){this.pointer.drop()}cancel(){clearImmediate(this.immediate),clearTimeout(this.delayed),this.immediate=void 0,this.delayed=void 0}paint=()=>{if(this.immediate=void 0,this.delayed=void 0,this.stopped)return;let{drawn:t,targets:e}=Ac(()=>this.view());if(!t)return;this.last=xk.now();let{lines:n,zones:r}=Pc(t.lines,e);this.pointer.zones=[...t.zones??[],...r];let i=this.wipe;this.wipe="";let s=new Set,o=Math.max(n.length,this.shown.length);for(let l=0;l<o;l++){let f=n[l];if(f!==this.shown[l])i+=`\x1B[${l+1};1H\x1B[0m\x1B[2K${f??""}`,s.add(l)}this.shown=n;let a=t.after?.(s)??"",c=t.cursor??"",u=c!==""&&(i!==""||a!==""||c!==this.cursor);if(this.cursor=c,i||a||u)this.write(`${Ik}${i}${a}\x1B[0m${u?c:""}${Rk}`);this.tick(t.ticking===!0)};tick(t){if(t&&!this.ticker)this.ticker=setInterval(()=>{this.beat(),this.request()},Rh);else if(!t&&this.ticker)clearInterval(this.ticker),this.ticker=void 0}}class Nh{shown=[];write;cols;constructor(t,e){this.write=t,this.cols=e}draw(t){this.put(t,"")}redraw(t){let e=`${this.shown.length>1?`\x1B[${this.shown.length-1}A`:""}${this.shown.length>0?"\r\x1B[J":""}`;this.shown=[],this.put(t,e)}end(t){this.put(t,""),this.write(`
600
606
  `),this.shown=[]}put(t,e){let n=t.map((s)=>ot(s,this.cols()-1,!1)),r=0;while(r<n.length&&r<this.shown.length&&n[r]===this.shown[r])r++;if(r===n.length&&n.length===this.shown.length)return;if(r===n.length)r=Math.max(0,n.length-1);let i="";if(this.shown.length===0)i=n.join(`
601
607
  `);else if(r>=this.shown.length)i=`
602
608
  ${n.slice(r).join(`
603
609
  `)}`;else{let s=this.shown.length-1-r;i=`${s>0?`\x1B[${s}A`:""}\r\x1B[J${n.slice(r).join(`
604
- `)}`}this.shown=n,this.write(`${ik}${e}${i}${sk}`)}}var JR=300;function $u(t){return t>=1e6?`${(t/1e6).toFixed(1)} MB`:`${Math.max(1,Math.round(t/1000))} KB`}function ku(t,e){if(!e)return $u(t);return e>=1e6?`${(t/1e6).toFixed(1)}/${(e/1e6).toFixed(1)} MB`:`${Math.round(t/1000)}/${Math.round(e/1000)} KB`}var As;async function ok(t,e){As=t;try{return await e()}finally{As=void 0}}function Cr(t){if(As)As.say(t);else console.log(t)}function Lr(t=""){if(As){let u=As;return u.set(t),{set:(l)=>u.set(l),say:(l)=>u.say(l),done:()=>u.set("")}}let e=process.stdout;if(!e.isTTY||process.env.TERM==="dumb")return{set(){},say:(u)=>console.log(u),done(){}};let[n,r]=Ft()?["",""]:[P,fe],i=0,s=!1,o,a=()=>{e.write(`\r\x1B[2K${n}${ot(`${Sn[i%Sn.length]} ${t}`,(e.columns||80)-1,!1)}${r}`)},c=setTimeout(()=>{s=!0,a(),o=setInterval(()=>{i++,a()},ph),o.unref()},JR);return c.unref(),{set(u){if(t=u,s)a()},say(u){if(s)e.write("\r\x1B[2K");if(console.log(u),s)a()},done(){if(clearTimeout(c),clearInterval(o),s)e.write("\r\x1B[2K"),s=!1}}}import{existsSync as aT,mkdirSync as gk,readFileSync as bk,statSync as cT}from"node:fs";import{homedir as uT}from"node:os";import{dirname as lT,join as hk}from"node:path";function bh(t){if(t.length>0&&process.stderr.isTTY)process.stderr.write(`${t.join(`
610
+ `)}`}this.shown=n,this.write(`${Ik}${e}${i}${Rk}`)}}var TT=300;function Ou(t){return t>=1e6?`${(t/1e6).toFixed(1)} MB`:`${Math.max(1,Math.round(t/1000))} KB`}function xu(t,e){if(!e)return Ou(t);return e>=1e6?`${(t/1e6).toFixed(1)}/${(e/1e6).toFixed(1)} MB`:`${Math.round(t/1000)}/${Math.round(e/1000)} KB`}var _s;async function Nk(t,e){_s=t;try{return await e()}finally{_s=void 0}}function Lr(t){if(_s)_s.say(t);else console.log(t)}function jr(t=""){if(_s){let u=_s;return u.set(t),{set:(l)=>u.set(l),say:(l)=>u.say(l),done:()=>u.set("")}}let e=process.stdout;if(!e.isTTY||process.env.TERM==="dumb")return{set(){},say:(u)=>console.log(u),done(){}};let[n,r]=Lt()?["",""]:[A,ge],i=0,s=!1,o,a=()=>{e.write(`\r\x1B[2K${n}${ot(`${xn[i%xn.length]} ${t}`,(e.columns||80)-1,!1)}${r}`)},c=setTimeout(()=>{s=!0,a(),o=setInterval(()=>{i++,a()},Rh),o.unref()},TT);return c.unref(),{set(u){if(t=u,s)a()},say(u){if(s)e.write("\r\x1B[2K");if(console.log(u),s)a()},done(){if(clearTimeout(c),clearInterval(o),s)e.write("\r\x1B[2K"),s=!1}}}import{existsSync as Dk,mkdirSync as qk,readFileSync as Yk,statSync as ZT,utimesSync as QT}from"node:fs";import{homedir as XT}from"node:os";import{dirname as tA,join as Wk}from"node:path";function Th(t){if(t.length>0&&process.stderr.isTTY)process.stderr.write(`${t.join(`
605
611
  `)}
606
- `)}import{existsSync as wh,mkdirSync as ak,readFileSync as Cs}from"node:fs";import{homedir as eT}from"node:os";import{dirname as ck,join as Oi}from"node:path";import{spawn as VR}from"node:child_process";var ZR=30000,QR=3,XR=97,tT=`ObjC.import('Vision')
612
+ `)}import{existsSync as Ah,mkdirSync as Tk,readFileSync as Bs}from"node:fs";import{homedir as LT}from"node:os";import{dirname as Ak,join as Ni}from"node:path";import{spawn as AT}from"node:child_process";var PT=30000,HT=3,FT=97,CT=`ObjC.import('Vision')
607
613
  ObjC.import('CoreImage')
608
614
  ObjC.import('CoreGraphics')
609
615
  function run(argv) {
@@ -622,55 +628,39 @@ function run(argv) {
622
628
  $.CIImage.imageWithCVPixelBuffer(buffer), $.NSURL.fileURLWithPath(argv[1]), $.kCIFormatRGBA8,
623
629
  $.CGColorSpaceCreateWithName($.kCGColorSpaceSRGB), $({}), error)
624
630
  if (!written) throw new Error('write failed')
625
- }`;function Fs(){return process.platform==="darwin"}function yu(t){return t>=QR&&t<=XR}function Qo(t,e,n){return new Promise((r,i)=>{let s=VR("osascript",["-l","JavaScript","-e",tT,t,e],{stdio:["ignore","ignore","pipe"],signal:AbortSignal.any([n,AbortSignal.timeout(ZR)])}),o="";s.stderr.on("data",(a)=>{o+=a}),s.on("error",i),s.on("close",(a)=>{if(a===0){r();return}i(Error(o.trim().split(`
626
- `).at(-1)||`osascript exited ${a}`))})})}var uk=90000;function Su(t,e){let n=D(t),r=re(t,e).flatMap((i)=>{let[,s,o]=/^([a-z.]+)_(\d+)$/.exec(i.key)??[];return s&&o&&Y.some((a)=>a.key===s)?[{site:s,id:Number(o),...Hf(n,i)}]:[]});return r.length>0?r:void 0}function nT(t,e){let n=new Set(vt(D(t)).palettes[e.name]?.pictures.map((r)=>r.key));return(e.pictures??[]).filter((r)=>!n.has(Xt(r)))}function Ls(t,e){let n=new Set((e??[]).map((r)=>Xt(r)));return{...t,pictures:(t.pictures??[]).filter((r)=>!n.has(Xt(r)))}}async function rT(t,e,n,r,i,s){let o=Y.find((g)=>g.key===n.site);if(!o)throw Error(`no site called ${n.site}`);s("Fetching");let a=await is(o,n.id,i);if(!a)throw Error("the post is gone");if(o!==Zt&&a.md5)try{Ya([a],await Ja([a.md5],i))}catch{}let c=qa(o,a)?Da(o,a.id,i).then((g)=>{if(g)wo(a,g)},()=>{}):void 0;if(!Ka(o,a,ii(process.env.TTHEME_FIND_RATING))||Ua(a,rs(process.env.TTHEME_FIND_BLOCK)).length>0)throw Error("outside your find filters — TTHEME_FIND_RATING and TTHEME_FIND_BLOCK");let u=on(a);if(!u)throw Error("too large to use");let l=Oi(_e(o),"orig",`${n.id}.${u.ext}`),f;if(wh(l))f=new Uint8Array(Cs(l));else{s("Downloading");let g=si(o,a,u);f=await Va(g.site,g.url,i,(b,y)=>s("Downloading",ku(b,y))),H(l,f)}let d=tr(f,me),h=!1;if(In(d)===0&&Fs()&&process.env.TTHEME_FIND_REMOVE_BG!=="off"){let g=Oi(_e(o),"cut",`${n.id}.png`);try{if(!wh(g))s("Cutting out"),ak(ck(g),{recursive:!0}),await Qo(l,g,i);let b=tr(new Uint8Array(Cs(g)),me);if(yu(In(b)))d=b,h=!0}catch{}}await c;let p=Rf(e);s("Drawing"),ic(t,p,cn(p,e.signatureSlots),d,{site:o.key,id:n.id,ext:u.ext,bytes:f,from:`${o.name} ${n.id} ${o.pageUrl(n.id)}`,artist:a.named.artist,source:bo(a.source),cut:h},{width:0,height:0},Rr(t),Yc(t));let $=re(t,e.name).find((g)=>g.key===Xt(n));if($)Io(D(t),$,n,r,eT())}function iT(t,e){let n=Y.find((s)=>s.key===t.site),r=`${n?.name??t.site} ${t.id}`;if(!n||!e)return r;return`${Ft()?io:`\x1B[${30+n.ansi}m${io}\x1B[39m`} ${Fa(r,n.pageUrl(t.id))}`}async function _n(t,e,n){let r=e.flatMap((c)=>nT(t,c).map((u)=>({entry:c,shared:u})));if(r.length===0)return;let i=Si(n),s=process.stdout.isTTY&&L0(process.env),o=new Set,a=Lr();for(let[c,{entry:u,shared:l}]of r.entries()){let f=`${u.name} · ${iT(l,s)}`,d=r.length>1?` · ${c+1}/${r.length}`:"",h=(p,$)=>a.set(`${p} ${f}${$?` · ${$}`:""}${d}`);try{await rT(t,u,l,i,AbortSignal.timeout(uk),h),a.say(` ▣ ${f}`),o.add(u)}catch(p){a.say(` ▢ ${f} — ${p instanceof Error?p.message:String(p)}`)}}a.done();for(let c of o){let u=(c.pictures??[]).find((l)=>re(t,c.name).some((f)=>f.key===Xt(l)));if(u)hs(t,c.name,Xt(u))}if(o.size>0)Oe(t)}function lk(t,e,n){if(e.width!==t.width||e.height!==t.height)return!1;for(let r=0;r<t.width*t.height;r++)t.data[r*4+3]=e.data[r*4+n]??0;return!0}async function sT(t,e){let[,n,r]=/^(.+)_(\d+)$/.exec(t)??[],i=Oi(ar(),n??"local","cut",`${r??t}.png`);if(!wh(i)){if(!Fs())return;ak(ck(i),{recursive:!0}),await Qo(e,i,AbortSignal.timeout(uk))}return tr(new Uint8Array(Cs(i)),me)}function oT(t,e){try{return In(At(new Uint8Array(Cs(Oi(t,`${e.stem}.png`)))))>0}catch{return!1}}function vu(t,e){return()=>tr(new Uint8Array(Cs(Oi(t,e.original))),me)}function fk(t,e){let n=vu(t,e);return()=>{let r=n(),i=At(new Uint8Array(Cs(Oi(t,e.cut))));return lk(r,i,0)?r:null}}async function Eu(t,e,n,r,i,s,o,a){let c=D(t),u=vt(c).palettes[e]?.pictures.find((l)=>l.key===n);if(!u?.original)return null;if(u.cut)return xo(t,e,u,fk(c,u),r,i,s,o,!1,a);if(fs(u)){let l=vu(c,u)();if(In(l)===0&&oT(c,u)){let f=await sT(n,Oi(c,u.original));if(!f||!lk(l,f,3))return null;return xo(t,e,u,()=>l,r,i,s,o,!0,a)}return xo(t,e,u,()=>l,r,i,s,o,!1,a)}return xo(t,e,u,vu(c,u),r,i,s,o,!1,a)}function dk(t,e,n,r,i,s){let o=D(t),a=vt(o).palettes[e]?.pictures.find((u)=>u.key===n);if(!a?.original||fs(a))return!1;let c=a.cut?fk(o,a):vu(o,a);return pw(t,e,a,c,r,i,s)}var fT=86400000,dT=3600000,kh=5000;function $h(){return hk(process.env.XDG_STATE_HOME??hk(uT(),".local","state"),"ttheme","markets.json")}function Bn(){try{let t=JSON.parse(bk($h(),"utf8"));return Object.fromEntries(Object.entries(t).filter((e)=>typeof e[1]?.at==="number"&&typeof e[1].error==="string"))}catch{return{}}}function mk(t,e){let n=Bn();if(e===void 0){if(!(t in n))return;delete n[t]}else n[t]={at:Date.now(),error:e};gk(lT($h()),{recursive:!0}),H($h(),`${JSON.stringify(n,null,2)}
627
- `)}function Xo(t,e){let n=e===q?ve(t):$e(e)?Ke(t,e):void 0;try{return n?cT(n).mtimeMs:void 0}catch{return}}function hT(t,e,n,r){return t&&(e===void 0||r-e>=fT)&&(n===void 0||r-n>=dT)}function yh(t,e,n=Date.now()){let r=Bn();return Bt(e.markets).filter((i)=>hT(gr(i,e.updates),Xo(t,i),r[i]?.at,n))}async function mT(t,e,n){try{return await Ho(Hw(t),Qf,e,n)}catch(r){if(r instanceof vc)throw Error(`${st(t)} has no ${un} — is the repository public, and has its action run?`);throw r}}async function ta(t,e,n){if(t===q){let s=await Ho(Zw,Pe,e,n);return{source:t,id:q,manifest:s,entries:s.palettes}}let r=await mT(t,e,n),i=Ss(t,r);return{source:t,id:i,manifest:r,entries:$c(r,i)}}function js(t,e){if(e.source===q){wc(t,e.manifest);return}gk(Wf(t),{recursive:!0}),H(Ke(t,e.source),`${JSON.stringify(e.manifest,null,2)}
628
- `)}function Gs(t,e){try{if(e===q)return Pe(bk(ve(t),"utf8")).palettes;let n=kr(t,e);return $c(n,Ss(e,n))}catch{return[]}}function pT(t,e){let n=new Map(t.map((i)=>[i.name,JSON.stringify(i)])),r=new Map(e.map((i)=>[i.name,JSON.stringify(i)]));return{added:[...r.keys()].filter((i)=>!n.has(i)),changed:[...r].filter(([i,s])=>n.has(i)&&n.get(i)!==s).map(([i])=>i),gone:[...n.keys()].filter((i)=>!r.has(i))}}async function vh(t,e,n){let r=Gs(t,e),i;try{i=await ta(e,n)}catch(s){throw mk(e,s.message),s}return js(t,i),mk(e,void 0),{source:e,id:i.id,...e===q?{version:i.manifest.version}:{},count:Et(i.entries).length,change:pT(r,i.entries)}}async function Sh(t,e,n){try{return{source:e,refreshed:await vh(t,e,n)}}catch(r){return{source:e,failure:r instanceof Error?r:Error(String(r))}}}function Eh(t,e){return`${st(t)}: ${e.message}`}function gT(t){return"failure"in t&&t.failure instanceof kc?Eh(t.source,t.failure):void 0}function Nt(t){return`${t} palette${t===1?"":"s"}`}function ea(t,e=Date.now()){let n=Math.floor(Math.max(0,e-t)/60000);if(n<1)return"just now";if(n<60)return`${n}m ago`;let r=Math.floor(n/60);return r<48?`${r}h ago`:`${Math.floor(r/24)}d ago`}function wk({added:t,changed:e,gone:n}){return[t.length>0?`${t.length} new`:"",e.length>0?`${e.length} changed`:"",n.length>0?`${n.length} gone`:""].filter(Boolean).join(", ")}function Mh(t){let e=wk(t.change);return`${t.version?`${t.id} ${t.version}`:t.id} — ${Nt(t.count)}${e?` (${e})`:""}`}function Oh(t){return wk(t.change)?`Updated ${Mh(t)}`:void 0}var pk=/^(\d+)\.(\d+)\.(\d+)$/;function bT(t,e){let n=pk.exec(t),r=pk.exec(e);if(!n||!r)return!1;for(let i of[1,2,3]){let s=Number(n[i])-Number(r[i]);if(s!==0)return s>0}return!1}function Ih(t,e=xt.version){return t.version&&bT(t.version,e)?`ttheme ${t.version} is out, you have ${e} — \`${Xf}\` updates it`:void 0}async function xh(t,e,n,r){let i=new Set(r.flatMap((l)=>[...l.change.changed,...l.change.gone])),s=e.palettes.filter((l)=>i.has(l));if(s.length===0)return[];let o=lt(t,!1);Ct(t,o,e);let a=new Set(r.flatMap((l)=>l.change.gone)),c=s.filter((l)=>a.has(l)).map((l)=>`${l} left its market — ttheme keeps the copy you have`),u=new Map(n.map((l)=>[l.name,l.pictures]));return await _n(t,Ot(t,o,!1).palettes.filter((l)=>s.includes(l.name)&&u.has(l.name)).map((l)=>Ls(l,u.get(l.name))),e.terminals),c}async function $k(t=J()){try{if(!aT(pr(t)))return;let e=_(t),n=yh(t,e);if(n.length===0)return;let r=Pn(t),i=Lr(`Checking ${n.map(st).join(", ")} for updates`),s=await Promise.all(n.map((u)=>Sh(t,u,kh)));i.done();let o=s.flatMap((u)=>("refreshed"in u)?[u.refreshed]:[]),a=o.flatMap((u)=>Oh(u)??[]);bh(a);let c=a.length>0?await xh(t,e,r,o):[];bh([...c,...s.flatMap((u)=>gT(u)??[]),...o.flatMap((u)=>Ih(u)??[])])}catch{return}}var Ek=/^[a-z0-9]+(?:-[a-z0-9]+)*$/,vT=["add","remove","search","init"];function Ph(){return process.stdin.isTTY===!0&&process.stdout.isTTY===!0}function ST(){try{let t=wT("gh",["api","user","--jq",".login"],{encoding:"utf8",stdio:["ignore","pipe","ignore"],timeout:1e4}).trim().toLowerCase();return Ek.test(t)?t:void 0}catch{return}}async function ET(t,e){if(e.author)return e.author;let n=ST();if(!n){if(!Ph())throw Error("your palettes are named after your GitHub handle — log in with `gh auth login`, or run this in a terminal");let r=await wd({message:"Your GitHub handle — your palettes are named <handle>@<market>/<palette>",validate:(i)=>Ek.test((i??"").toLowerCase())&&(i??"").length<=39?void 0:"that is not a GitHub handle"});if(oe(r))throw Error("no handle given");n=r.toLowerCase()}return Ae(t,{...e,author:n}),console.log(`Your palettes are named ${n}@<market>/<palette>`),n}function _s(t,e){if(e===q)return q;return ut(e)?ke(ln(e)):Ss(e,kr(t,e))}function Mu(t,e){try{return _s(t,e)}catch{return}}function Mk(t){return ct(t)??q}function Ou(t){return lt(t).palettes.filter((e)=>ct(e.name)===void 0)}function MT(t){let e=Ii(import.meta.dirname,"..","dist","manifest.json");return Nh(e)?Pe(Th(e,"utf8")).palettes:Ou(t)}function na(t,e,n){let{updates:r,...i}=t,s=Object.entries(n).filter(([o,a])=>e.includes(o)&&a!==gr(o,{}));return{...i,markets:e,...s.length>0?{updates:Object.fromEntries(s)}:{}}}function Ok(t,e,n,r){return e.find((i)=>i!==n&&!ys(i,n)&&Mu(t,i)===r)}function Rh(t,e,n,r){let i=_(t),s=Bt(i.markets),o=Ok(t,s,e,n);if(o)throw Error(`${n} already names the market at ${st(o)} — \`ttheme market remove ${n}\` first`);let a=r===void 0?{...i.updates}:{...i.updates,[e]:r};Ae(t,na(i,s.includes(e)?s:[...s,e],a))}async function OT(t){if(!Ph())return!1;let e=await ze({message:`Update ${t} on its own when its author changes it? ttheme checks once a day, when you run it`,initialValue:!1});if(oe(e))throw Error("no answer given — nothing was added");return e}async function Ik(t){let e=Lr(`Fetching ${st(t)}`);try{return await ta(t)}finally{e.done()}}async function IT(t,e,n){let r=await Ik(n),i=_(t),s=Bt(i.markets),o=Ok(t,s,n,r.id);if(o)throw Error(`${r.id} already names the market at ${st(o)} — \`ttheme market remove ${r.id}\` first`);let{[e]:a,...c}=i.updates??{},u=a===void 0?c:{...c,[n]:a};return Ae(t,na(i,s.map((l)=>l===e?n:l),u)),js(t,r),r}async function Hh(t,e){let n=br(e),r=Bt(_(t).markets);if(r.includes(n))return console.log(`${st(n)} is already added`),{source:n,id:_s(t,n),fresh:!1};let i=$e(n)?r.find((c)=>$e(c)&&ys(c,n)):void 0;if(i){let c=await IT(t,i,n);return console.log(`Moved ${c.id} to ${Bf(n)??"its default branch"} · ${st(n)} — ${Nt(Et(c.entries).length)}`),{source:n,id:c.id,fresh:!1}}if(ut(n)){let c=ke(ln(n));Rh(t,n,c);let u=$r(n,c,Ou(t)).length;return console.log(`Added ${c} · ${st(n)} — ${Nt(u)}, read in place`),{source:n,id:c,fresh:!0}}let s=await Ik(n),o=n===q?void 0:await OT(s.id);Rh(t,n,s.id,o),js(t,s);let a=Nt(Et(s.entries).length);return console.log(n===q?`Added the ttheme catalog — ${a}`:`Added ${s.id} · ${st(n)} — ${a}${o?", updating on its own":""}`),{source:n,id:s.id,fresh:!0}}async function xT(t){let e=J(),{source:n,id:r,fresh:i}=await Hh(e,t);if(!i)return;if(ut(n))console.log("\n`ttheme browse` picks them · `ttheme market build` there writes the index others fetch");else if(n===q)console.log("\n`ttheme browse` picks them");else console.log(`
629
- \`ttheme browse\` picks them, or \`ttheme add ${r}/<palette>\``)}function Ah(t,e){if(e===q)yk(ve(t),{force:!0});else if($e(e))yk(Ke(t,e),{force:!0})}function Fh(t){return`${Nt(t.length)} installed from it keep${t.length===1?"s":""} working: ${t.join(", ")} — \`ttheme remove\` drops ${t.length===1?"it":"them"}`}function NT(t){let e=J(),n=_(e),r=Bt(n.markets),i=r.find((u)=>Mu(e,u)===t)??r.find((u)=>u===xk(t));if(!i)throw Error(`no market named ${t} — \`ttheme market\` lists them`);let s=Mu(e,i),o=n.palettes.filter((u)=>Mk(u)===s),a=r.filter((u)=>u!==i),c=na(n,a,n.updates??{});if(Ae(e,c),Ah(e,i),Ct(e,lt(e),c),console.log(`Removed ${s??t} · ${st(i)}`),o.length>0)console.log(Fh(o))}function xk(t){try{return br(t)}catch{return}}function RT(t,e){try{if(e===q)return Et(Pe(Th(ve(t),"utf8")).palettes).length;if(ut(e))return $r(e,_s(t,e),Ou(t),!1).length;return kr(t,e).palettes.length}catch{return}}function Ch(t,e,n=Bn(),r=Date.now()){if(ut(e))return"read in place";let i=n[e],s=Xo(t,e);if(i&&(s===void 0||i.at>s))return`update failed ${ea(i.at,r)}`;return s===void 0?"never updated":`updated ${ea(s,r)}`}function TT(){let t=J(),e=_(t),n=Bt(e.markets);if(n.length===0){console.log("No markets — `ttheme market add official` brings the ttheme catalog back");return}let r=Bn(),i=n.map((a)=>{let c=Mu(t,a)??"?",u=RT(t,a),l=e.palettes.filter((d)=>Mk(d)===c).length,f=ut(a)?[]:[`auto-update ${gr(a,e.updates)?"on":"off"}`];return{name:c,where:st(a),note:[u===void 0?"Unreadable":Nt(u),...l>0?[`${l} installed`]:[],...f,Ch(t,a,r)].join(" · ")}}),s=Math.max(...i.map((a)=>a.name.length)),o=Math.max(...i.map((a)=>a.where.length));for(let a of i)console.log(` ${a.name.padEnd(s)} ${a.where.padEnd(o)} ${a.note}`)}function Lh(t){return`${t.owner.login.toLowerCase()}/${t.name}`}async function jh(t,e){let n=encodeURIComponent(`topic:${$s}${t?` ${t}`:""}`);try{let{items:r}=await Ho(`https://api.github.com/search/repositories?q=${n}&sort=stars&per_page=50`,(i)=>JSON.parse(i),void 0,e);return r}catch(r){if(r instanceof Sc)throw Error("GitHub lets a search through about ten times a minute without signing in — try again in a minute");throw r}}async function PT(t){let e=J(),n=await jh(t);if(n.length===0){console.log(`No repository carries the ${$s} topic${t?` and matches ${t}`:""} yet`);return}let r=new Set(Bt(_(e).markets).map(mr)),i=n.map((o)=>{let a=Lh(o);return{arg:a,added:r.has(a),stars:`★${o.stargazers_count}`,about:o.description??""}}),s=Math.max(...i.map((o)=>o.arg.length));for(let o of i)console.log(` ${o.added?"●":"○"} ${o.arg.padEnd(s)} ${o.stars.padStart(5)} ${o.about}`);console.log("\n`ttheme market add <name>` adds one")}var HT=`name: ttheme market
630
-
631
- on:
632
- push:
633
- paths: ["palettes/**"]
634
- workflow_dispatch:
635
-
636
- permissions:
637
- contents: write
638
-
639
- jobs:
640
- index:
641
- runs-on: ubuntu-latest
642
- steps:
643
- - uses: kecan0406/ttheme/market@v1
644
- `;function Nk({name:t}){return`ttheme-${t}`}function AT(t,e){kk(hc(t),{recursive:!0}),kk(Ii(t,".github","workflows"),{recursive:!0}),Rk(t,e,[]),H(Ii(t,".github","workflows","ttheme.yml"),HT),H(Ii(t,"README.md"),`# ${ke(e)}
631
+ }`;function Gs(){return process.platform==="darwin"}function Iu(t){return t>=HT&&t<=FT}function ea(t,e,n){return new Promise((r,i)=>{let s=AT("osascript",["-l","JavaScript","-e",CT,t,e],{stdio:["ignore","ignore","pipe"],signal:AbortSignal.any([n,AbortSignal.timeout(PT)])}),o="";s.stderr.on("data",(a)=>{o+=a}),s.on("error",i),s.on("close",(a)=>{if(a===0){r();return}i(Error(o.trim().split(`
632
+ `).at(-1)||`osascript exited ${a}`))})})}var Pk=90000;function Nu(t,e){let n=q(t),r=ce(t,e).flatMap((i)=>{let[,s,o]=/^([a-z.]+)_(\d+)$/.exec(i.key)??[];return s&&o&&Y.some((a)=>a.key===s)?[{site:s,id:Number(o),...Bf(n,i)}]:[]});return r.length>0?r:void 0}function jT(t,e){let n=new Set(kt(q(t)).palettes[e.name]?.pictures.map((r)=>r.key));return(e.pictures??[]).filter((r)=>!n.has(te(r)))}function Us(t,e){let n=new Set((e??[]).map((r)=>te(r)));return{...t,pictures:(t.pictures??[]).filter((r)=>!n.has(te(r)))}}async function _T(t,e,n,r,i,s){let o=Y.find((g)=>g.key===n.site);if(!o)throw Error(`no site called ${n.site}`);s("Fetching");let a=await us(o,n.id,i);if(!a)throw Error("the post is gone");if(o!==Qt&&a.md5)try{ec([a],await nc([a.md5],i))}catch{}let c=tc(o,a)?Xa(o,a.id,i).then((g)=>{if(g)Eo(a,g)},()=>{}):void 0;if(!Za(o,a,si(process.env.TTHEME_FIND_RATING))||Va(a,cs(process.env.TTHEME_FIND_BLOCK)).length>0)throw Error("outside your find filters — TTHEME_FIND_RATING and TTHEME_FIND_BLOCK");let u=fn(a);if(!u)throw Error("too large to use");let l=Ni(Ke(o),"orig",`${n.id}.${u.ext}`),f;if(Ah(l))f=new Uint8Array(Bs(l));else{s("Downloading");let g=oi(o,a,u);f=await rc(g.site,g.url,i,(b,y)=>s("Downloading",xu(b,y))),P(l,f)}let d=or(f,$e),h=!1;if(Tn(d)===0&&Gs()&&process.env.TTHEME_FIND_REMOVE_BG!=="off"){let g=Ni(Ke(o),"cut",`${n.id}.png`);try{if(!Ah(g))s("Cutting out"),Tk(Ak(g),{recursive:!0}),await ea(l,g,i);let b=or(new Uint8Array(Bs(g)),$e);if(Iu(Tn(b)))d=b,h=!0}catch{}}await c;let m=jf(e);s("Drawing"),fc(t,m,hn(m,e.signatureSlots),d,{site:o.key,id:n.id,ext:u.ext,bytes:f,from:`${o.name} ${n.id} ${o.pageUrl(n.id)}`,artist:a.named.artist,source:vo(a.source),cut:h},{width:0,height:0},Tr(t),nu(t));let $=ce(t,e.name).find((g)=>g.key===te(n));if($)Ao(q(t),$,n,r,LT())}function GT(t,e){let n=Y.find((s)=>s.key===t.site),r=`${n?.name??t.site} ${t.id}`;if(!n||!e)return r;return`${Lt()?uo:`\x1B[${30+n.ansi}m${uo}\x1B[39m`} ${Ua(r,n.pageUrl(t.id))}`}async function Dn(t,e,n){let r=e.flatMap((c)=>jT(t,c).map((u)=>({entry:c,shared:u})));if(r.length===0)return;let i=xi(n),s=process.stdout.isTTY&&a$(process.env),o=new Set,a=jr();for(let[c,{entry:u,shared:l}]of r.entries()){let f=`${u.name} · ${GT(l,s)}`,d=r.length>1?` · ${c+1}/${r.length}`:"",h=(m,$)=>a.set(`${m} ${f}${$?` · ${$}`:""}${d}`);try{await _T(t,u,l,i,AbortSignal.timeout(Pk),h),a.say(` ▣ ${f}`),o.add(u)}catch(m){a.say(` ▢ ${f} — ${m instanceof Error?m.message:String(m)}`)}}a.done();for(let c of o){let u=(c.pictures??[]).find((l)=>ce(t,c.name).some((f)=>f.key===te(l)));if(u)bs(t,c.name,te(u))}if(o.size>0)Re(t)}function Hk(t,e,n){if(e.width!==t.width||e.height!==t.height)return!1;for(let r=0;r<t.width*t.height;r++)t.data[r*4+3]=e.data[r*4+n]??0;return!0}async function BT(t,e){let[,n,r]=/^(.+)_(\d+)$/.exec(t)??[],i=Ni(hr(),n??"local","cut",`${r??t}.png`);if(!Ah(i)){if(!Gs())return;Tk(Ak(i),{recursive:!0}),await ea(e,i,AbortSignal.timeout(Pk))}return or(new Uint8Array(Bs(i)),$e)}function UT(t,e){try{return Tn(Ht(new Uint8Array(Bs(Ni(t,`${e.stem}.png`)))))>0}catch{return!1}}function Ru(t,e){return()=>or(new Uint8Array(Bs(Ni(t,e.original))),$e)}function Fk(t,e){let n=Ru(t,e);return()=>{let r=n(),i=Ht(new Uint8Array(Bs(Ni(t,e.cut))));return Hk(r,i,0)?r:null}}async function Tu(t,e,n,r,i,s,o,a){let c=q(t),u=kt(c).palettes[e]?.pictures.find((l)=>l.key===n);if(!u?.original)return null;if(u.cut)return Po(t,e,u,Fk(c,u),r,i,s,o,!1,a);if(gs(u)){let l=Ru(c,u)();if(Tn(l)===0&&UT(c,u)){let f=await BT(n,Ni(c,u.original));if(!f||!Hk(l,f,3))return null;return Po(t,e,u,()=>l,r,i,s,o,!0,a)}return Po(t,e,u,()=>l,r,i,s,o,!1,a)}return Po(t,e,u,Ru(c,u),r,i,s,o,!1,a)}function Ck(t,e,n,r,i,s){let o=q(t),a=kt(o).palettes[e]?.pictures.find((u)=>u.key===n);if(!a?.original||gs(a))return!1;let c=a.cut?Fk(o,a):Ru(o,a);return Tw(t,e,a,c,r,i,s)}import{existsSync as WT,readFileSync as KT}from"node:fs";import{join as zT}from"node:path";function DT(t){return zT(t,"ttheme","pins")}function Lk(t,e,n){let r=DT(t);if(!WT(r))return;let i=KT(r,"utf8"),o=i.split(`
633
+ `).flatMap((a)=>{let c=/^((?:[~/]|ssh:).*\s)(\S+)(\s*)$/.exec(a);if(!c)return[a];let[,u,l,f]=c;if(n.includes(l))return[];let d=e.get(l);return[d?`${u}${d}${f}`:a]}).join(`
634
+ `);if(o!==i)P(r,o)}function jk(t,e){let n=e,r=new Set;while(Object.hasOwn(t,n)&&!r.has(n)){r.add(n);let i=t[n];if(i===!1)return!1;n=i}return r.has(n)||n===e?void 0:n}function _k(t,e,n,r,i){let s=`${t}/`;for(let o of r){let a=o.startsWith(s)?o.slice(s.length):void 0;if(a===void 0||n.has(a))continue;let c=jk(e.renames,a);if(c===!1)i.removed.push(o);else if(c!==void 0&&n.has(c))i.renamed.set(o,`${s}${c}`);else if(e.forceRemove)i.removed.push(o)}}function Gk(t,e){let n=[],r=[];for(let i of Object.keys(t)){if(e.has(i)){r.push(`renames.${i}: ${i} is still a palette here, so the rename never applies`);continue}let s=jk(t,i);if(s===void 0)n.push(`renames.${i}: the chain comes back to a name it already passed`);else if(s!==!1&&!e.has(s))n.push(`renames.${i}: the chain ends at ${s}, which is not a palette here — end it at one, or at false`)}return{errors:n,warnings:r}}import{gunzipSync as qT}from"node:zlib";var Ti=512,Bk=67108864,Ph=new TextDecoder;function Ws(t,e,n){let r=t.subarray(e,e+n),i=r.indexOf(0);return Ph.decode(i<0?r:r.subarray(0,i))}function YT(t){if((t[124]??0)&128)throw Error("the archive holds a file too large to be a palette");let e=Number.parseInt(Ws(t,124,12).trim()||"0",8);if(!Number.isFinite(e)||e<0)throw Error("the archive has a header that does not read");return e}function JT(t){let e=0,n;while(e<t.length){let r=t.indexOf(32,e),i=r<0?Number.NaN:Number.parseInt(Ph.decode(t.subarray(e,r)),10);if(!Number.isFinite(i)||i<=0)break;let s=Ph.decode(t.subarray(r+1,e+i-1)),o=s.indexOf("=");if(s.slice(0,o)==="path")n=s.slice(o+1);e+=i}return n}function VT(t){if(t[0]!==31||t[1]!==139)return t;try{return qT(t,{maxOutputLength:Bk})}catch(e){throw Error(e instanceof RangeError?`the archive unpacks to more than ${Bk/1024/1024} MB`:"the archive is not a gzip file that reads")}}function Uk(t){let e=VT(t),n=new Map,r,i=0;while(i+Ti<=e.length){let s=e.subarray(i,i+Ti);if(s.every((f)=>f===0))break;let o=YT(s),a=e.subarray(i+Ti,i+Ti+o);i+=Ti+Math.ceil(o/Ti)*Ti;let c=String.fromCharCode(s[156]??0);if(c==="x"){r=JT(a)??r;continue}if(c==="L"){r=Ws(a,0,a.length);continue}let u=Ws(s,257,5)==="ustar"?Ws(s,345,155):"",l=r??(u?`${u}/${Ws(s,0,100)}`:Ws(s,0,100));if(r=void 0,c==="0"||c==="\x00")n.set(l.split("/").slice(1).join("/"),a)}return n}var eA=86400000,nA=3600000,Fh=5000;function Hh(){return Wk(process.env.XDG_STATE_HOME??Wk(XT(),".local","state"),"ttheme","markets.json")}function qn(){try{let t=JSON.parse(Yk(Hh(),"utf8"));return Object.fromEntries(Object.entries(t).filter((e)=>typeof e[1]?.at==="number"&&typeof e[1].error==="string"))}catch{return{}}}function Kk(t,e){let n=qn();if(e===void 0){if(!(t in n))return;delete n[t]}else n[t]={at:Date.now(),error:e};qk(tA(Hh()),{recursive:!0}),P(Hh(),`${JSON.stringify(n,null,2)}
635
+ `)}function na(t,e){let n=e===z?Me(t):ee(e)?He(t,e):void 0;try{return n?ZT(n).mtimeMs:void 0}catch{return}}function rA(t,e,n,r){return t&&(e===void 0||r-e>=eA)&&(n===void 0||r-n>=nA)}function Ch(t,e,n=Date.now()){let r=qn();return Ct(e.markets).filter((i)=>rA(kr(i,e.updates),na(t,i),r[i]?.at,n))}function iA(t,e){let n={},r=new TextDecoder;for(let[i,s]of Uk(t))if(i===Ft||i.startsWith("palettes/")&&i.endsWith(".toml"))n[i]=r.decode(s);return{...e?{etag:e}:{},files:n}}async function Jk(t,e,n,r){let i;try{i=await hd(Xw(t),e,n,r?{"if-none-match":r}:{})}catch(s){if(s instanceof Rc){let o=Fo(t);throw Error(`${Z(t)}${o?` has no ${o}`:" is not there"} — is the repository public?`)}throw s}if(i.status===304)return;return iA(new Uint8Array(await i.arrayBuffer()),i.headers.get("etag"))}function Vk(t,e,n){let{id:r,info:i,entries:s}=Ln(t,e,n,re(!1));return{source:t,id:r,entries:s,archive:e,info:i}}function ra(t){return Ai(t,z)}async function ia(t,e,n,r){if(e===z){let s=await Tc(w0,Je,n,r);return{source:e,id:z,manifest:s,entries:s.palettes}}let i=await Jk(e,n,r);if(!i)throw Error(`${Z(e)} answered as if nothing had changed`);return Vk(e,i,ra(t))}function Ks(t,e){if("manifest"in e){Oc(t,e.manifest);return}qk(Xf(t),{recursive:!0}),P(He(t,e.source),`${JSON.stringify(e.archive)}
636
+ `)}function sA(t,e){try{return Ye(t,e)}catch{return}}function Ai(t,e){try{if(e===z)return Je(Yk(Me(t),"utf8")).palettes;return Ln(e,Ye(t,e),ra(t),re(!1)).entries}catch{return[]}}function oA(t,e){let n=new Map(t.map((i)=>[i.name,JSON.stringify(i)])),r=new Map(e.map((i)=>[i.name,JSON.stringify(i)]));return{added:[...r.keys()].filter((i)=>!n.has(i)),changed:[...r].filter(([i,s])=>n.has(i)&&n.get(i)!==s).map(([i])=>i),gone:[...n.keys()].filter((i)=>!r.has(i))}}async function aA(t,e,n){if(!ee(e))return ia(t,e,n);let r=sA(t,e),i=await Jk(e,n,void 0,r?.etag);return i&&Vk(e,i,ra(t))}async function Lh(t,e,n){let r=Ai(t,e),i;try{i=await aA(t,e,n)}catch(o){throw Kk(e,o.message),o}if(i)Ks(t,i);else{let o=new Date;QT(He(t,e),o,o)}Kk(e,void 0);let s=i?.entries??r;return{source:e,id:i?.id??xc(e,Ye(t,e)),...i&&"manifest"in i?{version:i.manifest.version}:{},count:Mt(s).length,change:oA(r,s)}}async function jh(t,e,n){try{return{source:e,refreshed:await Lh(t,e,n)}}catch(r){return{source:e,failure:r instanceof Error?r:Error(String(r))}}}function _h(t,e){return`${Z(t)}: ${e.message}`}function cA(t){return"failure"in t&&t.failure instanceof dc?_h(t.source,t.failure):void 0}function Rt(t){return`${t} palette${t===1?"":"s"}`}function sa(t,e=Date.now()){let n=Math.floor(Math.max(0,e-t)/60000);if(n<1)return"just now";if(n<60)return`${n}m ago`;let r=Math.floor(n/60);return r<48?`${r}h ago`:`${Math.floor(r/24)}d ago`}function Zk({added:t,changed:e,gone:n}){return[t.length>0?`${t.length} new`:"",e.length>0?`${e.length} changed`:"",n.length>0?`${n.length} gone`:""].filter(Boolean).join(", ")}function Gh(t){let e=Zk(t.change);return`${t.version?`${t.id} ${t.version}`:t.id} — ${Rt(t.count)}${e?` (${e})`:""}`}function Bh(t){return Zk(t.change)?`Updated ${Gh(t)}`:void 0}var zk=/^(\d+)\.(\d+)\.(\d+)$/;function uA(t,e){let n=zk.exec(t),r=zk.exec(e);if(!n||!r)return!1;for(let i of[1,2,3]){let s=Number(n[i])-Number(r[i]);if(s!==0)return s>0}return!1}function Uh(t,e=It.version){return t.version&&uA(t.version,e)?`ttheme ${t.version} is out, you have ${e} — \`${Kf}\` updates it`:void 0}function oa(t,e,n=ra(t)){try{if(ct(e)){let r=Fe(e),i=ne(r);return{id:i,info:r,entries:qe(e,i,n,re(!1))}}return ee(e)?Ln(e,Ye(t,e),n,re(!1)):void 0}catch{return}}function Wh(t){if(!Dk(Hn(t)))return[];let e=L(t),n=ra(t),r={renamed:new Map,removed:[]};for(let u of Ct(e.markets)){let l=oa(t,u,n);if(l)_k(l.id,l.info,new Set(l.entries.map((f)=>ae(f.name))),e.palettes,r)}if(r.renamed.size===0&&r.removed.length===0)return[];let i=ut(t,!1);js(t,i,e.terminals,[...r.renamed.keys(),...r.removed]),p0(t,r.renamed,r.removed),vw(t,r.renamed),Lk(t,r.renamed,r.removed);let s=[...new Set(e.palettes.filter((u)=>!r.removed.includes(u)).map((u)=>r.renamed.get(u)??u))],{startup:o,...a}=e,c=o&&!r.removed.includes(o)?r.renamed.get(o)??o:void 0;return je(t,i,e,{...a,palettes:s,...c?{startup:c}:{}}),[...[...r.renamed].map(([u,l])=>`${u} is ${l} now — its market renamed it`),...r.removed.map((u)=>`${u} was removed from its market`)]}async function Kh(t,e,n,r){let i=Wh(t),s=i.length>0?L(t):e,o=new Set(r.flatMap((d)=>[...d.change.changed,...d.change.gone])),a=s.palettes.filter((d)=>o.has(d));if(a.length===0)return i;let c=ut(t,!1);jt(t,c,s);let u=new Set(r.flatMap((d)=>d.change.gone)),l=a.filter((d)=>u.has(d)).map((d)=>`${d} left its market — ttheme keeps the copy you have`),f=new Map(n.map((d)=>[d.name,d.pictures]));return await Dn(t,Ot(t,c,!1).palettes.filter((d)=>a.includes(d.name)&&f.has(d.name)).map((d)=>Us(d,f.get(d.name))),s.terminals),[...i,...l]}async function Qk(t=J()){try{if(!Dk(Hn(t)))return;let e=L(t),n=Ch(t,e);if(n.length===0)return;let r=jn(t),i=jr(`Checking ${n.map(Z).join(", ")} for updates`),s=await Promise.all(n.map((u)=>jh(t,u,Fh)));i.done();let o=s.flatMap((u)=>("refreshed"in u)?[u.refreshed]:[]),a=o.flatMap((u)=>Bh(u)??[]);Th(a);let c=a.length>0?await Kh(t,e,r,o):[];Th([...c,...s.flatMap((u)=>cA(u)??[]),...o.flatMap((u)=>Uh(u)??[])])}catch{return}}var iy=/^[a-z0-9]+(?:-[a-z0-9]+)*$/,hA=["add","remove","search","init","check"];function Dh(){return process.stdin.isTTY===!0&&process.stdout.isTTY===!0}function mA(){try{let t=lA("gh",["api","user","--jq",".login"],{encoding:"utf8",stdio:["ignore","pipe","ignore"],timeout:1e4}).trim().toLowerCase();return iy.test(t)?t:void 0}catch{return}}async function pA(t,e){if(e.author)return e.author;let n=mA();if(!n){if(!Dh())throw Error("your palettes are named after your GitHub handle — log in with `gh auth login`, or run this in a terminal");let r=await Ad({message:"Your GitHub handle — your palettes are named <handle>@<market>/<palette>",validate:(i)=>iy.test((i??"").toLowerCase())&&(i??"").length<=39?void 0:"that is not a GitHub handle"});if(fe(r))throw Error("no handle given");n=r.toLowerCase()}return Le(t,{...e,author:n}),console.log(`Your palettes are named ${n}@<market>/<palette>`),n}function zs(t,e){if(e===z)return z;return ct(e)?ne(Fe(e)):xc(e,Ye(t,e))}function Hu(t,e){try{return zs(t,e)}catch{return}}function sy(t){return lt(t)??z}function ca(t){return ut(t).palettes.filter((e)=>lt(e.name)===void 0)}function gA(t){let e=aa(import.meta.dirname,"..","dist","manifest.json");return Au(e)?Je(Pu(e,"utf8")).palettes:ca(t)}function ua(t,e,n){let{updates:r,...i}=t,s=Object.entries(n).filter(([o,a])=>e.includes(o)&&a!==kr(o,{}));return{...i,markets:e,...s.length>0?{updates:Object.fromEntries(s)}:{}}}function oy(t,e,n,r){return e.find((i)=>i!==n&&!Ms(i,n)&&Hu(t,i)===r)}function zh(t,e,n,r){let i=L(t),s=Ct(i.markets),o=oy(t,s,e,n);if(o)throw Error(`${n} already names the market at ${Z(o)} — \`ttheme market remove ${n}\` first`);let a=r===void 0?{...i.updates}:{...i.updates,[e]:r};Le(t,ua(i,s.includes(e)?s:[...s,e],a))}async function bA(t){if(!Dh())return!1;let e=await Ve({message:`Update ${t} on its own when its author changes it? ttheme checks once a day, when you run it`,initialValue:!1});if(fe(e))throw Error("no answer given — nothing was added");return e}async function ay(t,e){let n=jr(`Fetching ${Z(e)}`);try{return await ia(t,e)}finally{n.done()}}async function wA(t,e,n){let r=await ay(t,n),i=L(t),s=Ct(i.markets),o=oy(t,s,n,r.id);if(o)throw Error(`${r.id} already names the market at ${Z(o)} — \`ttheme market remove ${r.id}\` first`);let{[e]:a,...c}=i.updates??{},u=a===void 0?c:{...c,[n]:a};return Le(t,ua(i,s.map((l)=>l===e?n:l),u)),Ks(t,r),r}async function qh(t,e){let n=yr(e),r=Ct(L(t).markets);if(r.includes(n))return console.log(`${Z(n)} is already added`),{source:n,id:zs(t,n),fresh:!1};let i=ee(n)?r.find((c)=>ee(c)&&Ms(c,n)):void 0;if(i){let c=await wA(t,i,n);return console.log(`Moved ${c.id} to ${Fo(n)??"its default branch"} · ${Z(n)} — ${Rt(Mt(c.entries).length)}`),{source:n,id:c.id,fresh:!1}}if(ct(n)){let c=ne(Fe(n));zh(t,n,c);let u=qe(n,c,ca(t)).length;return console.log(`Added ${c} · ${Z(n)} — ${Rt(u)}, read in place`),{source:n,id:c,fresh:!0}}let s=await ay(t,n),o=n===z?void 0:await bA(s.id);zh(t,n,s.id,o),Ks(t,s);let a=Rt(Mt(s.entries).length);return console.log(n===z?`Added the ttheme catalog — ${a}`:`Added ${s.id} · ${Z(n)} — ${a}${o?", updating on its own":""}`),{source:n,id:s.id,fresh:!0}}async function $A(t){let e=J(),{source:n,id:r,fresh:i}=await qh(e,t);if(!i)return;if(ct(n))console.log("\n`ttheme browse` picks them · once the folder is on GitHub, `ttheme market add <owner>/<repo>` adds it anywhere");else if(n===z)console.log("\n`ttheme browse` picks them");else console.log(`
637
+ \`ttheme browse\` picks them, or \`ttheme add ${r}/<palette>\``)}function Yh(t,e){if(e===z)Xk(Me(t),{force:!0});else if(ee(e))Xk(He(t,e),{force:!0})}function Jh(t){return`${Rt(t.length)} installed from it keep${t.length===1?"s":""} working: ${t.join(", ")} — \`ttheme remove\` drops ${t.length===1?"it":"them"}`}function kA(t){let e=J(),n=L(e),r=Ct(n.markets),i=r.find((u)=>Hu(e,u)===t)??r.find((u)=>u===cy(t));if(!i)throw Error(`no market named ${t} — \`ttheme market\` lists them`);let s=Hu(e,i),o=n.palettes.filter((u)=>sy(u)===s),a=r.filter((u)=>u!==i),c=ua(n,a,n.updates??{});if(Le(e,c),Yh(e,i),jt(e,ut(e),c),console.log(`Removed ${s??t} · ${Z(i)}`),o.length>0)console.log(Jh(o))}function cy(t){try{return yr(t)}catch{return}}function yA(t,e){try{if(e===z)return Mt(Je(Pu(Me(t),"utf8")).palettes).length;if(ct(e))return qe(e,zs(t,e),ca(t),re(!1)).length;return Ln(e,Ye(t,e),ca(t),re(!1)).entries.length}catch{return}}function Vh(t,e,n=qn(),r=Date.now()){if(ct(e))return"read in place";let i=n[e],s=na(t,e);if(i&&(s===void 0||i.at>s))return`update failed ${sa(i.at,r)}`;return s===void 0?"never updated":`updated ${sa(s,r)}`}function vA(){let t=J(),e=L(t),n=Ct(e.markets);if(n.length===0){console.log("No markets — `ttheme market add official` brings the ttheme catalog back");return}let r=qn(),i=n.map((a)=>{let c=Hu(t,a)??"?",u=yA(t,a),l=e.palettes.filter((h)=>sy(h)===c).length,f=ct(a)?[]:[`auto-update ${kr(a,e.updates)?"on":"off"}`],d=a===z?void 0:oa(t,a)?.info.description;return{name:c,where:Z(a),about:d,note:[u===void 0?"Unreadable":Rt(u),...l>0?[`${l} installed`]:[],...f,Vh(t,a,r)].join(" · ")}}),s=Math.max(...i.map((a)=>a.name.length)),o=Math.max(...i.map((a)=>a.where.length));for(let a of i)if(console.log(` ${a.name.padEnd(s)} ${a.where.padEnd(o)} ${a.note}`),a.about)console.log(` ${" ".repeat(s)} ${a.about}`)}function Zh(t){return`${t.owner.login.toLowerCase()}/${t.name}`}async function Qh(t,e){let n=encodeURIComponent(`topic:${Es}${t?` ${t}`:""}`);try{let{items:r}=await Tc(`https://api.github.com/search/repositories?q=${n}&sort=stars&per_page=50`,(i)=>JSON.parse(i),void 0,e);return r}catch(r){if(r instanceof Nc)throw Error("GitHub lets a search through about ten times a minute without signing in — try again in a minute");throw r}}async function EA(t){let e=J(),n=await Qh(t);if(n.length===0){console.log(`No repository carries the ${Es} topic${t?` and matches ${t}`:""} yet`);return}let r=new Set(Ct(L(e).markets).map($r)),i=n.map((o)=>{let a=Zh(o);return{arg:a,added:r.has(a),stars:`★${o.stargazers_count}`,about:o.description??""}}),s=Math.max(...i.map((o)=>o.arg.length));for(let o of i)console.log(` ${o.added?"●":"○"} ${o.arg.padEnd(s)} ${o.stars.padStart(5)} ${o.about}`);console.log("\n`ttheme market add <name>` adds one")}function uy({name:t}){return`ttheme-${t}`}function SA(t,e){fA(yc(t),{recursive:!0}),P(aa(t,Ft),e0(e)),P(aa(t,"README.md"),`# ${ne(e)}
645
638
 
646
639
  A [ttheme](https://github.com/kecan0406/ttheme) market:
647
640
 
648
641
  \`\`\`sh
649
- ttheme market add ${e.owner}/${Nk(e)}
642
+ ttheme market add ${e.owner}/${uy(e)}
650
643
  ttheme browse
651
644
  \`\`\`
652
- `)}function Rk(t,{owner:e,name:n},r){let{schema:i,version:s,gate:o}=ps(),a={schema:i,version:s,gate:o,owner:e,name:n,palettes:r};H(Ii(t,un),`${JSON.stringify(a,null,2)}
653
- `)}function Tk(t){return We(`x@${t}/x`)?"takes lowercase letters, digits and single hyphens":void 0}async function Pk(){if(!Ph())throw Error("name the market: ttheme market init <name>, or --in <name> on new");let t=await wd({message:"Your market's name — its palettes are <you>@<name>/<palette>",validate:(e)=>Tk((e??"").toLowerCase())});if(oe(t))throw Error("no market name given");return t.toLowerCase()}async function Hk(t,e){let n=fi(t);if(e){let o=n.find((a)=>a.name===e||a.id===e||a.dir===xk(e));if(!o)throw Error(`${e} is not one of your local markets — \`ttheme market init ${e}\` makes it one`);return o}let[r,...i]=n;if(r&&i.length===0)return r;if(r)throw Error(`you have ${n.length} local markets — --in names one: ${n.map((o)=>o.name).join(", ")}`);let s=await Pk();return Ak(t,Uf(t,s),s)}async function Ak(t,e,n){let r=!Nh(Ii(e,un)),i;if(r){let o=Tk(n);if(o)throw Error(`the market name ${n} ${o}`);if(Nh(e)&&$T(e).length>0)throw Error(`${e} is not empty — pick a new folder for the market`);i={owner:await ET(t,_(t)),name:n},AT(e,i)}else i=ln(e);let s=ke(i);return Rh(t,e,s),console.log(`${r?"Made":"Added"} your market ${s} · ${st(e)}`),{dir:e,...i,id:s}}function vk(t){return t.startsWith(".")||t.startsWith("/")||t.startsWith("~")}async function FT(t){let e=J(),n=t&&!vk(t)?t.toLowerCase():t?kT(br(t)).toLowerCase():await Pk(),r=t&&vk(t)?br(t):Uf(e,n),i=await Ak(e,r,n),s=`${i.owner}/${Nk(i)}`;console.log(`
645
+ `)}function ly(t){return ve(`x@${t}/x`)?"takes lowercase letters, digits and single hyphens":void 0}async function fy(){if(!Dh())throw Error("name the market: ttheme market init <name>, or --in <name> on new");let t=await Ad({message:"Your market's name — its palettes are <you>@<name>/<palette>",validate:(e)=>ly((e??"").toLowerCase())});if(fe(t))throw Error("no market name given");return t.toLowerCase()}async function dy(t,e){let n=pi(t);if(e){let o=n.find((a)=>a.name===e||a.id===e||a.dir===cy(e));if(!o)throw Error(`${e} is not one of your local markets — \`ttheme market init ${e}\` makes it one`);return o}let[r,...i]=n;if(r&&i.length===0)return r;if(r)throw Error(`you have ${n.length} local markets — --in names one: ${n.map((o)=>o.name).join(", ")}`);let s=await fy();return hy(t,td(t,s),s)}async function hy(t,e,n){let r=!Au(aa(e,Ft)),i;if(r){let o=ly(n);if(o)throw Error(`the market name ${n} ${o}`);if(Au(e)&&dA(e).length>0)throw Error(`${e} is not empty — pick a new folder for the market`);i={owner:await pA(t,L(t)),name:n},SA(e,i)}else i=Fe(e);let s=ne(i);return zh(t,e,s),console.log(`${r?"Made":"Added"} your market ${s} · ${Z(e)}`),{dir:e,...i,id:s}}function ey(t){return t.startsWith(".")||t.startsWith("/")||t.startsWith("~")}async function MA(t){let e=J(),n=t&&!ey(t)?t.toLowerCase():t?ry(yr(t)).toLowerCase():await fy(),r=t&&ey(t)?yr(t):td(e,n),i=await hy(e,r,n),s=`${i.owner}/${uy(i)}`;console.log(`
654
646
  \`ttheme new <palette> --from <palette>\` puts palettes in it, and a folder under palettes/ shelves them in a catalog — others see them once it is on GitHub:
655
647
 
656
- cd ${st(r)}
648
+ cd ${Z(r)}
657
649
  git init -b main && git add -A && git commit -m "${i.id}"
658
650
  gh repo create ${s} --public --source . --push
659
- gh repo edit ${s} --add-topic ${$s}
651
+ gh repo edit ${s} --add-topic ${Es}
660
652
 
661
- Its action rebuilds ${un} whenever palettes/ changes; then \`ttheme market add ${s}\` works anywhere`)}function CT(t){let e=t?br(t):process.cwd(),n=ln(e),r=ke(n),i=MT(J()),s=new Map,o=[],a=[];for(let c of wr(e))try{let u=To(c,s);if(u)throw Error(u);s.set(c.slug,c);let l=ye(`${r}/${c.slug}`,Th(c.path,"utf8"),i),f=Te({...l,name:c.slug});o.push(c.catalog?{...f,catalog:c.catalog}:f)}catch(u){a.push(` ${yT(e,c.path)}: ${u.message}`)}if(a.length>0)return console.error(`${a.length} palettes cannot be read — the index was left as it was:
662
- ${a.join(`
663
- `)}`),1;for(let c of o){let l=Po(c).filter((d)=>d.startsWith(" ✗")),f=c.catalog?`${c.catalog}/${c.name}`:c.name;console.log(` ${f}${l.length>0?`
664
- ${l.join(`
665
- `)}`:" passes the gate"}`)}return Rk(e,n,o),console.log(`
666
- ${r} · ${Nt(o.length)} → ${Ii(e,un)}`),0}async function Fk(t,e){switch(t){case void 0:TT();return;case"add":await xT(Sk(t,e));return;case"remove":NT(Sk(t,e));return;case"search":await PT(e);return;case"init":await FT(e);return;case"build":return CT(e);default:throw Error(`unknown market action ${t} — ${vT.join(", ")}, or none to list them`)}}function Sk(t,e){if(!e)throw Error(t==="add"?"market add takes a repository or a folder: ttheme market add alice/ttheme-dust":"market remove takes a market name — `ttheme market` lists them");return e}function Ck(t,e){let n=_s(t,e);return`${n} — ${Nt($r(e,n,Ou(t),!1).length)}, read in place`}var LT=new Intl.Segmenter(void 0,{granularity:"grapheme"});function Lk(t){return[...t].length===1&&t>=" "&&t!==""}function jT(t){return[...t.replace(/[\r\n\t]+/g," ")].filter(Lk).join("")}function xi(t,e,n=()=>!0){if(e==="backspace")return[...LT.segment(t)].slice(0,-1).map((r)=>r.segment).join("");if(e==="ctrl-u")return"";if(e==="ctrl-w"||e==="alt-backspace")return t.replace(/\S*\s*$/,"");return Lk(e)&&n(e)?t+e:void 0}class jr{value;constructor(t=""){this.value=t}key(t){let e=xi(this.value,t);if(e===void 0)return!1;return this.value=e,!0}paste(t){this.value+=jT(t)}}import{performance as GT}from"node:perf_hooks";import{StringDecoder as _T}from"node:string_decoder";var BT=30,jk=50,WT=500,UT=5,Gk=Buffer.from("\x1B[M"),xu="\x1B]1337;ReportCellSize\x07\x1B[16t\x1B[14t\x1B[18t",zk={A:"up",B:"down",C:"right",D:"left",H:"home",F:"end","1~":"home","7~":"home","3~":"delete","4~":"end","8~":"end","5~":"pgup","6~":"pgdn",I:"focus-in",O:"focus-out",Z:"shift-tab","1;2C":"shift-right","1;2D":"shift-left"},KT={"\r":"enter","\n":"enter","\t":"tab","\b":"backspace","":"backspace","\x1B":"esc","\x00":"ctrl-space"},_k=/\[([0-?]*)([ -/]*)([@-~])/y,zT=/^\[[0-?]*[ -/]*$/,Bk=/\](\d+)/y,DT=/^\]\d*$/,Wk=/\]\d+;/y,qT=/^1337;ReportCellSize=([\d.]+);([\d.]+)(?:;([\d.]+))?$/,Dk="\x1B[200~",Iu="\x1B[201~";function Gh(t){let e=KT[t];if(e)return e;let n=t.codePointAt(0)??0;if(n<27)return`ctrl-${String.fromCharCode(n+96)}`;return n<32?void 0:t}function Bs(t){return{kind:"key",key:t}}function Ws(t){return{events:[Bs("esc")],end:t+1}}function YT(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 JT=["left","middle","right",void 0];function qk(t,e,n,r){if(!Number.isInteger(t)||t<0||t>=128||!(e>=0)||!(n>=0))return;let i=t&3,s={kind:"mouse",row:n,col:e,shift:(t&4)!==0,alt:(t&8)!==0,ctrl:(t&16)!==0};if(t&64)return{...s,action:"wheel",button:void 0,wheel:i%2===0?-1:1,sideways:i>=2,count:0};let o=JT[i],a=t&32?o?"drag":"move":r||!o?"release":"press";return{...s,action:a,button:o,wheel:0,sideways:!1,count:a==="press"?1:0}}function VT(t,e,n){let r=[],i=e;while(r.length<3&&i<t.length){let u=t.codePointAt(i);r.push(u),i+=u>65535?2:1}if(r.length<3)return n?{events:[],end:t.length}:void 0;let[s=0,o=0,a=0]=r,c=Math.max(s,o,a)<128?qk(s-32,o-33,a-33,!1):void 0;return{events:c?[c]:[],end:i}}function ZT(t,e,n){if((n==="M"||n==="m")&&e===""&&t.startsWith("<")){let[i=-1,s=0,o=0]=t.slice(1).split(";").map(Number),a=qk(i,s-1,o-1,n==="m");return a?[a]:[]}if(n==="t"&&e===""){let[i,s=0,o=0]=t.split(";").map(Number),a=i===6?"cell":i===4?"window":i===8?"grid":void 0;return a?[{kind:"size",of:a,h:s,w:o}]:[]}if(n==="y"&&e==="$"&&t.startsWith("?")){let[i=0,s=0]=t.slice(1).split(";").map(Number);return[{kind:"mode",mode:i,value:s}]}if(n==="c"&&t.startsWith("?"))return[{kind:"attributes"}];let r=e===""?zk[`${t}${n}`]:void 0;return r?[Bs(r)]:[]}function QT(t,e,n){_k.lastIndex=e+1;let r=_k.exec(t);if(!r)return!n&&zT.test(t.slice(e+1))?void 0:Ws(e);let[i,s="",o="",a=""]=r,c=e+1+i.length;if(s===""&&o===""&&a==="M")return VT(t,c,n);if(s==="200"&&a==="~"){let u=t.indexOf(Iu,c);if(u===-1)return n?{events:[{kind:"paste",text:t.slice(c)}],end:t.length}:void 0;return{events:[{kind:"paste",text:t.slice(c,u)}],end:u+Iu.length}}return{events:ZT(s,o,a),end:c}}function XT(t){let e=qT.exec(t);if(e){let s=Number(e[3]??1);return[{kind:"size",of:"cell",h:Math.round(Number(e[1])*s),w:Math.round(Number(e[2])*s)}]}let[n="",r="",...i]=t.split(";");return[{kind:"osc",code:n,meta:YT(r),payload:i.join(";")}]}function tP(t,e,n){Bk.lastIndex=e+1;let r=Bk.exec(t),i=r?t[e+1+r[0].length]:void 0;if(i!==";"&&i!=="\x07"&&i!=="\x1B")return!n&&DT.test(t.slice(e+1))?void 0:Ws(e);let s=[t.indexOf("\x07",e),t.indexOf("\x1B\\",e+2)].filter((a)=>a!==-1);if(s.length===0)return n?{events:[],end:t.length}:void 0;let o=Math.min(...s);return{events:XT(t.slice(e+2,o)),end:o+(t[o]==="\x07"?1:2)}}function eP(t,e,n){let r=t[e+2];if(r===void 0)return n?Ws(e):void 0;if(!/^[A-Za-z]$/.test(r))return Ws(e);let i=zk[r];return{events:i?[Bs(i)]:[],end:e+3}}function nP(t,e,n){let r=t[e+1];if(r===void 0)return n?Ws(e):void 0;if(r==="[")return QT(t,e,n);if(r==="]")return tP(t,e,n);if(r==="O")return eP(t,e,n);if(r==="")return{events:[Bs("alt-backspace")],end:e+2};if(/^[a-z]$/.test(r))return{events:[Bs(`alt-${r}`)],end:e+2};return Ws(e)}function Uk(t,e=!1){let n=[],r=0;while(r<t.length){if(t[r]==="\x1B"){let o=nP(t,r,e);if(!o)return{events:n,rest:t.slice(r)};n.push(...o.events),r=o.end;continue}let i=String.fromCodePoint(t.codePointAt(r)),s=Gh(i);if(s)n.push(Bs(s));r+=i.length}return{events:n,rest:""}}function rP(t){let e=t.indexOf(Gk);if(e===-1)return{bytes:t,carry:void 0};let n=[],r=0;while(e!==-1&&e+6<=t.length){n.push(t.subarray(r,e));let[i=0,s=0,o=0]=t.subarray(e+3,e+6);if(s>32&&o>32)n.push(Buffer.from(`\x1B[<${i-32};${s-32};${o-32}M`));r=e+6,e=t.indexOf(Gk,r)}return n.push(t.subarray(r,e===-1?t.length:e)),{bytes:Buffer.concat(n),carry:e===-1?void 0:t.subarray(e)}}function Kk(t){return Wk.lastIndex=1,t.startsWith(Dk)||t.startsWith("\x1B]")&&Wk.test(t)}function iP(t,e){let n=t.slice(-Iu.length)+e;return t.startsWith(Dk)?n.includes(Iu):n.includes("\x07")||n.includes("\x1B\\")}class _h{held="";timer;carry;pressed;wheeled;utf8=new _T("utf8");burst;take;constructor(t,e=()=>!1){this.burst=e,this.take=(n)=>{let r=this.counted(n);if(r.length>0)t(r)}}counted(t){let e=GT.now();return t.filter((n)=>{if(n.kind!=="mouse")return!0;if(n.action==="wheel"){let s=n.wheel*(n.sideways?2:1),o=this.wheeled;if(o!==void 0&&o.way===s&&e-o.at<UT)return!1;return this.wheeled={at:e,way:s},!0}if(n.action==="release")n.count=this.pressed?.count??0;if(n.action!=="press"||!n.button)return!0;let r=this.pressed,i=r!==void 0&&r.button===n.button&&r.row===n.row&&Math.abs(r.col-n.col)<=1&&e-r.at<=WT;return n.count=i?r.count+1:1,this.pressed={at:e,button:n.button,row:n.row,col:n.col,count:n.count},!0})}feed(t){clearTimeout(this.timer);let e=typeof t==="string"?t:this.bytes(t);if(this.carry)this.wait(jk);if(!this.held&&!e.includes("\x1B")&&this.burst(e)){this.take([{kind:"paste",text:e}]);return}if(Kk(this.held)&&!iP(this.held,e)){this.held+=e;return}let{events:n,rest:r}=Uk(this.held+e);if(this.held=r,r&&!Kk(r))this.wait(r.length===1?BT:jk);if(n.length>0)this.take(n)}bytes(t){let{bytes:e,carry:n}=rP(this.carry?Buffer.concat([this.carry,t]):t);return this.carry=n,this.utf8.write(e)}wait(t){clearTimeout(this.timer),this.timer=setTimeout(()=>this.flush(),t)}flush(){clearTimeout(this.timer),this.carry=void 0;let{events:t}=Uk(this.held,!0);if(this.held="",t.length>0)this.take(t)}stop(){clearTimeout(this.timer),this.held="",this.carry=void 0}}class ra{window;grid;see(t){if(t.kind!=="size")return;if(t.of==="cell")return{w:t.w,h:t.h};if(t.of==="window")this.window=t;else this.grid=t;let e=this.window,n=this.grid;return e&&n&&n.h>0&&n.w>0?{h:Math.floor(e.h/n.h),w:Math.floor(e.w/n.w)}:void 0}}var Ru={on:"\x1B[?1049h",off:"\x1B[?1049l"},Wn={on:"\x1B[?25l",off:"\x1B[?25h"},Ni={on:"\x1B[?7l",off:"\x1B[?7h"},Gr={on:"\x1B[?2004h",off:"\x1B[?2004l"},Zk={on:"\x1B[?1004h",off:"\x1B[?1004l"},sP={on:"\x1B[?1000h\x1B[?1002h\x1B[?1006h",off:"\x1B[?1006l\x1B[?1002l\x1B[?1000l"};function Ks(t=process.env){return t.TTHEME_MOUSE==="off"?[]:[sP]}var Qk={SIGHUP:1,SIGINT:2,SIGQUIT:3,SIGTERM:15},oP=3000;class sa extends Error{exit;constructor(t){super(t);this.exit=128+Qk[t]}}var gn=[],Us=new Map,ia=new Map;function Yk(t){return gn.findLast((e)=>e.input===t)}var Jk;function Xk(t){for(let e of[...gn].reverse())e.abort(t);if(!Jk)Jk=setTimeout(()=>{ty(),process.exit(t instanceof sa?t.exit:1)},oP).unref()}var aP=Object.fromEntries(Object.keys(Qk).map((t)=>[t,()=>Xk(new sa(t))]));function ty(){for(let t of[...gn].reverse())t.close()}function cP(){for(let t of gn)t.reassert();gn.at(-1)?.redraw()}function Vk(t){let e=t?"on":"off";for(let[n,r]of Object.entries(aP))process[e](n,r);if(process[e]("uncaughtException",Xk),process[e]("exit",ty),process.platform!=="win32")process[e]("SIGCONT",cP)}function Nu(){}class ey{input;output;failed;modes=[];assumed;owned=[];keys;tty;take;resized;queued=[];asking;reject=Nu;open=!0;aborted=!1;constructor(t={}){if(this.input=t.input??process.stdin,this.output=t.output??process.stdout,this.tty=this.output.isTTY===!0&&this.input.isTTY===!0,this.assumed=t.assume??[],this.keys=new _h((r)=>this.deliver(r),t.burst),this.failed=new Promise((r,i)=>{this.reject=i}),this.failed.catch(Nu),this.tty&&!gn.some((r)=>r.tty))Vk(!0);gn.push(this);let e="";for(let r of this.assumed)if(!Us.has(r))e+=r.on;for(let r of t.modes??[])e+=this.claim(r);this.write(e);let n=ia.get(this.input)??0;if(n===0)this.input.setRawMode?.(!0);ia.set(this.input,n+1),this.input.on("data",this.received),this.input.resume(),this.output.on("resize",this.resizing),this.output.on("error",Nu)}hold(t){this.write(this.claim(t))}get cols(){return this.output.columns||80}get rows(){return this.output.rows||24}write(t){if(t&&this.open)this.output.write(t)}listen(t){this.take=t;let e=this.queued;if(this.queued=[],e.length>0)t(e)}onResize(t){this.resized=t}until(t){return Promise.race([t,this.failed])}loop(t,e=()=>{}){return this.until(new Promise((n)=>{let r=!1;this.listen((i)=>{for(let s of i){let o=r?void 0:t(s);if(o!==void 0)r=!0,n(o)}if(!r)e()})}))}ask(t,e,n,r=!0){return new Promise((i)=>{let s={hold:r,pick:(c)=>{let u=e(c);if(u===void 0)return!1;return o(u),!0}},o=(c)=>{if(clearTimeout(a),this.asking===s)this.asking=void 0;i(c),this.release()},a=setTimeout(()=>o(void 0),n);this.asking=s,this.write(t)})}abort(t){if(this.aborted)return;this.aborted=!0,this.keys.stop(),this.reject(t)}redraw(){this.resized?.()}reassert(){if(this.open)this.input.setRawMode?.(!0),this.write([...this.assumed,...this.owned].map((t)=>t.on).join(""))}close(){if(!this.open)return;this.keys.stop(),this.input.off("data",this.received),this.output.off("resize",this.resizing);let t="";for(let n of[...this.modes].reverse()){let r=(Us.get(n)??1)-1;if(r===0)Us.delete(n),t+=n.off;else Us.set(n,r)}this.write(t),this.open=!1;let e=(ia.get(this.input)??1)-1;if(e===0)ia.delete(this.input),this.input.setRawMode?.(!1),this.input.pause();else ia.set(this.input,e);if(this.output.off("error",Nu),gn.splice(gn.indexOf(this),1),this.tty&&!gn.some((n)=>n.tty))Vk(!1)}received=(t)=>{if(Yk(this.input)===this&&!this.aborted)this.keys.feed(t)};resizing=()=>{if(Yk(this.input)===this)this.resized?.()};claim(t){this.modes.push(t);let e=Us.get(t)??0;if(Us.set(t,e+1),e>0)return"";return this.owned.push(t),t.on}deliver(t){let e=this.asking,n=e?t.filter((r)=>!e.pick(r)):t;if(n.length===0)return;if(!this.take||this.asking?.hold){this.queued.push(...n);return}this.take(n)}release(){if(this.take&&this.queued.length>0){let t=this.queued;this.queued=[],this.take(t)}}}async function _r(t,e){let n=new ey(t);try{return await e(n)}finally{n.close()}}var uP=3;function oa(t,e){return`${t}/${e}`}function ny(t){return ct(t.name)?ur(t.name):t.name}function zs(t){return t.catalog!==void 0&&iy(t.group)?oa(t.group,t.catalog):void 0}function Bh(t){if(t?.kind==="palette")return`palette ${t.entry.name}`;if(t?.kind==="group")return`group ${t.name}`;if(t?.kind==="catalog")return`catalog ${oa(t.group,t.name)}`;return t?.kind??""}function Tu(t,e){let n=e.toLowerCase();return[t.name,t.group,t.native??"",t.catalog??"",...t.nativeNames??[],...lc(t.booru)].some((r)=>r.toLowerCase().includes(n))}function ry(t,e,n){let r=n.trim(),i=[],s=new Set,o=(a)=>({kind:"palette",entry:a});for(let a of t){if(a.default||s.has(a.group))continue;s.add(a.group);let c=t.filter((d)=>!d.default&&d.group===a.group),u=r?c.filter((d)=>Tu(d,r)):c;if(r&&u.length===0)continue;let l=r.length>0||e.has(a.group);if(i.push({kind:"group",name:a.group,native:a.native,lead:c.find((d)=>d.lead)??a,expanded:l,count:u.length}),!l)continue;let f=u.filter((d)=>zs(d)!==void 0);for(let d of new Set(f.map((h)=>h.catalog))){let h=f.filter(($)=>$.catalog===d),p=r.length>0||e.has(oa(a.group,d));if(i.push({kind:"catalog",group:a.group,name:d,lead:h[0],expanded:p,count:h.length}),p)i.push(...h.map(o))}i.push(...u.filter((d)=>zs(d)===void 0).map(o))}return i}function lP(t,e){let n=e.trim(),r=new Set(t.filter((i)=>!i.default&&(n===""||Tu(i,n))).map((i)=>i.group));return ry(t,new Set,"").filter((i)=>i.kind==="group"&&r.has(i.name))}function iy(t){return t.includes("@")}function Wh(t,e,n,r,i=!0){let s=n-1;if(s<0)return t;let o;if(!Number.isFinite(e))o=e>0?s:0;else if(e>0)o=t>=s?i?0:s:Math.min(s,t+e);else o=t<=0?i?s:0:Math.max(0,t+e);return r(o)?o+Math.sign(e):o}function Pu(t,e){let n={home:Number.NEGATIVE_INFINITY,end:Number.POSITIVE_INFINITY,pgup:-e,pgdn:e};return t===void 0?void 0:n[t]}function fP(t){let e=t.findIndex((n)=>n.kind==="group"&&iy(n.name));return e>0&&t.slice(0,e).some((n)=>n.kind==="group")?[...t.slice(0,e),{kind:"rule"},...t.slice(e)]:t}function dP(t){let e=t.findIndex((n)=>n.kind==="palette");return e===-1?0:e}function Hu(t){return t==="decode"||t==="glitch"?t:"typewriter"}function Ds(t,e,n){return se({kind:"row",at:t,part:e},n)}class aa{picked;scope;maxItems;named=[];series=[];color;onFocus;entries=[];seriesPad=0;namePad=0;expanded=new Set;rows=[];cursor=0;top=0;filter="";lastFocused="";constructor(t){this.picked=t.picked,this.scope=t.scope??"palette",this.maxItems=t.maxItems??12,this.color=t.color??!0,this.onFocus=t.onFocus,this.load(t.entries),this.rebuild("first")}load(t){this.entries=t,this.named=t.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.namePad=Math.max(0,...this.named.map((e)=>this.indent(e).length+ny(e).length))}indent(t){return zs(t)===void 0?" ":" "}setEntries(t){this.load(t),this.rebuild("stay")}setFilter(t){if(t!==this.filter)this.filter=t,this.rebuild("keep")}clear(){let t=this.rows[this.cursor];if(t?.kind==="palette"&&!t.entry.default){this.expanded.add(t.entry.group);let e=zs(t.entry);if(e!==void 0)this.expanded.add(e)}this.setFilter("")}focusedRow(){return this.rows[this.cursor]}refocus(){this.lastFocused="",this.sync()}members(t,e){let n=this.scope==="palette"?this.filter.trim():"";return this.named.filter((r)=>r.group===t&&(e===void 0||r.catalog===e)&&(n===""||Tu(r,n)))}everyone(t){return t.flatMap((e)=>e.kind==="group"?this.members(e.name):[])}pick(){let t=this.rows[this.cursor],e=t?.kind==="palette"?[t.entry.name]:t?.kind==="group"?this.members(t.name).map((r)=>r.name):t?.kind==="catalog"?this.members(t.group,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,e){return this.members(t,e).filter((n)=>this.picked.has(n.name)).length}pickedCount(){if(this.scope==="palette")return this.named.filter((t)=>this.picked.has(t.name)).length;return this.series.filter((t)=>this.members(t).every((e)=>this.picked.has(e.name))).length}total(){return this.scope==="series"?this.series.length:this.named.length}matched(){let t=this.filter.trim();if(this.scope==="series")return this.rows.filter((e)=>e.kind==="group").length;return t?this.named.filter((e)=>Tu(e,t)).length:this.named.length}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"?lP(this.entries,this.filter):ry(this.entries,this.expanded,this.filter);this.rows=n.length>0?fP([{kind:"all",count:this.allCount(n)},...n]):[];let r=n.length>0?this.rows.indexOf(n[dP(n)]):0;if(t==="first")this.cursor=r;else if(t==="keep"||t==="stay"){let i=Bh(e),s=e?.kind==="palette"||t==="stay"?this.rows.findIndex((o)=>Bh(o)===i):-1;this.cursor=s===-1?r:s}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,e=!0){this.cursor=Wh(this.cursor,t,this.rows.length,(n)=>this.rows[n]?.kind==="rule",e),this.sync()}point(t){let e=this.rows[t];if(!e||e.kind==="rule")return!1;return this.cursor=t,this.sync(),!0}flip(){let t=this.rows[this.cursor];if(t?.kind==="group"||t?.kind==="catalog")this.fold(!t.expanded)}foldable(){let t=this.rows[this.cursor];return(t?.kind==="group"||t?.kind==="catalog")&&this.scope==="palette"&&!this.filter}open(){if(this.foldable())this.flip();else this.pick()}toggle(t){if(this.expanded.has(t))this.expanded.delete(t);else this.expanded.add(t);this.rebuild("clamp")}climb(t,e){this.expanded.delete(t),this.rebuild("clamp"),this.reach(e)}reach(t){this.cursor=Math.max(0,this.rows.findIndex((e)=>Bh(e)===t)),this.sync()}fold(t){if(this.filter||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==="catalog"){if(t!==e.expanded)this.toggle(oa(e.group,e.name));else if(!t)this.reach(`group ${e.group}`)}else if(e?.kind==="palette"&&!t&&!e.entry.default){let n=zs(e.entry);if(n===void 0)this.climb(e.entry.group,`group ${e.entry.group}`);else this.climb(n,`catalog ${n}`)}}window(){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 t=this.rows.slice(this.top,this.top+this.maxItems);return{lines:t.map((e,n)=>this.renderRow(e,this.top+n)),above:this.top,below:this.rows.length-this.top-t.length}}renderRow(t,e){if(t.kind==="rule")return` ${this.color?`${P}${"── Markets ──────────"}${Pt}`:"── Markets ──────────"}`;return Ds(e,"row",this.rowText(t,e))}rowText(t,e){let n=e===this.cursor,r=t.kind==="palette"?t.entry:t.kind==="all"?void 0:t.lead,i=this.color&&n&&r!==void 0,s=(S)=>this.color?`${P}${S}${fe}`:S,o=(S)=>this.color?`${at}${S}${fe}`:S,a=(S)=>this.color?` ${Ip(oc(S),i?Le(S.foreground):"\x1B[39m")}`:"",c=n?i?`${Le(r.cursor)}▌\x1B[39m `:"▌ ":" ",u=(S)=>i?`${c}${Ha(r.selection,r.foreground)} ${S} ${Pt}`:`${c} ${S}`,l=(S)=>Ds(e,"box",`${S?"●":"○"} `),f=(S)=>Ds(e,"fold",`${S?"▾":"▸"} `);if(t.kind==="all")return u(`${l(this.everyone(this.rows).every((S)=>this.picked.has(S.name)))}Select all ${s(`(${t.count})`)}`);if(t.kind==="group"&&this.scope==="series"){let S=`(${t.count})${t.native?` ${t.native}`:""}`;return u(`${l(this.pickedIn(t.name)===t.count)}${o(t.name.padEnd(this.seriesPad))}${a(t.lead)}${this.color?" ":" "}${s(S)}`)}let d=this.rows[this.cursor],h=(S,E)=>this.color&&d?.kind==="palette"&&S?`${at}${Le(d.entry.cursor)}${E}${fe}\x1B[39m`:o(E);if(t.kind==="group"){let S=h(d?.kind==="palette"&&d.entry.group===t.name,t.name),E=t.native?` ${s(t.native)}`:"";return u(`${f(t.expanded)}${S} ${s(`(${this.pickedIn(t.name)}/${t.count})`)}${E}`)}if(t.kind==="catalog"){let S=d?.kind==="palette"&&zs(d.entry)===oa(t.group,t.name),E=s(`(${this.pickedIn(t.group,t.name)}/${t.count})`);return u(` ${f(t.expanded)}${h(S,t.name)} ${E}`)}let p=t.entry,$=this.indent(p),g=ny(p),b=this.color?g.padEnd(this.namePad-$.length):g,y=n?o(b):b;return u(`${$}${l(this.picked.has(p.name))}${y}${a(p)}`)}}function Uh(t){let e=t.named[Math.floor(Math.random()*t.named.length)],n=t.series[Math.floor(Math.random()*t.series.length)];return e&&n?`${e.name} | ${n}`:""}class Au{fx;make;redraw;roller;example="";step=0;seed=0;timer;constructor(t,e,n){this.fx=t,this.make=e,this.redraw=n,this.roll(),this.roller=setInterval(()=>{this.roll(),this.step=8,this.redraw()},3000),this.roller.unref?.()}stop(){clearInterval(this.roller),clearTimeout(this.timer)}roll(){let t=this.make();this.example=t.length>30?`${t.slice(0,29)}…`:t,this.seed=Math.floor(Math.random()*997)}text(){if(this.step===0)return this.example;if(!this.timer)this.timer=setTimeout(()=>{this.timer=void 0,this.step-=1,this.redraw()},60),this.timer.unref?.();let t=Math.floor(this.example.length*(8-this.step)/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.seed)%3<t||n(r)?r:e[Math.floor(Math.random()*e.length)]??r).join("")}}var hP=5;class Kh{picked;list;scope;color;required;most;hint;field=new jr;input;output;state="active";error="";redraw=()=>{};constructor(t){this.scope=t.scope??"palette",this.picked=new Set(t.installed??[]),this.color=t.color??!0,this.required=t.required??!1,this.most=t.maxItems??12,this.input=t.input,this.output=t.output,this.list=new aa({entries:t.entries,picked:this.picked,scope:this.scope,maxItems:this.most,color:this.color,...t.onFocus?{onFocus:t.onFocus}:{}}),this.hint=new Au(t.fx??"typewriter",()=>Uh(this.list),()=>this.redraw())}prompt(){return _r({input:this.input,output:this.output,modes:[Wn,Gr]},async(t)=>{let e=new gh((r)=>t.write(r),()=>t.cols),n=()=>{return this.list.maxItems=Math.max(uP,Math.min(this.most,t.rows-hP)),this.draw()};this.redraw=()=>e.draw(n()),t.onResize(()=>e.redraw(n())),this.redraw();try{let r=await t.loop((i)=>{return this.take(i),this.state==="submit"||this.state==="cancel"?this.state:void 0},()=>this.redraw());return this.redraw=()=>{},e.end(this.draw()),r}finally{this.hint.stop()}})}take(t){if(t.kind==="paste"){this.field.paste(t.text),this.list.setFilter(this.field.value);return}if(t.kind!=="key")return;let e=t.key;if(this.state==="error")this.state="active";let n=Pu(e,this.list.maxItems);if(e==="esc"||e==="ctrl-c")this.state="cancel";else if(e==="enter")if(this.required&&this.picked.size===0)this.error=`Pick at least one ${this.scope}`,this.state="error";else this.state="submit";else if(e==="up"||e==="down")this.list.move(e==="up"?-1:1);else if(e==="left"||e==="right")this.list.fold(e==="right");else if(n!==void 0)this.list.move(n);else if(e===" ")this.list.pick();else if(this.field.key(e))this.list.setFilter(this.field.value)}draw(){let t=(p)=>this.color?`${P}${p}${Pt}`:p,e=(p)=>this.color?`${Aa}${p}${Pt}`:p,n=this.scope==="series"?"Series":"Catalog";if(this.state==="submit")return[`${t("◇")} ${n} ${t(`· ${this.list.pickedCount()} picked`)}`];if(this.state==="cancel")return[`${t(`◇ ${n} · cancelled`)}`];let r=this.field.value,i=`${e("◆")} ${n} ${t(`(${this.list.matched()}/${this.list.total()} · ${this.list.pickedCount()} picked)`)}`,s=this.hint.text(),o=`${e("│")} ${r?`${r}_`:t(`Search…${s?` e.g. ${s}`:""}`)}`,{lines:a,below:c}=this.list.window(),u=a.length>0?a.map((p)=>`${e("│")} ${p}`):[`${e("│")} ${t(`No ${this.scope==="series"?"series":"palettes"} match '${r}'`)}`];while(u.length<this.list.maxItems)u.push(e("│"));let l=c>0?`${e("│")} ${t(`↓ ${c} more`)}`:e("│"),f=this.scope==="series"?"":" · ←→ fold",d=this.scope==="series"?"continue":"install",h=this.state==="error"?`${e("└")} ${this.color?`${Jt}${this.error}${Pt}`:this.error}`:`${e("└")} ${t(`↑↓ move${f} · space pick · type to filter · enter ${d} · esc cancel`)}`;return[i,o,...u,l,h]}}var qs=[{tab:"catalog",title:"Catalog",heading:"Discover palettes"},{tab:"installed",title:"Installed",heading:"Installed palettes"},{tab:"markets",title:"Markets",heading:"Manage markets"},{tab:"errors",title:"Errors",heading:"Problems"}],zh=34,mP=72,pP=94,gP=22,sy=40,oy=10,ay=3,bP=600,wP=500,$P=300,cy=12,kP="\x1B[7;1m",Dh={title:"",lines:[],brief:""};function ca(t){let e=t.trim();if(e!==q&&!e.includes("/")&&!e.startsWith("~"))return;try{return br(e)}catch{return}}function yP(t){return t.charAt(0).toUpperCase()+t.slice(1)}class qh{picked;tab="catalog";fields={catalog:new jr,installed:new jr,markets:new jr,errors:new jr};cursor={markets:0,errors:0};top={markets:0,errors:0};adds=new Map;removes=new Set;want=new Map;scope={catalog:void 0,installed:void 0};busy=new Map;failed=new Map;peeked=new Map;peekFailed=new Map;staging=new Set;timers=new Map;refreshed=[];inflight=new Set;markets;problems;kept;installed;startup;io;order;color;hub;owns;input;output;maxItems=12;paint;catalog;mine;hint;screen;state="active";phase="browse";offset=0;started=!1;log=[];working="";stopped;beat=0;asking;leaving;goto;repos;searching=!1;searchError;searched;asked=0;help=!1;worn;live;constructor(t){this.markets=t.markets,this.problems=t.problems,this.kept=t.kept,this.installed=new Set(t.installed),this.startup=t.startup,this.io=t.io,this.order=t.order??((n)=>n),this.color=t.color??!0,this.hub=t.hub,this.owns=t.owns??!1,this.input=t.input,this.output=t.output,this.live=t.lookups??!0,this.paint=t.onFocus,this.picked=new Set(t.installed);let e=this.entries();this.catalog=new aa({entries:e,picked:this.picked,color:this.color,maxItems:this.maxItems,onFocus:(n)=>this.focus("catalog",n)}),this.mine=new aa({entries:this.mineOf(e),picked:this.picked,color:this.color,maxItems:this.maxItems,onFocus:(n)=>this.focus("installed",n)}),this.hint=new Au(t.fx??"typewriter",()=>Uh(this.tab==="installed"?this.mine:this.catalog),()=>this.redraw());for(let n of t.due)this.update(n)}run(){let t=[...this.owns?[Ru,Wn,Ni]:[],Gr,...Ks()],e=this.owns?[]:[Wn,Ni];return _r({input:this.input,output:this.output,modes:t,assume:e},async(n)=>{let r=new Mi({write:(i)=>n.write(i),view:()=>this.state==="active"?{lines:this.view(),ticking:this.phase==="applying"}:void 0,beat:()=>{this.beat+=1}});this.screen=r,n.onResize(()=>{r.reset(),r.request()}),r.now();try{return await n.loop((i)=>{if(i.kind==="key")this.key(i.key);else if(i.kind==="paste")this.pasted(i.text);else if(i.kind==="mouse")this.mouse(i,r);return this.state==="active"?void 0:this.state},()=>r.soon())}finally{r.stop(),this.screen=void 0,this.hint.stop();for(let i of this.timers.values())clearTimeout(i);this.timers.clear()}})}applied(){return this.started}lines(){return this.log}failure(){return this.stopped}next(){return this.goto}async idle(){await Promise.allSettled([...this.inflight])}result(){let t=new Set(this.entries().map((e)=>e.name));return{picked:new Set([...this.picked].filter((e)=>t.has(e))),adds:[...this.adds.values()],removes:[...this.removes],auto:Object.fromEntries(this.want),refreshed:this.refreshed}}key(t){if(t==="ctrl-c"){this.state="cancel";return}if(this.help){if(t==="?"||t==="esc")this.help=!1;return}if(this.leaving!==void 0){if(t==="esc")this.leaving=void 0;else if(/^[yn]$/i.test(t)){if(t.toLowerCase()==="y")this.begin();else this.goto=this.leaving,this.state="cancel";this.leaving=void 0}return}if(this.asking){if(t==="esc")this.asking=void 0;else if(/^[yn]$/i.test(t))this.answer(t.toLowerCase()==="y");return}if(this.phase!=="browse"){this.steer(t);return}let e=Pu(t,this.maxItems),n=this.list();if(t==="enter")if(n?.foldable())n.flip();else if(this.dirty())this.phase="review",this.offset=0;else this.state="submit";else if((t==="esc"||t==="ctrl-u")&&this.fields[this.tab].value)this.clear();else if(t==="esc")this.state="cancel";else if(t==="?")this.help=!0;else if(e!==void 0)this.move(e);else if(t==="up"||t==="down")this.move(t==="up"?-1:1);else if(t==="left"||t==="right")this.side(t==="right");else if(t==="tab"||t==="shift-tab"){if(this.hub)this.leave(s0(this.hub,t==="tab"?1:-1))}else if(t==="shift-left"||t==="shift-right")this.switchTab(t==="shift-right"?1:-1);else if(t===" ")this.activate();else if(t==="ctrl-r"){let r=this.tab==="markets"?this.marketRow():void 0;if(r?.kind==="market"&&!this.adds.has(r.market.source))this.update(r.market.source);else if(r?.kind==="find")this.search()}else if(t==="ctrl-s")this.cycle();else if(this.fields[this.tab].key(t))this.typed()}pasted(t){if(this.phase==="browse"&&!this.help&&!this.asking&&this.leaving===void 0)this.fields[this.tab].paste(t),this.typed()}mouse(t,e){if(this.help){if(t.action==="release")this.help=!1;return}let n=e.point(t),r=n?.target,i=this.phase==="browse"&&this.leaving===void 0&&!this.asking;if(t.action==="wheel"){if(!t.sideways&&(i||this.phase!=="browse"))this.wheel(t.wheel);return}if(!r)return;if(t.action==="press"&&t.button==="left"){if(!i)return;if(r.kind==="tab")this.show(r.tab);else if(r.kind==="chip")this.scopeTo(r.source);else if(r.kind==="row")this.pointRow(r.at)}else if(t.action==="release"&&n?.inside){if(r.kind==="key")this.key(r.key);else if(r.kind==="page"){if(this.phase!=="browse")this.scroll(r.step*this.span());else if(i)this.move(r.step*this.maxItems)}else if(r.kind==="hub"){if(i&&this.hub&&r.tab!==this.hub)this.leave(o0(r.tab))}else if(r.kind==="row"&&i)this.openRow(r,t.count)}}wheel(t){if(this.phase!=="browse"){this.scroll(t);return}let e=this.list();if(e)e.move(t,!1);else this.move(t,!1)}pointRow(t){let e=this.list();if(e){e.point(t);return}this.cursor[this.tab==="markets"?"markets":"errors"]=t,this.watch()}openRow(t,e){let n=this.list();if(n){if(t.part==="box")n.pick();else if(t.part==="fold")n.flip();else if(e===2)n.open()}else if(t.part==="box"||e===2)this.activate()}typed(){let t=this.fields[this.tab].value;if(this.list()?.setFilter(t),this.tab==="markets")this.later("search",bP,()=>this.lookup()),this.watch()}clear(){this.fields[this.tab].value="";let t=this.list();if(t)t.clear();else this.typed()}redraw(){if(this.state==="active")this.screen?.request()}focus(t,e){if(this.tab===t&&this.state!=="submit"&&this.state!=="cancel")this.worn=e,this.paint?.(e)}track(t){this.inflight.add(t);let e=()=>this.inflight.delete(t);return t.then(e,e),t}list(){return this.tab==="catalog"?this.catalog:this.tab==="installed"?this.mine:void 0}active(){return[...this.markets.filter((t)=>!this.removes.has(t.source)),...this.adds.values()]}entries(){let t=this.active().flatMap((i)=>i.entries),e=new Set(t.map((i)=>i.name)),n=new Map,r=this.markets.filter((i)=>this.removes.has(i.source)).flatMap((i)=>i.entries);for(let i of[...this.kept,...r])if(this.installed.has(i.name)&&!e.has(i.name))n.set(i.name,i);return this.order([...t,...n.values()])}mineOf(t){return t.filter((e)=>this.installed.has(e.name))}scoped(t,e){let n=this.scope[e],r=n===void 0?void 0:this.active().find((s)=>s.source===n);if(!r)return this.scope[e]=void 0,t;let i=new Set(r.entries.map((s)=>s.name));return t.filter((s)=>i.has(s.name))}reload(){let t=this.entries();this.catalog.setEntries(this.scoped(t,"catalog")),this.mine.setEntries(this.scoped(this.mineOf(t),"installed"))}chips(t){let e=t==="catalog"?this.entries():this.mineOf(this.entries()),n=this.active().map((r)=>({source:r.source,label:r.id,count:r.entries.filter((i)=>!i.default&&(t==="catalog"||this.installed.has(i.name))).length})).filter((r)=>t==="catalog"||r.count>0||r.source===this.scope[t]);return[{source:void 0,label:"All",count:e.filter((r)=>!r.default).length},...n]}cycle(){let t=this.tab;if(t!=="catalog"&&t!=="installed"||this.active().length<2)return;let e=this.chips(t),n=Math.max(0,e.findIndex((r)=>r.source===this.scope[t]));this.scopeTo(e[(n+1)%e.length]?.source)}scopeTo(t){let e=this.tab;if(e!=="catalog"&&e!=="installed")return;this.scope[e]=t,this.reload(),this.list()?.refocus()}switchTab(t){let e=qs.findIndex((n)=>n.tab===this.tab);this.show(qs[(e+t+qs.length)%qs.length]?.tab??"catalog")}show(t){if(this.tab=t,this.list()?.refocus(),t==="markets")this.lookup(),this.watch()}move(t,e=!0){let n=this.list();if(n){n.move(t,e);return}let r=this.tab==="markets"?"markets":"errors",i=r==="markets"?this.marketRows().map((s)=>s.kind==="rule"):this.problemRows().map(()=>!1);this.cursor[r]=Wh(this.cursor[r],t,i.length,(s)=>i[s]===!0,e),this.watch()}side(t){let e=this.list();if(e){e.fold(t);return}let n=this.tab==="markets"?this.marketRow():void 0;if(n?.kind==="market"&&!ut(n.market.source))if(t===n.market.auto)this.want.delete(n.market.source);else this.want.set(n.market.source,t)}activate(){let t=this.list();if(t){t.pick();return}let e=this.tab==="markets"?this.marketRow():void 0;if(e?.kind==="market")this.toggleMarket(e.market);else if(e?.kind==="add")this.load(e.source,!0);else if(e?.kind==="repo"){let n=this.known(e.source),r=this.marketRows().findIndex((i)=>i.kind==="market"&&i.market===n);if(n&&r>=0)this.cursor.markets=r;else if(!n)this.load(e.source,!0)}else if(e?.kind==="find")this.search()}toggleMarket(t){if(this.adds.has(t.source))this.adds.delete(t.source),this.want.delete(t.source);else if(this.removes.has(t.source))this.removes.delete(t.source);else this.removes.add(t.source);this.reload()}known(t){return[...this.markets,...this.adds.values()].find((e)=>ys(e.source,t))}load(t,e){let n=this.peeked.get(t);if(n){if(e)this.arrive(t,n);return}if(e)this.staging.add(t);if(this.busy.has(t))return;this.failed.delete(t),this.peekFailed.delete(t),this.busy.set(t,"Fetching…"),this.track(this.io.fetch(t)).then((r)=>{if(this.busy.delete(t),this.peeked.set(t,r),this.staging.delete(t))this.arrive(t,r);this.redraw()},(r)=>{if(this.busy.delete(t),this.staging.delete(t))this.failed.set(t,r.message);else this.peekFailed.set(t,r.message);this.redraw()})}arrive(t,e){let n=this.active().find((r)=>r.id===e.id);if(n)this.failed.set(t,`${e.id} already names the market at ${n.shown}`);else if(ut(t)||t===q)this.stage(e,e.auto);else this.asking=e;this.redraw()}later(t,e,n){this.cancel(t),this.timers.set(t,setTimeout(()=>{if(this.timers.delete(t),this.state!=="submit"&&this.state!=="cancel")n()},e))}cancel(t){clearTimeout(this.timers.get(t)),this.timers.delete(t)}wants(t){return!this.known(t)&&!this.peeked.has(t)&&!this.busy.has(t)&&!this.peekFailed.has(t)}watch(){if(!this.live||this.tab!=="markets")return;let t=ca(this.fields.markets.value);if(t&&this.wants(t))this.later("typed",wP,()=>this.load(t,!1));else this.cancel("typed");let e=this.marketRow();if(e?.kind==="repo"&&this.wants(e.source)){let n=e.source;this.later("focus",$P,()=>{let r=this.marketRow();if(this.tab==="markets"&&r?.kind==="repo"&&r.source===n)this.load(n,!1)})}else this.cancel("focus")}answer(t){let e=this.asking;if(this.asking=void 0,e)this.stage(e,t)}stage(t,e){if(this.adds.set(t.source,t),e===t.auto)this.want.delete(t.source);else this.want.set(t.source,e);this.reload(),this.cursor.markets=Math.max(0,this.marketRows().findIndex((n)=>n.kind==="market"&&n.market.source===t.source))}update(t){if(this.busy.has(t))return;this.failed.delete(t),this.busy.set(t,"Updating…"),this.track(this.io.refresh(t)).then(({market:e,refreshed:n})=>{this.busy.delete(t),this.markets=this.markets.map((r)=>r.source===t?e:r),this.problems=this.problems.filter((r)=>r.source!==t),this.refreshed.push(n),this.reload(),this.redraw()},(e)=>{this.busy.delete(t),this.failed.set(t,`Update failed: ${e.message}`),this.redraw()})}wanted(){let t=this.fields.markets.value.trim();return t&&!ca(t)?t:""}lookup(){if(this.live&&this.searched!==this.wanted())this.search()}search(){let t=this.wanted(),e=++this.asked;this.searched=t,this.searching=!0,this.searchError=void 0,this.track(this.io.search(t||void 0)).then((n)=>{if(e===this.asked)this.searching=!1,this.repos=n,this.watch(),this.redraw()},(n)=>{if(e===this.asked)this.searching=!1,this.searchError=n.message,this.redraw()})}marketRows(){let t=this.fields.markets.value.trim().toLowerCase(),e=(...o)=>t===""||o.some((a)=>a.toLowerCase().includes(t)),n=[...this.markets,...this.adds.values()],r=n.filter((o)=>e(o.id,o.shown,o.source)).map((o)=>({kind:"market",market:o})),i=ca(this.fields.markets.value);if(i&&!n.some((o)=>ys(o.source,i)))r.push({kind:"add",source:i});let s=(this.repos??[]).map((o)=>({repo:o,source:Lh(o)})).filter(({repo:o,source:a})=>e(a,o.description??""));return r.push({kind:"rule"},...s.length>0?s.map(({repo:o,source:a})=>({kind:"repo",repo:o,source:a})):[{kind:"find"}]),r}marketRow(){let t=this.marketRows();return t[this.at(t,"markets",(e)=>e?.kind==="rule")]}problemList(){let t=new Map([...this.markets,...this.adds.values()].map((e)=>[e.source,e.id]));return[...this.problems.filter((e)=>!(e.update&&e.source&&this.failed.has(e.source))),...[...this.failed].map(([e,n])=>({where:t.get(e)??e,message:n,source:e}))]}problemRows(){let t=this.fields.errors.value.trim().toLowerCase();return this.problemList().filter((e)=>t===""||`${e.where} ${e.message}`.toLowerCase().includes(t))}at(t,e,n=()=>!1){let r=Math.min(this.cursor[e],Math.max(0,t.length-1));if(!n(t[r]))return r;return r>0?r-1:r+1}windowOf(t,e,n,r=()=>!1){let i=this.at(t,e,r);this.cursor[e]=i;let s=(l)=>r(t[l])?1:2,o=(l,f)=>{let d=0;for(let h=l;h<=f;h++)d+=s(h);return d},a=Math.min(this.top[e],i);while(a<i&&o(a,i)>this.maxItems)a+=1;while(a>0&&o(a-1,t.length-1)<=this.maxItems)a-=1;this.top[e]=a;let c=[],u=0;for(let l=a;l<t.length&&u+s(l)<=this.maxItems;l++)c.push(l),u+=s(l);return{lines:c.flatMap((l)=>{let f=n(t[l],l===i,l);return r(t[l])?f:f.map((d)=>Ds(l,"row",d))}),above:a,below:t.length-a-c.length}}dim(t){return this.color?`${P}${t}${fe}`:t}bold(t){return this.color?`${at}${t}${fe}`:t}warn(t){return this.color?`${Jt}${t}\x1B[39m`:t}lit(t,e,n){if(e&&this.color&&t)return`${Le(t.cursor)}▌\x1B[39m ${Ha(t.selection,t.foreground)} ${n} ${Pt}`;return`${e?"▌ ":" "} ${n}`}status(t){return this.adds.has(t.source)?"Will add":this.removes.has(t.source)?"Will remove":this.busy.get(t.source)??(this.failed.has(t.source)||t.status.startsWith("update failed")?"Update failed":"")}note(t){return` ${this.dim(t)}`}peeking(t){let e=this.peeked.get(t);return e?Nt(e.entries.filter((n)=>!n.default).length):""}marketLine(t,e,n){let r=(s)=>Ds(n,"box",`${s} `);if(t.kind==="rule")return[` ${this.dim(`── On GitHub${this.searching?" · searching…":""} ──────────`)}`];if(t.kind==="market"){let s=t.market,o=this.status(s),a=e?this.bold(s.id):s.id,c=s.entries.filter((l)=>!l.default),u=!ut(s.source)&&(this.want.get(s.source)??s.auto)?` ${this.dim("↻ auto-update")}`:"";return[this.lit(s.entries.find((l)=>!l.default),e,`${r(this.removes.has(s.source)?"○":"●")}${a}${u}${o?` ${this.dim(o)}`:""}`),this.note([s.source===q?"The ttheme catalog":ut(s.source)?s.shown:s.source,Nt(c.length),`${c.filter((l)=>this.installed.has(l.name)).length} installed`,s.status].join(" · "))]}if(t.kind==="add"){let s=this.busy.get(t.source),o=this.failed.get(t.source)??this.peekFailed.get(t.source),a=this.peeked.get(t.source);return[this.lit(void 0,e,`${r("+")}Add ${st(t.source)}${s?` ${this.dim(s)}`:""}`),o?` ${this.warn(o)}`:this.note(a?`${a.id} · ${this.peeking(t.source)}`:this.live?"Fetching its index…":"space fetches its index")]}if(t.kind==="find"){let s=this.fields.markets.value.trim(),o=s&&!ca(s),a=!this.searching&&!this.searchError&&this.repos===void 0,c=this.searching?"Searching GitHub…":this.searchError?"GitHub search failed":a?o?`Find "${s}" on GitHub`:"Find markets on GitHub":o?`No market on GitHub matches "${s}"`:"No market on GitHub yet";return[this.lit(void 0,e,`${r("⌕")}${c}`),this.note(this.searchError??(this.searching?"":a?"space searches GitHub":"space searches again"))]}let i=this.busy.get(t.source);return[this.lit(void 0,e,`${r(this.known(t.source)?"●":"○")}${t.source} ${this.dim(`★${t.repo.stargazers_count}`)}${i?` ${this.dim(i)}`:""}`),this.note([this.peeking(t.source),t.repo.description??""].filter(Boolean).join(" · "))]}problemLine(t,e){return[this.lit(void 0,e,`${this.warn("✗")} ${t.where}`),this.note(t.message)]}body(){let t=this.list();if(t){let n=this.fields[this.tab].value;return{...t.window(),empty:n?`No palettes match '${n}'`:this.tab==="installed"?"Nothing installed yet":"No palettes"}}if(this.tab==="markets")return{...this.windowOf(this.marketRows(),"markets",(n,r,i)=>this.marketLine(n,r,i),(n)=>n?.kind==="rule"),empty:""};let e=this.fields.errors.value;return{...this.windowOf(this.problemRows(),"errors",(n,r)=>this.problemLine(n,r)),empty:e?`No problems match '${e}'`:"No problems"}}changes(){return this.adds.size+this.removes.size+this.want.size}dirty(){let{picked:t}=this.result();return this.changes()>0||t.size!==this.installed.size||[...t].some((e)=>!this.installed.has(e))}leave(t){if(this.dirty()){this.leaving=t;return}this.goto=t,this.state="cancel"}steer(t){if(this.phase==="review"){if(t==="enter")this.begin();else if(t==="esc")this.phase="browse"}else if(this.phase==="done"&&(t==="enter"||t==="esc"))this.state="submit";let e=t==="up"?-1:t==="down"?1:Pu(t,this.span());if(e!==void 0)this.scroll(e)}scroll(t){this.offset=Number.isFinite(t)?Math.max(0,this.offset+t):t>0?Number.MAX_SAFE_INTEGER:0,this.redraw()}span(){return Math.max(ay,this.rows()-(this.hub?1:0)-4)}begin(){this.phase="applying",this.started=!0,this.offset=0,this.log=[],this.working="";let t={say:(e)=>{this.log.push(...e.split(`
667
- `)),this.redraw()},status:(e)=>{this.working=e,this.redraw()}};this.track(this.io.apply(this.result(),t)).then(()=>this.ended(),(e)=>this.ended(e))}ended(t){this.working="",this.stopped=t,this.phase="done",this.offset=0,this.redraw()}pending(){let t=this.entries().filter((e)=>!e.default);return{names:t.filter((e)=>this.picked.has(e.name)&&!this.installed.has(e.name)),dropped:t.filter((e)=>this.installed.has(e.name)&&!this.picked.has(e.name))}}marketChanges(){let t=[];for(let e of this.adds.values()){let n=e.source!==q&&(this.want.get(e.source)??e.auto)?"updates on its own":"";t.push(`+ ${e.id} ${this.dim([e.source===q?"The ttheme catalog":e.shown,Nt(e.entries.filter((r)=>!r.default).length),n].filter(Boolean).join(" · "))}`)}for(let e of this.removes){let n=this.markets.find((i)=>i.source===e),r=(n?.entries??[]).filter((i)=>!i.default&&this.installed.has(i.name)&&this.picked.has(i.name));t.push(`- ${n?.id??e} ${this.dim([n?.shown??st(e),r.length>0?`its ${Nt(r.length)} installed keep working`:""].filter(Boolean).join(" · "))}`)}for(let[e,n]of this.want){let r=this.markets.find((i)=>i.source===e);if(r&&!this.removes.has(e))t.push(`↻ ${r.id} ${this.dim(n?"updates on its own from now":"stops updating on its own")}`)}return t}reviewLines(){let t=this.marketChanges(),{names:e,dropped:n}=this.pending(),r=Math.max(0,...[...e,...n].map((o)=>o.name.length)),i=(o,a)=>` ${o} ${a.name.padEnd(r)} ${this.dim(ct(a.name)?a.catalog??"":a.group)}`,s=[e.length>0?`${e.length} to install`:"",n.length>0?`${n.length} to remove`:""].filter(Boolean);return[...t.length>0?[` ${this.bold("Markets")} ${this.dim(`(${t.length})`)}`,...t.map((o)=>` ${o}`),""]:[],...s.length>0?[` ${this.bold("Palettes")} ${this.dim(`(${s.join(" · ")})`)}`,...e.map((o)=>i("+",o)),...n.map((o)=>i("-",o))]:[]]}summary(){let{names:t,dropped:e}=this.pending(),n=this.adds.size;return[n>0?`${n} market${n===1?"":"s"} added`:"",this.removes.size>0?`${this.removes.size} removed`:"",t.length>0?`${t.length} installed`:"",e.length>0?`${e.length} removed`:""].filter(Boolean).join(" · ")}progressLines(){let t=this.log.map((e)=>` ${e}`);if(this.phase==="applying"){let e=Sn[this.beat%Sn.length];t.push(` ${this.dim(`${e} ${this.working||"Working…"}`)}`)}else if(this.stopped)t.push("",...kt(this.stopped.message,Math.max(20,this.columns()-6)).map((e,n)=>` ${n===0?this.warn("✗"):" "} ${e}`));return t}frame(t,e){let n=t-1,r=this.phase==="review",i=r?this.reviewLines():this.progressLines(),s=this.phase==="review"?`${this.bold("Review changes")}`:this.phase==="applying"?this.bold("Applying changes"):this.stopped?`${this.warn("✗")} ${this.bold("Stopped")}`:`${this.bold("✓ Applied")} ${this.dim(this.summary()?`(${this.summary()})`:"")}`,o=this.span(),a=Math.max(0,i.length-o),c=this.phase==="applying"?a:Math.min(this.offset,a);this.offset=c;let u=i.slice(c,c+o),l=i.length-c-u.length,f=[c>0?` ${this.more(-1,`↑ ${c} more`)}`:"",...u];while(f.length<o+1)f.push("");f.push(l>0?` ${this.more(1,`↓ ${l} more`)}`:"");let d=a>0?[["↑↓","scroll"]]:[],h=r?{badge:"BROWSE (APPLY)",keys:[...d,["enter","apply"]],right:["esc","back"]}:this.phase==="applying"?{badge:"BROWSE (APPLY)",note:"Keys wait until it ends",keys:[]}:{badge:"BROWSE (APPLY)",keys:d,right:["enter","close"]};return[...this.hub?[ot(nd(this.hub,this.color),n,!1)]:[],ot(` ${s}`,n,!1),...f.map((p)=>ot(p,n,!1)),` ${this.keyBar(h,n-1)}`].slice(0,e).join(`
668
- `)}keyBar(t,e){let n=this.color&&this.worn?Le(this.worn.cursor):"",r=this.color?`\x1B[7;1m${n} ${t.badge} ${Pt} `:`[${t.badge}] `,i=([c,u])=>fn(c.split(" ")[0]??"",`${this.bold(c)} ${this.dim(u)}`),{note:s,keys:o,right:a}=t;for(;;){let c=`${r}${[t.lead??"",s?this.dim(s):"",...o.map(i)].filter(Boolean).join(" ")}`,u=a?i(a):"";if(Q(c)+(a?3+Q(u):0)<=e)return a?jt(c,u,e):ot(c,e,!1);if(s)s=void 0;else if(o.length>2||!a&&o.length>1){let l=o.length-2;o=o.filter((f,d)=>d!==l)}else if(a)a=void 0;else return ot(c,e,!1)}}more(t,e){return this.dim(se({kind:"page",step:t},e))}counts(){let t=[...this.busy.values()].includes("Updating…")?"Updating… · ":"",e=this.list();if(e)return`${t}${e.matched()}/${e.total()} · ${e.pickedCount()} picked`;if(this.tab==="markets"){let n=this.markets.length+this.adds.size,r=this.marketRows().filter((s)=>s.kind==="market").length,i=this.changes();return`${t}${r}/${n}${i>0?` · ${i} to apply`:""}`}return`${this.problemRows().length}/${this.problemList().length}`}searchText(){let t=this.fields[this.tab].value;if(t)return`${t}_`;if(this.tab==="markets")return this.dim("Search… or add one: owner/repo");let e=this.tab==="errors"?"":this.hint.text();return this.dim(`Search…${e?` e.g. ${e}`:""}`)}tabBar(){return qs.map(({tab:t,title:e})=>{let n=t==="errors"?this.problemList().length:0,r=n>0?`${e} ${n}`:e,i={kind:"tab",tab:t};if(!this.color)return se(i,t===this.tab?`[${r}]`:` ${r} `);return`${t===this.tab?kP:P}${se(i,` ${r} `)}${Pt}`}).join(" ")}heading(){let t=qs.find((e)=>e.tab===this.tab)?.heading??"";return`${this.bold(t)} ${this.dim(`(${this.counts()})`)}`}searchBox(t){let e=(r,i)=>this.dim(`${r}${"─".repeat(t-2)}${i}`),n=this.dim("│");return[e("╭","╮"),`${n} ${ot(`${this.dim("⌕")} ${this.searchText()}`,t-4)} ${n}`,e("╰","╯")]}strip(t){let e=this.tab;if(e!=="catalog"&&e!=="installed"||this.active().length<2)return;let n=this.chips(e),r=Math.max(0,n.findIndex((g)=>g.source===this.scope[e])),i=n.map((g,b)=>b===r&&!this.color?`[${g.label} ${g.count}]`:`${g.label} ${g.count}`),s=" · ",o=(g)=>g>0?`${s}+${g} more`.length:0,a=(g)=>{let b=g>0?2:0,y=0;for(let S=g;S<i.length;S++){let E=b+(y>0?s.length:0)+i[S].length;if(E+o(i.length-S-1)>t)break;b=E,y+=1}return y},c=0;while(c<r&&c+a(c)<=r)c+=1;let u=Math.max(1,a(c)),l=i.slice(c,c+u),f=i.length-c-u,d=l.map((g,b)=>{let y=se({kind:"chip",source:n[c+b]?.source},g);if(c+b===r)return this.color?`${at}${Aa}${y}${Pt}`:y;return this.dim(y)}),h=`${c>0?`${this.dim(fn("ctrl+s","…"))} `:""}${d.join(this.dim(s))}${f>0?this.dim(`${s}${fn("ctrl+s",`+${f} more`)}`):""}`,p=(c>0?2:0)+l.join(s).length+o(f),$="ctrl+s market";return p+2+$.length<=t?`${h} ${this.dim(fn("ctrl+s",$))}`:h}sourceOf(t){let e=this.active().find((n)=>n.entries.some((r)=>r.name===t.name));if(!e)return"In no market you added";return e.source===q?"The ttheme catalog":e.shown}paletteState(t){let e=this.picked.has(t.name),n=this.installed.has(t.name),r=e&&n?"Installed":e?"Will install":n?"Will remove":"Not installed";return this.startup===t.name?`${r} · Default`:r}paletteDetail(t,e){if(!t||t.kind==="rule")return Dh;if(t.kind==="all")return{title:this.bold("Select all"),lines:["space picks every palette shown"],brief:""};if(t.kind==="group"){let u=this.entries().filter((d)=>d.group===t.name&&!d.default),l=this.sourceOf(t.lead),f=`${Nt(u.length)} · ${u.filter((d)=>this.installed.has(d.name)).length} installed`;return{title:this.bold(t.name),lines:[...t.native?kt(t.native,e).map((d)=>this.dim(d)):[],...kt(l,e),f],brief:`${l} · ${f}`}}if(t.kind==="catalog"){let u=this.entries().filter((d)=>d.group===t.group&&d.catalog===t.name),l=this.sourceOf(t.lead),f=`${Nt(u.length)} · ${u.filter((d)=>this.installed.has(d.name)).length} installed`;return{title:this.bold(t.name),lines:[t.group,...kt(l,e),f],brief:`${t.group} · ${f}`}}let n=t.entry,r=this.sourceOf(n),i=Ao(n),s=`Gate ${he.length-i.length}/${he.length}`,o=n.pictures?.length??0,a=[...o>0?[`${o} picture${o===1?"":"s"}`]:[],...n.base?[`Base ${n.base}`]:[]].join(" · "),c=ct(n.name)?n.catalog?[n.catalog]:[]:[n.group,...n.native?[this.dim(n.native)]:[]];return{title:this.color?`${at}${Le(n.cursor)}${n.name}${fe}\x1B[39m`:n.name,lines:[...kt(r,e),...c,this.paletteState(n),"",i.length===0?`${s} · passes`:s,...i.flatMap((u)=>kt(u,e-2).map((l,f)=>`${f===0?this.warn("✗"):" "} ${l}`)),...a?["",a]:[]],brief:[r,s,...a?[a]:[],this.paletteState(n)].join(" · ")}}marketDetail(t,e){if(!t||t.kind==="rule")return Dh;if(t.kind==="market"){let i=t.market,s=i.source===q?"The ttheme catalog":i.shown,o=i.entries.filter((h)=>!h.default),a=o.filter((h)=>this.installed.has(h.name)).map((h)=>h.name),c=`${Nt(o.length)} · ${a.length} installed`,u=ut(i.source)?"Read in place":`Auto-update ${this.want.get(i.source)??i.auto?"on":"off"}`,l=this.busy.get(i.source)??yP(i.status),f=this.failed.get(i.source),d=this.adds.has(i.source)?["Will add"]:this.removes.has(i.source)?[a.length>0?`Will remove — ${a.join(", ")} stay${a.length===1?"s":""} installed`:"Will remove"]:this.want.has(i.source)?[`Auto-update turns ${this.want.get(i.source)?"on":"off"}`]:[];return{title:this.bold(i.id),lines:[...kt(s,e),c,"",ut(i.source)?u:`${u} ${this.dim("←→")}`,...ut(i.source)?[]:[l],...f?kt(f,e).map((h)=>this.warn(h)):[],...d.length>0?["",...d.flatMap((h)=>kt(h,e))]:[]],brief:[s,u,...d,...ut(i.source)?[]:[l]].join(" · ")}}if(t.kind==="add"){let i=this.busy.get(t.source)??this.failed.get(t.source)??this.peekFailed.get(t.source)??(this.peeked.has(t.source)?"space adds it":this.live?"Fetching its index…":"space fetches its index");return{title:this.bold(st(t.source)),lines:["Not added",...this.peekLines(t.source,e),"",...kt(i,e)],brief:[this.peeking(t.source),i].filter(Boolean).join(" · ")}}if(t.kind==="find"){let i=this.fields.markets.value.trim(),s=this.searchError??(this.searching?"Searching…":this.repos?`${this.repos.length} found · space searches again`:"space searches GitHub");return{title:this.bold("GitHub"),lines:[...kt(`Repositories with the ${$s} topic`,e),...i&&!ca(i)?[`Matching "${i}"`]:[],"",...kt(s,e)],brief:s}}let r=this.known(t.source)?"Added":this.busy.get(t.source)??this.failed.get(t.source)??this.peekFailed.get(t.source)??"space adds it";return{title:this.bold(t.source),lines:[`★ ${t.repo.stargazers_count}`,...kt(t.repo.description??"",e),...this.peekLines(t.source,e),"",...kt(r,e)],brief:[this.peeking(t.source),r].filter(Boolean).join(" · ")}}peekLines(t,e){let n=this.peeked.get(t);if(!n)return[];let r=n.entries.filter((s)=>!s.default),i=`${r.slice(0,cy).map((s)=>ur(s.name)).join(", ")}${r.length>cy?", …":""}`;return["",n.id,Nt(r.length),...kt(i,e).map((s)=>this.dim(s))]}detail(t){let e=this.list();if(e)return this.paletteDetail(e.focusedRow(),t);if(this.tab==="markets")return this.marketDetail(this.marketRow(),t);let n=this.problemRows(),r=n[Math.min(this.cursor.errors,n.length-1)];return r?{title:this.bold(r.where),lines:kt(r.message,t),brief:r.message}:Dh}footer(){if(this.help)return{badge:"HELP",keys:[],right:["? esc","close"]};if(this.leaving!==void 0)return{badge:"BROWSE",lead:"Apply your changes before you leave?",keys:[["y","apply"],["n","discard"]],right:["esc","stay"]};if(this.asking)return{badge:"BROWSE",lead:`Update ${this.asking.id} on its own when its author changes it?`,keys:[["y","yes"],["n","no"]],right:["esc","back"]};let t=this.fields[this.tab].value,e=["enter",this.dirty()?"apply":"close"],n=[["⇧←→","tabs"],...t?[["bksp","edit"]]:[],["?","keys"]];return{badge:t?"BROWSE (FILTER)":"BROWSE",keys:[...this.rowKeys(e),...n],right:t?["esc","clear filter"]:["esc","cancel"]}}rowKeys(t){let e=this.list();if(e){let r=e.focusedRow();if(!r)return[t];if(e.foldable())return[(r.kind==="group"||r.kind==="catalog")&&r.expanded?["←","close"]:["→","open"],["space","pick"]];return[["space","pick"],t]}if(this.tab==="errors")return[t];let n=this.marketRow();if(n?.kind==="market"){let r=n.market;return[["space",this.adds.has(r.source)||this.removes.has(r.source)?"undo":"remove"],...ut(r.source)?[]:[["←→","auto-update"]],...this.adds.has(r.source)?[]:[["ctrl+r","update"]],t]}if(n?.kind==="find")return[["space","search"],t];if(n?.kind==="add"||n?.kind==="repo"&&!this.known(n.source))return[["space","add"],t];return[t]}columns(){return(this.output??process.stdout).columns??100}rows(){return(this.output??process.stdout).rows??24}fitItems(t){let e=Math.max(ay,this.rows()-t);this.maxItems=e,this.catalog.maxItems=e,this.mine.maxItems=e}view(){let t=this.draw().split(`
669
- `);return Array.from({length:this.rows()},(e,n)=>t[n]??"")}draw(){let t=this.columns(),e=this.rows();if(t<sy||e<oy)return`Needs ${sy}×${oy} — now ${t}×${e}
670
- ${this.dim("esc cancels")}`;if(this.phase!=="browse")return this.frame(t,e);let n=t>=pP,r=t-1,i=n?Math.min(t-zh-4,mP):r,s=this.strip(r-1),o=[` ${this.tabBar()}`,...e>=gP?[` ${this.heading()}`,...this.searchBox(t-3).map((g)=>` ${g}`)]:[jt(` ${this.dim("⌕")} ${this.searchText()}`,this.dim(this.counts()),r)],...s?[` ${s}`]:[]];this.fitItems(o.length+3+(n?0:1)+(this.hub?1:0));let{lines:a,above:c,below:u,empty:l}=this.body(),f=a.length>0?a.map((g)=>` ${g}`):[` ${this.dim(l)}`];while(f.length<this.maxItems)f.push("");let d=[c>0?` ${this.more(-1,`↑ ${c} more`)}`:"",...f,u>0?` ${this.more(1,`↓ ${u} more`)}`:""],h=this.detail(n?zh:i-2),p=n?d.map((g,b)=>`${ot(g,i)} ${this.dim("│")} ${ot(b===0?h.title:h.lines[b-1]??"",zh,!1)}`):[...d.map((g)=>ot(g,i,!1)),ot(` ${this.dim(h.brief)}`,i,!1)],$=[...this.hub?[ot(nd(this.hub,this.color),r,!1)]:[],...o.map((g)=>ot(g,r,!1)),...p,` ${this.keyBar(this.footer(),r-1)}`];return(this.help?this.helpBox($,t,e,$.length-p.length-1):$).join(`
671
- `)}helpRows(){return[["Move","↑↓ home end pgup pgdn"],["Series","←→ · enter on a series"],["Pick","space · a palette, a series, all"],["Filter","Any text · bksp · ctrl-u clears"],["","Each tab keeps its own"],["Tabs","⇧←→ Catalog, Installed, Markets, Errors"],...this.active().length>=2?[["Market","ctrl+s · one market, then all"]]:[],["Markets","space adds or removes · ←→ auto-update"],["","ctrl+r updates it, or searches again"],["Apply","enter reviews and applies · esc cancels"],...this.hub?[["Screens","tab · shift+tab"]]:[],["Close","? esc"]]}helpBox(t,e,n,r){let i=this.helpRows(),s=Math.min(e-2,58),o=Math.floor((e-s)/2),a=`│${" ".repeat(s-2)}│`,c=[`╭─ Help ${"─".repeat(s-9)}╮`,a,...i.map(([l,f])=>`│${ot(` ${this.bold(l.padEnd(10))}${f}`,s-4)} │`),a,`╰${"─".repeat(s-2)}╯`],u=Math.max(0,Math.min(Math.max(r,Math.floor((n-c.length)/2)),n-1-c.length));return t.map((l,f)=>{let d=c[f-u];return d===void 0?l:`${xp(l,o)}${d}`})}}import{existsSync as qF}from"node:fs";import{existsSync as Ma,mkdirSync as jF,readFileSync as Cm}from"node:fs";import{dirname as GF}from"node:path";class Ie extends Error{}import{closeSync as cA,mkdtempSync as uA,openSync as lA,readSync as fA,rmSync as av}from"node:fs";import{homedir as dA,tmpdir as hA}from"node:os";import{join as cv}from"node:path";import{readFileSync as vP}from"node:fs";var gt={pitch:25,cols:22,rows:9,height:13},Ti={cols:25,rows:21},ue={cols:10,rows:3,pitch:12,top:4},ce=ue.top+ue.rows+1,SP=1073741824,tm=2147483648,EP=-1073741826,MP=1600,OP=56,IP=4,uy=20,xP=50,ly=[["space","unfolds a set of ×N"],["o","opens the post page in a browser"],["c","switches between cutouts and every post"],["a","opens the advanced filters"],["1-9","turn a tag of the tags row on or off"],["ctrl+v","tries on a picture from the clipboard — or drop one on the window"]];function em(t){return Math.max(0,Math.floor((t-1)/ue.pitch))}function Un(t,e){let n=e-ce-2;return{perRow:Math.max(1,Math.floor((t-1)/gt.pitch)),rowsVis:Math.max(1,Math.floor(n/gt.height)),height:n}}function ju(t,e=!0){if(e)return`\x1B_Ga=t,t=f,f=100,i=${t.id},q=2;${Buffer.from(t.path).toString("base64")}\x1B\\`;let n;try{n=vP(t.path).toString("base64")}catch{return}let r=n.match(/.{1,4096}/g)??[""];return r.map((i,s)=>{let o=s<r.length-1?1:0;return s===0?`\x1B_Ga=t,f=100,i=${t.id},m=${o},q=2;${i}\x1B\\`:`\x1B_Gm=${o},q=2;${i}\x1B\\`}).join("")}function wy(t,e){let n=t.crop===void 0?"":`,x=0,y=${t.crop*e.h},w=${t.cols*e.w},h=${t.rows*e.h}`;return`\x1B[${t.row+1};${t.col+1}H\x1B_Ga=p,i=${t.id},p=${t.id}${n},c=${t.cols},r=${t.rows},C=1,z=${t.z},q=2\x1B\\`}function nm(t){return`\x1B_Ga=d,d=i,i=${t},p=${t},q=2\x1B\\`}function ha(t){return`\x1B_Ga=d,d=I,i=${t},q=2\x1B\\`}function Ys(t){return`\x1B[38;2;${nt(t).join(";")}m`}function Lu(t){return`\x1B[48;2;${nt(t).join(";")}m`}var Jh=!1;function Gu(t){return Jh=!0,t.beat}function Js(t){return Sn[Gu(t)%Sn.length]}function ft(t){return Q(t)}function Vh(t,e){if(Q(t)<=e)return t;let n="";for(let r of t){if(Q(n+r)>e)break;n+=r}return n}function Br(t){return`\x1B[${30+t}m`}function Pi(t,e,n,r){return n?[[`${io} `,r,void 0,{kind:"link",url:n}],[t,e,n]]:[[t,e]]}function Yh(t){let e=ed(t);return e?{kind:"key",key:e}:void 0}function Zh(t){return t.reduce((e,[n])=>e+ft(n),0)}function NP(t,e){let n=[],r=e;for(let[i,s,o,a]of t){let c=ft(i);if(c<=r){n.push([i,s,o,a]),r-=c;continue}n.push([`${Vh(i,r)}…`,s,o,a]);break}return n}class Cu{parts=[];cols;constructor(t){this.cols=t}put(t,e,n="",r,i){return this.parts.push({col:t,text:e,sgr:n,...r?{link:r}:{},...i?{spot:i}:{}}),t+ft(e)}run(t,e){let n=t;for(let[r,i,s,o]of e)n=this.put(n,r,i,s,o);return n}mark(t,e,n){this.parts.push({col:t,text:" ".repeat(Math.max(0,e)),sgr:"",spot:n,hidden:!0})}zones(t){return this.parts.flatMap(({col:e,text:n,link:r,spot:i})=>{let s=i??(r?{kind:"link",url:r}:void 0),o=e>=0&&e<this.cols?ft(Vh(n,this.cols-e)):0;return s&&o>0?[{row:t,col:e,width:o,height:1,target:s}]:[]})}right(t,e){this.run(t-e.reduce((n,[r])=>n+ft(r),0),e)}center(t,e){this.run(Math.floor((t-e.reduce((n,[r])=>n+ft(r),0))/2),e)}render(){let t="";for(let{col:e,text:n,sgr:r,link:i,hidden:s}of this.parts){if(s||e>=this.cols||e<0)continue;let o=Vh(n,this.cols-e);t+=`\x1B[${e+1}G${r}${Fa(o,i)}${r?Pt:""}`}return t}}function RP(t){return t.replace(/_\([^)]*\)?$/,"")}function $y(t){return[`${t.reduced?"↓":""}${t.width}×${t.height}`,Math.max(t.width,t.height)<MP?Jt:P]}function fa(t,e,n,r){let i=[...r.keys??[]],s=r.lead,o=r.right,a=()=>{let l=[...s?[Zh(s)]:[],...i.map(([d,h])=>ft(d)+1+ft(h))];return(r.badge?ft(r.badge)+4:0)+l.reduce((d,h)=>d+h,0)+3*Math.max(0,l.length-1)+(o?3+ft(o[0])+1+ft(o[1]):0)};while(a()>e)if(i.length>2)i.splice(-2,1);else if(o)o=void 0;else if(i.length>1)i.splice(-2,1);else break;if(s&&a()>e)s=NP(s,Math.max(0,Zh(s)-(a()-e)-1));let c=0;if(r.badge)c=t.put(0,` ${r.badge} `,`\x1B[7;1m${n}`)+2;if([...s?[s]:[],...i.map(([l,f])=>[[l,at,void 0,Yh(l)],[` ${f}`,P,void 0,Yh(l)]])].forEach((l,f)=>{c=t.run(c+(f?3:0),l)}),o){let l=Yh(o[0].split(" ")[0]??"");t.right(e,[[o[0],at,void 0,l],[` ${o[1]}`,P,void 0,l]])}}function TP(t,e){if(t==="d")return P;if(t==="b")return at;if(t==="s")return Lu(e.colors.selection);if(t==="c")return Lu(e.colors.cursor);let n=/^([BK]?)(\d+)$/.exec(t);if(!n)return"";let r=Number(n[2]),i=(s)=>r<8?s+r:s+52+r;if(n[1]==="K")return`\x1B[30;${i(40)}m`;return`\x1B[${n[1]==="B"?"1;":""}${i(30)}m`}function PP(t,e,n,r,i){let s=te.indexOf(hi(r.scene)),o=te.flatMap((c,u)=>[...u?[[" ",""]]:[],[c.name,u===s?at+i:P,void 0,{kind:"scene",scene:u}]]),a=o.reduce((c,[u])=>c+ft(u),0)<=n;t?.run(e,a?o:[[hi(r.scene).name,at+i],[` ${s+1}/${te.length}`,P]])}function HP(t,e,n,r,i,s,o){let{ansi:a,cursor:c}=s.colors;PP(t[e-2],n,r,s,o);let u=r<H0?3:4;if(r>=56)u=Math.min(7,Math.floor((r+1)/8)-1);let l=n;for(let d=0;d<8;d++)l=(t[e]?.put(l,"▀".repeat(u),Ys(a[d]??c)+Lu(a[d+8]??c))??l)+1;let f=e+2;for(let d of hi(s.scene).lines){let h=jc(d,r);if(!h)continue;if(f>i)return;t[f]?.run(n,h.map(([p,$])=>[p,TP($,s)])),f++}}function AP(t,e,n){let r=[[]];for(let o of t){let a=r[r.length-1];if(a.length===0||ft([...a,o].join(" "))<=e)a.push(o);else if(r.length<n)r.push([o]);else break}let i=r.reduce((o,a)=>o+a.length,0),s=r[r.length-1];while(i<t.length&&s.length>0&&ft([...s,`+${t.length-i}`].join(" "))>e)s.pop(),i--;if(i<t.length)s.push(`+${t.length-i}`);return r.filter((o)=>o.length>0).map((o)=>o.join(" "))}function fy(t){return t.replace(/^https?:\/\/(?:www\.)?/,"")}function FP(t,e,n,r,i){let s=r.info,o=s?.artists??[],a=Br(r.tiles[r.focus]?.siteAnsi??r.siteAnsi);[["Post",s?.page?Pi(fy(s.page),"",s.page,a):[["—",P]]],["Source",s?.source?Pi(fy(s.source),"",s.link,i):[["—",P]]],["Artist",[o.length>0?[o.join(" "),""]:["—",P]]]].forEach(([u,l],f)=>{t[e+f]?.put(n,u,P),t[e+f]?.run(n+12,l)})}function CP(t,e,n,r,i,s){let o=s.info,a=s.tiles[s.focus];if(!o||!a)return;let c=s.shown?.id===a.key?s.shown:void 0,u=n+12,l=Math.max(12,r-12),f=[`${a.width}×${a.height}${o.ext?` ${o.ext.toUpperCase()}`:""}`,...c?[$u(c.bytes)]:[]].join(" · "),d=[o.rating??"—",a.score>0?`★${a.score}`:"",o.posted??""].filter(Boolean).join(" · "),h=(g,b)=>g.length>0?AP(g,l,b).map((y)=>[[y,""]]):[[["—",P]]],p=[["Characters",h(o.characters,2)],["Series",h(o.series,1)],["Tags",h(o.tags,3)],["Rating",[[[d,d==="—"?P:""]]]],["File",[[[f,""],...c?[[" ",""]]:[],...c?ky(c):[]]]],["Uploader",[[o.uploader?[o.uploader,""]:["—",P]]]]],$=e;for(let[g,b]of p){if($+b.length-1>i)return;t[$]?.put(n,g,P);for(let y of b)t[$]?.run(u,y),$++}}var LP=["Size","Position","Opacity"],jP=[0,3,6];function GP(t,e){let{tune:n,untuned:r}=t;return e===0?n.size!==r.size:e===1?n.at!==r.at:n.opacity!==r.opacity}function _P(t){return t.toFixed(2)}function BP(t,e,n,r,i,s){let o=i.tuning;if(!o)return;let a=i.tiles[i.focus];t[e-3]?.run(n,[[i.palette,at+s],[" Background",P],...a?[[" · ",P],...Pi(`${a.site} ${a.id}`,P,a.page||void 0,Br(a.siteAnsi))]:[]]);let c=Math.max(8,r-n-21),u=20,l=Math.max(100,o.fill);for(let[f,d]of LP.entries()){let h=e+jP[f],p=o.field===f,$=p?at:P;if(p)t[h]?.put(n,"▶",s,void 0,{kind:"field",field:f});t[h]?.put(n+2,d,$,void 0,{kind:"field",field:f});let g;if(f===1){for(let b=1;b<=9;b++){let y=b===i.tune.at,S=t[e+2+Math.floor((b-1)/3)],E=n+12+(b-1)%3*3;S?.mark(E-1,3,{kind:"place",at:b}),S?.put(E,y?"■":"·",y?at+s:P)}g=_t[i.tune.at-1]??"center"}else{let b;if(f===0){let{size:y}=i.tune;b=y==="fill"?c-1:Math.floor((y-u)*(c-1)/(l-u+1)),g=y==="fill"?"fill":`${y}%`}else b=Math.floor(Math.round(i.tune.opacity*100)*(c-1)/100),g=_P(i.tune.opacity);b=Math.max(0,Math.min(c-1,b)),t[h]?.run(n+12,[["━".repeat(b),s],["●",at],["─".repeat(c-1-b),P]]),t[h]?.mark(n+12,c,{kind:"track",field:f})}if(t[h]?.right(r-2,[[g,$]]),GP(i,f))t[h]?.put(r-1,"↺",p?at+s:P)}}function WP(t,e,n,r,i,s){t[e]?.put(n,`╭${"─".repeat(i-2)}╮`,s);for(let o=e+1;o<e+r-1;o++)t[o]?.put(n,"│",s),t[o]?.put(n+i-1,"│",s);t[e+r-1]?.put(n,`╰${"─".repeat(i-2)}╯`,s)}function Qh(t,e=t.site,n=t.siteAnsi){return[` ${e} `,`\x1B[7;${30+n}m`]}function la(t){return`${Y[Math.floor(t/or)]?.name??"local"} ${t%or}`}function ua(t,e,n){let r=Y[Math.floor(e/or)],i=la(e),s=t.indexOf(i);if(!r||s===-1)return[[t,n]];return[[t.slice(0,s),n],...Pi(i,n,r.pageUrl(e%or),Br(r.ansi)),[t.slice(s+i.length),n]].filter(([a])=>a!=="")}function UP(t,e,n){let r=[{name:"all",moved:!1},...Y].flatMap((s,o)=>{let a=`${s.name}${s.moved?"*":""}`,[c,u]=s.name===n.site?Qh(n,a):[` ${a} `,P],l=[c,u,void 0,{kind:"site",tab:o}];return o?[[" ",""],l]:[l]}),i=r.reduce((s,[o])=>s+ft(o),0)<=e;t.run(0,i?r:[Qh(n)])}function KP(t,e,n,r){if(n.chips.length===0)return;let i=[["tags ",P]],s=ft("tags "),o=n.chips.length;for(let[a,c]of n.chips.entries()){let u=` ${a+1} ${c.name} `;if(s+ft(u)+1>e-2)break;i.push([u,c.on?`\x1B[7m${r}`:P,void 0,{kind:"chip",index:a}],[" ",""]),s+=ft(u)+1,o--}if(o>0)i.push([`+${o}`,P]);t.run(0,i)}function zP(t,e,n,r,i){t[ce-1]?.put(0,"─".repeat(n-1),P);let s=t[ue.top-1],o=em(n),a=r.held.length>o?Math.max(0,o-1):r.held.length;for(let[c,u]of r.held.slice(0,a).entries()){let l=c*ue.pitch,f=u.up?at:"";if(s.run(l+1,u.page?Pi(String(u.id),f,u.page,Br(u.ansi)):[["● ",Br(u.ansi)],[String(u.id),f]]),u.up)for(let d=0;d<ue.rows;d++)t[ue.top+d]?.put(l,"▌",i);if(u.thumb)e.push({id:SP+c,path:u.thumb,row:ue.top,col:l+1,cols:ue.cols,rows:ue.rows,z:-1})}if(a<r.held.length)s.put(a*ue.pitch+1,`+${r.held.length-a}`,P)}function DP(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"}`,P);return}let i=t.run(0,[["⌕ ",r,void 0,{kind:"query"}],[n.tag||"Nothing yet — / searches, ctrl+v pastes a picture",n.tag?"":P,void 0,{kind:"query"}]]),s=ri.filter((c)=>!n.block.includes(c)),o=Y.filter((c)=>!n.enabled.includes(c.name)).map((c)=>c.name),a=[n.preset,...n.solo?["solo"]:[],n.order,...n.rating.join("+")==="safe"?[]:[n.rating.join("+")],...s.length>0?[`allows ${s.join("+")}`]:[],...n.narrow.size>0?[`≥${n.narrow.size}px`]:[],...n.narrow.score>0?[`score≥${n.narrow.score}`]:[],...n.narrow.png?["png"]:[],...n.hide.length+n.hideTags.length>0?[`hides ${[...n.hide,...n.hideTags].join("+")}`]:[],...o.length>0?[`all skips ${o.join("+")}`]:[]];if(t.put(i,` ${a.join(" ")}`,P),n.total>0||!n.searching){let c=[[`${n.tiles.length}/${n.checked}`,""]];if(n.checked<n.total)c.push([` of ${n.total}`,P]);t.right(e,c)}}function ky(t){if(t.cut==="on")return[[`Cut out · ${t.clear}% transparent`,Di]];if(t.cut==="off")return[["Opaque · x cuts out",Jt]];if(t.cut==="failed")return[["Opaque · no cut-out",Jt]];return[t.clear>0?[`${t.clear}% transparent`,Di]:["Opaque",Jt]]}function dy(t){return t.site==="all"?"any site":t.site}function Xh(t,e){if(t.installing!==void 0)return ua(`${Js(t)} Installing ${t.palette} ← ${la(t.installing)}`,t.installing,Jt);if(t.hint)return[[t.hint,Di]];if(t.error)return[[t.error,Jt]];if(t.waiting!==void 0)return[[`${t.slow??t.site} asked to slow down · ${t.waiting}s`,Jt]];if(t.fetching){let{id:n,got:r,size:i}=t.fetching;return ua(`${Js(t)} Fetching ${la(n)} · ${ku(r,i)}`,n,Jt)}if(t.cutting!==void 0)return ua(`${Js(t)} Cutting out ${la(t.cutting)}`,t.cutting,Jt);if(t.preparing!==void 0)return ua(`${Js(t)} Preparing ${la(t.preparing)}`,t.preparing,Jt);if(e)return[e];if(t.saved)return ua(t.saved.text,t.saved.key,Di);if(t.note)return[[t.note,P]];return}function yy(t){if(t.ranking)return"Ranking previews by palette colors";if(t.stage==="check")return t.preset==="cutouts"?"Checking PNG headers":"Loading previews";return"Fetching posts"}function vy(t,e){return t.ranking?`${e}${t.ranking.done}/${t.ranking.total}`:""}function qP(t,e,n,r,i){let{background:s,cursor:o,selection:a}=r.colors,{ranking:c}=r,u=c?Math.round(n*c.done/c.total):-1,l=Math.max(6,Math.round(n*0.22)),f=Gu(r)%(uy*2)/uy,d=Math.round((n-l)*(0.5-0.5*Math.cos(Math.PI*(f<1?f:2-f)))),h=Gt(s,o,i),p=Gt(s,Gt(a,s,0.15),i),$=Array.from({length:n},(b,y)=>{let S=(u>=0?y<u:y>=d&&y<d+l)?h:p;return y===0||y===n-1?Gt(S,s,0.55):S}),g=0;for(let b=1;b<=n;b++)if(b===n||$[b]!==$[g])t?.put(e+g," ".repeat(b-g),Lu($[g])),g=b}function YP(t,e,n,r,i){let{background:s,foreground:o}=i.colors,a=i.loaderFrom===void 0?0:Math.min(1,(Gu(i)-i.loaderFrom)/IP),c=e+(n>=5?Math.floor((n-5)/2):0);t[c]?.center(r,[[yy(i),at+Ys(Gt(s,o,a))],[vy(i," "),Ys(Gt(s,Gt(o,s,0.45),a))]]);let u=Math.min(OP,r-8);if(qP(t[c+(n>=3?2:1)],Math.floor((r-u)/2),u,i,a),n<5)return;t[c+4]?.center(r,i.sites.flatMap(({name:l,arrived:f},d)=>[...d?[[" · ",Ys(Gt(s,o,0.25*a))]]:[],[l,Ys(Gt(s,f?Gt(o,s,0.2):o,f?a:0.32*a))]]))}function JP(t,e,n,r,i,s){if(i<=r)return;let o=Math.max(1,Math.round(r*r/i)),a=Math.max(0,Math.min(r-o,Math.round(n.scroll*r/i)));for(let c=0;c<r;c++){let u=c>=a&&c<a+o;t[ce+c]?.put(e-1,u?"┃":"│",u?s:P)}}function VP(t,e,n){if(e)return[`${Js(t)} ${yy(t)}${vy(t," · ")}`,P];let r=n.filter((s)=>!s.missing),i=r.filter((s)=>s.thumb).length;return i<r.length?[`${Js(t)} Loading thumbnails · ${i}/${r.length}`,P]:void 0}function ZP(t,e,n,r,i,s,o){let{perRow:a,rowsVis:c,height:u}=Un(r,i);DP(t[0],r,s,o),UP(t[1],r,s),KP(t[2],r,s,o),zP(t,e,r,s,o);let l=t.map((F,j)=>j>=ce&&j<ce+u?F:void 0),f=Math.floor(s.scroll/gt.height),d=Math.floor((s.scroll+u-1)/gt.height),h=[];for(let F=f;F<=d;F++){let j=ce+F*gt.height-s.scroll;for(let B=0;B<a;B++){let X=F*a+B,U=B*gt.pitch,Z=s.tiles[X];if(!Z)continue;h.push(Z);let W=Math.max(j,ce),$t=Math.min(j+gt.height,ce+u);if($t>W)n.push({row:W,col:U,width:gt.pitch-1,height:$t-W,target:{kind:"tile",index:X}});let tt=X===s.focus;if(tt)WP(l,j,U,gt.height,gt.pitch-1,o);let qn=j+1,Ve=Math.max(qn,ce),Ze=Math.min(qn+gt.rows,ce+u);if(Z.thumb&&Ze>Ve)e.push({id:Z.key,path:Z.thumb,row:Ve,col:U+1,cols:gt.cols,rows:Ze-Ve,...Ze-Ve<gt.rows?{crop:Ve-qn}:{},z:-1});let Qe=[...s.installed.includes(Z.key)?[["✓ ",Di]]:[],...Z.page||s.site!=="all"?Pi(String(Z.id),tt?at:"",Z.page||void 0,Br(Z.siteAnsi)):[["● ",Br(Z.siteAnsi)],[String(Z.id),tt?at:""]],[" ",""],$y(Z)],Na=gt.cols-(Z.mates.length>0?1:0);if(l[j+10]?.run(U+1,Zh(Qe)>Na?Qe.map(([gl,bl,wl])=>[gl.replace(/^(\S) $/,"$1"),bl,wl]):Qe),Z.mates.length>0)l[j+10]?.put(U+gt.cols,"≈",o);l[j+11]?.put(U+1,Z.artist?RP(Z.artist).slice(0,gt.cols-8):"—",P);let zr=[];if(Z.score>0)zr.push([`★${Z.score}`,P]);if(Z.variants>1)zr.push([` ×${Z.variants}`,o]);if(zr.length>0)l[j+11]?.right(U+gt.cols+1,zr)}}let p=Math.ceil(s.tiles.length/a)*gt.height;JP(t,r,s,u,p,o);let $=Math.max(ce,ce+p-s.scroll),g=ce+u-$,b=s.searching&&g>=2;if(b)YP(l,$,g,r-1,s);let y=s.searching&&s.tiles.length===0;if(y&&!s.error){let[F,j]=ly[Math.floor(Gu(s)/xP)%ly.length];t[i-2]?.run(0,[["Tip ",P],[F,at],[` ${j}`,P]])}let S=s.top*a,E=s.tiles.length-(s.top+c)*a,I=[...S>0?[`↑ ${S} above`]:[],...E>0?[`↓ ${E} more`]:[]];if(I.length>0)t[i-2]?.put(0,I.join(" "),P);if(!s.searching&&s.tiles.length===0&&!s.error&&s.tag)t[ce+1]?.put(0,s.preset==="cutouts"?`No transparent cutouts of ${s.tag} on ${dy(s)} — c searches every post, tab tries ${s.nextSite}`:`No posts of ${s.tag} on ${dy(s)} — tab tries ${s.nextSite}`,P);let N=VP(s,b,h),R=Xh(s,N);return fa(t[i-1],r,o,{badge:"IMAGE SEARCH",lead:R,keys:y&&R?.[0]===N?[]:[["←↑↓→","move"],["enter","try on"],["tab","site"],["ctrl+v","picture"],["s","settings"],["/","search"],["?","keys"]],right:["esc","back"]}),b}function QP(t,e,n,r,i,s){let o=i.tiles[i.focus];if(!o)return;let a=i.shown?.id===o.key?i.shown:void 0,c=[Qh(i,o.site,o.siteAnsi),[" ",""],...Pi(String(o.id),at,o.page||void 0,Br(o.siteAnsi)),[" ",""],$y(o)];if(o.score>0)c.push([` · ★${o.score}`,P]);if(a)c.push([` · ${$u(a.bytes)}`,P]);if(a){if(c.push([" ",""],...ky(a)),i.coloring==="original")c.push([" · own colors",P])}if(t[0]?.run(0,c),o.mates.length>0)t[0]?.right(n,[["≈ ",s],[o.mates.join(" "),P]]);if(FP(t,1,2,i,s),i.tuning)BP(t,8,2,2+Math.min(n-4,60),i,s);else if(i.details)CP(t,5,2,Math.min(n-4,Math.max(48,Math.floor(n*0.55))),r-2,i);else HP(t,7,2,n-4,r-2,i,s);if(i.shown)e.push({id:tm+i.shown.id,path:i.shown.path,row:0,col:0,cols:n,rows:r,z:EP});if(i.tuning){fa(t[r-1],n,s,{badge:"IMAGE EDIT",lead:Xh(i),keys:[["↑↓","field"],["←→","step"],["=","reset"],["+","reset all"],i.tuning.field===1?["1-9","place"]:["⇧←→","×10"],["c","colors"],["enter","keep"]],right:["esc","undo"]});return}let u=Xh(i);fa(t[r-1],n,s,{badge:"IMAGE PREVIEW",lead:u,keys:i.installing===void 0?[["←→","browse"],["enter","install"],["t","tune"],["c","colors"],["i","details"],...i.details?[]:[["⇧←→","example"]],...i.shown?.cut==="on"||i.shown?.cut==="off"?[["x","cut out"]]:[],["?","keys"]]:[],right:i.installing===void 0?["esc","grid"]:void 0})}var XP=[["Field","↑↓ size, position, opacity"],["Step","←→ · ⇧←→ ×10"],["Place","1-9 the nine positions"],["Reset","= this field back to its default · + every field"],["Colors","c the palette's tone or its own colors, opacity back to its default"],["Keep","enter back to try, installed with the picture"],["Undo","esc"],["Close","? esc"]],tH={grid:[["Move","←↑↓→ j k home end pgup pgdn"],["Try on","enter"],["Site",`tab shift+tab all, ${Y.map((t)=>t.name).join(", ")}`],["Posts","c cutouts or every post"],["Search","/ a tag, a post URL or an id"],["Tags","1-9 turn a tag of the tags row on or off — the palette's own, then danbooru's related characters"],["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"],["Advanced","a or Advanced › in settings min score, min size, sites, hide, hide tags, PNG only"],["Back","esc returns to preview"],["Close","? esc"]],try:[["Browse","←→"],["Install","enter"],["Tune","t size, position and opacity, installed with the picture"],["Colors","c the palette's tone or its own colors, installed with the picture"],["Details","i characters, series, tags, rating and file, under Post, Source and Artist"],["Example",`⇧←→ ${te.map((t)=>t.name.toLowerCase()).join(", ")}`],["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"]]},rm=6,eH=24;function da(t){return[...t.settings.flatMap((e,n)=>Boolean(e.advanced)===t.advanced?[n]:[]),t.settings.length]}function nH(t){return t.replace(/^[A-Z](?=[a-z])/,(e)=>e.toLowerCase())}function hy(t){let e=t.settings.filter((n)=>Boolean(n.advanced)!==t.advanced).map((n)=>nH(n.label));return`${t.advanced?"Back to":"More filters:"} ${e.join(", ")} — enter opens the page, or a from any row`}function Sy(t,e,n){let r=t.indexOf(e);if(r!==-1)return t[(r+n+t.length)%t.length];let i=Number(e)||0;return(n>0?t.find((o)=>(Number(o)||0)>i):[...t].reverse().find((o)=>(Number(o)||0)<i))??t[n>0?0:t.length-1]}function Ri(t,e){let n=[],r="";for(let i of t.split(" "))if(r&&ft(r)+1+ft(i)>e)n.push(r),r=i;else r=r?`${r} ${i}`:i;return r?[...n,r]:n}function rH(t){if(t.entry!=="number"||t.choices.includes(t.value))return t.choices;let e=t.choices.findIndex((n)=>(Number(n)||0)>Number(t.value));return e===-1?[...t.choices,t.value]:[...t.choices.slice(0,e),t.value,...t.choices.slice(e)]}function iH(t,e,n,r){let i=`\x1B[7;${30+r}m`,s=e&&n!==void 0;if(t.entry==="text")return[{text:` ${s?`${n}█`:t.value||"none"} `,sgr:s||e&&t.value?i:t.value?"":P}];let o=s?[]:t.value.split(" "),a=(s?t.choices:rH(t)).map((c,u)=>{let l=o.includes(c),f=t.multi&&e&&u===t.cursor?"4;":"";return{text:t.multi?` ${l?"[x]":"[ ]"} ${c} `:` ${c} `,sgr:l?e?`\x1B[${f}7;${30+r}m`:"":f?`\x1B[4m${P}`:P,choice:c}});return s?[...a,{text:` ${n}█ `,sgr:i}]:a}function my(t){if(t.entry==="text")return[{text:" ".repeat(eH),sgr:""}];let e=t.choices.map((n)=>({text:t.multi?` [x] ${n} `:` ${n} `,sgr:""}));return t.entry==="number"?[...e,{text:` ${"0".repeat(rm)}█ `,sgr:""}]:e}function sH(t){return t.reduce((e,n)=>e+ft(n.text)+1,0)-1}function py(t,e){let n=[[]],r=0;for(let i of t){let s=ft(i.text)>e?{...i,text:` …${Array.from(i.text).slice(-(e-2)).join("")}`}:i;if(r>0&&r+ft(s.text)>e)n.push([]),r=0;n[n.length-1]?.push(s),r+=ft(s.text)+1}return n}function gy(t){if(t.multi&&t.choices.every((e)=>t.default.split(" ").includes(e)))return"Default all";return`Default ${t.default&&t.default!==t.multi?.none?t.default:"none"}`}function by(t){if(!t.tag)return"";if(!t.counts)return`${t.tag}: counting…`;let e=t.counts.map(({site:n,count:r})=>`${n} ${r===void 0?"no count":r.toLocaleString("en-US")}`);return`${t.tag}: ${e.join(" · ")}`}function oH(t,e){let n=t.advanced?"basic":"advanced";if(!e)return{keys:[["↑↓","setting"],["enter",n],["s","save"]],right:["esc","undo"]};if(t.typing!==void 0)return{keys:[["⌫","erase"],["enter","done"]],right:["esc","cancel"]};if(e.entry)return{keys:[["↑↓","setting"],...e.entry==="number"?[["←→","step"]]:[],["a",n],["enter","type"],["s","save"]],right:["esc","undo"]};return{keys:[["↑↓","setting"],["←→","value"],["a",n],...e.multi?[["space","toggle"]]:[],["enter","save"]],right:["esc","undo"]}}function aH(t,e,n,r,i){let s=r.panel??0,o=r.settings.length,c=6+Math.max(...r.settings.map((W)=>ft(W.label))),u=Math.max(...r.settings.map((W)=>ft(gy(W)))),l=c+Math.max(...r.settings.map((W)=>sH(my(W))))+u+5,f=Math.min(e-2,Math.max(48,l)),d=f-c-u-5,h=f-7,p=[!1,!0].map((W)=>({advanced:W,rows:da({settings:r.settings,advanced:W}).slice(0,-1)})),$=r.settings.map((W)=>py(my(W),d).length),g=Math.max(...p.map((W)=>W.rows.reduce(($t,tt)=>$t+$[tt],0))),b=Math.max(...p.map((W)=>Ri(hy({settings:r.settings,advanced:W.advanced}),h).length),...r.settings.map((W)=>Ri(W.about,h).length)),y=`${r.tag}: ${Y.map((W)=>`${W.name} 0,000,000`).join(" · ")}`,S=r.tag?Math.max(Ri(y,h).length,Ri(by(r),h).length):0,E=g+b+S+8,I=Math.floor((e-f)/2),N=Math.max(1,Math.floor((n-1-E)/2)),R=`\x1B[7;${30+r.siteAnsi}m`;t[N]?.put(I,`╭─ Settings ${"─".repeat(Math.max(0,f-13))}╮`);for(let W=N+1;W<N+E-1;W++)t[W]?.put(I,`│${" ".repeat(f-2)}│`);let F=N+2;for(let W of da(r).slice(0,-1)){let $t=r.settings[W],tt=W===s;if(tt)t[F]?.put(I+2,"▶",i);if(t[F]?.mark(I+2,c-3,{kind:"setting",index:W}),t[F]?.put(I+4,$t.label,tt?at:""),$t.value!==$t.default)t[F]?.right(I+f-3,[[gy($t),P]]);py(iH($t,tt,r.typing,r.siteAnsi),d).forEach((qn,Ve)=>{let Ze=I+c;for(let Qe of qn)Ze=t[F+Ve].put(Ze,Qe.text,Qe.sgr,void 0,{kind:"choice",index:W,choice:Qe.choice}),Ze+=1}),F+=$[W]}let j=p.find((W)=>W.advanced!==r.advanced)?.rows??[],B=t[N+3+g];if(s===o)B.put(I+2,"▶",i);let X=B.put(I+3,r.advanced?" ‹ Basic ":" Advanced › ",s===o?R:at,void 0,{kind:"setting",index:o});if(j.some((W)=>r.settings[W]?.value!==r.settings[W]?.default))B.put(X+1,"•",P);t[N+5+g]?.put(I+2,"─".repeat(f-4),P),Ri(r.settings[s]?.about??hy(r),h).forEach((W,$t)=>{t[N+6+g+$t]?.put(I+4,W)}),Ri(by(r),h).forEach((W,$t)=>{t[N+6+g+b+$t]?.put(I+4,W,P)}),t[N+E-1]?.put(I,`╰${"─".repeat(f-2)}╯`);let{keys:U,right:Z}=oH(r,r.settings[s]);fa(t[n-1],e,i,{keys:U,right:Z})}function cH(t,e,n,r,i){let s=r.tuning?XP:tH[r.mode],o=Math.min(e-2,Math.max(50,...s.map(([,d])=>ft(d)+16))),a=s.map(([d,h])=>({label:d,parts:Ri(h,o-16)})),c=a.reduce((d,{parts:h})=>d+h.length,0)+4,u=Math.floor((e-o)/2),l=Math.max(2,Math.floor((n-c)/2));t[l]?.put(u,`╭─ Help ${"─".repeat(o-9)}╮`);for(let d=l+1;d<l+c-1;d++)t[d]?.put(u,`│${" ".repeat(o-2)}│`);let f=l+2;for(let{label:d,parts:h}of a){t[f]?.put(u+3,d,at);for(let p of h)t[f]?.put(u+13,p),f++}t[l+c-1]?.put(u,`╰${"─".repeat(o-2)}╯`),fa(t[n-1],e,i,{badge:"HELP",right:["? esc","close"]})}function uH(t,e,n){let r=e.suggest??[],i=r.map((a)=>a.alias??(a.count>0?String(a.count):a.palette??"0")),s=Math.max(...r.map((a)=>ft(a.value))),o=Math.max(7,...i.map(ft));r.forEach((a,c)=>{let u=c===e.pick,l=t[1+c];l?.run(0,[[u?"▸ ":" ",n,void 0,{kind:"suggest",index:c}],[a.value,u?at+n:"",void 0,{kind:"suggest",index:c}]]),l?.right(2+s+2+o,[[i[c],P]])})}function Fu(t,e=[]){return[...e,...t.flatMap((n,r)=>n.zones(r))]}function im(t,e,n){let r=Array.from({length:n},()=>new Cu(e)),i=[],s=[],o=Ys(t.colors.cursor);if(Jh=!1,e<Ti.cols||n<Ti.rows)return r[0]?.put(0,"ttheme find",at+o),r[1]?.put(0,`Needs ${Ti.cols}×${Ti.rows} — now ${e}×${n}`),r[2]?.put(0,"esc quits",P,void 0,{kind:"key",key:"esc"}),{lines:r.map((c)=>c.render()),images:i,zones:Fu(r),loader:!1,tick:!1};let a=!1;if(t.mode==="try")QP(r,i,e,n,t,o);else a=ZP(r,i,s,e,n,t,o);if(t.mode==="grid"&&t.editing!==void 0&&t.suggest?.length){for(let c=1;c<n-1;c++)r[c]=new Cu(e);return uH(r,t,o),{lines:r.map((c)=>c.render()),images:[],zones:Fu(r),loader:!1,tick:!1}}if(t.help||t.panel!==void 0){let c=t.mode==="try"?i:[];for(let u=0;u<n;u++)r[u]=new Cu(e);if(t.help)cH(r,e,n,t,o);else aH(r,e,n,t,o);return{lines:r.map((u)=>u.render()),images:c,zones:Fu(r),loader:!1,tick:!1}}return{lines:r.map((c)=>c.render()),images:i,zones:Fu(r,s),loader:a,tick:Jh}}import{execFile as lH}from"node:child_process";import{createHash as Iy}from"node:crypto";import{existsSync as fH,mkdtempSync as dH,readFileSync as Uu,rmSync as hH,statSync as xy,writeFileSync as Ny}from"node:fs";import{homedir as mH,tmpdir as pH}from"node:os";import{join as _u}from"node:path";import{fileURLToPath as gH}from"node:url";import{promisify as bH}from"node:util";var bn=bH(lH),Bu=67108864,wH=4096,am=["image/png","image/jpeg","image/webp","image/gif","image/tiff","image/heic"],$H=["text/uri-list","text/plain;charset=utf-8","text/plain"],sm=[...am,"text/uri-list","text/plain"];function kH(t){try{return xy(t).isFile()}catch{return!1}}function yH(t){let e=[],n="",r="",i=!1;for(let s=0;s<t.length;s++){let o=t[s];if(r==="'")if(o==="'")r="";else n+=o;else if(r==='"')if(o==='"')r="";else if(o==="\\"&&'"\\$`'.includes(t[s+1]??""))n+=t[++s];else n+=o;else if(o==="\\"&&s+1<t.length)n+=t[++s],i=!0;else if(o==="'"||o==='"')r=o,i=!0;else if(/\s/.test(o)){if(i)e.push(n);n="",i=!1}else n+=o,i=!0}if(i)e.push(n);return e}function Ey(t){if(/^file:\/\//i.test(t))try{return gH(t)}catch{return}if(t.startsWith("~/"))return _u(mH(),t.slice(2));return t.startsWith("/")?t:void 0}function Vs(t,e=kH){let n=[];for(let r of t.replace(/\r\n?/g,`
653
+ Every push is the market: \`ttheme market add ${s}\` works anywhere`)}function OA(t){let e=t?yr(t):process.cwd(),n=aa(e,Ft);if(!Au(n))throw Error(`${Z(e)} has no ${Ft} — \`ttheme market init ${Z(e)}\` makes one`);let r=[],i=[],s=Pu(n,"utf8"),o;try{o=Fe(e)}catch(h){return console.error(` ✗ ${h.message}`),1}let a=ai(s),c=a.owner;for(let h of Object.keys(a).filter((m)=>!Zw.includes(m)))i.push(`${Ft}: unknown key ${h} — ttheme ignores it`);for(let h of Object.keys(c).filter((m)=>!Qw.includes(m)))i.push(`${Ft}: unknown key owner.${h} — ttheme ignores it`);if(!o.description)i.push(`${Ft}: no description — browse and the market page show one`);let u=ne(o),l=qe(e,u,gA(J()),(h,m)=>r.push(`${ty(e,h)}: ${m.replace(`${ry(h)}: `,"")}`));for(let h of Os(e)){let m;try{m=nw(h.path,Pu(h.path,"utf8"))}catch{m=[]}for(let $ of m)i.push(`${ty(e,h.path)}: unknown key ${$} — ttheme ignores it`)}let f=Gk(o.renames,new Set(l.map((h)=>ae(h.name))));r.push(...f.errors.map((h)=>`${Ft}: ${h}`)),i.push(...f.warnings.map((h)=>`${Ft}: ${h}`));for(let h of l){let m=Co(h).filter((g)=>g.startsWith(" ✗")),$=h.catalog?`${h.catalog}/${ae(h.name)}`:ae(h.name);console.log(` ${$}${m.length>0?`
654
+ ${m.join(`
655
+ `)}`:" passes the gate"}`)}for(let h of r)console.error(` ✗ ${h}`);for(let h of i)console.log(` ! ${h}`);let d=(h,m)=>`${h} ${m}${h===1?"":"s"}`;return console.log(`
656
+ ${u} · ${Rt(l.length)} · ${d(r.length,"error")} · ${d(i.length,"warning")}`),r.length>0?1:0}async function my(t,e){switch(t){case void 0:vA();return;case"add":await $A(ny(t,e));return;case"remove":kA(ny(t,e));return;case"search":await EA(e);return;case"init":await MA(e);return;case"check":return OA(e);default:throw Error(`unknown market action ${t} — ${hA.join(", ")}, or none to list them`)}}function ny(t,e){if(!e)throw Error(t==="add"?"market add takes a repository or a folder: ttheme market add alice/ttheme-dust":"market remove takes a market name — `ttheme market` lists them");return e}function py(t,e){let n=zs(t,e);return`${n} — ${Rt(qe(e,n,ca(t),re(!1)).length)}, read in place`}var xA=new Intl.Segmenter(void 0,{granularity:"grapheme"});function gy(t){return[...t].length===1&&t>=" "&&t!==""}function IA(t){return[...t.replace(/[\r\n\t]+/g," ")].filter(gy).join("")}function Pi(t,e,n=()=>!0){if(e==="backspace")return[...xA.segment(t)].slice(0,-1).map((r)=>r.segment).join("");if(e==="ctrl-u")return"";if(e==="ctrl-w"||e==="alt-backspace")return t.replace(/\S*\s*$/,"");return gy(e)&&n(e)?t+e:void 0}class _r{value;constructor(t=""){this.value=t}key(t){let e=Pi(this.value,t);if(e===void 0)return!1;return this.value=e,!0}paste(t){this.value+=IA(t)}}import{performance as RA}from"node:perf_hooks";import{StringDecoder as NA}from"node:string_decoder";var TA=30,by=50,AA=500,PA=5,wy=Buffer.from("\x1B[M"),Cu="\x1B]1337;ReportCellSize\x07\x1B[16t\x1B[14t\x1B[18t",Sy={A:"up",B:"down",C:"right",D:"left",H:"home",F:"end","1~":"home","7~":"home","3~":"delete","4~":"end","8~":"end","5~":"pgup","6~":"pgdn",I:"focus-in",O:"focus-out",Z:"shift-tab","1;2C":"shift-right","1;2D":"shift-left"},HA={"\r":"enter","\n":"enter","\t":"tab","\b":"backspace","":"backspace","\x1B":"esc","\x00":"ctrl-space"},$y=/\[([0-?]*)([ -/]*)([@-~])/y,FA=/^\[[0-?]*[ -/]*$/,ky=/\](\d+)/y,CA=/^\]\d*$/,yy=/\]\d+;/y,LA=/^1337;ReportCellSize=([\d.]+);([\d.]+)(?:;([\d.]+))?$/,My="\x1B[200~",Fu="\x1B[201~";function Xh(t){let e=HA[t];if(e)return e;let n=t.codePointAt(0)??0;if(n<27)return`ctrl-${String.fromCharCode(n+96)}`;return n<32?void 0:t}function Ds(t){return{kind:"key",key:t}}function qs(t){return{events:[Ds("esc")],end:t+1}}function jA(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 _A=["left","middle","right",void 0];function Oy(t,e,n,r){if(!Number.isInteger(t)||t<0||t>=128||!(e>=0)||!(n>=0))return;let i=t&3,s={kind:"mouse",row:n,col:e,shift:(t&4)!==0,alt:(t&8)!==0,ctrl:(t&16)!==0};if(t&64)return{...s,action:"wheel",button:void 0,wheel:i%2===0?-1:1,sideways:i>=2,count:0};let o=_A[i],a=t&32?o?"drag":"move":r||!o?"release":"press";return{...s,action:a,button:o,wheel:0,sideways:!1,count:a==="press"?1:0}}function GA(t,e,n){let r=[],i=e;while(r.length<3&&i<t.length){let u=t.codePointAt(i);r.push(u),i+=u>65535?2:1}if(r.length<3)return n?{events:[],end:t.length}:void 0;let[s=0,o=0,a=0]=r,c=Math.max(s,o,a)<128?Oy(s-32,o-33,a-33,!1):void 0;return{events:c?[c]:[],end:i}}function BA(t,e,n){if((n==="M"||n==="m")&&e===""&&t.startsWith("<")){let[i=-1,s=0,o=0]=t.slice(1).split(";").map(Number),a=Oy(i,s-1,o-1,n==="m");return a?[a]:[]}if(n==="t"&&e===""){let[i,s=0,o=0]=t.split(";").map(Number),a=i===6?"cell":i===4?"window":i===8?"grid":void 0;return a?[{kind:"size",of:a,h:s,w:o}]:[]}if(n==="y"&&e==="$"&&t.startsWith("?")){let[i=0,s=0]=t.slice(1).split(";").map(Number);return[{kind:"mode",mode:i,value:s}]}if(n==="c"&&t.startsWith("?"))return[{kind:"attributes"}];let r=e===""?Sy[`${t}${n}`]:void 0;return r?[Ds(r)]:[]}function UA(t,e,n){$y.lastIndex=e+1;let r=$y.exec(t);if(!r)return!n&&FA.test(t.slice(e+1))?void 0:qs(e);let[i,s="",o="",a=""]=r,c=e+1+i.length;if(s===""&&o===""&&a==="M")return GA(t,c,n);if(s==="200"&&a==="~"){let u=t.indexOf(Fu,c);if(u===-1)return n?{events:[{kind:"paste",text:t.slice(c)}],end:t.length}:void 0;return{events:[{kind:"paste",text:t.slice(c,u)}],end:u+Fu.length}}return{events:BA(s,o,a),end:c}}function WA(t){let e=LA.exec(t);if(e){let s=Number(e[3]??1);return[{kind:"size",of:"cell",h:Math.round(Number(e[1])*s),w:Math.round(Number(e[2])*s)}]}let[n="",r="",...i]=t.split(";");return[{kind:"osc",code:n,meta:jA(r),payload:i.join(";")}]}function KA(t,e,n){ky.lastIndex=e+1;let r=ky.exec(t),i=r?t[e+1+r[0].length]:void 0;if(i!==";"&&i!=="\x07"&&i!=="\x1B")return!n&&CA.test(t.slice(e+1))?void 0:qs(e);let s=[t.indexOf("\x07",e),t.indexOf("\x1B\\",e+2)].filter((a)=>a!==-1);if(s.length===0)return n?{events:[],end:t.length}:void 0;let o=Math.min(...s);return{events:WA(t.slice(e+2,o)),end:o+(t[o]==="\x07"?1:2)}}function zA(t,e,n){let r=t[e+2];if(r===void 0)return n?qs(e):void 0;if(!/^[A-Za-z]$/.test(r))return qs(e);let i=Sy[r];return{events:i?[Ds(i)]:[],end:e+3}}function DA(t,e,n){let r=t[e+1];if(r===void 0)return n?qs(e):void 0;if(r==="[")return UA(t,e,n);if(r==="]")return KA(t,e,n);if(r==="O")return zA(t,e,n);if(r==="")return{events:[Ds("alt-backspace")],end:e+2};if(/^[a-z]$/.test(r))return{events:[Ds(`alt-${r}`)],end:e+2};return qs(e)}function vy(t,e=!1){let n=[],r=0;while(r<t.length){if(t[r]==="\x1B"){let o=DA(t,r,e);if(!o)return{events:n,rest:t.slice(r)};n.push(...o.events),r=o.end;continue}let i=String.fromCodePoint(t.codePointAt(r)),s=Xh(i);if(s)n.push(Ds(s));r+=i.length}return{events:n,rest:""}}function qA(t){let e=t.indexOf(wy);if(e===-1)return{bytes:t,carry:void 0};let n=[],r=0;while(e!==-1&&e+6<=t.length){n.push(t.subarray(r,e));let[i=0,s=0,o=0]=t.subarray(e+3,e+6);if(s>32&&o>32)n.push(Buffer.from(`\x1B[<${i-32};${s-32};${o-32}M`));r=e+6,e=t.indexOf(wy,r)}return n.push(t.subarray(r,e===-1?t.length:e)),{bytes:Buffer.concat(n),carry:e===-1?void 0:t.subarray(e)}}function Ey(t){return yy.lastIndex=1,t.startsWith(My)||t.startsWith("\x1B]")&&yy.test(t)}function YA(t,e){let n=t.slice(-Fu.length)+e;return t.startsWith(My)?n.includes(Fu):n.includes("\x07")||n.includes("\x1B\\")}class tm{held="";timer;carry;pressed;wheeled;utf8=new NA("utf8");burst;take;constructor(t,e=()=>!1){this.burst=e,this.take=(n)=>{let r=this.counted(n);if(r.length>0)t(r)}}counted(t){let e=RA.now();return t.filter((n)=>{if(n.kind!=="mouse")return!0;if(n.action==="wheel"){let s=n.wheel*(n.sideways?2:1),o=this.wheeled;if(o!==void 0&&o.way===s&&e-o.at<PA)return!1;return this.wheeled={at:e,way:s},!0}if(n.action==="release")n.count=this.pressed?.count??0;if(n.action!=="press"||!n.button)return!0;let r=this.pressed,i=r!==void 0&&r.button===n.button&&r.row===n.row&&Math.abs(r.col-n.col)<=1&&e-r.at<=AA;return n.count=i?r.count+1:1,this.pressed={at:e,button:n.button,row:n.row,col:n.col,count:n.count},!0})}feed(t){clearTimeout(this.timer);let e=typeof t==="string"?t:this.bytes(t);if(this.carry)this.wait(by);if(!this.held&&!e.includes("\x1B")&&this.burst(e)){this.take([{kind:"paste",text:e}]);return}if(Ey(this.held)&&!YA(this.held,e)){this.held+=e;return}let{events:n,rest:r}=vy(this.held+e);if(this.held=r,r&&!Ey(r))this.wait(r.length===1?TA:by);if(n.length>0)this.take(n)}bytes(t){let{bytes:e,carry:n}=qA(this.carry?Buffer.concat([this.carry,t]):t);return this.carry=n,this.utf8.write(e)}wait(t){clearTimeout(this.timer),this.timer=setTimeout(()=>this.flush(),t)}flush(){clearTimeout(this.timer),this.carry=void 0;let{events:t}=vy(this.held,!0);if(this.held="",t.length>0)this.take(t)}stop(){clearTimeout(this.timer),this.held="",this.carry=void 0}}class la{window;grid;see(t){if(t.kind!=="size")return;if(t.of==="cell")return{w:t.w,h:t.h};if(t.of==="window")this.window=t;else this.grid=t;let e=this.window,n=this.grid;return e&&n&&n.h>0&&n.w>0?{h:Math.floor(e.h/n.h),w:Math.floor(e.w/n.w)}:void 0}}var ju={on:"\x1B[?1049h",off:"\x1B[?1049l"},Yn={on:"\x1B[?25l",off:"\x1B[?25h"},Hi={on:"\x1B[?7l",off:"\x1B[?7h"},Gr={on:"\x1B[?2004h",off:"\x1B[?2004l"},Ny={on:"\x1B[?1004h",off:"\x1B[?1004l"},JA={on:"\x1B[?1000h\x1B[?1002h\x1B[?1006h",off:"\x1B[?1006l\x1B[?1002l\x1B[?1000l"};function Js(t=process.env){return t.TTHEME_MOUSE==="off"?[]:[JA]}var Ty={SIGHUP:1,SIGINT:2,SIGQUIT:3,SIGTERM:15},VA=3000;class da extends Error{exit;constructor(t){super(t);this.exit=128+Ty[t]}}var kn=[],Ys=new Map,fa=new Map;function xy(t){return kn.findLast((e)=>e.input===t)}var Iy;function Ay(t){for(let e of[...kn].reverse())e.abort(t);if(!Iy)Iy=setTimeout(()=>{Py(),process.exit(t instanceof da?t.exit:1)},VA).unref()}var ZA=Object.fromEntries(Object.keys(Ty).map((t)=>[t,()=>Ay(new da(t))]));function Py(){for(let t of[...kn].reverse())t.close()}function QA(){for(let t of kn)t.reassert();kn.at(-1)?.redraw()}function Ry(t){let e=t?"on":"off";for(let[n,r]of Object.entries(ZA))process[e](n,r);if(process[e]("uncaughtException",Ay),process[e]("exit",Py),process.platform!=="win32")process[e]("SIGCONT",QA)}function Lu(){}class Hy{input;output;failed;modes=[];assumed;owned=[];keys;tty;take;resized;queued=[];asking;reject=Lu;open=!0;aborted=!1;constructor(t={}){if(this.input=t.input??process.stdin,this.output=t.output??process.stdout,this.tty=this.output.isTTY===!0&&this.input.isTTY===!0,this.assumed=t.assume??[],this.keys=new tm((r)=>this.deliver(r),t.burst),this.failed=new Promise((r,i)=>{this.reject=i}),this.failed.catch(Lu),this.tty&&!kn.some((r)=>r.tty))Ry(!0);kn.push(this);let e="";for(let r of this.assumed)if(!Ys.has(r))e+=r.on;for(let r of t.modes??[])e+=this.claim(r);this.write(e);let n=fa.get(this.input)??0;if(n===0)this.input.setRawMode?.(!0);fa.set(this.input,n+1),this.input.on("data",this.received),this.input.resume(),this.output.on("resize",this.resizing),this.output.on("error",Lu)}hold(t){this.write(this.claim(t))}get cols(){return this.output.columns||80}get rows(){return this.output.rows||24}write(t){if(t&&this.open)this.output.write(t)}listen(t){this.take=t;let e=this.queued;if(this.queued=[],e.length>0)t(e)}onResize(t){this.resized=t}until(t){return Promise.race([t,this.failed])}loop(t,e=()=>{}){return this.until(new Promise((n)=>{let r=!1;this.listen((i)=>{for(let s of i){let o=r?void 0:t(s);if(o!==void 0)r=!0,n(o)}if(!r)e()})}))}ask(t,e,n,r=!0){return new Promise((i)=>{let s={hold:r,pick:(c)=>{let u=e(c);if(u===void 0)return!1;return o(u),!0}},o=(c)=>{if(clearTimeout(a),this.asking===s)this.asking=void 0;i(c),this.release()},a=setTimeout(()=>o(void 0),n);this.asking=s,this.write(t)})}abort(t){if(this.aborted)return;this.aborted=!0,this.keys.stop(),this.reject(t)}redraw(){this.resized?.()}reassert(){if(this.open)this.input.setRawMode?.(!0),this.write([...this.assumed,...this.owned].map((t)=>t.on).join(""))}close(){if(!this.open)return;this.keys.stop(),this.input.off("data",this.received),this.output.off("resize",this.resizing);let t="";for(let n of[...this.modes].reverse()){let r=(Ys.get(n)??1)-1;if(r===0)Ys.delete(n),t+=n.off;else Ys.set(n,r)}this.write(t),this.open=!1;let e=(fa.get(this.input)??1)-1;if(e===0)fa.delete(this.input),this.input.setRawMode?.(!1),this.input.pause();else fa.set(this.input,e);if(this.output.off("error",Lu),kn.splice(kn.indexOf(this),1),this.tty&&!kn.some((n)=>n.tty))Ry(!1)}received=(t)=>{if(xy(this.input)===this&&!this.aborted)this.keys.feed(t)};resizing=()=>{if(xy(this.input)===this)this.resized?.()};claim(t){this.modes.push(t);let e=Ys.get(t)??0;if(Ys.set(t,e+1),e>0)return"";return this.owned.push(t),t.on}deliver(t){let e=this.asking,n=e?t.filter((r)=>!e.pick(r)):t;if(n.length===0)return;if(!this.take||this.asking?.hold){this.queued.push(...n);return}this.take(n)}release(){if(this.take&&this.queued.length>0){let t=this.queued;this.queued=[],this.take(t)}}}async function Br(t,e){let n=new Hy(t);try{return await e(n)}finally{n.close()}}var XA=3;function ha(t,e){return`${t}/${e}`}function Fy(t){return lt(t.name)?ae(t.name):t.name}function Vs(t){return t.catalog!==void 0&&Ly(t.group)?ha(t.group,t.catalog):void 0}function em(t){if(t?.kind==="palette")return`palette ${t.entry.name}`;if(t?.kind==="group")return`group ${t.name}`;if(t?.kind==="catalog")return`catalog ${ha(t.group,t.name)}`;return t?.kind??""}function _u(t,e){return di([t.name,t.group,t.native??"",t.catalog??"",...t.nativeNames??[],...bc(t.booru)],e)}function Cy(t,e,n){let r=n.trim(),i=[],s=new Set,o=(a)=>({kind:"palette",entry:a});for(let a of t){if(a.default||s.has(a.group))continue;s.add(a.group);let c=t.filter((d)=>!d.default&&d.group===a.group),u=r?c.filter((d)=>_u(d,r)):c;if(r&&u.length===0)continue;let l=r.length>0||e.has(a.group);if(i.push({kind:"group",name:a.group,native:a.native,lead:c.find((d)=>d.lead)??a,expanded:l,count:u.length}),!l)continue;let f=u.filter((d)=>Vs(d)!==void 0);for(let d of new Set(f.map((h)=>h.catalog))){let h=f.filter(($)=>$.catalog===d),m=r.length>0||e.has(ha(a.group,d));if(i.push({kind:"catalog",group:a.group,name:d,lead:h[0],expanded:m,count:h.length}),m)i.push(...h.map(o))}i.push(...u.filter((d)=>Vs(d)===void 0).map(o))}return i}function tP(t,e){let n=e.trim(),r=new Set(t.filter((i)=>!i.default&&(n===""||_u(i,n))).map((i)=>i.group));return Cy(t,new Set,"").filter((i)=>i.kind==="group"&&r.has(i.name))}function Ly(t){return t.includes("@")}function nm(t,e,n,r,i=!0){let s=n-1;if(s<0)return t;let o;if(!Number.isFinite(e))o=e>0?s:0;else if(e>0)o=t>=s?i?0:s:Math.min(s,t+e);else o=t<=0?i?s:0:Math.max(0,t+e);return r(o)?o+Math.sign(e):o}function Gu(t,e){let n={home:Number.NEGATIVE_INFINITY,end:Number.POSITIVE_INFINITY,pgup:-e,pgdn:e};return t===void 0?void 0:n[t]}function eP(t){let e=t.findIndex((n)=>n.kind==="group"&&Ly(n.name));return e>0&&t.slice(0,e).some((n)=>n.kind==="group")?[...t.slice(0,e),{kind:"rule"},...t.slice(e)]:t}function nP(t){let e=t.findIndex((n)=>n.kind==="palette");return e===-1?0:e}function Bu(t){return t==="decode"||t==="glitch"?t:"typewriter"}function Zs(t,e,n){return le({kind:"row",at:t,part:e},n)}class ma{picked;scope;maxItems;named=[];series=[];color;onFocus;entries=[];seriesPad=0;namePad=0;expanded=new Set;rows=[];cursor=0;top=0;filter="";lastFocused="";constructor(t){this.picked=t.picked,this.scope=t.scope??"palette",this.maxItems=t.maxItems??12,this.color=t.color??!0,this.onFocus=t.onFocus,this.load(t.entries),this.rebuild("first")}load(t){this.entries=t,this.named=t.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.namePad=Math.max(0,...this.named.map((e)=>this.indent(e).length+Fy(e).length))}indent(t){return Vs(t)===void 0?" ":" "}setEntries(t){this.load(t),this.rebuild("stay")}setFilter(t){if(t!==this.filter)this.filter=t,this.rebuild("keep")}clear(){let t=this.rows[this.cursor];if(t?.kind==="palette"&&!t.entry.default){this.expanded.add(t.entry.group);let e=Vs(t.entry);if(e!==void 0)this.expanded.add(e)}this.setFilter("")}focusedRow(){return this.rows[this.cursor]}refocus(){this.lastFocused="",this.sync()}members(t,e){let n=this.scope==="palette"?this.filter.trim():"";return this.named.filter((r)=>r.group===t&&(e===void 0||r.catalog===e)&&(n===""||_u(r,n)))}everyone(t){return t.flatMap((e)=>e.kind==="group"?this.members(e.name):[])}pick(){let t=this.rows[this.cursor],e=t?.kind==="palette"?[t.entry.name]:t?.kind==="group"?this.members(t.name).map((r)=>r.name):t?.kind==="catalog"?this.members(t.group,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,e){return this.members(t,e).filter((n)=>this.picked.has(n.name)).length}pickedCount(){if(this.scope==="palette")return this.named.filter((t)=>this.picked.has(t.name)).length;return this.series.filter((t)=>this.members(t).every((e)=>this.picked.has(e.name))).length}total(){return this.scope==="series"?this.series.length:this.named.length}matched(){let t=this.filter.trim();if(this.scope==="series")return this.rows.filter((e)=>e.kind==="group").length;return t?this.named.filter((e)=>_u(e,t)).length:this.named.length}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"?tP(this.entries,this.filter):Cy(this.entries,this.expanded,this.filter);this.rows=n.length>0?eP([{kind:"all",count:this.allCount(n)},...n]):[];let r=n.length>0?this.rows.indexOf(n[nP(n)]):0;if(t==="first")this.cursor=r;else if(t==="keep"||t==="stay"){let i=em(e),s=e?.kind==="palette"||t==="stay"?this.rows.findIndex((o)=>em(o)===i):-1;this.cursor=s===-1?r:s}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,e=!0){this.cursor=nm(this.cursor,t,this.rows.length,(n)=>this.rows[n]?.kind==="rule",e),this.sync()}point(t){let e=this.rows[t];if(!e||e.kind==="rule")return!1;return this.cursor=t,this.sync(),!0}flip(){let t=this.rows[this.cursor];if(t?.kind==="group"||t?.kind==="catalog")this.fold(!t.expanded)}foldable(){let t=this.rows[this.cursor];return(t?.kind==="group"||t?.kind==="catalog")&&this.scope==="palette"&&!this.filter}open(){if(this.foldable())this.flip();else this.pick()}toggle(t){if(this.expanded.has(t))this.expanded.delete(t);else this.expanded.add(t);this.rebuild("clamp")}climb(t,e){this.expanded.delete(t),this.rebuild("clamp"),this.reach(e)}reach(t){this.cursor=Math.max(0,this.rows.findIndex((e)=>em(e)===t)),this.sync()}fold(t){if(this.filter||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==="catalog"){if(t!==e.expanded)this.toggle(ha(e.group,e.name));else if(!t)this.reach(`group ${e.group}`)}else if(e?.kind==="palette"&&!t&&!e.entry.default){let n=Vs(e.entry);if(n===void 0)this.climb(e.entry.group,`group ${e.entry.group}`);else this.climb(n,`catalog ${n}`)}}window(){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 t=this.rows.slice(this.top,this.top+this.maxItems);return{lines:t.map((e,n)=>this.renderRow(e,this.top+n)),above:this.top,below:this.rows.length-this.top-t.length}}renderRow(t,e){if(t.kind==="rule")return` ${this.color?`${A}${"── Markets ──────────"}${At}`:"── Markets ──────────"}`;return Zs(e,"row",this.rowText(t,e))}rowText(t,e){let n=e===this.cursor,r=t.kind==="palette"?t.entry:t.kind==="all"?void 0:t.lead,i=this.color&&n&&r!==void 0,s=(E)=>this.color?`${A}${E}${ge}`:E,o=(E)=>this.color?`${at}${E}${ge}`:E,a=(E)=>this.color?` ${Up(hc(E),i?Be(E.foreground):"\x1B[39m")}`:"",c=n?i?`${Be(r.cursor)}▌\x1B[39m `:"▌ ":" ",u=(E)=>i?`${c}${Ga(r.selection,r.foreground)} ${E} ${At}`:`${c} ${E}`,l=(E)=>Zs(e,"box",`${E?"●":"○"} `),f=(E)=>Zs(e,"fold",`${E?"▾":"▸"} `);if(t.kind==="all")return u(`${l(this.everyone(this.rows).every((E)=>this.picked.has(E.name)))}Select all ${s(`(${t.count})`)}`);if(t.kind==="group"&&this.scope==="series"){let E=`(${t.count})${t.native?` ${t.native}`:""}`;return u(`${l(this.pickedIn(t.name)===t.count)}${o(t.name.padEnd(this.seriesPad))}${a(t.lead)}${this.color?" ":" "}${s(E)}`)}let d=this.rows[this.cursor],h=(E,S)=>this.color&&d?.kind==="palette"&&E?`${at}${Be(d.entry.cursor)}${S}${ge}\x1B[39m`:o(S);if(t.kind==="group"){let E=h(d?.kind==="palette"&&d.entry.group===t.name,t.name),S=t.native?` ${s(t.native)}`:"";return u(`${f(t.expanded)}${E} ${s(`(${this.pickedIn(t.name)}/${t.count})`)}${S}`)}if(t.kind==="catalog"){let E=d?.kind==="palette"&&Vs(d.entry)===ha(t.group,t.name),S=s(`(${this.pickedIn(t.group,t.name)}/${t.count})`);return u(` ${f(t.expanded)}${h(E,t.name)} ${S}`)}let m=t.entry,$=this.indent(m),g=Fy(m),b=this.color?g.padEnd(this.namePad-$.length):g,y=n?o(b):b;return u(`${$}${l(this.picked.has(m.name))}${y}${a(m)}`)}}function rm(t){let e=t.named[Math.floor(Math.random()*t.named.length)],n=t.series[Math.floor(Math.random()*t.series.length)];return e&&n?`${e.name} | ${n}`:""}class Uu{fx;make;redraw;roller;example="";step=0;seed=0;timer;constructor(t,e,n){this.fx=t,this.make=e,this.redraw=n,this.roll(),this.roller=setInterval(()=>{this.roll(),this.step=8,this.redraw()},3000),this.roller.unref?.()}stop(){clearInterval(this.roller),clearTimeout(this.timer)}roll(){let t=this.make();this.example=t.length>30?`${t.slice(0,29)}…`:t,this.seed=Math.floor(Math.random()*997)}text(){if(this.step===0)return this.example;if(!this.timer)this.timer=setTimeout(()=>{this.timer=void 0,this.step-=1,this.redraw()},60),this.timer.unref?.();let t=Math.floor(this.example.length*(8-this.step)/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.seed)%3<t||n(r)?r:e[Math.floor(Math.random()*e.length)]??r).join("")}}var rP=5;class im{picked;list;scope;color;required;most;hint;field=new _r;input;output;state="active";error="";redraw=()=>{};constructor(t){this.scope=t.scope??"palette",this.picked=new Set(t.installed??[]),this.color=t.color??!0,this.required=t.required??!1,this.most=t.maxItems??12,this.input=t.input,this.output=t.output,this.list=new ma({entries:t.entries,picked:this.picked,scope:this.scope,maxItems:this.most,color:this.color,...t.onFocus?{onFocus:t.onFocus}:{}}),this.hint=new Uu(t.fx??"typewriter",()=>rm(this.list),()=>this.redraw())}prompt(){return Br({input:this.input,output:this.output,modes:[Yn,Gr]},async(t)=>{let e=new Nh((r)=>t.write(r),()=>t.cols),n=()=>{return this.list.maxItems=Math.max(XA,Math.min(this.most,t.rows-rP)),this.draw()};this.redraw=()=>e.draw(n()),t.onResize(()=>e.redraw(n())),this.redraw();try{let r=await t.loop((i)=>{return this.take(i),this.state==="submit"||this.state==="cancel"?this.state:void 0},()=>this.redraw());return this.redraw=()=>{},e.end(this.draw()),r}finally{this.hint.stop()}})}take(t){if(t.kind==="paste"){this.field.paste(t.text),this.list.setFilter(this.field.value);return}if(t.kind!=="key")return;let e=t.key;if(this.state==="error")this.state="active";let n=Gu(e,this.list.maxItems);if(e==="esc"||e==="ctrl-c")this.state="cancel";else if(e==="enter")if(this.required&&this.picked.size===0)this.error=`Pick at least one ${this.scope}`,this.state="error";else this.state="submit";else if(e==="up"||e==="down")this.list.move(e==="up"?-1:1);else if(e==="left"||e==="right")this.list.fold(e==="right");else if(n!==void 0)this.list.move(n);else if(e===" ")this.list.pick();else if(this.field.key(e))this.list.setFilter(this.field.value)}draw(){let t=(m)=>this.color?`${A}${m}${At}`:m,e=(m)=>this.color?`${Ba}${m}${At}`:m,n=this.scope==="series"?"Series":"Catalog";if(this.state==="submit")return[`${t("◇")} ${n} ${t(`· ${this.list.pickedCount()} picked`)}`];if(this.state==="cancel")return[`${t(`◇ ${n} · cancelled`)}`];let r=this.field.value,i=`${e("◆")} ${n} ${t(`(${this.list.matched()}/${this.list.total()} · ${this.list.pickedCount()} picked)`)}`,s=this.hint.text(),o=`${e("│")} ${r?`${r}_`:t(`Search…${s?` e.g. ${s}`:""}`)}`,{lines:a,below:c}=this.list.window(),u=a.length>0?a.map((m)=>`${e("│")} ${m}`):[`${e("│")} ${t(`No ${this.scope==="series"?"series":"palettes"} match '${r}'`)}`];while(u.length<this.list.maxItems)u.push(e("│"));let l=c>0?`${e("│")} ${t(`↓ ${c} more`)}`:e("│"),f=this.scope==="series"?"":" · ←→ fold",d=this.scope==="series"?"continue":"install",h=this.state==="error"?`${e("└")} ${this.color?`${Vt}${this.error}${At}`:this.error}`:`${e("└")} ${t(`↑↓ move${f} · space pick · type to filter · enter ${d} · esc cancel`)}`;return[i,o,...u,l,h]}}var Qs=[{tab:"catalog",title:"Catalog",heading:"Discover palettes"},{tab:"installed",title:"Installed",heading:"Installed palettes"},{tab:"markets",title:"Markets",heading:"Manage markets"},{tab:"errors",title:"Errors",heading:"Problems"}],sm=34,iP=72,sP=94,oP=22,jy=40,_y=10,Gy=3,aP=600,cP=500,uP=300,By=12,lP="\x1B[7;1m",om={title:"",lines:[],brief:""};function pa(t){let e=t.trim();if(e!==z&&!e.includes("/")&&!e.startsWith("~"))return;try{return yr(e)}catch{return}}function fP(t){return t.charAt(0).toUpperCase()+t.slice(1)}class am{picked;tab="catalog";fields={catalog:new _r,installed:new _r,markets:new _r,errors:new _r};cursor={markets:0,errors:0};top={markets:0,errors:0};adds=new Map;removes=new Set;want=new Map;scope={catalog:void 0,installed:void 0};busy=new Map;failed=new Map;peeked=new Map;peekFailed=new Map;staging=new Set;timers=new Map;refreshed=[];inflight=new Set;markets;problems;kept;installed;startup;io;order;color;hub;owns;input;output;maxItems=12;paint;catalog;mine;hint;screen;state="active";phase="browse";offset=0;started=!1;log=[];working="";stopped;beat=0;asking;leaving;goto;repos;searching=!1;searchError;searched;asked=0;help=!1;worn;live;constructor(t){this.markets=t.markets,this.problems=t.problems,this.kept=t.kept,this.installed=new Set(t.installed),this.startup=t.startup,this.io=t.io,this.order=t.order??((n)=>n),this.color=t.color??!0,this.hub=t.hub,this.owns=t.owns??!1,this.input=t.input,this.output=t.output,this.live=t.lookups??!0,this.paint=t.onFocus,this.picked=new Set(t.installed);let e=this.entries();this.catalog=new ma({entries:e,picked:this.picked,color:this.color,maxItems:this.maxItems,onFocus:(n)=>this.focus("catalog",n)}),this.mine=new ma({entries:this.mineOf(e),picked:this.picked,color:this.color,maxItems:this.maxItems,onFocus:(n)=>this.focus("installed",n)}),this.hint=new Uu(t.fx??"typewriter",()=>rm(this.tab==="installed"?this.mine:this.catalog),()=>this.redraw());for(let n of t.due)this.update(n)}run(){let t=[...this.owns?[ju,Yn,Hi]:[],Gr,...Js()],e=this.owns?[]:[Yn,Hi];return Br({input:this.input,output:this.output,modes:t,assume:e},async(n)=>{let r=new Ri({write:(i)=>n.write(i),view:()=>this.state==="active"?{lines:this.view(),ticking:this.phase==="applying"}:void 0,beat:()=>{this.beat+=1}});this.screen=r,n.onResize(()=>{r.reset(),r.request()}),r.now();try{return await n.loop((i)=>{if(i.kind==="key")this.key(i.key);else if(i.kind==="paste")this.pasted(i.text);else if(i.kind==="mouse")this.mouse(i,r);return this.state==="active"?void 0:this.state},()=>r.soon())}finally{r.stop(),this.screen=void 0,this.hint.stop();for(let i of this.timers.values())clearTimeout(i);this.timers.clear()}})}applied(){return this.started}lines(){return this.log}failure(){return this.stopped}next(){return this.goto}async idle(){await Promise.allSettled([...this.inflight])}result(){let t=new Set(this.entries().map((e)=>e.name));return{picked:new Set([...this.picked].filter((e)=>t.has(e))),adds:[...this.adds.values()],removes:[...this.removes],auto:Object.fromEntries(this.want),refreshed:this.refreshed}}key(t){if(t==="ctrl-c"){this.state="cancel";return}if(this.help){if(t==="?"||t==="esc")this.help=!1;return}if(this.leaving!==void 0){if(t==="esc")this.leaving=void 0;else if(/^[yn]$/i.test(t)){if(t.toLowerCase()==="y")this.begin();else this.goto=this.leaving,this.state="cancel";this.leaving=void 0}return}if(this.asking){if(t==="esc")this.asking=void 0;else if(/^[yn]$/i.test(t))this.answer(t.toLowerCase()==="y");return}if(this.phase!=="browse"){this.steer(t);return}let e=Gu(t,this.maxItems),n=this.list();if(t==="enter")if(n?.foldable())n.flip();else if(this.dirty())this.phase="review",this.offset=0;else this.state="submit";else if((t==="esc"||t==="ctrl-u")&&this.fields[this.tab].value)this.clear();else if(t==="esc")this.state="cancel";else if(t==="?")this.help=!0;else if(e!==void 0)this.move(e);else if(t==="up"||t==="down")this.move(t==="up"?-1:1);else if(t==="left"||t==="right")this.side(t==="right");else if(t==="tab"||t==="shift-tab"){if(this.hub)this.leave(R0(this.hub,t==="tab"?1:-1))}else if(t==="shift-left"||t==="shift-right")this.switchTab(t==="shift-right"?1:-1);else if(t===" ")this.activate();else if(t==="ctrl-r"){let r=this.tab==="markets"?this.marketRow():void 0;if(r?.kind==="market"&&!this.adds.has(r.market.source))this.update(r.market.source);else if(r?.kind==="find")this.search()}else if(t==="ctrl-s")this.cycle();else if(this.fields[this.tab].key(t))this.typed()}pasted(t){if(this.phase==="browse"&&!this.help&&!this.asking&&this.leaving===void 0)this.fields[this.tab].paste(t),this.typed()}mouse(t,e){if(this.help){if(t.action==="release")this.help=!1;return}let n=e.point(t),r=n?.target,i=this.phase==="browse"&&this.leaving===void 0&&!this.asking;if(t.action==="wheel"){if(!t.sideways&&(i||this.phase!=="browse"))this.wheel(t.wheel);return}if(!r)return;if(t.action==="press"&&t.button==="left"){if(!i)return;if(r.kind==="tab")this.show(r.tab);else if(r.kind==="chip")this.scopeTo(r.source);else if(r.kind==="row")this.pointRow(r.at)}else if(t.action==="release"&&n?.inside){if(r.kind==="key")this.key(r.key);else if(r.kind==="page"){if(this.phase!=="browse")this.scroll(r.step*this.span());else if(i)this.move(r.step*this.maxItems)}else if(r.kind==="hub"){if(i&&this.hub&&r.tab!==this.hub)this.leave(N0(r.tab))}else if(r.kind==="row"&&i)this.openRow(r,t.count)}}wheel(t){if(this.phase!=="browse"){this.scroll(t);return}let e=this.list();if(e)e.move(t,!1);else this.move(t,!1)}pointRow(t){let e=this.list();if(e){e.point(t);return}this.cursor[this.tab==="markets"?"markets":"errors"]=t,this.watch()}openRow(t,e){let n=this.list();if(n){if(t.part==="box")n.pick();else if(t.part==="fold")n.flip();else if(e===2)n.open()}else if(t.part==="box"||e===2)this.activate()}typed(){let t=this.fields[this.tab].value;if(this.list()?.setFilter(t),this.tab==="markets")this.later("search",aP,()=>this.lookup()),this.watch()}clear(){this.fields[this.tab].value="";let t=this.list();if(t)t.clear();else this.typed()}redraw(){if(this.state==="active")this.screen?.request()}focus(t,e){if(this.tab===t&&this.state!=="submit"&&this.state!=="cancel")this.worn=e,this.paint?.(e)}track(t){this.inflight.add(t);let e=()=>this.inflight.delete(t);return t.then(e,e),t}list(){return this.tab==="catalog"?this.catalog:this.tab==="installed"?this.mine:void 0}active(){return[...this.markets.filter((t)=>!this.removes.has(t.source)),...this.adds.values()]}entries(){let t=this.active().flatMap((i)=>i.entries),e=new Set(t.map((i)=>i.name)),n=new Map,r=this.markets.filter((i)=>this.removes.has(i.source)).flatMap((i)=>i.entries);for(let i of[...this.kept,...r])if(this.installed.has(i.name)&&!e.has(i.name))n.set(i.name,i);return this.order([...t,...n.values()])}mineOf(t){return t.filter((e)=>this.installed.has(e.name))}scoped(t,e){let n=this.scope[e],r=n===void 0?void 0:this.active().find((s)=>s.source===n);if(!r)return this.scope[e]=void 0,t;let i=new Set(r.entries.map((s)=>s.name));return t.filter((s)=>i.has(s.name))}reload(){let t=this.entries();this.catalog.setEntries(this.scoped(t,"catalog")),this.mine.setEntries(this.scoped(this.mineOf(t),"installed"))}chips(t){let e=t==="catalog"?this.entries():this.mineOf(this.entries()),n=this.active().map((r)=>({source:r.source,label:r.id,count:r.entries.filter((i)=>!i.default&&(t==="catalog"||this.installed.has(i.name))).length})).filter((r)=>t==="catalog"||r.count>0||r.source===this.scope[t]);return[{source:void 0,label:"All",count:e.filter((r)=>!r.default).length},...n]}cycle(){let t=this.tab;if(t!=="catalog"&&t!=="installed"||this.active().length<2)return;let e=this.chips(t),n=Math.max(0,e.findIndex((r)=>r.source===this.scope[t]));this.scopeTo(e[(n+1)%e.length]?.source)}scopeTo(t){let e=this.tab;if(e!=="catalog"&&e!=="installed")return;this.scope[e]=t,this.reload(),this.list()?.refocus()}switchTab(t){let e=Qs.findIndex((n)=>n.tab===this.tab);this.show(Qs[(e+t+Qs.length)%Qs.length]?.tab??"catalog")}show(t){if(this.tab=t,this.list()?.refocus(),t==="markets")this.lookup(),this.watch()}move(t,e=!0){let n=this.list();if(n){n.move(t,e);return}let r=this.tab==="markets"?"markets":"errors",i=r==="markets"?this.marketRows().map((s)=>s.kind==="rule"):this.problemRows().map(()=>!1);this.cursor[r]=nm(this.cursor[r],t,i.length,(s)=>i[s]===!0,e),this.watch()}side(t){let e=this.list();if(e){e.fold(t);return}let n=this.tab==="markets"?this.marketRow():void 0;if(n?.kind==="market"&&!ct(n.market.source))if(t===n.market.auto)this.want.delete(n.market.source);else this.want.set(n.market.source,t)}activate(){let t=this.list();if(t){t.pick();return}let e=this.tab==="markets"?this.marketRow():void 0;if(e?.kind==="market")this.toggleMarket(e.market);else if(e?.kind==="add")this.load(e.source,!0);else if(e?.kind==="repo"){let n=this.known(e.source),r=this.marketRows().findIndex((i)=>i.kind==="market"&&i.market===n);if(n&&r>=0)this.cursor.markets=r;else if(!n)this.load(e.source,!0)}else if(e?.kind==="find")this.search()}toggleMarket(t){if(this.adds.has(t.source))this.adds.delete(t.source),this.want.delete(t.source);else if(this.removes.has(t.source))this.removes.delete(t.source);else this.removes.add(t.source);this.reload()}known(t){return[...this.markets,...this.adds.values()].find((e)=>Ms(e.source,t))}load(t,e){let n=this.peeked.get(t);if(n){if(e)this.arrive(t,n);return}if(e)this.staging.add(t);if(this.busy.has(t))return;this.failed.delete(t),this.peekFailed.delete(t),this.busy.set(t,"Fetching…"),this.track(this.io.fetch(t)).then((r)=>{if(this.busy.delete(t),this.peeked.set(t,r),this.staging.delete(t))this.arrive(t,r);this.redraw()},(r)=>{if(this.busy.delete(t),this.staging.delete(t))this.failed.set(t,r.message);else this.peekFailed.set(t,r.message);this.redraw()})}arrive(t,e){let n=this.active().find((r)=>r.id===e.id);if(n)this.failed.set(t,`${e.id} already names the market at ${n.shown}`);else if(ct(t)||t===z)this.stage(e,e.auto);else this.asking=e;this.redraw()}later(t,e,n){this.cancel(t),this.timers.set(t,setTimeout(()=>{if(this.timers.delete(t),this.state!=="submit"&&this.state!=="cancel")n()},e))}cancel(t){clearTimeout(this.timers.get(t)),this.timers.delete(t)}wants(t){return!this.known(t)&&!this.peeked.has(t)&&!this.busy.has(t)&&!this.peekFailed.has(t)}watch(){if(!this.live||this.tab!=="markets")return;let t=pa(this.fields.markets.value);if(t&&this.wants(t))this.later("typed",cP,()=>this.load(t,!1));else this.cancel("typed");let e=this.marketRow();if(e?.kind==="repo"&&this.wants(e.source)){let n=e.source;this.later("focus",uP,()=>{let r=this.marketRow();if(this.tab==="markets"&&r?.kind==="repo"&&r.source===n)this.load(n,!1)})}else this.cancel("focus")}answer(t){let e=this.asking;if(this.asking=void 0,e)this.stage(e,t)}stage(t,e){if(this.adds.set(t.source,t),e===t.auto)this.want.delete(t.source);else this.want.set(t.source,e);this.reload(),this.cursor.markets=Math.max(0,this.marketRows().findIndex((n)=>n.kind==="market"&&n.market.source===t.source))}update(t){if(this.busy.has(t))return;this.failed.delete(t),this.busy.set(t,"Updating…"),this.track(this.io.refresh(t)).then(({market:e,refreshed:n})=>{this.busy.delete(t),this.markets=this.markets.map((r)=>r.source===t?e:r),this.problems=this.problems.filter((r)=>r.source!==t),this.refreshed.push(n),this.reload(),this.redraw()},(e)=>{this.busy.delete(t),this.failed.set(t,`Update failed: ${e.message}`),this.redraw()})}wanted(){let t=this.fields.markets.value.trim();return t&&!pa(t)?t:""}lookup(){if(this.live&&this.searched!==this.wanted())this.search()}search(){let t=this.wanted(),e=++this.asked;this.searched=t,this.searching=!0,this.searchError=void 0,this.track(this.io.search(t||void 0)).then((n)=>{if(e===this.asked)this.searching=!1,this.repos=n,this.watch(),this.redraw()},(n)=>{if(e===this.asked)this.searching=!1,this.searchError=n.message,this.redraw()})}marketRows(){let t=(...s)=>di(s,this.fields.markets.value),e=[...this.markets,...this.adds.values()],n=e.filter((s)=>t(s.id,s.shown,s.source)).map((s)=>({kind:"market",market:s})),r=pa(this.fields.markets.value);if(r&&!e.some((s)=>Ms(s.source,r)))n.push({kind:"add",source:r});let i=(this.repos??[]).map((s)=>({repo:s,source:Zh(s)})).filter(({repo:s,source:o})=>t(o,s.description??""));return n.push({kind:"rule"},...i.length>0?i.map(({repo:s,source:o})=>({kind:"repo",repo:s,source:o})):[{kind:"find"}]),n}marketRow(){let t=this.marketRows();return t[this.at(t,"markets",(e)=>e?.kind==="rule")]}problemList(){let t=new Map([...this.markets,...this.adds.values()].map((e)=>[e.source,e.id]));return[...this.problems.filter((e)=>!(e.update&&e.source&&this.failed.has(e.source))),...[...this.failed].map(([e,n])=>({where:t.get(e)??e,message:n,source:e}))]}problemRows(){return this.problemList().filter((t)=>di([`${t.where} ${t.message}`],this.fields.errors.value))}at(t,e,n=()=>!1){let r=Math.min(this.cursor[e],Math.max(0,t.length-1));if(!n(t[r]))return r;return r>0?r-1:r+1}windowOf(t,e,n,r=()=>!1){let i=this.at(t,e,r);this.cursor[e]=i;let s=(l)=>r(t[l])?1:2,o=(l,f)=>{let d=0;for(let h=l;h<=f;h++)d+=s(h);return d},a=Math.min(this.top[e],i);while(a<i&&o(a,i)>this.maxItems)a+=1;while(a>0&&o(a-1,t.length-1)<=this.maxItems)a-=1;this.top[e]=a;let c=[],u=0;for(let l=a;l<t.length&&u+s(l)<=this.maxItems;l++)c.push(l),u+=s(l);return{lines:c.flatMap((l)=>{let f=n(t[l],l===i,l);return r(t[l])?f:f.map((d)=>Zs(l,"row",d))}),above:a,below:t.length-a-c.length}}dim(t){return this.color?`${A}${t}${ge}`:t}bold(t){return this.color?`${at}${t}${ge}`:t}warn(t){return this.color?`${Vt}${t}\x1B[39m`:t}lit(t,e,n){if(e&&this.color&&t)return`${Be(t.cursor)}▌\x1B[39m ${Ga(t.selection,t.foreground)} ${n} ${At}`;return`${e?"▌ ":" "} ${n}`}status(t){return this.adds.has(t.source)?"Will add":this.removes.has(t.source)?"Will remove":this.busy.get(t.source)??(this.failed.has(t.source)||t.status.startsWith("update failed")?"Update failed":"")}note(t){return` ${this.dim(t)}`}peeking(t){let e=this.peeked.get(t);return e?Rt(e.entries.filter((n)=>!n.default).length):""}marketLine(t,e,n){let r=(s)=>Zs(n,"box",`${s} `);if(t.kind==="rule")return[` ${this.dim(`── On GitHub${this.searching?" · searching…":""} ──────────`)}`];if(t.kind==="market"){let s=t.market,o=this.status(s),a=e?this.bold(s.id):s.id,c=s.entries.filter((l)=>!l.default),u=!ct(s.source)&&(this.want.get(s.source)??s.auto)?` ${this.dim("↻ auto-update")}`:"";return[this.lit(s.entries.find((l)=>!l.default),e,`${r(this.removes.has(s.source)?"○":"●")}${a}${u}${o?` ${this.dim(o)}`:""}`),this.note([s.source===z?"The ttheme catalog":ct(s.source)?s.shown:s.source,Rt(c.length),`${c.filter((l)=>this.installed.has(l.name)).length} installed`,s.status].join(" · "))]}if(t.kind==="add"){let s=this.busy.get(t.source),o=this.failed.get(t.source)??this.peekFailed.get(t.source),a=this.peeked.get(t.source);return[this.lit(void 0,e,`${r("+")}Add ${Z(t.source)}${s?` ${this.dim(s)}`:""}`),o?` ${this.warn(o)}`:this.note(a?`${a.id} · ${this.peeking(t.source)}`:this.live?"Fetching its palettes…":"space fetches its palettes")]}if(t.kind==="find"){let s=this.fields.markets.value.trim(),o=s&&!pa(s),a=!this.searching&&!this.searchError&&this.repos===void 0,c=this.searching?"Searching GitHub…":this.searchError?"GitHub search failed":a?o?`Find "${s}" on GitHub`:"Find markets on GitHub":o?`No market on GitHub matches "${s}"`:"No market on GitHub yet";return[this.lit(void 0,e,`${r("⌕")}${c}`),this.note(this.searchError??(this.searching?"":a?"space searches GitHub":"space searches again"))]}let i=this.busy.get(t.source);return[this.lit(void 0,e,`${r(this.known(t.source)?"●":"○")}${t.source} ${this.dim(`★${t.repo.stargazers_count}`)}${i?` ${this.dim(i)}`:""}`),this.note([this.peeking(t.source),t.repo.description??""].filter(Boolean).join(" · "))]}problemLine(t,e){return[this.lit(void 0,e,`${this.warn("✗")} ${t.where}`),this.note(t.message)]}body(){let t=this.list();if(t){let n=this.fields[this.tab].value;return{...t.window(),empty:n?`No palettes match '${n}'`:this.tab==="installed"?"Nothing installed yet":"No palettes"}}if(this.tab==="markets")return{...this.windowOf(this.marketRows(),"markets",(n,r,i)=>this.marketLine(n,r,i),(n)=>n?.kind==="rule"),empty:""};let e=this.fields.errors.value;return{...this.windowOf(this.problemRows(),"errors",(n,r)=>this.problemLine(n,r)),empty:e?`No problems match '${e}'`:"No problems"}}changes(){return this.adds.size+this.removes.size+this.want.size}dirty(){let{picked:t}=this.result();return this.changes()>0||t.size!==this.installed.size||[...t].some((e)=>!this.installed.has(e))}leave(t){if(this.dirty()){this.leaving=t;return}this.goto=t,this.state="cancel"}steer(t){if(this.phase==="review"){if(t==="enter")this.begin();else if(t==="esc")this.phase="browse"}else if(this.phase==="done"&&(t==="enter"||t==="esc"))this.state="submit";let e=t==="up"?-1:t==="down"?1:Gu(t,this.span());if(e!==void 0)this.scroll(e)}scroll(t){this.offset=Number.isFinite(t)?Math.max(0,this.offset+t):t>0?Number.MAX_SAFE_INTEGER:0,this.redraw()}span(){return Math.max(Gy,this.rows()-(this.hub?1:0)-4)}begin(){this.phase="applying",this.started=!0,this.offset=0,this.log=[],this.working="";let t={say:(e)=>{this.log.push(...e.split(`
657
+ `)),this.redraw()},status:(e)=>{this.working=e,this.redraw()}};this.track(this.io.apply(this.result(),t)).then(()=>this.ended(),(e)=>this.ended(e))}ended(t){this.working="",this.stopped=t,this.phase="done",this.offset=0,this.redraw()}pending(){let t=this.entries().filter((e)=>!e.default);return{names:t.filter((e)=>this.picked.has(e.name)&&!this.installed.has(e.name)),dropped:t.filter((e)=>this.installed.has(e.name)&&!this.picked.has(e.name))}}marketChanges(){let t=[];for(let e of this.adds.values()){let n=e.source!==z&&(this.want.get(e.source)??e.auto)?"updates on its own":"";t.push(`+ ${e.id} ${this.dim([e.source===z?"The ttheme catalog":e.shown,Rt(e.entries.filter((r)=>!r.default).length),n].filter(Boolean).join(" · "))}`)}for(let e of this.removes){let n=this.markets.find((i)=>i.source===e),r=(n?.entries??[]).filter((i)=>!i.default&&this.installed.has(i.name)&&this.picked.has(i.name));t.push(`- ${n?.id??e} ${this.dim([n?.shown??Z(e),r.length>0?`its ${Rt(r.length)} installed keep working`:""].filter(Boolean).join(" · "))}`)}for(let[e,n]of this.want){let r=this.markets.find((i)=>i.source===e);if(r&&!this.removes.has(e))t.push(`↻ ${r.id} ${this.dim(n?"updates on its own from now":"stops updating on its own")}`)}return t}reviewLines(){let t=this.marketChanges(),{names:e,dropped:n}=this.pending(),r=Math.max(0,...[...e,...n].map((o)=>o.name.length)),i=(o,a)=>` ${o} ${a.name.padEnd(r)} ${this.dim(lt(a.name)?a.catalog??"":a.group)}`,s=[e.length>0?`${e.length} to install`:"",n.length>0?`${n.length} to remove`:""].filter(Boolean);return[...t.length>0?[` ${this.bold("Markets")} ${this.dim(`(${t.length})`)}`,...t.map((o)=>` ${o}`),""]:[],...s.length>0?[` ${this.bold("Palettes")} ${this.dim(`(${s.join(" · ")})`)}`,...e.map((o)=>i("+",o)),...n.map((o)=>i("-",o))]:[]]}summary(){let{names:t,dropped:e}=this.pending(),n=this.adds.size;return[n>0?`${n} market${n===1?"":"s"} added`:"",this.removes.size>0?`${this.removes.size} removed`:"",t.length>0?`${t.length} installed`:"",e.length>0?`${e.length} removed`:""].filter(Boolean).join(" · ")}progressLines(){let t=this.log.map((e)=>` ${e}`);if(this.phase==="applying"){let e=xn[this.beat%xn.length];t.push(` ${this.dim(`${e} ${this.working||"Working…"}`)}`)}else if(this.stopped)t.push("",...bt(this.stopped.message,Math.max(20,this.columns()-6)).map((e,n)=>` ${n===0?this.warn("✗"):" "} ${e}`));return t}frame(t,e){let n=t-1,r=this.phase==="review",i=r?this.reviewLines():this.progressLines(),s=this.phase==="review"?`${this.bold("Review changes")}`:this.phase==="applying"?this.bold("Applying changes"):this.stopped?`${this.warn("✗")} ${this.bold("Stopped")}`:`${this.bold("✓ Applied")} ${this.dim(this.summary()?`(${this.summary()})`:"")}`,o=this.span(),a=Math.max(0,i.length-o),c=this.phase==="applying"?a:Math.min(this.offset,a);this.offset=c;let u=i.slice(c,c+o),l=i.length-c-u.length,f=[c>0?` ${this.more(-1,`↑ ${c} more`)}`:"",...u];while(f.length<o+1)f.push("");f.push(l>0?` ${this.more(1,`↓ ${l} more`)}`:"");let d=a>0?[["↑↓","scroll"]]:[],h=r?{badge:"BROWSE (APPLY)",keys:[...d,["enter","apply"]],right:["esc","back"]}:this.phase==="applying"?{badge:"BROWSE (APPLY)",note:"Keys wait until it ends",keys:[]}:{badge:"BROWSE (APPLY)",keys:d,right:["enter","close"]};return[...this.hub?[ot(gd(this.hub,this.color),n,!1)]:[],ot(` ${s}`,n,!1),...f.map((m)=>ot(m,n,!1)),` ${this.keyBar(h,n-1)}`].slice(0,e).join(`
658
+ `)}keyBar(t,e){let n=this.color&&this.worn?Be(this.worn.cursor):"",r=this.color?`\x1B[7;1m${n} ${t.badge} ${At} `:`[${t.badge}] `,i=([c,u])=>gn(c.split(" ")[0]??"",`${this.bold(c)} ${this.dim(u)}`),{note:s,keys:o,right:a}=t;for(;;){let c=`${r}${[t.lead??"",s?this.dim(s):"",...o.map(i)].filter(Boolean).join(" ")}`,u=a?i(a):"";if(X(c)+(a?3+X(u):0)<=e)return a?Gt(c,u,e):ot(c,e,!1);if(s)s=void 0;else if(o.length>2||!a&&o.length>1){let l=o.length-2;o=o.filter((f,d)=>d!==l)}else if(a)a=void 0;else return ot(c,e,!1)}}more(t,e){return this.dim(le({kind:"page",step:t},e))}counts(){let t=[...this.busy.values()].includes("Updating…")?"Updating… · ":"",e=this.list();if(e)return`${t}${e.matched()}/${e.total()} · ${e.pickedCount()} picked`;if(this.tab==="markets"){let n=this.markets.length+this.adds.size,r=this.marketRows().filter((s)=>s.kind==="market").length,i=this.changes();return`${t}${r}/${n}${i>0?` · ${i} to apply`:""}`}return`${this.problemRows().length}/${this.problemList().length}`}searchText(){let t=this.fields[this.tab].value;if(t)return`${t}_`;if(this.tab==="markets")return this.dim("Search… or add one: owner/repo");let e=this.tab==="errors"?"":this.hint.text();return this.dim(`Search…${e?` e.g. ${e}`:""}`)}tabBar(){return Qs.map(({tab:t,title:e})=>{let n=t==="errors"?this.problemList().length:0,r=n>0?`${e} ${n}`:e,i={kind:"tab",tab:t};if(!this.color)return le(i,t===this.tab?`[${r}]`:` ${r} `);return`${t===this.tab?lP:A}${le(i,` ${r} `)}${At}`}).join(" ")}heading(){let t=Qs.find((e)=>e.tab===this.tab)?.heading??"";return`${this.bold(t)} ${this.dim(`(${this.counts()})`)}`}searchBox(t){let e=(r,i)=>this.dim(`${r}${"─".repeat(t-2)}${i}`),n=this.dim("│");return[e("╭","╮"),`${n} ${ot(`${this.dim("⌕")} ${this.searchText()}`,t-4)} ${n}`,e("╰","╯")]}strip(t){let e=this.tab;if(e!=="catalog"&&e!=="installed"||this.active().length<2)return;let n=this.chips(e),r=Math.max(0,n.findIndex((g)=>g.source===this.scope[e])),i=n.map((g,b)=>b===r&&!this.color?`[${g.label} ${g.count}]`:`${g.label} ${g.count}`),s=" · ",o=(g)=>g>0?`${s}+${g} more`.length:0,a=(g)=>{let b=g>0?2:0,y=0;for(let E=g;E<i.length;E++){let S=b+(y>0?s.length:0)+i[E].length;if(S+o(i.length-E-1)>t)break;b=S,y+=1}return y},c=0;while(c<r&&c+a(c)<=r)c+=1;let u=Math.max(1,a(c)),l=i.slice(c,c+u),f=i.length-c-u,d=l.map((g,b)=>{let y=le({kind:"chip",source:n[c+b]?.source},g);if(c+b===r)return this.color?`${at}${Ba}${y}${At}`:y;return this.dim(y)}),h=`${c>0?`${this.dim(gn("ctrl+s","…"))} `:""}${d.join(this.dim(s))}${f>0?this.dim(`${s}${gn("ctrl+s",`+${f} more`)}`):""}`,m=(c>0?2:0)+l.join(s).length+o(f),$="ctrl+s market";return m+2+$.length<=t?`${h} ${this.dim(gn("ctrl+s",$))}`:h}sourceOf(t){let e=this.active().find((n)=>n.entries.some((r)=>r.name===t.name));if(!e)return"In no market you added";return e.source===z?"The ttheme catalog":e.shown}paletteState(t){let e=this.picked.has(t.name),n=this.installed.has(t.name),r=e&&n?"Installed":e?"Will install":n?"Will remove":"Not installed";return this.startup===t.name?`${r} · Default`:r}paletteDetail(t,e){if(!t||t.kind==="rule")return om;if(t.kind==="all")return{title:this.bold("Select all"),lines:["space picks every palette shown"],brief:""};if(t.kind==="group"){let u=this.entries().filter((d)=>d.group===t.name&&!d.default),l=this.sourceOf(t.lead),f=`${Rt(u.length)} · ${u.filter((d)=>this.installed.has(d.name)).length} installed`;return{title:this.bold(t.name),lines:[...t.native?bt(t.native,e).map((d)=>this.dim(d)):[],...bt(l,e),f],brief:`${l} · ${f}`}}if(t.kind==="catalog"){let u=this.entries().filter((d)=>d.group===t.group&&d.catalog===t.name),l=this.sourceOf(t.lead),f=`${Rt(u.length)} · ${u.filter((d)=>this.installed.has(d.name)).length} installed`;return{title:this.bold(t.name),lines:[t.group,...bt(l,e),f],brief:`${t.group} · ${f}`}}let n=t.entry,r=this.sourceOf(n),i=Lo(n),s=`Gate ${we.length-i.length}/${we.length}`,o=n.pictures?.length??0,a=[...o>0?[`${o} picture${o===1?"":"s"}`]:[],...n.base?[`Base ${n.base}`]:[]].join(" · "),c=lt(n.name)?n.catalog?[n.catalog]:[]:[n.group,...n.native?[this.dim(n.native)]:[]];return{title:this.color?`${at}${Be(n.cursor)}${n.name}${ge}\x1B[39m`:n.name,lines:[...bt(r,e),...c,this.paletteState(n),"",i.length===0?`${s} · passes`:s,...i.flatMap((u)=>bt(u,e-2).map((l,f)=>`${f===0?this.warn("✗"):" "} ${l}`)),...a?["",a]:[]],brief:[r,s,...a?[a]:[],this.paletteState(n)].join(" · ")}}marketDetail(t,e){if(!t||t.kind==="rule")return om;if(t.kind==="market"){let i=t.market,s=i.source===z?"The ttheme catalog":i.shown,o=i.entries.filter((h)=>!h.default),a=o.filter((h)=>this.installed.has(h.name)).map((h)=>h.name),c=`${Rt(o.length)} · ${a.length} installed`,u=ct(i.source)?"Read in place":`Auto-update ${this.want.get(i.source)??i.auto?"on":"off"}`,l=this.busy.get(i.source)??fP(i.status),f=this.failed.get(i.source),d=this.adds.has(i.source)?["Will add"]:this.removes.has(i.source)?[a.length>0?`Will remove — ${a.join(", ")} stay${a.length===1?"s":""} installed`:"Will remove"]:this.want.has(i.source)?[`Auto-update turns ${this.want.get(i.source)?"on":"off"}`]:[];return{title:this.bold(i.id),lines:[...bt(s,e),...i.description?bt(i.description,e).map((h)=>this.dim(h)):[],c,"",ct(i.source)?u:`${u} ${this.dim("←→")}`,...ct(i.source)?[]:[l],...f?bt(f,e).map((h)=>this.warn(h)):[],...d.length>0?["",...d.flatMap((h)=>bt(h,e))]:[]],brief:[s,u,...d,...ct(i.source)?[]:[l]].join(" · ")}}if(t.kind==="add"){let i=this.busy.get(t.source)??this.failed.get(t.source)??this.peekFailed.get(t.source)??(this.peeked.has(t.source)?"space adds it":this.live?"Fetching its palettes…":"space fetches its palettes");return{title:this.bold(Z(t.source)),lines:["Not added",...this.peekLines(t.source,e),"",...bt(i,e)],brief:[this.peeking(t.source),i].filter(Boolean).join(" · ")}}if(t.kind==="find"){let i=this.fields.markets.value.trim(),s=this.searchError??(this.searching?"Searching…":this.repos?`${this.repos.length} found · space searches again`:"space searches GitHub");return{title:this.bold("GitHub"),lines:[...bt(`Repositories with the ${Es} topic`,e),...i&&!pa(i)?[`Matching "${i}"`]:[],"",...bt(s,e)],brief:s}}let r=this.known(t.source)?"Added":this.busy.get(t.source)??this.failed.get(t.source)??this.peekFailed.get(t.source)??"space adds it";return{title:this.bold(t.source),lines:[`★ ${t.repo.stargazers_count}`,...bt(t.repo.description??"",e),...this.peekLines(t.source,e),"",...bt(r,e)],brief:[this.peeking(t.source),r].filter(Boolean).join(" · ")}}peekLines(t,e){let n=this.peeked.get(t);if(!n)return[];let r=n.entries.filter((s)=>!s.default),i=`${r.slice(0,By).map((s)=>ae(s.name)).join(", ")}${r.length>By?", …":""}`;return["",n.id,...n.description?bt(n.description,e):[],Rt(r.length),...bt(i,e).map((s)=>this.dim(s))]}detail(t){let e=this.list();if(e)return this.paletteDetail(e.focusedRow(),t);if(this.tab==="markets")return this.marketDetail(this.marketRow(),t);let n=this.problemRows(),r=n[Math.min(this.cursor.errors,n.length-1)];return r?{title:this.bold(r.where),lines:bt(r.message,t),brief:r.message}:om}footer(){if(this.help)return{badge:"HELP",keys:[],right:["? esc","close"]};if(this.leaving!==void 0)return{badge:"BROWSE",lead:"Apply your changes before you leave?",keys:[["y","apply"],["n","discard"]],right:["esc","stay"]};if(this.asking)return{badge:"BROWSE",lead:`Update ${this.asking.id} on its own when its author changes it?`,keys:[["y","yes"],["n","no"]],right:["esc","back"]};let t=this.fields[this.tab].value,e=["enter",this.dirty()?"apply":"close"],n=[["⇧←→","tabs"],...t?[["bksp","edit"]]:[],["?","keys"]];return{badge:t?"BROWSE (FILTER)":"BROWSE",keys:[...this.rowKeys(e),...n],right:t?["esc","clear filter"]:["esc","cancel"]}}rowKeys(t){let e=this.list();if(e){let r=e.focusedRow();if(!r)return[t];if(e.foldable())return[(r.kind==="group"||r.kind==="catalog")&&r.expanded?["←","close"]:["→","open"],["space","pick"]];return[["space","pick"],t]}if(this.tab==="errors")return[t];let n=this.marketRow();if(n?.kind==="market"){let r=n.market;return[["space",this.adds.has(r.source)||this.removes.has(r.source)?"undo":"remove"],...ct(r.source)?[]:[["←→","auto-update"]],...this.adds.has(r.source)?[]:[["ctrl+r","update"]],t]}if(n?.kind==="find")return[["space","search"],t];if(n?.kind==="add"||n?.kind==="repo"&&!this.known(n.source))return[["space","add"],t];return[t]}columns(){return(this.output??process.stdout).columns??100}rows(){return(this.output??process.stdout).rows??24}fitItems(t){let e=Math.max(Gy,this.rows()-t);this.maxItems=e,this.catalog.maxItems=e,this.mine.maxItems=e}view(){let t=this.draw().split(`
659
+ `);return Array.from({length:this.rows()},(e,n)=>t[n]??"")}draw(){let t=this.columns(),e=this.rows();if(t<jy||e<_y)return`Needs ${jy}×${_y} — now ${t}×${e}
660
+ ${this.dim("esc cancels")}`;if(this.phase!=="browse")return this.frame(t,e);let n=t>=sP,r=t-1,i=n?Math.min(t-sm-4,iP):r,s=this.strip(r-1),o=[` ${this.tabBar()}`,...e>=oP?[` ${this.heading()}`,...this.searchBox(t-3).map((g)=>` ${g}`)]:[Gt(` ${this.dim("⌕")} ${this.searchText()}`,this.dim(this.counts()),r)],...s?[` ${s}`]:[]];this.fitItems(o.length+3+(n?0:1)+(this.hub?1:0));let{lines:a,above:c,below:u,empty:l}=this.body(),f=a.length>0?a.map((g)=>` ${g}`):[` ${this.dim(l)}`];while(f.length<this.maxItems)f.push("");let d=[c>0?` ${this.more(-1,`↑ ${c} more`)}`:"",...f,u>0?` ${this.more(1,`↓ ${u} more`)}`:""],h=this.detail(n?sm:i-2),m=n?d.map((g,b)=>`${ot(g,i)} ${this.dim("│")} ${ot(b===0?h.title:h.lines[b-1]??"",sm,!1)}`):[...d.map((g)=>ot(g,i,!1)),ot(` ${this.dim(h.brief)}`,i,!1)],$=[...this.hub?[ot(gd(this.hub,this.color),r,!1)]:[],...o.map((g)=>ot(g,r,!1)),...m,` ${this.keyBar(this.footer(),r-1)}`];return(this.help?this.helpBox($,t,e,$.length-m.length-1):$).join(`
661
+ `)}helpRows(){return[["Move","↑↓ home end pgup pgdn"],["Series","←→ · enter on a series"],["Pick","space · a palette, a series, all"],["Filter","Any text · bksp · ctrl-u clears"],["","Each tab keeps its own"],["Tabs","⇧←→ Catalog, Installed, Markets, Errors"],...this.active().length>=2?[["Market","ctrl+s · one market, then all"]]:[],["Markets","space adds or removes · ←→ auto-update"],["","ctrl+r updates it, or searches again"],["Apply","enter reviews and applies · esc cancels"],...this.hub?[["Screens","tab · shift+tab"]]:[],["Close","? esc"]]}helpBox(t,e,n,r){let i=this.helpRows(),s=Math.min(e-2,58),o=Math.floor((e-s)/2),a=`│${" ".repeat(s-2)}│`,c=[`╭─ Help ${"─".repeat(s-9)}╮`,a,...i.map(([l,f])=>`│${ot(` ${this.bold(l.padEnd(10))}${f}`,s-4)} │`),a,`╰${"─".repeat(s-2)}╯`],u=Math.max(0,Math.min(Math.max(r,Math.floor((n-c.length)/2)),n-1-c.length));return t.map((l,f)=>{let d=c[f-u];return d===void 0?l:`${Wp(l,o)}${d}`})}}import{existsSync as LC}from"node:fs";import{existsSync as Aa,mkdirSync as IC,readFileSync as Vm}from"node:fs";import{dirname as RC}from"node:path";class Ne extends Error{}import{closeSync as QH,mkdtempSync as XH,openSync as tF,readSync as eF,rmSync as Gv}from"node:fs";import{homedir as nF,tmpdir as rF}from"node:os";import{join as Bv}from"node:path";import{readFileSync as dP}from"node:fs";var gt={pitch:25,cols:22,rows:9,height:13},Ci={cols:25,rows:21},me={cols:10,rows:3,pitch:12,top:4},he=me.top+me.rows+1,hP=1073741824,mm=2147483648,mP=-1073741826,pP=1600,gP=56,bP=4,Uy=20,wP=50,Wy=[["space","unfolds a set of ×N"],["o","opens the post page in a browser"],["c","switches between cutouts and every post"],["a","opens the advanced filters"],["1-9","turn a tag of the tags row on or off"],["ctrl+v","tries on a picture from the clipboard — or drop one on the window"]];function pm(t){return Math.max(0,Math.floor((t-1)/me.pitch))}function Jn(t,e){let n=e-he-2;return{perRow:Math.max(1,Math.floor((t-1)/gt.pitch)),rowsVis:Math.max(1,Math.floor(n/gt.height)),height:n}}function Du(t,e=!0){if(e)return`\x1B_Ga=t,t=f,f=100,i=${t.id},q=2;${Buffer.from(t.path).toString("base64")}\x1B\\`;let n;try{n=dP(t.path).toString("base64")}catch{return}let r=n.match(/.{1,4096}/g)??[""];return r.map((i,s)=>{let o=s<r.length-1?1:0;return s===0?`\x1B_Ga=t,f=100,i=${t.id},m=${o},q=2;${i}\x1B\\`:`\x1B_Gm=${o},q=2;${i}\x1B\\`}).join("")}function Zy(t,e){let n=t.crop===void 0?"":`,x=0,y=${t.crop*e.h},w=${t.cols*e.w},h=${t.rows*e.h}`;return`\x1B[${t.row+1};${t.col+1}H\x1B_Ga=p,i=${t.id},p=${t.id}${n},c=${t.cols},r=${t.rows},C=1,z=${t.z},q=2\x1B\\`}function gm(t){return`\x1B_Ga=d,d=i,i=${t},p=${t},q=2\x1B\\`}function ka(t){return`\x1B_Ga=d,d=I,i=${t},q=2\x1B\\`}function Xs(t){return`\x1B[38;2;${rt(t).join(";")}m`}function zu(t){return`\x1B[48;2;${rt(t).join(";")}m`}var um=!1;function qu(t){return um=!0,t.beat}function to(t){return xn[qu(t)%xn.length]}function ft(t){return X(t)}function lm(t,e){if(X(t)<=e)return t;let n="";for(let r of t){if(X(n+r)>e)break;n+=r}return n}function Ur(t){return`\x1B[${30+t}m`}function Li(t,e,n,r){return n?[[`${uo} `,r,void 0,{kind:"link",url:n}],[t,e,n]]:[[t,e]]}function cm(t){let e=pd(t);return e?{kind:"key",key:e}:void 0}function fm(t){return t.reduce((e,[n])=>e+ft(n),0)}function $P(t,e){let n=[],r=e;for(let[i,s,o,a]of t){let c=ft(i);if(c<=r){n.push([i,s,o,a]),r-=c;continue}n.push([`${lm(i,r)}…`,s,o,a]);break}return n}class Ku{parts=[];cols;constructor(t){this.cols=t}put(t,e,n="",r,i){return this.parts.push({col:t,text:e,sgr:n,...r?{link:r}:{},...i?{spot:i}:{}}),t+ft(e)}run(t,e){let n=t;for(let[r,i,s,o]of e)n=this.put(n,r,i,s,o);return n}mark(t,e,n){this.parts.push({col:t,text:" ".repeat(Math.max(0,e)),sgr:"",spot:n,hidden:!0})}zones(t){return this.parts.flatMap(({col:e,text:n,link:r,spot:i})=>{let s=i??(r?{kind:"link",url:r}:void 0),o=e>=0&&e<this.cols?ft(lm(n,this.cols-e)):0;return s&&o>0?[{row:t,col:e,width:o,height:1,target:s}]:[]})}right(t,e){this.run(t-e.reduce((n,[r])=>n+ft(r),0),e)}center(t,e){this.run(Math.floor((t-e.reduce((n,[r])=>n+ft(r),0))/2),e)}render(){let t="";for(let{col:e,text:n,sgr:r,link:i,hidden:s}of this.parts){if(s||e>=this.cols||e<0)continue;let o=lm(n,this.cols-e);t+=`\x1B[${e+1}G${r}${Ua(o,i)}${r?At:""}`}return t}}function kP(t){return t.replace(/_\([^)]*\)?$/,"")}function Qy(t){return[`${t.reduced?"↓":""}${t.width}×${t.height}`,Math.max(t.width,t.height)<pP?Vt:A]}function wa(t,e,n,r){let i=[...r.keys??[]],s=r.lead,o=r.right,a=()=>{let l=[...s?[fm(s)]:[],...i.map(([d,h])=>ft(d)+1+ft(h))];return(r.badge?ft(r.badge)+4:0)+l.reduce((d,h)=>d+h,0)+3*Math.max(0,l.length-1)+(o?3+ft(o[0])+1+ft(o[1]):0)};while(a()>e)if(i.length>2)i.splice(-2,1);else if(o)o=void 0;else if(i.length>1)i.splice(-2,1);else break;if(s&&a()>e)s=$P(s,Math.max(0,fm(s)-(a()-e)-1));let c=0;if(r.badge)c=t.put(0,` ${r.badge} `,`\x1B[7;1m${n}`)+2;if([...s?[s]:[],...i.map(([l,f])=>[[l,at,void 0,cm(l)],[` ${f}`,A,void 0,cm(l)]])].forEach((l,f)=>{c=t.run(c+(f?3:0),l)}),o){let l=cm(o[0].split(" ")[0]??"");t.right(e,[[o[0],at,void 0,l],[` ${o[1]}`,A,void 0,l]])}}function yP(t,e){if(t==="d")return A;if(t==="b")return at;if(t==="s")return zu(e.colors.selection);if(t==="c")return zu(e.colors.cursor);let n=/^([BK]?)(\d+)$/.exec(t);if(!n)return"";let r=Number(n[2]),i=(s)=>r<8?s+r:s+52+r;if(n[1]==="K")return`\x1B[30;${i(40)}m`;return`\x1B[${n[1]==="B"?"1;":""}${i(30)}m`}function vP(t,e,n,r,i){let s=ie.indexOf(bi(r.scene)),o=ie.flatMap((c,u)=>[...u?[[" ",""]]:[],[c.name,u===s?at+i:A,void 0,{kind:"scene",scene:u}]]),a=o.reduce((c,[u])=>c+ft(u),0)<=n;t?.run(e,a?o:[[bi(r.scene).name,at+i],[` ${s+1}/${ie.length}`,A]])}function EP(t,e,n,r,i,s,o){let{ansi:a,cursor:c}=s.colors;vP(t[e-2],n,r,s,o);let u=r<r$?3:4;if(r>=56)u=Math.min(7,Math.floor((r+1)/8)-1);let l=n;for(let d=0;d<8;d++)l=(t[e]?.put(l,"▀".repeat(u),Xs(a[d]??c)+zu(a[d+8]??c))??l)+1;let f=e+2;for(let d of bi(s.scene).lines){let h=Dc(d,r);if(!h)continue;if(f>i)return;t[f]?.run(n,h.map(([m,$])=>[m,yP($,s)])),f++}}function SP(t,e,n){let r=[[]];for(let o of t){let a=r[r.length-1];if(a.length===0||ft([...a,o].join(" "))<=e)a.push(o);else if(r.length<n)r.push([o]);else break}let i=r.reduce((o,a)=>o+a.length,0),s=r[r.length-1];while(i<t.length&&s.length>0&&ft([...s,`+${t.length-i}`].join(" "))>e)s.pop(),i--;if(i<t.length)s.push(`+${t.length-i}`);return r.filter((o)=>o.length>0).map((o)=>o.join(" "))}function Ky(t){return t.replace(/^https?:\/\/(?:www\.)?/,"")}function MP(t,e,n,r,i){let s=r.info,o=s?.artists??[],a=Ur(r.tiles[r.focus]?.siteAnsi??r.siteAnsi);[["Post",s?.page?Li(Ky(s.page),"",s.page,a):[["—",A]]],["Source",s?.source?Li(Ky(s.source),"",s.link,i):[["—",A]]],["Artist",[o.length>0?[o.join(" "),""]:["—",A]]]].forEach(([u,l],f)=>{t[e+f]?.put(n,u,A),t[e+f]?.run(n+12,l)})}function OP(t,e,n,r,i,s){let o=s.info,a=s.tiles[s.focus];if(!o||!a)return;let c=s.shown?.id===a.key?s.shown:void 0,u=n+12,l=Math.max(12,r-12),f=[`${a.width}×${a.height}${o.ext?` ${o.ext.toUpperCase()}`:""}`,...c?[Ou(c.bytes)]:[]].join(" · "),d=[o.rating??"—",a.score>0?`★${a.score}`:"",o.posted??""].filter(Boolean).join(" · "),h=(g,b)=>g.length>0?SP(g,l,b).map((y)=>[[y,""]]):[[["—",A]]],m=[["Characters",h(o.characters,2)],["Series",h(o.series,1)],["Tags",h(o.tags,3)],["Rating",[[[d,d==="—"?A:""]]]],["File",[[[f,""],...c?[[" ",""]]:[],...c?Xy(c):[]]]],["Uploader",[[o.uploader?[o.uploader,""]:["—",A]]]]],$=e;for(let[g,b]of m){if($+b.length-1>i)return;t[$]?.put(n,g,A);for(let y of b)t[$]?.run(u,y),$++}}var xP=["Size","Position","Opacity"],IP=[0,3,6];function RP(t,e){let{tune:n,untuned:r}=t;return e===0?n.size!==r.size:e===1?n.at!==r.at:n.opacity!==r.opacity}function NP(t){return t.toFixed(2)}function TP(t,e,n,r,i,s){let o=i.tuning;if(!o)return;let a=i.tiles[i.focus];t[e-3]?.run(n,[[i.palette,at+s],[" Background",A],...a?[[" · ",A],...Li(`${a.site} ${a.id}`,A,a.page||void 0,Ur(a.siteAnsi))]:[]]);let c=Math.max(8,r-n-21),u=20,l=Math.max(100,o.fill);for(let[f,d]of xP.entries()){let h=e+IP[f],m=o.field===f,$=m?at:A;if(m)t[h]?.put(n,"▶",s,void 0,{kind:"field",field:f});t[h]?.put(n+2,d,$,void 0,{kind:"field",field:f});let g;if(f===1){for(let b=1;b<=9;b++){let y=b===i.tune.at,E=t[e+2+Math.floor((b-1)/3)],S=n+12+(b-1)%3*3;E?.mark(S-1,3,{kind:"place",at:b}),E?.put(S,y?"■":"·",y?at+s:A)}g=Ut[i.tune.at-1]??"center"}else{let b;if(f===0){let{size:y}=i.tune;b=y==="fill"?c-1:Math.floor((y-u)*(c-1)/(l-u+1)),g=y==="fill"?"fill":`${y}%`}else b=Math.floor(Math.round(i.tune.opacity*100)*(c-1)/100),g=NP(i.tune.opacity);b=Math.max(0,Math.min(c-1,b)),t[h]?.run(n+12,[["━".repeat(b),s],["●",at],["─".repeat(c-1-b),A]]),t[h]?.mark(n+12,c,{kind:"track",field:f})}if(t[h]?.right(r-2,[[g,$]]),RP(i,f))t[h]?.put(r-1,"↺",m?at+s:A)}}function AP(t,e,n,r,i,s){t[e]?.put(n,`╭${"─".repeat(i-2)}╮`,s);for(let o=e+1;o<e+r-1;o++)t[o]?.put(n,"│",s),t[o]?.put(n+i-1,"│",s);t[e+r-1]?.put(n,`╰${"─".repeat(i-2)}╯`,s)}function dm(t,e=t.site,n=t.siteAnsi){return[` ${e} `,`\x1B[7;${30+n}m`]}function ba(t){return`${Y[Math.floor(t/dr)]?.name??"local"} ${t%dr}`}function ga(t,e,n){let r=Y[Math.floor(e/dr)],i=ba(e),s=t.indexOf(i);if(!r||s===-1)return[[t,n]];return[[t.slice(0,s),n],...Li(i,n,r.pageUrl(e%dr),Ur(r.ansi)),[t.slice(s+i.length),n]].filter(([a])=>a!=="")}function PP(t,e,n){let r=[{name:"all",moved:!1},...Y].flatMap((s,o)=>{let a=`${s.name}${s.moved?"*":""}`,[c,u]=s.name===n.site?dm(n,a):[` ${a} `,A],l=[c,u,void 0,{kind:"site",tab:o}];return o?[[" ",""],l]:[l]}),i=r.reduce((s,[o])=>s+ft(o),0)<=e;t.run(0,i?r:[dm(n)])}function HP(t,e,n,r){if(n.chips.length===0)return;let i=[["tags ",A]],s=ft("tags "),o=n.chips.length;for(let[a,c]of n.chips.entries()){let u=` ${a+1} ${c.name} `;if(s+ft(u)+1>e-2)break;i.push([u,c.on?`\x1B[7m${r}`:A,void 0,{kind:"chip",index:a}],[" ",""]),s+=ft(u)+1,o--}if(o>0)i.push([`+${o}`,A]);t.run(0,i)}function FP(t,e,n,r,i){t[he-1]?.put(0,"─".repeat(n-1),A);let s=t[me.top-1],o=pm(n),a=r.held.length>o?Math.max(0,o-1):r.held.length;for(let[c,u]of r.held.slice(0,a).entries()){let l=c*me.pitch,f=u.up?at:"";if(s.run(l+1,u.page?Li(String(u.id),f,u.page,Ur(u.ansi)):[["● ",Ur(u.ansi)],[String(u.id),f]]),u.up)for(let d=0;d<me.rows;d++)t[me.top+d]?.put(l,"▌",i);if(u.thumb)e.push({id:hP+c,path:u.thumb,row:me.top,col:l+1,cols:me.cols,rows:me.rows,z:-1})}if(a<r.held.length)s.put(a*me.pitch+1,`+${r.held.length-a}`,A)}function CP(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"}`,A);return}let i=t.run(0,[["⌕ ",r,void 0,{kind:"query"}],[n.tag||"Nothing yet — / searches, ctrl+v pastes a picture",n.tag?"":A,void 0,{kind:"query"}]]),s=ii.filter((c)=>!n.block.includes(c)),o=Y.filter((c)=>!n.enabled.includes(c.name)).map((c)=>c.name),a=[n.preset,...n.solo?["solo"]:[],n.order,...n.rating.join("+")==="safe"?[]:[n.rating.join("+")],...s.length>0?[`allows ${s.join("+")}`]:[],...n.narrow.size>0?[`≥${n.narrow.size}px`]:[],...n.narrow.score>0?[`score≥${n.narrow.score}`]:[],...n.narrow.png?["png"]:[],...n.hide.length+n.hideTags.length>0?[`hides ${[...n.hide,...n.hideTags].join("+")}`]:[],...o.length>0?[`all skips ${o.join("+")}`]:[]];if(t.put(i,` ${a.join(" ")}`,A),n.total>0||!n.searching){let c=[[`${n.tiles.length}/${n.checked}`,""]];if(n.checked<n.total)c.push([` of ${n.total}`,A]);t.right(e,c)}}function Xy(t){if(t.cut==="on")return[[`Cut out · ${t.clear}% transparent`,Zi]];if(t.cut==="off")return[["Opaque · x cuts out",Vt]];if(t.cut==="failed")return[["Opaque · no cut-out",Vt]];return[t.clear>0?[`${t.clear}% transparent`,Zi]:["Opaque",Vt]]}function zy(t){return t.site==="all"?"any site":t.site}function hm(t,e){if(t.installing!==void 0)return ga(`${to(t)} Installing ${t.palette} ← ${ba(t.installing)}`,t.installing,Vt);if(t.hint)return[[t.hint,Zi]];if(t.error)return[[t.error,Vt]];if(t.waiting!==void 0)return[[`${t.slow??t.site} asked to slow down · ${t.waiting}s`,Vt]];if(t.fetching){let{id:n,got:r,size:i}=t.fetching;return ga(`${to(t)} Fetching ${ba(n)} · ${xu(r,i)}`,n,Vt)}if(t.cutting!==void 0)return ga(`${to(t)} Cutting out ${ba(t.cutting)}`,t.cutting,Vt);if(t.preparing!==void 0)return ga(`${to(t)} Preparing ${ba(t.preparing)}`,t.preparing,Vt);if(e)return[e];if(t.saved)return ga(t.saved.text,t.saved.key,Zi);if(t.note)return[[t.note,A]];return}function tv(t){if(t.ranking)return"Ranking previews by palette colors";if(t.stage==="check")return t.preset==="cutouts"?"Checking PNG headers":"Loading previews";return"Fetching posts"}function ev(t,e){return t.ranking?`${e}${t.ranking.done}/${t.ranking.total}`:""}function LP(t,e,n,r,i){let{background:s,cursor:o,selection:a}=r.colors,{ranking:c}=r,u=c?Math.round(n*c.done/c.total):-1,l=Math.max(6,Math.round(n*0.22)),f=qu(r)%(Uy*2)/Uy,d=Math.round((n-l)*(0.5-0.5*Math.cos(Math.PI*(f<1?f:2-f)))),h=Bt(s,o,i),m=Bt(s,Bt(a,s,0.15),i),$=Array.from({length:n},(b,y)=>{let E=(u>=0?y<u:y>=d&&y<d+l)?h:m;return y===0||y===n-1?Bt(E,s,0.55):E}),g=0;for(let b=1;b<=n;b++)if(b===n||$[b]!==$[g])t?.put(e+g," ".repeat(b-g),zu($[g])),g=b}function jP(t,e,n,r,i){let{background:s,foreground:o}=i.colors,a=i.loaderFrom===void 0?0:Math.min(1,(qu(i)-i.loaderFrom)/bP),c=e+(n>=5?Math.floor((n-5)/2):0);t[c]?.center(r,[[tv(i),at+Xs(Bt(s,o,a))],[ev(i," "),Xs(Bt(s,Bt(o,s,0.45),a))]]);let u=Math.min(gP,r-8);if(LP(t[c+(n>=3?2:1)],Math.floor((r-u)/2),u,i,a),n<5)return;t[c+4]?.center(r,i.sites.flatMap(({name:l,arrived:f},d)=>[...d?[[" · ",Xs(Bt(s,o,0.25*a))]]:[],[l,Xs(Bt(s,f?Bt(o,s,0.2):o,f?a:0.32*a))]]))}function _P(t,e,n,r,i,s){if(i<=r)return;let o=Math.max(1,Math.round(r*r/i)),a=Math.max(0,Math.min(r-o,Math.round(n.scroll*r/i)));for(let c=0;c<r;c++){let u=c>=a&&c<a+o;t[he+c]?.put(e-1,u?"┃":"│",u?s:A)}}function GP(t,e,n){if(e)return[`${to(t)} ${tv(t)}${ev(t," · ")}`,A];let r=n.filter((s)=>!s.missing),i=r.filter((s)=>s.thumb).length;return i<r.length?[`${to(t)} Loading thumbnails · ${i}/${r.length}`,A]:void 0}function BP(t,e,n,r,i,s,o){let{perRow:a,rowsVis:c,height:u}=Jn(r,i);CP(t[0],r,s,o),PP(t[1],r,s),HP(t[2],r,s,o),FP(t,e,r,s,o);let l=t.map((F,_)=>_>=he&&_<he+u?F:void 0),f=Math.floor(s.scroll/gt.height),d=Math.floor((s.scroll+u-1)/gt.height),h=[];for(let F=f;F<=d;F++){let _=he+F*gt.height-s.scroll;for(let B=0;B<a;B++){let tt=F*a+B,W=B*gt.pitch,Q=s.tiles[tt];if(!Q)continue;h.push(Q);let U=Math.max(_,he),yt=Math.min(_+gt.height,he+u);if(yt>U)n.push({row:U,col:W,width:gt.pitch-1,height:yt-U,target:{kind:"tile",index:tt}});let et=tt===s.focus;if(et)AP(l,_,W,gt.height,gt.pitch-1,o);let Xn=_+1,en=Math.max(Xn,he),nn=Math.min(Xn+gt.rows,he+u);if(Q.thumb&&nn>en)e.push({id:Q.key,path:Q.thumb,row:en,col:W+1,cols:gt.cols,rows:nn-en,...nn-en<gt.rows?{crop:en-Xn}:{},z:-1});let rn=[...s.installed.includes(Q.key)?[["✓ ",Zi]]:[],...Q.page||s.site!=="all"?Li(String(Q.id),et?at:"",Q.page||void 0,Ur(Q.siteAnsi)):[["● ",Ur(Q.siteAnsi)],[String(Q.id),et?at:""]],[" ",""],Qy(Q)],Ca=gt.cols-(Q.mates.length>0?1:0);if(l[_+10]?.run(W+1,fm(rn)>Ca?rn.map(([El,Sl,Ml])=>[El.replace(/^(\S) $/,"$1"),Sl,Ml]):rn),Q.mates.length>0)l[_+10]?.put(W+gt.cols,"≈",o);l[_+11]?.put(W+1,Q.artist?kP(Q.artist).slice(0,gt.cols-8):"—",A);let Dr=[];if(Q.score>0)Dr.push([`★${Q.score}`,A]);if(Q.variants>1)Dr.push([` ×${Q.variants}`,o]);if(Dr.length>0)l[_+11]?.right(W+gt.cols+1,Dr)}}let m=Math.ceil(s.tiles.length/a)*gt.height;_P(t,r,s,u,m,o);let $=Math.max(he,he+m-s.scroll),g=he+u-$,b=s.searching&&g>=2;if(b)jP(l,$,g,r-1,s);let y=s.searching&&s.tiles.length===0;if(y&&!s.error){let[F,_]=Wy[Math.floor(qu(s)/wP)%Wy.length];t[i-2]?.run(0,[["Tip ",A],[F,at],[` ${_}`,A]])}let E=s.top*a,S=s.tiles.length-(s.top+c)*a,x=[...E>0?[`↑ ${E} above`]:[],...S>0?[`↓ ${S} more`]:[]];if(x.length>0)t[i-2]?.put(0,x.join(" "),A);if(!s.searching&&s.tiles.length===0&&!s.error&&s.tag)t[he+1]?.put(0,s.preset==="cutouts"?`No transparent cutouts of ${s.tag} on ${zy(s)} — c searches every post, tab tries ${s.nextSite}`:`No posts of ${s.tag} on ${zy(s)} — tab tries ${s.nextSite}`,A);let R=GP(s,b,h),N=hm(s,R);return wa(t[i-1],r,o,{badge:"IMAGE SEARCH",lead:N,keys:y&&N?.[0]===R?[]:[["←↑↓→","move"],["enter","try on"],["tab","site"],["ctrl+v","picture"],["s","settings"],["/","search"],["?","keys"]],right:["esc","back"]}),b}function UP(t,e,n,r,i,s){let o=i.tiles[i.focus];if(!o)return;let a=i.shown?.id===o.key?i.shown:void 0,c=[dm(i,o.site,o.siteAnsi),[" ",""],...Li(String(o.id),at,o.page||void 0,Ur(o.siteAnsi)),[" ",""],Qy(o)];if(o.score>0)c.push([` · ★${o.score}`,A]);if(a)c.push([` · ${Ou(a.bytes)}`,A]);if(a){if(c.push([" ",""],...Xy(a)),i.coloring==="original")c.push([" · own colors",A])}if(t[0]?.run(0,c),o.mates.length>0)t[0]?.right(n,[["≈ ",s],[o.mates.join(" "),A]]);if(MP(t,1,2,i,s),i.tuning)TP(t,8,2,2+Math.min(n-4,60),i,s);else if(i.details)OP(t,5,2,Math.min(n-4,Math.max(48,Math.floor(n*0.55))),r-2,i);else EP(t,7,2,n-4,r-2,i,s);if(i.shown)e.push({id:mm+i.shown.id,path:i.shown.path,row:0,col:0,cols:n,rows:r,z:mP});if(i.tuning){wa(t[r-1],n,s,{badge:"IMAGE EDIT",lead:hm(i),keys:[["↑↓","field"],["←→","step"],["=","reset"],["+","reset all"],i.tuning.field===1?["1-9","place"]:["⇧←→","×10"],["c","colors"],["enter","keep"]],right:["esc","undo"]});return}let u=hm(i);wa(t[r-1],n,s,{badge:"IMAGE PREVIEW",lead:u,keys:i.installing===void 0?[["←→","browse"],["enter","install"],["t","tune"],["c","colors"],["i","details"],...i.details?[]:[["⇧←→","example"]],...i.shown?.cut==="on"||i.shown?.cut==="off"?[["x","cut out"]]:[],["?","keys"]]:[],right:i.installing===void 0?["esc","grid"]:void 0})}var WP=[["Field","↑↓ size, position, opacity"],["Step","←→ · ⇧←→ ×10"],["Place","1-9 the nine positions"],["Reset","= this field back to its default · + every field"],["Colors","c the palette's tone or its own colors, opacity back to its default"],["Keep","enter back to try, installed with the picture"],["Undo","esc"],["Close","? esc"]],KP={grid:[["Move","←↑↓→ j k home end pgup pgdn"],["Try on","enter"],["Site",`tab shift+tab all, ${Y.map((t)=>t.name).join(", ")}`],["Posts","c cutouts or every post"],["Search","/ a tag, a post URL or an id"],["Tags","1-9 turn a tag of the tags row on or off — the palette's own, then danbooru's related characters"],["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"],["Advanced","a or Advanced › in settings min score, min size, sites, hide, hide tags, PNG only"],["Back","esc returns to preview"],["Close","? esc"]],try:[["Browse","←→"],["Install","enter"],["Tune","t size, position and opacity, installed with the picture"],["Colors","c the palette's tone or its own colors, installed with the picture"],["Details","i characters, series, tags, rating and file, under Post, Source and Artist"],["Example",`⇧←→ ${ie.map((t)=>t.name.toLowerCase()).join(", ")}`],["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"]]},bm=6,zP=24;function $a(t){return[...t.settings.flatMap((e,n)=>Boolean(e.advanced)===t.advanced?[n]:[]),t.settings.length]}function DP(t){return t.replace(/^[A-Z](?=[a-z])/,(e)=>e.toLowerCase())}function Dy(t){let e=t.settings.filter((n)=>Boolean(n.advanced)!==t.advanced).map((n)=>DP(n.label));return`${t.advanced?"Back to":"More filters:"} ${e.join(", ")} — enter opens the page, or a from any row`}function nv(t,e,n){let r=t.indexOf(e);if(r!==-1)return t[(r+n+t.length)%t.length];let i=Number(e)||0;return(n>0?t.find((o)=>(Number(o)||0)>i):[...t].reverse().find((o)=>(Number(o)||0)<i))??t[n>0?0:t.length-1]}function Fi(t,e){let n=[],r="";for(let i of t.split(" "))if(r&&ft(r)+1+ft(i)>e)n.push(r),r=i;else r=r?`${r} ${i}`:i;return r?[...n,r]:n}function qP(t){if(t.entry!=="number"||t.choices.includes(t.value))return t.choices;let e=t.choices.findIndex((n)=>(Number(n)||0)>Number(t.value));return e===-1?[...t.choices,t.value]:[...t.choices.slice(0,e),t.value,...t.choices.slice(e)]}function YP(t,e,n,r){let i=`\x1B[7;${30+r}m`,s=e&&n!==void 0;if(t.entry==="text")return[{text:` ${s?`${n}█`:t.value||"none"} `,sgr:s||e&&t.value?i:t.value?"":A}];let o=s?[]:t.value.split(" "),a=(s?t.choices:qP(t)).map((c,u)=>{let l=o.includes(c),f=t.multi&&e&&u===t.cursor?"4;":"";return{text:t.multi?` ${l?"[x]":"[ ]"} ${c} `:` ${c} `,sgr:l?e?`\x1B[${f}7;${30+r}m`:"":f?`\x1B[4m${A}`:A,choice:c}});return s?[...a,{text:` ${n}█ `,sgr:i}]:a}function qy(t){if(t.entry==="text")return[{text:" ".repeat(zP),sgr:""}];let e=t.choices.map((n)=>({text:t.multi?` [x] ${n} `:` ${n} `,sgr:""}));return t.entry==="number"?[...e,{text:` ${"0".repeat(bm)}█ `,sgr:""}]:e}function JP(t){return t.reduce((e,n)=>e+ft(n.text)+1,0)-1}function Yy(t,e){let n=[[]],r=0;for(let i of t){let s=ft(i.text)>e?{...i,text:` …${Array.from(i.text).slice(-(e-2)).join("")}`}:i;if(r>0&&r+ft(s.text)>e)n.push([]),r=0;n[n.length-1]?.push(s),r+=ft(s.text)+1}return n}function Jy(t){if(t.multi&&t.choices.every((e)=>t.default.split(" ").includes(e)))return"Default all";return`Default ${t.default&&t.default!==t.multi?.none?t.default:"none"}`}function Vy(t){if(!t.tag)return"";if(!t.counts)return`${t.tag}: counting…`;let e=t.counts.map(({site:n,count:r})=>`${n} ${r===void 0?"no count":r.toLocaleString("en-US")}`);return`${t.tag}: ${e.join(" · ")}`}function VP(t,e){let n=t.advanced?"basic":"advanced";if(!e)return{keys:[["↑↓","setting"],["enter",n],["s","save"]],right:["esc","undo"]};if(t.typing!==void 0)return{keys:[["⌫","erase"],["enter","done"]],right:["esc","cancel"]};if(e.entry)return{keys:[["↑↓","setting"],...e.entry==="number"?[["←→","step"]]:[],["a",n],["enter","type"],["s","save"]],right:["esc","undo"]};return{keys:[["↑↓","setting"],["←→","value"],["a",n],...e.multi?[["space","toggle"]]:[],["enter","save"]],right:["esc","undo"]}}function ZP(t,e,n,r,i){let s=r.panel??0,o=r.settings.length,c=6+Math.max(...r.settings.map((U)=>ft(U.label))),u=Math.max(...r.settings.map((U)=>ft(Jy(U)))),l=c+Math.max(...r.settings.map((U)=>JP(qy(U))))+u+5,f=Math.min(e-2,Math.max(48,l)),d=f-c-u-5,h=f-7,m=[!1,!0].map((U)=>({advanced:U,rows:$a({settings:r.settings,advanced:U}).slice(0,-1)})),$=r.settings.map((U)=>Yy(qy(U),d).length),g=Math.max(...m.map((U)=>U.rows.reduce((yt,et)=>yt+$[et],0))),b=Math.max(...m.map((U)=>Fi(Dy({settings:r.settings,advanced:U.advanced}),h).length),...r.settings.map((U)=>Fi(U.about,h).length)),y=`${r.tag}: ${Y.map((U)=>`${U.name} 0,000,000`).join(" · ")}`,E=r.tag?Math.max(Fi(y,h).length,Fi(Vy(r),h).length):0,S=g+b+E+8,x=Math.floor((e-f)/2),R=Math.max(1,Math.floor((n-1-S)/2)),N=`\x1B[7;${30+r.siteAnsi}m`;t[R]?.put(x,`╭─ Settings ${"─".repeat(Math.max(0,f-13))}╮`);for(let U=R+1;U<R+S-1;U++)t[U]?.put(x,`│${" ".repeat(f-2)}│`);let F=R+2;for(let U of $a(r).slice(0,-1)){let yt=r.settings[U],et=U===s;if(et)t[F]?.put(x+2,"▶",i);if(t[F]?.mark(x+2,c-3,{kind:"setting",index:U}),t[F]?.put(x+4,yt.label,et?at:""),yt.value!==yt.default)t[F]?.right(x+f-3,[[Jy(yt),A]]);Yy(YP(yt,et,r.typing,r.siteAnsi),d).forEach((Xn,en)=>{let nn=x+c;for(let rn of Xn)nn=t[F+en].put(nn,rn.text,rn.sgr,void 0,{kind:"choice",index:U,choice:rn.choice}),nn+=1}),F+=$[U]}let _=m.find((U)=>U.advanced!==r.advanced)?.rows??[],B=t[R+3+g];if(s===o)B.put(x+2,"▶",i);let tt=B.put(x+3,r.advanced?" ‹ Basic ":" Advanced › ",s===o?N:at,void 0,{kind:"setting",index:o});if(_.some((U)=>r.settings[U]?.value!==r.settings[U]?.default))B.put(tt+1,"•",A);t[R+5+g]?.put(x+2,"─".repeat(f-4),A),Fi(r.settings[s]?.about??Dy(r),h).forEach((U,yt)=>{t[R+6+g+yt]?.put(x+4,U)}),Fi(Vy(r),h).forEach((U,yt)=>{t[R+6+g+b+yt]?.put(x+4,U,A)}),t[R+S-1]?.put(x,`╰${"─".repeat(f-2)}╯`);let{keys:W,right:Q}=VP(r,r.settings[s]);wa(t[n-1],e,i,{keys:W,right:Q})}function QP(t,e,n,r,i){let s=r.tuning?WP:KP[r.mode],o=Math.min(e-2,Math.max(50,...s.map(([,d])=>ft(d)+16))),a=s.map(([d,h])=>({label:d,parts:Fi(h,o-16)})),c=a.reduce((d,{parts:h})=>d+h.length,0)+4,u=Math.floor((e-o)/2),l=Math.max(2,Math.floor((n-c)/2));t[l]?.put(u,`╭─ Help ${"─".repeat(o-9)}╮`);for(let d=l+1;d<l+c-1;d++)t[d]?.put(u,`│${" ".repeat(o-2)}│`);let f=l+2;for(let{label:d,parts:h}of a){t[f]?.put(u+3,d,at);for(let m of h)t[f]?.put(u+13,m),f++}t[l+c-1]?.put(u,`╰${"─".repeat(o-2)}╯`),wa(t[n-1],e,i,{badge:"HELP",right:["? esc","close"]})}function XP(t,e,n){let r=e.suggest??[],i=r.map((a)=>a.alias??(a.count>0?String(a.count):a.palette??"0")),s=Math.max(...r.map((a)=>ft(a.value))),o=Math.max(7,...i.map(ft));r.forEach((a,c)=>{let u=c===e.pick,l=t[1+c];l?.run(0,[[u?"▸ ":" ",n,void 0,{kind:"suggest",index:c}],[a.value,u?at+n:"",void 0,{kind:"suggest",index:c}]]),l?.right(2+s+2+o,[[i[c],A]])})}function Wu(t,e=[]){return[...e,...t.flatMap((n,r)=>n.zones(r))]}function wm(t,e,n){let r=Array.from({length:n},()=>new Ku(e)),i=[],s=[],o=Xs(t.colors.cursor);if(um=!1,e<Ci.cols||n<Ci.rows)return r[0]?.put(0,"ttheme find",at+o),r[1]?.put(0,`Needs ${Ci.cols}×${Ci.rows} — now ${e}×${n}`),r[2]?.put(0,"esc quits",A,void 0,{kind:"key",key:"esc"}),{lines:r.map((c)=>c.render()),images:i,zones:Wu(r),loader:!1,tick:!1};let a=!1;if(t.mode==="try")UP(r,i,e,n,t,o);else a=BP(r,i,s,e,n,t,o);if(t.mode==="grid"&&t.editing!==void 0&&t.suggest?.length){for(let c=1;c<n-1;c++)r[c]=new Ku(e);return XP(r,t,o),{lines:r.map((c)=>c.render()),images:[],zones:Wu(r),loader:!1,tick:!1}}if(t.help||t.panel!==void 0){let c=t.mode==="try"?i:[];for(let u=0;u<n;u++)r[u]=new Ku(e);if(t.help)QP(r,e,n,t,o);else ZP(r,e,n,t,o);return{lines:r.map((u)=>u.render()),images:c,zones:Wu(r),loader:!1,tick:!1}}return{lines:r.map((c)=>c.render()),images:i,zones:Wu(r,s),loader:a,tick:um}}import{execFile as tH}from"node:child_process";import{createHash as ov}from"node:crypto";import{existsSync as eH,mkdtempSync as nH,readFileSync as Zu,rmSync as rH,statSync as av,writeFileSync as cv}from"node:fs";import{homedir as iH,tmpdir as sH}from"node:os";import{join as Yu}from"node:path";import{fileURLToPath as oH}from"node:url";import{promisify as aH}from"node:util";var yn=aH(tH),Ju=67108864,cH=4096,ym=["image/png","image/jpeg","image/webp","image/gif","image/tiff","image/heic"],uH=["text/uri-list","text/plain;charset=utf-8","text/plain"],$m=[...ym,"text/uri-list","text/plain"];function lH(t){try{return av(t).isFile()}catch{return!1}}function fH(t){let e=[],n="",r="",i=!1;for(let s=0;s<t.length;s++){let o=t[s];if(r==="'")if(o==="'")r="";else n+=o;else if(r==='"')if(o==='"')r="";else if(o==="\\"&&'"\\$`'.includes(t[s+1]??""))n+=t[++s];else n+=o;else if(o==="\\"&&s+1<t.length)n+=t[++s],i=!0;else if(o==="'"||o==='"')r=o,i=!0;else if(/\s/.test(o)){if(i)e.push(n);n="",i=!1}else n+=o,i=!0}if(i)e.push(n);return e}function rv(t){if(/^file:\/\//i.test(t))try{return oH(t)}catch{return}if(t.startsWith("~/"))return Yu(iH(),t.slice(2));return t.startsWith("/")?t:void 0}function eo(t,e=lH){let n=[];for(let r of t.replace(/\r\n?/g,`
672
662
  `).split(`
673
- `)){let i=Ey(r.trim());if(i&&e(i)){n.push(i);continue}for(let s of yH(r)){if(/^https?:\/\/\S+$/i.test(s)){n.push(s);continue}let o=Ey(s);if(o&&e(o))n.push(o)}}return n}function My(t){let e=ti(t)?rn(t):tf(t);if(!e)return;return{ext:ti(t)?"png":"jpg",width:e.width,height:e.height}}async function Wu(t,e){let n=My(t);if(n&&n.width*n.height<=me)return{bytes:t,...n,source:e};if(process.platform!=="darwin")throw Error(n?`${n.width}×${n.height} is over ${me/1e6} megapixels`:"only PNG and JPEG pictures work here");let r=dH(_u(pH(),"ttheme-attach-"));try{let i=_u(r,"in"),s=_u(r,"out.png");Ny(i,t);let o=!n||n.width*n.height>me?["--resampleHeightWidthMax",String(wH)]:[];await bn("sips",["-s","format","png",...o,i,"--out",s]).catch(()=>{throw Error("that is not a picture macOS can read")});let a=new Uint8Array(Uu(s)),c=My(a);if(!c)throw Error("that is not a picture macOS can read");return{bytes:a,...c,source:e}}finally{hH(r,{recursive:!0,force:!0})}}async function cm(t,e){if(/^https?:\/\//i.test(t)){let n=await fetch(t,{headers:{"User-Agent":cf},signal:e});if(!n.ok)throw Error(`${new URL(t).host} answered ${n.status}`);if(Number(n.headers.get("content-length")??0)>Bu)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 Wu(r,t)}if(xy(t).size>Bu)throw Error("that picture is over 64 MB");return Wu(new Uint8Array(Uu(t)),t)}var Ry=new Map,Kn={key:"local",name:"local",origin:"file://",moved:!1,cutouts:"",best:"",tagBudget:0,ors:!1,vouched:!0,scored:!1,ansi:7,ratings:{safe:new Set,questionable:new Set,explicit:new Set},rate:()=>"",narrow:()=>[],postsUrl:()=>"",countUrl:()=>"",postUrl:()=>"",pageUrl:(t)=>Ry.get(t)??"",parse:()=>[],count:()=>0};function Ty(t){if(/^https?:\/\//i.test(t))return"";return t.split("/").pop()??t}function Py(t,e){Ry.set(t,e)}function Hy(t){return Number.parseInt(Iy("sha1").update(t).digest("hex").slice(0,8),16)%or}var vH=`ObjC.import('AppKit')
663
+ `)){let i=rv(r.trim());if(i&&e(i)){n.push(i);continue}for(let s of fH(r)){if(/^https?:\/\/\S+$/i.test(s)){n.push(s);continue}let o=rv(s);if(o&&e(o))n.push(o)}}return n}function iv(t){let e=ei(t)?un(t):cf(t);if(!e)return;return{ext:ei(t)?"png":"jpg",width:e.width,height:e.height}}async function Vu(t,e){let n=iv(t);if(n&&n.width*n.height<=$e)return{bytes:t,...n,source:e};if(process.platform!=="darwin")throw Error(n?`${n.width}×${n.height} is over ${$e/1e6} megapixels`:"only PNG and JPEG pictures work here");let r=nH(Yu(sH(),"ttheme-attach-"));try{let i=Yu(r,"in"),s=Yu(r,"out.png");cv(i,t);let o=!n||n.width*n.height>$e?["--resampleHeightWidthMax",String(cH)]:[];await yn("sips",["-s","format","png",...o,i,"--out",s]).catch(()=>{throw Error("that is not a picture macOS can read")});let a=new Uint8Array(Zu(s)),c=iv(a);if(!c)throw Error("that is not a picture macOS can read");return{bytes:a,...c,source:e}}finally{rH(r,{recursive:!0,force:!0})}}async function vm(t,e){if(/^https?:\/\//i.test(t)){let n=await fetch(t,{headers:{"User-Agent":pf},signal:e});if(!n.ok)throw Error(`${new URL(t).host} answered ${n.status}`);if(Number(n.headers.get("content-length")??0)>Ju)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 Vu(r,t)}if(av(t).size>Ju)throw Error("that picture is over 64 MB");return Vu(new Uint8Array(Zu(t)),t)}var uv=new Map,Vn={key:"local",name:"local",origin:"file://",moved:!1,cutouts:"",best:"",tagBudget:0,ors:!1,vouched:!0,scored:!1,ansi:7,ratings:{safe:new Set,questionable:new Set,explicit:new Set},rate:()=>"",narrow:()=>[],postsUrl:()=>"",countUrl:()=>"",postUrl:()=>"",pageUrl:(t)=>uv.get(t)??"",parse:()=>[],count:()=>0};function lv(t){if(/^https?:\/\//i.test(t))return"";return t.split("/").pop()??t}function fv(t,e){uv.set(t,e)}function dv(t){return Number.parseInt(ov("sha1").update(t).digest("hex").slice(0,8),16)%dr}var dH=`ObjC.import('AppKit')
674
664
  function run(argv) {
675
665
  const pb = $.NSPasteboard.generalPasteboard
676
666
  const files = pb.readObjectsForClassesOptions($([$.NSURL]), $({ NSPasteboardURLReadingFileURLsOnlyKey: true }))
@@ -695,16 +685,16 @@ function run(argv) {
695
685
  if (web && web.count > 0) return web.objectAtIndex(0).absoluteString.js
696
686
  const text = pb.stringForType('public.utf8-plain-text')
697
687
  return text && !text.isNil() ? text.js : ''
698
- }`,SH=`Add-Type -AssemblyName System.Windows.Forms,System.Drawing
688
+ }`,hH=`Add-Type -AssemblyName System.Windows.Forms,System.Drawing
699
689
  $c = [Windows.Forms.Clipboard]
700
690
  $f = $c::GetFileDropList(); if ($f.Count) { $f; exit }
701
691
  $p = Join-Path $env:TEMP 'ttheme-clipboard.png'
702
692
  $s = $c::GetData('PNG'); if ($s -is [IO.MemoryStream]) { [IO.File]::WriteAllBytes($p, $s.ToArray()); $p; exit }
703
693
  $i = $c::GetImage(); if ($i) { $i.Save($p, [Drawing.Imaging.ImageFormat]::Png); $p; exit }
704
- $c::GetText()`;function Ay(){if(process.platform!=="linux")return!1;try{return/microsoft/i.test(Uu("/proc/version","utf8"))}catch{return!1}}async function EH(t){let e=Boolean(process.env.WAYLAND_DISPLAY),n=e?["wl-paste",["--list-types"]]:["xclip",["-selection","clipboard","-t","TARGETS","-o"]],r=(await bn(n[0],n[1])).stdout.split(`
705
- `).map((o)=>o.trim()),i=(o)=>e?bn("wl-paste",["--no-newline","--type",o],{encoding:"buffer",maxBuffer:Bu}):bn("xclip",["-selection","clipboard","-t",o,"-o"],{encoding:"buffer",maxBuffer:Bu});if(r.includes("text/uri-list"))return{text:(await i("text/uri-list")).stdout.toString("utf8")};let s=am.find((o)=>r.includes(o));if(s)return Ny(t,(await i(s)).stdout),{image:t};return{text:r.some((o)=>o.startsWith("text/plain")||o==="UTF8_STRING")?(await i(r.includes("text/plain")?"text/plain":"UTF8_STRING")).stdout.toString("utf8"):""}}function um(){return Boolean(process.env.SSH_CONNECTION||process.env.SSH_TTY)}async function Fy(t){if(process.platform==="darwin"){let e=(await bn("osascript",["-l","JavaScript","-e",vH,t])).stdout.trim();return e===t?{image:t}:{text:e}}if(Ay()){let e=(await bn("powershell.exe",["-NoProfile","-STA","-Command",SH])).stdout.replace(/\r/g,"").trim(),n=await Promise.all(e.split(`
706
- `).map(async(r)=>/^[A-Za-z]:\\/.test(r)?(await bn("wslpath",["-u",r])).stdout.trim():r));return n.length===1&&/ttheme-clipboard\.png$/.test(n[0]??"")?{image:n[0]}:{text:n.join(`
707
- `)}}if(process.platform==="linux")return EH(t);throw Error(`reading the clipboard is not supported on ${process.platform}`)}var MH=`ObjC.import('AppKit')
694
+ $c::GetText()`;function hv(){if(process.platform!=="linux")return!1;try{return/microsoft/i.test(Zu("/proc/version","utf8"))}catch{return!1}}async function mH(t){let e=Boolean(process.env.WAYLAND_DISPLAY),n=e?["wl-paste",["--list-types"]]:["xclip",["-selection","clipboard","-t","TARGETS","-o"]],r=(await yn(n[0],n[1])).stdout.split(`
695
+ `).map((o)=>o.trim()),i=(o)=>e?yn("wl-paste",["--no-newline","--type",o],{encoding:"buffer",maxBuffer:Ju}):yn("xclip",["-selection","clipboard","-t",o,"-o"],{encoding:"buffer",maxBuffer:Ju});if(r.includes("text/uri-list"))return{text:(await i("text/uri-list")).stdout.toString("utf8")};let s=ym.find((o)=>r.includes(o));if(s)return cv(t,(await i(s)).stdout),{image:t};return{text:r.some((o)=>o.startsWith("text/plain")||o==="UTF8_STRING")?(await i(r.includes("text/plain")?"text/plain":"UTF8_STRING")).stdout.toString("utf8"):""}}function Em(){return Boolean(process.env.SSH_CONNECTION||process.env.SSH_TTY)}async function mv(t){if(process.platform==="darwin"){let e=(await yn("osascript",["-l","JavaScript","-e",dH,t])).stdout.trim();return e===t?{image:t}:{text:e}}if(hv()){let e=(await yn("powershell.exe",["-NoProfile","-STA","-Command",hH])).stdout.replace(/\r/g,"").trim(),n=await Promise.all(e.split(`
696
+ `).map(async(r)=>/^[A-Za-z]:\\/.test(r)?(await yn("wslpath",["-u",r])).stdout.trim():r));return n.length===1&&/ttheme-clipboard\.png$/.test(n[0]??"")?{image:n[0]}:{text:n.join(`
697
+ `)}}if(process.platform==="linux")return mH(t);throw Error(`reading the clipboard is not supported on ${process.platform}`)}var pH=`ObjC.import('AppKit')
708
698
  function run() {
709
699
  const pb = $.NSPasteboard.generalPasteboard
710
700
  const files = pb.readObjectsForClassesOptions($([$.NSURL]), $({ NSPasteboardURLReadingFileURLsOnlyKey: true }))
@@ -716,57 +706,57 @@ function run() {
716
706
  picture = ['public.png', 'public.tiff', 'public.jpeg', 'public.heic'].some((t) => types.includes(t))
717
707
  }
718
708
  return pb.changeCount + '\\t' + (picture ? 'picture' : '')
719
- }`;async function Cy(){if(um())return;if(process.platform==="darwin"){let[t="",e=""]=(await bn("osascript",["-l","JavaScript","-e",MH])).stdout.trim().split("\t");return{stamp:t,picture:e==="picture"}}if(process.platform==="linux"&&!Ay()){let e=Boolean(process.env.WAYLAND_DISPLAY)?(await bn("wl-paste",["--list-types"])).stdout:(await bn("xclip",["-selection","clipboard","-t","TARGETS","-o"])).stdout;return{stamp:e,picture:/^image\//m.test(e)}}return}function Ku(t){return t.length>8&&/^(?:\/|~\/|file:|https?:)/.test(t)}var ma=(t)=>Buffer.from(t).toString("base64"),om=(t)=>Buffer.from(t,"base64");function Oy(t,e){return e.find((n)=>t.includes(n))}class lm{clipboard=!1;drops=!1;reading;offered=[];dropping;pw=ma(Iy("sha1").update(`${process.pid}:${Date.now()}`).digest("hex"));send;deliver;constructor(t,e){this.send=t,this.deliver=e}start(){let t="";if(this.clipboard)t+="\x1B[?5522h";if(this.drops)t+=`\x1B]72;t=a;${sm.join(" ")}\x1B\\`;this.send(t)}stop(){this.send(`${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=${ma("ttheme")}:pw=${this.pw};${ma(".")}\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?om(t.mime).toString("utf8"):r.mime,e)r.chunks.push(om(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 s=i.toString("utf8").split(/\s+/).filter(Boolean),o=Oy(s,[...am,...$H]);if(!o){this.deliver({kind:"text",text:""});return}let a=r.pw||this.pw,c=r.pw?"Paste event":"ttheme";this.reading={mime:o,chunks:[],pw:a,listing:!1},this.send(`\x1B]5522;type=read:name=${ma(c)}:pw=${a};${ma(o)}\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 a=sm.filter((c)=>this.offered.includes(c));this.send(`\x1B]72;t=m:o=${a.length>0?1:0};${a.join(" ")}\x1B\\`)}return}if(n==="M"){let a=e?e.split(" ").filter(Boolean):this.offered,c=Oy(a,sm);if(!c){this.send("\x1B]72;t=r:o=0\x1B\\");return}this.dropping={mimes:a,index:a.indexOf(c)+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(om(e));if(t.m==="1"||e)return;this.dropping=void 0;let i=Buffer.concat(r.chunks),s=r.mimes[r.index-1]??"",o;if(s.startsWith("image/"))o={kind:"bytes",bytes:new Uint8Array(i),source:"drop"};else{let a=i.toString("utf8"),c=s==="text/uri-list"?Vs(a).find((u)=>fH(u)):void 0;o=c?{kind:"bytes",bytes:new Uint8Array(Uu(c)),source:c}:{kind:"text",text:a}}this.send("\x1B]72;t=r:o=1\x1B\\"),this.deliver(o)}}var fm=5,OH=6,Ly=0.05,IH=[1,2,3,4,5,6,9,10,11,12,13,14],jy=(t,e)=>(e-t+360)%360<=180?1:-1;function pa(t,e,n){let r=e*Math.cos(n*Math.PI/180),i=e*Math.sin(n*Math.PI/180),s=[t+0.3963377774*r+0.2158037573*i,t-0.1055613458*r-0.0638541728*i,t-0.0894841775*r-1.291485548*i].map((l)=>l**3),[o,a,c]=s,u=[4.0767416621*o-3.3077115913*a+0.2309699292*c,-1.2684380046*o+2.6097574011*a-0.3413193965*c,-0.0041960863*o-0.7034186147*a+1.707614701*c];if(u.some((l)=>l<-0.0001||l>1.0001))return;return u.map((l)=>{let f=Math.min(1,Math.max(0,l));return Math.round(255*(f<=0.0031308?12.92*f:1.055*f**0.4166666666666667-0.055))})}function dm(t,e,n){if(pa(t,n,e)!==void 0)return n;let r=0,i=n;for(let s=0;s<24;s++){let o=(r+i)/2;if(pa(t,o,e)===void 0)i=o;else r=o}return r}function Fe(t,e,n){return`#${(pa(t,dm(t,n,e),n)??[0,0,0]).map((i)=>i.toString(16).padStart(2,"0")).join("")}`}function xH(t,e){let{l:n,c:r}=St(t);return Fe(n,r,(e+360)%360)}function NH(t,e,n){let{l:r,c:i,h:s}=St(t),o=yt(e)<0.18,a=(l)=>Fe(o?r+(1-r)*l:r*(1-l),i,s);if(bt(a(1),e)<n+Ly)return a(1);let c=0,u=1;for(let l=0;l<30;l++){let f=(c+u)/2;if(bt(a(f),e)>=n+Ly)u=f;else c=f}return a(u)}function RH(t,e){let{l:n,c:r,h:i}=St(t),s=0,o=n;for(let a=0;a<30;a++){let c=(s+o)/2;if(yt(Fe(c,r,i))<=e-0.005)s=c;else o=c}return Fe(s,r,i)}function TH(t,e,n){let r=de[e],[i,s]=[St(t[e]),St(t[e+8])],o=(l,f)=>n.has(l)?[f]:Array.from({length:2*r.width+1},(d,h)=>(r.center-r.width+h+360)%360),a=(l,f,d)=>Jn.every((h)=>{let p=(l>8?8:0)+h;if(p===l)return!0;let $=St(t[p]);return $.c<oo||Ne($.h,f)>=qi+1||Math.abs($.l-d)>=Yi}),c,u=Number.POSITIVE_INFINITY;for(let l of o(e,i.h)){if(!n.has(e)&&!a(e,l,i.l))continue;for(let f of o(e+8,s.h)){if(Ne(l,f)>je-fm||!n.has(e+8)&&!a(e+8,f,s.l))continue;let d=Ne(l,i.h)+Ne(f,s.h);if(d<u)u=d,c=[l,f]}}return c}class Gy{theme;moves=[];constructor(t){this.theme={...t,ansi:[...t.ansi]}}set(t,e,n){let r=this.get(t);if(n===r)return;if(this.moves.push({slot:t,rule:e,from:r,to:n}),t==="foreground")this.theme.foreground=n;else if(t==="selection")this.theme.selectionBackground=n;else this.theme.ansi[Number(t.slice(4))]=n}get(t){if(t==="foreground")return this.theme.foreground;if(t==="selection")return this.theme.selectionBackground;return this.theme.ansi[Number(t.slice(4))]}rehue(t,e,n){this.set(`ansi${t}`,e,xH(this.theme.ansi[t],n))}roles(){let t=new Set(this.theme.signatureSlots);for(let{slot:n,hue:r}of Vn(this.theme)){let i=de[Xe(n)];this.rehue(n,"ansi-role",i.center+jy(i.center,r)*(i.width-fm))}for(let{normal:n,gap:r}of Mn(this.theme)){if(r<=je)continue;let[i,s]=t.has(`ansi${n+8}`)?[n+8,n]:[n,n+8],o=St(this.theme.ansi[i]).h,a=St(this.theme.ansi[s]).h;this.rehue(s,"bright-follows",o+jy(o,a)*(je-fm))}let e=Ji(this.theme);for(let[n,r]of On(this.theme)){let i=Xe(e.has(r)?n:r),s=TH(this.theme.ansi,i,e);if(s===void 0)continue;this.rehue(i,"distinct",s[0]),this.rehue(i+8,"distinct",s[1])}}readability(){let t=new Set(this.theme.waive),{background:e}=this.theme,n=(r,i,s,o=e)=>{if(t.has(r))return;for(let a of i)if(bt(this.get(a),o)<s)this.set(a,r,NH(this.get(a),o,s))};if(n("foreground",["foreground"],7),n("accents",IH.map((r)=>`ansi${r}`),3),n("light-ansi",["ansi7","ansi15"],7),n("ansi8-visible",["ansi8"],1.6),!t.has("ansi0-dark")&&yt(this.get("ansi0"))>0.15)this.set("ansi0","ansi0-dark",RH(this.get("ansi0"),0.15));n("selection",["selection"],7,this.theme.foreground)}net(){return[...new Set(this.moves.map((t)=>t.slot))].flatMap((t)=>{let e=this.moves.filter((i)=>i.slot===t),n=e[0].from,r=this.get(t);return n===r?[]:[{slot:t,rule:[...new Set(e.map((i)=>i.rule))].join(", "),from:n,to:r}]})}}function zu(t){let e=new Gy(t);for(let n=0;n<OH;n++)if(e.readability(),e.roles(),Zr(e.theme).length===0)break;return{theme:e.theme,moves:e.net(),left:Zr(e.theme)}}var Hi=[{key:"background",label:"Background",min:0,max:0.5,step:0.01,digits:2},{key:"foreground",label:"Foreground",min:0.5,max:1,step:0.01,digits:2},{key:"hue",label:"Hue",min:0,max:360,step:1,digits:0,wraps:!0},{key:"tint",label:"Tint",min:0,max:0.1,step:0.005,digits:3},{key:"lightness",label:"Accent lightness",min:0.4,max:0.95,step:0.01,digits:2},{key:"chroma",label:"Accent chroma",min:0,max:0.3,step:0.005,digits:3},{key:"brights",label:"Brights",min:-0.2,max:0.2,step:0.01,digits:2}],ga={background:0.21,foreground:0.88,hue:265,tint:0.02,lightness:0.72,chroma:0.12,brights:0.06},_y=(t,e,n)=>Math.min(n,Math.max(e,t));function hm(t,e,n){let r=t[e.key]+e.step*n,i=e.wraps?(r%e.max+e.max)%e.max:_y(r,e.min,e.max);return{...t,[e.key]:Math.round(i*1e4)/1e4}}function Wr(t){let e=(r,i,s)=>Fe(_y(r,0,1),i,s),n=Array.from({length:16},()=>"#000000");n[0]=e(t.background+0.06,t.tint,t.hue),n[8]=e(t.background+0.25,t.tint,t.hue),n[7]=e(t.foreground-0.06,t.tint/2,t.hue),n[15]=e(t.foreground+0.06,t.tint/2,t.hue);for(let r of Jn){let i=de[r].center;n[r]=e(t.lightness,t.chroma,i),n[r+8]=e(t.lightness+t.brights,t.chroma,i)}return{background:e(t.background,t.tint,t.hue),foreground:e(t.foreground,t.tint/2,t.hue),cursor:e(t.lightness+t.brights,Math.max(t.chroma,0.08),t.hue),selection:e(t.background+0.1,t.tint*2,t.hue),ansi:n}}var Li=["background","foreground","cursor","selection",...Array.from({length:16},(t,e)=>`ansi${e}`)],L=["Background","Foreground","Cursor","Selection"],Du=["Black","Red","Green","Yellow","Blue","Magenta","Cyan","White"],Ur=L.length+Du.length,Je=[{key:"l",label:"Lightness",min:0,max:1,step:0.01,digits:2},{key:"c",label:"Chroma",min:0,max:0.37,step:0.005,digits:3},{key:"h",label:"Hue",min:0,max:360,step:1,digits:0,wraps:!0}],By=5,Dn=Je.length,Qs=["this","pair","normals","brights","accents"],qu=[1,2,3,4,5,6,9,10,11,12,13,14],Wy=qu.filter((t)=>t<8).map((t)=>L.length+t),Uy=qu.filter((t)=>t>8).map((t)=>L.length+t);function mm(t,e){let n=e-L.length;if(n<0||t==="this")return[e];if(t==="pair")return[L.length+n%8,L.length+8+n%8];let r=t==="normals"?Wy:t==="brights"?Uy:[...Wy,...Uy];return r.includes(e)?r:[e]}function PH(){return Array.from({length:Ur},(t,e)=>e<L.length?[e]:[e,e+8]).flat()}function HH(t){let e=t.trim();return/^https?:\/\/\S+$/i.test(e)||Vs(e).length>0}function Zs(t){return[t.background,t.foreground,t.cursor,t.selection,...t.ansi]}function ee(t){let[e,n,r,i,...s]=t;return{background:e,foreground:n,cursor:r,selection:i,ansi:s}}function Fi(t){if(t<L.length)return{name:L[t],about:Li[t]};let e=t-L.length,n=Du[e%8];return e<8?{name:n,about:`ansi ${e}`}:{name:`Bright ${n.toLowerCase()}`,about:`ansi ${e}`}}var Xs=(t,e,n)=>Math.min(n,Math.max(e,t));function Ky(t){return t.length===1?t.toLowerCase():t}function AH(t){return Xs(Math.round(t),0,255).toString(16).padStart(2,"0")}function zy(t){let e=t.trim().toLowerCase(),n=/^#?([0-9a-f]{6}|[0-9a-f]{3})$/.exec(e);if(n){let s=n[1];return`#${s.length===3?[...s].map((o)=>o+o).join(""):s}`}let r=/^rgb\(\s*(\d+)[\s,]+(\d+)[\s,]+(\d+)\s*\)$/.exec(e);if(r)return`#${r.slice(1,4).map((s)=>AH(Number(s))).join("")}`;let i=/^oklch\(\s*([\d.]+)(%?)[\s,]+([\d.]+)[\s,]+([\d.]+)(?:deg|°)?\s*\)$/.exec(e);if(i){let s=Number(i[1])/(i[2]?100:1);return Fe(Xs(s,0,1),Number(i[3]),Number(i[4])%360)}return}function Ai(t){let e=he.find((n)=>n.rule===t);return e?.min??e?.max??0}function Ci(t,e,n){let r=ee(t);return{name:"draft",background:r.background,foreground:r.foreground,selectionBackground:r.selection,ansi:r.ansi,waive:n,signatureSlots:e}}function FH(t,e){let n=t-L.length,r=t<=1?"foreground":t===3?"selection":n===7||n===15?"light-ansi":n===8?"ansi8-visible":qu.includes(n)?"accents":void 0;return{against:t===0||t===3?1:0,floor:r===void 0||e.includes(r)?void 0:Ai(r)}}function bm(t,e,n,r){let i=Ci(t,e,n),{background:s,foreground:o,selection:a,ansi:c}=ee(t),u=(l,f,d)=>bt(f,d)<Ai(r)?[l]:[];if(r==="foreground")return bt(o,s)<Ai(r)?[1,0]:[];if(r==="selection")return bt(o,a)<Ai(r)?[3,1]:[];if(r==="accents")return qu.flatMap((l)=>u(L.length+l,c[l],s));if(r==="light-ansi")return[7,15].flatMap((l)=>u(L.length+l,c[l],s));if(r==="ansi8-visible")return u(L.length+8,c[8],s);if(r==="ansi0-dark")return yt(c[0])>Ai(r)?[L.length]:[];if(r==="ansi-role")return Vn(i).map(({slot:l})=>L.length+l);if(r==="bright-follows")return Mn(i).filter(({gap:l})=>l>je).flatMap(({normal:l})=>[L.length+l,L.length+l+8]);if(r==="distinct")return On(i).flatMap(([l,f])=>[L.length+l,L.length+f]);return[]}function CH(t,e,n){return new Set(Li.flatMap((r,i)=>Yu(t,e,n,i).some((s)=>s.ok===!1)?[i]:[]))}function zn(t,e,n,r,i){let s=bt(t,e),o=Ai(n);if(i.includes(n))return{ok:void 0,text:`${r} ${s.toFixed(2)}:1 · waived`};return{ok:s>=o,text:`${r} ${s.toFixed(2)}:1 · ≥ ${o}`}}function Yu(t,e,n,r){let i=ee(t),s=Ci(t,e,n);if(r===0){let b=[1,2,3,4,5,6,9,10,11,12,13,14].reduce((y,S)=>bt(i.ansi[y],i.background)<=bt(i.ansi[S],i.background)?y:S);return[zn(i.foreground,i.background,"foreground","Foreground on it",n),zn(i.ansi[b],i.background,"accents",`Weakest, ANSI ${b},`,n),zn(i.ansi[8],i.background,"ansi8-visible","ANSI 8 on it",n)]}if(r===1)return[zn(i.foreground,i.background,"foreground","On background",n),zn(i.foreground,i.selection,"selection","On the selection",n)];if(r===2)return[{ok:void 0,text:`On background ${bt(i.cursor,i.background).toFixed(2)}:1`}];if(r===3)return[zn(i.foreground,i.selection,"selection","Foreground on it",n)];let o=r-L.length,a=i.ansi[o];if(o===0){let g=yt(a),b=Ai("ansi0-dark");return[n.includes("ansi0-dark")?{ok:void 0,text:`Luminance ${g.toFixed(3)} · waived`}:{ok:g<=b,text:`Luminance ${g.toFixed(3)} · ≤ ${b}`}]}if(o===7||o===15)return[zn(a,i.background,"light-ansi","On background",n)];if(o===8)return[zn(a,i.background,"ansi8-visible","On background",n)];let c=[zn(a,i.background,"accents","On background",n)],u=St(a),l=Xe(o),f=de[l],d=`${f.name} ${f.center}±${f.width}°`;if(u.c<oo)c.push({ok:void 0,text:"Too grey to have a hue"});else if(Ji(s).has(o))c.push({ok:void 0,text:`Hue ${u.h.toFixed(0)}° · a signature, free of ${d}`});else if(n.includes("ansi-role"))c.push({ok:void 0,text:`Hue ${u.h.toFixed(0)}° · ${d} waived`});else{let g=Ne(u.h,f.center)-f.width;c.push(g>0?{ok:!1,text:`Hue ${u.h.toFixed(0)}° · ${g.toFixed(0)}° outside ${d}`}:{ok:!0,text:`Hue ${u.h.toFixed(0)}° · in ${d}`})}let h=o<8?o+8:o-8,p=Mn(s).find((g)=>g.normal===l);if(p)c.push(n.includes("bright-follows")?{ok:void 0,text:`${p.gap.toFixed(0)}° from ANSI ${h} · waived`}:{ok:p.gap<=je,text:`${p.gap.toFixed(0)}° from ANSI ${h} · ≤ ${je}°`});let $=On(s).flatMap(([g,b])=>g===o?[b]:b===o?[g]:[]);if($.length>0&&!n.includes("distinct"))c.push({ok:!1,text:`Reads as ANSI ${$.join(", ")} · within ${qi}° and ${Yi} lightness`});return c}function qy(t,e,n){let r=tn(Ci(t,e,n));return he.map((i,s)=>{let o=r[s],a=n.includes(i.rule),c=a||Number.isNaN(o)?void 0:(i.min===void 0||o>=i.min)&&(i.max===void 0||o<=i.max);return{ok:c,label:i.label,value:Number.isNaN(o)?"—":Number.isInteger(o)?String(o):o.toFixed(2),bound:a?"waived":i.min!==void 0?`≥ ${i.min}`:i.max!==void 0?`≤ ${i.max}`:"",slots:c===!1?bm(t,e,n,i.rule):[]}})}var LH=new Set(["reset","reset-all","hex","paste","fix","open","tune","sig","follow"]),Yy=Je[1].max;function pm(t){let[e,n,r]=nt(t);return e===n&&n===r}function gm(t,e){return Math.floor(dm(t,e,Yy)*1e4)/1e4}function Dy(t,e){let n=t.wraps?t.max-t.step:t.max;return Math.min(n,Math.round((t.min+(t.max-t.min)*e)/t.step)*t.step)}class ba{mode;seeds=ga;field=0;list;lch;start;original;signature;row=0;col=0;channel=0;scope="this";view="slot";scene=0;typing;overlay;quitting=!1;compare=!1;notice;filter="";pick=0;result;act;wants;pictures;startPictures;options;fresh;theme;startSignature;seeded=!1;tuneFrom;holds=new Map;clip;history=[];future=[];lastEdit;constructor(t){this.options=t,this.theme=t.variant==="theme",this.fresh=t.colors===void 0,this.mode=this.fresh?"seeds":"list",this.list=Zs(t.colors??Wr(this.seeds)),this.lch=this.lchs(),this.start=[...this.list],this.original=t.original?Zs(t.original):[...this.list],this.signature=[...t.signature],this.startSignature=[...t.signature],this.pictures=t.pictures??0,this.startPictures=this.pictures}markSaved(){this.start=[...this.list],this.history=[],this.future=[],this.lastEdit=void 0}offDefault(t){return this.list[t]!==this.original[t]}get added(){return Math.max(0,this.pictures-this.startPictures)}found(t){this.pictures=t.count,this.notice=t.note}get waive(){return this.options.waive??[]}get held(){return this.holds.get(this.slot())}colors(){return ee(this.list)}edited(){return{colors:this.colors(),signature:[...this.signature]}}shown(){return this.compare?this.start:this.list}slot(){return this.row<L.length?this.row:this.row+(this.col===1?8:0)}dirty(){return this.seeded||this.pictures!==this.startPictures||this.list.some((t,e)=>t!==this.start[e])||this.signature.join()!==this.startSignature.join()}misses(){return CH(this.list,this.signature,this.waive)}failing(){return Zr(Ci(this.list,this.signature,this.waive))}choices(){let t=this.filter.toLowerCase();return(this.options.palettes??[]).filter((e)=>e.name.toLowerCase().includes(t))}paste(t){if(this.notice=void 0,this.overlay==="open"){this.filter+=t.replace(/\s+/g,"").toLowerCase(),this.pick=0;return}if(this.overlay)return;if(t.trim()===""){this.findPictures({clipboard:!0});return}if(HH(t)){this.findPictures({paste:t});return}if(this.mode==="seeds")return;let e=zy(t);if(!e){this.notice="Not a color — #rrggbb, rgb(r g b) or oklch(l c h)";return}this.typing=void 0,this.take(e,"paste")}press(t){if(this.notice=void 0,t==="ctrl-c"){if(this.theme)this.act="cancel";else this.result="cancelled";return}if(this.quitting){if(this.quitting=!1,t==="y"||t==="Y")this.result="cancelled";return}if(this.typing!==void 0){this.type(t);return}if(this.overlay==="keys"){this.overlay=void 0;return}if(this.overlay==="open"){this.openKey(t);return}if(t==="?"){this.overlay="keys";return}if(this.theme&&(t==="ctrl-v"||t==="alt-v"||t==="p"))return;if(t==="ctrl-v"||t==="alt-v"){this.findPictures({clipboard:!0});return}if(t==="p"&&this.mode!=="tune"){this.findPictures();return}if(t===" "&&this.mode!=="seeds"){this.compare=!this.compare;return}if(this.compare&&t==="esc"){this.compare=!1;return}if(t==="g"&&this.mode!=="seeds"){this.view=this.view==="slot"?"relations":"slot";return}let e=t==="j"?"down":t==="k"?"up":t;if(this.mode==="seeds")this.seedKey(e);else if(this.mode==="tune")this.tuneKey(e);else this.listKey(e)}select(t){if(this.mode==="seeds"||this.typing!==void 0||this.overlay||this.quitting)return;if(this.mode==="tune"){if(t===this.slot())return;this.tuneKey("enter")}if(this.notice=void 0,this.row=t<L.length?t:L.length+(t-L.length)%8,t>=L.length)this.col=t-L.length>=8?1:0;this.lastEdit=void 0}grip(t){if(this.mode==="seeds"||this.typing!==void 0||this.overlay||this.quitting)return!1;if(this.notice=void 0,this.mode==="list")this.tune();return this.channel=t,!0}slide(t,e){if(!this.grip(t))return;let n=Math.min(1,Math.max(0,e));if(t===Dn){this.reach(21**n);return}this.put(Dy(Je[t],n))}sow(t,e){let n=Hi[t];if(this.mode!=="seeds"||this.overlay||this.quitting||!n)return;this.notice=void 0,this.field=t;let r=Math.min(1,Math.max(0,e));this.seeds=hm({...this.seeds,[n.key]:Dy(n,r)},n,0),this.list=Zs(Wr(this.seeds)),this.lch=this.lchs()}scroll(t){let e=(n,r)=>Math.min(r,Math.max(0,n+t));if(this.overlay==="open")this.pick=e(this.pick,Math.max(0,this.choices().length-1));else if(this.overlay||this.quitting||this.typing!==void 0)return;else if(this.mode==="seeds")this.field=e(this.field,Hi.length-1);else if(this.mode==="tune")this.channel=e(this.channel,Dn);else this.row=e(this.row,Ur-1),this.lastEdit=void 0}lchOf(t){let e=St(t);return pm(t)?{...e,h:this.neutralHue()}:e}lchs(){return this.list.map((t)=>this.lchOf(t))}neutralHue(){let t=[0,1,3,2].map((e)=>this.list[e]).find((e)=>!pm(e));return t?St(t).h:ga.hue}seedKey(t){let e=Hi.length;if(t==="up"||t==="down")this.field=(this.field+(t==="up"?e-1:1))%e;else if(t==="home"||t==="end")this.field=t==="home"?0:e-1;else if(t==="left"||t==="right"||t==="shift-left"||t==="shift-right"){let n=Hi[this.field],r=(t.endsWith("left")?-1:1)*(t.startsWith("shift")?n.wraps?10:By:1);this.seeds=hm(this.seeds,n,r),this.list=Zs(Wr(this.seeds)),this.lch=this.lchs()}else if(t==="enter")this.leaveSeeds();else if(t==="o")this.openPalettes();else if(t==="esc")this.leave()}leaveSeeds(){this.start=[...this.list],this.original=[...this.list],this.seeded=!0,this.mode="list"}leave(){if(this.theme)this.act="cancel";else if(this.dirty())this.quitting=!0;else this.result="cancelled"}findPictures(t){if(!this.options.find){this.notice="Pictures need Ghostty, iTerm2 or kitty, outside tmux";return}this.wants=t?{start:t}:{}}openPalettes(){if((this.options.palettes??[]).length>0)this.overlay="open",this.pick=0;else this.notice="No other palettes to take colors from"}listKey(t){if(t==="up"||t==="down"){if(this.theme&&this.row===(t==="up"?0:Ur-1))this.act=t==="up"?"above":"below";else this.row=(this.row+(t==="up"?Ur-1:1))%Ur;this.lastEdit=void 0}else if(t==="home"||t==="end")this.row=t==="home"?0:Ur-1;else if(t==="pgup"||t==="pgdn")this.row=t==="pgup"?0:L.length;else if(t==="left"||t==="right"){if(this.row>=L.length)this.col=t==="left"?0:1,this.lastEdit=void 0}else if((t==="shift-left"||t==="shift-right")&&!this.theme)this.scene+=t==="shift-left"?-1:1;else if(t==="n"||t==="N")this.nextMiss(t==="n"?1:-1);else if(t==="enter"||t==="tab")this.tune();else if(t==="#")this.typing="";else if(t==="c")this.clip=this.list[this.slot()],this.notice=`Copied ${this.clip}`;else if(t==="v")if(this.clip)this.set(this.slot(),this.clip,"paste");else this.notice="Nothing copied yet — c copies a slot";else if(t==="r")this.set(this.slot(),this.original[this.slot()],"reset");else if(t==="R")this.remember("reset-all"),this.list=[...this.original],this.lch=this.lchs();else if(t==="=")this.follow();else if(t==="*"&&!this.theme)this.mark();else if(t==="f")this.fix();else if(t==="o"&&!this.theme)this.openPalettes();else if(t==="u")this.undo();else if(t==="ctrl-r")this.redo();else if(t==="s"||t==="ctrl-s")if(this.theme)this.act="save";else this.save();else if(t==="esc")this.leave()}nextMiss(t){let e=PH(),n=this.misses();if(n.size===0){this.notice="The gate passes";return}let r=e.indexOf(this.slot());for(let i=1;i<=e.length;i++){let s=e[((r+t*i)%e.length+e.length)%e.length];if(n.has(s)){if(this.row=s<L.length?s:L.length+(s-L.length)%8,s>=L.length)this.col=s-L.length>=8?1:0;return}}}tune(){this.remember("tune"),this.tuneFrom={list:[...this.list],lch:[...this.lch]},this.holds=new Map,this.hold(),this.mode="tune"}hold(){for(let t of this.scoped())if(!this.holds.has(t))this.holds.set(t,this.lch[t].c)}scoped(){return mm(this.scope,this.slot())}tuneKey(t){let e=Je.length+1,n=this.channel===Dn;if(t==="up"||t==="down"||t==="tab"||t==="shift-tab")this.channel=(this.channel+(t==="up"||t==="shift-tab"?e-1:1))%e;else if(t==="left"||t==="right"||t==="shift-left"||t==="shift-right"){let r=t.endsWith("left")?-1:1;if(n)this.reach(this.ratio()+r*(t.startsWith("shift")?0.5:0.1));else{let i=Je[this.channel];this.step(r*(t.startsWith("shift")?i.wraps?10:By:1))}}else if(t==="home"||t==="end")if(n)this.reach(t==="home"?this.partner().floor??1:21);else{let r=Je[this.channel];this.put(t==="home"?r.min:r.wraps?r.max-r.step:r.max)}else if(/^[0-9]$/.test(t))if(n){if(t!=="0")this.reach(Number(t))}else{let r=Je[this.channel];this.put(r.min+(r.max-r.min)*Number(t)/10)}else if(t==="a")this.rescope();else if(t==="#")this.typing="";else if(t==="enter"){if(this.tuneFrom&&this.list.every((r,i)=>r===this.tuneFrom?.list[i]))this.history.pop();this.endTune()}else if(t==="esc"){if(this.tuneFrom)this.list=[...this.tuneFrom.list],this.lch=[...this.tuneFrom.lch],this.history.pop();this.endTune()}}rescope(){if(this.slot()<L.length){this.notice="A base color moves alone";return}let t=Qs.indexOf(this.scope);for(let e=1;e<=Qs.length;e++){let n=Qs[(t+e)%Qs.length];if(n==="this"||mm(n,this.slot()).length>1){this.scopeTo(n);return}}}scopeTo(t){if(this.mode!=="tune"||this.typing!==void 0||this.quitting||this.slot()<L.length)return;if(t!=="this"&&mm(t,this.slot()).length<=1)return;this.scope=t,this.hold();let e=this.scoped().length;this.notice=e>1?`${e} slots move together`:"This slot moves alone"}endTune(){this.tuneFrom=void 0,this.holds=new Map,this.mode="list"}partner(){return FH(this.slot(),this.waive)}ratio(){return bt(this.list[this.slot()],this.list[this.partner().against])}reach(t){let e=this.slot(),n=this.list[this.partner().against],r=this.lch[e],i=this.holds.get(e)??r.c,s=(d)=>Fe(d,Math.min(i,gm(d,r.h)),r.h),o=(d)=>bt(s(d),n),a=yt(this.list[e])>=yt(n),c=St(n).l,u=Math.max(1,Math.round(t*100)/100),l=a?1:0,f;if(o(l)<u)f=l,this.notice=`The ratio stops at ${o(l).toFixed(2)}:1 on this side of the color it is read against`;else{let d=c,h=l;for(let p=0;p<24;p++){let $=(d+h)/2;if(o($)>=u)h=$;else d=$}f=h}this.place(e,f,i,r.h);for(let d=0;d<40&&f!==l&&bt(this.list[e],n)<u;d++)f=a?Math.min(1,f+0.001):Math.max(0,f-0.001),this.place(e,f,i,r.h);this.lch[e]={...this.lch[e],l:Math.round(f*1e4)/1e4}}step(t){let e=Je[this.channel],n=this.lch[this.slot()][e.key];this.put(n+e.step*t)}put(t){let e=this.slot(),n=Je[this.channel],r=n.wraps?(t%n.max+n.max)%n.max:Xs(t,n.min,n.max),i=Math.round(r*1e4)/1e4,s=this.lch[e],o=this.scoped().filter((u)=>u!==e),a=(u)=>Math.round(u*1e4)/1e4;if(n.key==="c"){let u=gm(s.l,s.h);if(i>u)this.notice=`Chroma stops at ${u.toFixed(3)}, the sRGB edge for this lightness and hue`;let l=Math.min(i,u),f=l-s.c;this.holds.set(e,l),this.place(e,s.l,l,s.h);for(let d of o){let h=this.lch[d],p=a(Xs((this.holds.get(d)??h.c)+f,0,Yy));this.holds.set(d,p),this.place(d,h.l,p,h.h)}return}let c=n.key==="h"?((i-s.h)%360+540)%360-180:i-s.l;if(this.place(e,n.key==="l"?i:s.l,this.holds.get(e)??s.c,n.key==="h"?i:s.h),n.key==="h"&&pm(this.list[e]))this.notice="A grey shows no hue — raise its chroma first";for(let u of o){let l=this.lch[u];this.place(u,n.key==="l"?a(Xs(l.l+c,0,1)):l.l,this.holds.get(u)??l.c,n.key==="h"?a(((l.h+c)%360+360)%360):l.h)}}place(t,e,n,r){let i=Math.min(n,gm(e,r));this.lch[t]={l:e,c:i,h:r},this.list[t]=Fe(e,i,r)}take(t,e){if(this.mode==="tune")this.list[this.slot()]=t,this.lch[this.slot()]=this.lchOf(t),this.holds.set(this.slot(),this.lch[this.slot()].c);else this.set(this.slot(),t,e)}type(t){let e=this.typing??"";if(t==="esc")this.typing=void 0;else if(t==="enter"){let n=zy(e);if(!n){this.notice="Not a color — #rrggbb, rgb(r g b) or oklch(l c h)";return}this.typing=void 0,this.take(n,"hex")}else{let n=xi(e,Ky(t),(r)=>/^[0-9a-z#(),.% ]$/.test(r)&&e.length<28);if(n!==void 0)this.typing=n}}openKey(t){let e=this.choices();if(t==="esc")this.overlay=void 0,this.filter="";else if(t==="up"||t==="down"){let n=Math.max(1,e.length);this.pick=(this.pick+(t==="up"?n-1:1))%n}else if(t==="home"||t==="end")this.pick=t==="home"?0:Math.max(0,e.length-1);else if(t==="enter"){let n=e[this.pick];if(!n)return;if(this.remember("open"),this.list=Zs(n.colors),this.lch=this.lchs(),this.overlay=void 0,this.filter="",this.notice=`Took the colors of ${n.name}`,this.mode==="seeds")this.leaveSeeds()}else{let n=xi(this.filter,Ky(t),(r)=>/^[a-z0-9@/-]$/.test(r));if(n!==void 0)this.filter=n,this.pick=0}}remember(t){if(t!==this.lastEdit||LH.has(t))this.history.push({list:[...this.list],lch:[...this.lch],signature:[...this.signature]}),this.future=[];this.lastEdit=t}set(t,e,n){if(!ne(e)||this.list[t]===e)return;this.remember(n),this.list[t]=e,this.lch[t]=this.lchOf(e)}follow(){if(this.row<L.length){this.notice="= works on an ANSI row — the bright takes its normal";return}let t=this.row,e=this.row+8,n=this.lch[t];this.remember("follow"),this.place(e,Xs(n.l+0.06,0,1),n.c,n.h),this.col=1,this.notice=`${Fi(e).name} follows ${Fi(t).name.toLowerCase()}`}mark(){let t=Li[this.slot()];this.remember("sig");let e=this.signature.includes(t)?this.signature.filter((r)=>r!==t):[...this.signature,t],n=e.length>3?e[0]:void 0;this.signature=e.slice(-3),this.notice=this.signature.length===3?`Signature: ${this.signature.join(", ")}${n?` — ${n} dropped`:""}`:`The signature needs three slots — ${this.signature.length} marked`}fix(){let t=Ci(this.list,this.signature,this.waive),{theme:e,moves:n,left:r}=zu({...t,selectionBackground:t.selectionBackground,signatureSlots:this.signature});if(n.length===0){this.notice=Zr(t).length===0?"Already passes the gate":"No color change fixes it";return}this.remember("fix");let i=Zs({...this.colors(),foreground:e.foreground,selection:e.selectionBackground,ansi:e.ansi}),s=this.list;this.list=i,this.lch=i.map((o,a)=>o===s[a]?this.lch[a]:this.lchOf(o)),this.notice=`Moved ${n.length} ${n.length===1?"color":"colors"}${r.length===0?" — passes the gate":" closer to the gate"}`}save(){let t=this.options.check(this.edited());if(t){this.notice=t;return}this.result="saved"}undo(){let t=this.history.pop();if(!t){this.notice="Nothing to undo";return}this.future.push({list:[...this.list],lch:[...this.lch],signature:[...this.signature]}),this.restore(t)}redo(){let t=this.future.pop();if(!t){this.notice="Nothing to redo";return}this.history.push({list:[...this.list],lch:[...this.lch],signature:[...this.signature]}),this.restore(t)}restore(t){this.list=[...t.list],this.lch=[...t.lch],this.signature=[...t.signature],this.lastEdit=void 0}}import{mkdirSync as JH,readFileSync as km,writeFileSync as nv}from"node:fs";import{dirname as VH}from"node:path";import{isMainThread as ZH,parentPort as rv,Worker as QH}from"node:worker_threads";var jH=new Set(["comic","4koma","monochrome","greyscale","sketch","lineart","speech_bubble"]),GH=new Set(["scenery","landscape","scenic","no_humans","wide_shot","very_wide_shot"]),_H=0.04,BH=0.1,WH=0.05,UH=4096;function KH(t){return new Set(t.cutouts.split(/\s+/).map((e)=>e.replace(/^~/,"")).filter(Boolean))}function zH(t,e,n,r=0){let{site:i,post:s}=t,o=new Set(s.tags),a=[...KH(i)].some((l)=>o.has(l)),c=Math.min(s.width,s.height),u=s.width>0&&s.height>0?s.width/s.height/(e.w/e.h):1;return(s.solo?2:0)+([...jH].some((l)=>o.has(l))?-3:0)+([...GH].some((l)=>o.has(l))?-1.5:0)+2*Math.min(1,c/e.h)+(a?1.5:-Math.min(1.5,Math.abs(Math.log(u))))+(n>0?1.5*Math.log1p(Math.max(0,s.score))/Math.log1p(n):0)+2*r}function Ju(t,e,n=new Map){let r=new Map;for(let{site:i,post:s}of t)r.set(i,Math.max(r.get(i)??0,s.score));return t.map((i,s)=>({pick:i,at:s,score:zH(i,e,r.get(i.site)??0,n.get(i.post))})).sort((i,s)=>s.score-i.score||i.at-s.at).map(({pick:i})=>i)}function Vy(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 s=i[r];if(s)n.push(s)}return n}function wm(t){let e=t/255;return e<=0.04045?e/12.92:((e+0.055)/1.055)**2.4}function Jy(t,e,n){let[r,i,s]=[wm(t),wm(e),wm(n)],o=Math.cbrt(0.4122214708*r+0.5363325363*i+0.0514459929*s),a=Math.cbrt(0.2119034982*r+0.6806995451*i+0.1073969566*s),c=Math.cbrt(0.0883024619*r+0.2817188376*i+0.6299787005*s);return[0.2104542553*o+0.793617785*a-0.0040720468*c,1.9779984951*o-2.428592205*a+0.4505937099*c,0.0259040371*o+0.7827717662*a-0.808675766*c]}function Zy(t,e){let n=e.map((o)=>Jy(...nt(o))).filter(([,o,a])=>Math.hypot(o,a)>=_H);if(n.length===0)return 0;let r=Math.max(1,Math.floor(Math.sqrt(t.width*t.height/UH))),i=n.map(()=>0),s=0;for(let o=0;o<t.height;o+=r)for(let a=0;a<t.width;a+=r){let c=(o*t.width+a)*4;if(t.data[c+3]<128)continue;s++;let[u,l,f]=Jy(t.data[c],t.data[c+1],t.data[c+2]);n.forEach(([d,h,p],$)=>{if(Math.hypot(u-d,l-h,f-p)<BH)i[$]=i[$]+1})}if(s===0)return 0;return i.reduce((o,a)=>o+Math.min(1,a/s/WH),0)/n.length}var DH=/(?:^|[^0-9a-f])([0-9a-f]{32})(?:[^0-9a-f]|$)/i,qH=[[/yande\.re\/post\/show\/(\d+)/,"yande"],[/konachan\.(?:com|net)\/post\/show\/(\d+)/,"konachan"],[/danbooru\.donmai\.us\/(?:posts|post\/show)\/(\d+)/,"danbooru"],[/zerochan\.net\/(\d+)(?:[?#\s]|$)/,"zerochan"]];function $m(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 Qy(t,e){let n=DH.exec(e.source)?.[1]?.toLowerCase();return[`post:${t.key}:${e.id}`,...e.md5?[`md5:${e.md5}`]:[],...n&&n!==e.md5?[`md5:${n}`]:[],...qH.flatMap(([r,i])=>{let s=r.exec(e.source)?.[1];return s?[`post:${i}:${Number(s)}`]:[]}),...e.family?[`family:${t.key}:${e.family}`]:[]]}function Xy(t,e){let n=t.owner||t.named.artist[0]||"";return n!==""&&n===(e.owner||e.named.artist[0]||"")&&t.width===e.width&&t.height===e.height}function tv(t){let r=[];for(let s=0;s<8;s++){let o=Math.floor(s*t.height/8),a=Math.max(o+1,Math.floor((s+1)*t.height/8));for(let c=0;c<9;c++){let u=Math.floor(c*t.width/9),l=Math.max(u+1,Math.floor((c+1)*t.width/9)),f=0;for(let d=o;d<a;d++)for(let h=u;h<l;h++){let p=(d*t.width+h)*4,$=t.data[p+3]/255,g=0.299*t.data[p]+0.587*t.data[p+1]+0.114*t.data[p+2];f+=g*$+255*(1-$)}r.push(f/((l-u)*(a-o)))}}let i=0n;for(let s=0;s<8;s++)for(let o=0;o<8;o++)i=i<<1n|(r[s*9+o]>r[s*9+o+1]?1n:0n);return i.toString(16).padStart(16,"0")}function YH(t,e){let n=BigInt(`0x${t}`)^BigInt(`0x${e}`),r=0;while(n>0n)r+=Number(n&1n),n>>=1n;return r}function ev(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&&YH(t.hash,e.hash)<=2}var XH={thumb:"tile",band:"band",match:"tile",show:"view",backdrop:"view",redraw:"view"},Vu;async function tA(t){if(t.job==="redraw")return Eu(t.home,t.name,t.key,t.paint,t.blur,t.aligns,t.user);if(t.job==="show"){if(Vu?.from!==t.from){let o=tr(new Uint8Array(km(t.from)),me);Vu={from:t.from,clear:In(o),inked:Nf(o)}}let{image:r,fill:i,opacity:s}=iw(Vu.inked,t.colors,t.tone,t.width,t.height,t.blur,t.tune,t.coloring);return JH(VH(t.to),{recursive:!0}),nv(t.to,sn(r)),{clear:Vu.clear,fill:i,opacity:s}}let e=tr(new Uint8Array(km(t.from)),me);if(t.job==="backdrop"){ic(t.home,t.colors,t.tone,e,{...t.origin,bytes:new Uint8Array(km(t.source)),cut:t.from!==t.source},t,t.blur,t.coloring);let r=t.tune&&re(t.home,t.colors.name).find((i)=>i.key===Xt(t.origin));if(t.tune&&r)Io(D(t.home),r,t.tune,t.aligns??!0,t.user??t.home);return 0}if(t.job==="match")return{match:Zy(e,t.colors),hash:tv(e)};if(t.job==="thumb")return H(t.to,sn(Kg(e,t.width,t.height))),0;let n=e.data.subarray(t.y*e.width*4,(t.y+t.height)*e.width*4);return nv(t.to,sn({width:e.width,height:t.height,data:n})),0}function eA(t){t.on("message",async(e)=>{try{t.postMessage({id:e.id,value:await tA(e)})}catch(n){t.postMessage({id:e.id,error:n instanceof Error?n.message:String(n)})}})}class ym{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 QH(import.meta.filename);t.unref(),t.on("message",({id:n,value:r,error:i})=>{let s=this.waiting.get(n);if(this.waiting.delete(n),this.waiting.size===0)t.unref();if(i!==void 0)s?.no(Error(i));else s?.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 wa{lines=new Map;run(t){let e=XH[t.job],n=this.lines.get(e);if(!n)n=new ym,this.lines.set(e,n);return n.send(t)}close(){for(let t of this.lines.values())t.close();this.lines.clear()}}class vm{lines;constructor(t){this.lines=Array.from({length:Math.max(1,t)},()=>new ym)}async map(t){let e=[],n=0;return await Promise.all(this.lines.map(async(r)=>{while(n<t.length){let i=n++;try{e[i]=await r.send(t[i])}catch(s){e[i]=s instanceof Error?s:Error(String(s))}}})),e}close(){for(let t of this.lines)t.close()}}if(!ZH&&rv)eA(rv);import{existsSync as nA,mkdtempSync as rA,readFileSync as iA,rmSync as iv,writeFileSync as sA}from"node:fs";import{tmpdir as oA}from"node:os";import{basename as ov,join as sv}from"node:path";var aA=6;class $a{dir;made=[];of(t,e){this.dir??=rA(sv(oA(),"ttheme-tint-"));let n=sv(this.dir,`${ov(t,".png")}.${e.slice(1).toLowerCase()}.png`);if(!nA(n)){let r=new Uint8Array(iA(t));sA(n,ja(r,e)??ni(ei(At(r)),e)),this.made.push(n);while(this.made.length>aA)iv(this.made.shift(),{force:!0})}return n}clear(){if(this.dir)iv(this.dir,{recursive:!0,force:!0});this.dir=void 0,this.made.length=0}}function Zu(t,e,n,r,i){if(be(t)==="original")return{image:e,opacity:t.peak?ls(n,t.peak):t.opacity};let s=cn(n,[...r]);return{image:s.color===t.tone?e:i.of(e,s.color),opacity:s.opacity}}function Qu(t,e){let n=ov(e);return t.find((r)=>n.startsWith(`${r.stem}.`)||n.startsWith(`${r.stem}@`))}var mA=2147483625,uv=2147483626,wn=2147483627,pA=-1073741827,lv=-1073741826,gA=-1073741825,bA=4;function wA(t,e,n,r,i,s){let o=Math.trunc,a=n*i.w,c=r*i.h,u=o((Math.max(s.x,0)+i.w-1)/i.w),l=o(Math.min(s.x+s.w,a)/i.w),f=o((Math.max(s.y,0)+i.h-1)/i.h),d=o(Math.min(s.y+s.h,c)/i.h);if(l<=u||d<=f)return;return{col:u,row:f,cols:l-u,rows:d-f,x:o((u*i.w-s.x)*t/s.w),y:o((f*i.h-s.y)*e/s.h),w:o((l-u)*i.w*t/s.w),h:o((d-f)*i.h*e/s.h)}}function $A(t){try{let e=lA(t,"r"),n=Buffer.alloc(24);return fA(e,n,0,24,0),cA(e),n.readUInt32BE(0)===2303741511?{width:n.readUInt32BE(16),height:n.readUInt32BE(20)}:void 0}catch{return}}class Xu{ready=()=>{};cell={w:0,h:0};held;tints=new $a;sent=new Map;placed=new Map;viewed="";renders;scratch;made=0;bands=new Map;home;name;views;banded;files;static of(t,e,n,r){if(Ft(t)||!Wc(t,r)||!(zc(t)||pi(t)))return;return new Xu(t,e,n)}constructor(t,e,n){this.home=e,this.name=n,this.views=pi(t),this.banded=Uc(t),this.files=Kc(t)}measured(t){if(this.cell.w===0&&t.w>0&&t.h>0)this.cell=t}load(){let t=D(this.home),e=we(t,this.name,dA()),n=[];try{n=vt(t).palettes[this.name]?.pictures??[]}catch{}let r=e?Qu(n,e.image):void 0;this.held=e&&r?{picture:r,image:e.image,opacity:e.opacity,cover:e.cover,at:_t.indexOf(e.position)+1||5}:void 0}draw(t,e,n,r,i){if(this.cell.w===0)return"";let s=t[0],o=this.look(t,e,n,r,i);if(this.views){let c=r*this.cell.w,u=i*this.cell.h,l=o?`${s}|${o.image}|${o.opacity}|${c}|${u}|${o.box.w}|${o.box.h}|${o.box.x}|${o.box.y}|${this.held?.at??5}`:`${s}||1|${c}|${u}|0|0|0|0|5`;if(l===this.viewed)return"";return this.viewed=l,gi(l)}let a=this.layer(mA,pA,"f=24",Buffer.from(nt(s)),r,i);if(o){let c=Math.max(0,Math.min(255,Math.round((1-o.opacity)*255)));a+=this.picture(o),a+=this.layer(uv,gA,"f=32",Buffer.from([...nt(s),c]),r,i)}else a+=this.drop(wn)+this.drop(uv);return a}resized(){this.sent.clear(),this.placed.clear(),this.viewed=""}clear(){let t=this.views&&this.viewed?gi(""):"";for(let e of this.sent.keys())t+=ha(e);return this.resized(),t}close(){let t=this.clear();if(this.tints.clear(),this.renders?.close(),this.scratch)av(this.scratch,{recursive:!0,force:!0});return t}look(t,e,n,r,i){let s=this.held;if(!s)return;let o={name:this.name,...ee([...t]),waived:[...n]},a=Zu(s.picture,s.image,o,e,this.tints),c=$A(a.image);if(!c)return;let u=ms(c.width,c.height,r*this.cell.w,i*this.cell.h,100,s.at,s.cover),l=wA(c.width,c.height,r,i,this.cell,u);if(!l)return;return{image:a.image,opacity:s.opacity===s.picture.opacity?a.opacity:s.opacity,...c,box:u,rect:l}}layer(t,e,n,r,i,s){let o=r.toString("base64"),a=`${o}|${i}|${s}`;if(this.placed.get(t)===a)return"";return this.sent.set(t,a),this.placed.set(t,a),`\x1B_Ga=t,${n},s=1,v=1,i=${t},q=2;${o}\x1B\\\x1B[H\x1B_Ga=p,i=${t},p=${t},c=${i},r=${s},C=1,z=${e},q=2\x1B\\`}picture(t){let{image:e,rect:n}=t;if(this.banded&&(2*n.y+n.h-t.height)**2>1){let s=this.band(t.image,n.y,n.h);if(!s.ready)return"";e=s.path,n={...n,y:0}}let r="";if(this.sent.get(wn)!==e){let s=ju({id:wn,path:e,row:0,col:0,cols:0,rows:0,z:lv},this.files);if(s===void 0)return"";r+=s,this.sent.set(wn,e),this.placed.delete(wn)}let i=`${n.col};${n.row};${n.cols};${n.rows};${n.x};${n.y};${n.w};${n.h}`;if(this.placed.get(wn)!==i)r+=`\x1B[${n.row+1};${n.col+1}H\x1B_Ga=p,i=${wn},p=${wn},x=${n.x},y=${n.y},w=${n.w},h=${n.h},c=${n.cols},r=${n.rows},C=1,z=${lv},q=2\x1B\\`,this.placed.set(wn,i);return r}drop(t){if(!this.sent.has(t))return"";return this.sent.delete(t),this.placed.delete(t),ha(t)}band(t,e,n){let r=`${t}|${e}|${n}`,i=this.bands.get(r);if(i)return i;this.scratch??=uA(cv(hA(),"ttheme-edit-")),this.renders??=new wa;let s={path:cv(this.scratch,`band-${++this.made}.png`),ready:!1};this.bands.set(r,s),this.renders.run({job:"band",from:t,to:s.path,y:e,height:n}).then(()=>{s.ready=!0,this.ready()}).catch(()=>{});for(let[o,a]of this.bands){if(this.bands.size<=bA)break;if(a.ready&&a.path!==this.sent.get(wn))this.bands.delete(o),av(a.path,{force:!0})}return s}}var fv=80,dv=24,ka=50,Sm=11;function Lt(t,e){return se(t,e)}function gv(t){return{color:t,dim:(e)=>t?`${P}${e}${fe}`:e,bold:(e)=>t?`${at}${e}${fe}`:e,fg:(e)=>t?Le(e):"",bg:(e)=>t?`\x1B[48;2;${nt(e).join(";")}m`:""}}function hv(t){return yt(t)>0.35?"#000000":"#ffffff"}function bv(t,e,n,r,i){let s=e.length-1,o=Math.max(0,Math.min(s,n)),a=i===void 0?-1:Math.max(0,Math.min(s,i));if(!t.color)return e.map((c,u)=>u===o?"●":u===a?"○":r?"━":"─").join("");return e.map((c,u)=>{let l=c??"#000000";if(u===o)return`${t.bg(l)}${t.fg(hv(l))}●\x1B[39;49m`;if(u===a)return c?`${t.bg(c)}${t.fg(hv(c))}○\x1B[39;49m`:`${t.fg("#aaaaaa")}○`;return c?`${t.fg(c)}█`:`${t.fg(r?"#777777":"#555555")}░`}).join("").concat("\x1B[39m")}function kA(t,e,n){return Array.from({length:n},(r,i)=>{let s=e.min+(e.max-e.min)*i/(n-1),o={...t,[e.key]:s};return pa(o.l,o.c,o.h)?Fe(o.l,o.c,o.h):void 0})}function Em(t,e,n,r){return Math.round((t-e)/(n-e)*(r-1))}function wv(t,e){return t.held!==void 0&&t.held-e.c>0.0005?t.held:void 0}function $v(t,e,n,r){let i=wv(e,n);return Je.map((s,o)=>{let a=e.mode==="tune"&&o===e.channel,c=n[s.key],u=`${c.toFixed(s.digits)}${s.wraps?"°":""}`.padStart(6),l=bv(t,kA(n,s,r),Em(c,s.min,s.max,r),a,s.key==="c"&&i!==void 0?Em(i,s.min,s.max,r):void 0),f=s.key.toUpperCase(),d={kind:"channel",channel:o};return`${Lt(d,a?t.bold(`▸${f}`):t.dim(` ${f}`))} ${Lt({kind:"bar",channel:o},l)} ${Lt(d,a?t.bold(u):t.dim(u))}`})}function kv(t,e,n){let r=e.mode==="tune"&&e.channel===Dn,i=e.ratio(),{floor:s}=e.partner(),o=(h)=>Math.round(Math.log(Math.max(1,h))/Math.log(21)*(n-1)),a=o(i),c=s===void 0?-1:o(s),u=r?"━":"─",l=Array.from({length:n},(h,p)=>p===a?t.bold("●"):p===c?"┃":p<c?t.dim(u):u).join(""),f=`${i.toFixed(2)}:1`.padStart(6),d={kind:"channel",channel:Dn};return`${Lt(d,r?t.bold("▸◐"):t.dim(" ◐"))} ${Lt({kind:"bar",channel:Dn},l)} ${Lt(d,r?t.bold(f):t.dim(f))}`}function yv(t,e){if(e.mode!=="tune"||e.slot()<L.length)return[];let n=ee(e.list),r=Qs.map((s)=>Lt({kind:"scope",scope:s},s!==e.scope?t.dim(s):t.color?`${t.bg(n.selection)}${t.fg(n.foreground)} ${s} \x1B[39;49m`:`[${s}]`)),i=e.scoped().length;return[`${t.dim("Scope")} ${r.join(" ")}`,t.dim(i>1?`${i} slots move by the same step, each keeping its own color`:"This slot moves alone · a widens it")]}function yA(t,e){if(!t.misses().has(e))return;if(bm(t.list,t.signature,t.waive,"bright-follows").includes(e))return e-L.length<8?"= makes the bright follow its normal":"= on the normal makes this follow it";return"f moves the colors the gate misses"}function vv(t,e,n){let r=Yu(t.list,t.signature,t.waive,e),i=wv(t,n);if(i!==void 0)r.push({ok:void 0,text:`Chroma ○ ${i.toFixed(3)} is held while you tune — ${n.c.toFixed(3)} fits this lightness and hue`});return r}var mv={background:(t)=>t.background,foreground:(t)=>t.foreground,hue:(t)=>t.cursor,tint:(t)=>t.background,lightness:(t)=>t.ansi[4],chroma:(t)=>t.ansi[1],brights:(t)=>t.ansi[12]};function vA(t){return`oklch ${t.l.toFixed(3)} ${t.c.toFixed(3)} ${t.h.toFixed(0)}°`}function Mm(t){return`${t.l.toFixed(2)} ${t.c.toFixed(3)} ${t.h.toFixed(0).padStart(3)}°`}function Sv(t,e){return`${t.dim("oklch")} ${t.bold(`${e.l.toFixed(3)} ${e.c.toFixed(3)} ${e.h.toFixed(0)}°`)}`}function tl(t,e){return e===void 0?t.dim("·"):e?t.dim("✓"):t.bold("✗")}function Ev(t,e,n,r=ka){let i=qy(e.list,e.signature,e.waive).sort((u,l)=>Number(u.ok!==!1)-Number(l.ok!==!1)),s=i.filter((u)=>u.ok===!1).length,o=` ${t.dim("Gate")} ${s===0?t.dim("passes"):t.bold(`${s} ${s===1?"miss":"misses"}`)}`,a=r-4,c=i.flatMap((u)=>{let l=`${u.value} ${u.bound}`,f=` ${tl(t,u.ok)} ${jt(u.ok===!1?u.label:t.dim(u.label),t.dim(l),a-2)}`,d=[...new Set(u.slots)].map(($)=>Fi($).name),h=u.slots[0],p=($)=>h===void 0?$:Lt({kind:"slot",slot:h},$);return d.length>0?[p(f),p(` ${t.dim(ot(d.join(" · "),a-2))}`)]:[p(f)]});return[s===0?o:jt(o,`${t.bold("n")} ${t.dim("next miss")}`,r-2),...c.slice(0,Math.max(0,n-1))]}function Mv(t,e,n,r=ka,i=!0){let s=e.misses(),o=ee(e.list),a=i?e.slot():-1,c=(f)=>{let d=e.list[f],h=f===a,p=e.signature.includes(Li[f])?"◆":t.color?"■":" ",$=s.has(f)?"✗":e.theme&&e.offDefault(f)?"↺":" ",b=`${t.color?`${t.fg(d)}${p}${h?t.fg(o.foreground):"\x1B[39m"} `:`${p} `}${Mm(e.lch[f])}${$}`;if(!h)return Lt({kind:"slot",slot:f},` ${b}`);return Lt({kind:"slot",slot:f},t.color?`${t.bg(o.selection)}${t.fg(o.foreground)} ${b}\x1B[39;49m`:`›${b}`)},u=(f)=>f?t.color?`${t.fg(o.cursor)}▌\x1B[39m `:"▌ ":" ",l=[` ${t.dim("Base")}`];for(let f=0;f<L.length;f++){let d=i&&f===e.row,h=L[f].padEnd(10);l.push(`${Lt({kind:"slot",slot:f},`${u(d)}${d?t.bold(h):h}`)}${c(f)}`)}l.push("",` ${t.dim(`${"ANSI".padEnd(10)} ${"Normal".padEnd(18)} Bright`)}`);for(let f=L.length;f<Ur;f++){let d=i&&f===e.row,h=Du[f-L.length].padEnd(10),p=Lt({kind:"slot",slot:f+(e.col===1?8:0)},`${u(d)}${d?t.bold(h):h}`);l.push(`${p}${c(f)}${c(f+8)}`)}return l.push(""),[...l,...Ev(t,e,n-l.length,r)]}function SA(t,e,n){let r=ee(e.list),i=[` ${t.dim("Seeds")}`];Hi.forEach((s,o)=>{let a=o===e.field,c=e.seeds[s.key],u=Array.from({length:Sm},(g,b)=>{let y=s.min+(s.max-s.min)*b/(Sm-1);return mv[s.key](Wr({...e.seeds,[s.key]:y}))}),l=bv(t,u,Em(c,s.min,s.max,Sm),a),f=`${c.toFixed(s.digits)}${s.wraps?"°":""}`.padStart(6),d=mv[s.key](r),h=a?t.color?`${t.fg(r.cursor)}▌\x1B[39m `:"▌ ":" ",p=s.label.padEnd(17),$={kind:"field",field:o};i.push(`${Lt($,`${h}${a?t.bold(p):p}`)}${Lt({kind:"seed",field:o},l)}${Lt($,` ${f} ${t.color?`${t.fg(d)}■\x1B[39m `:""}${t.dim(d)}`)}`)}),i.push("");for(let s of kt("Seven seeds grow all twenty colors, each accent on the hue its ANSI role reads as — whatever the seeds, they pass the gate. enter moves on to tune each slot, and the seeds stay behind.",ka-4))i.push(` ${t.dim(s)}`);return i.push(""),[...i,...Ev(t,e,n-i.length)]}function EA(t,e){let n=t-L.length;if(n>=0)return e===String(n)||e===`B${n}`||e===`K${n}`;return t===3&&e==="s"||t===2&&e==="c"}function MA(t,e,n,r){let i=r?"\x1B[4m":"";if(n==="d")return`${t.fg(e.foreground)}\x1B[2m${i}`;if(n==="b")return`${t.fg(e.foreground)}\x1B[1m${i}`;if(n==="s")return`${t.bg(e.selection)}${t.fg(e.foreground)}${i}`;if(n==="c")return`${t.bg(e.cursor)}${i}`;let s=/^([BK]?)(\d+)$/.exec(n);if(!s)return`${t.fg(e.foreground)}${i}`;let o=e.ansi[Number(s[2])];if(s[1]==="K")return`${t.fg(e.ansi[0])}${t.bg(o)}${i}`;return`${t.fg(o)}${s[1]==="B"?"\x1B[1m":""}${i}`}function Ov(t,e,n,r,i,s){let o=te.indexOf(hi(i)),a=te.map((l,f)=>Lt({kind:"scene",scene:f},f!==o?t.dim(l.name):t.color?`${t.bg(e.selection)}${t.fg(e.foreground)} ${l.name} \x1B[39;49m`:`[${l.name}]`)).join(" "),c=[jt(a,t.dim("⇧←→"),n)],u=`${t.bg(e.background)}${t.fg(e.foreground)}`;for(let l of hi(i).lines){let f=jc(l,n-2);if(!f)continue;if(c.length>=r)break;let d=t.color?f.map(([h,p])=>`${MA(t,e,p,EA(s,p))}${h}\x1B[0m${u}`).join(""):f.map(([h])=>h).join("");c.push(`${u} ${ot(d,n-2)} ${t.color?"\x1B[0m":""}`)}return c}var OA=["Bk","Rd","Gr","Ye","Bl","Ma","Cy","Wh"];function pv(t,e,n,r,i,s,o){let a=(i-s)/(o-1),c=Iv(e),u=ee(n),l=(f)=>Math.min(o-1,Math.max(0,Math.round((i-r(St(f)))/a)));return Array.from({length:o},(f,d)=>{let p=`${(d%2===0?(i-a*d).toFixed(i>=1?1:2).replace(/^0(?=\.\d\d)/,""):"").padStart(4)} ${t.dim(d%2===0?"┤":"│")}`;for(let $=0;$<8;$++){let g=[" "," "," "," "," "],b=u.ansi[$],y=u.ansi[$+8],S=l(b)===d,E=l(y)===d,I=(R)=>{if(R===1&&S)return t.color?`${t.fg(b)}●`:"●";if(R===3&&E)return t.color?`${t.fg(y)}○`:"○";return g[R]},N=[0,1,2,3,4].map(I).join("");p+=c.has($)?t.color?`${t.bg(u.selection)}${N}\x1B[39;49m`:N:`${N}${t.color?"\x1B[39m":""}`}return p})}function Iv(t){let e=t.mode==="tune"?t.scoped():[t.slot()];return new Set(e.filter((n)=>n>=L.length).map((n)=>(n-L.length)%8))}function IA(t,e){let n=Iv(e);return` ${OA.map((r,i)=>n.has(i)?t.bold(` ${r} `):t.dim(` ${r} `)).join("")}`}function xA(t,e){let n=ee(e),r=Array.from({length:40},(s,o)=>{let a=o*9+4.5,c=-1,u=999;for(let[l,f]of Object.entries(de)){let d=Ne(a,f.center);if(d<=f.width&&d<u)u=d,c=Number(l)}return c<0?" ":t.color?`${t.fg(n.ansi[c])}─`:"─"}).join(""),i=(s,o)=>{let a=Array.from({length:40},()=>" ");for(let c of Object.keys(de).map(Number)){let u=n.ansi[c+s],l=Math.min(39,Math.round(St(u).h/9));a[l]=t.color?`${t.fg(u)}${o}\x1B[39m`:o}return` ${a.join("")}`};return[`${t.bold("Hue")} ${t.dim("0° 90° 180° 270° 360°")}`,`${t.dim("bands")} ${r}${t.color?"\x1B[39m":""}`,i(0,"●"),i(8,"○")]}function NA(t,e,n){let r=Ci(n,e.signature,e.waive),i=(a)=>Fi(L.length+a).name,s=(a)=>St(n[L.length+a]).h.toFixed(0),o=[...Mn(r).filter(({gap:a})=>a>25).map(({normal:a,gap:c})=>`${i(a)} ${s(a)}° → bright ${s(a+8)}° · ${c.toFixed(0)}° apart · ≤ 25°`),...Vn(r).map(({slot:a,over:c})=>{let u=de[Xe(a)];return`${i(a)} ${s(a)}° · ${c.toFixed(0)}° outside ${u.name} ${u.center}±${u.width}°`}),...On(r).map(([a,c])=>`${i(a)} and ${i(c).toLowerCase()} read as one color`)];return o.length>0?o.map((a)=>`${t.bold("✗")} ${a}`):[t.dim("✓ Every accent keeps its role and its bright")]}function Om(t,e,n,r,i){let s=e.shown(),o=Math.max(...s.slice(L.length).map((u)=>St(u).c)),a=Math.max(0.2,Math.ceil(o/0.05)*0.05),c=[jt(t.bold("Lightness"),t.dim("● normal ○ bright"),n),...pv(t,e,s,(u)=>u.l,1,0.3,8),IA(t,e)];if(i)c.push("",t.bold("Chroma"),...pv(t,e,s,(u)=>u.c,a,0,5),"",...xA(t,s));return[...c,...NA(t,e,s)].slice(0,r)}function RA(t,e,n){let r=ee(e.list),i=(s,o)=>Lt({kind:"view",view:o},e.view!==o?t.dim(` ${s} `):t.color?`${t.bg(r.selection)}${t.fg(r.foreground)}${t.bold(` ${s} `)}\x1B[39;49m`:`[${s}]`);return jt(`${i("Slot","slot")}${i("Relations","relations")}`,fn("g",`${t.bold("g")} ${t.dim("switch")}`),n)}function TA(t,e,n,r){let i=e.slot(),s=e.list[i],o=e.lch[i],a=e.start[i],{name:c,about:u}=Fi(i),l=e.signature.includes(Li[i]),f=Math.max(8,Math.min(64,n-12));if(e.view==="relations"&&e.mode!=="tune")return[RA(t,e,n),"",...Om(t,e,n,r-2,!0)];let d=i>=L.length?t.dim("Uses underlined below"):l?t.dim("◆ signature"):"",h=[jt(`${t.bold(c)} ${t.dim(u)}`,e.view==="relations"?"":d,n),""],p=t.color?`${t.fg(s)}${"█".repeat(8)}\x1B[39m `:"",$=e.typing!==void 0?`${t.bold(`${e.typing}▏`)}`:void 0,[g,b,y]=nt(s);if(h.push(`${p}${$??Sv(t,o)}`),h.push(`${p}${t.dim(`${s} · rgb ${g} ${b} ${y}`)}`),e.view!=="relations"){let N=t.color?`${t.fg(a)}■\x1B[39m `:"";h.push(`${p}${a!==s?t.dim(`was ${N}${vA(e.lchOf(a)).slice(6)} · ${a}`):t.dim("as it opened")}`)}h.push(""),h.push(...$v(t,e,o,f),kv(t,e,f));let S=yv(t,e);if(S.length>0)h.push(...S);if(e.view==="relations")return h.push("",...Om(t,e,n,r-h.length-1,!1)),h;h.push("");for(let N of vv(e,i,o))kt(N.text,n-2).forEach((R,F)=>{h.push(`${F===0?tl(t,N.ok):" "} ${N.ok===!1?R:t.dim(R)}`)});let E=yA(e,i);if(E)h.push(t.dim(` ${E}`));let I=r-h.length-1;if(I>=3)h.push("",...Ov(t,ee(e.shown()),n,I,e.scene,i));return h}function PA(t,e,n,r){return[jt(`${t.bold("Sample")} ${t.dim("what the seeds grow")}`,"",n),"",...Ov(t,ee(e.list),n,r-2,e.scene,-1)]}var HA=[["Slots","↑↓ slot · ←→ normal or bright · home end · pgup the base colors · pgdn the ANSI ones · n N the next and last miss"],["Tune","enter or tab · ↑↓ lightness, chroma, hue or contrast · ←→ step · ⇧←→ ×5, hue ×10 · home end the ends · 0-9 jump · enter keeps · esc undoes"],["Contrast","◐ moves lightness until the ratio to the color it is read against changes · home the gate’s floor · 1-9 that ratio"],["Chroma","stops at the sRGB edge · what lightness or hue takes away comes back while you tune, where it fits again (○)"],["Scope","a while tuning: this, pair, normals, brights or accents — the slots in it move by the same step, each keeping its own color"],["Relations","g shows the lightness, chroma and hue of every ANSI color at once, and the relations the gate checks"],["Sample","⇧←→ another scene · the slot under the cursor is underlined where it is used"],["Type","# then #rrggbb, rgb(r g b) or oklch(l c h) — a paste works too"],["Slot","c copies · v pastes · r puts it back as it opened, R all of them · = the bright follows its normal · * marks it a signature color"],["Palette","f moves the colors the gate misses · o takes another palette’s colors"],["Gate","✗ marks every slot whose own checks miss, and each miss names its slots"],["History","u undo · ctrl+r redo"],["Pictures","p finds one on the boorus, tried on in these colors · drop a picture on the window, or paste one, its path or its link · ctrl+v takes the clipboard’s"],["Compare","space shows the colors you started from, on the terminal too"],["Save","s saves · esc cancels, asking first when something changed"]];function AA(t,e,n){let r=[` ${t.bold("Help")}`,""];for(let[i,s]of HA.filter(([o])=>o!=="Pictures"||e.options.find))kt(s,n-16).forEach((o,a)=>{r.push(` ${t.bold((a===0?i:"").padEnd(11))} ${o}`)});return r}function FA(t,e,n,r){let i=e.choices(),s=e.options.palettes?.length??0,o=e.filter?`${t.bold(e.filter)}▏`:t.dim("type to filter"),a=[jt(` ${t.bold("Take colors from")} ${o}`,t.dim(`${i.length}/${s}`),n),""],c=r-2,u=Math.max(0,Math.min(e.pick-Math.floor(c/2),i.length-c)),l=Math.min(40,Math.max(12,...i.map((f)=>Q(f.name))));if(i.slice(u,u+c).forEach((f,d)=>{let h=u+d===e.pick,p=f.colors,$=t.color?`${t.bg(p.background)} ${[...p.ansi].map((y)=>`${t.fg(y)}■`).join("")} ${t.fg(p.foreground)}Aa \x1B[0m`:"",g=h?"▌ ":" ",b=f.name.padEnd(l);a.push(Lt({kind:"choice",index:u+d},`${g}${h?t.bold(b):b} ${$}`))}),i.length===0)a.push(` ${t.dim(`No palettes match '${e.filter}'`)}`);return a}var CA=new Set(["enter","s","?","g","a"]);function LA(t,e,n){let r=t.fg(e.list[2]),i="EDIT",s="",o=[],a="";if(e.quitting)i="EDIT (QUIT)",s=e.added>0?`Discard changes and ${e.added} ${e.added===1?"picture":"pictures"}?`:"Discard changes?",o=[["y","discard"],["n","keep editing"]];else if(e.typing!==void 0)i="EDIT (TYPE)",s=t.dim("#rrggbb, rgb(r g b) or oklch(l c h)"),o=[["enter","set"],["ctrl+u","clear"]],a="esc back";else if(e.overlay==="keys")i="HELP",a="any key closes";else if(e.overlay==="open")i="EDIT (OPEN)",o=[["↑↓","palette"],["a-z","filter"],["enter","take its colors"]],a="esc close";else if(e.compare)i="EDIT (BEFORE)",s="The colors you started from",o=[["space","back to yours"]],a="esc back";else if(e.mode==="seeds")i="EDIT (SEEDS)",o=[["↑↓","seed"],["←→","step"],["⇧←→","×5"],["enter","tune the slots"],["o","open a palette"],["p","picture"],["?","keys"]],a="esc cancel";else if(e.mode==="tune")i="EDIT (TUNE)",o=[["↑↓","L C H ◐"],["←→","step"],...e.slot()>=L.length?[["a","scope"]]:[],["⇧←→","faster"],[e.channel===Dn?"1-9":"0-9",e.channel===Dn?"ratio":"jump"],["#","type"],["enter","keep"]],a="esc undo";else o=[["↑↓","slot"],["←→","normal or bright"],["enter","tune"],["g",e.view==="slot"?"relations":"slot"],...e.misses().size>0?[["n","next miss"]]:[],["#","type"],["f","fix"],["p","picture"],["u","undo"],["s","save"],["?","keys"]],a="esc cancel";if(!e.options.find)o=o.filter(([l])=>l!=="p");if(e.notice)s=t.color?`\x1B[33m${e.notice}\x1B[39m`:e.notice,o=[];let c=t.color?`\x1B[7;1m${r} ${i} \x1B[0m `:`[${i}] `,u=a?fn(a.split(" ")[0],`${t.bold(a.split(" ")[0])} ${t.dim(a.split(" ").slice(1).join(" "))}`):"";for(;;){let l=[s,...o.map(([h,p])=>fn(h,`${t.bold(h)} ${t.dim(p)}`))].filter(Boolean),f=`${c}${l.join(" ")}`,d=-1;if(o.forEach(([h],p)=>{if(p>0&&!CA.has(h))d=p}),Q(f)+Q(a)+3<=n||d<0)return a?jt(f,u,n):ot(f,n);o=o.filter((h,p)=>p!==d)}}var Im=50,xm=22;function xv(t){let e=t.notice??"";if(t.typing!==void 0)return{mode:"type",keys:[["enter","set"],["ctrl+u","clear"],["esc","back"]],note:e};if(t.compare)return{mode:"compare",keys:[["space","back to yours"],["esc","back"]],note:e};if(t.mode==="tune")return{mode:"tune",keys:[["↑↓","L C H ◐"],["←→","step"],...t.slot()>=L.length?[["a","scope"]]:[],["⇧←→","×5"],["enter","keep"],["esc","undo"]],note:e};return{mode:"list",keys:[["↑↓←→","slot"],["enter","tune"],["g",t.view==="slot"?"relations":"slots"],...t.misses().size>0?[["n","next miss"]]:[],["r","reset slot"],["R","reset all"],["#","type a color"],["space","before"]],note:e}}function jA(t,e,n,r){let i=e.slot(),s=e.list[i],o=e.lch[i],a=e.start[i],c=e.original[i],{name:u,about:l}=Fi(i),f=e.signature.includes(Li[i]),d=t.color?`${t.fg(s)}${"█".repeat(4)}\x1B[39m `:"",h=e.typing!==void 0?t.bold(`${e.typing}▏`):void 0,p=[a!==s?`was ${t.color?`${t.fg(a)}■\x1B[39m `:""}${Mm(e.lchOf(a))}`:"",c!==s?`default ${t.color?`${t.fg(c)}■\x1B[39m `:""}${Mm(e.lchOf(c))}`:""].filter(Boolean),$=[jt(`${t.bold(u)} ${t.dim(l)}`,f?t.dim("◆ signature"):"",n),`${d}${h??Sv(t,o)} ${t.dim(s)}`,...r>=7?[`${d}${t.dim(p.length>0?p.join(" "):"as the palette has it")}`]:[]],g=Math.max(8,Math.min(40,n-12));$.push(...$v(t,e,o,g),kv(t,e,g));for(let b of yv(t,e))if($.length<r)$.push(ot(b,n));for(let b of vv(e,i,o))for(let[y,S]of kt(b.text,n-2).entries()){if($.length>=r)return $;$.push(`${y===0?tl(t,b.ok):" "} ${b.ok===!1?S:t.dim(S)}`)}return $}function Nv(t,e,n,r,i){let s=gv(r);if(t.view==="relations"&&t.mode==="list"&&t.typing===void 0){let y=i?s.bold("Palette"):s.dim("Palette"),S=Om(s,t,e-2,n-1,!1).map((N)=>` ${N}`),I=[` ${jt(`${y} ${s.dim("Relations")}`,fn("g",`${s.bold("g")} ${s.dim("slots")}`),e-2)}`,...S];return{lines:Array.from({length:n},(N,R)=>ot(I[R]??"",e)),at:2}}let o=Mv(s,t,0,e,i).slice(1,-2),a=(t.mode==="tune"||t.typing!==void 0)&&n-1-o.length<6,c=a?[]:[...o],u=t.row<L.length?t.row+2:t.row+4;if(!a&&n-1-c.length>=9)c.push("");let l=n-1-c.length;if(l>=5){let y=c.length+1;if(c.push(...jA(s,t,e-2,l).map((S)=>` ${S}`)),t.mode==="tune")u=y+3+(l>=7?1:0)+t.channel;else if(t.typing!==void 0)u=y+2}let f=i?s.bold("Palette"):s.dim("Palette"),d=i&&l<5?Yu(t.list,t.signature,t.waive,t.slot()).find((y)=>y.ok===!1):void 0,h=t.failing().length,p=h===0?"passes the gate":`${h} ${h===1?"miss":"misses"} in the gate`,$=t.list.filter((y,S)=>t.offDefault(S)).length,b=[` ${d?`${f} ${tl(s,!1)} ${d.text}`:jt(`${f}${$>0?s.dim(` ${$} off its default`):""}`,s.dim(p),e-2)}`,...c];return{lines:Array.from({length:n},(y,S)=>ot(b[S]??"",e)),at:u}}function GA(t,e,n,r){let i=gv(r);if(e<fv||n<dv){let p=[i.bold("ttheme palette editor"),`Needs ${fv}×${dv} — now ${e}×${n}`,i.dim("esc cancels")];return Array.from({length:n},($,g)=>ot(p[g]??"",e))}let s=t.failing().length,o=s===0?"✓ Passes the gate":`✗ ${s} ${s===1?"miss":"misses"} in the gate`,a=t.pictures>0?i.dim(`▣ ${t.pictures} ${t.pictures===1?"picture":"pictures"} `):"",c=`${t.dirty()?`${i.color?"\x1B[33m●\x1B[39m":"●"} unsaved `:""}${a}${i.dim(o)}`,l=`${i.fg(t.list[2])}◆${i.color?"\x1B[39m":""} ${i.bold(t.options.title)} ${i.dim(`· ${t.options.name}`)}`,f=n-4,d;if(t.overlay==="keys")d=AA(i,t,e);else if(t.overlay==="open")d=FA(i,t,e,f);else{let p=e-ka-2,$=t.mode==="seeds"?SA(i,t,f):Mv(i,t,f),g=t.mode==="seeds"?PA(i,t,p,f):TA(i,t,p,f);d=Array.from({length:f},(b,y)=>`${ot($[y]??"",ka)}${i.dim("│")} ${ot(g[y]??"",p)}`)}let h=[jt(l,c,e),""];for(let p=0;p<f;p++)h.push(ot(d[p]??"",e));return h.push("",LA(i,t,e)),h}function Nm(t,e,n){if(n.action==="wheel"){if(!n.sideways)t.scroll(n.wheel);return}if((n.action==="press"||n.action==="drag")&&n.button!=="left")return;if(n.action==="press"&&t.overlay==="keys"){t.press("esc");return}let r=e?.target;if(!e||!r)return;let i=e.width>1?e.x/(e.width-1):0;if(n.action==="release"){if(!e.inside)return;if(r.kind==="key")t.press(r.key);else if(n.count===2&&r.kind==="slot"&&t.mode==="list")t.press("enter");else if(n.count===2&&r.kind==="choice"&&t.overlay==="open")t.press("enter");return}if(r.kind==="bar")t.slide(r.channel,i);else if(r.kind==="seed")t.sow(r.field,i);else if(n.action!=="press")return;else if(r.kind==="slot")t.select(r.slot);else if(r.kind==="channel")t.grip(r.channel);else if(r.kind==="scope")t.scopeTo(r.scope);else if(r.kind==="choice"){if(t.overlay==="open")t.pick=r.index}else if(t.typing===void 0&&!t.overlay&&!t.quitting){if(r.kind==="field"&&t.mode==="seeds")t.field=r.field;else if(r.kind==="view"&&t.mode!=="seeds")t.view=r.view;else if(r.kind==="scene")t.scene=r.scene}}var _A=[Ru,Wn,Ni,Gr],BA=33;async function Rv(t,e){let n=new ba(t),r=e.backdrop,i=(s)=>n.typing===void 0&&Ku(s);return _r({modes:[..._A,...Ks()],burst:i},async(s)=>{let o=[],a="",c,u=!1,l=!1,f=()=>{if(c=void 0,e.look){let g=n.shown();if(g.join(" ")!==a)a=g.join(" "),e.look(g);return}let $="";n.shown().forEach((g,b)=>{if(o[b]!==g&&e.only?.includes(b))$+=Go(b,g),o[b]=g}),s.write($)},d=new Mi({write:($)=>s.write($),view:()=>u?void 0:{lines:GA(n,s.cols,s.rows,e.color),after:()=>r?.draw(n.shown(),n.signature,n.waive,s.cols,s.rows)??""}}),h=($=!1)=>{if($)d.soon();else d.request();if(e.only||e.look)c??=setTimeout(f,BA)},p=async($)=>{let g=t.find;if(!g)return;if(u=!0,clearTimeout(c),c=void 0,r)s.write(r.clear());try{n.found(await g(n.edited(),$))}catch(b){n.notice=b instanceof Error?b.message:String(b)}if(l)return;u=!1,r?.load(),o.length=0,a="",d.reset(bi),h()};if(s.write(bi),s.onResize(()=>{r?.resized(),d.reset(bi),d.request()}),r){r.load(),r.ready=()=>d.request();let $=new ra;s.ask(xu,(g)=>$.see(g),1000).then((g)=>{if(g)r.measured(g);d.request()})}h();try{let{edited:$}=await s.loop((g)=>{if(u)return;if(g.kind==="paste")n.paste(g.text);else if(g.kind==="key")n.press(g.key);else if(g.kind==="mouse")Nm(n,d.point(g),g);if(n.result)return{edited:n.result==="saved"?n.edited():void 0};let b=n.wants;if(b)n.wants=void 0,p(b.start);return},()=>{if(!u)h(!0)});return $}finally{if(l=!0,clearTimeout(c),d.stop(),r)s.write(r.close())}})}import{spawn as eF}from"node:child_process";import{createHash as zv}from"node:crypto";import{existsSync as va,mkdirSync as nF,mkdtempSync as rF,readFileSync as iF,rmSync as el}from"node:fs";import{homedir as sF,tmpdir as oF}from"node:os";import{basename as aF,dirname as cF,join as $n}from"node:path";import{pathToFileURL as Hv}from"node:url";import{existsSync as WA,readFileSync as UA,statSync as KA}from"node:fs";import{join as Tv}from"node:path";function zA(t,e){try{return JSON.parse(UA(Tv(_e(t),e),"utf8"))}catch{return{}}}function DA(t,e,n){H(Tv(_e(t),e),`${JSON.stringify(n)}
720
- `)}class Rm{caches=new Map;unsaved=new Set;owners=new Map;crediting=new Map;inflight=new Map;home;catalog;entry;signal;credited;constructor(t){this.home=t.home,this.catalog=t.catalog,this.entry=t.entry,this.signal=t.signal,this.credited=t.credited}matesOf(t,e){return this.owners.get(t.key)?.get(e)??[]}async transparent(t,e){let n=this.keep(t,"probes.json"),r=n[e.id];if(r!==void 0)return r;try{let i=await $o(t,e,this.signal),s=si(t,e),o=(i===void 0?await Ob(s.site,s.url,this.signal):i)?.alpha===!0;return n[e.id]=o,this.unsaved.add(`${t.key}/probes.json`),o}catch{return!1}}save(){for(let t of this.unsaved){let[e,n]=t.split("/"),r=Y.find((i)=>i.key===e);if(r)DA(r,n,this.keep(r,n))}this.unsaved.clear()}owned(t,e,n){this.keep(t,"owners.json")[e]=n,this.unsaved.add(`${t.key}/owners.json`)}credit(t,e){let{site:n,post:r}=t;if(!qa(n,r))return Promise.resolve();let i=pe(n,r.id),s=this.crediting.get(i);if(!s)s=this.credits(t,e).finally(()=>this.crediting.delete(i)),this.crediting.set(i,s);return s}async mateOwners(t){let e=this.owners.get(t.key);if(e)return e;let n=fw(this.home),r=this.keep(t,"owners.json"),i=this.catalog.palettes.flatMap((c)=>{let u=n.get(c.name);return c.group===this.entry.group&&c.name!==this.entry.name&&u?.site===t.key?[{name:c.name,id:u.id}]:[]}),s=await Promise.all(i.map(async(c)=>{let u=r[c.id];if(u!==void 0)return{...c,owner:u};try{return{...c,owner:(await is(t,c.id,this.signal))?.owner??""}}catch{return}})),o=new Map;for(let c of s)if(c)r[c.id]=c.owner,o.set(c.name,c.owner);this.unsaved.add(`${t.key}/owners.json`);let a=kb(o);return this.owners.set(t.key,a),a}async cached(t,e,n,r){if(WA(e))return KA(e).size;let i=this.inflight.get(e);if(i)return i;let s=(async()=>{let o=await Va(t,n,this.signal,r);return H(e,o),o.length})();this.inflight.set(e,s);try{return await s}finally{this.inflight.delete(e)}}keep(t,e){let n=`${t.key}/${e}`,r=this.caches.get(n);if(!r)r=zA(t,e),this.caches.set(n,r);return r}async credits({site:t,post:e},n){let r=this.keep(t,"credits.json"),i=r[e.id];if(!i){try{i=await Da(t,e.id,n)}catch{return}if(!i?.owner)return;r[e.id]=i,this.unsaved.add(`${t.key}/credits.json`)}wo(e,i),this.credited()}}import{rmSync as qA}from"node:fs";import{join as YA}from"node:path";var to=2147483645,ya=2147483646,Pv=-1073741827,JA=-1073741828,VA=16,ZA=0.4,QA=3221225472,XA=256;function tF(t){let e=/^(\d+) (\d+)$/.exec(t??"");return e&&(Number(e[1])>0||Number(e[2])>0)?{x:Number(e[1]),y:Number(e[2])}:void 0}var Tm=tF(process.env.TTHEME_BG_MARGIN);class Pm{screen;gliding;sent=new Map;placed=new Map;covered="";viewed="";bands=Uc(process.env);files=Kc(process.env);moves=j0(process.env);layers=zc(process.env);wipes=G0(process.env);views=pi(process.env);bandFiles=new Map;nextBand=QA;view;grid;background;renders;scratch;signal;write;constructor(t){this.view=t.view,this.grid=t.grid,this.background=t.background,this.renders=t.renders,this.scratch=t.scratch,this.signal=t.signal,this.write=t.write,this.screen=new Mi({write:(e)=>this.write(e),view:()=>this.frame(),beat:()=>{this.view.beat++}})}draw(){if(!this.signal.aborted)this.screen.request()}soon(){if(!this.signal.aborted)this.screen.soon()}flush(){if(!this.signal.aborted)this.screen.now()}point(t){return this.screen.point(t)}drop(){this.screen.drop()}frame(){if(this.signal.aborted)return;let{cols:t,rows:e,cell:n}=this.grid(),r=im(this.view,t,e);return this.view.loaderFrom=r.loader?this.view.loaderFrom??this.view.beat:void 0,{lines:r.lines,zones:r.zones,after:(i)=>this.images(r.images,i,n),...this.view.mode==="grid"&&this.view.editing!==void 0?{cursor:this.caret()}:{},ticking:r.tick}}images(t,e,n){let r="",i=new Set,s;for(let o of t){if(this.views&&o.id>=tm){s=o;continue}let a=this.bands?this.banded(o):o;if(!a)continue;if(this.wipes&&[...e].some((u)=>u>=a.row&&u<a.row+a.rows))this.placed.delete(a.id);if(i.add(a.id),this.sent.get(a.id)!==a.path){let u=ju(a,this.files);if(u===void 0)continue;r+=u,this.sent.set(a.id,a.path),this.placed.delete(a.id)}let c=`${a.row};${a.col};${a.cols};${a.rows};${a.crop};${a.z}`;if(this.placed.get(a.id)!==c){if(!this.moves&&this.placed.has(a.id))r+=nm(a.id);r+=wy(a,n),this.placed.set(a.id,c)}}for(let o of this.sent.keys())if(!i.has(o))r+=ha(o),this.sent.delete(o),this.placed.delete(o);return r+(this.views?this.backdrop(s):this.cover())}glide(){if(this.bands)this.prebake();if(this.gliding)return;let{cols:t,rows:e}=this.grid(),n=Un(t,e).height,r=()=>{let i=this.view,s=i.top*gt.height,o=s-i.scroll;if(o===0||i.mode!=="grid"){i.scroll=s;let a=this.gliding!==void 0;if(this.gliding=void 0,a)this.draw();return}if(Math.abs(o)>2*n)i.scroll=s-Math.sign(o)*n,o=s-i.scroll;i.scroll+=Math.sign(o)*Math.max(1,Math.round(Math.abs(o)*ZA)),this.draw(),this.gliding=setTimeout(r,VA)};r()}snap(){clearTimeout(this.gliding),this.gliding=void 0,this.view.scroll=this.view.top*gt.height}resized(){this.screen.reset()}stop(){this.screen.stop(),clearTimeout(this.gliding)}prebake(){let t=this.view,{cols:e,rows:n}=this.grid();for(let r of im({...t,scroll:t.top*gt.height},e,n).images)if(r.crop!==void 0)this.band(r.path,r.crop,r.rows)}cover(){let{cols:t,rows:e}=this.grid(),n=`${t};${e}`;if(!this.layers||this.covered===n)return"";let r="";if(!this.covered){let i=Buffer.from(nt(this.background)).toString("base64");if(r+=`\x1B_Ga=t,f=24,s=1,v=1,i=${to},q=2;${i}\x1B\\`,Tm)r+=`\x1B_Ga=t,f=32,s=1,v=1,i=${ya},q=2;AAAAAA==\x1B\\\x1B[H\x1B_Ga=p,i=${ya},p=${ya},c=1,r=1,C=1,z=${JA},q=2\x1B\\`}else if(!this.moves)r+=nm(to);if(this.covered=n,Tm){let{x:i,y:s}=Tm;return`${r}\x1B_Ga=p,i=${to},p=${to},P=${ya},Q=${ya},H=${-i},V=${-s},c=${t+2*i},r=${e+2*s},C=1,z=${Pv},q=2\x1B\\`}return`${r}\x1B[H\x1B_Ga=p,i=${to},p=${to},c=${t},r=${e},C=1,z=${Pv},q=2\x1B\\`}backdrop(t){let{cols:e,rows:n,cell:r}=this.grid(),i=e*r.w,s=n*r.h,o=t?`${this.background}|${t.path}|1|${i}|${s}|${i}|${s}|0|0|1`:`${this.background}||1|${i}|${s}|0|0|0|0|5`;if(o===this.viewed)return"";return this.viewed=o,gi(o)}caret(){return`\x1B[1;${Math.min(this.grid().cols,Q(`⌕ ${this.view.editing??""}`)+1)}H`}banded(t){if(t.crop===void 0)return t;let e=this.band(t.path,t.crop,t.rows,!this.gliding);return e?.ready?{...t,id:e.id,path:e.path,crop:void 0}:void 0}band(t,e,n,r=!0){let i=`${t}|${e}|${n}`,s=this.bandFiles.get(i);if(s||!r)return s;let{cell:o}=this.grid(),a=this.nextBand++,c={id:a,path:YA(this.scratch,`band-${a}.png`),ready:!1};return this.bandFiles.set(i,c),this.renders.run({job:"band",from:t,to:c.path,y:e*o.h,height:n*o.h}).then(()=>{c.ready=!0,this.draw()}).catch(()=>{}),this.trimBands(),c}trimBands(){for(let[t,e]of this.bandFiles){if(this.bandFiles.size<=XA)return;if(e.ready&&!this.sent.has(e.id))this.bandFiles.delete(t),qA(e.path,{force:!0})}}}var ji=[{name:"TTHEME_FIND_RATING",label:"Rating",about:"The ratings to list, each site read in its own words — space ticks one, and one stays ticked",choices:es,multi:{read:ii}},{name:"TTHEME_FIND_BLOCK",label:"Block",about:"Posts tagged with nudity or underwear are left out — space unticks one",choices:ri,multi:{read:rs,none:"none"}},{name:"TTHEME_FIND_POSTS",label:"Posts",about:"Every post of the character, or only the transparent cutouts",choices:["all","cutouts"]},{name:"TTHEME_FIND_SOLO",label:"Solo",about:"When on, only the posts known to show the character alone — checked as posts arrive, so the counts below leave it out",choices:["on","off"]},{name:"TTHEME_FIND_ORDER",label:"Order",about:"How posts are ranked: fit, by how well each makes a backdrop; newest; or score",choices:["fit","newest","score"]},{name:"TTHEME_FIND_SETS",label:"Sets",about:"One picture posted over and over, or held by another site too: fold it into one tile, or show each",choices:["fold","show"]},...Fs()?[{name:"TTHEME_FIND_REMOVE_BG",label:"Remove bg",about:"Cut the character out of an opaque picture you try on, with macOS Vision",choices:["on","off"]}]:[],{name:"TTHEME_FIND_MIN_SCORE",label:"Min score",about:"Posts scored at least this — danbooru, konachan and yande.re; zerochan keeps no score. ←→ steps, or type any number",choices:ab,entry:"number",advanced:!0},{name:"TTHEME_FIND_MIN_SIZE",label:"Min size",about:"The shorter side of a picture, in px — every site filters it. ←→ steps, or type any number",choices:cb,entry:"number",advanced:!0},{name:"TTHEME_FIND_SITES",label:"Sites",about:"The sites the all tab mixes — each keeps its own tab. Space ticks one, and one stays ticked",choices:Y.map((t)=>t.name),multi:{read:po},advanced:!0},{name:"TTHEME_FIND_HIDE",label:"Hide",about:"Comics, monochrome, sketches or chibi, told by tag in every site's spelling — checked as posts arrive",choices:af,multi:{read:_a,none:"none"},advanced:!0},{name:"TTHEME_FIND_HIDE_TAGS",label:"Hide tags",about:"Posts with any of these tags are left out, spaced like cosplay multiple_girls — checked as posts arrive",choices:[],entry:"text",advanced:!0},{name:"TTHEME_FIND_PNG",label:"PNG only",about:"PNG originals only — danbooru counts it, the others are told by the file; zerochan only where danbooru holds it",choices:["off","on"],advanced:!0}];function Av(t,e){if(t.multi)return t.multi.read(e).join(" ")||t.multi.none;if(t.entry==="number")return/^\d+$/.test(e??"")&&Number(e)>0?String(Number(e)):"off";if(t.entry==="text")return go(e).join(" ");return t.choices.find((n)=>n===e)??t.choices[0]}var uF=["fit","newest","score"];function Hm(t){return uF.find((e)=>e===t)??"fit"}var lF={left:-1,right:1,"shift-left":-10,"shift-right":10};function Fv(t){if(process.env.SSH_CONNECTION||!/^(?:https?|file):/i.test(t))return;try{let e=eF(process.platform==="darwin"?"open":"xdg-open",[t],{stdio:"ignore",detached:!0});e.on("error",()=>{}),e.unref()}catch{}}function fF(t,e,n){if(e<0){if(t!=="fill")return Math.max(rl,t+e);if(!n)return t;return Math.max(rl,Math.max(100,n)+e+1)}return t==="fill"||t+e>n?"fill":t+e}function Dv(t,e){return t.size===e.size&&t.at===e.at&&t.opacity===e.opacity}function dF(t,e){if(Dv(t,e))return;return{...t.size!=="fill"?{size:t.size}:{},...t.at!==e.at?{position:_t[t.at-1]}:{},...t.opacity!==e.opacity?{opacity:t.opacity}:{}}}function Cv(t,e){let n=D(t);return re(t,e).flatMap((r,i)=>{let[,s,o]=/^([a-z.]+)_(\d+)$/.exec(r.key)??[],a=[...Y,Kn].find((c)=>c.key===s);if(!a||!o)return[];return[{key:r.key,id:Number(o),ansi:a.ansi,...a===Kn?{}:{page:a.pageUrl(Number(o))},up:i===0,from:$n(n,r.original??r.fill)}]})}function hF(t){return t.length>=2&&!/^\d+$/.test(t)&&!t.includes("://")&&!/^[\w.]+:\d+$/.test(t)}var Lv=12,mF=4,pF=150,gF=300,jv=12,bF=2,wF=150,$F="\x1B[?5522$p\x1B]72;t=q\x1B\\\x1B[c",kF=4000,yF=8000,Gv=/\.(png|jpe?g|gif|webp|heic|tiff?|bmp)$/i,vF=process.platform==="win32"?"alt+v":"ctrl+v",_v=process.platform==="darwin"?"ctrl+shift+cmd+4 copies a screenshot":"copy a picture first",SF=1280,EF=16,MF=_t.indexOf("top-right")+1,rl=20,Bv=2,Wv=3,OF=/[\p{Script=Hangul}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Han}]/u,IF=8,xF=9;function nl(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,stage:"fetch",arrived:new Set}}function Sa(t){if(!(t instanceof Error))return String(t);if(t instanceof AggregateError&&t.errors[0])return Sa(t.errors[0]);if(t.cause)return Sa(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 Am(t,e){return`${t}: ${Sa(e)}`}function Uv(t){return t.width*t.height}function Kv(t,e){return`${t}-${zv("sha1").update(e).digest("hex").slice(0,8)}`}class Fm{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(ji.map((t)=>[t.name,Av(t,process.env[t.name])]));direction=1;prefetching=0;related=new Map;pool=[];relating;thumbQueue=[];heldFiles=new Map;heldAsked=new Set;thumbing=0;clarity=new Map;tunedFiles=[];presenting=!1;again=!1;renders=new wa;showing;thumbless=new Set;current;fetch;settle;suggestTimer;suggesting;countTimer;counting;terminal;grabber=new lm((t)=>this.write(t),(t)=>void this.got(t));noticeTimer;peekTimer;peeked;attaching;done;scratch=rF($n(oF(),"ttheme-find-"));home;catalog;entry;tagged;blurring;start;paint;kept;constructor(t,e,n,r,i){this.start=i,this.home=t,this.catalog=e,this.entry=n,this.tagged=new Set(e.palettes.flatMap((o)=>o.booru?[o.booru]:[])),this.tone=cn(n,n.signatureSlots),this.blurring=Rr(t);let s={size:"fill",at:MF,opacity:this.tone.opacity};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:Hm(this.setting("TTHEME_FIND_ORDER")),solo:this.setting("TTHEME_FIND_SOLO")==="on",rating:ii(this.setting("TTHEME_FIND_RATING")),block:rs(this.setting("TTHEME_FIND_BLOCK")),sets:this.setting("TTHEME_FIND_SETS")==="show"?"show":"fold",narrow:this.narrowed(),enabled:po(this.setting("TTHEME_FIND_SITES")),hide:_a(this.setting("TTHEME_FIND_HIDE")),hideTags:go(this.setting("TTHEME_FIND_HIDE_TAGS")),advanced:!1,settings:ji.map((o)=>({label:o.label,choices:[...o.choices],value:this.setting(o.name),default:Av(o,Uo(o.name)),multi:o.multi&&{none:o.multi.none},about:o.about,entry:o.entry,advanced:o.advanced,cursor:0})),colors:{cursor:n.cursor,selection:n.selection,background:n.background,foreground:n.foreground,ansi:n.ansi},tiles:[],installed:[],held:Cv(t,n.name),checked:0,total:0,searching:r!=="",stage:"fetch",sites:[],focus:0,top:0,scroll:0,beat:0,mode:"grid",help:!1,scene:Math.max(0,te.findIndex((o)=>o.name.toLowerCase()===process.env.TTHEME_SCENE)),details:!1,tune:{...s},untuned:s,coloring:Yc(t),editing:r===""?"":void 0,chips:[]},this.paint=new Pm({view:this.view,grid:()=>({cols:this.cols,rows:this.rows,cell:this.cell}),background:n.background,renders:this.renders,scratch:this.scratch,signal:this.signal,write:(o)=>this.write(o)}),this.kept=new Rm({home:t,catalog:e,entry:n,signal:this.signal,credited:()=>{this.show(),this.inform(),this.paint.draw()}}),this.pool=this.selected(this.view),this.syncChips(),this.board=nl(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:Y[this.tab-1]}get sites(){return this.site?[this.site]:Y.filter((t)=>this.view.enabled.includes(t.name))}get tabName(){return this.site?.name??"all"}get tabAnsi(){return this.site?.ansi??mF}get nextTabName(){let t=(this.tab+1)%(Y.length+1);return t===0?"all":Y[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)}narrowed(){return uf(this.setting("TTHEME_FIND_MIN_SCORE"),this.setting("TTHEME_FIND_MIN_SIZE"),this.setting("TTHEME_FIND_PNG"))}get boardKey(){return`${this.site?.key??"all"}|${this.view.preset}|${this.view.order}`}origPath(t,e,n){return $n(_e(t),"orig",`${e}.${n}`)}previewPath(t){let{url:e}=Wa(t.site,t.post);return $n(_e(t.site),"thumb",`${Kv(t.post.id,e)}.${sr(e)}`)}tileOf(t,e){let{site:n,post:r}=t,i=pe(n,r.id),s=on(r)??r;return{id:r.id,key:i,site:n.name,siteAnsi:n.ansi,width:s.width,height:s.height,reduced:s!==r,page:n===Kn?"":n.pageUrl(r.id),artist:n===Kn?Ty(r.source):r.named.artist[0]??"",score:r.score,variants:e,mates:this.kept.matesOf(n,r.owner),thumb:this.thumbPath.get(i),missing:this.thumbless.has(i)}}show(){let t=this.view,e=this.board;if(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,this.stageOf(e),t.note=e.note,t.focus=Math.max(0,Math.min(e.focus,t.tiles.length-1)),t.top=e.top,this.showing!==e)this.showing=e,this.paint.snap()}stageOf(t){let e=this.view;e.stage=t.stage,e.ranking=t.ranking,e.sites=this.sites.map((n)=>({name:n.name,arrived:t.arrived.has(n.name)}))}syncSite(){let t=this.view;t.site=this.tabName,t.siteAnsi=this.tabAnsi,t.nextSite=this.nextTabName}run(){let t=(e)=>this.view.editing===void 0&&Ku(e);return _r({modes:[Gr,...Ks()],assume:[Wn,Ni],burst:t},async(e)=>{this.terminal=e,e.onResize(this.onResize),e.listen((i)=>{for(let s of i)this.inbound(s);this.paint.soon()}),e.write(bi);let n=new Promise((i)=>{this.done=i}),r=setInterval(this.onClock,250);setTimeout(fc,0);try{let i=new ra,s=await e.ask(xu,(o)=>i.see(o),1000);if(s){if(this.cell=s,this.holdThumbs(),this.view.tag)this.search(),this.relate(this.view.tag)}else this.view.searching=!1,this.view.error="This terminal does not report its cell size — find needs kitty graphics";if(!process.env.TMUX)await e.ask($F,(o)=>o.kind==="attributes"?!0:void 0,500,!1);if(this.grabber.start(),e.hold(Zk),this.start&&"paste"in this.start)this.pasted(this.start.paste);else if(this.start)this.fromClipboard();else this.peek();return this.paint.draw(),await e.until(n)}finally{this.session.abort(),this.grabber.stop(),this.attaching?.abort(),clearTimeout(this.noticeTimer),clearTimeout(this.peekTimer),this.fetch?.abort(),clearTimeout(this.settle),this.quietSuggest(),this.quietCount(),clearInterval(r),this.paint.stop(),e.write(`\x1B_Ga=d,d=A,q=2\x1B\\${bi}`),this.kept.save(),this.renders.close(),el(this.scratch,{recursive:!0,force:!0}),yb()}})}write(t){this.terminal?.write(t)}get saved(){return this.view.saved?.text}get installs(){return this.view.installed.length}finish(t){this.done?.(t===2&&this.saved?0:t)}inbound(t){if(t.kind==="key")this.key(t.key);else if(t.kind==="mouse")this.pointer(t);else if(t.kind==="paste")this.pasted(t.text);else if(t.kind==="mode"){if(t.mode===5522)this.grabber.clipboard=t.value!==0&&t.value!==4}else if(t.kind==="osc")if(t.code==="72"&&t.meta.t==="q")this.grabber.drops=!0;else this.grabber.take(t)}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.paint.draw();return}if(e.installing!==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!Ba(e,this.site??Y[0]);return Vs(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 — ${_v}`);return}this.pasted(t.text);return}await this.bring(()=>Wu(t.bytes,t.source))}notice(t,e=kF){let n=this.view;n.error=t,clearTimeout(this.noticeTimer),this.noticeTimer=setTimeout(()=>{if(n.error===t)n.error=void 0,this.paint.draw()},e),this.paint.draw()}async peek(){let t=this.view,e;try{e=await Cy()}catch{return}if(!e||e.stamp===this.peeked)return;if(this.peeked=e.stamp,!e.picture||t.installing!==void 0)return;t.hint=`Picture on the clipboard · ${vF} uses it`,clearTimeout(this.peekTimer),this.peekTimer=setTimeout(()=>{t.hint=void 0,this.paint.draw()},yF),this.paint.draw()}async fromClipboard(){let t=this.view;if(um()){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 Fy($n(this.scratch,`clipboard-${Date.now()}.png`))}catch(r){this.notice(`Could not read the clipboard: ${Sa(r)}`);return}if(clearTimeout(this.peekTimer),t.hint=void 0,"image"in e){await this.bring(async(r)=>({...await cm(e.image,r),source:"clipboard"}));return}let n=e.text.trim();if(!n){this.notice(`No picture on the clipboard — ${_v}`);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=Ba(e,this.site??Y[0]);if(i){await this.jump(i.site,i.id);return}}let[n,...r]=Vs(e).sort((i,s)=>Number(!Gv.test(i))-Number(!Gv.test(s)));if(!n){this.notice("Nothing to use in that — drop a picture, or paste one or its link");return}await this.bring((i)=>cm(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.paint.draw();let i;try{i=await t(AbortSignal.any([r.signal,this.signal]))}catch(d){if(!r.signal.aborted)n.note=void 0,this.notice(Sa(d),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 s=Hy(i.bytes);Py(s,i.source);let o=this.origPath(Kn,s,i.ext);H(o,i.bytes);let a=Hv(o).href,c={id:s,file:a,width:i.width,height:i.height,ext:i.ext,preview:a,owner:"",score:0,rating:"s",md5:zv("md5").update(i.bytes).digest("hex"),source:i.source,tags:[],named:{artist:[],character:[],copyright:[]},solo:void 0,family:0,smaller:[]},u={site:Kn,post:c},l=this.previewPath(u);H(l,i.bytes),++this.gen,this.current=void 0,n.shown=void 0;let f=nl(`local|post:${s}`,!1);this.board=f,this.boards.set(f.key,f),this.single(f,u)}single(t,e){t.searching=!1,this.posts.set(pe(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.paint.draw()}onClock=()=>{let t=this.sites.reduce((r,i)=>Nn(i)>Nn(r)?i:r),e=Math.ceil((Nn(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.paint.draw()};onResize=()=>{if(this.cols=process.stdout.columns||this.cols,this.rows=process.stdout.rows||this.rows,this.paint.resized(),this.holdThumbs(),this.scroll(),this.paint.snap(),this.view.mode==="try"&&this.current)this.reveal();this.pump(),this.paint.draw()};key(t){let e=this.view;if(t==="ctrl-c"){this.finish(2);return}if(e.installing!==void 0)return;if(t==="focus-in"){this.peek();return}if(t==="focus-out")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.paint.draw();return}if(this.cols<Ti.cols||this.rows<Ti.rows){if(t==="esc")this.finish(2);return}if(t==="?"){e.help=!0,this.paint.draw();return}if(e.mode==="try"){this.tryKey(t);return}this.gridKey(t)}pointer(t){let e=this.view,n=this.paint.point(t),r=n?.target;if(e.installing!==void 0)return;if(t.action==="wheel"){if(!t.sideways)this.wheel(t.wheel);return}if((t.action==="press"||t.action==="drag")&&t.button!=="left")return;if(r?.kind==="track"&&n&&t.action!=="release")this.slide(r.field,n);else if(t.action==="press")this.pressed(r);else if(t.action==="release"&&n?.inside)this.released(r,t)}pressed(t){let e=this.view;if(e.help)this.paint.drop(),this.key("esc");else if(e.editing!==void 0||t===void 0)return;else if(e.panel!==void 0){if(t.kind==="setting"&&t.index<e.settings.length&&e.typing===void 0)e.panel=t.index,this.paint.draw()}else if(e.mode==="try")this.tryPoint(t);else if(t.kind==="tile")this.focus(t.index);else if(t.kind==="query")this.gridKey("/");else if(t.kind==="site")this.tab=t.tab,this.syncSite(),this.turn()}released(t,e){let n=this.view;if(t?.kind==="key")this.key(t.key);else if(t?.kind==="link"){if(!e.shift&&!e.alt&&!e.ctrl)Fv(t.url)}else if(n.editing!==void 0){if(t?.kind==="suggest")n.pick=t.index,this.editKey("enter")}else if(n.panel!==void 0)this.panelPoint(t);else if(n.mode==="try"){if(t?.kind==="place"&&n.tuning)this.tuneKey(String(t.at))}else if(t?.kind==="tile"&&e.count===2)this.gridKey("enter");else if(t?.kind==="chip")this.toggle(t.index)}wheel(t){let e=this.view;if(e.help)return;if(e.editing!==void 0){if(e.suggest?.length)this.editKey(t<0?"up":"down")}else if(e.panel!==void 0){if(e.typing===void 0)this.panelKey(t<0?"up":"down")}else if(e.tuning)this.tuneKey(t<0?"up":"down");else if(e.mode==="try")this.tryKey(t<0?"left":"right");else this.focus(e.focus+t*Un(this.cols,this.rows).perRow)}panelPoint(t){let e=this.view;if(t?.kind!=="setting"&&t?.kind!=="choice")return;let n=e.settings[t.index];if(e.typing!==void 0){let r=e.settings[e.panel??0];if(r&&(t.index!==e.panel||t.kind==="setting"))this.typeKey(r,"enter");else return}if(t.kind==="setting"&&t.index===e.settings.length){e.panel=t.index,this.panelKey("enter");return}if(e.panel=t.index,t.kind==="choice"&&n){if(n.entry==="text"||t.choice===void 0){this.panelKey("enter");return}if(n.multi){n.cursor=Math.max(0,n.choices.indexOf(t.choice)),this.panelKey(" ");return}if(n.value!==t.choice)n.value=t.choice,this.recount()}this.paint.draw()}tryPoint(t){let e=this.view;if(t.kind==="scene")e.scene=t.scene,e.details=!1,this.paint.draw();else if(e.tuning&&t.kind==="field")e.tuning.field=t.field,this.paint.draw()}slide(t,e){let n=this.view,r=n.tuning;if(!r)return;let i=Math.min(1,Math.max(0,e.width>1?e.x/(e.width-1):0));if(r.field=t,t===0){let s=Math.max(100,r.fill),o=rl+Math.round(i*(s-rl+1));n.tune.size=i===1||r.fill>0&&o>=r.fill?"fill":Math.min(s,o)}else n.tune.opacity=Math.round(i*100)/100;this.retune()}gridKey(t){let e=this.view,{perRow:n,rowsVis:r}=Un(this.cols,this.rows),s={left:-1,right:1,up:-n,down:n,k:-n,j:n,pgup:-n*r,pgdn:n*r,home:-e.focus,end:e.tiles.length}[t];if(s!==void 0){this.focus(e.focus+s);return}if(/^[1-9]$/.test(t)){this.toggle(Number(t)-1);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"||t==="shift-tab"){let o=Y.length+1;this.tab=(this.tab+(t==="tab"?1:o-1))%o,this.syncSite(),this.turn();return}if(t==="/"){e.editing="",this.paint.draw();return}if(t===" "){this.unfold();return}if(t==="o"){this.openPage();return}if(t==="s"){e.panel=0,e.advanced=!1,this.recount(),this.paint.draw();return}if(t==="esc")this.finish(2)}panelKey(t){let e=this.view,n=e.panel??0,r=e.settings[n];if(e.typing!==void 0&&r){this.typeKey(r,t);return}let i=da(e);if(t==="up"||t==="down"){let s=i.indexOf(n)+(t==="up"?-1:1);e.panel=i[(s+i.length)%i.length]??n,this.paint.draw();return}if(t==="a"||t==="enter"&&n===e.settings.length){e.advanced=!e.advanced,e.panel=da(e)[0]??0,this.paint.draw();return}if(r?.entry&&(t==="enter"||r.entry==="number"&&/^[0-9]$/.test(t))){e.typing=t==="enter"?r.entry==="text"?r.value:"":t,this.paint.draw();return}if((t==="left"||t==="right")&&r&&r.entry!=="text"){let s=t==="left"?-1:1;if(r.multi)r.cursor=(r.cursor+s+r.choices.length)%r.choices.length;else r.value=Sy(r.choices,r.value,s),this.recount();this.paint.draw();return}if(t===" "&&r?.multi){let s=r.value.split(" "),o=r.choices.filter((c,u)=>u===r.cursor?!s.includes(c):s.includes(c)),a=r.multi.none;if(o.length>0||a!==void 0)r.value=o.length>0?o.join(" "):a,this.recount(),this.paint.draw();return}if(t==="esc"){e.settings.forEach((s,o)=>{s.value=this.setting(ji[o]?.name??"")}),e.panel=void 0,e.advanced=!1,this.quietCount(),this.paint.draw();return}if(t==="enter"||t==="s"||t==="alt-c")e.panel=void 0,e.advanced=!1,this.quietCount(),this.adopt()}typeKey(t,e){let n=this.view,r=n.typing??"";if(e==="esc"){n.typing=void 0,this.paint.draw();return}if(e==="enter"||e==="up"||e==="down"){if(t.value=t.entry==="number"?Number(r)>0?String(Number(r)):"off":go(r).join(" "),n.typing=void 0,this.recount(),e==="enter"){this.paint.draw();return}this.panelKey(e);return}let i=xi(r,e,(s)=>t.entry==="number"?/^[0-9]$/.test(s)&&r.length<rm:/^[\x20-\x7e]$/.test(s));if(i!==void 0)n.typing=i,this.paint.draw()}quietCount(){clearTimeout(this.countTimer),this.counting?.abort(),this.counting=void 0}recount(){if(this.quietCount(),this.view.counts=void 0,!this.view.tag)return;let t=new AbortController;this.counting=t,this.countTimer=setTimeout(()=>void this.countPending(t),gF)}pending(){let t=(e)=>this.view.settings[ji.findIndex((n)=>n.name===e)]?.value??this.setting(e);return{tag:this.view.tag,chosen:this.view.chosen,preset:t("TTHEME_FIND_POSTS")==="all"?"all":"cutouts",order:Hm(t("TTHEME_FIND_ORDER")),rating:ii(t("TTHEME_FIND_RATING")),narrow:uf(t("TTHEME_FIND_MIN_SCORE"),t("TTHEME_FIND_MIN_SIZE"),t("TTHEME_FIND_PNG")),enabled:po(t("TTHEME_FIND_SITES"))}}async countPending(t){let e=this.pending(),n=this.site?[this.site]:Y.filter((s)=>e.enabled.includes(s.name)),r=AbortSignal.any([this.signal,t.signal]),i=await Promise.all(n.map(async(s)=>{let o=this.query(s,e);if(!o)return{site:s.name,count:0};if(s.counts&&!s.counts(o.tags))return{site:s.name};try{let a=await hf(s,o.tags,r);return{site:s.name,...Number.isFinite(a)?{count:a}:{}}}catch{return{site:s.name}}}));if(this.counting===t&&this.view.panel!==void 0)this.view.counts=i,this.paint.draw()}adopt(){let t=this.view,e=ji.map((r)=>this.setting(r.name));t.settings.forEach((r,i)=>{let s=ji[i];if(s)this.values.set(s.name,r.value)});let n=ji.filter((r,i)=>this.setting(r.name)!==e[i]);if(n.length===0){this.paint.draw();return}this.save(n),t.rating=ii(this.setting("TTHEME_FIND_RATING")),t.block=rs(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=Hm(this.setting("TTHEME_FIND_ORDER")),t.solo=this.setting("TTHEME_FIND_SOLO")==="on",t.narrow=this.narrowed(),t.enabled=po(this.setting("TTHEME_FIND_SITES")),t.hide=_a(this.setting("TTHEME_FIND_HIDE")),t.hideTags=go(this.setting("TTHEME_FIND_HIDE_TAGS")),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=$n(this.home,"ttheme","config.zsh");try{let n=va(e)?iF(e,"utf8"):"";return H(e,t.reduce((r,[i,s])=>Jc(r,i,s),n)),!0}catch(n){return this.view.error=n instanceof Error?n.message:String(n),!1}}editKey(t){let e=this.view,n=e.editing??"",r=e.suggest??[];if((t==="up"||t==="down")&&r.length>0){let o=((e.pick??r.length)+(t==="down"?1:r.length))%(r.length+1);e.pick=o===r.length?void 0:o,this.paint.draw();return}if(t==="esc"||t==="enter")this.quietSuggest();if(t==="esc"){if(e.editing=void 0,e.tag===""){this.finish(2);return}this.paint.draw();return}if(t==="enter"){let s=e.pick===void 0?void 0:r[e.pick],o=s?s.whole?s.value:n.replace(/\S*$/,s.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.paint.draw();return}let i=xi(n,t);if(i!==void 0)e.editing=i,this.suggest(),this.paint.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=t.editing??"",n=/\S*$/.exec(e)?.[0]??"",r=hF(n),i=Nw(e,Wv,this.tagged).map((c)=>({value:c.tag,count:0,alias:c.name,whole:!0}));if(!r&&i.length===0){t.suggest=void 0;return}let s=r?e0(this.catalog.palettes,this.entry,n).map((c)=>({value:c.booru,count:0,palette:c.name})):[],o=[...new Map([...s.slice(0,Wv),...i].map((c)=>[c.value,c])).values()];if(t.suggest=o.length>0?o:void 0,i.length>0&&OF.test(e))t.pick=o.findIndex((c)=>("whole"in c));if(!r)return;let a=new AbortController;this.suggesting=a,this.suggestTimer=setTimeout(async()=>{try{let c=await Sb(n,AbortSignal.any([this.signal,a.signal]));if(this.suggesting===a&&t.editing!==void 0){let u=new Map(c.map((f)=>[f.value,f.count])),l=new Set(o.map((f)=>f.value));t.suggest=[...o.map((f)=>({...f,count:u.get(f.value)??0})),...c.filter((f)=>!l.has(f.value))].slice(0,IF),t.pick=t.pick!==void 0&&t.pick<o.length?t.pick:void 0,this.paint.draw()}}catch{}},pF)}async commit(t){let e=Ba(t,this.site??Y[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.view.chosen=void 0,this.relate(t),this.boards.clear(),await this.search()}async jump(t,e){let n=++this.gen;this.tab=Y.indexOf(t)+1,this.syncSite(),this.current=void 0,this.view.shown=void 0,this.view.error=void 0;let r=nl(`${t.key}|post:${e}`,!0);this.board=r,this.boards.set(r.key,r),this.show(),this.paint.draw();try{let i=await is(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.paint.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.paint.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(pe(i.site,i.post.id)))this.thumbQueue.push(i);this.thumbs(),this.show(),this.scroll(),this.paint.glide(),this.paint.draw();return}e+=r}}openPage(){let t=this.view.tiles[this.view.focus],e=t&&this.posts.get(t.key);if(e)Fv(e.site.pageUrl(e.post.id))}tryKey(t){let e=this.view;if(e.tuning){this.tuneKey(t);return}if(t==="left"||t==="right"){this.direction=t==="left"?-1:1,this.focus(e.focus+this.direction);return}if(t==="shift-left"||t==="shift-right"){e.scene+=t==="shift-left"?-1:1,e.details=!1,this.paint.draw();return}if(t==="i"){e.details=!e.details,this.inform(),this.paint.draw();return}if(t==="t"){e.tuning={field:0,held:{...e.tune},fill:this.current?.fill??0,coloring:e.coloring},this.paint.draw();return}if(t==="c"){this.recolor();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.paint.draw()}tuneKey(t){let e=this.view,n=e.tuning,r=e.tune;if(t==="up"||t==="down"){n.field=(n.field+(t==="up"?2:1))%3,this.paint.draw();return}let i=lF[t];if(i!==void 0){if(n.field===0)r.size=fF(r.size,i,n.fill);else if(n.field===1)r.at=(r.at-1+Math.sign(i)+9)%9+1;else r.opacity=Math.max(0,Math.min(100,Math.round(r.opacity*100)+i))/100;this.retune();return}if(/^[1-9]$/.test(t)){n.field=1,r.at=Number(t),this.retune();return}if(t==="="){let s=e.untuned;if(n.field===0)r.size=s.size;else if(n.field===1)r.at=s.at;else r.opacity=s.opacity;this.retune();return}if(t==="+"){e.tune={...e.untuned},this.retune();return}if(t==="enter"){e.tuning=void 0,this.paint.draw();return}if(t==="c"){this.recolor();return}if(t==="esc")e.tune={...n.held,...n.coloring===e.coloring?{}:{opacity:e.untuned.opacity}},e.tuning=void 0,this.retune()}recolor(){let t=this.view;if(!this.current||t.shown?.id!==this.current.key)return;t.coloring=t.coloring==="tone"?"original":"tone",t.tune.opacity=t.untuned.opacity,this.paint.draw(),this.reveal()}retune(){if(this.paint.draw(),this.current&&this.view.shown?.id===this.current.key)this.reveal()}inform(){let t=this.view,e=t.tiles[t.focus],n=e&&this.posts.get(e.key);t.info=n?this.infoOf(n):void 0}infoOf(t){let{site:e,post:n}=t,r=n.named,i=$b(e,n),s=new Set([...r.artist,...r.character,...r.copyright]),o=bo(n.source),a=/^https?:\/\//i.test(o)?o:e===Kn&&o.startsWith("/")?Hv(o).href:void 0;return{page:e===Kn?"":e.pageUrl(n.id),source:o,...a?{link:a}:{},artists:r.artist,characters:r.character,series:r.copyright,tags:n.tags.filter((c)=>!s.has(c)),...i?{rating:i}:{},...n.posted?{posted:n.posted}:{},ext:(on(n)??n).ext,uploader:n.owner}}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.paint.glide(),this.pump(),e.mode==="try")this.select();this.paint.draw()}scroll(){let t=this.view,{perRow:e,rowsVis:n}=Un(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}selected(t){if(t.chosen)return t.chosen;if(!t.tag)return[];return this.namesOf(t.tag,"danbooru")}namesOf(t,e){let n=t===this.entry.booru?this.entry:this.catalog.palettes.find((r)=>r.booru===t);return n?n0(n,e):[t]}syncChips(){let t=this.selected(this.view);this.view.chips=this.pool.slice(0,xF).map((e)=>({name:e,on:t.includes(e)}))}toggle(t){let e=this.view,n=e.chips[t];if(!n)return;let r=this.selected(e),i=n.on?r.filter((s)=>s!==n.name):[...r,n.name];if(i.length===0)return;e.chosen=i,e.tag=i.join(" or "),this.syncChips(),this.boards.clear(),this.search()}async relate(t){this.relating?.abort();let e=this.selected({tag:t,chosen:void 0});if(this.pool=e,this.syncChips(),this.paint.draw(),!t||/\s/.test(t))return;let n=this.related.get(t);if(!n){let r=new AbortController;this.relating=r;try{n=(await Eb(t,AbortSignal.any([this.signal,r.signal]))).map((i)=>i.value)}catch{return}if(this.relating!==r)return;this.related.set(t,n)}this.pool=[...new Set([...e,...n])],this.syncChips(),this.paint.draw()}query(t,e=this.view){let n=e.chosen?Mb(t,e.chosen):this.namesOf(e.tag,t.key);if(n.length===0)return;let r=e.chosen?.slice(n.length)??[],i=n.length>1,s=e.preset==="cutouts"?t.cutouts:"",o=i&&s.includes("~"),a=[i?n.map((l)=>`~${l}`).join(" "):n[0],t.rate(e.rating),...t.narrow(e.narrow),o?"":s,e.order==="score"?t.best:""].filter(Boolean),c=[],u=[];for(let l of a)if(df([...c,l].join(" "))<=t.tagBudget)c.push(l);else u.push(l);return{tags:c.join(" "),notes:[...u.length>0?[`${t.name} takes ${t.tagBudget} tags — ${u.join(" ")} left out`]:[],...r.length>0?[`${t.name} takes ${n.length} tag${n.length===1?"":"s"} — ${r.join(" ")} left out`]:[],...o?[`${t.name} ORs the names, so cutouts are told by the file`]:[],...e.narrow.score>0&&!t.scored?[`${t.name} keeps no score`]:[],...e.narrow.png&&t.guesses?[`${t.name} names a file type only where danbooru holds the file`]:[]]}}async search(){let t=++this.gen,e=nl(this.boardKey,!0);this.board=e,this.boards.set(e.key,e),this.view.error=void 0;let n=this.sites.flatMap((s)=>{let o=this.query(s);return o?[{site:s,...o}]:[]}),r=this.sites.filter((s)=>!n.some((o)=>o.site===s)),i=[...n.flatMap(({notes:s})=>s),...r.length>0?[`${this.entry.name} has no tag on ${r.map((s)=>s.name).join(", ")}`]:[]];if(e.note=i.length>0?i.join(" · "):void 0,n.length===0)e.searching=!1;this.show(),this.paint.draw(),this.tally(t,e,n);try{let s=await Promise.all(n.map(async(o)=>({plan:o,owners:await this.kept.mateOwners(o.site)})));if(t!==this.gen)return;e.sources=s.flatMap(({plan:{site:o,tags:a},owners:c})=>{let u=df(a)+1<=o.tagBudget?o.uploadedBy:void 0;return[...u?[...c.keys()].map((l)=>({site:o,tags:`${a} ${u(l)}`,page:0,done:!1})):[],{site:o,tags:a,page:0,done:!1}]}),this.show(),this.paint.draw(),await this.pump()}catch(s){this.fail(t,s)}}async tally(t,e,n){let r=await Promise.allSettled(n.map(({site:i,tags:s})=>hf(i,s,this.signal)));if(t===this.gen)e.total=r.reduce((i,s)=>i+(s.status==="fulfilled"&&Number.isFinite(s.value)?s.value:0),0),this.show(),this.paint.draw()}fail(t,e,n=this.site){if(t!==this.gen||this.signal.aborted)return;this.board.error=Am(n?.name??this.tabName,e),this.board.searching=!1,this.view.error=this.board.error,this.show(),this.paint.draw()}drop(t,e,n){for(let r of t.sources)if(r.site===e)r.done=!0;t.note=[t.note,Am(e.name,n)].filter(Boolean).join(" · ")}wants(){let{perRow:t,rowsVis:e}=Un(this.cols,this.rows);return this.view.tiles.length<(this.board.top+e+Bv)*t}need(){let{perRow:t,rowsVis:e}=Un(this.cols,this.rows);return(e+Bv)*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=vb(t,e,n,this.signal).then((s)=>this.borrow(t,s)),this.pages.set(r,i),i.catch(()=>this.pages.delete(r));return i}async borrow(t,e){let n=t===Zt?[]:e.filter((r)=>r.md5!=="");if(n.length>0)try{Ya(n,await Ja(n.map((r)=>r.md5),this.signal))}catch{}return e}staged(t){if(t===this.board)this.stageOf(t),this.paint.draw()}async round(t){t.stage="fetch",this.staged(t);let e=Y.flatMap((a)=>{let c=t.sources.find((u)=>u.site===a&&!u.done);return c?[c]:[]}),n=await Promise.all(e.map(async(a)=>{try{let c=await this.page(a.site,a.tags,a.page);return t.arrived.add(a.site.name),this.staged(t),{source:a,posts:c}}catch(c){if(t.sources.every((u)=>u.site===a.site)||this.signal.aborted)throw c;return this.drop(t,a.site,c),{source:a,posts:void 0}}}));if(!this.live(t))return;let r=[];for(let{source:a,posts:c}of n){if(!c)continue;a.page++,a.done=c.length<rr;let u=t.last.get(a);for(let l of c){let f=u&&Xy(u.post,l)?u.set:`set:${a.site.key}:${l.id}`;u={post:l,set:f};let d=pe(a.site,l.id);if(t.seen.has(d))continue;t.seen.add(d);let h={site:a.site,post:l};if(this.eligible(h))t.kin.set(h,[f,...Qy(a.site,l)]),r.push(h);else t.checked++}if(u)t.last.set(a,u)}let i=this.dedupe(t,r),s=++t.rounds,o;if(this.view.order!=="fit")o=e.length>1?Vy(i):i;else{let a=Ju(i,this.frame(),this.matched),c=a.slice(0,this.need()),u={done:0,total:c.length};if(t.ranking=u,this.staged(t),await this.looks(c,()=>{u.done++,this.staged(t)}),t.ranking=void 0,!this.live(t))return;o=[...Ju(c,this.frame(),this.matched),...a.slice(c.length)]}t.stage="check",this.staged(t);for(let a of o)t.roundOf.set(a,s);t.queue.push(...o),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(pe(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,s)=>t.roundOf.get(i)===e?[s]:[]),r=Ju(n.map((i)=>t.queue[i]),this.frame(),this.matched);n.forEach((i,s)=>{t.queue[i]=r[s]})}dedupe(t,e){let n=[];for(let r of e){let i=$m(r.post),s=i.map((a)=>t.same.get(a)).find(Boolean);if(!s){for(let a of i)t.same.set(a,r);n.push(r);continue}if(t.checked++,Uv(r.post)<=Uv(s.post))continue;for(let a of[...i,...$m(s.post)])t.same.set(a,r);let o=n.indexOf(s);if(o>=0){n[o]=r;continue}this.replace(t,s,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 s=i.posts.indexOf(e);if(s>=0){i.posts[s]=n,this.posts.set(pe(n.site,n.post.id),n),this.thumbQueue.push(n),this.thumbs();return}}}async looks(t,e){let n=0;await Promise.all(Array.from({length:jv},async()=>{while(n<t.length)await this.look(t[n++]),e?.()}))}look(t){let e=pe(t.site,t.post.id),n=this.looking.get(e);if(!n)n=(async()=>{let r=this.previewPath(t),i=Wa(t.site,t.post);await this.kept.cached(i.site,r,i.url);let s=await this.renders.run({job:"match",from:r,colors:this.entry.signature});return this.looked.set(e,s),this.matched.set(t.post,s.match),s})().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<Lv&&e.queue.length>0&&this.wants()){let o=e.queue.shift();n.push({pick:o,passed:this.vet(o)})}if(this.ahead(e),!r&&e.queue.length<Lv&&e.sources.some((o)=>!o.done)&&this.wants()){let o=this.round(e).then(()=>{if(r===o)r=void 0});o.catch(()=>{}),r=o}let i=n.shift();if(!i){if(!r)break;await r,this.show(),this.paint.draw();continue}let s=await i.passed;if(t!==this.gen)return;if(e.checked++,s)this.admit(i.pick);this.show(),this.paint.draw()}if(t===this.gen)e.searching=!1,this.show(),this.paint.draw()}catch(i){this.fail(t,i)}finally{if(this.kept.save(),this.pumping===t)this.pumping=0}}eligible({site:t,post:e}){let n=on(e);if(!Ka(t,e,this.view.rating)||Ua(e,this.view.block).length>0||!n)return!1;if(this.view.solo&&e.solo===!1)return!1;let{score:r,size:i,png:s}=this.view.narrow;if(Math.min(e.width,e.height)<i||t.scored&&e.score<r||s&&e.ext!=="png"||wb(e,this.view.hide).length>0||this.view.hideTags.some((o)=>e.tags.includes(o)))return!1;return this.view.preset==="all"?["png","jpg","jpeg",""].includes(n.ext):["png",""].includes(e.ext)}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.kept.transparent(t,e)}admit(t){let{site:e,post:n}=t,r=this.board,i=pe(e,n.id);this.posts.set(i,t);let s=r.kin.get(t)??[],o=this.looked.get(i),a=o&&{hash:o.hash,width:n.width,height:n.height},c=this.view.sets==="fold"?this.kindred(r,s,a):void 0;if(c){if(c.posts.push(t),this.register(r,c,s,a),c.open)this.thumbQueue.push(t),this.thumbs();return}let u={posts:[t],open:!1};r.groups.push(u),this.register(r,u,s,a),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)=>ev(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})}holds(){this.view.held=Cv(this.home,this.entry.name).map((t)=>{let e=this.heldFiles.get(t.from);return e?{...t,thumb:e}:t}),this.holdThumbs()}holdThumbs(){let t=ue.cols*this.cell.w,e=ue.rows*this.cell.h;if(t===0||e===0)return;for(let n of this.view.held.slice(0,em(this.cols))){if(n.thumb||this.heldAsked.has(n.from))continue;this.heldAsked.add(n.from);let r=$n(this.scratch,`held-${aF(n.from)}-${t}x${e}.png`);this.renders.run({job:"thumb",from:n.from,to:r,width:t,height:e}).then(()=>{this.heldFiles.set(n.from,r),this.holds(),this.paint.draw()}).catch(()=>{})}}thumbs(){while(!this.signal.aborted&&this.thumbing<jv&&this.thumbQueue.length>0){let t=this.thumbQueue.shift();this.thumbing++,this.thumb(t).catch(()=>{this.thumbless.add(pe(t.site,t.post.id)),this.show(),this.paint.draw()}).finally(()=>{this.thumbing--,this.thumbs()})}}async thumb(t){let{site:e,post:n}=t,r=gt.cols*this.cell.w,i=gt.rows*this.cell.h,s=Wa(e,n),o=$n(_e(e),"tile",`${Kv(n.id,s.url)}-${r}x${i}.png`);if(!va(o)){let a=this.previewPath(t);if(await this.kept.cached(s.site,a,s.url),this.signal.aborted)return;await this.renders.run({job:"thumb",from:a,to:o,width:r,height:i})}this.thumbPath.set(pe(e,n.id),o),this.show(),this.paint.draw()}select(){let t=this.view,e=t.tiles[t.focus];if(this.fetch?.abort(),clearTimeout(this.settle),t.fetching=void 0,this.inform(),!e)return;if(this.current?.key===e.key){this.reveal();return}this.settle=setTimeout(()=>void this.load(e),wF),this.paint.draw()}async load(t){let e=this.view,n=this.posts.get(t.key);if(!n)return;let r=new AbortController;if(this.fetch=r,this.kept.credit(n,r.signal),!on(n.post))return;let{site:i}=n,s=this.board;try{await $o(i,n.post,r.signal);let o=on(n.post),a=this.origPath(i,t.id,o.ext);if(!va(a))e.fetching={id:t.key,got:0,size:0},this.paint.draw();let c=si(i,n.post,o),u=await this.kept.cached(c.site,a,c.url,(d,h)=>{if(e.fetching?.id===t.key)e.fetching={id:t.key,got:d,size:h},this.paint.draw()});if(r.signal.aborted)return;if(e.fetching=void 0,s!==this.board)return;let l={site:i,id:t.id,key:t.key,path:a,ext:o.ext,size:u,using:"plain",failed:!1};e.preparing=t.key,this.paint.flush();let f=await this.render(l,"plain");if(r.signal.aborted||s!==this.board)return;if(f.clear===0&&Fs()&&this.setting("TTHEME_FIND_REMOVE_BG")!=="off"){if(e.preparing=void 0,e.cutting=t.key,this.paint.flush(),l.cut=await this.cutOut(i,t.id,a,r.signal),r.signal.aborted||s!==this.board)return;if(e.cutting=void 0,l.cut){e.preparing=t.key,this.paint.flush();let d=await this.render(l,"cut").catch(()=>{return});if(r.signal.aborted||s!==this.board)return;if(d&&yu(d.clear))l.using="cut";else el(l.cut,{force:!0}),l.cut=void 0,l.failed=!0}else l.failed=!0}if(this.current=l,e.tiles[e.focus]?.key===t.key)await this.present();this.preload()}catch(o){if(!r.signal.aborted&&!this.signal.aborted)e.error=Am(i.name,o)}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.paint.draw()}}async cutOut(t,e,n,r){let i=$n(_e(t),"cut",`${e}.png`);if(va(i))return i;try{return nF(cF(i),{recursive:!0}),await Qo(n,i,r),i}catch{el(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]){let n=t.tiles[e],r=n&&this.posts.get(n.key);if(r)this.kept.credit(r,this.signal);if(this.prefetching>=bF||!r||!on(r.post))continue;let{site:i,post:s}=r;this.prefetching++,$o(i,s,this.signal).then(async()=>{let o=on(s),a=this.origPath(i,s.id,o.ext),c=si(i,s,o);return await this.kept.cached(c.site,a,c.url),this.render({site:i,id:s.id,key:n.key,path:a,ext:o.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,SF),s=Math.max(1,Math.round(r*i/n)),o={...this.view.tune},{coloring:a}=this.view,c=!Dv(o,this.view.untuned),u=o.opacity!==this.view.untuned.opacity,l=c?`-${o.size}-${o.at}${u?`-${Math.round(o.opacity*100)}`:""}`:"",f=$n(this.scratch,`${t.site.key}-${t.id}${e==="cut"?"c":""}${a==="original"?"o":""}-${i}x${s}${l}.png`),d=`${t.site.key}:${t.id}:${e}:${a}:${i}x${s}`,h=this.clarity.get(d);if(h&&va(f))return t.fill=h.fill,{clear:h.clear,path:f,opacity:h.opacity,touched:u};let p=await this.renders.run({job:"show",from:e==="cut"?t.cut:t.path,to:f,width:i,height:s,colors:this.entry,tone:this.tone,blur:this.blurring*i/If(n,r).width,coloring:a,...c?{tune:{size:o.size,at:o.at,...u?{opacity:o.opacity}:{}}}:{}});if(this.clarity.set(d,p),t.fill=p.fill,c)this.keepTuned(f);return{clear:p.clear,path:f,opacity:p.opacity,touched:u}}keepTuned(t){this.tunedFiles.push(t);while(this.tunedFiles.length>EF){let e=this.tunedFiles.findIndex((n)=>n!==this.view.shown?.path&&n!==t);if(e===-1)return;el(this.tunedFiles.splice(e,1)[0],{force:!0})}}async present(){let t=this.current;if(!t)return;let e=t.using,{coloring:n}=this.view,r=this.view.tune.opacity,{clear:i,path:s,opacity:o,touched:a}=await this.render(t,e);if(this.current!==t||t.using!==e||this.view.coloring!==n)return;if(!a&&this.view.tune.opacity===r)this.view.untuned.opacity=o,this.view.tune.opacity=o;if(this.view.tuning&&t.fill)this.view.tuning.fill=t.fill;this.view.shown={id:t.key,clear:i,bytes:t.size,path:s,cut:t.cut?e==="cut"?"on":"off":t.failed?"failed":"none"}}reveal(){let t=this.view;if(this.presenting){this.again=!0;return}this.presenting=!0,t.preparing=this.current?.key,this.paint.flush(),this.present().catch((e)=>{t.error=e instanceof Error?e.message:String(e)}).finally(()=>{if(this.presenting=!1,this.again){this.again=!1,this.reveal();return}if(t.preparing===this.current?.key)t.preparing=void 0;this.paint.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.paint.flush();let r=dF(t.tune,t.untuned),i=this.posts.get(n.key)?.post;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)}`,artist:i?.named.artist??[],source:bo(i?.source??"")},width:this.cols*this.cell.w,height:this.rows*this.cell.h,blur:this.blurring,coloring:t.coloring,...r?{tune:r,aligns:Si(_(this.home).terminals),user:sF()}:{}}),this.kept.owned(n.site,n.id,i?.owner??""),Oe(this.home),this.holds();let{size:s,at:o,opacity:a}=t.tune,c=r?` · ${s==="fill"?"fill":`${s}%`} · ${_t[o-1]} · ${a.toFixed(2)}`:"",u=i?.named.artist.length?`${i.named.artist.join(", ")} · `:"";t.saved={text:`Background · ${this.entry.name} ← ${u}${n.site.name} ${n.id}${c}`,key:e.key},t.installed.push(e.key),this.fetch?.abort(),clearTimeout(this.settle),t.fetching=void 0,t.mode="grid"}catch(s){t.error=s instanceof Error?s.message:String(s)}t.installing=void 0,this.paint.draw()}}async function qv(t,e,n){let r=new Fm(t,ie(t),e,e.booru??"",n);if(await r.run(),pi(process.env))process.stdout.write(gi(""));return{saved:r.saved,installs:r.installs}}async function Yv(t){let e=J(),n=ie(e),r=Hn(n.palettes,t);if(!process.stdin.isTTY||!process.stdout.isTTY)throw Error("needs a terminal");let i=new Fm(e,n,r,r.booru??""),s=await i.run();if(i.saved&&s!==0)return process.stderr.write(`${i.saved}
721
- `),0;return s}import{spawn as NF,spawnSync as Jv}from"node:child_process";import{existsSync as RF,readFileSync as Vv}from"node:fs";import{homedir as TF}from"node:os";import{join as Zv}from"node:path";function Qv(t,e,n,r=TF(),i=(s)=>{process.stdout.write(s)}){if(!e||Ft(t)||t.TMUX||Ut(t)!=="terminal-app")return;let[s="",o="-"]=(t.TTHEME_TERMINAL_SHOWN??"").split(" "),a=t.TTHEME_TTY,c=s?we(D(n),s,r):void 0,u=ou(Ts(n)).get(Qt(s))??[],l=u.find((U)=>U===`${A(s)}.${o}.png`)??u[0];if(!a||!c||o==="-"||!l||!RF(c.image))return;let f=Zv(Ts(n),l),d=["-l","JavaScript",su(n),"tab",a,qe(s)],h=_(n).terminalBase??"Basic",p=ih(t,r),$=Vv(f),g,b=f,y=0,S,E=!1,I=!1,N,R=(U)=>{E=!0,NF("osascript",[...d,h],{stdio:"ignore"}).on("close",()=>{if(E=!1,I)return;i(U);let Z=N;N=void 0,Z?.()})},F=(U,Z)=>{g??=At(new Uint8Array(Vv(c.image)));let W=Zv(Ts(n),`${A(s)}.h${process.pid}-${++y}.png`);Qr(b,W,nr(er(g,U,c.opacity,sh(g.width,g.height,c,p)))),b=W,R(Z)},j=()=>{if(b!==f)Qr(b,f,$),b=f},B=(U)=>{clearTimeout(S),S=setTimeout(()=>{if(E)N=U;else U()},Id)},X=()=>{clearTimeout(S),N=void 0};return{slots:[],paint(U){return B(U.name===s?()=>{j(),R("")}:()=>F(U.background,Gn(U))),""},look(U,Z){B(()=>F(Z[0]??"",Z.map((W,$t)=>Go($t,W)).join("")))},wear(U){return Jv("osascript",[...d.slice(0,-1),qe(U.name),h],{encoding:"utf8"}).stdout?.trim()==="worn"?"":Gn(U)},saved:async()=>new Map,restore(){return X(),I=!0,j(),Jv("osascript",[...d,h],{stdio:"ignore"}),""},stop:X}}import{existsSync as Ea,readdirSync as PF,readFileSync as sl,rmSync as Xv,statSync as e1}from"node:fs";import{homedir as HF}from"node:os";import{join as Gi}from"node:path";var AF=150,FF=260;function il(t){return t?.includes(`path = "${A("")}`)===!0}function CF(t){try{return _(t).terminals.includes("warp")}catch{return!1}}function t1(t,e){let n=A(e);if(!Ea(t))return;return PF(t).filter((i)=>i.startsWith(`${n}.`)&&/^[0-9a-f]{8}\.yaml$/.test(i.slice(n.length+1))).map((i)=>({file:i,at:e1(Gi(t,i)).mtimeMs})).sort((i,s)=>s.at-i.at)[0]?.file??(Ea(Gi(t,`${n}.yaml`))?`${n}.yaml`:void 0)}function LF(t,e){if(!e)return;let n;try{n=sl(Gi(t,e),"utf8")}catch{return}let r=/^background_image:\n\s+path:\s*"([^"]*)"\n\s+opacity:\s*(\d+)/m.exec(n);return r?.[1]?{image:r[1],opacity:Number(r[2])/100}:void 0}function n1(t,e,n,r=HF()){if(!e||Ft(t)||t.TMUX||Ut(t)!=="warp")return;let i=Ar(r,n);if(!Ea(i)||!CF(n))return;let s=ki(r),o=cu(n),a=[],c=t.TTHEME_WARP_WEARS??Me(_(n)),u=LF(s,c&&t1(s,c)),l,f,d=(g)=>{let b=sl(i,"utf8"),y=Fr(b);if(y===g)return;if(il(g)&&!il(y)&&!Ea(o))H(o,y??"");if(en(i,uu(b,g)),!il(g))Xv(o,{force:!0})},h=(g)=>{for(let b of a.splice(0))if(b===g)a.push(b);else Xv(Gi(s,b),{force:!0})},p=()=>{clearTimeout(l),clearTimeout(f)},$=(g,b,y)=>{p(),l=setTimeout(()=>{let S=b;if(!S)S=`${A(g.name)}.view-${process.pid}-${a.length+1}.yaml`,H(Gi(s,S),Do(g,y)),a.push(S);let E=S,I=Date.now()-e1(Gi(s,E)).mtimeMs;f=setTimeout(()=>{d(uh(g.name,E)),h(E)},Math.max(0,FF-I))},AF)};return{slots:[],paint:(g)=>{if(g.name===c)$(g,t1(s,g.name));else if(u)$(g,void 0,u);else $(g,Ea(Gi(s,`${A(g.name)}.yaml`))?`${A(g.name)}.yaml`:void 0);return""},look:(g,b)=>{let[y="",S="",E="",,...I]=b;$({name:g,background:y,foreground:S,cursor:E,ansi:I},void 0,u)},wear:(g,b)=>b.includes("warp")?"":void 0,saved:async()=>new Map([["theme",Fr(sl(i,"utf8"))??""]]),restore:(g)=>{p();let b=g.get("theme");if(b)d(b);else if(il(Fr(sl(i,"utf8"))))d(au);return h(),""}}}function Kr(t,e,n){return Qv(t,e,n)??B0(t,e)??n1(t,e,n)}function Lm(){return process.stdin.isTTY===!0&&process.stdout.isTTY===!0}function r1(t,e){if(t.includes("/"))return t;let n=fi(e,!1),r=n.filter((s)=>wr(s.dir).some((o)=>o.slug===t)),[i]=r.length===1?r:n.length===1?n:[];return i?`${i.id}/${t}`:t}function _F(t,e,n){let r=_(t),i=n.filter((s)=>!r.palettes.includes(s));if(i.length>0)pn(t,e,r,{...r,palettes:[...r.palettes,...i]});else if(n.some((s)=>r.palettes.includes(s)))Ct(t,e,r);return{state:r,fresh:i}}function BF(t){let e=Math.max(0,...t.map((n)=>n.slot.length));return t.map((n)=>` ${n.slot.padEnd(e)} ${n.from} → ${n.to} ${n.rule}`)}function i1(t,e,n){let r=Uw(e),i=Te(ye(r.name,qf(r),n.palettes)),s=Ot(t,n,!1).palettes.find((o)=>o.name===i.name);if(s&&JSON.stringify(s)!==JSON.stringify(i))throw Error(`${i.name} is already in ${ct(i.name)??"the ttheme catalog"} and differs — \`ttheme add ${i.name}\` wears that one`);if(!s)yc(t,[...Pn(t),i]);return i.name}var WF=["background","foreground","cursor"];function s1(t){try{t();return}catch(e){return e.message}}function o1(t,e,n){return Ot(t,e,!1).palettes.filter((r)=>r.name!==n).map((r)=>({name:r.name,colors:{background:r.background,foreground:r.foreground,cursor:r.cursor,selection:r.selection,ansi:r.ansi}}))}function a1(t,e){let n=new Set(re(t,e).map((r)=>r.key));return{count:()=>re(t,e).length,added:()=>re(t,e).filter((r)=>!n.has(r.key)).length,fresh:()=>(Su(t,e)??[]).filter((r)=>!n.has(Xt(r))),discard:()=>{let r=re(t,e).filter((i)=>!n.has(i.key));for(let i of r)hs(t,e,i.key),rc(t,e);if(r.length>0)Oe(t)}}}function UF(...t){let e=new Map;for(let n of t.flatMap((r)=>r??[]))e.set(Xt(n),n);return e.size>0?[...e.values()]:void 0}function c1(t,e,n,r){if(!Wc(process.env,_(t).terminals))return;return async(i,s)=>{let o=Te(ye(e,r(i),n.palettes)),{saved:a}=await qv(t,o,s);return{...a?{note:a}:{},count:re(t,e).length}}}async function u1(t){let e=process.stdout.isTTY===!0,n=J(),r=Kr(process.env,e,n),i=r?await r.saved():new Map,s=r?.look?{look:(a)=>r.look?.(t.name,a)}:r?{only:r.slots}:{},o=e?Xu.of(process.env,n,t.name,_(n).terminals):void 0;try{return await Rv(t,{color:!Ft(),...s,...o?{backdrop:o}:{}})}finally{if(r)process.stdout.write(r.restore(i))}}async function l1(t,e,n){let r=J(),i=lt(r),s=await Hk(r,n),o=t.includes("/")?t:`${s.id}/${t}`,a=We(o);if(a)throw Error(`${o} ${a}`);if(ct(o)!==s.id)throw Error(`palettes in ${s.dir} are named ${s.id}/<palette> — ${o} belongs elsewhere`);let c=zf(r,o);if(Ma(c))throw Error(`${o} already exists — \`ttheme edit ${o}\` changes it`);let u=e?Hn(Ot(r,i).palettes,e):void 0;if(!Lm())throw Error("new opens the palette editor — run it in a terminal");let l=u&&(ct(u.name)?u.base:u.default?void 0:u.name),f=u?Df(u,o,`kept from ${u.name}`):void 0,d=u?Su(r,u.name)??u.pictures:void 0,{base:h,ansiSource:p,group:$,...g}=f??{name:o,signature:WF,...Wr(ga)},b=a1(r,o),y=({colors:I,signature:N})=>{let R=UF(d,b.fresh());return qf({...g,...I,signature:N,...l?{base:l}:{},...R?{pictures:R}:{}})},S=await u1({title:"New palette",name:o,...f?{colors:f}:{},signature:g.signature,...g.waive?{waive:g.waive}:{},palettes:o1(r,i,o),pictures:b.count(),find:c1(r,o,i,y),check:(I)=>s1(()=>ye(o,y(I),i.palettes))});if(!S){b.discard(),console.log("Nothing made");return}jF(GF(c),{recursive:!0}),H(c,y(S));let{state:E}=_F(r,i,[o]);console.log(` + ${o}${u?` from ${u.name}`:""}
722
- ${c}`),await _n(r,Ot(r,i).palettes.filter((I)=>I.name===o),E.terminals),console.log(`
723
- \`ttheme use ${o}\` wears it · \`ttheme edit ${o}\` opens it again`)}function KF(t,e,n){let r=Te(ye(t,e,n.palettes));return Ao(r).length>0?Po(r).filter((i)=>i.startsWith(" ✗")):[]}async function f1(t){let e=J(),n=lt(e),r=_(e),i=Ot(e,n,!1),s=r1(t,e),o=al(e,s),a=o&&Ma(o)?s:i.palettes.some((b)=>b.name===t)?t:s,c=al(e,a);if(!c||!Ma(c)){let b=i.palettes.some((y)=>y.name===a);throw Error(b?`${a} is not one of yours — \`ttheme new <name> --from ${a}\` makes your own copy`:`no palette of yours called ${a} — \`ttheme new\` makes one`)}if(!Lm())throw Error("edit opens the palette editor — run it in a terminal");let u=Cm(c,"utf8"),l;try{l=ye(a,u,n.palettes)}catch(b){throw Error(`${c} cannot be read — ${b.message}`)}let f=a1(e,a),d=new Set((l.pictures??[]).map((b)=>Xt(b))),h=({colors:b,signature:y})=>Gw(Kw(Jf(u,b),y),f.fresh().filter((S)=>!d.has(Xt(S)))),p=await u1({title:"Edit palette",name:a,colors:Yf(l),signature:l.signatureSlots,waive:l.waive,palettes:o1(e,n,a),pictures:f.count(),find:c1(e,a,n,h),check:(b)=>s1(()=>ye(a,h(b),n.palettes))});if(!p){f.discard(),console.log("Nothing changed");return}let $=h(p);if($===u){console.log(f.added()>0?`Kept the pictures you added to ${a}`:"Nothing changed");return}if(H(c,$),r.palettes.includes(a))Ct(e,n,r);console.log(`Saved ${a}${r.palettes.includes(a)?" — new tabs and `ttheme use` wear it":` — \`ttheme add ${a}\` installs it`}`);let g=KF(a,$,n);if(g.length>0)console.log(`
709
+ }`;async function pv(){if(Em())return;if(process.platform==="darwin"){let[t="",e=""]=(await yn("osascript",["-l","JavaScript","-e",pH])).stdout.trim().split("\t");return{stamp:t,picture:e==="picture"}}if(process.platform==="linux"&&!hv()){let e=Boolean(process.env.WAYLAND_DISPLAY)?(await yn("wl-paste",["--list-types"])).stdout:(await yn("xclip",["-selection","clipboard","-t","TARGETS","-o"])).stdout;return{stamp:e,picture:/^image\//m.test(e)}}return}function Qu(t){return t.length>8&&/^(?:\/|~\/|file:|https?:)/.test(t)}var ya=(t)=>Buffer.from(t).toString("base64"),km=(t)=>Buffer.from(t,"base64");function sv(t,e){return e.find((n)=>t.includes(n))}class Sm{clipboard=!1;drops=!1;reading;offered=[];dropping;pw=ya(ov("sha1").update(`${process.pid}:${Date.now()}`).digest("hex"));send;deliver;constructor(t,e){this.send=t,this.deliver=e}start(){let t="";if(this.clipboard)t+="\x1B[?5522h";if(this.drops)t+=`\x1B]72;t=a;${$m.join(" ")}\x1B\\`;this.send(t)}stop(){this.send(`${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=${ya("ttheme")}:pw=${this.pw};${ya(".")}\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?km(t.mime).toString("utf8"):r.mime,e)r.chunks.push(km(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 s=i.toString("utf8").split(/\s+/).filter(Boolean),o=sv(s,[...ym,...uH]);if(!o){this.deliver({kind:"text",text:""});return}let a=r.pw||this.pw,c=r.pw?"Paste event":"ttheme";this.reading={mime:o,chunks:[],pw:a,listing:!1},this.send(`\x1B]5522;type=read:name=${ya(c)}:pw=${a};${ya(o)}\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 a=$m.filter((c)=>this.offered.includes(c));this.send(`\x1B]72;t=m:o=${a.length>0?1:0};${a.join(" ")}\x1B\\`)}return}if(n==="M"){let a=e?e.split(" ").filter(Boolean):this.offered,c=sv(a,$m);if(!c){this.send("\x1B]72;t=r:o=0\x1B\\");return}this.dropping={mimes:a,index:a.indexOf(c)+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(km(e));if(t.m==="1"||e)return;this.dropping=void 0;let i=Buffer.concat(r.chunks),s=r.mimes[r.index-1]??"",o;if(s.startsWith("image/"))o={kind:"bytes",bytes:new Uint8Array(i),source:"drop"};else{let a=i.toString("utf8"),c=s==="text/uri-list"?eo(a).find((u)=>eH(u)):void 0;o=c?{kind:"bytes",bytes:new Uint8Array(Zu(c)),source:c}:{kind:"text",text:a}}this.send("\x1B]72;t=r:o=1\x1B\\"),this.deliver(o)}}var Mm=5,gH=6,gv=0.05,bH=[1,2,3,4,5,6,9,10,11,12,13,14],bv=(t,e)=>(e-t+360)%360<=180?1:-1;function va(t,e,n){let r=e*Math.cos(n*Math.PI/180),i=e*Math.sin(n*Math.PI/180),s=[t+0.3963377774*r+0.2158037573*i,t-0.1055613458*r-0.0638541728*i,t-0.0894841775*r-1.291485548*i].map((l)=>l**3),[o,a,c]=s,u=[4.0767416621*o-3.3077115913*a+0.2309699292*c,-1.2684380046*o+2.6097574011*a-0.3413193965*c,-0.0041960863*o-0.7034186147*a+1.707614701*c];if(u.some((l)=>l<-0.0001||l>1.0001))return;return u.map((l)=>{let f=Math.min(1,Math.max(0,l));return Math.round(255*(f<=0.0031308?12.92*f:1.055*f**0.4166666666666667-0.055))})}function Om(t,e,n){if(va(t,n,e)!==void 0)return n;let r=0,i=n;for(let s=0;s<24;s++){let o=(r+i)/2;if(va(t,o,e)===void 0)i=o;else r=o}return r}function _e(t,e,n){return`#${(va(t,Om(t,n,e),n)??[0,0,0]).map((i)=>i.toString(16).padStart(2,"0")).join("")}`}function wH(t,e){let{l:n,c:r}=St(t);return _e(n,r,(e+360)%360)}function $H(t,e,n){let{l:r,c:i,h:s}=St(t),o=vt(e)<0.18,a=(l)=>_e(o?r+(1-r)*l:r*(1-l),i,s);if(wt(a(1),e)<n+gv)return a(1);let c=0,u=1;for(let l=0;l<30;l++){let f=(c+u)/2;if(wt(a(f),e)>=n+gv)u=f;else c=f}return a(u)}function kH(t,e){let{l:n,c:r,h:i}=St(t),s=0,o=n;for(let a=0;a<30;a++){let c=(s+o)/2;if(vt(_e(c,r,i))<=e-0.005)s=c;else o=c}return _e(s,r,i)}function yH(t,e,n){let r=be[e],[i,s]=[St(t[e]),St(t[e+8])],o=(l,f)=>n.has(l)?[f]:Array.from({length:2*r.width+1},(d,h)=>(r.center-r.width+h+360)%360),a=(l,f,d)=>er.every((h)=>{let m=(l>8?8:0)+h;if(m===l)return!0;let $=St(t[m]);return $.c<fo||Ae($.h,f)>=Qi+1||Math.abs($.l-d)>=Xi}),c,u=Number.POSITIVE_INFINITY;for(let l of o(e,i.h)){if(!n.has(e)&&!a(e,l,i.l))continue;for(let f of o(e+8,s.h)){if(Ae(l,f)>Ue-Mm||!n.has(e+8)&&!a(e+8,f,s.l))continue;let d=Ae(l,i.h)+Ae(f,s.h);if(d<u)u=d,c=[l,f]}}return c}class wv{theme;moves=[];constructor(t){this.theme={...t,ansi:[...t.ansi]}}set(t,e,n){let r=this.get(t);if(n===r)return;if(this.moves.push({slot:t,rule:e,from:r,to:n}),t==="foreground")this.theme.foreground=n;else if(t==="selection")this.theme.selectionBackground=n;else this.theme.ansi[Number(t.slice(4))]=n}get(t){if(t==="foreground")return this.theme.foreground;if(t==="selection")return this.theme.selectionBackground;return this.theme.ansi[Number(t.slice(4))]}rehue(t,e,n){this.set(`ansi${t}`,e,wH(this.theme.ansi[t],n))}roles(){let t=new Set(this.theme.signatureSlots);for(let{slot:n,hue:r}of nr(this.theme)){let i=be[sn(n)];this.rehue(n,"ansi-role",i.center+bv(i.center,r)*(i.width-Mm))}for(let{normal:n,gap:r}of Rn(this.theme)){if(r<=Ue)continue;let[i,s]=t.has(`ansi${n+8}`)?[n+8,n]:[n,n+8],o=St(this.theme.ansi[i]).h,a=St(this.theme.ansi[s]).h;this.rehue(s,"bright-follows",o+bv(o,a)*(Ue-Mm))}let e=ts(this.theme);for(let[n,r]of Nn(this.theme)){let i=sn(e.has(r)?n:r),s=yH(this.theme.ansi,i,e);if(s===void 0)continue;this.rehue(i,"distinct",s[0]),this.rehue(i+8,"distinct",s[1])}}readability(){let t=new Set(this.theme.waive),{background:e}=this.theme,n=(r,i,s,o=e)=>{if(t.has(r))return;for(let a of i)if(wt(this.get(a),o)<s)this.set(a,r,$H(this.get(a),o,s))};if(n("foreground",["foreground"],7),n("accents",bH.map((r)=>`ansi${r}`),3),n("light-ansi",["ansi7","ansi15"],7),n("ansi8-visible",["ansi8"],1.6),!t.has("ansi0-dark")&&vt(this.get("ansi0"))>0.15)this.set("ansi0","ansi0-dark",kH(this.get("ansi0"),0.15));n("selection",["selection"],7,this.theme.foreground)}net(){return[...new Set(this.moves.map((t)=>t.slot))].flatMap((t)=>{let e=this.moves.filter((i)=>i.slot===t),n=e[0].from,r=this.get(t);return n===r?[]:[{slot:t,rule:[...new Set(e.map((i)=>i.rule))].join(", "),from:n,to:r}]})}}function Xu(t){let e=new wv(t);for(let n=0;n<gH;n++)if(e.readability(),e.roles(),Qr(e.theme).length===0)break;return{theme:e.theme,moves:e.net(),left:Qr(e.theme)}}var ji=[{key:"background",label:"Background",min:0,max:0.5,step:0.01,digits:2},{key:"foreground",label:"Foreground",min:0.5,max:1,step:0.01,digits:2},{key:"hue",label:"Hue",min:0,max:360,step:1,digits:0,wraps:!0},{key:"tint",label:"Tint",min:0,max:0.1,step:0.005,digits:3},{key:"lightness",label:"Accent lightness",min:0.4,max:0.95,step:0.01,digits:2},{key:"chroma",label:"Accent chroma",min:0,max:0.3,step:0.005,digits:3},{key:"brights",label:"Brights",min:-0.2,max:0.2,step:0.01,digits:2}],Ea={background:0.21,foreground:0.88,hue:265,tint:0.02,lightness:0.72,chroma:0.12,brights:0.06},$v=(t,e,n)=>Math.min(n,Math.max(e,t));function xm(t,e,n){let r=t[e.key]+e.step*n,i=e.wraps?(r%e.max+e.max)%e.max:$v(r,e.min,e.max);return{...t,[e.key]:Math.round(i*1e4)/1e4}}function Wr(t){let e=(r,i,s)=>_e($v(r,0,1),i,s),n=Array.from({length:16},()=>"#000000");n[0]=e(t.background+0.06,t.tint,t.hue),n[8]=e(t.background+0.25,t.tint,t.hue),n[7]=e(t.foreground-0.06,t.tint/2,t.hue),n[15]=e(t.foreground+0.06,t.tint/2,t.hue);for(let r of er){let i=be[r].center;n[r]=e(t.lightness,t.chroma,i),n[r+8]=e(t.lightness+t.brights,t.chroma,i)}return{background:e(t.background,t.tint,t.hue),foreground:e(t.foreground,t.tint/2,t.hue),cursor:e(t.lightness+t.brights,Math.max(t.chroma,0.08),t.hue),selection:e(t.background+0.1,t.tint*2,t.hue),ansi:n}}var Ui=["background","foreground","cursor","selection",...Array.from({length:16},(t,e)=>`ansi${e}`)],j=["Background","Foreground","Cursor","Selection"],tl=["Black","Red","Green","Yellow","Blue","Magenta","Cyan","White"],Kr=j.length+tl.length,tn=[{key:"l",label:"Lightness",min:0,max:1,step:0.01,digits:2},{key:"c",label:"Chroma",min:0,max:0.37,step:0.005,digits:3},{key:"h",label:"Hue",min:0,max:360,step:1,digits:0,wraps:!0}],kv=5,Qn=tn.length,ro=["this","pair","normals","brights","accents"],el=[1,2,3,4,5,6,9,10,11,12,13,14],yv=el.filter((t)=>t<8).map((t)=>j.length+t),vv=el.filter((t)=>t>8).map((t)=>j.length+t);function Im(t,e){let n=e-j.length;if(n<0||t==="this")return[e];if(t==="pair")return[j.length+n%8,j.length+8+n%8];let r=t==="normals"?yv:t==="brights"?vv:[...yv,...vv];return r.includes(e)?r:[e]}function vH(){return Array.from({length:Kr},(t,e)=>e<j.length?[e]:[e,e+8]).flat()}function EH(t){let e=t.trim();return/^https?:\/\/\S+$/i.test(e)||eo(e).length>0}function no(t){return[t.background,t.foreground,t.cursor,t.selection,...t.ansi]}function se(t){let[e,n,r,i,...s]=t;return{background:e,foreground:n,cursor:r,selection:i,ansi:s}}function Gi(t){if(t<j.length)return{name:j[t],about:Ui[t]};let e=t-j.length,n=tl[e%8];return e<8?{name:n,about:`ansi ${e}`}:{name:`Bright ${n.toLowerCase()}`,about:`ansi ${e}`}}var io=(t,e,n)=>Math.min(n,Math.max(e,t));function Ev(t){return t.length===1?t.toLowerCase():t}function SH(t){return io(Math.round(t),0,255).toString(16).padStart(2,"0")}function Sv(t){let e=t.trim().toLowerCase(),n=/^#?([0-9a-f]{6}|[0-9a-f]{3})$/.exec(e);if(n){let s=n[1];return`#${s.length===3?[...s].map((o)=>o+o).join(""):s}`}let r=/^rgb\(\s*(\d+)[\s,]+(\d+)[\s,]+(\d+)\s*\)$/.exec(e);if(r)return`#${r.slice(1,4).map((s)=>SH(Number(s))).join("")}`;let i=/^oklch\(\s*([\d.]+)(%?)[\s,]+([\d.]+)[\s,]+([\d.]+)(?:deg|°)?\s*\)$/.exec(e);if(i){let s=Number(i[1])/(i[2]?100:1);return _e(io(s,0,1),Number(i[3]),Number(i[4])%360)}return}function _i(t){let e=we.find((n)=>n.rule===t);return e?.min??e?.max??0}function Bi(t,e,n){let r=se(t);return{name:"draft",background:r.background,foreground:r.foreground,selectionBackground:r.selection,ansi:r.ansi,waive:n,signatureSlots:e}}function MH(t,e){let n=t-j.length,r=t<=1?"foreground":t===3?"selection":n===7||n===15?"light-ansi":n===8?"ansi8-visible":el.includes(n)?"accents":void 0;return{against:t===0||t===3?1:0,floor:r===void 0||e.includes(r)?void 0:_i(r)}}function Tm(t,e,n,r){let i=Bi(t,e,n),{background:s,foreground:o,selection:a,ansi:c}=se(t),u=(l,f,d)=>wt(f,d)<_i(r)?[l]:[];if(r==="foreground")return wt(o,s)<_i(r)?[1,0]:[];if(r==="selection")return wt(o,a)<_i(r)?[3,1]:[];if(r==="accents")return el.flatMap((l)=>u(j.length+l,c[l],s));if(r==="light-ansi")return[7,15].flatMap((l)=>u(j.length+l,c[l],s));if(r==="ansi8-visible")return u(j.length+8,c[8],s);if(r==="ansi0-dark")return vt(c[0])>_i(r)?[j.length]:[];if(r==="ansi-role")return nr(i).map(({slot:l})=>j.length+l);if(r==="bright-follows")return Rn(i).filter(({gap:l})=>l>Ue).flatMap(({normal:l})=>[j.length+l,j.length+l+8]);if(r==="distinct")return Nn(i).flatMap(([l,f])=>[j.length+l,j.length+f]);return[]}function OH(t,e,n){return new Set(Ui.flatMap((r,i)=>nl(t,e,n,i).some((s)=>s.ok===!1)?[i]:[]))}function Zn(t,e,n,r,i){let s=wt(t,e),o=_i(n);if(i.includes(n))return{ok:void 0,text:`${r} ${s.toFixed(2)}:1 · waived`};return{ok:s>=o,text:`${r} ${s.toFixed(2)}:1 · ≥ ${o}`}}function nl(t,e,n,r){let i=se(t),s=Bi(t,e,n);if(r===0){let b=[1,2,3,4,5,6,9,10,11,12,13,14].reduce((y,E)=>wt(i.ansi[y],i.background)<=wt(i.ansi[E],i.background)?y:E);return[Zn(i.foreground,i.background,"foreground","Foreground on it",n),Zn(i.ansi[b],i.background,"accents",`Weakest, ANSI ${b},`,n),Zn(i.ansi[8],i.background,"ansi8-visible","ANSI 8 on it",n)]}if(r===1)return[Zn(i.foreground,i.background,"foreground","On background",n),Zn(i.foreground,i.selection,"selection","On the selection",n)];if(r===2)return[{ok:void 0,text:`On background ${wt(i.cursor,i.background).toFixed(2)}:1`}];if(r===3)return[Zn(i.foreground,i.selection,"selection","Foreground on it",n)];let o=r-j.length,a=i.ansi[o];if(o===0){let g=vt(a),b=_i("ansi0-dark");return[n.includes("ansi0-dark")?{ok:void 0,text:`Luminance ${g.toFixed(3)} · waived`}:{ok:g<=b,text:`Luminance ${g.toFixed(3)} · ≤ ${b}`}]}if(o===7||o===15)return[Zn(a,i.background,"light-ansi","On background",n)];if(o===8)return[Zn(a,i.background,"ansi8-visible","On background",n)];let c=[Zn(a,i.background,"accents","On background",n)],u=St(a),l=sn(o),f=be[l],d=`${f.name} ${f.center}±${f.width}°`;if(u.c<fo)c.push({ok:void 0,text:"Too grey to have a hue"});else if(ts(s).has(o))c.push({ok:void 0,text:`Hue ${u.h.toFixed(0)}° · a signature, free of ${d}`});else if(n.includes("ansi-role"))c.push({ok:void 0,text:`Hue ${u.h.toFixed(0)}° · ${d} waived`});else{let g=Ae(u.h,f.center)-f.width;c.push(g>0?{ok:!1,text:`Hue ${u.h.toFixed(0)}° · ${g.toFixed(0)}° outside ${d}`}:{ok:!0,text:`Hue ${u.h.toFixed(0)}° · in ${d}`})}let h=o<8?o+8:o-8,m=Rn(s).find((g)=>g.normal===l);if(m)c.push(n.includes("bright-follows")?{ok:void 0,text:`${m.gap.toFixed(0)}° from ANSI ${h} · waived`}:{ok:m.gap<=Ue,text:`${m.gap.toFixed(0)}° from ANSI ${h} · ≤ ${Ue}°`});let $=Nn(s).flatMap(([g,b])=>g===o?[b]:b===o?[g]:[]);if($.length>0&&!n.includes("distinct"))c.push({ok:!1,text:`Reads as ANSI ${$.join(", ")} · within ${Qi}° and ${Xi} lightness`});return c}function Ov(t,e,n){let r=on(Bi(t,e,n));return we.map((i,s)=>{let o=r[s],a=n.includes(i.rule),c=a||Number.isNaN(o)?void 0:(i.min===void 0||o>=i.min)&&(i.max===void 0||o<=i.max);return{ok:c,label:i.label,value:Number.isNaN(o)?"—":Number.isInteger(o)?String(o):o.toFixed(2),bound:a?"waived":i.min!==void 0?`≥ ${i.min}`:i.max!==void 0?`≤ ${i.max}`:"",slots:c===!1?Tm(t,e,n,i.rule):[]}})}var xH=new Set(["reset","reset-all","hex","paste","fix","open","tune","sig","follow"]),xv=tn[1].max;function Rm(t){let[e,n,r]=rt(t);return e===n&&n===r}function Nm(t,e){return Math.floor(Om(t,e,xv)*1e4)/1e4}function Mv(t,e){let n=t.wraps?t.max-t.step:t.max;return Math.min(n,Math.round((t.min+(t.max-t.min)*e)/t.step)*t.step)}class Sa{mode;seeds=Ea;field=0;list;lch;start;original;signature;row=0;col=0;channel=0;scope="this";view="slot";scene=0;typing;overlay;quitting=!1;compare=!1;notice;filter="";pick=0;result;act;wants;pictures;startPictures;options;fresh;theme;startSignature;seeded=!1;tuneFrom;holds=new Map;clip;history=[];future=[];lastEdit;constructor(t){this.options=t,this.theme=t.variant==="theme",this.fresh=t.colors===void 0,this.mode=this.fresh?"seeds":"list",this.list=no(t.colors??Wr(this.seeds)),this.lch=this.lchs(),this.start=[...this.list],this.original=t.original?no(t.original):[...this.list],this.signature=[...t.signature],this.startSignature=[...t.signature],this.pictures=t.pictures??0,this.startPictures=this.pictures}markSaved(){this.start=[...this.list],this.history=[],this.future=[],this.lastEdit=void 0}offDefault(t){return this.list[t]!==this.original[t]}get added(){return Math.max(0,this.pictures-this.startPictures)}found(t){this.pictures=t.count,this.notice=t.note}get waive(){return this.options.waive??[]}get held(){return this.holds.get(this.slot())}colors(){return se(this.list)}edited(){return{colors:this.colors(),signature:[...this.signature]}}shown(){return this.compare?this.start:this.list}slot(){return this.row<j.length?this.row:this.row+(this.col===1?8:0)}dirty(){return this.seeded||this.pictures!==this.startPictures||this.list.some((t,e)=>t!==this.start[e])||this.signature.join()!==this.startSignature.join()}misses(){return OH(this.list,this.signature,this.waive)}failing(){return Qr(Bi(this.list,this.signature,this.waive))}choices(){let t=this.filter.toLowerCase();return(this.options.palettes??[]).filter((e)=>e.name.toLowerCase().includes(t))}paste(t){if(this.notice=void 0,this.overlay==="open"){this.filter+=t.replace(/\s+/g,"").toLowerCase(),this.pick=0;return}if(this.overlay)return;if(t.trim()===""){this.findPictures({clipboard:!0});return}if(EH(t)){this.findPictures({paste:t});return}if(this.mode==="seeds")return;let e=Sv(t);if(!e){this.notice="Not a color — #rrggbb, rgb(r g b) or oklch(l c h)";return}this.typing=void 0,this.take(e,"paste")}press(t){if(this.notice=void 0,t==="ctrl-c"){if(this.theme)this.act="cancel";else this.result="cancelled";return}if(this.quitting){if(this.quitting=!1,t==="y"||t==="Y")this.result="cancelled";return}if(this.typing!==void 0){this.type(t);return}if(this.overlay==="keys"){this.overlay=void 0;return}if(this.overlay==="open"){this.openKey(t);return}if(t==="?"){this.overlay="keys";return}if(this.theme&&(t==="ctrl-v"||t==="alt-v"||t==="p"))return;if(t==="ctrl-v"||t==="alt-v"){this.findPictures({clipboard:!0});return}if(t==="p"&&this.mode!=="tune"){this.findPictures();return}if(t===" "&&this.mode!=="seeds"){this.compare=!this.compare;return}if(this.compare&&t==="esc"){this.compare=!1;return}if(t==="g"&&this.mode!=="seeds"){this.view=this.view==="slot"?"relations":"slot";return}let e=t==="j"?"down":t==="k"?"up":t;if(this.mode==="seeds")this.seedKey(e);else if(this.mode==="tune")this.tuneKey(e);else this.listKey(e)}select(t){if(this.mode==="seeds"||this.typing!==void 0||this.overlay||this.quitting)return;if(this.mode==="tune"){if(t===this.slot())return;this.tuneKey("enter")}if(this.notice=void 0,this.row=t<j.length?t:j.length+(t-j.length)%8,t>=j.length)this.col=t-j.length>=8?1:0;this.lastEdit=void 0}grip(t){if(this.mode==="seeds"||this.typing!==void 0||this.overlay||this.quitting)return!1;if(this.notice=void 0,this.mode==="list")this.tune();return this.channel=t,!0}slide(t,e){if(!this.grip(t))return;let n=Math.min(1,Math.max(0,e));if(t===Qn){this.reach(21**n);return}this.put(Mv(tn[t],n))}sow(t,e){let n=ji[t];if(this.mode!=="seeds"||this.overlay||this.quitting||!n)return;this.notice=void 0,this.field=t;let r=Math.min(1,Math.max(0,e));this.seeds=xm({...this.seeds,[n.key]:Mv(n,r)},n,0),this.list=no(Wr(this.seeds)),this.lch=this.lchs()}scroll(t){let e=(n,r)=>Math.min(r,Math.max(0,n+t));if(this.overlay==="open")this.pick=e(this.pick,Math.max(0,this.choices().length-1));else if(this.overlay||this.quitting||this.typing!==void 0)return;else if(this.mode==="seeds")this.field=e(this.field,ji.length-1);else if(this.mode==="tune")this.channel=e(this.channel,Qn);else this.row=e(this.row,Kr-1),this.lastEdit=void 0}lchOf(t){let e=St(t);return Rm(t)?{...e,h:this.neutralHue()}:e}lchs(){return this.list.map((t)=>this.lchOf(t))}neutralHue(){let t=[0,1,3,2].map((e)=>this.list[e]).find((e)=>!Rm(e));return t?St(t).h:Ea.hue}seedKey(t){let e=ji.length;if(t==="up"||t==="down")this.field=(this.field+(t==="up"?e-1:1))%e;else if(t==="home"||t==="end")this.field=t==="home"?0:e-1;else if(t==="left"||t==="right"||t==="shift-left"||t==="shift-right"){let n=ji[this.field],r=(t.endsWith("left")?-1:1)*(t.startsWith("shift")?n.wraps?10:kv:1);this.seeds=xm(this.seeds,n,r),this.list=no(Wr(this.seeds)),this.lch=this.lchs()}else if(t==="enter")this.leaveSeeds();else if(t==="o")this.openPalettes();else if(t==="esc")this.leave()}leaveSeeds(){this.start=[...this.list],this.original=[...this.list],this.seeded=!0,this.mode="list"}leave(){if(this.theme)this.act="cancel";else if(this.dirty())this.quitting=!0;else this.result="cancelled"}findPictures(t){if(!this.options.find){this.notice="Pictures need Ghostty, iTerm2 or kitty, outside tmux";return}this.wants=t?{start:t}:{}}openPalettes(){if((this.options.palettes??[]).length>0)this.overlay="open",this.pick=0;else this.notice="No other palettes to take colors from"}listKey(t){if(t==="up"||t==="down"){if(this.theme&&this.row===(t==="up"?0:Kr-1))this.act=t==="up"?"above":"below";else this.row=(this.row+(t==="up"?Kr-1:1))%Kr;this.lastEdit=void 0}else if(t==="home"||t==="end")this.row=t==="home"?0:Kr-1;else if(t==="pgup"||t==="pgdn")this.row=t==="pgup"?0:j.length;else if(t==="left"||t==="right"){if(this.row>=j.length)this.col=t==="left"?0:1,this.lastEdit=void 0}else if((t==="shift-left"||t==="shift-right")&&!this.theme)this.scene+=t==="shift-left"?-1:1;else if(t==="n"||t==="N")this.nextMiss(t==="n"?1:-1);else if(t==="enter"||t==="tab")this.tune();else if(t==="#")this.typing="";else if(t==="c")this.clip=this.list[this.slot()],this.notice=`Copied ${this.clip}`;else if(t==="v")if(this.clip)this.set(this.slot(),this.clip,"paste");else this.notice="Nothing copied yet — c copies a slot";else if(t==="r")this.set(this.slot(),this.original[this.slot()],"reset");else if(t==="R")this.remember("reset-all"),this.list=[...this.original],this.lch=this.lchs();else if(t==="=")this.follow();else if(t==="*"&&!this.theme)this.mark();else if(t==="f")this.fix();else if(t==="o"&&!this.theme)this.openPalettes();else if(t==="u")this.undo();else if(t==="ctrl-r")this.redo();else if(t==="s"||t==="ctrl-s")if(this.theme)this.act="save";else this.save();else if(t==="esc")this.leave()}nextMiss(t){let e=vH(),n=this.misses();if(n.size===0){this.notice="The gate passes";return}let r=e.indexOf(this.slot());for(let i=1;i<=e.length;i++){let s=e[((r+t*i)%e.length+e.length)%e.length];if(n.has(s)){if(this.row=s<j.length?s:j.length+(s-j.length)%8,s>=j.length)this.col=s-j.length>=8?1:0;return}}}tune(){this.remember("tune"),this.tuneFrom={list:[...this.list],lch:[...this.lch]},this.holds=new Map,this.hold(),this.mode="tune"}hold(){for(let t of this.scoped())if(!this.holds.has(t))this.holds.set(t,this.lch[t].c)}scoped(){return Im(this.scope,this.slot())}tuneKey(t){let e=tn.length+1,n=this.channel===Qn;if(t==="up"||t==="down"||t==="tab"||t==="shift-tab")this.channel=(this.channel+(t==="up"||t==="shift-tab"?e-1:1))%e;else if(t==="left"||t==="right"||t==="shift-left"||t==="shift-right"){let r=t.endsWith("left")?-1:1;if(n)this.reach(this.ratio()+r*(t.startsWith("shift")?0.5:0.1));else{let i=tn[this.channel];this.step(r*(t.startsWith("shift")?i.wraps?10:kv:1))}}else if(t==="home"||t==="end")if(n)this.reach(t==="home"?this.partner().floor??1:21);else{let r=tn[this.channel];this.put(t==="home"?r.min:r.wraps?r.max-r.step:r.max)}else if(/^[0-9]$/.test(t))if(n){if(t!=="0")this.reach(Number(t))}else{let r=tn[this.channel];this.put(r.min+(r.max-r.min)*Number(t)/10)}else if(t==="a")this.rescope();else if(t==="#")this.typing="";else if(t==="enter"){if(this.tuneFrom&&this.list.every((r,i)=>r===this.tuneFrom?.list[i]))this.history.pop();this.endTune()}else if(t==="esc"){if(this.tuneFrom)this.list=[...this.tuneFrom.list],this.lch=[...this.tuneFrom.lch],this.history.pop();this.endTune()}}rescope(){if(this.slot()<j.length){this.notice="A base color moves alone";return}let t=ro.indexOf(this.scope);for(let e=1;e<=ro.length;e++){let n=ro[(t+e)%ro.length];if(n==="this"||Im(n,this.slot()).length>1){this.scopeTo(n);return}}}scopeTo(t){if(this.mode!=="tune"||this.typing!==void 0||this.quitting||this.slot()<j.length)return;if(t!=="this"&&Im(t,this.slot()).length<=1)return;this.scope=t,this.hold();let e=this.scoped().length;this.notice=e>1?`${e} slots move together`:"This slot moves alone"}endTune(){this.tuneFrom=void 0,this.holds=new Map,this.mode="list"}partner(){return MH(this.slot(),this.waive)}ratio(){return wt(this.list[this.slot()],this.list[this.partner().against])}reach(t){let e=this.slot(),n=this.list[this.partner().against],r=this.lch[e],i=this.holds.get(e)??r.c,s=(d)=>_e(d,Math.min(i,Nm(d,r.h)),r.h),o=(d)=>wt(s(d),n),a=vt(this.list[e])>=vt(n),c=St(n).l,u=Math.max(1,Math.round(t*100)/100),l=a?1:0,f;if(o(l)<u)f=l,this.notice=`The ratio stops at ${o(l).toFixed(2)}:1 on this side of the color it is read against`;else{let d=c,h=l;for(let m=0;m<24;m++){let $=(d+h)/2;if(o($)>=u)h=$;else d=$}f=h}this.place(e,f,i,r.h);for(let d=0;d<40&&f!==l&&wt(this.list[e],n)<u;d++)f=a?Math.min(1,f+0.001):Math.max(0,f-0.001),this.place(e,f,i,r.h);this.lch[e]={...this.lch[e],l:Math.round(f*1e4)/1e4}}step(t){let e=tn[this.channel],n=this.lch[this.slot()][e.key];this.put(n+e.step*t)}put(t){let e=this.slot(),n=tn[this.channel],r=n.wraps?(t%n.max+n.max)%n.max:io(t,n.min,n.max),i=Math.round(r*1e4)/1e4,s=this.lch[e],o=this.scoped().filter((u)=>u!==e),a=(u)=>Math.round(u*1e4)/1e4;if(n.key==="c"){let u=Nm(s.l,s.h);if(i>u)this.notice=`Chroma stops at ${u.toFixed(3)}, the sRGB edge for this lightness and hue`;let l=Math.min(i,u),f=l-s.c;this.holds.set(e,l),this.place(e,s.l,l,s.h);for(let d of o){let h=this.lch[d],m=a(io((this.holds.get(d)??h.c)+f,0,xv));this.holds.set(d,m),this.place(d,h.l,m,h.h)}return}let c=n.key==="h"?((i-s.h)%360+540)%360-180:i-s.l;if(this.place(e,n.key==="l"?i:s.l,this.holds.get(e)??s.c,n.key==="h"?i:s.h),n.key==="h"&&Rm(this.list[e]))this.notice="A grey shows no hue — raise its chroma first";for(let u of o){let l=this.lch[u];this.place(u,n.key==="l"?a(io(l.l+c,0,1)):l.l,this.holds.get(u)??l.c,n.key==="h"?a(((l.h+c)%360+360)%360):l.h)}}place(t,e,n,r){let i=Math.min(n,Nm(e,r));this.lch[t]={l:e,c:i,h:r},this.list[t]=_e(e,i,r)}take(t,e){if(this.mode==="tune")this.list[this.slot()]=t,this.lch[this.slot()]=this.lchOf(t),this.holds.set(this.slot(),this.lch[this.slot()].c);else this.set(this.slot(),t,e)}type(t){let e=this.typing??"";if(t==="esc")this.typing=void 0;else if(t==="enter"){let n=Sv(e);if(!n){this.notice="Not a color — #rrggbb, rgb(r g b) or oklch(l c h)";return}this.typing=void 0,this.take(n,"hex")}else{let n=Pi(e,Ev(t),(r)=>/^[0-9a-z#(),.% ]$/.test(r)&&e.length<28);if(n!==void 0)this.typing=n}}openKey(t){let e=this.choices();if(t==="esc")this.overlay=void 0,this.filter="";else if(t==="up"||t==="down"){let n=Math.max(1,e.length);this.pick=(this.pick+(t==="up"?n-1:1))%n}else if(t==="home"||t==="end")this.pick=t==="home"?0:Math.max(0,e.length-1);else if(t==="enter"){let n=e[this.pick];if(!n)return;if(this.remember("open"),this.list=no(n.colors),this.lch=this.lchs(),this.overlay=void 0,this.filter="",this.notice=`Took the colors of ${n.name}`,this.mode==="seeds")this.leaveSeeds()}else{let n=Pi(this.filter,Ev(t),(r)=>/^[a-z0-9@/-]$/.test(r));if(n!==void 0)this.filter=n,this.pick=0}}remember(t){if(t!==this.lastEdit||xH.has(t))this.history.push({list:[...this.list],lch:[...this.lch],signature:[...this.signature]}),this.future=[];this.lastEdit=t}set(t,e,n){if(!oe(e)||this.list[t]===e)return;this.remember(n),this.list[t]=e,this.lch[t]=this.lchOf(e)}follow(){if(this.row<j.length){this.notice="= works on an ANSI row — the bright takes its normal";return}let t=this.row,e=this.row+8,n=this.lch[t];this.remember("follow"),this.place(e,io(n.l+0.06,0,1),n.c,n.h),this.col=1,this.notice=`${Gi(e).name} follows ${Gi(t).name.toLowerCase()}`}mark(){let t=Ui[this.slot()];this.remember("sig");let e=this.signature.includes(t)?this.signature.filter((r)=>r!==t):[...this.signature,t],n=e.length>3?e[0]:void 0;this.signature=e.slice(-3),this.notice=this.signature.length===3?`Signature: ${this.signature.join(", ")}${n?` — ${n} dropped`:""}`:`The signature needs three slots — ${this.signature.length} marked`}fix(){let t=Bi(this.list,this.signature,this.waive),{theme:e,moves:n,left:r}=Xu({...t,selectionBackground:t.selectionBackground,signatureSlots:this.signature});if(n.length===0){this.notice=Qr(t).length===0?"Already passes the gate":"No color change fixes it";return}this.remember("fix");let i=no({...this.colors(),foreground:e.foreground,selection:e.selectionBackground,ansi:e.ansi}),s=this.list;this.list=i,this.lch=i.map((o,a)=>o===s[a]?this.lch[a]:this.lchOf(o)),this.notice=`Moved ${n.length} ${n.length===1?"color":"colors"}${r.length===0?" — passes the gate":" closer to the gate"}`}save(){let t=this.options.check(this.edited());if(t){this.notice=t;return}this.result="saved"}undo(){let t=this.history.pop();if(!t){this.notice="Nothing to undo";return}this.future.push({list:[...this.list],lch:[...this.lch],signature:[...this.signature]}),this.restore(t)}redo(){let t=this.future.pop();if(!t){this.notice="Nothing to redo";return}this.history.push({list:[...this.list],lch:[...this.lch],signature:[...this.signature]}),this.restore(t)}restore(t){this.list=[...t.list],this.lch=[...t.lch],this.signature=[...t.signature],this.lastEdit=void 0}}import{mkdirSync as _H,readFileSync as Hm,writeFileSync as Fv}from"node:fs";import{dirname as GH}from"node:path";import{isMainThread as BH,parentPort as Cv,Worker as UH}from"node:worker_threads";var IH=new Set(["comic","4koma","monochrome","greyscale","sketch","lineart","speech_bubble"]),RH=new Set(["scenery","landscape","scenic","no_humans","wide_shot","very_wide_shot"]),NH=0.04,TH=0.1,AH=0.05,PH=4096;function HH(t){return new Set(t.cutouts.split(/\s+/).map((e)=>e.replace(/^~/,"")).filter(Boolean))}function FH(t,e,n,r=0){let{site:i,post:s}=t,o=new Set(s.tags),a=[...HH(i)].some((l)=>o.has(l)),c=Math.min(s.width,s.height),u=s.width>0&&s.height>0?s.width/s.height/(e.w/e.h):1;return(s.solo?2:0)+([...IH].some((l)=>o.has(l))?-3:0)+([...RH].some((l)=>o.has(l))?-1.5:0)+2*Math.min(1,c/e.h)+(a?1.5:-Math.min(1.5,Math.abs(Math.log(u))))+(n>0?1.5*Math.log1p(Math.max(0,s.score))/Math.log1p(n):0)+2*r}function rl(t,e,n=new Map){let r=new Map;for(let{site:i,post:s}of t)r.set(i,Math.max(r.get(i)??0,s.score));return t.map((i,s)=>({pick:i,at:s,score:FH(i,e,r.get(i.site)??0,n.get(i.post))})).sort((i,s)=>s.score-i.score||i.at-s.at).map(({pick:i})=>i)}function Rv(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 s=i[r];if(s)n.push(s)}return n}function Am(t){let e=t/255;return e<=0.04045?e/12.92:((e+0.055)/1.055)**2.4}function Iv(t,e,n){let[r,i,s]=[Am(t),Am(e),Am(n)],o=Math.cbrt(0.4122214708*r+0.5363325363*i+0.0514459929*s),a=Math.cbrt(0.2119034982*r+0.6806995451*i+0.1073969566*s),c=Math.cbrt(0.0883024619*r+0.2817188376*i+0.6299787005*s);return[0.2104542553*o+0.793617785*a-0.0040720468*c,1.9779984951*o-2.428592205*a+0.4505937099*c,0.0259040371*o+0.7827717662*a-0.808675766*c]}function Nv(t,e){let n=e.map((o)=>Iv(...rt(o))).filter(([,o,a])=>Math.hypot(o,a)>=NH);if(n.length===0)return 0;let r=Math.max(1,Math.floor(Math.sqrt(t.width*t.height/PH))),i=n.map(()=>0),s=0;for(let o=0;o<t.height;o+=r)for(let a=0;a<t.width;a+=r){let c=(o*t.width+a)*4;if(t.data[c+3]<128)continue;s++;let[u,l,f]=Iv(t.data[c],t.data[c+1],t.data[c+2]);n.forEach(([d,h,m],$)=>{if(Math.hypot(u-d,l-h,f-m)<TH)i[$]=i[$]+1})}if(s===0)return 0;return i.reduce((o,a)=>o+Math.min(1,a/s/AH),0)/n.length}var CH=/(?:^|[^0-9a-f])([0-9a-f]{32})(?:[^0-9a-f]|$)/i,LH=[[/yande\.re\/post\/show\/(\d+)/,"yande"],[/konachan\.(?:com|net)\/post\/show\/(\d+)/,"konachan"],[/danbooru\.donmai\.us\/(?:posts|post\/show)\/(\d+)/,"danbooru"],[/zerochan\.net\/(\d+)(?:[?#\s]|$)/,"zerochan"]];function Pm(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 Tv(t,e){let n=CH.exec(e.source)?.[1]?.toLowerCase();return[`post:${t.key}:${e.id}`,...e.md5?[`md5:${e.md5}`]:[],...n&&n!==e.md5?[`md5:${n}`]:[],...LH.flatMap(([r,i])=>{let s=r.exec(e.source)?.[1];return s?[`post:${i}:${Number(s)}`]:[]}),...e.family?[`family:${t.key}:${e.family}`]:[]]}function Av(t,e){let n=t.owner||t.named.artist[0]||"";return n!==""&&n===(e.owner||e.named.artist[0]||"")&&t.width===e.width&&t.height===e.height}function Pv(t){let r=[];for(let s=0;s<8;s++){let o=Math.floor(s*t.height/8),a=Math.max(o+1,Math.floor((s+1)*t.height/8));for(let c=0;c<9;c++){let u=Math.floor(c*t.width/9),l=Math.max(u+1,Math.floor((c+1)*t.width/9)),f=0;for(let d=o;d<a;d++)for(let h=u;h<l;h++){let m=(d*t.width+h)*4,$=t.data[m+3]/255,g=0.299*t.data[m]+0.587*t.data[m+1]+0.114*t.data[m+2];f+=g*$+255*(1-$)}r.push(f/((l-u)*(a-o)))}}let i=0n;for(let s=0;s<8;s++)for(let o=0;o<8;o++)i=i<<1n|(r[s*9+o]>r[s*9+o+1]?1n:0n);return i.toString(16).padStart(16,"0")}function jH(t,e){let n=BigInt(`0x${t}`)^BigInt(`0x${e}`),r=0;while(n>0n)r+=Number(n&1n),n>>=1n;return r}function Hv(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&&jH(t.hash,e.hash)<=2}var WH={thumb:"tile",band:"band",match:"tile",show:"view",backdrop:"view",redraw:"view"},il;async function KH(t){if(t.job==="redraw")return Tu(t.home,t.name,t.key,t.paint,t.blur,t.aligns,t.user);if(t.job==="show"){if(il?.from!==t.from){let o=or(new Uint8Array(Hm(t.from)),$e);il={from:t.from,clear:Tn(o),inked:Lf(o)}}let{image:r,fill:i,opacity:s}=$w(il.inked,t.colors,t.tone,t.width,t.height,t.blur,t.tune,t.coloring);return _H(GH(t.to),{recursive:!0}),Fv(t.to,ln(r)),{clear:il.clear,fill:i,opacity:s}}let e=or(new Uint8Array(Hm(t.from)),$e);if(t.job==="backdrop"){fc(t.home,t.colors,t.tone,e,{...t.origin,bytes:new Uint8Array(Hm(t.source)),cut:t.from!==t.source},t,t.blur,t.coloring);let r=t.tune&&ce(t.home,t.colors.name).find((i)=>i.key===te(t.origin));if(t.tune&&r)Ao(q(t.home),r,t.tune,t.aligns??!0,t.user??t.home);return 0}if(t.job==="match")return{match:Nv(e,t.colors),hash:Pv(e)};if(t.job==="thumb")return P(t.to,ln(sb(e,t.width,t.height))),0;let n=e.data.subarray(t.y*e.width*4,(t.y+t.height)*e.width*4);return Fv(t.to,ln({width:e.width,height:t.height,data:n})),0}function zH(t){t.on("message",async(e)=>{try{t.postMessage({id:e.id,value:await KH(e)})}catch(n){t.postMessage({id:e.id,error:n instanceof Error?n.message:String(n)})}})}class Fm{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 UH(import.meta.filename);t.unref(),t.on("message",({id:n,value:r,error:i})=>{let s=this.waiting.get(n);if(this.waiting.delete(n),this.waiting.size===0)t.unref();if(i!==void 0)s?.no(Error(i));else s?.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 Ma{lines=new Map;run(t){let e=WH[t.job],n=this.lines.get(e);if(!n)n=new Fm,this.lines.set(e,n);return n.send(t)}close(){for(let t of this.lines.values())t.close();this.lines.clear()}}class Cm{lines;constructor(t){this.lines=Array.from({length:Math.max(1,t)},()=>new Fm)}async map(t){let e=[],n=0;return await Promise.all(this.lines.map(async(r)=>{while(n<t.length){let i=n++;try{e[i]=await r.send(t[i])}catch(s){e[i]=s instanceof Error?s:Error(String(s))}}})),e}close(){for(let t of this.lines)t.close()}}if(!BH&&Cv)zH(Cv);import{existsSync as DH,mkdtempSync as qH,readFileSync as YH,rmSync as Lv,writeFileSync as JH}from"node:fs";import{tmpdir as VH}from"node:os";import{basename as _v,join as jv}from"node:path";var ZH=6;class Oa{dir;made=[];of(t,e){this.dir??=qH(jv(VH(),"ttheme-tint-"));let n=jv(this.dir,`${_v(t,".png")}.${e.slice(1).toLowerCase()}.png`);if(!DH(n)){let r=new Uint8Array(YH(t));JH(n,za(r,e)??ri(ni(Ht(r)),e)),this.made.push(n);while(this.made.length>ZH)Lv(this.made.shift(),{force:!0})}return n}clear(){if(this.dir)Lv(this.dir,{recursive:!0,force:!0});this.dir=void 0,this.made.length=0}}function sl(t,e,n,r,i){if(Ee(t)==="original")return{image:e,opacity:t.peak?ps(n,t.peak):t.opacity};let s=hn(n,[...r]);return{image:s.color===t.tone?e:i.of(e,s.color),opacity:s.opacity}}function ol(t,e){let n=_v(e);return t.find((r)=>n.startsWith(`${r.stem}.`)||n.startsWith(`${r.stem}@`))}var iF=2147483625,Uv=2147483626,vn=2147483627,sF=-1073741827,Wv=-1073741826,oF=-1073741825,aF=4;function cF(t,e,n,r,i,s){let o=Math.trunc,a=n*i.w,c=r*i.h,u=o((Math.max(s.x,0)+i.w-1)/i.w),l=o(Math.min(s.x+s.w,a)/i.w),f=o((Math.max(s.y,0)+i.h-1)/i.h),d=o(Math.min(s.y+s.h,c)/i.h);if(l<=u||d<=f)return;return{col:u,row:f,cols:l-u,rows:d-f,x:o((u*i.w-s.x)*t/s.w),y:o((f*i.h-s.y)*e/s.h),w:o((l-u)*i.w*t/s.w),h:o((d-f)*i.h*e/s.h)}}function uF(t){try{let e=tF(t,"r"),n=Buffer.alloc(24);return eF(e,n,0,24,0),QH(e),n.readUInt32BE(0)===2303741511?{width:n.readUInt32BE(16),height:n.readUInt32BE(20)}:void 0}catch{return}}class al{ready=()=>{};cell={w:0,h:0};held;tints=new Oa;sent=new Map;placed=new Map;viewed="";renders;scratch;made=0;bands=new Map;home;name;views;banded;files;static of(t,e,n,r){if(Lt(t)||!Vc(t,r)||!(Xc(t)||$i(t)))return;return new al(t,e,n)}constructor(t,e,n){this.home=e,this.name=n,this.views=$i(t),this.banded=Zc(t),this.files=Qc(t)}measured(t){if(this.cell.w===0&&t.w>0&&t.h>0)this.cell=t}load(){let t=q(this.home),e=Se(t,this.name,nF()),n=[];try{n=kt(t).palettes[this.name]?.pictures??[]}catch{}let r=e?ol(n,e.image):void 0;this.held=e&&r?{picture:r,image:e.image,opacity:e.opacity,cover:e.cover,at:Ut.indexOf(e.position)+1||5}:void 0}draw(t,e,n,r,i){if(this.cell.w===0)return"";let s=t[0],o=this.look(t,e,n,r,i);if(this.views){let c=r*this.cell.w,u=i*this.cell.h,l=o?`${s}|${o.image}|${o.opacity}|${c}|${u}|${o.box.w}|${o.box.h}|${o.box.x}|${o.box.y}|${this.held?.at??5}`:`${s}||1|${c}|${u}|0|0|0|0|5`;if(l===this.viewed)return"";return this.viewed=l,ki(l)}let a=this.layer(iF,sF,"f=24",Buffer.from(rt(s)),r,i);if(o){let c=Math.max(0,Math.min(255,Math.round((1-o.opacity)*255)));a+=this.picture(o),a+=this.layer(Uv,oF,"f=32",Buffer.from([...rt(s),c]),r,i)}else a+=this.drop(vn)+this.drop(Uv);return a}resized(){this.sent.clear(),this.placed.clear(),this.viewed=""}clear(){let t=this.views&&this.viewed?ki(""):"";for(let e of this.sent.keys())t+=ka(e);return this.resized(),t}close(){let t=this.clear();if(this.tints.clear(),this.renders?.close(),this.scratch)Gv(this.scratch,{recursive:!0,force:!0});return t}look(t,e,n,r,i){let s=this.held;if(!s)return;let o={name:this.name,...se([...t]),waived:[...n]},a=sl(s.picture,s.image,o,e,this.tints),c=uF(a.image);if(!c)return;let u=ws(c.width,c.height,r*this.cell.w,i*this.cell.h,100,s.at,s.cover),l=cF(c.width,c.height,r,i,this.cell,u);if(!l)return;return{image:a.image,opacity:s.opacity===s.picture.opacity?a.opacity:s.opacity,...c,box:u,rect:l}}layer(t,e,n,r,i,s){let o=r.toString("base64"),a=`${o}|${i}|${s}`;if(this.placed.get(t)===a)return"";return this.sent.set(t,a),this.placed.set(t,a),`\x1B_Ga=t,${n},s=1,v=1,i=${t},q=2;${o}\x1B\\\x1B[H\x1B_Ga=p,i=${t},p=${t},c=${i},r=${s},C=1,z=${e},q=2\x1B\\`}picture(t){let{image:e,rect:n}=t;if(this.banded&&(2*n.y+n.h-t.height)**2>1){let s=this.band(t.image,n.y,n.h);if(!s.ready)return"";e=s.path,n={...n,y:0}}let r="";if(this.sent.get(vn)!==e){let s=Du({id:vn,path:e,row:0,col:0,cols:0,rows:0,z:Wv},this.files);if(s===void 0)return"";r+=s,this.sent.set(vn,e),this.placed.delete(vn)}let i=`${n.col};${n.row};${n.cols};${n.rows};${n.x};${n.y};${n.w};${n.h}`;if(this.placed.get(vn)!==i)r+=`\x1B[${n.row+1};${n.col+1}H\x1B_Ga=p,i=${vn},p=${vn},x=${n.x},y=${n.y},w=${n.w},h=${n.h},c=${n.cols},r=${n.rows},C=1,z=${Wv},q=2\x1B\\`,this.placed.set(vn,i);return r}drop(t){if(!this.sent.has(t))return"";return this.sent.delete(t),this.placed.delete(t),ka(t)}band(t,e,n){let r=`${t}|${e}|${n}`,i=this.bands.get(r);if(i)return i;this.scratch??=XH(Bv(rF(),"ttheme-edit-")),this.renders??=new Ma;let s={path:Bv(this.scratch,`band-${++this.made}.png`),ready:!1};this.bands.set(r,s),this.renders.run({job:"band",from:t,to:s.path,y:e,height:n}).then(()=>{s.ready=!0,this.ready()}).catch(()=>{});for(let[o,a]of this.bands){if(this.bands.size<=aF)break;if(a.ready&&a.path!==this.sent.get(vn))this.bands.delete(o),Gv(a.path,{force:!0})}return s}}var Kv=80,zv=24,xa=50,Lm=11;function _t(t,e){return le(t,e)}function Jv(t){return{color:t,dim:(e)=>t?`${A}${e}${ge}`:e,bold:(e)=>t?`${at}${e}${ge}`:e,fg:(e)=>t?Be(e):"",bg:(e)=>t?`\x1B[48;2;${rt(e).join(";")}m`:""}}function Dv(t){return vt(t)>0.35?"#000000":"#ffffff"}function Vv(t,e,n,r,i){let s=e.length-1,o=Math.max(0,Math.min(s,n)),a=i===void 0?-1:Math.max(0,Math.min(s,i));if(!t.color)return e.map((c,u)=>u===o?"●":u===a?"○":r?"━":"─").join("");return e.map((c,u)=>{let l=c??"#000000";if(u===o)return`${t.bg(l)}${t.fg(Dv(l))}●\x1B[39;49m`;if(u===a)return c?`${t.bg(c)}${t.fg(Dv(c))}○\x1B[39;49m`:`${t.fg("#aaaaaa")}○`;return c?`${t.fg(c)}█`:`${t.fg(r?"#777777":"#555555")}░`}).join("").concat("\x1B[39m")}function lF(t,e,n){return Array.from({length:n},(r,i)=>{let s=e.min+(e.max-e.min)*i/(n-1),o={...t,[e.key]:s};return va(o.l,o.c,o.h)?_e(o.l,o.c,o.h):void 0})}function jm(t,e,n,r){return Math.round((t-e)/(n-e)*(r-1))}function Zv(t,e){return t.held!==void 0&&t.held-e.c>0.0005?t.held:void 0}function Qv(t,e,n,r){let i=Zv(e,n);return tn.map((s,o)=>{let a=e.mode==="tune"&&o===e.channel,c=n[s.key],u=`${c.toFixed(s.digits)}${s.wraps?"°":""}`.padStart(6),l=Vv(t,lF(n,s,r),jm(c,s.min,s.max,r),a,s.key==="c"&&i!==void 0?jm(i,s.min,s.max,r):void 0),f=s.key.toUpperCase(),d={kind:"channel",channel:o};return`${_t(d,a?t.bold(`▸${f}`):t.dim(` ${f}`))} ${_t({kind:"bar",channel:o},l)} ${_t(d,a?t.bold(u):t.dim(u))}`})}function Xv(t,e,n){let r=e.mode==="tune"&&e.channel===Qn,i=e.ratio(),{floor:s}=e.partner(),o=(h)=>Math.round(Math.log(Math.max(1,h))/Math.log(21)*(n-1)),a=o(i),c=s===void 0?-1:o(s),u=r?"━":"─",l=Array.from({length:n},(h,m)=>m===a?t.bold("●"):m===c?"┃":m<c?t.dim(u):u).join(""),f=`${i.toFixed(2)}:1`.padStart(6),d={kind:"channel",channel:Qn};return`${_t(d,r?t.bold("▸◐"):t.dim(" ◐"))} ${_t({kind:"bar",channel:Qn},l)} ${_t(d,r?t.bold(f):t.dim(f))}`}function t1(t,e){if(e.mode!=="tune"||e.slot()<j.length)return[];let n=se(e.list),r=ro.map((s)=>_t({kind:"scope",scope:s},s!==e.scope?t.dim(s):t.color?`${t.bg(n.selection)}${t.fg(n.foreground)} ${s} \x1B[39;49m`:`[${s}]`)),i=e.scoped().length;return[`${t.dim("Scope")} ${r.join(" ")}`,t.dim(i>1?`${i} slots move by the same step, each keeping its own color`:"This slot moves alone · a widens it")]}function fF(t,e){if(!t.misses().has(e))return;if(Tm(t.list,t.signature,t.waive,"bright-follows").includes(e))return e-j.length<8?"= makes the bright follow its normal":"= on the normal makes this follow it";return"f moves the colors the gate misses"}function e1(t,e,n){let r=nl(t.list,t.signature,t.waive,e),i=Zv(t,n);if(i!==void 0)r.push({ok:void 0,text:`Chroma ○ ${i.toFixed(3)} is held while you tune — ${n.c.toFixed(3)} fits this lightness and hue`});return r}var qv={background:(t)=>t.background,foreground:(t)=>t.foreground,hue:(t)=>t.cursor,tint:(t)=>t.background,lightness:(t)=>t.ansi[4],chroma:(t)=>t.ansi[1],brights:(t)=>t.ansi[12]};function dF(t){return`oklch ${t.l.toFixed(3)} ${t.c.toFixed(3)} ${t.h.toFixed(0)}°`}function _m(t){return`${t.l.toFixed(2)} ${t.c.toFixed(3)} ${t.h.toFixed(0).padStart(3)}°`}function n1(t,e){return`${t.dim("oklch")} ${t.bold(`${e.l.toFixed(3)} ${e.c.toFixed(3)} ${e.h.toFixed(0)}°`)}`}function cl(t,e){return e===void 0?t.dim("·"):e?t.dim("✓"):t.bold("✗")}function r1(t,e,n,r=xa){let i=Ov(e.list,e.signature,e.waive).sort((u,l)=>Number(u.ok!==!1)-Number(l.ok!==!1)),s=i.filter((u)=>u.ok===!1).length,o=` ${t.dim("Gate")} ${s===0?t.dim("passes"):t.bold(`${s} ${s===1?"miss":"misses"}`)}`,a=r-4,c=i.flatMap((u)=>{let l=`${u.value} ${u.bound}`,f=` ${cl(t,u.ok)} ${Gt(u.ok===!1?u.label:t.dim(u.label),t.dim(l),a-2)}`,d=[...new Set(u.slots)].map(($)=>Gi($).name),h=u.slots[0],m=($)=>h===void 0?$:_t({kind:"slot",slot:h},$);return d.length>0?[m(f),m(` ${t.dim(ot(d.join(" · "),a-2))}`)]:[m(f)]});return[s===0?o:Gt(o,`${t.bold("n")} ${t.dim("next miss")}`,r-2),...c.slice(0,Math.max(0,n-1))]}function i1(t,e,n,r=xa,i=!0){let s=e.misses(),o=se(e.list),a=i?e.slot():-1,c=(f)=>{let d=e.list[f],h=f===a,m=e.signature.includes(Ui[f])?"◆":t.color?"■":" ",$=s.has(f)?"✗":e.theme&&e.offDefault(f)?"↺":" ",b=`${t.color?`${t.fg(d)}${m}${h?t.fg(o.foreground):"\x1B[39m"} `:`${m} `}${_m(e.lch[f])}${$}`;if(!h)return _t({kind:"slot",slot:f},` ${b}`);return _t({kind:"slot",slot:f},t.color?`${t.bg(o.selection)}${t.fg(o.foreground)} ${b}\x1B[39;49m`:`›${b}`)},u=(f)=>f?t.color?`${t.fg(o.cursor)}▌\x1B[39m `:"▌ ":" ",l=[` ${t.dim("Base")}`];for(let f=0;f<j.length;f++){let d=i&&f===e.row,h=j[f].padEnd(10);l.push(`${_t({kind:"slot",slot:f},`${u(d)}${d?t.bold(h):h}`)}${c(f)}`)}l.push("",` ${t.dim(`${"ANSI".padEnd(10)} ${"Normal".padEnd(18)} Bright`)}`);for(let f=j.length;f<Kr;f++){let d=i&&f===e.row,h=tl[f-j.length].padEnd(10),m=_t({kind:"slot",slot:f+(e.col===1?8:0)},`${u(d)}${d?t.bold(h):h}`);l.push(`${m}${c(f)}${c(f+8)}`)}return l.push(""),[...l,...r1(t,e,n-l.length,r)]}function hF(t,e,n){let r=se(e.list),i=[` ${t.dim("Seeds")}`];ji.forEach((s,o)=>{let a=o===e.field,c=e.seeds[s.key],u=Array.from({length:Lm},(g,b)=>{let y=s.min+(s.max-s.min)*b/(Lm-1);return qv[s.key](Wr({...e.seeds,[s.key]:y}))}),l=Vv(t,u,jm(c,s.min,s.max,Lm),a),f=`${c.toFixed(s.digits)}${s.wraps?"°":""}`.padStart(6),d=qv[s.key](r),h=a?t.color?`${t.fg(r.cursor)}▌\x1B[39m `:"▌ ":" ",m=s.label.padEnd(17),$={kind:"field",field:o};i.push(`${_t($,`${h}${a?t.bold(m):m}`)}${_t({kind:"seed",field:o},l)}${_t($,` ${f} ${t.color?`${t.fg(d)}■\x1B[39m `:""}${t.dim(d)}`)}`)}),i.push("");for(let s of bt("Seven seeds grow all twenty colors, each accent on the hue its ANSI role reads as — whatever the seeds, they pass the gate. enter moves on to tune each slot, and the seeds stay behind.",xa-4))i.push(` ${t.dim(s)}`);return i.push(""),[...i,...r1(t,e,n-i.length)]}function mF(t,e){let n=t-j.length;if(n>=0)return e===String(n)||e===`B${n}`||e===`K${n}`;return t===3&&e==="s"||t===2&&e==="c"}function pF(t,e,n,r){let i=r?"\x1B[4m":"";if(n==="d")return`${t.fg(e.foreground)}\x1B[2m${i}`;if(n==="b")return`${t.fg(e.foreground)}\x1B[1m${i}`;if(n==="s")return`${t.bg(e.selection)}${t.fg(e.foreground)}${i}`;if(n==="c")return`${t.bg(e.cursor)}${i}`;let s=/^([BK]?)(\d+)$/.exec(n);if(!s)return`${t.fg(e.foreground)}${i}`;let o=e.ansi[Number(s[2])];if(s[1]==="K")return`${t.fg(e.ansi[0])}${t.bg(o)}${i}`;return`${t.fg(o)}${s[1]==="B"?"\x1B[1m":""}${i}`}function s1(t,e,n,r,i,s){let o=ie.indexOf(bi(i)),a=ie.map((l,f)=>_t({kind:"scene",scene:f},f!==o?t.dim(l.name):t.color?`${t.bg(e.selection)}${t.fg(e.foreground)} ${l.name} \x1B[39;49m`:`[${l.name}]`)).join(" "),c=[Gt(a,t.dim("⇧←→"),n)],u=`${t.bg(e.background)}${t.fg(e.foreground)}`;for(let l of bi(i).lines){let f=Dc(l,n-2);if(!f)continue;if(c.length>=r)break;let d=t.color?f.map(([h,m])=>`${pF(t,e,m,mF(s,m))}${h}\x1B[0m${u}`).join(""):f.map(([h])=>h).join("");c.push(`${u} ${ot(d,n-2)} ${t.color?"\x1B[0m":""}`)}return c}var gF=["Bk","Rd","Gr","Ye","Bl","Ma","Cy","Wh"];function Yv(t,e,n,r,i,s,o){let a=(i-s)/(o-1),c=o1(e),u=se(n),l=(f)=>Math.min(o-1,Math.max(0,Math.round((i-r(St(f)))/a)));return Array.from({length:o},(f,d)=>{let m=`${(d%2===0?(i-a*d).toFixed(i>=1?1:2).replace(/^0(?=\.\d\d)/,""):"").padStart(4)} ${t.dim(d%2===0?"┤":"│")}`;for(let $=0;$<8;$++){let g=[" "," "," "," "," "],b=u.ansi[$],y=u.ansi[$+8],E=l(b)===d,S=l(y)===d,x=(N)=>{if(N===1&&E)return t.color?`${t.fg(b)}●`:"●";if(N===3&&S)return t.color?`${t.fg(y)}○`:"○";return g[N]},R=[0,1,2,3,4].map(x).join("");m+=c.has($)?t.color?`${t.bg(u.selection)}${R}\x1B[39;49m`:R:`${R}${t.color?"\x1B[39m":""}`}return m})}function o1(t){let e=t.mode==="tune"?t.scoped():[t.slot()];return new Set(e.filter((n)=>n>=j.length).map((n)=>(n-j.length)%8))}function bF(t,e){let n=o1(e);return` ${gF.map((r,i)=>n.has(i)?t.bold(` ${r} `):t.dim(` ${r} `)).join("")}`}function wF(t,e){let n=se(e),r=Array.from({length:40},(s,o)=>{let a=o*9+4.5,c=-1,u=999;for(let[l,f]of Object.entries(be)){let d=Ae(a,f.center);if(d<=f.width&&d<u)u=d,c=Number(l)}return c<0?" ":t.color?`${t.fg(n.ansi[c])}─`:"─"}).join(""),i=(s,o)=>{let a=Array.from({length:40},()=>" ");for(let c of Object.keys(be).map(Number)){let u=n.ansi[c+s],l=Math.min(39,Math.round(St(u).h/9));a[l]=t.color?`${t.fg(u)}${o}\x1B[39m`:o}return` ${a.join("")}`};return[`${t.bold("Hue")} ${t.dim("0° 90° 180° 270° 360°")}`,`${t.dim("bands")} ${r}${t.color?"\x1B[39m":""}`,i(0,"●"),i(8,"○")]}function $F(t,e,n){let r=Bi(n,e.signature,e.waive),i=(a)=>Gi(j.length+a).name,s=(a)=>St(n[j.length+a]).h.toFixed(0),o=[...Rn(r).filter(({gap:a})=>a>25).map(({normal:a,gap:c})=>`${i(a)} ${s(a)}° → bright ${s(a+8)}° · ${c.toFixed(0)}° apart · ≤ 25°`),...nr(r).map(({slot:a,over:c})=>{let u=be[sn(a)];return`${i(a)} ${s(a)}° · ${c.toFixed(0)}° outside ${u.name} ${u.center}±${u.width}°`}),...Nn(r).map(([a,c])=>`${i(a)} and ${i(c).toLowerCase()} read as one color`)];return o.length>0?o.map((a)=>`${t.bold("✗")} ${a}`):[t.dim("✓ Every accent keeps its role and its bright")]}function Gm(t,e,n,r,i){let s=e.shown(),o=Math.max(...s.slice(j.length).map((u)=>St(u).c)),a=Math.max(0.2,Math.ceil(o/0.05)*0.05),c=[Gt(t.bold("Lightness"),t.dim("● normal ○ bright"),n),...Yv(t,e,s,(u)=>u.l,1,0.3,8),bF(t,e)];if(i)c.push("",t.bold("Chroma"),...Yv(t,e,s,(u)=>u.c,a,0,5),"",...wF(t,s));return[...c,...$F(t,e,s)].slice(0,r)}function kF(t,e,n){let r=se(e.list),i=(s,o)=>_t({kind:"view",view:o},e.view!==o?t.dim(` ${s} `):t.color?`${t.bg(r.selection)}${t.fg(r.foreground)}${t.bold(` ${s} `)}\x1B[39;49m`:`[${s}]`);return Gt(`${i("Slot","slot")}${i("Relations","relations")}`,gn("g",`${t.bold("g")} ${t.dim("switch")}`),n)}function yF(t,e,n,r){let i=e.slot(),s=e.list[i],o=e.lch[i],a=e.start[i],{name:c,about:u}=Gi(i),l=e.signature.includes(Ui[i]),f=Math.max(8,Math.min(64,n-12));if(e.view==="relations"&&e.mode!=="tune")return[kF(t,e,n),"",...Gm(t,e,n,r-2,!0)];let d=i>=j.length?t.dim("Uses underlined below"):l?t.dim("◆ signature"):"",h=[Gt(`${t.bold(c)} ${t.dim(u)}`,e.view==="relations"?"":d,n),""],m=t.color?`${t.fg(s)}${"█".repeat(8)}\x1B[39m `:"",$=e.typing!==void 0?`${t.bold(`${e.typing}▏`)}`:void 0,[g,b,y]=rt(s);if(h.push(`${m}${$??n1(t,o)}`),h.push(`${m}${t.dim(`${s} · rgb ${g} ${b} ${y}`)}`),e.view!=="relations"){let R=t.color?`${t.fg(a)}■\x1B[39m `:"";h.push(`${m}${a!==s?t.dim(`was ${R}${dF(e.lchOf(a)).slice(6)} · ${a}`):t.dim("as it opened")}`)}h.push(""),h.push(...Qv(t,e,o,f),Xv(t,e,f));let E=t1(t,e);if(E.length>0)h.push(...E);if(e.view==="relations")return h.push("",...Gm(t,e,n,r-h.length-1,!1)),h;h.push("");for(let R of e1(e,i,o))bt(R.text,n-2).forEach((N,F)=>{h.push(`${F===0?cl(t,R.ok):" "} ${R.ok===!1?N:t.dim(N)}`)});let S=fF(e,i);if(S)h.push(t.dim(` ${S}`));let x=r-h.length-1;if(x>=3)h.push("",...s1(t,se(e.shown()),n,x,e.scene,i));return h}function vF(t,e,n,r){return[Gt(`${t.bold("Sample")} ${t.dim("what the seeds grow")}`,"",n),"",...s1(t,se(e.list),n,r-2,e.scene,-1)]}var EF=[["Slots","↑↓ slot · ←→ normal or bright · home end · pgup the base colors · pgdn the ANSI ones · n N the next and last miss"],["Tune","enter or tab · ↑↓ lightness, chroma, hue or contrast · ←→ step · ⇧←→ ×5, hue ×10 · home end the ends · 0-9 jump · enter keeps · esc undoes"],["Contrast","◐ moves lightness until the ratio to the color it is read against changes · home the gate’s floor · 1-9 that ratio"],["Chroma","stops at the sRGB edge · what lightness or hue takes away comes back while you tune, where it fits again (○)"],["Scope","a while tuning: this, pair, normals, brights or accents — the slots in it move by the same step, each keeping its own color"],["Relations","g shows the lightness, chroma and hue of every ANSI color at once, and the relations the gate checks"],["Sample","⇧←→ another scene · the slot under the cursor is underlined where it is used"],["Type","# then #rrggbb, rgb(r g b) or oklch(l c h) — a paste works too"],["Slot","c copies · v pastes · r puts it back as it opened, R all of them · = the bright follows its normal · * marks it a signature color"],["Palette","f moves the colors the gate misses · o takes another palette’s colors"],["Gate","✗ marks every slot whose own checks miss, and each miss names its slots"],["History","u undo · ctrl+r redo"],["Pictures","p finds one on the boorus, tried on in these colors · drop a picture on the window, or paste one, its path or its link · ctrl+v takes the clipboard’s"],["Compare","space shows the colors you started from, on the terminal too"],["Save","s saves · esc cancels, asking first when something changed"]];function SF(t,e,n){let r=[` ${t.bold("Help")}`,""];for(let[i,s]of EF.filter(([o])=>o!=="Pictures"||e.options.find))bt(s,n-16).forEach((o,a)=>{r.push(` ${t.bold((a===0?i:"").padEnd(11))} ${o}`)});return r}function MF(t,e,n,r){let i=e.choices(),s=e.options.palettes?.length??0,o=e.filter?`${t.bold(e.filter)}▏`:t.dim("type to filter"),a=[Gt(` ${t.bold("Take colors from")} ${o}`,t.dim(`${i.length}/${s}`),n),""],c=r-2,u=Math.max(0,Math.min(e.pick-Math.floor(c/2),i.length-c)),l=Math.min(40,Math.max(12,...i.map((f)=>X(f.name))));if(i.slice(u,u+c).forEach((f,d)=>{let h=u+d===e.pick,m=f.colors,$=t.color?`${t.bg(m.background)} ${[...m.ansi].map((y)=>`${t.fg(y)}■`).join("")} ${t.fg(m.foreground)}Aa \x1B[0m`:"",g=h?"▌ ":" ",b=f.name.padEnd(l);a.push(_t({kind:"choice",index:u+d},`${g}${h?t.bold(b):b} ${$}`))}),i.length===0)a.push(` ${t.dim(`No palettes match '${e.filter}'`)}`);return a}var OF=new Set(["enter","s","?","g","a"]);function xF(t,e,n){let r=t.fg(e.list[2]),i="EDIT",s="",o=[],a="";if(e.quitting)i="EDIT (QUIT)",s=e.added>0?`Discard changes and ${e.added} ${e.added===1?"picture":"pictures"}?`:"Discard changes?",o=[["y","discard"],["n","keep editing"]];else if(e.typing!==void 0)i="EDIT (TYPE)",s=t.dim("#rrggbb, rgb(r g b) or oklch(l c h)"),o=[["enter","set"],["ctrl+u","clear"]],a="esc back";else if(e.overlay==="keys")i="HELP",a="any key closes";else if(e.overlay==="open")i="EDIT (OPEN)",o=[["↑↓","palette"],["a-z","filter"],["enter","take its colors"]],a="esc close";else if(e.compare)i="EDIT (BEFORE)",s="The colors you started from",o=[["space","back to yours"]],a="esc back";else if(e.mode==="seeds")i="EDIT (SEEDS)",o=[["↑↓","seed"],["←→","step"],["⇧←→","×5"],["enter","tune the slots"],["o","open a palette"],["p","picture"],["?","keys"]],a="esc cancel";else if(e.mode==="tune")i="EDIT (TUNE)",o=[["↑↓","L C H ◐"],["←→","step"],...e.slot()>=j.length?[["a","scope"]]:[],["⇧←→","faster"],[e.channel===Qn?"1-9":"0-9",e.channel===Qn?"ratio":"jump"],["#","type"],["enter","keep"]],a="esc undo";else o=[["↑↓","slot"],["←→","normal or bright"],["enter","tune"],["g",e.view==="slot"?"relations":"slot"],...e.misses().size>0?[["n","next miss"]]:[],["#","type"],["f","fix"],["p","picture"],["u","undo"],["s","save"],["?","keys"]],a="esc cancel";if(!e.options.find)o=o.filter(([l])=>l!=="p");if(e.notice)s=t.color?`\x1B[33m${e.notice}\x1B[39m`:e.notice,o=[];let c=t.color?`\x1B[7;1m${r} ${i} \x1B[0m `:`[${i}] `,u=a?gn(a.split(" ")[0],`${t.bold(a.split(" ")[0])} ${t.dim(a.split(" ").slice(1).join(" "))}`):"";for(;;){let l=[s,...o.map(([h,m])=>gn(h,`${t.bold(h)} ${t.dim(m)}`))].filter(Boolean),f=`${c}${l.join(" ")}`,d=-1;if(o.forEach(([h],m)=>{if(m>0&&!OF.has(h))d=m}),X(f)+X(a)+3<=n||d<0)return a?Gt(f,u,n):ot(f,n);o=o.filter((h,m)=>m!==d)}}var Bm=50,Um=22;function a1(t){let e=t.notice??"";if(t.typing!==void 0)return{mode:"type",keys:[["enter","set"],["ctrl+u","clear"],["esc","back"]],note:e};if(t.compare)return{mode:"compare",keys:[["space","back to yours"],["esc","back"]],note:e};if(t.mode==="tune")return{mode:"tune",keys:[["↑↓","L C H ◐"],["←→","step"],...t.slot()>=j.length?[["a","scope"]]:[],["⇧←→","×5"],["enter","keep"],["esc","undo"]],note:e};return{mode:"list",keys:[["↑↓←→","slot"],["enter","tune"],["g",t.view==="slot"?"relations":"slots"],...t.misses().size>0?[["n","next miss"]]:[],["r","reset slot"],["R","reset all"],["#","type a color"],["space","before"]],note:e}}function IF(t,e,n,r){let i=e.slot(),s=e.list[i],o=e.lch[i],a=e.start[i],c=e.original[i],{name:u,about:l}=Gi(i),f=e.signature.includes(Ui[i]),d=t.color?`${t.fg(s)}${"█".repeat(4)}\x1B[39m `:"",h=e.typing!==void 0?t.bold(`${e.typing}▏`):void 0,m=[a!==s?`was ${t.color?`${t.fg(a)}■\x1B[39m `:""}${_m(e.lchOf(a))}`:"",c!==s?`default ${t.color?`${t.fg(c)}■\x1B[39m `:""}${_m(e.lchOf(c))}`:""].filter(Boolean),$=[Gt(`${t.bold(u)} ${t.dim(l)}`,f?t.dim("◆ signature"):"",n),`${d}${h??n1(t,o)} ${t.dim(s)}`,...r>=7?[`${d}${t.dim(m.length>0?m.join(" "):"as the palette has it")}`]:[]],g=Math.max(8,Math.min(40,n-12));$.push(...Qv(t,e,o,g),Xv(t,e,g));for(let b of t1(t,e))if($.length<r)$.push(ot(b,n));for(let b of e1(e,i,o))for(let[y,E]of bt(b.text,n-2).entries()){if($.length>=r)return $;$.push(`${y===0?cl(t,b.ok):" "} ${b.ok===!1?E:t.dim(E)}`)}return $}function c1(t,e,n,r,i){let s=Jv(r);if(t.view==="relations"&&t.mode==="list"&&t.typing===void 0){let y=i?s.bold("Palette"):s.dim("Palette"),E=Gm(s,t,e-2,n-1,!1).map((R)=>` ${R}`),x=[` ${Gt(`${y} ${s.dim("Relations")}`,gn("g",`${s.bold("g")} ${s.dim("slots")}`),e-2)}`,...E];return{lines:Array.from({length:n},(R,N)=>ot(x[N]??"",e)),at:2}}let o=i1(s,t,0,e,i).slice(1,-2),a=(t.mode==="tune"||t.typing!==void 0)&&n-1-o.length<6,c=a?[]:[...o],u=t.row<j.length?t.row+2:t.row+4;if(!a&&n-1-c.length>=9)c.push("");let l=n-1-c.length;if(l>=5){let y=c.length+1;if(c.push(...IF(s,t,e-2,l).map((E)=>` ${E}`)),t.mode==="tune")u=y+3+(l>=7?1:0)+t.channel;else if(t.typing!==void 0)u=y+2}let f=i?s.bold("Palette"):s.dim("Palette"),d=i&&l<5?nl(t.list,t.signature,t.waive,t.slot()).find((y)=>y.ok===!1):void 0,h=t.failing().length,m=h===0?"passes the gate":`${h} ${h===1?"miss":"misses"} in the gate`,$=t.list.filter((y,E)=>t.offDefault(E)).length,b=[` ${d?`${f} ${cl(s,!1)} ${d.text}`:Gt(`${f}${$>0?s.dim(` ${$} off its default`):""}`,s.dim(m),e-2)}`,...c];return{lines:Array.from({length:n},(y,E)=>ot(b[E]??"",e)),at:u}}function RF(t,e,n,r){let i=Jv(r);if(e<Kv||n<zv){let m=[i.bold("ttheme palette editor"),`Needs ${Kv}×${zv} — now ${e}×${n}`,i.dim("esc cancels")];return Array.from({length:n},($,g)=>ot(m[g]??"",e))}let s=t.failing().length,o=s===0?"✓ Passes the gate":`✗ ${s} ${s===1?"miss":"misses"} in the gate`,a=t.pictures>0?i.dim(`▣ ${t.pictures} ${t.pictures===1?"picture":"pictures"} `):"",c=`${t.dirty()?`${i.color?"\x1B[33m●\x1B[39m":"●"} unsaved `:""}${a}${i.dim(o)}`,l=`${i.fg(t.list[2])}◆${i.color?"\x1B[39m":""} ${i.bold(t.options.title)} ${i.dim(`· ${t.options.name}`)}`,f=n-4,d;if(t.overlay==="keys")d=SF(i,t,e);else if(t.overlay==="open")d=MF(i,t,e,f);else{let m=e-xa-2,$=t.mode==="seeds"?hF(i,t,f):i1(i,t,f),g=t.mode==="seeds"?vF(i,t,m,f):yF(i,t,m,f);d=Array.from({length:f},(b,y)=>`${ot($[y]??"",xa)}${i.dim("│")} ${ot(g[y]??"",m)}`)}let h=[Gt(l,c,e),""];for(let m=0;m<f;m++)h.push(ot(d[m]??"",e));return h.push("",xF(i,t,e)),h}function Wm(t,e,n){if(n.action==="wheel"){if(!n.sideways)t.scroll(n.wheel);return}if((n.action==="press"||n.action==="drag")&&n.button!=="left")return;if(n.action==="press"&&t.overlay==="keys"){t.press("esc");return}let r=e?.target;if(!e||!r)return;let i=e.width>1?e.x/(e.width-1):0;if(n.action==="release"){if(!e.inside)return;if(r.kind==="key")t.press(r.key);else if(n.count===2&&r.kind==="slot"&&t.mode==="list")t.press("enter");else if(n.count===2&&r.kind==="choice"&&t.overlay==="open")t.press("enter");return}if(r.kind==="bar")t.slide(r.channel,i);else if(r.kind==="seed")t.sow(r.field,i);else if(n.action!=="press")return;else if(r.kind==="slot")t.select(r.slot);else if(r.kind==="channel")t.grip(r.channel);else if(r.kind==="scope")t.scopeTo(r.scope);else if(r.kind==="choice"){if(t.overlay==="open")t.pick=r.index}else if(t.typing===void 0&&!t.overlay&&!t.quitting){if(r.kind==="field"&&t.mode==="seeds")t.field=r.field;else if(r.kind==="view"&&t.mode!=="seeds")t.view=r.view;else if(r.kind==="scene")t.scene=r.scene}}var NF=[ju,Yn,Hi,Gr],TF=33;async function u1(t,e){let n=new Sa(t),r=e.backdrop,i=(s)=>n.typing===void 0&&Qu(s);return Br({modes:[...NF,...Js()],burst:i},async(s)=>{let o=[],a="",c,u=!1,l=!1,f=()=>{if(c=void 0,e.look){let g=n.shown();if(g.join(" ")!==a)a=g.join(" "),e.look(g);return}let $="";n.shown().forEach((g,b)=>{if(o[b]!==g&&e.only?.includes(b))$+=Uo(b,g),o[b]=g}),s.write($)},d=new Ri({write:($)=>s.write($),view:()=>u?void 0:{lines:RF(n,s.cols,s.rows,e.color),after:()=>r?.draw(n.shown(),n.signature,n.waive,s.cols,s.rows)??""}}),h=($=!1)=>{if($)d.soon();else d.request();if(e.only||e.look)c??=setTimeout(f,TF)},m=async($)=>{let g=t.find;if(!g)return;if(u=!0,clearTimeout(c),c=void 0,r)s.write(r.clear());try{n.found(await g(n.edited(),$))}catch(b){n.notice=b instanceof Error?b.message:String(b)}if(l)return;u=!1,r?.load(),o.length=0,a="",d.reset(yi),h()};if(s.write(yi),s.onResize(()=>{r?.resized(),d.reset(yi),d.request()}),r){r.load(),r.ready=()=>d.request();let $=new la;s.ask(Cu,(g)=>$.see(g),1000).then((g)=>{if(g)r.measured(g);d.request()})}h();try{let{edited:$}=await s.loop((g)=>{if(u)return;if(g.kind==="paste")n.paste(g.text);else if(g.kind==="key")n.press(g.key);else if(g.kind==="mouse")Wm(n,d.point(g),g);if(n.result)return{edited:n.result==="saved"?n.edited():void 0};let b=n.wants;if(b)n.wants=void 0,m(b.start);return},()=>{if(!u)h(!0)});return $}finally{if(l=!0,clearTimeout(c),d.stop(),r)s.write(r.close())}})}import{spawn as zF}from"node:child_process";import{createHash as S1}from"node:crypto";import{existsSync as Ra,mkdirSync as DF,mkdtempSync as qF,readFileSync as YF,rmSync as ul}from"node:fs";import{homedir as JF,tmpdir as VF}from"node:os";import{basename as ZF,dirname as QF,join as En}from"node:path";import{pathToFileURL as d1}from"node:url";import{existsSync as AF,readFileSync as PF,statSync as HF}from"node:fs";import{join as l1}from"node:path";function FF(t,e){try{return JSON.parse(PF(l1(Ke(t),e),"utf8"))}catch{return{}}}function CF(t,e,n){P(l1(Ke(t),e),`${JSON.stringify(n)}
710
+ `)}class Km{caches=new Map;unsaved=new Set;owners=new Map;crediting=new Map;inflight=new Map;home;catalog;entry;signal;credited;constructor(t){this.home=t.home,this.catalog=t.catalog,this.entry=t.entry,this.signal=t.signal,this.credited=t.credited}matesOf(t,e){return this.owners.get(t.key)?.get(e)??[]}async transparent(t,e){let n=this.keep(t,"probes.json"),r=n[e.id];if(r!==void 0)return r;try{let i=await So(t,e,this.signal),s=oi(t,e),o=(i===void 0?await Bb(s.site,s.url,this.signal):i)?.alpha===!0;return n[e.id]=o,this.unsaved.add(`${t.key}/probes.json`),o}catch{return!1}}save(){for(let t of this.unsaved){let[e,n]=t.split("/"),r=Y.find((i)=>i.key===e);if(r)CF(r,n,this.keep(r,n))}this.unsaved.clear()}owned(t,e,n){this.keep(t,"owners.json")[e]=n,this.unsaved.add(`${t.key}/owners.json`)}credit(t,e){let{site:n,post:r}=t;if(!tc(n,r))return Promise.resolve();let i=ke(n,r.id),s=this.crediting.get(i);if(!s)s=this.credits(t,e).finally(()=>this.crediting.delete(i)),this.crediting.set(i,s);return s}async mateOwners(t){let e=this.owners.get(t.key);if(e)return e;let n=xw(this.home),r=this.keep(t,"owners.json"),i=this.catalog.palettes.flatMap((c)=>{let u=n.get(c.name);return c.group===this.entry.group&&c.name!==this.entry.name&&u?.site===t.key?[{name:c.name,id:u.id}]:[]}),s=await Promise.all(i.map(async(c)=>{let u=r[c.id];if(u!==void 0)return{...c,owner:u};try{return{...c,owner:(await us(t,c.id,this.signal))?.owner??""}}catch{return}})),o=new Map;for(let c of s)if(c)r[c.id]=c.owner,o.set(c.name,c.owner);this.unsaved.add(`${t.key}/owners.json`);let a=Fb(o);return this.owners.set(t.key,a),a}async cached(t,e,n,r){if(AF(e))return HF(e).size;let i=this.inflight.get(e);if(i)return i;let s=(async()=>{let o=await rc(t,n,this.signal,r);return P(e,o),o.length})();this.inflight.set(e,s);try{return await s}finally{this.inflight.delete(e)}}keep(t,e){let n=`${t.key}/${e}`,r=this.caches.get(n);if(!r)r=FF(t,e),this.caches.set(n,r);return r}async credits({site:t,post:e},n){let r=this.keep(t,"credits.json"),i=r[e.id];if(!i){try{i=await Xa(t,e.id,n)}catch{return}if(!i?.owner)return;r[e.id]=i,this.unsaved.add(`${t.key}/credits.json`)}Eo(e,i),this.credited()}}import{rmSync as LF}from"node:fs";import{join as jF}from"node:path";var so=2147483645,Ia=2147483646,f1=-1073741827,_F=-1073741828,GF=16,BF=0.4,UF=3221225472,WF=256;function KF(t){let e=/^(\d+) (\d+)$/.exec(t??"");return e&&(Number(e[1])>0||Number(e[2])>0)?{x:Number(e[1]),y:Number(e[2])}:void 0}var zm=KF(process.env.TTHEME_BG_MARGIN);class Dm{screen;gliding;sent=new Map;placed=new Map;covered="";viewed="";bands=Zc(process.env);files=Qc(process.env);moves=c$(process.env);layers=Xc(process.env);wipes=u$(process.env);views=$i(process.env);bandFiles=new Map;nextBand=UF;view;grid;background;renders;scratch;signal;write;constructor(t){this.view=t.view,this.grid=t.grid,this.background=t.background,this.renders=t.renders,this.scratch=t.scratch,this.signal=t.signal,this.write=t.write,this.screen=new Ri({write:(e)=>this.write(e),view:()=>this.frame(),beat:()=>{this.view.beat++}})}draw(){if(!this.signal.aborted)this.screen.request()}soon(){if(!this.signal.aborted)this.screen.soon()}flush(){if(!this.signal.aborted)this.screen.now()}point(t){return this.screen.point(t)}drop(){this.screen.drop()}frame(){if(this.signal.aborted)return;let{cols:t,rows:e,cell:n}=this.grid(),r=wm(this.view,t,e);return this.view.loaderFrom=r.loader?this.view.loaderFrom??this.view.beat:void 0,{lines:r.lines,zones:r.zones,after:(i)=>this.images(r.images,i,n),...this.view.mode==="grid"&&this.view.editing!==void 0?{cursor:this.caret()}:{},ticking:r.tick}}images(t,e,n){let r="",i=new Set,s;for(let o of t){if(this.views&&o.id>=mm){s=o;continue}let a=this.bands?this.banded(o):o;if(!a)continue;if(this.wipes&&[...e].some((u)=>u>=a.row&&u<a.row+a.rows))this.placed.delete(a.id);if(i.add(a.id),this.sent.get(a.id)!==a.path){let u=Du(a,this.files);if(u===void 0)continue;r+=u,this.sent.set(a.id,a.path),this.placed.delete(a.id)}let c=`${a.row};${a.col};${a.cols};${a.rows};${a.crop};${a.z}`;if(this.placed.get(a.id)!==c){if(!this.moves&&this.placed.has(a.id))r+=gm(a.id);r+=Zy(a,n),this.placed.set(a.id,c)}}for(let o of this.sent.keys())if(!i.has(o))r+=ka(o),this.sent.delete(o),this.placed.delete(o);return r+(this.views?this.backdrop(s):this.cover())}glide(){if(this.bands)this.prebake();if(this.gliding)return;let{cols:t,rows:e}=this.grid(),n=Jn(t,e).height,r=()=>{let i=this.view,s=i.top*gt.height,o=s-i.scroll;if(o===0||i.mode!=="grid"){i.scroll=s;let a=this.gliding!==void 0;if(this.gliding=void 0,a)this.draw();return}if(Math.abs(o)>2*n)i.scroll=s-Math.sign(o)*n,o=s-i.scroll;i.scroll+=Math.sign(o)*Math.max(1,Math.round(Math.abs(o)*BF)),this.draw(),this.gliding=setTimeout(r,GF)};r()}snap(){clearTimeout(this.gliding),this.gliding=void 0,this.view.scroll=this.view.top*gt.height}resized(){this.screen.reset()}stop(){this.screen.stop(),clearTimeout(this.gliding)}prebake(){let t=this.view,{cols:e,rows:n}=this.grid();for(let r of wm({...t,scroll:t.top*gt.height},e,n).images)if(r.crop!==void 0)this.band(r.path,r.crop,r.rows)}cover(){let{cols:t,rows:e}=this.grid(),n=`${t};${e}`;if(!this.layers||this.covered===n)return"";let r="";if(!this.covered){let i=Buffer.from(rt(this.background)).toString("base64");if(r+=`\x1B_Ga=t,f=24,s=1,v=1,i=${so},q=2;${i}\x1B\\`,zm)r+=`\x1B_Ga=t,f=32,s=1,v=1,i=${Ia},q=2;AAAAAA==\x1B\\\x1B[H\x1B_Ga=p,i=${Ia},p=${Ia},c=1,r=1,C=1,z=${_F},q=2\x1B\\`}else if(!this.moves)r+=gm(so);if(this.covered=n,zm){let{x:i,y:s}=zm;return`${r}\x1B_Ga=p,i=${so},p=${so},P=${Ia},Q=${Ia},H=${-i},V=${-s},c=${t+2*i},r=${e+2*s},C=1,z=${f1},q=2\x1B\\`}return`${r}\x1B[H\x1B_Ga=p,i=${so},p=${so},c=${t},r=${e},C=1,z=${f1},q=2\x1B\\`}backdrop(t){let{cols:e,rows:n,cell:r}=this.grid(),i=e*r.w,s=n*r.h,o=t?`${this.background}|${t.path}|1|${i}|${s}|${i}|${s}|0|0|1`:`${this.background}||1|${i}|${s}|0|0|0|0|5`;if(o===this.viewed)return"";return this.viewed=o,ki(o)}caret(){return`\x1B[1;${Math.min(this.grid().cols,X(`⌕ ${this.view.editing??""}`)+1)}H`}banded(t){if(t.crop===void 0)return t;let e=this.band(t.path,t.crop,t.rows,!this.gliding);return e?.ready?{...t,id:e.id,path:e.path,crop:void 0}:void 0}band(t,e,n,r=!0){let i=`${t}|${e}|${n}`,s=this.bandFiles.get(i);if(s||!r)return s;let{cell:o}=this.grid(),a=this.nextBand++,c={id:a,path:jF(this.scratch,`band-${a}.png`),ready:!1};return this.bandFiles.set(i,c),this.renders.run({job:"band",from:t,to:c.path,y:e*o.h,height:n*o.h}).then(()=>{c.ready=!0,this.draw()}).catch(()=>{}),this.trimBands(),c}trimBands(){for(let[t,e]of this.bandFiles){if(this.bandFiles.size<=WF)return;if(e.ready&&!this.sent.has(e.id))this.bandFiles.delete(t),LF(e.path,{force:!0})}}}var Wi=[{name:"TTHEME_FIND_RATING",label:"Rating",about:"The ratings to list, each site read in its own words — space ticks one, and one stays ticked",choices:os,multi:{read:si}},{name:"TTHEME_FIND_BLOCK",label:"Block",about:"Posts tagged with nudity or underwear are left out — space unticks one",choices:ii,multi:{read:cs,none:"none"}},{name:"TTHEME_FIND_POSTS",label:"Posts",about:"Every post of the character, or only the transparent cutouts",choices:["all","cutouts"]},{name:"TTHEME_FIND_SOLO",label:"Solo",about:"When on, only the posts known to show the character alone — checked as posts arrive, so the counts below leave it out",choices:["on","off"]},{name:"TTHEME_FIND_ORDER",label:"Order",about:"How posts are ranked: fit, by how well each makes a backdrop; newest; or score",choices:["fit","newest","score"]},{name:"TTHEME_FIND_SETS",label:"Sets",about:"One picture posted over and over, or held by another site too: fold it into one tile, or show each",choices:["fold","show"]},...Gs()?[{name:"TTHEME_FIND_REMOVE_BG",label:"Remove bg",about:"Cut the character out of an opaque picture you try on, with macOS Vision",choices:["on","off"]}]:[],{name:"TTHEME_FIND_MIN_SCORE",label:"Min score",about:"Posts scored at least this — danbooru, konachan and yande.re; zerochan keeps no score. ←→ steps, or type any number",choices:vb,entry:"number",advanced:!0},{name:"TTHEME_FIND_MIN_SIZE",label:"Min size",about:"The shorter side of a picture, in px — every site filters it. ←→ steps, or type any number",choices:Eb,entry:"number",advanced:!0},{name:"TTHEME_FIND_SITES",label:"Sites",about:"The sites the all tab mixes — each keeps its own tab. Space ticks one, and one stays ticked",choices:Y.map((t)=>t.name),multi:{read:ko},advanced:!0},{name:"TTHEME_FIND_HIDE",label:"Hide",about:"Comics, monochrome, sketches or chibi, told by tag in every site's spelling — checked as posts arrive",choices:mf,multi:{read:qa,none:"none"},advanced:!0},{name:"TTHEME_FIND_HIDE_TAGS",label:"Hide tags",about:"Posts with any of these tags are left out, spaced like cosplay multiple_girls — checked as posts arrive",choices:[],entry:"text",advanced:!0},{name:"TTHEME_FIND_PNG",label:"PNG only",about:"PNG originals only — danbooru counts it, the others are told by the file; zerochan only where danbooru holds it",choices:["off","on"],advanced:!0}];function h1(t,e){if(t.multi)return t.multi.read(e).join(" ")||t.multi.none;if(t.entry==="number")return/^\d+$/.test(e??"")&&Number(e)>0?String(Number(e)):"off";if(t.entry==="text")return yo(e).join(" ");return t.choices.find((n)=>n===e)??t.choices[0]}var XF=["fit","newest","score"];function qm(t){return XF.find((e)=>e===t)??"fit"}var tC={left:-1,right:1,"shift-left":-10,"shift-right":10};function m1(t){if(process.env.SSH_CONNECTION||!/^(?:https?|file):/i.test(t))return;try{let e=zF(process.platform==="darwin"?"open":"xdg-open",[t],{stdio:"ignore",detached:!0});e.on("error",()=>{}),e.unref()}catch{}}function eC(t,e,n){if(e<0){if(t!=="fill")return Math.max(fl,t+e);if(!n)return t;return Math.max(fl,Math.max(100,n)+e+1)}return t==="fill"||t+e>n?"fill":t+e}function M1(t,e){return t.size===e.size&&t.at===e.at&&t.opacity===e.opacity}function nC(t,e){if(M1(t,e))return;return{...t.size!=="fill"?{size:t.size}:{},...t.at!==e.at?{position:Ut[t.at-1]}:{},...t.opacity!==e.opacity?{opacity:t.opacity}:{}}}function p1(t,e){let n=q(t);return ce(t,e).flatMap((r,i)=>{let[,s,o]=/^([a-z.]+)_(\d+)$/.exec(r.key)??[],a=[...Y,Vn].find((c)=>c.key===s);if(!a||!o)return[];return[{key:r.key,id:Number(o),ansi:a.ansi,...a===Vn?{}:{page:a.pageUrl(Number(o))},up:i===0,from:En(n,r.original??r.fill)}]})}function rC(t){return t.length>=2&&!/^\d+$/.test(t)&&!t.includes("://")&&!/^[\w.]+:\d+$/.test(t)}var g1=12,iC=4,sC=150,oC=300,b1=12,aC=2,cC=150,uC="\x1B[?5522$p\x1B]72;t=q\x1B\\\x1B[c",lC=4000,fC=8000,w1=/\.(png|jpe?g|gif|webp|heic|tiff?|bmp)$/i,dC=process.platform==="win32"?"alt+v":"ctrl+v",$1=process.platform==="darwin"?"ctrl+shift+cmd+4 copies a screenshot":"copy a picture first",hC=1280,mC=16,pC=Ut.indexOf("top-right")+1,fl=20,k1=2,y1=3,gC=/[\p{Script=Hangul}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Han}]/u,bC=8,wC=9;function ll(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,stage:"fetch",arrived:new Set}}function Na(t){if(!(t instanceof Error))return String(t);if(t instanceof AggregateError&&t.errors[0])return Na(t.errors[0]);if(t.cause)return Na(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 Ym(t,e){return`${t}: ${Na(e)}`}function v1(t){return t.width*t.height}function E1(t,e){return`${t}-${S1("sha1").update(e).digest("hex").slice(0,8)}`}class Jm{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(Wi.map((t)=>[t.name,h1(t,process.env[t.name])]));direction=1;prefetching=0;related=new Map;pool=[];relating;thumbQueue=[];heldFiles=new Map;heldAsked=new Set;thumbing=0;clarity=new Map;tunedFiles=[];presenting=!1;again=!1;renders=new Ma;showing;thumbless=new Set;current;fetch;settle;suggestTimer;suggesting;countTimer;counting;terminal;grabber=new Sm((t)=>this.write(t),(t)=>void this.got(t));noticeTimer;peekTimer;peeked;attaching;done;scratch=qF(En(VF(),"ttheme-find-"));home;catalog;entry;tagged;blurring;start;paint;kept;constructor(t,e,n,r,i){this.start=i,this.home=t,this.catalog=e,this.entry=n,this.tagged=new Set(e.palettes.flatMap((o)=>o.booru?[o.booru]:[])),this.tone=hn(n,n.signatureSlots),this.blurring=Tr(t);let s={size:"fill",at:pC,opacity:this.tone.opacity};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:qm(this.setting("TTHEME_FIND_ORDER")),solo:this.setting("TTHEME_FIND_SOLO")==="on",rating:si(this.setting("TTHEME_FIND_RATING")),block:cs(this.setting("TTHEME_FIND_BLOCK")),sets:this.setting("TTHEME_FIND_SETS")==="show"?"show":"fold",narrow:this.narrowed(),enabled:ko(this.setting("TTHEME_FIND_SITES")),hide:qa(this.setting("TTHEME_FIND_HIDE")),hideTags:yo(this.setting("TTHEME_FIND_HIDE_TAGS")),advanced:!1,settings:Wi.map((o)=>({label:o.label,choices:[...o.choices],value:this.setting(o.name),default:h1(o,Do(o.name)),multi:o.multi&&{none:o.multi.none},about:o.about,entry:o.entry,advanced:o.advanced,cursor:0})),colors:{cursor:n.cursor,selection:n.selection,background:n.background,foreground:n.foreground,ansi:n.ansi},tiles:[],installed:[],held:p1(t,n.name),checked:0,total:0,searching:r!=="",stage:"fetch",sites:[],focus:0,top:0,scroll:0,beat:0,mode:"grid",help:!1,scene:Math.max(0,ie.findIndex((o)=>o.name.toLowerCase()===process.env.TTHEME_SCENE)),details:!1,tune:{...s},untuned:s,coloring:nu(t),editing:r===""?"":void 0,chips:[]},this.paint=new Dm({view:this.view,grid:()=>({cols:this.cols,rows:this.rows,cell:this.cell}),background:n.background,renders:this.renders,scratch:this.scratch,signal:this.signal,write:(o)=>this.write(o)}),this.kept=new Km({home:t,catalog:e,entry:n,signal:this.signal,credited:()=>{this.show(),this.inform(),this.paint.draw()}}),this.pool=this.selected(this.view),this.syncChips(),this.board=ll(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:Y[this.tab-1]}get sites(){return this.site?[this.site]:Y.filter((t)=>this.view.enabled.includes(t.name))}get tabName(){return this.site?.name??"all"}get tabAnsi(){return this.site?.ansi??iC}get nextTabName(){let t=(this.tab+1)%(Y.length+1);return t===0?"all":Y[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)}narrowed(){return gf(this.setting("TTHEME_FIND_MIN_SCORE"),this.setting("TTHEME_FIND_MIN_SIZE"),this.setting("TTHEME_FIND_PNG"))}get boardKey(){return`${this.site?.key??"all"}|${this.view.preset}|${this.view.order}`}origPath(t,e,n){return En(Ke(t),"orig",`${e}.${n}`)}previewPath(t){let{url:e}=Ja(t.site,t.post);return En(Ke(t.site),"thumb",`${E1(t.post.id,e)}.${fr(e)}`)}tileOf(t,e){let{site:n,post:r}=t,i=ke(n,r.id),s=fn(r)??r;return{id:r.id,key:i,site:n.name,siteAnsi:n.ansi,width:s.width,height:s.height,reduced:s!==r,page:n===Vn?"":n.pageUrl(r.id),artist:n===Vn?lv(r.source):r.named.artist[0]??"",score:r.score,variants:e,mates:this.kept.matesOf(n,r.owner),thumb:this.thumbPath.get(i),missing:this.thumbless.has(i)}}show(){let t=this.view,e=this.board;if(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,this.stageOf(e),t.note=e.note,t.focus=Math.max(0,Math.min(e.focus,t.tiles.length-1)),t.top=e.top,this.showing!==e)this.showing=e,this.paint.snap()}stageOf(t){let e=this.view;e.stage=t.stage,e.ranking=t.ranking,e.sites=this.sites.map((n)=>({name:n.name,arrived:t.arrived.has(n.name)}))}syncSite(){let t=this.view;t.site=this.tabName,t.siteAnsi=this.tabAnsi,t.nextSite=this.nextTabName}run(){let t=(e)=>this.view.editing===void 0&&Qu(e);return Br({modes:[Gr,...Js()],assume:[Yn,Hi],burst:t},async(e)=>{this.terminal=e,e.onResize(this.onResize),e.listen((i)=>{for(let s of i)this.inbound(s);this.paint.soon()}),e.write(yi);let n=new Promise((i)=>{this.done=i}),r=setInterval(this.onClock,250);setTimeout(wc,0);try{let i=new la,s=await e.ask(Cu,(o)=>i.see(o),1000);if(s){if(this.cell=s,this.holdThumbs(),this.view.tag)this.search(),this.relate(this.view.tag)}else this.view.searching=!1,this.view.error="This terminal does not report its cell size — find needs kitty graphics";if(!process.env.TMUX)await e.ask(uC,(o)=>o.kind==="attributes"?!0:void 0,500,!1);if(this.grabber.start(),e.hold(Ny),this.start&&"paste"in this.start)this.pasted(this.start.paste);else if(this.start)this.fromClipboard();else this.peek();return this.paint.draw(),await e.until(n)}finally{this.session.abort(),this.grabber.stop(),this.attaching?.abort(),clearTimeout(this.noticeTimer),clearTimeout(this.peekTimer),this.fetch?.abort(),clearTimeout(this.settle),this.quietSuggest(),this.quietCount(),clearInterval(r),this.paint.stop(),e.write(`\x1B_Ga=d,d=A,q=2\x1B\\${yi}`),this.kept.save(),this.renders.close(),ul(this.scratch,{recursive:!0,force:!0}),Cb()}})}write(t){this.terminal?.write(t)}get saved(){return this.view.saved?.text}get installs(){return this.view.installed.length}finish(t){this.done?.(t===2&&this.saved?0:t)}inbound(t){if(t.kind==="key")this.key(t.key);else if(t.kind==="mouse")this.pointer(t);else if(t.kind==="paste")this.pasted(t.text);else if(t.kind==="mode"){if(t.mode===5522)this.grabber.clipboard=t.value!==0&&t.value!==4}else if(t.kind==="osc")if(t.code==="72"&&t.meta.t==="q")this.grabber.drops=!0;else this.grabber.take(t)}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.paint.draw();return}if(e.installing!==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!Ya(e,this.site??Y[0]);return eo(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 — ${$1}`);return}this.pasted(t.text);return}await this.bring(()=>Vu(t.bytes,t.source))}notice(t,e=lC){let n=this.view;n.error=t,clearTimeout(this.noticeTimer),this.noticeTimer=setTimeout(()=>{if(n.error===t)n.error=void 0,this.paint.draw()},e),this.paint.draw()}async peek(){let t=this.view,e;try{e=await pv()}catch{return}if(!e||e.stamp===this.peeked)return;if(this.peeked=e.stamp,!e.picture||t.installing!==void 0)return;t.hint=`Picture on the clipboard · ${dC} uses it`,clearTimeout(this.peekTimer),this.peekTimer=setTimeout(()=>{t.hint=void 0,this.paint.draw()},fC),this.paint.draw()}async fromClipboard(){let t=this.view;if(Em()){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 mv(En(this.scratch,`clipboard-${Date.now()}.png`))}catch(r){this.notice(`Could not read the clipboard: ${Na(r)}`);return}if(clearTimeout(this.peekTimer),t.hint=void 0,"image"in e){await this.bring(async(r)=>({...await vm(e.image,r),source:"clipboard"}));return}let n=e.text.trim();if(!n){this.notice(`No picture on the clipboard — ${$1}`);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=Ya(e,this.site??Y[0]);if(i){await this.jump(i.site,i.id);return}}let[n,...r]=eo(e).sort((i,s)=>Number(!w1.test(i))-Number(!w1.test(s)));if(!n){this.notice("Nothing to use in that — drop a picture, or paste one or its link");return}await this.bring((i)=>vm(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.paint.draw();let i;try{i=await t(AbortSignal.any([r.signal,this.signal]))}catch(d){if(!r.signal.aborted)n.note=void 0,this.notice(Na(d),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 s=dv(i.bytes);fv(s,i.source);let o=this.origPath(Vn,s,i.ext);P(o,i.bytes);let a=d1(o).href,c={id:s,file:a,width:i.width,height:i.height,ext:i.ext,preview:a,owner:"",score:0,rating:"s",md5:S1("md5").update(i.bytes).digest("hex"),source:i.source,tags:[],named:{artist:[],character:[],copyright:[]},solo:void 0,family:0,smaller:[]},u={site:Vn,post:c},l=this.previewPath(u);P(l,i.bytes),++this.gen,this.current=void 0,n.shown=void 0;let f=ll(`local|post:${s}`,!1);this.board=f,this.boards.set(f.key,f),this.single(f,u)}single(t,e){t.searching=!1,this.posts.set(ke(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.paint.draw()}onClock=()=>{let t=this.sites.reduce((r,i)=>Pn(i)>Pn(r)?i:r),e=Math.ceil((Pn(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.paint.draw()};onResize=()=>{if(this.cols=process.stdout.columns||this.cols,this.rows=process.stdout.rows||this.rows,this.paint.resized(),this.holdThumbs(),this.scroll(),this.paint.snap(),this.view.mode==="try"&&this.current)this.reveal();this.pump(),this.paint.draw()};key(t){let e=this.view;if(t==="ctrl-c"){this.finish(2);return}if(e.installing!==void 0)return;if(t==="focus-in"){this.peek();return}if(t==="focus-out")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.paint.draw();return}if(this.cols<Ci.cols||this.rows<Ci.rows){if(t==="esc")this.finish(2);return}if(t==="?"){e.help=!0,this.paint.draw();return}if(e.mode==="try"){this.tryKey(t);return}this.gridKey(t)}pointer(t){let e=this.view,n=this.paint.point(t),r=n?.target;if(e.installing!==void 0)return;if(t.action==="wheel"){if(!t.sideways)this.wheel(t.wheel);return}if((t.action==="press"||t.action==="drag")&&t.button!=="left")return;if(r?.kind==="track"&&n&&t.action!=="release")this.slide(r.field,n);else if(t.action==="press")this.pressed(r);else if(t.action==="release"&&n?.inside)this.released(r,t)}pressed(t){let e=this.view;if(e.help)this.paint.drop(),this.key("esc");else if(e.editing!==void 0||t===void 0)return;else if(e.panel!==void 0){if(t.kind==="setting"&&t.index<e.settings.length&&e.typing===void 0)e.panel=t.index,this.paint.draw()}else if(e.mode==="try")this.tryPoint(t);else if(t.kind==="tile")this.focus(t.index);else if(t.kind==="query")this.gridKey("/");else if(t.kind==="site")this.tab=t.tab,this.syncSite(),this.turn()}released(t,e){let n=this.view;if(t?.kind==="key")this.key(t.key);else if(t?.kind==="link"){if(!e.shift&&!e.alt&&!e.ctrl)m1(t.url)}else if(n.editing!==void 0){if(t?.kind==="suggest")n.pick=t.index,this.editKey("enter")}else if(n.panel!==void 0)this.panelPoint(t);else if(n.mode==="try"){if(t?.kind==="place"&&n.tuning)this.tuneKey(String(t.at))}else if(t?.kind==="tile"&&e.count===2)this.gridKey("enter");else if(t?.kind==="chip")this.toggle(t.index)}wheel(t){let e=this.view;if(e.help)return;if(e.editing!==void 0){if(e.suggest?.length)this.editKey(t<0?"up":"down")}else if(e.panel!==void 0){if(e.typing===void 0)this.panelKey(t<0?"up":"down")}else if(e.tuning)this.tuneKey(t<0?"up":"down");else if(e.mode==="try")this.tryKey(t<0?"left":"right");else this.focus(e.focus+t*Jn(this.cols,this.rows).perRow)}panelPoint(t){let e=this.view;if(t?.kind!=="setting"&&t?.kind!=="choice")return;let n=e.settings[t.index];if(e.typing!==void 0){let r=e.settings[e.panel??0];if(r&&(t.index!==e.panel||t.kind==="setting"))this.typeKey(r,"enter");else return}if(t.kind==="setting"&&t.index===e.settings.length){e.panel=t.index,this.panelKey("enter");return}if(e.panel=t.index,t.kind==="choice"&&n){if(n.entry==="text"||t.choice===void 0){this.panelKey("enter");return}if(n.multi){n.cursor=Math.max(0,n.choices.indexOf(t.choice)),this.panelKey(" ");return}if(n.value!==t.choice)n.value=t.choice,this.recount()}this.paint.draw()}tryPoint(t){let e=this.view;if(t.kind==="scene")e.scene=t.scene,e.details=!1,this.paint.draw();else if(e.tuning&&t.kind==="field")e.tuning.field=t.field,this.paint.draw()}slide(t,e){let n=this.view,r=n.tuning;if(!r)return;let i=Math.min(1,Math.max(0,e.width>1?e.x/(e.width-1):0));if(r.field=t,t===0){let s=Math.max(100,r.fill),o=fl+Math.round(i*(s-fl+1));n.tune.size=i===1||r.fill>0&&o>=r.fill?"fill":Math.min(s,o)}else n.tune.opacity=Math.round(i*100)/100;this.retune()}gridKey(t){let e=this.view,{perRow:n,rowsVis:r}=Jn(this.cols,this.rows),s={left:-1,right:1,up:-n,down:n,k:-n,j:n,pgup:-n*r,pgdn:n*r,home:-e.focus,end:e.tiles.length}[t];if(s!==void 0){this.focus(e.focus+s);return}if(/^[1-9]$/.test(t)){this.toggle(Number(t)-1);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"||t==="shift-tab"){let o=Y.length+1;this.tab=(this.tab+(t==="tab"?1:o-1))%o,this.syncSite(),this.turn();return}if(t==="/"){e.editing="",this.paint.draw();return}if(t===" "){this.unfold();return}if(t==="o"){this.openPage();return}if(t==="s"){e.panel=0,e.advanced=!1,this.recount(),this.paint.draw();return}if(t==="esc")this.finish(2)}panelKey(t){let e=this.view,n=e.panel??0,r=e.settings[n];if(e.typing!==void 0&&r){this.typeKey(r,t);return}let i=$a(e);if(t==="up"||t==="down"){let s=i.indexOf(n)+(t==="up"?-1:1);e.panel=i[(s+i.length)%i.length]??n,this.paint.draw();return}if(t==="a"||t==="enter"&&n===e.settings.length){e.advanced=!e.advanced,e.panel=$a(e)[0]??0,this.paint.draw();return}if(r?.entry&&(t==="enter"||r.entry==="number"&&/^[0-9]$/.test(t))){e.typing=t==="enter"?r.entry==="text"?r.value:"":t,this.paint.draw();return}if((t==="left"||t==="right")&&r&&r.entry!=="text"){let s=t==="left"?-1:1;if(r.multi)r.cursor=(r.cursor+s+r.choices.length)%r.choices.length;else r.value=nv(r.choices,r.value,s),this.recount();this.paint.draw();return}if(t===" "&&r?.multi){let s=r.value.split(" "),o=r.choices.filter((c,u)=>u===r.cursor?!s.includes(c):s.includes(c)),a=r.multi.none;if(o.length>0||a!==void 0)r.value=o.length>0?o.join(" "):a,this.recount(),this.paint.draw();return}if(t==="esc"){e.settings.forEach((s,o)=>{s.value=this.setting(Wi[o]?.name??"")}),e.panel=void 0,e.advanced=!1,this.quietCount(),this.paint.draw();return}if(t==="enter"||t==="s"||t==="alt-c")e.panel=void 0,e.advanced=!1,this.quietCount(),this.adopt()}typeKey(t,e){let n=this.view,r=n.typing??"";if(e==="esc"){n.typing=void 0,this.paint.draw();return}if(e==="enter"||e==="up"||e==="down"){if(t.value=t.entry==="number"?Number(r)>0?String(Number(r)):"off":yo(r).join(" "),n.typing=void 0,this.recount(),e==="enter"){this.paint.draw();return}this.panelKey(e);return}let i=Pi(r,e,(s)=>t.entry==="number"?/^[0-9]$/.test(s)&&r.length<bm:/^[\x20-\x7e]$/.test(s));if(i!==void 0)n.typing=i,this.paint.draw()}quietCount(){clearTimeout(this.countTimer),this.counting?.abort(),this.counting=void 0}recount(){if(this.quietCount(),this.view.counts=void 0,!this.view.tag)return;let t=new AbortController;this.counting=t,this.countTimer=setTimeout(()=>void this.countPending(t),oC)}pending(){let t=(e)=>this.view.settings[Wi.findIndex((n)=>n.name===e)]?.value??this.setting(e);return{tag:this.view.tag,chosen:this.view.chosen,preset:t("TTHEME_FIND_POSTS")==="all"?"all":"cutouts",order:qm(t("TTHEME_FIND_ORDER")),rating:si(t("TTHEME_FIND_RATING")),narrow:gf(t("TTHEME_FIND_MIN_SCORE"),t("TTHEME_FIND_MIN_SIZE"),t("TTHEME_FIND_PNG")),enabled:ko(t("TTHEME_FIND_SITES"))}}async countPending(t){let e=this.pending(),n=this.site?[this.site]:Y.filter((s)=>e.enabled.includes(s.name)),r=AbortSignal.any([this.signal,t.signal]),i=await Promise.all(n.map(async(s)=>{let o=this.query(s,e);if(!o)return{site:s.name,count:0};if(s.counts&&!s.counts(o.tags))return{site:s.name};try{let a=await kf(s,o.tags,r);return{site:s.name,...Number.isFinite(a)?{count:a}:{}}}catch{return{site:s.name}}}));if(this.counting===t&&this.view.panel!==void 0)this.view.counts=i,this.paint.draw()}adopt(){let t=this.view,e=Wi.map((r)=>this.setting(r.name));t.settings.forEach((r,i)=>{let s=Wi[i];if(s)this.values.set(s.name,r.value)});let n=Wi.filter((r,i)=>this.setting(r.name)!==e[i]);if(n.length===0){this.paint.draw();return}this.save(n),t.rating=si(this.setting("TTHEME_FIND_RATING")),t.block=cs(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=qm(this.setting("TTHEME_FIND_ORDER")),t.solo=this.setting("TTHEME_FIND_SOLO")==="on",t.narrow=this.narrowed(),t.enabled=ko(this.setting("TTHEME_FIND_SITES")),t.hide=qa(this.setting("TTHEME_FIND_HIDE")),t.hideTags=yo(this.setting("TTHEME_FIND_HIDE_TAGS")),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=En(this.home,"ttheme","config.zsh");try{let n=Ra(e)?YF(e,"utf8"):"";return P(e,t.reduce((r,[i,s])=>ru(r,i,s),n)),!0}catch(n){return this.view.error=n instanceof Error?n.message:String(n),!1}}editKey(t){let e=this.view,n=e.editing??"",r=e.suggest??[];if((t==="up"||t==="down")&&r.length>0){let o=((e.pick??r.length)+(t==="down"?1:r.length))%(r.length+1);e.pick=o===r.length?void 0:o,this.paint.draw();return}if(t==="esc"||t==="enter")this.quietSuggest();if(t==="esc"){if(e.editing=void 0,e.tag===""){this.finish(2);return}this.paint.draw();return}if(t==="enter"){let s=e.pick===void 0?void 0:r[e.pick],o=s?s.whole?s.value:n.replace(/\S*$/,s.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.paint.draw();return}let i=Pi(n,t);if(i!==void 0)e.editing=i,this.suggest(),this.paint.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=t.editing??"",n=/\S*$/.exec(e)?.[0]??"",r=rC(n),i=Dw(e,y1,this.tagged).map((c)=>({value:c.tag,count:0,alias:c.name,whole:!0}));if(!r&&i.length===0){t.suggest=void 0;return}let s=r?M0(this.catalog.palettes,this.entry,n).map((c)=>({value:c.booru,count:0,palette:c.name})):[],o=[...new Map([...s.slice(0,y1),...i].map((c)=>[c.value,c])).values()];if(t.suggest=o.length>0?o:void 0,i.length>0&&gC.test(e))t.pick=o.findIndex((c)=>("whole"in c));if(!r)return;let a=new AbortController;this.suggesting=a,this.suggestTimer=setTimeout(async()=>{try{let c=await jb(n,AbortSignal.any([this.signal,a.signal]));if(this.suggesting===a&&t.editing!==void 0){let u=new Map(c.map((f)=>[f.value,f.count])),l=new Set(o.map((f)=>f.value));t.suggest=[...o.map((f)=>({...f,count:u.get(f.value)??0})),...c.filter((f)=>!l.has(f.value))].slice(0,bC),t.pick=t.pick!==void 0&&t.pick<o.length?t.pick:void 0,this.paint.draw()}}catch{}},sC)}async commit(t){let e=Ya(t,this.site??Y[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.view.chosen=void 0,this.relate(t),this.boards.clear(),await this.search()}async jump(t,e){let n=++this.gen;this.tab=Y.indexOf(t)+1,this.syncSite(),this.current=void 0,this.view.shown=void 0,this.view.error=void 0;let r=ll(`${t.key}|post:${e}`,!0);this.board=r,this.boards.set(r.key,r),this.show(),this.paint.draw();try{let i=await us(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.paint.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.paint.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(ke(i.site,i.post.id)))this.thumbQueue.push(i);this.thumbs(),this.show(),this.scroll(),this.paint.glide(),this.paint.draw();return}e+=r}}openPage(){let t=this.view.tiles[this.view.focus],e=t&&this.posts.get(t.key);if(e)m1(e.site.pageUrl(e.post.id))}tryKey(t){let e=this.view;if(e.tuning){this.tuneKey(t);return}if(t==="left"||t==="right"){this.direction=t==="left"?-1:1,this.focus(e.focus+this.direction);return}if(t==="shift-left"||t==="shift-right"){e.scene+=t==="shift-left"?-1:1,e.details=!1,this.paint.draw();return}if(t==="i"){e.details=!e.details,this.inform(),this.paint.draw();return}if(t==="t"){e.tuning={field:0,held:{...e.tune},fill:this.current?.fill??0,coloring:e.coloring},this.paint.draw();return}if(t==="c"){this.recolor();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.paint.draw()}tuneKey(t){let e=this.view,n=e.tuning,r=e.tune;if(t==="up"||t==="down"){n.field=(n.field+(t==="up"?2:1))%3,this.paint.draw();return}let i=tC[t];if(i!==void 0){if(n.field===0)r.size=eC(r.size,i,n.fill);else if(n.field===1)r.at=(r.at-1+Math.sign(i)+9)%9+1;else r.opacity=Math.max(0,Math.min(100,Math.round(r.opacity*100)+i))/100;this.retune();return}if(/^[1-9]$/.test(t)){n.field=1,r.at=Number(t),this.retune();return}if(t==="="){let s=e.untuned;if(n.field===0)r.size=s.size;else if(n.field===1)r.at=s.at;else r.opacity=s.opacity;this.retune();return}if(t==="+"){e.tune={...e.untuned},this.retune();return}if(t==="enter"){e.tuning=void 0,this.paint.draw();return}if(t==="c"){this.recolor();return}if(t==="esc")e.tune={...n.held,...n.coloring===e.coloring?{}:{opacity:e.untuned.opacity}},e.tuning=void 0,this.retune()}recolor(){let t=this.view;if(!this.current||t.shown?.id!==this.current.key)return;t.coloring=t.coloring==="tone"?"original":"tone",t.tune.opacity=t.untuned.opacity,this.paint.draw(),this.reveal()}retune(){if(this.paint.draw(),this.current&&this.view.shown?.id===this.current.key)this.reveal()}inform(){let t=this.view,e=t.tiles[t.focus],n=e&&this.posts.get(e.key);t.info=n?this.infoOf(n):void 0}infoOf(t){let{site:e,post:n}=t,r=n.named,i=Hb(e,n),s=new Set([...r.artist,...r.character,...r.copyright]),o=vo(n.source),a=/^https?:\/\//i.test(o)?o:e===Vn&&o.startsWith("/")?d1(o).href:void 0;return{page:e===Vn?"":e.pageUrl(n.id),source:o,...a?{link:a}:{},artists:r.artist,characters:r.character,series:r.copyright,tags:n.tags.filter((c)=>!s.has(c)),...i?{rating:i}:{},...n.posted?{posted:n.posted}:{},ext:(fn(n)??n).ext,uploader:n.owner}}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.paint.glide(),this.pump(),e.mode==="try")this.select();this.paint.draw()}scroll(){let t=this.view,{perRow:e,rowsVis:n}=Jn(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}selected(t){if(t.chosen)return t.chosen;if(!t.tag)return[];return this.namesOf(t.tag,"danbooru")}namesOf(t,e){let n=t===this.entry.booru?this.entry:this.catalog.palettes.find((r)=>r.booru===t);return n?O0(n,e):[t]}syncChips(){let t=this.selected(this.view);this.view.chips=this.pool.slice(0,wC).map((e)=>({name:e,on:t.includes(e)}))}toggle(t){let e=this.view,n=e.chips[t];if(!n)return;let r=this.selected(e),i=n.on?r.filter((s)=>s!==n.name):[...r,n.name];if(i.length===0)return;e.chosen=i,e.tag=i.join(" or "),this.syncChips(),this.boards.clear(),this.search()}async relate(t){this.relating?.abort();let e=this.selected({tag:t,chosen:void 0});if(this.pool=e,this.syncChips(),this.paint.draw(),!t||/\s/.test(t))return;let n=this.related.get(t);if(!n){let r=new AbortController;this.relating=r;try{n=(await _b(t,AbortSignal.any([this.signal,r.signal]))).map((i)=>i.value)}catch{return}if(this.relating!==r)return;this.related.set(t,n)}this.pool=[...new Set([...e,...n])],this.syncChips(),this.paint.draw()}query(t,e=this.view){let n=e.chosen?Gb(t,e.chosen):this.namesOf(e.tag,t.key);if(n.length===0)return;let r=e.chosen?.slice(n.length)??[],i=n.length>1,s=e.preset==="cutouts"?t.cutouts:"",o=i&&s.includes("~"),a=[i?n.map((l)=>`~${l}`).join(" "):n[0],t.rate(e.rating),...t.narrow(e.narrow),o?"":s,e.order==="score"?t.best:""].filter(Boolean),c=[],u=[];for(let l of a)if($f([...c,l].join(" "))<=t.tagBudget)c.push(l);else u.push(l);return{tags:c.join(" "),notes:[...u.length>0?[`${t.name} takes ${t.tagBudget} tags — ${u.join(" ")} left out`]:[],...r.length>0?[`${t.name} takes ${n.length} tag${n.length===1?"":"s"} — ${r.join(" ")} left out`]:[],...o?[`${t.name} ORs the names, so cutouts are told by the file`]:[],...e.narrow.score>0&&!t.scored?[`${t.name} keeps no score`]:[],...e.narrow.png&&t.guesses?[`${t.name} names a file type only where danbooru holds the file`]:[]]}}async search(){let t=++this.gen,e=ll(this.boardKey,!0);this.board=e,this.boards.set(e.key,e),this.view.error=void 0;let n=this.sites.flatMap((s)=>{let o=this.query(s);return o?[{site:s,...o}]:[]}),r=this.sites.filter((s)=>!n.some((o)=>o.site===s)),i=[...n.flatMap(({notes:s})=>s),...r.length>0?[`${this.entry.name} has no tag on ${r.map((s)=>s.name).join(", ")}`]:[]];if(e.note=i.length>0?i.join(" · "):void 0,n.length===0)e.searching=!1;this.show(),this.paint.draw(),this.tally(t,e,n);try{let s=await Promise.all(n.map(async(o)=>({plan:o,owners:await this.kept.mateOwners(o.site)})));if(t!==this.gen)return;e.sources=s.flatMap(({plan:{site:o,tags:a},owners:c})=>{let u=$f(a)+1<=o.tagBudget?o.uploadedBy:void 0;return[...u?[...c.keys()].map((l)=>({site:o,tags:`${a} ${u(l)}`,page:0,done:!1})):[],{site:o,tags:a,page:0,done:!1}]}),this.show(),this.paint.draw(),await this.pump()}catch(s){this.fail(t,s)}}async tally(t,e,n){let r=await Promise.allSettled(n.map(({site:i,tags:s})=>kf(i,s,this.signal)));if(t===this.gen)e.total=r.reduce((i,s)=>i+(s.status==="fulfilled"&&Number.isFinite(s.value)?s.value:0),0),this.show(),this.paint.draw()}fail(t,e,n=this.site){if(t!==this.gen||this.signal.aborted)return;this.board.error=Ym(n?.name??this.tabName,e),this.board.searching=!1,this.view.error=this.board.error,this.show(),this.paint.draw()}drop(t,e,n){for(let r of t.sources)if(r.site===e)r.done=!0;t.note=[t.note,Ym(e.name,n)].filter(Boolean).join(" · ")}wants(){let{perRow:t,rowsVis:e}=Jn(this.cols,this.rows);return this.view.tiles.length<(this.board.top+e+k1)*t}need(){let{perRow:t,rowsVis:e}=Jn(this.cols,this.rows);return(e+k1)*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=Lb(t,e,n,this.signal).then((s)=>this.borrow(t,s)),this.pages.set(r,i),i.catch(()=>this.pages.delete(r));return i}async borrow(t,e){let n=t===Qt?[]:e.filter((r)=>r.md5!=="");if(n.length>0)try{ec(n,await nc(n.map((r)=>r.md5),this.signal))}catch{}return e}staged(t){if(t===this.board)this.stageOf(t),this.paint.draw()}async round(t){t.stage="fetch",this.staged(t);let e=Y.flatMap((a)=>{let c=t.sources.find((u)=>u.site===a&&!u.done);return c?[c]:[]}),n=await Promise.all(e.map(async(a)=>{try{let c=await this.page(a.site,a.tags,a.page);return t.arrived.add(a.site.name),this.staged(t),{source:a,posts:c}}catch(c){if(t.sources.every((u)=>u.site===a.site)||this.signal.aborted)throw c;return this.drop(t,a.site,c),{source:a,posts:void 0}}}));if(!this.live(t))return;let r=[];for(let{source:a,posts:c}of n){if(!c)continue;a.page++,a.done=c.length<ur;let u=t.last.get(a);for(let l of c){let f=u&&Av(u.post,l)?u.set:`set:${a.site.key}:${l.id}`;u={post:l,set:f};let d=ke(a.site,l.id);if(t.seen.has(d))continue;t.seen.add(d);let h={site:a.site,post:l};if(this.eligible(h))t.kin.set(h,[f,...Tv(a.site,l)]),r.push(h);else t.checked++}if(u)t.last.set(a,u)}let i=this.dedupe(t,r),s=++t.rounds,o;if(this.view.order!=="fit")o=e.length>1?Rv(i):i;else{let a=rl(i,this.frame(),this.matched),c=a.slice(0,this.need()),u={done:0,total:c.length};if(t.ranking=u,this.staged(t),await this.looks(c,()=>{u.done++,this.staged(t)}),t.ranking=void 0,!this.live(t))return;o=[...rl(c,this.frame(),this.matched),...a.slice(c.length)]}t.stage="check",this.staged(t);for(let a of o)t.roundOf.set(a,s);t.queue.push(...o),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(ke(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,s)=>t.roundOf.get(i)===e?[s]:[]),r=rl(n.map((i)=>t.queue[i]),this.frame(),this.matched);n.forEach((i,s)=>{t.queue[i]=r[s]})}dedupe(t,e){let n=[];for(let r of e){let i=Pm(r.post),s=i.map((a)=>t.same.get(a)).find(Boolean);if(!s){for(let a of i)t.same.set(a,r);n.push(r);continue}if(t.checked++,v1(r.post)<=v1(s.post))continue;for(let a of[...i,...Pm(s.post)])t.same.set(a,r);let o=n.indexOf(s);if(o>=0){n[o]=r;continue}this.replace(t,s,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 s=i.posts.indexOf(e);if(s>=0){i.posts[s]=n,this.posts.set(ke(n.site,n.post.id),n),this.thumbQueue.push(n),this.thumbs();return}}}async looks(t,e){let n=0;await Promise.all(Array.from({length:b1},async()=>{while(n<t.length)await this.look(t[n++]),e?.()}))}look(t){let e=ke(t.site,t.post.id),n=this.looking.get(e);if(!n)n=(async()=>{let r=this.previewPath(t),i=Ja(t.site,t.post);await this.kept.cached(i.site,r,i.url);let s=await this.renders.run({job:"match",from:r,colors:this.entry.signature});return this.looked.set(e,s),this.matched.set(t.post,s.match),s})().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<g1&&e.queue.length>0&&this.wants()){let o=e.queue.shift();n.push({pick:o,passed:this.vet(o)})}if(this.ahead(e),!r&&e.queue.length<g1&&e.sources.some((o)=>!o.done)&&this.wants()){let o=this.round(e).then(()=>{if(r===o)r=void 0});o.catch(()=>{}),r=o}let i=n.shift();if(!i){if(!r)break;await r,this.show(),this.paint.draw();continue}let s=await i.passed;if(t!==this.gen)return;if(e.checked++,s)this.admit(i.pick);this.show(),this.paint.draw()}if(t===this.gen)e.searching=!1,this.show(),this.paint.draw()}catch(i){this.fail(t,i)}finally{if(this.kept.save(),this.pumping===t)this.pumping=0}}eligible({site:t,post:e}){let n=fn(e);if(!Za(t,e,this.view.rating)||Va(e,this.view.block).length>0||!n)return!1;if(this.view.solo&&e.solo===!1)return!1;let{score:r,size:i,png:s}=this.view.narrow;if(Math.min(e.width,e.height)<i||t.scored&&e.score<r||s&&e.ext!=="png"||Pb(e,this.view.hide).length>0||this.view.hideTags.some((o)=>e.tags.includes(o)))return!1;return this.view.preset==="all"?["png","jpg","jpeg",""].includes(n.ext):["png",""].includes(e.ext)}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.kept.transparent(t,e)}admit(t){let{site:e,post:n}=t,r=this.board,i=ke(e,n.id);this.posts.set(i,t);let s=r.kin.get(t)??[],o=this.looked.get(i),a=o&&{hash:o.hash,width:n.width,height:n.height},c=this.view.sets==="fold"?this.kindred(r,s,a):void 0;if(c){if(c.posts.push(t),this.register(r,c,s,a),c.open)this.thumbQueue.push(t),this.thumbs();return}let u={posts:[t],open:!1};r.groups.push(u),this.register(r,u,s,a),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)=>Hv(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})}holds(){this.view.held=p1(this.home,this.entry.name).map((t)=>{let e=this.heldFiles.get(t.from);return e?{...t,thumb:e}:t}),this.holdThumbs()}holdThumbs(){let t=me.cols*this.cell.w,e=me.rows*this.cell.h;if(t===0||e===0)return;for(let n of this.view.held.slice(0,pm(this.cols))){if(n.thumb||this.heldAsked.has(n.from))continue;this.heldAsked.add(n.from);let r=En(this.scratch,`held-${ZF(n.from)}-${t}x${e}.png`);this.renders.run({job:"thumb",from:n.from,to:r,width:t,height:e}).then(()=>{this.heldFiles.set(n.from,r),this.holds(),this.paint.draw()}).catch(()=>{})}}thumbs(){while(!this.signal.aborted&&this.thumbing<b1&&this.thumbQueue.length>0){let t=this.thumbQueue.shift();this.thumbing++,this.thumb(t).catch(()=>{this.thumbless.add(ke(t.site,t.post.id)),this.show(),this.paint.draw()}).finally(()=>{this.thumbing--,this.thumbs()})}}async thumb(t){let{site:e,post:n}=t,r=gt.cols*this.cell.w,i=gt.rows*this.cell.h,s=Ja(e,n),o=En(Ke(e),"tile",`${E1(n.id,s.url)}-${r}x${i}.png`);if(!Ra(o)){let a=this.previewPath(t);if(await this.kept.cached(s.site,a,s.url),this.signal.aborted)return;await this.renders.run({job:"thumb",from:a,to:o,width:r,height:i})}this.thumbPath.set(ke(e,n.id),o),this.show(),this.paint.draw()}select(){let t=this.view,e=t.tiles[t.focus];if(this.fetch?.abort(),clearTimeout(this.settle),t.fetching=void 0,this.inform(),!e)return;if(this.current?.key===e.key){this.reveal();return}this.settle=setTimeout(()=>void this.load(e),cC),this.paint.draw()}async load(t){let e=this.view,n=this.posts.get(t.key);if(!n)return;let r=new AbortController;if(this.fetch=r,this.kept.credit(n,r.signal),!fn(n.post))return;let{site:i}=n,s=this.board;try{await So(i,n.post,r.signal);let o=fn(n.post),a=this.origPath(i,t.id,o.ext);if(!Ra(a))e.fetching={id:t.key,got:0,size:0},this.paint.draw();let c=oi(i,n.post,o),u=await this.kept.cached(c.site,a,c.url,(d,h)=>{if(e.fetching?.id===t.key)e.fetching={id:t.key,got:d,size:h},this.paint.draw()});if(r.signal.aborted)return;if(e.fetching=void 0,s!==this.board)return;let l={site:i,id:t.id,key:t.key,path:a,ext:o.ext,size:u,using:"plain",failed:!1};e.preparing=t.key,this.paint.flush();let f=await this.render(l,"plain");if(r.signal.aborted||s!==this.board)return;if(f.clear===0&&Gs()&&this.setting("TTHEME_FIND_REMOVE_BG")!=="off"){if(e.preparing=void 0,e.cutting=t.key,this.paint.flush(),l.cut=await this.cutOut(i,t.id,a,r.signal),r.signal.aborted||s!==this.board)return;if(e.cutting=void 0,l.cut){e.preparing=t.key,this.paint.flush();let d=await this.render(l,"cut").catch(()=>{return});if(r.signal.aborted||s!==this.board)return;if(d&&Iu(d.clear))l.using="cut";else ul(l.cut,{force:!0}),l.cut=void 0,l.failed=!0}else l.failed=!0}if(this.current=l,e.tiles[e.focus]?.key===t.key)await this.present();this.preload()}catch(o){if(!r.signal.aborted&&!this.signal.aborted)e.error=Ym(i.name,o)}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.paint.draw()}}async cutOut(t,e,n,r){let i=En(Ke(t),"cut",`${e}.png`);if(Ra(i))return i;try{return DF(QF(i),{recursive:!0}),await ea(n,i,r),i}catch{ul(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]){let n=t.tiles[e],r=n&&this.posts.get(n.key);if(r)this.kept.credit(r,this.signal);if(this.prefetching>=aC||!r||!fn(r.post))continue;let{site:i,post:s}=r;this.prefetching++,So(i,s,this.signal).then(async()=>{let o=fn(s),a=this.origPath(i,s.id,o.ext),c=oi(i,s,o);return await this.kept.cached(c.site,a,c.url),this.render({site:i,id:s.id,key:n.key,path:a,ext:o.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,hC),s=Math.max(1,Math.round(r*i/n)),o={...this.view.tune},{coloring:a}=this.view,c=!M1(o,this.view.untuned),u=o.opacity!==this.view.untuned.opacity,l=c?`-${o.size}-${o.at}${u?`-${Math.round(o.opacity*100)}`:""}`:"",f=En(this.scratch,`${t.site.key}-${t.id}${e==="cut"?"c":""}${a==="original"?"o":""}-${i}x${s}${l}.png`),d=`${t.site.key}:${t.id}:${e}:${a}:${i}x${s}`,h=this.clarity.get(d);if(h&&Ra(f))return t.fill=h.fill,{clear:h.clear,path:f,opacity:h.opacity,touched:u};let m=await this.renders.run({job:"show",from:e==="cut"?t.cut:t.path,to:f,width:i,height:s,colors:this.entry,tone:this.tone,blur:this.blurring*i/Ff(n,r).width,coloring:a,...c?{tune:{size:o.size,at:o.at,...u?{opacity:o.opacity}:{}}}:{}});if(this.clarity.set(d,m),t.fill=m.fill,c)this.keepTuned(f);return{clear:m.clear,path:f,opacity:m.opacity,touched:u}}keepTuned(t){this.tunedFiles.push(t);while(this.tunedFiles.length>mC){let e=this.tunedFiles.findIndex((n)=>n!==this.view.shown?.path&&n!==t);if(e===-1)return;ul(this.tunedFiles.splice(e,1)[0],{force:!0})}}async present(){let t=this.current;if(!t)return;let e=t.using,{coloring:n}=this.view,r=this.view.tune.opacity,{clear:i,path:s,opacity:o,touched:a}=await this.render(t,e);if(this.current!==t||t.using!==e||this.view.coloring!==n)return;if(!a&&this.view.tune.opacity===r)this.view.untuned.opacity=o,this.view.tune.opacity=o;if(this.view.tuning&&t.fill)this.view.tuning.fill=t.fill;this.view.shown={id:t.key,clear:i,bytes:t.size,path:s,cut:t.cut?e==="cut"?"on":"off":t.failed?"failed":"none"}}reveal(){let t=this.view;if(this.presenting){this.again=!0;return}this.presenting=!0,t.preparing=this.current?.key,this.paint.flush(),this.present().catch((e)=>{t.error=e instanceof Error?e.message:String(e)}).finally(()=>{if(this.presenting=!1,this.again){this.again=!1,this.reveal();return}if(t.preparing===this.current?.key)t.preparing=void 0;this.paint.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.paint.flush();let r=nC(t.tune,t.untuned),i=this.posts.get(n.key)?.post;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)}`,artist:i?.named.artist??[],source:vo(i?.source??"")},width:this.cols*this.cell.w,height:this.rows*this.cell.h,blur:this.blurring,coloring:t.coloring,...r?{tune:r,aligns:xi(L(this.home).terminals),user:JF()}:{}}),this.kept.owned(n.site,n.id,i?.owner??""),Re(this.home),this.holds();let{size:s,at:o,opacity:a}=t.tune,c=r?` · ${s==="fill"?"fill":`${s}%`} · ${Ut[o-1]} · ${a.toFixed(2)}`:"",u=i?.named.artist.length?`${i.named.artist.join(", ")} · `:"";t.saved={text:`Background · ${this.entry.name} ← ${u}${n.site.name} ${n.id}${c}`,key:e.key},t.installed.push(e.key),this.fetch?.abort(),clearTimeout(this.settle),t.fetching=void 0,t.mode="grid"}catch(s){t.error=s instanceof Error?s.message:String(s)}t.installing=void 0,this.paint.draw()}}async function O1(t,e,n){let r=new Jm(t,ue(t),e,e.booru??"",n);if(await r.run(),$i(process.env))process.stdout.write(ki(""));return{saved:r.saved,installs:r.installs}}async function x1(t){let e=J(),n=ue(e),r=_n(n.palettes,t);if(!process.stdin.isTTY||!process.stdout.isTTY)throw Error("needs a terminal");let i=new Jm(e,n,r,r.booru??""),s=await i.run();if(i.saved&&s!==0)return process.stderr.write(`${i.saved}
711
+ `),0;return s}import{spawn as $C,spawnSync as I1}from"node:child_process";import{existsSync as kC,readFileSync as R1}from"node:fs";import{homedir as yC}from"node:os";import{join as N1}from"node:path";function T1(t,e,n,r=yC(),i=(s)=>{process.stdout.write(s)}){if(!e||Lt(t)||t.TMUX||Kt(t)!=="terminal-app")return;let[s="",o="-"]=(t.TTHEME_TERMINAL_SHOWN??"").split(" "),a=t.TTHEME_TTY,c=s?Se(q(n),s,r):void 0,u=mu(Fs(n)).get(Xt(s))??[],l=u.find((W)=>W===`${H(s)}.${o}.png`)??u[0];if(!a||!c||o==="-"||!l||!kC(c.image))return;let f=N1(Fs(n),l),d=["-l","JavaScript",hu(n),"tab",a,Qe(s)],h=L(n).terminalBase??"Basic",m=wh(t,r),$=R1(f),g,b=f,y=0,E,S=!1,x=!1,R,N=(W)=>{S=!0,$C("osascript",[...d,h],{stdio:"ignore"}).on("close",()=>{if(S=!1,x)return;i(W);let Q=R;R=void 0,Q?.()})},F=(W,Q)=>{g??=Ht(new Uint8Array(R1(c.image)));let U=N1(Fs(n),`${H(s)}.h${process.pid}-${++y}.png`);Xr(b,U,cr(ar(g,W,c.opacity,$h(g.width,g.height,c,m)))),b=U,N(Q)},_=()=>{if(b!==f)Xr(b,f,$),b=f},B=(W)=>{clearTimeout(E),E=setTimeout(()=>{if(S)R=W;else W()},Bd)},tt=()=>{clearTimeout(E),R=void 0};return{slots:[],paint(W){return B(W.name===s?()=>{_(),N("")}:()=>F(W.background,zn(W))),""},look(W,Q){B(()=>F(Q[0]??"",Q.map((U,yt)=>Uo(yt,U)).join("")))},wear(W){return I1("osascript",[...d.slice(0,-1),Qe(W.name),h],{encoding:"utf8"}).stdout?.trim()==="worn"?"":zn(W)},saved:async()=>new Map,restore(){return tt(),x=!0,_(),I1("osascript",[...d,h],{stdio:"ignore"}),""},stop:tt}}import{existsSync as Ta,readdirSync as vC,readFileSync as hl,rmSync as A1,statSync as H1}from"node:fs";import{homedir as EC}from"node:os";import{join as Ki}from"node:path";var SC=150,MC=260;function dl(t){return t?.includes(`path = "${H("")}`)===!0}function OC(t){try{return L(t).terminals.includes("warp")}catch{return!1}}function P1(t,e){let n=H(e);if(!Ta(t))return;return vC(t).filter((i)=>i.startsWith(`${n}.`)&&/^[0-9a-f]{8}\.yaml$/.test(i.slice(n.length+1))).map((i)=>({file:i,at:H1(Ki(t,i)).mtimeMs})).sort((i,s)=>s.at-i.at)[0]?.file??(Ta(Ki(t,`${n}.yaml`))?`${n}.yaml`:void 0)}function xC(t,e){if(!e)return;let n;try{n=hl(Ki(t,e),"utf8")}catch{return}let r=/^background_image:\n\s+path:\s*"([^"]*)"\n\s+opacity:\s*(\d+)/m.exec(n);return r?.[1]?{image:r[1],opacity:Number(r[2])/100}:void 0}function F1(t,e,n,r=EC()){if(!e||Lt(t)||t.TMUX||Kt(t)!=="warp")return;let i=Fr(r,n);if(!Ta(i)||!OC(n))return;let s=Si(r),o=gu(n),a=[],c=t.TTHEME_WARP_WEARS??Ie(L(n)),u=xC(s,c&&P1(s,c)),l,f,d=(g)=>{let b=hl(i,"utf8"),y=Cr(b);if(y===g)return;if(dl(g)&&!dl(y)&&!Ta(o))P(o,y??"");if(an(i,bu(b,g)),!dl(g))A1(o,{force:!0})},h=(g)=>{for(let b of a.splice(0))if(b===g)a.push(b);else A1(Ki(s,b),{force:!0})},m=()=>{clearTimeout(l),clearTimeout(f)},$=(g,b,y)=>{m(),l=setTimeout(()=>{let E=b;if(!E)E=`${H(g.name)}.view-${process.pid}-${a.length+1}.yaml`,P(Ki(s,E),Jo(g,y)),a.push(E);let S=E,x=Date.now()-H1(Ki(s,S)).mtimeMs;f=setTimeout(()=>{d(Eh(g.name,S)),h(S)},Math.max(0,MC-x))},SC)};return{slots:[],paint:(g)=>{if(g.name===c)$(g,P1(s,g.name));else if(u)$(g,void 0,u);else $(g,Ta(Ki(s,`${H(g.name)}.yaml`))?`${H(g.name)}.yaml`:void 0);return""},look:(g,b)=>{let[y="",E="",S="",,...x]=b;$({name:g,background:y,foreground:E,cursor:S,ansi:x},void 0,u)},wear:(g,b)=>b.includes("warp")?"":void 0,saved:async()=>new Map([["theme",Cr(hl(i,"utf8"))??""]]),restore:(g)=>{m();let b=g.get("theme");if(b)d(b);else if(dl(Cr(hl(i,"utf8"))))d(pu);return h(),""}}}function zr(t,e,n){return T1(t,e,n)??f$(t,e)??F1(t,e,n)}function Zm(){return process.stdin.isTTY===!0&&process.stdout.isTTY===!0}function C1(t,e){if(t.includes("/"))return t;let n=pi(e,!1),r=n.filter((s)=>Os(s.dir).some((o)=>o.slug===t)),[i]=r.length===1?r:n.length===1?n:[];return i?`${i.id}/${t}`:t}function NC(t,e,n){let r=L(t),i=n.filter((s)=>!r.palettes.includes(s));if(i.length>0)je(t,e,r,{...r,palettes:[...r.palettes,...i]});else if(n.some((s)=>r.palettes.includes(s)))jt(t,e,r);return{state:r,fresh:i}}function TC(t){let e=Math.max(0,...t.map((n)=>n.slot.length));return t.map((n)=>` ${n.slot.padEnd(e)} ${n.from} → ${n.to} ${n.rule}`)}function L1(t,e,n){let r=l0(e),i=mn(Cn(r.name,ad(r),n.palettes,!0)),s=Ot(t,n,!1).palettes.find((o)=>o.name===i.name);if(s&&JSON.stringify(s)!==JSON.stringify(i))throw Error(`${i.name} is already in ${lt(i.name)??"the ttheme catalog"} and differs — \`ttheme add ${i.name}\` wears that one`);if(!s)Ic(t,[...jn(t),i]);return i.name}var AC=["background","foreground","cursor"];function j1(t){try{t();return}catch(e){return e.message}}function _1(t,e,n){return Ot(t,e,!1).palettes.filter((r)=>r.name!==n).map((r)=>({name:r.name,colors:{background:r.background,foreground:r.foreground,cursor:r.cursor,selection:r.selection,ansi:r.ansi}}))}function G1(t,e){let n=new Set(ce(t,e).map((r)=>r.key));return{count:()=>ce(t,e).length,added:()=>ce(t,e).filter((r)=>!n.has(r.key)).length,fresh:()=>(Nu(t,e)??[]).filter((r)=>!n.has(te(r))),discard:()=>{let r=ce(t,e).filter((i)=>!n.has(i.key));for(let i of r)bs(t,e,i.key),lc(t,e);if(r.length>0)Re(t)}}}function PC(...t){let e=new Map;for(let n of t.flatMap((r)=>r??[]))e.set(te(n),n);return e.size>0?[...e.values()]:void 0}function B1(t,e,n,r){if(!Vc(process.env,L(t).terminals))return;return async(i,s)=>{let o=mn(Cn(e,r(i),n.palettes)),{saved:a}=await O1(t,o,s);return{...a?{note:a}:{},count:ce(t,e).length}}}async function U1(t){let e=process.stdout.isTTY===!0,n=J(),r=zr(process.env,e,n),i=r?await r.saved():new Map,s=r?.look?{look:(a)=>r.look?.(t.name,a)}:r?{only:r.slots}:{},o=e?al.of(process.env,n,t.name,L(n).terminals):void 0;try{return await u1(t,{color:!Lt(),...s,...o?{backdrop:o}:{}})}finally{if(r)process.stdout.write(r.restore(i))}}async function W1(t,e,n){let r=J(),i=ut(r),s=await dy(r,n),o=t.includes("/")?t:`${s.id}/${t}`,a=ve(o);if(a)throw Error(`${o} ${a}`);if(lt(o)!==s.id)throw Error(`palettes in ${s.dir} are named ${s.id}/<palette> — ${o} belongs elsewhere`);let c=id(r,o);if(Aa(c))throw Error(`${o} already exists — \`ttheme edit ${o}\` changes it`);let u=e?_n(Ot(r,i).palettes,e):void 0;if(!Zm())throw Error("new opens the palette editor — run it in a terminal");let l=u&&(lt(u.name)?u.base:u.default?void 0:u.name),f=u?od(u,o,`kept from ${u.name}`):void 0,d=u?Nu(r,u.name)??u.pictures:void 0,{base:h,ansiSource:m,group:$,...g}=f??{name:o,signature:AC,...Wr(Ea)},b=G1(r,o),y=({colors:x,signature:R})=>{let N=PC(d,b.fresh());return ad({...g,...x,signature:R,...l?{base:l}:{},...N?{pictures:N}:{}})},E=await U1({title:"New palette",name:o,...f?{colors:f}:{},signature:g.signature,...g.waive?{waive:g.waive}:{},palettes:_1(r,i,o),pictures:b.count(),find:B1(r,o,i,y),check:(x)=>j1(()=>Cn(o,y(x),i.palettes))});if(!E){b.discard(),console.log("Nothing made");return}IC(RC(c),{recursive:!0}),P(c,y(E));let{state:S}=NC(r,i,[o]);console.log(` + ${o}${u?` from ${u.name}`:""}
712
+ ${c}`),await Dn(r,Ot(r,i).palettes.filter((x)=>x.name===o),S.terminals),console.log(`
713
+ \`ttheme use ${o}\` wears it · \`ttheme edit ${o}\` opens it again`)}function HC(t,e,n){let r=mn(Cn(t,e,n.palettes));return Lo(r).length>0?Co(r).filter((i)=>i.startsWith(" ✗")):[]}async function K1(t){let e=J(),n=ut(e),r=L(e),i=Ot(e,n,!1),s=C1(t,e),o=pl(e,s),a=o&&Aa(o)?s:i.palettes.some((b)=>b.name===t)?t:s,c=pl(e,a);if(!c||!Aa(c)){let b=i.palettes.some((y)=>y.name===a);throw Error(b?`${a} is not one of yours — \`ttheme new <name> --from ${a}\` makes your own copy`:`no palette of yours called ${a} — \`ttheme new\` makes one`)}if(!Zm())throw Error("edit opens the palette editor — run it in a terminal");let u=Vm(c,"utf8"),l;try{l=Cn(a,u,n.palettes)}catch(b){throw Error(`${c} cannot be read — ${b.message}`)}let f=G1(e,a),d=new Set((l.pictures??[]).map((b)=>te(b))),h=({colors:b,signature:y})=>o0(f0(ud(u,b),y),f.fresh().filter((E)=>!d.has(te(E)))),m=await U1({title:"Edit palette",name:a,colors:cd(l),signature:l.signatureSlots,waive:l.waive,palettes:_1(e,n,a),pictures:f.count(),find:B1(e,a,n,h),check:(b)=>j1(()=>Cn(a,h(b),n.palettes))});if(!m){f.discard(),console.log("Nothing changed");return}let $=h(m);if($===u){console.log(f.added()>0?`Kept the pictures you added to ${a}`:"Nothing changed");return}if(P(c,$),r.palettes.includes(a))jt(e,n,r);console.log(`Saved ${a}${r.palettes.includes(a)?" — new tabs and `ttheme use` wear it":` — \`ttheme add ${a}\` installs it`}`);let g=HC(a,$,n);if(g.length>0)console.log(`
724
714
  It misses the contrast gate:
725
715
  ${g.join(`
726
716
  `)}
727
- \`ttheme check --fix ${a}\` suggests colors that pass`)}function d1(t,e,n){return Hn(t.palettes,t.palettes.some((r)=>r.name===e)?e:r1(e,n))}function h1(t,e=!1){let n=J(),r=lt(n),i=_(n),s=d1(Ot(n,r),t,n);if(console.log(`${s.name} · ${s.group}
728
- `),console.log(Po(s).join(`
729
- `)),Ao(s).length===0)return console.log(`
730
- Passes the gate`),0;let{theme:a,moves:c,left:u}=zu(Ue(s));if(c.length===0)return console.log(`
717
+ \`ttheme check --fix ${a}\` suggests colors that pass`)}function z1(t,e,n){return _n(t.palettes,t.palettes.some((r)=>r.name===e)?e:C1(e,n))}function D1(t,e=!1){let n=J(),r=ut(n),i=L(n),s=z1(Ot(n,r),t,n);if(console.log(`${s.name} · ${s.group}
718
+ `),console.log(Co(s).join(`
719
+ `)),Lo(s).length===0)return console.log(`
720
+ Passes the gate`),0;let{theme:a,moves:c,left:u}=Xu(De(s));if(c.length===0)return console.log(`
731
721
  No color change fixes it — waive the rule in [contrast] with a reason, or pick other colors`),1;console.log(`
732
722
  ${u.length===0?"These colors pass":"These colors come closer"}:
733
- ${BF(c).join(`
734
- `)}`);let l=al(n,s.name);if(!l||!Ma(l))return console.log(`
723
+ ${TC(c).join(`
724
+ `)}`);let l=pl(n,s.name);if(!l||!Aa(l))return console.log(`
735
725
  \`ttheme new <name> --from ${s.name}\` makes a copy you can fix`),1;if(!e)return console.log(`
736
- \`ttheme check --fix ${s.name}\` writes them`),1;if(H(l,Jf(Cm(l,"utf8"),Yf(a))),i.palettes.includes(s.name))Ct(n,r,i);return console.log(`
737
- Wrote ${l}`),u.length===0?0:1}function al(t,e){let n=ct(e);return n&&fi(t,!1).some((r)=>r.id===n)?zf(t,e):void 0}function zF(t,e){let n=al(t,e.name),r=n&&Ma(n)?ye(e.name,Cm(n,"utf8"),[e]).waiveReason:void 0,i=Su(t,e.name)??e.pictures,{pictures:s,...o}=Df(e,e.name,r);return{...o,...i?{pictures:i}:{}}}async function DF(t,e,n){if(t===e)return e;let r=n;if(r===void 0)if(!Lm())r="tuned";else{let i=await P0({message:`Share ${e.name} as…`,options:[{value:"tuned",label:"Your tone",hint:`named ${ol(e.name)}`},{value:"original",label:"The original"}]});if(oe(i))throw new Ie;r=i}return r==="original"?e:t}function ol(t){return`${t}-tuned`}async function m1(t,e){let n=J(),r=lt(n),i=d1(di(n,r),t,n),s=vs(i,Tn(n)[i.name]),o=await DF(s,i,e),a=zF(n,o),c=o===s&&s!==i;if(c){let u=We(ol(o.name));if(u)throw Error(`${ol(o.name)} ${u} — share the original, or tune a palette with a shorter name`);a.name=ol(o.name)}if(console.log(Ww(a)),process.stdout.isTTY)console.error(`
738
- Anyone with ttheme wears it with: ttheme add ${Rn}…${c?`
739
- It carries your tone, named ${a.name} so it does not clash with ${o.name}`:""}`)}function cl(t){Cr(`
740
- ${t} palettes installed — open a new tab, or reload your terminal config`)}function YF(t,e){return t.map((n)=>{if(n.startsWith(Rn))return n;let r=ct(n);if(r===void 0)return e===q?n:`${e}/${n}`;if(r!==e)throw Error(`${n} is not in ${e} — give its bare name, or leave --market out`);return n})}async function p1(t,e){let n=J(),r=e?YF(t,(await Hh(n,e)).id):t,i=lt(n),s=[...new Set(r.map((l)=>l.startsWith(Rn)?i1(n,l,i):l))],o=_(n),a=s.filter((l)=>o.palettes.includes(l)),c=s.filter((l)=>!o.palettes.includes(l));if(c.length===0){Ct(n,i,o),console.log(`Already installed: ${a.join(", ")}`);return}let u={...o,palettes:[...o.palettes,...c]};pn(n,i,o,u);for(let l of c)console.log(` + ${l}`);await _n(n,Ot(n,i,!1).palettes.filter((l)=>c.includes(l.name)),u.terminals),cl(u.palettes.length)}function g1(t){let e=J(),n=lt(e),r=_(e),i=t.filter((a)=>r.palettes.includes(a)),s=t.filter((a)=>!r.palettes.includes(a));if(i.length===0)throw Error(`not installed: ${s.join(", ")} — \`ttheme list\` marks what is`);let o={...r,palettes:r.palettes.filter((a)=>!i.includes(a))};pn(e,n,r,o),wu(e,n,r.terminals,i);for(let a of i)console.log(` - ${a}`);if(cl(o.palettes.length),s.length>0)return console.error(`ttheme remove: not installed: ${s.join(", ")}`),1;return 0}function b1(t){let e=J(),n=lt(e),r=_(e);if(!r.palettes.includes(t))throw Error(`${t} is not installed — \`ttheme add ${t}\` first`);let{off:i,...s}=r,o=pn(e,n,r,{...s,startup:t},!0);console.log(k1(t,r.terminals,o).join(`
741
- `))}function w1(){let t=J(),e=_(t),n=vi(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,s=pn(t,lt(t),e,i);console.log(k1(n,i.terminals,s).join(`
742
- `))}function $1(){let t=J(),e=_(t);if(e.off){console.log("Already off");return}let n=pn(t,lt(t),e,{...e,off:!0}),r=vi(e);console.log(`Off · new tabs open in the terminal's own colors${r?` — \`ttheme on\` wears ${r} again`:""}`);for(let i of pt(e.terminals))if(n.get(i.id)?.restart)console.log(`${i.name} new tabs open on your own profile once ${i.name} restarts`)}function k1(t,e,n){let r=pt(e).filter((s)=>!s.defaults),i=r.length>0?[`Default ${t} · ${r.map((s)=>s.name).join(", ")} open new tabs with it once their config reloads`]:[];for(let s of pt(e)){let o=s.defaults?.profile(t);if(o)i.push(n.get(s.id)?.restart?`${s.name} new tabs open with it once ${s.name} restarts — "${o}" is now its default profile`:`${s.name} new tabs open with it — "${o}" is its default profile`)}return i.length>0?i:[`Default ${t} · no terminal is wired to open with it — \`ttheme init\` wires one`]}function y1(t,e){let n=new Map(e.palettes.map((r)=>[r.name,"market"]));for(let r of mc(t,e.palettes,!1))n.set(r.name,"mine");return n}function v1(t,e=!1){let n=J(),r=lt(n),i=new Set(_(n).palettes),s=y1(n,r),o=Et(Ot(n,r).palettes);if(t)ui(o);let a=ai(t?t0(o,t):o),c=(f)=>s.get(f)??"kept";if(e){let f=a.map((d)=>({name:d.name,group:d.group,...d.catalog?{catalog:d.catalog}:{},installed:i.has(d.name),source:c(d.name)}));console.log(JSON.stringify(f,null,2));return}let u=Math.max(...a.map((f)=>f.name.length),0),l={market:"",mine:" · yours",kept:" · in no market you added"};for(let f of a){let d=f.catalog?`${f.group} / ${f.catalog}`:f.group;console.log(` ${i.has(f.name)?"●":"○"} ${f.name.padEnd(u)} ${d}${l[c(f.name)]}`)}if(process.stdout.isTTY){let f=t?`${a.length} of ${o.length}`:`${o.length}`;console.log(`
743
- ${f} palettes — ${a.filter((d)=>i.has(d.name)).length} installed`)}}async function S1(){let t=J(),e=ks(t);if(e.length===0)console.log("No markets to update — `ttheme market add official` brings the ttheme catalog back");let n=(h,p)=>`${Eh(h,p)} — kept the copy from the last update`;for(let h of e.filter(ut))try{console.log(` ${Ck(t,h)}`)}catch(p){console.log(` ${n(h,p)}`)}let r=e.filter((h)=>!ut(h)),i=new Set(r),s=[],o=Lr(),a=()=>o.set(`Updating ${[...i].map(st).join(", ")}${r.length>1?` · ${r.length-i.size}/${r.length}`:""}`);a(),await Promise.all(r.map(async(h)=>{let p=await Sh(t,h),$;if("refreshed"in p){$=Mh(p.refreshed);let g=Ih(p.refreshed);if(g)s.push(g)}else $=n(h,p.failure);if(i.delete(h),i.size>0)a();else o.done();o.say(` ${$}`)})),o.done();for(let h of s)console.log(h);if(!qF(pr(t)))return;let c=lt(t),u=_(t),l=y1(t,c),f=u.palettes.filter((h)=>!l.has(h)),d=new Map(Pn(t).map((h)=>[h.name,h.pictures]));Ct(t,c,u);for(let h of f)console.log(` ${h} left its market — ttheme keeps the copy you have`);await _n(t,Ot(t,c,!1).palettes.filter((h)=>u.palettes.includes(h.name)&&d.has(h.name)).map((h)=>Ls(h,d.get(h.name))),u.terminals)}async function jm(t,e,n,r=!1){let i=process.env.TTHEME_SORT==="series"?t.palettes:ai(t.palettes);ui(i);let s=process.stdout.isTTY===!0,o=Kr(process.env,s,J()),a=o?await o.saved():new Map,c=new Kh({entries:i,scope:n,installed:e,required:r,color:!Ft(),fx:Hu(process.env.TTHEME_FX),onFocus:o?(l)=>process.stdout.write(o.paint(l)):void 0}),u=await c.prompt();if(o)process.stdout.write(o.restore(a));if(u==="cancel")return;return t.palettes.filter((l)=>c.picked.has(l.name)).map((l)=>l.name)}function Gm(t,e,n,r){let i;try{i=_s(t,n)}catch{i=$e(n)?mr(n):st(n)}let s=[];if(ut(n))try{s=$r(n,i,Gs(t,q),!1)}catch{s=[]}else s=Gs(t,n);return{source:n,id:i,shown:st(n),entries:s,auto:gr(n,e.updates),status:Ch(t,n,r)}}function ul(t){return t instanceof Error?t.message:String(t)}function VF(t,e,n,r){let i=new Map(r.map((o)=>[o.source,o.id])),s=[];for(let o of Bt(e.markets)){let a=i.get(o)??st(o),c=n[o],u=Xo(t,o);if(c&&(u===void 0||c.at>u))s.push({where:a,source:o,update:!0,message:`Update failed ${ea(c.at)}: ${c.error}`});if(o===q)try{Pe(E1(ve(t),"utf8"))}catch(l){s.push({where:a,source:o,message:`${st(ve(t))}: ${ul(l)}`})}else if($e(o))if(!JF(Ke(t,o)))s.push({where:a,source:o,message:"No copy of its index yet — `ttheme update` fetches it"});else try{kr(t,o)}catch(l){s.push({where:a,source:o,message:`${st(Ke(t,o))}: ${ul(l)}`})}else try{let l=ke(ln(o)),f=new Map;for(let d of wr(o))try{let h=To(d,f);if(h)throw Error(h);f.set(d.slug,d),ye(`${l}/${d.slug}`,E1(d.path,"utf8"),Gs(t,q))}catch(h){s.push({where:st(d.path),message:ul(h)})}}catch(l){s.push({where:a,message:ul(l)})}}return s}function ZF(t,e,n,r,i){return{refresh:async(s)=>{if(ut(s)){let a=Gm(t,e,s,Bn());return{market:a,refreshed:{source:s,id:a.id,count:Et(a.entries).length,change:{added:[],changed:[],gone:[]}}}}let o=await vh(t,s,kh);return{market:Gm(t,e,s,Bn()),refreshed:o}},fetch:async(s)=>{if(ut(s)){let a=ke(ln(s));return{source:s,id:a,shown:st(s),entries:$r(s,a,Gs(t,q),!1),auto:!1,status:"read in place"}}let o=await ta(s,void 0,r);return n.set(s,o),{source:s,id:o.id,shown:st(s),entries:o.entries,auto:gr(s,{}),status:"not added yet"}},search:(s)=>jh(s,r),apply:i}}async function _m(...t){for(let e of await xh(...t))Cr(e)}function QF(t,e,n){let r=[];for(let i of t.adds){let s=i.source!==q&&(t.auto[i.source]??i.auto);r.push(`Added ${i.id} · ${i.shown} — ${Nt(Et(i.entries).length)}${s?", updating on its own":""}`)}for(let i of t.removes){let s=e.find((a)=>a.source===i)?.id??i;r.push(`Removed ${s} · ${st(i)}`);let o=n.filter((a)=>(ct(a)??q)===s);if(o.length>0)r.push(Fh(o))}for(let[i,s]of Object.entries(t.auto)){let o=e.find((a)=>a.source===i);if(o&&!t.removes.includes(i))r.push(`${o.id} ${s?"updates on its own now":"no longer updates on its own"}`)}return r}async function XF(t,e,n,r,i){let s=_(t),o=r.adds.length+r.removes.length+Object.keys(r.auto).length>0;for(let b of r.adds){let y=i.get(b.source);if(y)js(t,y)}for(let b of r.removes)Ah(t,b);let a=[...Bt(s.markets).filter((b)=>!r.removes.includes(b)),...r.adds.map((b)=>b.source)],c=na(s,a,{...s.updates,...r.auto});if(o)Ae(t,c);let u=lt(t,!1),l=Ot(t,u,!1).palettes.filter((b)=>r.picked.has(b.name)).map((b)=>b.name),f=s.palettes.filter((b)=>!l.includes(b)),d=l.filter((b)=>!s.palettes.includes(b));if(!o&&d.length===0&&f.length===0){await _m(t,s,e,r.refreshed),Cr("Nothing changed");return}let h={...c,palettes:l};pn(t,u,s,h),wu(t,u,s.terminals,f);for(let b of QF(r,n,l))Cr(b);for(let b of d)Cr(` + ${b}`);for(let b of f)Cr(` - ${b}`);let p=new Map(e.map((b)=>[b.name,b.pictures])),$=new Set(r.refreshed.flatMap((b)=>[...b.change.changed,...b.change.gone])),g=Ot(t,u,!1).palettes;if(await _n(t,[...g.filter((b)=>d.includes(b.name)),...g.filter((b)=>l.includes(b.name)&&!d.includes(b.name)&&$.has(b.name)&&p.has(b.name)).map((b)=>Ls(b,p.get(b.name)))],h.terminals),d.length>0||f.length>0)cl(h.palettes.length)}async function M1(){let t=i0(process.env),e=J(),n=_(e),r=Pn(e),i=Bn(),s=Bt(n.markets).map((b)=>Gm(e,n,b,i)),o=new Set(s.flatMap((b)=>b.entries.map((y)=>y.name))),a=r.filter((b)=>n.palettes.includes(b.name)&&!o.has(b.name));ui([...s.flatMap((b)=>b.entries),...a]);let c=new Map,u=new AbortController,l=process.stdout.isTTY===!0,f=Kr(process.env,l,e),d=f&&!t?await f.saved():new Map,h=Me(n);if(t)process.stdout.write("\x1B[?2026h");let p=new qh({markets:s,kept:a,installed:n.palettes,...h?{startup:h}:{},...t?{hub:t}:{},problems:VF(e,n,i,s),due:yh(e,n),io:ZF(e,n,c,u.signal,(b,y)=>ok({say:y.say,set:y.status},()=>XF(e,r,s,b,c))),...process.env.TTHEME_SORT==="series"?{}:{order:ai},color:!Ft(),lookups:process.env.TTHEME_MARKET_LOOKUP!=="off",fx:Hu(process.env.TTHEME_FX),owns:l&&!t,...f?{onFocus:(b)=>process.stdout.write(f.paint(b))}:{}});try{await p.run()}finally{if(f?.stop?.(),f&&!t)process.stdout.write(f.restore(d));u.abort()}await p.idle();let $=p.result(),g=p.next();if(t&&g!==void 0)return await _m(e,_(e),r,$.refreshed),g;if(l&&t)process.stdout.write("\x1B[?1049l\x1B[?25h");for(let b of $.refreshed){let y=Oh(b);if(y)console.log(y)}if(p.applied()){for(let y of p.lines())console.log(y);let b=p.failure();if(b)throw b}else await _m(e,_(e),r,$.refreshed),console.log("Nothing changed");return t?Oc:0}import{rmSync as O1}from"node:fs";import{basename as tC,join as Oa}from"node:path";var I1=Oa(import.meta.dirname,".."),eC=Oa(I1,"themes"),Bm=Oa(I1,"dist"),ll=Dt.map((t)=>mn[t].emitter),nC=[Ad,_d],S9=ll.map((t)=>t.id);async function fl({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?ll.filter((s)=>t.includes(s.id)):ll,n=Wb(eC),r=Cp(n);if(r.length>0){for(let s of r)console.error(` ✗ ${s.theme} [${s.rule}] ${s.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===ll.length)O1(Bm,{recursive:!0,force:!0});else for(let s of e)O1(Oa(Bm,s.id),{recursive:!0,force:!0});let i=0;for(let s of[...e,...nC]){let o=n.flatMap((u)=>s.emit?.(u)??[]),a=s.emitShared?.(n)??[];for(let u of[...o,...a])await Bun.write(Oa(Bm,u.path),u.content),i++;let c=o.length>0?`${n.length} themes${s.limits?` (${s.limits})`:""}`:a.length>0?a.map((u)=>tC(u.path)).join(" "):`no files (${s.limits??"nothing to write"})`;console.log(` ${s.id.padEnd(16)} ${c}`)}console.log(`
744
- ${n.length} themes (${Ub(n).length} in the new-tab rotation) -> ${i} files in dist/`)}import{existsSync as sC,readFileSync as P1}from"node:fs";import{availableParallelism as rC,homedir as x1}from"node:os";var iC=4;async function dl(t,e,n=x1()){let r=vt(D(t)),i=Rr(t),s=new Map(ie(t).palettes.map((f)=>[f.name,dr(f)])),o=Object.entries(r.palettes).flatMap(([f,d])=>{let h=s.get(f);return h?d.pictures.filter((p)=>fs(p)||(p.blur??0)!==i).map((p)=>({name:f,key:p.key,paint:h})):[]});if(o.length===0)return 0;e(`Drawing ${o.length} background picture${o.length===1?"":"s"} again${i?` · blur ${i}px`:""}`);let a=Si(_(t).terminals),c=new vm(Math.min(iC,rC()-1)),u=await c.map(o.map(({name:f,key:d,paint:h})=>({job:"redraw",home:t,user:n,name:f,key:d,paint:h,blur:i,aligns:a})));c.close();let l=[];return u.forEach((f,d)=>{let{name:h,key:p}=o[d];if(f instanceof Error||f===null){e(` ▢ ${h} ${p} — ${f instanceof Error?f.message:"no original to draw it from"}, left as it was`);return}l.push({name:h,picture:f})}),Af(t,l),Oe(t,n),l.length}async function N1(t,e,n,r,i=x1()){let s=vt(D(t)).palettes[e],o=s?.pictures.find((l)=>l.key===(r??s.active));if(!s||!o)throw Error(`${e} has no picture ${r??"shown"}`);if(be(o)===n)return{key:o.key,changed:!1};let a=ie(t).palettes.find((l)=>l.name===e);if(!a)throw Error(`no palette called ${e}`);let c=Si(_(t).terminals),u=await Eu(t,e,o.key,dr(a),Rr(t),c,i,n);if(!u)throw Error(`${e} ${o.key} has no original to draw it from`);return Af(t,[{name:e,picture:u}]),Oe(t,i),{key:o.key,changed:!0}}function R1(t,e,n){let r=vt(D(t)).palettes[e],i=r?.pictures.find((a)=>a.key===(n??r.active));if(!r||!i)throw Error(`${e} has no picture ${n??"shown"}`);let s=ie(t).palettes.find((a)=>a.name===e);if(!s)throw Error(`no palette called ${e}`);let o=be(i)==="original"?"tone":"original";if(!dk(t,e,i.key,dr(s),Rr(t),o))throw Error(`${e} ${i.key} has no original to draw it from`);return{key:i.key,coloring:o}}async function T1(){return await dl(J(),(t)=>process.stderr.write(`${t}
745
- `)),0}async function H1(t,e,n){let r=J();if(Hn(ie(r).palettes,t),e==="show"){if(!n)throw Error("image show needs the picture to show");let{at:i,of:s}=hs(r,t,n);return Oe(r),process.stderr.write(`Background · ${t} ${i}/${s} ${n}
746
- `),0}if(e==="drop"){let{key:i,left:s}=rc(r,t,n);return Oe(r),process.stderr.write(`Background · ${t} removed ${i} · ${s} left
747
- `),0}if(e==="tone"||e==="original"){let i=await N1(r,t,e,n);return process.stderr.write(`Background · ${t} ${i.key} ${e==="tone"?"tinted":"in its own colors"}
748
- `),0}if(e==="prepare"){let{key:i,coloring:s}=R1(r,t,n);return process.stderr.write(`Background · ${t} ${i} ready in ${s==="tone"?"its tone":"its own colors"}
749
- `),0}if(e==="tuned")return Oe(r),0;throw Error(`unknown image action ${e} — show, drop, tone, original, prepare or tuned`)}function A1(t,e){let n=/^(\d+)x(\d+)$/.exec(t),r=/^(\d+)x(\d+)([+-]\d+)([+-]\d+)$/.exec(e);if(!n||!r)throw Error("a canvas is <width>x<height> and a place <width>x<height>+<x>+<y>");let[i,s]=n.slice(1).map(Number),[o,a,c,u]=r.slice(1).map(Number);return{width:i,height:s,at:{x:c,y:u,w:o,h:a}}}function oC(t,e,n){let r=A1(e,n),i=Math.min(1,t.width/r.at.w);if(i===1)return r;return{width:Math.max(1,Math.round(r.width*i)),height:Math.max(1,Math.round(r.height*i)),at:{x:Math.round(r.at.x*i),y:Math.round(r.at.y*i),w:t.width,h:t.height}}}function F1(t,e,n,r){let i=At(new Uint8Array(P1(t)));return H(e,sn(Wg(i,A1(n,r)))),0}function C1(t,e,n,r,i,s,o){let a=Number(r);if(!ne(n)||!Number.isFinite(a))throw Error("flatten needs a #rrggbb background and an opacity from 0 to 1");let c=At(new Uint8Array(P1(t))),u=i?oC(c,i,s??""):void 0,l=nr(er(c,n,Math.max(0,Math.min(1,a)),u));if(o&&sC(o))Qr(o,e,l);else H(e,l);return 0}import{execFileSync as aC}from"node:child_process";import{readFileSync as cC}from"node:fs";import{arch as uC,platform as hl,release as Wm}from"node:os";var lC={ghostty:"ghostty",iterm2:"iTerm.app",wezterm:"WezTerm","terminal-app":"Apple_Terminal",warp:"WarpTerminal"};function fC(t,e){if(t==="konsole"){let r=/^(\d{2})(\d{2})(\d{2})$/.exec(e.KONSOLE_VERSION??"");return r?`${r[1]}.${r[2]}.${Number(r[3])}`:e.KONSOLE_VERSION}let n=lC[t];return n!==void 0&&e.TERM_PROGRAM===n?e.TERM_PROGRAM_VERSION:void 0}function dC(t){let e=Ut(t),n=t.TERM_PROGRAM&&t.TERM_PROGRAM!=="tmux"?t.TERM_PROGRAM:void 0,r=e==="unknown"?`unknown${n?` (TERM_PROGRAM=${n})`:""}`:e==="editor"?`editor (${Od(t)})`:`${e} ${fC(e,t)??"(version unknown)"}`,i=t.TERM_PROGRAM==="tmux"?t.TERM_PROGRAM_VERSION:void 0;return[r,t.TMUX?`tmux ${i??"yes"}`:"tmux no",t.SSH_CONNECTION||t.SSH_TTY?"ssh yes":"ssh no"].join(" · ")}function L1(t,e){try{return aC(t,e,{encoding:"utf8",timeout:2000,stdio:["ignore","pipe","ignore"]}).trim()}catch{return}}function hC(){let t=uC();if(hl()==="darwin")return`macOS ${L1("sw_vers",["-productVersion"])??`(Darwin ${Wm()})`} · ${t}`;if(hl()==="linux"){let e="";try{e=cC("/etc/os-release","utf8")}catch{}return`${/^PRETTY_NAME="?([^"\n]*)"?$/m.exec(e)?.[1]??"Linux"} · linux ${Wm()} · ${t}`}return`${hl()==="win32"?"Windows":hl()} ${Wm()} · ${t}`}function mC(t){if(t.TTHEME_ZSH)return`zsh ${t.TTHEME_ZSH}`;return(t.SHELL?L1(t.SHELL,["--version"])?.split(`
750
- `)[0]:void 0)??t.SHELL??"unknown"}function pC(t){try{let{terminals:e}=_(t);return e.length>0?e.join(", "):"none"}catch{return"installed.json missing or unreadable"}}function gC(t){let e=Dc.flatMap((n)=>{let r=t[n];return r===void 0||r===Uo(n)?[]:[`${n}=${/\s/.test(r)?JSON.stringify(r):r}`]});return e.length>0?e.join(" "):void 0}function j1(){let t=process.env,n=[["ttheme",xt.version],["OS",hC()],["Shell",mC(t)],["Terminal",dC(t)],["Wired",pC(J())],["Settings",gC(t)]].filter((i)=>i[1]!==void 0),r=Math.max(...n.map(([i])=>i.length));for(let[i,s]of n)console.log(`${i.padEnd(r)} ${s}`)}import{execFileSync as bC,spawnSync as wC}from"node:child_process";import{chmodSync as $C,copyFileSync as kC,existsSync as _i,mkdirSync as G1,readdirSync as yC,readFileSync as pl,rmSync as Um}from"node:fs";import{homedir as vC}from"node:os";import{dirname as eo,join as mt}from"node:path";function SC(t,e,n){for(let r of yC(e))t.push({from:mt(e,r),to:mt(n,r)})}function qm(t){return Pe(pl(mt(t,"dist","manifest.json"),"utf8"))}function ml(t,e){let n=mt(e.configHome,"ttheme"),r=[{from:mt(e.root,"bin","ttheme.js"),to:mt(n,"ttheme.js")},{from:mt(e.root,"bin","ttheme.js.map"),to:mt(n,"ttheme.js.map")},{from:mt(e.root,"shell","ttheme.zsh"),to:mt(n,"ttheme.zsh")},{from:mt(e.root,"shell","preview.zsh"),to:mt(n,"preview.zsh")},{from:mt(e.root,"shell","launch-tab.zsh"),to:mt(n,"launch-tab.zsh"),executable:!0}];SC(r,mt(e.root,"shell","adapters"),mt(n,"adapters"));let i=[{file:mt(e.zdotdir,".zshrc"),block:W0(n)}],s=mt(n,"config.zsh"),o=K0(_i(s)?pl(s,"utf8"):""),a={file:s,content:t.warpFast===void 0?o:Jc(o,"TTHEME_WARP_FAST",t.warpFast?"on":"off")},c={terminals:t.terminals,palettes:t.palettes,...Object.fromEntries(pt(t.terminals).flatMap((f)=>Object.entries(f.installs?.(e)??{}).filter(([,d])=>d!==void 0))),...t.off?{off:!0}:{}},u=gu(e.configHome,c,e.home),l=e.stateDir?[mt(e.stateDir,"ghostty",".blind")]:[];return{home:e.home,copies:r,edits:i,settings:a,forget:l,catalog:qm(e.root),installed:c,notes:u}}function B1(t){try{return _(t)}catch{return}}function W1(t,e){try{return Ot(t,lt(t,!1,e),!1).palettes}catch{return[]}}function EC(t,e){let n=qm(e.root),r=Bt(t.markets).includes(q)?n.palettes:[],i=new Set(r.map((o)=>o.name)),s=W1(e.configHome,n).filter((o)=>!i.has(o.name)&&(ct(o.name)!==void 0||t.palettes.includes(o.name)));return{...n,palettes:[...r,...s]}}function U1(t,e){let n=vi(t);return n&&e.includes(n)?n:void 0}function MC(t,e,n){let r=ml(e,n),i=U1(t,e.palettes),s=new Set(["terminals","palettes","off","startup",...Dt.flatMap((a)=>Object.keys(mn[a].installs?.(n)??{}))]),o=Object.fromEntries(Object.entries(t).filter(([a])=>!s.has(a)));return{...r,installed:{...o,...r.installed,...i?{startup:i}:{}}}}function OC(t,e){let n=ml({terminals:t.terminals,palettes:t.palettes,off:t.off},e),r=new Set([...n.catalog.palettes,...W1(e.configHome,n.catalog)].map((l)=>l.name)),i=t.palettes.filter((l)=>r.has(l)),s=t.palettes.filter((l)=>!r.has(l)),{startup:o,...a}=t,c={...a,palettes:i,...o&&i.includes(o)?{startup:o}:{}},u=s.length>0?[`Dropped ${s.join(", ")} — no longer in the catalog`,...n.notes]:n.notes;return{...n,installed:c,notes:u}}function IC(t){try{return bC(process.execPath,[mt(t,"ttheme","ttheme.js"),"--version"],{encoding:"utf8",stdio:["ignore","pipe","ignore"]}).trim()||void 0}catch{return}}function K1(t){let e=Me(t);return[pt(t.terminals).map((n)=>n.name).join(", "),`${t.palettes.length} palettes`,e?`default ${e}`:"no default — ttheme is off"].join(" · ")}function Km(t,e=De()){for(let o of t.copies)if(G1(eo(o.to),{recursive:!0}),Um(o.to,{force:!0}),Um(`${o.to}.zwc`,{force:!0}),kC(o.from,o.to),o.executable)$C(o.to,493);H(t.settings.file,t.settings.content);for(let o of t.forget)Um(o,{force:!0});let n=eo(eo(t.settings.file)),r=B1(n),i=Object.fromEntries(pt(t.installed.terminals).flatMap((o)=>{let a=o.defaults?.key,c=a?r?.[a]:void 0;return a&&c?[[a,c]]:[]})),s=Zo(n,{...t.installed,...i},e,t.home);if(Bt(s.markets).includes(q))wc(n,t.catalog);Ae(n,s),Ct(n,lt(n),s,t.home,e);for(let o of t.edits){G1(eo(o.file),{recursive:!0});let a=_i(o.file)?pl(o.file,"utf8"):"";en(o.file,Ir(a,o.block))}return Ei(n,s,!0,e,t.home)}function Ia(t){if(oe(t))throw Er("Nothing changed"),new Ie;return t}function zm(t,e){return Dt.filter((n)=>mn[n].offered(t,e))}async function xC(t,e,n,r){return Ia(await T0({message:"Wire which terminals?",options:zm(n,r).map((i)=>({value:i,label:mn[i].name,hint:i===t?"detected":void 0})),initialValues:e,required:!0}))}async function NC(t){return Ia(await ze({message:"Switch Warp to each tab's palette in about 0.2 s instead of 0.6 s?\nAbout 8% CPU while Warp is in front with tabs of different palettes — `ttheme config` changes it",initialValue:qc(t,"TTHEME_WARP_FAST")!=="off"}))}function Dm(t){let e=[...t.copies.filter((n)=>!_i(n.to)).map((n)=>n.to),..._i(t.settings.file)?[]:[t.settings.file],...t.edits.filter((n)=>!pl(n.file,"utf8").includes("# ttheme begin")).map((n)=>n.file)];if(e.length>0)throw Error(`init left gaps:
726
+ \`ttheme check --fix ${s.name}\` writes them`),1;if(P(l,ud(Vm(l,"utf8"),cd(a))),i.palettes.includes(s.name))jt(n,r,i);return console.log(`
727
+ Wrote ${l}`),u.length===0?0:1}function pl(t,e){let n=lt(e);return n&&pi(t,!1).some((r)=>r.id===n)?id(t,e):void 0}function FC(t,e){let n=pl(t,e.name),r=n&&Aa(n)?Cn(e.name,Vm(n,"utf8"),[e]).waiveReason:void 0,i=Nu(t,e.name)??e.pictures,{pictures:s,...o}=od(e,e.name,r);return{...o,...i?{pictures:i}:{}}}async function CC(t,e,n){if(t===e)return e;let r=n;if(r===void 0)if(!Zm())r="tuned";else{let i=await n$({message:`Share ${e.name} as…`,options:[{value:"tuned",label:"Your tone",hint:`named ${ml(e.name)}`},{value:"original",label:"The original"}]});if(fe(i))throw new Ne;r=i}return r==="original"?e:t}function ml(t){return`${t}-tuned`}async function q1(t,e){let n=J(),r=ut(n),i=z1(gi(n,r),t,n),s=xs(i,pn(n)[i.name]),o=await CC(s,i,e),a=FC(n,o),c=o===s&&s!==i;if(c){let u=ve(ml(o.name));if(u)throw Error(`${ml(o.name)} ${u} — share the original, or tune a palette with a shorter name`);a.name=ml(o.name)}if(console.log(u0(a)),process.stdout.isTTY)console.error(`
728
+ Anyone with ttheme wears it with: ttheme add ${Fn}…${c?`
729
+ It carries your tone, named ${a.name} so it does not clash with ${o.name}`:""}`)}function gl(t){Lr(`
730
+ ${t} palettes installed — open a new tab, or reload your terminal config`)}function jC(t,e){return t.map((n)=>{if(n.startsWith(Fn))return n;let r=lt(n);if(r===void 0)return e===z?n:`${e}/${n}`;if(r!==e)throw Error(`${n} is not in ${e} — give its bare name, or leave --market out`);return n})}async function Y1(t,e){let n=J(),r=e?jC(t,(await qh(n,e)).id):t,i=ut(n),s=[...new Set(r.map((l)=>l.startsWith(Fn)?L1(n,l,i):l))],o=L(n),a=s.filter((l)=>o.palettes.includes(l)),c=s.filter((l)=>!o.palettes.includes(l));if(c.length===0){jt(n,i,o),console.log(`Already installed: ${a.join(", ")}`);return}let u={...o,palettes:[...o.palettes,...c]};je(n,i,o,u);for(let l of c)console.log(` + ${l}`);await Dn(n,Ot(n,i,!1).palettes.filter((l)=>c.includes(l.name)),u.terminals),gl(u.palettes.length)}function J1(t){let e=J(),n=ut(e),r=L(e),i=t.filter((a)=>r.palettes.includes(a)),s=t.filter((a)=>!r.palettes.includes(a));if(i.length===0)throw Error(`not installed: ${s.join(", ")} — \`ttheme list\` marks what is`);let o={...r,palettes:r.palettes.filter((a)=>!i.includes(a))};je(e,n,r,o),js(e,n,r.terminals,i);for(let a of i)console.log(` - ${a}`);if(gl(o.palettes.length),s.length>0)return console.error(`ttheme remove: not installed: ${s.join(", ")}`),1;return 0}function V1(t){let e=J(),n=ut(e),r=L(e);if(!r.palettes.includes(t))throw Error(`${t} is not installed — \`ttheme add ${t}\` first`);let{off:i,...s}=r,o=je(e,n,r,{...s,startup:t},!0);console.log(X1(t,r.terminals,o).join(`
731
+ `))}function Z1(){let t=J(),e=L(t),n=Oi(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,s=je(t,ut(t),e,i);console.log(X1(n,i.terminals,s).join(`
732
+ `))}function Q1(){let t=J(),e=L(t);if(e.off){console.log("Already off");return}let n=je(t,ut(t),e,{...e,off:!0}),r=Oi(e);console.log(`Off · new tabs open in the terminal's own colors${r?` — \`ttheme on\` wears ${r} again`:""}`);for(let i of pt(e.terminals))if(n.get(i.id)?.restart)console.log(`${i.name} new tabs open on your own profile once ${i.name} restarts`)}function X1(t,e,n){let r=pt(e).filter((s)=>!s.defaults),i=r.length>0?[`Default ${t} · ${r.map((s)=>s.name).join(", ")} open new tabs with it once their config reloads`]:[];for(let s of pt(e)){let o=s.defaults?.profile(t);if(o)i.push(n.get(s.id)?.restart?`${s.name} new tabs open with it once ${s.name} restarts — "${o}" is now its default profile`:`${s.name} new tabs open with it — "${o}" is its default profile`)}return i.length>0?i:[`Default ${t} · no terminal is wired to open with it — \`ttheme init\` wires one`]}function tE(t,e){let n=new Map(e.palettes.map((r)=>[r.name,"market"]));for(let r of vc(t,e.palettes,!1))n.set(r.name,"mine");return n}function eE(t,e=!1){let n=J(),r=ut(n),i=new Set(L(n).palettes),s=tE(n,r),o=Mt(Ot(n,r).palettes);if(t)hi(o);let a=ui(t?S0(o,t):o),c=(f)=>s.get(f)??"kept";if(e){let f=a.map((d)=>({name:d.name,group:d.group,...d.catalog?{catalog:d.catalog}:{},installed:i.has(d.name),source:c(d.name)}));console.log(JSON.stringify(f,null,2));return}let u=Math.max(...a.map((f)=>f.name.length),0),l={market:"",mine:" · yours",kept:" · in no market you added"};for(let f of a){let d=f.catalog?`${f.group} / ${f.catalog}`:f.group;console.log(` ${i.has(f.name)?"●":"○"} ${f.name.padEnd(u)} ${d}${l[c(f.name)]}`)}if(process.stdout.isTTY){let f=t?`${a.length} of ${o.length}`:`${o.length}`;console.log(`
733
+ ${f} palettes — ${a.filter((d)=>i.has(d.name)).length} installed`)}}async function nE(){let t=J(),e=Ss(t);if(e.length===0)console.log("No markets to update — `ttheme market add official` brings the ttheme catalog back");let n=(h,m)=>`${_h(h,m)} — kept the copy from the last update`;for(let h of e.filter(ct))try{console.log(` ${py(t,h)}`)}catch(m){console.log(` ${n(h,m)}`)}let r=e.filter((h)=>!ct(h)),i=new Set(r),s=[],o=jr(),a=()=>o.set(`Updating ${[...i].map(Z).join(", ")}${r.length>1?` · ${r.length-i.size}/${r.length}`:""}`);a(),await Promise.all(r.map(async(h)=>{let m=await jh(t,h),$;if("refreshed"in m){$=Gh(m.refreshed);let g=Uh(m.refreshed);if(g)s.push(g)}else $=n(h,m.failure);if(i.delete(h),i.size>0)a();else o.done();o.say(` ${$}`)})),o.done();for(let h of s)console.log(h);if(!LC(Hn(t)))return;for(let h of Wh(t))console.log(` ${h}`);let c=ut(t),u=L(t),l=tE(t,c),f=u.palettes.filter((h)=>!l.has(h)),d=new Map(jn(t).map((h)=>[h.name,h.pictures]));jt(t,c,u);for(let h of f)console.log(` ${h} left its market — ttheme keeps the copy you have`);await Dn(t,Ot(t,c,!1).palettes.filter((h)=>u.palettes.includes(h.name)&&d.has(h.name)).map((h)=>Us(h,d.get(h.name))),u.terminals)}async function Qm(t,e,n,r=!1){let i=process.env.TTHEME_SORT==="series"?t.palettes:ui(t.palettes);hi(i);let s=process.stdout.isTTY===!0,o=zr(process.env,s,J()),a=o?await o.saved():new Map,c=new im({entries:i,scope:n,installed:e,required:r,color:!Lt(),fx:Bu(process.env.TTHEME_FX),onFocus:o?(l)=>process.stdout.write(o.paint(l)):void 0}),u=await c.prompt();if(o)process.stdout.write(o.restore(a));if(u==="cancel")return;return t.palettes.filter((l)=>c.picked.has(l.name)).map((l)=>l.name)}function tp(t,e,n,r){let i=n===z?void 0:oa(t,n),s;try{s=i?.id??zs(t,n)}catch{s=ee(n)?$r(n):Z(n)}return{source:n,id:s,...i?.info.description?{description:i.info.description}:{},shown:Z(n),entries:n===z?Ai(t,n):i?.entries??[],auto:kr(n,e.updates),status:Vh(t,n,r)}}function Xm(t){return t instanceof Error?t.message:String(t)}function BC(t,e,n,r){let i=new Map(r.map((a)=>[a.source,a.id])),s=[],o=(a,c)=>s.push({where:a,message:c});for(let a of Ct(e.markets)){let c=i.get(a)??Z(a),u=n[a],l=na(t,a);if(u&&(l===void 0||u.at>l))s.push({where:c,source:a,update:!0,message:`Update failed ${sa(u.at)}: ${u.error}`});if(a===z)try{Je(GC(Me(t),"utf8"))}catch(f){s.push({where:c,source:a,message:`${Z(Me(t))}: ${Xm(f)}`})}else if(ee(a))if(!_C(He(t,a)))s.push({where:c,source:a,message:"No copy of it yet — `ttheme update` fetches it"});else try{Ln(a,Ye(t,a),Ai(t,z),o)}catch(f){s.push({where:c,source:a,message:`${Z(He(t,a))}: ${Xm(f)}`})}else try{qe(a,ne(Fe(a)),Ai(t,z),(f,d)=>o(Z(f),d))}catch(f){s.push({where:c,message:Xm(f)})}}return s}function UC(t,e,n,r,i){return{refresh:async(s)=>{if(ct(s)){let a=tp(t,e,s,qn());return{market:a,refreshed:{source:s,id:a.id,count:Mt(a.entries).length,change:{added:[],changed:[],gone:[]}}}}let o=await Lh(t,s,Fh);return{market:tp(t,e,s,qn()),refreshed:o}},fetch:async(s)=>{if(ct(s)){let a=Fe(s),c=ne(a);return{source:s,id:c,...a.description?{description:a.description}:{},shown:Z(s),entries:qe(s,c,Ai(t,z),re(!1)),auto:!1,status:"read in place"}}let o=await ia(t,s,void 0,r);return n.set(s,o),{source:s,id:o.id,..."info"in o&&o.info.description?{description:o.info.description}:{},shown:Z(s),entries:o.entries,auto:kr(s,{}),status:"not added yet"}},search:(s)=>Qh(s,r),apply:i}}async function ep(...t){for(let e of await Kh(...t))Lr(e)}function WC(t,e,n){let r=[];for(let i of t.adds){let s=i.source!==z&&(t.auto[i.source]??i.auto);r.push(`Added ${i.id} · ${i.shown} — ${Rt(Mt(i.entries).length)}${s?", updating on its own":""}`)}for(let i of t.removes){let s=e.find((a)=>a.source===i)?.id??i;r.push(`Removed ${s} · ${Z(i)}`);let o=n.filter((a)=>(lt(a)??z)===s);if(o.length>0)r.push(Jh(o))}for(let[i,s]of Object.entries(t.auto)){let o=e.find((a)=>a.source===i);if(o&&!t.removes.includes(i))r.push(`${o.id} ${s?"updates on its own now":"no longer updates on its own"}`)}return r}async function KC(t,e,n,r,i){let s=L(t),o=r.adds.length+r.removes.length+Object.keys(r.auto).length>0;for(let b of r.adds){let y=i.get(b.source);if(y)Ks(t,y)}for(let b of r.removes)Yh(t,b);let a=[...Ct(s.markets).filter((b)=>!r.removes.includes(b)),...r.adds.map((b)=>b.source)],c=ua(s,a,{...s.updates,...r.auto});if(o)Le(t,c);let u=ut(t,!1),l=Ot(t,u,!1).palettes.filter((b)=>r.picked.has(b.name)).map((b)=>b.name),f=s.palettes.filter((b)=>!l.includes(b)),d=l.filter((b)=>!s.palettes.includes(b));if(!o&&d.length===0&&f.length===0){await ep(t,s,e,r.refreshed),Lr("Nothing changed");return}let h={...c,palettes:l};je(t,u,s,h),js(t,u,s.terminals,f);for(let b of WC(r,n,l))Lr(b);for(let b of d)Lr(` + ${b}`);for(let b of f)Lr(` - ${b}`);let m=new Map(e.map((b)=>[b.name,b.pictures])),$=new Set(r.refreshed.flatMap((b)=>[...b.change.changed,...b.change.gone])),g=Ot(t,u,!1).palettes;if(await Dn(t,[...g.filter((b)=>d.includes(b.name)),...g.filter((b)=>l.includes(b.name)&&!d.includes(b.name)&&$.has(b.name)&&m.has(b.name)).map((b)=>Us(b,m.get(b.name)))],h.terminals),d.length>0||f.length>0)gl(h.palettes.length)}async function rE(){let t=I0(process.env),e=J(),n=L(e),r=jn(e),i=qn(),s=Ct(n.markets).map((b)=>tp(e,n,b,i)),o=new Set(s.flatMap((b)=>b.entries.map((y)=>y.name))),a=r.filter((b)=>n.palettes.includes(b.name)&&!o.has(b.name));hi([...s.flatMap((b)=>b.entries),...a]);let c=new Map,u=new AbortController,l=process.stdout.isTTY===!0,f=zr(process.env,l,e),d=f&&!t?await f.saved():new Map,h=Ie(n);if(t)process.stdout.write("\x1B[?2026h");let m=new am({markets:s,kept:a,installed:n.palettes,...h?{startup:h}:{},...t?{hub:t}:{},problems:BC(e,n,i,s),due:Ch(e,n),io:UC(e,n,c,u.signal,(b,y)=>Nk({say:y.say,set:y.status},()=>KC(e,r,s,b,c))),...process.env.TTHEME_SORT==="series"?{}:{order:ui},color:!Lt(),lookups:process.env.TTHEME_MARKET_LOOKUP!=="off",fx:Bu(process.env.TTHEME_FX),owns:l&&!t,...f?{onFocus:(b)=>process.stdout.write(f.paint(b))}:{}});try{await m.run()}finally{if(f?.stop?.(),f&&!t)process.stdout.write(f.restore(d));u.abort()}await m.idle();let $=m.result(),g=m.next();if(t&&g!==void 0)return await ep(e,L(e),r,$.refreshed),g;if(l&&t)process.stdout.write("\x1B[?1049l\x1B[?25h");for(let b of $.refreshed){let y=Bh(b);if(y)console.log(y)}if(m.applied()){for(let y of m.lines())console.log(y);let b=m.failure();if(b)throw b}else await ep(e,L(e),r,$.refreshed),console.log("Nothing changed");return t?Hc:0}import{rmSync as iE}from"node:fs";import{basename as zC,join as Pa}from"node:path";var sE=Pa(import.meta.dirname,".."),DC=Pa(sE,"themes"),np=Pa(sE,"dist"),bl=qt.map((t)=>$n[t].emitter),qC=[Yd,th],AK=bl.map((t)=>t.id);async function wl({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?bl.filter((s)=>t.includes(s.id)):bl,n=rw(DC),r=Zp(n);if(r.length>0){for(let s of r)console.error(` ✗ ${s.theme} [${s.rule}] ${s.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===bl.length)iE(np,{recursive:!0,force:!0});else for(let s of e)iE(Pa(np,s.id),{recursive:!0,force:!0});let i=0;for(let s of[...e,...qC]){let o=n.flatMap((u)=>s.emit?.(u)??[]),a=s.emitShared?.(n)??[];for(let u of[...o,...a])await Bun.write(Pa(np,u.path),u.content),i++;let c=o.length>0?`${n.length} themes${s.limits?` (${s.limits})`:""}`:a.length>0?a.map((u)=>zC(u.path)).join(" "):`no files (${s.limits??"nothing to write"})`;console.log(` ${s.id.padEnd(16)} ${c}`)}console.log(`
734
+ ${n.length} themes (${iw(n).length} in the new-tab rotation) -> ${i} files in dist/`)}import{existsSync as VC,readFileSync as lE}from"node:fs";import{availableParallelism as YC,homedir as oE}from"node:os";var JC=4;async function $l(t,e,n=oE()){let r=kt(q(t)),i=Tr(t),s=new Map(ue(t).palettes.map((f)=>[f.name,br(f)])),o=Object.entries(r.palettes).flatMap(([f,d])=>{let h=s.get(f);return h?d.pictures.filter((m)=>gs(m)||(m.blur??0)!==i).map((m)=>({name:f,key:m.key,paint:h})):[]});if(o.length===0)return 0;e(`Drawing ${o.length} background picture${o.length===1?"":"s"} again${i?` · blur ${i}px`:""}`);let a=xi(L(t).terminals),c=new Cm(Math.min(JC,YC()-1)),u=await c.map(o.map(({name:f,key:d,paint:h})=>({job:"redraw",home:t,user:n,name:f,key:d,paint:h,blur:i,aligns:a})));c.close();let l=[];return u.forEach((f,d)=>{let{name:h,key:m}=o[d];if(f instanceof Error||f===null){e(` ▢ ${h} ${m} — ${f instanceof Error?f.message:"no original to draw it from"}, left as it was`);return}l.push({name:h,picture:f})}),Uf(t,l),Re(t,n),l.length}async function aE(t,e,n,r,i=oE()){let s=kt(q(t)).palettes[e],o=s?.pictures.find((l)=>l.key===(r??s.active));if(!s||!o)throw Error(`${e} has no picture ${r??"shown"}`);if(Ee(o)===n)return{key:o.key,changed:!1};let a=ue(t).palettes.find((l)=>l.name===e);if(!a)throw Error(`no palette called ${e}`);let c=xi(L(t).terminals),u=await Tu(t,e,o.key,br(a),Tr(t),c,i,n);if(!u)throw Error(`${e} ${o.key} has no original to draw it from`);return Uf(t,[{name:e,picture:u}]),Re(t,i),{key:o.key,changed:!0}}function cE(t,e,n){let r=kt(q(t)).palettes[e],i=r?.pictures.find((a)=>a.key===(n??r.active));if(!r||!i)throw Error(`${e} has no picture ${n??"shown"}`);let s=ue(t).palettes.find((a)=>a.name===e);if(!s)throw Error(`no palette called ${e}`);let o=Ee(i)==="original"?"tone":"original";if(!Ck(t,e,i.key,br(s),Tr(t),o))throw Error(`${e} ${i.key} has no original to draw it from`);return{key:i.key,coloring:o}}async function uE(){return await $l(J(),(t)=>process.stderr.write(`${t}
735
+ `)),0}async function fE(t,e,n){let r=J();if(_n(ue(r).palettes,t),e==="show"){if(!n)throw Error("image show needs the picture to show");let{at:i,of:s}=bs(r,t,n);return Re(r),process.stderr.write(`Background · ${t} ${i}/${s} ${n}
736
+ `),0}if(e==="drop"){let{key:i,left:s}=lc(r,t,n);return Re(r),process.stderr.write(`Background · ${t} removed ${i} · ${s} left
737
+ `),0}if(e==="tone"||e==="original"){let i=await aE(r,t,e,n);return process.stderr.write(`Background · ${t} ${i.key} ${e==="tone"?"tinted":"in its own colors"}
738
+ `),0}if(e==="prepare"){let{key:i,coloring:s}=cE(r,t,n);return process.stderr.write(`Background · ${t} ${i} ready in ${s==="tone"?"its tone":"its own colors"}
739
+ `),0}if(e==="tuned")return Re(r),0;throw Error(`unknown image action ${e} — show, drop, tone, original, prepare or tuned`)}function dE(t,e){let n=/^(\d+)x(\d+)$/.exec(t),r=/^(\d+)x(\d+)([+-]\d+)([+-]\d+)$/.exec(e);if(!n||!r)throw Error("a canvas is <width>x<height> and a place <width>x<height>+<x>+<y>");let[i,s]=n.slice(1).map(Number),[o,a,c,u]=r.slice(1).map(Number);return{width:i,height:s,at:{x:c,y:u,w:o,h:a}}}function ZC(t,e,n){let r=dE(e,n),i=Math.min(1,t.width/r.at.w);if(i===1)return r;return{width:Math.max(1,Math.round(r.width*i)),height:Math.max(1,Math.round(r.height*i)),at:{x:Math.round(r.at.x*i),y:Math.round(r.at.y*i),w:t.width,h:t.height}}}function hE(t,e,n,r){let i=Ht(new Uint8Array(lE(t)));return P(e,ln(rb(i,dE(n,r)))),0}function mE(t,e,n,r,i,s,o){let a=Number(r);if(!oe(n)||!Number.isFinite(a))throw Error("flatten needs a #rrggbb background and an opacity from 0 to 1");let c=Ht(new Uint8Array(lE(t))),u=i?ZC(c,i,s??""):void 0,l=cr(ar(c,n,Math.max(0,Math.min(1,a)),u));if(o&&VC(o))Xr(o,e,l);else P(e,l);return 0}import{execFileSync as QC}from"node:child_process";import{readFileSync as XC}from"node:fs";import{arch as tL,platform as kl,release as rp}from"node:os";var eL={ghostty:"ghostty",iterm2:"iTerm.app",wezterm:"WezTerm","terminal-app":"Apple_Terminal",warp:"WarpTerminal"};function nL(t,e){if(t==="konsole"){let r=/^(\d{2})(\d{2})(\d{2})$/.exec(e.KONSOLE_VERSION??"");return r?`${r[1]}.${r[2]}.${Number(r[3])}`:e.KONSOLE_VERSION}let n=eL[t];return n!==void 0&&e.TERM_PROGRAM===n?e.TERM_PROGRAM_VERSION:void 0}function rL(t){let e=Kt(t),n=t.TERM_PROGRAM&&t.TERM_PROGRAM!=="tmux"?t.TERM_PROGRAM:void 0,r=e==="unknown"?`unknown${n?` (TERM_PROGRAM=${n})`:""}`:e==="editor"?`editor (${Gd(t)})`:`${e} ${nL(e,t)??"(version unknown)"}`,i=t.TERM_PROGRAM==="tmux"?t.TERM_PROGRAM_VERSION:void 0;return[r,t.TMUX?`tmux ${i??"yes"}`:"tmux no",t.SSH_CONNECTION||t.SSH_TTY?"ssh yes":"ssh no"].join(" · ")}function pE(t,e){try{return QC(t,e,{encoding:"utf8",timeout:2000,stdio:["ignore","pipe","ignore"]}).trim()}catch{return}}function iL(){let t=tL();if(kl()==="darwin")return`macOS ${pE("sw_vers",["-productVersion"])??`(Darwin ${rp()})`} · ${t}`;if(kl()==="linux"){let e="";try{e=XC("/etc/os-release","utf8")}catch{}return`${/^PRETTY_NAME="?([^"\n]*)"?$/m.exec(e)?.[1]??"Linux"} · linux ${rp()} · ${t}`}return`${kl()==="win32"?"Windows":kl()} ${rp()} · ${t}`}function sL(t){if(t.TTHEME_ZSH)return`zsh ${t.TTHEME_ZSH}`;return(t.SHELL?pE(t.SHELL,["--version"])?.split(`
740
+ `)[0]:void 0)??t.SHELL??"unknown"}function oL(t){try{let{terminals:e}=L(t);return e.length>0?e.join(", "):"none"}catch{return"installed.json missing or unreadable"}}function aL(t){let e=tu.flatMap((n)=>{let r=t[n];return r===void 0||r===Do(n)?[]:[`${n}=${/\s/.test(r)?JSON.stringify(r):r}`]});return e.length>0?e.join(" "):void 0}function gE(){let t=process.env,n=[["ttheme",It.version],["OS",iL()],["Shell",sL(t)],["Terminal",rL(t)],["Wired",oL(J())],["Settings",aL(t)]].filter((i)=>i[1]!==void 0),r=Math.max(...n.map(([i])=>i.length));for(let[i,s]of n)console.log(`${i.padEnd(r)} ${s}`)}import{execFileSync as cL,spawnSync as uL}from"node:child_process";import{chmodSync as lL,copyFileSync as fL,existsSync as zi,mkdirSync as bE,readdirSync as dL,readFileSync as vl,rmSync as ip}from"node:fs";import{homedir as hL}from"node:os";import{dirname as oo,join as mt}from"node:path";function mL(t,e,n){for(let r of dL(e))t.push({from:mt(e,r),to:mt(n,r)})}function cp(t){return Je(vl(mt(t,"dist","manifest.json"),"utf8"))}function yl(t,e){let n=mt(e.configHome,"ttheme"),r=[{from:mt(e.root,"bin","ttheme.js"),to:mt(n,"ttheme.js")},{from:mt(e.root,"bin","ttheme.js.map"),to:mt(n,"ttheme.js.map")},{from:mt(e.root,"shell","ttheme.zsh"),to:mt(n,"ttheme.zsh")},{from:mt(e.root,"shell","preview.zsh"),to:mt(n,"preview.zsh")},{from:mt(e.root,"shell","launch-tab.zsh"),to:mt(n,"launch-tab.zsh"),executable:!0}];mL(r,mt(e.root,"shell","adapters"),mt(n,"adapters"));let i=[{file:mt(e.zdotdir,".zshrc"),block:d$(n)}],s=mt(n,"config.zsh"),o=m$(zi(s)?vl(s,"utf8"):""),a={file:s,content:t.warpFast===void 0?o:ru(o,"TTHEME_WARP_FAST",t.warpFast?"on":"off")},c={terminals:t.terminals,palettes:t.palettes,...Object.fromEntries(pt(t.terminals).flatMap((f)=>Object.entries(f.installs?.(e)??{}).filter(([,d])=>d!==void 0))),...t.off?{off:!0}:{}},u=Su(e.configHome,c,e.home),l=e.stateDir?[mt(e.stateDir,"ghostty",".blind")]:[];return{home:e.home,copies:r,edits:i,settings:a,forget:l,catalog:cp(e.root),installed:c,notes:u}}function $E(t){try{return L(t)}catch{return}}function kE(t,e){try{return Ot(t,ut(t,!1,e),!1).palettes}catch{return[]}}function pL(t,e){let n=cp(e.root),r=Ct(t.markets).includes(z)?n.palettes:[],i=new Set(r.map((o)=>o.name)),s=kE(e.configHome,n).filter((o)=>!i.has(o.name)&&(lt(o.name)!==void 0||t.palettes.includes(o.name)));return{...n,palettes:[...r,...s]}}function yE(t,e){let n=Oi(t);return n&&e.includes(n)?n:void 0}function gL(t,e,n){let r=yl(e,n),i=yE(t,e.palettes),s=new Set(["terminals","palettes","off","startup",...qt.flatMap((a)=>Object.keys($n[a].installs?.(n)??{}))]),o=Object.fromEntries(Object.entries(t).filter(([a])=>!s.has(a)));return{...r,installed:{...o,...r.installed,...i?{startup:i}:{}}}}function bL(t,e){let n=yl({terminals:t.terminals,palettes:t.palettes,off:t.off},e),r=new Set([...n.catalog.palettes,...kE(e.configHome,n.catalog)].map((l)=>l.name)),i=t.palettes.filter((l)=>r.has(l)),s=t.palettes.filter((l)=>!r.has(l)),{startup:o,...a}=t,c={...a,palettes:i,...o&&i.includes(o)?{startup:o}:{}},u=s.length>0?[`Dropped ${s.join(", ")} — no longer in the catalog`,...n.notes]:n.notes;return{...n,installed:c,notes:u}}function wL(t){try{return cL(process.execPath,[mt(t,"ttheme","ttheme.js"),"--version"],{encoding:"utf8",stdio:["ignore","pipe","ignore"]}).trim()||void 0}catch{return}}function vE(t){let e=Ie(t);return[pt(t.terminals).map((n)=>n.name).join(", "),`${t.palettes.length} palettes`,e?`default ${e}`:"no default — ttheme is off"].join(" · ")}function sp(t,e=Ze()){for(let o of t.copies)if(bE(oo(o.to),{recursive:!0}),ip(o.to,{force:!0}),ip(`${o.to}.zwc`,{force:!0}),fL(o.from,o.to),o.executable)lL(o.to,493);P(t.settings.file,t.settings.content);for(let o of t.forget)ip(o,{force:!0});let n=oo(oo(t.settings.file)),r=$E(n),i=Object.fromEntries(pt(t.installed.terminals).flatMap((o)=>{let a=o.defaults?.key,c=a?r?.[a]:void 0;return a&&c?[[a,c]]:[]})),s=ta(n,{...t.installed,...i},e,t.home);if(Ct(s.markets).includes(z))Oc(n,t.catalog);Le(n,s),jt(n,ut(n),s,t.home,e);for(let o of t.edits){bE(oo(o.file),{recursive:!0});let a=zi(o.file)?vl(o.file,"utf8"):"";an(o.file,Ir(a,o.block))}return Ii(n,s,!0,e,t.home)}function Ha(t){if(fe(t))throw Mr("Nothing changed"),new Ne;return t}function op(t,e){return qt.filter((n)=>$n[n].offered(t,e))}async function $L(t,e,n,r){return Ha(await e$({message:"Wire which terminals?",options:op(n,r).map((i)=>({value:i,label:$n[i].name,hint:i===t?"detected":void 0})),initialValues:e,required:!0}))}async function kL(t){return Ha(await Ve({message:"Switch Warp to each tab's palette in about 0.2 s instead of 0.6 s?\nAbout 8% CPU while Warp is in front with tabs of different palettes — `ttheme config` changes it",initialValue:eu(t,"TTHEME_WARP_FAST")!=="off"}))}function ap(t){let e=[...t.copies.filter((n)=>!zi(n.to)).map((n)=>n.to),...zi(t.settings.file)?[]:[t.settings.file],...t.edits.filter((n)=>!vl(n.file,"utf8").includes("# ttheme begin")).map((n)=>n.file)];if(e.length>0)throw Error(`init left gaps:
751
741
  ${e.join(`
752
- `)}`)}function z1(t,e){return[...new Set(t.palettes.filter((n)=>e.includes(n.name)).map((n)=>n.group))]}function RC(t,e,n){let r=t.palettes.find((o)=>o.name===Me(e)),i=process.stdout.isTTY===!0,s=r&&Kr(process.env,i,n)?.wear(r,e.terminals);if(s===void 0)return!1;return process.stdout.write(s),!0}function TC(t,e){let n=Me(t);if(!n)return["Default none — new tabs keep the terminal colors",`Turn on \`ttheme on\` wears ${vi(t)}`];return[`Default ${n}${e?" — this tab wears it already":""}`,"Change it `ttheme preview`, enter on a palette, then default"]}function PC(t){wC("zsh",["-c",'source "$1" && __tt_preview init',"zsh",mt(t,"ttheme","ttheme.zsh")],{stdio:"inherit"})}function HC(t,e,n,r){let i=z1(t.catalog,e.palettes);dn([`${i.join(", ")} (${e.palettes.length})`,...TC(t.installed,n)].join(`
753
- `),`Installed ${e.palettes.length} palettes`),dn(["exec zsh The ttheme command in this tab",...Ym(t,r)].join(`
754
- `),"Next"),Lo("Done")}function Ym(t,e){return[...bu(eo(eo(t.settings.file)),t.installed,e,t.home),...t.notes]}function D1(t){return t?(e)=>Sr.step(e):(e)=>console.log(e)}async function _1(t,e,n,r){let i=OC(t,e),s=Km(i,n);Dm(i),await dl(e.configHome,D1(r),e.home);let o=["exec zsh Open tabs run the new layer — new tabs already do",...Ym(i,s)],a=`Updated to ${xt.version} — kept ${K1(i.installed)}`;if(!r){console.log([a,...o].join(`
755
- `));return}dn(o.join(`
756
- `),a),Lo("Done")}function AC(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}`),...Ym(t,e),"No palettes yet — open a new shell (`exec zsh`), then `ttheme browse` picks them from the catalog"];console.log(n.join(`
757
- `))}async function q1(t={}){let e=mt(import.meta.dirname,"..");if(!_i(mt(e,"bin","ttheme.js")))throw Error("bin/ttheme.js is missing — run `mise run bin:build` first");if(!_i(mt(e,"dist"))){if(typeof Bun>"u")throw Error("this package is missing dist/ — reinstall @kecan0406/ttheme");await fl()}let n=vC(),r=J(),i=process.env.ZDOTDIR??n,s=De(),o=q$(s),a=process.env.WT_PROFILE_ID,c={root:e,home:n,configHome:r,zdotdir:i,stateDir:mt(process.env.XDG_STATE_HOME??mt(n,".local","state"),"ttheme"),...o?{wtHome:o}:{},...a?{wtProfile:a}:{}},u=Ut(process.env),l=zm(c,s).filter((R)=>R===u||mn[R].present(c));if(!t.yes&&(process.stdin.isTTY!==!0||process.stdout.isTTY!==!0))throw Error("init asks before it edits your configs — run it in a terminal, or pass --yes to accept the defaults");let f=B1(r);if(t.yes&&f){await _1(f,c,s,!1);return}if(t.yes){if(l.length===0)throw Error(`no supported terminal detected — run this inside ${pt(zm(c,s)).map((B)=>B.name.toLowerCase()).join(", ").replace(/, ([^,]*)$/," or $1")}`);let F=ml({terminals:l,palettes:[]},c),j=Km(F,s);Dm(F),AC(F,j);return}if(Lc("ttheme init"),f){let R=IC(r);if(Ia(await ze({message:`ttheme${R?` ${R}`:""} is installed — ${K1(f)}
758
- ${R===xt.version?"Reinstall":"Update to"} ${xt.version} and keep all of it?`,active:"Yes",inactive:"No, set it up again",initialValue:!0}))){await _1(f,c,s,!0);return}}let d=await xC(u,f?.terminals??l,c,s),h=d.includes("warp")?await NC(r):void 0,p=f?EC(f,c):qm(e),$=f?await jm(p,f.palettes,"palette",!0):await jm(p,[],"series",!0);if(!$)throw Er("Nothing changed"),new Ie;let g=(f&&U1(f,$))??$[0],b=$.length>1&&(ae[u].paints||u==="warp"&&d.includes("warp")&&_i(Ar(n,r))),y=Ia(await ze({message:b?"Pick a default palette in ttheme preview once installed?":`Wear ${g} in every tab?`,initialValue:f?!f.off:!0})),S={terminals:d,palettes:$,off:!y,warpFast:h},E=f?MC(f,S,c):ml(S,c);if(dn([`Install ${$.length} palettes — ${z1(p,$).join(", ")}`,`Copy ${E.copies.length} files under ${r}`,`Write ${E.settings.file}`,...E.edits.map((R)=>`Edit ${R.file} — a ttheme block: source ttheme.zsh`),...pu(r,E.installed,n),"Each config is backed up once to <file>.ttheme.bak before the first edit — `npx @kecan0406/ttheme uninstall` takes it all out",y?b?`Open ttheme preview — every tab wears the palette picked there, ${g} until then`:`Paint every tab with ${g}, this one now`:"Leave the terminal colors as they are — `ttheme on` wears a palette later",...y&&g?pt(d).flatMap((R)=>R.defaults?[`Make "${R.defaults.profile(g)}" the ${R.name} default profile`]:[]):[]].join(`
759
- `),`Wiring ${pt(d).map((R)=>R.name).join(", ")}`),!Ia(await ze({message:"Apply these changes?"})))throw Er("Nothing changed"),new Ie;let I=Km(E,s);if(Dm(E),await dl(r,D1(!0),n),y&&b)PC(r);let N=_(r);HC({...E,catalog:p,installed:N},S,RC(p,N,r),I)}import{spawn as FC}from"node:child_process";import{createHash as CC}from"node:crypto";import{existsSync as Jm,mkdirSync as LC,readFileSync as jC,statSync as GC,utimesSync as _C,writeFileSync as BC}from"node:fs";import{homedir as Z1}from"node:os";import{join as Q1}from"node:path";import{gunzipSync as WC}from"node:zlib";var Y1="https://github.com/kecan0406/aninames/releases/latest/download",X1=86400000,UC=3600000,KC=120000;function tS(t){return Q1(hr(t),".checked")}function zC(t=process.env){return t.TTHEME_NAMES!=="off"}function DC(t){try{return Date.now()-GC(tS(t)).mtimeMs>=X1}catch{return!0}}function Vm(t,e){let n=tS(t);if(LC(hr(t),{recursive:!0}),!Jm(n))BC(n,"");_C(n,e/1000,e/1000)}function eS(t=Z1()){if(!zC()||!DC(t))return;try{Vm(t,Date.now()),FC(process.execPath,[process.argv[1],"names"],{detached:!0,stdio:"ignore",env:process.env}).unref()}catch{}}function J1(t){return CC("sha256").update(t).digest("hex")}async function V1(t){let e=await fetch(t,{signal:AbortSignal.timeout(KC)});if(!e.ok)throw Error(`${t} answered ${e.status}`);return new Uint8Array(await e.arrayBuffer())}async function nS(t=Z1()){let e=hr(t);try{let r=JSON.parse(new TextDecoder().decode(await V1(`${Y1}/ttheme.json`)));for(let[i,{file:s,sha256:o}]of Object.entries(r.layers)){let a=Q1(e,`ttheme-${i}.json`);if(Jm(a)&&J1(jC(a))===o)continue;let c=WC(await V1(`${Y1}/${s}`));if(J1(c)!==o)throw Error(`${s} does not match its hash`);H(a,c)}Vm(t,Date.now())}catch{return Vm(t,Date.now()-X1+UC),1}fc(t);let n=J();if(Jm(ve(n)))ui(ie(n).palettes,t),X$(n,t);return 0}import{createInterface as qC}from"node:readline";var YC="\x1F",Zm="\x1E",JC=new Set(["up","down","left","right","home","end","pgup","pgdn","tab","shift-tab","shift-left","shift-right","enter","esc","backspace","ctrl-c"]);function VC([t="",e="",n="",r=""]){if(t!=="press"&&t!=="drag"&&t!=="release"&&t!=="wheel"||!/^\d+$/.test(e)||!/^\d+$/.test(n)||!/^-?\d+$/.test(r))return;return{kind:"mouse",action:t,button:t==="wheel"?void 0:"left",wheel:t==="wheel"?Number(r)<0?-1:1:0,sideways:!1,row:Number(e),col:Number(n),shift:!1,alt:!1,ctrl:!1,count:t==="press"||t==="release"?Number(r):0}}function rS(t){return{background:t.background,foreground:t.foreground,cursor:t.cursor,selection:t.selection,ansi:t.ansi}}class iS{editor;base;cols=Im;rows=xm;focused=!0;home;name;color;shown="";tints=new $a;pointer=new Fo;drawn={key:"",recolors:!1,look:""};constructor(t,e,n){this.home=t,this.name=e,this.color=n,this.base=Hn(di(t,lt(t),!1).palettes,e);let r=vs(this.base,Tn(t)[e]);this.editor=new ba({title:"Tone",name:e,colors:rS(r),original:rS(this.base),variant:"theme",signature:r.signatureSlots,...r.waived?{waive:r.waived}:{},check:()=>{return}})}save(){try{let t=Vf(this.base,this.editor.list);qw(this.home,Yw(Tn(this.home),this.name,t)),Ct(this.home,lt(this.home),_(this.home)),this.editor.markSaved();return}catch(t){return t instanceof Error?t.message:String(t)}}close(){this.tints.clear()}pictures(){try{return vt(D(this.home)).palettes[this.name]?.pictures??[]}catch{return[]}}draft(){let t=this.editor.dirty(),e=`${t}
742
+ `)}`)}function EE(t,e){return[...new Set(t.palettes.filter((n)=>e.includes(n.name)).map((n)=>n.group))]}function yL(t,e,n){let r=t.palettes.find((o)=>o.name===Ie(e)),i=process.stdout.isTTY===!0,s=r&&zr(process.env,i,n)?.wear(r,e.terminals);if(s===void 0)return!1;return process.stdout.write(s),!0}function vL(t,e){let n=Ie(t);if(!n)return["Default none — new tabs keep the terminal colors",`Turn on \`ttheme on\` wears ${Oi(t)}`];return[`Default ${n}${e?" — this tab wears it already":""}`,"Change it `ttheme preview`, enter on a palette, then default"]}function EL(t){uL("zsh",["-c",'source "$1" && __tt_preview init',"zsh",mt(t,"ttheme","ttheme.zsh")],{stdio:"inherit"})}function SL(t,e,n,r){let i=EE(t.catalog,e.palettes);bn([`${i.join(", ")} (${e.palettes.length})`,...vL(t.installed,n)].join(`
743
+ `),`Installed ${e.palettes.length} palettes`),bn(["exec zsh The ttheme command in this tab",...up(t,r)].join(`
744
+ `),"Next"),Go("Done")}function up(t,e){return[...Mu(oo(oo(t.settings.file)),t.installed,e,t.home),...t.notes]}function SE(t){return t?(e)=>Sr.step(e):(e)=>console.log(e)}async function wE(t,e,n,r){let i=bL(t,e),s=sp(i,n);ap(i),await $l(e.configHome,SE(r),e.home);let o=["exec zsh Open tabs run the new layer — new tabs already do",...up(i,s)],a=`Updated to ${It.version} — kept ${vE(i.installed)}`;if(!r){console.log([a,...o].join(`
745
+ `));return}bn(o.join(`
746
+ `),a),Go("Done")}function ML(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}`),...up(t,e),"No palettes yet — open a new shell (`exec zsh`), then `ttheme browse` picks them from the catalog"];console.log(n.join(`
747
+ `))}async function ME(t={}){let e=mt(import.meta.dirname,"..");if(!zi(mt(e,"bin","ttheme.js")))throw Error("bin/ttheme.js is missing — run `mise run bin:build` first");if(!zi(mt(e,"dist"))){if(typeof Bun>"u")throw Error("this package is missing dist/ — reinstall @kecan0406/ttheme");await wl()}let n=hL(),r=J(),i=process.env.ZDOTDIR??n,s=Ze(),o=bk(s),a=process.env.WT_PROFILE_ID,c={root:e,home:n,configHome:r,zdotdir:i,stateDir:mt(process.env.XDG_STATE_HOME??mt(n,".local","state"),"ttheme"),...o?{wtHome:o}:{},...a?{wtProfile:a}:{}},u=Kt(process.env),l=op(c,s).filter((N)=>N===u||$n[N].present(c));if(!t.yes&&(process.stdin.isTTY!==!0||process.stdout.isTTY!==!0))throw Error("init asks before it edits your configs — run it in a terminal, or pass --yes to accept the defaults");let f=$E(r);if(t.yes&&f){await wE(f,c,s,!1);return}if(t.yes){if(l.length===0)throw Error(`no supported terminal detected — run this inside ${pt(op(c,s)).map((B)=>B.name.toLowerCase()).join(", ").replace(/, ([^,]*)$/," or $1")}`);let F=yl({terminals:l,palettes:[]},c),_=sp(F,s);ap(F),ML(F,_);return}if(zc("ttheme init"),f){let N=wL(r);if(Ha(await Ve({message:`ttheme${N?` ${N}`:""} is installed — ${vE(f)}
748
+ ${N===It.version?"Reinstall":"Update to"} ${It.version} and keep all of it?`,active:"Yes",inactive:"No, set it up again",initialValue:!0}))){await wE(f,c,s,!0);return}}let d=await $L(u,f?.terminals??l,c,s),h=d.includes("warp")?await kL(r):void 0,m=f?pL(f,c):cp(e),$=f?await Qm(m,f.palettes,"palette",!0):await Qm(m,[],"series",!0);if(!$)throw Mr("Nothing changed"),new Ne;let g=(f&&yE(f,$))??$[0],b=$.length>1&&(de[u].paints||u==="warp"&&d.includes("warp")&&zi(Fr(n,r))),y=Ha(await Ve({message:b?"Pick a default palette in ttheme preview once installed?":`Wear ${g} in every tab?`,initialValue:f?!f.off:!0})),E={terminals:d,palettes:$,off:!y,warpFast:h},S=f?gL(f,E,c):yl(E,c);if(bn([`Install ${$.length} palettes — ${EE(m,$).join(", ")}`,`Copy ${S.copies.length} files under ${r}`,`Write ${S.settings.file}`,...S.edits.map((N)=>`Edit ${N.file} — a ttheme block: source ttheme.zsh`),...Eu(r,S.installed,n),"Each config is backed up once to <file>.ttheme.bak before the first edit — `npx @kecan0406/ttheme uninstall` takes it all out",y?b?`Open ttheme preview — every tab wears the palette picked there, ${g} until then`:`Paint every tab with ${g}, this one now`:"Leave the terminal colors as they are — `ttheme on` wears a palette later",...y&&g?pt(d).flatMap((N)=>N.defaults?[`Make "${N.defaults.profile(g)}" the ${N.name} default profile`]:[]):[]].join(`
749
+ `),`Wiring ${pt(d).map((N)=>N.name).join(", ")}`),!Ha(await Ve({message:"Apply these changes?"})))throw Mr("Nothing changed"),new Ne;let x=sp(S,s);if(ap(S),await $l(r,SE(!0),n),y&&b)EL(r);let R=L(r);SL({...S,catalog:m,installed:R},E,yL(m,R,r),x)}import{spawn as OL}from"node:child_process";import{createHash as xL}from"node:crypto";import{existsSync as lp,mkdirSync as IL,readFileSync as RL,statSync as NL,utimesSync as TL,writeFileSync as AL}from"node:fs";import{homedir as RE}from"node:os";import{join as NE}from"node:path";import{gunzipSync as PL}from"node:zlib";var OE="https://github.com/kecan0406/aninames/releases/latest/download",TE=86400000,HL=3600000,FL=120000;function AE(t){return NE(wr(t),".checked")}function CL(t=process.env){return t.TTHEME_NAMES!=="off"}function LL(t){try{return Date.now()-NL(AE(t)).mtimeMs>=TE}catch{return!0}}function fp(t,e){let n=AE(t);if(IL(wr(t),{recursive:!0}),!lp(n))AL(n,"");TL(n,e/1000,e/1000)}function PE(t=RE()){if(!CL()||!LL(t))return;try{fp(t,Date.now()),OL(process.execPath,[process.argv[1],"names"],{detached:!0,stdio:"ignore",env:process.env}).unref()}catch{}}function xE(t){return xL("sha256").update(t).digest("hex")}async function IE(t){let e=await fetch(t,{signal:AbortSignal.timeout(FL)});if(!e.ok)throw Error(`${t} answered ${e.status}`);return new Uint8Array(await e.arrayBuffer())}async function HE(t=RE()){let e=wr(t);try{let r=JSON.parse(new TextDecoder().decode(await IE(`${OE}/ttheme.json`)));for(let[i,{file:s,sha256:o}]of Object.entries(r.layers)){let a=NE(e,`ttheme-${i}.json`);if(lp(a)&&xE(RL(a))===o)continue;let c=PL(await IE(`${OE}/${s}`));if(xE(c)!==o)throw Error(`${s} does not match its hash`);P(a,c)}fp(t,Date.now())}catch{return fp(t,Date.now()-TE+HL),1}wc(t);let n=J();if(lp(Me(n)))hi(ue(n).palettes,t),Ek(n,t);return 0}import{createInterface as jL}from"node:readline";var _L="\x1F",dp="\x1E",GL=new Set(["up","down","left","right","home","end","pgup","pgdn","tab","shift-tab","shift-left","shift-right","enter","esc","backspace","ctrl-c"]);function BL([t="",e="",n="",r=""]){if(t!=="press"&&t!=="drag"&&t!=="release"&&t!=="wheel"||!/^\d+$/.test(e)||!/^\d+$/.test(n)||!/^-?\d+$/.test(r))return;return{kind:"mouse",action:t,button:t==="wheel"?void 0:"left",wheel:t==="wheel"?Number(r)<0?-1:1:0,sideways:!1,row:Number(e),col:Number(n),shift:!1,alt:!1,ctrl:!1,count:t==="press"||t==="release"?Number(r):0}}function FE(t){return{background:t.background,foreground:t.foreground,cursor:t.cursor,selection:t.selection,ansi:t.ansi}}class CE{editor;base;cols=Bm;rows=Um;focused=!0;home;name;color;shown="";tints=new Oa;pointer=new jo;drawn={key:"",recolors:!1,look:""};constructor(t,e,n){this.home=t,this.name=e,this.color=n,this.base=_n(gi(t,ut(t),!1).palettes,e);let r=xs(this.base,pn(t)[e]);this.editor=new Sa({title:"Tone",name:e,colors:FE(r),original:FE(this.base),variant:"theme",signature:r.signatureSlots,...r.waived?{waive:r.waived}:{},check:()=>{return}})}save(){try{let t=fd(this.base,this.editor.list);ld(this.home,m0(pn(this.home),this.name,t)),jt(this.home,ut(this.home),L(this.home)),this.editor.markSaved();return}catch(t){return t instanceof Error?t.message:String(t)}}close(){this.tints.clear()}pictures(){try{return kt(q(this.home)).palettes[this.name]?.pictures??[]}catch{return[]}}draft(){let t=this.editor.dirty(),e=`${t}
760
750
  ${this.shown}
761
- ${this.editor.list.join(" ")}`;if(e!==this.drawn.key){let n=this.pictures(),r=dr(vs(this.base,Vf(this.base,this.editor.list))),i=this.shown?Qu(n,this.shown):void 0,s={name:this.name,...this.editor.colors(),waived:this.editor.waive},o=i?Zu(i,this.shown,s,this.editor.signature,this.tints):void 0;this.drawn={key:e,recolors:t&&n.some((a)=>ec(a,r)),look:o?`${o.image}${Zm}${o.opacity}`:""}}return this.drawn}frame(t="ok",e){let n=xv(this.editor),r=this.editor.act??"-";this.editor.act=void 0;let{drawn:i,targets:s}=Ec(()=>Nv(this.editor,this.cols,this.rows,this.color,this.focused)),{lines:o,zones:a}=Mc(i.lines,s);this.pointer.zones=a;let{recolors:c,look:u}=this.draft();return[t,r,n.mode,this.editor.dirty()?"1":"0",this.editor.shown().join(" "),n.keys.map(([l])=>l).join(Zm),n.keys.map(([,l])=>l).join(Zm),e??n.note,String(i.at),c?"1":"0",u,...o].join(YC)}handle(t){let[e="",...n]=t.split(" "),r=n.join(" ");if(e==="quit")return;if(e==="size"){let[i,s]=r.split(" ").map(Number);this.cols=Math.max(30,i??Im),this.rows=Math.max(10,s??xm)}else if(e==="focus")this.focused=r==="1";else if(e==="show")this.shown=r;else if(e==="key"&&JC.has(r))this.editor.press(r);else if(e==="ch"){let i=Number(r),s=Number.isInteger(i)&&i>0&&i<=1114111?Gh(String.fromCodePoint(i)):void 0;if(s)this.editor.press(s)}else if(e==="mouse"){let i=VC(n);if(i)Nm(this.editor,this.pointer.point(i),i)}else if(e==="save"){let i=this.save();return i===void 0?this.frame("saved","Saved"):this.frame("error",i)}return this.frame()}}async function sS(t){let e=new iS(J(),t,process.env.NO_COLOR===void 0);process.once("exit",()=>e.close()),process.once("SIGTERM",()=>process.exit(0));let n=qC({input:process.stdin});for await(let r of n){let i=e.handle(r);if(i===void 0)break;process.stdout.write(`${i}
762
- `)}return n.close(),process.stdin.destroy(),e.close(),0}import{existsSync as oS,rmSync as ZC,utimesSync as QC}from"node:fs";import{homedir as XC}from"node:os";import{join as xa}from"node:path";function tL(t){try{return _(t)}catch{return}}function eL(t){let{home:e,configHome:n}=t,r=tL(n),i={configHome:n,home:e},s=pt(Dt),o=s.map((c)=>c.unwire(i,r)),a=[xa(n,"ttheme"),t.cacheDir,t.stateDir];return{edits:[...hn(xa(t.zdotdir,".zshrc"),xr),...o.flatMap((c)=>c.edits)],removals:[...s.flatMap((c)=>c.shelf?Is(c.shelf.dir(i)):[]),...o.flatMap((c)=>c.removals),...a.filter((c)=>oS(c))],touches:o.flatMap((c)=>c.touches),...r?{state:r}:{}}}function nL(t,e,n=De()){let r=[];for(let{file:s,content:o}of t.edits){let a=Bp(s,o);r.push(a==="removed"?`Removed ${s} — ttheme had created it`:a==="restored"?`Took ttheme out of ${s}`:`Took ttheme out of ${s} — kept ${s}.ttheme.bak, since the file changed after ttheme's first edit`)}if(t.state){let s=Ei(e.configHome,{...t.state,off:!0,palettes:[]},!1,n,e.home);for(let o of pt(t.state.terminals))if(s.has(o.id))r.push(`Gave ${o.name} its own default profile back — it takes it at its next start`)}for(let s of t.removals)ZC(s,{recursive:!0,force:!0});if(t.removals.length>0)r.push(`Deleted ${t.removals.length} files and folders ttheme wrote`);let i=new Date;for(let s of t.touches)QC(s,i,i);return r}function rL(){let t=XC();return{home:t,configHome:J(),zdotdir:process.env.ZDOTDIR??t,cacheDir:ar(),stateDir:xa(process.env.XDG_STATE_HOME??xa(t,".local","state"),"ttheme")}}async function aS(t=!1){let e=rL(),n=eL(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=xa(e.configHome,"ttheme");Lc("ttheme uninstall"),dn([...n.edits.map((s)=>`Take ttheme out of ${s.file}`),...n.removals.map((s)=>s===r?`Delete ${s} — settings, pins, every installed picture${oS(dc(e.configHome))?`, and your markets under ${dc(e.configHome)} (push them to GitHub first to keep them)`:""}`:`Delete ${s}`)].join(`
763
- `),"Uninstall");let i=await ze({message:"Remove ttheme?"});if(oe(i)||!i)throw Er("Nothing changed"),new Ie}for(let r of nL(n,e))console.log(r);console.log("Open tabs keep their colors until they close — restart your terminal to drop ttheme everywhere")}import{homedir as iL}from"node:os";async function cS(t){if(!Dt.includes(t))throw Error(`no terminal ${t} — one of ${Dt.join(", ")}`);let e=t,n=mn[e],r=J(),i=iL(),s=De(),o=_(r);if(o.terminals.includes(e))return console.log(`${n.name} is wired already`),0;let a={configHome:r,home:i};if(!n.offered(a,s))throw Error(`${n.name} cannot be wired on this system`);if(process.stdin.isTTY!==!0||process.stdout.isTTY!==!0)throw Error("wire asks before it edits your configs — run it in a terminal");let c={...o,...n.installs?.(a)??{},terminals:[e]};dn([...pu(r,c,i),...gu(r,c,i),"Each config is backed up once to <file>.ttheme.bak before the first edit — `npx @kecan0406/ttheme uninstall` takes it all out"].join(`
764
- `),`Wiring ${n.name}`);let u=await ze({message:`Wire ${n.name} now?`,initialValue:!1});if(oe(u)||!u)throw Er("Nothing changed"),new Ie;let l=Zo(r,c,s,i),f={...l,terminals:[...o.terminals,e]};Ae(r,f),Ct(r,lt(r),f,i,s);let d=Ei(r,l,!0,s,i),h=bu(r,l,d,i);if(h.length>0)dn(h.join(`
765
- `),"Next");return Lo(`Wired ${n.name}`),0}var oL=new Set(["add","remove","market","default","on","off"]),aL={default:([t])=>b1(t),on:()=>w1(),off:()=>$1(),browse:()=>M1(),list:([t],{json:e})=>v1(t,e),add:(t,{market:e})=>p1(t,e),remove:(t)=>g1(t),update:()=>S1(),market:([t,e])=>Fk(t,e),new:([t],{from:e,in:n})=>l1(t,e,n),edit:([t])=>f1(t),check:([t],{fix:e})=>h1(t,e),share:([t],{tone:e})=>m1(t,e),init:(t,{yes:e})=>q1({yes:e}),uninstall:(t,{yes:e})=>aS(e),wire:([t])=>cS(t),info:()=>j1(),build:(t,{only:e})=>fl({only:e}),find:([t])=>Yv(t),image:([t,e,n])=>H1(t,e,n),redraw:()=>T1(),names:()=>nS(),tone:([t])=>sS(t),flatten:([t,e,n,r,i,s,o])=>C1(t,e,n,r,i,s,o),bake:([t,e,n,r])=>F1(t,e,n,r)},cL=Bo.map((t)=>({...t,run:aL[t.name]}));class Bi extends Error{verb;constructor(t,e){super(t);this.verb=e}}function uS(t){let e=cL.find((n)=>n.name===t);if(!e)throw new Bi(t.startsWith("-")?`unknown option '${t}'`:`unknown command '${t}'`);return e}function uL(t,e){let n={help:{type:"boolean",short:"h"}};for(let[r,{type:i,short:s,multiple:o}]of Object.entries(t.flags??{}))n[r]={type:i,multiple:o===!0,...s?{short:s}:{}};try{return sL({args:e,options:n,allowPositionals:!0})}catch(r){let[i=""]=(r instanceof Error?r.message:String(r)).split(". ");throw new Bi(`${i.charAt(0).toLowerCase()}${i.slice(1)}`,t)}}function lL(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"){if(n[0]===void 0||n[0]==="all")return{kind:"help",all:n[0]==="all",code:0};return{kind:"help",verb:uS(n[0]),code:0}}let r=uS(e),i=uL(r,n);if(i.values.help)return{kind:"help",verb:r,code:0};for(let[l,{choices:f}]of Object.entries(r.flags??{}))for(let d of[i.values[l]??[]].flat())if(f&&!f.includes(String(d)))throw new Bi(`--${l} takes ${f.join(", ")} — not ${d}`,r);let s=i.positionals,o=r.args.filter((l)=>l.startsWith("<")).length,a=r.args.some((l)=>l.includes("..."))?Number.POSITIVE_INFINITY:r.args.length;if(s.length<o)throw new Bi(`missing ${r.args[s.length]}`,r);if(s.length>a)throw new Bi(`too many arguments: ${s.slice(a).join(" ")}`,r);let{help:c,...u}=i.values;return{kind:"run",verb:r,args:s,flags:u}}function lS(t){let e=Math.max(0,...t.map(([n])=>n.length));return t.map(([n,r])=>` ${n.padEnd(e)} ${r}`)}function Qm(t,e=!1){if(!t)return Wo(e);let n=Object.entries(t.flags??{}).map(([r,{short:i,value:s,about:o}])=>[`${i?`-${i}, `:""}--${r}${s?` ${s}`:""}`,o]);return[`Usage: ttheme ${_o(t)}`,"",t.about,...t.actions?["","Actions:",...lS(t.actions)]:[],...n.length>0?["","Options:",...lS(n)]:[]].join(`
766
- `)}var fL=[TypeError,RangeError,ReferenceError,SyntaxError];function dL(t){return fL.some((e)=>t instanceof e)||t instanceof Error&&"code"in t}async function fS(t){let e;try{let n=lL(t);if(n.kind==="version")return console.log(xt.version),0;if(n.kind==="help"){if(n.code===0)console.log(Qm(n.verb,n.all));else console.error(Qm(n.verb,n.all));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");if(oL.has(n.verb.name))await $k();let r=await n.verb.run(n.args,n.flags);if(!n.verb.hidden&&n.verb.name!=="uninstall")eS();return typeof r==="number"?r:0}catch(n){if(n instanceof Bi)return console.error(n.verb?`ttheme ${n.verb.name}: ${n.message}
751
+ ${this.editor.list.join(" ")}`;if(e!==this.drawn.key){let n=this.pictures(),r=br(xs(this.base,fd(this.base,this.editor.list))),i=this.shown?ol(n,this.shown):void 0,s={name:this.name,...this.editor.colors(),waived:this.editor.waive},o=i?sl(i,this.shown,s,this.editor.signature,this.tints):void 0;this.drawn={key:e,recolors:t&&n.some((a)=>cc(a,r)),look:o?`${o.image}${dp}${o.opacity}`:""}}return this.drawn}frame(t="ok",e){let n=a1(this.editor),r=this.editor.act??"-";this.editor.act=void 0;let{drawn:i,targets:s}=Ac(()=>c1(this.editor,this.cols,this.rows,this.color,this.focused)),{lines:o,zones:a}=Pc(i.lines,s);this.pointer.zones=a;let{recolors:c,look:u}=this.draft();return[t,r,n.mode,this.editor.dirty()?"1":"0",this.editor.shown().join(" "),n.keys.map(([l])=>l).join(dp),n.keys.map(([,l])=>l).join(dp),e??n.note,String(i.at),c?"1":"0",u,...o].join(_L)}handle(t){let[e="",...n]=t.split(" "),r=n.join(" ");if(e==="quit")return;if(e==="size"){let[i,s]=r.split(" ").map(Number);this.cols=Math.max(30,i??Bm),this.rows=Math.max(10,s??Um)}else if(e==="focus")this.focused=r==="1";else if(e==="show")this.shown=r;else if(e==="key"&&GL.has(r))this.editor.press(r);else if(e==="ch"){let i=Number(r),s=Number.isInteger(i)&&i>0&&i<=1114111?Xh(String.fromCodePoint(i)):void 0;if(s)this.editor.press(s)}else if(e==="mouse"){let i=BL(n);if(i)Wm(this.editor,this.pointer.point(i),i)}else if(e==="save"){let i=this.save();return i===void 0?this.frame("saved","Saved"):this.frame("error",i)}return this.frame()}}async function LE(t){let e=new CE(J(),t,process.env.NO_COLOR===void 0);process.once("exit",()=>e.close()),process.once("SIGTERM",()=>process.exit(0));let n=jL({input:process.stdin});for await(let r of n){let i=e.handle(r);if(i===void 0)break;process.stdout.write(`${i}
752
+ `)}return n.close(),process.stdin.destroy(),e.close(),0}import{existsSync as jE,rmSync as UL,utimesSync as WL}from"node:fs";import{homedir as KL}from"node:os";import{join as Fa}from"node:path";function zL(t){try{return L(t)}catch{return}}function DL(t){let{home:e,configHome:n}=t,r=zL(n),i={configHome:n,home:e},s=pt(qt),o=s.map((c)=>c.unwire(i,r)),a=[Fa(n,"ttheme"),t.cacheDir,t.stateDir];return{edits:[...wn(Fa(t.zdotdir,".zshrc"),Rr),...o.flatMap((c)=>c.edits)],removals:[...s.flatMap((c)=>c.shelf?Ts(c.shelf.dir(i)):[]),...o.flatMap((c)=>c.removals),...a.filter((c)=>jE(c))],touches:o.flatMap((c)=>c.touches),...r?{state:r}:{}}}function qL(t,e,n=Ze()){let r=[];for(let{file:s,content:o}of t.edits){let a=ng(s,o);r.push(a==="removed"?`Removed ${s} — ttheme had created it`:a==="restored"?`Took ttheme out of ${s}`:`Took ttheme out of ${s} — kept ${s}.ttheme.bak, since the file changed after ttheme's first edit`)}if(t.state){let s=Ii(e.configHome,{...t.state,off:!0,palettes:[]},!1,n,e.home);for(let o of pt(t.state.terminals))if(s.has(o.id))r.push(`Gave ${o.name} its own default profile back — it takes it at its next start`)}for(let s of t.removals)UL(s,{recursive:!0,force:!0});if(t.removals.length>0)r.push(`Deleted ${t.removals.length} files and folders ttheme wrote`);let i=new Date;for(let s of t.touches)WL(s,i,i);return r}function YL(){let t=KL();return{home:t,configHome:J(),zdotdir:process.env.ZDOTDIR??t,cacheDir:hr(),stateDir:Fa(process.env.XDG_STATE_HOME??Fa(t,".local","state"),"ttheme")}}async function _E(t=!1){let e=YL(),n=DL(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=Fa(e.configHome,"ttheme");zc("ttheme uninstall"),bn([...n.edits.map((s)=>`Take ttheme out of ${s.file}`),...n.removals.map((s)=>s===r?`Delete ${s} — settings, pins, every installed picture${jE($c(e.configHome))?`, and your markets under ${$c(e.configHome)} (push them to GitHub first to keep them)`:""}`:`Delete ${s}`)].join(`
753
+ `),"Uninstall");let i=await Ve({message:"Remove ttheme?"});if(fe(i)||!i)throw Mr("Nothing changed"),new Ne}for(let r of qL(n,e))console.log(r);console.log("Open tabs keep their colors until they close — restart your terminal to drop ttheme everywhere")}import{homedir as JL}from"node:os";async function GE(t){if(!qt.includes(t))throw Error(`no terminal ${t} — one of ${qt.join(", ")}`);let e=t,n=$n[e],r=J(),i=JL(),s=Ze(),o=L(r);if(o.terminals.includes(e))return console.log(`${n.name} is wired already`),0;let a={configHome:r,home:i};if(!n.offered(a,s))throw Error(`${n.name} cannot be wired on this system`);if(process.stdin.isTTY!==!0||process.stdout.isTTY!==!0)throw Error("wire asks before it edits your configs — run it in a terminal");let c={...o,...n.installs?.(a)??{},terminals:[e]};bn([...Eu(r,c,i),...Su(r,c,i),"Each config is backed up once to <file>.ttheme.bak before the first edit — `npx @kecan0406/ttheme uninstall` takes it all out"].join(`
754
+ `),`Wiring ${n.name}`);let u=await Ve({message:`Wire ${n.name} now?`,initialValue:!1});if(fe(u)||!u)throw Mr("Nothing changed"),new Ne;let l=ta(r,c,s,i),f={...l,terminals:[...o.terminals,e]};Le(r,f),jt(r,ut(r),f,i,s);let d=Ii(r,l,!0,s,i),h=Mu(r,l,d,i);if(h.length>0)bn(h.join(`
755
+ `),"Next");return Go(`Wired ${n.name}`),0}var ZL=new Set(["add","remove","market","default","on","off"]),QL={default:([t])=>V1(t),on:()=>Z1(),off:()=>Q1(),browse:()=>rE(),list:([t],{json:e})=>eE(t,e),add:(t,{market:e})=>Y1(t,e),remove:(t)=>J1(t),update:()=>nE(),market:([t,e])=>my(t,e),new:([t],{from:e,in:n})=>W1(t,e,n),edit:([t])=>K1(t),check:([t],{fix:e})=>D1(t,e),share:([t],{tone:e})=>q1(t,e),init:(t,{yes:e})=>ME({yes:e}),uninstall:(t,{yes:e})=>_E(e),wire:([t])=>GE(t),info:()=>gE(),build:(t,{only:e})=>wl({only:e}),find:([t])=>x1(t),image:([t,e,n])=>fE(t,e,n),redraw:()=>uE(),names:()=>HE(),tone:([t])=>LE(t),flatten:([t,e,n,r,i,s,o])=>mE(t,e,n,r,i,s,o),bake:([t,e,n,r])=>hE(t,e,n,r)},XL=Ko.map((t)=>({...t,run:QL[t.name]}));class Di extends Error{verb;constructor(t,e){super(t);this.verb=e}}function BE(t){let e=XL.find((n)=>n.name===t);if(!e)throw new Di(t.startsWith("-")?`unknown option '${t}'`:`unknown command '${t}'`);return e}function t3(t,e){let n={help:{type:"boolean",short:"h"}};for(let[r,{type:i,short:s,multiple:o}]of Object.entries(t.flags??{}))n[r]={type:i,multiple:o===!0,...s?{short:s}:{}};try{return VL({args:e,options:n,allowPositionals:!0})}catch(r){let[i=""]=(r instanceof Error?r.message:String(r)).split(". ");throw new Di(`${i.charAt(0).toLowerCase()}${i.slice(1)}`,t)}}function e3(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"){if(n[0]===void 0||n[0]==="all")return{kind:"help",all:n[0]==="all",code:0};return{kind:"help",verb:BE(n[0]),code:0}}let r=BE(e),i=t3(r,n);if(i.values.help)return{kind:"help",verb:r,code:0};for(let[l,{choices:f}]of Object.entries(r.flags??{}))for(let d of[i.values[l]??[]].flat())if(f&&!f.includes(String(d)))throw new Di(`--${l} takes ${f.join(", ")} — not ${d}`,r);let s=i.positionals,o=r.args.filter((l)=>l.startsWith("<")).length,a=r.args.some((l)=>l.includes("..."))?Number.POSITIVE_INFINITY:r.args.length;if(s.length<o)throw new Di(`missing ${r.args[s.length]}`,r);if(s.length>a)throw new Di(`too many arguments: ${s.slice(a).join(" ")}`,r);let{help:c,...u}=i.values;return{kind:"run",verb:r,args:s,flags:u}}function UE(t){let e=Math.max(0,...t.map(([n])=>n.length));return t.map(([n,r])=>` ${n.padEnd(e)} ${r}`)}function hp(t,e=!1){if(!t)return zo(e);let n=Object.entries(t.flags??{}).map(([r,{short:i,value:s,about:o}])=>[`${i?`-${i}, `:""}--${r}${s?` ${s}`:""}`,o]);return[`Usage: ttheme ${Wo(t)}`,"",t.about,...t.actions?["","Actions:",...UE(t.actions)]:[],...n.length>0?["","Options:",...UE(n)]:[]].join(`
756
+ `)}var n3=[TypeError,RangeError,ReferenceError,SyntaxError];function r3(t){return n3.some((e)=>t instanceof e)||t instanceof Error&&"code"in t}async function WE(t){let e;try{let n=e3(t);if(n.kind==="version")return console.log(It.version),0;if(n.kind==="help"){if(n.code===0)console.log(hp(n.verb,n.all));else console.error(hp(n.verb,n.all));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");if(ZL.has(n.verb.name))await Qk();let r=await n.verb.run(n.args,n.flags);if(!n.verb.hidden&&n.verb.name!=="uninstall")PE();return typeof r==="number"?r:0}catch(n){if(n instanceof Di)return console.error(n.verb?`ttheme ${n.verb.name}: ${n.message}
767
757
 
768
- ${Qm(n.verb)}`:`ttheme: ${n.message} — see \`ttheme help\``),1;if(n instanceof Ie)return 1;if(n instanceof sa)return n.exit;let r=process.env.TTHEME_DEBUG&&n instanceof Error?n.stack:void 0;return console.error(`
769
- ttheme${e?` ${e.name}`:""}: ${r??(n instanceof Error?n.message:String(n))}${dL(n)?"\nReport a bug with the output of `ttheme info`":""}`),1}}if(mL)if(process.env.TTHEME_DEBUG&&typeof Bun>"u"&&!process.sourceMapsEnabled){let t=hL(process.execPath,["--enable-source-maps",...process.argv.slice(1)],{stdio:"inherit"});process.exitCode=t.status??1}else process.exitCode=await fS(process.argv.slice(2));
758
+ ${hp(n.verb)}`:`ttheme: ${n.message} — see \`ttheme help\``),1;if(n instanceof Ne)return 1;if(n instanceof da)return n.exit;let r=process.env.TTHEME_DEBUG&&n instanceof Error?n.stack:void 0;return console.error(`
759
+ ttheme${e?` ${e.name}`:""}: ${r??(n instanceof Error?n.message:String(n))}${r3(n)?"\nReport a bug with the output of `ttheme info`":""}`),1}}if(s3)if(process.env.TTHEME_DEBUG&&typeof Bun>"u"&&!process.sourceMapsEnabled){let t=i3(process.execPath,["--enable-source-maps",...process.argv.slice(1)],{stdio:"inherit"});process.exitCode=t.status??1}else process.exitCode=await WE(process.argv.slice(2));
770
760
 
771
- //# debugId=EEBA231E41D9912D64756E2164756E21
761
+ //# debugId=39F8DB426D51F96064756E2164756E21
772
762
  //# sourceMappingURL=ttheme.js.map