textmode.js 0.7.1 → 0.8.0-beta.1
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/dist/textmode.esm.js +2172 -2239
- package/dist/textmode.umd.js +16 -16
- package/dist/types/Textmode.d.ts +11 -11
- package/dist/types/errors/index.d.ts +1 -1
- package/dist/types/index.d.ts +11 -3
- package/dist/types/rendering/webgl/core/Framebuffer.d.ts +0 -6
- package/dist/types/rendering/webgl/core/Renderer.d.ts +7 -6
- package/dist/types/rendering/webgl/core/interfaces/IFramebuffer.d.ts +6 -6
- package/dist/types/rendering/webgl/core/interfaces/IRenderer.d.ts +3 -3
- package/dist/types/rendering/webgl/index.d.ts +2 -2
- package/dist/types/rendering/webgl/pipeline/MaterialBatchPipeline.d.ts +1 -1
- package/dist/types/textmode/Canvas.d.ts +2 -2
- package/dist/types/textmode/Grid.d.ts +32 -3
- package/dist/types/textmode/Textmodifier.d.ts +13 -72
- package/dist/types/textmode/conversion/ConversionManager.d.ts +73 -0
- package/dist/types/textmode/conversion/ConversionRegistry.d.ts +61 -18
- package/dist/types/textmode/conversion/index.d.ts +3 -1
- package/dist/types/textmode/filters/FilterManager.d.ts +0 -4
- package/dist/types/textmode/filters/index.d.ts +1 -1
- package/dist/types/textmode/interfaces/ITextmodifier.d.ts +163 -50
- package/dist/types/textmode/layers/Layer2DCompositor.d.ts +13 -20
- package/dist/types/textmode/layers/LayerManager.d.ts +31 -20
- package/dist/types/textmode/layers/TextmodeLayer.d.ts +58 -20
- package/dist/types/textmode/layers/interfaces/ILayerManager.d.ts +7 -0
- package/dist/types/textmode/layers/interfaces/ITextmodeLayer.d.ts +49 -28
- package/dist/types/textmode/layers/types.d.ts +16 -21
- package/dist/types/textmode/loadables/ITextmodeSource.d.ts +123 -0
- package/dist/types/textmode/loadables/TextmodeImage.d.ts +2 -2
- package/dist/types/textmode/loadables/TextmodeSource.d.ts +10 -118
- package/dist/types/textmode/loadables/font/CharacterExtractor.d.ts +1 -1
- package/dist/types/textmode/loadables/font/TextmodeFont.d.ts +3 -0
- package/dist/types/textmode/loadables/font/index.d.ts +2 -2
- package/dist/types/textmode/loadables/index.d.ts +0 -2
- package/dist/types/textmode/loadables/video/ITextmodeVideo.d.ts +75 -0
- package/dist/types/textmode/loadables/video/TextmodeVideo.d.ts +23 -126
- package/dist/types/textmode/loading/LoadingPhase.d.ts +26 -0
- package/dist/types/textmode/loading/LoadingScreenManager.d.ts +91 -93
- package/dist/types/textmode/loading/index.d.ts +3 -2
- package/dist/types/textmode/loading/types.d.ts +57 -57
- package/dist/types/textmode/managers/MouseManager.d.ts +24 -14
- package/dist/types/textmode/managers/TouchManager.d.ts +25 -13
- package/dist/types/textmode/mixins/index.d.ts +1 -2
- package/dist/types/textmode/mixins/interfaces/IAnimationMixin.d.ts +87 -87
- package/dist/types/textmode/mixins/interfaces/IKeyboardMixin.d.ts +128 -128
- package/dist/types/textmode/mixins/interfaces/IMouseMixin.d.ts +96 -105
- package/dist/types/textmode/mixins/interfaces/IRenderingMixin.d.ts +271 -370
- package/dist/types/textmode/mixins/interfaces/ITouchMixin.d.ts +1 -1
- package/dist/types/textmode/types.d.ts +2 -6
- package/package.json +5 -2
- package/dist/types/textmode/layers/filters/index.d.ts +0 -6
- package/dist/types/textmode/loadables/video/TextmodeVideoPreloader.d.ts +0 -29
- package/dist/types/textmode/loadables/video/types.d.ts +0 -43
- package/dist/types/textmode/mixins/FontMixin.d.ts +0 -8
- package/dist/types/textmode/mixins/interfaces/IFontMixin.d.ts +0 -46
package/dist/textmode.umd.js
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
var
|
|
1
|
+
var ni=Object.defineProperty;var hi=(T,R,X)=>R in T?ni(T,R,{enumerable:!0,configurable:!0,writable:!0,value:X}):T[R]=X;var l=(T,R,X)=>hi(T,typeof R!="symbol"?R+"":R,X);var s,e;s=this,e=function(T){class R extends Error{constructor(t,i={}){super(R.i(t,i)),this.name="TextmodeError"}static i(t,i){return`${t}${i&&Object.keys(i).length>0?`
|
|
2
2
|
|
|
3
|
-
📋 Context:`+Object.entries(
|
|
4
|
-
- ${r}: ${
|
|
3
|
+
📋 Context:`+Object.entries(i).map(([r,n])=>`
|
|
4
|
+
- ${r}: ${R.o(n)}`).join(""):""}
|
|
5
5
|
|
|
6
6
|
${"↓".repeat(24)}
|
|
7
|
-
`}static
|
|
8
|
-
in vec2 A0;in vec2 A1;in vec2 A2;in vec2 A3;in vec3 A4;in vec4 A5;in vec4 A6;in vec4 A7;in vec3 A8;in vec3 A9;in vec4 Aa;in vec4 Ab;in vec3 Ac;uniform vec2
|
|
9
|
-
precision highp float;in vec2 v_uv;uniform sampler2D U5;uniform sampler2D U6;uniform sampler2D U7;uniform sampler2D U8;uniform vec2 U9;uniform bool Ua;uniform bool Ub;uniform bool Uc;layout(location=0)out vec4 o_character;layout(location=1)out vec4 o_primaryColor;layout(location=2)out vec4 o_secondaryColor;layout(location=3)out vec4 A;void main(){vec2 B=vec2(v_uv.x,1.-v_uv.y);vec2 C=B*U9;vec2 D=(floor(C)+0.5f)/U9;vec4 E=texture(U5,D);vec4 F=Ua?texture(U6,D):vec4(0.);if(Ua&&F.a==0.){discard;}vec4 G=Ub?texture(U7,D):vec4(0.);vec4 H=Uc?texture(U8,D):vec4(0.);o_character=E;o_primaryColor=F;o_secondaryColor=G;A=H;}`));const c=t.getParameter(t.MAX_DRAW_BUFFERS),u=t.getParameter(t.MAX_COLOR_ATTACHMENTS);this.K=Math.min(this.K,c,u),this.X=t.createFramebuffer(),this.tt(),this.st(),this.l.depth&&this.it()}tt(){const t=this.A,e=this.l.filter==="linear"?t.LINEAR:t.NEAREST,r=this.l.wrap==="repeat"?t.REPEAT:t.CLAMP_TO_EDGE,n=this.l.type==="float"?t.FLOAT:t.UNSIGNED_BYTE,h=n===t.FLOAT?t.RGBA32F:t.RGBA8,a=t.RGBA;for(let c=0;c<this.K;c++){const u=t.createTexture();t.bindTexture(t.TEXTURE_2D,u),tt(t,e,e,r,r),t.texImage2D(t.TEXTURE_2D,0,h,this.N,this.j,0,a,n,null),this.Y.push(u)}t.bindTexture(t.TEXTURE_2D,null)}st(){const t=this.A;if(t.bindFramebuffer(t.FRAMEBUFFER,this.X),this.K===1)t.framebufferTexture2D(t.FRAMEBUFFER,t.COLOR_ATTACHMENT0,t.TEXTURE_2D,this.Y[0],0);else{const e=[];for(let r=0;r<this.K;r++){const n=t.COLOR_ATTACHMENT0+r;t.framebufferTexture2D(t.FRAMEBUFFER,n,t.TEXTURE_2D,this.Y[r],0),e.push(n)}t.drawBuffers(e)}t.bindFramebuffer(t.FRAMEBUFFER,null)}it(){const t=this.A;this.W=t.createRenderbuffer(),t.bindRenderbuffer(t.RENDERBUFFER,this.W),t.renderbufferStorage(t.RENDERBUFFER,t.DEPTH_COMPONENT24,this.N,this.j),t.bindFramebuffer(t.FRAMEBUFFER,this.X),t.framebufferRenderbuffer(t.FRAMEBUFFER,t.DEPTH_ATTACHMENT,t.RENDERBUFFER,this.W),t.bindFramebuffer(t.FRAMEBUFFER,null),t.bindRenderbuffer(t.RENDERBUFFER,null)}et(t){Rt(this.A,this.Y[0],t)}resize(t,e){this.N=t,this.j=e,this.V.clear();const r=this.A,n=this.l.type==="float"?r.FLOAT:r.UNSIGNED_BYTE,h=n===r.FLOAT?r.RGBA32F:r.RGBA8,a=r.RGBA;for(const c of this.Y)r.bindTexture(r.TEXTURE_2D,c),r.texImage2D(r.TEXTURE_2D,0,h,this.N,this.j,0,a,n,null);r.bindTexture(r.TEXTURE_2D,null),this.W&&(r.bindRenderbuffer(r.RENDERBUFFER,this.W),r.renderbufferStorage(r.RENDERBUFFER,r.DEPTH_COMPONENT24,this.N,this.j),r.bindRenderbuffer(r.RENDERBUFFER,null))}readPixels(t){const e=this.V.get(t);if(e)return e;const r=this.A,n=this.N,h=this.j,a=new Uint8Array(n*h*4),c=r.getParameter(r.READ_FRAMEBUFFER_BINDING);r.bindFramebuffer(r.READ_FRAMEBUFFER,this.X),r.readBuffer(r.COLOR_ATTACHMENT0+t),r.readPixels(0,0,n,h,r.RGBA,r.UNSIGNED_BYTE,a),r.bindFramebuffer(r.READ_FRAMEBUFFER,c);const u=4*n,f=new Uint8Array(a.length);for(let d=0;d<h;d++){const g=(h-1-d)*u,v=d*u;f.set(a.subarray(g,g+u),v)}return this.V.set(t,f),f}begin(){const t=this.A;this.V.clear(),this.Z.rt(),this.Z.nt(this.X,this.N,this.j,this.K),this.l.depth&&t.clear(t.DEPTH_BUFFER_BIT),this.Z.state.ht()}end(){this.Z.state.ot(),this.Z.ct(),this.Z.lt()}ut(){return this.q||this.ft(),this.q}ft(){if(!this.Z)return;const t=this.K>1,e=this.K>2,r=this.K>3,n={U5:this.Y[0],U6:t?this.Y[1]:this.Y[0],U7:e?this.Y[2]:this.Y[0],U8:r?this.Y[3]:this.Y[0],U9:[this.N,this.j],Ua:t,Ub:e,Uc:r},h=k.J;this.q=this.Z.vt.dt(h,n,!0)}gt(){const t=this.A;t.deleteFramebuffer(this.X);for(const e of this.Y)t.deleteTexture(e);this.W&&t.deleteRenderbuffer(this.W)}get width(){return this.N}get height(){return this.j}get textures(){return this.Y}get attachmentCount(){return this.K}};l(k,"J",null);let z=k;const Pt=new WeakMap;function dt(o,t){Pt.set(o,t)}function Mt(o){return Pt.get(o)}function it(o,t,e,r,n=255){o[0]=t/255,o[1]=(e??t)/255,o[2]=(r??t)/255,o[3]=n/255}class st{constructor(){l(this,"_t",1);l(this,"yt",0);l(this,"At",0);l(this,"bt",0);l(this,"wt",0);l(this,"Ct",0);l(this,"xt",0);l(this,"Mt",[0,0,0]);l(this,"Ft",[1,1,1,1]);l(this,"Pt",[0,0,0,1]);l(this,"$t",!1);l(this,"Tt",!1);l(this,"Rt",!1);l(this,"Et",0);l(this,"St",[0,0,0,1]);l(this,"kt",!1);l(this,"zt",[]);l(this,"Dt",[])}static Lt(){return{Ot:1,It:0,Bt:0,Ht:0,wt:0,Ct:0,xt:0,Et:0,Gt:!1,Qt:!1,Rt:!1,kt:!1,Nt:[0,0,0],jt:[1,1,1,1],Xt:[0,0,0,1]}}Yt(t){t.Ot=this._t,t.It=this.yt,t.Bt=this.At,t.Ht=this.bt,t.wt=this.wt,t.Ct=this.Ct,t.xt=this.xt,t.Gt=this.$t,t.Qt=this.Tt,t.Rt=this.Rt,t.Et=this.Et,t.kt=this.kt,t.Nt[0]=this.Mt[0],t.Nt[1]=this.Mt[1],t.Nt[2]=this.Mt[2],t.jt[0]=this.Ft[0],t.jt[1]=this.Ft[1],t.jt[2]=this.Ft[2],t.jt[3]=this.Ft[3],t.Xt[0]=this.Pt[0],t.Xt[1]=this.Pt[1],t.Xt[2]=this.Pt[2],t.Xt[3]=this.Pt[3]}Wt(t){this._t=t.Ot,this.yt=t.It,this.At=t.Bt,this.bt=t.Ht,this.wt=t.wt,this.Ct=t.Ct,this.xt=t.xt,this.$t=t.Gt,this.Tt=t.Qt,this.Rt=t.Rt,this.Et=t.Et,this.kt=t.kt,this.Mt[0]=t.Nt[0],this.Mt[1]=t.Nt[1],this.Mt[2]=t.Nt[2],this.Ft[0]=t.jt[0],this.Ft[1]=t.jt[1],this.Ft[2]=t.jt[2],this.Ft[3]=t.jt[3],this.Pt[0]=t.Xt[0],this.Pt[1]=t.Xt[1],this.Pt[2]=t.Xt[2],this.Pt[3]=t.Xt[3]}ht(){let t=this.Dt.pop();t||(t=st.Lt()),this.Yt(t),this.zt.push(t)}ot(){const t=this.zt.pop();t?(this.Wt(t),this.Dt.push(t)):console.warn("pop() called without matching push()")}Kt(t){this.Yt(t)}Zt(t){this._t=Math.abs(t)}qt(){this.yt=0,this.At=0,this.bt=0,this.wt=0,this.Ct=0,this.xt=0,this.kt=!1}Vt(t){t!==0&&(this.wt+=t*Math.PI/180)}Jt(t){t!==0&&(this.Ct+=t*Math.PI/180)}ts(t){t!==0&&(this.xt+=t*Math.PI/180)}ss(t=0,e=0,r=0){t===0&&e===0&&r===0||(this.yt+=t,this.At+=e,this.bt+=r)}es(t){this.ss(t,0,0)}rs(t){this.ss(0,t,0)}ns(t){this.ss(0,0,t)}hs(t){this.Mt[0]=t[0],this.Mt[1]=t[1],this.Mt[2]=t[2]}cs(t,e,r,n=255){it(this.Ft,t,e,r,n)}ls(t,e,r,n=255){it(this.Pt,t,e,r,n)}us(t){this.$t=t}fs(t){this.Tt=t}ds(t){this.Rt=t}vs(t){this.Et=Ft(t)}ps(t,e,r,n){it(this.St,t,e,r,n)}gs(t){this.kt=t}get canvasBackgroundColor(){return this.St}get useOrtho(){return this.kt}get rotationX(){return this.wt}get rotationY(){return this.Ct}get rotationZ(){return this.xt}}const gt=new Float32Array([-.5,-.5,0,0,.5,-.5,1,0,-.5,.5,0,1,-.5,.5,0,1,.5,-.5,1,0,.5,.5,1,1]),j={_s:16,As:WebGL2RenderingContext.TRIANGLES,bs:{ws:{size:2,offset:0},Cs:{size:2,offset:8}}};class ie{constructor(t){l(this,"A");l(this,"Ms");l(this,"Fs");this.A=t,this.Ms=t.createBuffer(),this.Fs=new Float32Array(gt.length)}Ps(t,e,r,n){const h=this.A,a=Mt(this.A),c=a[2],u=a[3],f=t/c*2-1,d=(t+r)/c*2-1,g=1-(e+n)/u*2,v=1-e/u*2,m=gt,A=this.Fs;for(let p=0;p<m.length;p+=4){const y=m[p],E=m[p+1],w=m[p+2],x=m[p+3],P=f+(y+.5)*(d-f),b=g+(E+.5)*(v-g);A[p]=P,A[p+1]=b,A[p+2]=w,A[p+3]=x}h.bindBuffer(h.ARRAY_BUFFER,this.Ms),h.bufferData(h.ARRAY_BUFFER,A,h.DYNAMIC_DRAW),h.enableVertexAttribArray(0),h.vertexAttribPointer(0,2,h.FLOAT,!1,16,0),h.enableVertexAttribArray(1),h.vertexAttribPointer(1,2,h.FLOAT,!1,16,8),h.drawArrays(h.TRIANGLES,0,6),h.disableVertexAttribArray(1),h.disableVertexAttribArray(0),h.bindBuffer(h.ARRAY_BUFFER,null)}gt(){this.A.deleteBuffer(this.Ms)}}var R=(o=>(o.RECTANGLE="rectangle",o.LINE="line",o.ELLIPSE="ellipse",o.ARC="arc",o.TRIANGLE="triangle",o.BEZIER_CURVE="bezier_curve",o))(R||{});const se={rectangle:2,line:2,ellipse:2,triangle:2,arc:3,bezier_curve:4};class re{constructor(t){l(this,"A");l(this,"$s",new Map);this.A=t}Ts(t,e,r,n){const h=this.A;let a=this.$s.get(t);a||(a=new Map,this.$s.set(t,a));let c=a.get(e)||null;if(!c){c=h.createVertexArray(),a.set(e,c),h.bindVertexArray(c),h.bindBuffer(h.ARRAY_BUFFER,n);const u=h.getAttribLocation(t,"A0");u!==-1&&ft(h,u,r.bs.ws.size,r._s,r.bs.ws.offset,0,h.FLOAT,!1);const f=h.getAttribLocation(t,"A1");f!==-1&&ft(h,f,r.bs.Cs.size,r._s,r.bs.Cs.offset,0,h.FLOAT,!1)}h.bindVertexArray(c)}Rs(){this.A.bindVertexArray(null)}gt(){for(const[,t]of this.$s)for(const[,e]of t)e&&this.A.deleteVertexArray(e)}}const Z=class Z{static Es(t,e,r=0){const n=e||new Float32Array(Z.FLOATS_PER_INSTANCE);let h=r;n[h++]=t.ws[0],n[h++]=t.ws[1],n[h++]=t.Ss[0],n[h++]=t.Ss[1],n[h++]=t.Nt[0],n[h++]=t.Nt[1],n[h++]=t.Nt[2],n[h++]=t.jt[0],n[h++]=t.jt[1],n[h++]=t.jt[2],n[h++]=t.jt[3],n[h++]=t.Xt[0],n[h++]=t.Xt[1],n[h++]=t.Xt[2],n[h++]=t.Xt[3],n[h++]=t.ks[0],n[h++]=t.ks[1],n[h++]=t.ks[2],n[h++]=t.Et;const a=t.zs;n[h++]=(a==null?void 0:a[0])??0,n[h++]=(a==null?void 0:a[1])??0,n[h++]=(a==null?void 0:a[2])??0;const c=t.Ds;n[h++]=(c==null?void 0:c[0])??0,n[h++]=(c==null?void 0:c[1])??0,n[h++]=(c==null?void 0:c[2])??0;const u=t.Ls,f=t.Os,d=t.Is,g=t.Bs,v=t.Hs,m=!(!f||!d);return m?(n[h++]=(g==null?void 0:g[0])??0,n[h++]=(g==null?void 0:g[1])??0,n[h++]=(v==null?void 0:v[0])??0,n[h++]=(v==null?void 0:v[1])??0,n[h++]=f[0],n[h++]=f[1],n[h++]=d[0],n[h++]=d[1]):!m&&!!u?(n[h++]=u[0],n[h++]=u[1],n[h++]=0,n[h++]=0,n[h++]=0,n[h++]=0,n[h++]=0,n[h++]=0):(n[h++]=0,n[h++]=0,n[h++]=0,n[h++]=0,n[h++]=0,n[h++]=0,n[h++]=0,n[h++]=0),n[h++]=t.Gs??0,n[h++]=t.Qs??0,n[h++]=t.Ns??0,n}static js(t,e){const r=t.length*Z.FLOATS_PER_INSTANCE,n=e||new Float32Array(r);for(let h=0;h<t.length;h++){const a=h*Z.FLOATS_PER_INSTANCE;Z.Es(t[h],n,a)}return n}};l(Z,"BYTES_PER_INSTANCE",144),l(Z,"FLOATS_PER_INSTANCE",36);let _=Z;const S=class S{};l(S,"STRIDE",_.BYTES_PER_INSTANCE),l(S,"ATTRIBUTES",{A2:{location:-1,size:2,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:S.STRIDE,offset:0,divisor:1},A3:{location:-1,size:2,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:S.STRIDE,offset:8,divisor:1},A4:{location:-1,size:3,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:S.STRIDE,offset:16,divisor:1},A5:{location:-1,size:4,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:S.STRIDE,offset:28,divisor:1},A6:{location:-1,size:4,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:S.STRIDE,offset:44,divisor:1},A7:{location:-1,size:4,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:S.STRIDE,offset:60,divisor:1},A8:{location:-1,size:3,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:S.STRIDE,offset:76,divisor:1},A9:{location:-1,size:3,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:S.STRIDE,offset:88,divisor:1},Aa:{location:-1,size:4,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:S.STRIDE,offset:100,divisor:1},Ab:{location:-1,size:4,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:S.STRIDE,offset:116,divisor:1},Ac:{location:-1,size:3,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:S.STRIDE,offset:132,divisor:1}});let K=S;class ne{constructor(t=1e3,e=1.5){l(this,"Xs");l(this,"Ys");l(this,"Ws");l(this,"Ks",0);l(this,"Zs",0);this.Ys=t,this.Ws=e;const r=t*_.FLOATS_PER_INSTANCE;this.Xs=new Float32Array(r)}qs(t){if(t<=this.Ys)return;const e=Math.ceil(t*this.Ws),r=this.Ys;this.Ys=e;const n=e*_.FLOATS_PER_INSTANCE,h=new Float32Array(n),a=r*_.FLOATS_PER_INSTANCE;h.set(this.Xs.subarray(0,Math.min(a,this.Ks))),this.Xs=h}Vs(){return{buffer:this.Xs,offset:this.Ks}}Js(t){this.Ks+=t,this.Zs++}ti(){this.Ks=0,this.Zs=0}si(t=0,e){return this.Xs.subarray(t,e??this.Ks)}get ii(){return this.Zs}get ei(){return this.Ys}get ri(){return this.Ks}get ni(){return this.Zs===0}}class he{constructor(t){l(this,"Xs");this.Xs=t}hi(t){this.Xs.qs(this.Xs.ii+1);const{buffer:e,offset:r}=this.Xs.Vs();e[r+0]=t.x,e[r+1]=t.y,e[r+2]=t.width,e[r+3]=t.height,e[r+4]=t.char0,e[r+5]=t.char1,e[r+6]=t.char2,e[r+7]=t.r1,e[r+8]=t.g1,e[r+9]=t.b1,e[r+10]=t.a1,e[r+11]=t.r2,e[r+12]=t.g2,e[r+13]=t.b2,e[r+14]=t.a2,e[r+15]=t.invert,e[r+16]=t.flipX,e[r+17]=t.flipY,e[r+18]=t.charRot,e[r+19]=t.translationX,e[r+20]=t.translationY,e[r+21]=t.translationZ,e[r+22]=t.rotationX,e[r+23]=t.rotationY,e[r+24]=t.rotationZ;const n=t.curveParams0,h=t.curveParams1;return e[r+25]=n[0],e[r+26]=n[1],e[r+27]=n[2],e[r+28]=n[3],e[r+29]=h[0],e[r+30]=h[1],e[r+31]=h[2],e[r+32]=h[3],e[r+33]=t.depth,e[r+34]=t.baseZ,e[r+35]=t.geometryType,this.Xs.Js(_.FLOATS_PER_INSTANCE),this.Xs.ii-1}get ii(){return this.Xs.ii}}class oe{constructor(t,e=1e3){l(this,"A");l(this,"oi",null);l(this,"ai",0);l(this,"ci",new Map);this.A=t,this.li(e)}li(t){const e=this.A;this.oi&&e.deleteBuffer(this.oi),this.oi=e.createBuffer();const r=t*_.BYTES_PER_INSTANCE;Ct(e,e.ARRAY_BUFFER,this.oi,r,e.DYNAMIC_DRAW),this.ai=t}ui(t){this.li(t)}get ei(){return this.ai}fi(t,e){if(e===0)return;const r=this.A;r.bindBuffer(r.ARRAY_BUFFER,this.oi);const n=e*_.FLOATS_PER_INSTANCE;r.bufferSubData(r.ARRAY_BUFFER,0,t,0,n)}di(t){let e=this.ci.get(t);if(!e){e=new Map;const r=this.A;for(const n in K.ATTRIBUTES){const h=r.getAttribLocation(t,n);h!==-1&&e.set(n,h)}this.ci.set(t,e)}return e}pi(t){const e=this.A,r=t.G,n=this.di(r);for(const[h,a]of n){const c=K.ATTRIBUTES[h];c&&ft(e,a,c.size,c.stride,c.offset,c.divisor,c.type,c.normalized)}}gi(t){const e=this.A,r=this.di(t.G);for(const[n,h]of r)K.ATTRIBUTES[n]&&(e.disableVertexAttribArray(h),e.vertexAttribDivisor(h,0))}gt(){this.oi&&(this.A.deleteBuffer(this.oi),this.oi=null),this.ci.clear()}}class ae{constructor(t,e=1e3,r=1.5){l(this,"A");l(this,"Xs");l(this,"mi");l(this,"_i");this.A=t,this.Xs=new ne(e,r),this.mi=new he(this.Xs),this._i=new oe(t,e)}yi(t){var n,h,a,c,u,f,d,g,v,m;const e=[0,0,0,0],r=[0,0,0,0];return t.Os&&t.Is?(e[0]=((n=t.Bs)==null?void 0:n[0])??0,e[1]=((h=t.Bs)==null?void 0:h[1])??0,e[2]=((a=t.Hs)==null?void 0:a[0])??0,e[3]=((c=t.Hs)==null?void 0:c[1])??0,r[0]=t.Os[0],r[1]=t.Os[1],r[2]=t.Is[0],r[3]=t.Is[1]):t.Ls&&(e[0]=t.Ls[0],e[1]=t.Ls[1]),this.hi({x:t.ws[0],y:t.ws[1],width:t.Ss[0],height:t.Ss[1],char0:t.Nt[0],char1:t.Nt[1],char2:t.Nt[2],r1:t.jt[0],g1:t.jt[1],b1:t.jt[2],a1:t.jt[3],r2:t.Xt[0],g2:t.Xt[1],b2:t.Xt[2],a2:t.Xt[3],invert:t.ks[0],flipX:t.ks[1],flipY:t.ks[2],charRot:t.Et,translationX:((u=t.zs)==null?void 0:u[0])??0,translationY:((f=t.zs)==null?void 0:f[1])??0,translationZ:((d=t.zs)==null?void 0:d[2])??0,rotationX:((g=t.Ds)==null?void 0:g[0])??0,rotationY:((v=t.Ds)==null?void 0:v[1])??0,rotationZ:((m=t.Ds)==null?void 0:m[2])??0,curveParams0:e,curveParams1:r,depth:t.Gs||0,baseZ:t.Qs||0,geometryType:t.Ns||0})}hi(t){const e=this.mi.hi(t);return this.Xs.ei>this._i.ei&&this._i.ui(this.Xs.ei),e}get Ai(){return this.Xs.ii}get ni(){return this.Xs.ni}bi(){this.Xs.ti()}pi(t){const e=this.Xs.ii;if(e===0)return;const r=this.Xs.si();this._i.fi(r,e),this._i.pi(t)}gi(t){this._i.gi(t)}Ps(t,e){const r=this.Xs.ii;r!==0&&this.A.drawArraysInstanced(t,0,e,r)}gt(){this._i.gt()}}class G{constructor(t,e,r,n){l(this,"A");l(this,"wi");l(this,"Ci");l(this,"xi");l(this,"Mi",null);this.A=t,this.wi=e,this.Ci=r,this.xi=n;const h=this.A.createBuffer();Ct(this.A,this.A.ARRAY_BUFFER,h,this.xi.Fi,this.A.STATIC_DRAW),this.Mi=h}get type(){return this.Ci}get unitGeometry(){return this.xi}get unitBuffer(){return this.Mi}get batch(){return this.wi}Pi(){this.wi.bi()}$i(){return!this.wi.ni}gt(){this.wi.gt(),this.A.deleteBuffer(this.Mi)}Ti(t,e,r){return this.wi.yi(t)}Ri(t,e,r,n,h,a){const c=h.It??0,u=h.Bt??0,f=h.Ht??0,d=h.wt??0,g=h.Ct??0,v=h.xt??0,m=[0,0,0,0],A=[0,0,0,0];a&&(a.bezStartX!==void 0&&a.bezStartY!==void 0&&a.bezEndX!==void 0&&a.bezEndY!==void 0?(m[0]=a.cp1x??0,m[1]=a.cp1y??0,m[2]=a.cp2x??0,m[3]=a.cp2y??0,A[0]=a.bezStartX??0,A[1]=a.bezStartY??0,A[2]=a.bezEndX??0,A[3]=a.bezEndY??0):a.arcStart===void 0&&a.arcStop===void 0||(m[0]=a.arcStart??0,m[1]=a.arcStop??0));const p={x:t,y:e,width:r,height:n,char0:h.Nt[0],char1:h.Nt[1],char2:h.Nt[2],r1:h.jt[0],g1:h.jt[1],b1:h.jt[2],a1:h.jt[3],r2:h.Xt[0],g2:h.Xt[1],b2:h.Xt[2],a2:h.Xt[3],invert:h.Rt?1:0,flipX:h.Gt?1:0,flipY:h.Qt?1:0,charRot:h.Et,translationX:c,translationY:u,translationZ:f,rotationX:d,rotationY:g,rotationZ:v,curveParams0:m,curveParams1:A,depth:(a==null?void 0:a.depth)??0,baseZ:(a==null?void 0:a.baseZ)??0,geometryType:se[this.Ci]??0};return this.wi.hi(p)}}const ce={Fi:gt,Ei:6,...j},le={Fi:new Float32Array([0,-.5,0,0,1,-.5,1,0,0,.5,0,1,0,.5,0,1,1,-.5,1,0,1,.5,1,1]),Ei:6,...j},ue={Fi:function(o=32){const t=[],e=2*Math.PI/o;for(let r=0;r<o;r++){const n=r*e,h=(r+1)%o*e,a=Math.cos(n),c=Math.sin(n),u=.5*(a+1),f=.5*(c+1),d=Math.cos(h),g=Math.sin(h),v=.5*(d+1),m=.5*(g+1);t.push(0,0,.5,.5,a,c,u,f,d,g,v,m)}return new Float32Array(t)}(32),Ei:96,...j};let fe={Fi:function(o){const t=[];for(let e=0;e<o;e++){const r=e/o,n=(e+1)/o;t.push(r,0,r,0,r,1,r,1,n,1,n,1)}return new Float32Array(t)}(32),Ei:96,...j};const de={Fi:new Float32Array([0,0,0,0,1,0,1,0,.5,1,.5,1]),Ei:3,...j},ge={Fi:function(o=16){const t=[];for(let e=0;e<o;e++){const r=e/o,n=(e+1)/o;t.push(r,-.5,r,0,n,-.5,n,0,r,.5,r,1,r,.5,r,1,n,-.5,n,0,n,.5,n,1)}return new Float32Array(t)}(16),Ei:96,...j},ve={[R.RECTANGLE]:class extends G{constructor(o,t){super(o,t,R.RECTANGLE,ce)}yi(o,t){return this.Ri(0,0,o.width,o.height,t)}},[R.LINE]:class extends G{constructor(o,t){super(o,t,R.LINE,le)}yi(o,t){const e=o.x2-o.x1,r=o.y2-o.y1,n=Math.hypot(e,r),h=Math.atan2(r,e),a=t.Ot||1,c=o.x1+e/2-n/2,u=o.y1+r/2,f={...t,xt:(t.xt||0)+h};return this.Ri(c,u,n,a,f)}},[R.ELLIPSE]:class extends G{constructor(o,t){super(o,t,R.ELLIPSE,ue)}yi(o,t){return this.Ri(0,0,o.width,o.height,t)}},[R.ARC]:class extends G{constructor(o,t){super(o,t,R.ARC,fe)}yi(o,t){const e=o.start*Math.PI/180,r=o.stop*Math.PI/180;return this.Ri(0,0,o.width,o.height,t,{arcStart:e,arcStop:r})}},[R.TRIANGLE]:class extends G{constructor(o,t){super(o,t,R.TRIANGLE,de)}yi(o,t){const e=Math.min(o.x1,o.x2,o.x3),r=Math.max(o.x1,o.x2,o.x3),n=Math.min(o.y1,o.y2,o.y3),h=r-e,a=Math.max(o.y1,o.y2,o.y3)-n;return this.Ri(e,n,h,a,t)}},[R.BEZIER_CURVE]:class extends G{constructor(o,t){super(o,t,R.BEZIER_CURVE,ge)}yi(o,t){return this.Ri(0,0,1,t.Ot||1,t,{cp1x:o.cp1x,cp1y:o.cp1y,cp2x:o.cp2x,cp2y:o.cp2y,bezStartX:o.x1,bezStartY:o.y1,bezEndX:o.x2,bezEndY:o.y2})}}};class me{constructor(t){l(this,"A");l(this,"Si");l(this,"ki");this.A=t,this.ki=new re(t),this.Si=new Map;for(const e of Object.values(R)){const r=new ae(t),n=new ve[e](t,r);this.Si.set(e,n)}}zi(t){const e=this.Di(t);for(const r of e)this.Li(r)}Di(t){const e=[];let r=null,n=null,h=null;for(const a of t)n!==a.material||h!==a.type?(r&&r.length>0&&e.push({material:n,type:h,commands:r}),r=[a],n=a.material,h=a.type):r.push(a);return r&&r.length>0&&e.push({material:n,type:h,commands:r}),e}Li(t){const{material:e,type:r,commands:n}=t,h=this.Si.get(r);e.shader.D(),e.shader.O(e.uniforms);const a=Mt(this.A),c=n.length>0&&n[0].state.kt;e.shader.O({Uv:a[2]/a[3],Ud:[a[2],a[3]],Ue:1,Uf:c?1:0}),h.Pi();for(const u of n)h.yi(u.params,u.state);if(h.$i()){const u=h.unitGeometry,f=h.unitBuffer;try{this.ki.Ts(e.shader.G,r+"",u,f),h.batch.pi(e.shader),h.batch.Ps(u.As,u.Ei)}finally{h.batch.gi(e.shader),this.ki.Rs(),h.Pi()}}}gt(){for(const t of this.Si.values())t.gt();this.Si.clear(),this.ki.gt()}}function Nt(o){let t=0;for(let e=0;e<o.length;e++)t=(t<<5)-t+o.charCodeAt(e),t&=t;return t}const Ut=new WeakMap;let pe=1;function St(o){if(o==null)return 0;if(typeof o!="object"&&typeof o!="function")return Nt(o+"");let t=Ut.get(o);return t||(t=pe++,Ut.set(o,t)),t}function Q(o,t){return(o<<5)-o+t}class Ae{constructor(t){l(this,"Oi",0);l(this,"Ii");l(this,"Bi");l(this,"Hi",new Map);this.Ii=new H(t,et,`#version 300 es
|
|
10
|
-
precision highp float;in vec3 v_glyphIndex;in vec4 v_glyphColor;in vec4 v_cellColor;in vec4 v_glyphFlags;layout(location=0)out vec4 o_character;layout(location=1)out vec4 o_primaryColor;layout(location=2)out vec4 o_secondaryColor;layout(location=3)out vec4 A;void main(){int B=int(v_glyphFlags.r>0.5?1:0);int C=int(v_glyphFlags.g>0.5?1:0);int D=int(v_glyphFlags.b>0.5?1:0);float E=float(B|(C<<1)|(D<<2))/255.;o_character=vec4(v_glyphIndex.xy,E,clamp(v_glyphFlags.a,0.,1.));o_primaryColor=vec4(v_glyphColor.rgb,v_glyphColor.a);o_secondaryColor=vec4(v_cellColor.rgb,v_cellColor.a);A=vec4(0.);}`),this.Bi={id:this.Oi++,shader:this.Ii,uniforms:Object.freeze({}),hash:this.Gi(this.Ii,{}),isBuiltIn:!0}}get Qi(){return this.Bi}dt(t,e={},r=!1){const n=this.Gi(t,e),h=this.Hi.get(n);if(h)return h;const a={id:this.Oi++,shader:t,uniforms:Object.freeze({...e}),hash:n,isBuiltIn:r};return this.Hi.set(n,a),a}Ni(t,e={}){return{id:this.Oi++,shader:t,uniforms:Object.freeze({...e}),hash:0,isBuiltIn:!1}}Gi(t,e){const r=St(t.G),n=function(h,a){let c=0;const u=Object.keys(h).sort();for(const f of u)c=Q(c,Nt(f)),c=Q(c,a(h[f]));return c}(e,this.ji.bind(this));return Q(r,n)}ji(t){return typeof t=="number"||typeof t=="boolean"?function(e){return typeof e=="boolean"?e?1:0:Math.floor(e)}(t):Array.isArray(t)?function(e){let r=0;const n=Array.isArray(e[0])?e.flat():e;for(const h of n)r=Q(r,typeof h=="number"?h:0);return r}(t):t instanceof Float32Array||t instanceof Int32Array?function(e){let r=0;const n=Math.min(e.length,16);for(let h=0;h<n;h++)r=Q(r,e[h]);return r}(t):t instanceof WebGLTexture?St(t):0}gt(){this.Ii!=this.Ii&&this.Ii.dispose(),this.Ii.dispose(),this.Hi.clear()}}class Ee{constructor(){l(this,"Xi",[]);l(this,"Yi",1);l(this,"Ss",0)}Wi(t,e){if(this.Ss>=this.Xi.length){const n={id:this.Yi++,type:t,params:{},state:st.Lt(),material:e};this.Xi.push(n)}const r=this.Xi[this.Ss];return r.id=this.Yi++,r.type=t,r.material=e,this.Ss++,r}Ki(t,e,r){const n=this.Wi(R.RECTANGLE,r),h=n.params;return h.width=t.width,h.height=t.height,e.Kt(n.state),n.id}Zi(t,e,r){const n=this.Wi(R.LINE,r),h=n.params;return h.x1=t.x1,h.y1=t.y1,h.x2=t.x2,h.y2=t.y2,h.thickness=t.thickness,e.Kt(n.state),n.id}qi(t,e,r){const n=this.Wi(R.ELLIPSE,r),h=n.params;return h.width=t.width,h.height=t.height,h.startAngle=t.startAngle,h.endAngle=t.endAngle,h.segments=t.segments,e.Kt(n.state),n.id}Vi(t,e,r){const n=this.Wi(R.ARC,r),h=n.params;return h.width=t.width,h.height=t.height,h.start=t.start,h.stop=t.stop,e.Kt(n.state),n.id}Ji(t,e,r){const n=this.Wi(R.TRIANGLE,r),h=n.params;return h.x1=t.x1,h.y1=t.y1,h.x2=t.x2,h.y2=t.y2,h.x3=t.x3,h.y3=t.y3,e.Kt(n.state),n.id}te(t,e,r){const n=this.Wi(R.BEZIER_CURVE,r),h=n.params;return h.x1=t.x1,h.y1=t.y1,h.cp1x=t.cp1x,h.cp1y=t.cp1y,h.cp2x=t.cp2x,h.cp2y=t.cp2y,h.x2=t.x2,h.y2=t.y2,h.thickness=t.thickness,h.segments=t.segments,e.Kt(n.state),n.id}bi(){this.Ss=0}[Symbol.iterator](){let t=0;const e=this.Ss,r=this.Xi;return{next:()=>t<e?{value:r[t++],done:!1}:{value:void 0,done:!0}}}}class ye{constructor(t){l(this,"A");l(this,"se",null);l(this,"ie");l(this,"vt");l(this,"ee");l(this,"re");l(this,"ne");l(this,"he",null);l(this,"oe",{});l(this,"ae",[]);l(this,"ce",[]);l(this,"le",[]);l(this,"ue",null);l(this,"fe",[0,0,0,0]);l(this,"de",1);this.A=t,t.enable(t.DEPTH_TEST),t.depthFunc(t.LEQUAL),t.clearDepth(1),t.depthMask(!0),t.disable(t.CULL_FACE),this.ee=new st,this.vt=new Ae(t),this.re=new Ee,this.ie=new me(t),this.ne=new ie(t);const e=[0,0,t.canvas.width,t.canvas.height];dt(t,e),this.ae.push(null),this.ce.push(e),this.le.push(1),this.ue=null,this.fe=e,this.de=1}rt(){this.ae.push(this.ue),this.ce.push([...this.fe]),this.le.push(this.de)}lt(){const t=this.ae.pop()??null,e=this.ce.pop()??[0,0,this.A.canvas.width,this.A.canvas.height],r=this.le.pop()??1;this.nt(t,e[2],e[3],r)}nt(t,e,r,n=1){const h=this.A;this.ue!==t&&(h.bindFramebuffer(h.FRAMEBUFFER,t),this.ue=t),this.de=n;const a=[0,0,e,r];this.fe[0]===a[0]&&this.fe[1]===a[1]&&this.fe[2]===a[2]&&this.fe[3]===a[3]||(h.viewport(...a),dt(h,a),this.fe=a)}ve(t){this.se!==t&&(this.se=t,t.D())}pe(t,e){return new H(this.A,t,e)}ge(t){this.he=t,t&&(this.oe={})}I(t,e){this.oe[t]=e}me(t){Object.assign(this.oe,t)}_e(t){return new H(this.A,et,t)}ye(t,e,r){this.re.Ki({width:e??t.width,height:r??t.height},this.ee,t.ut())}Ae(t,e,r,n){this.ne.Ps(t,e,r,n)}be(t,e){if(this.he){const r=this.vt.Ni(this.he,this.oe);this.re.Ki({width:t,height:e},this.ee,r),this.he=null,this.oe={}}else this.re.Ki({width:t,height:e},this.ee,this.vt.Qi)}we(t,e,r,n){this.re.Zi({x1:t,y1:e,x2:r,y2:n},this.ee,this.vt.Qi)}Ce(t,e){this.re.qi({width:t,height:e},this.ee,this.vt.Qi)}xe(t,e,r,n,h,a){this.re.Ji({x1:t,y1:e,x2:r,y2:n,x3:h,y3:a},this.ee,this.vt.Qi)}Me(t,e,r,n,h,a,c,u){this.re.te({x1:t,y1:e,cp1x:r,cp1y:n,cp2x:h,cp2y:a,x2:c,y2:u},this.ee,this.vt.Qi)}Fe(t,e,r,n){this.re.Vi({width:t,height:e,start:r,stop:n},this.ee,this.vt.Qi)}Pe(t,e,r=1,n={}){return new z(this.A,t,e,r,n,this)}$e(t,e=t,r=t,n=255){this.ee.ps(t,e??t,r??t,n);const[h,a,c,u]=this.ee.canvasBackgroundColor;this.Te(h,a,c,u,!1)}bi(t=0,e=0,r=0,n=0){this.Te(t,e,r,n,!0)}Te(t,e,r,n,h){const a=this.A;if(this.de>1){const c=h?[1,1,0,0]:[0,0,0,0];a.clearBufferfv(a.COLOR,0,new Float32Array(c)),a.clearBufferfv(a.COLOR,1,new Float32Array([0,0,0,0])),this.de>=3&&a.clearBufferfv(a.COLOR,2,new Float32Array([t,e,r,n]));for(let u=3;u<this.de;u++)a.clearBufferfv(a.COLOR,u,new Float32Array([0,0,0,0]))}else a.clearColor(t,e,r,n),a.clear(a.COLOR_BUFFER_BIT)}Re(){const t=[0,0,this.A.canvas.width,this.A.canvas.height];this.A.viewport(...t),dt(this.A,t),this.fe=t,this.ce.length>0&&(this.ce[0]=t)}ct(){const t=this.re;this.ie.zi(t),t.bi(),this.se=null}gt(){this.vt.gt(),this.ie.gt(),this.ne.gt()}get context(){return this.A}get state(){return this.ee}get materialManager(){return this.vt}}const C={readShort:(o,t)=>(C.t.uint16[0]=o[t]<<8|o[t+1],C.t.int16[0]),readUshort:(o,t)=>o[t]<<8|o[t+1],readUshorts(o,t,e){const r=[];for(let n=0;n<e;n++)r.push(C.readUshort(o,t+2*n));return r},readUint(o,t){const e=C.t.uint8;return e[3]=o[t],e[2]=o[t+1],e[1]=o[t+2],e[0]=o[t+3],C.t.uint32[0]},readASCII(o,t,e){let r="";for(let n=0;n<e;n++)r+=String.fromCharCode(o[t+n]);return r},t:(()=>{const o=new ArrayBuffer(8);return{uint8:new Uint8Array(o),int16:new Int16Array(o),uint16:new Uint16Array(o),uint32:new Uint32Array(o)}})()};function rt(o){return o+3&-4}function nt(o,t,e){o[t]=e>>>8&255,o[t+1]=255&e}function X(o,t,e){o[t]=e>>>24&255,o[t+1]=e>>>16&255,o[t+2]=e>>>8&255,o[t+3]=255&e}function xe(o,t,e){for(let r=0;r<e.length;r++)o[t+r]=255&e.charCodeAt(r)}function vt(o,t,e){const r=t+e;let n=0;const h=C.t;for(let a=t;a<r;a+=4)h.uint8[3]=o[a]||0,h.uint8[2]=o[a+1]||0,h.uint8[1]=o[a+2]||0,h.uint8[0]=o[a+3]||0,n=n+(h.uint32[0]>>>0)>>>0;return n>>>0}class we{constructor(t){l(this,"b");l(this,"p",0);l(this,"bitbuf",0);l(this,"bitcnt",0);this.b=t}readBits(t){for(;this.bitcnt<t;){const r=this.b[this.p++]||0;this.bitbuf|=r<<this.bitcnt,this.bitcnt+=8}const e=this.bitbuf&(1<<t)-1;return this.bitbuf>>>=t,this.bitcnt-=t,e}alignToByte(){this.bitbuf=0,this.bitcnt=0}get offset(){return this.p}}function q(o){let t=32,e=0;for(const c of o)c&&(c<t&&(t=c),c>e&&(e=c));if(e===0)return{min:0,max:0,table:new Map};const r=new Uint32Array(e+1);for(const c of o)c&&r[c]++;const n=new Uint32Array(e+1);let h=0;r[0]=0;for(let c=1;c<=e;c++)h=h+r[c-1]<<1,n[c]=h;const a=new Map;for(let c=0;c<o.length;c++){const u=o[c];if(!u)continue;const f=n[u]++;let d=a.get(u);d||(d=[],a.set(u,d)),d[be(f,u)]=c}return{min:t,max:e,table:a}}function mt(o,t){let e=0;for(let r=1;r<=t.max;r++){e|=o.readBits(1)<<r-1;const n=t.table.get(r);if(n&&e<n.length){const h=n[e];if(h!==void 0)return h}}throw Error("Invalid Huffman code")}function be(o,t){let e=0;for(let r=0;r<t;r++)e=e<<1|1&o,o>>>=1;return e>>>0}function Te(o){if(o.length<2)throw Error("ZLIB data too short");const t=o[0],e=o[1];if((15&t)!=8)throw Error("Unsupported ZLIB compression method");if(((t<<8)+e)%31!=0)throw Error("Bad ZLIB header check");let r=2;32&e&&(r+=4);const n=[];return function(h,a){const c=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258],u=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],f=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577],d=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13];let g=0;for(;!g;){g=h.readBits(1);const v=h.readBits(2);if(v===0){h.alignToByte();const m=h.readBits(16);if((65535&(65535^m))!==h.readBits(16))throw Error("DEFLATE uncompressed LEN/NLEN mismatch");for(let A=0;A<m;A++)a.push(h.readBits(8))}else{if(v!==1&&v!==2)throw Error("Unsupported DEFLATE type");{let m,A;if(v===1){const p=Array(288).fill(0);for(let y=0;y<=143;y++)p[y]=8;for(let y=144;y<=255;y++)p[y]=9;for(let y=256;y<=279;y++)p[y]=7;for(let y=280;y<=287;y++)p[y]=8;m=q(p),A=q(Array(32).fill(5))}else{const p=h.readBits(5)+257,y=h.readBits(5)+1,E=h.readBits(4)+4,w=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],x=Array(19).fill(0);for(let M=0;M<E;M++)x[w[M]]=h.readBits(3);const P=q(x),b=[];for(;b.length<p+y;){const M=mt(h,P);if(M<=15)b.push(M);else if(M===16){const B=h.readBits(2)+3,D=b[b.length-1]||0;for(let ct=0;ct<B;ct++)b.push(D)}else if(M===17){const B=h.readBits(3)+3;for(let D=0;D<B;D++)b.push(0)}else{if(M!==18)throw Error("Invalid code length symbol");{const B=h.readBits(7)+11;for(let D=0;D<B;D++)b.push(0)}}}const N=b.slice(0,p),L=b.slice(p,p+y);m=q(N),A=q(L)}for(;;){const p=mt(h,m);if(p<256)a.push(p);else{if(p===256)break;if(p>256&&p<286){const y=p-257;let E=c[y];const w=u[y];w&&(E+=h.readBits(w));const x=mt(h,A);if(x>=30)throw Error("Invalid distance symbol");let P=f[x];const b=d[x];b&&(P+=h.readBits(b));const N=a.length-P;if(N<0)throw Error("Invalid distance");for(let L=0;L<E;L++)a.push(a[N+L]||0)}else if(p===286||p===287)throw Error("Reserved length symbol")}}}}}}(new we(o.subarray(r)),n),new Uint8Array(n)}function Fe(o){const t=C,e=new Uint8Array(o);if(t.readASCII(e,0,4)!=="wOFF")throw Error("Invalid WOFF signature");const r=t.readUint(e,4),n=t.readUshort(e,12),h=t.readUint(e,16),a=[];let c=44;for(let E=0;E<n;E++){const w=t.readASCII(e,c,4),x=t.readUint(e,c+4),P=t.readUint(e,c+8),b=t.readUint(e,c+12),N=t.readUint(e,c+16);a.push({tag:w,offset:x,compLength:P,origLength:b,checksum:N}),c+=20}for(const E of a){const w=new Uint8Array(e.buffer,E.offset,E.compLength);if(E.compLength===E.origLength)E.data=new Uint8Array(w);else if(E.data=Te(w),E.data.length!==E.origLength)if(E.data.length<E.origLength){const x=new Uint8Array(E.origLength);x.set(E.data),E.data=x}else E.data=E.data.subarray(0,E.origLength)}const u=n;let f=1,d=0;for(;f<<1<=u;)f<<=1,d++;const g=16*f,v=16*u-g;let m=12+16*u;const A={};for(const E of a)A[E.tag]=m,m=rt(m+E.data.length);const p=new Uint8Array(Math.max(h||0,m));X(p,0,r),nt(p,4,u),nt(p,6,g),nt(p,8,d),nt(p,10,v);let y=12;for(const E of a){xe(p,y,E.tag),y+=4;let w=E.data;if(E.tag==="head"&&w.length>=12){const x=new Uint8Array(w);X(x,8,0),X(p,y,vt(x,0,rt(x.length))),y+=4}else X(p,y,vt(w,0,rt(w.length))),y+=4;X(p,y,A[E.tag]),y+=4,X(p,y,E.data.length),y+=4}for(const E of a){const w=A[E.tag];p.set(E.data,w)}if(a.find(E=>E.tag==="head")){const E=A.head,w=function(x,P){const b=P+8,N=[x[b],x[b+1],x[b+2],x[b+3]];X(x,b,0);const L=2981146554-(vt(x,0,rt(x.length))>>>0)>>>0;return x[b]=N[0],x[b+1]=N[1],x[b+2]=N[2],x[b+3]=N[3],L>>>0}(p,E);X(p,E+8,w)}return p.buffer}const Re={parseTab(o,t,e){const r={tables:[],ids:{},off:t};o=new Uint8Array(o.buffer,t,e),t=0;const n=C,h=n.readUshort,a=h(o,t+=2);t+=2;const c=[];for(let u=0;u<a;u++){const f=h(o,t),d=h(o,t+=2);t+=2;const g=n.readUint(o,t);t+=4;const v=`p${f}e${d}`;let m=c.indexOf(g);if(m===-1){let A;m=r.tables.length,c.push(g);const p=h(o,g);A=p===4?this.parse4(o,g):p===12?this.parse12(o,g):{format:p},r.tables.push(A)}r.ids[v]=m}return r},parse4(o,t){const e=C,r=e.readUshort,n=e.readUshorts,h=t,a=r(o,t+=2);t+=2;const c=r(o,t+=2)>>>1,u={format:4,searchRange:r(o,t+=2),entrySelector:0,rangeShift:0,endCount:[],startCount:[],idDelta:[],idRangeOffset:[],glyphIdArray:[]};t+=2,u.entrySelector=r(o,t),t+=2,u.rangeShift=r(o,t),t+=2,u.endCount=n(o,t,c),t+=2*c,t+=2,u.startCount=n(o,t,c),t+=2*c;for(let f=0;f<c;f++)u.idDelta.push(e.readShort(o,t)),t+=2;return u.idRangeOffset=n(o,t,c),t+=2*c,u.glyphIdArray=n(o,t,h+a-t>>1),u},parse12(o,t){const e=C.readUint;e(o,t+=4),e(o,t+=4);const r=e(o,t+=4);t+=4;const n=new Uint32Array(3*r);for(let h=0;h<3*r;h+=3)n[h]=e(o,t+(h<<2)),n[h+1]=e(o,t+(h<<2)+4),n[h+2]=e(o,t+(h<<2)+8);return{format:12,groups:n}}},Ce={parseTab(o,t,e){const r=C;t+=18;const n=r.readUshort(o,t);t+=2,t+=16;const h=r.readShort(o,t);t+=2;const a=r.readShort(o,t);t+=2;const c=r.readShort(o,t);t+=2;const u=r.readShort(o,t);return t+=2,t+=6,{unitsPerEm:n,xMin:h,yMin:a,xMax:c,yMax:u,indexToLocFormat:r.readShort(o,t)}}},Pe={parseTab(o,t,e){const r=C;t+=4;const n=["ascender","descender","lineGap","advanceWidthMax","minLeftSideBearing","minRightSideBearing","xMaxExtent","caretSlopeRise","caretSlopeRun","caretOffset","res0","res1","res2","res3","metricDataFormat","numberOfHMetrics"],h={};for(let a=0;a<n.length;a++){const c=n[a],u=c==="advanceWidthMax"||c==="numberOfHMetrics"?r.readUshort:r.readShort;h[c]=u(o,t+2*a)}return h}},Me={parseTab(o,t,e,r){const n=C,h=[],a=[],c=r.maxp.numGlyphs,u=r.hhea.numberOfHMetrics;let f=0,d=0,g=0;for(;g<u;)f=n.readUshort(o,t+(g<<2)),d=n.readShort(o,t+(g<<2)+2),h.push(f),a.push(d),g++;for(;g<c;)h.push(f),a.push(d),g++;return{aWidth:h,lsBearing:a}}},Dt={cmap:Re,head:Ce,hhea:Pe,maxp:{parseTab(o,t,e){const r=C;return r.readUint(o,t),t+=4,{numGlyphs:r.readUshort(o,t)}}},hmtx:Me,loca:{parseTab(o,t,e,r){const n=C,h=[],a=r.head.indexToLocFormat,c=r.maxp.numGlyphs+1;if(a===0)for(let u=0;u<c;u++)h.push(n.readUshort(o,t+(u<<1))<<1);else if(a===1)for(let u=0;u<c;u++)h.push(n.readUint(o,t+(u<<2)));return h}},glyf:{parseTab(o,t,e,r){const n=[],h=r.maxp.numGlyphs;for(let a=0;a<h;a++)n.push(null);return n},Ee(o,t){const e=C,r=o.Se,n=o.loca;if(n[t]===n[t+1])return null;const h=J.findTable(r,"glyf",o.ke);if(!h)return null;let a=h[0]+n[t];const c={};if(c.noc=e.readShort(r,a),a+=2,c.xMin=e.readShort(r,a),a+=2,c.yMin=e.readShort(r,a),a+=2,c.xMax=e.readShort(r,a),a+=2,c.yMax=e.readShort(r,a),a+=2,c.xMin>=c.xMax||c.yMin>=c.yMax)return null;if(c.noc>0){c.endPts=[];for(let v=0;v<c.noc;v++)c.endPts.push(e.readUshort(r,a)),a+=2;const u=e.readUshort(r,a);if(a+=2,r.length-a<u)return null;a+=u;const f=c.endPts[c.noc-1]+1;c.flags=[];for(let v=0;v<f;v++){const m=r[a];if(a++,c.flags.push(m),8&m){const A=r[a];a++;for(let p=0;p<A;p++)c.flags.push(m),v++}}c.xs=[];for(let v=0;v<f;v++){const m=c.flags[v],A=!!(16&m);2&m?(c.xs.push(A?r[a]:-r[a]),a++):A?c.xs.push(0):(c.xs.push(e.readShort(r,a)),a+=2)}c.ys=[];for(let v=0;v<f;v++){const m=c.flags[v],A=!!(32&m);4&m?(c.ys.push(A?r[a]:-r[a]),a++):A?c.ys.push(0):(c.ys.push(e.readShort(r,a)),a+=2)}let d=0,g=0;for(let v=0;v<f;v++)d+=c.xs[v],g+=c.ys[v],c.xs[v]=d,c.ys[v]=g}else c.parts=[],c.endPts=[],c.flags=[],c.xs=[],c.ys=[];return c}}},J={parse(o){const t=new Uint8Array(o);C.readASCII(t,0,4)==="wOFF"&&(o=Fe(o));const e=new Uint8Array(o),r=Dt,n={},h={Se:e,ze:0,ke:0};for(const a in r){const c=a,u=J.findTable(e,c,0);if(u){const[f,d]=u;let g=n[f];g==null&&(g=r[c].parseTab(e,f,d,h),n[f]=g),h[c]=g}}return[h]},findTable(o,t,e){const r=C,n=r.readUshort(o,e+4);let h=e+12;for(let a=0;a<n;a++){const c=r.readASCII(o,h,4);r.readUint(o,h+4);const u=r.readUint(o,h+8),f=r.readUint(o,h+12);if(c===t)return[u,f];h+=16}return null},T:Dt,B:C};class Ne{De(t){var r;const e=[];return(r=t.cmap)!=null&&r.tables?(t.cmap.tables.forEach(n=>{if(n.format===4){const h=this.Le(n);e.push(...h)}else if(n.format===12){const h=this.Oe(n);e.push(...h)}}),[...new Set(e)]):[]}Le(t){const e=[];if(!(t.startCount&&t.endCount&&t.idRangeOffset&&t.idDelta))return e;for(let r=0;r<t.startCount.length;r++){const n=t.startCount[r],h=t.endCount[r];if(n!==65535||h!==65535){for(let a=n;a<=h;a++)if(this.Ie(t,a,r)>0)try{const c=String.fromCodePoint(a);e.push(c)}catch{}}}return e}Oe(t){const e=[];if(!t.groups)return e;for(let r=0;r<t.groups.length;r+=3){const n=t.groups[r],h=t.groups[r+1],a=t.groups[r+2];for(let c=n;c<=h;c++)if(a+(c-n)>0)try{const u=String.fromCodePoint(c);e.push(u)}catch{}}return e}Ie(t,e,r){if(t.idRangeOffset[r]===0)return e+t.idDelta[r]&65535;{const n=t.idRangeOffset[r]/2+(e-t.startCount[r])-(t.startCount.length-r);if(n>=0&&t.glyphIdArray&&n<t.glyphIdArray.length){const h=t.glyphIdArray[n];if(h!==0)return h+t.idDelta[r]&65535}}return 0}}class Ue{constructor(t){l(this,"Be");l(this,"He");l(this,"Z");this.Z=t,this.Be=document.createElement("canvas"),this.He=this.Be.getContext("2d",{willReadFrequently:!0,alpha:!0})}Ge(t,e,r,n){const h=t.length,a=Math.ceil(Math.sqrt(h)),c=Math.ceil(h/a),u=e.width*a,f=e.height*c;this.Qe(u,f),this.Ne(t,e,a,r,n);const d=this.Z.Pe(u,f,1,{filter:"nearest"});return d.et(this.Be),{framebuffer:d,columns:a,rows:c}}Qe(t,e){this.Be.width=t,this.Be.height=e,this.Be.style.width=t+"px",this.Be.style.height=e+"px",this.He.imageSmoothingEnabled=!1,this.Be.style.imageRendering="pixelated",this.He.clearRect(0,0,t,e),this.He.textBaseline="top",this.He.textAlign="left",this.He.fillStyle="white"}Ne(t,e,r,n,h){const a=n/h.head.unitsPerEm;for(let c=0;c<t.length;c++){const u=c%r,f=Math.floor(c/r),d=t[c].glyphData;if(!d)continue;const g=d.advanceWidth*a,v=u*e.width,m=f*e.height,A=v+.5*e.width,p=m+.5*e.height,y=Math.round(A-.5*e.width),E=Math.round(p-.5*n),w=y+.5*(e.width-g),x=E+h.hhea.ascender*a;this.je(d,w,x,a)}}je(t,e,r,n){if(!t||!t.xs||t.noc===0)return;let{xs:h,ys:a,endPts:c,flags:u}=t;if(!(h&&a&&c&&u))return;this.He.beginPath();let f=0;for(let d=0;d<c.length;d++){const g=c[d];if(!(g<f)){if(g>=f){const v=e+h[f]*n,m=r-a[f]*n;this.He.moveTo(v,m);let A=f+1;for(;A<=g;)if(1&u[A]){const p=e+h[A]*n,y=r-a[A]*n;this.He.lineTo(p,y),A++}else{const p=e+h[A]*n,y=r-a[A]*n;if(A+1>g){const w=e+h[f]*n,x=r-a[f]*n;if(1&u[f])this.He.quadraticCurveTo(p,y,w,x);else{const P=(p+w)/2,b=(y+x)/2;this.He.quadraticCurveTo(p,y,P,b)}break}const E=A+1;if(1&u[E]){const w=e+h[E]*n,x=r-a[E]*n;this.He.quadraticCurveTo(p,y,w,x),A=E+1}else{const w=(p+(e+h[E]*n))/2,x=(y+(r-a[E]*n))/2;this.He.quadraticCurveTo(p,y,w,x),A=E}}this.He.closePath()}f=g+1}}this.He.fill()}}class Lt{Xe(t,e){const r=t.cmap;if(!r||!r.tables)return 0;let n=0;for(const h of r.tables)if(h.format===4?n=this.Ye(e,h):h.format===12&&(n=this.We(e,h)),n>0)break;return n}Ke(t,e){const r=e.codePointAt(0);return r===void 0?0:this.Xe(t,r)}Ze(t,e){const r=t.hmtx;return r&&r.aWidth&&r.aWidth.length!==0?e<r.aWidth.length?r.aWidth[e]:r.aWidth[r.aWidth.length-1]:0}qe(t,e){const r=e/t.head.unitsPerEm,n=t.hhea.ascender*r,h=t.hhea.descender*r,a=t.hhea.lineGap*r;return{ascender:n,descender:h,lineGap:a,lineHeight:n-h+a,unitsPerEm:t.head.unitsPerEm,scale:r}}Ye(t,e){const r=e.endCount.length;let n=-1;for(let h=0;h<r;h++)if(t<=e.endCount[h]){n=h;break}if(n===-1||t<e.startCount[n])return 0;if(e.idRangeOffset[n]===0)return t+e.idDelta[n]&65535;{const h=e.idRangeOffset[n]/2+(t-e.startCount[n])-(r-n);if(h>=0&&h<e.glyphIdArray.length){const a=e.glyphIdArray[h];return a===0?0:a+e.idDelta[n]&65535}}return 0}We(t,e){const r=e.groups.length/3;for(let n=0;n<r;n++){const h=e.groups[3*n],a=e.groups[3*n+1],c=e.groups[3*n+2];if(t>=h&&t<=a)return c+(t-h)}return 0}}class Se{constructor(){l(this,"Ve");this.Ve=new Lt}Je(t,e,r){let n=0;const h=this.Ve.qe(r,e),a=h.lineHeight;for(const c of t){const u=this.Ve.Ke(r,c);if(u===0)continue;const f=this.Ve.Ze(r,u)*h.scale;n=Math.max(n,f)}return{width:Math.ceil(n),height:Math.ceil(a)}}}class De{constructor(){l(this,"tr");this.tr=new Lt}sr(t,e){const r=[],n=new Map;return t.forEach((h,a)=>{const c=h.codePointAt(0)||0,u={character:h,unicode:c,color:this.ir(a),glyphData:this.er(e,h)};r.push(u),n.set(h,u)}),{array:r,map:n}}ir(t){return[t%256/255,Math.floor(t/256)%256/255,0]}er(t,e){const r=e.codePointAt(0)||0,n=this.tr.Xe(t,r);if(n===0)return null;let h=0;t.hmtx&&t.hmtx.aWidth&&n>0&&t.hmtx.aWidth[n]!==void 0&&(h=t.hmtx.aWidth[n]);const a=J.T.glyf.Ee(t,n);return a?{...a,advanceWidth:h}:null}}class pt{constructor(t,e=16){l(this,"rr");l(this,"nr",[]);l(this,"hr",new Map);l(this,"ar");l(this,"cr",16);l(this,"lr",0);l(this,"ur",0);l(this,"dr",{width:0,height:0});l(this,"vr");l(this,"pr");l(this,"gr");l(this,"mr");l(this,"_r");this.cr=e,this.pr=new Ne,this.gr=new Ue(t),this.mr=new Se,this._r=new De}async yr(t){let e;if(t){const r=await fetch(t);if(!r.ok)throw new F(`Failed to load font file: ${r.status} ${r.statusText}`);e=await r.arrayBuffer()}else e=await(await fetch("data:font/woff;base64,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")).arrayBuffer();await this.Ar(e),this.rr=J.parse(e)[0],await this.br()}wr(t){if(t===void 0)return this.cr;this.cr=t,this.dr=this.mr.Je(this.nr.map(r=>r.character),this.cr,this.rr);const e=this.gr.Ge(this.nr,this.dr,this.cr,this.rr);this.ar=e.framebuffer,this.lr=e.columns,this.ur=e.rows}async Cr(t){try{const e=await fetch(t);if(!e.ok)throw new F(`Failed to load font file: ${e.status} ${e.statusText}`);const r=await e.arrayBuffer();await this.Ar(r);const n=J.parse(r);if(!n||n.length===0)throw Error("Failed to parse font file");this.rr=n[0],await this.br()}catch(e){throw new F("Failed to load font: "+(e instanceof Error?e.message:"Unknown error"),e)}}async Ar(t){const e=Date.now();this.vr=new FontFace("CustomFont_"+e,t),await this.vr.load(),document.fonts.add(this.vr)}async br(){const t=this.pr.De(this.rr),{array:e,map:r}=this._r.sr(t,this.rr);this.nr=e,this.hr=r,this.dr=this.mr.Je(t,this.cr,this.rr);const n=this.gr.Ge(this.nr,this.dr,this.cr,this.rr);this.ar=n.framebuffer,this.lr=n.columns,this.ur=n.rows}Mr(t){const e=this.hr.get(t);return e?e.color:[0,0,0]}Fr(t){return Array.from(t).map(e=>{const r=this.hr.get(e);return r?r.color:[0,0,0]})}gt(){this.ar.gt(),document.fonts.delete(this.vr)}get fontFramebuffer(){return this.ar}get characterMap(){return this.hr}get characters(){return this.nr}get textureColumns(){return this.lr}get textureRows(){return this.ur}get maxGlyphDimensions(){return this.dr}get fontSize(){return this.cr}get font(){return this.rr}}class At{constructor(t,e,r){l(this,"Pr");l(this,"$r");l(this,"N");l(this,"j");l(this,"Tr");l(this,"Rr");l(this,"Er");l(this,"Sr");l(this,"kr");this.Er=t,this.Sr=e,this.kr=r,this.ti()}ti(){this.Pr=Math.floor(this.Er.width/this.Sr),this.$r=Math.floor(this.Er.height/this.kr),this.N=this.Pr*this.Sr,this.j=this.$r*this.kr,this.Tr=Math.floor((this.Er.width-this.N)/2),this.Rr=Math.floor((this.Er.height-this.j)/2)}zr(t,e){this.Sr=t,this.kr=e,this.ti()}get cellWidth(){return this.Sr}get cellHeight(){return this.kr}get cols(){return this.Pr}get rows(){return this.$r}get width(){return this.N}get height(){return this.j}get offsetX(){return this.Tr}get offsetY(){return this.Rr}}const Le=/^rgba?\(([^)]+)\)$/i;function Et(o){return Number.isNaN(o)?0:Math.max(0,Math.min(255,o))}function _e(o){if(!o)return null;const t=o.trim().toLowerCase();if(!t)return null;let e=null;return t.startsWith("rgb")&&(e=function(r){const n=Le.exec(r.trim());if(!n)return null;const h=n[1].split(",").map(d=>d.trim());if(h.length<3)return null;const a=Et(parseFloat(h[0])),c=Et(parseFloat(h[1])),u=Et(parseFloat(h[2])),f=h[3]!==void 0?255*Math.max(0,Math.min(1,parseFloat(h[3]))):255;return[a,c,u,Math.round(f)]}(t)),e?e[3]===0?null:e:null}class _t{constructor(t={}){l(this,"Er");l(this,"Dr",null);l(this,"Lr",!1);l(this,"Or");this.Lr=t.overlay??!1,this.Lr&&t.canvas?(this.Dr=t.canvas,this.Er=this.Ir(),this.Or=!0,this.Br()):t.canvas?(this.Er=t.canvas,this.Or=!1):(this.Er=this.Hr(t.width,t.height),this.Or=!0),this.Er.style.imageRendering="pixelated"}Hr(t,e){const r=document.createElement("canvas");return r.className="textmodeCanvas",r.style.imageRendering="pixelated",r.width=t||800,r.height=e||600,document.body.appendChild(r),r}Ir(){const t=document.createElement("canvas");t.className="textmodeCanvas",t.style.imageRendering="pixelated";const e=this.Dr.getBoundingClientRect();let r=Math.round(e.width),n=Math.round(e.height);if(this.Dr instanceof HTMLVideoElement){const c=this.Dr;(r===0||n===0)&&c.videoWidth>0&&c.videoHeight>0&&(r=c.videoWidth,n=c.videoHeight)}t.width=r,t.height=n,t.style.position="absolute",t.style.pointerEvents="none";const h=window.getComputedStyle(this.Dr);let a=parseInt(h.zIndex||"0",10);return isNaN(a)&&(a=0),t.style.zIndex=""+(a+1),t}Br(){var t;this.Gr(),(t=this.Dr.parentNode)==null||t.insertBefore(this.Er,this.Dr.nextSibling)}Qr(){const t=[];return this.Lr&&this.Dr instanceof HTMLElement&&(t.push(this.Dr),this.Dr.parentElement&&t.push(this.Dr.parentElement)),this.Er.parentElement&&t.push(this.Er.parentElement),t.push(this.Er),t.push(document.body),t.push(document.documentElement),t}Nr(){const t=this.Qr();for(const e of t){if(!e)continue;const r=_e(window.getComputedStyle(e).backgroundColor);if(r)return r}return[255,255,255,255]}Gr(){if(!this.Dr)return;const t=this.Dr.getBoundingClientRect();let e=this.Dr.offsetParent;if(e&&e!==document.body){const r=e.getBoundingClientRect();this.Er.style.top=t.top-r.top+"px",this.Er.style.left=t.left-r.left+"px"}else this.Er.style.top=t.top+window.scrollY+"px",this.Er.style.left=t.left+window.scrollX+"px"}jr(t,e){if(this.Lr){const r=this.Dr.getBoundingClientRect();this.Er.width=Math.round(r.width),this.Er.height=Math.round(r.height),this.Gr()}else this.Er.width=t??this.Er.width,this.Er.height=e??this.Er.height}Xr(){const t=this.Er.getContext("webgl2",{alpha:!0,premultipliedAlpha:!1,preserveDrawingBuffer:!0,antialias:!1,depth:!0,stencil:!1,powerPreference:"high-performance"});if(!t)throw new F("`textmode.js` requires WebGL2 support.");return t}gt(){const t=this.Er.getContext("webgl")||this.Er.getContext("webgl2");if(t){const e=t.getExtension("WEBGL_lose_context");e==null||e.loseContext()}this.Or&&this.Er.parentNode&&this.Er.parentNode.removeChild(this.Er)}get canvas(){return this.Er}get targetCanvas(){return this.Dr}get width(){return this.Er.width}get height(){return this.Er.height}}function ht(o){return Y(parseInt(o,16),0,255)}class U{constructor(t,e,r,n){l(this,"Yr");l(this,"Wr");l(this,"r");l(this,"g");l(this,"b");l(this,"a");this.r=Y(t,0,255),this.g=Y(e,0,255),this.b=Y(r,0,255),this.a=Y(n,0,255),this.Yr=[this.r,this.g,this.b,this.a],this.Wr=[this.r/255,this.g/255,this.b/255,this.a/255]}static Kr(t,e,r,n){if(U.Zr(t))return t;if(Array.isArray(t)){if(t.length<3)throw Error("Component tuples must include at least RGB values.");const[h,a,c]=t,u=t.length===4?t[3]:255;return U.qr(h,a,c,u)}if(typeof t=="string"){const h=t.trim();if(h.length===0)throw Error("Color strings cannot be empty.");return U.Vr(h)}if(typeof t=="number")return typeof e=="number"&&typeof r=="number"?U.qr(t,e,r,n??255):U.Jr(t);throw Error("Unsupported color input passed to TextmodeColor.$from.")}static qr(t,e,r,n=255){return new U(t,e,r,n)}static Jr(t,e=255){return new U(t,t,t,e)}static Vr(t){return new U(...function(e){const r=e.replace(/^#|0x/gi,""),n=(h=r).length===3||h.length===4?h.split("").map(a=>a+a).join(""):h;var h;if(n.length!==6&&n.length!==8)throw Error("Invalid hex color: "+e);return[ht(n.slice(0,2)),ht(n.slice(2,4)),ht(n.slice(4,6)),n.length===8?ht(n.slice(6,8)):255]}(t))}get rgb(){return[this.r,this.g,this.b]}get rgba(){return[...this.Yr]}get normalized(){return[...this.Wr]}withAlpha(t){return new U(this.r,this.g,this.b,t)}static Zr(t){return t instanceof U}}const yt=new Map;function Bt(o){yt.set(o.id,o)}function Xt(o){return yt.get(o)}class Zt{constructor(t,e,r,n,h,a,c,u){l(this,"A");l(this,"Z");l(this,"tn");l(this,"sn");l(this,"en");l(this,"N");l(this,"j");l(this,"q",null);l(this,"rr");l(this,"rn","brightness");l(this,"nn",null);l(this,"Rt",0);l(this,"Gt",0);l(this,"Qt",0);l(this,"Et",0);l(this,"hn","sampled");l(this,"an","fixed");l(this,"jt",[1,1,1,1]);l(this,"Xt",[0,0,0,1]);l(this,"cn",[0,0,0,1]);l(this,"ln",[[.1,0,0]]);l(this,"un",null);l(this,"fn",new Set);l(this,"dn",[[0,0,0,0]]);l(this,"vn",0);this.A=t,this.Z=e,this.tn=r,this.rr=n,this.sn=h,this.en=a,this.N=c,this.j=u}conversionMode(t){return this.rn=t,this.nn=null,this.q=null,this}gt(){this.A.deleteTexture(this.tn);for(const t of this.fn)t();this.fn.clear()}pn(t){this.fn.add(t)}invert(t=!0){return this.Rt=t?1:0,this.q=null,this}flipX(t=!0){return this.Gt=t?1:0,this.q=null,this}flipY(t=!0){return this.Qt=t?1:0,this.q=null,this}charRotation(t){return this.Et=Ft(t),this.q=null,this}charColorMode(t){return this.hn=t,this.q=null,this}cellColorMode(t){return this.an=t,this.q=null,this}charColor(t,e,r,n){return this.gn(this.jt,t,e,r,n),this.q=null,this}cellColor(t,e,r,n){return this.gn(this.Xt,t,e,r,n),this.q=null,this}background(t,e,r,n){return this.gn(this.cn,t,e,r,n),this.q=null,this}colorFilter(t){if(!t||t.length===0)return this.vn=0,this.dn=[[0,0,0,0]],this.q=null,this;const e=[];for(const r of t){if(e.length>=64)break;let n=U.Kr(r);e.push(n.normalized)}return this.dn=e,this.vn=e.length,this.q=null,this}characters(t){return this.un=t,this.mn(t),this.q=null,this}_n(t){this.rr=t,this.un&&this.mn(this.un),this.q=null}get texture(){return this.tn}get width(){return this.N}get height(){return this.j}get originalWidth(){return this.sn}get originalHeight(){return this.en}ut(){return this.q||this.ft(),this.q}yn(){}ft(){this.yn();const t=this.An(),e=this.bn(),r=t.createShader(e),n=t.createUniforms(e);this.q=this.Z.materialManager.Ni(r,n)}gn(t,e,r,n,h){const a=U.Kr(e,r,n,h);it(t,a.r,a.g,a.b,a.a)}mn(t){const e=this.rr.Fr(t).filter(r=>Array.isArray(r)).slice(0,255);this.ln=e.length>0?e:this.ln}createBaseConversionUniforms(){const t=this.vn>0;return{u_image:this.wn(),u_invert:!!this.Rt,u_flipX:!!this.Gt,u_flipY:!!this.Qt,u_charRotation:this.Et,u_charColorFixed:this.hn==="fixed",u_charColor:this.jt,u_cellColorFixed:this.an==="fixed",u_cellColor:this.Xt,u_backgroundColor:this.cn,u_charCount:this.ln.length,u_charList:this.ln,u_colorFilterEnabled:t,u_colorFilterSize:t?this.vn:0,u_colorFilterPalette:this.dn}}An(){if(this.nn&&this.nn.id===this.rn)return this.nn;const t=Xt(this.rn);if(!t)throw Error(`[textmode.js] Conversion mode "${this.rn}" is not registered. If this mode is provided by an add-on, make sure its plugin is installed before loading sources.`);return this.nn=t,t}bn(){return{renderer:this.Z,gl:this.A,font:this.rr,source:this,gridWidth:this.N,gridHeight:this.j}}}class V extends Zt{constructor(t,e,r,n,h,a,c,u){const f=Math.min(c/h,u/a);super(t,e,r,n,h,a,Math.max(1,Math.floor(h*f)),Math.max(1,Math.floor(a*f)))}static Cn(t,e,r,n,h){const a=t.context,c=a.createTexture();a.bindTexture(a.TEXTURE_2D,c),a.pixelStorei(a.UNPACK_FLIP_Y_WEBGL,1),tt(a,a.NEAREST,a.NEAREST,a.CLAMP_TO_EDGE,a.CLAMP_TO_EDGE),a.texImage2D(a.TEXTURE_2D,0,a.RGBA,a.RGBA,a.UNSIGNED_BYTE,r),a.bindTexture(a.TEXTURE_2D,null);const u=r.naturalWidth??r.width??r.videoWidth??0,f=r.naturalHeight??r.height??r.videoHeight??0;return new V(a,t,c,e,u,f,n,h)}wn(){return this.tn}}class Ot{constructor(t=60){l(this,"xn");l(this,"Mn",null);l(this,"Fn",0);l(this,"Pn",!0);l(this,"$n",0);l(this,"Tn",0);l(this,"Rn",[]);l(this,"En",10);l(this,"Sn",0);this.xn=1e3/t}kn(t){if(!this.Pn)return;this.Fn=performance.now();const e=r=>{if(!this.Pn)return void(this.Mn=null);const n=r-this.Fn;n>=this.xn&&(t(),this.Fn=r-n%this.xn),this.Pn&&(this.Mn=requestAnimationFrame(e))};this.Mn=requestAnimationFrame(e)}zn(){this.Mn&&(cancelAnimationFrame(this.Mn),this.Mn=null)}Dn(){this.Pn&&(this.Pn=!1,this.zn())}Ln(t){this.Pn||(this.Pn=!0,this.kn(t))}On(t,e){if(t===void 0)return this.$n;this.xn=1e3/t,this.Pn&&e&&(this.zn(),this.kn(e))}In(){const t=performance.now();if(this.Tn>0){const e=t-this.Tn;this.Rn.push(e),this.Rn.length>this.En&&this.Rn.shift();const r=this.Rn.reduce((n,h)=>n+h,0)/this.Rn.length;this.$n=1e3/r}this.Tn=t}get Bn(){return this.Pn}get Hn(){return this.$n}get Gn(){return this.Sn}set Gn(t){this.Sn=t}Qn(){this.Sn++}}class It{constructor(t){l(this,"Er");l(this,"Nn");l(this,"jn",{x:-1,y:-1});l(this,"Xn",{x:-1,y:-1});l(this,"Yn",null);l(this,"Wn",0);l(this,"Kn");l(this,"Zn");l(this,"qn");l(this,"Vn");l(this,"Jn");l(this,"th");l(this,"sh",!1);l(this,"ih");l(this,"eh");l(this,"rh");l(this,"nh");l(this,"hh");this.Er=t}oh(t){const e=performance.now()+Math.max(0,t);e>this.Wn&&(this.Wn=e)}ah(){return performance.now()<this.Wn}uh(t){const e=this.Er.canvas;e.style.cursor=t==null||t===""?"":t}yr(t){this.Nn=t,this.fh()}dh(){if(this.sh)return;const t=this.Er.canvas;this.Kn=e=>{this.ph(e),this.gh(e)},this.Zn=()=>{this.Xn={...this.jn},this.jn.x=-1,this.jn.y=-1,this.Yn=null},this.qn=e=>{this.ph(e),this.mh(e)},this.Vn=e=>{this.ph(e),this._h(e)},this.Jn=e=>{this.ph(e),this.yh(e)},this.th=e=>{this.ph(e),this.Ah(e)},t.addEventListener("mousemove",this.Kn,{passive:!0}),t.addEventListener("mouseleave",this.Zn,{passive:!0}),t.addEventListener("mousedown",this.qn,{passive:!0}),t.addEventListener("mouseup",this.Vn,{passive:!0}),t.addEventListener("click",this.Jn,{passive:!0}),t.addEventListener("wheel",this.th,{passive:!1}),this.sh=!0}bh(){if(!this.sh)return;const t=this.Er.canvas;t.removeEventListener("mousemove",this.Kn),t.removeEventListener("mouseleave",this.Zn),t.removeEventListener("mousedown",this.qn),t.removeEventListener("mouseup",this.Vn),t.removeEventListener("click",this.Jn),t.removeEventListener("wheel",this.th),this.sh=!1}fh(){if(this.sh)try{if(this.Yn){const t=new MouseEvent("mousemove",{clientX:this.Yn.x,clientY:this.Yn.y,bubbles:!1,cancelable:!1});this.ph(t)}else this.jn.x!==-1&&this.jn.y!==-1&&(this.jn.x>=this.Nn.cols||this.jn.y>=this.Nn.rows)&&(this.jn.x=-1,this.jn.y=-1)}catch{this.jn.x=-1,this.jn.y=-1}}wh(t){this.ih=t}Ch(t){this.eh=t}xh(t){this.rh=t}Mh(t){this.nh=t}Fh(t){this.hh=t}Ph(){return{x:this.jn.x,y:this.jn.y}}gh(t){if(this.nh&&!this.ah()){const e={position:{...this.jn},previousPosition:{...this.Xn},originalEvent:t};this.nh(e)}}mh(t){if(this.eh&&!this.ah()){const e={position:{...this.jn},previousPosition:{...this.Xn},button:t.button,originalEvent:t};this.eh(e)}}_h(t){if(this.rh&&!this.ah()){const e={position:{...this.jn},previousPosition:{...this.Xn},button:t.button,originalEvent:t};this.rh(e)}}yh(t){if(this.ih&&!this.ah()){const e={position:{...this.jn},previousPosition:{...this.Xn},button:t.button,originalEvent:t};this.ih(e)}}Ah(t){if(this.hh&&!this.ah()){const e={position:{...this.jn},previousPosition:{...this.Xn},delta:{x:t.deltaX,y:t.deltaY},originalEvent:t};this.hh(e)}}ph(t){const e=this.Er.canvas;this.Xn={...this.jn},this.Yn={x:t.clientX,y:t.clientY};const r=e.getBoundingClientRect(),n=t.clientX-r.left,h=t.clientY-r.top,a=e.width/r.width,c=h*(e.height/r.height),u=n*a-this.Nn.offsetX,f=c-this.Nn.offsetY,d=Math.floor(u/this.Nn.cellWidth),g=Math.floor(f/this.Nn.cellHeight);d>=0&&d<this.Nn.cols&&g>=0&&g<this.Nn.rows?(this.jn.x=d,this.jn.y=g):(this.jn.x=-1,this.jn.y=-1)}}const Be=Object.freeze(Object.defineProperty({__proto__:null,MouseManager:It},Symbol.toStringTag,{value:"Module"}));class Yt{constructor(){l(this,"$h",new Map);l(this,"Th",null);l(this,"Rh",null);l(this,"Eh");l(this,"Sh");l(this,"sh",!1);l(this,"kh");l(this,"zh");l(this,"Dh",{ArrowUp:"UP_ARROW",ArrowDown:"DOWN_ARROW",ArrowLeft:"LEFT_ARROW",ArrowRight:"RIGHT_ARROW",F1:"F1",F2:"F2",F3:"F3",F4:"F4",F5:"F5",F6:"F6",F7:"F7",F8:"F8",F9:"F9",F10:"F10",F11:"F11",F12:"F12",Enter:"ENTER",Return:"RETURN",Tab:"TAB",Escape:"ESCAPE",Backspace:"BACKSPACE",Delete:"DELETE",Insert:"INSERT",Home:"HOME",End:"END",PageUp:"PAGE_UP",PageDown:"PAGE_DOWN",Shift:"SHIFT",Control:"CONTROL",Alt:"ALT",Meta:"META"," ":"SPACE"})}dh(){this.sh||(this.Eh=t=>{this.Lh(t)},this.Sh=t=>{this.Oh(t)},window.addEventListener("keydown",this.Eh,{passive:!1}),window.addEventListener("keyup",this.Sh,{passive:!1}),this.sh=!0)}bh(){this.sh&&(window.removeEventListener("keydown",this.Eh),window.removeEventListener("keyup",this.Sh),this.sh=!1,this.$h.clear(),this.Th=null,this.Rh=null)}Ch(t){this.kh=t}xh(t){this.zh=t}Ih(t){const e=this.Bh(t),r=this.$h.get(t)||this.$h.get(e);return(r==null?void 0:r.isPressed)||!1}Hh(){return this.Th}Gh(){return this.Rh}Qh(){const t=[];for(const[e,r]of this.$h)r.isPressed&&t.push(e);return t}Nh(){return{ctrl:this.Ih("Control"),shift:this.Ih("Shift"),alt:this.Ih("Alt"),meta:this.Ih("Meta")}}jh(){this.$h.clear(),this.Th=null,this.Rh=null}Lh(t){const e=t.key,r=Date.now();this.$h.has(e)||this.$h.set(e,{isPressed:!1,lastPressTime:0,lastReleaseTime:0});const n=this.$h.get(e);if(!n.isPressed&&(n.isPressed=!0,n.lastPressTime=r,this.Th=e,this.kh)){const h={key:e,keyCode:t.keyCode,ctrlKey:t.ctrlKey,shiftKey:t.shiftKey,altKey:t.altKey,metaKey:t.metaKey,isPressed:!0,originalEvent:t};this.kh(h)}}Oh(t){const e=t.key,r=Date.now();this.$h.has(e)||this.$h.set(e,{isPressed:!1,lastPressTime:0,lastReleaseTime:0});const n=this.$h.get(e);if(n.isPressed=!1,n.lastReleaseTime=r,this.Rh=e,this.zh){const h={key:e,keyCode:t.keyCode,ctrlKey:t.ctrlKey,shiftKey:t.shiftKey,altKey:t.altKey,metaKey:t.metaKey,isPressed:!1,originalEvent:t};this.zh(h)}}Bh(t){return this.Dh[t]||t.toLowerCase()}}const Xe=Object.freeze(Object.defineProperty({__proto__:null,KeyboardManager:Yt},Symbol.toStringTag,{value:"Module"}));class zt{constructor(t,e){l(this,"Er");l(this,"Xh");l(this,"Nn");l(this,"Yh",new Map);l(this,"Wh",new Map);l(this,"Kh",new Map);l(this,"Zh",null);l(this,"qh");l(this,"Vh");l(this,"Jh");l(this,"so");l(this,"io");l(this,"eo");l(this,"sh",!1);l(this,"ro");l(this,"no");l(this,"ho");l(this,"oo");l(this,"ao");l(this,"co");l(this,"lo");l(this,"uo");l(this,"fo");l(this,"do");l(this,"vo",320);l(this,"po",350);l(this,"mo",10);l(this,"_o",550);l(this,"yo",14);l(this,"Ao",48);l(this,"bo",650);l(this,"wo",.02);l(this,"Co",2);l(this,"xo",600);l(this,"Mo",0);l(this,"Fo",null);this.Er=t,this.Xh=e;const r=this.Er.canvas;this.qh=r.style.touchAction,this.Vh=r.style.userSelect,r.style.touchAction||(r.style.touchAction="none"),r.style.userSelect||(r.style.userSelect="none")}yr(t){this.Nn=t,this.fh()}dh(){if(this.sh)return;const t=this.Er.canvas;this.Jh=e=>{this.Po(e)},this.so=e=>{this.$o(e)},this.io=e=>{this.To(e)},this.eo=e=>{this.Ro(e)},t.addEventListener("touchstart",this.Jh,{passive:!1}),t.addEventListener("touchmove",this.so,{passive:!1}),t.addEventListener("touchend",this.io,{passive:!1}),t.addEventListener("touchcancel",this.eo,{passive:!1}),this.sh=!0}bh(){if(!this.sh)return;const t=this.Er.canvas;t.removeEventListener("touchstart",this.Jh),t.removeEventListener("touchmove",this.so),t.removeEventListener("touchend",this.io),t.removeEventListener("touchcancel",this.eo),this.sh=!1,this.Zh=null,this.Yh.clear(),this.Wh.clear(),this.Kh.forEach(e=>{e.longPressTimer!==null&&window.clearTimeout(e.longPressTimer)}),this.Kh.clear(),this.Fo=null,this.Mo=0,t.style.touchAction=this.qh,t.style.userSelect=this.Vh}fh(){if(!this.Nn||this.Yh.size===0)return;const t=new Map;for(const e of this.Yh.values()){const r=this.Eo(e.clientX,e.clientY,e.id,e);t.set(e.id,r)}this.Yh=t}So(){return Array.from(this.Yh.values()).map(t=>({...t}))}ko(t){this.ro=t}Mh(t){this.no=t}zo(t){this.ho=t}Do(t){this.oo=t}Lo(t){this.ao=t}Oo(t){this.co=t}Io(t){this.lo=t}Bo(t){this.uo=t}Ho(t){this.fo=t}Go(t){this.do=t}Po(t){var n;if(!this.Nn)return;t.preventDefault(),(n=this.Xh)==null||n.oh(this.xo);const e=performance.now(),r=this.Qo(t.changedTouches);for(const h of r){const a=this.Yh.get(h.id);a&&this.Wh.set(h.id,this.No(a)),this.Yh.set(h.id,h);const c={id:h.id,startPosition:h,lastPosition:h,startTime:e,lastTime:e,longPressTimer:null,longPressFired:!1};this.lo&&(c.longPressTimer=window.setTimeout(()=>{const u=this.Yh.get(h.id);u&&(c.longPressFired=!0,this.lo({touch:this.No(u),duration:performance.now()-c.startTime,originalEvent:t}))},this._o)),this.Kh.set(h.id,c),this.ro&&this.ro(this.jo(h,t,void 0,e))}this.Yh.size===2&&this.Xo()}$o(t){var n;if(!this.Nn)return;t.preventDefault(),(n=this.Xh)==null||n.oh(this.xo);const e=performance.now(),r=this.Qo(t.changedTouches);for(const h of r){const a=this.Yh.get(h.id),c=a?this.No(a):void 0;c&&this.Wh.set(h.id,c),this.Yh.set(h.id,h);const u=this.Kh.get(h.id);u&&(u.lastPosition=h,u.lastTime=e,c)&&W(c.clientX,c.clientY,h.clientX,h.clientY)>this.yo&&u.longPressTimer!==null&&(window.clearTimeout(u.longPressTimer),u.longPressTimer=null),this.no&&this.no(this.jo(h,t,c,e))}this.Yh.size===2?this.Yo(t):this.Zh=null}To(t){if(!this.Nn)return;t.preventDefault();const e=performance.now(),r=this.Qo(t.changedTouches);for(const n of r){const h=this.Yh.get(n.id),a=h?this.No(h):void 0,c=this.Kh.get(n.id);c&&c.longPressTimer!==null&&(window.clearTimeout(c.longPressTimer),c.longPressTimer=null),this.ho&&this.ho(this.jo(n,t,a,e)),c&&this.Wo(c,t),this.Kh.delete(n.id),this.Wh.delete(n.id),this.Yh.delete(n.id)}this.Yh.size<2&&(this.Zh=null)}Ro(t){if(!this.Nn)return;t.preventDefault();const e=performance.now(),r=this.Qo(t.changedTouches);for(const n of r){const h=this.Yh.get(n.id),a=h?this.No(h):void 0,c=this.Kh.get(n.id);c&&c.longPressTimer!==null&&(window.clearTimeout(c.longPressTimer),c.longPressTimer=null),this.oo&&this.oo(this.jo(n,t,a,e)),this.Kh.delete(n.id),this.Wh.delete(n.id),this.Yh.delete(n.id)}this.Yh.size<2&&(this.Zh=null)}Qo(t){const e=[];for(let r=0;r<t.length;r+=1){const n=t.item(r);n&&e.push(this.Ko(n))}return e}Ko(t){return this.Eo(t.clientX,t.clientY,t.identifier,{id:t.identifier,x:-1,y:-1,clientX:t.clientX,clientY:t.clientY,pressure:t.force,radiusX:t.radiusX,radiusY:t.radiusY,rotationAngle:t.rotationAngle})}Eo(t,e,r,n){const h=this.Er.canvas,a=h.getBoundingClientRect(),c=t-a.left,u=e-a.top,f=h.width/a.width,d=u*(h.height/a.height),g=c*f-this.Nn.offsetX,v=d-this.Nn.offsetY,m=Math.floor(g/this.Nn.cellWidth),A=Math.floor(v/this.Nn.cellHeight),p=m>=0&&m<this.Nn.cols&&A>=0&&A<this.Nn.rows;return{id:r,x:p?m:-1,y:p?A:-1,clientX:t,clientY:e,pressure:n.pressure,radiusX:n.radiusX,radiusY:n.radiusY,rotationAngle:n.rotationAngle}}jo(t,e,r,n){const h=this.Kh.get(t.id),a=Array.from(this.Wh.values()).map(f=>this.No(f)),c=Array.from(this.Yh.values()).map(f=>this.No(f)),u=this.Qo(e.changedTouches);return{touch:this.No(t),previousTouch:r?this.No(r):void 0,touches:c,previousTouches:a,changedTouches:u,deltaTime:h?n-h.lastTime:0,originalEvent:e}}Xo(){if(this.Yh.size!==2)return void(this.Zh=null);const t=Array.from(this.Yh.values()),[e,r]=t,n=W(e.x,e.y,r.x,r.y),h=Tt(e.clientX,e.clientY,r.clientX,r.clientY);this.Zh={ids:[e.id,r.id],initialDistance:Math.max(n,1e-4),initialAngle:h,lastScale:1,lastRotation:0}}Yo(t){if(this.Zh||this.Xo(),!this.Zh)return;const[e,r]=this.Zh.ids,n=this.Yh.get(e),h=this.Yh.get(r);if(!n||!h)return;const a=W(n.x,n.y,h.x,h.y)/this.Zh.initialDistance,c=a-this.Zh.lastScale;this.fo&&Math.abs(c)>this.wo&&(this.fo({touches:[this.No(n),this.No(h)],scale:a,deltaScale:c,center:this.Zo(n,h),originalEvent:t}),this.Zh.lastScale=a);let u=Tt(n.clientX,n.clientY,h.clientX,h.clientY)-this.Zh.initialAngle;u=(u+180)%360-180;const f=u-this.Zh.lastRotation;this.do&&Math.abs(f)>this.Co&&(this.do({touches:[this.No(n),this.No(h)],rotation:u,deltaRotation:f,center:this.Zo(n,h),originalEvent:t}),this.Zh.lastRotation=u)}Zo(t,e){const r=(t.clientX+e.clientX)/2,n=(t.clientY+e.clientY)/2,h=this.Eo(r,n,-1,{id:-1,x:-1,y:-1,clientX:r,clientY:n});return{x:h.x,y:h.y}}Wo(t,e){const r=performance.now(),n=r-t.startTime,h=W(t.startPosition.clientX,t.startPosition.clientY,t.lastPosition.clientX,t.lastPosition.clientY);if(!t.longPressFired&&n<=this.vo&&h<=this.mo)this.qo(t.lastPosition,r)&&this.co?this.co({touch:this.No(t.lastPosition),taps:2,originalEvent:e}):this.ao&&this.ao({touch:this.No(t.lastPosition),taps:1,originalEvent:e});else if(!t.longPressFired&&n<=this.bo&&h>=this.Ao){const a={x:t.lastPosition.clientX-t.startPosition.clientX,y:t.lastPosition.clientY-t.startPosition.clientY},c=Math.max(Math.hypot(a.x,a.y),1e-4),u={x:a.x/c,y:a.y/c},f={x:a.x/n,y:a.y/n};this.uo&&this.uo({touch:this.No(t.lastPosition),direction:u,distance:c,velocity:f,originalEvent:e})}this.Mo=r,this.Fo=this.No(t.lastPosition)}qo(t,e){return!!this.Fo&&!(e-this.Mo>this.po)&&W(t.clientX,t.clientY,this.Fo.clientX,this.Fo.clientY)<=this.mo}No(t){return{...t}}}const Ze=Object.freeze(Object.defineProperty({__proto__:null,TouchManager:zt},Symbol.toStringTag,{value:"Module"}));class Oe{constructor(t,e){l(this,"A");l(this,"Vo");l(this,"$n",null);l(this,"Jo",0);l(this,"ta",!1);l(this,"sa",[]);l(this,"ia",-1);this.A=t,this.Vo=e}get isPreloaded(){return this.ta}get totalFrames(){return this.Jo}get frameRate(){return this.$n}get textures(){return this.sa}dispose(){this.ea(),this.sa=[],this.$n=null,this.Jo=0,this.ta=!1,this.ia=-1}async preload(t,e){var r;try{if(t<=0)throw Error("Video preload requires a frameRate greater than 0.");const n=this.Vo.duration;if(!isFinite(n)||n<=0)throw Error("Video duration is invalid, cannot preload frames.");const h=Math.max(1,Math.ceil(n*t));return this.ra(t,h),await this.na(t,e)?(this.ha("captureStream",e),"captureStream"):(await this.oa(t,e),this.ha("seeking",e),"seeking")}catch(n){const h=n instanceof Error?n:Error(n+"");throw(r=e==null?void 0:e.onError)==null||r.call(e,h),this.dispose(),h}}ra(t,e){this.ea(),this.$n=t,this.Jo=e,this.sa=[],this.ta=!1,this.ia=-1}ha(t,e){var r;if(this.sa.length===0)throw Error(`Video preload via ${t} completed but produced 0 frames.`);this.Jo=this.sa.length,this.ta=!0,this.ia=-1,this.Vo.pause(),this.Vo.currentTime=0,e!=null&&e.onProgress&&e.onProgress({percent:100,loadedFrames:this.Jo,totalFrames:this.Jo,strategy:t}),(r=e==null?void 0:e.onComplete)==null||r.call(e,{totalFrames:this.Jo,strategy:t})}aa(t){const e=this.A,r=e.createTexture();return e.bindTexture(e.TEXTURE_2D,r),e.pixelStorei(e.UNPACK_FLIP_Y_WEBGL,1),tt(e,e.LINEAR,e.LINEAR,e.CLAMP_TO_EDGE,e.CLAMP_TO_EDGE),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t),e.bindTexture(e.TEXTURE_2D,null),r}ca(t,e){if(!(e!=null&&e.onProgress)||this.Jo===0)return;const r=Math.min(99,Math.floor(this.sa.length/this.Jo*100)),n=10*Math.floor(r/10);n>this.ia&&(this.ia=n,e.onProgress({percent:r,loadedFrames:this.sa.length,totalFrames:this.Jo,strategy:t}))}async na(t,e){const r=globalThis,n=r==null?void 0:r.MediaStreamTrackProcessor,h=this.Vo.captureStream;if(typeof n!="function"||typeof h!="function")return!1;let a,c=null;try{const u=h.call(this.Vo);if(a=u.getVideoTracks()[0],!a)return u.getTracks().forEach(g=>g.stop()),!1;if(c=new n({track:a}).readable.getReader(),this.Vo.currentTime=0,this.Vo.muted=!0,await this.Vo.play().catch(()=>{}),this.Vo.paused)return!1;const f=1e6/t;let d=0;for(;this.sa.length<this.Jo;){const g=await c.read();if(g.done)break;const v=g.value;if(v)try{const m=typeof v.timestamp=="number"?v.timestamp:d;(this.sa.length===0||m>=d)&&(this.sa.push(this.aa(v)),d=m+f,this.ca("captureStream",e))}finally{v.close()}}return c.releaseLock(),a.stop(),c=null,a=void 0,this.Vo.pause(),this.Vo.currentTime=0,this.sa.length!==0}catch{return this.ea(),this.sa=[],this.ia=-1,!1}finally{if(c)try{await c.cancel()}catch{}a&&a.stop(),this.Vo.pause(),this.Vo.currentTime=0}}async oa(t,e){const r=1/t,n=this.Jo,h=this.Vo;h.pause();for(let a=0;a<n;a++){const c=Math.min(h.duration,a*r);await this.la(c),this.sa.push(this.aa(h)),this.ca("seeking",e)}h.currentTime=0}la(t){return new Promise((e,r)=>{const n=this.Vo,h=()=>{n.removeEventListener("seeked",a),n.removeEventListener("error",c)},a=()=>{h(),e()},c=()=>{h(),r(Error("Video seek failed while preloading frames."))};n.addEventListener("seeked",a,{once:!0}),n.addEventListener("error",c,{once:!0});const u=isFinite(n.duration)?n.duration:t,f=Math.min(Math.max(t,0),u);if(Math.abs(n.currentTime-f)<1e-4)return h(),void e();n.currentTime=f})}ea(){for(const t of this.sa)this.A.deleteTexture(t)}}class ot extends Zt{constructor(e,r,n,h,a,c,u,f,d){const g=c/u;let v,m;g>1?(v=f,m=Math.round(f/g)):(m=d,v=Math.round(d*g));super(e,r,n,h,c,u,v,m);l(this,"Vo");l(this,"ua",0);l(this,"fa",null);this.Vo=a}gt(){var e;super.gt(),(e=this.fa)==null||e.dispose(),this.fa=null,this.Vo.pause(),this.Vo.src="",this.Vo.load()}da(){var e;if(!((e=this.fa)!=null&&e.isPreloaded)&&this.Vo.readyState>=this.Vo.HAVE_CURRENT_DATA){const r=this.A;r.bindTexture(r.TEXTURE_2D,this.tn),r.texImage2D(r.TEXTURE_2D,0,r.RGBA,r.RGBA,r.UNSIGNED_BYTE,this.Vo),r.bindTexture(r.TEXTURE_2D,null)}}wn(){var r,n;const e=(r=this.fa)==null?void 0:r.textures;return e&&e.length>0&&((n=this.fa)!=null&&n.isPreloaded)?e[this.ua%e.length]:this.tn}ut(){return this.q=null,super.ut()}yn(){this.da()}frame(e){var n,h;const r=((n=this.fa)==null?void 0:n.totalFrames)??0;return(h=this.fa)!=null&&h.isPreloaded&&e!==void 0&&r>0&&(this.ua=(e%r+r)%r,this.q=null),this}static async Cn(e,r,n,h,a,c){const u=e.context,f=c==null?void 0:c.frameRate;let d;d=document.createElement("video"),d.crossOrigin="anonymous",d.loop=!0,d.muted=!0,d.playsInline=!0,await new Promise((p,y)=>{d.addEventListener("loadedmetadata",()=>p(),{once:!0}),d.addEventListener("error",E=>{var x;const w=E.target;y(Error("Failed to load video: "+(((x=w.error)==null?void 0:x.message)||"Unknown error")))},{once:!0}),d.src=n});const g=u.createTexture();u.bindTexture(u.TEXTURE_2D,g),u.pixelStorei(u.UNPACK_FLIP_Y_WEBGL,1),tt(u,u.LINEAR,u.LINEAR,u.CLAMP_TO_EDGE,u.CLAMP_TO_EDGE),u.texImage2D(u.TEXTURE_2D,0,u.RGBA,u.RGBA,u.UNSIGNED_BYTE,d),u.bindTexture(u.TEXTURE_2D,null);const v=d.videoWidth,m=d.videoHeight,A=new ot(u,e,g,r,d,v,m,h,a);return f&&f>0&&(A.fa=new Oe(u,d),await A.fa.preload(f,c),A.ua=0),A}async play(){await this.Vo.play()}pause(){this.Vo.pause()}stop(){this.Vo.pause(),this.Vo.currentTime=0}speed(e){return this.Vo.playbackRate=e,this}loop(e=!0){return this.Vo.loop=e,this}time(e){return this.Vo.currentTime=e,this}volume(e){return this.Vo.volume=Math.max(0,Math.min(1,e)),this}get texture(){return this.tn}get width(){return this.N}get height(){return this.j}get originalWidth(){return this.sn}get originalHeight(){return this.en}get videoElement(){return this.Vo}get currentTime(){return this.Vo.currentTime}get duration(){return this.Vo.duration}get isPlaying(){return!this.Vo.paused&&!this.Vo.ended}get totalFrames(){var e;return((e=this.fa)==null?void 0:e.totalFrames)??0}}const Ie=o=>class extends o{va(t,e,r,n){if(U.Zr(t))return t;if(typeof t=="number"||typeof t=="string")return this.color(t,e,r,n);throw Error("Unsupported color input passed to color-capable method.")}rotate(t=0,e=0,r=0){this.Z.state.Vt(t),this.Z.state.Jt(e),this.Z.state.ts(r)}rotateX(t){this.Z.state.Vt(t)}rotateY(t){this.Z.state.Jt(t)}rotateZ(t){this.Z.state.ts(t)}translate(t=0,e=0,r=0){this.Z.state.ss(t,e,r)}translateX(t){this.Z.state.ss(t,0,0)}translateY(t){this.Z.state.ss(0,t,0)}translateZ(t){this.Z.state.ss(0,0,t)}push(){this.Z.state.ht()}pop(){this.Z.state.ot()}color(t,e,r,n){return U.Kr(t,e,r,n)}rect(t=1,e=1){this.Z.be(t,e)}point(){this.Z.be(1,1)}line(t,e,r,n){this.Z.we(t,e,r,n)}lineWeight(t){this.Z.state.Zt(t)}background(t,e,r,n=255){const h=this.va(t,e,r,n);this.Z.$e(h.r,h.g,h.b,h.a)}char(t){const e=Array.from(t);if(e.length===0)throw Error("char() requires at least one character.");this.Z.state.hs(this.rr.Mr(e[0]))}charColor(t,e,r,n){const h=this.va(t,e,r,n);this.Z.state.cs(h.r,h.g,h.b,h.a)}cellColor(t,e,r,n){const h=this.va(t,e,r,n);this.Z.state.ls(h.r,h.g,h.b,h.a)}flipX(t){this.Z.state.us(t)}flipY(t){this.Z.state.fs(t)}charRotation(t){this.Z.state.vs(t)}invert(t){this.Z.state.ds(t)}clear(){this.Z.bi(0,0,0,0)}ellipse(t,e){this.Z.Ce(t/2,e/2)}triangle(t,e,r,n,h,a){this.Z.xe(t,e,r,n,h,a)}bezierCurve(t,e,r,n,h,a,c,u){this.Z.Me(t,e,r,n,h,a,c,u)}arc(t,e,r,n){this.Z.Fe(t/2,e/2,r,n)}shader(t){this.Z.ge(t)}setUniform(t,e){this.Z.I(t,e)}setUniforms(t){this.Z.me(t)}async createFilterShader(t){if(typeof t=="string"&&(t.startsWith("./")||t.startsWith("../")||t.endsWith(".frag")||t.endsWith(".glsl"))){const e=await fetch(t);if(!e.ok)throw Error(`Failed to load shader from ${t}: ${e.statusText}`);const r=await e.text();return this.Z._e(r)}return this.Z._e(t)}createFramebuffer(t){return this.Z.Pe(t.width??this.grid.cols,t.height??this.grid.rows,t.attachments??3)}image(t,e,r){this.Z.ye(t,e,r),t instanceof z&&this.Z.ct()}ortho(){this.Z.state.gs(!0)}async loadImage(t){if(typeof t!="string"){const h=V.Cn(this.Z,this.rr,t,this.Nn.cols,this.Nn.rows);return this.pa(h),h}const e=t,r=await new Promise((h,a)=>{const c=new Image;c.crossOrigin="anonymous",c.onload=()=>h(c),c.onerror=u=>a(u),c.src=e}),n=V.Cn(this.Z,this.rr,r,this.Nn.cols,this.Nn.rows);return this.pa(n),n}async loadVideo(t,e){const r=await ot.Cn(this.Z,this.rr,t,this.Nn.cols,this.Nn.rows,e);return this.pa(r),r}},Ye=o=>class extends o{async loadFont(t){return this.rr.Cr(t).then(()=>{const e=this.rr.maxGlyphDimensions;this.Nn.zr(e.width,e.height),this.ga.resize(this.Nn.cols,this.Nn.rows),this.ma.jr(),this.Z.Re(),this.Xh.fh(),this._a.fh();for(const r of this.ya)r._n(this.rr)})}fontSize(t){if(!ut.m(typeof t=="number"&&t>0,"Font size must be a positive number greater than 0.",{method:"fontSize",providedValue:t})||this.rr.fontSize===t)return;this.rr.wr(t);const e=this.rr.maxGlyphDimensions;this.Nn.zr(e.width,e.height),this.ga.resize(this.Nn.cols,this.Nn.rows),this.ma.jr(),this.Z.Re(),this.Xh.fh(),this._a.fh()}},ze=o=>class extends o{get frameCount(){return this.ba.Gn}set frameCount(t){this.ba.Gn=t}frameRate(t){return t===void 0?this.ba.Hn:this.ba.On(t,()=>this.wa())}noLoop(){this.ba.Dn()}loop(){this.ba.Ln(()=>this.wa())}redraw(t=1){if(ut.m(typeof t=="number"&&t>0&&Number.isInteger(t),"Redraw count must be a positive integer.",{method:"redraw",providedValue:t}))for(let e=0;e<t;e++)this.wa()}isLooping(){return this.ba.Bn}},je=o=>class extends o{constructor(...t){super(...t)}mouseClicked(t){this.Xh.wh(t)}mousePressed(t){this.Xh.Ch(t)}mouseReleased(t){this.Xh.xh(t)}mouseMoved(t){this.Xh.Mh(t)}mouseScrolled(t){this.Xh.Fh(t)}get mouse(){return this.Xh.Ph()}cursor(t){this.Xh.uh(t)}},Ge=o=>class extends o{constructor(...t){super(...t)}touchStarted(t){this._a.ko(t)}touchMoved(t){this._a.Mh(t)}touchEnded(t){this._a.zo(t)}touchCancelled(t){this._a.Do(t)}tap(t){this._a.Lo(t)}doubleTap(t){this._a.Oo(t)}longPress(t){this._a.Io(t)}swipe(t){this._a.Bo(t)}pinch(t){this._a.Ho(t)}rotateGesture(t){this._a.Go(t)}get touches(){return this._a.So()}},Ve=o=>class extends o{constructor(...t){super(...t)}keyPressed(t){this.Ca.Ch(t)}keyReleased(t){this.Ca.xh(t)}isKeyPressed(t){return this.Ca.Ih(t)}get lastKeyPressed(){return this.Ca.Hh()}get lastKeyReleased(){return this.Ca.Gh()}get pressedKeys(){return this.Ca.Qh()}get modifierState(){return this.Ca.Nh()}};class ke{constructor(t){l(this,"xa");l(this,"Ma",new Map);l(this,"Fa",[]);l(this,"Pa",new Map);l(this,"$a",new Map);this.xa=t}async Ta(t){for(const e of t){if(this.Ma.has(e.name))return void console.warn(`[textmode.js] Plugin "${e.name}" is already installed.`);const r=this.Ra(e.name);try{await e.install(this.xa,r)}catch(n){throw this.Ea(e.name),n}this.Ma.set(e.name,e),this.Fa.push(e.name)}}async Sa(t){const e=this.Ma.get(t);if(!e)return;const r=this.Ra(t);e.uninstall&&await e.uninstall(this.xa,r),this.Ma.delete(t),this.Fa.splice(this.Fa.indexOf(t),1),this.Ea(t)}ka(){this.za(this.Pa)}Da(){this.za(this.$a)}async La(){const t=[...this.Ma.keys()];for(const e of t)await this.Sa(e)}Ra(t){return{renderer:this.xa.Z,font:this.xa.rr,grid:this.xa.Nn,canvas:this.xa.Er,drawFramebuffer:this.xa.ga,asciiFramebuffer:this.xa.Oa,registerPreDrawHook:e=>this.Ia(this.Pa,t,e),registerPostDrawHook:e=>this.Ia(this.$a,t,e)}}Ia(t,e,r){const n=t.get(e)??new Set;return n.add(r),t.set(e,n),()=>{const h=t.get(e);h&&(h.delete(r),h.size===0&&t.delete(e))}}Ea(t){this.Pa.delete(t),this.$a.delete(t)}za(t){for(const e of this.Fa){const r=t.get(e);r&&r.forEach(n=>n())}}}const $=`#version 300 es
|
|
11
|
-
in vec2 A0;in vec2 A1;out vec2 v_uv;void main(){v_uv=A1;gl_Position=vec4(A0,0.,1.);}`,
|
|
12
|
-
precision highp float;uniform sampler2D u_texture;in vec2 v_uv;out vec4 fragColor;void main(){fragColor=texture(u_texture,v_uv);}`;class Gt{constructor(){l(this,"Ba",new Map);l(this,"Ha",[]);l(this,"Ga",0);l(this,"Qa",0);l(this,"Na")}get ja(){return this.Ga}get Xa(){if(this.Ga===0)return 0;let t=0;for(const e of this.Ha){const r=this.Ba.get(e);r&&(t+=Math.min(1,Math.max(0,r.progress))*r.weight)}return Math.min(1,t/this.Ga)}Ya(t){this.Na=t}Wa(t,e=1){const r=`phase-${this.Ha.length+1}-${Date.now()}`,n={id:r,label:t,weight:Math.max(.001,e),progress:0,status:"running"};return this.Ba.set(r,n),this.Ha.push(r),this.Ga+=n.weight,r}Ka(t,e){const r=this.Ba.get(t);if(!r)return;r.progress=Math.max(0,Math.min(1,e)),r.status=r.progress>=1?"complete":"running";const n=this.Xa;Math.abs(n-this.Qa)>.001&&(this.Qa=n,this.Na&&this.Na(n))}Za(t){const e=this.Ba.get(t);e&&(e.progress=1,e.status="complete",this.Ka(t,1))}qa(t){const e=this.Ba.get(t);e&&(e.status="failed")}Va(){return this.Ha.map(t=>{const e=this.Ba.get(t);return e?{id:e.id,label:e.label,weight:e.weight,progress:e.progress,status:e.status}:{id:t,label:t,weight:1,progress:0,status:"pending"}})}}class Vt{constructor(t="active"){l(this,"Ja");l(this,"tc","");l(this,"sc","");this.Ja=t}get ec(){return this.Ja}get rc(){return this.Ja!=="disabled"}get nc(){return this.Ja==="active"||this.Ja==="transitioning"||this.Ja==="error"}get hc(){return this.tc}get oc(){return this.sc}ac(){this.Ja!=="done"&&this.Ja!=="transitioning"||(this.Ja="active")}cc(){this.Ja!=="disabled"&&(this.Ja="done")}lc(){this.Ja!=="disabled"&&(this.Ja="transitioning")}uc(){this.Ja==="transitioning"&&(this.Ja="done")}fc(t){this.Ja!=="disabled"&&(this.Ja="error",t instanceof Error?(this.tc=t.message,this.sc=t.stack||""):(this.tc=t,this.sc=""))}dc(){this.Ja="disabled"}}class kt{constructor(t,e){l(this,"vc",0);l(this,"gc",1);l(this,"mc");l(this,"_c");this.mc=t,this._c=e}get yc(){return this.gc}get bc(){return this.gc<1}kn(){this.mc!=="none"&&this._c>0&&(this.vc=performance.now())}et(){if(this.mc==="none"||this._c===0)return this.gc=1,!1;const t=performance.now()-this.vc,e=Math.min(1,t/this._c);return e>=1?(this.gc=0,!0):(this.gc=1-e,!1)}ti(){this.gc=1,this.vc=0}}function xt(o,t){const e=o.tone??"auto";let r="dark";return e==="light"||e==="dark"?r=e:t&&(r=function(n){if(!n)return 0;const[h,a,c]=n.map(f=>f/255),u=f=>f<=.04045?f/12.92:Math.pow((f+.055)/1.055,2.4);return .2126*u(h)+.7152*u(a)+.0722*u(c)}(t)>.5?"light":"dark"),{mode:r,background:t,textColor:r==="light"?"#1A1A1A":"#F8F8F8",subtleColor:r==="light"?"#4A4A4A":"#C0C0C0"}}function Ht(o){return o.mode==="light"?["#E91E63","#9C27B0","#FF6F00"]:["#8EF9F3","#F15BB5","#FF9B71"]}function Wt(o,t){return o.length?o.map(e=>t.color(e)):[t.color("#FFFFFF")]}const He=({textmodifier:o,grid:t,progress:e,frameCount:r,message:n,palette:h,theme:a,phases:c,transitionOpacity:u,isError:f,errorMessage:d})=>{const g="|/-\\",v=Math.floor(r/6)%4,m=o.color(a.textColor),A=Math.floor(255*u),p=o.color(m.r,m.g,m.b,A);if(o.charColor(p),o.cellColor(0,0,0,0),f){const y=o.color(a.mode==="light"?"#D32F2F":"#FF6B6B",A);o.charColor(y),o.push(),o.translate(0,-2,0),o.char("X"),o.rect(1,1),o.pop();const E="SETUP ERROR",w=-Math.floor(E.length/2);o.push(),o.translate(w,0,0);for(const x of E)o.char(x),o.rect(1,1),o.translateX(1);if(o.pop(),d){const x=o.color(a.subtleColor),P=o.color(x.r,x.g,x.b,A);o.charColor(P);const b=Math.floor(.8*t.cols),N=d.split(" "),L=[];let M="";for(const D of N)(M+" "+D).length<=b?M=M?M+" "+D:D:(M&&L.push(M),M=D);M&&L.push(M);const B=L.slice(0,3);L.length>3&&(B[2]=B[2].substring(0,b-3)+"..."),B.forEach((D,ct)=>{const ni=-Math.floor(D.length/2);o.push(),o.translate(ni,3+ct,0);for(const hi of D)o.char(hi),o.rect(1,1),o.translateX(1);o.pop()})}return}if(o.push(),o.translate(0,0,0),o.char(g[v]),o.rect(1,1),o.pop(),e>0||c.some(y=>y.status!=="pending")){const y=Math.max(6,Math.floor(.6*t.cols)),E=-Math.floor(y/2),w=Math.floor(y*e),x=h.length?h:[o.color("#FFFFFF")];o.push(),o.translate(E,3,0);for(let P=0;P<y;P++){const b=P<w?"*":".",N=x[P%x.length],L=o.color(N.r,N.g,N.b,A);o.charColor(L),o.char(b),o.rect(1,1),o.translateX(1)}o.pop()}if(n){const y=o.color(a.subtleColor),E=o.color(y.r,y.g,y.b,A);o.charColor(E);const w=-Math.floor(n.length/2);o.push(),o.translate(w,5,0);for(const x of n)o.char(x),o.rect(1,1),o.translateX(1);o.pop()}},We={message:"LOADING...",tone:"auto",transition:"fade",transitionDuration:500};class Ke{constructor(t,e,r){this.wc=t,this.id=e,this.label=r}report(t){this.wc.Ka(this.id,t)}complete(){this.wc.Za(this.id)}fail(t){this.wc.qa(this.id)}async track(t){try{const e=typeof t=="function"?await t():await t;return this.complete(),e}catch(e){throw this.fail(),e}}}class Kt{constructor(t,e,r){l(this,"xa");l(this,"l");l(this,"Cc");l(this,"wc");l(this,"xc");l(this,"Mc");l(this,"Fc");l(this,"Pc");l(this,"$c");l(this,"Tc");l(this,"Z");l(this,"Rc",[]);l(this,"Ec");l(this,"Sc",performance.now());l(this,"kc",0);l(this,"zc",!1);l(this,"Dc",!1);l(this,"Bc");this.xa=t,this.l={...We,...e??{}},this.Cc=new Vt("active"),this.wc=new Gt,this.xc=new kt(this.l.transition,this.l.transitionDuration),this.Mc=new Ot(60),this.Ec=xt(this.l,r);const n=Ht(this.Ec);this.Rc=Wt(n,this.xa),this.Z=this.Lc(),this.wc.Ya(h=>{h>=.999&&this.cc()})}async yr(t){if(this.Dc)return;const e=this.xa.Z,r=this.xa.Er;this.Fc=new pt(e,16),await this.Fc.yr(t);const n=this.Fc.maxGlyphDimensions;this.Pc=new At(r.canvas,n.width,n.height),this.$c=e.Pe(this.Pc.cols,this.Pc.rows,3),this.Tc=e.Pe(this.Pc.width,this.Pc.height,1),this.Dc=!0}get nc(){return this.Cc.nc&&this.zc}kn(){this.zc||(this.zc=!0,this.Sc=performance.now(),this.kc=0,this.Mc.kn(()=>this.Oc()))}zn(){this.zc&&(this.zc=!1,this.Mc.zn())}jr(){this.Dc&&(this.Pc.ti(),this.$c.resize(this.Pc.cols,this.Pc.rows),this.Tc.resize(this.Pc.width,this.Pc.height))}gt(){this.zn(),this.Dc&&(this.Fc.gt(),this.$c.gt(),this.Tc.gt(),this.Dc=!1)}get progress(){return this.wc.Xa}message(t){return typeof t=="string"&&(this.l.message=t),this.l.message}addPhase(t,e=1){this.Cc.ac();const r=this.wc.Wa(t,e);return new Ke(this.wc,r,t)}cc(){this.l.transition!=="none"&&this.l.transitionDuration>0?(this.Cc.lc(),this.xc.kn()):(this.Cc.cc(),this.zn(),this.Ic())}Ic(){this.Bc&&this.Bc()}Hc(t){this.Bc=t}error(t){this.Cc.fc(t)}Oc(){if(this.Cc.nc){if(this.kc++,this.Cc.ec==="transitioning"&&this.xc.et())return this.Cc.uc(),this.Ic(),void this.zn();this.Gc()}}Gc(){if(!this.Dc)return;const t=this.$c,e=this.Fc,r=this.Pc,n=this.Tc,h=this.xa.Z,a=this.xa.Er,c=this.xa.Qc,u=this.xa.Nc;h.state.qt(),t.begin(),this.xa.clear(),this.xa.push();try{const f={textmodifier:this.xa,grid:r,progress:this.progress,elapsedMs:performance.now()-this.Sc,frameCount:this.kc,message:this.l.message,palette:this.Rc,theme:this.Ec,phases:this.wc.Va(),transitionOpacity:this.xc.yc,isError:this.Cc.ec==="error",errorMessage:this.Cc.hc||void 0,errorDetails:this.Cc.oc||void 0};this.Z(f)}finally{this.xa.pop()}t.end(),n.begin(),h.ve(c),c.O({u_characterTexture:e.fontFramebuffer,u_charsetDimensions:[e.textureColumns,e.textureRows],Ug:t.textures[0],Uh:t.textures[1],Ui:t.textures[2],Uj:[r.cols,r.rows],Uk:[n.width,n.height],Ul:h.state.canvasBackgroundColor}),h.Ae(0,0,a.width,a.height),n.end(),h.bi(...h.state.canvasBackgroundColor),h.ve(u),u.O({u_texture:n.textures[0]}),h.Ae(r.offsetX,r.offsetY,r.width,r.height)}jc(t){this.Ec=xt(this.l,t)}Lc(){const t=this.l.renderer||He;return e=>{t(e),this.Xc(e)}}Xc(t){const{textmodifier:e,grid:r,frameCount:n,theme:h,transitionOpacity:a}=t,c=[116,101,120,116,109,111,100,101,46,106,115].map(g=>String.fromCharCode(g)).join(""),u=(r.rows+1>>1)-2,f=2-(r.cols+1>>1),d=h.mode==="light"?[[233,30,99],[156,39,176],[255,111,0]]:[[142,249,243],[241,91,181],[255,155,113]];e.push(),e.translate(f,u,0);for(let g=0;g<c.length;g++){const v=c[g],m=Math.floor(.1*n+.5*g)%d.length,[A,p,y]=d[m],E=Math.floor(255*a),w=e.color(A,p,y,E);e.charColor(w),e.char(v),e.point(),e.translateX(1)}e.pop()}}class wt{constructor(t={}){l(this,"Yc");l(this,"yc");l(this,"Wc");l(this,"Kc");l(this,"Zc");l(this,"qc");l(this,"Vc");l(this,"Jc");l(this,"tl");l(this,"sl");l(this,"il",null);l(this,"el",!1);l(this,"rl",!0);l(this,"nl",[]);this.Yc=t.visible??!0,this.yc=Math.min(1,Math.max(0,t.opacity??1)),this.Wc=t.blendMode??"normal",this.Kc=Math.round(t.offsetX??0),this.Zc=Math.round(t.offsetY??0),this.qc=t.rotation??0}hl(){return this.il!==null}ol(){const t=this.nl;return this.nl=[],t}al(t){this.il&&this.il.call(t)}draw(t){this.il=t}show(){this.Yc=!0}hide(){this.Yc=!1}opacity(t){if(t===void 0)return this.yc;this.yc=Math.min(1,Math.max(0,t))}blendMode(t){if(t===void 0)return this.Wc;this.Wc=t}offset(t,e=0){if(t===void 0)return{x:this.Kc,y:this.Zc};this.Kc=Math.round(t),this.Zc=Math.round(e)}rotateZ(t){if(t===void 0)return this.qc;this.qc=t}filter(t,e){this.nl.push({name:t,params:e})}cl(t){this.Vc=t,this.ll(t.grid)}wa(t,e){if(!this.Yc||!this.il)return void(this.el=!1);const r=this.Vc.renderer;this.nl=[],this.Jc.begin(),r.state.qt(),this.il.call(t),this.Jc.end();const n=this.nl.length>0,h=n?this.sl:this.tl;h.begin(),r.ve(e),e.O({u_characterTexture:this.Vc.font.fontFramebuffer,u_charsetDimensions:[this.Vc.font.textureColumns,this.Vc.font.textureRows],Ug:this.Jc.textures[0],Uh:this.Jc.textures[1],Ui:this.Jc.textures[2],Uj:[this.Vc.grid.cols,this.Vc.grid.rows],Uk:[h.width,h.height],Ul:[0,0,0,0]}),r.Ae(0,0,this.Vc.grid.width,this.Vc.grid.height),h.end(),n&&this.Vc.filterManager.ul(this.sl.textures[0],this.tl,this.nl,this.tl.width,this.tl.height,this.Vc.layerPingPongBuffers),this.el=!0}jr(t){var e;this.Vc&&(this.Vc={...this.Vc,grid:t}),this.Jc&&this.tl&&(this.Jc.resize(t.cols,t.rows),this.tl.resize(t.width,t.height),(e=this.sl)==null||e.resize(t.width,t.height))}gt(){var t,e,r;this.rl&&((t=this.Jc)==null||t.gt(),(e=this.tl)==null||e.gt(),(r=this.sl)==null||r.gt())}get texture(){var t;return(t=this.tl)==null?void 0:t.textures[0]}get width(){return this.tl?this.tl.width:0}get height(){return this.tl?this.tl.height:0}get fl(){return this.el}get drawFramebuffer(){return this.Jc}ll(t){this.Vc&&(this.Jc=this.Vc.externalDrawFramebuffer??this.Vc.createFramebuffer(t.cols,t.rows,4),this.tl=this.Vc.externalAsciiFramebuffer??this.Vc.createFramebuffer(t.width,t.height,1),this.Vc.externalAsciiFramebuffer||(this.sl=this.Vc.createFramebuffer(t.width,t.height,1)),this.rl=!this.Vc.externalDrawFramebuffer&&!this.Vc.externalAsciiFramebuffer,this.el=!1)}}const Qt={normal:0,additive:1,multiply:2,screen:3,subtract:4,darken:5,lighten:6,overlay:7,softLight:8,hardLight:9,colorDodge:10,colorBurn:11,difference:12,exclusion:13};class qt{constructor(t){l(this,"Z");l(this,"dl");l(this,"vl",null);l(this,"pl",0);this.Z=t,this.dl=t.pe($,`#version 300 es
|
|
13
|
-
precision highp float;uniform sampler2D
|
|
14
|
-
precision highp float;uniform sampler2D u_texture;in vec2 v_uv;out vec4 fragColor;void main(){vec4 A=texture(u_texture,v_uv);fragColor=vec4(1.-A.rgb,A.a);}`,{}),this.
|
|
15
|
-
precision highp float;uniform sampler2D u_texture;uniform float
|
|
16
|
-
precision highp float;uniform sampler2D u_texture;uniform float
|
|
17
|
-
precision highp float;uniform sampler2D u_texture;uniform float
|
|
18
|
-
precision highp float;uniform sampler2D
|
|
19
|
-
precision highp float;
|
|
7
|
+
`}static o(t){if(t===null)return"null";if(t===void 0)return"undefined";if(typeof t=="string")return`"${t}"`;if(typeof t=="number"||typeof t=="boolean")return t+"";if(Array.isArray(t))return t.length===0?"[]":t.length<=5?`[${t.map(i=>R.o(i)).join(", ")}]`:`[${t.slice(0,3).map(i=>R.o(i)).join(", ")}, ... +${t.length-3} more]`;if(typeof t=="object"){const i=Object.keys(t);return i.length===0?"{}":i.length<=3?`{ ${i.map(r=>`${r}: ${R.o(t[r])}`).join(", ")} }`:`{ ${i.slice(0,2).map(r=>`${r}: ${R.o(t[r])}`).join(", ")}, ... +${i.length-2} more }`}return t+""}}var X=(a=>(a[a.SILENT=0]="SILENT",a[a.WARNING=1]="WARNING",a[a.ERROR=2]="ERROR",a[a.THROW=3]="THROW",a))(X||{});const k=class k{constructor(){l(this,"l",{globalLevel:3})}static u(){return k.h||(k.h=new k),k.h}v(t,i){const r="%c[textmode.js] Oops! (╯°□°)╯︵ Something went wrong in your code.",n="color: #f44336; font-weight: bold; background: #ffebee; padding: 2px 6px; border-radius: 3px;";switch(this.l.globalLevel){case 0:return!1;case 1:return console.group(r,n),console.warn(R.i(t,i)),console.groupEnd(),!1;case 2:return console.group(r,n),console.error(R.i(t,i)),console.groupEnd(),!1;default:throw new R(t,i)}}m(t,i,r){return!!t||(this.v(i,r),!1)}_(t){this.l.globalLevel=t}};l(k,"h",null);let ut=k;const ft=ut.u();class W{constructor(t,i,r){l(this,"A");l(this,"C");l(this,"M",new Map);l(this,"F",new Map);l(this,"$",0);l(this,"P",new Map);l(this,"U");this.A=t,this.U=t.getParameter(t.MAX_TEXTURE_IMAGE_UNITS)??16,this.C=this.R(i,r),this.S()}S(){const t=this.A.getProgramParameter(this.C,this.A.ACTIVE_UNIFORMS);for(let i=0;i<t;i++){const r=this.A.getActiveUniform(this.C,i);if(r){const n=r.name.replace(/\[0\]$/,""),h=this.A.getUniformLocation(this.C,n);h&&(this.M.set(n,h),this.F.set(n,{type:r.type,size:r.size}))}}}R(t,i){const r=this.k(this.A.VERTEX_SHADER,t),n=this.k(this.A.FRAGMENT_SHADER,i),h=this.A.createProgram();if(this.A.attachShader(h,r),this.A.attachShader(h,n),this.A.linkProgram(h),!this.A.getProgramParameter(h,this.A.LINK_STATUS)){const o=this.A.getProgramInfoLog(h);throw Error("Shader program link error: "+o)}return this.A.deleteShader(r),this.A.deleteShader(n),h}k(t,i){const r=this.A.createShader(t);if(this.A.shaderSource(r,i),this.A.compileShader(r),!this.A.getShaderParameter(r,this.A.COMPILE_STATUS)){const n=this.A.getShaderInfoLog(r);throw this.A.deleteShader(r),Error("Shader compilation error: "+n)}return r}D(){this.A.useProgram(this.C),this.L()}L(){this.$=0,this.P.clear()}O(t){for(const i in t)this.I(i,t[i])}I(t,i){var u,f;const r=this.M.get(t);if(!r)return;const n=this.F.get(t);if(!n)return;const{type:h,size:o}=n,c=this.A;if(i instanceof WebGLTexture){const d=this.H(t);return c.uniform1i(r,d),c.activeTexture(c.TEXTURE0+d),void c.bindTexture(c.TEXTURE_2D,i)}if(i instanceof Z){const d=this.H(t);return c.uniform1i(r,d),c.activeTexture(c.TEXTURE0+d),void c.bindTexture(c.TEXTURE_2D,i.textures[0])}if(typeof i!="number")if(typeof i!="boolean")if(Array.isArray(i[0])){const d=i.flat(),g={[c.FLOAT_VEC2]:()=>c.uniform2fv(r,d),[c.FLOAT_VEC3]:()=>c.uniform3fv(r,d),[c.FLOAT_VEC4]:()=>c.uniform4fv(r,d)};(u=g[h])==null||u.call(g)}else{const d=i,g={[c.FLOAT]:()=>o>1?c.uniform1fv(r,d):c.uniform1f(r,d[0]),[c.FLOAT_VEC2]:()=>c.uniform2fv(r,d),[c.FLOAT_VEC3]:()=>c.uniform3fv(r,d),[c.FLOAT_VEC4]:()=>c.uniform4fv(r,d),[c.INT]:()=>o>1?c.uniform1iv(r,d):c.uniform1i(r,d[0]),[c.INT_VEC2]:()=>c.uniform2iv(r,d),[c.INT_VEC3]:()=>c.uniform3iv(r,d),[c.INT_VEC4]:()=>c.uniform4iv(r,d),[c.BOOL]:()=>c.uniform1iv(r,d),[c.FLOAT_MAT2]:()=>c.uniformMatrix2fv(r,!1,d),[c.FLOAT_MAT3]:()=>c.uniformMatrix3fv(r,!1,d),[c.FLOAT_MAT4]:()=>c.uniformMatrix4fv(r,!1,d)};(f=g[h])==null||f.call(g)}else c.uniform1i(r,i?1:0);else h===c.INT||h===c.BOOL?c.uniform1i(r,i):c.uniform1f(r,i)}H(t){const i=this.P.get(t);if(i!==void 0)return i;if(this.$>=this.U)throw Error(`[textmode.js] Shader attempted to bind more than ${this.U} texture samplers. Uniform "${t}" cannot be assigned.`);const r=this.$++;return this.P.set(t,r),r}get G(){return this.C}dispose(){this.A.deleteProgram(this.C)}}function wt(a,t,i,r){return 180*Math.atan2(r-t,i-a)/Math.PI}function q(a,t,i,r){return Math.hypot(i-a,r-t)}function z(a,t,i){return Math.min(Math.max(a,t),i)}function xt(a){return(a%360+360)%360/360}function Tt(a,t,i){a.bindTexture(a.TEXTURE_2D,t),a.pixelStorei(a.UNPACK_FLIP_Y_WEBGL,1),a.texImage2D(a.TEXTURE_2D,0,a.RGBA,a.RGBA,a.UNSIGNED_BYTE,i),a.bindTexture(a.TEXTURE_2D,null)}function dt(a,t,i,r,n){a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MIN_FILTER,t),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MAG_FILTER,i),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_WRAP_S,r),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_WRAP_T,n)}function gt(a,t,i,r,n,h=0,o=WebGL2RenderingContext.FLOAT,c=!1){a.enableVertexAttribArray(t),a.vertexAttribPointer(t,i,o,c,r,n),a.vertexAttribDivisor(t,h)}function Rt(a,t,i,r,n){a.bindBuffer(t,i),a.bufferData(t,r,n),a.bindBuffer(t,null)}const tt=`#version 300 es
|
|
8
|
+
in vec2 A0;in vec2 A1;in vec2 A2;in vec2 A3;in vec3 A4;in vec4 A5;in vec4 A6;in vec4 A7;in vec3 A8;in vec3 A9;in vec4 Aa;in vec4 Ab;in vec3 Ac;uniform vec2 Ur;uniform float Us;uniform float Ut;out vec2 v_uv;out vec3 v_glyphIndex;out vec4 v_glyphColor;out vec4 v_cellColor;out vec4 v_glyphFlags;out vec3 v_worldPosition;out vec3 v_normal;out float v_geometryType;const float A=6.28318530718f;const int B=2;const int C=3;const int D=4;vec2 E(float F,vec2 G,vec2 H,vec2 I,vec2 J){float K=1.0f-F;float L=K*K;float M=L*K;float N=F*F;float O=N*F;return M*G+3.0f*L*F*H+3.0f*K*N*I+O*J;}vec2 P(float F,vec2 G,vec2 H,vec2 I,vec2 J){float K=1.0f-F;float L=K*K;float N=F*F;return-3.0f*L*G+3.0f*(L-2.0f*K*F)*H+3.0f*(2.0f*K*F-N)*I+3.0f*N*J;}vec3 Q(vec3 R,float S){float T=cos(S);float U=sin(S);return vec3(R.x,R.y*T-R.z*U,R.y*U+R.z*T);}vec3 V(vec3 R,float S){float T=cos(S);float U=sin(S);return vec3(R.x*T+R.z*U,R.y,-R.x*U+R.z*T);}vec3 W(vec3 R,float S){float T=cos(S);float U=sin(S);return vec3(R.x*T-R.y*U,R.x*U+R.y*T,R.z);}vec3 X(vec3 R,vec3 Y){vec3 Z=R;if(Y.z!=0.0f){Z=W(Z,Y.z);}if(Y.y!=0.0f){Z=V(Z,Y.y);}if(Y.x!=0.0f){Z=Q(Z,Y.x);}return Z;}void main(){v_uv=A1;v_glyphIndex=A4;v_glyphColor=A5;v_cellColor=A6;v_glyphFlags=A7;vec4 a=Aa;vec4 b=Ab;vec2 c=A3;vec2 d=A2;float e=Ac.x;float f=Ac.y;int g=int(Ac.z);vec2 h=d;vec2 i=h+c*0.5f;float j=f+e*0.5f;vec3 k=vec3(i,j);vec3 l;if(g==D){float F=clamp(A0.x,0.0f,1.0f);vec2 G=b.xy;vec2 H=a.xy;vec2 I=a.zw;vec2 J=b.zw;vec2 m=E(F,G,H,I,J);vec2 n=P(F,G,H,I,J);float o=length(n);vec2 p=o>0.0f?n/o:vec2(1.0f,0.0f);vec2 q=vec2(-p.y,p.x);vec2 r=m;vec2 s=r+q*A0.y*c.y;l=vec3(s,f);}else if(g==C){float t=mod(a.x,A);if(t<0.0f){t+=A;}float u=mod(a.y,A);if(u<0.0f){u+=A;}float v=t-u;if(v<=0.0f){v+=A;}float S=t-A0.x*v;vec2 w=vec2(cos(S),sin(S))*A0.y;vec2 s=w*c+h;l=vec3(s,f);}else if(g==B){vec2 s=A0.xy*c+h;l=vec3(s,f);}vec3 x=X(l,A9);vec3 y=x+A8;vec3 z=vec3(0.0f,0.0f,1.0f);v_worldPosition=y;v_normal=z;v_geometryType=float(g);vec2 AA=(y.xy/Ur)*2.0f;AA.y=-AA.y;float AB=y.z/Ur.y;float AC=clamp(-AB*Us,-0.99f,0.99f);if(Ut>0.5f){gl_Position=vec4(AA,AC,1.0f);}else{float AD=0.5f;float AE=1.0f/(1.0f-AB*AD);AA*=AE;gl_Position=vec4(AA,AC,1.0f);}}`,j=class j{constructor(t,i,r=i,n=1,h={},o){l(this,"j");l(this,"N");l(this,"l");l(this,"A");l(this,"X");l(this,"Y",[]);l(this,"K",null);l(this,"W");l(this,"Z");l(this,"q",null);l(this,"V",new Map);this.j=i,this.N=r,this.A=t,this.W=z(n,1,8),this.Z=o,this.l={filter:"nearest",wrap:"clamp",format:"rgba",type:"unsigned_byte",depth:!0,...h},j.J||(j.J=new W(t,tt,`#version 300 es
|
|
9
|
+
precision highp float;in vec2 v_uv;uniform sampler2D U0;uniform sampler2D U1;uniform sampler2D U2;uniform sampler2D U3;uniform vec2 U4;uniform bool U5;uniform bool U6;uniform bool U7;layout(location=0)out vec4 o_character;layout(location=1)out vec4 o_primaryColor;layout(location=2)out vec4 o_secondaryColor;layout(location=3)out vec4 A;void main(){vec2 B=vec2(v_uv.x,1.-v_uv.y);vec2 C=B*U4;vec2 D=(floor(C)+0.5f)/U4;vec4 E=texture(U0,D);vec4 F=U5?texture(U1,D):vec4(0.);if(U5&&F.a==0.){discard;}vec4 G=U6?texture(U2,D):vec4(0.);vec4 H=U7?texture(U3,D):vec4(0.);o_character=E;o_primaryColor=F;o_secondaryColor=G;A=H;}`));const c=t.getParameter(t.MAX_DRAW_BUFFERS),u=t.getParameter(t.MAX_COLOR_ATTACHMENTS);this.W=Math.min(this.W,c,u),this.X=t.createFramebuffer(),this.tt(),this.st(),this.l.depth&&this.et()}tt(){const t=this.A,i=this.l.filter==="linear"?t.LINEAR:t.NEAREST,r=this.l.wrap==="repeat"?t.REPEAT:t.CLAMP_TO_EDGE,n=this.l.type==="float"?t.FLOAT:t.UNSIGNED_BYTE,h=n===t.FLOAT?t.RGBA32F:t.RGBA8,o=t.RGBA;for(let c=0;c<this.W;c++){const u=t.createTexture();t.bindTexture(t.TEXTURE_2D,u),dt(t,i,i,r,r),t.texImage2D(t.TEXTURE_2D,0,h,this.j,this.N,0,o,n,null),this.Y.push(u)}t.bindTexture(t.TEXTURE_2D,null)}st(){const t=this.A;if(t.bindFramebuffer(t.FRAMEBUFFER,this.X),this.W===1)t.framebufferTexture2D(t.FRAMEBUFFER,t.COLOR_ATTACHMENT0,t.TEXTURE_2D,this.Y[0],0);else{const i=[];for(let r=0;r<this.W;r++){const n=t.COLOR_ATTACHMENT0+r;t.framebufferTexture2D(t.FRAMEBUFFER,n,t.TEXTURE_2D,this.Y[r],0),i.push(n)}t.drawBuffers(i)}t.bindFramebuffer(t.FRAMEBUFFER,null)}et(){const t=this.A;this.K=t.createRenderbuffer(),t.bindRenderbuffer(t.RENDERBUFFER,this.K),t.renderbufferStorage(t.RENDERBUFFER,t.DEPTH_COMPONENT24,this.j,this.N),t.bindFramebuffer(t.FRAMEBUFFER,this.X),t.framebufferRenderbuffer(t.FRAMEBUFFER,t.DEPTH_ATTACHMENT,t.RENDERBUFFER,this.K),t.bindFramebuffer(t.FRAMEBUFFER,null),t.bindRenderbuffer(t.RENDERBUFFER,null)}it(t){Tt(this.A,this.Y[0],t)}resize(t,i){this.j=t,this.N=i,this.V.clear();const r=this.A,n=this.l.type==="float"?r.FLOAT:r.UNSIGNED_BYTE,h=n===r.FLOAT?r.RGBA32F:r.RGBA8,o=r.RGBA;for(const c of this.Y)r.bindTexture(r.TEXTURE_2D,c),r.texImage2D(r.TEXTURE_2D,0,h,this.j,this.N,0,o,n,null);r.bindTexture(r.TEXTURE_2D,null),this.K&&(r.bindRenderbuffer(r.RENDERBUFFER,this.K),r.renderbufferStorage(r.RENDERBUFFER,r.DEPTH_COMPONENT24,this.j,this.N),r.bindRenderbuffer(r.RENDERBUFFER,null))}readPixels(t){const i=this.V.get(t);if(i)return i;const r=this.A,n=this.j,h=this.N,o=new Uint8Array(n*h*4),c=r.getParameter(r.READ_FRAMEBUFFER_BINDING);r.bindFramebuffer(r.READ_FRAMEBUFFER,this.X),r.readBuffer(r.COLOR_ATTACHMENT0+t),r.readPixels(0,0,n,h,r.RGBA,r.UNSIGNED_BYTE,o),r.bindFramebuffer(r.READ_FRAMEBUFFER,c);const u=4*n,f=new Uint8Array(o.length);for(let d=0;d<h;d++){const g=(h-1-d)*u,v=d*u;f.set(o.subarray(g,g+u),v)}return this.V.set(t,f),f}begin(){const t=this.A;this.V.clear(),this.Z.rt(),this.Z.nt(this.X,this.j,this.N,this.W),this.l.depth&&t.clear(t.DEPTH_BUFFER_BIT),this.Z.state.ot()}end(){this.Z.state.ht(),this.Z.ct(),this.Z.lt()}ut(){return this.q||this.ft(),this.q}ft(){if(!this.Z)return;const t=this.W>1,i=this.W>2,r=this.W>3,n={U0:this.Y[0],U1:t?this.Y[1]:this.Y[0],U2:i?this.Y[2]:this.Y[0],U3:r?this.Y[3]:this.Y[0],U4:[this.j,this.N],U5:t,U6:i,U7:r},h=j.J;this.q=this.Z.vt.dt(h,n,!0)}gt(){const t=this.A;t.deleteFramebuffer(this.X),this.Y.forEach(i=>{t.deleteTexture(i)}),this.K&&t.deleteRenderbuffer(this.K)}get width(){return this.j}get height(){return this.N}get textures(){return this.Y}get attachmentCount(){return this.W}};l(j,"J",null);let Z=j;const Ft=new WeakMap;function vt(a,t){Ft.set(a,t)}function Ct(a){return Ft.get(a)}function et(a,t,i,r,n=255){a[0]=t/255,a[1]=(i??t)/255,a[2]=(r??t)/255,a[3]=n/255}class it{constructor(){l(this,"_t",1);l(this,"yt",0);l(this,"At",0);l(this,"wt",0);l(this,"bt",0);l(this,"Ct",0);l(this,"xt",0);l(this,"Mt",[0,0,0]);l(this,"Ft",[1,1,1,1]);l(this,"$t",[0,0,0,1]);l(this,"Pt",!1);l(this,"Tt",!1);l(this,"Et",!1);l(this,"Rt",0);l(this,"St",[0,0,0,1]);l(this,"zt",!1);l(this,"kt",[]);l(this,"Dt",[])}static Lt(){return{Ot:1,Bt:0,It:0,Ht:0,bt:0,Ct:0,xt:0,Rt:0,Gt:!1,Qt:!1,Et:!1,zt:!1,jt:[0,0,0],Nt:[1,1,1,1],Xt:[0,0,0,1]}}Yt(t){t.Ot=this._t,t.Bt=this.yt,t.It=this.At,t.Ht=this.wt,t.bt=this.bt,t.Ct=this.Ct,t.xt=this.xt,t.Gt=this.Pt,t.Qt=this.Tt,t.Et=this.Et,t.Rt=this.Rt,t.zt=this.zt,t.jt[0]=this.Mt[0],t.jt[1]=this.Mt[1],t.jt[2]=this.Mt[2],t.Nt[0]=this.Ft[0],t.Nt[1]=this.Ft[1],t.Nt[2]=this.Ft[2],t.Nt[3]=this.Ft[3],t.Xt[0]=this.$t[0],t.Xt[1]=this.$t[1],t.Xt[2]=this.$t[2],t.Xt[3]=this.$t[3]}Kt(t){this._t=t.Ot,this.yt=t.Bt,this.At=t.It,this.wt=t.Ht,this.bt=t.bt,this.Ct=t.Ct,this.xt=t.xt,this.Pt=t.Gt,this.Tt=t.Qt,this.Et=t.Et,this.Rt=t.Rt,this.zt=t.zt,this.Mt[0]=t.jt[0],this.Mt[1]=t.jt[1],this.Mt[2]=t.jt[2],this.Ft[0]=t.Nt[0],this.Ft[1]=t.Nt[1],this.Ft[2]=t.Nt[2],this.Ft[3]=t.Nt[3],this.$t[0]=t.Xt[0],this.$t[1]=t.Xt[1],this.$t[2]=t.Xt[2],this.$t[3]=t.Xt[3]}ot(){let t=this.Dt.pop();t||(t=it.Lt()),this.Yt(t),this.kt.push(t)}ht(){const t=this.kt.pop();t?(this.Kt(t),this.Dt.push(t)):console.warn("pop() called without matching push()")}Wt(t){this.Yt(t)}Zt(t){this._t=Math.abs(t)}qt(){this.yt=0,this.At=0,this.wt=0,this.bt=0,this.Ct=0,this.xt=0,this.zt=!1}Vt(t){t!==0&&(this.bt+=t*Math.PI/180)}Jt(t){t!==0&&(this.Ct+=t*Math.PI/180)}ts(t){t!==0&&(this.xt+=t*Math.PI/180)}ss(t=0,i=0,r=0){t===0&&i===0&&r===0||(this.yt+=t,this.At+=i,this.wt+=r)}es(t){this.ss(t,0,0)}rs(t){this.ss(0,t,0)}ns(t){this.ss(0,0,t)}hs(t){this.Mt[0]=t[0],this.Mt[1]=t[1],this.Mt[2]=t[2]}cs(t,i,r,n=255){et(this.Ft,t,i,r,n)}ls(t,i,r,n=255){et(this.$t,t,i,r,n)}us(t){this.Pt=t}fs(t){this.Tt=t}ds(t){this.Et=t}vs(t){this.Rt=xt(t)}ps(t,i,r,n){et(this.St,t,i,r,n)}gs(t){this.zt=t}get canvasBackgroundColor(){return this.St}get useOrtho(){return this.zt}get rotationX(){return this.bt}get rotationY(){return this.Ct}get rotationZ(){return this.xt}}const pt=new Float32Array([-.5,-.5,0,0,.5,-.5,1,0,-.5,.5,0,1,-.5,.5,0,1,.5,-.5,1,0,.5,.5,1,1]),Y={_s:16,As:WebGL2RenderingContext.TRIANGLES,ws:{bs:{size:2,offset:0},Cs:{size:2,offset:8}}};class ie{constructor(t){l(this,"A");l(this,"Ms");l(this,"Fs");this.A=t,this.Ms=t.createBuffer(),this.Fs=new Float32Array(pt.length)}$s(t,i,r,n){const h=this.A,o=Ct(this.A),c=o[2],u=o[3],f=t/c*2-1,d=(t+r)/c*2-1,g=1-(i+n)/u*2,v=1-i/u*2,p=pt,m=this.Fs;for(let A=0;A<p.length;A+=4){const y=p[A],b=p[A+1],w=p[A+2],E=p[A+3],P=f+(y+.5)*(d-f),x=g+(b+.5)*(v-g);m[A]=P,m[A+1]=x,m[A+2]=w,m[A+3]=E}h.bindBuffer(h.ARRAY_BUFFER,this.Ms),h.bufferData(h.ARRAY_BUFFER,m,h.DYNAMIC_DRAW),h.enableVertexAttribArray(0),h.vertexAttribPointer(0,2,h.FLOAT,!1,16,0),h.enableVertexAttribArray(1),h.vertexAttribPointer(1,2,h.FLOAT,!1,16,8),h.drawArrays(h.TRIANGLES,0,6),h.disableVertexAttribArray(1),h.disableVertexAttribArray(0),h.bindBuffer(h.ARRAY_BUFFER,null)}gt(){this.A.deleteBuffer(this.Ms)}}var F=(a=>(a.RECTANGLE="rectangle",a.LINE="line",a.ELLIPSE="ellipse",a.ARC="arc",a.TRIANGLE="triangle",a.BEZIER_CURVE="bezier_curve",a))(F||{});const re={rectangle:2,line:2,ellipse:2,triangle:2,arc:3,bezier_curve:4};class se{constructor(t){l(this,"A");l(this,"Ps",new Map);this.A=t}Ts(t,i,r,n){const h=this.A;let o=this.Ps.get(t);o||(o=new Map,this.Ps.set(t,o));let c=o.get(i)||null;if(!c){c=h.createVertexArray(),o.set(i,c),h.bindVertexArray(c),h.bindBuffer(h.ARRAY_BUFFER,n);const u=h.getAttribLocation(t,"A0");u!==-1&>(h,u,r.ws.bs.size,r._s,r.ws.bs.offset,0,h.FLOAT,!1);const f=h.getAttribLocation(t,"A1");f!==-1&>(h,f,r.ws.Cs.size,r._s,r.ws.Cs.offset,0,h.FLOAT,!1)}h.bindVertexArray(c)}Es(){this.A.bindVertexArray(null)}gt(){for(const[,t]of this.Ps)for(const[,i]of t)i&&this.A.deleteVertexArray(i)}}const _=class _{static Rs(t,i,r=0){const n=i||new Float32Array(_.FLOATS_PER_INSTANCE);let h=r;n[h++]=t.bs[0],n[h++]=t.bs[1],n[h++]=t.Ss[0],n[h++]=t.Ss[1],n[h++]=t.jt[0],n[h++]=t.jt[1],n[h++]=t.jt[2],n[h++]=t.Nt[0],n[h++]=t.Nt[1],n[h++]=t.Nt[2],n[h++]=t.Nt[3],n[h++]=t.Xt[0],n[h++]=t.Xt[1],n[h++]=t.Xt[2],n[h++]=t.Xt[3],n[h++]=t.zs[0],n[h++]=t.zs[1],n[h++]=t.zs[2],n[h++]=t.Rt;const o=t.ks;n[h++]=(o==null?void 0:o[0])??0,n[h++]=(o==null?void 0:o[1])??0,n[h++]=(o==null?void 0:o[2])??0;const c=t.Ds;n[h++]=(c==null?void 0:c[0])??0,n[h++]=(c==null?void 0:c[1])??0,n[h++]=(c==null?void 0:c[2])??0;const u=t.Ls,f=t.Os,d=t.Bs,g=t.Is,v=t.Hs,p=!(!f||!d);return p?(n[h++]=(g==null?void 0:g[0])??0,n[h++]=(g==null?void 0:g[1])??0,n[h++]=(v==null?void 0:v[0])??0,n[h++]=(v==null?void 0:v[1])??0,n[h++]=f[0],n[h++]=f[1],n[h++]=d[0],n[h++]=d[1]):!p&&!!u?(n[h++]=u[0],n[h++]=u[1],n[h++]=0,n[h++]=0,n[h++]=0,n[h++]=0,n[h++]=0,n[h++]=0):(n[h++]=0,n[h++]=0,n[h++]=0,n[h++]=0,n[h++]=0,n[h++]=0,n[h++]=0,n[h++]=0),n[h++]=t.Gs??0,n[h++]=t.Qs??0,n[h++]=t.js??0,n}static Ns(t,i){const r=t.length*_.FLOATS_PER_INSTANCE,n=i||new Float32Array(r);for(let h=0;h<t.length;h++){const o=h*_.FLOATS_PER_INSTANCE;_.Rs(t[h],n,o)}return n}};l(_,"BYTES_PER_INSTANCE",144),l(_,"FLOATS_PER_INSTANCE",36);let O=_;const L=class L{};l(L,"STRIDE",O.BYTES_PER_INSTANCE),l(L,"ATTRIBUTES",{A2:{location:-1,size:2,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:L.STRIDE,offset:0,divisor:1},A3:{location:-1,size:2,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:L.STRIDE,offset:8,divisor:1},A4:{location:-1,size:3,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:L.STRIDE,offset:16,divisor:1},A5:{location:-1,size:4,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:L.STRIDE,offset:28,divisor:1},A6:{location:-1,size:4,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:L.STRIDE,offset:44,divisor:1},A7:{location:-1,size:4,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:L.STRIDE,offset:60,divisor:1},A8:{location:-1,size:3,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:L.STRIDE,offset:76,divisor:1},A9:{location:-1,size:3,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:L.STRIDE,offset:88,divisor:1},Aa:{location:-1,size:4,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:L.STRIDE,offset:100,divisor:1},Ab:{location:-1,size:4,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:L.STRIDE,offset:116,divisor:1},Ac:{location:-1,size:3,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:L.STRIDE,offset:132,divisor:1}});let V=L;class ne{constructor(t=1e3,i=1.5){l(this,"Xs");l(this,"Ys");l(this,"Ks");l(this,"Ws",0);l(this,"Zs",0);this.Ys=t,this.Ks=i;const r=t*O.FLOATS_PER_INSTANCE;this.Xs=new Float32Array(r)}qs(t){if(t<=this.Ys)return;const i=Math.ceil(t*this.Ks),r=this.Ys;this.Ys=i;const n=i*O.FLOATS_PER_INSTANCE,h=new Float32Array(n),o=r*O.FLOATS_PER_INSTANCE;h.set(this.Xs.subarray(0,Math.min(o,this.Ws))),this.Xs=h}Vs(){return{buffer:this.Xs,offset:this.Ws}}Js(t){this.Ws+=t,this.Zs++}te(){this.Ws=0,this.Zs=0}se(t=0,i){return this.Xs.subarray(t,i??this.Ws)}get ee(){return this.Zs}get ie(){return this.Ys}get re(){return this.Ws}get ne(){return this.Zs===0}}class he{constructor(t){l(this,"Xs");this.Xs=t}oe(t){this.Xs.qs(this.Xs.ee+1);const{buffer:i,offset:r}=this.Xs.Vs();i[r+0]=t.x,i[r+1]=t.y,i[r+2]=t.width,i[r+3]=t.height,i[r+4]=t.char0,i[r+5]=t.char1,i[r+6]=t.char2,i[r+7]=t.r1,i[r+8]=t.g1,i[r+9]=t.b1,i[r+10]=t.a1,i[r+11]=t.r2,i[r+12]=t.g2,i[r+13]=t.b2,i[r+14]=t.a2,i[r+15]=t.invert,i[r+16]=t.flipX,i[r+17]=t.flipY,i[r+18]=t.charRot,i[r+19]=t.translationX,i[r+20]=t.translationY,i[r+21]=t.translationZ,i[r+22]=t.rotationX,i[r+23]=t.rotationY,i[r+24]=t.rotationZ;const n=t.curveParams0,h=t.curveParams1;return i[r+25]=n[0],i[r+26]=n[1],i[r+27]=n[2],i[r+28]=n[3],i[r+29]=h[0],i[r+30]=h[1],i[r+31]=h[2],i[r+32]=h[3],i[r+33]=t.depth,i[r+34]=t.baseZ,i[r+35]=t.geometryType,this.Xs.Js(O.FLOATS_PER_INSTANCE),this.Xs.ee-1}get ee(){return this.Xs.ee}}class oe{constructor(t,i=1e3){l(this,"A");l(this,"he",null);l(this,"ae",0);l(this,"ce",new Map);this.A=t,this.le(i)}le(t){const i=this.A;this.he&&i.deleteBuffer(this.he),this.he=i.createBuffer();const r=t*O.BYTES_PER_INSTANCE;Rt(i,i.ARRAY_BUFFER,this.he,r,i.DYNAMIC_DRAW),this.ae=t}ue(t){this.le(t)}get ie(){return this.ae}fe(t,i){if(i===0)return;const r=this.A;r.bindBuffer(r.ARRAY_BUFFER,this.he);const n=i*O.FLOATS_PER_INSTANCE;r.bufferSubData(r.ARRAY_BUFFER,0,t,0,n)}de(t){let i=this.ce.get(t);if(!i){i=new Map;const r=this.A;for(const n in V.ATTRIBUTES){const h=r.getAttribLocation(t,n);h!==-1&&i.set(n,h)}this.ce.set(t,i)}return i}ve(t){const i=this.A,r=t.G,n=this.de(r);for(const[h,o]of n){const c=V.ATTRIBUTES[h];c&>(i,o,c.size,c.stride,c.offset,c.divisor,c.type,c.normalized)}}pe(t){const i=this.A,r=this.de(t.G);for(const[n,h]of r)V.ATTRIBUTES[n]&&(i.disableVertexAttribArray(h),i.vertexAttribDivisor(h,0))}gt(){this.he&&(this.A.deleteBuffer(this.he),this.he=null),this.ce.clear()}}class ae{constructor(t,i=1e3,r=1.5){l(this,"A");l(this,"Xs");l(this,"ge");l(this,"me");this.A=t,this.Xs=new ne(i,r),this.ge=new he(this.Xs),this.me=new oe(t,i)}_e(t){var n,h,o,c,u,f,d,g,v,p;const i=[0,0,0,0],r=[0,0,0,0];return t.Os&&t.Bs?(i[0]=((n=t.Is)==null?void 0:n[0])??0,i[1]=((h=t.Is)==null?void 0:h[1])??0,i[2]=((o=t.Hs)==null?void 0:o[0])??0,i[3]=((c=t.Hs)==null?void 0:c[1])??0,r[0]=t.Os[0],r[1]=t.Os[1],r[2]=t.Bs[0],r[3]=t.Bs[1]):t.Ls&&(i[0]=t.Ls[0],i[1]=t.Ls[1]),this.oe({x:t.bs[0],y:t.bs[1],width:t.Ss[0],height:t.Ss[1],char0:t.jt[0],char1:t.jt[1],char2:t.jt[2],r1:t.Nt[0],g1:t.Nt[1],b1:t.Nt[2],a1:t.Nt[3],r2:t.Xt[0],g2:t.Xt[1],b2:t.Xt[2],a2:t.Xt[3],invert:t.zs[0],flipX:t.zs[1],flipY:t.zs[2],charRot:t.Rt,translationX:((u=t.ks)==null?void 0:u[0])??0,translationY:((f=t.ks)==null?void 0:f[1])??0,translationZ:((d=t.ks)==null?void 0:d[2])??0,rotationX:((g=t.Ds)==null?void 0:g[0])??0,rotationY:((v=t.Ds)==null?void 0:v[1])??0,rotationZ:((p=t.Ds)==null?void 0:p[2])??0,curveParams0:i,curveParams1:r,depth:t.Gs||0,baseZ:t.Qs||0,geometryType:t.js||0})}oe(t){const i=this.ge.oe(t);return this.Xs.ie>this.me.ie&&this.me.ue(this.Xs.ie),i}get ye(){return this.Xs.ee}get ne(){return this.Xs.ne}Ae(){this.Xs.te()}ve(t){const i=this.Xs.ee;if(i===0)return;const r=this.Xs.se();this.me.fe(r,i),this.me.ve(t)}pe(t){this.me.pe(t)}$s(t,i){const r=this.Xs.ee;r!==0&&this.A.drawArraysInstanced(t,0,i,r)}gt(){this.me.gt()}}class G{constructor(t,i,r,n){l(this,"A");l(this,"we");l(this,"be");l(this,"Ce");l(this,"xe",null);this.A=t,this.we=i,this.be=r,this.Ce=n;const h=this.A.createBuffer();Rt(this.A,this.A.ARRAY_BUFFER,h,this.Ce.Me,this.A.STATIC_DRAW),this.xe=h}get type(){return this.be}get unitGeometry(){return this.Ce}get unitBuffer(){return this.xe}get batch(){return this.we}Fe(){this.we.Ae()}$e(){return!this.we.ne}gt(){this.we.gt(),this.A.deleteBuffer(this.xe)}Pe(t,i,r){return this.we._e(t)}Te(t,i,r,n,h,o){const c=h.Bt??0,u=h.It??0,f=h.Ht??0,d=h.bt??0,g=h.Ct??0,v=h.xt??0,p=[0,0,0,0],m=[0,0,0,0];o&&(o.bezStartX!==void 0&&o.bezStartY!==void 0&&o.bezEndX!==void 0&&o.bezEndY!==void 0?(p[0]=o.cp1x??0,p[1]=o.cp1y??0,p[2]=o.cp2x??0,p[3]=o.cp2y??0,m[0]=o.bezStartX??0,m[1]=o.bezStartY??0,m[2]=o.bezEndX??0,m[3]=o.bezEndY??0):o.arcStart===void 0&&o.arcStop===void 0||(p[0]=o.arcStart??0,p[1]=o.arcStop??0));const A={x:t,y:i,width:r,height:n,char0:h.jt[0],char1:h.jt[1],char2:h.jt[2],r1:h.Nt[0],g1:h.Nt[1],b1:h.Nt[2],a1:h.Nt[3],r2:h.Xt[0],g2:h.Xt[1],b2:h.Xt[2],a2:h.Xt[3],invert:h.Et?1:0,flipX:h.Gt?1:0,flipY:h.Qt?1:0,charRot:h.Rt,translationX:c,translationY:u,translationZ:f,rotationX:d,rotationY:g,rotationZ:v,curveParams0:p,curveParams1:m,depth:(o==null?void 0:o.depth)??0,baseZ:(o==null?void 0:o.baseZ)??0,geometryType:re[this.be]??0};return this.we.oe(A)}}const ce={Me:pt,Ee:6,...Y},le={Me:new Float32Array([0,-.5,0,0,1,-.5,1,0,0,.5,0,1,0,.5,0,1,1,-.5,1,0,1,.5,1,1]),Ee:6,...Y},ue={Me:function(a=32){const t=[],i=2*Math.PI/a;for(let r=0;r<a;r++){const n=r*i,h=(r+1)%a*i,o=Math.cos(n),c=Math.sin(n),u=.5*(o+1),f=.5*(c+1),d=Math.cos(h),g=Math.sin(h),v=.5*(d+1),p=.5*(g+1);t.push(0,0,.5,.5,o,c,u,f,d,g,v,p)}return new Float32Array(t)}(32),Ee:96,...Y};let fe={Me:function(a){const t=[];for(let i=0;i<a;i++){const r=i/a,n=(i+1)/a;t.push(r,0,r,0,r,1,r,1,n,1,n,1)}return new Float32Array(t)}(32),Ee:96,...Y};const de={Me:new Float32Array([0,0,0,0,1,0,1,0,.5,1,.5,1]),Ee:3,...Y},ge={Me:function(a=16){const t=[];for(let i=0;i<a;i++){const r=i/a,n=(i+1)/a;t.push(r,-.5,r,0,n,-.5,n,0,r,.5,r,1,r,.5,r,1,n,-.5,n,0,n,.5,n,1)}return new Float32Array(t)}(16),Ee:96,...Y},ve={[F.RECTANGLE]:class extends G{constructor(a,t){super(a,t,F.RECTANGLE,ce)}_e(a,t){return this.Te(0,0,a.width,a.height,t)}},[F.LINE]:class extends G{constructor(a,t){super(a,t,F.LINE,le)}_e(a,t){const i=a.x2-a.x1,r=a.y2-a.y1,n=Math.hypot(i,r),h=Math.atan2(r,i),o=t.Ot||1,c=a.x1+i/2-n/2,u=a.y1+r/2,f={...t,xt:(t.xt||0)+h};return this.Te(c,u,n,o,f)}},[F.ELLIPSE]:class extends G{constructor(a,t){super(a,t,F.ELLIPSE,ue)}_e(a,t){return this.Te(0,0,a.width,a.height,t)}},[F.ARC]:class extends G{constructor(a,t){super(a,t,F.ARC,fe)}_e(a,t){const i=a.start*Math.PI/180,r=a.stop*Math.PI/180;return this.Te(0,0,a.width,a.height,t,{arcStart:i,arcStop:r})}},[F.TRIANGLE]:class extends G{constructor(a,t){super(a,t,F.TRIANGLE,de)}_e(a,t){const i=Math.min(a.x1,a.x2,a.x3),r=Math.max(a.x1,a.x2,a.x3),n=Math.min(a.y1,a.y2,a.y3),h=r-i,o=Math.max(a.y1,a.y2,a.y3)-n;return this.Te(i,n,h,o,t)}},[F.BEZIER_CURVE]:class extends G{constructor(a,t){super(a,t,F.BEZIER_CURVE,ge)}_e(a,t){return this.Te(0,0,1,t.Ot||1,t,{cp1x:a.cp1x,cp1y:a.cp1y,cp2x:a.cp2x,cp2y:a.cp2y,bezStartX:a.x1,bezStartY:a.y1,bezEndX:a.x2,bezEndY:a.y2})}}};class pe{constructor(t){l(this,"A");l(this,"Re");l(this,"Se");this.A=t,this.Se=new se(t),this.Re=new Map;for(const i of Object.values(F)){const r=new ae(t),n=new ve[i](t,r);this.Re.set(i,n)}}ze(t){this.ke(t).forEach(i=>{this.De(i)})}ke(t){const i=[];let r=null,n=null,h=null;for(const o of t)n!==o.material||h!==o.type?(r&&r.length>0&&i.push({material:n,type:h,commands:r}),r=[o],n=o.material,h=o.type):r.push(o);return r&&r.length>0&&i.push({material:n,type:h,commands:r}),i}De(t){const{material:i,type:r,commands:n}=t,h=this.Re.get(r);i.shader.D(),i.shader.O(i.uniforms);const o=Ct(this.A),c=n.length>0&&n[0].state.zt;if(i.shader.O({Uu:o[2]/o[3],Ur:[o[2],o[3]],Us:1,Ut:c?1:0}),h.Fe(),n.forEach(u=>{h._e(u.params,u.state)}),h.$e()){const u=h.unitGeometry,f=h.unitBuffer;try{this.Se.Ts(i.shader.G,r+"",u,f),h.batch.ve(i.shader),h.batch.$s(u.As,u.Ee)}finally{h.batch.pe(i.shader),this.Se.Es(),h.Fe()}}}gt(){for(const t of this.Re.values())t.gt();this.Re.clear(),this.Se.gt()}}function Pt(a){let t=0;for(let i=0;i<a.length;i++)t=(t<<5)-t+a.charCodeAt(i),t&=t;return t}const Mt=new WeakMap;let Ae=1;function St(a){if(a==null)return 0;if(typeof a!="object"&&typeof a!="function")return Pt(a+"");let t=Mt.get(a);return t||(t=Ae++,Mt.set(a,t)),t}function Q(a,t){return(a<<5)-a+t}class me{constructor(t){l(this,"Le",0);l(this,"Oe");l(this,"Be");l(this,"Ie",new Map);this.Oe=new W(t,tt,`#version 300 es
|
|
10
|
+
precision highp float;in vec3 v_glyphIndex;in vec4 v_glyphColor;in vec4 v_cellColor;in vec4 v_glyphFlags;layout(location=0)out vec4 o_character;layout(location=1)out vec4 o_primaryColor;layout(location=2)out vec4 o_secondaryColor;layout(location=3)out vec4 A;void main(){int B=int(v_glyphFlags.r>0.5?1:0);int C=int(v_glyphFlags.g>0.5?1:0);int D=int(v_glyphFlags.b>0.5?1:0);float E=float(B|(C<<1)|(D<<2))/255.;o_character=vec4(v_glyphIndex.xy,E,clamp(v_glyphFlags.a,0.,1.));o_primaryColor=vec4(v_glyphColor.rgb,v_glyphColor.a);o_secondaryColor=vec4(v_cellColor.rgb,v_cellColor.a);A=vec4(0.);}`),this.Be={id:this.Le++,shader:this.Oe,uniforms:Object.freeze({}),hash:this.He(this.Oe,{}),isBuiltIn:!0}}get Ge(){return this.Be}dt(t,i={},r=!1){const n=this.He(t,i),h=this.Ie.get(n);if(h)return h;const o={id:this.Le++,shader:t,uniforms:Object.freeze({...i}),hash:n,isBuiltIn:r};return this.Ie.set(n,o),o}Qe(t,i={}){return{id:this.Le++,shader:t,uniforms:Object.freeze({...i}),hash:0,isBuiltIn:!1}}He(t,i){const r=St(t.G),n=function(h,o){let c=0;const u=Object.keys(h).sort();for(const f of u)c=Q(c,Pt(f)),c=Q(c,o(h[f]));return c}(i,this.je.bind(this));return Q(r,n)}je(t){return typeof t=="number"||typeof t=="boolean"?function(i){return typeof i=="boolean"?i?1:0:Math.floor(i)}(t):Array.isArray(t)?function(i){let r=0;const n=Array.isArray(i[0])?i.flat():i;for(const h of n)r=Q(r,typeof h=="number"?h:0);return r}(t):t instanceof Float32Array||t instanceof Int32Array?function(i){let r=0;const n=Math.min(i.length,16);for(let h=0;h<n;h++)r=Q(r,i[h]);return r}(t):t instanceof WebGLTexture?St(t):0}gt(){this.Oe!=this.Oe&&this.Oe.dispose(),this.Oe.dispose(),this.Ie.clear()}}class ye{constructor(){l(this,"Ne",[]);l(this,"Xe",1);l(this,"Ss",0)}Ye(t,i){if(this.Ss>=this.Ne.length){const n={id:this.Xe++,type:t,params:{},state:it.Lt(),material:i};this.Ne.push(n)}const r=this.Ne[this.Ss];return r.id=this.Xe++,r.type=t,r.material=i,this.Ss++,r}Ke(t,i,r){const n=this.Ye(F.RECTANGLE,r),h=n.params;return h.width=t.width,h.height=t.height,i.Wt(n.state),n.id}We(t,i,r){const n=this.Ye(F.LINE,r),h=n.params;return h.x1=t.x1,h.y1=t.y1,h.x2=t.x2,h.y2=t.y2,h.thickness=t.thickness,i.Wt(n.state),n.id}Ze(t,i,r){const n=this.Ye(F.ELLIPSE,r),h=n.params;return h.width=t.width,h.height=t.height,h.startAngle=t.startAngle,h.endAngle=t.endAngle,h.segments=t.segments,i.Wt(n.state),n.id}qe(t,i,r){const n=this.Ye(F.ARC,r),h=n.params;return h.width=t.width,h.height=t.height,h.start=t.start,h.stop=t.stop,i.Wt(n.state),n.id}Ve(t,i,r){const n=this.Ye(F.TRIANGLE,r),h=n.params;return h.x1=t.x1,h.y1=t.y1,h.x2=t.x2,h.y2=t.y2,h.x3=t.x3,h.y3=t.y3,i.Wt(n.state),n.id}Je(t,i,r){const n=this.Ye(F.BEZIER_CURVE,r),h=n.params;return h.x1=t.x1,h.y1=t.y1,h.cp1x=t.cp1x,h.cp1y=t.cp1y,h.cp2x=t.cp2x,h.cp2y=t.cp2y,h.x2=t.x2,h.y2=t.y2,h.thickness=t.thickness,h.segments=t.segments,i.Wt(n.state),n.id}Ae(){this.Ss=0}[Symbol.iterator](){let t=0;const i=this.Ss,r=this.Ne;return{next:()=>t<i?{value:r[t++],done:!1}:{value:void 0,done:!0}}}}class be{constructor(t){l(this,"A");l(this,"ti",null);l(this,"si");l(this,"vt");l(this,"ei");l(this,"ii");l(this,"ri");l(this,"ni",null);l(this,"oi",{});l(this,"hi",[]);l(this,"ai",[]);l(this,"ci",[]);l(this,"li",null);l(this,"ui",[0,0,0,0]);l(this,"fi",1);this.A=t,t.enable(t.DEPTH_TEST),t.depthFunc(t.LEQUAL),t.clearDepth(1),t.depthMask(!0),t.disable(t.CULL_FACE),this.ei=new it,this.vt=new me(t),this.ii=new ye,this.si=new pe(t),this.ri=new ie(t);const i=[0,0,t.canvas.width,t.canvas.height];vt(t,i),this.hi.push(null),this.ai.push(i),this.ci.push(1),this.li=null,this.ui=i,this.fi=1}rt(){this.hi.push(this.li),this.ai.push([...this.ui]),this.ci.push(this.fi)}lt(){const t=this.hi.pop()??null,i=this.ai.pop()??[0,0,this.A.canvas.width,this.A.canvas.height],r=this.ci.pop()??1;this.nt(t,i[2],i[3],r)}nt(t,i,r,n=1){const h=this.A;this.li!==t&&(h.bindFramebuffer(h.FRAMEBUFFER,t),this.li=t),this.fi=n;const o=[0,0,i,r];this.ui[0]===o[0]&&this.ui[1]===o[1]&&this.ui[2]===o[2]&&this.ui[3]===o[3]||(h.viewport(...o),vt(h,o),this.ui=o)}di(t){this.ti!==t&&(this.ti=t,t.D())}pi(t,i){return new W(this.A,t,i)}gi(t){this.ni=t,t&&(this.oi={})}I(t,i){this.oi[t]=i}mi(t){Object.assign(this.oi,t)}_i(t){return new W(this.A,tt,t)}yi(t,i,r,n){t instanceof Z||!n||t.Ai(n),this.ii.Ke({width:i??t.width,height:r??t.height},this.ei,t.ut())}wi(t,i,r,n){this.ri.$s(t,i,r,n)}bi(t,i){if(this.ni){const r=this.vt.Qe(this.ni,this.oi);this.ii.Ke({width:t,height:i},this.ei,r),this.ni=null,this.oi={}}else this.ii.Ke({width:t,height:i},this.ei,this.vt.Ge)}Ci(t,i,r,n){this.ii.We({x1:t,y1:i,x2:r,y2:n},this.ei,this.vt.Ge)}xi(t,i){this.ii.Ze({width:t,height:i},this.ei,this.vt.Ge)}Mi(t,i,r,n,h,o){this.ii.Ve({x1:t,y1:i,x2:r,y2:n,x3:h,y3:o},this.ei,this.vt.Ge)}Fi(t,i,r,n,h,o,c,u){this.ii.Je({x1:t,y1:i,cp1x:r,cp1y:n,cp2x:h,cp2y:o,x2:c,y2:u},this.ei,this.vt.Ge)}$i(t,i,r,n){this.ii.qe({width:t,height:i,start:r,stop:n},this.ei,this.vt.Ge)}Pi(t,i,r=1,n={}){return new Z(this.A,t,i,r,n,this)}Ti(t,i=t,r=t,n=255){this.ei.ps(t,i??t,r??t,n);const[h,o,c,u]=this.ei.canvasBackgroundColor;this.Ei(h,o,c,u,!1)}Ae(t=0,i=0,r=0,n=0){this.Ei(t,i,r,n,!0)}Ei(t,i,r,n,h){const o=this.A;if(this.fi>1){const c=h?[1,1,0,0]:[0,0,0,0];o.clearBufferfv(o.COLOR,0,new Float32Array(c)),o.clearBufferfv(o.COLOR,1,new Float32Array([0,0,0,0])),this.fi>=3&&o.clearBufferfv(o.COLOR,2,new Float32Array([t,i,r,n]));for(let u=3;u<this.fi;u++)o.clearBufferfv(o.COLOR,u,new Float32Array([0,0,0,0]))}else o.clearColor(t,i,r,n),o.clear(o.COLOR_BUFFER_BIT)}Ri(){const t=[0,0,this.A.canvas.width,this.A.canvas.height];this.A.viewport(...t),vt(this.A,t),this.ui=t,this.ai.length>0&&(this.ai[0]=t)}ct(){const t=this.ii;this.si.ze(t),t.Ae(),this.ti=null}gt(){this.vt.gt(),this.si.gt(),this.ri.gt()}get context(){return this.A}get state(){return this.ei}get materialManager(){return this.vt}}const C={readShort:(a,t)=>(C.t.uint16[0]=a[t]<<8|a[t+1],C.t.int16[0]),readUshort:(a,t)=>a[t]<<8|a[t+1],readUshorts(a,t,i){const r=[];for(let n=0;n<i;n++)r.push(C.readUshort(a,t+2*n));return r},readUint(a,t){const i=C.t.uint8;return i[3]=a[t],i[2]=a[t+1],i[1]=a[t+2],i[0]=a[t+3],C.t.uint32[0]},readASCII(a,t,i){let r="";for(let n=0;n<i;n++)r+=String.fromCharCode(a[t+n]);return r},t:(()=>{const a=new ArrayBuffer(8);return{uint8:new Uint8Array(a),int16:new Int16Array(a),uint16:new Uint16Array(a),uint32:new Uint32Array(a)}})()};function rt(a){return a+3&-4}function st(a,t,i){a[t]=i>>>8&255,a[t+1]=255&i}function I(a,t,i){a[t]=i>>>24&255,a[t+1]=i>>>16&255,a[t+2]=i>>>8&255,a[t+3]=255&i}function Ee(a,t,i){for(let r=0;r<i.length;r++)a[t+r]=255&i.charCodeAt(r)}function At(a,t,i){const r=t+i;let n=0;const h=C.t;for(let o=t;o<r;o+=4)h.uint8[3]=a[o]||0,h.uint8[2]=a[o+1]||0,h.uint8[1]=a[o+2]||0,h.uint8[0]=a[o+3]||0,n=n+(h.uint32[0]>>>0)>>>0;return n>>>0}class we{constructor(t){l(this,"b");l(this,"p",0);l(this,"bitbuf",0);l(this,"bitcnt",0);this.b=t}readBits(t){for(;this.bitcnt<t;){const r=this.b[this.p++]||0;this.bitbuf|=r<<this.bitcnt,this.bitcnt+=8}const i=this.bitbuf&(1<<t)-1;return this.bitbuf>>>=t,this.bitcnt-=t,i}alignToByte(){this.bitbuf=0,this.bitcnt=0}get offset(){return this.p}}function K(a){let t=32,i=0;for(const c of a)c&&(c<t&&(t=c),c>i&&(i=c));if(i===0)return{min:0,max:0,table:new Map};const r=new Uint32Array(i+1);for(const c of a)c&&r[c]++;const n=new Uint32Array(i+1);let h=0;r[0]=0;for(let c=1;c<=i;c++)h=h+r[c-1]<<1,n[c]=h;const o=new Map;for(let c=0;c<a.length;c++){const u=a[c];if(!u)continue;const f=n[u]++;let d=o.get(u);d||(d=[],o.set(u,d)),d[xe(f,u)]=c}return{min:t,max:i,table:o}}function mt(a,t){let i=0;for(let r=1;r<=t.max;r++){i|=a.readBits(1)<<r-1;const n=t.table.get(r);if(n&&i<n.length){const h=n[i];if(h!==void 0)return h}}throw Error("Invalid Huffman code")}function xe(a,t){let i=0;for(let r=0;r<t;r++)i=i<<1|1&a,a>>>=1;return i>>>0}function Te(a){if(a.length<2)throw Error("ZLIB data too short");const t=a[0],i=a[1];if((15&t)!=8)throw Error("Unsupported ZLIB compression method");if(((t<<8)+i)%31!=0)throw Error("Bad ZLIB header check");let r=2;32&i&&(r+=4);const n=[];return function(h,o){const c=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258],u=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],f=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577],d=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13];let g=0;for(;!g;){g=h.readBits(1);const v=h.readBits(2);if(v===0){h.alignToByte();const p=h.readBits(16);if((65535&(65535^p))!==h.readBits(16))throw Error("DEFLATE uncompressed LEN/NLEN mismatch");for(let m=0;m<p;m++)o.push(h.readBits(8))}else{if(v!==1&&v!==2)throw Error("Unsupported DEFLATE type");{let p,m;if(v===1){const A=Array(288).fill(0);for(let y=0;y<=143;y++)A[y]=8;for(let y=144;y<=255;y++)A[y]=9;for(let y=256;y<=279;y++)A[y]=7;for(let y=280;y<=287;y++)A[y]=8;p=K(A),m=K(Array(32).fill(5))}else{const A=h.readBits(5)+257,y=h.readBits(5)+1,b=h.readBits(4)+4,w=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],E=Array(19).fill(0);for(let M=0;M<b;M++)E[w[M]]=h.readBits(3);const P=K(E),x=[];for(;x.length<A+y;){const M=mt(h,P);if(M<=15)x.push(M);else if(M===16){const B=h.readBits(2)+3,N=x[x.length-1]||0;for(let lt=0;lt<B;lt++)x.push(N)}else if(M===17){const B=h.readBits(3)+3;for(let N=0;N<B;N++)x.push(0)}else{if(M!==18)throw Error("Invalid code length symbol");{const B=h.readBits(7)+11;for(let N=0;N<B;N++)x.push(0)}}}const S=x.slice(0,A),D=x.slice(A,A+y);p=K(S),m=K(D)}for(;;){const A=mt(h,p);if(A<256)o.push(A);else{if(A===256)break;if(A>256&&A<286){const y=A-257;let b=c[y];const w=u[y];w&&(b+=h.readBits(w));const E=mt(h,m);if(E>=30)throw Error("Invalid distance symbol");let P=f[E];const x=d[E];x&&(P+=h.readBits(x));const S=o.length-P;if(S<0)throw Error("Invalid distance");for(let D=0;D<b;D++)o.push(o[S+D]||0)}else if(A===286||A===287)throw Error("Reserved length symbol")}}}}}}(new we(a.subarray(r)),n),new Uint8Array(n)}function Re(a){const t=C,i=new Uint8Array(a);if(t.readASCII(i,0,4)!=="wOFF")throw Error("Invalid WOFF signature");const r=t.readUint(i,4),n=t.readUshort(i,12),h=t.readUint(i,16),o=[];let c=44;for(let b=0;b<n;b++){const w=t.readASCII(i,c,4),E=t.readUint(i,c+4),P=t.readUint(i,c+8),x=t.readUint(i,c+12),S=t.readUint(i,c+16);o.push({tag:w,offset:E,compLength:P,origLength:x,checksum:S}),c+=20}for(const b of o){const w=new Uint8Array(i.buffer,b.offset,b.compLength);if(b.compLength===b.origLength)b.data=new Uint8Array(w);else if(b.data=Te(w),b.data.length!==b.origLength)if(b.data.length<b.origLength){const E=new Uint8Array(b.origLength);E.set(b.data),b.data=E}else b.data=b.data.subarray(0,b.origLength)}const u=n;let f=1,d=0;for(;f<<1<=u;)f<<=1,d++;const g=16*f,v=16*u-g;let p=12+16*u;const m={};for(const b of o)m[b.tag]=p,p=rt(p+b.data.length);const A=new Uint8Array(Math.max(h||0,p));I(A,0,r),st(A,4,u),st(A,6,g),st(A,8,d),st(A,10,v);let y=12;for(const b of o){Ee(A,y,b.tag),y+=4;let w=b.data;if(b.tag==="head"&&w.length>=12){const E=new Uint8Array(w);I(E,8,0),I(A,y,At(E,0,rt(E.length))),y+=4}else I(A,y,At(w,0,rt(w.length))),y+=4;I(A,y,m[b.tag]),y+=4,I(A,y,b.data.length),y+=4}for(const b of o){const w=m[b.tag];A.set(b.data,w)}if(o.find(b=>b.tag==="head")){const b=m.head,w=function(E,P){const x=P+8,S=[E[x],E[x+1],E[x+2],E[x+3]];I(E,x,0);const D=2981146554-(At(E,0,rt(E.length))>>>0)>>>0;return E[x]=S[0],E[x+1]=S[1],E[x+2]=S[2],E[x+3]=S[3],D>>>0}(A,b);I(A,b+8,w)}return A.buffer}const Fe={parseTab(a,t,i){const r={tables:[],ids:{},off:t};a=new Uint8Array(a.buffer,t,i),t=0;const n=C,h=n.readUshort,o=h(a,t+=2);t+=2;const c=[];for(let u=0;u<o;u++){const f=h(a,t),d=h(a,t+=2);t+=2;const g=n.readUint(a,t);t+=4;const v=`p${f}e${d}`;let p=c.indexOf(g);if(p===-1){let m;p=r.tables.length,c.push(g);const A=h(a,g);m=A===4?this.parse4(a,g):A===12?this.parse12(a,g):{format:A},r.tables.push(m)}r.ids[v]=p}return r},parse4(a,t){const i=C,r=i.readUshort,n=i.readUshorts,h=t,o=r(a,t+=2);t+=2;const c=r(a,t+=2)>>>1,u={format:4,searchRange:r(a,t+=2),entrySelector:0,rangeShift:0,endCount:[],startCount:[],idDelta:[],idRangeOffset:[],glyphIdArray:[]};t+=2,u.entrySelector=r(a,t),t+=2,u.rangeShift=r(a,t),t+=2,u.endCount=n(a,t,c),t+=2*c,t+=2,u.startCount=n(a,t,c),t+=2*c;for(let f=0;f<c;f++)u.idDelta.push(i.readShort(a,t)),t+=2;return u.idRangeOffset=n(a,t,c),t+=2*c,u.glyphIdArray=n(a,t,h+o-t>>1),u},parse12(a,t){const i=C.readUint;i(a,t+=4),i(a,t+=4);const r=i(a,t+=4);t+=4;const n=new Uint32Array(3*r);for(let h=0;h<3*r;h+=3)n[h]=i(a,t+(h<<2)),n[h+1]=i(a,t+(h<<2)+4),n[h+2]=i(a,t+(h<<2)+8);return{format:12,groups:n}}},Ce={parseTab(a,t,i){const r=C;t+=18;const n=r.readUshort(a,t);t+=2,t+=16;const h=r.readShort(a,t);t+=2;const o=r.readShort(a,t);t+=2;const c=r.readShort(a,t);t+=2;const u=r.readShort(a,t);return t+=2,t+=6,{unitsPerEm:n,xMin:h,yMin:o,xMax:c,yMax:u,indexToLocFormat:r.readShort(a,t)}}},Pe={parseTab(a,t,i){const r=C;t+=4;const n=["ascender","descender","lineGap","advanceWidthMax","minLeftSideBearing","minRightSideBearing","xMaxExtent","caretSlopeRise","caretSlopeRun","caretOffset","res0","res1","res2","res3","metricDataFormat","numberOfHMetrics"],h={};for(let o=0;o<n.length;o++){const c=n[o],u=c==="advanceWidthMax"||c==="numberOfHMetrics"?r.readUshort:r.readShort;h[c]=u(a,t+2*o)}return h}},Me={parseTab(a,t,i,r){const n=C,h=[],o=[],c=r.maxp.numGlyphs,u=r.hhea.numberOfHMetrics;let f=0,d=0,g=0;for(;g<u;)f=n.readUshort(a,t+(g<<2)),d=n.readShort(a,t+(g<<2)+2),h.push(f),o.push(d),g++;for(;g<c;)h.push(f),o.push(d),g++;return{aWidth:h,lsBearing:o}}},Ut={cmap:Fe,head:Ce,hhea:Pe,maxp:{parseTab(a,t,i){const r=C;return r.readUint(a,t),t+=4,{numGlyphs:r.readUshort(a,t)}}},hmtx:Me,loca:{parseTab(a,t,i,r){const n=C,h=[],o=r.head.indexToLocFormat,c=r.maxp.numGlyphs+1;if(o===0)for(let u=0;u<c;u++)h.push(n.readUshort(a,t+(u<<1))<<1);else if(o===1)for(let u=0;u<c;u++)h.push(n.readUint(a,t+(u<<2)));return h}},glyf:{parseTab(a,t,i,r){const n=[],h=r.maxp.numGlyphs;for(let o=0;o<h;o++)n.push(null);return n},Si(a,t){const i=C,r=a.zi,n=a.loca;if(n[t]===n[t+1])return null;const h=J.findTable(r,"glyf",a.ki);if(!h)return null;let o=h[0]+n[t];const c={};if(c.noc=i.readShort(r,o),o+=2,c.xMin=i.readShort(r,o),o+=2,c.yMin=i.readShort(r,o),o+=2,c.xMax=i.readShort(r,o),o+=2,c.yMax=i.readShort(r,o),o+=2,c.xMin>=c.xMax||c.yMin>=c.yMax)return null;if(c.noc>0){c.endPts=[];for(let v=0;v<c.noc;v++)c.endPts.push(i.readUshort(r,o)),o+=2;const u=i.readUshort(r,o);if(o+=2,r.length-o<u)return null;o+=u;const f=c.endPts[c.noc-1]+1;c.flags=[];for(let v=0;v<f;v++){const p=r[o];if(o++,c.flags.push(p),8&p){const m=r[o];o++;for(let A=0;A<m;A++)c.flags.push(p),v++}}c.xs=[];for(let v=0;v<f;v++){const p=c.flags[v],m=!!(16&p);2&p?(c.xs.push(m?r[o]:-r[o]),o++):m?c.xs.push(0):(c.xs.push(i.readShort(r,o)),o+=2)}c.ys=[];for(let v=0;v<f;v++){const p=c.flags[v],m=!!(32&p);4&p?(c.ys.push(m?r[o]:-r[o]),o++):m?c.ys.push(0):(c.ys.push(i.readShort(r,o)),o+=2)}let d=0,g=0;for(let v=0;v<f;v++)d+=c.xs[v],g+=c.ys[v],c.xs[v]=d,c.ys[v]=g}else c.parts=[],c.endPts=[],c.flags=[],c.xs=[],c.ys=[];return c}}},J={parse(a){const t=new Uint8Array(a);C.readASCII(t,0,4)==="wOFF"&&(a=Re(a));const i=new Uint8Array(a),r=Ut,n={},h={zi:i,Di:0,ki:0};for(const o in r){const c=o,u=J.findTable(i,c,0);if(u){const[f,d]=u;let g=n[f];g==null&&(g=r[c].parseTab(i,f,d,h),n[f]=g),h[c]=g}}return[h]},findTable(a,t,i){const r=C,n=r.readUshort(a,i+4);let h=i+12;for(let o=0;o<n;o++){const c=r.readASCII(a,h,4);r.readUint(a,h+4);const u=r.readUint(a,h+8),f=r.readUint(a,h+12);if(c===t)return[u,f];h+=16}return null},T:Ut,B:C};class Se{Li(t){var r;const i=[];return(r=t.cmap)!=null&&r.tables?(t.cmap.tables.forEach(n=>{if(n.format===4){const h=this.Oi(n);i.push(...h)}else if(n.format===12){const h=this.Bi(n);i.push(...h)}}),[...new Set(i)]):[]}Oi(t){const i=[];if(!(t.startCount&&t.endCount&&t.idRangeOffset&&t.idDelta))return i;for(let r=0;r<t.startCount.length;r++){const n=t.startCount[r],h=t.endCount[r];if(n!==65535||h!==65535){for(let o=n;o<=h;o++)if(this.Ii(t,o,r)>0)try{const c=String.fromCodePoint(o);i.push(c)}catch{}}}return i}Bi(t){const i=[];if(!t.groups)return i;for(let r=0;r<t.groups.length;r+=3){const n=t.groups[r],h=t.groups[r+1],o=t.groups[r+2];for(let c=n;c<=h;c++)if(o+(c-n)>0)try{const u=String.fromCodePoint(c);i.push(u)}catch{}}return i}Ii(t,i,r){if(t.idRangeOffset[r]===0)return i+t.idDelta[r]&65535;{const n=t.idRangeOffset[r]/2+(i-t.startCount[r])-(t.startCount.length-r);if(n>=0&&t.glyphIdArray&&n<t.glyphIdArray.length){const h=t.glyphIdArray[n];if(h!==0)return h+t.idDelta[r]&65535}}return 0}}class Ue{constructor(t){l(this,"Hi");l(this,"Gi");l(this,"Z");this.Z=t,this.Hi=document.createElement("canvas"),this.Gi=this.Hi.getContext("2d",{willReadFrequently:!0,alpha:!0})}Qi(t,i,r,n){const h=t.length,o=Math.ceil(Math.sqrt(h)),c=Math.ceil(h/o),u=i.width*o,f=i.height*c;this.ji(u,f),this.Ni(t,i,o,r,n);const d=this.Z.Pi(u,f,1,{filter:"nearest"});return d.it(this.Hi),{framebuffer:d,columns:o,rows:c}}ji(t,i){this.Hi.width=t,this.Hi.height=i,this.Hi.style.width=t+"px",this.Hi.style.height=i+"px",this.Gi.imageSmoothingEnabled=!1,this.Hi.style.imageRendering="pixelated",this.Gi.clearRect(0,0,t,i),this.Gi.textBaseline="top",this.Gi.textAlign="left",this.Gi.fillStyle="white"}Ni(t,i,r,n,h){const o=n/h.head.unitsPerEm;for(let c=0;c<t.length;c++){const u=c%r,f=Math.floor(c/r),d=t[c].glyphData;if(!d)continue;const g=d.advanceWidth*o,v=u*i.width,p=f*i.height,m=v+.5*i.width,A=p+.5*i.height,y=Math.round(m-.5*i.width),b=Math.round(A-.5*n),w=y+.5*(i.width-g),E=b+h.hhea.ascender*o;this.Xi(d,w,E,o)}}Xi(t,i,r,n){if(!t||!t.xs||t.noc===0)return;let{xs:h,ys:o,endPts:c,flags:u}=t;if(!(h&&o&&c&&u))return;this.Gi.beginPath();let f=0;for(let d=0;d<c.length;d++){const g=c[d];if(!(g<f)){if(g>=f){const v=i+h[f]*n,p=r-o[f]*n;this.Gi.moveTo(v,p);let m=f+1;for(;m<=g;)if(1&u[m]){const A=i+h[m]*n,y=r-o[m]*n;this.Gi.lineTo(A,y),m++}else{const A=i+h[m]*n,y=r-o[m]*n;if(m+1>g){const w=i+h[f]*n,E=r-o[f]*n;if(1&u[f])this.Gi.quadraticCurveTo(A,y,w,E);else{const P=(A+w)/2,x=(y+E)/2;this.Gi.quadraticCurveTo(A,y,P,x)}break}const b=m+1;if(1&u[b]){const w=i+h[b]*n,E=r-o[b]*n;this.Gi.quadraticCurveTo(A,y,w,E),m=b+1}else{const w=(A+(i+h[b]*n))/2,E=(y+(r-o[b]*n))/2;this.Gi.quadraticCurveTo(A,y,w,E),m=b}}this.Gi.closePath()}f=g+1}}this.Gi.fill()}}class Lt{Yi(t,i){const r=t.cmap;if(!r||!r.tables)return 0;let n=0;for(const h of r.tables)if(h.format===4?n=this.Ki(i,h):h.format===12&&(n=this.Wi(i,h)),n>0)break;return n}Zi(t,i){const r=i.codePointAt(0);return r===void 0?0:this.Yi(t,r)}qi(t,i){const r=t.hmtx;return r&&r.aWidth&&r.aWidth.length!==0?i<r.aWidth.length?r.aWidth[i]:r.aWidth[r.aWidth.length-1]:0}Vi(t,i){const r=i/t.head.unitsPerEm,n=t.hhea.ascender*r,h=t.hhea.descender*r,o=t.hhea.lineGap*r;return{ascender:n,descender:h,lineGap:o,lineHeight:n-h+o,unitsPerEm:t.head.unitsPerEm,scale:r}}Ki(t,i){const r=i.endCount.length;let n=-1;for(let h=0;h<r;h++)if(t<=i.endCount[h]){n=h;break}if(n===-1||t<i.startCount[n])return 0;if(i.idRangeOffset[n]===0)return t+i.idDelta[n]&65535;{const h=i.idRangeOffset[n]/2+(t-i.startCount[n])-(r-n);if(h>=0&&h<i.glyphIdArray.length){const o=i.glyphIdArray[h];return o===0?0:o+i.idDelta[n]&65535}}return 0}Wi(t,i){const r=i.groups.length/3;for(let n=0;n<r;n++){const h=i.groups[3*n],o=i.groups[3*n+1],c=i.groups[3*n+2];if(t>=h&&t<=o)return c+(t-h)}return 0}}class Le{constructor(){l(this,"Ji");this.Ji=new Lt}tr(t,i,r){let n=0;const h=this.Ji.Vi(r,i),o=h.lineHeight;for(const c of t){const u=this.Ji.Zi(r,c);if(u===0)continue;const f=this.Ji.qi(r,u)*h.scale;n=Math.max(n,f)}return{width:Math.ceil(n),height:Math.ceil(o)}}}class Ne{constructor(){l(this,"sr");this.sr=new Lt}er(t,i){const r=[],n=new Map;return t.forEach((h,o)=>{const c=h.codePointAt(0)||0,u={character:h,unicode:c,color:this.ir(o),glyphData:this.rr(i,h)};r.push(u),n.set(h,u)}),{array:r,map:n}}ir(t){return[t%256/255,Math.floor(t/256)%256/255,0]}rr(t,i){const r=i.codePointAt(0)||0,n=this.sr.Yi(t,r);if(n===0)return null;let h=0;t.hmtx&&t.hmtx.aWidth&&n>0&&t.hmtx.aWidth[n]!==void 0&&(h=t.hmtx.aWidth[n]);const o=J.T.glyf.Si(t,n);return o?{...o,advanceWidth:h}:null}}class nt{constructor(t,i=16){l(this,"nr");l(this,"hr",[]);l(this,"ar",new Map);l(this,"cr");l(this,"lr",16);l(this,"ur",0);l(this,"dr",0);l(this,"vr",{width:0,height:0});l(this,"pr");l(this,"gr");l(this,"mr");l(this,"_r");l(this,"yr");l(this,"Ar",!1);this.lr=i,this.gr=new Se,this.mr=new Ue(t),this._r=new Le,this.yr=new Ne}async wr(t){if(this.Ar)return;let i;if(t){const r=await fetch(t);if(!r.ok)throw new R(`Failed to load font file: ${r.status} ${r.statusText}`);i=await r.arrayBuffer()}else i=await(await fetch("data:font/woff;base64,d09GRgABAAAAABbwAAoAAAAAfywAAQABAAAAAAAAAAAAAAAAAAAAAAAAAABjbWFwAAAA9AAAAbsAAAkgIO8lSWdseWYAAAKwAAAOfgAAaLS4ctN0aGVhZAAAETAAAAAsAAAAOCi8/PVoaGVhAAARXAAAABkAAAAkCwEFAmhtdHgAABF4AAAAhQAABAQEAIOAbG9jYQAAEgAAAAKUAAAECAAy54BtYXhwAAAUlAAAABgAAAAgASIAgm5hbWUAABSsAAAB5wAAA6RWz85KT1MvMgAAFpQAAABFAAAAYM+QEyRwb3N0AAAW3AAAABQAAAAgAGkANHja7dRPSFRRFMfx38wdXblw4cJC7M0bz60gWlULGUFctWgR0UIQQkmDyn27kpAQaaEO2jhWJuafiQFtcDJtSqGhiFZtot5x3jzEVQQhlRJcOb0khiRc1+J94R64uw8cOADCAJT/avwZAiIpRCK3/P999KAS9biOSUxhBhlksYjnWMFrvME7vMca1vEF37ANAwkNqYRKqkk1rdLqscqpVVVQryzbils3rJnocHTWPmgfso/ap+0OuysWjlXHogQKUxVVUw3VUh010DE6QXHqph7qpT66TQmaoAxlaZnyVKC39FHHdbNu0e36or6kr4r4TgsTu75HmEcOy76vUPaVsIFNbOHHX74F3/fyD9+A7ztg1//2de76rH18Z8u+AXqwx/dBN5Z9XfqKiKzLqqzIC8nLkixKThZkXuZkVh7KuNyTuzImKRmVO1KxU7ETMtvmu/lqPptPxjOuKXo3vcveYQ+l2lKlO+Im3H632z3vnis+KaaLKc7zM87yHGc4zdM8zkke5H6+xp3cwRe4jVv5DLdwE5/ik3ycj3Cdk3eWnKfOmDPqJJ3hX9sOCvpPC65QcIWCgv5pPwGY9ak7AHja3V07ryQ5FT62axjQaDWsVmiCFQJpA4QINiAgICDYgICAgICAgICAgICAgIAA//AuF9Xlsn2etqv67iIY6apv3+6yj31e33nYA95FiD4uAAHeA7jyLzoA2Paf/Lp/Dun5W8x/Be/AxyCfO79fnj+e25/ZZzlewcM+3wIhwpfwE/Sc9e8YDyLU1ycF5XUD+to+L98O/An8VKQj0lnOtYdM776OJ71fTVC8//N1rLKDGsXl863OjSl5/iyIUu0HjJ+d+uO3rX3rXd33d/DjfR0/h6/n1iK5kWf36Hf2AxpVa6zU7ZLTnt3Q3wN7+tK6MVcBjUP/3vj56diHuT3YxVbKSvl9FdJHeFE4jfmJn2DSSOS9fuJ27SH7umuoL3oLWGOLxh3f2b8bnn/5Ql8n5SEYFD33q/0lKXxwjQfDOZtGgyEz+W8X5txl2zVb9MXO2S8HfD3ncbHousP6WPV2i/R7C+c06HK5ye/lfdl3Bj5Q2qitaLYhgLQWZY+fr/65A9Ly1r10jI783HOffJWZJ6ee8uuB0nmMXeSqWvRz5Dx/tiWf7H0OF+1DuK7vhy4ffP8An/doofqbQNXTqmlNT1c0v4/Eqpy29eBMLHty0PKZoCMW6VqRlDXNwvbD4RW2MYfyjNdXV3LaJuEdKgXcHvX2nHiz27RxHmC9w/qn0AbS+mJbSeX8pO1zlbbogPK7zJxAs3iFtrV8W/LHsHVZvxJ6Rlt7gum1nvjpnHNO4gFJqaoBWOKFVwKqAangorb2j5KKvG5N31O1ownZdhcZH7FuT9nznoxRv4ylrbfvzA9D88GO8uGDtgN0/1O09ntFlv3YhbIf/ml3/dPGqvi6rCMw6jNd53PM07BnK2eCJXmnzxrruI8ObOuxmZ/dxbd5nS77U7I/xaMdLm5/DXzuLLcwXlOLIVQ0an722pou6raGnpp/QYiwR0V5nwDL0Gk/f2TSUalIGOkSvfNAcVNCesV9a2q675FtsVAk4c5GPEfZT27XVqT9PmpxXtVn0577KO3MGrkXs+xKkHZk6EMUS440uO01t+Ark8yGYYjtsleqoPQksLuF0kOd/7TtbZ3XvNalNRNLqK+90fEDTAfy1FWWOBcT9fkTmrExe+viDNccYF+JqHeIbyBtlYxhStbmSc8DSX9/rICoXkkGSMfEJR7QsYAjNlhgn6iNS7T0AtakNnvaJ+W1TeQdeIxHaHtXaMtU+GP3CL5v+2RqHfc5JC6k9DJ6HhFaHHfu9Lc1Z5HlB5JWNOc8NupiUSlpa/7NIx0W0Ra10YcOVWnDfqhodmgI1CM5nrJS1DYKlMmyeAmoZaLrQnmNSRxAV7qZ0u0sr2Q8WbzUrRivE200nZ+x371Yj+idQH+bsOAFD16woZXuheBJI85UYyA+Ht17bJsTKLHHG+tuQpJX/AGX4eu2lq+vh8gQPgaLUpk1h7fcb1SJ4LEnGb+rdUHRHw96riVV36L5EgdqHNByqCTy82hnkrSSk3k5KTNWnJZ/buTlOvQngiceAkd4OHPz0K+tdOmGUYwJht2kcuBEntSRPOmZfyc40tFqD40IQeb2goGZvKIVzW4G5DMcQ4qOY3zVRzpmo1sMg+U1VemumtLofjFeCcxqJIUnM2vJuQeCHiOOwx4ss7pF6u+PtXxmZApbjCti22JtA+hVxUw7z6Xs2sSzMkeklSLPfwalYkjjt/0bHye4gKkXeaig5MpILVRiAd1vCrtP5Aj5uaN2PF1zxrE7koOgaY2PPL9FkccCKlprUZGr+zr0tw56iCvwGBTs+MFFxVbWeTaCQTj2WCBM1NnoWNxOBpBZU8f00hPsFDr+15wPevNsJG4IN+OGwKyWzKnW8S/GDUHZOd+44SsvbDvCuhYUTQSaQSFeWtoR4Xc833VimVzRvgm58QwZFQTthQ+awgQTeuVI7gLrF638Yixi+ot4RVZ5niDPFxBediyXNj++jUWDgkU3Zc96fDKwv4iiylyA4nalMkLX9C1hf24DNNkZyNDkflOPF4BqwdYbv1vLG9VX03W96PVKiCq+A01i5utY2d9YfSMP0qvQ7eFQUHSKvNfpCl21nqNafqf1UQksqfVe1PEPPNiJpY81iZoP119ZTUHojdpseMYqec5zr/2Jgo695rmycZWzSgOpXzMpbFrHu1Zmq/xA8pX3cgEQZU1/YzaexuQbXIoxF9THdaEzz9VaE5fgNVIPR/sIS8fQyipam9JXqHdOtPEIRllqzP7Ewh9063Z2IYH+GiLNUPFXJIcEM4RYc7bEkjwQL4/1fx+aHL8/62Of5vo3y+p92QX2fh18zrNFcPX9sfZAdBDZu8vxCM4clX31Qr9RrLPkDDDau8v8LZRar2N8lSOj1NGsLJeBZam1TIuwpzwepL3CJAvyANsPnj3BAzsD3a5X6ydEaZUSs50b7g2JrYcyG2lRL+xl+jD+Gfod33w82P0FTuYREa3c70CRS82XCtxIueJHXuIMB6tMt+x7lf7m5U4tyK9L3smuLrxqDxYPI30rYzk2h2NzgPXqAvPrQdqUxvdWF2zVwDrHCq0RoI0Hcrzcn9D8BMxYEMszZBzooqa/jsTxSeTthXTm9FC2n+pYEh8uVqyL9436quMD6pnK7njZM6msy4uYsunVquBSi4clVn8gblYc96TFyF04ll2oqCB300cDIbPxrZoqXZ1DHWvNh2irrNxstSaZYa2VB333tOr9mRcx7ETmXKmSFz6GkidstKjZFE8qIX26eG8KoS/b9uij9GFOiwFIVj5NyErT8rZGstdmD4lc4/xaNevd1uwOPCLX7Ems2TTc81MrUVmzyqdOr1v1PCPat9jmQfUYJEEbzNCSse4DevSYCIXal+bDCC3I2+EeTFKd7ltnFNN0sGLIfRcGfSWKD0BPANWTQIqcNtsaAON/1A/BeywPGhybs2ZEA1sH9FbgDMpTQx5L5k4fN/RR8lBHvif2ftB7oa8isVdrdWDxp/Hp6N8MsdUgqdS0M12EZrhC7TpJZZLZOZelRdeDUyffq3s6xPhztK4Xd9h6f4pIieNu4lI/jEN1XEMjbafK6lry/jkOYedyVMyp2vaHGlM8zBjCkdi28NdrNldgLa/a0orYtN6OwoMh7vPAsxb9eNTDrOdJBWuXsb6En8Evb5yTrJw1Y1XTHnmCFNtPkhHnuN+8QwHGi3JUJf4zeaTJsBpFdnik5V4fZq510ifEHMf7M55f2fteR1DJ73gzf4vyO42Or3Z5mZcWdlY6wb3sRvd0olKfGeaCWm5yGEtDwzLH6yPS95wmcVb2BBrYzig5tGb7Bvb5fkyfvW2nRhlxF3cyz8qGOF//eVLXq7P4oQTop9UASTKPr91h1zu5wu753DbqtXUO8pOT6wzdnQfWn2X3Csr5ktxP4FUmlBHHPThBO0mQ6wTFVxbM5mPCeXWP7ha4YDf8BdvAeaGd/XntlgHlW2eMFAR2CBPYAQzPrGeVy1ieYCOQdtpXGZyss4F2rkr5W8tJh06NTd/HGi+1vbiPN6JTeSfP5k0ihAhRQwgad9wQ1dhoKAntU87DfZy/K8SuEsPg82VQRU5xUGU+ZVrp8SMYtOHiwFC+Z1jLG2dqRuhAw01cZ2qeXBk/ROjaAS1TIuKHVp+Fi5YMrHqqahlY3YbJ0E/N2uUTq/0Cvt717Vfwa/gNfAO/hd/B7+EP8Ef4E/wZ/gJ/hb/B3+Ef8E/4F/z7nla+5T+Afp1wHdQRH/F/+/lF6VrSbuP4v/18VHMVmm7q6TX/Czha0mxJrf+YyNyOfRcYeKSap3+b8UufB8GnJSdec6Iu+toF6nHkaeZxvJ5h4PVgj3ILMz5teArdxnr8/PPoCXqiuvR91zoh2pvS8b0SqUD1FLPubHPaK9Q5lU+GzwI3PgfCOsB9NORgqm5OqfVxLMd1L9+A/s2s+0/0a93MTd3NNRHapruGQLnhZTSzpBMuYFNaz7N5RffPo/MnV2zac3wfRX6Vng0As1cTmE5M38U0eS+H0rvZxXtg6460jlQTZ3Snxw+pO9TKz+mOB5vffTs6umGj+UjMb3/QKfndvlP47UsVAO9Drzo11h+T/rF09Po0st98jHsKh31Ruj2UnbYWLuEd/pM9wOwpZ+KqccfWNZsc4F6c3jtf2ou7Ca6akqXRPThzsadua+/4hq7vgmn6uqux6bXw6AjnLMJbXMM5Ixwi8mR2rc3AOfg2nrs4zZlnDFaChbCtk/bwilwMfBxc0iMYy0MX40x2o/ft9D2Znn9Kl+3MO90HUb747jnzjpyCKVeTuij6DllsctyiUzXN0dgE9We1yK54WBffFqtew9TXpbYfy7dILWH/SXxmqeg4zlvRsZfIbuFnic0SHfRtfj4vsaVq532jl/QpYBykzpe/jec7n1uOmhuETi2xzM5vfy01xQC0vkp6PiKpDd07x6qcUc719K0A1YZjpvLivftqNpzxV/tDtXPTWFrbaowzXj+czsG+nmMt/bQspzj7fnvxeeuG4O/s/Xe412VW3+5VuPT+EV97/r++14Gc3ZvQRHrXMz91IrWHZ4FnK7WOVGjJPfAO3R0BczdLKuevQd5LPVsXd/X8PK6Ll2jK0/NM7P4V1PuI51FvsEMV+KhV4T2+22IQF85a0FlLWXs/IHTOX1B5CGCeEDh6V2ZiTK+eee/dnNjOa2xXz2zndd7sq+XYEZ/Gx/exoK5PoOceWNdnef9W9KCT9EYXqkrPxuhC9GA7faMXpHef1smLTDe1qaDY1N4ozLI4fqsHlwpf+3Cu9F1E/Z4AajG3V8430/6bCdq8QQs9b4OqJyQa1+6BACWaTPI8zrROa//7QGJ19U4tHeTTtePNqu3PnVhXJFSjzZFz4eo3Ndqidi/O6J5Z7X+VsS3cYki51T35Iv+merFeuGe69cbJM3Jq1Fn4kUA5rze4o9CRs22iy5jMsYLMS8g5/wOjbDW/AAB42mNgZGBgAOIzT9tXxvPbfGVgYGEAgZokCXVkmgUizsHABFLNwAAACJYG1HjaY2BkYGBhAAEIyc7AwMiAAhgZAQHPABQAAAB42r1TwRaAIAgD88P59PRA0hxUlw578mBDQOwi0i+oDUzb7nC/xyKH8SuwHH/jSx83jnE745c1RO44G9E1WTE14AQtYvKO6PN6BXRW5EONgCazSS4VXiere+sp7F7cQeSp7Pe2YkaxN7fVFhg/8z/1hfnfaBXnZ8k7wNzp/y13+wRWwErCAAAAeNpl0ylUVVEUBuCtoiKgoiIzAjIIMj9mZBZYMsmMjwcuBhEIBoPBYDAYDAaDwWA0GAwGgsFgMBgMBoPBYDAYDAaDweBnlrX+9e6955x/2oeI//664HbEgTL4HnHwZ8Sh1/AlIm0W3kUc3oN9+BFxJBva4E3E0SvwLCIdR/qniGO98Coiw3vG04hMv5n/fj9GZBUD3iz8xx9FnMiBJxEn0+E+/IrIppNt/VQzvITfEadH4HnEmUG4BV8jchaBn7NZgCMXdy7uXGfzeMjjKZ/PfBwF9hTYU/AhotC5QtpFtIt4K7oLnyOK6RXTKP4TUcJDCe5zNXAHcJTiKOWxlEZZPeAo00U5b+XyltM9vw24KvBWyFzpTOWLiCr5qu6BPdV0qx+Cni+sAc4a3mvw1nqu/RZxsRJkrEsDWeo2wAzq8dY/iGgwpwbfGvTdaA6NOmnUb5PnpiTY00S3SXfN/DU/BustdFrMq8VagqcE/YReEjK3+t4qayuPbTTbdNH2PqJdL+06a5e33VoHjg7vHdY7cXTK2ekedPHWha+b5279ddPo1ndPPuDrkbkH3yX5e/XXy3OvzH34+sy132+//P14B/AO6GuA3qBOB3U6hH/It2Haw2Y2rI9hHV6WdcSsR6eAl1GZx3Qwpr9xcxv3PqGDCbyTvE3KM+muT+lwypkpe6bNaZqfaX6v8j7D8wyNGbwzbyNmdTMrzxxfc9bndDFn5vM8zds37x4smMeCHhf5WTKHJb0uuc/L/C7bs4zrGr2kO5m0ntRZkv8VfazIkvI9RSelg5ReUrKvOrvqHq7p4Lr5retx3fcN/5Mb+Dfs25RpE/8mji0etqzfwLHteZufmzrZobfj/K5ednna0/fe/l+Pca7seNpjYGRgYGRkaGBQYAABJgY0AAAP+ACmeNp1ksFO20AQhv8NgRJaUApSy61LDxVc4uAjNxoJReoNKdCrYy8hZb1rrTcIuPMKfaY+QM899RH6AP3tDJEKqlcefzvzz/xrywD21ScoLK9N3ktW5E3hDl6hL7zG7HvhLrMfhNfxGonwBjUnwj2uz8JbzH4R3sZbPArvIMV34T28wQ+6qG6Puz5+Civyb+EOO/4Ir6GvOsJdaLUrvI53KhXeoGYs3MOu+iq8hai+CW/jo/olvIOiA+E97HeKw/xIp8M0nYQ6O/MunpvZwmbhafv01JK/MKGee6ePB8N/JCFzN6dO+8o4bee5cbnRM+NMyKyuFqHytdHR3MXSF0ZfNQOn93rVORoNm4l64ua3NMjsdYxVfZIkeTBZZC73ZeldPfBhllSLKR0KX2ZzlzyY4BO2JmNjrdeXPtjiAIfIcQTNbz/knWKCgBoZzuDhEHEOgxkWsMyFF9Xne/1Mf8Fdo5i3dY1jDOjz/ymB0eEGp63ao2J/Q5YT8pabqOnQsGn1lvuKjoHRc05Tj4x3jCUzRZu5Wp1winvGl54jruHqjI3C0fVW3qDxuWZ/pEvNPzjhylkxrETR5fQoW09HzYDPwJMm7emm8g5Fq8nIjpWHdronLV0TjJmxXJ4nuGwnWPYcAH8BoeumrAB42mNgYmFgnMDAysDCxMDEAAIQGoiNGc6A+CwMENDAwNDNwFDwGMpliHT00WNwYFBQy4aogJCMgSCSGcJTYGAAAEBYBpIAAAB42mNgZoCANAZjIMnIgAYADecAng==")).arrayBuffer();await this.br(i),this.nr=J.parse(i)[0],await this.Cr()}Mr(t){if(t===void 0)return this.lr;this.lr=t,this.vr=this._r.tr(this.hr.map(r=>r.character),this.lr,this.nr);const i=this.mr.Qi(this.hr,this.vr,this.lr,this.nr);this.cr=i.framebuffer,this.ur=i.columns,this.dr=i.rows}async Fr(t){try{const i=await fetch(t);if(!i.ok)throw new R(`Failed to load font file: ${i.status} ${i.statusText}`);const r=await i.arrayBuffer();await this.br(r);const n=J.parse(r);if(!n||n.length===0)throw Error("Failed to parse font file");this.nr=n[0],await this.Cr()}catch(i){throw new R("Failed to load font: "+(i instanceof Error?i.message:"Unknown error"),i)}}async br(t){const i=Date.now();this.pr=new FontFace("CustomFont_"+i,t),await this.pr.load(),document.fonts.add(this.pr)}async Cr(){const t=this.gr.Li(this.nr),{array:i,map:r}=this.yr.er(t,this.nr);this.hr=i,this.ar=r,this.vr=this._r.tr(t,this.lr,this.nr);const n=this.mr.Qi(this.hr,this.vr,this.lr,this.nr);this.cr=n.framebuffer,this.ur=n.columns,this.dr=n.rows,this.Ar=!0}$r(t){const i=this.ar.get(t);return i?i.color:[0,0,0]}Pr(t){return Array.from(t).map(i=>{const r=this.ar.get(i);return r?r.color:[0,0,0]})}gt(){this.cr.gt(),document.fonts.delete(this.pr)}get Tr(){return this.Ar}get fontFramebuffer(){return this.cr}get characterMap(){return this.ar}get characters(){return this.hr}get textureColumns(){return this.ur}get textureRows(){return this.dr}get maxGlyphDimensions(){return this.vr}get fontSize(){return this.lr}get font(){return this.nr}}class Nt{constructor(t,i,r){l(this,"Er");l(this,"Rr");l(this,"j");l(this,"N");l(this,"Sr");l(this,"zr");l(this,"kr");l(this,"Dr");l(this,"Lr");l(this,"Or",!1);l(this,"Br",new Set);this.kr=t,this.Dr=i,this.Lr=r,this.te()}Ir(){if(this.j=this.Er*this.Dr,this.N=this.Rr*this.Lr,this.Sr=Math.floor((this.kr.width-this.j)/2),this.zr=Math.floor((this.kr.height-this.N)/2),this.Br.size>0)for(const t of this.Br)t()}Hr(t){this.Br.add(t)}Gr(t){this.Br.delete(t)}te(){this.Or||(this.Er=Math.floor(this.kr.width/this.Dr),this.Rr=Math.floor(this.kr.height/this.Lr)),this.Ir()}Qr(t,i){this.Dr=t,this.Lr=i,this.te()}get cellWidth(){return this.Dr}get cellHeight(){return this.Lr}get cols(){return this.Er}set cols(t){this.Or=!0,this.Er=Math.max(1,Math.floor(t)),typeof this.Rr!="number"&&(this.Rr=Math.max(1,Math.floor(this.kr.height/this.Lr))),this.Ir()}get rows(){return this.Rr}set rows(t){this.Or=!0,this.Rr=Math.max(1,Math.floor(t)),typeof this.Er!="number"&&(this.Er=Math.max(1,Math.floor(this.kr.width/this.Dr))),this.Ir()}get width(){return this.j}get height(){return this.N}get offsetX(){return this.Sr}get offsetY(){return this.zr}responsive(){this.Or=!1}gt(){this.Br.clear()}}const De=/^rgba?\(([^)]+)\)$/i;function yt(a){return Number.isNaN(a)?0:Math.max(0,Math.min(255,a))}function Oe(a){if(!a)return null;const t=a.trim().toLowerCase();if(!t)return null;let i=null;return t.startsWith("rgb")&&(i=function(r){const n=De.exec(r.trim());if(!n)return null;const h=n[1].split(",").map(d=>d.trim());if(h.length<3)return null;const o=yt(parseFloat(h[0])),c=yt(parseFloat(h[1])),u=yt(parseFloat(h[2])),f=h[3]!==void 0?255*Math.max(0,Math.min(1,parseFloat(h[3]))):255;return[o,c,u,Math.round(f)]}(t)),i?i[3]===0?null:i:null}class Dt{constructor(t={}){l(this,"kr");l(this,"jr",null);l(this,"Nr",!1);l(this,"Xr");this.Nr=t.overlay??!1,this.Nr&&t.canvas?(this.jr=t.canvas,this.kr=this.Yr(),this.Xr=!0,this.Kr()):t.canvas?(this.kr=t.canvas,this.Xr=!1):(this.kr=this.Wr(t.width,t.height),this.Xr=!0),this.kr.style.imageRendering="pixelated"}Wr(t,i){const r=document.createElement("canvas");return r.className="textmodeCanvas",r.style.imageRendering="pixelated",r.width=t||800,r.height=i||600,document.body.appendChild(r),r}Yr(){const t=document.createElement("canvas");t.className="textmodeCanvas",t.style.imageRendering="pixelated";const i=this.jr.getBoundingClientRect();let r=Math.round(i.width),n=Math.round(i.height);if(this.jr instanceof HTMLVideoElement){const c=this.jr;(r===0||n===0)&&c.videoWidth>0&&c.videoHeight>0&&(r=c.videoWidth,n=c.videoHeight)}t.width=r,t.height=n,t.style.position="absolute",t.style.pointerEvents="none";const h=window.getComputedStyle(this.jr);let o=parseInt(h.zIndex||"0",10);return isNaN(o)&&(o=0),t.style.zIndex=""+(o+1),t}Kr(){var t;this.Zr(),(t=this.jr.parentNode)==null||t.insertBefore(this.kr,this.jr.nextSibling)}qr(){const t=[];return this.Nr&&this.jr instanceof HTMLElement&&(t.push(this.jr),this.jr.parentElement&&t.push(this.jr.parentElement)),this.kr.parentElement&&t.push(this.kr.parentElement),t.push(this.kr),t.push(document.body),t.push(document.documentElement),t}Vr(){const t=this.qr();for(const i of t){if(!i)continue;const r=Oe(window.getComputedStyle(i).backgroundColor);if(r)return r}return[255,255,255,255]}Zr(){if(!this.jr)return;const t=this.jr.getBoundingClientRect();let i=this.jr.offsetParent;if(i&&i!==document.body){const r=i.getBoundingClientRect();this.kr.style.top=t.top-r.top+"px",this.kr.style.left=t.left-r.left+"px"}else this.kr.style.top=t.top+window.scrollY+"px",this.kr.style.left=t.left+window.scrollX+"px"}Jr(t,i){if(this.Nr){const r=this.jr.getBoundingClientRect();this.kr.width=Math.round(r.width),this.kr.height=Math.round(r.height),this.Zr()}else this.kr.width=t??this.kr.width,this.kr.height=i??this.kr.height}tn(){const t=this.kr.getContext("webgl2",{alpha:!0,premultipliedAlpha:!1,preserveDrawingBuffer:!0,antialias:!1,depth:!0,stencil:!1,powerPreference:"high-performance"});if(!t)throw new R("`textmode.js` requires WebGL2 support.");return t}gt(){const t=this.kr.getContext("webgl")||this.kr.getContext("webgl2");if(t){const i=t.getExtension("WEBGL_lose_context");i==null||i.loseContext()}this.Xr&&this.kr.parentNode&&this.kr.parentNode.removeChild(this.kr)}get canvas(){return this.kr}get targetCanvas(){return this.jr}get width(){return this.kr.width}get height(){return this.kr.height}}function ht(a){return z(parseInt(a,16),0,255)}class U{constructor(t,i,r,n){l(this,"sn");l(this,"en");l(this,"r");l(this,"g");l(this,"b");l(this,"a");this.r=z(t,0,255),this.g=z(i,0,255),this.b=z(r,0,255),this.a=z(n,0,255),this.sn=[this.r,this.g,this.b,this.a],this.en=[this.r/255,this.g/255,this.b/255,this.a/255]}static rn(t,i,r,n){if(U.nn(t))return t;if(Array.isArray(t)){if(t.length<3)throw Error("Component tuples must include at least RGB values.");const[h,o,c]=t,u=t.length===4?t[3]:255;return U.hn(h,o,c,u)}if(typeof t=="string"){const h=t.trim();if(h.length===0)throw Error("Color strings cannot be empty.");return U.an(h)}if(typeof t=="number")return typeof i=="number"&&typeof r=="number"?U.hn(t,i,r,n??255):U.cn(t);throw Error("Unsupported color input passed to TextmodeColor.$from.")}static hn(t,i,r,n=255){return new U(t,i,r,n)}static cn(t,i=255){return new U(t,t,t,i)}static an(t){return new U(...function(i){const r=i.replace(/^#|0x/gi,""),n=(h=r).length===3||h.length===4?h.split("").map(o=>o+o).join(""):h;var h;if(n.length!==6&&n.length!==8)throw Error("Invalid hex color: "+i);return[ht(n.slice(0,2)),ht(n.slice(2,4)),ht(n.slice(4,6)),n.length===8?ht(n.slice(6,8)):255]}(t))}get rgb(){return[this.r,this.g,this.b]}get rgba(){return[...this.sn]}get normalized(){return[...this.en]}withAlpha(t){return new U(this.r,this.g,this.b,t)}static nn(t){return t instanceof U}}class Ot{constructor(t,i,r,n,h,o,c,u){l(this,"A");l(this,"Z");l(this,"ln");l(this,"un");l(this,"fn");l(this,"j");l(this,"N");l(this,"q",null);l(this,"dn",null);l(this,"vn","brightness");l(this,"pn",null);l(this,"gn");l(this,"Et",0);l(this,"Gt",0);l(this,"Qt",0);l(this,"Rt",0);l(this,"mn","sampled");l(this,"_n","fixed");l(this,"Nt",[1,1,1,1]);l(this,"Xt",[0,0,0,1]);l(this,"yn",[0,0,0,1]);l(this,"An",[[.1,0,0]]);l(this,"wn",null);this.A=t,this.Z=i,this.ln=r,this.gn=n,this.un=h,this.fn=o,this.j=c,this.N=u}conversionMode(t){return this.vn=t,this.pn=null,this.q=null,this}gt(){this.A.deleteTexture(this.ln)}invert(t=!0){return this.Et=t?1:0,this.q=null,this}flipX(t=!0){return this.Gt=t?1:0,this.q=null,this}flipY(t=!0){return this.Qt=t?1:0,this.q=null,this}charRotation(t){return this.Rt=xt(t),this.q=null,this}charColorMode(t){return this.mn=t,this.q=null,this}cellColorMode(t){return this._n=t,this.q=null,this}charColor(t,i,r,n){return this.bn(this.Nt,t,i,r,n),this.q=null,this}cellColor(t,i,r,n){return this.bn(this.Xt,t,i,r,n),this.q=null,this}background(t,i,r,n){return this.bn(this.yn,t,i,r,n),this.q=null,this}characters(t){return this.wn=t,this.Cn(t),this.q=null,this}Ai(t){this.dn!==t&&(this.dn=t,this.wn&&this.Cn(this.wn),this.q=null)}get texture(){return this.ln}get width(){return this.j}get height(){return this.N}get originalWidth(){return this.un}get originalHeight(){return this.fn}ut(){return this.q||this.ft(),this.q}xn(){}ft(){this.xn();const t=this.Mn(),i=this.Fn(),r=t.createShader(i),n=t.createUniforms(i);this.q=this.Z.materialManager.Qe(r,n)}bn(t,i,r,n,h){const o=U.rn(i,r,n,h);et(t,o.r,o.g,o.b,o.a)}Cn(t){if(!this.dn)return;const i=this.dn.Pr(t).filter(r=>Array.isArray(r)).slice(0,255);this.An=i.length>0?i:this.An}createBaseConversionUniforms(){return{u_image:this.$n(),u_invert:!!this.Et,u_flipX:!!this.Gt,u_flipY:!!this.Qt,u_charRotation:this.Rt,u_charColorFixed:this.mn==="fixed",u_charColor:this.Nt,u_cellColorFixed:this._n==="fixed",u_cellColor:this.Xt,u_backgroundColor:this.yn,u_charCount:this.An.length,u_charList:this.An}}Mn(){if(this.pn&&this.pn.id===this.vn)return this.pn;const t=this.gn.Pn(this.vn);if(!t)throw Error(`[textmode.js] Conversion mode "${this.vn}" is not registered. If this mode is provided by an add-on, make sure its plugin is installed before loading sources.`);return this.pn=t,t}Fn(){if(!this.dn)throw Error("[textmode.js] Cannot create conversion context: no active font set. Ensure $setActiveFont() is called before rendering.");return{renderer:this.Z,gl:this.A,font:this.dn,source:this,gridWidth:this.j,gridHeight:this.N}}}class H extends Ot{constructor(t,i,r,n,h,o,c,u){const f=Math.min(c/h,u/o);super(t,i,r,n,h,o,Math.max(1,Math.floor(h*f)),Math.max(1,Math.floor(o*f)))}static Tn(t,i,r,n,h){const o=t.context,c=o.createTexture();o.bindTexture(o.TEXTURE_2D,c),o.pixelStorei(o.UNPACK_FLIP_Y_WEBGL,1),dt(o,o.NEAREST,o.NEAREST,o.CLAMP_TO_EDGE,o.CLAMP_TO_EDGE),o.texImage2D(o.TEXTURE_2D,0,o.RGBA,o.RGBA,o.UNSIGNED_BYTE,r),o.bindTexture(o.TEXTURE_2D,null);const u=r.naturalWidth??r.width??r.videoWidth??0,f=r.naturalHeight??r.height??r.videoHeight??0;return new H(o,t,c,i,u,f,n,h)}$n(){return this.ln}}class Bt{constructor(t=60){l(this,"En");l(this,"Rn",null);l(this,"Sn",0);l(this,"zn",!0);l(this,"kn",0);l(this,"Dn",0);l(this,"Ln",[]);l(this,"On",10);l(this,"Bn",0);this.En=1e3/t}In(t){if(!this.zn)return;this.Sn=performance.now();const i=r=>{if(!this.zn)return void(this.Rn=null);const n=r-this.Sn;n>=this.En&&(t(),this.Sn=r-n%this.En),this.zn&&(this.Rn=requestAnimationFrame(i))};this.Rn=requestAnimationFrame(i)}Hn(){this.Rn&&(cancelAnimationFrame(this.Rn),this.Rn=null)}Gn(){this.zn&&(this.zn=!1,this.Hn())}Qn(t){this.zn||(this.zn=!0,this.In(t))}jn(t,i){if(t===void 0)return this.kn;this.En=1e3/t,this.zn&&i&&(this.Hn(),this.In(i))}Nn(){const t=performance.now();if(this.Dn>0){const i=t-this.Dn;this.Ln.push(i),this.Ln.length>this.On&&this.Ln.shift();const r=this.Ln.reduce((n,h)=>n+h,0)/this.Ln.length;this.kn=1e3/r}this.Dn=t}get Xn(){return this.zn}get Yn(){return this.kn}get Kn(){return this.Bn}set Kn(t){this.Bn=t}Wn(){this.Bn++}}class It{constructor(t,i){l(this,"kr");l(this,"Zn");l(this,"qn",{x:-1/0,y:-1/0});l(this,"Vn",{x:-1/0,y:-1/0});l(this,"Jn",null);l(this,"so",0);l(this,"eo");l(this,"io");l(this,"ro");l(this,"no");l(this,"oo");l(this,"ho");l(this,"ao",!1);l(this,"co");l(this,"lo");l(this,"uo");l(this,"fo");l(this,"do");this.kr=t,this.Zn=i}vo(t){const i=performance.now()+Math.max(0,t);i>this.so&&(this.so=i)}po(){return performance.now()<this.so}mo(t){const i=this.kr.canvas;i.style.cursor=t==null||t===""?"":t}_o(){if(this.ao)return;const t=this.kr.canvas;this.eo=i=>{this.yo(i),this.Ao(i)},this.io=()=>{this.Vn={...this.qn},this.qn.x=-1/0,this.qn.y=-1/0,this.Jn=null},this.ro=i=>{this.yo(i),this.wo(i)},this.no=i=>{this.yo(i),this.bo(i)},this.oo=i=>{this.yo(i),this.Co(i)},this.ho=i=>{this.yo(i),this.xo(i)},t.addEventListener("mousemove",this.eo,{passive:!0}),t.addEventListener("mouseleave",this.io,{passive:!0}),t.addEventListener("mousedown",this.ro,{passive:!0}),t.addEventListener("mouseup",this.no,{passive:!0}),t.addEventListener("click",this.oo,{passive:!0}),t.addEventListener("wheel",this.ho,{passive:!1}),this.ao=!0}Mo(){if(!this.ao)return;const t=this.kr.canvas;t.removeEventListener("mousemove",this.eo),t.removeEventListener("mouseleave",this.io),t.removeEventListener("mousedown",this.ro),t.removeEventListener("mouseup",this.no),t.removeEventListener("click",this.oo),t.removeEventListener("wheel",this.ho),this.ao=!1}Fo(){if(!this.ao)return;const t=this.Zn();if(t)try{if(this.Jn){const i=new MouseEvent("mousemove",{clientX:this.Jn.x,clientY:this.Jn.y,bubbles:!1,cancelable:!1});this.yo(i)}else{const i=Math.floor((t.cols-1)/2),r=Math.floor(t.rows/2);if(this.qn.x!==-1/0&&this.qn.y!==-1/0){const n=-i,h=t.cols-i-1,o=-r,c=t.rows-r-1;(this.qn.x<n||this.qn.x>h||this.qn.y<o||this.qn.y>c)&&(this.qn.x=-1/0,this.qn.y=-1/0)}}}catch{this.qn.x=-1/0,this.qn.y=-1/0}}$o(t){this.co=t}Po(t){this.lo=t}To(t){this.uo=t}Eo(t){this.fo=t}Ro(t){this.do=t}So(){return{x:this.qn.x,y:this.qn.y}}Ao(t){if(this.fo&&!this.po()){const i={position:{...this.qn},previousPosition:{...this.Vn},originalEvent:t};this.fo(i)}}wo(t){if(this.lo&&!this.po()){const i={position:{...this.qn},previousPosition:{...this.Vn},button:t.button,originalEvent:t};this.lo(i)}}bo(t){if(this.uo&&!this.po()){const i={position:{...this.qn},previousPosition:{...this.Vn},button:t.button,originalEvent:t};this.uo(i)}}Co(t){if(this.co&&!this.po()){const i={position:{...this.qn},previousPosition:{...this.Vn},button:t.button,originalEvent:t};this.co(i)}}xo(t){if(this.do&&!this.po()){const i={position:{...this.qn},previousPosition:{...this.Vn},delta:{x:t.deltaX,y:t.deltaY},originalEvent:t};this.do(i)}}yo(t){const i=this.kr.canvas,r=this.Zn();if(this.Vn={...this.qn},this.Jn={x:t.clientX,y:t.clientY},!r)return this.qn.x=-1/0,void(this.qn.y=-1/0);const n=i.getBoundingClientRect(),h=t.clientX-n.left,o=t.clientY-n.top,c=i.width/n.width,u=o*(i.height/n.height),f=h*c-r.offsetX,d=u-r.offsetY,g=Math.floor(f/r.cellWidth),v=Math.floor(d/r.cellHeight);if(g>=0&&g<r.cols&&v>=0&&v<r.rows){const p=Math.floor((r.cols-1)/2);this.qn.x=g-p,this.qn.y=v-Math.floor(r.rows/2)}else this.qn.x=-1/0,this.qn.y=-1/0}}const Be=Object.freeze(Object.defineProperty({__proto__:null,MouseManager:It},Symbol.toStringTag,{value:"Module"}));class _t{constructor(){l(this,"zo",new Map);l(this,"ko",null);l(this,"Do",null);l(this,"Lo");l(this,"Oo");l(this,"ao",!1);l(this,"Bo");l(this,"Io");l(this,"Ho",{ArrowUp:"UP_ARROW",ArrowDown:"DOWN_ARROW",ArrowLeft:"LEFT_ARROW",ArrowRight:"RIGHT_ARROW",F1:"F1",F2:"F2",F3:"F3",F4:"F4",F5:"F5",F6:"F6",F7:"F7",F8:"F8",F9:"F9",F10:"F10",F11:"F11",F12:"F12",Enter:"ENTER",Return:"RETURN",Tab:"TAB",Escape:"ESCAPE",Backspace:"BACKSPACE",Delete:"DELETE",Insert:"INSERT",Home:"HOME",End:"END",PageUp:"PAGE_UP",PageDown:"PAGE_DOWN",Shift:"SHIFT",Control:"CONTROL",Alt:"ALT",Meta:"META"," ":"SPACE"})}_o(){this.ao||(this.Lo=t=>{this.Go(t)},this.Oo=t=>{this.Qo(t)},window.addEventListener("keydown",this.Lo,{passive:!1}),window.addEventListener("keyup",this.Oo,{passive:!1}),this.ao=!0)}Mo(){this.ao&&(window.removeEventListener("keydown",this.Lo),window.removeEventListener("keyup",this.Oo),this.ao=!1,this.zo.clear(),this.ko=null,this.Do=null)}Po(t){this.Bo=t}To(t){this.Io=t}jo(t){const i=this.No(t),r=this.zo.get(t)||this.zo.get(i);return(r==null?void 0:r.isPressed)||!1}Xo(){return this.ko}Yo(){return this.Do}Ko(){const t=[];for(const[i,r]of this.zo)r.isPressed&&t.push(i);return t}Wo(){return{ctrl:this.jo("Control"),shift:this.jo("Shift"),alt:this.jo("Alt"),meta:this.jo("Meta")}}Zo(){this.zo.clear(),this.ko=null,this.Do=null}Go(t){const i=t.key,r=Date.now();this.zo.has(i)||this.zo.set(i,{isPressed:!1,lastPressTime:0,lastReleaseTime:0});const n=this.zo.get(i);if(!n.isPressed&&(n.isPressed=!0,n.lastPressTime=r,this.ko=i,this.Bo)){const h={key:i,keyCode:t.keyCode,ctrlKey:t.ctrlKey,shiftKey:t.shiftKey,altKey:t.altKey,metaKey:t.metaKey,isPressed:!0,originalEvent:t};this.Bo(h)}}Qo(t){const i=t.key,r=Date.now();this.zo.has(i)||this.zo.set(i,{isPressed:!1,lastPressTime:0,lastReleaseTime:0});const n=this.zo.get(i);if(n.isPressed=!1,n.lastReleaseTime=r,this.Do=i,this.Io){const h={key:i,keyCode:t.keyCode,ctrlKey:t.ctrlKey,shiftKey:t.shiftKey,altKey:t.altKey,metaKey:t.metaKey,isPressed:!1,originalEvent:t};this.Io(h)}}No(t){return this.Ho[t]||t.toLowerCase()}}const Ie=Object.freeze(Object.defineProperty({__proto__:null,KeyboardManager:_t},Symbol.toStringTag,{value:"Module"}));class Xt{constructor(t,i,r){l(this,"kr");l(this,"qo");l(this,"Zn");l(this,"Vo",new Map);l(this,"Jo",new Map);l(this,"th",new Map);l(this,"sh",null);l(this,"eh");l(this,"ih");l(this,"rh");l(this,"nh");l(this,"oh");l(this,"hh");l(this,"ao",!1);l(this,"ah");l(this,"uh");l(this,"fh");l(this,"dh");l(this,"ph");l(this,"gh");l(this,"mh");l(this,"_h");l(this,"yh");l(this,"Ah");l(this,"wh",320);l(this,"bh",350);l(this,"Ch",10);l(this,"xh",550);l(this,"Mh",14);l(this,"Fh",48);l(this,"$h",650);l(this,"Ph",.02);l(this,"Th",2);l(this,"Eh",600);l(this,"Rh",0);l(this,"Sh",null);this.kr=t,this.Zn=i,this.qo=r;const n=this.kr.canvas;this.eh=n.style.touchAction,this.ih=n.style.userSelect,n.style.touchAction||(n.style.touchAction="none"),n.style.userSelect||(n.style.userSelect="none")}_o(){if(this.ao)return;const t=this.kr.canvas;this.rh=i=>{this.zh(i)},this.nh=i=>{this.kh(i)},this.oh=i=>{this.Dh(i)},this.hh=i=>{this.Lh(i)},t.addEventListener("touchstart",this.rh,{passive:!1}),t.addEventListener("touchmove",this.nh,{passive:!1}),t.addEventListener("touchend",this.oh,{passive:!1}),t.addEventListener("touchcancel",this.hh,{passive:!1}),this.ao=!0}Mo(){if(!this.ao)return;const t=this.kr.canvas;t.removeEventListener("touchstart",this.rh),t.removeEventListener("touchmove",this.nh),t.removeEventListener("touchend",this.oh),t.removeEventListener("touchcancel",this.hh),this.ao=!1,this.sh=null,this.Vo.clear(),this.Jo.clear(),this.th.forEach(i=>{i.longPressTimer!==null&&window.clearTimeout(i.longPressTimer)}),this.th.clear(),this.Sh=null,this.Rh=0,t.style.touchAction=this.eh,t.style.userSelect=this.ih}Fo(){if(!this.Zn()||this.Vo.size===0)return;const t=new Map;for(const i of this.Vo.values()){const r=this.Oh(i.clientX,i.clientY,i.id,i);t.set(i.id,r)}this.Vo=t}Bh(){return Array.from(this.Vo.values()).map(t=>({...t}))}Ih(t){this.ah=t}Eo(t){this.uh=t}Hh(t){this.fh=t}Gh(t){this.dh=t}Qh(t){this.ph=t}jh(t){this.gh=t}Nh(t){this.mh=t}Xh(t){this._h=t}Yh(t){this.yh=t}Kh(t){this.Ah=t}zh(t){var n;if(!this.Zn())return;t.preventDefault(),(n=this.qo)==null||n.vo(this.Eh);const i=performance.now(),r=this.Wh(t.changedTouches);for(const h of r){const o=this.Vo.get(h.id);o&&this.Jo.set(h.id,this.Zh(o)),this.Vo.set(h.id,h);const c={id:h.id,startPosition:h,lastPosition:h,startTime:i,lastTime:i,longPressTimer:null,longPressFired:!1};this.mh&&(c.longPressTimer=window.setTimeout(()=>{const u=this.Vo.get(h.id);u&&(c.longPressFired=!0,this.mh({touch:this.Zh(u),duration:performance.now()-c.startTime,originalEvent:t}))},this.xh)),this.th.set(h.id,c),this.ah&&this.ah(this.qh(h,t,void 0,i))}this.Vo.size===2&&this.Vh()}kh(t){var n;if(!this.Zn())return;t.preventDefault(),(n=this.qo)==null||n.vo(this.Eh);const i=performance.now(),r=this.Wh(t.changedTouches);for(const h of r){const o=this.Vo.get(h.id),c=o?this.Zh(o):void 0;c&&this.Jo.set(h.id,c),this.Vo.set(h.id,h);const u=this.th.get(h.id);u&&(u.lastPosition=h,u.lastTime=i,c)&&q(c.clientX,c.clientY,h.clientX,h.clientY)>this.Mh&&u.longPressTimer!==null&&(window.clearTimeout(u.longPressTimer),u.longPressTimer=null),this.uh&&this.uh(this.qh(h,t,c,i))}this.Vo.size===2?this.Jh(t):this.sh=null}Dh(t){if(!this.Zn())return;t.preventDefault();const i=performance.now(),r=this.Wh(t.changedTouches);for(const n of r){const h=this.Vo.get(n.id),o=h?this.Zh(h):void 0,c=this.th.get(n.id);c&&c.longPressTimer!==null&&(window.clearTimeout(c.longPressTimer),c.longPressTimer=null),this.fh&&this.fh(this.qh(n,t,o,i)),c&&this.ta(c,t),this.th.delete(n.id),this.Jo.delete(n.id),this.Vo.delete(n.id)}this.Vo.size<2&&(this.sh=null)}Lh(t){if(!this.Zn())return;t.preventDefault();const i=performance.now(),r=this.Wh(t.changedTouches);for(const n of r){const h=this.Vo.get(n.id),o=h?this.Zh(h):void 0,c=this.th.get(n.id);c&&c.longPressTimer!==null&&(window.clearTimeout(c.longPressTimer),c.longPressTimer=null),this.dh&&this.dh(this.qh(n,t,o,i)),this.th.delete(n.id),this.Jo.delete(n.id),this.Vo.delete(n.id)}this.Vo.size<2&&(this.sh=null)}Wh(t){const i=[];for(let r=0;r<t.length;r+=1){const n=t.item(r);n&&i.push(this.sa(n))}return i}sa(t){return this.Oh(t.clientX,t.clientY,t.identifier,{id:t.identifier,x:-1,y:-1,clientX:t.clientX,clientY:t.clientY,pressure:t.force,radiusX:t.radiusX,radiusY:t.radiusY,rotationAngle:t.rotationAngle})}Oh(t,i,r,n){const h=this.kr.canvas,o=this.Zn(),c=h.getBoundingClientRect(),u=t-c.left,f=i-c.top,d=u*(h.width/c.width),g=f*(h.height/c.height);if(!o)return{id:r,x:-1/0,y:-1/0,clientX:t,clientY:i,pressure:n.pressure,radiusX:n.radiusX,radiusY:n.radiusY,rotationAngle:n.rotationAngle};const v=d-o.offsetX,p=g-o.offsetY,m=Math.floor(v/o.cellWidth),A=Math.floor(p/o.cellHeight);return m>=0&&m<o.cols&&A>=0&&A<o.rows?{id:r,x:m-Math.floor((o.cols-1)/2),y:A-Math.floor(o.rows/2),clientX:t,clientY:i,pressure:n.pressure,radiusX:n.radiusX,radiusY:n.radiusY,rotationAngle:n.rotationAngle}:{id:r,x:-1/0,y:-1/0,clientX:t,clientY:i,pressure:n.pressure,radiusX:n.radiusX,radiusY:n.radiusY,rotationAngle:n.rotationAngle}}qh(t,i,r,n){const h=this.th.get(t.id),o=Array.from(this.Jo.values()).map(f=>this.Zh(f)),c=Array.from(this.Vo.values()).map(f=>this.Zh(f)),u=this.Wh(i.changedTouches);return{touch:this.Zh(t),previousTouch:r?this.Zh(r):void 0,touches:c,previousTouches:o,changedTouches:u,deltaTime:h?n-h.lastTime:0,originalEvent:i}}Vh(){if(this.Vo.size!==2)return void(this.sh=null);const t=Array.from(this.Vo.values()),[i,r]=t,n=q(i.x,i.y,r.x,r.y),h=wt(i.clientX,i.clientY,r.clientX,r.clientY);this.sh={ids:[i.id,r.id],initialDistance:Math.max(n,1e-4),initialAngle:h,lastScale:1,lastRotation:0}}Jh(t){if(this.sh||this.Vh(),!this.sh)return;const[i,r]=this.sh.ids,n=this.Vo.get(i),h=this.Vo.get(r);if(!n||!h)return;const o=q(n.x,n.y,h.x,h.y)/this.sh.initialDistance,c=o-this.sh.lastScale;this.yh&&Math.abs(c)>this.Ph&&(this.yh({touches:[this.Zh(n),this.Zh(h)],scale:o,deltaScale:c,center:this.ea(n,h),originalEvent:t}),this.sh.lastScale=o);let u=wt(n.clientX,n.clientY,h.clientX,h.clientY)-this.sh.initialAngle;u=(u+180)%360-180;const f=u-this.sh.lastRotation;this.Ah&&Math.abs(f)>this.Th&&(this.Ah({touches:[this.Zh(n),this.Zh(h)],rotation:u,deltaRotation:f,center:this.ea(n,h),originalEvent:t}),this.sh.lastRotation=u)}ea(t,i){const r=(t.clientX+i.clientX)/2,n=(t.clientY+i.clientY)/2,h=this.Oh(r,n,-1,{id:-1,x:-1,y:-1,clientX:r,clientY:n});return{x:h.x,y:h.y}}ta(t,i){const r=performance.now(),n=r-t.startTime,h=q(t.startPosition.clientX,t.startPosition.clientY,t.lastPosition.clientX,t.lastPosition.clientY);if(!t.longPressFired&&n<=this.wh&&h<=this.Ch)this.ia(t.lastPosition,r)&&this.gh?this.gh({touch:this.Zh(t.lastPosition),taps:2,originalEvent:i}):this.ph&&this.ph({touch:this.Zh(t.lastPosition),taps:1,originalEvent:i});else if(!t.longPressFired&&n<=this.$h&&h>=this.Fh){const o={x:t.lastPosition.clientX-t.startPosition.clientX,y:t.lastPosition.clientY-t.startPosition.clientY},c=Math.max(Math.hypot(o.x,o.y),1e-4),u={x:o.x/c,y:o.y/c},f={x:o.x/n,y:o.y/n};this._h&&this._h({touch:this.Zh(t.lastPosition),direction:u,distance:c,velocity:f,originalEvent:i})}this.Rh=r,this.Sh=this.Zh(t.lastPosition)}ia(t,i){return!!this.Sh&&!(i-this.Rh>this.bh)&&q(t.clientX,t.clientY,this.Sh.clientX,this.Sh.clientY)<=this.Ch}Zh(t){return{...t}}}const _e=Object.freeze(Object.defineProperty({__proto__:null,TouchManager:Xt},Symbol.toStringTag,{value:"Module"}));class ot extends Ot{constructor(i,r,n,h,o,c,u,f,d){const g=c/u;let v,p;g>1?(v=f,p=Math.round(f/g)):(p=d,v=Math.round(d*g));super(i,r,n,h,c,u,v,p);l(this,"ra");this.ra=o}gt(){super.gt(),this.ra.pause(),this.ra.src="",this.ra.load()}na(){if(this.ra.readyState>=this.ra.HAVE_CURRENT_DATA){const i=this.A;i.bindTexture(i.TEXTURE_2D,this.ln),i.texImage2D(i.TEXTURE_2D,0,i.RGBA,i.RGBA,i.UNSIGNED_BYTE,this.ra),i.bindTexture(i.TEXTURE_2D,null)}}$n(){return this.ln}ut(){return this.q=null,super.ut()}xn(){this.na()}static async Tn(i,r,n,h,o){const c=i.context;let u;u=document.createElement("video"),u.crossOrigin="anonymous",u.loop=!0,u.muted=!0,u.playsInline=!0,await new Promise((v,p)=>{u.addEventListener("loadedmetadata",()=>v(),{once:!0}),u.addEventListener("error",m=>{var y;const A=m.target;p(Error("Failed to load video: "+(((y=A.error)==null?void 0:y.message)||"Unknown error")))},{once:!0}),u.src=n});const f=c.createTexture();c.bindTexture(c.TEXTURE_2D,f),c.pixelStorei(c.UNPACK_FLIP_Y_WEBGL,1),dt(c,c.LINEAR,c.LINEAR,c.CLAMP_TO_EDGE,c.CLAMP_TO_EDGE),c.texImage2D(c.TEXTURE_2D,0,c.RGBA,c.RGBA,c.UNSIGNED_BYTE,u),c.bindTexture(c.TEXTURE_2D,null);const d=u.videoWidth,g=u.videoHeight;return new ot(c,i,f,r,u,d,g,h,o)}async play(){await this.ra.play()}pause(){this.ra.pause()}stop(){this.ra.pause(),this.ra.currentTime=0}speed(i){return this.ra.playbackRate=i,this}loop(i=!0){return this.ra.loop=i,this}time(i){return this.ra.currentTime=i,this}volume(i){return this.ra.volume=Math.max(0,Math.min(1,i)),this}get videoElement(){return this.ra}get currentTime(){return this.ra.currentTime}get duration(){return this.ra.duration}get isPlaying(){return!this.ra.paused&&!this.ra.ended}}const Xe=a=>class extends a{oa(t,i,r,n){if(U.nn(t))return t;if(typeof t=="number"||typeof t=="string")return this.color(t,i,r,n);throw Error("Unsupported color input passed to color-capable method.")}rotate(t=0,i=0,r=0){this.Z.state.Vt(t),this.Z.state.Jt(i),this.Z.state.ts(r)}rotateX(t){this.Z.state.Vt(t)}rotateY(t){this.Z.state.Jt(t)}rotateZ(t){this.Z.state.ts(t)}translate(t=0,i=0,r=0){this.Z.state.ss(t,i,r)}translateX(t){this.Z.state.ss(t,0,0)}translateY(t){this.Z.state.ss(0,t,0)}translateZ(t){this.Z.state.ss(0,0,t)}push(){this.Z.state.ot()}pop(){this.Z.state.ht()}color(t,i,r,n){return U.rn(t,i,r,n)}rect(t=1,i=1){this.Z.bi(t,i)}point(){this.Z.bi(1,1)}line(t,i,r,n){this.Z.Ci(t,i,r,n)}lineWeight(t){this.Z.state.Zt(t)}background(t,i,r,n=255){const h=this.oa(t,i,r,n);this.Z.Ti(h.r,h.g,h.b,h.a)}char(t){const i=Array.from(t);if(i.length===0)throw Error("char() requires at least one character.");this.Z.state.hs(this.dn.$r(i[0]))}charColor(t,i,r,n){const h=this.oa(t,i,r,n);this.Z.state.cs(h.r,h.g,h.b,h.a)}cellColor(t,i,r,n){const h=this.oa(t,i,r,n);this.Z.state.ls(h.r,h.g,h.b,h.a)}flipX(t){this.Z.state.us(t)}flipY(t){this.Z.state.fs(t)}charRotation(t){this.Z.state.vs(t)}invert(t){this.Z.state.ds(t)}clear(){this.Z.Ae(0,0,0,0)}ellipse(t,i){this.Z.xi(t/2,i/2)}triangle(t,i,r,n,h,o){this.Z.Mi(t,i,r,n,h,o)}bezierCurve(t,i,r,n,h,o,c,u){this.Z.Fi(t,i,r,n,h,o,c,u)}arc(t,i,r,n){this.Z.$i(t/2,i/2,r,n)}shader(t){this.Z.gi(t)}setUniform(t,i){this.Z.I(t,i)}setUniforms(t){this.Z.mi(t)}async createFilterShader(t){if(typeof t=="string"&&(t.startsWith("./")||t.startsWith("../")||t.endsWith(".frag")||t.endsWith(".glsl"))){const i=await fetch(t);if(!i.ok)throw Error(`Failed to load shader from ${t}: ${i.statusText}`);const r=await i.text();return this.Z._i(r)}return this.Z._i(t)}createFramebuffer(t){return this.Z.Pi(t.width??this.grid.cols,t.height??this.grid.rows,t.attachments??3)}image(t,i,r){const n=this.dn??this.ha.base.font;this.Z.yi(t,i,r,n),t instanceof Z&&this.Z.ct()}async loadImage(t){if(typeof t!="string")return H.Tn(this.Z,this.gn,t,this.grid.cols,this.grid.rows);const i=t,r=await new Promise((n,h)=>{const o=new Image;o.crossOrigin="anonymous",o.onload=()=>n(o),o.onerror=c=>h(c),o.src=i});return H.Tn(this.Z,this.gn,r,this.grid.cols,this.grid.rows)}async loadVideo(t){return await ot.Tn(this.Z,this.gn,t,this.grid.cols,this.grid.rows)}},Ze=a=>class extends a{get frameCount(){return this.aa.Kn}set frameCount(t){this.aa.Kn=t}frameRate(t){return t===void 0?this.aa.Yn:this.aa.jn(t,()=>this.ca())}noLoop(){this.aa.Gn()}loop(){this.aa.Qn(()=>this.ca())}redraw(t=1){if(ft.m(typeof t=="number"&&t>0&&Number.isInteger(t),"Redraw count must be a positive integer.",{method:"redraw",providedValue:t}))for(let i=0;i<t;i++)this.ca()}isLooping(){return this.aa.Xn}},ke=a=>class extends a{constructor(...t){super(...t)}mouseClicked(t){this.qo.$o(t)}mousePressed(t){this.qo.Po(t)}mouseReleased(t){this.qo.To(t)}mouseMoved(t){this.qo.Eo(t)}mouseScrolled(t){this.qo.Ro(t)}get mouse(){return this.qo.So()}cursor(t){this.qo.mo(t)}},ze=a=>class extends a{constructor(...t){super(...t)}touchStarted(t){this.la.Ih(t)}touchMoved(t){this.la.Eo(t)}touchEnded(t){this.la.Hh(t)}touchCancelled(t){this.la.Gh(t)}tap(t){this.la.Qh(t)}doubleTap(t){this.la.jh(t)}longPress(t){this.la.Nh(t)}swipe(t){this.la.Xh(t)}pinch(t){this.la.Yh(t)}rotateGesture(t){this.la.Kh(t)}get touches(){return this.la.Bh()}},Ye=a=>class extends a{constructor(...t){super(...t)}keyPressed(t){this.ua.Po(t)}keyReleased(t){this.ua.To(t)}isKeyPressed(t){return this.ua.jo(t)}get lastKeyPressed(){return this.ua.Xo()}get lastKeyReleased(){return this.ua.Yo()}get pressedKeys(){return this.ua.Ko()}get modifierState(){return this.ua.Wo()}};class Ge{constructor(t){l(this,"fa");l(this,"da",new Map);l(this,"va",[]);l(this,"pa",new Map);l(this,"ga",new Map);this.fa=t}async ma(t){for(const i of t){if(this.da.has(i.name))return void console.warn(`[textmode.js] Plugin "${i.name}" is already installed.`);const r=this._a(i.name);try{await i.install(this.fa,r)}catch(n){throw this.ya(i.name),n}this.da.set(i.name,i),this.va.push(i.name)}}async wa(t){const i=this.da.get(t);if(!i)return;const r=this._a(t);i.uninstall&&await i.uninstall(this.fa,r),this.da.delete(t),this.va.splice(this.va.indexOf(t),1),this.ya(t)}ba(){this.Ca(this.pa)}xa(){this.Ca(this.ga)}async Ma(){const t=[...this.da.keys()];for(const i of t)await this.wa(i)}_a(t){const i=this.fa.layers.base,r=i.drawFramebuffer,n=i.asciiFramebuffer;if(!r||!n)throw Error("Base layer framebuffers are not initialized yet. Try installing plugins after setup.");return{renderer:this.fa.Z,font:i.font,grid:this.fa.grid,canvas:this.fa.kr,drawFramebuffer:r,asciiFramebuffer:n,registerPreDrawHook:h=>this.Fa(this.pa,t,h),registerPostDrawHook:h=>this.Fa(this.ga,t,h)}}Fa(t,i,r){const n=t.get(i)??new Set;return n.add(r),t.set(i,n),()=>{const h=t.get(i);h&&(h.delete(r),h.size===0&&t.delete(i))}}ya(t){this.pa.delete(t),this.ga.delete(t)}Ca(t){for(const i of this.va){const r=t.get(i);r&&r.forEach(n=>n())}}}const $=`#version 300 es
|
|
11
|
+
in vec2 A0;in vec2 A1;out vec2 v_uv;void main(){v_uv=A1;gl_Position=vec4(A0,0.,1.);}`,Zt=`#version 300 es
|
|
12
|
+
precision highp float;uniform sampler2D u_texture;in vec2 v_uv;out vec4 fragColor;void main(){fragColor=texture(u_texture,v_uv);}`;class kt{constructor(){l(this,"$a",new Map);l(this,"Pa",[]);l(this,"Ta",0);l(this,"Ua",0);l(this,"Ea")}get Ra(){return this.Ta}get Sa(){if(this.Ta===0)return 0;let t=0;for(const i of this.Pa){const r=this.$a.get(i);r&&(t+=Math.min(1,Math.max(0,r.progress))*r.weight)}return Math.min(1,t/this.Ta)}za(t){this.Ea=t}ka(t,i=1){const r=`phase-${this.Pa.length+1}-${Date.now()}`,n={id:r,label:t,weight:Math.max(.001,i),progress:0,status:"running"};return this.$a.set(r,n),this.Pa.push(r),this.Ta+=n.weight,r}Da(t,i){const r=this.$a.get(t);if(!r)return;r.progress=Math.max(0,Math.min(1,i)),r.status=r.progress>=1?"complete":"running";const n=this.Sa;Math.abs(n-this.Ua)>.001&&(this.Ua=n,this.Ea&&this.Ea(n))}La(t){const i=this.$a.get(t);i&&(i.progress=1,i.status="complete",this.Da(t,1))}Oa(t){const i=this.$a.get(t);i&&(i.status="failed")}Ba(){return this.Pa.map(t=>{const i=this.$a.get(t);return i?{id:i.id,label:i.label,weight:i.weight,progress:i.progress,status:i.status}:{id:t,label:t,weight:1,progress:0,status:"pending"}})}}class zt{constructor(t="active"){l(this,"Ia");l(this,"Ha","");l(this,"Ga","");this.Ia=t}get Qa(){return this.Ia}get ja(){return this.Ia!=="disabled"}get Na(){return this.Ia==="active"||this.Ia==="transitioning"||this.Ia==="error"}get Xa(){return this.Ha}get Ya(){return this.Ga}Ka(){this.Ia!=="done"&&this.Ia!=="transitioning"||(this.Ia="active")}Wa(){this.Ia!=="disabled"&&(this.Ia="done")}Za(){this.Ia!=="disabled"&&(this.Ia="transitioning")}qa(){this.Ia==="transitioning"&&(this.Ia="done")}Va(t){this.Ia!=="disabled"&&(this.Ia="error",t instanceof Error?(this.Ha=t.message,this.Ga=t.stack||""):(this.Ha=t,this.Ga=""))}Ja(){this.Ia="disabled"}}class Yt{constructor(t,i){l(this,"tc",0);l(this,"sc",1);l(this,"ec");l(this,"rc");this.ec=t,this.rc=i}get nc(){return this.sc}get oc(){return this.sc<1}In(){this.ec!=="none"&&this.rc>0&&(this.tc=performance.now())}it(){if(this.ec==="none"||this.rc===0)return this.sc=1,!1;const t=performance.now()-this.tc,i=Math.min(1,t/this.rc);return i>=1?(this.sc=0,!0):(this.sc=1-i,!1)}te(){this.sc=1,this.tc=0}}function bt(a,t){const i=a.tone??"auto";let r="dark";return i==="light"||i==="dark"?r=i:t&&(r=function(n){if(!n)return 0;const[h,o,c]=n.map(f=>f/255),u=f=>f<=.04045?f/12.92:Math.pow((f+.055)/1.055,2.4);return .2126*u(h)+.7152*u(o)+.0722*u(c)}(t)>.5?"light":"dark"),{mode:r,background:t,textColor:r==="light"?"#1A1A1A":"#F8F8F8",subtleColor:r==="light"?"#4A4A4A":"#C0C0C0"}}function Gt(a){return a.mode==="light"?["#E91E63","#9C27B0","#FF6F00"]:["#8EF9F3","#F15BB5","#FF9B71"]}function Ht(a,t){return a.length?a.map(i=>t.color(i)):[t.color("#FFFFFF")]}class jt{constructor(t,i,r){this.hc=t,this.id=i,this.label=r}report(t){this.hc.Da(this.id,t)}complete(){this.hc.La(this.id)}fail(t){this.hc.Oa(this.id)}async track(t){try{const i=typeof t=="function"?await t():await t;return this.complete(),i}catch(i){throw this.fail(),i}}}const He=({textmodifier:a,grid:t,progress:i,frameCount:r,message:n,palette:h,theme:o,phases:c,transitionOpacity:u,isError:f,errorMessage:d})=>{const g="|/-\\",v=Math.floor(r/6)%4,p=a.color(o.textColor),m=Math.floor(255*u),A=a.color(p.r,p.g,p.b,m);if(a.charColor(A),a.cellColor(0,0,0,0),f){const y=a.color(o.mode==="light"?"#D32F2F":"#FF6B6B",m);a.charColor(y),a.push(),a.translate(0,-2,0),a.char("X"),a.rect(1,1),a.pop();const b="SETUP ERROR",w=-Math.floor(b.length/2);a.push(),a.translate(w,0,0);for(const E of b)a.char(E),a.rect(1,1),a.translateX(1);if(a.pop(),d){const E=a.color(o.subtleColor),P=a.color(E.r,E.g,E.b,m);a.charColor(P);const x=Math.floor(.8*t.cols),S=d.split(" "),D=[];let M="";for(const N of S)(M+" "+N).length<=x?M=M?M+" "+N:N:(M&&D.push(M),M=N);M&&D.push(M);const B=D.slice(0,3);D.length>3&&(B[2]=B[2].substring(0,x-3)+"..."),B.forEach((N,lt)=>{const ri=-Math.floor(N.length/2);a.push(),a.translate(ri,3+lt,0);for(const si of N)a.char(si),a.rect(1,1),a.translateX(1);a.pop()})}return}if(a.push(),a.translate(0,0,0),a.char(g[v]),a.rect(1,1),a.pop(),i>0||c.some(y=>y.status!=="pending")){const y=Math.max(6,Math.floor(.6*t.cols)),b=-Math.floor(y/2),w=Math.floor(y*i),E=h.length?h:[a.color("#FFFFFF")];a.push(),a.translate(b,3,0);for(let P=0;P<y;P++){const x=P<w?"*":".",S=E[P%E.length],D=a.color(S.r,S.g,S.b,m);a.charColor(D),a.char(x),a.rect(1,1),a.translateX(1)}a.pop()}if(n){const y=a.color(o.subtleColor),b=a.color(y.r,y.g,y.b,m);a.charColor(b);const w=-Math.floor(n.length/2);a.push(),a.translate(w,5,0);for(const E of n)a.char(E),a.rect(1,1),a.translateX(1);a.pop()}};class at{constructor(t,i={}){l(this,"ac");l(this,"nc");l(this,"cc");l(this,"lc");l(this,"uc");l(this,"fc");l(this,"dc");l(this,"vc");l(this,"gc");l(this,"mc");l(this,"nr");l(this,"_c");l(this,"yc");l(this,"wc");l(this,"bc");l(this,"Cc",null);l(this,"xc",!1);l(this,"Mc",[]);this.ac=i.visible??!0,this.nc=i.opacity??1,this.cc=i.blendMode??"normal",this.lc=i.offsetX??0,this.uc=i.offsetY??0,this.fc=i.rotation??0,this.dc=i.fontSize??16,this.vc=i.fontSource,i.fontSource instanceof nt?this.nr=i.fontSource:this.nr=new nt(t,this.dc)}async Fc(t){this.gc=t,this.nr.Tr||await this.nr.wr(this.vc);const i=this.nr.maxGlyphDimensions;this.mc=new Nt(this.gc.canvas.canvas,i.width,i.height);const r=this.mc;this._c=this.gc.createFramebuffer(r.cols,r.rows,3),this.yc=this.gc.createFramebuffer(r.width,r.height,1),this.wc=this.gc.createFramebuffer(r.width,r.height,1),this.bc=[this.gc.createFramebuffer(r.width,r.height,1,{depth:!1}),this.gc.createFramebuffer(r.width,r.height,1,{depth:!1})],this.xc=!1,this.mc.Hr(()=>{var n,h,o;this._c.resize(this.mc.cols,this.mc.rows),this.yc.resize(this.mc.width,this.mc.height),(n=this.wc)==null||n.resize(this.mc.width,this.mc.height),(h=this.bc)==null||h[0].resize(this.mc.width,this.mc.height),(o=this.bc)==null||o[1].resize(this.mc.width,this.mc.height)})}$c(){return this.Cc!==null}Pc(t){this.Cc&&this.Cc.call(t)}draw(t){this.Cc=t}show(){this.ac=!0}hide(){this.ac=!1}opacity(t){if(t===void 0)return this.nc;this.nc=Math.min(1,Math.max(0,t))}blendMode(t){if(t===void 0)return this.cc;this.cc=t}offset(t,i=0){if(t===void 0)return{x:this.lc,y:this.uc};this.lc=t,this.uc=i}rotateZ(t){if(t===void 0)return this.fc;this.fc=t}filter(t,i){this.Mc.push({name:t,params:i})}fontSize(t){if(t===void 0)return this.nr.fontSize;this.nr.Mr(t),this.Tc()}async loadFont(t){if(!this.nr)throw Error("Layer font not initialized. Ensure layer is attached before loading fonts.");return t instanceof nt?(this.nr=t,this.nr.Tr||await this.nr.wr()):await this.nr.Fr(t),this.Tc(),this.nr}ca(t,i,r){const n=r==null?void 0:r.fallbackDraw;if(!this.ac)return void(this.xc=!1);if(!this.Cc&&!n)return void(this.xc=!1);const h=this.gc.renderer;this._c.begin(),h.state.qt(),t.dn=this.nr;try{this.Cc?this.Cc.call(t):n==null||n()}finally{t.dn=void 0}this._c.end();const o=this.Mc.length>0,c=o?this.wc:this.yc;c.begin(),h.di(i);const u=this.mc;i.O({u_characterTexture:this.nr.fontFramebuffer,u_charsetDimensions:[this.nr.textureColumns,this.nr.textureRows],Ul:this._c.textures[0],Um:this._c.textures[1],Un:this._c.textures[2],Uo:[u.cols,u.rows],Up:[c.width,c.height],Uq:[0,0,0,0]}),h.wi(0,0,u.width,u.height),c.end(),o&&this.gc.filterManager.Uc(this.wc.textures[0],this.yc,this.Mc,this.yc.width,this.yc.height,this.bc),this.Mc=[],this.xc=!0}Jr(){var t;this._c&&this.yc&&((t=this.mc)==null||t.te())}gt(){var t,i,r,n,h,o,c;(t=this._c)==null||t.gt(),(i=this.yc)==null||i.gt(),(r=this.wc)==null||r.gt(),(n=this.bc)==null||n[0].gt(),(h=this.bc)==null||h[1].gt(),(o=this.nr)==null||o.gt(),(c=this.mc)==null||c.gt()}get texture(){var t;return(t=this.yc)==null?void 0:t.textures[0]}get grid(){return this.mc}get font(){if(!this.nr)throw Error("Layer font not initialized. Ensure font is set before accessing.");return this.nr}get width(){return this.yc?this.yc.width:0}get height(){return this.yc?this.yc.height:0}get Ec(){return this.xc}get drawFramebuffer(){return this._c}get asciiFramebuffer(){return this.yc}Tc(){if(!this.mc||!this.nr)return;const t=this.nr.maxGlyphDimensions;this.mc.Qr(t.width,t.height),this._c&&this.yc&&this.Jr()}}const je={message:"LOADING...",tone:"auto",transition:"fade",transitionDuration:500};class Wt{constructor(t,i,r){l(this,"fa");l(this,"l");l(this,"Rc");l(this,"hc");l(this,"Sc");l(this,"zc");l(this,"kc");l(this,"Dc");l(this,"Lc",[]);l(this,"Oc");l(this,"Bc",performance.now());l(this,"Ic",0);l(this,"Hc",!1);l(this,"Ar",!1);l(this,"Xc");this.fa=t,this.l={...je,...i??{}},this.Rc=new zt("active"),this.hc=new kt,this.Sc=new Yt(this.l.transition,this.l.transitionDuration),this.zc=new Bt(60),this.Oc=bt(this.l,r);const n=Gt(this.Oc);this.Lc=Ht(n,this.fa),this.Dc=this.Gc(),this.hc.za(h=>{h>=.999&&this.Wa()})}async wr(){if(this.Ar)return;const t=this.fa.Z,i=this.fa.kr,r=this.fa.Qc;this.kc=new at(t,{visible:!0,opacity:1,fontSize:16}),await this.kc.Fc({renderer:t,canvas:i,filterManager:r,createFramebuffer:(n,h,o=1,c)=>t.Pi(n,h,o,c)}),this.Ar=!0}get Na(){return this.Rc.Na&&this.Hc}In(){this.Hc||(this.Hc=!0,this.Bc=performance.now(),this.Ic=0,this.zc.In(()=>this.jc()))}Hn(){this.Hc&&(this.Hc=!1,this.zc.Hn())}Jr(){this.Ar&&this.kc.Jr()}gt(){this.Hn(),this.Ar&&(this.kc.gt(),this.Ar=!1)}get progress(){return this.hc.Sa}message(t){return typeof t=="string"&&(this.l.message=t),this.l.message}addPhase(t,i=1){this.Rc.Ka();const r=this.hc.ka(t,i);return new jt(this.hc,r,t)}Wa(){this.l.transition!=="none"&&this.l.transitionDuration>0?(this.Rc.Za(),this.Sc.In()):(this.Rc.Wa(),this.Hn(),this.Nc())}Nc(){this.Xc&&this.Xc()}Yc(t){this.Xc=t}error(t){this.Rc.Va(t)}jc(){if(this.Rc.Na){if(this.Ic++,this.Rc.Qa==="transitioning"&&this.Sc.it())return this.Rc.qa(),this.Nc(),void this.Hn();this.Kc()}}Kc(){if(!this.Ar)return;const t=this.kc,i=t.grid,r=this.fa.Z,n=this.fa.Wc,h=this.fa.Zc,o={textmodifier:this.fa,grid:i,progress:this.progress,elapsedMs:performance.now()-this.Bc,frameCount:this.Ic,message:this.l.message,palette:this.Lc,theme:this.Oc,phases:this.hc.Ba(),transitionOpacity:this.Sc.nc,isError:this.Rc.Qa==="error",errorMessage:this.Rc.Xa||void 0,errorDetails:this.Rc.Ya||void 0};t.draw(()=>{this.fa.clear(),this.fa.push();try{this.Dc(o)}finally{this.fa.pop()}}),t.ca(this.fa,n);const c=t.texture;c&&(r.Ae(...r.state.canvasBackgroundColor),r.di(h),h.O({u_texture:c}),r.wi(i.offsetX,i.offsetY,i.width,i.height))}qc(t){this.Oc=bt(this.l,t)}Gc(){const t=this.l.renderer||He;return i=>{t(i),this.Vc(i)}}Vc(t){const{textmodifier:i,grid:r,frameCount:n,theme:h,transitionOpacity:o}=t,c=[116,101,120,116,109,111,100,101,46,106,115].map(g=>String.fromCharCode(g)).join(""),u=(r.rows+1>>1)-2,f=2-(r.cols+1>>1),d=h.mode==="light"?[[233,30,99],[156,39,176],[255,111,0]]:[[142,249,243],[241,91,181],[255,155,113]];i.push(),i.translate(f,u,0);for(let g=0;g<c.length;g++){const v=c[g],p=Math.floor(.1*n+.5*g)%d.length,[m,A,y]=d[p],b=Math.floor(255*o),w=i.color(m,A,y,b);i.charColor(w),i.char(v),i.point(),i.translateX(1)}i.pop()}}const qt={normal:0,additive:1,multiply:2,screen:3,subtract:4,darken:5,lighten:6,overlay:7,softLight:8,hardLight:9,colorDodge:10,colorBurn:11,difference:12,exclusion:13};class Vt{constructor(t,i,r){l(this,"Z");l(this,"Jc");l(this,"bc");l(this,"tl",0);this.Z=t,this.Jc=t.pi($,`#version 300 es
|
|
13
|
+
precision highp float;uniform sampler2D Ud;uniform sampler2D Ue;uniform vec2 Uf;uniform vec2 Ug;uniform vec2 Uh;uniform float Ui;uniform float Uj;uniform int Uk;in vec2 v_uv;out vec4 fragColor;const int A=0;const int B=1;const int C=2;const int D=3;const int E=4;const int F=5;const int G=6;const int H=7;const int I=8;const int J=9;const int K=10;const int L=11;const int M=12;const int N=13;vec3 O(vec3 P,vec3 Q){return Q;}vec3 R(vec3 P,vec3 Q){return P+Q;}vec3 S(vec3 P,vec3 Q){return P*Q;}vec3 T(vec3 P,vec3 Q){return 1.-(1.-P)*(1.-Q);}vec3 U(vec3 P,vec3 Q){return max(P-Q,0.);}vec3 V(vec3 P,vec3 Q){return min(P,Q);}vec3 W(vec3 P,vec3 Q){return max(P,Q);}vec3 X(vec3 P,vec3 Q){return mix(2.*P*Q,1.-2.*(1.-P)*(1.-Q),step(0.5,P));}vec3 Y(vec3 P,vec3 Q){return mix(P-(1.-2.*Q)*P*(1.-P),mix(P+(2.*Q-1.)*(P*(3.-2.*P)-P),P+(2.*Q-1.)*(sqrt(P)-P),step(0.25,P)),step(0.5,Q));}vec3 Z(vec3 P,vec3 Q){return mix(2.*P*Q,1.-2.*(1.-P)*(1.-Q),step(0.5,Q));}vec3 a(vec3 P,vec3 Q){return mix(min(vec3(1.),P/max(1.-Q,0.0001)),vec3(1.),step(1.,Q));}vec3 b(vec3 P,vec3 Q){return mix(1.-min(vec3(1.),(1.-P)/max(Q,0.0001)),vec3(0.),step(Q,vec3(0.)));}vec3 c(vec3 P,vec3 Q){return abs(P-Q);}vec3 d(vec3 P,vec3 Q){return P+Q-2.*P*Q;}vec3 e(int f,vec3 P,vec3 Q){if(f==A)return O(P,Q);if(f==B)return R(P,Q);if(f==C)return S(P,Q);if(f==D)return T(P,Q);if(f==E)return U(P,Q);if(f==F)return V(P,Q);if(f==G)return W(P,Q);if(f==H)return X(P,Q);if(f==I)return Y(P,Q);if(f==J)return Z(P,Q);if(f==K)return a(P,Q);if(f==L)return b(P,Q);if(f==M)return c(P,Q);if(f==N)return d(P,Q);return O(P,Q);}void main(){vec4 g=texture(Ue,v_uv);vec2 h=v_uv*Uf;vec2 i=h-Uh;vec2 j=Ug*0.5;vec2 k=i-j;float l=cos(-Uj);float m=sin(-Uj);vec2 n=vec2(k.x*l-k.y*m,k.x*m+k.y*l);i=n+j;bool o=any(lessThan(i,vec2(0.)))||any(greaterThanEqual(i,Ug));if(o){fragColor=g;return;}vec2 p=(floor(i)+0.5)/Ug;vec4 q=texture(Ud,p);float r=q.a*Ui;if(r<=0.){fragColor=g;return;}vec3 s=e(Uk,g.rgb,q.rgb);vec3 t=mix(g.rgb,s,r);float u=g.a+r*(1.-g.a);fragColor=vec4(t,u);}`),this.bc=[this.Z.Pi(i,r,1),this.Z.Pi(i,r,1)]}sl(t){const i=this.Z.context,{base:r,targetFramebuffer:n,backgroundColor:h,layers:o,canvasWidth:c,canvasHeight:u}=t,f=i.isEnabled(i.DEPTH_TEST),d=i.getParameter(i.DEPTH_WRITEMASK);f&&i.disable(i.DEPTH_TEST),d&&i.depthMask(!1);const g=this.bc[0];g.begin(),this.Z.Ae(...h),g.end(),this.tl=0,r.layer.ac&&this.el(r.texture,c,u,r.width,r.height,r.layer.nc,r.offsetX,r.offsetY,r.layer.fc,"normal",i);for(const v of o){const p=v.layer;p.ac&&p.Ec&&this.el(v.texture,c,u,v.width,v.height,p.nc,v.offsetX,v.offsetY,p.fc,p.cc,i)}this.il(n,c,u,i),i.depthMask(d),f&&i.enable(i.DEPTH_TEST)}el(t,i,r,n,h,o,c,u,f,d,g){const v=this.bc[this.tl],p=this.tl===0?1:0,m=this.bc[p],A=f*(Math.PI/180);m.begin(),g.disable(g.BLEND),this.Z.di(this.Jc),this.Jc.O({Ud:t,Ue:v.textures[0],Uf:[i,r],Ug:[n,h],Uh:[c,u],Ui:o,Uj:A,Uk:qt[d]}),this.Z.wi(0,0,v.width,v.height),m.end(),this.tl=p}il(t,i,r,n){const h=this.bc[this.tl];t.begin(),n.disable(n.BLEND),this.Z.di(this.Jc),this.Jc.O({Ud:h.textures[0],Ue:h.textures[0],Uf:[i,r],Ug:[h.width,h.height],Uh:[0,0],Ui:1,Uj:0,Uk:qt.normal}),this.Z.wi(0,0,i,r),t.end()}Jr(t,i){this.bc[0].resize(t,i),this.bc[1].resize(t,i)}gt(){this.Jc.dispose(),this.bc[0].gt(),this.bc[1].gt()}}class Qt{constructor(t,i){l(this,"fa");l(this,"Z");l(this,"rl");l(this,"nl");l(this,"ol",[]);l(this,"hl",[]);l(this,"al");l(this,"cl",!1);l(this,"ll",new Set);this.fa=t,this.Z=t.Z,this.rl=t.Wc,this.nl=new Vt(this.Z,this.fa.kr.width,this.fa.kr.height),this.al=new at(this.Z,{visible:!0,opacity:1,fontSize:i.fontSize,fontSource:i.fontSource})}async wr(){if(!this.cl){await this.ul(this.al);for(const t of this.ol)await this.ul(t),this.hl.push(t);this.ol=[],this.cl=!0}}add(t={}){const i=new at(this.Z,t);return this.cl?(this.ul(i),this.hl.push(i)):this.ol.push(i),i}remove(t){this.fl(this.hl,t)||this.fl(this.ol,t)}move(t,i){this.dl(this.hl,t,i)||this.dl(this.ol,t,i)}swap(t,i){t!==i&&(this.vl(this.hl,t,i)||this.vl(this.ol,t,i))}clear(){this.al.gt(),this.hl.forEach(t=>t.gt()),this.hl=[],this.ol.forEach(t=>t.gt()),this.ol=[]}pl(t,i){this.al.ca(this.fa,this.rl,{fallbackDraw:i});const r=[...this.Z.state.canvasBackgroundColor];this.ml(),this._l(t,r)}ml(){this.hl.length!==0&&this.hl.forEach(t=>t.ca(this.fa,this.rl))}_l(t,i){const r=this.fa.kr,n=this.al.grid,h=this.al.texture;if(!h)return;const o={layer:this.al,texture:h,width:n.width,height:n.height,offsetX:n.offsetX+this.al.lc,offsetY:n.offsetY+this.al.uc},c=this.hl.map(u=>{const f=u.grid;return{layer:u,texture:u.texture,width:f.width,height:f.height,offsetX:f.offsetX+u.lc,offsetY:f.offsetY+u.uc}});this.nl.sl({base:o,layers:c,targetFramebuffer:t,backgroundColor:i,canvasWidth:r.width,canvasHeight:r.height})}Jr(){this.cl&&(this.al.Jr(),this.hl.forEach(t=>t.Jr()),this.nl.Jr(this.fa.kr.width,this.fa.kr.height))}gt(){this.hl.forEach(t=>t.gt()),this.ol.forEach(t=>t.gt()),this.al.gt(),this.nl.gt()}get all(){return this.hl}get base(){return this.al}getTopmostGrid(){for(let t=this.hl.length-1;t>=0;t--){const i=this.hl[t];if(i.ac&&i.grid)return i.grid}return this.al.grid}yl(t){this.ll.add(t)}Al(){for(const t of this.ll)t()}async ul(t){var r;const i={renderer:this.Z,canvas:this.fa.kr,filterManager:this.fa.Qc,createFramebuffer:(n,h,o=1,c)=>this.Z.Pi(n,h,o,c)};await t.Fc(i),(r=t.grid)==null||r.Hr(()=>this.Al())}fl(t,i){const r=t.indexOf(i);if(r===-1)return!1;const[n]=t.splice(r,1);return n.gt(),!0}dl(t,i,r){const n=t.indexOf(i);if(n===-1)return!1;t.splice(n,1);const h=Math.max(0,Math.min(t.length,r));return t.splice(h,0,i),!0}vl(t,i,r){const n=t.indexOf(i);if(n===-1)return!1;const h=t.indexOf(r);return h!==-1&&(t[n]=r,t[h]=i,!0)}}class Kt{constructor(t){l(this,"Z");l(this,"wl",new Map);l(this,"bl",new Map);this.Z=t,this.Cl()}async xl(t,i,r={}){const n=Object.entries(r),h=n.length>0?n[0][1][0]:null;let o;if(typeof i=="string"){let u=i;if(i.startsWith("./")||i.startsWith("../")||i.endsWith(".frag")||i.endsWith(".glsl")){const f=await fetch(i);if(!f.ok)throw Error(`Failed to load shader from ${i}: ${f.statusText}`);u=await f.text()}o=this.Z.pi($,u),this.bl.set(t,o)}else o=i,this.bl.set(t,o);const c={id:t,createShader:()=>o,createUniforms:(u,f)=>{const d={u_resolution:[f.width,f.height]};for(const[g,[v,p]]of n){let m=p;u!=null&&(typeof u=="number"&&v===h?m=u:typeof u=="object"&&v in u&&(m=u[v]??p)),d[g]=m}return d}};this.wl.set(t,c)}Ml(t){const i=this.bl.get(t);return i&&(i.dispose(),this.bl.delete(t)),this.wl.delete(t)}Pn(t){return this.wl.get(t)}gt(){for(const t of this.bl.values())t.dispose();this.bl.clear(),this.wl.clear()}Cl(){this.xl("invert",`#version 300 es
|
|
14
|
+
precision highp float;uniform sampler2D u_texture;in vec2 v_uv;out vec4 fragColor;void main(){vec4 A=texture(u_texture,v_uv);fragColor=vec4(1.-A.rgb,A.a);}`,{}),this.xl("grayscale",`#version 300 es
|
|
15
|
+
precision highp float;uniform sampler2D u_texture;uniform float U8;in vec2 v_uv;out vec4 fragColor;void main(){vec4 A=texture(u_texture,v_uv);float B=dot(A.rgb,vec3(0.299,0.587,0.114));vec3 C=mix(A.rgb,vec3(B),U8);fragColor=vec4(C,A.a);}`,{U8:["amount",1]}),this.xl("sepia",`#version 300 es
|
|
16
|
+
precision highp float;uniform sampler2D u_texture;uniform float U8;in vec2 v_uv;out vec4 fragColor;void main(){vec4 A=texture(u_texture,v_uv);vec3 B;B.r=dot(A.rgb,vec3(0.393,0.769,0.189));B.g=dot(A.rgb,vec3(0.349,0.686,0.168));B.b=dot(A.rgb,vec3(0.272,0.534,0.131));vec3 C=mix(A.rgb,B,U8);fragColor=vec4(C,A.a);}`,{U8:["amount",1]}),this.xl("threshold",`#version 300 es
|
|
17
|
+
precision highp float;uniform sampler2D u_texture;uniform float U9;in vec2 v_uv;out vec4 fragColor;void main(){vec4 A=texture(u_texture,v_uv);float B=dot(A.rgb,vec3(0.299,0.587,0.114));float C=step(U9,B);fragColor=vec4(vec3(C),A.a);}`,{U9:["threshold",.5]})}}class Jt{constructor(t){l(this,"Z");l(this,"bl",new Map);l(this,"J");l(this,"bc");l(this,"Ar",!1);l(this,"Fl");this.Z=t,this.Fl=new Kt(this.Z),this.J=t.pi($,Zt)}async register(t,i,r={}){await this.Fl.xl(t,i,r)}unregister(t){return this.Fl.Ml(t)??!1}has(t){return this.Fl.Pn(t)!==void 0}wr(t,i){this.Ar||(this.bc=[this.Z.Pi(t,i,1,{depth:!1}),this.Z.Pi(t,i,1,{depth:!1})],this.Ar=!0)}$l(t,i,r,n,h){this.bc[0].width===n&&this.bc[0].height===h||(this.bc[0].resize(n,h),this.bc[1].resize(n,h)),this.Uc(t,i,r,n,h,this.bc)}Uc(t,i,r,n,h,o){if(r.length===0)return void this.Pl(t,i,n,h);const c=this.Z.context,u=c.isEnabled(c.BLEND);c.disable(c.BLEND),this.Pl(t,o[0],n,h);let f=0;for(let d=0;d<r.length;d++){const g=r[d],v=d===r.length-1,p=f===0?1:0,m=v?i:o[p];this.Tl(g,o[f],m,n,h),v||(f=p)}u&&c.enable(c.BLEND)}Tl(t,i,r,n,h){const o=this.Fl.Pn(t.name);if(!o)return console.warn(`[textmode.js] Unknown filter: "${t.name}". Skipping.`),void this.Pl(i.textures[0],r,n,h);const c=this.El(t.name,o,n,h),u={renderer:this.Z,gl:this.Z.context,width:n,height:h};r.begin(),this.Z.di(c),c.O({u_texture:i.textures[0]});const f=o.createUniforms(t.params,u);c.O(f),this.Z.wi(0,0,n,h),r.end()}El(t,i,r,n){let h=this.bl.get(t);if(!h&&i){const o={renderer:this.Z,gl:this.Z.context,width:r,height:n};h=i.createShader(o),this.bl.set(t,h)}return h}Pl(t,i,r,n){i.begin(),this.Z.di(this.J),this.J.O({u_texture:t,u_resolution:[r,n]}),this.Z.wi(0,0,r,n),i.end()}Jr(t,i){this.bc&&(this.bc[0].resize(t,i),this.bc[1].resize(t,i))}gt(){for(const t of this.bl.values())t.dispose();this.bl.clear(),this.J.dispose(),this.Fl.gt(),this.bc&&(this.bc[0].gt(),this.bc[1].gt()),this.Ar=!1}}const We=Object.freeze(Object.defineProperty({__proto__:null,FilterRegistry:Kt,TextmodeFilterManager:Jt},Symbol.toStringTag,{value:"Module"}));let Et=null;const qe={id:"brightness",createShader:({gl:a})=>(Et||(Et=new W(a,tt,`#version 300 es
|
|
18
|
+
precision highp float;in vec2 v_uv;uniform sampler2D u_image;uniform bool u_invert;uniform bool u_flipX;uniform bool u_flipY;uniform float u_charRotation;uniform bool u_charColorFixed;uniform vec4 u_charColor;uniform bool u_cellColorFixed;uniform vec4 u_cellColor;uniform vec4 u_backgroundColor;uniform int u_charCount;uniform vec3 u_charList[255];layout(location=0)out vec4 o_character;layout(location=1)out vec4 o_primaryColor;layout(location=2)out vec4 o_secondaryColor;layout(location=3)out vec4 A;float B(vec3 C){return dot(C,vec3(0.299f,0.587f,0.114f));}void main(){vec2 D=vec2(v_uv.x,1.0f-v_uv.y);vec4 E=texture(u_image,D);float F=B(E.rgb);vec2 G=vec2(0.);if(u_charCount>0){float H=float(u_charCount);float I=clamp(F*(H-1.0f),0.0f,H-1.0f);int J=int(floor(I+0.5f));vec3 K=u_charList[J];G=K.xy;}else{G=vec2(0.0f,0.0f);}vec4 L=u_charColorFixed?u_charColor:E;vec4 M=u_cellColorFixed?u_cellColor:E;if(E.a<0.01f){discard;}o_primaryColor=vec4(L.rgb,L.a);o_secondaryColor=vec4(M.rgb,M.a);A=vec4(0.);int N=int(u_invert?1:0);int O=int(u_flipX?1:0);int P=int(u_flipY?1:0);float Q=float(N|(O<<1)|(P<<2))/255.;o_character=vec4(G,Q,clamp(u_charRotation,0.0f,1.0f));}`)),Et),createUniforms:({source:a})=>a.createBaseConversionUniforms()};class $t{constructor(){l(this,"Rl",new Map);l(this,"bl",new Map);this.Sl()}xl(t){this.Rl.set(t.id,t)}Ml(t){const i=this.bl.get(t);return i&&(i.dispose(),this.bl.delete(t)),this.Rl.delete(t)}Pn(t){return this.Rl.get(t)}zl(t){return this.Rl.has(t)}gt(){for(const t of this.bl.values())t.dispose();this.bl.clear(),this.Rl.clear()}Sl(){this.xl(qe)}}class te{constructor(){l(this,"kl");this.kl=new $t}register(t){this.kl.xl(t)}unregister(t){return this.kl.Ml(t)}has(t){return this.kl.zl(t)}Pn(t){return this.kl.Pn(t)}gt(){this.kl.gt()}}const Ve=Object.freeze(Object.defineProperty({__proto__:null,ConversionRegistry:$t,TextmodeConversionManager:te},Symbol.toStringTag,{value:"Module"}));class ee extends function(i,...r){return r.reduce((n,h)=>h(n),i)}(class{},Xe,Ze,ke,ze,Ye){constructor(i={}){super();l(this,"Z");l(this,"kr");l(this,"aa");l(this,"qo");l(this,"la");l(this,"ua");l(this,"Dl");l(this,"Wc");l(this,"Zc");l(this,"ha");l(this,"dn");l(this,"Qc");l(this,"gn");l(this,"Ll",[]);l(this,"Ol");l(this,"Bl");l(this,"Il");l(this,"Hl",!1);l(this,"Gl",!1);l(this,"Ql",!1);l(this,"jl",!1);l(this,"Nl",()=>{});l(this,"Cc",()=>{});l(this,"Xl",()=>{});l(this,"Yl");l(this,"Kl");l(this,"Nr",!1);l(this,"Wl");this.Il=new Ge(this),this.Nr=i.overlay??!1,this.kr=new Dt(i),this.Z=new be(this.kr.tn()),this.aa=new Bt(i.frameRate??60),this.Dl=new Wt(this,i.loadingScreen,this.kr.Vr()),this.Dl.Yc(()=>{this.aa.Kn=0,this.jl=!0}),this.Wc=this.Z.pi($,`#version 300 es
|
|
19
|
+
precision highp float;uniform sampler2D u_characterTexture;uniform vec2 u_charsetDimensions;uniform sampler2D Um;uniform sampler2D Un;uniform sampler2D Ul;uniform vec2 Uo;uniform vec2 Up;uniform vec4 Uq;in vec2 v_uv;out vec4 fragColor;mat2 A(float B){float C=sin(B);float D=cos(B);return mat2(D,-C,C,D);}void main(){vec2 E=gl_FragCoord.xy/Up;vec2 F=E*Uo;vec2 G=floor(F);vec2 H=(G+0.5)/Uo;vec4 I=texture(Um,H);vec4 J=texture(Un,H);vec4 K=texture(Ul,H);int L=int(K.b*255.+0.5);bool M=(L&1)!=0;bool N=(L&2)!=0;bool O=(L&4)!=0;int P=int(K.r*255.+0.5)+int(K.g*255.+0.5)*256;int Q=int(u_charsetDimensions.x);int R=P/Q;int S=P-(R*Q);float T=(u_charsetDimensions.y-1.)-float(R);vec2 U=1./u_charsetDimensions;vec2 V=vec2(float(S),T)*U;vec2 W=V+U;float X=-K.a*360.*0.017453292;vec2 Y=fract(F)-0.5f;vec2 Z=vec2(N?-1.:1.,O?-1.:1.);Y*=Z;Y=A(X)*Y+0.5;vec2 a=V+clamp(Y,0.,1.)*U;const float b=0.0001;if(any(lessThan(a,V-b))||any(greaterThan(a,W+b))){fragColor=M?I:J;return;}vec4 c=texture(u_characterTexture,a);if(M)c.rgb=mix(c.rgb,1.-c.rgb,float(M));vec4 d=mix(Uq,J,J.a);fragColor=mix(d,I,c);}`),this.Zc=this.Z.pi($,Zt),this.ha=new Qt(this,i);const r=()=>this.ha.getTopmostGrid();this.qo=new It(this.kr,r),this.la=new Xt(this.kr,r,this.qo),this.ua=new _t,this.Qc=new Jt(this.Z),this.gn=new te,this.Dl.In(),this.Zl(i)}async Zl(i){await this.ha.wr(),await this.Dl.wr();const r=this.ha.base.grid;this.ha.yl(()=>{this.qo.Fo(),this.la.Fo()}),this.Ol=this.Z.Pi(this.kr.width,this.kr.height,1),this.Bl=this.Z.Pi(this.kr.width,this.kr.height,1),this.Qc.wr(this.kr.width,this.kr.height),this.Nr&&(this.Wl=H.Tn(this.Z,this.gn,this.kr.targetCanvas,r.cols,r.rows)),this.ql(),this.aa.In(()=>this.ca()),await this.Il.ma(i.plugins??[]);try{await this.Nl(),this.Dl.Wa()}catch(n){console.error("Error during setup:",n),this.Dl.error(n)}}ql(){this.Yl=()=>{this.Nr&&this.resizeCanvas(this.kr.targetCanvas.width,this.kr.targetCanvas.height),this.Xl()},window.addEventListener("resize",this.Yl),this.qo._o(),this.la._o(),this.ua._o(),window.addEventListener("blur",()=>{this.ua.Zo()}),this.Nr&&(this.Kl=new ResizeObserver(()=>{this.resizeCanvas(this.kr.targetCanvas.width,this.kr.targetCanvas.height)}),this.Kl.observe(this.kr.targetCanvas))}ca(){if(!this.Dl.Na&&this.jl){this.Gl=!0;try{this.aa.Nn(),this.aa.Wn(),this.Nr&&Tt(this.Z.context,this.Wl.texture,this.kr.targetCanvas),this.Il.ba(),this.Z.state.qt(),this.ha.pl(this.Ol,()=>this.Cc());let i=this.Ol.textures[0];this.Ll.length>0&&(this.Qc.$l(this.Ol.textures[0],this.Bl,this.Ll,this.kr.width,this.kr.height),i=this.Bl.textures[0],this.Ll=[]),this.Z.Ae(0,0,0,0),this.Z.di(this.Zc),this.Zc.O({u_texture:i}),this.Z.wi(0,0,this.kr.width,this.kr.height),this.Il.xa()}finally{this.Gl=!1,this.Hl&&!this.Ql&&this.Vl()}}}resizeCanvas(i,r){var n,h,o,c;this.kr.Jr(i,r),this.Dl.qc(this.kr.Vr()),this.Dl.Jr(),(n=this.Ol)==null||n.resize(this.kr.width,this.kr.height),(h=this.Bl)==null||h.resize(this.kr.width,this.kr.height),(o=this.Qc)==null||o.Jr(this.kr.width,this.kr.height),(c=this.ha)==null||c.Jr(),this.Z.Ri(),this.ca()}destroy(){this.Ql||this.Hl||(this.Hl=!0,this.aa.Gn(),this.Gl||this.Vl())}Vl(){var i,r,n,h,o,c,u;this.Hl=!1,this.Dl.gt(),this.Il.Ma(),window.removeEventListener("resize",this.Yl),(i=this.Kl)==null||i.disconnect(),this.qo.Mo(),this.la.Mo(),this.ua.Mo(),this.Wc.dispose(),(r=this.ha)==null||r.gt(),(n=this.Qc)==null||n.gt(),(h=this.gn)==null||h.gt(),(o=this.Ol)==null||o.gt(),(c=this.Bl)==null||c.gt(),this.Z.gt(),this.Zc.dispose(),(u=this.Wl)==null||u.gt(),this.kr.gt(),this.Ql=!0}filter(i,r){this.Ll.push({name:i,params:r})}async loadFont(i){return await this.ha.base.loadFont(i),this.ha.base.font}fontSize(i){ft.m(typeof i=="number"&&i>0,"Font size must be a positive number greater than 0.",{method:"fontSize",providedValue:i})&&this.ha.base.font.fontSize!==i&&this.ha.base.font.Mr(i)}async setup(i){this.Nl=i}draw(i){this.Cc=i}windowResized(i){this.Xl=i}get grid(){return this.ha.getTopmostGrid()}get font(){return this.ha.base.font}get width(){return this.kr.width}get height(){return this.kr.height}get canvas(){return this.kr.canvas}get isDisposed(){return this.Ql}get overlay(){return this.Wl}get loading(){return this.Dl}get layers(){return this.ha}get filters(){return this.Qc}get conversions(){return this.gn}}class ct{constructor(){}static create(t={}){return new ee(t)}static setErrorLevel(t){ft._(t)}static get version(){return"0.8.0-beta.1"}}const Qe=Object.freeze(Object.defineProperty({__proto__:null,LoadingPhase:jt,LoadingPhaseTracker:kt,LoadingScreenManager:Wt,LoadingScreenStateMachine:zt,LoadingScreenTransition:Yt,resolveColorInputs:Ht,resolveDefaultPalette:Gt,resolveTheme:bt},Symbol.toStringTag,{value:"Module"})),Ke=Object.freeze(Object.defineProperty({__proto__:null,TextmodeFont:nt,TextmodeImage:H,TextmodeVideo:ot},Symbol.toStringTag,{value:"Module"})),Je=Object.freeze(Object.defineProperty({__proto__:null,keyboard:Ie,mouse:Be,touch:_e},Symbol.toStringTag,{value:"Module"})),$e=Object.freeze(Object.defineProperty({__proto__:null,LayerCompositor:Vt,TextmodeLayer:at,TextmodeLayerManager:Qt},Symbol.toStringTag,{value:"Module"})),ti=ct.create,ei=ct.setErrorLevel,ii=ct.version;T.TextmodeCanvas=Dt,T.TextmodeColor=U,T.TextmodeErrorLevel=X,T.TextmodeFramebuffer=Z,T.TextmodeGrid=Nt,T.Textmodifier=ee,T.conversion=Ve,T.create=ti,T.filters=We,T.input=Je,T.layering=$e,T.loadables=Ke,T.loading=Qe,T.setErrorLevel=ei,T.textmode=ct,T.version=ii,Object.defineProperty(T,Symbol.toStringTag,{value:"Module"})},typeof exports=="object"&&typeof module<"u"?e(exports):typeof define=="function"&&define.amd?define(["exports"],e):e((s=typeof globalThis<"u"?globalThis:s||self).textmode={});
|