@kecan0406/ttheme 1.2.10 → 1.2.12
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/README.md +4 -4
- package/bin/ttheme.js +206 -221
- package/bin/ttheme.js.map +1 -1
- package/dist/manifest.json +2 -9
- package/package.json +1 -1
package/bin/ttheme.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{createRequire as tM}from"node:module";var qE=Object.create;var{getPrototypeOf:YE,defineProperty:dp,getOwnPropertyNames:JE}=Object;var VE=Object.prototype.hasOwnProperty;function ZE(t){return this[t]}var QE,XE,Rl=(t,e,n)=>{var r=t!=null&&typeof t==="object";if(r){var i=e?QE??=new WeakMap:XE??=new WeakMap,s=i.get(t);if(s)return s}n=t!=null?qE(YE(t)):{};let o=e||!t||!t.__esModule?dp(n,"default",{value:t,enumerable:!0}):n;for(let a of JE(t))if(!VE.call(o,a))dp(o,a,{get:ZE.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=tM(import.meta.url);var _l=wt((kL,Fp)=>{var kM=Kt("util"),Ap=Kt("stream"),je=Fp.exports=function(){Ap.call(this),this._buffers=[],this._buffered=0,this._reads=[],this._paused=!1,this._encoding="utf8",this.writable=!0};kM.inherits(je,Ap);je.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))};je.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};je.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()};je.prototype.destroySoon=je.prototype.end;je.prototype._end=function(){if(this._reads.length>0)this.emit("error",Error("Unexpected end of input"));this.destroy()};je.prototype.destroy=function(){if(!this._buffers)return;this.writable=!1,this._reads=null,this._buffers=null,this.emit("close")};je.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)};je.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)};je.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((yM)=>{var Xn=[{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]}];yM.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<Xn.length;a++){let c=Xn[a],u=s*c.x.length,l=o*c.y.length;for(let d=0;d<c.x.length;d++)if(c.x[d]<r)u++;else break;for(let d=0;d<c.y.length;d++)if(c.y[d]<i)l++;else break;if(u>0&&l>0)n.push({width:u,height:l,index:a})}return n};yM.getInterlaceIterator=function(t){return function(e,n,r){let i=e%Xn[r].x.length,s=(e-i)/Xn[r].x.length*8+Xn[r].x[i],o=n%Xn[r].y.length,a=(n-o)/Xn[r].y.length*8+Xn[r].y[o];return s*4+a*t*4}}});var Wl=wt((vL,Cp)=>{Cp.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((SL,jp)=>{var EM=Bl(),MM=Wl();function Lp(t,e,n){let r=t*e;if(n!==8)r=Math.ceil(r/(8/n));return r}var Zi=jp.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=EM.getImagePasses(n,r);for(let c=0;c<a.length;c++)this._images.push({byteWidth:Lp(a[c].width,s,o),height:a[c].height,lineIndex:0})}else this._images.push({byteWidth:Lp(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,d=MM(u,c,l);e[o]=a+d}};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 Bp=wt((EL,_p)=>{var OM=Kt("util"),Gp=_l(),IM=Ul(),xM=_p.exports=function(t){Gp.call(this);let e=[],n=this;this._filter=new IM(t,{read:this.read.bind(this),write:function(r){e.push(r)},complete:function(){n.emit("complete",Buffer.concat(e))}}),this._filter.start()};OM.inherits(xM,Gp)});var Qi=wt((ML,Wp)=>{Wp.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((OL,Up)=>{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=Up.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((IL,Kp)=>{var Nt=Qi(),NM=Dl(),Ht=Kp.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(){}};Ht.prototype.start=function(){this.read(Nt.PNG_SIGNATURE.length,this._parseSignature.bind(this))};Ht.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))};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!==Nt.TYPE_IHDR){this.error(Error("Expected IHDR on beggining"));return}if(this._crc=new NM,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 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()};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===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()};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)/Nt.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===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()};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((FM)=>{var zp=Bl(),RM=[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]}],TM=[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 PM(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,d,f,h;switch(e){default:throw Error("unrecognised depth");case 16:f=t[r],r++,n.push((s<<8)+f);break;case 4:f=s&15,h=s>>4,n.push(h,f);break;case 2:l=s&3,d=s>>2&3,f=s>>4&3,h=s>>6&3,n.push(h,f,d,l);break;case 1:o=s&1,a=s>>1&1,c=s>>2&1,u=s>>3&1,l=s>>4&1,d=s>>5&1,f=s>>6&1,h=s>>7&1,n.push(h,f,d,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 HM(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 d=n(l,u,c);RM[r](e,i,d,s),s+=r}return s}function AM(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 d=i.get(r),f=n(l,u,c);TM[r](e,d,f,s)}i.resetAfterLine()}}FM.dataToBitMap=function(t,e){let{width:n,height:r,depth:i,bpp:s,interlace:o}=e,a;if(i!==8)a=PM(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,d,f;if(o)d=zp.getImagePasses(n,r),f=zp.getInterlaceIterator(n,r);else{let h=0;f=function(){let p=h;return h+=4,p},d=[{width:n,height:r}]}for(let h=0;h<d.length;h++)if(i===8)l=HM(d[h],c,f,s,t,l);else AM(d[h],c,f,s,a,u);if(i===8){if(l!==t.length)throw Error("extra data found")}else a.end();return c}});var Jl=wt((NL,Dp)=>{function LM(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 jM(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 GM(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}}Dp.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)LM(t,u,i,s,c);else{if(a)jM(t,u,i,s,a);if(r!==8&&!n){if(r===16)u=Buffer.alloc(i*s*4);GM(t,u,i,s,r)}}return u}});var Jp=wt((RL,Yp)=>{var _M=Kt("util"),Vl=Kt("zlib"),qp=_l(),BM=Bp(),WM=ql(),UM=Yl(),KM=Jl(),en=Yp.exports=function(t){qp.call(this),this._parser=new WM(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()};_M.inherits(en,qp);en.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};en.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)};en.prototype._handleMetaData=function(t){this._metaData=t,this._bitmapInfo=Object.create(t),this._filter=new BM(this._bitmapInfo)};en.prototype._handleTransColor=function(t){this._bitmapInfo.transColor=t};en.prototype._handlePalette=function(t){this._bitmapInfo.palette=t};en.prototype._simpleTransparency=function(){this._metaData.alpha=!0};en.prototype._headersFinished=function(){this.emit("metadata",this._metaData)};en.prototype._finished=function(){if(this.errord)return;if(!this._inflate)this.emit("error","No Inflate block");else this._inflate.end()};en.prototype._complete=function(t){if(this.errord)return;let e;try{let n=UM.dataToBitMap(t,this._bitmapInfo);e=KM(n,this._bitmapInfo,this._options.skipRescale),n=null}catch(n){this._handleError(n);return}this.emit("parsed",e)}});var Zp=wt((TL,Vp)=>{var Re=Qi();Vp.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,d=0,f=r.bgColor||{};if(f.red===void 0)f.red=o;if(f.green===void 0)f.green=o;if(f.blue===void 0)f.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)*f.red+b*p),0),o),$=Math.min(Math.max(Math.round((1-b)*f.green+b*$),0),o),g=Math.min(Math.max(Math.round((1-b)*f.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[d]=g.red,u[d+1]=g.green,u[d+2]=g.blue,i)u[d+3]=g.alpha}else if(u.writeUInt16BE(g.red,d),u.writeUInt16BE(g.green,d+2),u.writeUInt16BE(g.blue,d+4),i)u.writeUInt16BE(g.alpha,d+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[d]=b,i)u[d+1]=g.alpha}else if(u.writeUInt16BE(b,d),i)u.writeUInt16BE(g.alpha,d+2);break}default:throw Error("unrecognised color Type "+r.colorType)}l+=a,d+=c}return u}});var tg=wt((PL,Xp)=>{var Qp=Wl();function zM(t,e,n,r,i){for(let s=0;s<n;s++)r[i+s]=t[e+s]}function DM(t,e,n){let r=0,i=e+n;for(let s=e;s<i;s++)r+=Math.abs(t[s]);return r}function qM(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 YM(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 JM(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 VM(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 ZM(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 QM(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 XM(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]-Qp(a,c,u);r[i+o]=l}}function tO(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]-Qp(o,a,c);i+=Math.abs(u)}return i}var eO={0:zM,1:qM,2:JM,3:ZM,4:XM},nO={0:DM,1:YM,2:VM,3:QM,4:tO};Xp.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 d=0;d<n;d++){if(s.length>1){let f=1/0;for(let h=0;h<s.length;h++){let p=nO[s[h]](t,c,o,i);if(p<f)l=s[h],f=p}}u[a]=l,a++,eO[l](t,c,o,u,a,i),a+=o,c+=o}return u}});var Zl=wt((HL,eg)=>{var zt=Qi(),rO=Dl(),iO=Zp(),sO=tg(),oO=Kt("zlib"),tr=eg.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||oO.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")};tr.prototype.getDeflateOptions=function(){return{chunkSize:this._options.deflateChunkSize,level:this._options.deflateLevel,strategy:this._options.deflateStrategy}};tr.prototype.createDeflate=function(){return this._options.deflateFactory(this.getDeflateOptions())};tr.prototype.filterData=function(t,e,n){let r=iO(t,e,n,this._options),i=zt.COLORTYPE_TO_BPP_MAP[this._options.colorType];return sO(r,e,n,this._options,i)};tr.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(rO.crc32(r.slice(4,r.length-4)),r.length-4),r};tr.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)};tr.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)};tr.prototype.packIDAT=function(t){return this._packChunk(zt.TYPE_IDAT,t)};tr.prototype.packIEND=function(){return this._packChunk(zt.TYPE_IEND,null)}});var sg=wt((AL,ig)=>{var aO=Kt("util"),ng=Kt("stream"),cO=Qi(),uO=Zl(),rg=ig.exports=function(t){ng.call(this);let e=t||{};this._packer=new uO(e),this._deflate=this._packer.createDeflate(),this.readable=!0};aO.inherits(rg,ng);rg.prototype.pack=function(t,e,n,r){if(this.emit("data",Buffer.from(cO.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 dg=wt((ao,lg)=>{var og=Kt("assert").ok,Xi=Kt("zlib"),lO=Kt("util"),ag=Kt("buffer").kMaxLength;function ti(t){if(!(this instanceof ti))return new ti(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 dO(t){return new ti(t)}function cg(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 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 d(p,$){if(r._hadError)return;let g=s-$;if(og(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}og(this._handle,"zlib binding closed");let f;do f=this._handle.writeSync(e,t,a,i,this._buffer,this._offset,s),f=f||this._writeState;while(!this._hadError&&d(f[0],f[1]));if(this._hadError)throw l;if(u>=ag)throw cg(this),RangeError("Cannot create final Buffer. It would be larger than 0x"+ag.toString(16)+" bytes");let h=Buffer.concat(c,u);return cg(this),h};lO.inherits(ti,Xi.Inflate);function fO(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 ug(t,e){return fO(new ti(e),t)}lg.exports=ao=ug;ao.Inflate=ti;ao.createInflate=dO;ao.inflateSync=ug});var Ql=wt((FL,hg)=>{var fg=hg.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 mg=wt((pO)=>{var hO=Ql(),mO=Ul();pO.process=function(t,e){let n=[],r=new hO(t);return new mO(e,{read:r.read.bind(r),write:function(s){n.push(s)},complete:function(){}}).start(),r.process(),Buffer.concat(n)}});var wg=wt((LL,bg)=>{var pg=!0,gg=Kt("zlib"),bO=dg();if(!gg.deflateSync)pg=!1;var wO=Ql(),$O=mg(),kO=ql(),yO=Yl(),vO=Jl();bg.exports=function(t,e){if(!pg)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 d=[];function f(E){d.push(E)}let h=new wO(t);if(new kO(e,{read:h.read.bind(h),error:r,metadata:s,gamma:l,palette:a,transColor:o,inflateData:f,simpleTransparency:c}).start(),h.process(),n)throw n;let $=Buffer.concat(d);d.length=0;let g;if(i.interlace)g=gg.inflateSync($);else{let I=((i.width*i.bpp*i.depth+7>>3)+1)*i.height;g=bO($,{chunkSize:I,maxLength:I})}if($=null,!g||!g.length)throw Error("bad png - invalid inflate data response");let b=$O.process(g,i);$=null;let y=yO.dataToBitMap(b,i);b=null;let S=vO(y,i,e.skipRescale);return i.data=S,i.gamma=u||0,i}});var vg=wt((jL,yg)=>{var $g=!0,kg=Kt("zlib");if(!kg.deflateSync)$g=!1;var SO=Qi(),EO=Zl();yg.exports=function(t,e){if(!$g)throw Error("To use the sync capability of this library in old node versions, please pin pngjs to v2.3.0");let r=new EO(e||{}),i=[];if(i.push(Buffer.from(SO.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=kg.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 Sg=wt((IO)=>{var MO=wg(),OO=vg();IO.read=function(t,e){return MO(t,e||{})};IO.write=function(t,e){return OO(t,e)}});var Mg=wt((AO)=>{var RO=Kt("util"),Eg=Kt("stream"),TO=Jp(),PO=sg(),HO=Sg(),Vt=AO.PNG=function(t){if(Eg.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 TO(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 PO(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"))};RO.inherits(Vt,Eg);Vt.sync=HO;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 of=wt((Z8,o0)=>{var sf={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"},I2={up:(t=1)=>"\x1B[S".repeat(t),down:(t=1)=>"\x1B[T".repeat(t)},x2={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?sf.up():"");if(t)e+=sf.left;return e}};o0.exports={cursor:sf,scroll:I2,erase:x2,beep:"\x07"}});import{spawnSync as nL}from"node:child_process";import{isMainThread as rL}from"node:worker_threads";import{parseArgs as YC}from"node:util";var Tt={name:"@kecan0406/ttheme",version:"1.2.10",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 p1}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}})(),hp=(t)=>{return t===12288||t>=65281&&t<=65376||t>=65504&&t<=65510},mp=(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 nM=/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]|\u001b\]8;[^;]*;.*?(?:\u0007|\u001b\u005c)/y,rM=/[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y,pp=/(?:(?![\uFF61-\uFF9F\uFF00-\uFFEF])[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}\p{Script=Tangut}]){1,1000}/yu,iM=/\t{1,1000}/y,gp=/[\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,sM=/(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y,oM=/\p{M}+/gu,aM={limit:1/0,ellipsis:""},bp=(t,e={},n={})=>{let r=e.limit??1/0,i=e.ellipsis??"",s=e?.ellipsisWidth??(i?bp(i,aM,n).width:0),o=0,a=n.controlWidth??0,c=n.tabWidth??8,u=n.emojiWidth??2,l=2,d=n.regularWidth??1,f=n.wideWidth??2,h=[[sM,d],[nM,0],[rM,a],[iM,c],[gp,u],[pp,f]],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(oM,"")){let X=B.codePointAt(0)||0;if(hp(X))F=2;else if(mp(X))F=f;else F=d;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===pp?fp(t.slice($,X.lastIndex)):X===gp?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}},wp=bp;var cM={limit:1/0,ellipsis:"",ellipsisWidth:0},uM=(t,e={})=>{return wp(t,cM,e).width},Q=uM;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 Ce(t){return`\x1B[38;2;${Tl(t)}m`}function Fa(t,e){return`\x1B[48;2;${Tl(t)};38;2;${Tl(e)}m`}function $p(t,e="\x1B[39m"){return`${t.map((n)=>`${Ce(n)}■`).join(" ")}${e}`}var Pt="\x1B[0m",at="\x1B[1m",P="\x1B[2m",de="\x1B[22m",Di="\x1B[32m",Jt="\x1B[33m",Ca="\x1B[36m",Sn=["⠋","⠙","⠹","⠸","⠼","⠴","⠦","⠧","⠇","⠏"],io="⧉";function La(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 kp(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 Bw,readFileSync as Vd}from"node:fs";import{join as Ww}from"node:path";var lM=/^#[0-9a-f]{6}$/;function ne(t){return lM.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 ja(t,e){return Math.round(bt(t,e)*100)/100}function dM(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(dM),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 Vn=7,yp=3,Al=0.15,vp=1.6,Cl=[1,2,3,4,5,6,9,10,11,12,13,14],Sp=[7,15],Zn=[1,2,3,4,5,6],fe={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,Le=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 ${ja(s,r)}:1, needs ${n}:1`]:[]})}function Ep(t,e){return Math.min(...e.map((n)=>bt(En(t,n),t.background)))}var Mp=[{rule:"foreground",label:"foreground on background",unit:"ratio",min:Vn,measure:({foreground:t,background:e})=>bt(t,e),check:({foreground:t,background:e})=>bt(t,e)<Vn?[`foreground ${t} on ${e} is ${ja(t,e)}:1, needs ${Vn}:1`]:[]},{rule:"accents",label:"weakest accent on background",unit:"ratio",min:yp,measure:(t)=>Ep(t,Cl),check:(t)=>Fl(t,Cl,yp)},{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:Vn,measure:(t)=>Ep(t,Sp),check:(t)=>Fl(t,Sp,Vn)},{rule:"ansi8-visible",label:"ansi8 on background",unit:"ratio",min:vp,measure:(t)=>bt(En(t,8),t.background),check:(t)=>Fl(t,[8],vp)},{rule:"selection",label:"foreground on selection",unit:"ratio",min:Vn,measure:({foreground:t,selectionBackground:e})=>e===void 0?Number.NaN:bt(t,e),check:({foreground:t,selectionBackground:e})=>e!==void 0&&bt(t,e)<Vn?[`foreground ${t} on selection ${e} is ${ja(t,e)}:1, needs ${Vn}:1`]:[]}];function Ne(t,e){let n=Math.abs(t-e)%360;return Math.min(n,360-n)}var Qe=(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)=>Zn.includes(Qe(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 Qn(t){let e=Ji(t);return Cl.flatMap((n)=>{let r=so(t,n),i=fe[Qe(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 Zn.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)=>Zn.flatMap((r)=>Zn.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 fM=[{rule:"ansi-role",label:"accent hue outside its ANSI role",unit:"degrees",max:0,measure:(t)=>Math.max(0,...Qn(t).map((e)=>e.over)),check:(t)=>Qn(t).map(({slot:e,hue:n,over:r})=>{let i=fe[Qe(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:Le,measure:(t)=>Math.max(0,...Mn(t).map((e)=>e.gap)),check:(t)=>Mn(t).filter((e)=>e.gap>Le).map(({normal:e,gap:n})=>`ANSI ${e+8} is ${n.toFixed(0)}° from ANSI ${e}, needs <= ${Le}°`)},{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`)}],Ga=[...Mp,...fM],Ll=Ga.map((t)=>t.rule),he=Ga.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 Xe(t){return Ga.map((e)=>Math.round(e.measure(t)*1000)/1000)}function Op(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 Op(Ga,t)}function Ip(t){return Op(Mp,t)}function xp(t){return t.flatMap(Qr)}import{chmodSync as hM,copyFileSync as mM,existsSync as Vi,mkdirSync as pM,readFileSync as jl,realpathSync as gM,renameSync as Rp,rmSync as Np,statSync as bM,writeFileSync as Tp}from"node:fs";import{dirname as wM}from"node:path";function Pp(t){return`${t}.ttheme.bak`}var $M=/^(?:#|--) ttheme begin$|path = "ttheme-|^DefaultProfile=ttheme-/m;function Gl(t){let e=Pp(t);if(Vi(t)&&!Vi(e)&&!$M.test(jl(t,"utf8")))mM(t,e)}function H(t,e){let n=Vi(t)?gM(t):t;pM(wM(n),{recursive:!0});let r=`${n}.ttheme-${process.pid}`;if(Tp(r,e),Vi(n))hM(r,bM(n).mode&4095);Rp(r,n)}function Xr(t,e,n){if(Tp(t,n),t!==e)Rp(t,e)}function tn(t,e){if((Vi(t)?jl(t,"utf8"):void 0)===e)return!1;return Gl(t),H(t,e),!0}function Hp(t,e){let n=Pp(t),r=Vi(n)?jl(n,"utf8"):void 0;if(e===""&&r===void 0)return Np(t,{force:!0}),"removed";if(H(t,e),r===void 0||r===e)return Np(n,{force:!0}),"restored";return"kept backup"}import{createHash as Wb}from"node:crypto";import{copyFileSync as mx,existsSync as Md,mkdirSync as px,readdirSync as gx,readFileSync as us,renameSync as Ub,rmSync as cs,statSync as bx}from"node:fs";import{basename as Kb,isAbsolute as wx,join as z}from"node:path";import{createHash as _I}from"node:crypto";import{existsSync as BI,readdirSync as WI,readFileSync as UI,rmSync as KI,statSync as zI,utimesSync as DI}from"node:fs";import{join as os}from"node:path";import{readdirSync as qO,rmSync as YO,statSync as JO}from"node:fs";import{setDefaultAutoSelectFamilyAttemptTimeout as VO}from"node:net";import{homedir as ZO}from"node:os";import{join as ho}from"node:path";import{setTimeout as QO}from"node:timers/promises";var Ng=Rl(Mg(),1);import{constants as jO,deflateSync as GO,inflateSync as _O}from"node:zlib";import{inflateRawSync as CO}from"node:zlib";var FO=(()=>{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=[],d="./this.program",f=(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)d=n.thisProgram;if(n.quit)f=n.quit;var R;if(n.wasmBinary)R=n.wasmBinary;var F,j=!1,B,X,U,Z,W,$t,tt,Jn,Je;function Ve(){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=Jn=new Float32Array(m),n.HEAPF64=Je=new Float64Array(m)}var Ze=[],Ta=[],Dr=[],gl=!1;function bl(){if(n.preRun){if(typeof n.preRun=="function")n.preRun=[n.preRun];while(n.preRun.length)iS(n.preRun.shift())}kl(Ze)}function wl(){gl=!0,kl(Ta)}function rS(){if(n.postRun){if(typeof n.postRun=="function")n.postRun=[n.postRun];while(n.postRun.length)oS(n.postRun.shift())}kl(Dr)}function iS(m){Ze.unshift(m)}function sS(m){Ta.unshift(m)}function oS(m){Dr.unshift(m)}var qr=0,$l=null,no=null;function aS(m){qr++,n.monitorRunDependencies?.(qr)}function cS(m){if(qr--,n.monitorRunDependencies?.(qr),qr==0){if($l!==null)clearInterval($l),$l=null;if(no){var w=no;no=null,w()}}}function zm(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 uS="data:application/octet-stream;base64,",Dm=(m)=>m.startsWith(uS),Yr;if(n.locateFile){if(Yr="mozjpeg_dec.wasm",!Dm(Yr))Yr=b(Yr)}else Yr=new URL("mozjpeg_dec.wasm",import.meta.url).href;function qm(m){if(m==Yr&&R)return new Uint8Array(R);if(E)return E(m);throw"both async and sync fetching of the wasm failed"}function lS(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(()=>qm(m))}return Promise.resolve().then(()=>qm(m))}function Ym(m,w,k){return lS(m).then((v)=>WebAssembly.instantiate(v,w)).then(k,(v)=>{N(`failed to asynchronously prepare wasm: ${v}`),zm(v)})}function dS(m,w,k,v){if(!m&&typeof WebAssembly.instantiateStreaming=="function"&&!Dm(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"),Ym(w,k,v)})});return Ym(w,k,v)}function fS(){var m={a:CE};function w(v,O){return qt=v.exports,F=qt.A,Ve(),np=qt.F,sS(qt.B),cS("wasm-instantiate"),qt}aS("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 dS(R,Yr,m,k).catch(i),{}}function hS(m){this.name="ExitStatus",this.message=`Program terminated with exit(${m})`,this.status=m}var kl=(m)=>{while(m.length>0)m.shift()(n)},mS=n.noExitRuntime||!0;class Jm{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=up(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 Vm=0,pS=0,gS=(m,w,k)=>{var v=new Jm(m);throw v.init(w,k),Vm=m,pS++,Vm},bS=(m,w,k,v,O)=>{},wS=()=>{var m=Array(256);for(var w=0;w<256;++w)m[w]=String.fromCharCode(w);Zm=m},Zm,Fe=(m)=>{var w="",k=m;while(U[k])w+=Zm[U[k++]];return w},Wi={},Jr={},Pa={},Qm,le=(m)=>{throw new Qm(m)},Xm,tp=(m)=>{throw new Xm(m)},$S=(m,w,k)=>{m.forEach(function(T){Pa[T]=w});function v(T){var G=k(T);if(G.length!==m.length)tp("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(Jr.hasOwnProperty(T))O[G]=Jr[T];else{if(x.push(T),!Wi.hasOwnProperty(T))Wi[T]=[];Wi[T].push(()=>{if(O[G]=Jr[T],++C,C===x.length)v(O)})}}),x.length===0)v(O)};function kS(m,w,k={}){var v=w.name;if(!m)le(`type "${v}" must have a positive integer typeid pointer`);if(Jr.hasOwnProperty(m))if(k.ignoreDuplicateRegistrations)return;else le(`Cannot register type '${v}' twice`);if(Jr[m]=w,delete Pa[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 kS(m,w,k)}var Vr=8,yS=(m,w,k,v)=>{w=Fe(w),kn(m,{name:w,fromWireType:function(O){return!!O},toWireType:function(O,x){return x?k:v},argPackAdvance:Vr,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)},vS=()=>yn.length/2-5-yl.length,SS=()=>{yn.push(0,1,void 0,1,null,1,!0,1,!1,1),n.count_emval_handles=vS},Zr={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 ES={name:"emscripten::val",fromWireType:(m)=>{var w=Zr.toValue(m);return vl(m),w},toWireType:(m,w)=>Zr.toHandle(w),argPackAdvance:Vr,readValueFromPointer:Sl,destructorFunction:null},MS=(m)=>kn(m,ES),OS=(m,w)=>{switch(w){case 4:return function(k){return this.fromWireType(Jn[k>>2])};case 8:return function(k){return this.fromWireType(Je[k>>3])};default:throw TypeError(`invalid float width (${w}): ${m}`)}},IS=(m,w,k)=>{w=Fe(w),kn(m,{name:w,fromWireType:(v)=>v,toWireType:(v,O)=>O,argPackAdvance:Vr,readValueFromPointer:OS(w,k),destructorFunction:null})},El=(m,w)=>Object.defineProperty(w,"name",{value:m}),ep=(m)=>{while(m.length){var w=m.pop(),k=m.pop();k(w)}};function xS(m){for(var w=1;w<m.length;++w)if(m[w]!==null&&m[w].destructorFunction===void 0)return!0;return!1}function NS(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=xS(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 UE=v(...Yt);function KE(zE){if(G)ep(xe);else for(var zi=T?1:2;zi<w.length;zi++){var DE=zi===1?Nl:It[zi-2];if(w[zi].destructorFunction!==null)w[zi].destructorFunction(DE)}if(V)return w[0].fromWireType(zE)}return KE(UE)};return El(m,Ui)}var RS=(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}},TS=(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(RS(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},PS=(m,w)=>{var k=[];for(var v=0;v<m;v++)k.push(tt[w+v*4>>2]);return k},HS=(m,w,k)=>{if(!n.hasOwnProperty(m))tp("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},AS=(m,w,k)=>{m=m.replace(/p/g,"i");var v=n["dynCall_"+m];return v(w,...k)},Ha=[],np,rp=(m)=>{var w=Ha[m];if(!w){if(m>=Ha.length)Ha.length=m+1;Ha[m]=w=np.get(m)}return w},FS=(m,w,k=[])=>{if(m.includes("j"))return AS(m,w,k);var v=rp(w)(...k);return v},CS=(m,w)=>(...k)=>FS(m,w,k),LS=(m,w)=>{m=Fe(m);function k(){if(m.includes("j"))return CS(m,w);return rp(w)}var v=k();if(typeof v!="function")le(`unknown function pointer with signature ${m}: ${w}`);return v},jS=(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},ip,sp=(m)=>{var w=cp(m),k=Fe(w);return vn(w),k},GS=(m,w)=>{var k=[],v={};function O(x){if(v[x])return;if(Jr[x])return;if(Pa[x]){Pa[x].forEach(O);return}k.push(x),v[x]=!0}throw w.forEach(O),new ip(`${m}: `+k.map(sp).join([", "]))},_S=(m)=>{m=m.trim();let w=m.indexOf("(");if(w!==-1)return m.substr(0,w);else return m},BS=(m,w,k,v,O,x,C)=>{var T=PS(w,k);m=Fe(m),m=_S(m),O=LS(v,O),TS(m,function(){GS(`Cannot call ${m} due to unbound types`,T)},w-1),$S([],T,(G)=>{var V=[G[0],null].concat(G.slice(1));return HS(m,NS(m,V,null,O,x,C),w-1),[]})},WS=(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}`)}},US=(m,w,k,v,O)=>{if(w=Fe(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:Vr,readValueFromPointer:WS(w,k,v!==0),destructorFunction:null})},KS=(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=Fe(k),kn(m,{name:k,fromWireType:x,argPackAdvance:Vr,readValueFromPointer:x},{ignoreDuplicateRegistrations:!0})},zS=(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},DS=(m,w,k)=>zS(m,U,w,k),qS=(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},op=(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},YS=(m,w)=>m?op(U,m,w):"",JS=(m,w)=>{w=Fe(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=YS(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=qS(O);else x=O.length;var T=Il(4+x+1),G=T+4;if(tt[T>>2]=x,k&&C)DS(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:Vr,readValueFromPointer:Sl,destructorFunction(v){vn(v)}})},VS=(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},ZS=(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},QS=(m)=>m.length*2,XS=(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},tE=(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},eE=(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},nE=(m,w,k)=>{k=Fe(k);var v,O,x,C;if(w===2)v=VS,O=ZS,C=QS,x=(T)=>W[T>>1];else if(w===4)v=XS,O=tE,C=eE,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:Vr,readValueFromPointer:Sl,destructorFunction(T){vn(T)}})},rE=(m,w)=>{w=Fe(w),kn(m,{isVoid:!0,name:w,argPackAdvance:0,fromWireType:()=>{return},toWireType:(k,v)=>{return}})},iE=(m,w,k)=>U.copyWithin(m,w,w+k),Ml=[],sE=(m,w,k,v)=>{return m=Ml[m],w=Zr.toValue(w),m(null,w,k,v)},oE={},aE=(m)=>{var w=oE[m];if(w===void 0)return Fe(m);return w},ap=()=>{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.")},cE=(m)=>{if(m===0)return Zr.toHandle(ap());else return m=aE(m),Zr.toHandle(ap()[m])},uE=(m)=>{var w=Ml.length;return Ml.push(m),w},lE=(m,w)=>{var k=Jr[m];if(k===void 0)le(`${w} has unknown type ${sp(m)}`);return k},dE=(m,w)=>{var k=Array(m);for(var v=0;v<m;++v)k[v]=lE(tt[w+v*4>>2],"parameter "+v);return k},fE=Reflect.construct,hE=(m,w,k)=>{var v=[],O=m.toWireType(v,k);if(v.length)tt[w>>2]=Zr.toHandle(v);return O},mE=(m,w,k)=>{var v=dE(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?fE(V,x):V.apply(G,x);return hE(O,ht,Ui)},T=`methodCaller<(${v.map((G)=>G.name).join(", ")}) => ${O.name}>`;return uE(El(T,C))},pE=(m)=>{if(m>9)yn[m+1]+=1},gE=(m)=>{var w=Zr.toValue(m);ep(w),vl(m)},bE=()=>{zm("")},wE=()=>2147483648,$E=(m)=>{var w=F.buffer,k=(m-w.byteLength+65535)/65536;try{return F.grow(k),Ve(),1}catch(v){}},kE=(m)=>{var w=U.length;m>>>=0;var k=wE();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=$E(C);if(T)return!0}return!1},Ol={},yE=()=>d||"./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,_:yE()};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},vE=(m,w)=>{for(var k=0;k<m.length;++k)X[w++]=m.charCodeAt(k);X[w]=0},SE=(m,w)=>{var k=0;return ro().forEach((v,O)=>{var x=w+k;tt[m+O*4>>2]=x,vE(v,x),k+=v.length+1}),0},EE=(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},ME=0,OE=()=>mS||ME>0,IE=(m)=>{if(B=m,!OE())n.onExit?.(m),j=!0;f(m,new hS(m))},xE=(m,w)=>{B=m,IE(m)},NE=xE,RE=(m)=>52,TE=(m,w)=>w+2097152>>>0<4194305-!!m?(m>>>0)+w*4294967296:NaN;function PE(m,w,k,v,O){var x=TE(w,k);return 70}var HE=[null,[],[]],AE=(m,w)=>{var k=HE[m];if(w===0||w===10)(m===1?I:N)(op(k,0)),k.length=0;else k.push(w)},FE=(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++)AE(m,U[C+G]);O+=T}return tt[v>>2]=O,0};wS(),Qm=n.BindingError=class extends Error{constructor(w){super(w);this.name="BindingError"}},Xm=n.InternalError=class extends Error{constructor(w){super(w);this.name="InternalError"}},SS(),ip=n.UnboundTypeError=jS(Error,"UnboundTypeError");var CE={o:gS,q:bS,m:yS,l:MS,j:IS,f:BS,b:US,a:KS,e:JS,c:nE,n:rE,v:iE,i:sE,d:vl,k:cE,h:mE,y:pE,g:gE,r:bE,s:kE,t:SE,u:EE,z:NE,w:RE,p:PE,x:FE},qt=fS(),LE=()=>(LE=qt.B)(),cp=(m)=>(cp=qt.C)(m),Il=(m)=>(Il=qt.D)(m),vn=(m)=>(vn=qt.E)(m),jE=(m)=>(jE=qt._emscripten_stack_restore)(m),GE=(m)=>(GE=qt._emscripten_stack_alloc)(m),_E=()=>(_E=qt.emscripten_stack_get_current)(),BE=(m)=>(BE=qt.__cxa_increment_exception_refcount)(m),up=(m)=>(up=qt.G)(m),WE=n.dynCall_jiji=(m,w,k,v,O)=>(WE=n.dynCall_jiji=qt.H)(m,w,k,v,O),Aa;no=function m(){if(!Aa)lp();if(!Aa)no=m};function lp(){if(qr>0)return;if(bl(),qr>0)return;function m(){if(Aa)return;if(Aa=!0,n.calledRun=!0,j)return;if(wl(),r(n),n.onRuntimeInitialized)n.onRuntimeInitialized();rS()}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 lp(),s}})(),Og=FO;function td(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 LO(){if(Xl)return Xl;let t=new WebAssembly.Module(CO(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(Og(e),typeof e.decode!=="function")throw Error("the JPEG decoder did not start");return Xl=e,e}function Ig(t,e){let n=td(t);if(n&&n.width*n.height>e)throw Error(`${n.width}×${n.height} is over ${e/1e6} megapixels`);let r=null;try{r=LO().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],Rg=13,Tg=3;function ei(t){return t.length>=ts.length&&ts.every((e,n)=>t[n]===e)}var Pg={0:1,2:3,4:2,6:4};function BO(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||Pg[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 WO(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 d=r;d<e;d++)t[c+d]=t[c+d]+t[c+d-r];else if(a===2)for(let d=0;d<e;d++)t[c+d]=t[c+d]+u[l+d];else if(a===3){for(let d=0;d<r;d++)t[c+d]=t[c+d]+(u[l+d]>>1);for(let d=r;d<e;d++)t[c+d]=t[c+d]+(t[c+d-r]+u[l+d]>>1)}else if(a===4){for(let d=0;d<r;d++)t[c+d]=t[c+d]+u[l+d];for(let d=r;d<e;d++){let f=t[c+d-r],h=u[l+d],p=u[l+d-r],$=Math.abs(h-p),g=Math.abs(f-p),b=Math.abs(f+h-2*p);t[c+d]=t[c+d]+($<=g&&$<=b?f:g<=b?h:p)}}else if(a!==0)throw Error(`bad PNG filter ${a}`)}}function UO(t){let{width:e,height:n,type:r}=t,i=Pg[r],s=e*i,o=_O(Buffer.concat(t.idat),{chunkSize:Math.min(268435456,Math.max(65536,n*(s+1)))});if(o.length<n*(s+1))throw Error("truncated PNG");WO(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 d=0,f=u,h=l;d<e;d++,f+=3,h+=4)a[h]=o[f],a[h+1]=o[f+1],a[h+2]=o[f+2],a[h+3]=255;else if(r===0)for(let d=0,f=l;d<e;d++,f+=4){let h=o[u+d];a[f]=h,a[f+1]=h,a[f+2]=h,a[f+3]=255}else for(let d=0,f=u,h=l;d<e;d++,f+=2,h+=4){let p=o[f];a[h]=p,a[h+1]=p,a[h+2]=p,a[h+3]=o[f+1]}}return{width:e,height:n,data:a}}function At(t){let e=BO(t);if(e)return UO(e);let n=Ng.PNG.sync.read(Buffer.from(t));return{width:n.width,height:n.height,data:new Uint8Array(n.data)}}function nr(t,e){if(ei(t)){let n=nn(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 Ig(t,e);throw Error("not a PNG or JPEG image")}function Hg(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 Ag(t,e){let n=new Uint8Array(e.width*e.height*4),r=Hg(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 rr(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=Hg(t,r);if(!c)return{width:s,height:o,data:a};let{part:u,box:l,dx:d,dy:f}=c;for(let h=0;h<l.h;h++)for(let p=0;p<l.w;p++){let $=((h+f)*u.width+p+d)*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 xg(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 nn(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=xg(t,"IDAT");return{width:n,height:r,alpha:xg(i===-1?t:t.subarray(0,i),"tRNS")!==-1}}function Fg(t,e=Rg){let{width:n,height:r,data:i}=t,s=(l)=>{for(let d=l*n*4+3,f=d+n*4;d<f;d+=4)if(i[d]>=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 d=l*n*4+3;for(let f=0;f<c;f++)if(i[d+f*4]>=e){c=f;break}for(let f=n-1;f>u;f--)if(i[d+f*4]>=e){u=f;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)<Rg)n++;return Math.round(n*100/(e.w*e.h))}function Cg(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 KO(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 ed(t,e,n,r){if(n===r&&Number.isInteger(e)&&e>=0&&e+r<=t)return{first:Int32Array.from({length:r},(l,d)=>e+d),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 d=e+(l+0.5)*i,f=Math.floor(d-o-0.5),h=Math.max(0,Math.min(t-a,f));c[l]=h;let p=0;for(let $=f;$<=Math.ceil(d+o-0.5);$++){let g=KO(($+0.5-d)/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 Lg(t,e,n,r,i,s,o){let a=ed(t,e.y,e.h,r),c=n*i,u=a.size+1,l=Array.from({length:u},()=>new Float32Array(c)),d=new Int32Array(u).fill(-1),f=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(d[I]!==E)s(E,N),d[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++)f[B]=y[B]*S+E[B]*R+I[B]*F+N[B]*j;else for(let B=0;B<c;B++)f[B]=f[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++)f[E]=y[E]*S;else for(let E=0;E<c;E++)f[E]=f[E]+y[E]*S;b+=1}}if(h.length===0)f.fill(0);o($,f)}}function jg(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=ed(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 Lg(t.height,e,n,r,4,(u,l)=>{let d=u*o*4,f=o,h=-1;for(let g=0,b=0;g<o*4;g+=4,b++){let y=s[d+g+3];if(y===0){a[g]=0,a[g+1]=0,a[g+2]=0,a[g+3]=0;continue}if(b<f)f=b;h=b,a[g]=s[d+g]*y,a[g+1]=s[d+g+1]*y,a[g+2]=s[d+g+2]*y,a[g+3]=y}if(l.fill(0),h<0)return;let[p,$]=jg(i.first,i.size,n,f,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 d=u*n*4;for(let f=0;f<n;f++){let h=f*4,p=l[h+3];if(p<=0)continue;let $=l[h]/p;c[d+h]=($<0?0:$>255?255:$)+0.5,$=l[h+1]/p,c[d+h+1]=($<0?0:$>255?255:$)+0.5,$=l[h+2]/p,c[d+h+2]=($<0?0:$>255?255:$)+0.5,c[d+h+3]=(p>255?255:p)+0.5}}),{width:n,height:r,data:c}}function Gg(t,e,n,r){let i=ed(t.width,e.x,e.w,n),s=t.data,o=t.width,a=new Float32Array(n*r);return Lg(t.height,e,n,r,1,(c,u)=>{let l=c*o,d=o,f=-1;for(let $=0;$<o;$++)if(s[l+$]!==0){if($<d)d=$;f=$}if(u.fill(0),f<0)return;let[h,p]=jg(i.first,i.size,n,d,f);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,d)=>Math.exp(-((d-n)**2)/(2*e*e))),i=r.reduce((l,d)=>l+d,0),{width:s,height:o,data:a}=t,c=new Float32Array(s*o);for(let l=0;l<o;l++){let d=l*s;for(let f=0;f<s;f++){let h=0;for(let p=-n;p<=n;p++)h+=(a[d+Math.min(s-1,Math.max(0,f+p))]??0)*(r[p+n]??0);c[d+f]=h/i}}let u=new Float32Array(s*o);for(let l=0;l<o;l++){let d=l*s;for(let f=-n;f<=n;f++){let h=(r[f+n]??0)/i,p=Math.min(o-1,Math.max(0,l+f))*s;for(let $=0;$<s;$++)u[d+$]=(u[d+$]??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 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 zO=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 DO(t){let e=4294967295;for(let n of t)e=(zO[(e^n)&255]??0)^e>>>8;return(e^4294967295)>>>0}function er(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(DO(n.subarray(4,8+e.length)),8+e.length),n}function _g(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 Bg(t){return GO(t,{level:1,strategy:jO.Z_RLE})}function Wg(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),er("IHDR",r),...n,er("IDAT",Bg(_g(t.data,t.width,t.height))),er("IEND",new Uint8Array)])}function Ug(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 er("PLTE",i)}function Kg(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),er("IHDR",s),er("IDAT",Bg(_g(i,t*r,e))),er("IEND",new Uint8Array)])}function ir(t){return Kg(t.width,t.height,2,3,t.data)}function rn(t){return Kg(t.width,t.height,6,4,t.data)}function ri(t,e){return Wg(t,Tg,[Ug(e),er("tRNS",Uint8Array.from({length:256},(n,r)=>r))])}function nd(t){return Wg(t,0,[])}function _a(t,e){if(!ei(t)||t[25]!==Tg)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"?Ug(e):n.subarray(i,s)),i=s}return Buffer.concat(r)}var sr=100,me=25000000,XO=536870912,es=["safe","questionable","explicit"],ii=["nudity","underwear"],od=["comic","monochrome","sketch","chibi"],Xg=["off","5","10","25","50","100"],tb=["off","720","1080","1440","1800","2560"],eb={nudity:new Set(["nude","naked","topless","bottomless","nipples","naked_towel","undressing"]),underwear:new Set(["underwear","panties","pantsu","bra","lingerie","pantyshot"])},tI={comic:new Set(["comic","4koma"]),monochrome:new Set(["monochrome","greyscale"]),sketch:new Set(["sketch","lineart","line_art"]),chibi:new Set(["chibi"])},eI=/^(?:rating|score|width|height|filetype|dimension):/,fo={safe:"s",questionable:"q",explicit:"e"},nb=8191,nI=20000,rI=5000,zg=3000,Dg=8,iI=8,sI=8000,oI=3000,rb=60000,qg=3,aI=3,cI="https://static.zerochan.net",ib="https://s1.zerochan.net",ad=`ttheme/${Tt.version} (+${Tt.homepage})`,uI=["orig","tile","thumb","cut"],sb=new Map,lI=II(process.env.TTHEME_FIND_HOSTS),dI=OI(process.env.TTHEME_FIND_CUTOUTS);VO(oI);var fI=["artist","character","copyright"];function Yg(t){try{return qO(t)}catch{return[]}}function ns(t){return t.startsWith("//")?`https:${t}`:t}function ar(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 hI(t){let e=t.trim(),r=(e?JSON.parse(e):{}).tags??{};return new Map(Object.entries(r).map(([i,s])=>[i,String(s)]))}function id(t,e,n){let r=ns(String(t??""));return{file:r,width:Number(e)||0,height:Number(n)||0,ext:ar(r)}}function xn(t){return String(t??"").split(/\s+/).filter(Boolean)}function sd(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 ob(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,...sd(t.created_at)?{posted:sd(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 mI(t){let e=hI(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 ob(n,{preview:n.preview_url,file:r,ext:String(n.file_ext||ar(r)).toLowerCase(),owner:n.author,md5:n.md5,tags:i,named:{artist:s("artist"),character:s("character"),copyright:s("copyright")},solo:void 0,versions:[id(n.jpeg_url,n.jpeg_width,n.jpeg_height),id(n.sample_url,n.sample_width,n.sample_height)]})})}function pI(t){return mo(t).flatMap((e)=>{let n=ns(String(e.file_url??"")),r=String(e.tag_string??""),i=e.media_asset??{};return ob(e,{preview:i.variants?.find((s)=>s.type==="360x360")?.url??e.preview_file_url,file:n,ext:String(e.file_ext||ar(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)=>id(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 ab(t){return t.toLowerCase().replace(/\s+/g,"_")}function gI(t){return(Array.isArray(t)?t:[]).map((e)=>ab(String(e)))}function bI(t){return String(t??"").replace(/[^0-9a-z]+/gi,".").replace(/^\.+|\.+$/g,"")||"zerochan"}function wI(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=gI(i.tags),a=ns(String(i.full??""));return[{id:s,width:Number(i.width)||0,height:Number(i.height)||0,file:a,ext:ar(a),preview:`${ib}/${bI(i.tag??i.primary)}.600.${s}.jpg`,owner:"",score:0,rating:o.some((c)=>eb.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 $I={mangaka:"artist",studio:"artist",character:"character",series:"copyright",game:"copyright"};function Jg(t){return t.replace(/&(?:#(\d+)|amp|quot|apos|lt|gt);/g,(e,n)=>n?String.fromCharCode(Number(n)):{"&":"&",""":'"',"'":"'","<":"<",">":">"}[e]??e)}function kI(t){let e={artist:[],character:[],copyright:[]};for(let[,r,i]of t.matchAll(/<li class="([a-z]+)[^"]*"[^>]*\bdata-tag="([^"]*)"/g)){let s=$I[r],o=ab(Jg(i));if(s&&!e[s].includes(o))e[s].push(o)}let n=sd(/"datePublished":\s*"([^"]+)"/.exec(t)?.[1]);return{named:e,source:"",owner:Jg(/\buploader = \{\s*name: '([^']*)'/.exec(t)?.[1]??""),...n?{posted:n}:{}}}function yI(t){return Number(/Zerochan has ([\d,]+) /.exec(t)?.[1]?.replace(/,/g,"")??0)}function vI(t){return mo(t).flatMap((e)=>{let n=String(e.value??"");return n?[{value:n,count:Number(e.post_count)||0}]:[]})}function SI(t){return mo(t).flatMap((e)=>{let n=String(e.name??"");return n?[{value:n,count:Number(e.count)||0}]:[]})}function EI(t){return Number(/count="(\d+)"/.exec(t)?.[1]??0)}function MI(t){let n=(t.trim()?JSON.parse(t):{}).counts?.posts;return n===null?Number.NaN:Number(n)||0}function OI(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 II(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 Ba(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 Ba(t,es,["safe"])}function rs(t){return Ba(t,ii,ii,"none")}function Wa(t){return Ba(t,od,[],"none")}function po(t){let e=Y.map((n)=>n.name);return Ba(t,e,e)}function cd(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 ud(t,e,n){return{safe:new Set(t),questionable:new Set(e),explicit:new Set(n)}}function ld(t){let e=lI.get(t.key),n=dI.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 cb(t){return t.length<2?t.join(""):t.map((e)=>`~${e}`).join(" ")}function ub(t){return t>0?[`width:>=${t}`,`height:>=${t}`]:[]}function Vg(t){let e=ld(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}`]:[],...ub(i)],cutouts:cb(e.cutouts),ratings:ud([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(sr),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:mI,count:EI,uploadedBy:(r)=>`user:${r}`}}function xI(t){let e=ld(t),n=ud(["g"],["s","q"],["e"]);return{...e,scored:!0,narrow:({score:r,size:i,png:s})=>[...r>0?[`score:>=${r}`]:[],...ub(i),...s?["filetype:png"]:[]],cutouts:cb(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(sr),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:pI,count:MI,uploadedBy:(r)=>`user:${r}`}}function rd(t){return t.split(/\s+/).filter((e)=>e&&!/^(?:order|dimension):/.test(e)).map((e)=>e.split("_").map(encodeURIComponent).join("+")).join(",")}function Zg(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 NI(t){let e=ld(t);return{...e,scored:!1,narrow:({size:n})=>n>=1800?["dimension:huge"]:n>0?["dimension:large"]:[],cutouts:e.cutouts[0]??"",ratings:ud(["g"],["q"],["e"]),rate:()=>"",best:"order:fav",tagBudget:3,ors:!1,missing:404,postsUrl:(n,r)=>`${e.origin}/${rd(n)}?${new URLSearchParams({json:"",l:String(sr),p:String(r+1),...Zg(n)})}`,countUrl:(n)=>`${e.origin}/${rd(n)}?${new URLSearchParams({xml:"",l:"1"})}`,postUrl:(n)=>`${e.origin}/${n}?json=`,pageUrl:(n)=>`${e.origin}/${n}`,parse:wI,count:yI,credits:kI,counts:(n)=>rd(n).split(",").length===1&&!("d"in Zg(n)),guesses:(n)=>(n.tags.includes("transparent_background")?["png","jpg"]:["jpg","png"]).map((r)=>n.preview.replace(ib,cI).replace(/\.600\.(\d+)\.jpg$/,`.full.$1.${r}`))}}function RI(t){let e=Qg(`https://${t}`);return Y.find((n)=>Qg(n.origin)===e)}function dd(t){return t.split(/\s+/).filter((e)=>e&&!eI.test(e)).length}function Ua(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=RI(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=[xI({key:"danbooru",name:"danbooru",origin:"https://shima.donmai.us",cutouts:["transparent_background"],vouched:!1,ansi:2}),Vg({key:"konachan",name:"konachan",origin:"https://konachan.net",cutouts:["transparent","vector"],vouched:!1,ansi:6}),Vg({key:"yande",name:"yande.re",origin:"https://yande.re",cutouts:["transparent_png"],vouched:!0,ansi:5}),NI({key:"zerochan",name:"zerochan",origin:"https://www.zerochan.net",cutouts:["transparent_background"],vouched:!1,ansi:3})],Zt=Y.find((t)=>t.key==="danbooru"),cr=134217728;function pe(t,e){let n=Y.indexOf(t);return(n===-1?Y.length:n)*cr+e}function Qg(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:Zt,url:e.mirror.file}:{site:t,url:n.file}}function Ka(t,e){return e.mirror?{site:Zt,url:e.mirror.preview}:{site:t,url:e.preview}}function za(t,e=ii){return t.tags.filter((n)=>e.some((r)=>eb[r].has(n)))}function lb(t,e){return t.tags.filter((n)=>e.some((r)=>tI[r].has(n)))}function Da(t,e,n=["safe"]){return n.some((r)=>t.ratings[r].has(e.rating))}function db(t,e){return t.rate(["safe"])===""?void 0:es.find((n)=>t.ratings[n].has(e.rating))}function sn(t){return[t,...t.smaller].find((e)=>e.width*e.height<=me)}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 ur(){return ho(process.env.XDG_CACHE_HOME??ho(ZO(),".cache"),"ttheme")}function Ge(t){return ho(ur(),t.key)}function hb(t=XO,e=ur()){let n=[],r=0;for(let i of Yg(e))for(let s of uI){let o=ho(e,i,s);for(let a of Yg(o)){let c=ho(o,a);try{let{size:u,mtimeMs:l}=JO(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{YO(i.path,{force:!0}),r-=i.size}catch{}}}function TI(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)?rb:Math.max(0,n-e)}function Nn(t){return sb.get(t.key)??0}function PI(t){for(let e=t;e instanceof Error;e=e.cause)if(e.code==="ECONNRESET")return!0;return!1}function HI(t){return(t.headers.get("server")??"").startsWith("cloudflare")&&t.headers.get("cf-mitigated")==="challenge"}function AI(t,e){let n=new URL(e,t);if(!n.search)n.search=new URL(t).search;return n.href}async function or(t,e,n,r={},i=nI){let s=e;for(let o=1,a=0;;o++){let c=Nn(t)-Date.now();if(c>0)await QO(c,void 0,{signal:n});let u;try{u=await fetch(s,{headers:{"User-Agent":ad,Referer:`${t.origin}/`,...r},redirect:"manual",signal:i?AbortSignal.any([n,AbortSignal.timeout(i)]):n})}catch(d){if(o<qg&&!n.aborted&&PI(d))continue;throw d}let l=u.headers.get("location");if(l&&u.status>=300&&u.status<400&&a<aI){await u.body?.cancel(),s=AI(s,l),a++,o--;continue}if(u.status===429&&o<qg){await u.body?.cancel();let d=TI(u.headers.get("retry-after"),Date.now());if(d>rb)throw Error(`${t.name} asks to wait ${Math.ceil(d/1000)}s`);sb.set(t.key,Math.max(Nn(t),Date.now()+d));continue}if(!u.ok)throw await u.body?.cancel(),Object.assign(Error(HI(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 or(t,e,n)).text()}catch(r){if(t.missing!==void 0&&r.status===t.missing)return"";throw r}}async function mb(t,e,n,r){return t.parse(await qa(t,t.postsUrl(e,n),r))}async function fd(t,e,n){return t.count(await qa(t,t.countUrl(e),n))}async function is(t,e,n){let[r]=t.parse(await qa(t,t.postUrl(e),n));return r}async function Ya(t,e,n){return t.credits?.(await qa(t,t.pageUrl(e),n))}var FI=/^https?:\/\/(?:i\.pximg\.net|i\d*\.pixiv\.net|img\d*\.pixiv\.net)\/\S*\/(\d+)(?:_p\d+)?(?:_\w+)?\.\w+(?:[?#]\S*)?$/i,CI=/^https?:\/\/(?:www\.)?pixiv\.net\/member_illust\.php\?\S*\billust_id=(\d+)/i;function bo(t){let e=FI.exec(t)?.[1]??CI.exec(t)?.[1];return e?`https://www.pixiv.net/artworks/${e}`:t}function Ja(t,e){return t.credits!==void 0&&e.named.artist.length===0}function wo(t,e){for(let n of fI){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 LI(t){let e=new URLSearchParams({limit:String(2*sr),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 jI(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 Va(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=ar(r.file)}}}async function Za(t,e){let n=new Map;if(Nn(Zt)>Date.now())return n;for(let r=0;r<t.length;r+=sr){let i=await(await or(Zt,LI(t.slice(r,r+sr)),e,{},rI)).text();for(let[s,o]of jI(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 or(t,r,n,{Range:`bytes=0-${nb}`}),s=nn(new Uint8Array(await i.arrayBuffer()));return e.file=r,e.ext=ar(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 pb(t,e){if(Nn(Zt)<=Date.now())try{let i=new URLSearchParams({"search[query]":t,"search[type]":"tag_query",limit:String(Dg)}),s=`${Zt.origin}/autocomplete.json?${i}`;return vI(await(await or(Zt,s,e,{},zg)).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(Dg)});return SI(await(await or(n,`${n.origin}/tag.json?${r}`,e,{},zg)).text())}function GI(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 gb(t,e){if(Nn(Zt)>Date.now())return[];let n=new URLSearchParams({"search[query]":t,"search[category]":"character",limit:String(iI)});return GI(await(await or(Zt,`${Zt.origin}/related_tag.json?${n}`,e,{},sI)).text())}function bb(t,e){return e.slice(0,t.ors?t.tagBudget:1)}async function wb(t,e,n){let r=await or(t,e,n,{Range:`bytes=0-${nb}`});return nn(new Uint8Array(await r.arrayBuffer()))}async function Qa(t,e,n,r){let i=await or(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:d,value:f}=await o.read();if(d)break;a.push(f),c+=f.length,r?.(c,s)}let u=new Uint8Array(c),l=0;for(let d of a)u.set(d,l),l+=d.length;return u}var qI=12,YI=/^[0-9a-f]{40}$/;function ss(){return os(ur(),"drawn")}function $b(t){return _I("sha1").update(JSON.stringify(t)).digest("hex")}function kb(t){return BI(os(ss(),t))}function yb(t){let e=os(ss(),t);try{let n=UI(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 DI(e,a,a),{stem:i.stem,fill:i.fill,...i.peak?{peak:i.peak}:{},figure:s,picture:o}}catch{return}}function hd(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])),JI()}function JI(){let t=WI(ss()).filter((e)=>YI.test(e)).flatMap((e)=>{try{return[{name:e,at:zI(os(ss(),e)).mtimeMs}]}catch{return[]}}).sort((e,n)=>n.at-e.at);for(let{name:e}of t.slice(qI))KI(os(ss(),e),{force:!0})}import{readdirSync as nx,readFileSync as Rb}from"node:fs";import{basename as rx,join as Tb}from"node:path";/*!
|
|
2
|
+
import{createRequire as yM}from"node:module";var mM=Object.create;var{getPrototypeOf:pM,defineProperty:Ip,getOwnPropertyNames:gM}=Object;var bM=Object.prototype.hasOwnProperty;function wM(t){return this[t]}var $M,kM,Pl=(t,e,n)=>{var r=t!=null&&typeof t==="object";if(r){var i=e?$M??=new WeakMap:kM??=new WeakMap,s=i.get(t);if(s)return s}n=t!=null?mM(pM(t)):{};let o=e||!t||!t.__esModule?Ip(n,"default",{value:t,enumerable:!0}):n;for(let a of gM(t))if(!bM.call(o,a))Ip(o,a,{get:wM.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=yM(import.meta.url);var Ul=wt((QL,Zp)=>{var _M=Kt("util"),Vp=Kt("stream"),je=Zp.exports=function(){Vp.call(this),this._buffers=[],this._buffered=0,this._reads=[],this._paused=!1,this._encoding="utf8",this.writable=!0};_M.inherits(je,Vp);je.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))};je.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};je.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()};je.prototype.destroySoon=je.prototype.end;je.prototype._end=function(){if(this._reads.length>0)this.emit("error",Error("Unexpected end of input"));this.destroy()};je.prototype.destroy=function(){if(!this._buffers)return;this.writable=!1,this._reads=null,this._buffers=null,this.emit("close")};je.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)};je.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)};je.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 Wl=wt((UM)=>{var tr=[{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]}];UM.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<tr.length;a++){let c=tr[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};UM.getInterlaceIterator=function(t){return function(e,n,r){let i=e%tr[r].x.length,s=(e-i)/tr[r].x.length*8+tr[r].x[i],o=n%tr[r].y.length,a=(n-o)/tr[r].y.length*8+tr[r].y[o];return s*4+a*t*4}}});var Kl=wt((t3,Qp)=>{Qp.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 zl=wt((e3,tg)=>{var zM=Wl(),DM=Kl();function Xp(t,e,n){let r=t*e;if(n!==8)r=Math.ceil(r/(8/n));return r}var ts=tg.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=zM.getImagePasses(n,r);for(let c=0;c<a.length;c++)this._images.push({byteWidth:Xp(a[c].width,s,o),height:a[c].height,lineIndex:0})}else this._images.push({byteWidth:Xp(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};ts.prototype.start=function(){this.read(this._images[this._imageIndex].byteWidth+1,this._reverseFilterLine.bind(this))};ts.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}};ts.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}};ts.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}};ts.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=DM(u,c,l);e[o]=a+f}};ts.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 rg=wt((n3,ng)=>{var qM=Kt("util"),eg=Ul(),YM=zl(),JM=ng.exports=function(t){eg.call(this);let e=[],n=this;this._filter=new YM(t,{read:this.read.bind(this),write:function(r){e.push(r)},complete:function(){n.emit("complete",Buffer.concat(e))}}),this._filter.start()};qM.inherits(JM,eg)});var es=wt((r3,ig)=>{ig.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 Yl=wt((i3,sg)=>{var Dl=[];(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;Dl[t]=e}})();var ql=sg.exports=function(){this._crc=-1};ql.prototype.write=function(t){for(let e=0;e<t.length;e++)this._crc=Dl[(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=Dl[(e^t[n])&255]^e>>>8;return e^-1}});var Jl=wt((s3,og)=>{var Nt=es(),VM=Yl(),At=og.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(){}};At.prototype.start=function(){this.read(Nt.PNG_SIGNATURE.length,this._parseSignature.bind(this))};At.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))};At.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 VM,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))};At.prototype._skipChunk=function(){this.read(8,this._parseChunkBegin.bind(this))};At.prototype._handleChunkEnd=function(){this.read(4,this._parseChunkEnd.bind(this))};At.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))};At.prototype._handleIHDR=function(t){this.read(t,this._parseIHDR.bind(this))};At.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()};At.prototype._handlePLTE=function(t){this.read(t,this._parsePLTE.bind(this))};At.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()};At.prototype._handleTRNS=function(t){this.simpleTransparency(),this.read(t,this._parseTRNS.bind(this))};At.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()};At.prototype._handleGAMA=function(t){this.read(t,this._parseGAMA.bind(this))};At.prototype._parseGAMA=function(t){this._crc.write(t),this.gamma(t.readUInt32BE(0)/Nt.GAMMA_DIVISION),this._handleChunkEnd()};At.prototype._handleIDAT=function(t){if(!this._emittedHeadersFinished)this._emittedHeadersFinished=!0,this.headersFinished();this.read(-t,this._parseIDAT.bind(this,t))};At.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()};At.prototype._handleIEND=function(t){this.read(t,this._parseIEND.bind(this))};At.prototype._parseIEND=function(t){if(this._crc.write(t),this._hasIEND=!0,this._handleChunkEnd(),this.finished)this.finished()}});var Vl=wt((nO)=>{var ag=Wl(),ZM=[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]}],QM=[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 XM(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 tO(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);ZM[r](e,i,f,s),s+=r}return s}function eO(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);QM[r](e,f,d,s)}i.resetAfterLine()}}nO.dataToBitMap=function(t,e){let{width:n,height:r,depth:i,bpp:s,interlace:o}=e,a;if(i!==8)a=XM(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=ag.getImagePasses(n,r),d=ag.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=tO(f[h],c,d,s,t,l);else eO(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 Zl=wt((a3,cg)=>{function iO(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 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=!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}}cg.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)iO(t,u,i,s,c);else{if(a)sO(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 fg=wt((c3,lg)=>{var aO=Kt("util"),Ql=Kt("zlib"),ug=Ul(),cO=rg(),uO=Jl(),lO=Vl(),fO=Zl(),en=lg.exports=function(t){ug.call(this),this._parser=new uO(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()};aO.inherits(en,ug);en.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};en.prototype._inflateData=function(t){if(!this._inflate)if(this._bitmapInfo.interlace)this._inflate=Ql.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,Ql.Z_MIN_CHUNK);this._inflate=Ql.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)};en.prototype._handleMetaData=function(t){this._metaData=t,this._bitmapInfo=Object.create(t),this._filter=new cO(this._bitmapInfo)};en.prototype._handleTransColor=function(t){this._bitmapInfo.transColor=t};en.prototype._handlePalette=function(t){this._bitmapInfo.palette=t};en.prototype._simpleTransparency=function(){this._metaData.alpha=!0};en.prototype._headersFinished=function(){this.emit("metadata",this._metaData)};en.prototype._finished=function(){if(this.errord)return;if(!this._inflate)this.emit("error","No Inflate block");else this._inflate.end()};en.prototype._complete=function(t){if(this.errord)return;let e;try{let n=lO.dataToBitMap(t,this._bitmapInfo);e=fO(n,this._bitmapInfo,this._options.skipRescale),n=null}catch(n){this._handleError(n);return}this.emit("parsed",e)}});var hg=wt((u3,dg)=>{var Ne=es();dg.exports=function(t,e,n,r){let i=[Ne.COLORTYPE_COLOR_ALPHA,Ne.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=Ne.COLORTYPE_TO_BPP_MAP[r.inputColorType];if(a===4&&!r.inputHasAlpha)a=3;let c=Ne.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 Ne.COLORTYPE_COLOR_ALPHA:b=s[l+3],p=s[l],$=s[l+1],g=s[l+2];break;case Ne.COLORTYPE_COLOR:p=s[l],$=s[l+1],g=s[l+2];break;case Ne.COLORTYPE_ALPHA:b=s[l+1],p=s[l],$=p,g=p;break;case Ne.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 Ne.COLORTYPE_COLOR_ALPHA:case Ne.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 Ne.COLORTYPE_ALPHA:case Ne.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 gg=wt((l3,pg)=>{var mg=Kl();function dO(t,e,n,r,i){for(let s=0;s<n;s++)r[i+s]=t[e+s]}function hO(t,e,n){let r=0,i=e+n;for(let s=e;s<i;s++)r+=Math.abs(t[s]);return r}function mO(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 pO(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 gO(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 bO(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 wO(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 kO(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]-mg(a,c,u);r[i+o]=l}}function yO(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]-mg(o,a,c);i+=Math.abs(u)}return i}var vO={0:dO,1:mO,2:gO,3:wO,4:kO},SO={0:hO,1:pO,2:bO,3:$O,4:yO};pg.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=SO[s[h]](t,c,o,i);if(p<d)l=s[h],d=p}}u[a]=l,a++,vO[l](t,c,o,u,a,i),a+=o,c+=o}return u}});var Xl=wt((f3,bg)=>{var zt=es(),EO=Yl(),MO=hg(),OO=gg(),IO=Kt("zlib"),er=bg.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||IO.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")};er.prototype.getDeflateOptions=function(){return{chunkSize:this._options.deflateChunkSize,level:this._options.deflateLevel,strategy:this._options.deflateStrategy}};er.prototype.createDeflate=function(){return this._options.deflateFactory(this.getDeflateOptions())};er.prototype.filterData=function(t,e,n){let r=MO(t,e,n,this._options),i=zt.COLORTYPE_TO_BPP_MAP[this._options.colorType];return OO(r,e,n,this._options,i)};er.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(EO.crc32(r.slice(4,r.length-4)),r.length-4),r};er.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)};er.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)};er.prototype.packIDAT=function(t){return this._packChunk(zt.TYPE_IDAT,t)};er.prototype.packIEND=function(){return this._packChunk(zt.TYPE_IEND,null)}});var yg=wt((d3,kg)=>{var xO=Kt("util"),wg=Kt("stream"),NO=es(),RO=Xl(),$g=kg.exports=function(t){wg.call(this);let e=t||{};this._packer=new RO(e),this._deflate=this._packer.createDeflate(),this.readable=!0};xO.inherits($g,wg);$g.prototype.pack=function(t,e,n,r){if(this.emit("data",Buffer.from(NO.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 Ig=wt((uo,Og)=>{var vg=Kt("assert").ok,ns=Kt("zlib"),TO=Kt("util"),Sg=Kt("buffer").kMaxLength;function ti(t){if(!(this instanceof ti))return new ti(t);if(t&&t.chunkSize<ns.Z_MIN_CHUNK)t.chunkSize=ns.Z_MIN_CHUNK;if(ns.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 PO(t){return new ti(t)}function Eg(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 ns.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(vg(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}vg(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>=Sg)throw Eg(this),RangeError("Cannot create final Buffer. It would be larger than 0x"+Sg.toString(16)+" bytes");let h=Buffer.concat(c,u);return Eg(this),h};TO.inherits(ti,ns.Inflate);function AO(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=ns.Z_FINISH;return t._processChunk(e,n)}function Mg(t,e){return AO(new ti(e),t)}Og.exports=uo=Mg;uo.Inflate=ti;uo.createInflate=PO;uo.inflateSync=Mg});var tf=wt((h3,Ng)=>{var xg=Ng.exports=function(t){this._buffer=t,this._reads=[]};xg.prototype.read=function(t,e){this._reads.push({length:Math.abs(t),allowLess:t<0,func:e})};xg.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 Rg=wt((CO)=>{var HO=tf(),FO=zl();CO.process=function(t,e){let n=[],r=new HO(t);return new FO(e,{read:r.read.bind(r),write:function(s){n.push(s)},complete:function(){}}).start(),r.process(),Buffer.concat(n)}});var Hg=wt((p3,Ag)=>{var Tg=!0,Pg=Kt("zlib"),jO=Ig();if(!Pg.deflateSync)Tg=!1;var GO=tf(),BO=Rg(),_O=Jl(),UO=Vl(),WO=Zl();Ag.exports=function(t,e){if(!Tg)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 GO(t);if(new _O(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=Pg.inflateSync($);else{let I=((i.width*i.bpp*i.depth+7>>3)+1)*i.height;g=jO($,{chunkSize:I,maxLength:I})}if($=null,!g||!g.length)throw Error("bad png - invalid inflate data response");let b=BO.process(g,i);$=null;let y=UO.dataToBitMap(b,i);b=null;let S=WO(y,i,e.skipRescale);return i.data=S,i.gamma=u||0,i}});var jg=wt((g3,Lg)=>{var Fg=!0,Cg=Kt("zlib");if(!Cg.deflateSync)Fg=!1;var KO=es(),zO=Xl();Lg.exports=function(t,e){if(!Fg)throw Error("To use the sync capability of this library in old node versions, please pin pngjs to v2.3.0");let r=new zO(e||{}),i=[];if(i.push(Buffer.from(KO.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=Cg.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 Gg=wt((YO)=>{var DO=Hg(),qO=jg();YO.read=function(t,e){return DO(t,e||{})};YO.write=function(t,e){return qO(t,e)}});var _g=wt((eI)=>{var ZO=Kt("util"),Bg=Kt("stream"),QO=fg(),XO=yg(),tI=Gg(),Vt=eI.PNG=function(t){if(Bg.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 QO(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 XO(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"))};ZO.inherits(Vt,Bg);Vt.sync=tI;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 hd=wt((T5,E0)=>{var dd={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"},Z2={up:(t=1)=>"\x1B[S".repeat(t),down:(t=1)=>"\x1B[T".repeat(t)},Q2={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?dd.up():"");if(t)e+=dd.left;return e}};E0.exports={cursor:dd,scroll:Z2,erase:Q2,beep:"\x07"}});import{spawnSync as HL}from"node:child_process";import{isMainThread as FL}from"node:worker_threads";import{parseArgs as OL}from"node:util";var xt={name:"@kecan0406/ttheme",version:"1.2.12",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 pC,readFileSync as gC}from"node:fs";var xp=(()=>{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}})(),Np=(t)=>{return t===12288||t>=65281&&t<=65376||t>=65504&&t<=65510},Rp=(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 SM=/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]|\u001b\]8;[^;]*;.*?(?:\u0007|\u001b\u005c)/y,EM=/[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y,Tp=/(?:(?![\uFF61-\uFF9F\uFF00-\uFFEF])[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}\p{Script=Tangut}]){1,1000}/yu,MM=/\t{1,1000}/y,Pp=/[\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,OM=/(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y,IM=/\p{M}+/gu,xM={limit:1/0,ellipsis:""},Ap=(t,e={},n={})=>{let r=e.limit??1/0,i=e.ellipsis??"",s=e?.ellipsisWidth??(i?Ap(i,xM,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=[[OM,f],[SM,0],[EM,a],[MM,c],[Pp,u],[Tp,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 _ of j.replaceAll(IM,"")){let X=_.codePointAt(0)||0;if(Np(X))F=2;else if(Rp(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+=_.length,R+=F}I=N=0}if($>=g)break t;for(let j=0,_=h.length;j<_;j++){let[X,W]=h[j];if(X.lastIndex=$,X.test(t)){if(b=X===Tp?xp(t.slice($,X.lastIndex)):X===Pp?1:X.lastIndex-$,F=b*W,R+F>E)S=Math.min(S,$+Math.floor((E-R)/W));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}},Hp=Ap;var NM={limit:1/0,ellipsis:"",ellipsisWidth:0},RM=(t,e={})=>{return Hp(t,NM,e).width},Q=RM;function Al(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 Ce(t){return`\x1B[38;2;${Al(t)}m`}function Ha(t,e){return`\x1B[48;2;${Al(t)};38;2;${Al(e)}m`}function Fp(t,e="\x1B[39m"){return`${t.map((n)=>`${Ce(n)}■`).join(" ")}${e}`}var Pt="\x1B[0m",at="\x1B[1m",P="\x1B[2m",he="\x1B[22m",Ji="\x1B[32m",Jt="\x1B[33m",Fa="\x1B[36m",Sn=["⠋","⠙","⠹","⠸","⠼","⠴","⠦","⠧","⠇","⠏"],oo="⧉";function Ca(t,e){return e?`\x1B]8;;${e}\x1B\\${t}\x1B]8;;\x1B\\`:t}function Hl(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 Fl(t,e){let n="",r=0,i=0;while(i<t.length){let s=Hl(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}=Fl(t,e-1);return`${i}${t.includes("\x1B")?"\x1B[0m":""}…${n?" ".repeat(e-1-s):""}`}function Cp(t,e){let{head:n,used:r}=Fl(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}=Fl(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 i0,readFileSync as id}from"node:fs";import{join as s0}from"node:path";var TM=/^#[0-9a-f]{6}$/;function ne(t){return TM.test(t)}function rt(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=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 yt(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 bt(t,e){let n=yt(t),r=yt(e);return(Math.max(n,r)+0.05)/(Math.min(n,r)+0.05)}function La(t,e){return Math.round(bt(t,e)*100)/100}function PM(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(PM),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 Zn=7,Lp=3,Cl=0.15,jp=1.6,jl=[1,2,3,4,5,6,9,10,11,12,13,14],Gp=[7,15],Qn=[1,2,3,4,5,6],me={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}},co=0.03,Le=25,Vi=15,Zi=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 Ll(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 ${La(s,r)}:1, needs ${n}:1`]:[]})}function Bp(t,e){return Math.min(...e.map((n)=>bt(En(t,n),t.background)))}var _p=[{rule:"foreground",label:"foreground on background",unit:"ratio",min:Zn,measure:({foreground:t,background:e})=>bt(t,e),check:({foreground:t,background:e})=>bt(t,e)<Zn?[`foreground ${t} on ${e} is ${La(t,e)}:1, needs ${Zn}:1`]:[]},{rule:"accents",label:"weakest accent on background",unit:"ratio",min:Lp,measure:(t)=>Bp(t,jl),check:(t)=>Ll(t,jl,Lp)},{rule:"ansi0-dark",label:"ansi0 luminance",unit:"luminance",max:Cl,measure:(t)=>yt(En(t,0)),check:(t)=>{let e=En(t,0);return yt(e)>Cl?[`ANSI 0 ${e} has luminance ${yt(e).toFixed(3)}, needs <= ${Cl}`]:[]}},{rule:"light-ansi",label:"ansi7 and ansi15 on background",unit:"ratio",min:Zn,measure:(t)=>Bp(t,Gp),check:(t)=>Ll(t,Gp,Zn)},{rule:"ansi8-visible",label:"ansi8 on background",unit:"ratio",min:jp,measure:(t)=>bt(En(t,8),t.background),check:(t)=>Ll(t,[8],jp)},{rule:"selection",label:"foreground on selection",unit:"ratio",min:Zn,measure:({foreground:t,selectionBackground:e})=>e===void 0?Number.NaN:bt(t,e),check:({foreground:t,selectionBackground:e})=>e!==void 0&&bt(t,e)<Zn?[`foreground ${t} on selection ${e} is ${La(t,e)}:1, needs ${Zn}:1`]:[]}];function xe(t,e){let n=Math.abs(t-e)%360;return Math.min(n,360-n)}var Qe=(t)=>t>8?t-8:t;function Qi(t){let e=t.signatureSlots.filter((n)=>n.startsWith("ansi")).map((n)=>Number(n.slice(4)));return new Set(e.flatMap((n)=>Qn.includes(Qe(n))?[n,n>8?n-8:n+8]:[n]))}function ao(t,e){let n=St(En(t,e));return n.c<co?void 0:n}function Xn(t){let e=Qi(t);return jl.flatMap((n)=>{let r=ao(t,n),i=me[Qe(n)];if(r===void 0||i===void 0||e.has(n))return[];let s=xe(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 Qn.flatMap((n)=>{let r=ao(t,n),i=ao(t,n+8);if(r===void 0||i===void 0||e.has(`ansi${n}`)&&e.has(`ansi${n+8}`))return[];return[{normal:n,gap:xe(r.h,i.h)}]})}function On(t){let e=Qi(t);return[0,8].flatMap((n)=>Qn.flatMap((r)=>Qn.filter((i)=>i>r).flatMap((i)=>{let[s,o]=[n+r,n+i],a=ao(t,s),c=ao(t,o);if(a===void 0||c===void 0||e.has(s)&&e.has(o))return[];return xe(a.h,c.h)<Vi&&Math.abs(a.l-c.l)<Zi?[[s,o]]:[]})))}var AM=[{rule:"ansi-role",label:"accent hue outside its ANSI role",unit:"degrees",max:0,measure:(t)=>Math.max(0,...Xn(t).map((e)=>e.over)),check:(t)=>Xn(t).map(({slot:e,hue:n,over:r})=>{let i=me[Qe(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:Le,measure:(t)=>Math.max(0,...Mn(t).map((e)=>e.gap)),check:(t)=>Mn(t).filter((e)=>e.gap>Le).map(({normal:e,gap:n})=>`ANSI ${e+8} is ${n.toFixed(0)}° from ANSI ${e}, needs <= ${Le}°`)},{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 ${Vi}° hue and ${Zi} lightness`)}],ja=[..._p,...AM],Gl=ja.map((t)=>t.rule),pe=ja.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 Xe(t){return ja.map((e)=>Math.round(e.measure(t)*1000)/1000)}function Up(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 Up(ja,t)}function Wp(t){return Up(_p,t)}function Kp(t){return t.flatMap(Qr)}import{chmodSync as HM,copyFileSync as FM,existsSync as Xi,mkdirSync as CM,readFileSync as Bl,realpathSync as LM,renameSync as Dp,rmSync as zp,statSync as jM,writeFileSync as qp}from"node:fs";import{dirname as GM}from"node:path";function Yp(t){return`${t}.ttheme.bak`}var BM=/^(?:#|--) ttheme begin$|path = "ttheme-|^DefaultProfile=ttheme-/m;function _l(t){let e=Yp(t);if(Xi(t)&&!Xi(e)&&!BM.test(Bl(t,"utf8")))FM(t,e)}function H(t,e){let n=Xi(t)?LM(t):t;CM(GM(n),{recursive:!0});let r=`${n}.ttheme-${process.pid}`;if(qp(r,e),Xi(n))HM(r,jM(n).mode&4095);Dp(r,n)}function Xr(t,e,n){if(qp(t,n),t!==e)Dp(t,e)}function tn(t,e){if((Xi(t)?Bl(t,"utf8"):void 0)===e)return!1;return _l(t),H(t,e),!0}function Jp(t,e){let n=Yp(t),r=Xi(n)?Bl(n,"utf8"):void 0;if(e===""&&r===void 0)return zp(t,{force:!0}),"removed";if(H(t,e),r===void 0||r===e)return zp(n,{force:!0}),"restored";return"kept backup"}import{createHash as iw}from"node:crypto";import{copyFileSync as Fx,existsSync as If,mkdirSync as Cx,readdirSync as Lx,readFileSync as ds,renameSync as sw,rmSync as fs,statSync as jx}from"node:fs";import{basename as ow,isAbsolute as Gx,join as z}from"node:path";import{createHash as ax}from"node:crypto";import{existsSync as cx,readdirSync as ux,readFileSync as lx,rmSync as fx,statSync as dx,utimesSync as hx}from"node:fs";import{join as us}from"node:path";import{readdirSync as mI,rmSync as pI,statSync as gI}from"node:fs";import{setDefaultAutoSelectFamilyAttemptTimeout as bI}from"node:net";import{homedir as wI}from"node:os";import{join as po}from"node:path";import{setTimeout as $I}from"node:timers/promises";var zg=Pl(_g(),1);import{constants as sI,deflateSync as oI,inflateSync as aI}from"node:zlib";import{inflateRawSync as rI}from"node:zlib";var nI=(()=>{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,_,X,W,Z,U,$t,tt,Vn,Je;function Ve(){var m=F.buffer;n.HEAP8=X=new Int8Array(m),n.HEAP16=Z=new Int16Array(m),n.HEAPU8=W=new Uint8Array(m),n.HEAPU16=U=new Uint16Array(m),n.HEAP32=$t=new Int32Array(m),n.HEAPU32=tt=new Uint32Array(m),n.HEAPF32=Vn=new Float32Array(m),n.HEAPF64=Je=new Float64Array(m)}var Ze=[],Ra=[],Dr=[],wl=!1;function $l(){if(n.preRun){if(typeof n.preRun=="function")n.preRun=[n.preRun];while(n.preRun.length)MS(n.preRun.shift())}vl(Ze)}function kl(){wl=!0,vl(Ra)}function ES(){if(n.postRun){if(typeof n.postRun=="function")n.postRun=[n.postRun];while(n.postRun.length)IS(n.postRun.shift())}vl(Dr)}function MS(m){Ze.unshift(m)}function OS(m){Ra.unshift(m)}function IS(m){Dr.unshift(m)}var qr=0,yl=null,io=null;function xS(m){qr++,n.monitorRunDependencies?.(qr)}function NS(m){if(qr--,n.monitorRunDependencies?.(qr),qr==0){if(yl!==null)clearInterval(yl),yl=null;if(io){var w=io;io=null,w()}}}function ap(m){n.onAbort?.(m),m="Aborted("+m+")",N(m),j=!0,_=1,m+=". Build with -sASSERTIONS for more info.";var w=new WebAssembly.RuntimeError(m);throw i(w),w}var RS="data:application/octet-stream;base64,",cp=(m)=>m.startsWith(RS),Yr;if(n.locateFile){if(Yr="mozjpeg_dec.wasm",!cp(Yr))Yr=b(Yr)}else Yr=new URL("mozjpeg_dec.wasm",import.meta.url).href;function up(m){if(m==Yr&&R)return new Uint8Array(R);if(E)return E(m);throw"both async and sync fetching of the wasm failed"}function TS(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(()=>up(m))}return Promise.resolve().then(()=>up(m))}function lp(m,w,k){return TS(m).then((v)=>WebAssembly.instantiate(v,w)).then(k,(v)=>{N(`failed to asynchronously prepare wasm: ${v}`),ap(v)})}function PS(m,w,k,v){if(!m&&typeof WebAssembly.instantiateStreaming=="function"&&!cp(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"),lp(w,k,v)})});return lp(w,k,v)}function AS(){var m={a:rM};function w(v,O){return qt=v.exports,F=qt.A,Ve(),wp=qt.F,OS(qt.B),NS("wasm-instantiate"),qt}xS("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 PS(R,Yr,m,k).catch(i),{}}function HS(m){this.name="ExitStatus",this.message=`Program terminated with exit(${m})`,this.status=m}var vl=(m)=>{while(m.length>0)m.shift()(n)},FS=n.noExitRuntime||!0;class fp{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=Mp(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 dp=0,CS=0,LS=(m,w,k)=>{var v=new fp(m);throw v.init(w,k),dp=m,CS++,dp},jS=(m,w,k,v,O)=>{},GS=()=>{var m=Array(256);for(var w=0;w<256;++w)m[w]=String.fromCharCode(w);hp=m},hp,Fe=(m)=>{var w="",k=m;while(W[k])w+=hp[W[k++]];return w},zi={},Jr={},Ta={},mp,de=(m)=>{throw new mp(m)},pp,gp=(m)=>{throw new pp(m)},BS=(m,w,k)=>{m.forEach(function(T){Ta[T]=w});function v(T){var G=k(T);if(G.length!==m.length)gp("Mismatched type converter count");for(var J=0;J<m.length;++J)kn(m[J],G[J])}var O=Array(w.length),x=[],C=0;if(w.forEach((T,G)=>{if(Jr.hasOwnProperty(T))O[G]=Jr[T];else{if(x.push(T),!zi.hasOwnProperty(T))zi[T]=[];zi[T].push(()=>{if(O[G]=Jr[T],++C,C===x.length)v(O)})}}),x.length===0)v(O)};function _S(m,w,k={}){var v=w.name;if(!m)de(`type "${v}" must have a positive integer typeid pointer`);if(Jr.hasOwnProperty(m))if(k.ignoreDuplicateRegistrations)return;else de(`Cannot register type '${v}' twice`);if(Jr[m]=w,delete Ta[m],zi.hasOwnProperty(m)){var O=zi[m];delete zi[m],O.forEach((x)=>x())}}function kn(m,w,k={}){if(!("argPackAdvance"in w))throw TypeError("registerType registeredInstance requires argPackAdvance");return _S(m,w,k)}var Vr=8,US=(m,w,k,v)=>{w=Fe(w),kn(m,{name:w,fromWireType:function(O){return!!O},toWireType:function(O,x){return x?k:v},argPackAdvance:Vr,readValueFromPointer:function(O){return this.fromWireType(W[O])},destructorFunction:null})},Sl=[],yn=[],El=(m)=>{if(m>9&&--yn[m+1]===0)yn[m]=void 0,Sl.push(m)},WS=()=>yn.length/2-5-Sl.length,KS=()=>{yn.push(0,1,void 0,1,null,1,!0,1,!1,1),n.count_emval_handles=WS},Zr={toValue:(m)=>{if(!m)de("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=Sl.pop()||yn.length;return yn[w]=m,yn[w+1]=1,w}}}};function Ml(m){return this.fromWireType(tt[m>>2])}var zS={name:"emscripten::val",fromWireType:(m)=>{var w=Zr.toValue(m);return El(m),w},toWireType:(m,w)=>Zr.toHandle(w),argPackAdvance:Vr,readValueFromPointer:Ml,destructorFunction:null},DS=(m)=>kn(m,zS),qS=(m,w)=>{switch(w){case 4:return function(k){return this.fromWireType(Vn[k>>2])};case 8:return function(k){return this.fromWireType(Je[k>>3])};default:throw TypeError(`invalid float width (${w}): ${m}`)}},YS=(m,w,k)=>{w=Fe(w),kn(m,{name:w,fromWireType:(v)=>v,toWireType:(v,O)=>O,argPackAdvance:Vr,readValueFromPointer:qS(w,k),destructorFunction:null})},Ol=(m,w)=>Object.defineProperty(w,"name",{value:m}),bp=(m)=>{while(m.length){var w=m.pop(),k=m.pop();k(w)}};function JS(m){for(var w=1;w<m.length;++w)if(m[w]!==null&&m[w].destructorFunction===void 0)return!0;return!1}function VS(m,w,k,v,O,x){var C=w.length;if(C<2)de("argTypes array size mismatch! Must at least get return value and 'this' types!");var T=w[1]!==null&&k!==null,G=JS(w),J=w[0].name!=="void",ht=C-2,It=Array(ht),Yt=[],Ie=[],Di=function(...Rl){if(Rl.length!==ht)de(`function ${m} called with ${Rl.length} arguments, expected ${ht}`);Ie.length=0;var Tl;if(Yt.length=T?2:1,Yt[0]=O,T)Tl=w[1].toWireType(Ie,this),Yt[1]=Tl;for(var qi=0;qi<ht;++qi)It[qi]=w[qi+2].toWireType(Ie,Rl[qi]),Yt.push(It[qi]);var lM=v(...Yt);function fM(dM){if(G)bp(Ie);else for(var Yi=T?1:2;Yi<w.length;Yi++){var hM=Yi===1?Tl:It[Yi-2];if(w[Yi].destructorFunction!==null)w[Yi].destructorFunction(hM)}if(J)return w[0].fromWireType(dM)}return fM(lM)};return Ol(m,Di)}var ZS=(m,w,k)=>{if(m[w].overloadTable===void 0){var v=m[w];m[w]=function(...O){if(!m[w].overloadTable.hasOwnProperty(O.length))de(`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}},QS=(m,w,k)=>{if(n.hasOwnProperty(m)){if(k===void 0||n[m].overloadTable!==void 0&&n[m].overloadTable[k]!==void 0)de(`Cannot register public name '${m}' twice`);if(ZS(n,m,m),n.hasOwnProperty(k))de(`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},XS=(m,w)=>{var k=[];for(var v=0;v<m;v++)k.push(tt[w+v*4>>2]);return k},tE=(m,w,k)=>{if(!n.hasOwnProperty(m))gp("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},eE=(m,w,k)=>{m=m.replace(/p/g,"i");var v=n["dynCall_"+m];return v(w,...k)},Pa=[],wp,$p=(m)=>{var w=Pa[m];if(!w){if(m>=Pa.length)Pa.length=m+1;Pa[m]=w=wp.get(m)}return w},nE=(m,w,k=[])=>{if(m.includes("j"))return eE(m,w,k);var v=$p(w)(...k);return v},rE=(m,w)=>(...k)=>nE(m,w,k),iE=(m,w)=>{m=Fe(m);function k(){if(m.includes("j"))return rE(m,w);return $p(w)}var v=k();if(typeof v!="function")de(`unknown function pointer with signature ${m}: ${w}`);return v},sE=(m,w)=>{var k=Ol(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},kp,yp=(m)=>{var w=Ep(m),k=Fe(w);return vn(w),k},oE=(m,w)=>{var k=[],v={};function O(x){if(v[x])return;if(Jr[x])return;if(Ta[x]){Ta[x].forEach(O);return}k.push(x),v[x]=!0}throw w.forEach(O),new kp(`${m}: `+k.map(yp).join([", "]))},aE=(m)=>{m=m.trim();let w=m.indexOf("(");if(w!==-1)return m.substr(0,w);else return m},cE=(m,w,k,v,O,x,C)=>{var T=XS(w,k);m=Fe(m),m=aE(m),O=iE(v,O),QS(m,function(){oE(`Cannot call ${m} due to unbound types`,T)},w-1),BS([],T,(G)=>{var J=[G[0],null].concat(G.slice(1));return tE(m,VS(m,J,null,O,x,C),w-1),[]})},uE=(m,w,k)=>{switch(w){case 1:return k?(v)=>X[v]:(v)=>W[v];case 2:return k?(v)=>Z[v>>1]:(v)=>U[v>>1];case 4:return k?(v)=>$t[v>>2]:(v)=>tt[v>>2];default:throw TypeError(`invalid integer width (${w}): ${m}`)}},lE=(m,w,k,v,O)=>{if(w=Fe(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)=>{},J;if(T)J=function(ht,It){return G(It,this.name),It>>>0};else J=function(ht,It){return G(It,this.name),It};kn(m,{name:w,fromWireType:x,toWireType:J,argPackAdvance:Vr,readValueFromPointer:uE(w,k,v!==0),destructorFunction:null})},fE=(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=Fe(k),kn(m,{name:k,fromWireType:x,argPackAdvance:Vr,readValueFromPointer:x},{ignoreDuplicateRegistrations:!0})},dE=(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},hE=(m,w,k)=>dE(m,W,w,k),mE=(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},vp=(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},pE=(m,w)=>m?vp(W,m,w):"",gE=(m,w)=>{w=Fe(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 J=x+G;if(G==O||W[J]==0){var ht=J-T,It=pE(T,ht);if(C===void 0)C=It;else C+=String.fromCharCode(0),C+=It;T=J+1}}}else{var Yt=Array(O);for(var G=0;G<O;++G)Yt[G]=String.fromCharCode(W[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))de("Cannot pass non-string to std::string");if(k&&C)x=mE(O);else x=O.length;var T=Nl(4+x+1),G=T+4;if(tt[T>>2]=x,k&&C)hE(O,G,x+1);else if(C)for(var J=0;J<x;++J){var ht=O.charCodeAt(J);if(ht>255)vn(G),de("String has UTF-16 code units that do not fit in 8 bits");W[G+J]=ht}else for(var J=0;J<x;++J)W[G+J]=O[J];if(v!==null)v.push(vn,T);return T},argPackAdvance:Vr,readValueFromPointer:Ml,destructorFunction(v){vn(v)}})},bE=(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},wE=(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},$E=(m)=>m.length*2,kE=(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},yE=(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},vE=(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},SE=(m,w,k)=>{k=Fe(k);var v,O,x,C;if(w===2)v=bE,O=wE,C=$E,x=(T)=>U[T>>1];else if(w===4)v=kE,O=yE,C=vE,x=(T)=>tt[T>>2];kn(m,{name:k,fromWireType:(T)=>{var G=tt[T>>2],J,ht=T+4;for(var It=0;It<=G;++It){var Yt=T+4+It*w;if(It==G||x(Yt)==0){var Ie=Yt-ht,Di=v(ht,Ie);if(J===void 0)J=Di;else J+=String.fromCharCode(0),J+=Di;ht=Yt+w}}return vn(T),J},toWireType:(T,G)=>{if(typeof G!="string")de(`Cannot pass non-string to C++ string type ${k}`);var J=C(G),ht=Nl(4+J+w);if(tt[ht>>2]=J/w,O(G,ht+4,J+w),T!==null)T.push(vn,ht);return ht},argPackAdvance:Vr,readValueFromPointer:Ml,destructorFunction(T){vn(T)}})},EE=(m,w)=>{w=Fe(w),kn(m,{isVoid:!0,name:w,argPackAdvance:0,fromWireType:()=>{return},toWireType:(k,v)=>{return}})},ME=(m,w,k)=>W.copyWithin(m,w,w+k),Il=[],OE=(m,w,k,v)=>{return m=Il[m],w=Zr.toValue(w),m(null,w,k,v)},IE={},xE=(m)=>{var w=IE[m];if(w===void 0)return Fe(m);return w},Sp=()=>{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.")},NE=(m)=>{if(m===0)return Zr.toHandle(Sp());else return m=xE(m),Zr.toHandle(Sp()[m])},RE=(m)=>{var w=Il.length;return Il.push(m),w},TE=(m,w)=>{var k=Jr[m];if(k===void 0)de(`${w} has unknown type ${yp(m)}`);return k},PE=(m,w)=>{var k=Array(m);for(var v=0;v<m;++v)k[v]=TE(tt[w+v*4>>2],"parameter "+v);return k},AE=Reflect.construct,HE=(m,w,k)=>{var v=[],O=m.toWireType(v,k);if(v.length)tt[w>>2]=Zr.toHandle(v);return O},FE=(m,w,k)=>{var v=PE(m,w),O=v.shift();m--;var x=Array(m),C=(G,J,ht,It)=>{var Yt=0;for(var Ie=0;Ie<m;++Ie)x[Ie]=v[Ie].readValueFromPointer(It+Yt),Yt+=v[Ie].argPackAdvance;var Di=k===1?AE(J,x):J.apply(G,x);return HE(O,ht,Di)},T=`methodCaller<(${v.map((G)=>G.name).join(", ")}) => ${O.name}>`;return RE(Ol(T,C))},CE=(m)=>{if(m>9)yn[m+1]+=1},LE=(m)=>{var w=Zr.toValue(m);bp(w),El(m)},jE=()=>{ap("")},GE=()=>2147483648,BE=(m)=>{var w=F.buffer,k=(m-w.byteLength+65535)/65536;try{return F.grow(k),Ve(),1}catch(v){}},_E=(m)=>{var w=W.length;m>>>=0;var k=GE();if(m>k)return!1;var v=(G,J)=>G+(J-G%J)%J;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=BE(C);if(T)return!0}return!1},xl={},UE=()=>f||"./this.program",so=()=>{if(!so.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,_:UE()};for(var k in xl)if(xl[k]===void 0)delete w[k];else w[k]=xl[k];var v=[];for(var k in w)v.push(`${k}=${w[k]}`);so.strings=v}return so.strings},WE=(m,w)=>{for(var k=0;k<m.length;++k)X[w++]=m.charCodeAt(k);X[w]=0},KE=(m,w)=>{var k=0;return so().forEach((v,O)=>{var x=w+k;tt[m+O*4>>2]=x,WE(v,x),k+=v.length+1}),0},zE=(m,w)=>{var k=so();tt[m>>2]=k.length;var v=0;return k.forEach((O)=>v+=O.length+1),tt[w>>2]=v,0},DE=0,qE=()=>FS||DE>0,YE=(m)=>{if(_=m,!qE())n.onExit?.(m),j=!0;d(m,new HS(m))},JE=(m,w)=>{_=m,YE(m)},VE=JE,ZE=(m)=>52,QE=(m,w)=>w+2097152>>>0<4194305-!!m?(m>>>0)+w*4294967296:NaN;function XE(m,w,k,v,O){var x=QE(w,k);return 70}var tM=[null,[],[]],eM=(m,w)=>{var k=tM[m];if(w===0||w===10)(m===1?I:N)(vp(k,0)),k.length=0;else k.push(w)},nM=(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++)eM(m,W[C+G]);O+=T}return tt[v>>2]=O,0};GS(),mp=n.BindingError=class extends Error{constructor(w){super(w);this.name="BindingError"}},pp=n.InternalError=class extends Error{constructor(w){super(w);this.name="InternalError"}},KS(),kp=n.UnboundTypeError=sE(Error,"UnboundTypeError");var rM={o:LS,q:jS,m:US,l:DS,j:YS,f:cE,b:lE,a:fE,e:gE,c:SE,n:EE,v:ME,i:OE,d:El,k:NE,h:FE,y:CE,g:LE,r:jE,s:_E,t:KE,u:zE,z:VE,w:ZE,p:XE,x:nM},qt=AS(),iM=()=>(iM=qt.B)(),Ep=(m)=>(Ep=qt.C)(m),Nl=(m)=>(Nl=qt.D)(m),vn=(m)=>(vn=qt.E)(m),sM=(m)=>(sM=qt._emscripten_stack_restore)(m),oM=(m)=>(oM=qt._emscripten_stack_alloc)(m),aM=()=>(aM=qt.emscripten_stack_get_current)(),cM=(m)=>(cM=qt.__cxa_increment_exception_refcount)(m),Mp=(m)=>(Mp=qt.G)(m),uM=n.dynCall_jiji=(m,w,k,v,O)=>(uM=n.dynCall_jiji=qt.H)(m,w,k,v,O),Aa;io=function m(){if(!Aa)Op();if(!Aa)io=m};function Op(){if(qr>0)return;if($l(),qr>0)return;function m(){if(Aa)return;if(Aa=!0,n.calledRun=!0,j)return;if(kl(),r(n),n.onRuntimeInitialized)n.onRuntimeInitialized();ES()}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 Op(),s}})(),Ug=nI;function nf(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 ef;function iI(){if(ef)return ef;let t=new WebAssembly.Module(rI(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(Ug(e),typeof e.decode!=="function")throw Error("the JPEG decoder did not start");return ef=e,e}function Wg(t,e){let n=nf(t);if(n&&n.width*n.height>e)throw Error(`${n.width}×${n.height} is over ${e/1e6} megapixels`);let r=null;try{r=iI().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 rs=[137,80,78,71,13,10,26,10],Dg=13,qg=3;function ei(t){return t.length>=rs.length&&rs.every((e,n)=>t[n]===e)}var Yg={0:1,2:3,4:2,6:4};function cI(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||Yg[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 uI(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 lI(t){let{width:e,height:n,type:r}=t,i=Yg[r],s=e*i,o=aI(Buffer.concat(t.idat),{chunkSize:Math.min(268435456,Math.max(65536,n*(s+1)))});if(o.length<n*(s+1))throw Error("truncated PNG");uI(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 Ht(t){let e=cI(t);if(e)return lI(e);let n=zg.PNG.sync.read(Buffer.from(t));return{width:n.width,height:n.height,data:new Uint8Array(n.data)}}function rr(t,e){if(ei(t)){let n=nn(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 Wg(t,e);throw Error("not a PNG or JPEG image")}function Jg(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:lo(t,l,u.w,u.h),box:u,dx:0,dy:0}}function Vg(t,e){let n=new Uint8Array(e.width*e.height*4),r=Jg(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 ir(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=Jg(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 Kg(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 nn(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=Kg(t,"IDAT");return{width:n,height:r,alpha:Kg(i===-1?t:t.subarray(0,i),"tRNS")!==-1}}function Zg(t,e=Dg){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)<Dg)n++;return Math.round(n*100/(e.w*e.h))}function Qg(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=lo(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 fI(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 rf(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=fI(($+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 Xg(t,e,n,r,i,s,o){let a=rf(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 _=0;_<c;_++)d[_]=y[_]*S+E[_]*R+I[_]*F+N[_]*j;else for(let _=0;_<c;_++)d[_]=d[_]+(y[_]*S+E[_]*R+I[_]*F+N[_]*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 tb(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 lo(t,e,n,r){let i=rf(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 Xg(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,$]=tb(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 eb(t,e,n,r){let i=rf(t.width,e.x,e.w,n),s=t.data,o=t.width,a=new Float32Array(n*r);return Xg(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]=tb(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 fo(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 ho(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 dI=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 hI(t){let e=4294967295;for(let n of t)e=(dI[(e^n)&255]??0)^e>>>8;return(e^4294967295)>>>0}function nr(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(hI(n.subarray(4,8+e.length)),8+e.length),n}function nb(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 rb(t){return oI(t,{level:1,strategy:sI.Z_RLE})}function ib(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(rs),nr("IHDR",r),...n,nr("IDAT",rb(nb(t.data,t.width,t.height))),nr("IEND",new Uint8Array)])}function sb(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 nr("PLTE",i)}function ob(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(rs),nr("IHDR",s),nr("IDAT",rb(nb(i,t*r,e))),nr("IEND",new Uint8Array)])}function sr(t){return ob(t.width,t.height,2,3,t.data)}function rn(t){return ob(t.width,t.height,6,4,t.data)}function ri(t,e){return ib(t,qg,[sb(e),nr("tRNS",Uint8Array.from({length:256},(n,r)=>r))])}function sf(t){return ib(t,0,[])}function Ga(t,e){if(!ei(t)||t[25]!==qg)return;let n=Buffer.from(t.buffer,t.byteOffset,t.byteLength),r=[Buffer.from(rs)],i=rs.length;while(i+8<=n.length){let s=i+12+n.readUInt32BE(i);r.push(n.toString("latin1",i+4,i+8)==="PLTE"?sb(e):n.subarray(i,s)),i=s}return Buffer.concat(r)}var or=100,ge=25000000,kI=536870912,is=["safe","questionable","explicit"],ii=["nudity","underwear"],uf=["comic","monochrome","sketch","chibi"],pb=["off","5","10","25","50","100"],gb=["off","720","1080","1440","1800","2560"],bb={nudity:new Set(["nude","naked","topless","bottomless","nipples","naked_towel","undressing"]),underwear:new Set(["underwear","panties","pantsu","bra","lingerie","pantyshot"])},yI={comic:new Set(["comic","4koma"]),monochrome:new Set(["monochrome","greyscale"]),sketch:new Set(["sketch","lineart","line_art"]),chibi:new Set(["chibi"])},vI=/^(?:rating|score|width|height|filetype|dimension):/,mo={safe:"s",questionable:"q",explicit:"e"},wb=8191,SI=20000,EI=5000,ab=3000,cb=8,MI=8,OI=8000,II=3000,$b=60000,ub=3,xI=3,NI="https://static.zerochan.net",kb="https://s1.zerochan.net",lf=`ttheme/${xt.version} (+${xt.homepage})`,RI=["orig","tile","thumb","cut"],yb=new Map,TI=YI(process.env.TTHEME_FIND_HOSTS),PI=qI(process.env.TTHEME_FIND_CUTOUTS);bI(II);var AI=["artist","character","copyright"];function lb(t){try{return mI(t)}catch{return[]}}function ss(t){return t.startsWith("//")?`https:${t}`:t}function cr(t){return(/\.([a-z0-9]+)(?:\?.*)?$/i.exec(t)?.[1]??"").toLowerCase()}function go(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 HI(t){let e=t.trim(),r=(e?JSON.parse(e):{}).tags??{};return new Map(Object.entries(r).map(([i,s])=>[i,String(s)]))}function af(t,e,n){let r=ss(String(t??""));return{file:r,width:Number(e)||0,height:Number(n)||0,ext:cr(r)}}function xn(t){return String(t??"").split(/\s+/).filter(Boolean)}function cf(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 vb(t,e){let n=ss(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,...cf(t.created_at)?{posted:cf(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 FI(t){let e=HI(t);return go(t).flatMap((n)=>{let r=ss(String(n.file_url??"")),i=String(n.tags??""),s=(o)=>xn(i).filter((a)=>e.get(a)===o);return vb(n,{preview:n.preview_url,file:r,ext:String(n.file_ext||cr(r)).toLowerCase(),owner:n.author,md5:n.md5,tags:i,named:{artist:s("artist"),character:s("character"),copyright:s("copyright")},solo:void 0,versions:[af(n.jpeg_url,n.jpeg_width,n.jpeg_height),af(n.sample_url,n.sample_width,n.sample_height)]})})}function CI(t){return go(t).flatMap((e)=>{let n=ss(String(e.file_url??"")),r=String(e.tag_string??""),i=e.media_asset??{};return vb(e,{preview:i.variants?.find((s)=>s.type==="360x360")?.url??e.preview_file_url,file:n,ext:String(e.file_ext||cr(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)=>af(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 Sb(t){return t.toLowerCase().replace(/\s+/g,"_")}function LI(t){return(Array.isArray(t)?t:[]).map((e)=>Sb(String(e)))}function jI(t){return String(t??"").replace(/[^0-9a-z]+/gi,".").replace(/^\.+|\.+$/g,"")||"zerochan"}function GI(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=LI(i.tags),a=ss(String(i.full??""));return[{id:s,width:Number(i.width)||0,height:Number(i.height)||0,file:a,ext:cr(a),preview:`${kb}/${jI(i.tag??i.primary)}.600.${s}.jpg`,owner:"",score:0,rating:o.some((c)=>bb.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 BI={mangaka:"artist",studio:"artist",character:"character",series:"copyright",game:"copyright"};function fb(t){return t.replace(/&(?:#(\d+)|amp|quot|apos|lt|gt);/g,(e,n)=>n?String.fromCharCode(Number(n)):{"&":"&",""":'"',"'":"'","<":"<",">":">"}[e]??e)}function _I(t){let e={artist:[],character:[],copyright:[]};for(let[,r,i]of t.matchAll(/<li class="([a-z]+)[^"]*"[^>]*\bdata-tag="([^"]*)"/g)){let s=BI[r],o=Sb(fb(i));if(s&&!e[s].includes(o))e[s].push(o)}let n=cf(/"datePublished":\s*"([^"]+)"/.exec(t)?.[1]);return{named:e,source:"",owner:fb(/\buploader = \{\s*name: '([^']*)'/.exec(t)?.[1]??""),...n?{posted:n}:{}}}function UI(t){return Number(/Zerochan has ([\d,]+) /.exec(t)?.[1]?.replace(/,/g,"")??0)}function WI(t){return go(t).flatMap((e)=>{let n=String(e.value??"");return n?[{value:n,count:Number(e.post_count)||0}]:[]})}function KI(t){return go(t).flatMap((e)=>{let n=String(e.name??"");return n?[{value:n,count:Number(e.count)||0}]:[]})}function zI(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 qI(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 YI(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 Ba(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 Ba(t,is,["safe"])}function os(t){return Ba(t,ii,ii,"none")}function _a(t){return Ba(t,uf,[],"none")}function bo(t){let e=Y.map((n)=>n.name);return Ba(t,e,e)}function ff(t,e,n){return{score:Number(t)||0,size:Number(e)||0,png:n==="on"}}function wo(t){return[...new Set((t??"").toLowerCase().split(/[\s,]+/).map((e)=>e.replace(/^-+/,"")).filter(Boolean))]}function df(t,e,n){return{safe:new Set(t),questionable:new Set(e),explicit:new Set(n)}}function hf(t){let e=TI.get(t.key),n=PI.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 Eb(t){return t.length<2?t.join(""):t.map((e)=>`~${e}`).join(" ")}function Mb(t){return t>0?[`width:>=${t}`,`height:>=${t}`]:[]}function db(t){let e=hf(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}`]:[],...Mb(i)],cutouts:Eb(e.cutouts),ratings:df([mo.safe],[mo.questionable],[mo.explicit]),rate:(r)=>{let[i]=r;if(r.length===1&&i)return`rating:${mo[i]}`;let s=is.filter((a)=>!r.includes(a)),[o]=s;return s.length===1&&o?`-rating:${mo[o]}`:""},best:"order:score",tagBudget:Number.POSITIVE_INFINITY,ors:!0,postsUrl:(r,i)=>`${e.origin}/post.json?${n({limit:String(or),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:FI,count:zI,uploadedBy:(r)=>`user:${r}`}}function JI(t){let e=hf(t),n=df(["g"],["s","q"],["e"]);return{...e,scored:!0,narrow:({score:r,size:i,png:s})=>[...r>0?[`score:>=${r}`]:[],...Mb(i),...s?["filetype:png"]:[]],cutouts:Eb(e.cutouts),ratings:n,rate:(r)=>r.length===is.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(or),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:CI,count:DI,uploadedBy:(r)=>`user:${r}`}}function of(t){return t.split(/\s+/).filter((e)=>e&&!/^(?:order|dimension):/.test(e)).map((e)=>e.split("_").map(encodeURIComponent).join("+")).join(",")}function hb(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 VI(t){let e=hf(t);return{...e,scored:!1,narrow:({size:n})=>n>=1800?["dimension:huge"]:n>0?["dimension:large"]:[],cutouts:e.cutouts[0]??"",ratings:df(["g"],["q"],["e"]),rate:()=>"",best:"order:fav",tagBudget:3,ors:!1,missing:404,postsUrl:(n,r)=>`${e.origin}/${of(n)}?${new URLSearchParams({json:"",l:String(or),p:String(r+1),...hb(n)})}`,countUrl:(n)=>`${e.origin}/${of(n)}?${new URLSearchParams({xml:"",l:"1"})}`,postUrl:(n)=>`${e.origin}/${n}?json=`,pageUrl:(n)=>`${e.origin}/${n}`,parse:GI,count:UI,credits:_I,counts:(n)=>of(n).split(",").length===1&&!("d"in hb(n)),guesses:(n)=>(n.tags.includes("transparent_background")?["png","jpg"]:["jpg","png"]).map((r)=>n.preview.replace(kb,NI).replace(/\.600\.(\d+)\.jpg$/,`.full.$1.${r}`))}}function ZI(t){let e=mb(`https://${t}`);return Y.find((n)=>mb(n.origin)===e)}function mf(t){return t.split(/\s+/).filter((e)=>e&&!vI.test(e)).length}function Ua(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=ZI(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=[JI({key:"danbooru",name:"danbooru",origin:"https://shima.donmai.us",cutouts:["transparent_background"],vouched:!1,ansi:2}),db({key:"konachan",name:"konachan",origin:"https://konachan.net",cutouts:["transparent","vector"],vouched:!1,ansi:6}),db({key:"yande",name:"yande.re",origin:"https://yande.re",cutouts:["transparent_png"],vouched:!0,ansi:5}),VI({key:"zerochan",name:"zerochan",origin:"https://www.zerochan.net",cutouts:["transparent_background"],vouched:!1,ansi:3})],Zt=Y.find((t)=>t.key==="danbooru"),ur=134217728;function be(t,e){let n=Y.indexOf(t);return(n===-1?Y.length:n)*ur+e}function mb(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: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 Ka(t,e=ii){return t.tags.filter((n)=>e.some((r)=>bb[r].has(n)))}function Ob(t,e){return t.tags.filter((n)=>e.some((r)=>yI[r].has(n)))}function za(t,e,n=["safe"]){return n.some((r)=>t.ratings[r].has(e.rating))}function Ib(t,e){return t.rate(["safe"])===""?void 0:is.find((n)=>t.ratings[n].has(e.rating))}function sn(t){return[t,...t.smaller].find((e)=>e.width*e.height<=ge)}function xb(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 lr(){return po(process.env.XDG_CACHE_HOME??po(wI(),".cache"),"ttheme")}function Ge(t){return po(lr(),t.key)}function Nb(t=kI,e=lr()){let n=[],r=0;for(let i of lb(e))for(let s of RI){let o=po(e,i,s);for(let a of lb(o)){let c=po(o,a);try{let{size:u,mtimeMs:l}=gI(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{pI(i.path,{force:!0}),r-=i.size}catch{}}}function QI(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)?$b:Math.max(0,n-e)}function Nn(t){return yb.get(t.key)??0}function XI(t){for(let e=t;e instanceof Error;e=e.cause)if(e.code==="ECONNRESET")return!0;return!1}function tx(t){return(t.headers.get("server")??"").startsWith("cloudflare")&&t.headers.get("cf-mitigated")==="challenge"}function ex(t,e){let n=new URL(e,t);if(!n.search)n.search=new URL(t).search;return n.href}async function ar(t,e,n,r={},i=SI){let s=e;for(let o=1,a=0;;o++){let c=Nn(t)-Date.now();if(c>0)await $I(c,void 0,{signal:n});let u;try{u=await fetch(s,{headers:{"User-Agent":lf,Referer:`${t.origin}/`,...r},redirect:"manual",signal:i?AbortSignal.any([n,AbortSignal.timeout(i)]):n})}catch(f){if(o<ub&&!n.aborted&&XI(f))continue;throw f}let l=u.headers.get("location");if(l&&u.status>=300&&u.status<400&&a<xI){await u.body?.cancel(),s=ex(s,l),a++,o--;continue}if(u.status===429&&o<ub){await u.body?.cancel();let f=QI(u.headers.get("retry-after"),Date.now());if(f>$b)throw Error(`${t.name} asks to wait ${Math.ceil(f/1000)}s`);yb.set(t.key,Math.max(Nn(t),Date.now()+f));continue}if(!u.ok)throw await u.body?.cancel(),Object.assign(Error(tx(u)?`${t.name} is behind a Cloudflare challenge`:`${t.name} answered ${u.status}`),{status:u.status});return u}}async function Da(t,e,n){try{return await(await ar(t,e,n)).text()}catch(r){if(t.missing!==void 0&&r.status===t.missing)return"";throw r}}async function Rb(t,e,n,r){return t.parse(await Da(t,t.postsUrl(e,n),r))}async function pf(t,e,n){return t.count(await Da(t,t.countUrl(e),n))}async function as(t,e,n){let[r]=t.parse(await Da(t,t.postUrl(e),n));return r}async function qa(t,e,n){return t.credits?.(await Da(t,t.pageUrl(e),n))}var nx=/^https?:\/\/(?:i\.pximg\.net|i\d*\.pixiv\.net|img\d*\.pixiv\.net)\/\S*\/(\d+)(?:_p\d+)?(?:_\w+)?\.\w+(?:[?#]\S*)?$/i,rx=/^https?:\/\/(?:www\.)?pixiv\.net\/member_illust\.php\?\S*\billust_id=(\d+)/i;function $o(t){let e=nx.exec(t)?.[1]??rx.exec(t)?.[1];return e?`https://www.pixiv.net/artworks/${e}`:t}function Ya(t,e){return t.credits!==void 0&&e.named.artist.length===0}function ko(t,e){for(let n of AI){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 ix(t){let e=new URLSearchParams({limit:String(2*or),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 sx(t){return new Map(go(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:ss(String(e.file_url??""))}]]:[]}))}function Ja(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])],ko(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=cr(r.file)}}}async function Va(t,e){let n=new Map;if(Nn(Zt)>Date.now())return n;for(let r=0;r<t.length;r+=or){let i=await(await ar(Zt,ix(t.slice(r,r+or)),e,{},EI)).text();for(let[s,o]of sx(i))n.set(s,o)}return n}async function yo(t,e,n){if(e.file||!t.guesses)return;for(let r of t.guesses(e))try{let i=await ar(t,r,n,{Range:`bytes=0-${wb}`}),s=nn(new Uint8Array(await i.arrayBuffer()));return e.file=r,e.ext=cr(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 Tb(t,e){if(Nn(Zt)<=Date.now())try{let i=new URLSearchParams({"search[query]":t,"search[type]":"tag_query",limit:String(cb)}),s=`${Zt.origin}/autocomplete.json?${i}`;return WI(await(await ar(Zt,s,e,{},ab)).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(cb)});return KI(await(await ar(n,`${n.origin}/tag.json?${r}`,e,{},ab)).text())}function ox(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 Pb(t,e){if(Nn(Zt)>Date.now())return[];let n=new URLSearchParams({"search[query]":t,"search[category]":"character",limit:String(MI)});return ox(await(await ar(Zt,`${Zt.origin}/related_tag.json?${n}`,e,{},OI)).text())}function Ab(t,e){return e.slice(0,t.ors?t.tagBudget:1)}async function Hb(t,e,n){let r=await ar(t,e,n,{Range:`bytes=0-${wb}`});return nn(new Uint8Array(await r.arrayBuffer()))}async function Za(t,e,n,r){let i=await ar(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 mx=12,px=/^[0-9a-f]{40}$/;function cs(){return us(lr(),"drawn")}function Fb(t){return ax("sha1").update(JSON.stringify(t)).digest("hex")}function Cb(t){return cx(us(cs(),t))}function Lb(t){let e=us(cs(),t);try{let n=lx(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 hx(e,a,a),{stem:i.stem,fill:i.fill,...i.peak?{peak:i.peak}:{},figure:s,picture:o}}catch{return}}function gf(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(us(cs(),t),Buffer.concat([r,n,e.figure,e.picture])),gx()}function gx(){let t=ux(cs()).filter((e)=>px.test(e)).flatMap((e)=>{try{return[{name:e,at:dx(us(cs(),e)).mtimeMs}]}catch{return[]}}).sort((e,n)=>n.at-e.at);for(let{name:e}of t.slice(mx))fx(us(cs(),e),{force:!0})}import{readdirSync as Sx,readFileSync as Db}from"node:fs";import{basename as Ex,join as qb}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 tM}from"node:module";var qE=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
|
|
29
|
+
*/function bx(t,e){let n=t.slice(0,e).split(/\r?\n/);return[n.length,n.pop().length+1]}function wx(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]=
|
|
31
|
+
`}return i}class K extends Error{line;column;codeblock;constructor(t,e){let[n,r]=bx(e.toml,e.ptr),i=wx(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
|
|
59
|
+
*/function Qa(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+=`
|
|
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
|
|
86
|
+
*/var $x=/^(\d{4}-\d{2}-\d{2})?[Tt ]?(?:(\d{2}):\d{2}(?::\d{2}(?:\.\d+)?)?)?(Z|z|[-+]\d{2}:\d{2})?$/i;class fr 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($x);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 fr(t);return n.#t=e,n}static wrapAsLocalDateTime(t){let e=new fr(t);return e.#t=null,e}static wrapAsLocalDate(t){let e=new fr(t);return e.#n=!1,e.#t=null,e}static wrapAsLocalTime(t){let e=new fr(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
|
|
112
|
+
*/function we(t,e=10){return e===16?t>47&&t<58||t>64&&t<71||t>96&&t<103:t>47&&t<48+e}function wf(t,e){return t===32||t===9||t===10||t===13||e&&(t===e||t===44)||t===35}function So(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?Bb(t):Gb(t);return t.d++,i}if(r===34||r===39)return Qa(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 Xa(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 kx(t,r,e);if(t.s.charCodeAt(t.p+2)===58)return yx(t,r,e);return Xa(t,t.p,r,0,e)}function Xa(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||wf(s=t.s.charCodeAt(t.p),i))return t.bi===!0?0n:0;if(!r){if(s===120)return bf(t,e,16,i);else if(s===98)return bf(t,e,2,i);else if(s===111)return bf(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(!we(s))K.x("invalid value",t,e);while(++t.p<t.s.length&&(s=t.s.charCodeAt(t.p),!wf(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(!we(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):jb(t,c,10,e)}function bf(t,e,n,r){let i,s=1;while(++t.p<t.s.length&&(i=t.s.charCodeAt(t.p),!wf(i,r)))if(i===95){if(s&1)K.x("illegal underscore",t);s=3}else if(!we(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 jb(t,o,n,e)}function jb(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 kx(t,e,n){let r=t.p++,i;if(!we(e)||!we(t.s.charCodeAt(t.p++))||!we(t.s.charCodeAt(t.p++))||!we(t.s.charCodeAt(t.p++)))return Xa(t,t.p=r,e,0,n);if(t.p+=5,!we(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,!we(t.s.charCodeAt(t.p+1))))&&e!==84&&e!==116){let o=t.s.slice(r,t.p);return vo(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(we(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 vo(t,o,1,i,r,"[+00:00]")}if(e===43||e===45){let o=t.s.slice(r,t.p+=6);return vo(t,o,1,i,r,!t.ld&&"["+t.s.slice(t.p-6,t.p)+"]")}}let s=t.s.slice(r,t.p);return vo(t,s,2,i,r)}function yx(t,e,n){let r=t.p;if(!we(e)||!we(t.s.charCodeAt(++t.p)))return Xa(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(we(t.s.charCodeAt(++t.p)));let i=t.s.slice(r,t.p);return vo(t,i,4,!1,r)}function vo(t,e,n,r,i,s){if(t.ld){let o=new fr(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
|
|
138
|
+
*/function vx(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;vx(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
|
|
164
|
+
*/function tc(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(Qa(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 Gb(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=tc(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=So(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 Bb(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(So(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)}/*!
|
|
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
|
|
190
|
+
*/function _b(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 Ub(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 Eo(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=tc(n,93);if(u){if(t.charCodeAt(n.p)!==93)K.x("expected end of table array declaration",n);n.p++}let f=_b(n,l,r,i,u?2:1);if(!f)Ub(n,f,s),o=!0;else c=f[2],a=f[1]}else{s=n.p;let u=tc(n),l=_b(n,u,a,c,0);if(!l&&!o)Ub(n,l,s);Be(n,!0,!0);let f=So(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}/*!
|
|
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
|
|
216
|
+
*/var u8=!!"".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,166 @@ ${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
|
|
243
|
-
`)[0]}`)}}function fx(t){let n=Hb(on,Rb(Tb(t,on),"utf8")).group;if(!Array.isArray(n)||n.length===0)rt(on,"needs at least one [[group]] table");return n.map((r)=>{let i=as(r);return{name:So(on,"group.name",i.name),native:i.native===void 0?void 0:So(on,"group.native",i.native),lead:Eo(on,"group.lead",i.lead)}})}function hx(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 wd(t,e,n){let r=Hb(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=Nb(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 d=i.base===void 0?void 0:Nb(t,"meta.base",i.base);if(d!==void 0&&!u)rt(t,"meta.base is for market palettes");let f=d===void 0?void 0:n.bases?.get(d),h=u&&i.group===void 0?f?.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 ${on}`);let $=ai(t,"colors.background",s.background),g=ai(t,"colors.foreground",s.foreground),b=ai(t,"colors.cursor",s.cursor),y=ai(t,"colors.selection_background",s.selection_background),S=a.map((B,X)=>ai(t,`colors.ansi[${X}]`,B)),E=ux(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=lx(t,i.booru_sites,I),R=i.native_names===void 0?void 0:hx(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=dx(t,r.picture);return{name:c,...d?{base:d}:{},group:h,native:p?.native,...R?{nativeNames:R}:{},lead:!u&&p?.lead===c,order:u?f?.order??ix:Number(i.order),role:l,ansiSource:u&&i.ansi_source===void 0?d??"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:ax(t,r.ghostty,{background:$,cursor:b,selectionBackground:y}),waive:F,waiveReason:typeof o.reason==="string"?o.reason:void 0,...j?{pictures:j}:{}}}function Ab(t){let e=fx(t),n=new Map(e.map((s)=>[s.name,s]));if(n.size!==e.length)rt(on,"group.name must be unique");let r=nx(t).filter((s)=>s.endsWith(".toml")&&!s.startsWith("_")).map((s)=>wd(s,Rb(Tb(t,s),"utf8"),{name:rx(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(on,`group "${s.name}" has no themes`);if(!o.some((a)=>a.name===s.lead))rt(on,`group "${s.name}" lead "${s.lead}" is not one of its themes`)}return r}function Fb(t){return t.filter((e)=>e.role===void 0)}function ci(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},$x=1,kx=2560,yx=0.1,zb=0.99,vx=2,Rn={tall:1.15,reach:0.4,widest:0.95,headroom:0.04,margin:0.03,stands:12},Sx=yt(Gt("#19161e","#9b86c8",0.2)),Ex="shelf",ic="originals",Mx="images.json",kd=1;function Ox(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 Cb(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 Db(t,e){let r=Cb((s)=>Ip({name:t.name,background:Gt(t.background,e,s),foreground:t.foreground,ansi:t.ansi,waive:t.waived??[]}).length===0),i=Cb((s)=>yt(Gt(t.background,e,s))<=Sx);return{cap:r,matched:i,opacity:Math.floor(Math.min(r,i)*100)/100}}function Lb(t,e){let n=Ox(t,e),{cap:r,matched:i,opacity:s}=Db(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 Db(t,e).opacity}function an(t,e){let n=Lb(t,"cursor");if(n.opacity>=yx)return n;return e.filter((r)=>r!=="cursor"&&r!=="background").map((r)=>Lb(t,r)).reduce((r,i)=>i.reach>r.reach?i:r,n)}function Ix(t){return Fg(t)??{x:0,y:0,w:t.width,h:t.height}}function Od(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 qb(t,e,n,r){if(r<Rn.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(Rn.tall*n,Rn.reach*e*t.h/t.w),s=i*t.w/t.h;if(s>Rn.widest*e)s=Rn.widest*e,i=s*t.h/t.w;let o=Rn.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-Rn.margin)-s,y:o,w:s,h:i*a},focus:Math.min(1,(n/2-o)/i)}}function xx(t,e){return 0.299*(t[e]??0)+0.587*(t[e+1]??0)+0.114*(t[e+2]??0)}function Nx(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(xx(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*zb)return Math.min(vx,Math.max(1,255/Math.max(1,o)));return 1}var $d=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 Rx(t,e,n){return`#${[t,e,n].map((r)=>Math.round(r).toString(16).padStart(2,"0")).join("")}`}function Tx(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,d=t.data[c+2]??0,f=Math.round(255*Math.sqrt(0.2126*($d[u]??0)+0.7152*($d[l]??0)+0.0722*($d[d]??0)));n[f]=(n[f]??0)+1,r[f*3]=(r[f*3]??0)+u,r[f*3+1]=(r[f*3+1]??0)+l,r[f*3+2]=(r[f*3+2]??0)+d,s++}}let o=0;for(let a=0;a<256&&s>0;a++)if(o+=n[a]??0,o>=s*zb){let c=Math.max(1,n[a]??1);return Rx((r[a*3]??0)/c,(r[a*3+1]??0)/c,(r[a*3+2]??0)/c)}return"#ffffff"}function Px(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 Yb(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 nc(t,e,n,r){let i=new Float32Array(n*r),s=Yb(e,n,r);if(s){let o=Gg(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 Id(t,e,n,r){let i=new Uint8Array(n*r*4),s=Yb(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 yd(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 xd(t){let e=Ix(t),n,r;return{box:e,clear:In(t,e),get ink(){return n??=Px(t,Nx(t,e)),n},image:t,get peak(){return r??=Tx(t,e),r}}}function Jb(t,e,n,r,i){let s=xd(t),{box:o,clear:a,ink:c}=s,u=qb(o,e,n,a),l=Math.min(1,kx/Math.max(o.w,o.h)),d={x:0,y:0,w:Math.round(o.w*l),h:Math.round(o.h*l)},f=r*d.w*u.crop.w/(o.w*u.at.w);if(i==="original")return{coloring:i,figure:yd(co(t,o,d.w,d.h),f),fill:yd(Id(t,u,e,n),r),focus:u.focus,peak:s.peak};let h=nc(c,{crop:o,at:d,focus:u.focus},d.w,d.h),p=nc(c,u,e,n);return{coloring:i,figure:lo(uo(h,f)),fill:lo(uo(p,r)),focus:u.focus}}function Hx(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 Ax(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 Vb(t,e,n,r,i,s,o,a="tone"){let{box:c,clear:u,ink:l}=t,d=qb(c,r,i,u),f=Math.round(100*d.at.w/d.crop.w/Math.min(r/c.w,i/c.h)),h=o?.size??"fill",p=h==="fill"?d:{crop:c,at:ms(c.w,c.h,r,i,h,o?.at??5,!1,h>100?Math.round(d.focus*100):-1),focus:d.focus},$=a==="original"?ls(e,t.peak):n.opacity,g=o?.opacity??$;return{image:a==="original"?Ax(yd(Id(t.image,p,r,i),s),e.background,g):Hx(lo(uo(nc(l,p,r,i),s)),e.background,n.color,g),fill:f,opacity:$}}function D(t){return z(t,"ttheme","backgrounds")}function vd(t){return z(t,Mx)}function hr(t){try{return us(t,"utf8")}catch{return}}function fr(t){try{return gx(t)}catch{return[]}}function vt(t){let e=hr(vd(t));if(e===void 0)return Fx(t);let n=JSON.parse(e);if(n.version!==kd)throw Error(`${vd(t)} is version ${n.version} — this ttheme reads version ${kd}`);return n}function be(t){return t.coloring??"tone"}function Nd(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 mr(t){return{hue:{color:t.backdrop.color,opacity:t.backdrop.opacity},colors:Nd(t)}}function ds(t){return t.tone===void 0&&be(t)==="tone"}function jb(t){return(t.artist??[]).map((e)=>e.replace(/[\s,]+/g,"_")).join(",")}function Zb(t,e){let n=e.pictures.findIndex((i)=>i.key===e.active),r=e.pictures[n];return[...r.artist?.length?[`# by ${jb(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?jb(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
|
|
245
|
-
`);for(let r of n){let i=e.palettes[r],s=z(t,`${Qt(r)}.conf`);if(i)H(s,
|
|
246
|
-
`)){let
|
|
247
|
-
`)),h}function rw(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 iw(t){try{let e=nn(new Uint8Array(us(t)));return e?{width:e.width,height:e.height}:void 0}catch{return}}function sw(t,e,n,r,i,s,o){let a=[n.original,n.cut].map((c)=>{if(!c)return"";try{let{size:u,mtimeMs:l}=bx(z(t,c));return`${c}:${u}:${l}`}catch{return}});if(!n.original||a.includes(void 0))return;return $b([$x,Qt(e),n.key,...a,r.width,r.height,i,s,s==="tone"?o:""])}function Cx(t,e,n){if(!n.window||n.blur===void 0)return;let r=sw(t,e,n,n.window,n.blur,be(n),n.tone??"");if(!r||kb(r))return;try{hd(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 ow(t,e,n,r,i,s,o,a,c){let u=c?void 0:sw(t,e,n,r,o,a,s.hue.color),l=u?yb(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 d=i();if(!d)return null;let f=Jb(d,r.width,r.height,o,a),h=ew(e,n.key,f,s.hue.color),p=f.coloring==="original"?f.peak:void 0;if(u)hd(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:d}}function xo(t,e,n,r,i,s,o,a,c,u=be(n)){let l=D(t),d=n.window??iw(z(l,n.fill))??Oo,f=ow(l,e,n,d,r,i,s,u,c);if(!f)return null;let{made:h,peak:p,image:$}=f,g={...n,stem:h.stem,fill:h.fill,...nw(i.colors,i.hue,u,p),blur:s,window:d,...c?{cut:`${Sd(e,n.key)}.cut.png`}:{}};if(u==="original")delete g.tone;else delete g.peak;if(c&&$)H(z(l,`${Sd(e,n.key)}.cut.png`),nd(ni($)));if(h.stem===n.stem)return g;if(be(n)!==u)Cx(l,e,n);Td(l,h.files);let b=Pd(l,n);Io(l,g,be(n)===u?b:{...b,opacity:void 0},o,a);let y=z(l,`${n.stem}.off.conf`);if(Md(y))mx(y,z(l,`${g.stem}.off.conf`));return g}function aw(t,e,n,r,i,s,o){let a=D(t),c=n.window??iw(z(a,n.fill))??Oo;return ow(a,e,n,c,r,i,s,o,!1)!==null}function Hd(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((d)=>d.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;fs(n,r,[...i]);for(let o of s)Rd(n,o)}function cw(t,e,n){return t.replace(/^background-image-opacity = (\S+)$/m,(r,i)=>Number(i)===e?`background-image-opacity = ${n}`:r)}function uw(t,e,n){let r=z(t,`${e.stem}.tune.conf`),i=hr(r);if(i!==void 0)H(r,cw(i,e.opacity,n));return{...e,opacity:n}}function Lx(t,e,n,r){if(n.tone===r.color)return uw(t,n,r.opacity);let i=Xb(t,n.stem).filter((a)=>a.endsWith(".png")).map((a)=>{let c=new Uint8Array(us(z(t,a)));return[a,_a(c,r.color)??ri(ni(At(c)),r.color)]}),s=(a)=>i.find(([c])=>c===a)?.[1]??new Uint8Array,o=`${Qt(e)}.${Wb("sha1").update(n.key).update(s(`${n.stem}.png`)).update(s(n.fill)).digest("hex").slice(0,8)}`;Td(t,i.map(([a,c])=>[o+a.slice(n.stem.length),c]));for(let a of["tune","off"]){let c=hr(z(t,`${n.stem}.${a}.conf`));if(c!==void 0)H(z(t,`${o}.${a}.conf`),cw(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 rc(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 lw(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)=>rc(u,c)))continue;a.pictures=a.pictures.map((u)=>{if(!rc(u,c))return u;let l=be(u)==="original"?uw(n,u,ls(c.colors,u.peak)):Lx(n,o,u,c.hue);if(l.stem!==u.stem)s.push(u.stem);return l}),i.push(o)}if(i.length>0){fs(n,r,i);for(let o of s)Rd(n,o)}return i}function Te(t){let{slot:e,color:n,opacity:r}=an({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:Xe(t),...t.waive.length>0?{waived:t.waive}:{},backdrop:{slot:e,color:n,opacity:r},...t.pictures?{pictures:t.pictures}:{}}}function We(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 jx=6,Gx=["ansi1","ansi2","ansi4","ansi3","ansi5","ansi6"];function ac(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,...Gx]){let o=e(s);if(i.length===jx||!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{version:Tt.version,gate:he,placement:Rn,palettes:[]}}import{existsSync as _x,readFileSync as lc,statSync as dw}from"node:fs";import{homedir as ws}from"node:os";import{join as bs}from"node:path";var Bx=["core","kowiki","unlicensed"],Wx=["ko","ja","en","zh","other"],mw=["keys","keyAt","ownAt","owners","cards","cardAt","ranks","tags","tagAt","tagCard"],pw="TTNI";function pr(t=ws()){return bs(process.env.XDG_CACHE_HOME??bs(t,".cache"),"ttheme","aninames")}var Ux=/[ァ-ヶ]/g,Kx=/[\s\p{P}\p{S}]+/gu;function uc(t){return t.normalize("NFKC").toLowerCase().replace(Ux,(e)=>String.fromCharCode(e.charCodeAt(0)-96)).replace(Kx,"")}function Ld(t){return t.length>=2||/[\p{Script=Han}\p{Script=Hangul}\p{Script=Hiragana}]/u.test(t)}function gw(t){let e=pr(t);return Bx.map((n)=>bs(e,`ttheme-${n}.json`)).filter((n)=>_x(n))}var zx=6;function bw(t){return[`format ${zx}`,...t.map((e)=>`${e}:${dw(e).size}:${dw(e).mtimeMs}`)].join("|")}function Dx(t){try{return JSON.parse(lc(t,"utf8"))}catch{return{}}}function qx(t){let e=new Map;for(let i of t)for(let[s,o]of Object.entries(Dx(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 Wx)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 Ad(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 Yx(t,e){let n=qx(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=uc(F);if(j&&Ld(j))i(j,E,2|R);let B=F.split(/[\s・·_]+/);if(B.length<2)continue;for(let X of B){let U=uc(X);if(U&&Ld(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=Ad(s.map((S)=>Buffer.from(S))),l=Ad(n.map((S)=>Buffer.from(JSON.stringify([S.tag,S.tags,S.names,S.japanese,S.generated])))),d=Ad(c.map(([S])=>Buffer.from(S))),f={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:d.bytes,tagAt:d.at,tagCard:No(Uint32Array,c.map(([,S])=>S))},h=mw.map((S)=>{let E=f[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(pw,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 fw(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 hw(t,e){if(t.toString("latin1",0,4)!==pw)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[mw.indexOf(c)];return[i+u,l]},o=(c)=>{let[u,l]=s(c);return t.subarray(u,u+l)},a=(c)=>fw(Uint32Array,t,...s(c));return{keys:o("keys"),keyAt:a("keyAt"),ownAt:a("ownAt"),owners:a("owners"),cards:o("cards"),cardAt:a("cardAt"),ranks:fw(Float32Array,t,...s("ranks")),tags:o("tags"),tagAt:a("tagAt"),tagCard:a("tagCard")}}var Fd;function jd(t){try{let e=gw(t);if(e.length===0)return;let n=bw(e);if(Fd?.stamp===n)return Fd.index;let r=bs(pr(t),"index.bin"),i;try{i=hw(lc(r),n)}catch{}if(!i){let s=Yx(e,n);try{H(r,s)}catch{}i=hw(s,n)}if(i)Fd={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 $w(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 kw(t,e){let n=Buffer.from(e),r=t.tagCard.length,i=$w(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 Cd=/\s*[((][^()()]*[))]$/u,cc={ko:4,en:4,ja:5,zh:3};function Jx(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((d)=>!Cd.test(d))),i=(d)=>!Cd.test(d)||!r.has(d.replace(Cd,"")),s=t.names.filter(i),o=s.filter((d)=>e.test(d)),a=[...o,...t.generated.slice(0,o.length>0?0:2)],c=s.filter((d)=>n.test(d)),u=t.japanese.filter(i),l=s.filter((d)=>!e.test(d)&&!n.test(d)&&!u.includes(d));return[...new Set([...a.slice(0,cc.ko),...c.slice(0,cc.en),...u.slice(0,cc.ja),...l.slice(0,cc.zh)])]}var gs;function dc(t,e=ws()){if(!t)return[];if(!gs)try{gs=JSON.parse(lc(bs(pr(e),"aliases.json"),"utf8")).tags}catch{gs={}}return gs[t]??[]}function Gd(t,e=ws()){try{return Vx(t,e)}catch{return new Map}}function Vx(t,e){let n=new Map,r=gw(e);if(r.length===0||t.length===0)return n;let i=bw(r),s=bs(pr(e),"aliases.json"),o;try{o=JSON.parse(lc(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=jd(e);if(!a)return n;let c=new Set([...t,...o?.stamp===i?Object.keys(o.tags):[]]),u={};for(let l of c){let d=kw(a,l);u[l]=d===void 0?[]:Jx(ww(a,d))}try{H(s,`${JSON.stringify({stamp:i,tags:u})}
|
|
248
|
-
`)}catch{}
|
|
249
|
-
|
|
250
|
-
|
|
242
|
+
*/var Bt=["top-left","top-center","top-right","center-left","center","center-right","bottom-left","bottom-center","bottom-right"],Mo="Original",Mx=1e6,on="_groups.toml",Wb=3,Kb=8,$f="[a-z0-9]+(?:-[a-z0-9]+)*",Ox=new RegExp(`^(?:(${$f})@(${$f})/)?(${$f})$`),Yb=["background","foreground","cursor","selection"];function it(t,e){throw Error(`${t}: ${e}`)}function ai(t,e,n){if(typeof n!=="string"||!ne(n))it(t,`${e} must be "#rrggbb" (lowercase), got ${JSON.stringify(n)}`);return n}function Io(t,e,n){if(typeof n!=="string"||n.length===0)it(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 dr(t){return t.slice(t.indexOf("/")+1)}function _e(t){let e=Ox.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 xo(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 Oo(t,e,n){let r=Io(t,e,n),i=xo(r);if(i)it(t,`${e} ${JSON.stringify(r)} ${i}`);return r}function zb(t,e,n){let r=Io(t,e,n),i=_e(r);if(i)it(t,`${e} "${r}" ${i}`);return r}function ls(t){return t&&typeof t==="object"?t:{}}function Ix(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)=>ai(t,`ghostty.icon_screen[${s}]`,i))}function xx(t,e,n){let r=ls(e);return{iconGhost:r.icon_ghost===void 0?n.cursor:ai(t,"ghostty.icon_ghost",r.icon_ghost),iconScreen:Ix(t,r.icon_screen,n)}}function Nx(t){return new Map([...Yb.map((e)=>[e,t[e]]),...t.ansi.map((e,n)=>[`ansi${n}`,e])])}function Rx(t,e,n){if(!Array.isArray(e)||e.length!==Wb)it(t,`meta.signature must name exactly ${Wb} palette slots`);let r=Nx(n),i=[],s=[];for(let[o,a]of e.entries()){let c=`meta.signature[${o}]`,u=Io(t,c,a),l=r.get(u);if(l===void 0)it(t,`${c} ${JSON.stringify(a)} is not a palette slot — use ${Yb.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 Tx(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 Px(t,e,n){if(e===void 0)return;if(!Array.isArray(e)||e.length===0||e.length>Kb)it(t,`[[picture]] holds 1 to ${Kb} pictures`);let r=e.flatMap((i,s)=>{let o=ls(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||Bt.includes(l);if(!d&&!n)it(t,`${a}.position must be one of ${Bt.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 Jb(t,e){try{return Eo(e)}catch(n){it(t,`is not valid TOML — ${(n instanceof Error?n.message:String(n)).split(`
|
|
243
|
+
`)[0]}`)}}function Ax(t){let n=Jb(on,Db(qb(t,on),"utf8")).group;if(!Array.isArray(n)||n.length===0)it(on,"needs at least one [[group]] table");return n.map((r)=>{let i=ls(r);return{name:Oo(on,"group.name",i.name),native:i.native===void 0?void 0:Oo(on,"group.native",i.native),lead:Io(on,"group.lead",i.lead)}})}function Hx(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=Oo(t,`meta.native_names[${r}]`,n);if(i.includes("|"))it(t,`meta.native_names[${r}] ${JSON.stringify(i)} contains |`);return i})}function kf(t,e,n){let r=Jb(t,e),i=ls(r.meta),s=ls(r.colors),o=ls(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=zb(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 _ of["order","role"])if(u&&i[_]!==void 0)it(t,`meta.${_} 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:zb(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??Mo:Oo(t,"meta.group",i.group),p=n.groups.get(h);if(!p&&!(u&&(h===Mo||n.open)))it(t,`meta.group "${h}" has no [[group]] table in ${on}`);let $=ai(t,"colors.background",s.background),g=ai(t,"colors.foreground",s.foreground),b=ai(t,"colors.cursor",s.cursor),y=ai(t,"colors.selection_background",s.selection_background),S=a.map((_,X)=>ai(t,`colors.ansi[${X}]`,_)),E=Rx(t,i.signature,{background:$,foreground:g,cursor:b,selection:y,ansi:S}),I=i.booru===void 0?void 0:Io(t,"meta.booru",i.booru);if(I!==void 0&&/[\s\p{Cc}]/u.test(I))it(t,`meta.booru must be a single booru tag, got ${JSON.stringify(I)}`);let N=Tx(t,i.booru_sites,I,n.foreign===!0),R=i.native_names===void 0?void 0:Hx(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 j=Px(t,r.picture,n.foreign===!0);return{name:c,...f?{base:f}:{},group:h,native:p?.native,...R?{nativeNames:R}:{},lead:!u&&p?.lead===c,order:u?d?.order??Mx:Number(i.order),role:l,ansiSource:u&&i.ansi_source===void 0?f??"original":Oo(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:xx(t,r.ghostty,{background:$,cursor:b,selectionBackground:y}),waive:F,waiveReason:typeof o.reason==="string"?o.reason:void 0,...j?{pictures:j}:{}}}function Vb(t){let e=Ax(t),n=new Map(e.map((s)=>[s.name,s]));if(n.size!==e.length)it(on,"group.name must be unique");let r=Sx(t).filter((s)=>s.endsWith(".toml")&&!s.startsWith("_")).map((s)=>kf(s,Db(qb(t,s),"utf8"),{name:Ex(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(on,`group "${s.name}" has no themes`);if(!o.some((a)=>a.name===s.lead))it(on,`group "${s.name}" lead "${s.lead}" is not one of its themes`)}return r}function Zb(t){return t.filter((e)=>e.role===void 0)}function ci(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 No={width:2560,height:1550},Bx=1,_x=2560,Ux=0.1,aw=0.99,Wx=2,ui={tall:1.15,reach:0.4,widest:0.95,headroom:0.04,margin:0.03,stands:12},Kx=yt(Gt("#19161e","#9b86c8",0.2)),zx="shelf",rc="originals",Dx="images.json",vf=1;function qx(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 Qb(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 cw(t,e){let r=Qb((s)=>Wp({name:t.name,background:Gt(t.background,e,s),foreground:t.foreground,ansi:t.ansi,waive:t.waived??[]}).length===0),i=Qb((s)=>yt(Gt(t.background,e,s))<=Kx);return{cap:r,matched:i,opacity:Math.floor(Math.min(r,i)*100)/100}}function Xb(t,e){let n=qx(t,e),{cap:r,matched:i,opacity:s}=cw(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 hs(t,e){return cw(t,e).opacity}function an(t,e){let n=Xb(t,"cursor");if(n.opacity>=Ux)return n;return e.filter((r)=>r!=="cursor"&&r!=="background").map((r)=>Xb(t,r)).reduce((r,i)=>i.reach>r.reach?i:r,n)}function Yx(t){return Zg(t)??{x:0,y:0,w:t.width,h:t.height}}function xf(t,e){if(t<=0||e<=0)return No;let n=Math.min(1,No.width/Math.max(t,e));return{width:Math.round(t*n),height:Math.round(e*n)}}function uw(t,e,n,r){if(r<ui.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(ui.tall*n,ui.reach*e*t.h/t.w),s=i*t.w/t.h;if(s>ui.widest*e)s=ui.widest*e,i=s*t.h/t.w;let o=ui.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-ui.margin)-s,y:o,w:s,h:i*a},focus:Math.min(1,(n/2-o)/i)}}function Jx(t,e){return 0.299*(t[e]??0)+0.587*(t[e+1]??0)+0.114*(t[e+2]??0)}function Vx(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(Jx(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*aw)return Math.min(Wx,Math.max(1,255/Math.max(1,o)));return 1}var yf=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 Zx(t,e,n){return`#${[t,e,n].map((r)=>Math.round(r).toString(16).padStart(2,"0")).join("")}`}function Qx(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*(yf[u]??0)+0.7152*(yf[l]??0)+0.0722*(yf[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*aw){let c=Math.max(1,n[a]??1);return Zx((r[a*3]??0)/c,(r[a*3+1]??0)/c,(r[a*3+2]??0)/c)}return"#ffffff"}function Xx(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 lw(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 ec(t,e,n,r){let i=new Float32Array(n*r),s=lw(e,n,r);if(s){let o=eb(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 Nf(t,e,n,r){let i=new Uint8Array(n*r*4),s=lw(e,n,r);if(s){let o=s.x1-s.x0,a=lo(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 Sf(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)=>fo(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 Rf(t){let e=Yx(t),n,r;return{box:e,clear:In(t,e),get ink(){return n??=Xx(t,Vx(t,e)),n},image:t,get peak(){return r??=Qx(t,e),r}}}function fw(t,e,n,r,i){let s=Rf(t),{box:o,clear:a,ink:c}=s,u=uw(o,e,n,a),l=Math.min(1,_x/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:Sf(lo(t,o,f.w,f.h),d),fill:Sf(Nf(t,u,e,n),r),focus:u.focus,peak:s.peak};let h=ec(c,{crop:o,at:f,focus:u.focus},f.w,f.h),p=ec(c,u,e,n);return{coloring:i,figure:ho(fo(h,d)),fill:ho(fo(p,r)),focus:u.focus}}function t2(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 e2(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 dw(t,e,n,r,i,s,o,a="tone"){let{box:c,clear:u,ink:l}=t,f=uw(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:bs(c.w,c.h,r,i,h,o?.at??5,!1,h>100?Math.round(f.focus*100):-1),focus:f.focus},$=a==="original"?hs(e,t.peak):n.opacity,g=o?.opacity??$;return{image:a==="original"?e2(Sf(Nf(t.image,p,r,i),s),e.background,g):t2(ho(fo(ec(l,p,r,i),s)),e.background,n.color,g),fill:d,opacity:$}}function D(t){return z(t,"ttheme","backgrounds")}function Ef(t){return z(t,Dx)}function mr(t){try{return ds(t,"utf8")}catch{return}}function hr(t){try{return Lx(t)}catch{return[]}}function vt(t){let e=mr(Ef(t));if(e===void 0)return n2(t);let n=JSON.parse(e);if(n.version!==vf)throw Error(`${Ef(t)} is version ${n.version} — this ttheme reads version ${vf}`);return n}function $e(t){return t.coloring??"tone"}function Tf(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 pr(t){return{hue:{color:t.backdrop.color,opacity:t.backdrop.opacity},colors:Tf(t)}}function ms(t){return t.tone===void 0&&$e(t)==="tone"}function tw(t){return(t.artist??[]).map((e)=>e.replace(/[\s,]+/g,"_")).join(",")}function hw(t,e){let n=e.pictures.findIndex((i)=>i.key===e.active),r=e.pictures[n];return[...r.artist?.length?[`# by ${tw(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?tw(i):"-"}`,...i.from?[i.from]:[]].join(" ")),...e.pictures.filter((i)=>$e(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 mw(t){let e=D(t);for(let[n,r]of Object.entries(vt(e).palettes)){let i=z(e,`${Qt(n)}.conf`),s=hw(e,r);if(mr(i)!==s)H(i,s)}}function ps(t,e,n){H(Ef(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,hw(t,i));else fs(s,{force:!0})}}function pw(t,e){return hr(t).filter((n)=>n.startsWith(`${e}.`)||n.startsWith(`${e}@`))}function Pf(t,e){for(let n of pw(t,e))fs(z(t,n),{force:!0})}function gw(t,e){Pf(t,e.stem);for(let n of[e.original,e.cut])if(n)fs(z(t,n),{force:!0})}function ew(t,e,n,r){let i=ow(/^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(rc,u)}:{}}}function nw(t,e){if(If(t))sw(t,e)}function n2(t){let e={version:vf,palettes:{}};if(!If(t))return e;let n=hr(z(t,rc)),r=hr(t).filter((s)=>s.endsWith(".conf")&&s!=="shown.conf"&&!/\.(tune|off)\.conf$/.test(s)).map((s)=>s.slice(0,-5)),i=z(t,zx);for(let s of new Set([...r,...hr(i)])){let o=[],a=ew(s,mr(z(t,`${s}.conf`)),n);if(a)nw(z(t,`${s}.tune.conf`),z(t,`${a.stem}.tune.conf`)),nw(z(t,`${s}.off.conf`),z(t,`${a.stem}.off.conf`)),o.push(a);for(let c of hr(z(i,s))){let u=z(i,s,c),l=ew(s,mr(z(u,".conf")),n,c);if(!l)continue;for(let f of hr(u)){let d=f===".tune.conf"||f===".off.conf"?`${l.stem}${f}`:`${s}${f}`;if(f!==".conf")sw(z(u,f),z(t,d))}fs(u,{recursive:!0}),o.push(l)}if(hr(z(i,s)).length===0)fs(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(hr(i).length===0)fs(i,{recursive:!0,force:!0});return ps(t,e,Object.keys(e.palettes)),e}function rw(t,e,n){return e.startsWith("~/")?z(n,e.slice(2)):Gx(e)?e:z(t,e)}function ke(t,e,n){let r=new Map,i=(a,c)=>{let u=mr(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(rw(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:rw(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 ic(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);gw(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 ps(r,i,[e]),{key:a.key,left:s.pictures.length}}function bw(t,e,n,r){let i=n.coloring==="original"?rn(n.figure):ri(n.figure,r),s=n.coloring==="original"?rn(n.fill):ri(n.fill,r),o=`${Qt(t)}.${iw("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 ww(t,e,n,r){return n==="original"&&r?{coloring:"original",opacity:hs(t,r),peak:r}:{coloring:"tone",opacity:e.opacity,tone:e.color}}function Mf(t,e){return z(rc,`${Qt(t)}-${e}`)}function Af(t,e){return e.map(([n,r])=>{let i=z(t,n);return H(i,r),i})}function sc(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=xf(s.width,s.height),p=fw(r,h.width,h.height,o,a),$=bw(u,l,p,n.color),g=Mf(u,l),b={key:l,stem:$.stem,fill:$.fill,...ww(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)gw(c,y);Cx(z(c,rc),{recursive:!0});let S=Af(c,[...$.files,[b.original,i.bytes],...b.cut?[[b.cut,sf(ni(r))]]:[]]);return d.pictures=y?d.pictures.map((E)=>E===y?b:E):[...d.pictures,b],d.active=l,f.palettes[u]=d,ps(c,f,[u]),[...S,z(c,`${Qt(u)}.conf`)]}function gs(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,ps(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 Of="top-right";function bs(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=mr(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=ow(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!==Of?{position:a}:{},...Number.isFinite(c)&&c!==e.opacity?{opacity:c}:{}}}function Ro(t,e,n,r,i){let s=n.size??"fill",o=n.position??Of,a=n.opacity??e.opacity;if(s==="fill"&&o===Of&&a===e.opacity)return;let c=Bt.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(ms(e))throw Error(`${e.stem} was drawn before pictures kept their tone — init draws it again`);let p=Ht(new Uint8Array(ds(u))),{width:$,height:g}=d?No:p,b=d?Number(/@fill-(\d+)\.png$/.exec(e.fill)?.[1]??50):-1,y=bs(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?ri(ho(ec(ni(p),E,$,g)),e.tone):rn(Nf(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 $w(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 kw(t){try{let e=nn(new Uint8Array(ds(t)));return e?{width:e.width,height:e.height}:void 0}catch{return}}function yw(t,e,n,r,i,s,o){let a=[n.original,n.cut].map((c)=>{if(!c)return"";try{let{size:u,mtimeMs:l}=jx(z(t,c));return`${c}:${u}:${l}`}catch{return}});if(!n.original||a.includes(void 0))return;return Fb([Bx,Qt(e),n.key,...a,r.width,r.height,i,s,s==="tone"?o:""])}function r2(t,e,n){if(!n.window||n.blur===void 0)return;let r=yw(t,e,n,n.window,n.blur,$e(n),n.tone??"");if(!r||Cb(r))return;try{gf(r,{stem:n.stem,fill:n.fill,...n.peak?{peak:n.peak}:{},figure:ds(z(t,`${n.stem}.png`)),picture:ds(z(t,n.fill))})}catch{}}function vw(t,e,n,r,i,s,o,a,c){let u=c?void 0:yw(t,e,n,r,o,a,s.hue.color),l=u?Lb(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=fw(f,r.width,r.height,o,a),h=bw(e,n.key,d,s.hue.color),p=d.coloring==="original"?d.peak:void 0;if(u)gf(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 To(t,e,n,r,i,s,o,a,c,u=$e(n)){let l=D(t),f=n.window??kw(z(l,n.fill))??No,d=vw(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,...ww(i.colors,i.hue,u,p),blur:s,window:f,...c?{cut:`${Mf(e,n.key)}.cut.png`}:{}};if(u==="original")delete g.tone;else delete g.peak;if(c&&$)H(z(l,`${Mf(e,n.key)}.cut.png`),sf(ni($)));if(h.stem===n.stem)return g;if($e(n)!==u)r2(l,e,n);Af(l,h.files);let b=Hf(l,n);Ro(l,g,$e(n)===u?b:{...b,opacity:void 0},o,a);let y=z(l,`${n.stem}.off.conf`);if(If(y))Fx(y,z(l,`${g.stem}.off.conf`));return g}function Sw(t,e,n,r,i,s,o){let a=D(t),c=n.window??kw(z(a,n.fill))??No;return vw(a,e,n,c,r,i,s,o,!1)!==null}function Ff(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;ps(n,r,[...i]);for(let o of s)Pf(n,o)}function Ew(t,e,n){return t.replace(/^background-image-opacity = (\S+)$/m,(r,i)=>Number(i)===e?`background-image-opacity = ${n}`:r)}function Mw(t,e,n){let r=z(t,`${e.stem}.tune.conf`),i=mr(r);if(i!==void 0)H(r,Ew(i,e.opacity,n));return{...e,opacity:n}}function i2(t,e,n,r){if(n.tone===r.color)return Mw(t,n,r.opacity);let i=pw(t,n.stem).filter((a)=>a.endsWith(".png")).map((a)=>{let c=new Uint8Array(ds(z(t,a)));return[a,Ga(c,r.color)??ri(ni(Ht(c)),r.color)]}),s=(a)=>i.find(([c])=>c===a)?.[1]??new Uint8Array,o=`${Qt(e)}.${iw("sha1").update(n.key).update(s(`${n.stem}.png`)).update(s(n.fill)).digest("hex").slice(0,8)}`;Af(t,i.map(([a,c])=>[o+a.slice(n.stem.length),c]));for(let a of["tune","off"]){let c=mr(z(t,`${n.stem}.${a}.conf`));if(c!==void 0)H(z(t,`${o}.${a}.conf`),Ew(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 nc(t,e){if($e(t)==="original")return t.peak!==void 0&&hs(e.colors,t.peak)!==t.opacity;return t.tone!==void 0&&(t.tone!==e.hue.color||t.opacity!==e.hue.opacity)}function Ow(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)=>nc(u,c)))continue;a.pictures=a.pictures.map((u)=>{if(!nc(u,c))return u;let l=$e(u)==="original"?Mw(n,u,hs(c.colors,u.peak)):i2(n,o,u,c.hue);if(l.stem!==u.stem)s.push(u.stem);return l}),i.push(o)}if(i.length>0){ps(n,r,i);for(let o of s)Pf(n,o)}return i}var Cf=1,Lf="npx @kecan0406/ttheme@latest init";class oc extends Error{}function ac(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 oc(`${e} is schema ${t}, newer than the schema ${n} this ttheme reads — \`${Lf}\` updates it`)}function cn(t){let{slot:e,color:n,opacity:r}=an({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:Xe(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 s2=6,o2=["ansi1","ansi2","ansi4","ansi3","ansi5","ansi6"];function cc(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===s2||!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 uc(){return{schema:Cf,version:xt.version,gate:pe,palettes:[]}}import{existsSync as a2,readFileSync as fc,statSync as Iw}from"node:fs";import{homedir as ys}from"node:os";import{join as $s}from"node:path";var c2=["core","kowiki","unlicensed"],u2=["ko","ja","en","zh","other"],Rw=["keys","keyAt","ownAt","owners","cards","cardAt","ranks","tags","tagAt","tagCard"],Tw="TTNI";function gr(t=ys()){return $s(process.env.XDG_CACHE_HOME??$s(t,".cache"),"ttheme","aninames")}var l2=/[ァ-ヶ]/g,f2=/[\s\p{P}\p{S}]+/gu;function ks(t){return t.normalize("NFKC").toLowerCase().replace(l2,(e)=>String.fromCharCode(e.charCodeAt(0)-96)).replace(f2,"")}function li(t,e){let n=ks(e);if(n===""){let r=e.toLowerCase();return t.some((i)=>i.toLowerCase().includes(r))}return t.some((r)=>ks(r).includes(n))}function _f(t){return t.length>=2||/[\p{Script=Han}\p{Script=Hangul}\p{Script=Hiragana}]/u.test(t)}function Pw(t){let e=gr(t);return c2.map((n)=>$s(e,`ttheme-${n}.json`)).filter((n)=>a2(n))}var d2=6;function Aw(t){return[`format ${d2}`,...t.map((e)=>`${e}:${Iw(e).size}:${Iw(e).mtimeMs}`)].join("|")}function h2(t){try{return JSON.parse(fc(t,"utf8"))}catch{return{}}}function m2(t){let e=new Map;for(let i of t)for(let[s,o]of Object.entries(h2(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 u2)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 Po(t,e){let n=new t(e.length);return n.set(e),n}function jf(t){let e=[0];for(let n of t)e.push(e.at(-1)+n.length);return{bytes:Buffer.concat(t),at:Po(Uint32Array,e)}}function p2(t,e){let n=m2(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=ks(F);if(j&&_f(j))i(j,E,2|R);let _=F.split(/[\s・·_]+/);if(_.length<2)continue;for(let X of _){let W=ks(X);if(W&&_f(W))i(W,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=jf(s.map((S)=>Buffer.from(S))),l=jf(n.map((S)=>Buffer.from(JSON.stringify([S.tag,S.tags,S.names,S.japanese,S.generated])))),f=jf(c.map(([S])=>Buffer.from(S))),d={keys:u.bytes,keyAt:u.at,ownAt:Po(Uint32Array,o),owners:Po(Uint32Array,a),cards:l.bytes,cardAt:l.at,ranks:Po(Float32Array,n.map((S)=>S.rank)),tags:f.bytes,tagAt:f.at,tagCard:Po(Uint32Array,c.map(([,S])=>S))},h=Rw.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(Tw,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 xw(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 Nw(t,e){if(t.toString("latin1",0,4)!==Tw)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[Rw.indexOf(c)];return[i+u,l]},o=(c)=>{let[u,l]=s(c);return t.subarray(u,u+l)},a=(c)=>xw(Uint32Array,t,...s(c));return{keys:o("keys"),keyAt:a("keyAt"),ownAt:a("ownAt"),owners:a("owners"),cards:o("cards"),cardAt:a("cardAt"),ranks:xw(Float32Array,t,...s("ranks")),tags:o("tags"),tagAt:a("tagAt"),tagCard:a("tagCard")}}var Gf;function Uf(t){try{let e=Pw(t);if(e.length===0)return;let n=Aw(e);if(Gf?.stamp===n)return Gf.index;let r=$s(gr(t),"index.bin"),i;try{i=Nw(fc(r),n)}catch{}if(!i){let s=p2(e,n);try{H(r,s)}catch{}i=Nw(s,n)}if(i)Gf={stamp:n,index:i};return i}catch{return}}function Hw(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 Fw(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 Cw(t,e){let n=Buffer.from(e),r=t.tagCard.length,i=Fw(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 Bf=/\s*[((][^()()]*[))]$/u,lc={ko:4,en:4,ja:5,zh:3};function g2(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)=>!Bf.test(f))),i=(f)=>!Bf.test(f)||!r.has(f.replace(Bf,"")),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,lc.ko),...c.slice(0,lc.en),...u.slice(0,lc.ja),...l.slice(0,lc.zh)])]}var ws;function dc(t,e=ys()){if(!t)return[];if(!ws)try{ws=JSON.parse(fc($s(gr(e),"aliases.json"),"utf8")).tags}catch{ws={}}return ws[t]??[]}function Wf(t,e=ys()){try{return b2(t,e)}catch{return new Map}}function b2(t,e){let n=new Map,r=Pw(e);if(r.length===0||t.length===0)return n;let i=Aw(r),s=$s(gr(e),"aliases.json"),o;try{o=JSON.parse(fc(s,"utf8"))}catch{}if(o?.stamp===i&&t.every((l)=>(l in o.tags))){ws=o.tags;for(let l of t)n.set(l,o.tags[l]??[]);return n}let a=Uf(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=Cw(a,l);u[l]=f===void 0?[]:g2(Hw(a,f))}try{H(s,`${JSON.stringify({stamp:i,tags:u})}
|
|
248
|
+
`)}catch{}ws=u;for(let l of t)n.set(l,u[l]??[]);return n}function fi(t,e=ys()){Wf(t.flatMap((n)=>n.booru?[n.booru]:[]),e)}var w2=0.25,$2=0.1;function Lw(t,e,n=new Set,r=ys()){let i=ks(t);if(!i||!_f(i))return[];let s=Uf(r);if(!s)return[];let o=Buffer.from(i),a=s.ownAt.length-1,c=new Set([...n].flatMap((l)=>Cw(s,l)??[])),u=new Map;for(let l=Fw(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)+w2*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=Hw(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)=>ks(p).includes(h))??d.tag.replaceAll("_"," ")}})}function hc(t=ys()){Uf(t)}import{existsSync as I2,readdirSync as Kw,readFileSync as x2}from"node:fs";import{basename as zw,join as pc}from"node:path";import{existsSync as k2,readFileSync as jw}from"node:fs";import{homedir as Gw}from"node:os";import{isAbsolute as Bw,join as di,resolve as y2}from"node:path";var q="official",We="ttheme-market.toml",Kf=1,vs="ttheme-market",v2=/^[a-z0-9](?:[a-z0-9]|-(?=[a-z0-9])){0,38}$/i,S2=/^[\w.-]{1,100}$/,E2=/^\w[\w.+/-]{0,199}$/;function wr(t){return di(t,"ttheme","installed.json")}function _t(t){return t??[q]}function Ss(t){try{let{markets:e}=JSON.parse(jw(wr(t),"utf8"));return _t(Array.isArray(e)?e.filter((n)=>typeof n==="string"):void 0)}catch{return[q]}}function ut(t){return Bw(t)}function ie(t){return t!==q&&!ut(t)}function br(t){let e=t.indexOf("#");return ie(t)&&e>=0?t.slice(0,e):t}function Ao(t){let e=t.indexOf("#");return ie(t)&&e>=0?t.slice(e+1):void 0}function Es(t,e){return br(t)===br(e)}function $r(t,e){return!ut(t)&&(e?.[t]??t===q)}function M2(t){return!E2.test(t)||t.includes("..")||t.includes("//")||/(?:[./]|\.lock)$/.test(t)}function hi(t,e=process.cwd()){if(t===q)return q;if(t==="~"||t.startsWith("~/"))return di(Gw(),t.slice(1));if(t.startsWith(".")||Bw(t))return y2(e,t);let[n="",r,...i]=t.split("#"),[s,o,...a]=n.replace(/^https:\/\/github\.com\//,"").replace(/\.git$/,"").split("/");if(!s||!v2.test(s)||!o||!S2.test(o)||a.length>0||i.length>0||r!==void 0&&M2(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 _w(t){let e=Ao(t)?.split("/").map(encodeURIComponent).join("/")??"HEAD";return`https://codeload.github.com/${br(t)}/tar.gz/${e}`}function Uw(t){return t.slice(0,t.indexOf("/"))}function zf(t){return di(t,"ttheme","markets")}function Re(t,e){return di(zf(t),`${br(e).replace("/","--")}.json`)}function mc(t){return di(t,"ttheme","market")}function Df(t,e){return di(mc(t),e)}function O2(t,e){if(typeof t!=="string"||typeof e!=="string")return'needs an "owner" (the GitHub handle) and a "name"';return _e(`${t}@${e}/x`)}function Te({owner:t,name:e}){return`${t}@${e}`}function Ww({owner:t,name:e}){return`schema = ${Kf}
|
|
249
|
+
owner = ${JSON.stringify(t)}
|
|
250
|
+
name = ${JSON.stringify(e)}
|
|
251
|
+
`}function qf(t,e){let n;try{n=Eo(t)}catch(i){throw Error(`${e} is not valid TOML — ${i.message.split(`
|
|
252
|
+
`)[0]}`)}if(n.schema===void 0)throw Error(`${e} has no schema — schema = ${Kf} goes at its top`);ac(n.schema,e,Kf);let r=O2(n.owner,n.name);if(r)throw Error(`${e} ${r}`);return{owner:n.owner,name:n.name}}function Rn(t){let e=di(t,We);if(!k2(e))throw Error(`${t} has no ${We} — \`ttheme market init ${t}\` makes one`);return qf(jw(e,"utf8"),e)}function et(t){if(t===q)return"the ttheme catalog";if(!ut(t))return`github.com/${t}`;let e=Gw();return t===e||t.startsWith(`${e}/`)?`~${t.slice(e.length)}`:t}var Tn="tt1:",Dw=["background","foreground","cursor","selection",...Array.from({length:16},(t,e)=>`ansi${e}`)];function mi(t,e=!0){return Ss(t).filter(ut).flatMap((n)=>{try{let r=Rn(n);return[{dir:n,...r,id:Te(r)}]}catch(r){if(e)process.stderr.write(`ttheme: skipping the market at ${n} — ${r.message}
|
|
253
|
+
`);return[]}})}function gc(t){return pc(t,"palettes")}function Yf(t,e){return t<e?-1:t>e?1:0}function Jf(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:zw(o,".toml")},name:o})}else if(a.endsWith(".toml"))n.push({file:{path:e(i),slug:zw(a,".toml"),catalog:o},name:a})}return n.sort((i,s)=>Yf(i.file.catalog??"",s.file.catalog??"")||Yf(i.name,s.name)),r.sort((i,s)=>Yf(i.name,s.name)),[...n,...r].map(({file:i})=>i)}function bc(t){let e=gc(t);if(!I2(e))return[];let n=Kw(e,{withFileTypes:!0}).flatMap((r)=>r.isDirectory()?Kw(pc(e,r.name)).map((i)=>`palettes/${r.name}/${i}`):[`palettes/${r.name}`]);return Jf(n,(r)=>pc(t,r))}function N2(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:xo(t.catalog);return r?`the catalog folder ${JSON.stringify(t.catalog)} ${r}`:void 0}function Vf(t,e){let n=ct(e);if(!n)throw Error(`${e} is an official palette — yours are named <you>@<market>/<palette>`);let r=mi(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=dr(e);return bc(r.dir).find((s)=>s.slug===i)?.path??pc(gc(r.dir),`${i}.toml`)}function R2(t,e,n=!1){let r=new Map;for(let s of e)if(s.group!==Mo&&!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&&!ct(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 Pn(t,e,n,r=!1){let i=dr(t),{native:s,...o}=kf(`${i}.toml`,e,R2(i,n,r)),a=ct(t);return{...o,name:t,...a?{group:a,lead:!1}:{}}}function se(t){return t?(e,n)=>process.stderr.write(`ttheme: skipping ${e} — ${n}
|
|
254
|
+
`):()=>{}}function Zf(t,e,n,r,i,s=!1){let o=new Map;return t.flatMap((a)=>{try{let c=N2(a,o);if(c)throw Error(c);o.set(a.slug,a);let u=cn(Pn(`${n}/${a.slug}`,e(a),r,s));return[a.catalog?{...u,catalog:a.catalog}:u]}catch(c){return i(a.path,c.message),[]}})}function An(t,e,n,r=se(!0)){return Zf(bc(t),(i)=>x2(i.path,"utf8"),e,n,r)}function wc(t,e,n=!0){return mi(t,n).flatMap(({dir:r,id:i})=>An(r,i,e,se(n)))}function Qf(t,e=t.name,n){return{name:e,...t.base?{base:t.base}:{},...t.group!==Mo?{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 qw(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 Yw(t,e){return e.length===0?t:`${t.replace(/\n*$/,`
|
|
251
255
|
`)}${e.map((n)=>`
|
|
252
|
-
${
|
|
256
|
+
${qw(n).join(`
|
|
253
257
|
`)}
|
|
254
|
-
`).join("")}`}function
|
|
258
|
+
`).join("")}`}function Xf(t){let e=["[meta]",`name = ${Mt(dr(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("",...qw(n));return`${e.join(`
|
|
255
259
|
`)}
|
|
256
|
-
`}class
|
|
257
|
-
`)}function
|
|
258
|
-
`)}function lt(t,e=!0){let
|
|
259
|
-
`);return[]}}function
|
|
260
|
-
`)}function
|
|
261
|
-
`),l=!1;for(let
|
|
262
|
-
`){if(s)r+=
|
|
263
|
-
`){if(i&&
|
|
264
|
-
`)}var
|
|
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
|
|
260
|
+
`}class Jw{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 Vw{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 Zw(t){let e=new Jw;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(Dw.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<<Gl.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:Bt.indexOf(r.position)+1),e.u16(r.opacity===void 0?0:Math.round(r.opacity*1000)+1);return`${Tn}${e.done()}`}function Qw(t){if(!t.startsWith(Tn))throw Error(`a share code starts with ${Tn}`);let e=t.slice(Tn.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 Vw(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)=>Dw[y]??`slot${y}`),l=n.str(),f=n.str(),d=n.str(),h=n.str(),p=n.u16(),$=n.str(),g=Gl.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:Bt[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 td(t){return{background:t.background,foreground:t.foreground,cursor:t.cursor,selection:t.selectionBackground,ansi:t.ansi}}function ed(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 Xw(t,e){return t.replace(/^(signature\s*=\s*)\[[^\]]*\]/m,(n,r)=>`${r}[${e.map(Mt).join(", ")}]`)}function nd(t){let e=Xe(Ue(t)),n=new Set(t.waived??[]),r=Math.max(...pe.map((i)=>i.label.length));return pe.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 T2,readFileSync as P2,rmSync as A2}from"node:fs";import{join as H2}from"node:path";var kc=["background","foreground","cursor","selection",...Array.from({length:16},(t,e)=>`ansi${e}`)],F2=1;function t0(t){return H2(t,"ttheme","tone.json")}function e0(t){return kc.includes(t)}function Hn(t){let e=t0(t);if(!T2(e))return{};let n;try{n=JSON.parse(P2(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(e0(c)&&typeof u==="string"&&ne(u.toLowerCase()))a[c]=u.toLowerCase();if(Object.keys(a).length>0)i[s]=a}return i}function n0(t,e){let n=t0(t),r=Object.fromEntries(Object.entries(e).filter(([,i])=>Object.keys(i).length>0));if(Object.keys(r).length===0){A2(n,{force:!0});return}H(n,`${JSON.stringify({version:F2,palettes:r},null,2)}
|
|
261
|
+
`)}function $c(t,e){if(e==="background"||e==="foreground"||e==="cursor"||e==="selection")return t[e];return t.ansi[Number(e.slice(4))]}function rd(t,e){let n={};return kc.forEach((r,i)=>{let s=e[i].toLowerCase();if(s!==$c(t,r).toLowerCase())n[r]=s}),n}function Ms(t,e){if(!e)return t;let n=(u)=>e[u]===void 0||e[u]===$c(t,u).toLowerCase();if(kc.every(n))return t;let r=(u)=>e[u]??$c(t,u),i={background:r("background"),foreground:r("foreground"),cursor:r("cursor"),selection:r("selection"),ansi:kc.slice(4).map(r)},s=t.signatureSlots.map((u)=>e0(u)?r(u):$c(i,u)),o={...t,...i,signature:s},a=Ue(o),c=an({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:Xe(a),backdrop:c}}function yc(t,e){return Object.keys(e).length===0?t:t.map((n)=>Ms(n,e[n.name]))}function r0(t,e,n){let r={...t};if(Object.keys(n).length===0)delete r[e];else r[e]=n;return r}var o0="https://kecan0406.github.io/ttheme/manifest.json",a0=20000;function ye(t){return s0(t,"ttheme","catalog.json")}function vc(t,e){H(ye(t),`${JSON.stringify(e,null,2)}
|
|
262
|
+
`)}function lt(t,e=!0,n){let r=Ss(t),i=ye(t),s=uc();if(r.includes(q))if(n)s=n;else{if(!i0(i))throw Error(`no catalog at ${i} — run \`ttheme init\` first`);s=ln(id(i,"utf8"))}let o=r.filter(ie).flatMap((a)=>j2(t,a,s.palettes,e));return{...s,palettes:[...s.palettes,...o]}}function C2(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 un(t,e){return C2(id(Re(t,e),"utf8"))}function L2(t,e){return Te({owner:Uw(t),name:e.name})}function Ho(t,e){let n=e.files[We];if(n===void 0)throw Error(`${et(t)} has no ${We} — \`ttheme market init\` makes one`);return L2(t,qf(n,We))}function kr(t,e,n,r){let i=Ho(t,e),s=et(t),o=new Map(Object.entries(e.files).map(([c,u])=>[`${s}/${c}`,u])),a=Jf(Object.keys(e.files),(c)=>`${s}/${c}`);return{id:i,entries:Zf(a,(c)=>o.get(c.path)??"",i,n,r,!0)}}function j2(t,e,n,r){let i=Re(t,e);if(!i0(i))return[];try{return kr(e,un(t,e),n,se(!1)).entries}catch(s){if(r)process.stderr.write(`ttheme: skipping ${i} — ${s.message}
|
|
263
|
+
`);return[]}}function ln(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");ac(n,"catalog",Cf);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=c0(i);if(s)throw Error(`catalog entry ${JSON.stringify(i?.name)} ${s}`)}return r}function c0(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=_e(t.name)??(t.base===void 0?void 0:_e(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"?xo(n):"has a field that is not text";if(r)return r}return}function u0(t){return s0(t,"ttheme","kept.json")}function Sc(t,e){H(u0(t),`${JSON.stringify({palettes:e},null,2)}
|
|
264
|
+
`)}function Fn(t){try{let{palettes:e}=JSON.parse(id(u0(t),"utf8"));return Array.isArray(e)?e.filter((n)=>c0(n)===void 0):[]}catch{return[]}}function pi(t,e,n=!0){let r=[...e.palettes,...wc(t,e.palettes,n)],i=new Set(r.map((s)=>s.name));return{...e,palettes:[...r,...Fn(t).filter((s)=>!i.has(s.name))]}}function Ot(t,e,n=!0){let r=pi(t,e,n);return{...r,palettes:yc(r.palettes,Hn(t))}}function oe(t){return Ot(t,lt(t))}class Ec extends Error{}class Mc extends Error{}async function sd(t,e=a0,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 Ec(`nothing at ${t}`);if(i.status===403||i.status===429)throw new Mc(`${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 Oc(t,e,n=a0,r){return e(await(await sd(t,n,r)).text())}function Fo(t){let e=new Set(t.waived??[]),n=t.gate??Xe(Ue(t));return pe.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 Cn(t,e){let n=t.find((r)=>r.name===e);if(!n)throw Error(`no palette named ${e} in the catalog — ${od(t,[e])}`);return n}function od(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 l0(t,e){return t.filter((n)=>li([n.name,n.group,n.native??"",n.ansiSource,...n.nativeNames??[],...dc(n.booru)],e))}function f0(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 d0(t,e){return t.booruSites?.[e]??(t.booru?[t.booru]:[])}var G2=9999,Os;function ae(t,e){if(!Os||e===""||Os.length>=G2)return e;return`\x1B[?${Os.push(t)}y${e}\x1B[?0y`}function Ic(t){let e=Os,n=[];Os=n;try{return{drawn:t(),targets:n}}finally{Os=e}}function B2(t){let e=t.slice(3,-1);return t.startsWith("\x1B[?")&&t.endsWith("y")&&/^\d{1,4}$/.test(e)?Number(e):void 0}function _2(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 U2(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+(Hl(t,u)||1));u+=f.length;let d=B2(f),h=d===void 0?_2(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 xc(t,e){let n=[];return{lines:t.map((i,s)=>{let o=U2(i,s,e);return n.push(...o.zones),o.text}),zones:n}}function h0(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 W2(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 K2={space:" ",enter:"enter",esc:"esc",tab:"tab",bksp:"backspace","←":"left","→":"right"};function ad(t){let e=/^(ctrl|alt)\+([a-z])$/.exec(t);if(e)return`${e[1]}-${e[2]}`;return K2[t]??([...t].length===1&&t!==" "?t:void 0)}function fn(t,e){let n=ad(t);return n?ae({kind:"key",key:n},e):e}class Co{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&&h0(n,t.row,t.col)}let e=W2(this.zones,t.row,t.col);if(t.action==="press")this.held=t.button==="left"?e:void 0;return e&&h0(e,t.row,t.col)}drop(){this.held=void 0}}var Ln=[{name:"preview",title:"Preview"},{name:"browse",title:"Browse"}],Nc=10,Rc=20,z2="\x1B[7;1m\x1B[36m";function m0(t){return Ln.find((e)=>e.name===t.TTHEME_HUB)?.name}function p0(t,e){let n=Ln.findIndex((r)=>r.name===t);return Rc+(n+e+Ln.length)%Ln.length+1}function g0(t){return Rc+Ln.findIndex((e)=>e.name===t)+1}function cd(t,e){let n=Ln.map(({name:i,title:s})=>{let o={kind:"hub",tab:i};if(!e)return ae(o,i===t?`[${s}]`:` ${s} `);return i===t?`${z2}${ae(o,` ${s} `)}${Pt}`:`${P}${ae(o,` ${s} `)}${Pt}`}),r="tab next";return` ${n.join(" ")} ${e?`${P}tab next${Pt}`:"tab next"}`}import{execFileSync as BT}from"node:child_process";import{existsSync as Hk,mkdirSync as _T,readdirSync as UT,readFileSync as WT,rmSync as Fk}from"node:fs";import{basename as KT,join as Lh}from"node:path";import{styleText as Fc}from"node:util";import{stdout as I0,stdin as X2}from"node:process";import tN from"node:readline";var Tc="\x1B",y0="",D2=39,ld="\x07",v0="[",q2="]",S0="m",fd=`${q2}8;;`,b0=new RegExp(`(?:\\${v0}(?<code>\\d+)m|\\${fd}(?<uri>.*)${ld})`,"y"),w0=(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},$0=(t)=>`${Tc}${v0}${t}${S0}`,k0=(t)=>`${Tc}${fd}${t}${ld}`,ud=(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===Tc||f===y0)i=!0,s=e.startsWith(fd,l+1);if(i){if(s){if(f===ld)i=!1,s=!1}else if(f===S0)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()},Y2=(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("")},J2=(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("");ud(a,d,e),c=Q(a.at(-1)??"");continue}if(c+h>e&&c&&h){if(n.wordWrap===!1&&c<e){ud(a,d,e),c=Q(a.at(-1)??"");continue}a.push(""),c=0}if(c+h>e&&n.wordWrap===!1){ud(a,d,e),c=Q(a.at(-1)??"");continue}a[a.length-1]+=d,c+=h}if(n.trim!==!1)a=a.map((f)=>Y2(f));let u=a.join(`
|
|
265
|
+
`),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===Tc||d===y0){b0.lastIndex=f+1;let p=b0.exec(u)?.groups;if(p?.code!==void 0){let $=Number.parseFloat(p.code);i=$===D2?void 0:$}else if(p?.uri!==void 0)s=p.uri.length===0?void 0:p.uri}if(u[f+1]===`
|
|
266
|
+
`){if(s)r+=k0("");let h=i?w0(i):void 0;if(i&&h)r+=$0(h)}else if(d===`
|
|
267
|
+
`){if(i&&w0(i))r+=$0(i);if(s)r+=k0(s)}}return r},V2=/\r?\n/;function yr(t,e,n){return String(t).normalize().split(V2).map((r)=>J2(r,e,n)).join(`
|
|
268
|
+
`)}var ve=Pl(hd(),1);function jn(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?jn(s,e<0?-1:1,n):s}function Pc(t,e,n,r){let i=r.split(`
|
|
269
|
+
`),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 eN=["up","down","left","right","space","enter","cancel"],nN=["January","February","March","April","May","June","July","August","September","October","November","December"],Ut={actions:new Set(eN),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:[...nN],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 x0(t,e){if(typeof t=="string")return Ut.aliases.get(t)===e;for(let n of t)if(n!==void 0&&x0(n,e))return!0;return!1}function rN(t,e){if(t===e)return;let n=t.split(`
|
|
266
270
|
`),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
|
|
271
|
+
`),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 C5=globalThis.process.platform.startsWith("win"),pd=Symbol("clack:cancel");function ce(t){return t===pd}function Ac(t,e){let n=t;n.isTTY&&n.setRawMode(e)}var Cc=(t)=>("columns"in t)&&typeof t.columns=="number"?t.columns:80,bd=(t)=>("rows"in t)&&typeof t.rows=="number"?t.rows:20;function vr(t,e,n,r=n,i=n,s){let o=Cc(t??I0);return yr(e,o-n.length,{hard:!0,trim:!1}).split(`
|
|
268
272
|
`).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
|
|
270
|
-
`),
|
|
271
|
-
`).length-1;this.output.write(
|
|
272
|
-
`);this.output.write(o[s]),this._prevFrame=t,this.output.write(
|
|
273
|
+
`)}function N0(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 Gn{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=X2,output:r=I0,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(pd);this._abortSignal.addEventListener("abort",()=>{this.state="cancel",this.close()},{once:!0})}this.rl=tN.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),Ac(this.input,!0),this.output.on("resize",this.render),this.render(),this.once("submit",()=>{this.output.write(ve.cursor.show),this.output.off("resize",this.render),Ac(this.input,!1),t(this.value)}),this.once("cancel",()=>{this.output.write(ve.cursor.show),this.output.off("resize",this.render),Ac(this.input,!1),t(pd)})})}_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&&Ut.aliases.has(e.name)&&this.emit("cursor",Ut.aliases.get(e.name)),Ut.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=N0(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")}x0([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(`
|
|
274
|
+
`),Ac(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(`
|
|
275
|
+
`).length-1;this.output.write(ve.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(ve.cursor.hide);else{let e=rN(this._prevFrame,t),n=bd(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(ve.cursor.move(0,s-i)),this.output.write(ve.erase.lines(1));let o=t.split(`
|
|
276
|
+
`);this.output.write(o[s]),this._prevFrame=t,this.output.write(ve.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(ve.cursor.move(0,a))}this.output.write(ve.erase.down());let o=t.split(`
|
|
273
277
|
`).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 A2(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 F2(t,e){return(e.label??String(e.value)).toLowerCase().includes(t.toLowerCase())}function C2(t,e){if(e)return t?e:e[0]}var L2=class extends Ln{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??F2;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=Cn(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=C2(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=A2(this.focusedValue,this.filteredOptions);this.#e=Cn(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 df extends Ln{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 j2={Y:{type:"year",len:4},M:{type:"month",len:2},D:{type:"day",len:2}};function a0(t){return[...t].map((e)=>j2[e])}function G2(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 af(t){return Number.parseInt((t||"0").replace(/_/g,"0"),10)||0}function Tc(t){return{year:af(t.year),month:af(t.month),day:af(t.day)}}function uf(t,e){return new Date(t||2001,e||1,0).getDate()}function f0(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 c0(t){let e=f0(t);return e?new Date(Date.UTC(e.year,e.month-1,e.day)):void 0}function _2(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:uf(e.year,e.month)}}class h0 extends Ln{#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.#d(this.#t)}#d(t){return this.#e.map((e)=>t[e.type]).join(this.#n)}#c(){this._setUserInput(this.#d(this.#t)),this._setValue(c0(this.#t)??void 0)}constructor(t){let e=t.format?{segments:a0(t.format),separator:t.separator??"/"}:G2(t.locale),n=t.separator??e.separator,r=t.format?a0(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)}#f(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=_2(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.#f(1);case"down":return this.#f(-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 f=this.#o+t,h={...this.#t,[r.type]:f},p=this.#h(h,r);if(p){this.inlineError=p,this.#o=null,this.#i=!1;return}this.inlineError="",this.#t[r.type]=f,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 f=Number.parseInt(t,10);c=`0${t}`,u=f<=(r.type==="month"?1:2)}if(r.type==="year"&&(c=(s.replace(/_/g,"")+t).padStart(r.len,"_")),!c.includes("_")){let f={...this.#t,[r.type]:c},h=this.#h(f,r);if(h){this.inlineError=h;return}}this.inlineError="",this.#t[r.type]=c;let l=c.includes("_")?void 0:f0(this.#t);if(l){let{year:f,month:h}=l,p=uf(f,h);this.#t={year:String(Math.max(0,Math.min(9999,f))).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 d=c.indexOf("_");u?(this.#i=!0,this.#o=t):d>=0?this.#r.positionInSegment=d: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=uf(e,n);this.#t={...this.#t,day:String(Math.min(r,i)).padStart(2,"0")}}this.value=c0(this.#t)??t.defaultValue??void 0}}var B2=class extends Ln{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}})}},W2=new Set(["up","down","left","right"]);class m0 extends Ln{#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===`
|
|
278
|
+
`)),this._prevFrame=t;return}}this.output.write(ve.erase.down())}this.output.write(t),this.state==="initial"&&(this.state="active"),this._prevFrame=t}}}function iN(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 sN(t,e){return(e.label??String(e.value)).toLowerCase().includes(t.toLowerCase())}function oN(t,e){if(e)return t?e:e[0]}var aN=class extends Gn{filteredOptions;multiple;isNavigating=!1;selectedValues=[];focusedValue;#e=0;#n="";#t;#s;#a;get cursor(){return this.#e}get userInputWithCursor(){if(!this.userInput)return Fc(["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}${Fc("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??sN;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=jn(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=oN(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=iN(this.focusedValue,this.filteredOptions);this.#e=jn(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 wd extends Gn{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(ve.cursor.move(0,-1)),this.value=e,this.state="submit",this.close()}),this.on("cursor",()=>{this.value=!this.value})}}var cN={Y:{type:"year",len:4},M:{type:"month",len:2},D:{type:"day",len:2}};function M0(t){return[...t].map((e)=>cN[e])}function uN(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 md(t){return Number.parseInt((t||"0").replace(/_/g,"0"),10)||0}function Hc(t){return{year:md(t.year),month:md(t.month),day:md(t.day)}}function gd(t,e){return new Date(t||2001,e||1,0).getDate()}function R0(t){let{year:e,month:n,day:r}=Hc(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 O0(t){let e=R0(t);return e?new Date(Date.UTC(e.year,e.month-1,e.day)):void 0}function lN(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:gd(e.year,e.month)}}class T0 extends Gn{#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(O0(this.#t)??void 0)}constructor(t){let e=t.format?{segments:M0(t.format),separator:t.separator??"/"}:uN(t.locale),n=t.separator??e.separator,r=t.format?M0(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=lN(n.type,Hc(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:R0(this.#t);if(l){let{year:d,month:h}=l,p=gd(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}=Hc(t);if(e.type==="month"&&(n<0||n>12))return Ut.date.messages.invalidMonth;if(e.type==="day"&&(r<0||r>31))return Ut.date.messages.invalidDay(31,"any month")}#g(t){let{year:e,month:n,day:r}=Hc(this.#t);if(e&&n&&r){let i=gd(e,n);this.#t={...this.#t,day:String(Math.min(r,i)).padStart(2,"0")}}this.value=O0(this.#t)??t.defaultValue??void 0}}var fN=class extends Gn{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}})}},dN=new Set(["up","down","left","right"]);class P0 extends Gn{#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
279
|
`?`${e}█
|
|
276
|
-
${r}`:`${e}${
|
|
280
|
+
${r}`:`${e}${Fc("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=Pc(this._cursor,0,-1,e);return;case"down":this._cursor=Pc(this._cursor,0,1,e);return;case"left":this._cursor=Pc(this._cursor,-1,0,e);return;case"right":this._cursor=Pc(this._cursor,1,0,e);return}}_shouldSubmit(t,e){if(this.#n)return this.focused==="submit"?!0:(this.#t(`
|
|
277
281
|
`),this._cursor++,!1);let n=this.#e;return this.#e=!0,n&&this.cursor===this.userInput.length?(this.userInput[this.cursor-1]===`
|
|
278
282
|
`&&(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&&
|
|
280
|
-
`);g.push(F),b+=F.length}if(b>l){let I=0,N=0,R=b,F=t-y,j=l,
|
|
283
|
+
`),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&&dN.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 $d extends Gn{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?jn(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=jn(this.cursor,-1,this.options);break;case"down":case"right":this.cursor=jn(this.cursor,1,this.options);break;case"space":this.toggleValue();break}})}}var A0=class extends Gn{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?jn(r,1,this.options):r,this.changeValue(),this.on("cursor",(i)=>{switch(i){case"left":case"up":this.cursor=jn(this.cursor,-1,this.options);break;case"down":case"right":this.cursor=jn(this.cursor,1,this.options);break}this.changeValue()})}};class kd extends Gn{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}${Fc("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 K5}from"node:util";import Pe from"node:process";var j0=Pl(hd(),1);function hN(){if(Pe.platform!=="win32")return Pe.env.TERM!=="linux";return Boolean(Pe.env.CI)||Boolean(Pe.env.WT_SESSION)||Boolean(Pe.env.TERMINUS_SUBLIME)||Pe.env.ConEmuTask==="{cmd::Cmder}"||Pe.env.TERM_PROGRAM==="Terminus-Sublime"||Pe.env.TERM_PROGRAM==="vscode"||Pe.env.TERM==="xterm-256color"||Pe.env.TERM==="alacritty"||Pe.env.TERMINAL_EMULATOR==="JetBrains-JediTerm"}var mN=hN();var dt=(t,e)=>mN?t:e,pN=dt("◆","*"),gN=dt("■","x"),bN=dt("▲","x"),Sd=dt("◇","o"),wN=dt("┌","T"),nt=dt("│","|"),Bn=dt("└","—"),Y5=dt("┐","T"),J5=dt("┘","—"),yd=dt("●",">"),jc=dt("○"," "),$N=dt("◻","[•]"),H0=dt("◼","[+]"),F0=dt("◻","[ ]"),V5=dt("▪","•"),C0=dt("─","-"),kN=dt("╮","+"),yN=dt("├","+"),vN=dt("╯","+"),SN=dt("╰","+"),Z5=dt("╭","+"),EN=dt("●","•"),MN=dt("◆","*"),ON=dt("▲","!"),IN=dt("■","x"),Gc=(t)=>{switch(t){case"initial":case"active":return M("cyan",pN);case"cancel":return M("red",gN);case"error":return M("yellow",bN);case"submit":return M("green",Sd)}},G0=(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 B0(t,e){let n=[`${e?`${M("cyan",nt)} `:""}${t.join(" • ")}`];return e&&n.push(M("cyan",Bn)),n}var L0=(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}},vd=({cursor:t,options:e,style:n,output:r=process.stdout,maxItems:i=Number.POSITIVE_INFINITY,columnPadding:s=0,rowPadding:o=4})=>{let a=Cc(r)-s,c=bd(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(`
|
|
284
|
+
`);g.push(F),b+=F.length}if(b>l){let I=0,N=0,R=b,F=t-y,j=l,_=()=>L0(g,R,0,F,j),X=()=>L0(g,R,F+1,g.length,j,!0);h?({lineCount:R,removals:I}=_(),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}=_())),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 Ke=(t)=>{let e=t.active??"Yes",n=t.inactive??"No";return new wd({active:e,inactive:n,signal:t.signal,input:t.input,output:t.output,initialValue:t.initialValue??!0,render(){let r=t.withGuide??Ut.withGuide,i=`${Gc(this.state)} `,s=r?`${M("gray",nt)} `:"",o=vr(t.output,t.message,s,i),a=`${r?`${M("gray",nt)}
|
|
281
285
|
`:""}${o}
|
|
282
|
-
`,c=this.value?e:n;switch(this.state){case"submit":{let u=r?`${M("gray",
|
|
283
|
-
${M("gray",
|
|
284
|
-
${M("cyan",
|
|
285
|
-
`:` ${M("dim","/")} `}${this.value?`${M("dim",
|
|
286
|
+
`,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?`
|
|
287
|
+
${M("gray",nt)}`:""}`}default:{let u=r?`${M("cyan",nt)} `:"",l=r?M("cyan",Bn):"";return`${a}${u}${this.value?`${M("green",yd)} ${e}`:`${M("dim",jc)} ${M("dim",e)}`}${t.vertical?r?`
|
|
288
|
+
${M("cyan",nt)} `:`
|
|
289
|
+
`:` ${M("dim","/")} `}${this.value?`${M("dim",jc)} ${M("dim",n)}`:`${M("green",yd)} ${n}`}
|
|
286
290
|
${l}
|
|
287
|
-
`}}}}).prompt()};var
|
|
291
|
+
`}}}}).prompt()};var xN=[`${M("dim","↑/↓")} to navigate`,`${M("dim","Space:")} select`,`${M("dim","Enter:")} confirm`],Lo=(t,e)=>t.split(`
|
|
288
292
|
`).map((n)=>e(n)).join(`
|
|
289
|
-
`),
|
|
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??
|
|
293
|
+
`),_0=(t)=>{let e=(i,s)=>{let o=i.label??String(i.value);return s==="disabled"?`${M("gray",F0)} ${Lo(o,(a)=>M(["strikethrough","gray"],a))}${i.hint?` ${M("dim",`(${i.hint??"disabled"})`)}`:""}`:s==="active"?`${M("cyan",$N)} ${o}${i.hint?` ${M("dim",`(${i.hint})`)}`:""}`:s==="selected"?`${M("green",H0)} ${Lo(o,(a)=>M("dim",a))}${i.hint?` ${M("dim",`(${i.hint})`)}`:""}`:s==="cancelled"?`${Lo(o,(a)=>M(["strikethrough","dim"],a))}`:s==="active-selected"?`${M("green",H0)} ${o}${i.hint?` ${M("dim",`(${i.hint})`)}`:""}`:s==="submitted"?`${Lo(o,(a)=>M("dim",a))}`:`${M("dim",F0)} ${Lo(o,(a)=>M("dim",a))}`},n=t.required??!0,r=t.showInstructions??!0;return new $d({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.
|
|
294
|
+
${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??Ut.withGuide,s=vr(t.output,t.message,i?`${G0(this.state)} `:"",`${Gc(this.state)} `),o=`${i?`${M("gray",nt)}
|
|
291
295
|
`:""}${s}
|
|
292
|
-
`,a=this.value??[],c=(u,l)=>{if(u.disabled)return e(u,"disabled");let
|
|
293
|
-
${M("gray",
|
|
294
|
-
`).map((h,p)=>p===0?`${i?`${M("yellow",
|
|
295
|
-
`),
|
|
296
|
-
`).length,
|
|
297
|
-
`).length+1;return`${o}${u}${
|
|
296
|
+
`,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",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=vr(t.output,u,i?`${M("gray",nt)} `:"");return`${o}${l}${i?`
|
|
297
|
+
${M("gray",nt)}`:""}`}case"error":{let u=i?`${M("yellow",nt)} `:"",l=this.error.split(`
|
|
298
|
+
`).map((h,p)=>p===0?`${i?`${M("yellow",Bn)} `:""}${M("yellow",h)}`:` ${h}`).join(`
|
|
299
|
+
`),f=o.split(`
|
|
300
|
+
`).length,d=l.split(`
|
|
301
|
+
`).length+1;return`${o}${u}${vd({output:t.output,options:this.options,cursor:this.cursor,maxItems:t.maxItems,columnPadding:u.length,rowPadding:f+d,style:c}).join(`
|
|
298
302
|
${u}`)}
|
|
299
303
|
${l}
|
|
300
|
-
`}default:{let u=i?`${M("cyan",
|
|
301
|
-
`).length,
|
|
302
|
-
`),h=
|
|
304
|
+
`}default:{let u=i?`${M("cyan",nt)} `:"",l=o.split(`
|
|
305
|
+
`).length,f=r?B0(xN,i):i?[M("cyan",Bn)]:[],d=f.join(`
|
|
306
|
+
`),h=f.length+1;return`${o}${u}${vd({output:t.output,options:this.options,cursor:this.cursor,maxItems:t.maxItems,columnPadding:u.length,rowPadding:l+h,style:c}).join(`
|
|
303
307
|
${u}`)}
|
|
304
|
-
${
|
|
305
|
-
`}}}}).prompt()};var
|
|
306
|
-
`);if(
|
|
308
|
+
${d}
|
|
309
|
+
`}}}}).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??Ut.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(`
|
|
310
|
+
`);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(`
|
|
307
311
|
`)}
|
|
308
|
-
`)},info:(t,e)=>{
|
|
312
|
+
`)},info:(t,e)=>{Sr.message(t,{...e,symbol:M("blue",EN)})},success:(t,e)=>{Sr.message(t,{...e,symbol:M("green",MN)})},step:(t,e)=>{Sr.message(t,{...e,symbol:M("green",Sd)})},warn:(t,e)=>{Sr.message(t,{...e,symbol:M("yellow",ON)})},warning:(t,e)=>{Sr.warn(t,e)},error:(t,e)=>{Sr.message(t,{...e,symbol:M("red",IN)})}},Er=(t="",e)=>{let n=e?.output??process.stdout,r=e?.withGuide??Ut.withGuide?`${M("gray",Bn)} `:"";n.write(`${r}${M("red",t)}
|
|
309
313
|
|
|
310
|
-
`)},
|
|
311
|
-
`)},
|
|
312
|
-
${M("gray",
|
|
314
|
+
`)},Bc=(t="",e)=>{let n=e?.output??process.stdout,r=e?.withGuide??Ut.withGuide?`${M("gray",wN)} `:"";n.write(`${r}${t}
|
|
315
|
+
`)},jo=(t="",e)=>{let n=e?.output??process.stdout,r=e?.withGuide??Ut.withGuide?`${M("gray",nt)}
|
|
316
|
+
${M("gray",Bn)} `:"";n.write(`${r}${t}
|
|
313
317
|
|
|
314
|
-
`)};var
|
|
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
|
|
316
|
-
`).map(s),""],a=Q(e),c=Math.max(o.reduce((
|
|
317
|
-
`),l=i?`${M("gray",
|
|
318
|
-
`:"",
|
|
318
|
+
`)};var NN=(t)=>t,RN=(t,e,n)=>{let r={hard:!0,trim:!1},i=yr(t,e,r).split(`
|
|
319
|
+
`),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??Pe.stdout,i=n?.withGuide??Ut.withGuide,s=n?.format??NN,o=["",...RN(t,Cc(r)-6,s).split(`
|
|
320
|
+
`).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",nt)} ${d}${" ".repeat(c-Q(d))}${M("gray",nt)}`).join(`
|
|
321
|
+
`),l=i?`${M("gray",nt)}
|
|
322
|
+
`:"",f=i?yN:SN;r.write(`${l}${M("green",Sd)} ${M("reset",e)} ${M("gray",C0.repeat(Math.max(c-a-1,1))+kN)}
|
|
319
323
|
${u}
|
|
320
|
-
${M("gray",
|
|
321
|
-
`)};var
|
|
324
|
+
${M("gray",f+C0.repeat(c+2)+vN)}
|
|
325
|
+
`)};var Q5={light:dt("─","-"),heavy:dt("━","="),block:dt("█","#")};var TN=[`${M("dim","↑/↓")} to navigate`,`${M("dim","Enter:")} confirm`],Lc=(t,e)=>t.includes(`
|
|
322
326
|
`)?t.split(`
|
|
323
327
|
`).map((n)=>e(n)).join(`
|
|
324
|
-
`):e(t),
|
|
328
|
+
`):e(t),U0=(t)=>{let e=(r,i)=>{if(r===void 0)return"";let s=r.label??String(r.value);switch(i){case"disabled":return`${M("gray",jc)} ${Lc(s,(o)=>M("gray",o))}${r.hint?` ${M("dim",`(${r.hint??"disabled"})`)}`:""}`;case"selected":return`${Lc(s,(o)=>M("dim",o))}`;case"active":return`${M("green",yd)} ${s}${r.hint?` ${M("dim",`(${r.hint})`)}`:""}`;case"cancelled":return`${Lc(s,(o)=>M(["strikethrough","dim"],o))}`;default:return`${M("dim",jc)} ${Lc(s,(o)=>M("dim",o))}`}},n=t.showInstructions??!0;return new A0({options:t.options,signal:t.signal,input:t.input,output:t.output,initialValue:t.initialValue,render(){let r=t.withGuide??Ut.withGuide,i=`${Gc(this.state)} `,s=`${G0(this.state)} `,o=vr(t.output,t.message,s,i),a=`${r?`${M("gray",nt)}
|
|
325
329
|
`:""}${o}
|
|
326
|
-
`;switch(this.state){case"submit":{let c=r?`${M("gray",
|
|
327
|
-
${M("gray",
|
|
328
|
-
`).length,l=n?
|
|
329
|
-
`),
|
|
330
|
+
`;switch(this.state){case"submit":{let c=r?`${M("gray",nt)} `:"",u=vr(t.output,e(this.options[this.cursor],"selected"),c);return`${a}${u}`}case"cancel":{let c=r?`${M("gray",nt)} `:"",u=vr(t.output,e(this.options[this.cursor],"cancelled"),c);return`${a}${u}${r?`
|
|
331
|
+
${M("gray",nt)}`:""}`}default:{let c=r?`${M("cyan",nt)} `:"",u=a.split(`
|
|
332
|
+
`).length,l=n?B0(TN,r):r?[M("cyan",Bn)]:[],f=l.join(`
|
|
333
|
+
`),d=l.length+1;return`${a}${c}${vd({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(`
|
|
330
334
|
${c}`)}
|
|
331
|
-
${
|
|
332
|
-
`}}}}).prompt()};var
|
|
333
|
-
`:""}${
|
|
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",
|
|
335
|
+
${f}
|
|
336
|
+
`}}}}).prompt()};var X5=`${M("gray",nt)} `;var Ed=(t)=>new kd({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??Ut.withGuide,n=`${`${e?`${M("gray",nt)}
|
|
337
|
+
`:""}${Gc(this.state)} `}${t.message}
|
|
338
|
+
`,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",Bn):"";return`${n.trim()}
|
|
335
339
|
${a}${i}
|
|
336
340
|
${c}${o}
|
|
337
|
-
`}case"submit":{let o=s?` ${M("dim",s)}`:"",a=e?M("gray",
|
|
338
|
-
${a}`:""}`}default:{let o=e?`${M("cyan",
|
|
341
|
+
`}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()?`
|
|
342
|
+
${a}`:""}`}default:{let o=e?`${M("cyan",nt)} `:"",a=e?M("cyan",Bn):"";return`${n}${o}${i}
|
|
339
343
|
${a}
|
|
340
|
-
`}}}}).prompt();import{existsSync as
|
|
341
|
-
`)}var
|
|
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
|
|
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)=>
|
|
344
|
-
`),h=`${A("view")}.${
|
|
345
|
-
`)}let s=Math.max(...n.map((o)=>_o(o).length));return["Usage: ttheme <command>","",
|
|
346
|
-
`)}import{readFileSync as
|
|
344
|
+
`}}}}).prompt();import{existsSync as bu,readFileSync as sk,rmSync as kh}from"node:fs";import{homedir as qe}from"node:os";import{join as Fs}from"node:path";var W0=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 gi(t){let e=te.length;return te[(t%e+e)%e]}function _c(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 _N}from"node:crypto";import{existsSync as Kc,readFileSync as Td,rmSync as z0}from"node:fs";import{homedir as D0}from"node:os";import{join as bi}from"node:path";function Mr(t){return[`# ${t.name} — ${t.group}${t.native?` (${t.native})`:""}`,`# ANSI: ${t.ansiSource}`]}function _n(t,e){return[`[${t}]`,`Color=${rt(e).join(",")}`,""]}function Md(t,e,n=["Wallpaper="]){let r=(i)=>Gt(i,t.background,0.5);return[..._n("Background",t.background),..._n("BackgroundFaint",t.background),..._n("BackgroundIntense",t.background),...t.ansi.slice(0,8).flatMap((i,s)=>[..._n(`Color${s}`,i),..._n(`Color${s}Faint`,r(i)),..._n(`Color${s}Intense`,t.ansi[s+8])]),..._n("Foreground",t.foreground),..._n("ForegroundFaint",r(t.foreground)),..._n("ForegroundIntense",t.foreground),"[General]","Blur=false","ColorRandomization=false",`Description=${e}`,"Opacity=1",...n,""]}var K0={left:"0",top:"0",center:"0.5",right:"1",bottom:"1"};function PN(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=${K0[n]??"0.5"},${K0[e]??"0.5"}`,`WallpaperOpacity=${t.opacity}`]}function Od(t,e){return[...Mr(t),"",...Md(t,`ttheme · ${t.name}`,PN(e))].join(`
|
|
345
|
+
`)}var Id={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:Od(t)}]}};import{openSync as AN,writeSync as HN}from"node:fs";import{ReadStream as FN}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 Bo(t,e){return`\x1B]${Or[t]};${e}\x1B\\`}function Un(t,e){return[t.background,t.foreground,t.cursor,t.selection,...t.ansi].map((n,r)=>e&&!e.includes(r)?"":Bo(r,n)).join("")}function CN(t){return`\x1B]${t.startsWith("4;")?`104;${t.slice(2)}`:`1${t}`}\x1B\\`}function LN(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 jN(t){return`#${t.slice(t.indexOf(":")+1).split("/").slice(0,3).map((n)=>n.slice(0,2).padStart(2,"0")).join("")}`}function Uc(t,e=[...t.keys()],n=!1){return e.map((r)=>{let i=t.get(r);return i?`\x1B]${r};${n?jN(i):i}\x1B\\`:CN(r)}).join("")}function Wc(t,e){return`\x1B]50;ColorScheme=${t};UseCustomCursorColor=true;customCursorColor=${e}\x07`}function GN(t=Or){return`${t.map((e)=>`\x1B]${e};?\x1B\\`).join("")}\x1B[5n`}function BN(t){return t.includes("\x1B[0n")}async function xd(t=Or){let e,n;try{e=AN("/dev/tty","r+"),n=new FN(e),n.setRawMode(!0)}catch{return new Map}try{HN(e,GN(t));let r="";return await new Promise((i)=>{let s=setTimeout(i,120);n.on("data",(o)=>{if(r+=o.toString(),BN(r))clearTimeout(s),i()})}),LN(r)}finally{n.setRawMode(!1),n.destroy()}}function Pd(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 Wt(t){if(Pd(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 ue={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 Nd(t,e,n){let r="";for(let i of t.split(`
|
|
346
|
+
`)){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??bi(D0(),".config"),n=bi(e,"konsolerc"),r=Kc(n)?Nd(Td(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=V0(t).map((u)=>bi(u,s)).find((u)=>Kc(u));if(!o)return!1;let a=Td(o,"utf8"),c=Nd(a,"Interaction Options","AllowEscapedLinks");if(c!==void 0)return c==="true";r=Nd(a,"General","Parent")}return!1}function q0(t){let e=Wt(t);return e==="konsole"?UN(t):ue[e].links}function zc(t,e){let n=Wt(t),r=ue[n];return r.pictures&&!t.TMUX&&(!r.views||e.includes(n))}function Dc(t){return ue[Wt(t)].bands}function qc(t){return ue[Wt(t)].files}function Yc(t){return ue[Wt(t)].layers}function Y0(t){return ue[Wt(t)].moves}function J0(t){return ue[Wt(t)].wipes===!0}function wi(t){return ue[Wt(t)].views===!0}function $i(t){return`\x1B]1337;SetUserVar=ttheme_view=${Buffer.from(t).toString("base64")}\x07`}var ki="\x1B[H\x1B[K\x1B[2H\x1B[J\x1B[H",Ad=120,Rd=4,WN=40;function KN(t){let e=t.TTHEME_ITERM_SHOWN;return t.TTHEME_ITERM_SWITCH==="1"&&t.TTHEME_ITERM_DYED==="0"&&e?`ttheme · ${e}`:void 0}function zN(t,e){let n=ue.iterm2.repaint??[],r=Or.map((c,u)=>u).filter((c)=>!n.includes(c)),i=new Set(n),s=KN(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+=Rd){let l=r.slice(u,u+Rd),f=setTimeout(()=>{for(let d of l)i.add(d);e(Un(c,l))},Ad+u/Rd*WN);f.unref?.(),o.push(f)}return Un(c,n)},wear:(c)=>Un(c),saved:()=>xd(),restore(c){a();let u=Or.filter((l,f)=>i.has(f));return s?`\x1B[?2026h${Uc(new Map,u)}\x1B]1337;SetProfile=${s}\x07\x1B[?2026l`:Uc(c,u)},stop:a}}var DN=3,qN=/^(Wallpaper|FillStyle|Anchor|WallpaperOpacity|WallpaperFlipType)=/;function V0(t){return[t.XDG_DATA_HOME??bi(D0(),".local","share"),...(t.XDG_DATA_DIRS||"/usr/local/share:/usr/share").split(":")].map((e)=>bi(e,"konsole"))}function YN(t,e){let n=/(?:^|;)ColorScheme=([^;]+)/.exec(e)?.[1],r=n&&t.map((c)=>bi(c,`${n}.colorscheme`)).find((c)=>Kc(c));if(!r)return["Wallpaper="];let i=Td(r,"utf8").split(`
|
|
347
|
+
`),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)=>qN.test(c));return a.length>0?a:["Wallpaper="]}function JN(t,e,n){let r=V0(t),i=r[0],s=YN(r,e),o=[],a=(u,l,f)=>{let d=Md(l,`ttheme · ${u}`,s).join(`
|
|
348
|
+
`),h=`${A("view")}.${_N("sha1").update(d).digest("hex").slice(0,10)}`,p=bi(i,`${h}.colorscheme`);if(!Kc(p))H(p,d);if(!o.includes(p))o.push(p);for(let $ of o.splice(0,Math.max(0,o.length-DN)))z0($,{force:!0});return Wc(h,f)},c=()=>{for(let u of o.splice(0))z0(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")?Wc(A(u.name),u.cursor):void 0,saved:async()=>new Map,restore:()=>{return c(),`\x1B]50;${e}\x07`},stop:c}}function Z0(t,e,n=(r)=>{process.stdout.write(r)}){let r=Wt(t),i=ue[r];if(!e||Ft(t)||t.TMUX||!i.paints)return;if(r==="iterm2")return zN(t,n);if(r==="konsole"&&t.TTHEME_KONSOLE_LOOK)return JN(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)=>Un(a,s),wear:(a,c)=>!i.schemes?Un(a):c.includes(r)?Wc(A(a.name),a.cursor):void 0,saved:()=>xd(o),restore:(a)=>Uc(a,o,i.hex===!0)}}var Dt=["ghostty","kitty","alacritty","wezterm","iterm2","windows-terminal","warp","konsole","terminal-app"];var VN=[{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"}],Uo=[{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 Hd(t,e=Math.max(...t.map(([n])=>n.length))){return t.map(([n,r])=>` ${n.padEnd(e)} ${r}`)}var ZN=[["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=Uo.filter((o)=>!o.hidden&&!(e&&o.section==="setup")),r=VN.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",...Hd(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(`
|
|
349
|
+
`)}let s=Math.max(...n.map((o)=>_o(o).length));return["Usage: ttheme <command>","",xt.description,...r.flatMap(({section:o,title:a})=>["",a,...Hd(n.filter((c)=>c.section===o).map((c)=>[_o(c),c.about]),s)]),"","Examples",...Hd(ZN),"",...i].join(`
|
|
350
|
+
`)}import{readFileSync as QN}from"node:fs";import{join as XN}from"node:path";var Fd="# ttheme begin",Cd="# ttheme end",Is=/# ttheme begin\n[\s\S]*?# ttheme end\n?/;function Ir(t,e){let n=`${Fd}
|
|
347
351
|
${e}
|
|
348
|
-
${
|
|
349
|
-
`;if(
|
|
352
|
+
${Cd}
|
|
353
|
+
`;if(Is.test(t))return t.replace(Is,n);if(t==="")return n;return`${t.replace(/\n*$/,`
|
|
350
354
|
`)}
|
|
351
|
-
${n}`}function
|
|
352
|
-
`)}function
|
|
355
|
+
${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*$/,`
|
|
356
|
+
`)}function Nr(t,e){let n=t.replace(Is,"");return new RegExp(String.raw`^[ \t]*${e}(?:[ \t]*=|[ \t]+\S)`,"m").test(n)}function Q0(t){return`source ${t}/ttheme.zsh`}var tR="# ttheme settings — uncomment a line to change it; exported variables win over this file",xs={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 Ko(t){return xs[t]?.default}function Ld(t,e){let n=`: \${${t}:=${e}}`;return Ko(t)===e?`# ${n}`:n}function X0(t){return new RegExp(String.raw`^#? ?: \$\{${t}[^\n]*$`,"m")}function eR(t,e){if(X0(e).test(t))return t;let n=xs[e];return`${t.replace(/\n*$/,`
|
|
353
357
|
`)}
|
|
354
358
|
${n.doc}
|
|
355
|
-
${
|
|
356
|
-
`}var
|
|
357
|
-
${
|
|
359
|
+
${Ld(e,n.default)}
|
|
360
|
+
`}var Jc=Object.keys(xs),nR=8;function Vc(t,e){let n="";try{n=QN(XN(t,"ttheme","config.zsh"),"utf8")}catch{}return(new RegExp(String.raw`^: \$\{${e}:=([^}\n]*)\}`,"m").exec(n)?.[1]??xs[e].default).replace(/^(["'])(.*)\1$/,"$2")}function Rr(t){let e=Number(Vc(t,"TTHEME_BG_BLUR"));return Number.isFinite(e)?Math.min(nR,Math.max(0,e)):0}function Zc(t){return Vc(t,"TTHEME_BG_COLORS")==="original"?"original":"tone"}function jd(){let t=Object.entries(xs).map(([e,n])=>`${n.doc}
|
|
361
|
+
${Ld(e,n.default)}`);return`${[tR,...t].join(`
|
|
358
362
|
|
|
359
363
|
`)}
|
|
360
|
-
`}function
|
|
364
|
+
`}function Qc(t,e,n){let r=Ld(e,n),i=X0(e);if(i.test(t))return t.replace(i,r);return`${t.replace(/\n*$/,`
|
|
361
365
|
`)}
|
|
362
366
|
${r}
|
|
363
|
-
`}function
|
|
364
|
-
`)}function
|
|
365
|
-
`)}var
|
|
366
|
-
`).map((e)=>e.split(/[ =]/)[0]))].join(", ")}function hn(t,e){let n=
|
|
367
|
-
`)}var
|
|
368
|
-
`);return[{path:`alacritty/themes/${A(t.name)}.toml`,content:e}]}};var
|
|
369
|
-
`);return[{path:`ghostty/themes/${A(t.name)}`,content:e}]}};function
|
|
370
|
-
`}function
|
|
371
|
-
`)}var
|
|
372
|
-
`);return[{path:`iterm2/${A(t.name)}.itermcolors`,content:e}]}};var
|
|
373
|
-
`);return[{path:`kitty/themes/${A(t.name)}.conf`,content:e}]}};function
|
|
374
|
-
`)}function
|
|
375
|
-
`}]}};var
|
|
376
|
-
${n.toLowerCase()}`,"utf8"))r=Math.imul(r^i,16777619)>>>0;return`${A(t)}.${r.toString(16).padStart(8,"0")}.png`}function
|
|
377
|
-
`)}var
|
|
378
|
-
`);return[{path:`wezterm/colors/${A(t.name)}.toml`,content:e}]}},
|
|
379
|
-
`)}var
|
|
380
|
-
`}var
|
|
381
|
-
`}]},emitShared(t){return[{path:"windows-terminal/ttheme.json",content:
|
|
382
|
-
import = ["${t}"]`:""}function
|
|
367
|
+
`}function t$(t){if(t==="")return jd();return Object.keys(xs).reduce(eR,t)}var Xc=/["$`\\]/;function rR(t){return t.replace(/_\([^)]*\)$/,"").replaceAll("_"," ")}function Gd(t,e,n=[],r={}){for(let l of t)for(let f of[l.name,l.group,l.native??"",...l.nativeNames??[],l.ansiSource])if(Xc.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=Uo.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=(${Ln.map((l)=>l.name).join(" ")})`,`typeset -ga TTHEME_HUB_TITLES=(${Ln.map((l)=>l.title).join(" ")})`,`typeset -gi TTHEME_HUB_CLOSED=${Nc} TTHEME_HUB_SWITCH=${Rc}`,"","# the settings config.zsh holds, handed to the CLI on every call",`typeset -ga TTHEME_SETTINGS=(${Jc.join(" ")})`,"","# seed for `ttheme config` when no config.zsh exists yet",`typeset -g TTHEME_CONFIG_TEMPLATE='${jd().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(ci(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&&!Xc.test(l.booru)).map((l)=>s(l,rR(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(ue).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,cc(l).join(" "))),")","","# where each palette's 16 ANSI colors came from","typeset -gA TTHEME_SRC=(",...t.map((l)=>s(l,l.ansiSource)),")",""].join(`
|
|
368
|
+
`)}function e$(t){let e=Object.entries(t).flatMap(([r,i])=>{let s=i.filter((o)=>!Xc.test(o)&&!o.includes("|"));return s.length>0&&!Xc.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(`
|
|
369
|
+
`)}var Bd={id:"shell",emitShared(t){return[{path:"shell/palettes.zsh",content:Gd(t.map(cn))}]}};import{execFileSync as iR}from"node:child_process";import{existsSync as n$,readdirSync as sR,readFileSync as oR}from"node:fs";import{join as r$}from"node:path";function st(t){return n$(t)?oR(t,"utf8"):""}function Rt(t,e){return t.startsWith(`${e}/`)?`~${t.slice(e.length)}`:t}function tu(t){return[...new Set(t.split(`
|
|
370
|
+
`).map((e)=>e.split(/[ =]/)[0]))].join(", ")}function hn(t,e){let n=st(t),r=e(n);return r===n?[]:[{file:t,content:r}]}function zo(t){return process.env.XDG_DATA_HOME??r$(t,".local","share")}function Ns(t){return n$(t)?sR(t).flatMap((e)=>e.startsWith(A(""))?[r$(t,e)]:[]):[]}function _d(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 iR(t,[...e],{encoding:"utf8",stdio:["ignore","pipe","ignore"],timeout:5000}).trim()}catch{return}}}}import{existsSync as g$}from"node:fs";import{join as nu}from"node:path";var aR=["black","red","green","yellow","blue","magenta","cyan","white"];function i$(t,e){return[t,...aR.map((n,r)=>`${n} = '${e[r]}'`),""].join(`
|
|
371
|
+
`)}var Ud={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}'`,"",i$("[colors.normal]",t.ansi.slice(0,8)),i$("[colors.bright]",t.ansi.slice(8,16))].join(`
|
|
372
|
+
`);return[{path:`alacritty/themes/${A(t.name)}.toml`,content:e}]}};var Wd={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(`
|
|
373
|
+
`);return[{path:`ghostty/themes/${A(t.name)}`,content:e}]}};function Tr(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 o$(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 s$(t){return t?{"Background Image Location":t.image,"Background Image Mode":t.cover?2:3,Blend:t.opacity}:{"Background Image Location":""}}function a$(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,...s$(e.get(c.name)),...o$(c)}),o={Name:"ttheme · default",Guid:A("default"),"Dynamic Profile Parent GUID":r,...s$(void 0)},a=[...n?[s(n,"default")]:i&&r?[o]:[],...t.map((c)=>s(c,c.name))];return`${JSON.stringify({Profiles:a},null,2)}
|
|
374
|
+
`}function cR(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(`
|
|
375
|
+
`)}var Kd={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(o$(t)).map(([n,r])=>cR(n,r)),"</dict>","</plist>",""].join(`
|
|
376
|
+
`);return[{path:`iterm2/${A(t.name)}.itermcolors`,content:e}]}};var zd={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(`
|
|
377
|
+
`);return[{path:`kitty/themes/${A(t.name)}.conf`,content:e}]}};function c$(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(`
|
|
378
|
+
`)}function uR(t){let[e]=t;if(!e)throw Error("manifest needs at least one theme");return{...uc(),palettes:t.map(cn)}}var Dd={id:"meta",emitShared(t){return[{path:"manifest.json",content:`${JSON.stringify(uR(t),null,2)}
|
|
379
|
+
`}]}};var qd={id:"terminal-app",limits:"profiles go into its own settings at init, so the archive carries none"};import{createHash as lR}from"node:crypto";var fR=["black","red","green","yellow","blue","magenta","cyan","white"];function u$(t,e){return[` ${t}:`,...fR.map((n,r)=>` ${n}: "${e[r]}"`)]}function dR(t,e,n){let r=lR("sha1");for(let i of e)r.update(i);return`${A(t)}.${r.digest("hex").slice(0,8)}.${n}`}function l$(t,e,n){let r=2166136261;for(let i of Buffer.from(`${e}
|
|
380
|
+
${n.toLowerCase()}`,"utf8"))r=Math.imul(r^i,16777619)>>>0;return`${A(t)}.${r.toString(16).padStart(8,"0")}.png`}function Do(t,e){return e?dR(t,[e.image,String(f$(e))],"yaml"):`${A(t)}.yaml`}function f$(t){return Math.max(0,Math.min(100,Math.round(t.opacity*100)))}function qo(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: ${f$(e)}`]:[],"terminal_colors:",...u$("normal",t.ansi.slice(0,8)),...u$("bright",t.ansi.slice(8,16)),""].join(`
|
|
381
|
+
`)}var Yd={id:"warp",limits:"no selection color, and Warp paints one theme app-wide",emit(t){return[{path:`warp/themes/${Do(t.name)}`,content:qo(t)}]}};var d$=(t)=>`[${t.map((e)=>`"${e}"`).join(", ")}]`,Jd={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 = ${d$(t.ansi.slice(0,8))}`,`brights = ${d$(t.ansi.slice(8,16))}`,""].join(`
|
|
382
|
+
`);return[{path:`wezterm/colors/${A(t.name)}.toml`,content:e}]}},Rs=(t)=>JSON.stringify(t);function h$(t){return["-- Generated by ttheme — rewritten on every add, remove and default; do not edit.","local wezterm = require 'wezterm'","",`local MODULE = ${Rs(t.path)}`,`local COLORS = ${Rs(t.colors)}`,`local BACKGROUNDS = ${Rs(t.backgrounds)}`,`local STARTUP = ${t.startup?Rs(A(t.startup)):"nil"}`,"local PALETTES = {",...t.palettes.map((e)=>` [${Rs(e.name)}] = ${Rs(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(`
|
|
383
|
+
`)}var m$=["black","red","green","yellow","blue","purple","cyan","white"];function p$(t){return{name:A(t.name),background:t.background,foreground:t.foreground,cursorColor:t.cursor,selectionBackground:t.selectionBackground,...Object.fromEntries(m$.map((e,n)=>[e,t.ansi[n]])),...Object.fromEntries(m$.map((e,n)=>[`bright${e[0]?.toUpperCase()}${e.slice(1)}`,t.ansi[n+8]]))}}function Vd(t,e,n){let r={...e&&n?{profiles:[{updates:e,colorScheme:A(n)}]}:{},schemes:t.map(p$)};return`${JSON.stringify(r,null,2)}
|
|
384
|
+
`}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(p$(t),null,2)}
|
|
385
|
+
`}]},emitShared(t){return[{path:"windows-terminal/ttheme.json",content:Vd(t)}]}};function hR(t){let e=t.replace(Is,"");return/^[ \t]*\[colors[\].]/m.test(e)||/^[ \t]*colors[ \t]*[.=]/m.test(e)}var mR=/^[ \t]*\[general\][ \t]*(?:#.*)?$/m,b$=/^[ \t]*\[/m,w$=/^[ \t]*import[ \t]*=/m,pR=/^[ \t]*general[ \t]*[.=]/m;function gR(t){return t?`[general]
|
|
386
|
+
import = ["${t}"]`:""}function Qd(t,e){let n=t.replace(Is,""),r=mR.exec(n);if(!r){let c=n.search(b$),u=c<0?n:n.slice(0,c);if(pR.test(n)||w$.test(u))return;return Ir(t,gR(e))}let i=r.index+r[0].length,s=n.slice(i),o=s.search(b$);if(w$.test(o<0?s:s.slice(0,o)))return;let a=e?`import = ["${e}"]
|
|
383
387
|
`:"";return`${n.slice(0,i)}
|
|
384
|
-
${
|
|
385
|
-
${a}${
|
|
386
|
-
`)}function
|
|
387
|
-
`)}function
|
|
388
|
-
`),i=
|
|
389
|
-
`),r=
|
|
388
|
+
${Fd}
|
|
389
|
+
${a}${Cd}${s}`}function eu(t){return nu(t,"alacritty","alacritty.toml")}function $$(t){return nu(t.configHome,"alacritty","themes")}function bR(t,e){return e?nu(t,"alacritty","themes",`${A(e)}.toml`):void 0}var Xd={id:"alacritty",name:"Alacritty",emitter:Ud,shelf:{from:"themes",dir:$$},offered:()=>!0,present:(t)=>g$(nu(t.configHome,"alacritty")),sync(t,e){e.themes(Xd);let n=eu(t.configHome),r=Qd(st(n),bR(t.configHome,t.startup));if(r!==void 0)e.wire(n,r)},plan(t){let e=eu(t.configHome);return Qd(st(e),void 0)!==void 0?[`Edit ${Rt(e,t.home)} — a ttheme block: general.import`]:[]},notes(t){let e=eu(t.configHome),n=st(e);return[...g$(e)&&Qd(n,void 0)===void 0?[`${e} already imports files under [general] — ttheme left it alone; add ${$$(t)}/<palette>.toml to that import list yourself`]:[],...hR(n)?[`${Rt(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(eu(t.configHome),xr),removals:[],touches:[]})};import{existsSync as wR}from"node:fs";import{join as iu}from"node:path";function $R(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(`
|
|
390
|
+
`)}function ru(t){return iu(t,"ghostty","config")}function k$(t,e,n){return $R(iu(t.configHome,"ttheme"),e,n)}var th={id:"ghostty",name:"Ghostty",emitter:Wd,shelf:{from:"themes",dir:(t)=>iu(t.configHome,"ghostty","themes")},offered:()=>!0,present:(t)=>wR(iu(t.configHome,"ghostty")),sync(t,e){e.themes(th);let n=ru(t.configHome),r=st(n);e.wire(n,Ir(r,k$(t,t.startup,r)))},plan(t){let e=ru(t.configHome);return[`Edit ${Rt(e,t.home)} — a ttheme block: ${tu(k$(t,t.startup,st(e)))}`]},notes(t){let e=ru(t.configHome);return Nr(st(e),"command")?[`${Rt(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(ru(t.configHome),xr),removals:[],touches:[]})};import{existsSync as y$}from"node:fs";import{join as E$}from"node:path";var eh="ttheme-default";function Ts(t){return E$(t,"Library","Application Support","iTerm2","DynamicProfiles","ttheme.json")}function M$(t){return t.itermBase!==void 0&&t.palettes.length>0}function v$(t){let e=D(t.configHome),n=new Map;for(let i of t.themes){let s=ke(e,i.name,t.home);if(s)n.set(i.name,s)}let r=new Set(Et(t.entries).map((i)=>i.name));return a$(t.themes.filter((i)=>r.has(i.name)),n,t.themes.find((i)=>i.name===t.startup),t.state.itermBase,M$(t.state))}function nh(t){return t.env.TTHEME_ITERM_SUITE??"com.googlecode.iterm2"}function S$(t){return t.run("defaults",["read",nh(t),"Default Bookmark Guid"])||void 0}function kR(t){return t.run("defaults",["read",nh(t),"PreventEscapeSequenceFromChangingProfile"])==="0"}var yR={key:"itermBase",profile:()=>"ttheme · default",base(t){let e=S$(t.host);return e&&!e.startsWith("ttheme-")?{...t.state,itermBase:e}:t.state},point(t,e){let n=S$(t.host),r=t.startup?e||n===eh?eh:void 0:n===eh&&!M$(t.state)?t.state.itermBase:void 0;if(!r||r===n)return;return t.host.run("defaults",["write",nh(t.host),"Default Bookmark Guid","-string",r]),{restart:Boolean(t.host.run("pgrep",["-x","iTerm2"]))}}},O$={id:"iterm2",name:"iTerm2",emitter:Kd,bakes:!0,offered:(t,e)=>e.platform==="darwin",present:(t)=>y$(E$(t.home,"Library","Application Support","iTerm2")),sync(t,e){e.write(Ts(t.home),v$(t))},pictures(t,e){e.write(Ts(t.home),v$(t))},layer:(t,e)=>({TTHEME_ITERM_SWITCH:kR(e)?"1":"",TTHEME_ITERM_PROFILES:Ts(t.home)}),plan:(t)=>[`Write ${Rt(Ts(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:y$(Ts(t.home))?[Ts(t.home)]:[],touches:[]}),defaults:yR};import{existsSync as vR}from"node:fs";import{join as ou}from"node:path";function I$(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(`
|
|
391
|
+
`)}function su(t){return ou(t,"kitty","kitty.conf")}function rh(t){return ou(t,"ttheme","kitty.py")}function x$(t){return ou(t.configHome,"kitty","themes")}var ih={id:"kitty",name:"kitty",emitter:zd,shelf:{from:"themes",dir:x$},offered:()=>!0,present:(t)=>vR(ou(t.configHome,"kitty")),sync(t,e){e.themes(ih),e.write(rh(t.configHome),c$({themes:x$(t),backgrounds:D(t.configHome)}));let n=su(t.configHome),r=st(n);e.wire(n,Ir(r,I$(t.startup,rh(t.configHome),r)))},plan(t){let e=su(t.configHome),n=I$(t.startup,rh(t.configHome),st(e));return[`Edit ${Rt(e,t.home)} — a ttheme block: ${tu(n)}`]},notes(t){let e=st(su(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(su(t.configHome),xr),removals:[],touches:[]})};import{createHash as SR}from"node:crypto";import{existsSync as au}from"node:fs";import{basename as R$,isAbsolute as ER,join as yi}from"node:path";function Ps(t){return yi(zo(t),"konsole")}function Yo(t){return yi(t,"konsolerc")}function T$(t){return`${A(t)}.profile`}function Jo(t){return`ttheme · ${t}`}function P$(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 sh(t){return new RegExp(String.raw`^\s*${t}\s*=`)}function Pr(t,e,n){let r=t.split(`
|
|
392
|
+
`),i=P$(r,e);return(i&&r.slice(i[0]+1,i[1]).find((o)=>sh(n).test(o)))?.replace(sh(n),"").trim()}function A$(t,e){let n=t.split(`
|
|
393
|
+
`),r=P$(n,"Desktop Entry"),i=e===void 0?[]:[`DefaultProfile=${e}`];if(!r)return e===void 0?t:`${t===""?"":t.replace(/\n*$/,`
|
|
390
394
|
|
|
391
395
|
`)}[Desktop Entry]
|
|
392
396
|
${i[0]}
|
|
393
|
-
`;let s=n.findIndex((a,c)=>c>r[0]&&c<r[1]&&
|
|
394
|
-
`)}function
|
|
395
|
-
`)}var
|
|
397
|
+
`;let s=n.findIndex((a,c)=>c>r[0]&&c<r[1]&&sh("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(`
|
|
398
|
+
`)}function MR(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 H$(t,e){let n=e.endsWith(".profile")?e:`${e}.profile`;if(ER(n))return au(n)?n:void 0;let r=n.includes("/")?n:yi("konsole",n);return[zo(t.home),...(process.env.XDG_DATA_DIRS||"/usr/local/share:/usr/share").split(":")].map((s)=>yi(s,r)).find((s)=>au(s))}function F$(t,e,n=0){let r=e&&e!=="FALLBACK/"&&n<8?H$(t,e):void 0;if(!r)return{};let i=st(r),s=F$(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 OR(t,e){let n=F$(t,e),r=n.use==="true"?MR(n.cursor):void 0;return[`ColorScheme=${n.scheme??"Breeze"}`,`UseCustomCursorColor=${r?"true":"false"}`,...r?[`customCursorColor=${r}`]:[]].join(";")}function IR(t,e){return["[Appearance]",`ColorScheme=${A(t.name)}`,"","[Cursor Options]",`CustomCursorColor=${rt(t.cursor).join(",")}`,`CustomCursorTextColor=${rt(t.background).join(",")}`,"UseCustomCursorColor=true","","[General]",`Name=${Jo(t.name)}`,`Parent=${e}`,""].join(`
|
|
399
|
+
`)}var C$=/^ttheme-(.+)\.([0-9a-f]{8})\.colorscheme$/;function xR(t){return SR("sha1").update(t).digest("hex").slice(0,8)}function N$(t,e){let n=Ps(t.home),r=D(t.configHome),i=new Set;for(let s of t.themes){let o=Od(s,ke(r,s.name,t.home)),a=yi(n,`${A(s.name)}.${xR(o)}.colorscheme`);i.add(a),e.write(yi(n,`${A(s.name)}.colorscheme`),o),e.write(a,o)}for(let s of Ns(n))if(C$.test(R$(s))&&!i.has(s))e.remove(s)}function NR(t){return Ns(t).flatMap((e)=>{let[,n,r]=C$.exec(R$(e))??[];return n&&r?[`${n} ${r}`]:[]}).sort().join(" ")}function RR(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 oh=["--session","--print-reply","--reply-timeout=2000"];function TR(t){return[...(t.run("dbus-send",[...oh,"--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",[...oh,`--dest=${n}`,"/Windows","org.freedesktop.DBus.Introspectable.Introspect"])?.match(/<node name="(\d+)"/)?.[1];return i?[{service:n,window:`/Windows/${i}`}]:[]})}function PR(t,{service:e,window:n},r){let i=(s,...o)=>t.run("dbus-send",[...oh,`--dest=${e}`,n,`org.kde.konsole.Window.${s}`,...o]);return i("setDefaultProfile",`string:${r}`),i("defaultProfile")?.includes(`string "${r}"`)===!0}function AR(t,e){let n=H$(t,e);return n?Pr(st(n),"General","Name"):void 0}function HR(t){return Pr(st(Yo(t)),"Desktop Entry","DefaultProfile")}var FR={key:"konsoleBase",profile:Jo,base(t){let e=HR(t.configHome);return e&&!e.startsWith(A(""))?{...t.state,konsoleBase:e}:t.state},point(t,e){let n=Yo(t.configHome),r=st(n),i=Pr(r,"Desktop Entry","DefaultProfile"),s=i?.startsWith(A(""))===!0,o=t.startup?e||s?T$(t.startup):void 0:s?t.state.konsoleBase??"":void 0;if(o===void 0||o===(i??"")&&!e)return;if(o!==(i??""))tn(n,A$(r,o||void 0));let a=t.startup?Jo(t.startup):o?AR(t,o):void 0,c=TR(t.host),u=a!==void 0&&c.every((l)=>PR(t.host,l,a));return{restart:c.length>0&&!u}}},L$={id:"konsole",name:"Konsole",emitter:Id,shelf:{from:"",dir:(t)=>Ps(t.home)},offered:(t,e)=>e.platform!=="darwin"&&e.platform!=="win32",present:(t)=>au(Ps(t.home))||au(Yo(t.configHome)),sync(t,e){N$(t,e);let n=Ps(t.home),r=t.state.konsoleBase??"FALLBACK/",i=new Set;for(let s of RR(t)){let o=yi(n,T$(s.name));i.add(o),e.write(o,IR(s,r))}for(let s of Ns(n))if(s.endsWith(".profile")&&!i.has(s))e.remove(s)},pictures:N$,layer:(t)=>({TTHEME_KONSOLE_BASE:OR(t,t.state.konsoleBase),TTHEME_KONSOLE_SCHEMES:NR(Ps(t.home))}),plan(t){return[`Write ${Rt(Ps(t.home),t.home)}/${A("*")}.profile — a "ttheme · <palette>" profile per palette, on top of your own`,...t.startup?[`Edit ${Rt(Yo(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 "${Jo(t.startup)}"`:`Konsole default "${Jo(t.startup)}", which follows \`ttheme default\``);return n},unwire(t,e){let n=Yo(t.configHome),r=st(n);return{edits:Pr(r,"Desktop Entry","DefaultProfile")?.startsWith(A(""))?[{file:n,content:A$(r,e?.konsoleBase)}]:[],removals:[],touches:[]}},defaults:FR};import{createHash as CR}from"node:crypto";import{existsSync as B$,readdirSync as LR,readFileSync as jR,rmSync as GR}from"node:fs";import{join as vi}from"node:path";var _$="com.apple.Terminal",Vo="ttheme · ";function De(t){return`${Vo}${t}`}function cu(t){return vi(t,"ttheme","terminal-app.js")}function As(t){return vi(t,"ttheme","terminal-app")}function BR(t,e){return vi(t.XDG_STATE_HOME??vi(e,".local","state"),"ttheme","terminal-app.window")}var _R=`ObjC.import('AppKit')
|
|
396
400
|
|
|
397
|
-
const OURS = '${
|
|
401
|
+
const OURS = '${Vo}'
|
|
398
402
|
const IMAGE = 'BackgroundImageBookmark'
|
|
399
403
|
const KEYS = ['BackgroundColor', 'TextColor', 'CursorColor', 'SelectionColor', 'ANSIBlackColor', 'ANSIRedColor',
|
|
400
404
|
'ANSIGreenColor', 'ANSIYellowColor', 'ANSIBlueColor', 'ANSIMagentaColor', 'ANSICyanColor', 'ANSIWhiteColor',
|
|
@@ -578,30 +582,32 @@ function run(argv) {
|
|
|
578
582
|
}
|
|
579
583
|
return changed ? 'wrote' : 'same'
|
|
580
584
|
}
|
|
581
|
-
`;function
|
|
582
|
-
`),n=
|
|
583
|
-
`),r=
|
|
585
|
+
`;function ah(t,e,n){return t.run("osascript",["-l","JavaScript",cu(e),...n])}function ch(t){return t.run("defaults",["read",_$,"Default Window Settings"])||void 0}function UR(t){return[t.background,t.foreground,t.cursor,t.selectionBackground,...t.ansi]}function U$(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 uh(t,e){let n=ch(e);return t.terminalBase??(n&&!n.startsWith(Vo)?n:"Basic")}function lh(t,e){let n=/^(\d+)x(\d+)$/.exec(st(BR(t,e)).trim());return n?{width:Number(n[1])*2,height:Number(n[2])*2}:void 0}function fh(t,e,n,r){let i=r?.width??t,s=r?.height??e,o=Bt.indexOf(n.position)+1||5,a=bs(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 W$=/^ttheme-(.+)\.([0-9a-z-]+)\.png$/;function uu(t){let e=new Map;for(let n of B$(t)?LR(t):[]){let[,r]=W$.exec(n)??[];if(r)e.set(r,[...e.get(r)??[],n])}return e}function WR(t){return[...uu(t)].map(([e,n])=>`${e} ${(W$.exec(n[0])??[])[2]}`).sort().join(" ")}function j$(t){let e=As(t.configHome),n=uu(e),r=lh(t.host.env,t.home),i=new Map,s=(o)=>{for(let a of o)GR(vi(e,a),{force:!0})};for(let o of U$(t)){let a=n.get(Qt(o.name))??[];n.delete(Qt(o.name));let c=ke(D(t.configHome),o.name,t.home),u=c&&B$(c.image)?new Uint8Array(jR(c.image)):void 0,l=u&&nn(u);if(!c||!u||!l||c.opacity<=0){s(a);continue}let f=fh(l.width,l.height,c,r),d=CR("sha1").update(u).update(JSON.stringify([o.background.toLowerCase(),c.opacity,f])).digest("hex").slice(0,8),h=`${A(o.name)}.${d}.png`,p=vi(e,h);if(!a.includes(h)){let $;try{$=sr(ir(Ht(u),o.background,c.opacity,f))}catch{s(a);continue}let[g,...b]=a;if(g)Xr(vi(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 G$(t,e){ah(t.host,t.configHome,["write",uh(t.state,t.host),...U$(t).flatMap((n)=>[De(n.name),...UR(n),e.get(n.name)??"-"])])}var KR={key:"terminalBase",profile:De,base(t){let e=ch(t.host);return e&&!e.startsWith(Vo)?{...t.state,terminalBase:e}:t.state},point(t,e){let n=ch(t.host),r=n?.startsWith(Vo)===!0;if(t.state.palettes.length===0)ah(t.host,t.configHome,["drop"]);let i=t.startup?e||r?De(t.startup):void 0:r?uh(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",_$,o,"-string",i]);return{restart:Boolean(t.host.run("pgrep",["-x","Terminal"]))&&ah(t.host,t.configHome,["loaded",i])!=="1"}}},K$={id:"terminal-app",name:"Terminal.app",emitter:qd,offered:(t,e)=>e.platform==="darwin",present:()=>!1,sync(t,e){e.write(cu(t.configHome),_R),G$(t,j$(t))},pictures(t){G$(t,j$(t))},layer:(t,e)=>({TTHEME_TERMINAL_APP_BASE:uh(t.state,e),TTHEME_TERMINAL_PICTURES:WR(As(t.configHome))}),plan:(t)=>[`Add a "${De("<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 "${De(t.startup)}" Terminal.app's default — \`ttheme off\` puts yours back`]:[]],notes:()=>[],next(t,e){let n=[`Terminal.app A "${De("<palette>")}" profile per palette in Settings › Profiles`];if(t.startup)n.push(e?.restart?`Restart Terminal New windows and tabs open on "${De(t.startup)}"`:`Terminal default "${De(t.startup)}", which follows \`ttheme default\``);return n},unwire:()=>({edits:[],removals:[],touches:[]}),defaults:KR};import{spawn as zR}from"node:child_process";import{existsSync as Ar,mkdirSync as DR,readdirSync as dh,readFileSync as hh,realpathSync as qR,rmSync as YR,writeFileSync as JR}from"node:fs";import{dirname as Y$,join as Se}from"node:path";function Si(t){return process.platform==="darwin"?Se(t,".warp","themes"):Se(zo(t),"warp-terminal","themes")}function Hr(t,e){return process.platform==="darwin"?Se(t,".warp","settings.toml"):Se(e,"warp-terminal","settings.toml")}var lu='"dark"';function fu(t){return Se(t,"ttheme","warp.base")}var J$="[appearance.themes]";function V$(t){let e=t.findIndex((r)=>r.trim()===J$);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(`
|
|
586
|
+
`),n=V$(e);if(!n)return;return e.slice(n[0]+1,n[1]).find((i)=>/^theme\s*=/.test(i))?.replace(/^theme\s*=\s*/,"").trim()}function ph(t,e=`${A(t)}.yaml`){return`{ custom = { name = "${t}", path = "${e}" } }`}function VR(t){return t?.includes(`path = "${A("")}`)===!0?/name = "([^"]+)"/.exec(t)?.[1]:void 0}function du(t,e){let n=t.split(`
|
|
587
|
+
`),r=V$(n);if(!r)return e===void 0?t:`${t.replace(/\n*$/,`
|
|
584
588
|
`)}
|
|
585
|
-
${
|
|
589
|
+
${J$}
|
|
586
590
|
theme = ${e}
|
|
587
591
|
`;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
|
|
592
|
+
`)}function mh(t){return Fr(t)?.includes(`path = "${A("")}`)===!0}var ZR="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 Z$(t,e,n){return{image:Se(t,l$(e.name,n.image,e.background)),opacity:n.opacity}}function z$(t){let e=Si(t.home),n=D(t.configHome),r=new Map,i=new Set;for(let s of t.themes){let o=ke(n,s.name,t.home),a=Do(s.name,o&&Z$(e,s,o));r.set(s.name,a);for(let c of new Set([a,Do(s.name)]))if(!Ar(Se(e,c)))i.add(c)}return{files:r,fresh:i}}function D$(t,e,n){let r=Si(t.home),i=D(t.configHome),s=new Set(n.values()),o=Fr(st(Hr(t.home,t.configHome)))??"";for(let u of t.themes){let l=ke(i,u.name,t.home),f=n.get(u.name);if(l&&f){let d=Z$(r,u,l);if(!Ar(d.image))try{let h=Ht(new Uint8Array(hh(l.image)));H(d.image,sr(ir(h,u.background,1)))}catch{n.set(u.name,Do(u.name));continue}e.write(Se(r,f),qo(u,d))}}if(!Ar(r))return;let a=(u,l)=>u.startsWith(A(""))&&new RegExp(`\\.[0-9a-f]{8}\\.${l}$`).test(u);for(let u of dh(r))if(a(u,"yaml")&&!s.has(u)&&!o.includes(`path = "${u}"`))e.remove(Se(r,u));let c=new Set;for(let u of dh(r)){let l=u.startsWith(A(""))&&u.endsWith(".yaml")?/^ {2}path: "(.+)"$/m.exec(st(Se(r,u)))?.[1]:void 0;if(l)c.add(l)}for(let u of dh(r))if(a(u,"png")&&!c.has(Se(r,u)))e.remove(Se(r,u))}function QR(t,e){let n=process.env.TTHEME_WARP_WEARS;return t!==void 0&&n!==void 0&&e.files.has(n)?n:t}function q$(t,e,n,r=!1){let i=Hr(t.home,t.configHome);if(!Ar(i))return;let s=fu(t.configHome),o=hh(i,"utf8"),a=r?VR(Fr(o)):e;if(r&&(a===void 0||!n.files.has(a)))return;let c;if(a){if(!mh(o)&&!Ar(s))DR(Y$(s),{recursive:!0}),JR(s,Fr(o)??"");c=ph(a,n.files.get(a))}else{if(!mh(o))return;c=Ar(s)&&hh(s,"utf8")||lu,YR(s,{force:!0})}let u=du(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))_l(i),zR(process.execPath,["-e",ZR,qR(i),u,o,Se(Si(t.home),l)],{detached:!0,stdio:"ignore"}).unref();else tn(i,u);return i}var gh={id:"warp",name:"Warp",emitter:Yd,shelf:{from:"themes",dir:(t)=>Si(t.home)},bakes:!0,offered:(t,e)=>e.platform!=="win32",present:(t)=>Ar(Y$(Si(t.home))),sync(t,e){let n=z$(t);e.themes(gh),D$(t,e,n.files);let r=q$(t,QR(t.startup,n),n);if(r)e.note(r)},pictures(t,e){let n=z$(t);D$(t,e,n.files),q$(t,void 0,n,!0)},plan(t){let e=Hr(t.home,t.configHome);return t.startup&&Ar(e)?[`Edit ${Rt(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=Hr(t.home,t.configHome),n=st(e);return{edits:mh(n)?[{file:e,content:du(n,st(fu(t.configHome))||lu)}]:[],removals:[],touches:[]}}};import{existsSync as pu}from"node:fs";import{join as Hs}from"node:path";var Q$=/-- ttheme begin\n[\s\S]*?-- ttheme end\n?/,XR=/^return config[ \t]*$/gm;function tT(t){return`dofile(${JSON.stringify(t)})(config)`}var tk=`local wezterm = require 'wezterm'
|
|
589
593
|
local config = wezterm.config_builder()
|
|
590
594
|
|
|
591
|
-
`;function
|
|
592
|
-
`?"":e}function
|
|
595
|
+
`;function eT(t){let e=t.replace(/-- ttheme begin\n[\s\S]*?-- ttheme end\n\n?/,"");return e===`${tk}return config
|
|
596
|
+
`?"":e}function bh(t,e){let n=`-- ttheme begin
|
|
593
597
|
${e}
|
|
594
598
|
-- ttheme end
|
|
595
|
-
`;if(
|
|
599
|
+
`;if(Q$.test(t))return t.replace(Q$,n);if(t==="")return`${tk}${n}
|
|
596
600
|
return config
|
|
597
|
-
`;let r=[...t.matchAll(
|
|
598
|
-
${t.slice(r.index)}`}function
|
|
599
|
-
`)}function
|
|
601
|
+
`;let r=[...t.matchAll(XR)].at(-1);if(r?.index===void 0)return;return`${t.slice(0,r.index)}${n}
|
|
602
|
+
${t.slice(r.index)}`}function hu(t,e){let n=Hs(e,".wezterm.lua");return pu(n)?n:Hs(t,"wezterm","wezterm.lua")}function X$(t){return Hs(t.configHome,"wezterm","colors")}function mu(t){return Hs(t.configHome,"ttheme","wezterm.lua")}var wh={id:"wezterm",name:"WezTerm",emitter:Jd,shelf:{from:"colors",dir:X$},offered:()=>!0,present:(t)=>pu(Hs(t.configHome,"wezterm"))||pu(Hs(t.home,".wezterm.lua")),sync(t,e){e.themes(wh),e.write(mu(t),h$({path:mu(t),colors:X$(t),backgrounds:D(t.configHome),...t.startup?{startup:t.startup}:{},palettes:t.themes}));let n=hu(t.configHome,t.home),r=bh(st(n),tT(mu(t)));if(r!==void 0)e.wire(n,r)},plan(t){let e=hu(t.configHome,t.home);return bh(st(e),"")!==void 0?[`Edit ${Rt(e,t.home)} — a ttheme block before \`return config\`: color_scheme_dirs, color_scheme, pictures`]:[]},notes(t){let e=hu(t.configHome,t.home);return pu(e)&&bh(st(e),"")===void 0?[`${e} has no \`return config\` line — ttheme left it alone; call \`dofile("${mu(t)}")(config)\` from it yourself`]:[]},next:()=>["WezTerm Reloads its config by itself"],unwire:(t)=>({edits:hn(hu(t.configHome,t.home),eT),removals:[],touches:[]})};import{existsSync as nk,readFileSync as nT,utimesSync as rT}from"node:fs";import{dirname as iT,join as gu}from"node:path";function $h(t){return gu(t,"Microsoft","Windows Terminal","Fragments","ttheme","ttheme.json")}function ek(t){return[gu(t,"Packages","Microsoft.WindowsTerminal_8wekyb3d8bbwe","LocalState","settings.json"),gu(t,"Packages","Microsoft.WindowsTerminalPreview_8wekyb3d8bbwe","LocalState","settings.json"),gu(t,"Microsoft","Windows Terminal","settings.json")].filter((e)=>nk(e))}function sT(t){for(let e of t){let n=/"defaultProfile"\s*:\s*"(\{[0-9a-fA-F-]+\})"/.exec(nT(e,"utf8"))?.[1];if(n)return n}return}function rk(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 ik={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=ek(n);if(e.write($h(n),Vd(t.themes,r??sT(i),t.startup))){let s=new Date;for(let o of i)rT(o,s,s);if(i.length>0)e.repaint()}},plan:(t)=>t.state.wtHome?[`Write ${$h(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?iT($h(n)):void 0;return{edits:[],removals:r&&nk(r)?[r]:[],touches:n?ek(n):[]}}};var mn={ghostty:th,kitty:ih,alacritty:Xd,wezterm:wh,iterm2:O$,"windows-terminal":ik,warp:gh,konsole:L$,"terminal-app":K$};function pt(t=Dt){return t.map((e)=>mn[e])}function Mi(t){return t.startup&&t.palettes.includes(t.startup)?t.startup:t.palettes[0]}function Ee(t){return t.off?void 0:Mi(t)}function V(){return process.env.XDG_CONFIG_HOME??Fs(qe(),".config")}var Ei=(t)=>typeof t==="string"&&t!==""?t:void 0,oT={author:Ei,startup:Ei,off:(t)=>t?!0:void 0,itermBase:Ei,konsoleBase:Ei,terminalBase:Ei,wtHome:Ei,wtProfile:Ei,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 B(t){let e=wr(t);if(!bu(e))throw Error(`nothing installed yet at ${e} — run \`ttheme init\` first`);let n=JSON.parse(sk(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(oT).flatMap(([r,i])=>{let s=i(n[r]);return s===void 0?[]:[[r,s]]})),palettes:n.palettes}}function Ae(t,e){H(wr(t),`${JSON.stringify(e,null,2)}
|
|
603
|
+
`)}function ok(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`:od(Et(t.palettes),r);throw Error(`not in any market: ${r.join(", ")} — ${s}`)}return t.palettes.filter((i)=>e.includes(i.name))}function Zo(t,e,n){return{configHome:t,home:n,state:e,startup:Ee(e)}}function ak(t,e,n,r,i){return{...Zo(t,n,r),entries:e,themes:e.map(Ue),host:i}}function ck(t){let e=[],n={written:e,repainted:!1,write(r,i){if(e.push(r),bu(r)&&sk(r,"utf8")===i)return!1;return H(r,i),!0},wire(r,i){e.push(r),tn(r,i)},note(r){e.push(r)},remove(r){kh(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 _d(r,s))n.write(Fs(i,o),a)},repaint(){n.repainted=!0}};return n}function aT(t,e){return Object.assign({},...pt(t.state.terminals).map((n)=>n.layer?.(t,e)??{}))}function Ct(t,e,n,r=qe(),i=ze()){vt(D(t));let s=ok(pi(t,e),n.palettes),o=yc(s,Hn(t));Ow(t,new Map(o.map((u)=>[u.name,pr(u)]))),mw(t),Sc(t,s);let a=ak(t,o,n,r,i),c=ck(a);for(let u of pt(n.terminals))u.sync(a,c);return c.written.push(fk(a,i,c.repainted)),lk(t,o,r),c.written}function uk(t,e=qe()){if(!bu(Fs(t,"ttheme","palettes.zsh")))return;let n=new Set(B(t).palettes);lk(t,oe(t).palettes.filter((r)=>n.has(r.name)),e)}function lk(t,e,n){let r=Fs(t,"ttheme","aliases.zsh"),i=e$(cT(e,n));if(st(r)!==i)H(r,i)}function cT(t,e){let n=t.flatMap((s)=>s.booru?[s.booru]:[]),r=Wf(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 fk(t,e,n){let r=Fs(t.configHome,"ttheme","palettes.zsh"),i=Gd(t.entries,t.startup,t.state.terminals,aT(t,e));if(n||st(r)!==i)H(r,i),kh(`${r}.zwc`,{force:!0});return r}function Me(t,e=qe(),n=ze()){let r=B(t),i=pt(r.terminals).filter((a)=>a.pictures);if(i.length===0)return;let s=ak(t,ok(oe(t),r.palettes),r,e,n),o=ck(s);for(let a of i)a.pictures?.(s,o);fk(s,n,!1)}function Oi(t){return!pt(t).some((e)=>e.bakes)}function wu(t,e,n=qe()){let r=Zo(t,e,n);return pt(e.terminals).flatMap((i)=>[...i.shelf?[`Write ${Rt(i.shelf.dir(r),n)}/${A("*")} — a theme file per palette`]:[],...i.plan(r)])}function $u(t,e,n=qe()){let r=Zo(t,e,n);return pt(e.terminals).flatMap((i)=>i.notes(r))}function ku(t,e,n,r=qe()){let i=Zo(t,e,r);return pt(e.terminals).flatMap((s)=>s.next(i,n.get(s.id)))}function yu(t,e,n,r,i=qe()){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 _d(a,Ue(u))){let f=Fs(c,l);if(bu(f))kh(f,{force:!0}),s.push(f)}}return s}function dk(t,e,n,r){return{...Zo(t,e,r),host:n}}function Qo(t,e,n,r=qe()){return pt(e.terminals).reduce((i,s)=>s.defaults?.base(dk(t,i,n,r))??i,e)}function Ii(t,e,n,r,i=qe()){let s=new Map;for(let o of pt(e.terminals)){let a=o.defaults?.point(dk(t,e,r,i),n);if(a)s.set(o.id,a)}return s}function pn(t,e,n,r,i=!1,s=ze(),o=qe()){let a=i||!Ee(n)&&Ee(r)!==void 0,c=a?Qo(t,r,s,o):r;return Ct(t,e,c,o,s),Ae(t,c),a||Ee(n)!==Ee(r)?Ii(t,c,a,s,o):new Map}import{performance as hk}from"node:perf_hooks";var uT=16,yh=80,mk="\x1B[?2026h",pk="\x1B[?2026l";class xi{shown=[];pointer=new Co;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+uT-hk.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}=Ic(()=>this.view());if(!t)return;this.last=hk.now();let{lines:n,zones:r}=xc(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(`${mk}${i}${a}\x1B[0m${u?c:""}${pk}`);this.tick(t.ticking===!0)};tick(t){if(t&&!this.ticker)this.ticker=setInterval(()=>{this.beat(),this.request()},yh);else if(!t&&this.ticker)clearInterval(this.ticker),this.ticker=void 0}}class vh{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
604
|
`),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
605
|
`);else if(r>=this.shown.length)i=`
|
|
602
606
|
${n.slice(r).join(`
|
|
603
607
|
`)}`;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(`${
|
|
608
|
+
`)}`}this.shown=n,this.write(`${mk}${e}${i}${pk}`)}}var lT=300;function vu(t){return t>=1e6?`${(t/1e6).toFixed(1)} MB`:`${Math.max(1,Math.round(t/1000))} KB`}function Su(t,e){if(!e)return vu(t);return e>=1e6?`${(t/1e6).toFixed(1)}/${(e/1e6).toFixed(1)} MB`:`${Math.round(t/1000)}/${Math.round(e/1000)} KB`}var Cs;async function gk(t,e){Cs=t;try{return await e()}finally{Cs=void 0}}function Cr(t){if(Cs)Cs.say(t);else console.log(t)}function Lr(t=""){if(Cs){let u=Cs;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,he],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()},yh),o.unref()},lT);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 OT,mkdirSync as xk,readFileSync as Nk,statSync as IT,utimesSync as xT}from"node:fs";import{homedir as NT}from"node:os";import{dirname as RT,join as Mk}from"node:path";function Sh(t){if(t.length>0&&process.stderr.isTTY)process.stderr.write(`${t.join(`
|
|
609
|
+
`)}
|
|
610
|
+
`)}import{existsSync as Eh,mkdirSync as bk,readFileSync as js}from"node:fs";import{homedir as gT}from"node:os";import{dirname as wk,join as Ni}from"node:path";import{spawn as fT}from"node:child_process";var dT=30000,hT=3,mT=97,pT=`ObjC.import('Vision')
|
|
605
611
|
ObjC.import('CoreImage')
|
|
606
612
|
ObjC.import('CoreGraphics')
|
|
607
613
|
function run(argv) {
|
|
@@ -620,55 +626,34 @@ function run(argv) {
|
|
|
620
626
|
$.CIImage.imageWithCVPixelBuffer(buffer), $.NSURL.fileURLWithPath(argv[1]), $.kCIFormatRGBA8,
|
|
621
627
|
$.CGColorSpaceCreateWithName($.kCGColorSpaceSRGB), $({}), error)
|
|
622
628
|
if (!written) throw new Error('write failed')
|
|
623
|
-
}`;function
|
|
624
|
-
`).at(-1)||`osascript exited ${a}`))})})}var
|
|
625
|
-
`)}function
|
|
626
|
-
`)}function
|
|
627
|
-
\`ttheme browse\` picks them, or \`ttheme add ${r}/<palette>\``)}function
|
|
628
|
-
|
|
629
|
-
on:
|
|
630
|
-
push:
|
|
631
|
-
paths: ["palettes/**"]
|
|
632
|
-
workflow_dispatch:
|
|
633
|
-
|
|
634
|
-
permissions:
|
|
635
|
-
contents: write
|
|
636
|
-
|
|
637
|
-
jobs:
|
|
638
|
-
index:
|
|
639
|
-
runs-on: ubuntu-latest
|
|
640
|
-
steps:
|
|
641
|
-
- uses: kecan0406/ttheme/market@v1
|
|
642
|
-
`;function kk({name:t}){return`ttheme-${t}`}function ST(t,e){dk(mc(t),{recursive:!0}),dk(Ii(t,".github","workflows"),{recursive:!0}),yk(t,e,[]),H(Ii(t,".github","workflows","ttheme.yml"),vT),H(Ii(t,"README.md"),`# ${ke(e)}
|
|
629
|
+
}`;function Ls(){return process.platform==="darwin"}function Eu(t){return t>=hT&&t<=mT}function Xo(t,e,n){return new Promise((r,i)=>{let s=fT("osascript",["-l","JavaScript","-e",pT,t,e],{stdio:["ignore","ignore","pipe"],signal:AbortSignal.any([n,AbortSignal.timeout(dT)])}),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(`
|
|
630
|
+
`).at(-1)||`osascript exited ${a}`))})})}var $k=90000;function Ou(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 bT(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 Gs(t,e){let n=new Set((e??[]).map((r)=>Xt(r)));return{...t,pictures:(t.pictures??[]).filter((r)=>!n.has(Xt(r)))}}async function wT(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 as(o,n.id,i);if(!a)throw Error("the post is gone");if(o!==Zt&&a.md5)try{Ja([a],await Va([a.md5],i))}catch{}let c=Ya(o,a)?qa(o,a.id,i).then((g)=>{if(g)ko(a,g)},()=>{}):void 0;if(!za(o,a,si(process.env.TTHEME_FIND_RATING))||Ka(a,os(process.env.TTHEME_FIND_BLOCK)).length>0)throw Error("outside your find filters — TTHEME_FIND_RATING and TTHEME_FIND_BLOCK");let u=sn(a);if(!u)throw Error("too large to use");let l=Ni(Ge(o),"orig",`${n.id}.${u.ext}`),f;if(Eh(l))f=new Uint8Array(js(l));else{s("Downloading");let g=oi(o,a,u);f=await Za(g.site,g.url,i,(b,y)=>s("Downloading",Su(b,y))),H(l,f)}let d=rr(f,ge),h=!1;if(In(d)===0&&Ls()&&process.env.TTHEME_FIND_REMOVE_BG!=="off"){let g=Ni(Ge(o),"cut",`${n.id}.png`);try{if(!Eh(g))s("Cutting out"),bk(wk(g),{recursive:!0}),await Xo(l,g,i);let b=rr(new Uint8Array(js(g)),ge);if(Eu(In(b)))d=b,h=!0}catch{}}await c;let p=Tf(e);s("Drawing"),sc(t,p,an(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:$o(a.source),cut:h},{width:0,height:0},Rr(t),Zc(t));let $=re(t,e.name).find((g)=>g.key===Xt(n));if($)Ro(D(t),$,n,r,gT())}function $T(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()?oo:`\x1B[${30+n.ansi}m${oo}\x1B[39m`} ${Ca(r,n.pageUrl(t.id))}`}async function Wn(t,e,n){let r=e.flatMap((c)=>bT(t,c).map((u)=>({entry:c,shared:u})));if(r.length===0)return;let i=Oi(n),s=process.stdout.isTTY&&q0(process.env),o=new Set,a=Lr();for(let[c,{entry:u,shared:l}]of r.entries()){let f=`${u.name} · ${$T(l,s)}`,d=r.length>1?` · ${c+1}/${r.length}`:"",h=(p,$)=>a.set(`${p} ${f}${$?` · ${$}`:""}${d}`);try{await wT(t,u,l,i,AbortSignal.timeout($k),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)gs(t,c.name,Xt(u))}if(o.size>0)Me(t)}function kk(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 kT(t,e){let[,n,r]=/^(.+)_(\d+)$/.exec(t)??[],i=Ni(lr(),n??"local","cut",`${r??t}.png`);if(!Eh(i)){if(!Ls())return;bk(wk(i),{recursive:!0}),await Xo(e,i,AbortSignal.timeout($k))}return rr(new Uint8Array(js(i)),ge)}function yT(t,e){try{return In(Ht(new Uint8Array(js(Ni(t,`${e.stem}.png`)))))>0}catch{return!1}}function Mu(t,e){return()=>rr(new Uint8Array(js(Ni(t,e.original))),ge)}function yk(t,e){let n=Mu(t,e);return()=>{let r=n(),i=Ht(new Uint8Array(js(Ni(t,e.cut))));return kk(r,i,0)?r:null}}async function Iu(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 To(t,e,u,yk(c,u),r,i,s,o,!1,a);if(ms(u)){let l=Mu(c,u)();if(In(l)===0&&yT(c,u)){let f=await kT(n,Ni(c,u.original));if(!f||!kk(l,f,3))return null;return To(t,e,u,()=>l,r,i,s,o,!0,a)}return To(t,e,u,()=>l,r,i,s,o,!1,a)}return To(t,e,u,Mu(c,u),r,i,s,o,!1,a)}function vk(t,e,n,r,i,s){let o=D(t),a=vt(o).palettes[e]?.pictures.find((u)=>u.key===n);if(!a?.original||ms(a))return!1;let c=a.cut?yk(o,a):Mu(o,a);return Sw(t,e,a,c,r,i,s)}import{gunzipSync as vT}from"node:zlib";var Ri=512,Sk=67108864,Mh=new TextDecoder;function Bs(t,e,n){let r=t.subarray(e,e+n),i=r.indexOf(0);return Mh.decode(i<0?r:r.subarray(0,i))}function ST(t){if((t[124]??0)&128)throw Error("the archive holds a file too large to be a palette");let e=Number.parseInt(Bs(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 ET(t){let e=0,n;while(e<t.length){let r=t.indexOf(32,e),i=r<0?Number.NaN:Number.parseInt(Mh.decode(t.subarray(e,r)),10);if(!Number.isFinite(i)||i<=0)break;let s=Mh.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 MT(t){if(t[0]!==31||t[1]!==139)return t;try{return vT(t,{maxOutputLength:Sk})}catch(e){throw Error(e instanceof RangeError?`the archive unpacks to more than ${Sk/1024/1024} MB`:"the archive is not a gzip file that reads")}}function Ek(t){let e=MT(t),n=new Map,r,i=0;while(i+Ri<=e.length){let s=e.subarray(i,i+Ri);if(s.every((f)=>f===0))break;let o=ST(s),a=e.subarray(i+Ri,i+Ri+o);i+=Ri+Math.ceil(o/Ri)*Ri;let c=String.fromCharCode(s[156]??0);if(c==="x"){r=ET(a)??r;continue}if(c==="L"){r=Bs(a,0,a.length);continue}let u=Bs(s,257,5)==="ustar"?Bs(s,345,155):"",l=r??(u?`${u}/${Bs(s,0,100)}`:Bs(s,0,100));if(r=void 0,c==="0"||c==="\x00")n.set(l.split("/").slice(1).join("/"),a)}return n}var TT=86400000,PT=3600000,Ih=5000;function Oh(){return Mk(process.env.XDG_STATE_HOME??Mk(NT(),".local","state"),"ttheme","markets.json")}function Kn(){try{let t=JSON.parse(Nk(Oh(),"utf8"));return Object.fromEntries(Object.entries(t).filter((e)=>typeof e[1]?.at==="number"&&typeof e[1].error==="string"))}catch{return{}}}function Ok(t,e){let n=Kn();if(e===void 0){if(!(t in n))return;delete n[t]}else n[t]={at:Date.now(),error:e};xk(RT(Oh()),{recursive:!0}),H(Oh(),`${JSON.stringify(n,null,2)}
|
|
631
|
+
`)}function ta(t,e){let n=e===q?ye(t):ie(e)?Re(t,e):void 0;try{return n?IT(n).mtimeMs:void 0}catch{return}}function AT(t,e,n,r){return t&&(e===void 0||r-e>=TT)&&(n===void 0||r-n>=PT)}function xh(t,e,n=Date.now()){let r=Kn();return _t(e.markets).filter((i)=>AT($r(i,e.updates),ta(t,i),r[i]?.at,n))}function HT(t,e){let n={},r=new TextDecoder;for(let[i,s]of Ek(t))if(i===We||i.startsWith("palettes/")&&i.endsWith(".toml"))n[i]=r.decode(s);return{...e?{etag:e}:{},files:n}}async function Rk(t,e,n,r){let i;try{i=await sd(_w(t),e,n,r?{"if-none-match":r}:{})}catch(s){if(s instanceof Ec){let o=Ao(t);throw Error(`${et(t)}${o?` has no ${o}`:" is not there"} — is the repository public?`)}throw s}if(i.status===304)return;return HT(new Uint8Array(await i.arrayBuffer()),i.headers.get("etag"))}function Tk(t,e,n){let{id:r,entries:i}=kr(t,e,n,se(!1));return{source:t,id:r,entries:i,archive:e}}function Nh(t){return jr(t,q)}async function ea(t,e,n,r){if(e===q){let s=await Oc(o0,ln,n,r);return{source:e,id:q,manifest:s,entries:s.palettes}}let i=await Rk(e,n,r);if(!i)throw Error(`${et(e)} answered as if nothing had changed`);return Tk(e,i,Nh(t))}function _s(t,e){if("manifest"in e){vc(t,e.manifest);return}xk(zf(t),{recursive:!0}),H(Re(t,e.source),`${JSON.stringify(e.archive)}
|
|
632
|
+
`)}function FT(t,e){try{return un(t,e)}catch{return}}function jr(t,e){try{if(e===q)return ln(Nk(ye(t),"utf8")).palettes;return kr(e,un(t,e),Nh(t),se(!1)).entries}catch{return[]}}function CT(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 LT(t,e,n){if(!ie(e))return ea(t,e,n);let r=FT(t,e),i=await Rk(e,n,void 0,r?.etag);return i&&Tk(e,i,Nh(t))}async function Rh(t,e,n){let r=jr(t,e),i;try{i=await LT(t,e,n)}catch(o){throw Ok(e,o.message),o}if(i)_s(t,i);else{let o=new Date;xT(Re(t,e),o,o)}Ok(e,void 0);let s=i?.entries??r;return{source:e,id:i?.id??Ho(e,un(t,e)),...i&&"manifest"in i?{version:i.manifest.version}:{},count:Et(s).length,change:CT(r,s)}}async function Th(t,e,n){try{return{source:e,refreshed:await Rh(t,e,n)}}catch(r){return{source:e,failure:r instanceof Error?r:Error(String(r))}}}function Ph(t,e){return`${et(t)}: ${e.message}`}function jT(t){return"failure"in t&&t.failure instanceof oc?Ph(t.source,t.failure):void 0}function Tt(t){return`${t} palette${t===1?"":"s"}`}function na(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 Pk({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 Ah(t){let e=Pk(t.change);return`${t.version?`${t.id} ${t.version}`:t.id} — ${Tt(t.count)}${e?` (${e})`:""}`}function Hh(t){return Pk(t.change)?`Updated ${Ah(t)}`:void 0}var Ik=/^(\d+)\.(\d+)\.(\d+)$/;function GT(t,e){let n=Ik.exec(t),r=Ik.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 Fh(t,e=xt.version){return t.version&>(t.version,e)?`ttheme ${t.version} is out, you have ${e} — \`${Lf}\` updates it`:void 0}async function Ch(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 Wn(t,Ot(t,o,!1).palettes.filter((l)=>s.includes(l.name)&&u.has(l.name)).map((l)=>Gs(l,u.get(l.name))),e.terminals),c}async function Ak(t=V()){try{if(!OT(wr(t)))return;let e=B(t),n=xh(t,e);if(n.length===0)return;let r=Fn(t),i=Lr(`Checking ${n.map(et).join(", ")} for updates`),s=await Promise.all(n.map((u)=>Th(t,u,Ih)));i.done();let o=s.flatMap((u)=>("refreshed"in u)?[u.refreshed]:[]),a=o.flatMap((u)=>Hh(u)??[]);Sh(a);let c=a.length>0?await Ch(t,e,r,o):[];Sh([...c,...s.flatMap((u)=>jT(u)??[]),...o.flatMap((u)=>Fh(u)??[])])}catch{return}}var jk=/^[a-z0-9]+(?:-[a-z0-9]+)*$/,zT=["add","remove","search","init"];function Gh(){return process.stdin.isTTY===!0&&process.stdout.isTTY===!0}function DT(){try{let t=BT("gh",["api","user","--jq",".login"],{encoding:"utf8",stdio:["ignore","pipe","ignore"],timeout:1e4}).trim().toLowerCase();return jk.test(t)?t:void 0}catch{return}}async function qT(t,e){if(e.author)return e.author;let n=DT();if(!n){if(!Gh())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 Ed({message:"Your GitHub handle — your palettes are named <handle>@<market>/<palette>",validate:(i)=>jk.test((i??"").toLowerCase())&&(i??"").length<=39?void 0:"that is not a GitHub handle"});if(ce(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 Us(t,e){if(e===q)return q;return ut(e)?Te(Rn(e)):Ho(e,un(t,e))}function xu(t,e){try{return Us(t,e)}catch{return}}function Gk(t){return ct(t)??q}function Nu(t){return lt(t).palettes.filter((e)=>ct(e.name)===void 0)}function ra(t,e,n){let{updates:r,...i}=t,s=Object.entries(n).filter(([o,a])=>e.includes(o)&&a!==$r(o,{}));return{...i,markets:e,...s.length>0?{updates:Object.fromEntries(s)}:{}}}function Bk(t,e,n,r){return e.find((i)=>i!==n&&!Es(i,n)&&xu(t,i)===r)}function jh(t,e,n,r){let i=B(t),s=_t(i.markets),o=Bk(t,s,e,n);if(o)throw Error(`${n} already names the market at ${et(o)} — \`ttheme market remove ${n}\` first`);let a=r===void 0?{...i.updates}:{...i.updates,[e]:r};Ae(t,ra(i,s.includes(e)?s:[...s,e],a))}async function YT(t){if(!Gh())return!1;let e=await Ke({message:`Update ${t} on its own when its author changes it? ttheme checks once a day, when you run it`,initialValue:!1});if(ce(e))throw Error("no answer given — nothing was added");return e}async function _k(t,e){let n=Lr(`Fetching ${et(e)}`);try{return await ea(t,e)}finally{n.done()}}async function JT(t,e,n){let r=await _k(t,n),i=B(t),s=_t(i.markets),o=Bk(t,s,n,r.id);if(o)throw Error(`${r.id} already names the market at ${et(o)} — \`ttheme market remove ${r.id}\` first`);let{[e]:a,...c}=i.updates??{},u=a===void 0?c:{...c,[n]:a};return Ae(t,ra(i,s.map((l)=>l===e?n:l),u)),_s(t,r),r}async function Bh(t,e){let n=hi(e),r=_t(B(t).markets);if(r.includes(n))return console.log(`${et(n)} is already added`),{source:n,id:Us(t,n),fresh:!1};let i=ie(n)?r.find((c)=>ie(c)&&Es(c,n)):void 0;if(i){let c=await JT(t,i,n);return console.log(`Moved ${c.id} to ${Ao(n)??"its default branch"} · ${et(n)} — ${Tt(Et(c.entries).length)}`),{source:n,id:c.id,fresh:!1}}if(ut(n)){let c=Te(Rn(n));jh(t,n,c);let u=An(n,c,Nu(t)).length;return console.log(`Added ${c} · ${et(n)} — ${Tt(u)}, read in place`),{source:n,id:c,fresh:!0}}let s=await _k(t,n),o=n===q?void 0:await YT(s.id);jh(t,n,s.id,o),_s(t,s);let a=Tt(Et(s.entries).length);return console.log(n===q?`Added the ttheme catalog — ${a}`:`Added ${s.id} · ${et(n)} — ${a}${o?", updating on its own":""}`),{source:n,id:s.id,fresh:!0}}async function VT(t){let e=V(),{source:n,id:r,fresh:i}=await Bh(e,t);if(!i)return;if(ut(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===q)console.log("\n`ttheme browse` picks them");else console.log(`
|
|
633
|
+
\`ttheme browse\` picks them, or \`ttheme add ${r}/<palette>\``)}function _h(t,e){if(e===q)Fk(ye(t),{force:!0});else if(ie(e))Fk(Re(t,e),{force:!0})}function Uh(t){return`${Tt(t.length)} installed from it keep${t.length===1?"s":""} working: ${t.join(", ")} — \`ttheme remove\` drops ${t.length===1?"it":"them"}`}function ZT(t){let e=V(),n=B(e),r=_t(n.markets),i=r.find((u)=>xu(e,u)===t)??r.find((u)=>u===Uk(t));if(!i)throw Error(`no market named ${t} — \`ttheme market\` lists them`);let s=xu(e,i),o=n.palettes.filter((u)=>Gk(u)===s),a=r.filter((u)=>u!==i),c=ra(n,a,n.updates??{});if(Ae(e,c),_h(e,i),Ct(e,lt(e),c),console.log(`Removed ${s??t} · ${et(i)}`),o.length>0)console.log(Uh(o))}function Uk(t){try{return hi(t)}catch{return}}function QT(t,e){try{if(e===q)return Et(ln(WT(ye(t),"utf8")).palettes).length;if(ut(e))return An(e,Us(t,e),Nu(t),se(!1)).length;return kr(e,un(t,e),Nu(t),se(!1)).entries.length}catch{return}}function Wh(t,e,n=Kn(),r=Date.now()){if(ut(e))return"read in place";let i=n[e],s=ta(t,e);if(i&&(s===void 0||i.at>s))return`update failed ${na(i.at,r)}`;return s===void 0?"never updated":`updated ${na(s,r)}`}function XT(){let t=V(),e=B(t),n=_t(e.markets);if(n.length===0){console.log("No markets — `ttheme market add official` brings the ttheme catalog back");return}let r=Kn(),i=n.map((a)=>{let c=xu(t,a)??"?",u=QT(t,a),l=e.palettes.filter((d)=>Gk(d)===c).length,f=ut(a)?[]:[`auto-update ${$r(a,e.updates)?"on":"off"}`];return{name:c,where:et(a),note:[u===void 0?"Unreadable":Tt(u),...l>0?[`${l} installed`]:[],...f,Wh(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 Kh(t){return`${t.owner.login.toLowerCase()}/${t.name}`}async function zh(t,e){let n=encodeURIComponent(`topic:${vs}${t?` ${t}`:""}`);try{let{items:r}=await Oc(`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 Mc)throw Error("GitHub lets a search through about ten times a minute without signing in — try again in a minute");throw r}}async function tP(t){let e=V(),n=await zh(t);if(n.length===0){console.log(`No repository carries the ${vs} topic${t?` and matches ${t}`:""} yet`);return}let r=new Set(_t(B(e).markets).map(br)),i=n.map((o)=>{let a=Kh(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 Wk({name:t}){return`ttheme-${t}`}function eP(t,e){_T(gc(t),{recursive:!0}),H(Lh(t,We),Ww(e)),H(Lh(t,"README.md"),`# ${Te(e)}
|
|
643
634
|
|
|
644
635
|
A [ttheme](https://github.com/kecan0406/ttheme) market:
|
|
645
636
|
|
|
646
637
|
\`\`\`sh
|
|
647
|
-
ttheme market add ${e.owner}/${
|
|
638
|
+
ttheme market add ${e.owner}/${Wk(e)}
|
|
648
639
|
ttheme browse
|
|
649
640
|
\`\`\`
|
|
650
|
-
`)}function
|
|
651
|
-
`)}function vk(t){return Be(`x@${t}/x`)?"takes lowercase letters, digits and single hyphens":void 0}async function Sk(){if(!Mh())throw Error("name the market: ttheme market init <name>, or --in <name> on new");let t=await bf({message:"Your market's name — its palettes are <you>@<name>/<palette>",validate:(e)=>vk((e??"").toLowerCase())});if(oe(t))throw Error("no market name given");return t.toLowerCase()}async function Ek(t,e){let n=di(t);if(e){let o=n.find((a)=>a.name===e||a.id===e||a.dir===$k(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 Sk();return Mk(t,Wd(t,s),s)}async function Mk(t,e,n){let r=!vh(Ii(e,cn)),i;if(r){let o=vk(n);if(o)throw Error(`the market name ${n} ${o}`);if(vh(e)&&cT(e).length>0)throw Error(`${e} is not empty — pick a new folder for the market`);i={owner:await hT(t,_(t)),name:n},ST(e,i)}else i=un(e);let s=ke(i);return Sh(t,e,s),console.log(`${r?"Made":"Added"} your market ${s} · ${st(e)}`),{dir:e,...i,id:s}}function hk(t){return t.startsWith(".")||t.startsWith("/")||t.startsWith("~")}async function ET(t){let e=J(),n=t&&!hk(t)?t.toLowerCase():t?uT($r(t)).toLowerCase():await Sk(),r=t&&hk(t)?$r(t):Wd(e,n),i=await Mk(e,r,n),s=`${i.owner}/${kk(i)}`;console.log(`
|
|
641
|
+
`)}function Kk(t){return _e(`x@${t}/x`)?"takes lowercase letters, digits and single hyphens":void 0}async function zk(){if(!Gh())throw Error("name the market: ttheme market init <name>, or --in <name> on new");let t=await Ed({message:"Your market's name — its palettes are <you>@<name>/<palette>",validate:(e)=>Kk((e??"").toLowerCase())});if(ce(t))throw Error("no market name given");return t.toLowerCase()}async function Dk(t,e){let n=mi(t);if(e){let o=n.find((a)=>a.name===e||a.id===e||a.dir===Uk(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 zk();return qk(t,Df(t,s),s)}async function qk(t,e,n){let r=!Hk(Lh(e,We)),i;if(r){let o=Kk(n);if(o)throw Error(`the market name ${n} ${o}`);if(Hk(e)&&UT(e).length>0)throw Error(`${e} is not empty — pick a new folder for the market`);i={owner:await qT(t,B(t)),name:n},eP(e,i)}else i=Rn(e);let s=Te(i);return jh(t,e,s),console.log(`${r?"Made":"Added"} your market ${s} · ${et(e)}`),{dir:e,...i,id:s}}function Ck(t){return t.startsWith(".")||t.startsWith("/")||t.startsWith("~")}async function nP(t){let e=V(),n=t&&!Ck(t)?t.toLowerCase():t?KT(hi(t)).toLowerCase():await zk(),r=t&&Ck(t)?hi(t):Df(e,n),i=await qk(e,r,n),s=`${i.owner}/${Wk(i)}`;console.log(`
|
|
652
642
|
\`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:
|
|
653
643
|
|
|
654
|
-
cd ${
|
|
644
|
+
cd ${et(r)}
|
|
655
645
|
git init -b main && git add -A && git commit -m "${i.id}"
|
|
656
646
|
gh repo create ${s} --public --source . --push
|
|
657
|
-
gh repo edit ${s} --add-topic ${
|
|
647
|
+
gh repo edit ${s} --add-topic ${vs}
|
|
658
648
|
|
|
659
|
-
Its action rebuilds ${cn} on every push; then \`ttheme market add ${s}\` works anywhere`)}function MT(t){let e=t?$r(t):process.cwd(),n=un(e),r=ke(n),i=mT(J()),s=new Map,o=[],a=[];for(let c of kr(e))try{let u=To(c,s);if(u)throw Error(u);s.set(c.slug,c);let l=ye(`${r}/${c.slug}`,Eh(c.path,"utf8"),i),d=Te({...l,name:c.slug});o.push(c.catalog?{...d,catalog:c.catalog}:d)}catch(u){a.push(` ${lT(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:
|
|
660
|
-
${a.join(`
|
|
661
|
-
`)}`),
|
|
662
|
-
|
|
663
|
-
`)}
|
|
664
|
-
${r} · ${xt(o.length)} → ${Ii(e,cn)}`),0}async function Ok(t,e){switch(t){case void 0:kT();return;case"add":await bT(mk(t,e));return;case"remove":wT(mk(t,e));return;case"search":await yT(e);return;case"init":await ET(e);return;case"build":return MT(e);default:throw Error(`unknown market action ${t} — ${dT.join(", ")}, or none to list them`)}}function mk(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 Ik(t,e){let n=_s(t,e);return`${n} — ${xt(yr(e,n,Ou(t),!1).length)}, read in place`}var OT=new Intl.Segmenter(void 0,{granularity:"grapheme"});function xk(t){return[...t].length===1&&t>=" "&&t!==""}function IT(t){return[...t.replace(/[\r\n\t]+/g," ")].filter(xk).join("")}function xi(t,e,n=()=>!0){if(e==="backspace")return[...OT.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 xk(e)&&n(e)?t+e:void 0}class Gr{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+=IT(t)}}import{performance as xT}from"node:perf_hooks";import{StringDecoder as NT}from"node:string_decoder";var RT=30,Nk=50,TT=500,PT=5,Rk=Buffer.from("\x1B[M"),xu="\x1B]1337;ReportCellSize\x07\x1B[16t\x1B[14t\x1B[18t",Ck={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"},HT={"\r":"enter","\n":"enter","\t":"tab","\b":"backspace","":"backspace","\x1B":"esc","\x00":"ctrl-space"},Tk=/\[([0-?]*)([ -/]*)([@-~])/y,AT=/^\[[0-?]*[ -/]*$/,Pk=/\](\d+)/y,FT=/^\]\d*$/,Hk=/\]\d+;/y,CT=/^1337;ReportCellSize=([\d.]+);([\d.]+)(?:;([\d.]+))?$/,Lk="\x1B[200~",Iu="\x1B[201~";function Ph(t){let e=HT[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 LT(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 jk(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 GT(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?jk(s-32,o-33,a-33,!1):void 0;return{events:c?[c]:[],end:i}}function _T(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=jk(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===""?Ck[`${t}${n}`]:void 0;return r?[Bs(r)]:[]}function BT(t,e,n){Tk.lastIndex=e+1;let r=Tk.exec(t);if(!r)return!n&&AT.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 GT(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:_T(s,o,a),end:c}}function WT(t){let e=CT.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:LT(r),payload:i.join(";")}]}function UT(t,e,n){Pk.lastIndex=e+1;let r=Pk.exec(t),i=r?t[e+1+r[0].length]:void 0;if(i!==";"&&i!=="\x07"&&i!=="\x1B")return!n&&FT.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:WT(t.slice(e+2,o)),end:o+(t[o]==="\x07"?1:2)}}function KT(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=Ck[r];return{events:i?[Bs(i)]:[],end:e+3}}function zT(t,e,n){let r=t[e+1];if(r===void 0)return n?Ws(e):void 0;if(r==="[")return BT(t,e,n);if(r==="]")return UT(t,e,n);if(r==="O")return KT(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 Ak(t,e=!1){let n=[],r=0;while(r<t.length){if(t[r]==="\x1B"){let o=zT(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=Ph(i);if(s)n.push(Bs(s));r+=i.length}return{events:n,rest:""}}function DT(t){let e=t.indexOf(Rk);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(Rk,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 Fk(t){return Hk.lastIndex=1,t.startsWith(Lk)||t.startsWith("\x1B]")&&Hk.test(t)}function qT(t,e){let n=t.slice(-Iu.length)+e;return t.startsWith(Lk)?n.includes(Iu):n.includes("\x07")||n.includes("\x1B\\")}class Hh{held="";timer;carry;pressed;wheeled;utf8=new NT("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=xT.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<PT)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<=TT;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(Nk);if(!this.held&&!e.includes("\x1B")&&this.burst(e)){this.take([{kind:"paste",text:e}]);return}if(Fk(this.held)&&!qT(this.held,e)){this.held+=e;return}let{events:n,rest:r}=Ak(this.held+e);if(this.held=r,r&&!Fk(r))this.wait(r.length===1?RT:Nk);if(n.length>0)this.take(n)}bytes(t){let{bytes:e,carry:n}=DT(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}=Ak(this.held,!0);if(this.held="",t.length>0)this.take(t)}stop(){clearTimeout(this.timer),this.held="",this.carry=void 0}}class sa{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"},Kn={on:"\x1B[?25l",off:"\x1B[?25h"},Ni={on:"\x1B[?7l",off:"\x1B[?7h"},_r={on:"\x1B[?2004h",off:"\x1B[?2004l"},Wk={on:"\x1B[?1004h",off:"\x1B[?1004l"},YT={on:"\x1B[?1000h\x1B[?1002h\x1B[?1006h",off:"\x1B[?1006l\x1B[?1002l\x1B[?1000l"};function Ks(t=process.env){return t.TTHEME_MOUSE==="off"?[]:[YT]}var Uk={SIGHUP:1,SIGINT:2,SIGQUIT:3,SIGTERM:15},JT=3000;class aa extends Error{exit;constructor(t){super(t);this.exit=128+Uk[t]}}var gn=[],Us=new Map,oa=new Map;function Gk(t){return gn.findLast((e)=>e.input===t)}var _k;function Kk(t){for(let e of[...gn].reverse())e.abort(t);if(!_k)_k=setTimeout(()=>{zk(),process.exit(t instanceof aa?t.exit:1)},JT).unref()}var VT=Object.fromEntries(Object.keys(Uk).map((t)=>[t,()=>Kk(new aa(t))]));function zk(){for(let t of[...gn].reverse())t.close()}function ZT(){for(let t of gn)t.reassert();gn.at(-1)?.redraw()}function Bk(t){let e=t?"on":"off";for(let[n,r]of Object.entries(VT))process[e](n,r);if(process[e]("uncaughtException",Kk),process[e]("exit",zk),process.platform!=="win32")process[e]("SIGCONT",ZT)}function Nu(){}class Dk{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 Hh((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))Bk(!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=oa.get(this.input)??0;if(n===0)this.input.setRawMode?.(!0);oa.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=(oa.get(this.input)??1)-1;if(e===0)oa.delete(this.input),this.input.setRawMode?.(!1),this.input.pause();else oa.set(this.input,e);if(this.output.off("error",Nu),gn.splice(gn.indexOf(this),1),this.tty&&!gn.some((n)=>n.tty))Bk(!1)}received=(t)=>{if(Gk(this.input)===this&&!this.aborted)this.keys.feed(t)};resizing=()=>{if(Gk(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 Br(t,e){let n=new Dk(t);try{return await e(n)}finally{n.close()}}var QT=3;function ca(t,e){return`${t}/${e}`}function qk(t){return ct(t.name)?dr(t.name):t.name}function zs(t){return t.catalog!==void 0&&Jk(t.group)?ca(t.group,t.catalog):void 0}function Ah(t){if(t?.kind==="palette")return`palette ${t.entry.name}`;if(t?.kind==="group")return`group ${t.name}`;if(t?.kind==="catalog")return`catalog ${ca(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??[],...dc(t.booru)].some((r)=>r.toLowerCase().includes(n))}function Yk(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((f)=>!f.default&&f.group===a.group),u=r?c.filter((f)=>Tu(f,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((f)=>f.lead)??a,expanded:l,count:u.length}),!l)continue;let d=u.filter((f)=>zs(f)!==void 0);for(let f of new Set(d.map((h)=>h.catalog))){let h=d.filter(($)=>$.catalog===f),p=r.length>0||e.has(ca(a.group,f));if(i.push({kind:"catalog",group:a.group,name:f,lead:h[0],expanded:p,count:h.length}),p)i.push(...h.map(o))}i.push(...u.filter((f)=>zs(f)===void 0).map(o))}return i}function XT(t,e){let n=e.trim(),r=new Set(t.filter((i)=>!i.default&&(n===""||Tu(i,n))).map((i)=>i.group));return Yk(t,new Set,"").filter((i)=>i.kind==="group"&&r.has(i.name))}function Jk(t){return t.includes("@")}function Fh(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 tP(t){let e=t.findIndex((n)=>n.kind==="group"&&Jk(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 eP(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 ua{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+qk(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"?XT(this.entries,this.filter):Yk(this.entries,this.expanded,this.filter);this.rows=n.length>0?tP([{kind:"all",count:this.allCount(n)},...n]):[];let r=n.length>0?this.rows.indexOf(n[eP(n)]):0;if(t==="first")this.cursor=r;else if(t==="keep"||t==="stay"){let i=Ah(e),s=e?.kind==="palette"||t==="stay"?this.rows.findIndex((o)=>Ah(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=Fh(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)=>Ah(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(ca(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}${de}`:S,o=(S)=>this.color?`${at}${S}${de}`:S,a=(S)=>this.color?` ${$p(ac(S),i?Ce(S.foreground):"\x1B[39m")}`:"",c=n?i?`${Ce(r.cursor)}▌\x1B[39m `:"▌ ":" ",u=(S)=>i?`${c}${Fa(r.selection,r.foreground)} ${S} ${Pt}`:`${c} ${S}`,l=(S)=>Ds(e,"box",`${S?"●":"○"} `),d=(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 f=this.rows[this.cursor],h=(S,E)=>this.color&&f?.kind==="palette"&&S?`${at}${Ce(f.entry.cursor)}${E}${de}\x1B[39m`:o(E);if(t.kind==="group"){let S=h(f?.kind==="palette"&&f.entry.group===t.name,t.name),E=t.native?` ${s(t.native)}`:"";return u(`${d(t.expanded)}${S} ${s(`(${this.pickedIn(t.name)}/${t.count})`)}${E}`)}if(t.kind==="catalog"){let S=f?.kind==="palette"&&zs(f.entry)===ca(t.group,t.name),E=s(`(${this.pickedIn(t.group,t.name)}/${t.count})`);return u(` ${d(t.expanded)}${h(S,t.name)} ${E}`)}let p=t.entry,$=this.indent(p),g=qk(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 Ch(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 nP=5;class Lh{picked;list;scope;color;required;most;hint;field=new Gr;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 ua({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",()=>Ch(this.list),()=>this.redraw())}prompt(){return Br({input:this.input,output:this.output,modes:[Kn,_r]},async(t)=>{let e=new ph((r)=>t.write(r),()=>t.cols),n=()=>{return this.list.maxItems=Math.max(QT,Math.min(this.most,t.rows-nP)),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?`${Ca}${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("│"),d=this.scope==="series"?"":" · ←→ fold",f=this.scope==="series"?"continue":"install",h=this.state==="error"?`${e("└")} ${this.color?`${Jt}${this.error}${Pt}`:this.error}`:`${e("└")} ${t(`↑↓ move${d} · space pick · type to filter · enter ${f} · 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"}],jh=34,rP=72,iP=94,sP=22,Vk=40,Zk=10,Qk=3,oP=600,aP=500,cP=300,Xk=12,uP="\x1B[7;1m",Gh={title:"",lines:[],brief:""};function la(t){let e=t.trim();if(e!==q&&!e.includes("/")&&!e.startsWith("~"))return;try{return $r(e)}catch{return}}function lP(t){return t.charAt(0).toUpperCase()+t.slice(1)}class _h{picked;tab="catalog";fields={catalog:new Gr,installed:new Gr,markets:new Gr,errors:new Gr};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 ua({entries:e,picked:this.picked,color:this.color,maxItems:this.maxItems,onFocus:(n)=>this.focus("catalog",n)}),this.mine=new ua({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",()=>Ch(this.tab==="installed"?this.mine:this.catalog),()=>this.redraw());for(let n of t.due)this.update(n)}run(){let t=[...this.owns?[Ru,Kn,Ni]:[],_r,...Ks()],e=this.owns?[]:[Kn,Ni];return Br({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(Zw(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(Qw(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",oP,()=>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]=Fh(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=la(this.fields.markets.value);if(t&&this.wants(t))this.later("typed",aP,()=>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",cP,()=>{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&&!la(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=la(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:Rh(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,d)=>{let f=0;for(let h=l;h<=d;h++)f+=s(h);return f},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 d=n(t[l],l===i,l);return r(t[l])?d:d.map((f)=>Ds(l,"row",f))}),above:a,below:t.length-a-c.length}}dim(t){return this.color?`${P}${t}${de}`:t}bold(t){return this.color?`${at}${t}${de}`:t}warn(t){return this.color?`${Jt}${t}\x1B[39m`:t}lit(t,e,n){if(e&&this.color&&t)return`${Ce(t.cursor)}▌\x1B[39m ${Fa(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?xt(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,xt(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&&!la(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(Qk,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(`
|
|
665
|
-
`)),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,xt(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 ${xt(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,d=[c>0?` ${this.more(-1,`↑ ${c} more`)}`:"",...u];while(d.length<o+1)d.push("");d.push(l>0?` ${this.more(1,`↓ ${l} more`)}`:"");let f=a>0?[["↑↓","scroll"]]:[],h=r?{badge:"BROWSE (APPLY)",keys:[...f,["enter","apply"]],right:["esc","back"]}:this.phase==="applying"?{badge:"BROWSE (APPLY)",note:"Keys wait until it ends",keys:[]}:{badge:"BROWSE (APPLY)",keys:f,right:["enter","close"]};return[...this.hub?[ot(tf(this.hub,this.color),n,!1)]:[],ot(` ${s}`,n,!1),...d.map((p)=>ot(p,n,!1)),` ${this.keyBar(h,n-1)}`].slice(0,e).join(`
|
|
666
|
-
`)}keyBar(t,e){let n=this.color&&this.worn?Ce(this.worn.cursor):"",r=this.color?`\x1B[7;1m${n} ${t.badge} ${Pt} `:`[${t.badge}] `,i=([c,u])=>dn(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((d,f)=>f!==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?uP: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),d=i.length-c-u,f=l.map((g,b)=>{let y=se({kind:"chip",source:n[c+b]?.source},g);if(c+b===r)return this.color?`${at}${Ca}${y}${Pt}`:y;return this.dim(y)}),h=`${c>0?`${this.dim(dn("ctrl+s","…"))} `:""}${f.join(this.dim(s))}${d>0?this.dim(`${s}${dn("ctrl+s",`+${d} more`)}`):""}`,p=(c>0?2:0)+l.join(s).length+o(d),$="ctrl+s market";return p+2+$.length<=t?`${h} ${this.dim(dn("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 Gh;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((f)=>f.group===t.name&&!f.default),l=this.sourceOf(t.lead),d=`${xt(u.length)} · ${u.filter((f)=>this.installed.has(f.name)).length} installed`;return{title:this.bold(t.name),lines:[...t.native?kt(t.native,e).map((f)=>this.dim(f)):[],...kt(l,e),d],brief:`${l} · ${d}`}}if(t.kind==="catalog"){let u=this.entries().filter((f)=>f.group===t.group&&f.catalog===t.name),l=this.sourceOf(t.lead),d=`${xt(u.length)} · ${u.filter((f)=>this.installed.has(f.name)).length} installed`;return{title:this.bold(t.name),lines:[t.group,...kt(l,e),d],brief:`${t.group} · ${d}`}}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}${Ce(n.cursor)}${n.name}${de}\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,d)=>`${d===0?this.warn("✗"):" "} ${l}`)),...a?["",a]:[]],brief:[r,s,...a?[a]:[],this.paletteState(n)].join(" · ")}}marketDetail(t,e){if(!t||t.kind==="rule")return Gh;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=`${xt(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)??lP(i.status),d=this.failed.get(i.source),f=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],...d?kt(d,e).map((h)=>this.warn(h)):[],...f.length>0?["",...f.flatMap((h)=>kt(h,e))]:[]],brief:[s,u,...f,...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&&!la(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,Xk).map((s)=>dr(s.name)).join(", ")}${r.length>Xk?", …":""}`;return["",n.id,xt(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}:Gh}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(Qk,this.rows()-t);this.maxItems=e,this.catalog.maxItems=e,this.mine.maxItems=e}view(){let t=this.draw().split(`
|
|
667
|
-
`);return Array.from({length:this.rows()},(e,n)=>t[n]??"")}draw(){let t=this.columns(),e=this.rows();if(t<Vk||e<Zk)return`Needs ${Vk}×${Zk} — now ${t}×${e}
|
|
668
|
-
${this.dim("esc cancels")}`;if(this.phase!=="browse")return this.frame(t,e);let n=t>=iP,r=t-1,i=n?Math.min(t-jh-4,rP):r,s=this.strip(r-1),o=[` ${this.tabBar()}`,...e>=sP?[` ${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(),d=a.length>0?a.map((g)=>` ${g}`):[` ${this.dim(l)}`];while(d.length<this.maxItems)d.push("");let f=[c>0?` ${this.more(-1,`↑ ${c} more`)}`:"",...d,u>0?` ${this.more(1,`↓ ${u} more`)}`:""],h=this.detail(n?jh:i-2),p=n?f.map((g,b)=>`${ot(g,i)} ${this.dim("│")} ${ot(b===0?h.title:h.lines[b-1]??"",jh,!1)}`):[...f.map((g)=>ot(g,i,!1)),ot(` ${this.dim(h.brief)}`,i,!1)],$=[...this.hub?[ot(tf(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(`
|
|
669
|
-
`)}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,d])=>`│${ot(` ${this.bold(l.padEnd(10))}${d}`,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,d)=>{let f=c[d-u];return f===void 0?l:`${kp(l,o)}${f}`})}}import{existsSync as CF}from"node:fs";import{existsSync as Ia,mkdirSync as IF,readFileSync as Nm}from"node:fs";import{dirname as xF}from"node:path";class Ie extends Error{}import{closeSync as ZH,mkdtempSync as QH,openSync as XH,readSync as tA,rmSync as Qy}from"node:fs";import{homedir as eA,tmpdir as nA}from"node:os";import{join as Xy}from"node:path";import{readFileSync as dP}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,fP=1073741824,qh=2147483648,hP=-1073741826,mP=1600,pP=56,gP=4,ty=20,bP=50,ey=[["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 Yh(t){return Math.max(0,Math.floor((t-1)/ue.pitch))}function zn(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=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 uy(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 Jh(t){return`\x1B_Ga=d,d=i,i=${t},p=${t},q=2\x1B\\`}function pa(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 Wh=!1;function Gu(t){return Wh=!0,t.beat}function Js(t){return Sn[Gu(t)%Sn.length]}function dt(t){return Q(t)}function Uh(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 Wr(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 Bh(t){let e=Xd(t);return e?{kind:"key",key:e}:void 0}function Kh(t){return t.reduce((e,[n])=>e+dt(n),0)}function wP(t,e){let n=[],r=e;for(let[i,s,o,a]of t){let c=dt(i);if(c<=r){n.push([i,s,o,a]),r-=c;continue}n.push([`${Uh(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+dt(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?dt(Uh(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+dt(r),0),e)}center(t,e){this.run(Math.floor((t-e.reduce((n,[r])=>n+dt(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=Uh(n,this.cols-e);t+=`\x1B[${e+1}G${r}${La(o,i)}${r?Pt:""}`}return t}}function $P(t){return t.replace(/_\([^)]*\)?$/,"")}function ly(t){return[`${t.reduced?"↓":""}${t.width}×${t.height}`,Math.max(t.width,t.height)<mP?Jt:P]}function ha(t,e,n,r){let i=[...r.keys??[]],s=r.lead,o=r.right,a=()=>{let l=[...s?[Kh(s)]:[],...i.map(([f,h])=>dt(f)+1+dt(h))];return(r.badge?dt(r.badge)+4:0)+l.reduce((f,h)=>f+h,0)+3*Math.max(0,l.length-1)+(o?3+dt(o[0])+1+dt(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=wP(s,Math.max(0,Kh(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,d])=>[[l,at,void 0,Bh(l)],[` ${d}`,P,void 0,Bh(l)]])].forEach((l,d)=>{c=t.run(c+(d?3:0),l)}),o){let l=Bh(o[0].split(" ")[0]??"");t.right(e,[[o[0],at,void 0,l],[` ${o[1]}`,P,void 0,l]])}}function kP(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 yP(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+dt(u),0)<=n;t?.run(e,a?o:[[hi(r.scene).name,at+i],[` ${s+1}/${te.length}`,P]])}function vP(t,e,n,r,i,s,o){let{ansi:a,cursor:c}=s.colors;yP(t[e-2],n,r,s,o);let u=r<M0?3:4;if(r>=56)u=Math.min(7,Math.floor((r+1)/8)-1);let l=n;for(let f=0;f<8;f++)l=(t[e]?.put(l,"▀".repeat(u),Ys(a[f]??c)+Lu(a[f+8]??c))??l)+1;let d=e+2;for(let f of hi(s.scene).lines){let h=jc(f,r);if(!h)continue;if(d>i)return;t[d]?.run(n,h.map(([p,$])=>[p,kP($,s)])),d++}}function SP(t,e,n){let r=[[]];for(let o of t){let a=r[r.length-1];if(a.length===0||dt([...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&&dt([...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 ny(t){return t.replace(/^https?:\/\/(?:www\.)?/,"")}function EP(t,e,n,r,i){let s=r.info,o=s?.artists??[],a=Wr(r.tiles[r.focus]?.siteAnsi??r.siteAnsi);[["Post",s?.page?Pi(ny(s.page),"",s.page,a):[["—",P]]],["Source",s?.source?Pi(ny(s.source),"",s.link,i):[["—",P]]],["Artist",[o.length>0?[o.join(" "),""]:["—",P]]]].forEach(([u,l],d)=>{t[e+d]?.put(n,u,P),t[e+d]?.run(n+12,l)})}function MP(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),d=[`${a.width}×${a.height}${o.ext?` ${o.ext.toUpperCase()}`:""}`,...c?[$u(c.bytes)]:[]].join(" · "),f=[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,""]]):[[["—",P]]],p=[["Characters",h(o.characters,2)],["Series",h(o.series,1)],["Tags",h(o.tags,3)],["Rating",[[[f,f==="—"?P:""]]]],["File",[[[d,""],...c?[[" ",""]]:[],...c?dy(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 OP=["Size","Position","Opacity"],IP=[0,3,6];function xP(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 RP(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,Wr(a.siteAnsi))]:[]]);let c=Math.max(8,r-n-21),u=20,l=Math.max(100,o.fill);for(let[d,f]of OP.entries()){let h=e+IP[d],p=o.field===d,$=p?at:P;if(p)t[h]?.put(n,"▶",s,void 0,{kind:"field",field:d});t[h]?.put(n+2,f,$,void 0,{kind:"field",field:d});let g;if(d===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(d===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),P]]),t[h]?.mark(n+12,c,{kind:"track",field:d})}if(t[h]?.right(r-2,[[g,$]]),xP(i,d))t[h]?.put(r-1,"↺",p?at+s:P)}}function TP(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 zh(t,e=t.site,n=t.siteAnsi){return[` ${e} `,`\x1B[7;${30+n}m`]}function fa(t){return`${Y[Math.floor(t/cr)]?.name??"local"} ${t%cr}`}function da(t,e,n){let r=Y[Math.floor(e/cr)],i=fa(e),s=t.indexOf(i);if(!r||s===-1)return[[t,n]];return[[t.slice(0,s),n],...Pi(i,n,r.pageUrl(e%cr),Wr(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?zh(n,a):[` ${a} `,P],l=[c,u,void 0,{kind:"site",tab:o}];return o?[[" ",""],l]:[l]}),i=r.reduce((s,[o])=>s+dt(o),0)<=e;t.run(0,i?r:[zh(n)])}function HP(t,e,n,r){if(n.chips.length===0)return;let i=[["tags ",P]],s=dt("tags "),o=n.chips.length;for(let[a,c]of n.chips.entries()){let u=` ${a+1} ${c.name} `;if(s+dt(u)+1>e-2)break;i.push([u,c.on?`\x1B[7m${r}`:P,void 0,{kind:"chip",index:a}],[" ",""]),s+=dt(u)+1,o--}if(o>0)i.push([`+${o}`,P]);t.run(0,i)}function AP(t,e,n,r,i){t[ce-1]?.put(0,"─".repeat(n-1),P);let s=t[ue.top-1],o=Yh(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,d=u.up?at:"";if(s.run(l+1,u.page?Pi(String(u.id),d,u.page,Wr(u.ansi)):[["● ",Wr(u.ansi)],[String(u.id),d]]),u.up)for(let f=0;f<ue.rows;f++)t[ue.top+f]?.put(l,"▌",i);if(u.thumb)e.push({id:fP+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 FP(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=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(" ")}`,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 dy(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 ry(t){return t.site==="all"?"any site":t.site}function Dh(t,e){if(t.installing!==void 0)return da(`${Js(t)} Installing ${t.palette} ← ${fa(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 da(`${Js(t)} Fetching ${fa(n)} · ${ku(r,i)}`,n,Jt)}if(t.cutting!==void 0)return da(`${Js(t)} Cutting out ${fa(t.cutting)}`,t.cutting,Jt);if(t.preparing!==void 0)return da(`${Js(t)} Preparing ${fa(t.preparing)}`,t.preparing,Jt);if(e)return[e];if(t.saved)return da(t.saved.text,t.saved.key,Di);if(t.note)return[[t.note,P]];return}function fy(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 hy(t,e){return t.ranking?`${e}${t.ranking.done}/${t.ranking.total}`:""}function CP(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)),d=Gu(r)%(ty*2)/ty,f=Math.round((n-l)*(0.5-0.5*Math.cos(Math.PI*(d<1?d:2-d)))),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>=f&&y<f+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 LP(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)/gP),c=e+(n>=5?Math.floor((n-5)/2):0);t[c]?.center(r,[[fy(i),at+Ys(Gt(s,o,a))],[hy(i," "),Ys(Gt(s,Gt(o,s,0.45),a))]]);let u=Math.min(pP,r-8);if(CP(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:d},f)=>[...f?[[" · ",Ys(Gt(s,o,0.25*a))]]:[],[l,Ys(Gt(s,d?Gt(o,s,0.2):o,d?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 GP(t,e,n){if(e)return[`${Js(t)} ${fy(t)}${hy(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 _P(t,e,n,r,i,s,o){let{perRow:a,rowsVis:c,height:u}=zn(r,i);FP(t[0],r,s,o),PP(t[1],r,s),HP(t[2],r,s,o),AP(t,e,r,s,o);let l=t.map((F,j)=>j>=ce&&j<ce+u?F:void 0),d=Math.floor(s.scroll/gt.height),f=Math.floor((s.scroll+u-1)/gt.height),h=[];for(let F=d;F<=f;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)TP(l,j,U,gt.height,gt.pitch-1,o);let Jn=j+1,Je=Math.max(Jn,ce),Ve=Math.min(Jn+gt.rows,ce+u);if(Z.thumb&&Ve>Je)e.push({id:Z.key,path:Z.thumb,row:Je,col:U+1,cols:gt.cols,rows:Ve-Je,...Ve-Je<gt.rows?{crop:Je-Jn}:{},z:-1});let Ze=[...s.installed.includes(Z.key)?[["✓ ",Di]]:[],...Z.page||s.site!=="all"?Pi(String(Z.id),tt?at:"",Z.page||void 0,Wr(Z.siteAnsi)):[["● ",Wr(Z.siteAnsi)],[String(Z.id),tt?at:""]],[" ",""],ly(Z)],Ta=gt.cols-(Z.mates.length>0?1:0);if(l[j+10]?.run(U+1,Kh(Ze)>Ta?Ze.map(([gl,bl,wl])=>[gl.replace(/^(\S) $/,"$1"),bl,wl]):Ze),Z.mates.length>0)l[j+10]?.put(U+gt.cols,"≈",o);l[j+11]?.put(U+1,Z.artist?$P(Z.artist).slice(0,gt.cols-8):"—",P);let Dr=[];if(Z.score>0)Dr.push([`★${Z.score}`,P]);if(Z.variants>1)Dr.push([` ×${Z.variants}`,o]);if(Dr.length>0)l[j+11]?.right(U+gt.cols+1,Dr)}}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)LP(l,$,g,r-1,s);let y=s.searching&&s.tiles.length===0;if(y&&!s.error){let[F,j]=ey[Math.floor(Gu(s)/bP)%ey.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 ${ry(s)} — c searches every post, tab tries ${s.nextSite}`:`No posts of ${s.tag} on ${ry(s)} — tab tries ${s.nextSite}`,P);let N=GP(s,b,h),R=Dh(s,N);return ha(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 BP(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=[zh(i,o.site,o.siteAnsi),[" ",""],...Pi(String(o.id),at,o.page||void 0,Wr(o.siteAnsi)),[" ",""],ly(o)];if(o.score>0)c.push([` · ★${o.score}`,P]);if(a)c.push([` · ${$u(a.bytes)}`,P]);if(a){if(c.push([" ",""],...dy(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(EP(t,1,2,i,s),i.tuning)RP(t,8,2,2+Math.min(n-4,60),i,s);else if(i.details)MP(t,5,2,Math.min(n-4,Math.max(48,Math.floor(n*0.55))),r-2,i);else vP(t,7,2,n-4,r-2,i,s);if(i.shown)e.push({id:qh+i.shown.id,path:i.shown.path,row:0,col:0,cols:n,rows:r,z:hP});if(i.tuning){ha(t[r-1],n,s,{badge:"IMAGE EDIT",lead:Dh(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=Dh(i);ha(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"]],UP={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"]]},Vh=6,KP=24;function ma(t){return[...t.settings.flatMap((e,n)=>Boolean(e.advanced)===t.advanced?[n]:[]),t.settings.length]}function zP(t){return t.replace(/^[A-Z](?=[a-z])/,(e)=>e.toLowerCase())}function iy(t){let e=t.settings.filter((n)=>Boolean(n.advanced)!==t.advanced).map((n)=>zP(n.label));return`${t.advanced?"Back to":"More filters:"} ${e.join(", ")} — enter opens the page, or a from any row`}function my(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&&dt(r)+1+dt(i)>e)n.push(r),r=i;else r=r?`${r} ${i}`:i;return r?[...n,r]:n}function DP(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 qP(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:DP(t)).map((c,u)=>{let l=o.includes(c),d=t.multi&&e&&u===t.cursor?"4;":"";return{text:t.multi?` ${l?"[x]":"[ ]"} ${c} `:` ${c} `,sgr:l?e?`\x1B[${d}7;${30+r}m`:"":d?`\x1B[4m${P}`:P,choice:c}});return s?[...a,{text:` ${n}█ `,sgr:i}]:a}function sy(t){if(t.entry==="text")return[{text:" ".repeat(KP),sgr:""}];let e=t.choices.map((n)=>({text:t.multi?` [x] ${n} `:` ${n} `,sgr:""}));return t.entry==="number"?[...e,{text:` ${"0".repeat(Vh)}█ `,sgr:""}]:e}function YP(t){return t.reduce((e,n)=>e+dt(n.text)+1,0)-1}function oy(t,e){let n=[[]],r=0;for(let i of t){let s=dt(i.text)>e?{...i,text:` …${Array.from(i.text).slice(-(e-2)).join("")}`}:i;if(r>0&&r+dt(s.text)>e)n.push([]),r=0;n[n.length-1]?.push(s),r+=dt(s.text)+1}return n}function ay(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 cy(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 JP(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 VP(t,e,n,r,i){let s=r.panel??0,o=r.settings.length,c=6+Math.max(...r.settings.map((W)=>dt(W.label))),u=Math.max(...r.settings.map((W)=>dt(ay(W)))),l=c+Math.max(...r.settings.map((W)=>YP(sy(W))))+u+5,d=Math.min(e-2,Math.max(48,l)),f=d-c-u-5,h=d-7,p=[!1,!0].map((W)=>({advanced:W,rows:ma({settings:r.settings,advanced:W}).slice(0,-1)})),$=r.settings.map((W)=>oy(sy(W),f).length),g=Math.max(...p.map((W)=>W.rows.reduce(($t,tt)=>$t+$[tt],0))),b=Math.max(...p.map((W)=>Ri(iy({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(cy(r),h).length):0,E=g+b+S+8,I=Math.floor((e-d)/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,d-13))}╮`);for(let W=N+1;W<N+E-1;W++)t[W]?.put(I,`│${" ".repeat(d-2)}│`);let F=N+2;for(let W of ma(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+d-3,[[ay($t),P]]);oy(qP($t,tt,r.typing,r.siteAnsi),f).forEach((Jn,Je)=>{let Ve=I+c;for(let Ze of Jn)Ve=t[F+Je].put(Ve,Ze.text,Ze.sgr,void 0,{kind:"choice",index:W,choice:Ze.choice}),Ve+=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(d-4),P),Ri(r.settings[s]?.about??iy(r),h).forEach((W,$t)=>{t[N+6+g+$t]?.put(I+4,W)}),Ri(cy(r),h).forEach((W,$t)=>{t[N+6+g+b+$t]?.put(I+4,W,P)}),t[N+E-1]?.put(I,`╰${"─".repeat(d-2)}╯`);let{keys:U,right:Z}=JP(r,r.settings[s]);ha(t[n-1],e,i,{keys:U,right:Z})}function ZP(t,e,n,r,i){let s=r.tuning?WP:UP[r.mode],o=Math.min(e-2,Math.max(50,...s.map(([,f])=>dt(f)+16))),a=s.map(([f,h])=>({label:f,parts:Ri(h,o-16)})),c=a.reduce((f,{parts:h})=>f+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 f=l+1;f<l+c-1;f++)t[f]?.put(u,`│${" ".repeat(o-2)}│`);let d=l+2;for(let{label:f,parts:h}of a){t[d]?.put(u+3,f,at);for(let p of h)t[d]?.put(u+13,p),d++}t[l+c-1]?.put(u,`╰${"─".repeat(o-2)}╯`),ha(t[n-1],e,i,{badge:"HELP",right:["? esc","close"]})}function QP(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)=>dt(a.value))),o=Math.max(7,...i.map(dt));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 Zh(t,e,n){let r=Array.from({length:n},()=>new Cu(e)),i=[],s=[],o=Ys(t.colors.cursor);if(Wh=!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")BP(r,i,e,n,t,o);else a=_P(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 QP(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)ZP(r,e,n,t,o);else VP(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:Wh}}import{execFile as XP}from"node:child_process";import{createHash as wy}from"node:crypto";import{existsSync as tH,mkdtempSync as eH,readFileSync as Uu,rmSync as nH,statSync as $y,writeFileSync as ky}from"node:fs";import{homedir as rH,tmpdir as iH}from"node:os";import{join as _u}from"node:path";import{fileURLToPath as sH}from"node:url";import{promisify as oH}from"node:util";var bn=oH(XP),Bu=67108864,aH=4096,tm=["image/png","image/jpeg","image/webp","image/gif","image/tiff","image/heic"],cH=["text/uri-list","text/plain;charset=utf-8","text/plain"],Qh=[...tm,"text/uri-list","text/plain"];function uH(t){try{return $y(t).isFile()}catch{return!1}}function lH(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 py(t){if(/^file:\/\//i.test(t))try{return sH(t)}catch{return}if(t.startsWith("~/"))return _u(rH(),t.slice(2));return t.startsWith("/")?t:void 0}function Vs(t,e=uH){let n=[];for(let r of t.replace(/\r\n?/g,`
|
|
649
|
+
Every push is the market: \`ttheme market add ${s}\` works anywhere`)}async function Yk(t,e){switch(t){case void 0:XT();return;case"add":await VT(Lk(t,e));return;case"remove":ZT(Lk(t,e));return;case"search":await tP(e);return;case"init":await nP(e);return;default:throw Error(`unknown market action ${t} — ${zT.join(", ")}, or none to list them`)}}function Lk(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 Jk(t,e){let n=Us(t,e);return`${n} — ${Tt(An(e,n,Nu(t),se(!1)).length)}, read in place`}var rP=new Intl.Segmenter(void 0,{granularity:"grapheme"});function Vk(t){return[...t].length===1&&t>=" "&&t!==""}function iP(t){return[...t.replace(/[\r\n\t]+/g," ")].filter(Vk).join("")}function Ti(t,e,n=()=>!0){if(e==="backspace")return[...rP.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 Vk(e)&&n(e)?t+e:void 0}class Gr{value;constructor(t=""){this.value=t}key(t){let e=Ti(this.value,t);if(e===void 0)return!1;return this.value=e,!0}paste(t){this.value+=iP(t)}}import{performance as sP}from"node:perf_hooks";import{StringDecoder as oP}from"node:string_decoder";var aP=30,Zk=50,cP=500,uP=5,Qk=Buffer.from("\x1B[M"),Tu="\x1B]1337;ReportCellSize\x07\x1B[16t\x1B[14t\x1B[18t",iy={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"},lP={"\r":"enter","\n":"enter","\t":"tab","\b":"backspace","":"backspace","\x1B":"esc","\x00":"ctrl-space"},Xk=/\[([0-?]*)([ -/]*)([@-~])/y,fP=/^\[[0-?]*[ -/]*$/,ty=/\](\d+)/y,dP=/^\]\d*$/,ey=/\]\d+;/y,hP=/^1337;ReportCellSize=([\d.]+);([\d.]+)(?:;([\d.]+))?$/,sy="\x1B[200~",Ru="\x1B[201~";function Dh(t){let e=lP[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 Ws(t){return{kind:"key",key:t}}function Ks(t){return{events:[Ws("esc")],end:t+1}}function mP(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 pP=["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=pP[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 gP(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 bP(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===""?iy[`${t}${n}`]:void 0;return r?[Ws(r)]:[]}function wP(t,e,n){Xk.lastIndex=e+1;let r=Xk.exec(t);if(!r)return!n&&fP.test(t.slice(e+1))?void 0:Ks(e);let[i,s="",o="",a=""]=r,c=e+1+i.length;if(s===""&&o===""&&a==="M")return gP(t,c,n);if(s==="200"&&a==="~"){let u=t.indexOf(Ru,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+Ru.length}}return{events:bP(s,o,a),end:c}}function $P(t){let e=hP.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:mP(r),payload:i.join(";")}]}function kP(t,e,n){ty.lastIndex=e+1;let r=ty.exec(t),i=r?t[e+1+r[0].length]:void 0;if(i!==";"&&i!=="\x07"&&i!=="\x1B")return!n&&dP.test(t.slice(e+1))?void 0:Ks(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:$P(t.slice(e+2,o)),end:o+(t[o]==="\x07"?1:2)}}function yP(t,e,n){let r=t[e+2];if(r===void 0)return n?Ks(e):void 0;if(!/^[A-Za-z]$/.test(r))return Ks(e);let i=iy[r];return{events:i?[Ws(i)]:[],end:e+3}}function vP(t,e,n){let r=t[e+1];if(r===void 0)return n?Ks(e):void 0;if(r==="[")return wP(t,e,n);if(r==="]")return kP(t,e,n);if(r==="O")return yP(t,e,n);if(r==="")return{events:[Ws("alt-backspace")],end:e+2};if(/^[a-z]$/.test(r))return{events:[Ws(`alt-${r}`)],end:e+2};return Ks(e)}function ny(t,e=!1){let n=[],r=0;while(r<t.length){if(t[r]==="\x1B"){let o=vP(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=Dh(i);if(s)n.push(Ws(s));r+=i.length}return{events:n,rest:""}}function SP(t){let e=t.indexOf(Qk);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(Qk,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 ry(t){return ey.lastIndex=1,t.startsWith(sy)||t.startsWith("\x1B]")&&ey.test(t)}function EP(t,e){let n=t.slice(-Ru.length)+e;return t.startsWith(sy)?n.includes(Ru):n.includes("\x07")||n.includes("\x1B\\")}class qh{held="";timer;carry;pressed;wheeled;utf8=new oP("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=sP.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<uP)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<=cP;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(Zk);if(!this.held&&!e.includes("\x1B")&&this.burst(e)){this.take([{kind:"paste",text:e}]);return}if(ry(this.held)&&!EP(this.held,e)){this.held+=e;return}let{events:n,rest:r}=ny(this.held+e);if(this.held=r,r&&!ry(r))this.wait(r.length===1?aP:Zk);if(n.length>0)this.take(n)}bytes(t){let{bytes:e,carry:n}=SP(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}=ny(this.held,!0);if(this.held="",t.length>0)this.take(t)}stop(){clearTimeout(this.timer),this.held="",this.carry=void 0}}class ia{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 Au={on:"\x1B[?1049h",off:"\x1B[?1049l"},zn={on:"\x1B[?25l",off:"\x1B[?25h"},Pi={on:"\x1B[?7l",off:"\x1B[?7h"},Br={on:"\x1B[?2004h",off:"\x1B[?2004l"},ly={on:"\x1B[?1004h",off:"\x1B[?1004l"},MP={on:"\x1B[?1000h\x1B[?1002h\x1B[?1006h",off:"\x1B[?1006l\x1B[?1002l\x1B[?1000l"};function Ds(t=process.env){return t.TTHEME_MOUSE==="off"?[]:[MP]}var fy={SIGHUP:1,SIGINT:2,SIGQUIT:3,SIGTERM:15},OP=3000;class oa extends Error{exit;constructor(t){super(t);this.exit=128+fy[t]}}var gn=[],zs=new Map,sa=new Map;function ay(t){return gn.findLast((e)=>e.input===t)}var cy;function dy(t){for(let e of[...gn].reverse())e.abort(t);if(!cy)cy=setTimeout(()=>{hy(),process.exit(t instanceof oa?t.exit:1)},OP).unref()}var IP=Object.fromEntries(Object.keys(fy).map((t)=>[t,()=>dy(new oa(t))]));function hy(){for(let t of[...gn].reverse())t.close()}function xP(){for(let t of gn)t.reassert();gn.at(-1)?.redraw()}function uy(t){let e=t?"on":"off";for(let[n,r]of Object.entries(IP))process[e](n,r);if(process[e]("uncaughtException",dy),process[e]("exit",hy),process.platform!=="win32")process[e]("SIGCONT",xP)}function Pu(){}class my{input;output;failed;modes=[];assumed;owned=[];keys;tty;take;resized;queued=[];asking;reject=Pu;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 qh((r)=>this.deliver(r),t.burst),this.failed=new Promise((r,i)=>{this.reject=i}),this.failed.catch(Pu),this.tty&&!gn.some((r)=>r.tty))uy(!0);gn.push(this);let e="";for(let r of this.assumed)if(!zs.has(r))e+=r.on;for(let r of t.modes??[])e+=this.claim(r);this.write(e);let n=sa.get(this.input)??0;if(n===0)this.input.setRawMode?.(!0);sa.set(this.input,n+1),this.input.on("data",this.received),this.input.resume(),this.output.on("resize",this.resizing),this.output.on("error",Pu)}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=(zs.get(n)??1)-1;if(r===0)zs.delete(n),t+=n.off;else zs.set(n,r)}this.write(t),this.open=!1;let e=(sa.get(this.input)??1)-1;if(e===0)sa.delete(this.input),this.input.setRawMode?.(!1),this.input.pause();else sa.set(this.input,e);if(this.output.off("error",Pu),gn.splice(gn.indexOf(this),1),this.tty&&!gn.some((n)=>n.tty))uy(!1)}received=(t)=>{if(ay(this.input)===this&&!this.aborted)this.keys.feed(t)};resizing=()=>{if(ay(this.input)===this)this.resized?.()};claim(t){this.modes.push(t);let e=zs.get(t)??0;if(zs.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 my(t);try{return await e(n)}finally{n.close()}}var NP=3;function aa(t,e){return`${t}/${e}`}function py(t){return ct(t.name)?dr(t.name):t.name}function qs(t){return t.catalog!==void 0&&by(t.group)?aa(t.group,t.catalog):void 0}function Yh(t){if(t?.kind==="palette")return`palette ${t.entry.name}`;if(t?.kind==="group")return`group ${t.name}`;if(t?.kind==="catalog")return`catalog ${aa(t.group,t.name)}`;return t?.kind??""}function Hu(t,e){return li([t.name,t.group,t.native??"",t.catalog??"",...t.nativeNames??[],...dc(t.booru)],e)}function gy(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)=>Hu(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)=>qs(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(aa(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)=>qs(d)===void 0).map(o))}return i}function RP(t,e){let n=e.trim(),r=new Set(t.filter((i)=>!i.default&&(n===""||Hu(i,n))).map((i)=>i.group));return gy(t,new Set,"").filter((i)=>i.kind==="group"&&r.has(i.name))}function by(t){return t.includes("@")}function Jh(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 Fu(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 TP(t){let e=t.findIndex((n)=>n.kind==="group"&&by(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 PP(t){let e=t.findIndex((n)=>n.kind==="palette");return e===-1?0:e}function Cu(t){return t==="decode"||t==="glitch"?t:"typewriter"}function Ys(t,e,n){return ae({kind:"row",at:t,part:e},n)}class ca{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+py(e).length))}indent(t){return qs(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=qs(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===""||Hu(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)=>Hu(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"?RP(this.entries,this.filter):gy(this.entries,this.expanded,this.filter);this.rows=n.length>0?TP([{kind:"all",count:this.allCount(n)},...n]):[];let r=n.length>0?this.rows.indexOf(n[PP(n)]):0;if(t==="first")this.cursor=r;else if(t==="keep"||t==="stay"){let i=Yh(e),s=e?.kind==="palette"||t==="stay"?this.rows.findIndex((o)=>Yh(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=Jh(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)=>Yh(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(aa(e.group,e.name));else if(!t)this.reach(`group ${e.group}`)}else if(e?.kind==="palette"&&!t&&!e.entry.default){let n=qs(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 Ys(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}${he}`:S,o=(S)=>this.color?`${at}${S}${he}`:S,a=(S)=>this.color?` ${Fp(cc(S),i?Ce(S.foreground):"\x1B[39m")}`:"",c=n?i?`${Ce(r.cursor)}▌\x1B[39m `:"▌ ":" ",u=(S)=>i?`${c}${Ha(r.selection,r.foreground)} ${S} ${Pt}`:`${c} ${S}`,l=(S)=>Ys(e,"box",`${S?"●":"○"} `),f=(S)=>Ys(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}${Ce(d.entry.cursor)}${E}${he}\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"&&qs(d.entry)===aa(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=py(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 Vh(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 Lu{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 AP=5;class Zh{picked;list;scope;color;required;most;hint;field=new Gr;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 ca({entries:t.entries,picked:this.picked,scope:this.scope,maxItems:this.most,color:this.color,...t.onFocus?{onFocus:t.onFocus}:{}}),this.hint=new Lu(t.fx??"typewriter",()=>Vh(this.list),()=>this.redraw())}prompt(){return _r({input:this.input,output:this.output,modes:[zn,Br]},async(t)=>{let e=new vh((r)=>t.write(r),()=>t.cols),n=()=>{return this.list.maxItems=Math.max(NP,Math.min(this.most,t.rows-AP)),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=Fu(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?`${Fa}${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 Js=[{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"}],Qh=34,HP=72,FP=94,CP=22,wy=40,$y=10,ky=3,LP=600,jP=500,GP=300,yy=12,BP="\x1B[7;1m",Xh={title:"",lines:[],brief:""};function ua(t){let e=t.trim();if(e!==q&&!e.includes("/")&&!e.startsWith("~"))return;try{return hi(e)}catch{return}}function _P(t){return t.charAt(0).toUpperCase()+t.slice(1)}class tm{picked;tab="catalog";fields={catalog:new Gr,installed:new Gr,markets:new Gr,errors:new Gr};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 ca({entries:e,picked:this.picked,color:this.color,maxItems:this.maxItems,onFocus:(n)=>this.focus("catalog",n)}),this.mine=new ca({entries:this.mineOf(e),picked:this.picked,color:this.color,maxItems:this.maxItems,onFocus:(n)=>this.focus("installed",n)}),this.hint=new Lu(t.fx??"typewriter",()=>Vh(this.tab==="installed"?this.mine:this.catalog),()=>this.redraw());for(let n of t.due)this.update(n)}run(){let t=[...this.owns?[Au,zn,Pi]:[],Br,...Ds()],e=this.owns?[]:[zn,Pi];return _r({input:this.input,output:this.output,modes:t,assume:e},async(n)=>{let r=new xi({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=Fu(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(p0(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(g0(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",LP,()=>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=Js.findIndex((n)=>n.tab===this.tab);this.show(Js[(e+t+Js.length)%Js.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]=Jh(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)=>Es(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=ua(this.fields.markets.value);if(t&&this.wants(t))this.later("typed",jP,()=>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",GP,()=>{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&&!ua(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)=>li(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=ua(this.fields.markets.value);if(r&&!e.some((s)=>Es(s.source,r)))n.push({kind:"add",source:r});let i=(this.repos??[]).map((s)=>({repo:s,source:Kh(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)=>li([`${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)=>Ys(l,"row",d))}),above:a,below:t.length-a-c.length}}dim(t){return this.color?`${P}${t}${he}`:t}bold(t){return this.color?`${at}${t}${he}`:t}warn(t){return this.color?`${Jt}${t}\x1B[39m`:t}lit(t,e,n){if(e&&this.color&&t)return`${Ce(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?Tt(e.entries.filter((n)=>!n.default).length):""}marketLine(t,e,n){let r=(s)=>Ys(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,Tt(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 ${et(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&&!ua(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:Fu(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(ky,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(`
|
|
650
|
+
`)),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,Tt(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??et(e),r.length>0?`its ${Tt(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(cd(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(`
|
|
651
|
+
`)}keyBar(t,e){let n=this.color&&this.worn?Ce(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(ae({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 Js.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 ae(i,t===this.tab?`[${r}]`:` ${r} `);return`${t===this.tab?BP:P}${ae(i,` ${r} `)}${Pt}`}).join(" ")}heading(){let t=Js.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=ae({kind:"chip",source:n[c+b]?.source},g);if(c+b===r)return this.color?`${at}${Fa}${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 Xh;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=`${Tt(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=`${Tt(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=Fo(n),s=`Gate ${pe.length-i.length}/${pe.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}${Ce(n.cursor)}${n.name}${he}\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 Xh;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=`${Tt(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)??_P(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 palettes…":"space fetches its palettes");return{title:this.bold(et(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 ${vs} topic`,e),...i&&!ua(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,yy).map((s)=>dr(s.name)).join(", ")}${r.length>yy?", …":""}`;return["",n.id,Tt(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}:Xh}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(ky,this.rows()-t);this.maxItems=e,this.catalog.maxItems=e,this.mine.maxItems=e}view(){let t=this.draw().split(`
|
|
652
|
+
`);return Array.from({length:this.rows()},(e,n)=>t[n]??"")}draw(){let t=this.columns(),e=this.rows();if(t<wy||e<$y)return`Needs ${wy}×${$y} — now ${t}×${e}
|
|
653
|
+
${this.dim("esc cancels")}`;if(this.phase!=="browse")return this.frame(t,e);let n=t>=FP,r=t-1,i=n?Math.min(t-Qh-4,HP):r,s=this.strip(r-1),o=[` ${this.tabBar()}`,...e>=CP?[` ${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?Qh:i-2),p=n?d.map((g,b)=>`${ot(g,i)} ${this.dim("│")} ${ot(b===0?h.title:h.lines[b-1]??"",Qh,!1)}`):[...d.map((g)=>ot(g,i,!1)),ot(` ${this.dim(h.brief)}`,i,!1)],$=[...this.hub?[ot(cd(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(`
|
|
654
|
+
`)}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:`${Cp(l,o)}${d}`})}}import{existsSync as hC}from"node:fs";import{existsSync as Oa,mkdirSync as iC,readFileSync as Wm}from"node:fs";import{dirname as sC}from"node:path";class Oe extends Error{}import{closeSync as xH,mkdtempSync as NH,openSync as RH,readSync as TH,rmSync as kv}from"node:fs";import{homedir as PH,tmpdir as AH}from"node:os";import{join as yv}from"node:path";import{readFileSync as UP}from"node:fs";var gt={pitch:25,cols:22,rows:9,height:13},Hi={cols:25,rows:21},fe={cols:10,rows:3,pitch:12,top:4},le=fe.top+fe.rows+1,WP=1073741824,am=2147483648,KP=-1073741826,zP=1600,DP=56,qP=4,vy=20,YP=50,Sy=[["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 cm(t){return Math.max(0,Math.floor((t-1)/fe.pitch))}function Dn(t,e){let n=e-le-2;return{perRow:Math.max(1,Math.floor((t-1)/gt.pitch)),rowsVis:Math.max(1,Math.floor(n/gt.height)),height:n}}function _u(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=UP(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 Ty(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 um(t){return`\x1B_Ga=d,d=i,i=${t},p=${t},q=2\x1B\\`}function ma(t){return`\x1B_Ga=d,d=I,i=${t},q=2\x1B\\`}function Vs(t){return`\x1B[38;2;${rt(t).join(";")}m`}function Bu(t){return`\x1B[48;2;${rt(t).join(";")}m`}var nm=!1;function Uu(t){return nm=!0,t.beat}function Zs(t){return Sn[Uu(t)%Sn.length]}function ft(t){return Q(t)}function rm(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 Ur(t){return`\x1B[${30+t}m`}function Fi(t,e,n,r){return n?[[`${oo} `,r,void 0,{kind:"link",url:n}],[t,e,n]]:[[t,e]]}function em(t){let e=ad(t);return e?{kind:"key",key:e}:void 0}function im(t){return t.reduce((e,[n])=>e+ft(n),0)}function JP(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([`${rm(i,r)}…`,s,o,a]);break}return n}class Gu{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(rm(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=rm(n,this.cols-e);t+=`\x1B[${e+1}G${r}${Ca(o,i)}${r?Pt:""}`}return t}}function VP(t){return t.replace(/_\([^)]*\)?$/,"")}function Py(t){return[`${t.reduced?"↓":""}${t.width}×${t.height}`,Math.max(t.width,t.height)<zP?Jt:P]}function da(t,e,n,r){let i=[...r.keys??[]],s=r.lead,o=r.right,a=()=>{let l=[...s?[im(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=JP(s,Math.max(0,im(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,em(l)],[` ${f}`,P,void 0,em(l)]])].forEach((l,f)=>{c=t.run(c+(f?3:0),l)}),o){let l=em(o[0].split(" ")[0]??"");t.right(e,[[o[0],at,void 0,l],[` ${o[1]}`,P,void 0,l]])}}function ZP(t,e){if(t==="d")return P;if(t==="b")return at;if(t==="s")return Bu(e.colors.selection);if(t==="c")return Bu(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 QP(t,e,n,r,i){let s=te.indexOf(gi(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:[[gi(r.scene).name,at+i],[` ${s+1}/${te.length}`,P]])}function XP(t,e,n,r,i,s,o){let{ansi:a,cursor:c}=s.colors;QP(t[e-2],n,r,s,o);let u=r<W0?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),Vs(a[d]??c)+Bu(a[d+8]??c))??l)+1;let f=e+2;for(let d of gi(s.scene).lines){let h=_c(d,r);if(!h)continue;if(f>i)return;t[f]?.run(n,h.map(([p,$])=>[p,ZP($,s)])),f++}}function tA(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 Ey(t){return t.replace(/^https?:\/\/(?:www\.)?/,"")}function eA(t,e,n,r,i){let s=r.info,o=s?.artists??[],a=Ur(r.tiles[r.focus]?.siteAnsi??r.siteAnsi);[["Post",s?.page?Fi(Ey(s.page),"",s.page,a):[["—",P]]],["Source",s?.source?Fi(Ey(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 nA(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?[vu(c.bytes)]:[]].join(" · "),d=[o.rating??"—",a.score>0?`★${a.score}`:"",o.posted??""].filter(Boolean).join(" · "),h=(g,b)=>g.length>0?tA(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?Ay(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 rA=["Size","Position","Opacity"],iA=[0,3,6];function sA(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 oA(t){return t.toFixed(2)}function aA(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],...Fi(`${a.site} ${a.id}`,P,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 rA.entries()){let h=e+iA[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=Bt[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=oA(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,$]]),sA(i,f))t[h]?.put(r-1,"↺",p?at+s:P)}}function cA(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 sm(t,e=t.site,n=t.siteAnsi){return[` ${e} `,`\x1B[7;${30+n}m`]}function fa(t){return`${Y[Math.floor(t/ur)]?.name??"local"} ${t%ur}`}function la(t,e,n){let r=Y[Math.floor(e/ur)],i=fa(e),s=t.indexOf(i);if(!r||s===-1)return[[t,n]];return[[t.slice(0,s),n],...Fi(i,n,r.pageUrl(e%ur),Ur(r.ansi)),[t.slice(s+i.length),n]].filter(([a])=>a!=="")}function uA(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?sm(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:[sm(n)])}function lA(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 fA(t,e,n,r,i){t[le-1]?.put(0,"─".repeat(n-1),P);let s=t[fe.top-1],o=cm(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*fe.pitch,f=u.up?at:"";if(s.run(l+1,u.page?Fi(String(u.id),f,u.page,Ur(u.ansi)):[["● ",Ur(u.ansi)],[String(u.id),f]]),u.up)for(let d=0;d<fe.rows;d++)t[fe.top+d]?.put(l,"▌",i);if(u.thumb)e.push({id:WP+c,path:u.thumb,row:fe.top,col:l+1,cols:fe.cols,rows:fe.rows,z:-1})}if(a<r.held.length)s.put(a*fe.pitch+1,`+${r.held.length-a}`,P)}function dA(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=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(" ")}`,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 Ay(t){if(t.cut==="on")return[[`Cut out · ${t.clear}% transparent`,Ji]];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`,Ji]:["Opaque",Jt]]}function My(t){return t.site==="all"?"any site":t.site}function om(t,e){if(t.installing!==void 0)return la(`${Zs(t)} Installing ${t.palette} ← ${fa(t.installing)}`,t.installing,Jt);if(t.hint)return[[t.hint,Ji]];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 la(`${Zs(t)} Fetching ${fa(n)} · ${Su(r,i)}`,n,Jt)}if(t.cutting!==void 0)return la(`${Zs(t)} Cutting out ${fa(t.cutting)}`,t.cutting,Jt);if(t.preparing!==void 0)return la(`${Zs(t)} Preparing ${fa(t.preparing)}`,t.preparing,Jt);if(e)return[e];if(t.saved)return la(t.saved.text,t.saved.key,Ji);if(t.note)return[[t.note,P]];return}function Hy(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 Fy(t,e){return t.ranking?`${e}${t.ranking.done}/${t.ranking.total}`:""}function hA(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=Uu(r)%(vy*2)/vy,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),Bu($[g])),g=b}function mA(t,e,n,r,i){let{background:s,foreground:o}=i.colors,a=i.loaderFrom===void 0?0:Math.min(1,(Uu(i)-i.loaderFrom)/qP),c=e+(n>=5?Math.floor((n-5)/2):0);t[c]?.center(r,[[Hy(i),at+Vs(Gt(s,o,a))],[Fy(i," "),Vs(Gt(s,Gt(o,s,0.45),a))]]);let u=Math.min(DP,r-8);if(hA(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?[[" · ",Vs(Gt(s,o,0.25*a))]]:[],[l,Vs(Gt(s,f?Gt(o,s,0.2):o,f?a:0.32*a))]]))}function pA(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[le+c]?.put(e-1,u?"┃":"│",u?s:P)}}function gA(t,e,n){if(e)return[`${Zs(t)} ${Hy(t)}${Fy(t," · ")}`,P];let r=n.filter((s)=>!s.missing),i=r.filter((s)=>s.thumb).length;return i<r.length?[`${Zs(t)} Loading thumbnails · ${i}/${r.length}`,P]:void 0}function bA(t,e,n,r,i,s,o){let{perRow:a,rowsVis:c,height:u}=Dn(r,i);dA(t[0],r,s,o),uA(t[1],r,s),lA(t[2],r,s,o),fA(t,e,r,s,o);let l=t.map((F,j)=>j>=le&&j<le+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=le+F*gt.height-s.scroll;for(let _=0;_<a;_++){let X=F*a+_,W=_*gt.pitch,Z=s.tiles[X];if(!Z)continue;h.push(Z);let U=Math.max(j,le),$t=Math.min(j+gt.height,le+u);if($t>U)n.push({row:U,col:W,width:gt.pitch-1,height:$t-U,target:{kind:"tile",index:X}});let tt=X===s.focus;if(tt)cA(l,j,W,gt.height,gt.pitch-1,o);let Vn=j+1,Je=Math.max(Vn,le),Ve=Math.min(Vn+gt.rows,le+u);if(Z.thumb&&Ve>Je)e.push({id:Z.key,path:Z.thumb,row:Je,col:W+1,cols:gt.cols,rows:Ve-Je,...Ve-Je<gt.rows?{crop:Je-Vn}:{},z:-1});let Ze=[...s.installed.includes(Z.key)?[["✓ ",Ji]]:[],...Z.page||s.site!=="all"?Fi(String(Z.id),tt?at:"",Z.page||void 0,Ur(Z.siteAnsi)):[["● ",Ur(Z.siteAnsi)],[String(Z.id),tt?at:""]],[" ",""],Py(Z)],Ra=gt.cols-(Z.mates.length>0?1:0);if(l[j+10]?.run(W+1,im(Ze)>Ra?Ze.map(([wl,$l,kl])=>[wl.replace(/^(\S) $/,"$1"),$l,kl]):Ze),Z.mates.length>0)l[j+10]?.put(W+gt.cols,"≈",o);l[j+11]?.put(W+1,Z.artist?VP(Z.artist).slice(0,gt.cols-8):"—",P);let Dr=[];if(Z.score>0)Dr.push([`★${Z.score}`,P]);if(Z.variants>1)Dr.push([` ×${Z.variants}`,o]);if(Dr.length>0)l[j+11]?.right(W+gt.cols+1,Dr)}}let p=Math.ceil(s.tiles.length/a)*gt.height;pA(t,r,s,u,p,o);let $=Math.max(le,le+p-s.scroll),g=le+u-$,b=s.searching&&g>=2;if(b)mA(l,$,g,r-1,s);let y=s.searching&&s.tiles.length===0;if(y&&!s.error){let[F,j]=Sy[Math.floor(Uu(s)/YP)%Sy.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[le+1]?.put(0,s.preset==="cutouts"?`No transparent cutouts of ${s.tag} on ${My(s)} — c searches every post, tab tries ${s.nextSite}`:`No posts of ${s.tag} on ${My(s)} — tab tries ${s.nextSite}`,P);let N=gA(s,b,h),R=om(s,N);return da(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 wA(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=[sm(i,o.site,o.siteAnsi),[" ",""],...Fi(String(o.id),at,o.page||void 0,Ur(o.siteAnsi)),[" ",""],Py(o)];if(o.score>0)c.push([` · ★${o.score}`,P]);if(a)c.push([` · ${vu(a.bytes)}`,P]);if(a){if(c.push([" ",""],...Ay(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(eA(t,1,2,i,s),i.tuning)aA(t,8,2,2+Math.min(n-4,60),i,s);else if(i.details)nA(t,5,2,Math.min(n-4,Math.max(48,Math.floor(n*0.55))),r-2,i);else XP(t,7,2,n-4,r-2,i,s);if(i.shown)e.push({id:am+i.shown.id,path:i.shown.path,row:0,col:0,cols:n,rows:r,z:KP});if(i.tuning){da(t[r-1],n,s,{badge:"IMAGE EDIT",lead:om(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=om(i);da(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 $A=[["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"]],kA={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"]]},lm=6,yA=24;function ha(t){return[...t.settings.flatMap((e,n)=>Boolean(e.advanced)===t.advanced?[n]:[]),t.settings.length]}function vA(t){return t.replace(/^[A-Z](?=[a-z])/,(e)=>e.toLowerCase())}function Oy(t){let e=t.settings.filter((n)=>Boolean(n.advanced)!==t.advanced).map((n)=>vA(n.label));return`${t.advanced?"Back to":"More filters:"} ${e.join(", ")} — enter opens the page, or a from any row`}function Cy(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 Ai(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 SA(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 EA(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:SA(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 Iy(t){if(t.entry==="text")return[{text:" ".repeat(yA),sgr:""}];let e=t.choices.map((n)=>({text:t.multi?` [x] ${n} `:` ${n} `,sgr:""}));return t.entry==="number"?[...e,{text:` ${"0".repeat(lm)}█ `,sgr:""}]:e}function MA(t){return t.reduce((e,n)=>e+ft(n.text)+1,0)-1}function xy(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 Ny(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 Ry(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 OA(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 IA(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(Ny(U)))),l=c+Math.max(...r.settings.map((U)=>MA(Iy(U))))+u+5,f=Math.min(e-2,Math.max(48,l)),d=f-c-u-5,h=f-7,p=[!1,!0].map((U)=>({advanced:U,rows:ha({settings:r.settings,advanced:U}).slice(0,-1)})),$=r.settings.map((U)=>xy(Iy(U),d).length),g=Math.max(...p.map((U)=>U.rows.reduce(($t,tt)=>$t+$[tt],0))),b=Math.max(...p.map((U)=>Ai(Oy({settings:r.settings,advanced:U.advanced}),h).length),...r.settings.map((U)=>Ai(U.about,h).length)),y=`${r.tag}: ${Y.map((U)=>`${U.name} 0,000,000`).join(" · ")}`,S=r.tag?Math.max(Ai(y,h).length,Ai(Ry(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 U=N+1;U<N+E-1;U++)t[U]?.put(I,`│${" ".repeat(f-2)}│`);let F=N+2;for(let U of ha(r).slice(0,-1)){let $t=r.settings[U],tt=U===s;if(tt)t[F]?.put(I+2,"▶",i);if(t[F]?.mark(I+2,c-3,{kind:"setting",index:U}),t[F]?.put(I+4,$t.label,tt?at:""),$t.value!==$t.default)t[F]?.right(I+f-3,[[Ny($t),P]]);xy(EA($t,tt,r.typing,r.siteAnsi),d).forEach((Vn,Je)=>{let Ve=I+c;for(let Ze of Vn)Ve=t[F+Je].put(Ve,Ze.text,Ze.sgr,void 0,{kind:"choice",index:U,choice:Ze.choice}),Ve+=1}),F+=$[U]}let j=p.find((U)=>U.advanced!==r.advanced)?.rows??[],_=t[N+3+g];if(s===o)_.put(I+2,"▶",i);let X=_.put(I+3,r.advanced?" ‹ Basic ":" Advanced › ",s===o?R:at,void 0,{kind:"setting",index:o});if(j.some((U)=>r.settings[U]?.value!==r.settings[U]?.default))_.put(X+1,"•",P);t[N+5+g]?.put(I+2,"─".repeat(f-4),P),Ai(r.settings[s]?.about??Oy(r),h).forEach((U,$t)=>{t[N+6+g+$t]?.put(I+4,U)}),Ai(Ry(r),h).forEach((U,$t)=>{t[N+6+g+b+$t]?.put(I+4,U,P)}),t[N+E-1]?.put(I,`╰${"─".repeat(f-2)}╯`);let{keys:W,right:Z}=OA(r,r.settings[s]);da(t[n-1],e,i,{keys:W,right:Z})}function xA(t,e,n,r,i){let s=r.tuning?$A:kA[r.mode],o=Math.min(e-2,Math.max(50,...s.map(([,d])=>ft(d)+16))),a=s.map(([d,h])=>({label:d,parts:Ai(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)}╯`),da(t[n-1],e,i,{badge:"HELP",right:["? esc","close"]})}function NA(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 ju(t,e=[]){return[...e,...t.flatMap((n,r)=>n.zones(r))]}function fm(t,e,n){let r=Array.from({length:n},()=>new Gu(e)),i=[],s=[],o=Vs(t.colors.cursor);if(nm=!1,e<Hi.cols||n<Hi.rows)return r[0]?.put(0,"ttheme find",at+o),r[1]?.put(0,`Needs ${Hi.cols}×${Hi.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:ju(r),loader:!1,tick:!1};let a=!1;if(t.mode==="try")wA(r,i,e,n,t,o);else a=bA(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 Gu(e);return NA(r,t,o),{lines:r.map((c)=>c.render()),images:[],zones:ju(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 Gu(e);if(t.help)xA(r,e,n,t,o);else IA(r,e,n,t,o);return{lines:r.map((u)=>u.render()),images:c,zones:ju(r),loader:!1,tick:!1}}return{lines:r.map((c)=>c.render()),images:i,zones:ju(r,s),loader:a,tick:nm}}import{execFile as RA}from"node:child_process";import{createHash as By}from"node:crypto";import{existsSync as TA,mkdtempSync as PA,readFileSync as Du,rmSync as AA,statSync as _y,writeFileSync as Uy}from"node:fs";import{homedir as HA,tmpdir as FA}from"node:os";import{join as Wu}from"node:path";import{fileURLToPath as CA}from"node:url";import{promisify as LA}from"node:util";var bn=LA(RA),Ku=67108864,jA=4096,mm=["image/png","image/jpeg","image/webp","image/gif","image/tiff","image/heic"],GA=["text/uri-list","text/plain;charset=utf-8","text/plain"],dm=[...mm,"text/uri-list","text/plain"];function BA(t){try{return _y(t).isFile()}catch{return!1}}function _A(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 Ly(t){if(/^file:\/\//i.test(t))try{return CA(t)}catch{return}if(t.startsWith("~/"))return Wu(HA(),t.slice(2));return t.startsWith("/")?t:void 0}function Qs(t,e=BA){let n=[];for(let r of t.replace(/\r\n?/g,`
|
|
670
655
|
`).split(`
|
|
671
|
-
`)){let i=
|
|
656
|
+
`)){let i=Ly(r.trim());if(i&&e(i)){n.push(i);continue}for(let s of _A(r)){if(/^https?:\/\/\S+$/i.test(s)){n.push(s);continue}let o=Ly(s);if(o&&e(o))n.push(o)}}return n}function jy(t){let e=ei(t)?nn(t):nf(t);if(!e)return;return{ext:ei(t)?"png":"jpg",width:e.width,height:e.height}}async function zu(t,e){let n=jy(t);if(n&&n.width*n.height<=ge)return{bytes:t,...n,source:e};if(process.platform!=="darwin")throw Error(n?`${n.width}×${n.height} is over ${ge/1e6} megapixels`:"only PNG and JPEG pictures work here");let r=PA(Wu(FA(),"ttheme-attach-"));try{let i=Wu(r,"in"),s=Wu(r,"out.png");Uy(i,t);let o=!n||n.width*n.height>ge?["--resampleHeightWidthMax",String(jA)]:[];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(Du(s)),c=jy(a);if(!c)throw Error("that is not a picture macOS can read");return{bytes:a,...c,source:e}}finally{AA(r,{recursive:!0,force:!0})}}async function pm(t,e){if(/^https?:\/\//i.test(t)){let n=await fetch(t,{headers:{"User-Agent":lf},signal:e});if(!n.ok)throw Error(`${new URL(t).host} answered ${n.status}`);if(Number(n.headers.get("content-length")??0)>Ku)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 zu(r,t)}if(_y(t).size>Ku)throw Error("that picture is over 64 MB");return zu(new Uint8Array(Du(t)),t)}var Wy=new Map,qn={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)=>Wy.get(t)??"",parse:()=>[],count:()=>0};function Ky(t){if(/^https?:\/\//i.test(t))return"";return t.split("/").pop()??t}function zy(t,e){Wy.set(t,e)}function Dy(t){return Number.parseInt(By("sha1").update(t).digest("hex").slice(0,8),16)%ur}var UA=`ObjC.import('AppKit')
|
|
672
657
|
function run(argv) {
|
|
673
658
|
const pb = $.NSPasteboard.generalPasteboard
|
|
674
659
|
const files = pb.readObjectsForClassesOptions($([$.NSURL]), $({ NSPasteboardURLReadingFileURLsOnlyKey: true }))
|
|
@@ -693,16 +678,16 @@ function run(argv) {
|
|
|
693
678
|
if (web && web.count > 0) return web.objectAtIndex(0).absoluteString.js
|
|
694
679
|
const text = pb.stringForType('public.utf8-plain-text')
|
|
695
680
|
return text && !text.isNil() ? text.js : ''
|
|
696
|
-
}`,
|
|
681
|
+
}`,WA=`Add-Type -AssemblyName System.Windows.Forms,System.Drawing
|
|
697
682
|
$c = [Windows.Forms.Clipboard]
|
|
698
683
|
$f = $c::GetFileDropList(); if ($f.Count) { $f; exit }
|
|
699
684
|
$p = Join-Path $env:TEMP 'ttheme-clipboard.png'
|
|
700
685
|
$s = $c::GetData('PNG'); if ($s -is [IO.MemoryStream]) { [IO.File]::WriteAllBytes($p, $s.ToArray()); $p; exit }
|
|
701
686
|
$i = $c::GetImage(); if ($i) { $i.Save($p, [Drawing.Imaging.ImageFormat]::Png); $p; exit }
|
|
702
|
-
$c::GetText()`;function
|
|
703
|
-
`).map((o)=>o.trim()),i=(o)=>e?bn("wl-paste",["--no-newline","--type",o],{encoding:"buffer",maxBuffer:
|
|
687
|
+
$c::GetText()`;function qy(){if(process.platform!=="linux")return!1;try{return/microsoft/i.test(Du("/proc/version","utf8"))}catch{return!1}}async function KA(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(`
|
|
688
|
+
`).map((o)=>o.trim()),i=(o)=>e?bn("wl-paste",["--no-newline","--type",o],{encoding:"buffer",maxBuffer:Ku}):bn("xclip",["-selection","clipboard","-t",o,"-o"],{encoding:"buffer",maxBuffer:Ku});if(r.includes("text/uri-list"))return{text:(await i("text/uri-list")).stdout.toString("utf8")};let s=mm.find((o)=>r.includes(o));if(s)return Uy(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 gm(){return Boolean(process.env.SSH_CONNECTION||process.env.SSH_TTY)}async function Yy(t){if(process.platform==="darwin"){let e=(await bn("osascript",["-l","JavaScript","-e",UA,t])).stdout.trim();return e===t?{image:t}:{text:e}}if(qy()){let e=(await bn("powershell.exe",["-NoProfile","-STA","-Command",WA])).stdout.replace(/\r/g,"").trim(),n=await Promise.all(e.split(`
|
|
704
689
|
`).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(`
|
|
705
|
-
`)}}if(process.platform==="linux")return
|
|
690
|
+
`)}}if(process.platform==="linux")return KA(t);throw Error(`reading the clipboard is not supported on ${process.platform}`)}var zA=`ObjC.import('AppKit')
|
|
706
691
|
function run() {
|
|
707
692
|
const pb = $.NSPasteboard.generalPasteboard
|
|
708
693
|
const files = pb.readObjectsForClassesOptions($([$.NSURL]), $({ NSPasteboardURLReadingFileURLsOnlyKey: true }))
|
|
@@ -714,57 +699,57 @@ function run() {
|
|
|
714
699
|
picture = ['public.png', 'public.tiff', 'public.jpeg', 'public.heic'].some((t) => types.includes(t))
|
|
715
700
|
}
|
|
716
701
|
return pb.changeCount + '\\t' + (picture ? 'picture' : '')
|
|
717
|
-
}`;async function Iy(){if(nm())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"&&!My()){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 ga=(t)=>Buffer.from(t).toString("base64"),Xh=(t)=>Buffer.from(t,"base64");function by(t,e){return e.find((n)=>t.includes(n))}class rm{clipboard=!1;drops=!1;reading;offered=[];dropping;pw=ga(wy("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;${Qh.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=${ga("ttheme")}:pw=${this.pw};${ga(".")}\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?Xh(t.mime).toString("utf8"):r.mime,e)r.chunks.push(Xh(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=by(s,[...tm,...cH]);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=${ga(c)}:pw=${a};${ga(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=Qh.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=by(a,Qh);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(Xh(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)=>tH(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 im=5,pH=6,xy=0.05,gH=[1,2,3,4,5,6,9,10,11,12,13,14],Ny=(t,e)=>(e-t+360)%360<=180?1:-1;function ba(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 d=Math.min(1,Math.max(0,l));return Math.round(255*(d<=0.0031308?12.92*d:1.055*d**0.4166666666666667-0.055))})}function sm(t,e,n){if(ba(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(ba(t,o,e)===void 0)i=o;else r=o}return r}function Ae(t,e,n){return`#${(ba(t,sm(t,n,e),n)??[0,0,0]).map((i)=>i.toString(16).padStart(2,"0")).join("")}`}function bH(t,e){let{l:n,c:r}=St(t);return Ae(n,r,(e+360)%360)}function wH(t,e,n){let{l:r,c:i,h:s}=St(t),o=yt(e)<0.18,a=(l)=>Ae(o?r+(1-r)*l:r*(1-l),i,s);if(bt(a(1),e)<n+xy)return a(1);let c=0,u=1;for(let l=0;l<30;l++){let d=(c+u)/2;if(bt(a(d),e)>=n+xy)u=d;else c=d}return a(u)}function $H(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(Ae(c,r,i))<=e-0.005)s=c;else o=c}return Ae(s,r,i)}function kH(t,e,n){let r=fe[e],[i,s]=[St(t[e]),St(t[e+8])],o=(l,d)=>n.has(l)?[d]:Array.from({length:2*r.width+1},(f,h)=>(r.center-r.width+h+360)%360),a=(l,d,f)=>Zn.every((h)=>{let p=(l>8?8:0)+h;if(p===l)return!0;let $=St(t[p]);return $.c<oo||Ne($.h,d)>=qi+1||Math.abs($.l-f)>=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 d of o(e+8,s.h)){if(Ne(l,d)>Le-im||!n.has(e+8)&&!a(e+8,d,s.l))continue;let f=Ne(l,i.h)+Ne(d,s.h);if(f<u)u=f,c=[l,d]}}return c}class Ry{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,bH(this.theme.ansi[t],n))}roles(){let t=new Set(this.theme.signatureSlots);for(let{slot:n,hue:r}of Qn(this.theme)){let i=fe[Qe(n)];this.rehue(n,"ansi-role",i.center+Ny(i.center,r)*(i.width-im))}for(let{normal:n,gap:r}of Mn(this.theme)){if(r<=Le)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+Ny(o,a)*(Le-im))}let e=Ji(this.theme);for(let[n,r]of On(this.theme)){let i=Qe(e.has(r)?n:r),s=kH(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,wH(this.get(a),o,s))};if(n("foreground",["foreground"],7),n("accents",gH.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",$H(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 Ry(t);for(let n=0;n<pH;n++)if(e.readability(),e.roles(),Qr(e.theme).length===0)break;return{theme:e.theme,moves:e.net(),left:Qr(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}],wa={background:0.21,foreground:0.88,hue:265,tint:0.02,lightness:0.72,chroma:0.12,brights:0.06},Ty=(t,e,n)=>Math.min(n,Math.max(e,t));function om(t,e,n){let r=t[e.key]+e.step*n,i=e.wraps?(r%e.max+e.max)%e.max:Ty(r,e.min,e.max);return{...t,[e.key]:Math.round(i*1e4)/1e4}}function Ur(t){let e=(r,i,s)=>Ae(Ty(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 Zn){let i=fe[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"],Kr=L.length+Du.length,Ye=[{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}],Py=5,Yn=Ye.length,Qs=["this","pair","normals","brights","accents"],qu=[1,2,3,4,5,6,9,10,11,12,13,14],Hy=qu.filter((t)=>t<8).map((t)=>L.length+t),Ay=qu.filter((t)=>t>8).map((t)=>L.length+t);function am(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"?Hy:t==="brights"?Ay:[...Hy,...Ay];return r.includes(e)?r:[e]}function yH(){return Array.from({length:Kr},(t,e)=>e<L.length?[e]:[e,e+8]).flat()}function vH(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 Fy(t){return t.length===1?t.toLowerCase():t}function SH(t){return Xs(Math.round(t),0,255).toString(16).padStart(2,"0")}function Cy(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 Ae(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 EH(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 lm(t,e,n,r){let i=Ci(t,e,n),{background:s,foreground:o,selection:a,ansi:c}=ee(t),u=(l,d,f)=>bt(d,f)<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 Qn(i).map(({slot:l})=>L.length+l);if(r==="bright-follows")return Mn(i).filter(({gap:l})=>l>Le).flatMap(({normal:l})=>[L.length+l,L.length+l+8]);if(r==="distinct")return On(i).flatMap(([l,d])=>[L.length+l,L.length+d]);return[]}function MH(t,e,n){return new Set(Li.flatMap((r,i)=>Yu(t,e,n,i).some((s)=>s.ok===!1)?[i]:[]))}function qn(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[qn(i.foreground,i.background,"foreground","Foreground on it",n),qn(i.ansi[b],i.background,"accents",`Weakest, ANSI ${b},`,n),qn(i.ansi[8],i.background,"ansi8-visible","ANSI 8 on it",n)]}if(r===1)return[qn(i.foreground,i.background,"foreground","On background",n),qn(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[qn(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[qn(a,i.background,"light-ansi","On background",n)];if(o===8)return[qn(a,i.background,"ansi8-visible","On background",n)];let c=[qn(a,i.background,"accents","On background",n)],u=St(a),l=Qe(o),d=fe[l],f=`${d.name} ${d.center}±${d.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 ${f}`});else if(n.includes("ansi-role"))c.push({ok:void 0,text:`Hue ${u.h.toFixed(0)}° · ${f} waived`});else{let g=Ne(u.h,d.center)-d.width;c.push(g>0?{ok:!1,text:`Hue ${u.h.toFixed(0)}° · ${g.toFixed(0)}° outside ${f}`}:{ok:!0,text:`Hue ${u.h.toFixed(0)}° · in ${f}`})}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<=Le,text:`${p.gap.toFixed(0)}° from ANSI ${h} · ≤ ${Le}°`});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 jy(t,e,n){let r=Xe(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?lm(t,e,n,i.rule):[]}})}var OH=new Set(["reset","reset-all","hex","paste","fix","open","tune","sig","follow"]),Gy=Ye[1].max;function cm(t){let[e,n,r]=nt(t);return e===n&&n===r}function um(t,e){return Math.floor(sm(t,e,Gy)*1e4)/1e4}function Ly(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 $a{mode;seeds=wa;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??Ur(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 MH(this.list,this.signature,this.waive)}failing(){return Qr(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(vH(t)){this.findPictures({paste:t});return}if(this.mode==="seeds")return;let e=Cy(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===Yn){this.reach(21**n);return}this.put(Ly(Ye[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=om({...this.seeds,[n.key]:Ly(n,r)},n,0),this.list=Zs(Ur(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,Yn);else this.row=e(this.row,Kr-1),this.lastEdit=void 0}lchOf(t){let e=St(t);return cm(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)=>!cm(e));return t?St(t).h:wa.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:Py:1);this.seeds=om(this.seeds,n,r),this.list=Zs(Ur(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: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=yH(),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 am(this.scope,this.slot())}tuneKey(t){let e=Ye.length+1,n=this.channel===Yn;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=Ye[this.channel];this.step(r*(t.startsWith("shift")?i.wraps?10:Py:1))}}else if(t==="home"||t==="end")if(n)this.reach(t==="home"?this.partner().floor??1:21);else{let r=Ye[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=Ye[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"||am(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"&&am(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 EH(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=(f)=>Ae(f,Math.min(i,um(f,r.h)),r.h),o=(f)=>bt(s(f),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,d;if(o(l)<u)d=l,this.notice=`The ratio stops at ${o(l).toFixed(2)}:1 on this side of the color it is read against`;else{let f=c,h=l;for(let p=0;p<24;p++){let $=(f+h)/2;if(o($)>=u)h=$;else f=$}d=h}this.place(e,d,i,r.h);for(let f=0;f<40&&d!==l&&bt(this.list[e],n)<u;f++)d=a?Math.min(1,d+0.001):Math.max(0,d-0.001),this.place(e,d,i,r.h);this.lch[e]={...this.lch[e],l:Math.round(d*1e4)/1e4}}step(t){let e=Ye[this.channel],n=this.lch[this.slot()][e.key];this.put(n+e.step*t)}put(t){let e=this.slot(),n=Ye[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=um(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),d=l-s.c;this.holds.set(e,l),this.place(e,s.l,l,s.h);for(let f of o){let h=this.lch[f],p=a(Xs((this.holds.get(f)??h.c)+d,0,Gy));this.holds.set(f,p),this.place(f,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"&&cm(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,um(e,r));this.lch[t]={l:e,c:i,h:r},this.list[t]=Ae(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=Cy(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,Fy(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,Fy(t),(r)=>/^[a-z0-9@/-]$/.test(r));if(n!==void 0)this.filter=n,this.pick=0}}remember(t){if(t!==this.lastEdit||OH.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=Qr(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 hm,writeFileSync as qy}from"node:fs";import{dirname as GH}from"node:path";import{isMainThread as _H,parentPort as Yy,Worker as BH}from"node:worker_threads";var IH=new Set(["comic","4koma","monochrome","greyscale","sketch","lineart","speech_bubble"]),xH=new Set(["scenery","landscape","scenic","no_humans","wide_shot","very_wide_shot"]),NH=0.04,RH=0.1,TH=0.05,PH=4096;function HH(t){return new Set(t.cutouts.split(/\s+/).map((e)=>e.replace(/^~/,"")).filter(Boolean))}function AH(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)+([...xH].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:AH(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 By(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 dm(t){let e=t/255;return e<=0.04045?e/12.92:((e+0.055)/1.055)**2.4}function _y(t,e,n){let[r,i,s]=[dm(t),dm(e),dm(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 Wy(t,e){let n=e.map((o)=>_y(...nt(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,d]=_y(t.data[c],t.data[c+1],t.data[c+2]);n.forEach(([f,h,p],$)=>{if(Math.hypot(u-f,l-h,d-p)<RH)i[$]=i[$]+1})}if(s===0)return 0;return i.reduce((o,a)=>o+Math.min(1,a/s/TH),0)/n.length}var FH=/(?:^|[^0-9a-f])([0-9a-f]{32})(?:[^0-9a-f]|$)/i,CH=[[/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 fm(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 Uy(t,e){let n=FH.exec(e.source)?.[1]?.toLowerCase();return[`post:${t.key}:${e.id}`,...e.md5?[`md5:${e.md5}`]:[],...n&&n!==e.md5?[`md5:${n}`]:[],...CH.flatMap(([r,i])=>{let s=r.exec(e.source)?.[1];return s?[`post:${i}:${Number(s)}`]:[]}),...e.family?[`family:${t.key}:${e.family}`]:[]]}function Ky(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 zy(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)),d=0;for(let f=o;f<a;f++)for(let h=u;h<l;h++){let p=(f*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];d+=g*$+255*(1-$)}r.push(d/((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 LH(t,e){let n=BigInt(`0x${t}`)^BigInt(`0x${e}`),r=0;while(n>0n)r+=Number(n&1n),n>>=1n;return r}function Dy(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&&LH(t.hash,e.hash)<=2}var WH={thumb:"tile",band:"band",match:"tile",show:"view",backdrop:"view",redraw:"view"},Vu;async function UH(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=nr(new Uint8Array(hm(t.from)),me);Vu={from:t.from,clear:In(o),inked:xd(o)}}let{image:r,fill:i,opacity:s}=Vb(Vu.inked,t.colors,t.tone,t.width,t.height,t.blur,t.tune,t.coloring);return jH(GH(t.to),{recursive:!0}),qy(t.to,rn(r)),{clear:Vu.clear,fill:i,opacity:s}}let e=nr(new Uint8Array(hm(t.from)),me);if(t.job==="backdrop"){oc(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&&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:Wy(e,t.colors),hash:zy(e)};if(t.job==="thumb")return H(t.to,rn(Cg(e,t.width,t.height))),0;let n=e.data.subarray(t.y*e.width*4,(t.y+t.height)*e.width*4);return qy(t.to,rn({width:e.width,height:t.height,data:n})),0}function KH(t){t.on("message",async(e)=>{try{t.postMessage({id:e.id,value:await UH(e)})}catch(n){t.postMessage({id:e.id,error:n instanceof Error?n.message:String(n)})}})}class mm{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 BH(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 ka{lines=new Map;run(t){let e=WH[t.job],n=this.lines.get(e);if(!n)n=new mm,this.lines.set(e,n);return n.send(t)}close(){for(let t of this.lines.values())t.close();this.lines.clear()}}class pm{lines;constructor(t){this.lines=Array.from({length:Math.max(1,t)},()=>new mm)}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(!_H&&Yy)KH(Yy);import{existsSync as zH,mkdtempSync as DH,readFileSync as qH,rmSync as Jy,writeFileSync as YH}from"node:fs";import{tmpdir as JH}from"node:os";import{basename as Zy,join as Vy}from"node:path";var VH=6;class ya{dir;made=[];of(t,e){this.dir??=DH(Vy(JH(),"ttheme-tint-"));let n=Vy(this.dir,`${Zy(t,".png")}.${e.slice(1).toLowerCase()}.png`);if(!zH(n)){let r=new Uint8Array(qH(t));YH(n,_a(r,e)??ri(ni(At(r)),e)),this.made.push(n);while(this.made.length>VH)Jy(this.made.shift(),{force:!0})}return n}clear(){if(this.dir)Jy(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=an(n,[...r]);return{image:s.color===t.tone?e:i.of(e,s.color),opacity:s.opacity}}function Qu(t,e){let n=Zy(e);return t.find((r)=>n.startsWith(`${r.stem}.`)||n.startsWith(`${r.stem}@`))}var rA=2147483625,tv=2147483626,wn=2147483627,iA=-1073741827,ev=-1073741826,sA=-1073741825,oA=4;function aA(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),d=o((Math.max(s.y,0)+i.h-1)/i.h),f=o(Math.min(s.y+s.h,c)/i.h);if(l<=u||f<=d)return;return{col:u,row:d,cols:l-u,rows:f-d,x:o((u*i.w-s.x)*t/s.w),y:o((d*i.h-s.y)*e/s.h),w:o((l-u)*i.w*t/s.w),h:o((f-d)*i.h*e/s.h)}}function cA(t){try{let e=XH(t,"r"),n=Buffer.alloc(24);return tA(e,n,0,24,0),ZH(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 ya;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,eA()),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(rA,iA,"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(tv,sA,"f=32",Buffer.from([...nt(s),c]),r,i)}else a+=this.drop(wn)+this.drop(tv);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+=pa(e);return this.resized(),t}close(){let t=this.clear();if(this.tints.clear(),this.renders?.close(),this.scratch)Qy(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=cA(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=aA(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:ev},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=${ev},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),pa(t)}band(t,e,n){let r=`${t}|${e}|${n}`,i=this.bands.get(r);if(i)return i;this.scratch??=QH(Xy(nA(),"ttheme-edit-")),this.renders??=new ka;let s={path:Xy(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<=oA)break;if(a.ready&&a.path!==this.sent.get(wn))this.bands.delete(o),Qy(a.path,{force:!0})}return s}}var nv=80,rv=24,va=50,gm=11;function Lt(t,e){return se(t,e)}function av(t){return{color:t,dim:(e)=>t?`${P}${e}${de}`:e,bold:(e)=>t?`${at}${e}${de}`:e,fg:(e)=>t?Ce(e):"",bg:(e)=>t?`\x1B[48;2;${nt(e).join(";")}m`:""}}function iv(t){return yt(t)>0.35?"#000000":"#ffffff"}function cv(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(iv(l))}●\x1B[39;49m`;if(u===a)return c?`${t.bg(c)}${t.fg(iv(c))}○\x1B[39;49m`:`${t.fg("#aaaaaa")}○`;return c?`${t.fg(c)}█`:`${t.fg(r?"#777777":"#555555")}░`}).join("").concat("\x1B[39m")}function uA(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 ba(o.l,o.c,o.h)?Ae(o.l,o.c,o.h):void 0})}function bm(t,e,n,r){return Math.round((t-e)/(n-e)*(r-1))}function uv(t,e){return t.held!==void 0&&t.held-e.c>0.0005?t.held:void 0}function lv(t,e,n,r){let i=uv(e,n);return Ye.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=cv(t,uA(n,s,r),bm(c,s.min,s.max,r),a,s.key==="c"&&i!==void 0?bm(i,s.min,s.max,r):void 0),d=s.key.toUpperCase(),f={kind:"channel",channel:o};return`${Lt(f,a?t.bold(`▸${d}`):t.dim(` ${d}`))} ${Lt({kind:"bar",channel:o},l)} ${Lt(f,a?t.bold(u):t.dim(u))}`})}function dv(t,e,n){let r=e.mode==="tune"&&e.channel===Yn,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(""),d=`${i.toFixed(2)}:1`.padStart(6),f={kind:"channel",channel:Yn};return`${Lt(f,r?t.bold("▸◐"):t.dim(" ◐"))} ${Lt({kind:"bar",channel:Yn},l)} ${Lt(f,r?t.bold(d):t.dim(d))}`}function fv(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 lA(t,e){if(!t.misses().has(e))return;if(lm(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 hv(t,e,n){let r=Yu(t.list,t.signature,t.waive,e),i=uv(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 sv={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 dA(t){return`oklch ${t.l.toFixed(3)} ${t.c.toFixed(3)} ${t.h.toFixed(0)}°`}function wm(t){return`${t.l.toFixed(2)} ${t.c.toFixed(3)} ${t.h.toFixed(0).padStart(3)}°`}function mv(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 pv(t,e,n,r=va){let i=jy(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}`,d=` ${tl(t,u.ok)} ${jt(u.ok===!1?u.label:t.dim(u.label),t.dim(l),a-2)}`,f=[...new Set(u.slots)].map(($)=>Fi($).name),h=u.slots[0],p=($)=>h===void 0?$:Lt({kind:"slot",slot:h},$);return f.length>0?[p(d),p(` ${t.dim(ot(f.join(" · "),a-2))}`)]:[p(d)]});return[s===0?o:jt(o,`${t.bold("n")} ${t.dim("next miss")}`,r-2),...c.slice(0,Math.max(0,n-1))]}function gv(t,e,n,r=va,i=!0){let s=e.misses(),o=ee(e.list),a=i?e.slot():-1,c=(d)=>{let f=e.list[d],h=d===a,p=e.signature.includes(Li[d])?"◆":t.color?"■":" ",$=s.has(d)?"✗":e.theme&&e.offDefault(d)?"↺":" ",b=`${t.color?`${t.fg(f)}${p}${h?t.fg(o.foreground):"\x1B[39m"} `:`${p} `}${wm(e.lch[d])}${$}`;if(!h)return Lt({kind:"slot",slot:d},` ${b}`);return Lt({kind:"slot",slot:d},t.color?`${t.bg(o.selection)}${t.fg(o.foreground)} ${b}\x1B[39;49m`:`›${b}`)},u=(d)=>d?t.color?`${t.fg(o.cursor)}▌\x1B[39m `:"▌ ":" ",l=[` ${t.dim("Base")}`];for(let d=0;d<L.length;d++){let f=i&&d===e.row,h=L[d].padEnd(10);l.push(`${Lt({kind:"slot",slot:d},`${u(f)}${f?t.bold(h):h}`)}${c(d)}`)}l.push("",` ${t.dim(`${"ANSI".padEnd(10)} ${"Normal".padEnd(18)} Bright`)}`);for(let d=L.length;d<Kr;d++){let f=i&&d===e.row,h=Du[d-L.length].padEnd(10),p=Lt({kind:"slot",slot:d+(e.col===1?8:0)},`${u(f)}${f?t.bold(h):h}`);l.push(`${p}${c(d)}${c(d+8)}`)}return l.push(""),[...l,...pv(t,e,n-l.length,r)]}function fA(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:gm},(g,b)=>{let y=s.min+(s.max-s.min)*b/(gm-1);return sv[s.key](Ur({...e.seeds,[s.key]:y}))}),l=cv(t,u,bm(c,s.min,s.max,gm),a),d=`${c.toFixed(s.digits)}${s.wraps?"°":""}`.padStart(6),f=sv[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($,` ${d} ${t.color?`${t.fg(f)}■\x1B[39m `:""}${t.dim(f)}`)}`)}),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.",va-4))i.push(` ${t.dim(s)}`);return i.push(""),[...i,...pv(t,e,n-i.length)]}function hA(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 bv(t,e,n,r,i,s){let o=te.indexOf(hi(i)),a=te.map((l,d)=>Lt({kind:"scene",scene:d},d!==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 d=jc(l,n-2);if(!d)continue;if(c.length>=r)break;let f=t.color?d.map(([h,p])=>`${mA(t,e,p,hA(s,p))}${h}\x1B[0m${u}`).join(""):d.map(([h])=>h).join("");c.push(`${u} ${ot(f,n-2)} ${t.color?"\x1B[0m":""}`)}return c}var pA=["Bk","Rd","Gr","Ye","Bl","Ma","Cy","Wh"];function ov(t,e,n,r,i,s,o){let a=(i-s)/(o-1),c=wv(e),u=ee(n),l=(d)=>Math.min(o-1,Math.max(0,Math.round((i-r(St(d)))/a)));return Array.from({length:o},(d,f)=>{let p=`${(f%2===0?(i-a*f).toFixed(i>=1?1:2).replace(/^0(?=\.\d\d)/,""):"").padStart(4)} ${t.dim(f%2===0?"┤":"│")}`;for(let $=0;$<8;$++){let g=[" "," "," "," "," "],b=u.ansi[$],y=u.ansi[$+8],S=l(b)===f,E=l(y)===f,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 wv(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 gA(t,e){let n=wv(e);return` ${pA.map((r,i)=>n.has(i)?t.bold(` ${r} `):t.dim(` ${r} `)).join("")}`}function bA(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,d]of Object.entries(fe)){let f=Ne(a,d.center);if(f<=d.width&&f<u)u=f,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(fe).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 wA(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°`),...Qn(r).map(({slot:a,over:c})=>{let u=fe[Qe(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 $m(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),...ov(t,e,s,(u)=>u.l,1,0.3,8),gA(t,e)];if(i)c.push("",t.bold("Chroma"),...ov(t,e,s,(u)=>u.c,a,0,5),"",...bA(t,s));return[...c,...wA(t,e,s)].slice(0,r)}function $A(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")}`,dn("g",`${t.bold("g")} ${t.dim("switch")}`),n)}function kA(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]),d=Math.max(8,Math.min(64,n-12));if(e.view==="relations"&&e.mode!=="tune")return[$A(t,e,n),"",...$m(t,e,n,r-2,!0)];let f=i>=L.length?t.dim("Uses underlined below"):l?t.dim("◆ signature"):"",h=[jt(`${t.bold(c)} ${t.dim(u)}`,e.view==="relations"?"":f,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}${$??mv(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}${dA(e.lchOf(a)).slice(6)} · ${a}`):t.dim("as it opened")}`)}h.push(""),h.push(...lv(t,e,o,d),dv(t,e,d));let S=fv(t,e);if(S.length>0)h.push(...S);if(e.view==="relations")return h.push("",...$m(t,e,n,r-h.length-1,!1)),h;h.push("");for(let N of hv(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=lA(e,i);if(E)h.push(t.dim(` ${E}`));let I=r-h.length-1;if(I>=3)h.push("",...bv(t,ee(e.shown()),n,I,e.scene,i));return h}function yA(t,e,n,r){return[jt(`${t.bold("Sample")} ${t.dim("what the seeds grow")}`,"",n),"",...bv(t,ee(e.list),n,r-2,e.scene,-1)]}var vA=[["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 SA(t,e,n){let r=[` ${t.bold("Help")}`,""];for(let[i,s]of vA.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 EA(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((d)=>Q(d.name))));if(i.slice(u,u+c).forEach((d,f)=>{let h=u+f===e.pick,p=d.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=d.name.padEnd(l);a.push(Lt({kind:"choice",index:u+f},`${g}${h?t.bold(b):b} ${$}`))}),i.length===0)a.push(` ${t.dim(`No palettes match '${e.filter}'`)}`);return a}var MA=new Set(["enter","s","?","g","a"]);function OA(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===Yn?"1-9":"0-9",e.channel===Yn?"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?dn(a.split(" ")[0],`${t.bold(a.split(" ")[0])} ${t.dim(a.split(" ").slice(1).join(" "))}`):"";for(;;){let l=[s,...o.map(([h,p])=>dn(h,`${t.bold(h)} ${t.dim(p)}`))].filter(Boolean),d=`${c}${l.join(" ")}`,f=-1;if(o.forEach(([h],p)=>{if(p>0&&!MA.has(h))f=p}),Q(d)+Q(a)+3<=n||f<0)return a?jt(d,u,n):ot(d,n);o=o.filter((h,p)=>p!==f)}}var km=50,ym=22;function $v(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 IA(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),d=e.signature.includes(Li[i]),f=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 `:""}${wm(e.lchOf(a))}`:"",c!==s?`default ${t.color?`${t.fg(c)}■\x1B[39m `:""}${wm(e.lchOf(c))}`:""].filter(Boolean),$=[jt(`${t.bold(u)} ${t.dim(l)}`,d?t.dim("◆ signature"):"",n),`${f}${h??mv(t,o)} ${t.dim(s)}`,...r>=7?[`${f}${t.dim(p.length>0?p.join(" "):"as the palette has it")}`]:[]],g=Math.max(8,Math.min(40,n-12));$.push(...lv(t,e,o,g),dv(t,e,g));for(let b of fv(t,e))if($.length<r)$.push(ot(b,n));for(let b of hv(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 kv(t,e,n,r,i){let s=av(r);if(t.view==="relations"&&t.mode==="list"&&t.typing===void 0){let y=i?s.bold("Palette"):s.dim("Palette"),S=$m(s,t,e-2,n-1,!1).map((N)=>` ${N}`),I=[` ${jt(`${y} ${s.dim("Relations")}`,dn("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=gv(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(...IA(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 d=i?s.bold("Palette"):s.dim("Palette"),f=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=[` ${f?`${d} ${tl(s,!1)} ${f.text}`:jt(`${d}${$>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 xA(t,e,n,r){let i=av(r);if(e<nv||n<rv){let p=[i.bold("ttheme palette editor"),`Needs ${nv}×${rv} — 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}`)}`,d=n-4,f;if(t.overlay==="keys")f=SA(i,t,e);else if(t.overlay==="open")f=EA(i,t,e,d);else{let p=e-va-2,$=t.mode==="seeds"?fA(i,t,d):gv(i,t,d),g=t.mode==="seeds"?yA(i,t,p,d):kA(i,t,p,d);f=Array.from({length:d},(b,y)=>`${ot($[y]??"",va)}${i.dim("│")} ${ot(g[y]??"",p)}`)}let h=[jt(l,c,e),""];for(let p=0;p<d;p++)h.push(ot(f[p]??"",e));return h.push("",OA(i,t,e)),h}function vm(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 NA=[Ru,Kn,Ni,_r],RA=33;async function yv(t,e){let n=new $a(t),r=e.backdrop,i=(s)=>n.typing===void 0&&Ku(s);return Br({modes:[...NA,...Ks()],burst:i},async(s)=>{let o=[],a="",c,u=!1,l=!1,d=()=>{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($)},f=new Mi({write:($)=>s.write($),view:()=>u?void 0:{lines:xA(n,s.cols,s.rows,e.color),after:()=>r?.draw(n.shown(),n.signature,n.waive,s.cols,s.rows)??""}}),h=($=!1)=>{if($)f.soon();else f.request();if(e.only||e.look)c??=setTimeout(d,RA)},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="",f.reset(bi),h()};if(s.write(bi),s.onResize(()=>{r?.resized(),f.reset(bi),f.request()}),r){r.load(),r.ready=()=>f.request();let $=new sa;s.ask(xu,(g)=>$.see(g),1000).then((g)=>{if(g)r.measured(g);f.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")vm(n,f.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),f.stop(),r)s.write(r.close())}})}import{spawn as KA}from"node:child_process";import{createHash as Cv}from"node:crypto";import{existsSync as Ea,mkdirSync as zA,mkdtempSync as DA,readFileSync as qA,rmSync as el}from"node:fs";import{homedir as YA,tmpdir as JA}from"node:os";import{basename as VA,dirname as ZA,join as $n}from"node:path";import{pathToFileURL as Ev}from"node:url";import{existsSync as TA,readFileSync as PA,statSync as HA}from"node:fs";import{join as vv}from"node:path";function AA(t,e){try{return JSON.parse(PA(vv(Ge(t),e),"utf8"))}catch{return{}}}function FA(t,e,n){H(vv(Ge(t),e),`${JSON.stringify(n)}
|
|
718
|
-
`)}class Sm{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=oi(t,e),o=(i===void 0?await wb(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)FA(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(!Ja(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=rw(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=fb(o);return this.owners.set(t.key,a),a}async cached(t,e,n,r){if(TA(e))return HA(e).size;let i=this.inflight.get(e);if(i)return i;let s=(async()=>{let o=await Qa(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=AA(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 Ya(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 CA}from"node:fs";import{join as LA}from"node:path";var to=2147483645,Sa=2147483646,Sv=-1073741827,jA=-1073741828,GA=16,_A=0.4,BA=3221225472,WA=256;function UA(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 Em=UA(process.env.TTHEME_BG_MARGIN);class Mm{screen;gliding;sent=new Map;placed=new Map;covered="";viewed="";bands=Uc(process.env);files=Kc(process.env);moves=R0(process.env);layers=zc(process.env);wipes=T0(process.env);views=pi(process.env);bandFiles=new Map;nextBand=BA;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=Zh(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>=qh){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+=Jh(a.id);r+=uy(a,n),this.placed.set(a.id,c)}}for(let o of this.sent.keys())if(!i.has(o))r+=pa(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=zn(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)*_A)),this.draw(),this.gliding=setTimeout(r,GA)};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 Zh({...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\\`,Em)r+=`\x1B_Ga=t,f=32,s=1,v=1,i=${Sa},q=2;AAAAAA==\x1B\\\x1B[H\x1B_Ga=p,i=${Sa},p=${Sa},c=1,r=1,C=1,z=${jA},q=2\x1B\\`}else if(!this.moves)r+=Jh(to);if(this.covered=n,Em){let{x:i,y:s}=Em;return`${r}\x1B_Ga=p,i=${to},p=${to},P=${Sa},Q=${Sa},H=${-i},V=${-s},c=${t+2*i},r=${e+2*s},C=1,z=${Sv},q=2\x1B\\`}return`${r}\x1B[H\x1B_Ga=p,i=${to},p=${to},c=${t},r=${e},C=1,z=${Sv},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:LA(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<=WA)return;if(e.ready&&!this.sent.has(e.id))this.bandFiles.delete(t),CA(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:si}},{name:"TTHEME_FIND_BLOCK",label:"Block",about:"Posts tagged with nudity or underwear are left out — space unticks one",choices:ii,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:Xg,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:tb,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:od,multi:{read:Wa,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 Mv(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 QA=["fit","newest","score"];function Om(t){return QA.find((e)=>e===t)??"fit"}var XA={left:-1,right:1,"shift-left":-10,"shift-right":10};function Ov(t){if(process.env.SSH_CONNECTION||!/^(?:https?|file):/i.test(t))return;try{let e=KA(process.platform==="darwin"?"open":"xdg-open",[t],{stdio:"ignore",detached:!0});e.on("error",()=>{}),e.unref()}catch{}}function tF(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 Lv(t,e){return t.size===e.size&&t.at===e.at&&t.opacity===e.opacity}function eF(t,e){if(Lv(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 Iv(t,e){let n=D(t);return re(t,e).flatMap((r,i)=>{let[,s,o]=/^([a-z.]+)_(\d+)$/.exec(r.key)??[],a=[...Y,Dn].find((c)=>c.key===s);if(!a||!o)return[];return[{key:r.key,id:Number(o),ansi:a.ansi,...a===Dn?{}:{page:a.pageUrl(Number(o))},up:i===0,from:$n(n,r.original??r.fill)}]})}function nF(t){return t.length>=2&&!/^\d+$/.test(t)&&!t.includes("://")&&!/^[\w.]+:\d+$/.test(t)}var xv=12,rF=4,iF=150,sF=300,Nv=12,oF=2,aF=150,cF="\x1B[?5522$p\x1B]72;t=q\x1B\\\x1B[c",uF=4000,lF=8000,Rv=/\.(png|jpe?g|gif|webp|heic|tiff?|bmp)$/i,dF=process.platform==="win32"?"alt+v":"ctrl+v",Tv=process.platform==="darwin"?"ctrl+shift+cmd+4 copies a screenshot":"copy a picture first",fF=1280,hF=16,mF=_t.indexOf("top-right")+1,rl=20,Pv=2,Hv=3,pF=/[\p{Script=Hangul}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Han}]/u,gF=8,bF=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 Ma(t){if(!(t instanceof Error))return String(t);if(t instanceof AggregateError&&t.errors[0])return Ma(t.errors[0]);if(t.cause)return Ma(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 Im(t,e){return`${t}: ${Ma(e)}`}function Av(t){return t.width*t.height}function Fv(t,e){return`${t}-${Cv("sha1").update(e).digest("hex").slice(0,8)}`}class xm{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,Mv(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 ka;showing;thumbless=new Set;current;fetch;settle;suggestTimer;suggesting;countTimer;counting;terminal;grabber=new rm((t)=>this.write(t),(t)=>void this.got(t));noticeTimer;peekTimer;peeked;attaching;done;scratch=DA($n(JA(),"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=an(n,n.signatureSlots),this.blurring=Pr(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:Om(this.setting("TTHEME_FIND_ORDER")),solo:this.setting("TTHEME_FIND_SOLO")==="on",rating:si(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:Wa(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:Mv(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:Iv(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 Mm({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 Sm({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??rF}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 cd(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(Ge(t),"orig",`${e}.${n}`)}previewPath(t){let{url:e}=Ka(t.site,t.post);return $n(Ge(t.site),"thumb",`${Fv(t.post.id,e)}.${ar(e)}`)}tileOf(t,e){let{site:n,post:r}=t,i=pe(n,r.id),s=sn(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===Dn?"":n.pageUrl(r.id),artist:n===Dn?vy(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 Br({modes:[_r,...Ks()],assume:[Kn,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 sa,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(cF,(o)=>o.kind==="attributes"?!0:void 0,500,!1);if(this.grabber.start(),e.hold(Wk),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}),hb()}})}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!Ua(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 — ${Tv}`);return}this.pasted(t.text);return}await this.bring(()=>Wu(t.bytes,t.source))}notice(t,e=uF){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 Iy()}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 · ${dF} uses it`,clearTimeout(this.peekTimer),this.peekTimer=setTimeout(()=>{t.hint=void 0,this.paint.draw()},lF),this.paint.draw()}async fromClipboard(){let t=this.view;if(nm()){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 Oy($n(this.scratch,`clipboard-${Date.now()}.png`))}catch(r){this.notice(`Could not read the clipboard: ${Ma(r)}`);return}if(clearTimeout(this.peekTimer),t.hint=void 0,"image"in e){await this.bring(async(r)=>({...await em(e.image,r),source:"clipboard"}));return}let n=e.text.trim();if(!n){this.notice(`No picture on the clipboard — ${Tv}`);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=Ua(e,this.site??Y[0]);if(i){await this.jump(i.site,i.id);return}}let[n,...r]=Vs(e).sort((i,s)=>Number(!Rv.test(i))-Number(!Rv.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)=>em(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(f){if(!r.signal.aborted)n.note=void 0,this.notice(Ma(f),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=Ey(i.bytes);Sy(s,i.source);let o=this.origPath(Dn,s,i.ext);H(o,i.bytes);let a=Ev(o).href,c={id:s,file:a,width:i.width,height:i.height,ext:i.ext,preview:a,owner:"",score:0,rating:"s",md5:Cv("md5").update(i.bytes).digest("hex"),source:i.source,tags:[],named:{artist:[],character:[],copyright:[]},solo:void 0,family:0,smaller:[]},u={site:Dn,post:c},l=this.previewPath(u);H(l,i.bytes),++this.gen,this.current=void 0,n.shown=void 0;let d=nl(`local|post:${s}`,!1);this.board=d,this.boards.set(d.key,d),this.single(d,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)Ov(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*zn(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}=zn(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=ma(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=ma(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=my(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<Vh:/^[\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),sF)}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:Om(t("TTHEME_FIND_ORDER")),rating:si(t("TTHEME_FIND_RATING")),narrow:cd(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 fd(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=si(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=Om(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=Wa(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=Ea(e)?qA(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=nF(n),i=yw(e,Hv,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?qw(this.catalog.palettes,this.entry,n).map((c)=>({value:c.booru,count:0,palette:c.name})):[],o=[...new Map([...s.slice(0,Hv),...i].map((c)=>[c.value,c])).values()];if(t.suggest=o.length>0?o:void 0,i.length>0&&pF.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 pb(n,AbortSignal.any([this.signal,a.signal]));if(this.suggesting===a&&t.editing!==void 0){let u=new Map(c.map((d)=>[d.value,d.count])),l=new Set(o.map((d)=>d.value));t.suggest=[...o.map((d)=>({...d,count:u.get(d.value)??0})),...c.filter((d)=>!l.has(d.value))].slice(0,gF),t.pick=t.pick!==void 0&&t.pick<o.length?t.pick:void 0,this.paint.draw()}}catch{}},iF)}async commit(t){let e=Ua(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)Ov(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=XA[t];if(i!==void 0){if(n.field===0)r.size=tF(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=db(e,n),s=new Set([...r.artist,...r.character,...r.copyright]),o=bo(n.source),a=/^https?:\/\//i.test(o)?o:e===Dn&&o.startsWith("/")?Ev(o).href:void 0;return{page:e===Dn?"":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:(sn(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}=zn(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?Yw(n,e):[t]}syncChips(){let t=this.selected(this.view);this.view.chips=this.pool.slice(0,bF).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 gb(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?bb(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(dd([...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=dd(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})=>fd(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=Im(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,Im(e.name,n)].filter(Boolean).join(" · ")}wants(){let{perRow:t,rowsVis:e}=zn(this.cols,this.rows);return this.view.tiles.length<(this.board.top+e+Pv)*t}need(){let{perRow:t,rowsVis:e}=zn(this.cols,this.rows);return(e+Pv)*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=mb(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{Va(n,await Za(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<sr;let u=t.last.get(a);for(let l of c){let d=u&&Ky(u.post,l)?u.set:`set:${a.site.key}:${l.id}`;u={post:l,set:d};let f=pe(a.site,l.id);if(t.seen.has(f))continue;t.seen.add(f);let h={site:a.site,post:l};if(this.eligible(h))t.kin.set(h,[d,...Uy(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?By(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=fm(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++,Av(r.post)<=Av(s.post))continue;for(let a of[...i,...fm(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:Nv},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=Ka(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<xv&&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<xv&&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=sn(e);if(!Da(t,e,this.view.rating)||za(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"||lb(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)=>Dy(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=Iv(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,Yh(this.cols))){if(n.thumb||this.heldAsked.has(n.from))continue;this.heldAsked.add(n.from);let r=$n(this.scratch,`held-${VA(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<Nv&&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=Ka(e,n),o=$n(Ge(e),"tile",`${Fv(n.id,s.url)}-${r}x${i}.png`);if(!Ea(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),aF),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),!sn(n.post))return;let{site:i}=n,s=this.board;try{await $o(i,n.post,r.signal);let o=sn(n.post),a=this.origPath(i,t.id,o.ext);if(!Ea(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,(f,h)=>{if(e.fetching?.id===t.key)e.fetching={id:t.key,got:f,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 d=await this.render(l,"plain");if(r.signal.aborted||s!==this.board)return;if(d.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 f=await this.render(l,"cut").catch(()=>{return});if(r.signal.aborted||s!==this.board)return;if(f&&yu(f.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=Im(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(Ge(t),"cut",`${e}.png`);if(Ea(i))return i;try{return zA(ZA(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>=oF||!r||!sn(r.post))continue;let{site:i,post:s}=r;this.prefetching++,$o(i,s,this.signal).then(async()=>{let o=sn(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,fF),s=Math.max(1,Math.round(r*i/n)),o={...this.view.tune},{coloring:a}=this.view,c=!Lv(o,this.view.untuned),u=o.opacity!==this.view.untuned.opacity,l=c?`-${o.size}-${o.at}${u?`-${Math.round(o.opacity*100)}`:""}`:"",d=$n(this.scratch,`${t.site.key}-${t.id}${e==="cut"?"c":""}${a==="original"?"o":""}-${i}x${s}${l}.png`),f=`${t.site.key}:${t.id}:${e}:${a}:${i}x${s}`,h=this.clarity.get(f);if(h&&Ea(d))return t.fill=h.fill,{clear:h.clear,path:d,opacity:h.opacity,touched:u};let p=await this.renders.run({job:"show",from:e==="cut"?t.cut:t.path,to:d,width:i,height:s,colors:this.entry,tone:this.tone,blur:this.blurring*i/Od(n,r).width,coloring:a,...c?{tune:{size:o.size,at:o.at,...u?{opacity:o.opacity}:{}}}:{}});if(this.clarity.set(f,p),t.fill=p.fill,c)this.keepTuned(d);return{clear:p.clear,path:d,opacity:p.opacity,touched:u}}keepTuned(t){this.tunedFiles.push(t);while(this.tunedFiles.length>hF){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=eF(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:YA()}:{}}),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 jv(t,e,n){let r=new xm(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 Gv(t){let e=J(),n=ie(e),r=An(n.palettes,t);if(!process.stdin.isTTY||!process.stdout.isTTY)throw Error("needs a terminal");let i=new xm(e,n,r,r.booru??""),s=await i.run();if(i.saved&&s!==0)return process.stderr.write(`${i.saved}
|
|
719
|
-
`),0;return s}import{spawn as
|
|
702
|
+
}`;async function Jy(){if(gm())return;if(process.platform==="darwin"){let[t="",e=""]=(await bn("osascript",["-l","JavaScript","-e",zA])).stdout.trim().split("\t");return{stamp:t,picture:e==="picture"}}if(process.platform==="linux"&&!qy()){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 qu(t){return t.length>8&&/^(?:\/|~\/|file:|https?:)/.test(t)}var pa=(t)=>Buffer.from(t).toString("base64"),hm=(t)=>Buffer.from(t,"base64");function Gy(t,e){return e.find((n)=>t.includes(n))}class bm{clipboard=!1;drops=!1;reading;offered=[];dropping;pw=pa(By("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;${dm.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=${pa("ttheme")}:pw=${this.pw};${pa(".")}\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?hm(t.mime).toString("utf8"):r.mime,e)r.chunks.push(hm(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=Gy(s,[...mm,...GA]);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=${pa(c)}:pw=${a};${pa(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=dm.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=Gy(a,dm);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(hm(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"?Qs(a).find((u)=>TA(u)):void 0;o=c?{kind:"bytes",bytes:new Uint8Array(Du(c)),source:c}:{kind:"text",text:a}}this.send("\x1B]72;t=r:o=1\x1B\\"),this.deliver(o)}}var wm=5,DA=6,Vy=0.05,qA=[1,2,3,4,5,6,9,10,11,12,13,14],Zy=(t,e)=>(e-t+360)%360<=180?1:-1;function ga(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 $m(t,e,n){if(ga(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(ga(t,o,e)===void 0)i=o;else r=o}return r}function He(t,e,n){return`#${(ga(t,$m(t,n,e),n)??[0,0,0]).map((i)=>i.toString(16).padStart(2,"0")).join("")}`}function YA(t,e){let{l:n,c:r}=St(t);return He(n,r,(e+360)%360)}function JA(t,e,n){let{l:r,c:i,h:s}=St(t),o=yt(e)<0.18,a=(l)=>He(o?r+(1-r)*l:r*(1-l),i,s);if(bt(a(1),e)<n+Vy)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+Vy)u=f;else c=f}return a(u)}function VA(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(He(c,r,i))<=e-0.005)s=c;else o=c}return He(s,r,i)}function ZA(t,e,n){let r=me[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)=>Qn.every((h)=>{let p=(l>8?8:0)+h;if(p===l)return!0;let $=St(t[p]);return $.c<co||xe($.h,f)>=Vi+1||Math.abs($.l-d)>=Zi}),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(xe(l,f)>Le-wm||!n.has(e+8)&&!a(e+8,f,s.l))continue;let d=xe(l,i.h)+xe(f,s.h);if(d<u)u=d,c=[l,f]}}return c}class Qy{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,YA(this.theme.ansi[t],n))}roles(){let t=new Set(this.theme.signatureSlots);for(let{slot:n,hue:r}of Xn(this.theme)){let i=me[Qe(n)];this.rehue(n,"ansi-role",i.center+Zy(i.center,r)*(i.width-wm))}for(let{normal:n,gap:r}of Mn(this.theme)){if(r<=Le)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+Zy(o,a)*(Le-wm))}let e=Qi(this.theme);for(let[n,r]of On(this.theme)){let i=Qe(e.has(r)?n:r),s=ZA(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,JA(this.get(a),o,s))};if(n("foreground",["foreground"],7),n("accents",qA.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",VA(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 Yu(t){let e=new Qy(t);for(let n=0;n<DA;n++)if(e.readability(),e.roles(),Qr(e.theme).length===0)break;return{theme:e.theme,moves:e.net(),left:Qr(e.theme)}}var Ci=[{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}],ba={background:0.21,foreground:0.88,hue:265,tint:0.02,lightness:0.72,chroma:0.12,brights:0.06},Xy=(t,e,n)=>Math.min(n,Math.max(e,t));function km(t,e,n){let r=t[e.key]+e.step*n,i=e.wraps?(r%e.max+e.max)%e.max:Xy(r,e.min,e.max);return{...t,[e.key]:Math.round(i*1e4)/1e4}}function Wr(t){let e=(r,i,s)=>He(Xy(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 Qn){let i=me[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 Bi=["background","foreground","cursor","selection",...Array.from({length:16},(t,e)=>`ansi${e}`)],L=["Background","Foreground","Cursor","Selection"],Ju=["Black","Red","Green","Yellow","Blue","Magenta","Cyan","White"],Kr=L.length+Ju.length,Ye=[{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}],tv=5,Jn=Ye.length,to=["this","pair","normals","brights","accents"],Vu=[1,2,3,4,5,6,9,10,11,12,13,14],ev=Vu.filter((t)=>t<8).map((t)=>L.length+t),nv=Vu.filter((t)=>t>8).map((t)=>L.length+t);function ym(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"?ev:t==="brights"?nv:[...ev,...nv];return r.includes(e)?r:[e]}function QA(){return Array.from({length:Kr},(t,e)=>e<L.length?[e]:[e,e+8]).flat()}function XA(t){let e=t.trim();return/^https?:\/\/\S+$/i.test(e)||Qs(e).length>0}function Xs(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 ji(t){if(t<L.length)return{name:L[t],about:Bi[t]};let e=t-L.length,n=Ju[e%8];return e<8?{name:n,about:`ansi ${e}`}:{name:`Bright ${n.toLowerCase()}`,about:`ansi ${e}`}}var eo=(t,e,n)=>Math.min(n,Math.max(e,t));function rv(t){return t.length===1?t.toLowerCase():t}function tH(t){return eo(Math.round(t),0,255).toString(16).padStart(2,"0")}function iv(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)=>tH(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 He(eo(s,0,1),Number(i[3]),Number(i[4])%360)}return}function Li(t){let e=pe.find((n)=>n.rule===t);return e?.min??e?.max??0}function Gi(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 eH(t,e){let n=t-L.length,r=t<=1?"foreground":t===3?"selection":n===7||n===15?"light-ansi":n===8?"ansi8-visible":Vu.includes(n)?"accents":void 0;return{against:t===0||t===3?1:0,floor:r===void 0||e.includes(r)?void 0:Li(r)}}function Em(t,e,n,r){let i=Gi(t,e,n),{background:s,foreground:o,selection:a,ansi:c}=ee(t),u=(l,f,d)=>bt(f,d)<Li(r)?[l]:[];if(r==="foreground")return bt(o,s)<Li(r)?[1,0]:[];if(r==="selection")return bt(o,a)<Li(r)?[3,1]:[];if(r==="accents")return Vu.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])>Li(r)?[L.length]:[];if(r==="ansi-role")return Xn(i).map(({slot:l})=>L.length+l);if(r==="bright-follows")return Mn(i).filter(({gap:l})=>l>Le).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 nH(t,e,n){return new Set(Bi.flatMap((r,i)=>Zu(t,e,n,i).some((s)=>s.ok===!1)?[i]:[]))}function Yn(t,e,n,r,i){let s=bt(t,e),o=Li(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 Zu(t,e,n,r){let i=ee(t),s=Gi(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[Yn(i.foreground,i.background,"foreground","Foreground on it",n),Yn(i.ansi[b],i.background,"accents",`Weakest, ANSI ${b},`,n),Yn(i.ansi[8],i.background,"ansi8-visible","ANSI 8 on it",n)]}if(r===1)return[Yn(i.foreground,i.background,"foreground","On background",n),Yn(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[Yn(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=Li("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[Yn(a,i.background,"light-ansi","On background",n)];if(o===8)return[Yn(a,i.background,"ansi8-visible","On background",n)];let c=[Yn(a,i.background,"accents","On background",n)],u=St(a),l=Qe(o),f=me[l],d=`${f.name} ${f.center}±${f.width}°`;if(u.c<co)c.push({ok:void 0,text:"Too grey to have a hue"});else if(Qi(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=xe(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<=Le,text:`${p.gap.toFixed(0)}° from ANSI ${h} · ≤ ${Le}°`});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 ${Vi}° and ${Zi} lightness`});return c}function ov(t,e,n){let r=Xe(Gi(t,e,n));return pe.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?Em(t,e,n,i.rule):[]}})}var rH=new Set(["reset","reset-all","hex","paste","fix","open","tune","sig","follow"]),av=Ye[1].max;function vm(t){let[e,n,r]=rt(t);return e===n&&n===r}function Sm(t,e){return Math.floor($m(t,e,av)*1e4)/1e4}function sv(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 wa{mode;seeds=ba;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=Xs(t.colors??Wr(this.seeds)),this.lch=this.lchs(),this.start=[...this.list],this.original=t.original?Xs(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 nH(this.list,this.signature,this.waive)}failing(){return Qr(Gi(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(XA(t)){this.findPictures({paste:t});return}if(this.mode==="seeds")return;let e=iv(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===Jn){this.reach(21**n);return}this.put(sv(Ye[t],n))}sow(t,e){let n=Ci[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=km({...this.seeds,[n.key]:sv(n,r)},n,0),this.list=Xs(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,Ci.length-1);else if(this.mode==="tune")this.channel=e(this.channel,Jn);else this.row=e(this.row,Kr-1),this.lastEdit=void 0}lchOf(t){let e=St(t);return vm(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)=>!vm(e));return t?St(t).h:ba.hue}seedKey(t){let e=Ci.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=Ci[this.field],r=(t.endsWith("left")?-1:1)*(t.startsWith("shift")?n.wraps?10:tv:1);this.seeds=km(this.seeds,n,r),this.list=Xs(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: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=QA(),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 ym(this.scope,this.slot())}tuneKey(t){let e=Ye.length+1,n=this.channel===Jn;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=Ye[this.channel];this.step(r*(t.startsWith("shift")?i.wraps?10:tv:1))}}else if(t==="home"||t==="end")if(n)this.reach(t==="home"?this.partner().floor??1:21);else{let r=Ye[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=Ye[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=to.indexOf(this.scope);for(let e=1;e<=to.length;e++){let n=to[(t+e)%to.length];if(n==="this"||ym(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"&&ym(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 eH(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)=>He(d,Math.min(i,Sm(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=Ye[this.channel],n=this.lch[this.slot()][e.key];this.put(n+e.step*t)}put(t){let e=this.slot(),n=Ye[this.channel],r=n.wraps?(t%n.max+n.max)%n.max:eo(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=Sm(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(eo((this.holds.get(d)??h.c)+f,0,av));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"&&vm(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(eo(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,Sm(e,r));this.lch[t]={l:e,c:i,h:r},this.list[t]=He(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=iv(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=Ti(e,rv(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=Xs(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=Ti(this.filter,rv(t),(r)=>/^[a-z0-9@/-]$/.test(r));if(n!==void 0)this.filter=n,this.pick=0}}remember(t){if(t!==this.lastEdit||rH.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,eo(n.l+0.06,0,1),n.c,n.h),this.col=1,this.notice=`${ji(e).name} follows ${ji(t).name.toLowerCase()}`}mark(){let t=Bi[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=Gi(this.list,this.signature,this.waive),{theme:e,moves:n,left:r}=Yu({...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=Xs({...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 pH,readFileSync as Im,writeFileSync as pv}from"node:fs";import{dirname as gH}from"node:path";import{isMainThread as bH,parentPort as gv,Worker as wH}from"node:worker_threads";var iH=new Set(["comic","4koma","monochrome","greyscale","sketch","lineart","speech_bubble"]),sH=new Set(["scenery","landscape","scenic","no_humans","wide_shot","very_wide_shot"]),oH=0.04,aH=0.1,cH=0.05,uH=4096;function lH(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=[...lH(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)+([...sH].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 Qu(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 uv(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 Mm(t){let e=t/255;return e<=0.04045?e/12.92:((e+0.055)/1.055)**2.4}function cv(t,e,n){let[r,i,s]=[Mm(t),Mm(e),Mm(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 lv(t,e){let n=e.map((o)=>cv(...rt(o))).filter(([,o,a])=>Math.hypot(o,a)>=oH);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]=cv(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)<aH)i[$]=i[$]+1})}if(s===0)return 0;return i.reduce((o,a)=>o+Math.min(1,a/s/cH),0)/n.length}var dH=/(?:^|[^0-9a-f])([0-9a-f]{32})(?:[^0-9a-f]|$)/i,hH=[[/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 Om(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 fv(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}`]:[],...hH.flatMap(([r,i])=>{let s=r.exec(e.source)?.[1];return s?[`post:${i}:${Number(s)}`]:[]}),...e.family?[`family:${t.key}:${e.family}`]:[]]}function dv(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 hv(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 mH(t,e){let n=BigInt(`0x${t}`)^BigInt(`0x${e}`),r=0;while(n>0n)r+=Number(n&1n),n>>=1n;return r}function mv(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&&mH(t.hash,e.hash)<=2}var $H={thumb:"tile",band:"band",match:"tile",show:"view",backdrop:"view",redraw:"view"},Xu;async function kH(t){if(t.job==="redraw")return Iu(t.home,t.name,t.key,t.paint,t.blur,t.aligns,t.user);if(t.job==="show"){if(Xu?.from!==t.from){let o=rr(new Uint8Array(Im(t.from)),ge);Xu={from:t.from,clear:In(o),inked:Rf(o)}}let{image:r,fill:i,opacity:s}=dw(Xu.inked,t.colors,t.tone,t.width,t.height,t.blur,t.tune,t.coloring);return pH(gH(t.to),{recursive:!0}),pv(t.to,rn(r)),{clear:Xu.clear,fill:i,opacity:s}}let e=rr(new Uint8Array(Im(t.from)),ge);if(t.job==="backdrop"){sc(t.home,t.colors,t.tone,e,{...t.origin,bytes:new Uint8Array(Im(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)Ro(D(t.home),r,t.tune,t.aligns??!0,t.user??t.home);return 0}if(t.job==="match")return{match:lv(e,t.colors),hash:hv(e)};if(t.job==="thumb")return H(t.to,rn(Qg(e,t.width,t.height))),0;let n=e.data.subarray(t.y*e.width*4,(t.y+t.height)*e.width*4);return pv(t.to,rn({width:e.width,height:t.height,data:n})),0}function yH(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 xm{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 wH(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 $a{lines=new Map;run(t){let e=$H[t.job],n=this.lines.get(e);if(!n)n=new xm,this.lines.set(e,n);return n.send(t)}close(){for(let t of this.lines.values())t.close();this.lines.clear()}}class Nm{lines;constructor(t){this.lines=Array.from({length:Math.max(1,t)},()=>new xm)}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&&gv)yH(gv);import{existsSync as vH,mkdtempSync as SH,readFileSync as EH,rmSync as bv,writeFileSync as MH}from"node:fs";import{tmpdir as OH}from"node:os";import{basename as $v,join as wv}from"node:path";var IH=6;class ka{dir;made=[];of(t,e){this.dir??=SH(wv(OH(),"ttheme-tint-"));let n=wv(this.dir,`${$v(t,".png")}.${e.slice(1).toLowerCase()}.png`);if(!vH(n)){let r=new Uint8Array(EH(t));MH(n,Ga(r,e)??ri(ni(Ht(r)),e)),this.made.push(n);while(this.made.length>IH)bv(this.made.shift(),{force:!0})}return n}clear(){if(this.dir)bv(this.dir,{recursive:!0,force:!0});this.dir=void 0,this.made.length=0}}function tl(t,e,n,r,i){if($e(t)==="original")return{image:e,opacity:t.peak?hs(n,t.peak):t.opacity};let s=an(n,[...r]);return{image:s.color===t.tone?e:i.of(e,s.color),opacity:s.opacity}}function el(t,e){let n=$v(e);return t.find((r)=>n.startsWith(`${r.stem}.`)||n.startsWith(`${r.stem}@`))}var HH=2147483625,vv=2147483626,wn=2147483627,FH=-1073741827,Sv=-1073741826,CH=-1073741825,LH=4;function jH(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 GH(t){try{let e=RH(t,"r"),n=Buffer.alloc(24);return TH(e,n,0,24,0),xH(e),n.readUInt32BE(0)===2303741511?{width:n.readUInt32BE(16),height:n.readUInt32BE(20)}:void 0}catch{return}}class nl{ready=()=>{};cell={w:0,h:0};held;tints=new ka;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)||!zc(t,r)||!(Yc(t)||wi(t)))return;return new nl(t,e,n)}constructor(t,e,n){this.home=e,this.name=n,this.views=wi(t),this.banded=Dc(t),this.files=qc(t)}measured(t){if(this.cell.w===0&&t.w>0&&t.h>0)this.cell=t}load(){let t=D(this.home),e=ke(t,this.name,PH()),n=[];try{n=vt(t).palettes[this.name]?.pictures??[]}catch{}let r=e?el(n,e.image):void 0;this.held=e&&r?{picture:r,image:e.image,opacity:e.opacity,cover:e.cover,at:Bt.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,$i(l)}let a=this.layer(HH,FH,"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(vv,CH,"f=32",Buffer.from([...rt(s),c]),r,i)}else a+=this.drop(wn)+this.drop(vv);return a}resized(){this.sent.clear(),this.placed.clear(),this.viewed=""}clear(){let t=this.views&&this.viewed?$i(""):"";for(let e of this.sent.keys())t+=ma(e);return this.resized(),t}close(){let t=this.clear();if(this.tints.clear(),this.renders?.close(),this.scratch)kv(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=tl(s.picture,s.image,o,e,this.tints),c=GH(a.image);if(!c)return;let u=bs(c.width,c.height,r*this.cell.w,i*this.cell.h,100,s.at,s.cover),l=jH(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=_u({id:wn,path:e,row:0,col:0,cols:0,rows:0,z:Sv},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=${Sv},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),ma(t)}band(t,e,n){let r=`${t}|${e}|${n}`,i=this.bands.get(r);if(i)return i;this.scratch??=NH(yv(AH(),"ttheme-edit-")),this.renders??=new $a;let s={path:yv(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<=LH)break;if(a.ready&&a.path!==this.sent.get(wn))this.bands.delete(o),kv(a.path,{force:!0})}return s}}var Ev=80,Mv=24,ya=50,Rm=11;function Lt(t,e){return ae(t,e)}function Nv(t){return{color:t,dim:(e)=>t?`${P}${e}${he}`:e,bold:(e)=>t?`${at}${e}${he}`:e,fg:(e)=>t?Ce(e):"",bg:(e)=>t?`\x1B[48;2;${rt(e).join(";")}m`:""}}function Ov(t){return yt(t)>0.35?"#000000":"#ffffff"}function Rv(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(Ov(l))}●\x1B[39;49m`;if(u===a)return c?`${t.bg(c)}${t.fg(Ov(c))}○\x1B[39;49m`:`${t.fg("#aaaaaa")}○`;return c?`${t.fg(c)}█`:`${t.fg(r?"#777777":"#555555")}░`}).join("").concat("\x1B[39m")}function BH(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 ga(o.l,o.c,o.h)?He(o.l,o.c,o.h):void 0})}function Tm(t,e,n,r){return Math.round((t-e)/(n-e)*(r-1))}function Tv(t,e){return t.held!==void 0&&t.held-e.c>0.0005?t.held:void 0}function Pv(t,e,n,r){let i=Tv(e,n);return Ye.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=Rv(t,BH(n,s,r),Tm(c,s.min,s.max,r),a,s.key==="c"&&i!==void 0?Tm(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 Av(t,e,n){let r=e.mode==="tune"&&e.channel===Jn,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:Jn};return`${Lt(d,r?t.bold("▸◐"):t.dim(" ◐"))} ${Lt({kind:"bar",channel:Jn},l)} ${Lt(d,r?t.bold(f):t.dim(f))}`}function Hv(t,e){if(e.mode!=="tune"||e.slot()<L.length)return[];let n=ee(e.list),r=to.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 _H(t,e){if(!t.misses().has(e))return;if(Em(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 Fv(t,e,n){let r=Zu(t.list,t.signature,t.waive,e),i=Tv(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 Iv={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 UH(t){return`oklch ${t.l.toFixed(3)} ${t.c.toFixed(3)} ${t.h.toFixed(0)}°`}function Pm(t){return`${t.l.toFixed(2)} ${t.c.toFixed(3)} ${t.h.toFixed(0).padStart(3)}°`}function Cv(t,e){return`${t.dim("oklch")} ${t.bold(`${e.l.toFixed(3)} ${e.c.toFixed(3)} ${e.h.toFixed(0)}°`)}`}function rl(t,e){return e===void 0?t.dim("·"):e?t.dim("✓"):t.bold("✗")}function Lv(t,e,n,r=ya){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=` ${rl(t,u.ok)} ${jt(u.ok===!1?u.label:t.dim(u.label),t.dim(l),a-2)}`,d=[...new Set(u.slots)].map(($)=>ji($).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 jv(t,e,n,r=ya,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(Bi[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} `}${Pm(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<Kr;f++){let d=i&&f===e.row,h=Ju[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,...Lv(t,e,n-l.length,r)]}function WH(t,e,n){let r=ee(e.list),i=[` ${t.dim("Seeds")}`];Ci.forEach((s,o)=>{let a=o===e.field,c=e.seeds[s.key],u=Array.from({length:Rm},(g,b)=>{let y=s.min+(s.max-s.min)*b/(Rm-1);return Iv[s.key](Wr({...e.seeds,[s.key]:y}))}),l=Rv(t,u,Tm(c,s.min,s.max,Rm),a),f=`${c.toFixed(s.digits)}${s.wraps?"°":""}`.padStart(6),d=Iv[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.",ya-4))i.push(` ${t.dim(s)}`);return i.push(""),[...i,...Lv(t,e,n-i.length)]}function KH(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 zH(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 Gv(t,e,n,r,i,s){let o=te.indexOf(gi(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 gi(i).lines){let f=_c(l,n-2);if(!f)continue;if(c.length>=r)break;let d=t.color?f.map(([h,p])=>`${zH(t,e,p,KH(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 DH=["Bk","Rd","Gr","Ye","Bl","Ma","Cy","Wh"];function xv(t,e,n,r,i,s,o){let a=(i-s)/(o-1),c=Bv(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 Bv(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 qH(t,e){let n=Bv(e);return` ${DH.map((r,i)=>n.has(i)?t.bold(` ${r} `):t.dim(` ${r} `)).join("")}`}function YH(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(me)){let d=xe(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(me).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 JH(t,e,n){let r=Gi(n,e.signature,e.waive),i=(a)=>ji(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°`),...Xn(r).map(({slot:a,over:c})=>{let u=me[Qe(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 Am(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),...xv(t,e,s,(u)=>u.l,1,0.3,8),qH(t,e)];if(i)c.push("",t.bold("Chroma"),...xv(t,e,s,(u)=>u.c,a,0,5),"",...YH(t,s));return[...c,...JH(t,e,s)].slice(0,r)}function VH(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 ZH(t,e,n,r){let i=e.slot(),s=e.list[i],o=e.lch[i],a=e.start[i],{name:c,about:u}=ji(i),l=e.signature.includes(Bi[i]),f=Math.max(8,Math.min(64,n-12));if(e.view==="relations"&&e.mode!=="tune")return[VH(t,e,n),"",...Am(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]=rt(s);if(h.push(`${p}${$??Cv(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}${UH(e.lchOf(a)).slice(6)} · ${a}`):t.dim("as it opened")}`)}h.push(""),h.push(...Pv(t,e,o,f),Av(t,e,f));let S=Hv(t,e);if(S.length>0)h.push(...S);if(e.view==="relations")return h.push("",...Am(t,e,n,r-h.length-1,!1)),h;h.push("");for(let N of Fv(e,i,o))kt(N.text,n-2).forEach((R,F)=>{h.push(`${F===0?rl(t,N.ok):" "} ${N.ok===!1?R:t.dim(R)}`)});let E=_H(e,i);if(E)h.push(t.dim(` ${E}`));let I=r-h.length-1;if(I>=3)h.push("",...Gv(t,ee(e.shown()),n,I,e.scene,i));return h}function QH(t,e,n,r){return[jt(`${t.bold("Sample")} ${t.dim("what the seeds grow")}`,"",n),"",...Gv(t,ee(e.list),n,r-2,e.scene,-1)]}var XH=[["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 tF(t,e,n){let r=[` ${t.bold("Help")}`,""];for(let[i,s]of XH.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 eF(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 nF=new Set(["enter","s","?","g","a"]);function rF(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===Jn?"1-9":"0-9",e.channel===Jn?"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&&!nF.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 Hm=50,Fm=22;function _v(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 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}=ji(i),f=e.signature.includes(Bi[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 `:""}${Pm(e.lchOf(a))}`:"",c!==s?`default ${t.color?`${t.fg(c)}■\x1B[39m `:""}${Pm(e.lchOf(c))}`:""].filter(Boolean),$=[jt(`${t.bold(u)} ${t.dim(l)}`,f?t.dim("◆ signature"):"",n),`${d}${h??Cv(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(...Pv(t,e,o,g),Av(t,e,g));for(let b of Hv(t,e))if($.length<r)$.push(ot(b,n));for(let b of Fv(e,i,o))for(let[y,S]of kt(b.text,n-2).entries()){if($.length>=r)return $;$.push(`${y===0?rl(t,b.ok):" "} ${b.ok===!1?S:t.dim(S)}`)}return $}function Uv(t,e,n,r,i){let s=Nv(r);if(t.view==="relations"&&t.mode==="list"&&t.typing===void 0){let y=i?s.bold("Palette"):s.dim("Palette"),S=Am(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=jv(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(...iF(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?Zu(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} ${rl(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 sF(t,e,n,r){let i=Nv(r);if(e<Ev||n<Mv){let p=[i.bold("ttheme palette editor"),`Needs ${Ev}×${Mv} — 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=tF(i,t,e);else if(t.overlay==="open")d=eF(i,t,e,f);else{let p=e-ya-2,$=t.mode==="seeds"?WH(i,t,f):jv(i,t,f),g=t.mode==="seeds"?QH(i,t,p,f):ZH(i,t,p,f);d=Array.from({length:f},(b,y)=>`${ot($[y]??"",ya)}${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("",rF(i,t,e)),h}function Cm(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 oF=[Au,zn,Pi,Br],aF=33;async function Wv(t,e){let n=new wa(t),r=e.backdrop,i=(s)=>n.typing===void 0&&qu(s);return _r({modes:[...oF,...Ds()],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))$+=Bo(b,g),o[b]=g}),s.write($)},d=new xi({write:($)=>s.write($),view:()=>u?void 0:{lines:sF(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,aF)},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(ki),h()};if(s.write(ki),s.onResize(()=>{r?.resized(),d.reset(ki),d.request()}),r){r.load(),r.ready=()=>d.request();let $=new ia;s.ask(Tu,(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")Cm(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 yF}from"node:child_process";import{createHash as i1}from"node:crypto";import{existsSync as Sa,mkdirSync as vF,mkdtempSync as SF,readFileSync as EF,rmSync as il}from"node:fs";import{homedir as MF,tmpdir as OF}from"node:os";import{basename as IF,dirname as xF,join as $n}from"node:path";import{pathToFileURL as Dv}from"node:url";import{existsSync as cF,readFileSync as uF,statSync as lF}from"node:fs";import{join as Kv}from"node:path";function fF(t,e){try{return JSON.parse(uF(Kv(Ge(t),e),"utf8"))}catch{return{}}}function dF(t,e,n){H(Kv(Ge(t),e),`${JSON.stringify(n)}
|
|
703
|
+
`)}class Lm{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 yo(t,e,this.signal),s=oi(t,e),o=(i===void 0?await Hb(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)dF(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(!Ya(n,r))return Promise.resolve();let i=be(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=$w(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 as(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=xb(o);return this.owners.set(t.key,a),a}async cached(t,e,n,r){if(cF(e))return lF(e).size;let i=this.inflight.get(e);if(i)return i;let s=(async()=>{let o=await Za(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=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 qa(t,e.id,n)}catch{return}if(!i?.owner)return;r[e.id]=i,this.unsaved.add(`${t.key}/credits.json`)}ko(e,i),this.credited()}}import{rmSync as hF}from"node:fs";import{join as mF}from"node:path";var no=2147483645,va=2147483646,zv=-1073741827,pF=-1073741828,gF=16,bF=0.4,wF=3221225472,$F=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 jm=kF(process.env.TTHEME_BG_MARGIN);class Gm{screen;gliding;sent=new Map;placed=new Map;covered="";viewed="";bands=Dc(process.env);files=qc(process.env);moves=Y0(process.env);layers=Yc(process.env);wipes=J0(process.env);views=wi(process.env);bandFiles=new Map;nextBand=wF;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 xi({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=fm(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>=am){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=_u(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+=um(a.id);r+=Ty(a,n),this.placed.set(a.id,c)}}for(let o of this.sent.keys())if(!i.has(o))r+=ma(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=Dn(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 fm({...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=${no},q=2;${i}\x1B\\`,jm)r+=`\x1B_Ga=t,f=32,s=1,v=1,i=${va},q=2;AAAAAA==\x1B\\\x1B[H\x1B_Ga=p,i=${va},p=${va},c=1,r=1,C=1,z=${pF},q=2\x1B\\`}else if(!this.moves)r+=um(no);if(this.covered=n,jm){let{x:i,y:s}=jm;return`${r}\x1B_Ga=p,i=${no},p=${no},P=${va},Q=${va},H=${-i},V=${-s},c=${t+2*i},r=${e+2*s},C=1,z=${zv},q=2\x1B\\`}return`${r}\x1B[H\x1B_Ga=p,i=${no},p=${no},c=${t},r=${e},C=1,z=${zv},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,$i(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:mF(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<=$F)return;if(e.ready&&!this.sent.has(e.id))this.bandFiles.delete(t),hF(e.path,{force:!0})}}}var _i=[{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:is,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:os,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"]},...Ls()?[{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:pb,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:gb,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:bo},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:uf,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 qv(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 wo(e).join(" ");return t.choices.find((n)=>n===e)??t.choices[0]}var NF=["fit","newest","score"];function Bm(t){return NF.find((e)=>e===t)??"fit"}var RF={left:-1,right:1,"shift-left":-10,"shift-right":10};function Yv(t){if(process.env.SSH_CONNECTION||!/^(?:https?|file):/i.test(t))return;try{let e=yF(process.platform==="darwin"?"open":"xdg-open",[t],{stdio:"ignore",detached:!0});e.on("error",()=>{}),e.unref()}catch{}}function TF(t,e,n){if(e<0){if(t!=="fill")return Math.max(ol,t+e);if(!n)return t;return Math.max(ol,Math.max(100,n)+e+1)}return t==="fill"||t+e>n?"fill":t+e}function s1(t,e){return t.size===e.size&&t.at===e.at&&t.opacity===e.opacity}function PF(t,e){if(s1(t,e))return;return{...t.size!=="fill"?{size:t.size}:{},...t.at!==e.at?{position:Bt[t.at-1]}:{},...t.opacity!==e.opacity?{opacity:t.opacity}:{}}}function Jv(t,e){let n=D(t);return re(t,e).flatMap((r,i)=>{let[,s,o]=/^([a-z.]+)_(\d+)$/.exec(r.key)??[],a=[...Y,qn].find((c)=>c.key===s);if(!a||!o)return[];return[{key:r.key,id:Number(o),ansi:a.ansi,...a===qn?{}:{page:a.pageUrl(Number(o))},up:i===0,from:$n(n,r.original??r.fill)}]})}function AF(t){return t.length>=2&&!/^\d+$/.test(t)&&!t.includes("://")&&!/^[\w.]+:\d+$/.test(t)}var Vv=12,HF=4,FF=150,CF=300,Zv=12,LF=2,jF=150,GF="\x1B[?5522$p\x1B]72;t=q\x1B\\\x1B[c",BF=4000,_F=8000,Qv=/\.(png|jpe?g|gif|webp|heic|tiff?|bmp)$/i,UF=process.platform==="win32"?"alt+v":"ctrl+v",Xv=process.platform==="darwin"?"ctrl+shift+cmd+4 copies a screenshot":"copy a picture first",WF=1280,KF=16,zF=Bt.indexOf("top-right")+1,ol=20,t1=2,e1=3,DF=/[\p{Script=Hangul}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Han}]/u,qF=8,YF=9;function sl(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 Ea(t){if(!(t instanceof Error))return String(t);if(t instanceof AggregateError&&t.errors[0])return Ea(t.errors[0]);if(t.cause)return Ea(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 _m(t,e){return`${t}: ${Ea(e)}`}function n1(t){return t.width*t.height}function r1(t,e){return`${t}-${i1("sha1").update(e).digest("hex").slice(0,8)}`}class Um{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(_i.map((t)=>[t.name,qv(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 $a;showing;thumbless=new Set;current;fetch;settle;suggestTimer;suggesting;countTimer;counting;terminal;grabber=new bm((t)=>this.write(t),(t)=>void this.got(t));noticeTimer;peekTimer;peeked;attaching;done;scratch=SF($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=an(n,n.signatureSlots),this.blurring=Rr(t);let s={size:"fill",at:zF,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:Bm(this.setting("TTHEME_FIND_ORDER")),solo:this.setting("TTHEME_FIND_SOLO")==="on",rating:si(this.setting("TTHEME_FIND_RATING")),block:os(this.setting("TTHEME_FIND_BLOCK")),sets:this.setting("TTHEME_FIND_SETS")==="show"?"show":"fold",narrow:this.narrowed(),enabled:bo(this.setting("TTHEME_FIND_SITES")),hide:_a(this.setting("TTHEME_FIND_HIDE")),hideTags:wo(this.setting("TTHEME_FIND_HIDE_TAGS")),advanced:!1,settings:_i.map((o)=>({label:o.label,choices:[...o.choices],value:this.setting(o.name),default:qv(o,Ko(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:Jv(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:Zc(t),editing:r===""?"":void 0,chips:[]},this.paint=new Gm({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 Lm({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=sl(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??HF}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 ff(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(Ge(t),"orig",`${e}.${n}`)}previewPath(t){let{url:e}=Wa(t.site,t.post);return $n(Ge(t.site),"thumb",`${r1(t.post.id,e)}.${cr(e)}`)}tileOf(t,e){let{site:n,post:r}=t,i=be(n,r.id),s=sn(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===qn?"":n.pageUrl(r.id),artist:n===qn?Ky(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 _r({modes:[Br,...Ds()],assume:[zn,Pi],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(ki);let n=new Promise((i)=>{this.done=i}),r=setInterval(this.onClock,250);setTimeout(hc,0);try{let i=new ia,s=await e.ask(Tu,(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(GF,(o)=>o.kind==="attributes"?!0:void 0,500,!1);if(this.grabber.start(),e.hold(ly),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\\${ki}`),this.kept.save(),this.renders.close(),il(this.scratch,{recursive:!0,force:!0}),Nb()}})}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!Ua(e,this.site??Y[0]);return Qs(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 — ${Xv}`);return}this.pasted(t.text);return}await this.bring(()=>zu(t.bytes,t.source))}notice(t,e=BF){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 Jy()}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 · ${UF} uses it`,clearTimeout(this.peekTimer),this.peekTimer=setTimeout(()=>{t.hint=void 0,this.paint.draw()},_F),this.paint.draw()}async fromClipboard(){let t=this.view;if(gm()){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 Yy($n(this.scratch,`clipboard-${Date.now()}.png`))}catch(r){this.notice(`Could not read the clipboard: ${Ea(r)}`);return}if(clearTimeout(this.peekTimer),t.hint=void 0,"image"in e){await this.bring(async(r)=>({...await pm(e.image,r),source:"clipboard"}));return}let n=e.text.trim();if(!n){this.notice(`No picture on the clipboard — ${Xv}`);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=Ua(e,this.site??Y[0]);if(i){await this.jump(i.site,i.id);return}}let[n,...r]=Qs(e).sort((i,s)=>Number(!Qv.test(i))-Number(!Qv.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)=>pm(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(Ea(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=Dy(i.bytes);zy(s,i.source);let o=this.origPath(qn,s,i.ext);H(o,i.bytes);let a=Dv(o).href,c={id:s,file:a,width:i.width,height:i.height,ext:i.ext,preview:a,owner:"",score:0,rating:"s",md5:i1("md5").update(i.bytes).digest("hex"),source:i.source,tags:[],named:{artist:[],character:[],copyright:[]},solo:void 0,family:0,smaller:[]},u={site:qn,post:c},l=this.previewPath(u);H(l,i.bytes),++this.gen,this.current=void 0,n.shown=void 0;let f=sl(`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(be(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<Hi.cols||this.rows<Hi.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)Yv(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*Dn(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=ol+Math.round(i*(s-ol+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}=Dn(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=ha(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=ha(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=Cy(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(_i[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":wo(r).join(" "),n.typing=void 0,this.recount(),e==="enter"){this.paint.draw();return}this.panelKey(e);return}let i=Ti(r,e,(s)=>t.entry==="number"?/^[0-9]$/.test(s)&&r.length<lm:/^[\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),CF)}pending(){let t=(e)=>this.view.settings[_i.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:Bm(t("TTHEME_FIND_ORDER")),rating:si(t("TTHEME_FIND_RATING")),narrow:ff(t("TTHEME_FIND_MIN_SCORE"),t("TTHEME_FIND_MIN_SIZE"),t("TTHEME_FIND_PNG")),enabled:bo(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 pf(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=_i.map((r)=>this.setting(r.name));t.settings.forEach((r,i)=>{let s=_i[i];if(s)this.values.set(s.name,r.value)});let n=_i.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=os(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=Bm(this.setting("TTHEME_FIND_ORDER")),t.solo=this.setting("TTHEME_FIND_SOLO")==="on",t.narrow=this.narrowed(),t.enabled=bo(this.setting("TTHEME_FIND_SITES")),t.hide=_a(this.setting("TTHEME_FIND_HIDE")),t.hideTags=wo(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=Sa(e)?EF(e,"utf8"):"";return H(e,t.reduce((r,[i,s])=>Qc(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=Ti(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=AF(n),i=Lw(e,e1,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?f0(this.catalog.palettes,this.entry,n).map((c)=>({value:c.booru,count:0,palette:c.name})):[],o=[...new Map([...s.slice(0,e1),...i].map((c)=>[c.value,c])).values()];if(t.suggest=o.length>0?o:void 0,i.length>0&&DF.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 Tb(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,qF),t.pick=t.pick!==void 0&&t.pick<o.length?t.pick:void 0,this.paint.draw()}}catch{}},FF)}async commit(t){let e=Ua(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=sl(`${t.key}|post:${e}`,!0);this.board=r,this.boards.set(r.key,r),this.show(),this.paint.draw();try{let i=await as(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(be(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)Yv(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=RF[t];if(i!==void 0){if(n.field===0)r.size=TF(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=Ib(e,n),s=new Set([...r.artist,...r.character,...r.copyright]),o=$o(n.source),a=/^https?:\/\//i.test(o)?o:e===qn&&o.startsWith("/")?Dv(o).href:void 0;return{page:e===qn?"":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:(sn(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}=Dn(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?d0(n,e):[t]}syncChips(){let t=this.selected(this.view);this.view.chips=this.pool.slice(0,YF).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 Pb(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?Ab(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(mf([...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=sl(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=mf(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})=>pf(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=_m(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,_m(e.name,n)].filter(Boolean).join(" · ")}wants(){let{perRow:t,rowsVis:e}=Dn(this.cols,this.rows);return this.view.tiles.length<(this.board.top+e+t1)*t}need(){let{perRow:t,rowsVis:e}=Dn(this.cols,this.rows);return(e+t1)*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=Rb(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{Ja(n,await Va(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<or;let u=t.last.get(a);for(let l of c){let f=u&&dv(u.post,l)?u.set:`set:${a.site.key}:${l.id}`;u={post:l,set:f};let d=be(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,...fv(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?uv(i):i;else{let a=Qu(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=[...Qu(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(be(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=Qu(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=Om(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++,n1(r.post)<=n1(s.post))continue;for(let a of[...i,...Om(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(be(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:Zv},async()=>{while(n<t.length)await this.look(t[n++]),e?.()}))}look(t){let e=be(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<Vv&&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<Vv&&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=sn(e);if(!za(t,e,this.view.rating)||Ka(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"||Ob(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=be(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)=>mv(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=Jv(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=fe.cols*this.cell.w,e=fe.rows*this.cell.h;if(t===0||e===0)return;for(let n of this.view.held.slice(0,cm(this.cols))){if(n.thumb||this.heldAsked.has(n.from))continue;this.heldAsked.add(n.from);let r=$n(this.scratch,`held-${IF(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<Zv&&this.thumbQueue.length>0){let t=this.thumbQueue.shift();this.thumbing++,this.thumb(t).catch(()=>{this.thumbless.add(be(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(Ge(e),"tile",`${r1(n.id,s.url)}-${r}x${i}.png`);if(!Sa(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(be(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),jF),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),!sn(n.post))return;let{site:i}=n,s=this.board;try{await yo(i,n.post,r.signal);let o=sn(n.post),a=this.origPath(i,t.id,o.ext);if(!Sa(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&&Ls()&&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&&Eu(d.clear))l.using="cut";else il(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=_m(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(Ge(t),"cut",`${e}.png`);if(Sa(i))return i;try{return vF(xF(i),{recursive:!0}),await Xo(n,i,r),i}catch{il(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>=LF||!r||!sn(r.post))continue;let{site:i,post:s}=r;this.prefetching++,yo(i,s,this.signal).then(async()=>{let o=sn(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,WF),s=Math.max(1,Math.round(r*i/n)),o={...this.view.tune},{coloring:a}=this.view,c=!s1(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&&Sa(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/xf(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>KF){let e=this.tunedFiles.findIndex((n)=>n!==this.view.shown?.path&&n!==t);if(e===-1)return;il(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=PF(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:$o(i?.source??"")},width:this.cols*this.cell.w,height:this.rows*this.cell.h,blur:this.blurring,coloring:t.coloring,...r?{tune:r,aligns:Oi(B(this.home).terminals),user:MF()}:{}}),this.kept.owned(n.site,n.id,i?.owner??""),Me(this.home),this.holds();let{size:s,at:o,opacity:a}=t.tune,c=r?` · ${s==="fill"?"fill":`${s}%`} · ${Bt[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 Um(t,oe(t),e,e.booru??"",n);if(await r.run(),wi(process.env))process.stdout.write($i(""));return{saved:r.saved,installs:r.installs}}async function a1(t){let e=V(),n=oe(e),r=Cn(n.palettes,t);if(!process.stdin.isTTY||!process.stdout.isTTY)throw Error("needs a terminal");let i=new Um(e,n,r,r.booru??""),s=await i.run();if(i.saved&&s!==0)return process.stderr.write(`${i.saved}
|
|
704
|
+
`),0;return s}import{spawn as JF,spawnSync as c1}from"node:child_process";import{existsSync as VF,readFileSync as u1}from"node:fs";import{homedir as ZF}from"node:os";import{join as l1}from"node:path";function f1(t,e,n,r=ZF(),i=(s)=>{process.stdout.write(s)}){if(!e||Ft(t)||t.TMUX||Wt(t)!=="terminal-app")return;let[s="",o="-"]=(t.TTHEME_TERMINAL_SHOWN??"").split(" "),a=t.TTHEME_TTY,c=s?ke(D(n),s,r):void 0,u=uu(As(n)).get(Qt(s))??[],l=u.find((W)=>W===`${A(s)}.${o}.png`)??u[0];if(!a||!c||o==="-"||!l||!VF(c.image))return;let f=l1(As(n),l),d=["-l","JavaScript",cu(n),"tab",a,De(s)],h=B(n).terminalBase??"Basic",p=lh(t,r),$=u1(f),g,b=f,y=0,S,E=!1,I=!1,N,R=(W)=>{E=!0,JF("osascript",[...d,h],{stdio:"ignore"}).on("close",()=>{if(E=!1,I)return;i(W);let Z=N;N=void 0,Z?.()})},F=(W,Z)=>{g??=Ht(new Uint8Array(u1(c.image)));let U=l1(As(n),`${A(s)}.h${process.pid}-${++y}.png`);Xr(b,U,sr(ir(g,W,c.opacity,fh(g.width,g.height,c,p)))),b=U,R(Z)},j=()=>{if(b!==f)Xr(b,f,$),b=f},_=(W)=>{clearTimeout(S),S=setTimeout(()=>{if(E)N=W;else W()},Ad)},X=()=>{clearTimeout(S),N=void 0};return{slots:[],paint(W){return _(W.name===s?()=>{j(),R("")}:()=>F(W.background,Un(W))),""},look(W,Z){_(()=>F(Z[0]??"",Z.map((U,$t)=>Bo($t,U)).join("")))},wear(W){return c1("osascript",[...d.slice(0,-1),De(W.name),h],{encoding:"utf8"}).stdout?.trim()==="worn"?"":Un(W)},saved:async()=>new Map,restore(){return X(),I=!0,j(),c1("osascript",[...d,h],{stdio:"ignore"}),""},stop:X}}import{existsSync as Ma,readdirSync as QF,readFileSync as cl,rmSync as d1,statSync as m1}from"node:fs";import{homedir as XF}from"node:os";import{join as Ui}from"node:path";var tC=150,eC=260;function al(t){return t?.includes(`path = "${A("")}`)===!0}function nC(t){try{return B(t).terminals.includes("warp")}catch{return!1}}function h1(t,e){let n=A(e);if(!Ma(t))return;return QF(t).filter((i)=>i.startsWith(`${n}.`)&&/^[0-9a-f]{8}\.yaml$/.test(i.slice(n.length+1))).map((i)=>({file:i,at:m1(Ui(t,i)).mtimeMs})).sort((i,s)=>s.at-i.at)[0]?.file??(Ma(Ui(t,`${n}.yaml`))?`${n}.yaml`:void 0)}function rC(t,e){if(!e)return;let n;try{n=cl(Ui(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 p1(t,e,n,r=XF()){if(!e||Ft(t)||t.TMUX||Wt(t)!=="warp")return;let i=Hr(r,n);if(!Ma(i)||!nC(n))return;let s=Si(r),o=fu(n),a=[],c=t.TTHEME_WARP_WEARS??Ee(B(n)),u=rC(s,c&&h1(s,c)),l,f,d=(g)=>{let b=cl(i,"utf8"),y=Fr(b);if(y===g)return;if(al(g)&&!al(y)&&!Ma(o))H(o,y??"");if(tn(i,du(b,g)),!al(g))d1(o,{force:!0})},h=(g)=>{for(let b of a.splice(0))if(b===g)a.push(b);else d1(Ui(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(Ui(s,S),qo(g,y)),a.push(S);let E=S,I=Date.now()-m1(Ui(s,E)).mtimeMs;f=setTimeout(()=>{d(ph(g.name,E)),h(E)},Math.max(0,eC-I))},tC)};return{slots:[],paint:(g)=>{if(g.name===c)$(g,h1(s,g.name));else if(u)$(g,void 0,u);else $(g,Ma(Ui(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(cl(i,"utf8"))??""]]),restore:(g)=>{p();let b=g.get("theme");if(b)d(b);else if(al(Fr(cl(i,"utf8"))))d(lu);return h(),""}}}function zr(t,e,n){return f1(t,e,n)??Z0(t,e)??p1(t,e,n)}function Km(){return process.stdin.isTTY===!0&&process.stdout.isTTY===!0}function g1(t,e){if(t.includes("/"))return t;let n=mi(e,!1),r=n.filter((s)=>bc(s.dir).some((o)=>o.slug===t)),[i]=r.length===1?r:n.length===1?n:[];return i?`${i.id}/${t}`:t}function oC(t,e,n){let r=B(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 aC(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 b1(t,e,n){let r=Qw(e),i=cn(Pn(r.name,Xf(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 ${ct(i.name)??"the ttheme catalog"} and differs — \`ttheme add ${i.name}\` wears that one`);if(!s)Sc(t,[...Fn(t),i]);return i.name}var cC=["background","foreground","cursor"];function w1(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 k1(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:()=>(Ou(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)gs(t,e,i.key),ic(t,e);if(r.length>0)Me(t)}}}function uC(...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 y1(t,e,n,r){if(!zc(process.env,B(t).terminals))return;return async(i,s)=>{let o=cn(Pn(e,r(i),n.palettes)),{saved:a}=await o1(t,o,s);return{...a?{note:a}:{},count:re(t,e).length}}}async function v1(t){let e=process.stdout.isTTY===!0,n=V(),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?nl.of(process.env,n,t.name,B(n).terminals):void 0;try{return await Wv(t,{color:!Ft(),...s,...o?{backdrop:o}:{}})}finally{if(r)process.stdout.write(r.restore(i))}}async function S1(t,e,n){let r=V(),i=lt(r),s=await Dk(r,n),o=t.includes("/")?t:`${s.id}/${t}`,a=_e(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=Vf(r,o);if(Oa(c))throw Error(`${o} already exists — \`ttheme edit ${o}\` changes it`);let u=e?Cn(Ot(r,i).palettes,e):void 0;if(!Km())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?Qf(u,o,`kept from ${u.name}`):void 0,d=u?Ou(r,u.name)??u.pictures:void 0,{base:h,ansiSource:p,group:$,...g}=f??{name:o,signature:cC,...Wr(ba)},b=k1(r,o),y=({colors:I,signature:N})=>{let R=uC(d,b.fresh());return Xf({...g,...I,signature:N,...l?{base:l}:{},...R?{pictures:R}:{}})},S=await v1({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:y1(r,o,i,y),check:(I)=>w1(()=>Pn(o,y(I),i.palettes))});if(!S){b.discard(),console.log("Nothing made");return}iC(sC(c),{recursive:!0}),H(c,y(S));let{state:E}=oC(r,i,[o]);console.log(` + ${o}${u?` from ${u.name}`:""}
|
|
720
705
|
${c}`),await Wn(r,Ot(r,i).palettes.filter((I)=>I.name===o),E.terminals),console.log(`
|
|
721
|
-
\`ttheme use ${o}\` wears it · \`ttheme edit ${o}\` opens it again`)}function
|
|
706
|
+
\`ttheme use ${o}\` wears it · \`ttheme edit ${o}\` opens it again`)}function lC(t,e,n){let r=cn(Pn(t,e,n.palettes));return Fo(r).length>0?nd(r).filter((i)=>i.startsWith(" ✗")):[]}async function E1(t){let e=V(),n=lt(e),r=B(e),i=Ot(e,n,!1),s=g1(t,e),o=ll(e,s),a=o&&Oa(o)?s:i.palettes.some((b)=>b.name===t)?t:s,c=ll(e,a);if(!c||!Oa(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(!Km())throw Error("edit opens the palette editor — run it in a terminal");let u=Wm(c,"utf8"),l;try{l=Pn(a,u,n.palettes)}catch(b){throw Error(`${c} cannot be read — ${b.message}`)}let f=k1(e,a),d=new Set((l.pictures??[]).map((b)=>Xt(b))),h=({colors:b,signature:y})=>Yw(Xw(ed(u,b),y),f.fresh().filter((S)=>!d.has(Xt(S)))),p=await v1({title:"Edit palette",name:a,colors:td(l),signature:l.signatureSlots,waive:l.waive,palettes:$1(e,n,a),pictures:f.count(),find:y1(e,a,n,h),check:(b)=>w1(()=>Pn(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=lC(a,$,n);if(g.length>0)console.log(`
|
|
722
707
|
It misses the contrast gate:
|
|
723
708
|
${g.join(`
|
|
724
709
|
`)}
|
|
725
|
-
\`ttheme check --fix ${a}\` suggests colors that pass`)}function
|
|
726
|
-
`),console.log(
|
|
727
|
-
`)),
|
|
728
|
-
Passes the gate`),0;let{theme:a,moves:c,left:u}=
|
|
710
|
+
\`ttheme check --fix ${a}\` suggests colors that pass`)}function M1(t,e,n){return Cn(t.palettes,t.palettes.some((r)=>r.name===e)?e:g1(e,n))}function O1(t,e=!1){let n=V(),r=lt(n),i=B(n),s=M1(Ot(n,r),t,n);if(console.log(`${s.name} · ${s.group}
|
|
711
|
+
`),console.log(nd(s).join(`
|
|
712
|
+
`)),Fo(s).length===0)return console.log(`
|
|
713
|
+
Passes the gate`),0;let{theme:a,moves:c,left:u}=Yu(Ue(s));if(c.length===0)return console.log(`
|
|
729
714
|
No color change fixes it — waive the rule in [contrast] with a reason, or pick other colors`),1;console.log(`
|
|
730
715
|
${u.length===0?"These colors pass":"These colors come closer"}:
|
|
731
|
-
${
|
|
732
|
-
`)}`);let l=
|
|
716
|
+
${aC(c).join(`
|
|
717
|
+
`)}`);let l=ll(n,s.name);if(!l||!Oa(l))return console.log(`
|
|
733
718
|
\`ttheme new <name> --from ${s.name}\` makes a copy you can fix`),1;if(!e)return console.log(`
|
|
734
|
-
\`ttheme check --fix ${s.name}\` writes them`),1;if(H(l,
|
|
735
|
-
Wrote ${l}`),u.length===0?0:1}function
|
|
719
|
+
\`ttheme check --fix ${s.name}\` writes them`),1;if(H(l,ed(Wm(l,"utf8"),td(a))),i.palettes.includes(s.name))Ct(n,r,i);return console.log(`
|
|
720
|
+
Wrote ${l}`),u.length===0?0:1}function ll(t,e){let n=ct(e);return n&&mi(t,!1).some((r)=>r.id===n)?Vf(t,e):void 0}function fC(t,e){let n=ll(t,e.name),r=n&&Oa(n)?Pn(e.name,Wm(n,"utf8"),[e]).waiveReason:void 0,i=Ou(t,e.name)??e.pictures,{pictures:s,...o}=Qf(e,e.name,r);return{...o,...i?{pictures:i}:{}}}async function dC(t,e,n){if(t===e)return e;let r=n;if(r===void 0)if(!Km())r="tuned";else{let i=await U0({message:`Share ${e.name} as…`,options:[{value:"tuned",label:"Your tone",hint:`named ${ul(e.name)}`},{value:"original",label:"The original"}]});if(ce(i))throw new Oe;r=i}return r==="original"?e:t}function ul(t){return`${t}-tuned`}async function I1(t,e){let n=V(),r=lt(n),i=M1(pi(n,r),t,n),s=Ms(i,Hn(n)[i.name]),o=await dC(s,i,e),a=fC(n,o),c=o===s&&s!==i;if(c){let u=_e(ul(o.name));if(u)throw Error(`${ul(o.name)} ${u} — share the original, or tune a palette with a shorter name`);a.name=ul(o.name)}if(console.log(Zw(a)),process.stdout.isTTY)console.error(`
|
|
736
721
|
Anyone with ttheme wears it with: ttheme add ${Tn}…${c?`
|
|
737
|
-
It carries your tone, named ${a.name} so it does not clash with ${o.name}`:""}`)}function
|
|
738
|
-
${t} palettes installed — open a new tab, or reload your terminal config`)}function
|
|
739
|
-
`))}function
|
|
740
|
-
`))}function
|
|
741
|
-
${
|
|
742
|
-
${n.length} themes (${
|
|
743
|
-
`)),0}async function
|
|
744
|
-
`),0}if(e==="drop"){let{key:i,left:s}=
|
|
745
|
-
`),0}if(e==="tone"||e==="original"){let i=await
|
|
746
|
-
`),0}if(e==="prepare"){let{key:i,coloring:s}=
|
|
747
|
-
`),0}if(e==="tuned")return
|
|
748
|
-
`)[0]:void 0)??t.SHELL??"unknown"}function
|
|
722
|
+
It carries your tone, named ${a.name} so it does not clash with ${o.name}`:""}`)}function fl(t){Cr(`
|
|
723
|
+
${t} palettes installed — open a new tab, or reload your terminal config`)}function mC(t,e){return t.map((n)=>{if(n.startsWith(Tn))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 x1(t,e){let n=V(),r=e?mC(t,(await Bh(n,e)).id):t,i=lt(n),s=[...new Set(r.map((l)=>l.startsWith(Tn)?b1(n,l,i):l))],o=B(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 Wn(n,Ot(n,i,!1).palettes.filter((l)=>c.includes(l.name)),u.terminals),fl(u.palettes.length)}function N1(t){let e=V(),n=lt(e),r=B(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),yu(e,n,r.terminals,i);for(let a of i)console.log(` - ${a}`);if(fl(o.palettes.length),s.length>0)return console.error(`ttheme remove: not installed: ${s.join(", ")}`),1;return 0}function R1(t){let e=V(),n=lt(e),r=B(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(A1(t,r.terminals,o).join(`
|
|
724
|
+
`))}function T1(){let t=V(),e=B(t),n=Mi(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(A1(n,i.terminals,s).join(`
|
|
725
|
+
`))}function P1(){let t=V(),e=B(t);if(e.off){console.log("Already off");return}let n=pn(t,lt(t),e,{...e,off:!0}),r=Mi(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 A1(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 H1(t,e){let n=new Map(e.palettes.map((r)=>[r.name,"market"]));for(let r of wc(t,e.palettes,!1))n.set(r.name,"mine");return n}function F1(t,e=!1){let n=V(),r=lt(n),i=new Set(B(n).palettes),s=H1(n,r),o=Et(Ot(n,r).palettes);if(t)fi(o);let a=ci(t?l0(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(`
|
|
726
|
+
${f} palettes — ${a.filter((d)=>i.has(d.name)).length} installed`)}}async function C1(){let t=V(),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,p)=>`${Ph(h,p)} — kept the copy from the last update`;for(let h of e.filter(ut))try{console.log(` ${Jk(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(et).join(", ")}${r.length>1?` · ${r.length-i.size}/${r.length}`:""}`);a(),await Promise.all(r.map(async(h)=>{let p=await Th(t,h),$;if("refreshed"in p){$=Ah(p.refreshed);let g=Fh(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(!hC(wr(t)))return;let c=lt(t),u=B(t),l=H1(t,c),f=u.palettes.filter((h)=>!l.has(h)),d=new Map(Fn(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 Wn(t,Ot(t,c,!1).palettes.filter((h)=>u.palettes.includes(h.name)&&d.has(h.name)).map((h)=>Gs(h,d.get(h.name))),u.terminals)}async function zm(t,e,n,r=!1){let i=process.env.TTHEME_SORT==="series"?t.palettes:ci(t.palettes);fi(i);let s=process.stdout.isTTY===!0,o=zr(process.env,s,V()),a=o?await o.saved():new Map,c=new Zh({entries:i,scope:n,installed:e,required:r,color:!Ft(),fx:Cu(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 qm(t,e,n,r){let i;try{i=Us(t,n)}catch{i=ie(n)?br(n):et(n)}let s=[];if(ut(n))try{s=An(n,i,jr(t,q),se(!1))}catch{s=[]}else s=jr(t,n);return{source:n,id:i,shown:et(n),entries:s,auto:$r(n,e.updates),status:Wh(t,n,r)}}function Dm(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 _t(e.markets)){let c=i.get(a)??et(a),u=n[a],l=ta(t,a);if(u&&(l===void 0||u.at>l))s.push({where:c,source:a,update:!0,message:`Update failed ${na(u.at)}: ${u.error}`});if(a===q)try{ln(gC(ye(t),"utf8"))}catch(f){s.push({where:c,source:a,message:`${et(ye(t))}: ${Dm(f)}`})}else if(ie(a))if(!pC(Re(t,a)))s.push({where:c,source:a,message:"No copy of it yet — `ttheme update` fetches it"});else try{kr(a,un(t,a),jr(t,q),o)}catch(f){s.push({where:c,source:a,message:`${et(Re(t,a))}: ${Dm(f)}`})}else try{An(a,Te(Rn(a)),jr(t,q),(f,d)=>o(et(f),d))}catch(f){s.push({where:c,message:Dm(f)})}}return s}function wC(t,e,n,r,i){return{refresh:async(s)=>{if(ut(s)){let a=qm(t,e,s,Kn());return{market:a,refreshed:{source:s,id:a.id,count:Et(a.entries).length,change:{added:[],changed:[],gone:[]}}}}let o=await Rh(t,s,Ih);return{market:qm(t,e,s,Kn()),refreshed:o}},fetch:async(s)=>{if(ut(s)){let a=Te(Rn(s));return{source:s,id:a,shown:et(s),entries:An(s,a,jr(t,q),se(!1)),auto:!1,status:"read in place"}}let o=await ea(t,s,void 0,r);return n.set(s,o),{source:s,id:o.id,shown:et(s),entries:o.entries,auto:$r(s,{}),status:"not added yet"}},search:(s)=>zh(s,r),apply:i}}async function Ym(...t){for(let e of await Ch(...t))Cr(e)}function $C(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} — ${Tt(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} · ${et(i)}`);let o=n.filter((a)=>(ct(a)??q)===s);if(o.length>0)r.push(Uh(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=B(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)_s(t,y)}for(let b of r.removes)_h(t,b);let a=[..._t(s.markets).filter((b)=>!r.removes.includes(b)),...r.adds.map((b)=>b.source)],c=ra(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 Ym(t,s,e,r.refreshed),Cr("Nothing changed");return}let h={...c,palettes:l};pn(t,u,s,h),yu(t,u,s.terminals,f);for(let b of $C(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 Wn(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)=>Gs(b,p.get(b.name)))],h.terminals),d.length>0||f.length>0)fl(h.palettes.length)}async function L1(){let t=m0(process.env),e=V(),n=B(e),r=Fn(e),i=Kn(),s=_t(n.markets).map((b)=>qm(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));fi([...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=Ee(n);if(t)process.stdout.write("\x1B[?2026h");let p=new tm({markets:s,kept:a,installed:n.palettes,...h?{startup:h}:{},...t?{hub:t}:{},problems:bC(e,n,i,s),due:xh(e,n),io:wC(e,n,c,u.signal,(b,y)=>gk({say:y.say,set:y.status},()=>kC(e,r,s,b,c))),...process.env.TTHEME_SORT==="series"?{}:{order:ci},color:!Ft(),lookups:process.env.TTHEME_MARKET_LOOKUP!=="off",fx:Cu(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 Ym(e,B(e),r,$.refreshed),g;if(l&&t)process.stdout.write("\x1B[?1049l\x1B[?25h");for(let b of $.refreshed){let y=Hh(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 Ym(e,B(e),r,$.refreshed),console.log("Nothing changed");return t?Nc:0}import{rmSync as j1}from"node:fs";import{basename as yC,join as Ia}from"node:path";var G1=Ia(import.meta.dirname,".."),vC=Ia(G1,"themes"),Jm=Ia(G1,"dist"),dl=Dt.map((t)=>mn[t].emitter),SC=[Bd,Dd],Z9=dl.map((t)=>t.id);async function hl({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?dl.filter((s)=>t.includes(s.id)):dl,n=Vb(vC),r=Kp(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===dl.length)j1(Jm,{recursive:!0,force:!0});else for(let s of e)j1(Ia(Jm,s.id),{recursive:!0,force:!0});let i=0;for(let s of[...e,...SC]){let o=n.flatMap((u)=>s.emit?.(u)??[]),a=s.emitShared?.(n)??[];for(let u of[...o,...a])await Bun.write(Ia(Jm,u.path),u.content),i++;let c=o.length>0?`${n.length} themes${s.limits?` (${s.limits})`:""}`:a.length>0?a.map((u)=>yC(u.path)).join(" "):`no files (${s.limits??"nothing to write"})`;console.log(` ${s.id.padEnd(16)} ${c}`)}console.log(`
|
|
727
|
+
${n.length} themes (${Zb(n).length} in the new-tab rotation) -> ${i} files in dist/`)}import{existsSync as OC,readFileSync as K1}from"node:fs";import{availableParallelism as EC,homedir as B1}from"node:os";var MC=4;async function ml(t,e,n=B1()){let r=vt(D(t)),i=Rr(t),s=new Map(oe(t).palettes.map((f)=>[f.name,pr(f)])),o=Object.entries(r.palettes).flatMap(([f,d])=>{let h=s.get(f);return h?d.pictures.filter((p)=>ms(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=Oi(B(t).terminals),c=new Nm(Math.min(MC,EC()-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})}),Ff(t,l),Me(t,n),l.length}async function _1(t,e,n,r,i=B1()){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($e(o)===n)return{key:o.key,changed:!1};let a=oe(t).palettes.find((l)=>l.name===e);if(!a)throw Error(`no palette called ${e}`);let c=Oi(B(t).terminals),u=await Iu(t,e,o.key,pr(a),Rr(t),c,i,n);if(!u)throw Error(`${e} ${o.key} has no original to draw it from`);return Ff(t,[{name:e,picture:u}]),Me(t,i),{key:o.key,changed:!0}}function U1(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=oe(t).palettes.find((a)=>a.name===e);if(!s)throw Error(`no palette called ${e}`);let o=$e(i)==="original"?"tone":"original";if(!vk(t,e,i.key,pr(s),Rr(t),o))throw Error(`${e} ${i.key} has no original to draw it from`);return{key:i.key,coloring:o}}async function W1(){return await ml(V(),(t)=>process.stderr.write(`${t}
|
|
728
|
+
`)),0}async function z1(t,e,n){let r=V();if(Cn(oe(r).palettes,t),e==="show"){if(!n)throw Error("image show needs the picture to show");let{at:i,of:s}=gs(r,t,n);return Me(r),process.stderr.write(`Background · ${t} ${i}/${s} ${n}
|
|
729
|
+
`),0}if(e==="drop"){let{key:i,left:s}=ic(r,t,n);return Me(r),process.stderr.write(`Background · ${t} removed ${i} · ${s} left
|
|
730
|
+
`),0}if(e==="tone"||e==="original"){let i=await _1(r,t,e,n);return process.stderr.write(`Background · ${t} ${i.key} ${e==="tone"?"tinted":"in its own colors"}
|
|
731
|
+
`),0}if(e==="prepare"){let{key:i,coloring:s}=U1(r,t,n);return process.stderr.write(`Background · ${t} ${i} ready in ${s==="tone"?"its tone":"its own colors"}
|
|
732
|
+
`),0}if(e==="tuned")return Me(r),0;throw Error(`unknown image action ${e} — show, drop, tone, original, prepare or tuned`)}function D1(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 IC(t,e,n){let r=D1(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 q1(t,e,n,r){let i=Ht(new Uint8Array(K1(t)));return H(e,rn(Vg(i,D1(n,r)))),0}function Y1(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=Ht(new Uint8Array(K1(t))),u=i?IC(c,i,s??""):void 0,l=sr(ir(c,n,Math.max(0,Math.min(1,a)),u));if(o&&OC(o))Xr(o,e,l);else H(e,l);return 0}import{execFileSync as xC}from"node:child_process";import{readFileSync as NC}from"node:fs";import{arch as RC,platform as pl,release as Vm}from"node:os";var TC={ghostty:"ghostty",iterm2:"iTerm.app",wezterm:"WezTerm","terminal-app":"Apple_Terminal",warp:"WarpTerminal"};function PC(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=TC[t];return n!==void 0&&e.TERM_PROGRAM===n?e.TERM_PROGRAM_VERSION:void 0}function AC(t){let e=Wt(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 (${Pd(t)})`:`${e} ${PC(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 J1(t,e){try{return xC(t,e,{encoding:"utf8",timeout:2000,stdio:["ignore","pipe","ignore"]}).trim()}catch{return}}function HC(){let t=RC();if(pl()==="darwin")return`macOS ${J1("sw_vers",["-productVersion"])??`(Darwin ${Vm()})`} · ${t}`;if(pl()==="linux"){let e="";try{e=NC("/etc/os-release","utf8")}catch{}return`${/^PRETTY_NAME="?([^"\n]*)"?$/m.exec(e)?.[1]??"Linux"} · linux ${Vm()} · ${t}`}return`${pl()==="win32"?"Windows":pl()} ${Vm()} · ${t}`}function FC(t){if(t.TTHEME_ZSH)return`zsh ${t.TTHEME_ZSH}`;return(t.SHELL?J1(t.SHELL,["--version"])?.split(`
|
|
733
|
+
`)[0]:void 0)??t.SHELL??"unknown"}function CC(t){try{let{terminals:e}=B(t);return e.length>0?e.join(", "):"none"}catch{return"installed.json missing or unreadable"}}function LC(t){let e=Jc.flatMap((n)=>{let r=t[n];return r===void 0||r===Ko(n)?[]:[`${n}=${/\s/.test(r)?JSON.stringify(r):r}`]});return e.length>0?e.join(" "):void 0}function V1(){let t=process.env,n=[["ttheme",xt.version],["OS",HC()],["Shell",FC(t)],["Terminal",AC(t)],["Wired",CC(V())],["Settings",LC(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 jC,spawnSync as GC}from"node:child_process";import{chmodSync as BC,copyFileSync as _C,existsSync as Wi,mkdirSync as Z1,readdirSync as UC,readFileSync as bl,rmSync as Zm}from"node:fs";import{homedir as WC}from"node:os";import{dirname as ro,join as mt}from"node:path";function KC(t,e,n){for(let r of UC(e))t.push({from:mt(e,r),to:mt(n,r)})}function ep(t){return ln(bl(mt(t,"dist","manifest.json"),"utf8"))}function gl(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}];KC(r,mt(e.root,"shell","adapters"),mt(n,"adapters"));let i=[{file:mt(e.zdotdir,".zshrc"),block:Q0(n)}],s=mt(n,"config.zsh"),o=t$(Wi(s)?bl(s,"utf8"):""),a={file:s,content:t.warpFast===void 0?o:Qc(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=$u(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:ep(e.root),installed:c,notes:u}}function X1(t){try{return B(t)}catch{return}}function tS(t,e){try{return Ot(t,lt(t,!1,e),!1).palettes}catch{return[]}}function zC(t,e){let n=ep(e.root),r=_t(t.markets).includes(q)?n.palettes:[],i=new Set(r.map((o)=>o.name)),s=tS(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 eS(t,e){let n=Mi(t);return n&&e.includes(n)?n:void 0}function DC(t,e,n){let r=gl(e,n),i=eS(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 qC(t,e){let n=gl({terminals:t.terminals,palettes:t.palettes,off:t.off},e),r=new Set([...n.catalog.palettes,...tS(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 YC(t){try{return jC(process.execPath,[mt(t,"ttheme","ttheme.js"),"--version"],{encoding:"utf8",stdio:["ignore","pipe","ignore"]}).trim()||void 0}catch{return}}function nS(t){let e=Ee(t);return[pt(t.terminals).map((n)=>n.name).join(", "),`${t.palettes.length} palettes`,e?`default ${e}`:"no default — ttheme is off"].join(" · ")}function Qm(t,e=ze()){for(let o of t.copies)if(Z1(ro(o.to),{recursive:!0}),Zm(o.to,{force:!0}),Zm(`${o.to}.zwc`,{force:!0}),_C(o.from,o.to),o.executable)BC(o.to,493);H(t.settings.file,t.settings.content);for(let o of t.forget)Zm(o,{force:!0});let n=ro(ro(t.settings.file)),r=X1(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=Qo(n,{...t.installed,...i},e,t.home);if(_t(s.markets).includes(q))vc(n,t.catalog);Ae(n,s),Ct(n,lt(n),s,t.home,e);for(let o of t.edits){Z1(ro(o.file),{recursive:!0});let a=Wi(o.file)?bl(o.file,"utf8"):"";tn(o.file,Ir(a,o.block))}return Ii(n,s,!0,e,t.home)}function xa(t){if(ce(t))throw Er("Nothing changed"),new Oe;return t}function Xm(t,e){return Dt.filter((n)=>mn[n].offered(t,e))}async function JC(t,e,n,r){return xa(await _0({message:"Wire which terminals?",options:Xm(n,r).map((i)=>({value:i,label:mn[i].name,hint:i===t?"detected":void 0})),initialValues:e,required:!0}))}async function VC(t){return xa(await Ke({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:Vc(t,"TTHEME_WARP_FAST")!=="off"}))}function tp(t){let e=[...t.copies.filter((n)=>!Wi(n.to)).map((n)=>n.to),...Wi(t.settings.file)?[]:[t.settings.file],...t.edits.filter((n)=>!bl(n.file,"utf8").includes("# ttheme begin")).map((n)=>n.file)];if(e.length>0)throw Error(`init left gaps:
|
|
749
734
|
${e.join(`
|
|
750
|
-
`)}`)}function
|
|
751
|
-
`),`Installed ${e.palettes.length} palettes`),
|
|
752
|
-
`),"Next"),
|
|
753
|
-
`));return}
|
|
754
|
-
`),a),
|
|
755
|
-
`))}async function
|
|
756
|
-
${R===
|
|
757
|
-
`),`Wiring ${pt(
|
|
735
|
+
`)}`)}function rS(t,e){return[...new Set(t.palettes.filter((n)=>e.includes(n.name)).map((n)=>n.group))]}function ZC(t,e,n){let r=t.palettes.find((o)=>o.name===Ee(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 QC(t,e){let n=Ee(t);if(!n)return["Default none — new tabs keep the terminal colors",`Turn on \`ttheme on\` wears ${Mi(t)}`];return[`Default ${n}${e?" — this tab wears it already":""}`,"Change it `ttheme preview`, enter on a palette, then default"]}function XC(t){GC("zsh",["-c",'source "$1" && __tt_preview init',"zsh",mt(t,"ttheme","ttheme.zsh")],{stdio:"inherit"})}function tL(t,e,n,r){let i=rS(t.catalog,e.palettes);dn([`${i.join(", ")} (${e.palettes.length})`,...QC(t.installed,n)].join(`
|
|
736
|
+
`),`Installed ${e.palettes.length} palettes`),dn(["exec zsh The ttheme command in this tab",...np(t,r)].join(`
|
|
737
|
+
`),"Next"),jo("Done")}function np(t,e){return[...ku(ro(ro(t.settings.file)),t.installed,e,t.home),...t.notes]}function iS(t){return t?(e)=>Sr.step(e):(e)=>console.log(e)}async function Q1(t,e,n,r){let i=qC(t,e),s=Qm(i,n);tp(i),await ml(e.configHome,iS(r),e.home);let o=["exec zsh Open tabs run the new layer — new tabs already do",...np(i,s)],a=`Updated to ${xt.version} — kept ${nS(i.installed)}`;if(!r){console.log([a,...o].join(`
|
|
738
|
+
`));return}dn(o.join(`
|
|
739
|
+
`),a),jo("Done")}function eL(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}`),...np(t,e),"No palettes yet — open a new shell (`exec zsh`), then `ttheme browse` picks them from the catalog"];console.log(n.join(`
|
|
740
|
+
`))}async function sS(t={}){let e=mt(import.meta.dirname,"..");if(!Wi(mt(e,"bin","ttheme.js")))throw Error("bin/ttheme.js is missing — run `mise run bin:build` first");if(!Wi(mt(e,"dist"))){if(typeof Bun>"u")throw Error("this package is missing dist/ — reinstall @kecan0406/ttheme");await hl()}let n=WC(),r=V(),i=process.env.ZDOTDIR??n,s=ze(),o=rk(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=Wt(process.env),l=Xm(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=X1(r);if(t.yes&&f){await Q1(f,c,s,!1);return}if(t.yes){if(l.length===0)throw Error(`no supported terminal detected — run this inside ${pt(Xm(c,s)).map((_)=>_.name.toLowerCase()).join(", ").replace(/, ([^,]*)$/," or $1")}`);let F=gl({terminals:l,palettes:[]},c),j=Qm(F,s);tp(F),eL(F,j);return}if(Bc("ttheme init"),f){let R=YC(r);if(xa(await Ke({message:`ttheme${R?` ${R}`:""} is installed — ${nS(f)}
|
|
741
|
+
${R===xt.version?"Reinstall":"Update to"} ${xt.version} and keep all of it?`,active:"Yes",inactive:"No, set it up again",initialValue:!0}))){await Q1(f,c,s,!0);return}}let d=await JC(u,f?.terminals??l,c,s),h=d.includes("warp")?await VC(r):void 0,p=f?zC(f,c):ep(e),$=f?await zm(p,f.palettes,"palette",!0):await zm(p,[],"series",!0);if(!$)throw Er("Nothing changed"),new Oe;let g=(f&&eS(f,$))??$[0],b=$.length>1&&(ue[u].paints||u==="warp"&&d.includes("warp")&&Wi(Hr(n,r))),y=xa(await Ke({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?DC(f,S,c):gl(S,c);if(dn([`Install ${$.length} palettes — ${rS(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`),...wu(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(`
|
|
742
|
+
`),`Wiring ${pt(d).map((R)=>R.name).join(", ")}`),!xa(await Ke({message:"Apply these changes?"})))throw Er("Nothing changed"),new Oe;let I=Qm(E,s);if(tp(E),await ml(r,iS(!0),n),y&&b)XC(r);let N=B(r);tL({...E,catalog:p,installed:N},S,ZC(p,N,r),I)}import{spawn as nL}from"node:child_process";import{createHash as rL}from"node:crypto";import{existsSync as rp,mkdirSync as iL,readFileSync as sL,statSync as oL,utimesSync as aL,writeFileSync as cL}from"node:fs";import{homedir as uS}from"node:os";import{join as lS}from"node:path";import{gunzipSync as uL}from"node:zlib";var oS="https://github.com/kecan0406/aninames/releases/latest/download",fS=86400000,lL=3600000,fL=120000;function dS(t){return lS(gr(t),".checked")}function dL(t=process.env){return t.TTHEME_NAMES!=="off"}function hL(t){try{return Date.now()-oL(dS(t)).mtimeMs>=fS}catch{return!0}}function ip(t,e){let n=dS(t);if(iL(gr(t),{recursive:!0}),!rp(n))cL(n,"");aL(n,e/1000,e/1000)}function hS(t=uS()){if(!dL()||!hL(t))return;try{ip(t,Date.now()),nL(process.execPath,[process.argv[1],"names"],{detached:!0,stdio:"ignore",env:process.env}).unref()}catch{}}function aS(t){return rL("sha256").update(t).digest("hex")}async function cS(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 mS(t=uS()){let e=gr(t);try{let r=JSON.parse(new TextDecoder().decode(await cS(`${oS}/ttheme.json`)));for(let[i,{file:s,sha256:o}]of Object.entries(r.layers)){let a=lS(e,`ttheme-${i}.json`);if(rp(a)&&aS(sL(a))===o)continue;let c=uL(await cS(`${oS}/${s}`));if(aS(c)!==o)throw Error(`${s} does not match its hash`);H(a,c)}ip(t,Date.now())}catch{return ip(t,Date.now()-fS+lL),1}hc(t);let n=V();if(rp(ye(n)))fi(oe(n).palettes,t),uk(n,t);return 0}import{createInterface as mL}from"node:readline";var pL="\x1F",sp="\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 pS(t){return{background:t.background,foreground:t.foreground,cursor:t.cursor,selection:t.selection,ansi:t.ansi}}class gS{editor;base;cols=Hm;rows=Fm;focused=!0;home;name;color;shown="";tints=new ka;pointer=new Co;drawn={key:"",recolors:!1,look:""};constructor(t,e,n){this.home=t,this.name=e,this.color=n,this.base=Cn(pi(t,lt(t),!1).palettes,e);let r=Ms(this.base,Hn(t)[e]);this.editor=new wa({title:"Tone",name:e,colors:pS(r),original:pS(this.base),variant:"theme",signature:r.signatureSlots,...r.waived?{waive:r.waived}:{},check:()=>{return}})}save(){try{let t=rd(this.base,this.editor.list);n0(this.home,r0(Hn(this.home),this.name,t)),Ct(this.home,lt(this.home),B(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}
|
|
758
743
|
${this.shown}
|
|
759
|
-
${this.editor.list.join(" ")}`;if(e!==this.drawn.key){let n=this.pictures(),r=
|
|
760
|
-
`)}return n.close(),process.stdin.destroy(),e.close(),0}import{existsSync as
|
|
761
|
-
`),"Uninstall");let i=await Ke({message:"Remove ttheme?"});if(
|
|
762
|
-
`),`Wiring ${n.name}`);let u=await Ke({message:`Wire ${n.name} now?`,initialValue:!1});if(
|
|
763
|
-
`),"Next");return
|
|
764
|
-
`)}var
|
|
744
|
+
${this.editor.list.join(" ")}`;if(e!==this.drawn.key){let n=this.pictures(),r=pr(Ms(this.base,rd(this.base,this.editor.list))),i=this.shown?el(n,this.shown):void 0,s={name:this.name,...this.editor.colors(),waived:this.editor.waive},o=i?tl(i,this.shown,s,this.editor.signature,this.tints):void 0;this.drawn={key:e,recolors:t&&n.some((a)=>nc(a,r)),look:o?`${o.image}${sp}${o.opacity}`:""}}return this.drawn}frame(t="ok",e){let n=_v(this.editor),r=this.editor.act??"-";this.editor.act=void 0;let{drawn:i,targets:s}=Ic(()=>Uv(this.editor,this.cols,this.rows,this.color,this.focused)),{lines:o,zones:a}=xc(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(sp),n.keys.map(([,l])=>l).join(sp),e??n.note,String(i.at),c?"1":"0",u,...o].join(pL)}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??Hm),this.rows=Math.max(10,s??Fm)}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?Dh(String.fromCodePoint(i)):void 0;if(s)this.editor.press(s)}else if(e==="mouse"){let i=bL(n);if(i)Cm(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 bS(t){let e=new gS(V(),t,process.env.NO_COLOR===void 0);process.once("exit",()=>e.close()),process.once("SIGTERM",()=>process.exit(0));let n=mL({input:process.stdin});for await(let r of n){let i=e.handle(r);if(i===void 0)break;process.stdout.write(`${i}
|
|
745
|
+
`)}return n.close(),process.stdin.destroy(),e.close(),0}import{existsSync as wS,rmSync as wL,utimesSync as $L}from"node:fs";import{homedir as kL}from"node:os";import{join as Na}from"node:path";function yL(t){try{return B(t)}catch{return}}function vL(t){let{home:e,configHome:n}=t,r=yL(n),i={configHome:n,home:e},s=pt(Dt),o=s.map((c)=>c.unwire(i,r)),a=[Na(n,"ttheme"),t.cacheDir,t.stateDir];return{edits:[...hn(Na(t.zdotdir,".zshrc"),xr),...o.flatMap((c)=>c.edits)],removals:[...s.flatMap((c)=>c.shelf?Ns(c.shelf.dir(i)):[]),...o.flatMap((c)=>c.removals),...a.filter((c)=>wS(c))],touches:o.flatMap((c)=>c.touches),...r?{state:r}:{}}}function SL(t,e,n=ze()){let r=[];for(let{file:s,content:o}of t.edits){let a=Jp(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)wL(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)$L(s,i,i);return r}function EL(){let t=kL();return{home:t,configHome:V(),zdotdir:process.env.ZDOTDIR??t,cacheDir:lr(),stateDir:Na(process.env.XDG_STATE_HOME??Na(t,".local","state"),"ttheme")}}async function $S(t=!1){let e=EL(),n=vL(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=Na(e.configHome,"ttheme");Bc("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${wS(mc(e.configHome))?`, and your markets under ${mc(e.configHome)} (push them to GitHub first to keep them)`:""}`:`Delete ${s}`)].join(`
|
|
746
|
+
`),"Uninstall");let i=await Ke({message:"Remove ttheme?"});if(ce(i)||!i)throw Er("Nothing changed"),new Oe}for(let r of SL(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 ML}from"node:os";async function kS(t){if(!Dt.includes(t))throw Error(`no terminal ${t} — one of ${Dt.join(", ")}`);let e=t,n=mn[e],r=V(),i=ML(),s=ze(),o=B(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([...wu(r,c,i),...$u(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(`
|
|
747
|
+
`),`Wiring ${n.name}`);let u=await Ke({message:`Wire ${n.name} now?`,initialValue:!1});if(ce(u)||!u)throw Er("Nothing changed"),new Oe;let l=Qo(r,c,s,i),f={...l,terminals:[...o.terminals,e]};Ae(r,f),Ct(r,lt(r),f,i,s);let d=Ii(r,l,!0,s,i),h=ku(r,l,d,i);if(h.length>0)dn(h.join(`
|
|
748
|
+
`),"Next");return jo(`Wired ${n.name}`),0}var IL=new Set(["add","remove","market","default","on","off"]),xL={default:([t])=>R1(t),on:()=>T1(),off:()=>P1(),browse:()=>L1(),list:([t],{json:e})=>F1(t,e),add:(t,{market:e})=>x1(t,e),remove:(t)=>N1(t),update:()=>C1(),market:([t,e])=>Yk(t,e),new:([t],{from:e,in:n})=>S1(t,e,n),edit:([t])=>E1(t),check:([t],{fix:e})=>O1(t,e),share:([t],{tone:e})=>I1(t,e),init:(t,{yes:e})=>sS({yes:e}),uninstall:(t,{yes:e})=>$S(e),wire:([t])=>kS(t),info:()=>V1(),build:(t,{only:e})=>hl({only:e}),find:([t])=>a1(t),image:([t,e,n])=>z1(t,e,n),redraw:()=>W1(),names:()=>mS(),tone:([t])=>bS(t),flatten:([t,e,n,r,i,s,o])=>Y1(t,e,n,r,i,s,o),bake:([t,e,n,r])=>q1(t,e,n,r)},NL=Uo.map((t)=>({...t,run:xL[t.name]}));class Ki extends Error{verb;constructor(t,e){super(t);this.verb=e}}function yS(t){let e=NL.find((n)=>n.name===t);if(!e)throw new Ki(t.startsWith("-")?`unknown option '${t}'`:`unknown command '${t}'`);return e}function RL(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 OL({args:e,options:n,allowPositionals:!0})}catch(r){let[i=""]=(r instanceof Error?r.message:String(r)).split(". ");throw new Ki(`${i.charAt(0).toLowerCase()}${i.slice(1)}`,t)}}function TL(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:yS(n[0]),code:0}}let r=yS(e),i=RL(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 Ki(`--${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 Ki(`missing ${r.args[s.length]}`,r);if(s.length>a)throw new Ki(`too many arguments: ${s.slice(a).join(" ")}`,r);let{help:c,...u}=i.values;return{kind:"run",verb:r,args:s,flags:u}}function vS(t){let e=Math.max(0,...t.map(([n])=>n.length));return t.map(([n,r])=>` ${n.padEnd(e)} ${r}`)}function op(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:",...vS(t.actions)]:[],...n.length>0?["","Options:",...vS(n)]:[]].join(`
|
|
749
|
+
`)}var PL=[TypeError,RangeError,ReferenceError,SyntaxError];function AL(t){return PL.some((e)=>t instanceof e)||t instanceof Error&&"code"in t}async function SS(t){let e;try{let n=TL(t);if(n.kind==="version")return console.log(xt.version),0;if(n.kind==="help"){if(n.code===0)console.log(op(n.verb,n.all));else console.error(op(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(IL.has(n.verb.name))await Ak();let r=await n.verb.run(n.args,n.flags);if(!n.verb.hidden&&n.verb.name!=="uninstall")hS();return typeof r==="number"?r:0}catch(n){if(n instanceof Ki)return console.error(n.verb?`ttheme ${n.verb.name}: ${n.message}
|
|
765
750
|
|
|
766
|
-
${
|
|
767
|
-
ttheme${e?` ${e.name}`:""}: ${r??(n instanceof Error?n.message:String(n))}${
|
|
751
|
+
${op(n.verb)}`:`ttheme: ${n.message} — see \`ttheme help\``),1;if(n instanceof Oe)return 1;if(n instanceof oa)return n.exit;let r=process.env.TTHEME_DEBUG&&n instanceof Error?n.stack:void 0;return console.error(`
|
|
752
|
+
ttheme${e?` ${e.name}`:""}: ${r??(n instanceof Error?n.message:String(n))}${AL(n)?"\nReport a bug with the output of `ttheme info`":""}`),1}}if(FL)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 SS(process.argv.slice(2));
|
|
768
753
|
|
|
769
|
-
//# debugId=
|
|
754
|
+
//# debugId=C75E349C0B7AADB964756E2164756E21
|
|
770
755
|
//# sourceMappingURL=ttheme.js.map
|