textmode.js 0.6.0-beta.1 → 0.6.0-beta.3
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 +2496 -2472
- package/dist/textmode.esm.min.js +2579 -2555
- package/dist/textmode.umd.js +11 -11
- package/dist/textmode.umd.min.js +11 -11
- package/dist/types/errors/ErrorHandler.d.ts +6 -1
- package/dist/types/rendering/webgl/batching/InstanceAttributeBinder.d.ts +6 -6
- package/dist/types/rendering/webgl/batching/InstanceBatch.d.ts +3 -3
- package/dist/types/rendering/webgl/batching/InstanceBuffer.d.ts +9 -9
- package/dist/types/rendering/webgl/batching/InstanceWriter.d.ts +2 -2
- package/dist/types/rendering/webgl/core/Framebuffer.d.ts +3 -3
- package/dist/types/textmode/Textmodifier.d.ts +1 -6
- package/dist/types/textmode/interfaces/ITextmodifier.d.ts +13 -10
- package/dist/types/textmode/loadables/TextmodeImage.d.ts +26 -0
- package/dist/types/textmode/loadables/TextmodeSource.d.ts +14 -14
- package/dist/types/textmode/loadables/TextmodeVideo.d.ts +29 -1
- package/dist/types/textmode/loadables/font/TextmodeFont.d.ts +3 -0
- package/dist/types/textmode/loading/LoadingPhaseTracker.d.ts +8 -8
- package/dist/types/textmode/loading/LoadingScreenManager.d.ts +49 -8
- package/dist/types/textmode/loading/LoadingScreenState.d.ts +11 -11
- package/dist/types/textmode/loading/LoadingScreenTheme.d.ts +3 -3
- package/dist/types/textmode/loading/LoadingScreenTransition.d.ts +5 -5
- package/dist/types/textmode/loading/index.d.ts +1 -1
- package/dist/types/textmode/managers/PluginManager.d.ts +6 -1
- package/dist/types/textmode/mixins/interfaces/IRenderingMixin.d.ts +218 -179
- package/package.json +1 -1
package/dist/textmode.umd.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
var
|
|
1
|
+
var We=Object.defineProperty;var Ze=(F,x,X)=>x in F?We(F,x,{enumerable:!0,configurable:!0,writable:!0,value:X}):F[x]=X;var l=(F,x,X)=>Ze(F,typeof x!="symbol"?x+"":x,X);var s,e;s=this,e=function(F){class x extends Error{constructor(t,i={}){super(x.i(t,i)),this.name="TextmodeError"}static i(t,i){return`${t}${i&&Object.keys(i).length>0?`
|
|
2
2
|
|
|
3
|
-
📋 Context
|
|
4
|
-
- ${r}: ${
|
|
3
|
+
📋 Context:`+Object.entries(i).map(([r,h])=>`
|
|
4
|
+
- ${r}: ${x.o(h)}`).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 Ud;uniform sampler2D Ue;uniform sampler2D Uf;uniform vec2 Ug;layout(location=0)out vec4 o_character;layout(location=1)out vec4 o_primaryColor;layout(location=2)out vec4 o_secondaryColor;void main(){vec2 A=vec2(v_uv.x,1.-v_uv.y);vec2 B=A*Ug;vec2 C=(floor(B)+0.5f)/Ug;vec4 D=texture(Ud,C);vec4 E=texture(Ue,C);if(E.a==0.){discard;}vec4 F=texture(Uf,C);o_character=D;o_primaryColor=E;o_secondaryColor=F;}`));const f=t.getParameter(t.MAX_DRAW_BUFFERS),p=t.getParameter(t.MAX_COLOR_ATTACHMENTS);this.X=Math.min(this.X,f,p),this.H=t.createFramebuffer(),this.q(),this.V(),this.h.Z&&this.J()}q(){const t=this.A,i=this.h.filter==="linear"?t.LINEAR:t.NEAREST,r=this.h.wrap==="repeat"?t.REPEAT:t.CLAMP_TO_EDGE,h=this.h.type==="float"?t.FLOAT:t.UNSIGNED_BYTE,n=h===t.FLOAT?t.RGBA32F:t.RGBA8,a=t.RGBA;for(let c=0;c<this.X;c++){const u=t.createTexture();t.bindTexture(t.TEXTURE_2D,u),et(t,i,i,r,r),t.texImage2D(t.TEXTURE_2D,0,n,this.L,this.B,0,a,h,null),this.G.push(u)}t.bindTexture(t.TEXTURE_2D,null)}V(){const t=this.A;if(t.bindFramebuffer(t.FRAMEBUFFER,this.H),this.X===1)t.framebufferTexture2D(t.FRAMEBUFFER,t.COLOR_ATTACHMENT0,t.TEXTURE_2D,this.G[0],0);else{const i=[];for(let r=0;r<this.X;r++){const h=t.COLOR_ATTACHMENT0+r;t.framebufferTexture2D(t.FRAMEBUFFER,h,t.TEXTURE_2D,this.G[r],0),i.push(h)}t.drawBuffers(i)}t.bindFramebuffer(t.FRAMEBUFFER,null)}J(){const t=this.A;this.N=t.createRenderbuffer(),t.bindRenderbuffer(t.RENDERBUFFER,this.N),t.renderbufferStorage(t.RENDERBUFFER,t.DEPTH_COMPONENT24,this.L,this.B),t.bindFramebuffer(t.FRAMEBUFFER,this.H),t.framebufferRenderbuffer(t.FRAMEBUFFER,t.DEPTH_ATTACHMENT,t.RENDERBUFFER,this.N),t.bindFramebuffer(t.FRAMEBUFFER,null),t.bindRenderbuffer(t.RENDERBUFFER,null)}tt(t){Ft(this.A,this.G[0],t)}resize(t,i){this.L=t,this.B=i,this.j.clear();const r=this.A,h=this.h.type==="float"?r.FLOAT:r.UNSIGNED_BYTE,n=h===r.FLOAT?r.RGBA32F:r.RGBA8,a=r.RGBA;for(const c of this.G)r.bindTexture(r.TEXTURE_2D,c),r.texImage2D(r.TEXTURE_2D,0,n,this.L,this.B,0,a,h,null);r.bindTexture(r.TEXTURE_2D,null),this.N&&(r.bindRenderbuffer(r.RENDERBUFFER,this.N),r.renderbufferStorage(r.RENDERBUFFER,r.DEPTH_COMPONENT24,this.L,this.B),r.bindRenderbuffer(r.RENDERBUFFER,null))}readPixels(t){const i=this.j.get(t);if(i)return i;const r=this.A,h=this.L,n=this.B,a=new Uint8Array(h*n*4),c=r.getParameter(r.READ_FRAMEBUFFER_BINDING);r.bindFramebuffer(r.READ_FRAMEBUFFER,this.H),r.readBuffer(r.COLOR_ATTACHMENT0+t),r.readPixels(0,0,h,n,r.RGBA,r.UNSIGNED_BYTE,a),r.bindFramebuffer(r.READ_FRAMEBUFFER,c);const u=4*h,d=new Uint8Array(a.length);for(let f=0;f<n;f++){const p=(n-1-f)*u,A=f*u;d.set(a.subarray(p,p+u),A)}return this.j.set(t,d),d}st(){const t=this.A;this.j.clear(),this.Y.et(),this.Y.it(this.H,this.L,this.B),this.h.Z&&t.clear(t.DEPTH_BUFFER_BIT),this.Y.state.rt()}end(){this.Y.state.nt(),this.Y.ot();const t=this.Y.ht();this.Y.it(t.framebuffer,t.viewport[2],t.viewport[3])}ct(){return this.K||this.lt(),this.K}lt(){if(!this.Y)return;const t={ut:this.G[0],ft:this.G[1],dt:this.G[2],gt:[this.L,this.B]},i=_.W;this.K=this.Y.At.vt(i,t,!0)}D(){const t=this.A;t.deleteFramebuffer(this.H);for(const i of this.G)t.deleteTexture(i);this.N&&t.deleteRenderbuffer(this.N)}get width(){return this.L}get height(){return this.B}get I(){return this.G}get _t(){return this.X}};l(_,"W",null);let Q=_;const Mt=new WeakMap;function pt(o,t){Mt.set(o,t)}function Lt(o){return Mt.get(o)}function k(o,t,i,r,h=255){o[0]=t/255,o[1]=(i??t)/255,o[2]=(r??t)/255,o[3]=h/255}class rt{constructor(){l(this,"yt",1);l(this,"wt",0);l(this,"bt",0);l(this,"Ct",0);l(this,"Mt",0);l(this,"xt",0);l(this,"Ft",0);l(this,"Tt",[0,0,0]);l(this,"Ut",[1,1,1,1]);l(this,"Pt",[0,0,0,1]);l(this,"Et",!1);l(this,"Rt",!1);l(this,"$t",!1);l(this,"St",0);l(this,"kt",[0,0,0,1]);l(this,"zt",!1);l(this,"It",[]);l(this,"Ot",[])}static Dt(){return{Lt:1,Bt:0,Ht:0,Gt:0,Mt:0,xt:0,Ft:0,St:0,Nt:!1,Xt:!1,$t:!1,zt:!1,Yt:[0,0,0],Kt:[1,1,1,1],jt:[0,0,0,1]}}Wt(t){t.Lt=this.yt,t.Bt=this.wt,t.Ht=this.bt,t.Gt=this.Ct,t.Mt=this.Mt,t.xt=this.xt,t.Ft=this.Ft,t.Nt=this.Et,t.Xt=this.Rt,t.$t=this.$t,t.St=this.St,t.zt=this.zt,t.Yt[0]=this.Tt[0],t.Yt[1]=this.Tt[1],t.Yt[2]=this.Tt[2],t.Kt[0]=this.Ut[0],t.Kt[1]=this.Ut[1],t.Kt[2]=this.Ut[2],t.Kt[3]=this.Ut[3],t.jt[0]=this.Pt[0],t.jt[1]=this.Pt[1],t.jt[2]=this.Pt[2],t.jt[3]=this.Pt[3]}Zt(t){this.yt=t.Lt,this.wt=t.Bt,this.bt=t.Ht,this.Ct=t.Gt,this.Mt=t.Mt,this.xt=t.xt,this.Ft=t.Ft,this.Et=t.Nt,this.Rt=t.Xt,this.$t=t.$t,this.St=t.St,this.zt=t.zt,this.Tt[0]=t.Yt[0],this.Tt[1]=t.Yt[1],this.Tt[2]=t.Yt[2],this.Ut[0]=t.Kt[0],this.Ut[1]=t.Kt[1],this.Ut[2]=t.Kt[2],this.Ut[3]=t.Kt[3],this.Pt[0]=t.jt[0],this.Pt[1]=t.jt[1],this.Pt[2]=t.jt[2],this.Pt[3]=t.jt[3]}rt(){let t=this.Ot.pop();t||(t=rt.Dt()),this.Wt(t),this.It.push(t)}nt(){const t=this.It.pop();t?(this.Zt(t),this.Ot.push(t)):console.warn("pop() called without matching push()")}qt(t){this.Wt(t)}Vt(t){this.yt=Math.abs(t)}Qt(){this.wt=0,this.bt=0,this.Ct=0,this.Mt=0,this.xt=0,this.Ft=0,this.zt=!1}Jt(t){t!==0&&(this.Mt+=t*Math.PI/180)}ts(t){t!==0&&(this.xt+=t*Math.PI/180)}ss(t){t!==0&&(this.Ft+=t*Math.PI/180)}es(t=0,i=0,r=0){t===0&&i===0&&r===0||(this.wt+=t,this.bt+=i,this.Ct+=r)}rs(t){this.es(t,0,0)}ns(t){this.es(0,t,0)}hs(t){this.es(0,0,t)}cs(t){this.Tt[0]=t[0],this.Tt[1]=t[1],this.Tt[2]=t[2]}ls(t,i,r,h=255){k(this.Ut,t,i,r,h)}us(t,i,r,h=255){k(this.Pt,t,i,r,h)}fs(t){this.Et=t}ds(t){this.Rt=t}ps(t){this.$t=t}gs(t){this.St=bt(t)}vs(t,i,r,h){k(this.kt,t,i,r,h)}As(t){this.zt=t}get _s(){return this.kt}get ys(){return this.zt}get ws(){return this.Mt}get bs(){return this.xt}get Cs(){return this.Ft}}const At=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]),H={Ms:16,xs:WebGL2RenderingContext.TRIANGLES,Fs:{Ts:{size:2,offset:0},Us:{size:2,offset:8}}};class Kt{constructor(t){l(this,"A");l(this,"Ps");l(this,"Es");this.A=t,this.Ps=t.createBuffer(),this.Es=new Float32Array(At.length)}Rs(t,i,r,h){const n=this.A,a=Lt(this.A),c=a[2],u=a[3],d=t/c*2-1,f=(t+r)/c*2-1,p=1-(i+h)/u*2,A=1-i/u*2,g=At,v=this.Es;for(let w=0;w<g.length;w+=4){const m=g[w],T=g[w+1],y=g[w+2],E=g[w+3],x=d+(m+.5)*(f-d),b=p+(T+.5)*(A-p);v[w]=x,v[w+1]=b,v[w+2]=y,v[w+3]=E}n.bindBuffer(n.ARRAY_BUFFER,this.Ps),n.bufferData(n.ARRAY_BUFFER,v,n.DYNAMIC_DRAW),n.enableVertexAttribArray(0),n.vertexAttribPointer(0,2,n.FLOAT,!1,16,0),n.drawArrays(n.TRIANGLES,0,6),n.disableVertexAttribArray(0),n.bindBuffer(n.ARRAY_BUFFER,null)}D(){this.A.deleteBuffer(this.Ps)}}var Y=(o=>(o.RECTANGLE="rectangle",o.LINE="line",o.ELLIPSE="ellipse",o.ARC="arc",o.TRIANGLE="triangle",o.BEZIER_CURVE="bezier_curve",o))(Y||{});const jt={rectangle:2,line:2,ellipse:2,triangle:2,arc:3,bezier_curve:4};class _t{constructor(t){l(this,"A");l(this,"$s",new Map);this.A=t}Ss(t,i,r,h){const n=this.A;let a=this.$s.get(t);a||(a=new Map,this.$s.set(t,a));let c=a.get(i)||null;if(!c){c=n.createVertexArray(),a.set(i,c),n.bindVertexArray(c),n.bindBuffer(n.ARRAY_BUFFER,h);const u=n.getAttribLocation(t,"A0");u!==-1&&dt(n,u,r.Fs.Ts.size,r.Ms,r.Fs.Ts.offset,0,n.FLOAT,!1);const d=n.getAttribLocation(t,"A1");d!==-1&&dt(n,d,r.Fs.Us.size,r.Ms,r.Fs.Us.offset,0,n.FLOAT,!1)}n.bindVertexArray(c)}ks(){this.A.bindVertexArray(null)}D(){for(const[,t]of this.$s)for(const[,i]of t)i&&this.A.deleteVertexArray(i)}}const X=class X{static Os(t,i,r=0){const h=i||new Float32Array(X.Is);let n=r;h[n++]=t.Ts[0],h[n++]=t.Ts[1],h[n++]=t.Ds[0],h[n++]=t.Ds[1],h[n++]=t.Yt[0],h[n++]=t.Yt[1],h[n++]=t.Yt[2],h[n++]=t.Kt[0],h[n++]=t.Kt[1],h[n++]=t.Kt[2],h[n++]=t.Kt[3],h[n++]=t.jt[0],h[n++]=t.jt[1],h[n++]=t.jt[2],h[n++]=t.jt[3],h[n++]=t.Ls[0],h[n++]=t.Ls[1],h[n++]=t.Ls[2],h[n++]=t.St;const a=t.Bs;h[n++]=(a==null?void 0:a[0])??0,h[n++]=(a==null?void 0:a[1])??0,h[n++]=(a==null?void 0:a[2])??0;const c=t.Hs;h[n++]=(c==null?void 0:c[0])??0,h[n++]=(c==null?void 0:c[1])??0,h[n++]=(c==null?void 0:c[2])??0;const u=t.Gs,d=t.Ns,f=t.Xs,p=t.Ys,A=t.Ks,g=!(!d||!f);return g?(h[n++]=(p==null?void 0:p[0])??0,h[n++]=(p==null?void 0:p[1])??0,h[n++]=(A==null?void 0:A[0])??0,h[n++]=(A==null?void 0:A[1])??0,h[n++]=d[0],h[n++]=d[1],h[n++]=f[0],h[n++]=f[1]):!g&&!!u?(h[n++]=u[0],h[n++]=u[1],h[n++]=0,h[n++]=0,h[n++]=0,h[n++]=0,h[n++]=0,h[n++]=0):(h[n++]=0,h[n++]=0,h[n++]=0,h[n++]=0,h[n++]=0,h[n++]=0,h[n++]=0,h[n++]=0),h[n++]=t.js??0,h[n++]=t.Ws??0,h[n++]=t.Zs??0,h}static qs(t,i){const r=t.length*X.Is,h=i||new Float32Array(r);for(let n=0;n<t.length;n++){const a=n*X.Is;X.Os(t[n],h,a)}return h}};l(X,"zs",144),l(X,"Is",36);let O=X;const D=class D{};l(D,"Vs",O.zs),l(D,"Qs",{Js:{location:-1,size:2,type:WebGL2RenderingContext.FLOAT,te:!1,se:D.Vs,offset:0,divisor:1},ee:{location:-1,size:2,type:WebGL2RenderingContext.FLOAT,te:!1,se:D.Vs,offset:8,divisor:1},ie:{location:-1,size:3,type:WebGL2RenderingContext.FLOAT,te:!1,se:D.Vs,offset:16,divisor:1},re:{location:-1,size:4,type:WebGL2RenderingContext.FLOAT,te:!1,se:D.Vs,offset:28,divisor:1},ne:{location:-1,size:4,type:WebGL2RenderingContext.FLOAT,te:!1,se:D.Vs,offset:44,divisor:1},oe:{location:-1,size:4,type:WebGL2RenderingContext.FLOAT,te:!1,se:D.Vs,offset:60,divisor:1},he:{location:-1,size:3,type:WebGL2RenderingContext.FLOAT,te:!1,se:D.Vs,offset:76,divisor:1},ae:{location:-1,size:3,type:WebGL2RenderingContext.FLOAT,te:!1,se:D.Vs,offset:88,divisor:1},ce:{location:-1,size:4,type:WebGL2RenderingContext.FLOAT,te:!1,se:D.Vs,offset:100,divisor:1},le:{location:-1,size:4,type:WebGL2RenderingContext.FLOAT,te:!1,se:D.Vs,offset:116,divisor:1},ue:{location:-1,size:3,type:WebGL2RenderingContext.FLOAT,te:!1,se:D.Vs,offset:132,divisor:1}});let J=D;class Vt{constructor(t=1e3,i=1.5){l(this,"fe");l(this,"de");l(this,"pe");l(this,"ge",0);l(this,"ve",0);this.de=t,this.pe=i;const r=t*O.Is;this.fe=new Float32Array(r)}me(t){if(t<=this.de)return;const i=Math.ceil(t*this.pe),r=this.de;this.de=i;const h=i*O.Is,n=new Float32Array(h),a=r*O.Is;n.set(this.fe.subarray(0,Math.min(a,this.ge))),this.fe=n}Ae(){return{buffer:this.fe,offset:this.ge}}_e(t){this.ge+=t,this.ve++}reset(){this.ge=0,this.ve=0}subarray(t=0,i){return this.fe.subarray(t,i??this.ge)}get ye(){return this.ve}get we(){return this.de}get be(){return this.ge}get Ce(){return this.ve===0}}class Wt{constructor(t){l(this,"fe");this.fe=t}Me(t){this.fe.me(this.fe.ye+1);const{buffer:i,offset:r}=this.fe.Ae();i[r+0]=t.x,i[r+1]=t.y,i[r+2]=t.width,i[r+3]=t.height,i[r+4]=t.xe,i[r+5]=t.Fe,i[r+6]=t.Te,i[r+7]=t.r1,i[r+8]=t.Ue,i[r+9]=t.Pe,i[r+10]=t.Ee,i[r+11]=t.r2,i[r+12]=t.Re,i[r+13]=t.$e,i[r+14]=t.Se,i[r+15]=t.ke,i[r+16]=t.flipX,i[r+17]=t.flipY,i[r+18]=t.ze,i[r+19]=t.translationX,i[r+20]=t.translationY,i[r+21]=t.Ie,i[r+22]=t.ws,i[r+23]=t.bs,i[r+24]=t.Cs;const h=t.Oe,n=t.De;return i[r+25]=h[0],i[r+26]=h[1],i[r+27]=h[2],i[r+28]=h[3],i[r+29]=n[0],i[r+30]=n[1],i[r+31]=n[2],i[r+32]=n[3],i[r+33]=t.Z,i[r+34]=t.Le,i[r+35]=t.Be,this.fe._e(O.Is),this.fe.ye-1}get ye(){return this.fe.ye}}class Zt{constructor(t,i=1e3){l(this,"A");l(this,"He",null);l(this,"Ge",0);l(this,"Ne",new Map);this.A=t,this.Xe(i)}Xe(t){const i=this.A;this.He&&i.deleteBuffer(this.He),this.He=i.createBuffer();const r=t*O.zs;Rt(i,i.ARRAY_BUFFER,this.He,r,i.DYNAMIC_DRAW),this.Ge=t}Ye(t){this.Xe(t)}get we(){return this.Ge}upload(t,i){if(i===0)return;const r=this.A;r.bindBuffer(r.ARRAY_BUFFER,this.He);const h=i*O.Is;r.bufferSubData(r.ARRAY_BUFFER,0,t,0,h)}Ke(t){let i=this.Ne.get(t);if(!i){i=new Map;const r=this.A;for(const h in J.Qs){const n=r.getAttribLocation(t,h);n!==-1&&i.set(h,n)}this.Ne.set(t,i)}return i}je(t){const i=this.A,r=t.O,h=this.Ke(r);for(const[n,a]of h){const c=J.Qs[n];c&&dt(i,a,c.size,c.se,c.offset,c.divisor,c.type,c.te)}}We(t){const i=this.A,r=this.Ke(t.O);for(const[h,n]of r)J.Qs[h]&&(i.disableVertexAttribArray(n),i.vertexAttribDivisor(n,0))}dispose(){this.He&&(this.A.deleteBuffer(this.He),this.He=null),this.Ne.clear()}}class qt{constructor(t,i=1e3,r=1.5){l(this,"A");l(this,"fe");l(this,"Ze");l(this,"qe");this.A=t,this.fe=new Vt(i,r),this.Ze=new Wt(this.fe),this.qe=new Zt(t,i)}Ve(t){var h,n,a,c,u,d,f,p,A,g;const i=[0,0,0,0],r=[0,0,0,0];return t.Ns&&t.Xs?(i[0]=((h=t.Ys)==null?void 0:h[0])??0,i[1]=((n=t.Ys)==null?void 0:n[1])??0,i[2]=((a=t.Ks)==null?void 0:a[0])??0,i[3]=((c=t.Ks)==null?void 0:c[1])??0,r[0]=t.Ns[0],r[1]=t.Ns[1],r[2]=t.Xs[0],r[3]=t.Xs[1]):t.Gs&&(i[0]=t.Gs[0],i[1]=t.Gs[1]),this.Qe({x:t.Ts[0],y:t.Ts[1],width:t.Ds[0],height:t.Ds[1],xe:t.Yt[0],Fe:t.Yt[1],Te:t.Yt[2],r1:t.Kt[0],Ue:t.Kt[1],Pe:t.Kt[2],Ee:t.Kt[3],r2:t.jt[0],Re:t.jt[1],$e:t.jt[2],Se:t.jt[3],ke:t.Ls[0],flipX:t.Ls[1],flipY:t.Ls[2],ze:t.St,translationX:((u=t.Bs)==null?void 0:u[0])??0,translationY:((d=t.Bs)==null?void 0:d[1])??0,Ie:((f=t.Bs)==null?void 0:f[2])??0,ws:((p=t.Hs)==null?void 0:p[0])??0,bs:((A=t.Hs)==null?void 0:A[1])??0,Cs:((g=t.Hs)==null?void 0:g[2])??0,Oe:i,De:r,Z:t.js||0,Le:t.Ws||0,Be:t.Zs||0})}Qe(t){const i=this.Ze.Me(t);return this.fe.we>this.qe.we&&this.qe.Ye(this.fe.we),i}get count(){return this.fe.ye}get Ce(){return this.fe.Ce}clear(){this.fe.reset()}Je(t){const i=this.fe.ye;if(i===0)return;const r=this.fe.subarray();this.qe.upload(r,i),this.qe.je(t)}ti(t){this.qe.We(t)}Rs(t,i){const r=this.fe.ye;r!==0&&this.A.drawArraysInstanced(t,0,i,r)}D(){this.qe.dispose()}}class G{constructor(t,i,r,h){l(this,"A");l(this,"si");l(this,"ei");l(this,"ii");l(this,"ri",null);this.A=t,this.si=i,this.ei=r,this.ii=h;const n=this.A.createBuffer();Rt(this.A,this.A.ARRAY_BUFFER,n,this.ii.ni,this.A.STATIC_DRAW),this.ri=n}get type(){return this.ei}get oi(){return this.ii}get hi(){return this.ri}get ai(){return this.si}ci(){this.si.clear()}li(){return!this.si.Ce}D(){this.si.D(),this.A.deleteBuffer(this.ri)}ui(t,i,r){return this.si.Ve(t)}fi(t,i,r,h,n,a){const c=n.Bt??0,u=n.Ht??0,d=n.Gt??0,f=n.Mt??0,p=n.xt??0,A=n.Ft??0,g=[0,0,0,0],v=[0,0,0,0];a&&(a.di!==void 0&&a.pi!==void 0&&a.gi!==void 0&&a.mi!==void 0?(g[0]=a.Ai??0,g[1]=a._i??0,g[2]=a.yi??0,g[3]=a.wi??0,v[0]=a.di??0,v[1]=a.pi??0,v[2]=a.gi??0,v[3]=a.mi??0):a.bi===void 0&&a.Ci===void 0||(g[0]=a.bi??0,g[1]=a.Ci??0));const w={x:t,y:i,width:r,height:h,xe:n.Yt[0],Fe:n.Yt[1],Te:n.Yt[2],r1:n.Kt[0],Ue:n.Kt[1],Pe:n.Kt[2],Ee:n.Kt[3],r2:n.jt[0],Re:n.jt[1],$e:n.jt[2],Se:n.jt[3],ke:n.$t?1:0,flipX:n.Nt?1:0,flipY:n.Xt?1:0,ze:n.St,translationX:c,translationY:u,Ie:d,ws:f,bs:p,Cs:A,Oe:g,De:v,Z:(a==null?void 0:a.Z)??0,Le:(a==null?void 0:a.Le)??0,Be:jt[this.ei]??0};return this.si.Qe(w)}}const Qt={ni:At,Mi:6,...H},Jt={ni: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]),Mi:6,...H},$t={ni:function(o=32){const t=[],i=2*Math.PI/o;for(let r=0;r<o;r++){const h=r*i,n=(r+1)%o*i,a=Math.cos(h),c=Math.sin(h),u=.5*(a+1),d=.5*(c+1),f=Math.cos(n),p=Math.sin(n),A=.5*(f+1),g=.5*(p+1);t.push(0,0,.5,.5,a,c,u,d,f,p,A,g)}return new Float32Array(t)}(32),Mi:96,...H};let ti={ni:function(o){const t=[];for(let i=0;i<o;i++){const r=i/o,h=(i+1)/o;t.push(r,0,r,0,r,1,r,1,h,1,h,1)}return new Float32Array(t)}(32),Mi:96,...H};const ii={ni:new Float32Array([0,0,0,0,1,0,1,0,.5,1,.5,1]),Mi:3,...H},ei={ni:function(o=16){const t=[];for(let i=0;i<o;i++){const r=i/o,h=(i+1)/o;t.push(r,-.5,r,0,h,-.5,h,0,r,.5,r,1,r,.5,r,1,h,-.5,h,0,h,.5,h,1)}return new Float32Array(t)}(16),Mi:96,...H},si={[Y.RECTANGLE]:class extends G{constructor(o,t){super(o,t,Y.RECTANGLE,Qt)}Ve(o,t){return this.fi(0,0,o.width,o.height,t)}},[Y.LINE]:class extends G{constructor(o,t){super(o,t,Y.LINE,Jt)}Ve(o,t){const i=o.x2-o.x1,r=o.y2-o.y1,h=Math.hypot(i,r),n=t.Lt||1,a=o.x1+i/2-h/2,c=o.y1+r/2;return this.fi(a,c,h,n,t)}},[Y.ELLIPSE]:class extends G{constructor(o,t){super(o,t,Y.ELLIPSE,$t)}Ve(o,t){return this.fi(0,0,o.width,o.height,t)}},[Y.ARC]:class extends G{constructor(o,t){super(o,t,Y.ARC,ti)}Ve(o,t){const i=o.start*Math.PI/180,r=o.stop*Math.PI/180;return this.fi(0,0,o.width,o.height,t,{bi:i,Ci:r})}},[Y.TRIANGLE]:class extends G{constructor(o,t){super(o,t,Y.TRIANGLE,ii)}Ve(o,t){const i=Math.min(o.x1,o.x2,o.xi),r=Math.max(o.x1,o.x2,o.xi),h=Math.min(o.y1,o.y2,o.Fi),n=r-i,a=Math.max(o.y1,o.y2,o.Fi)-h;return this.fi(i,h,n,a,t)}},[Y.BEZIER_CURVE]:class extends G{constructor(o,t){super(o,t,Y.BEZIER_CURVE,ei)}Ve(o,t){return this.fi(0,0,1,t.Lt||1,t,{Ai:o.Ai,_i:o._i,yi:o.yi,wi:o.wi,di:o.x1,pi:o.y1,gi:o.x2,mi:o.y2})}}};class ri{constructor(t){l(this,"A");l(this,"Ti");l(this,"Ui");this.A=t,this.Ui=new _t(t),this.Ti=new Map;for(const i of Object.values(Y)){const r=new qt(t),h=new si[i](t,r);this.Ti.set(i,h)}}Pi(t){const i=this.Ei(t);for(const r of i)this.Ri(r)}Ei(t){const i=[];let r=null,h=null,n=null;for(const a of t)h!==a.$i||n!==a.type?(r&&r.length>0&&i.push({$i:h,type:n,commands:r}),r=[a],h=a.$i,n=a.type):r.push(a);return r&&r.length>0&&i.push({$i:h,type:n,commands:r}),i}Ri(t){const{$i:i,type:r,commands:h}=t,n=this.Ti.get(r);i.Si.R(),i.Si.S(i.ki);const a=Lt(this.A),c=h.length>0&&h[0].state.zt;i.Si.S({zi:a[2]/a[3],Ii:[a[2],a[3]],Oi:1,Di:c?1:0}),n.ci();for(const u of h)n.Ve(u.Li,u.state);if(n.li()){const u=n.oi,d=n.hi;try{this.Ui.Ss(i.Si.O,String(r),u,d),n.ai.Je(i.Si),n.ai.Rs(u.xs,u.Mi)}finally{n.ai.ti(i.Si),this.Ui.ks(),n.ci()}}}D(){for(const t of this.Ti.values())t.D();this.Ti.clear(),this.Ui.D()}}function Yt(o){let t=0;for(let i=0;i<o.length;i++)t=(t<<5)-t+o.charCodeAt(i),t&=t;return t}function Ct(o){return Yt(String(o))}function $(o,t){return(o<<5)-o+t}class ni{constructor(t){l(this,"A");l(this,"Bi",0);l(this,"Hi");l(this,"Gi");l(this,"Ni",new Map);this.A=t,this.Hi=new Z(t,st,`#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;void main(){int A=int(v_glyphFlags.r>0.5?1:0);int B=int(v_glyphFlags.g>0.5?1:0);int C=int(v_glyphFlags.b>0.5?1:0);float D=float(A|(B<<1)|(C<<2))/255.;o_character=vec4(v_glyphIndex.xy,D,clamp(v_glyphFlags.a,0.,1.));o_primaryColor=vec4(v_glyphColor.rgb,v_glyphColor.a);o_secondaryColor=vec4(v_cellColor.rgb,v_cellColor.a);}`),this.Gi={id:this.Bi++,Si:this.Hi,ki:Object.freeze({}),hash:this.Xi(this.Hi,{}),Yi:!0}}get Ki(){return this.Gi}vt(t,i={},r=!1){const h=this.Xi(t,i),n=this.Ni.get(h);if(n)return n;const a={id:this.Bi++,Si:t,ki:Object.freeze({...i}),hash:h,Yi:r};return this.Ni.set(h,a),a}ji(t,i={}){return{id:this.Bi++,Si:t,ki:Object.freeze({...i}),hash:0,Yi:!1}}Xi(t,i){const r=Ct(t.O),h=function(n,a){let c=0;const u=Object.keys(n).sort();for(const d of u)c=$(c,Yt(d)),c=$(c,a(n[d]));return c}(i,this.Wi.bind(this));return $(r,h)}Wi(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 h=Array.isArray(i[0])?i.flat():i;for(const n of h)r=$(r,typeof n=="number"?n:0);return r}(t):t instanceof Float32Array||t instanceof Int32Array?function(i){let r=0;const h=Math.min(i.length,16);for(let n=0;n<h;n++)r=$(r,i[n]);return r}(t):t instanceof WebGLTexture?Ct(t):0}D(){this.Hi!=this.Hi&&this.Hi.D(),this.Hi.D(),this.Ni.clear()}}class hi{constructor(){l(this,"Zi",[]);l(this,"qi",1);l(this,"Ds",0)}Vi(t,i){if(this.Ds>=this.Zi.length){const h={id:this.qi++,type:t,Li:{},state:rt.Dt(),$i:i};this.Zi.push(h)}const r=this.Zi[this.Ds];return r.id=this.qi++,r.type=t,r.$i=i,this.Ds++,r}Qi(t,i,r){const h=this.Vi(Y.RECTANGLE,r),n=h.Li;return n.width=t.width,n.height=t.height,i.qt(h.state),h.id}Ji(t,i,r){const h=this.Vi(Y.LINE,r),n=h.Li;return n.x1=t.x1,n.y1=t.y1,n.x2=t.x2,n.y2=t.y2,n.tr=t.tr,i.qt(h.state),h.id}sr(t,i,r){const h=this.Vi(Y.ELLIPSE,r),n=h.Li;return n.width=t.width,n.height=t.height,n.er=t.er,n.ir=t.ir,n.rr=t.rr,i.qt(h.state),h.id}nr(t,i,r){const h=this.Vi(Y.ARC,r),n=h.Li;return n.width=t.width,n.height=t.height,n.start=t.start,n.stop=t.stop,i.qt(h.state),h.id}hr(t,i,r){const h=this.Vi(Y.TRIANGLE,r),n=h.Li;return n.x1=t.x1,n.y1=t.y1,n.x2=t.x2,n.y2=t.y2,n.xi=t.xi,n.Fi=t.Fi,i.qt(h.state),h.id}ar(t,i,r){const h=this.Vi(Y.BEZIER_CURVE,r),n=h.Li;return n.x1=t.x1,n.y1=t.y1,n.Ai=t.Ai,n._i=t._i,n.yi=t.yi,n.wi=t.wi,n.x2=t.x2,n.y2=t.y2,n.tr=t.tr,n.rr=t.rr,i.qt(h.state),h.id}cr(){this.Ds=0}[Symbol.iterator](){let t=0;const i=this.Ds,r=this.Zi;return{next:()=>t<i?{value:r[t++],done:!1}:{value:void 0,done:!0}}}}class oi{constructor(t){l(this,"A");l(this,"lr",null);l(this,"ur");l(this,"At");l(this,"dr");l(this,"pr");l(this,"gr");l(this,"vr",null);l(this,"mr",{});l(this,"Ar",[]);l(this,"_r",[]);l(this,"yr",null);l(this,"wr",[0,0,0,0]);this.A=t,t.enable(t.DEPTH_TEST),t.depthFunc(t.LEQUAL),t.clearDepth(1),t.depthMask(!0),t.disable(t.CULL_FACE),this.dr=new rt,this.At=new ni(t),this.pr=new hi,this.ur=new ri(t),this.gr=new Kt(t);const i=[0,0,t.canvas.width,t.canvas.height];pt(t,i),this.Ar.push(null),this._r.push(i),this.yr=null,this.wr=i}et(){this.Ar.push(this.yr),this._r.push([...this.wr])}ht(){return{framebuffer:this.Ar.pop()??null,viewport:this._r.pop()??[0,0,this.A.canvas.width,this.A.canvas.height]}}it(t,i,r){const h=this.A;this.yr!==t&&(h.bindFramebuffer(h.FRAMEBUFFER,t),this.yr=t);const n=[0,0,i,r];this.wr[0]===n[0]&&this.wr[1]===n[1]&&this.wr[2]===n[2]&&this.wr[3]===n[3]||(h.viewport(...n),pt(h,n),this.wr=n)}br(t){this.lr!==t&&(this.lr=t,t.R())}Cr(t,i){return new Z(this.A,t,i)}Mr(t){this.vr=t,t&&(this.mr={})}k(t,i){this.mr[t]=i}Fr(t){Object.assign(this.mr,t)}Tr(t){return new Z(this.A,st,t)}Ur(t,i,r){this.pr.Qi({width:i??t.width,height:r??t.height},this.dr,t.ct())}Pr(t,i,r,h){this.gr.Rs(t,i,r,h)}Er(t,i){if(this.vr){const r=this.At.ji(this.vr,this.mr);this.pr.Qi({width:t,height:i},this.dr,r),this.vr=null,this.mr={}}else this.pr.Qi({width:t,height:i},this.dr,this.At.Ki)}Rr(t,i,r,h){this.pr.Ji({x1:t,y1:i,x2:r,y2:h},this.dr,this.At.Ki)}$r(t,i){this.pr.sr({width:t,height:i},this.dr,this.At.Ki)}Sr(t,i,r,h,n,a){this.pr.hr({x1:t,y1:i,x2:r,y2:h,xi:n,Fi:a},this.dr,this.At.Ki)}kr(t,i,r,h,n,a,c,u){this.pr.ar({x1:t,y1:i,Ai:r,_i:h,yi:n,wi:a,x2:c,y2:u},this.dr,this.At.Ki)}zr(t,i,r,h){this.pr.nr({width:t,height:i,start:r,stop:h},this.dr,this.At.Ki)}Ir(t,i,r=1,h={}){return new Q(this.A,t,i,r,h,this)}Or(t,i=t,r=t,h=255){this.dr.vs(t,i??t,r??t,h);const[n,a,c,u]=this.dr._s;this.cr(n,a,c,u)}cr(t=0,i=0,r=0,h=0){this.A.clearColor(t,i,r,h),this.A.clear(this.A.COLOR_BUFFER_BIT)}Dr(){this.A.viewport(0,0,this.A.canvas.width,this.A.canvas.height),pt(this.A,[0,0,this.A.canvas.width,this.A.canvas.height])}ot(){const t=this.pr;this.ur.Pi(t),t.cr()}D(){this.At.D(),this.ur.D(),this.gr.D()}get context(){return this.A}get state(){return this.dr}}const C={Lr:(o,t)=>(C.Br.uint16[0]=o[t]<<8|o[t+1],C.Br.int16[0]),Hr:(o,t)=>o[t]<<8|o[t+1],Gr(o,t,i){const r=[];for(let h=0;h<i;h++)r.push(C.Hr(o,t+2*h));return r},Nr(o,t){const i=C.Br.uint8;return i[3]=o[t],i[2]=o[t+1],i[1]=o[t+2],i[0]=o[t+3],C.Br.uint32[0]},Xr(o,t,i){let r="";for(let h=0;h<i;h++)r+=String.fromCharCode(o[t+h]);return r},Br:(()=>{const o=new ArrayBuffer(8);return{uint8:new Uint8Array(o),int16:new Int16Array(o),uint16:new Uint16Array(o),uint32:new Uint32Array(o)}})()};function nt(o){return o+3&-4}function ht(o,t,i){o[t]=i>>>8&255,o[t+1]=255&i}function P(o,t,i){o[t]=i>>>24&255,o[t+1]=i>>>16&255,o[t+2]=i>>>8&255,o[t+3]=255&i}function ai(o,t,i){for(let r=0;r<i.length;r++)o[t+r]=255&i.charCodeAt(r)}function gt(o,t,i){const r=t+i;let h=0;const n=C.Br;for(let a=t;a<r;a+=4)n.uint8[3]=o[a]||0,n.uint8[2]=o[a+1]||0,n.uint8[1]=o[a+2]||0,n.uint8[0]=o[a+3]||0,h=h+(n.uint32[0]>>>0)>>>0;return h>>>0}class ci{constructor(t){l(this,"b");l(this,"Yr",0);l(this,"Kr",0);l(this,"jr",0);this.b=t}Wr(t){for(;this.jr<t;){const r=this.b[this.Yr++]||0;this.Kr|=r<<this.jr,this.jr+=8}const i=this.Kr&(1<<t)-1;return this.Kr>>>=t,this.jr-=t,i}Zr(){this.Kr=0,this.jr=0}get offset(){return this.Yr}}function tt(o){let t=32,i=0;for(const c of o)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 o)c&&r[c]++;const h=new Uint32Array(i+1);let n=0;r[0]=0;for(let c=1;c<=i;c++)n=n+r[c-1]<<1,h[c]=n;const a=new Map;for(let c=0;c<o.length;c++){const u=o[c];if(!u)continue;const d=h[u]++;let f=a.get(u);f||(f=[],a.set(u,f)),f[li(d,u)]=c}return{min:t,max:i,table:a}}function vt(o,t){let i=0;for(let r=1;r<=t.max;r++){i|=o.Wr(1)<<r-1;const h=t.table.get(r);if(h&&i<h.length){const n=h[i];if(n!==void 0)return n}}throw new Error("Invalid Huffman code")}function li(o,t){let i=0;for(let r=0;r<t;r++)i=i<<1|1&o,o>>>=1;return i>>>0}function ui(o){if(o.length<2)throw new Error("ZLIB data too short");const t=o[0],i=o[1];if((15&t)!=8)throw new Error("Unsupported ZLIB compression method");if(((t<<8)+i)%31!=0)throw new Error("Bad ZLIB header check");let r=2;32&i&&(r+=4);const h=[];return function(n,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],d=[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],f=[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 p=0;for(;!p;){p=n.Wr(1);const A=n.Wr(2);if(A===0){n.Zr();const g=n.Wr(16);if((65535&(65535^g))!==n.Wr(16))throw new Error("DEFLATE uncompressed LEN/NLEN mismatch");for(let v=0;v<g;v++)a.push(n.Wr(8))}else{if(A!==1&&A!==2)throw new Error("Unsupported DEFLATE type");{let g,v;if(A===1){const w=new Array(288).fill(0);for(let m=0;m<=143;m++)w[m]=8;for(let m=144;m<=255;m++)w[m]=9;for(let m=256;m<=279;m++)w[m]=7;for(let m=280;m<=287;m++)w[m]=8;g=tt(w),v=tt(new Array(32).fill(5))}else{const w=n.Wr(5)+257,m=n.Wr(5)+1,T=n.Wr(4)+4,y=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],E=new Array(19).fill(0);for(let M=0;M<T;M++)E[y[M]]=n.Wr(3);const x=tt(E),b=[];for(;b.length<w+m;){const M=vt(n,x);if(M<=15)b.push(M);else if(M===16){const I=n.Wr(2)+3,B=b[b.length-1]||0;for(let ut=0;ut<I;ut++)b.push(B)}else if(M===17){const I=n.Wr(3)+3;for(let B=0;B<I;B++)b.push(0)}else{if(M!==18)throw new Error("Invalid code length symbol");{const I=n.Wr(7)+11;for(let B=0;B<I;B++)b.push(0)}}}const F=b.slice(0,w),U=b.slice(w,w+m);g=tt(F),v=tt(U)}for(;;){const w=vt(n,g);if(w<256)a.push(w);else{if(w===256)break;if(w>256&&w<286){const m=w-257;let T=c[m];const y=u[m];y&&(T+=n.Wr(y));const E=vt(n,v);if(E>=30)throw new Error("Invalid distance symbol");let x=d[E];const b=f[E];b&&(x+=n.Wr(b));const F=a.length-x;if(F<0)throw new Error("Invalid distance");for(let U=0;U<T;U++)a.push(a[F+U]||0)}else if(w===286||w===287)throw new Error("Reserved length symbol")}}}}}}(new ci(o.subarray(r)),h),new Uint8Array(h)}function fi(o){const t=C,i=new Uint8Array(o);if(t.Xr(i,0,4)!=="wOFF")throw new Error("Invalid WOFF signature");const r=t.Nr(i,4),h=t.Hr(i,12),n=t.Nr(i,16),a=[];let c=44;for(let y=0;y<h;y++){const E=t.Xr(i,c,4),x=t.Nr(i,c+4),b=t.Nr(i,c+8),F=t.Nr(i,c+12),U=t.Nr(i,c+16);a.push({tag:E,offset:x,qr:b,Vr:F,Qr:U}),c+=20}for(const y of a){const E=new Uint8Array(i.buffer,y.offset,y.qr);if(y.qr===y.Vr)y.data=new Uint8Array(E);else if(y.data=ui(E),y.data.length!==y.Vr)if(y.data.length<y.Vr){const x=new Uint8Array(y.Vr);x.set(y.data),y.data=x}else y.data=y.data.subarray(0,y.Vr)}const u=h;let d=1,f=0;for(;d<<1<=u;)d<<=1,f++;const p=16*d,A=16*u-p;let g=12+16*u;const v={};for(const y of a)v[y.tag]=g,g=nt(g+y.data.length);const w=Math.max(n||0,g),m=new Uint8Array(w);P(m,0,r),ht(m,4,u),ht(m,6,p),ht(m,8,f),ht(m,10,A);let T=12;for(const y of a){ai(m,T,y.tag),T+=4;let E=y.data;if(y.tag==="head"&&E.length>=12){const x=new Uint8Array(E);P(x,8,0),P(m,T,gt(x,0,nt(x.length))),T+=4}else P(m,T,gt(E,0,nt(E.length))),T+=4;P(m,T,v[y.tag]),T+=4,P(m,T,y.data.length),T+=4}for(const y of a){const E=v[y.tag];m.set(y.data,E)}if(a.find(y=>y.tag==="head")){const y=v.head,E=function(x,b){const F=b+8,U=[x[F],x[F+1],x[F+2],x[F+3]];P(x,F,0);const M=2981146554-(gt(x,0,nt(x.length))>>>0)>>>0;return x[F]=U[0],x[F+1]=U[1],x[F+2]=U[2],x[F+3]=U[3],M>>>0}(m,y);P(m,y+8,E)}return m.buffer}const di={Jr(o,t,i){const r={tn:[],sn:{},off:t};o=new Uint8Array(o.buffer,t,i),t=0;const h=C,n=h.Hr,a=n(o,t+=2);t+=2;const c=[];for(let u=0;u<a;u++){const d=n(o,t),f=n(o,t+=2);t+=2;const p=h.Nr(o,t);t+=4;const A=`p${d}e${f}`;let g=c.indexOf(p);if(g===-1){let v;g=r.tn.length,c.push(p);const w=n(o,p);v=w===4?this.en(o,p):w===12?this.rn(o,p):{format:w},r.tn.push(v)}r.sn[A]=g}return r},en(o,t){const i=C,r=i.Hr,h=i.Gr,n=t,a=r(o,t+=2);t+=2;const c=r(o,t+=2)>>>1,u={format:4,nn:r(o,t+=2),hn:0,an:0,cn:[],ln:[],un:[],fn:[],dn:[]};t+=2,u.hn=r(o,t),t+=2,u.an=r(o,t),t+=2,u.cn=h(o,t,c),t+=2*c,t+=2,u.ln=h(o,t,c),t+=2*c;for(let d=0;d<c;d++)u.un.push(i.Lr(o,t)),t+=2;return u.fn=h(o,t,c),t+=2*c,u.dn=h(o,t,n+a-t>>1),u},rn(o,t){const i=C.Nr;i(o,t+=4),i(o,t+=4);const r=i(o,t+=4);t+=4;const h=new Uint32Array(3*r);for(let n=0;n<3*r;n+=3)h[n]=i(o,t+(n<<2)),h[n+1]=i(o,t+(n<<2)+4),h[n+2]=i(o,t+(n<<2)+8);return{format:12,groups:h}}},pi={Jr(o,t,i){const r=C;t+=18;const h=r.Hr(o,t);t+=2,t+=16;const n=r.Lr(o,t);t+=2;const a=r.Lr(o,t);t+=2;const c=r.Lr(o,t);t+=2;const u=r.Lr(o,t);return t+=2,t+=6,{pn:h,gn:n,vn:a,mn:c,An:u,_n:r.Lr(o,t)}}},Ai={Jr(o,t,i){const r=C;t+=4;const h=["ascender","descender","lineGap","advanceWidthMax","minLeftSideBearing","minRightSideBearing","xMaxExtent","caretSlopeRise","caretSlopeRun","caretOffset","res0","res1","res2","res3","metricDataFormat","numberOfHMetrics"],n={};for(let a=0;a<h.length;a++){const c=h[a],u=c==="advanceWidthMax"||c==="numberOfHMetrics"?r.Hr:r.Lr;n[c]=u(o,t+2*a)}return n}},gi={Jr(o,t,i,r){const h=C,n=[],a=[],c=r.wn.yn,u=r.Cn.bn;let d=0,f=0,p=0;for(;p<u;)d=h.Hr(o,t+(p<<2)),f=h.Lr(o,t+(p<<2)+2),n.push(d),a.push(f),p++;for(;p<c;)n.push(d),a.push(f),p++;return{Mn:n,xn:a}}},Ut={Fn:di,head:pi,Cn:Ai,wn:{Jr(o,t,i){const r=C;return r.Nr(o,t),t+=4,{yn:r.Hr(o,t)}}},Tn:gi,Un:{Jr(o,t,i,r){const h=C,n=[],a=r.head._n,c=r.wn.yn+1;if(a===0)for(let u=0;u<c;u++)n.push(h.Hr(o,t+(u<<1))<<1);else if(a===1)for(let u=0;u<c;u++)n.push(h.Nr(o,t+(u<<2)));return n}},Pn:{Jr(o,t,i,r){const h=[],n=r.wn.yn;for(let a=0;a<n;a++)h.push(null);return h},En(o,t){const i=C,r=o.Rn,h=o.Un;if(h[t]===h[t+1])return null;const n=K.$n(r,"glyf",o.Sn);if(!n)return null;let a=n[0]+h[t];const c={};if(c.kn=i.Lr(r,a),a+=2,c.gn=i.Lr(r,a),a+=2,c.vn=i.Lr(r,a),a+=2,c.mn=i.Lr(r,a),a+=2,c.An=i.Lr(r,a),a+=2,c.gn>=c.mn||c.vn>=c.An)return null;if(c.kn>0){c.zn=[];for(let A=0;A<c.kn;A++)c.zn.push(i.Hr(r,a)),a+=2;const u=i.Hr(r,a);if(a+=2,r.length-a<u)return null;a+=u;const d=c.zn[c.kn-1]+1;c.flags=[];for(let A=0;A<d;A++){const g=r[a];if(a++,c.flags.push(g),8&g){const v=r[a];a++;for(let w=0;w<v;w++)c.flags.push(g),A++}}c.In=[];for(let A=0;A<d;A++){const g=c.flags[A],v=!!(16&g);2&g?(c.In.push(v?r[a]:-r[a]),a++):v?c.In.push(0):(c.In.push(i.Lr(r,a)),a+=2)}c.On=[];for(let A=0;A<d;A++){const g=c.flags[A],v=!!(32&g);4&g?(c.On.push(v?r[a]:-r[a]),a++):v?c.On.push(0):(c.On.push(i.Lr(r,a)),a+=2)}let f=0,p=0;for(let A=0;A<d;A++)f+=c.In[A],p+=c.On[A],c.In[A]=f,c.On[A]=p}else c.Dn=[],c.zn=[],c.flags=[],c.In=[],c.On=[];return c}}},K={parse(o){const t=new Uint8Array(o);C.Xr(t,0,4)==="wOFF"&&(o=fi(o));const i=new Uint8Array(o),r=Ut,h={},n={Rn:i,Ln:0,Sn:0};for(const a in r){const c=a,u=K.$n(i,c,0);if(u){const[d,f]=u;let p=h[d];p==null&&(p=r[c].Jr(i,d,f,n),h[d]=p),n[c]=p}}return[n]},$n(o,t,i){const r=C,h=r.Hr(o,i+4);let n=i+12;for(let a=0;a<h;a++){const c=r.Xr(o,n,4);r.Nr(o,n+4);const u=r.Nr(o,n+8),d=r.Nr(o,n+12);if(c===t)return[u,d];n+=16}return null},Bn:Ut,Hn:C};class vi{Gn(t){var r;const i=[];return(r=t.Fn)!=null&&r.tn?(t.Fn.tn.forEach(h=>{if(h.format===4){const n=this.Nn(h);i.push(...n)}else if(h.format===12){const n=this.Xn(h);i.push(...n)}}),[...new Set(i)]):[]}Nn(t){const i=[];if(!(t.ln&&t.cn&&t.fn&&t.un))return i;for(let r=0;r<t.ln.length;r++){const h=t.ln[r],n=t.cn[r];if(h!==65535||n!==65535){for(let a=h;a<=n;a++)if(this.Yn(t,a,r)>0)try{const c=String.fromCodePoint(a);i.push(c)}catch{}}}return i}Xn(t){const i=[];if(!t.groups)return i;for(let r=0;r<t.groups.length;r+=3){const h=t.groups[r],n=t.groups[r+1],a=t.groups[r+2];for(let c=h;c<=n;c++)if(a+(c-h)>0)try{const u=String.fromCodePoint(c);i.push(u)}catch{}}return i}Yn(t,i,r){if(t.fn[r]===0)return i+t.un[r]&65535;{const h=t.fn[r]/2+(i-t.ln[r])-(t.ln.length-r);if(h>=0&&t.dn&&h<t.dn.length){const n=t.dn[h];if(n!==0)return n+t.un[r]&65535}}return 0}}class mt{constructor(){l(this,"Kn",new Map);l(this,"jn",new Map)}Wn(t,i){const r=`${this.Zn(t)}_${i}`;if(this.Kn.has(r))return this.Kn.get(r);const h=t.Fn;if(!h||!h.tn)return this.Kn.set(r,0),0;let n=0;for(const a of h.tn)if(a.format===4?n=this.qn(i,a):a.format===12&&(n=this.Vn(i,a)),n>0)break;return this.Kn.set(r,n),n}Qn(t,i){const r=i.codePointAt(0);return r===void 0?0:this.Wn(t,r)}Jn(t,i){const r=t.Tn;return r&&r.Mn&&r.Mn.length!==0?i<r.Mn.length?r.Mn[i]:r.Mn[r.Mn.length-1]:0}so(t,i){const r=i/t.head.pn,h=t.Cn.eo*r,n=t.Cn.io*r,a=t.Cn.ro*r;return{eo:h,io:n,ro:a,lineHeight:h-n+a,pn:t.head.pn,scale:r}}no(){this.Kn.clear(),this.jn.clear()}Zn(t){return`${t.Sn}_${t.Rn.length}`}qn(t,i){const r=i.cn.length;let h=-1;for(let n=0;n<r;n++)if(t<=i.cn[n]){h=n;break}if(h===-1||t<i.ln[h])return 0;if(i.fn[h]===0)return t+i.un[h]&65535;{const n=i.fn[h]/2+(t-i.ln[h])-(r-h);if(n>=0&&n<i.dn.length){const a=i.dn[n];return a===0?0:a+i.un[h]&65535}}return 0}Vn(t,i){const r=i.groups.length/3;for(let h=0;h<r;h++){const n=i.groups[3*h],a=i.groups[3*h+1],c=i.groups[3*h+2];if(t>=n&&t<=a)return c+(t-n)}return 0}}class mi{constructor(t){l(this,"oo");l(this,"ho");l(this,"Y");l(this,"ao");this.Y=t,this.ao=new mt,this.oo=document.createElement("canvas"),this.ho=this.oo.getContext("2d",{co:!0,alpha:!0})}lo(t,i,r,h){const n=t.length,a=Math.ceil(Math.sqrt(n)),c=Math.ceil(n/a),u=i.width*a,d=i.height*c;this.uo(u,d),this.fo(t,i,a,r,h);const f=this.Y.Ir(u,d,1,{filter:"nearest"});return f.tt(this.oo),{framebuffer:f,columns:a,rows:c}}uo(t,i){this.oo.width=t,this.oo.height=i,this.oo.style.width=t+"px",this.oo.style.height=i+"px",this.ho.imageSmoothingEnabled=!1,this.oo.style.imageRendering="pixelated",this.ho.clearRect(0,0,t,i),this.ho.textBaseline="top",this.ho.textAlign="left",this.ho.fillStyle="white"}fo(t,i,r,h,n){const a=h/n.head.pn;for(let c=0;c<t.length;c++){const u=c%r,d=Math.floor(c/r),f=t[c].do,p=this.po(n,f);if(!p)continue;const A=f.codePointAt(0)||0,g=this.ao.Wn(n,A),v=this.ao.Jn(n,g)*a,w=u*i.width,m=d*i.height,T=w+.5*i.width,y=m+.5*i.height,E=Math.round(T-.5*i.width),x=Math.round(y-.5*h),b=E+.5*(i.width-v),F=x+n.Cn.eo*a;this.vo(p,b,F,a)}}po(t,i){const r=i.codePointAt(0)||0,h=this.ao.Wn(t,r);return h===0?null:K.Bn.Pn.En(t,h)}vo(t,i,r,h){if(!t||!t.In||t.kn===0)return;let{In:n,On:a,zn:c,flags:u}=t;if(!(n&&a&&c&&u))return;this.ho.beginPath();let d=0;for(let f=0;f<c.length;f++){const p=c[f];if(!(p<d)){if(p>=d){const A=i+n[d]*h,g=r-a[d]*h;this.ho.moveTo(A,g);let v=d+1;for(;v<=p;)if(1&u[v]){const w=i+n[v]*h,m=r-a[v]*h;this.ho.lineTo(w,m),v++}else{const w=i+n[v]*h,m=r-a[v]*h;if(v+1>p){const y=i+n[d]*h,E=r-a[d]*h;if(1&u[d])this.ho.quadraticCurveTo(w,m,y,E);else{const x=(w+y)/2,b=(m+E)/2;this.ho.quadraticCurveTo(w,m,x,b)}break}const T=v+1;if(1&u[T]){const y=i+n[T]*h,E=r-a[T]*h;this.ho.quadraticCurveTo(w,m,y,E),v=T+1}else{const y=(w+(i+n[T]*h))/2,E=(m+(r-a[T]*h))/2;this.ho.quadraticCurveTo(w,m,y,E),v=T}}this.ho.closePath()}d=p+1}}this.ho.fill()}}class wi{constructor(){l(this,"mo");this.mo=new mt}Ao(t,i,r){let h=0;const n=this.mo.so(r,i),a=n.lineHeight;for(const c of t){const u=this.mo.Qn(r,c);if(u===0)continue;const d=this.mo.Jn(r,u)*n.scale;h=Math.max(h,d)}return{width:Math.ceil(h),height:Math.ceil(a)}}no(){this.mo.no()}}class yi{constructor(){l(this,"ao");this.ao=new mt}_o(t,i){return t.map((r,h)=>{const n=r.codePointAt(0)||0,a=this.yo(h);let c=0;if(i.Tn&&i.Tn.Mn){const u=this.ao.Wn(i,n);u>0&&i.Tn.Mn[u]!==void 0&&(c=i.Tn.Mn[u])}return{do:r,unicode:n,color:a,wo:c}})}yo(t){return[t%256/255,Math.floor(t/256)%256/255,0]}bo(t,i){if(!W.v(typeof t=="string","Character must be a string.",{method:"getCharacterColor",Co:t}))return[0,0,0];const r=i.find(h=>h.do===t);return r?r.color:[0,0,0]}Mo(t,i){return W.v(typeof t=="string"&&t.length>0,"Characters must be a string with at least one character.",{method:"getCharacterColors",Co:t})?Array.from(t).map(r=>this.bo(r,i)||[0,0,0]):[[0,0,0]]}}class wt{constructor(t,i=16){l(this,"xo");l(this,"Fo",[]);l(this,"To");l(this,"Uo",16);l(this,"Po",0);l(this,"Eo",0);l(this,"Ro",{width:0,height:0});l(this,"$o");l(this,"So",new Map);l(this,"ko");l(this,"zo");l(this,"Io");l(this,"Oo");this.Uo=i,this.ko=new vi,this.zo=new mi(t),this.Io=new wi,this.Oo=new yi}async Do(t){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,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")).arrayBuffer();await this.Lo(i),this.xo=K.parse(i)[0],await this.Bo()}Ho(t){if(t===void 0)return this.Uo;this.Uo=t,this.Ro=this.Io.Ao(this.Fo.map(r=>r.do),this.Uo,this.xo);const i=this.zo.lo(this.Fo,this.Ro,this.Uo,this.xo);this.To=i.framebuffer,this.Po=i.columns,this.Eo=i.rows}async Go(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.Lo(r);const h=K.parse(r);if(!h||h.length===0)throw new Error("Failed to parse font file");this.xo=h[0],await this.Bo()}catch(i){throw new R(`Failed to load font: ${i instanceof Error?i.message:"Unknown error"}`,i)}}async Lo(t){const i=Date.now();this.$o=new FontFace(`CustomFont_${i}`,t),await this.$o.load(),document.fonts.add(this.$o)}async Bo(){const t=this.ko.Gn(this.xo);this.So.clear(),this.Fo=this.Oo._o(t,this.xo),this.Ro=this.Io.Ao(t,this.Uo,this.xo);const i=this.zo.lo(this.Fo,this.Ro,this.Uo,this.xo);this.To=i.framebuffer,this.Po=i.columns,this.Eo=i.rows}bo(t){return this.Oo.bo(t,this.Fo)}Mo(t){return this.Oo.Mo(t,this.Fo)}No(t){if(!Number.isFinite(t))return null;const i=this.So.get(t);if(i!==void 0)return i;const r=this.Xo(t);if(r<0)return this.So.set(t,null),null;const h=this.xo.Pn;if(!h)return this.So.set(t,null),null;let n=h[r]??null;return n==null&&(n=K.Bn.Pn.En(this.xo,r)??null,h[r]=n),this.So.set(t,n),n}Xo(t){const i=this.xo.Fn;for(const r of i.tn)if(r.format===4){const h=r;for(let n=0;n<h.ln.length;n++)if(t>=h.ln[n]&&t<=h.cn[n]){if(h.fn[n]===0)return t+h.un[n]&65535;{const a=h.fn[n]/2+(t-h.ln[n])-(h.ln.length-n);if(a>=0&&a<h.dn.length){const c=h.dn[a];if(c!==0)return c+h.un[n]&65535}}}}else if(r.format===12){const h=r;for(let n=0;n<h.groups.length;n+=3){const a=h.groups[n],c=h.groups[n+1],u=h.groups[n+2];if(t>=a&&t<=c)return u+(t-a)}}return 0}D(){this.To.D(),document.fonts.delete(this.$o)}get Yo(){return this.To}get Ko(){return this.Fo}get jo(){return this.Po}get Wo(){return this.Eo}get Zo(){return this.Ro}get fontSize(){return this.Uo}get font(){return this.xo}}class yt{constructor(t,i,r){l(this,"qo");l(this,"Vo");l(this,"L");l(this,"B");l(this,"Qo");l(this,"Jo");l(this,"th");l(this,"sh");l(this,"eh");this.th=t,this.sh=i,this.eh=r,this.ih()}ih(){this.qo=Math.floor(this.th.width/this.sh),this.Vo=Math.floor(this.th.height/this.eh),this.L=this.qo*this.sh,this.B=this.Vo*this.eh,this.Qo=Math.floor((this.th.width-this.L)/2),this.Jo=Math.floor((this.th.height-this.B)/2)}rh(t,i){this.sh=t,this.eh=i,this.ih()}get nh(){return this.sh}get oh(){return this.eh}get cols(){return this.qo}get rows(){return this.Vo}get width(){return this.L}get height(){return this.B}get offsetX(){return this.Qo}get offsetY(){return this.Jo}}const Ei=/^#([0-9a-f]{3,8})$/i,Ti=/^rgba?\(([^)]+)\)$/i;function Et(o){return Number.isNaN(o)?0:Math.max(0,Math.min(255,o))}function xi(o){if(!o)return null;const t=o.trim().toLowerCase();if(!t||t==="transparent")return null;let i=null;return t.startsWith("#")?i=function(r){const h=Ei.exec(r.trim());if(!h)return null;const n=h[1];return n.length===3?[parseInt(n[0]+n[0],16),parseInt(n[1]+n[1],16),parseInt(n[2]+n[2],16),255]:n.length===4?[parseInt(n[0]+n[0],16),parseInt(n[1]+n[1],16),parseInt(n[2]+n[2],16),parseInt(n[3]+n[3],16)]:n.length===6||n.length===8?[parseInt(n.slice(0,2),16),parseInt(n.slice(2,4),16),parseInt(n.slice(4,6),16),n.length===8?parseInt(n.slice(6,8),16):255]:null}(t):t.startsWith("rgb")&&(i=function(r){const h=Ti.exec(r.trim());if(!h)return null;const n=h[1].split(",").map(f=>f.trim());if(n.length<3)return null;const a=Et(parseFloat(n[0])),c=Et(parseFloat(n[1])),u=Et(parseFloat(n[2])),d=n[3]!==void 0?255*Math.max(0,Math.min(1,parseFloat(n[3]))):255;return[a,c,u,Math.round(d)]}(t)),i?i[3]===0?null:i:null}class Nt{constructor(t={}){l(this,"th");l(this,"hh",null);l(this,"ah",!1);l(this,"uh");this.ah=t.fh??!1,this.ah&&t.canvas?(this.hh=t.canvas,this.th=this.dh(),this.uh=!0,this.ph()):t.canvas?(this.th=t.canvas,this.uh=!1):(this.th=this.gh(t.width,t.height),this.uh=!0),this.th.style.imageRendering="pixelated"}gh(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}dh(){const t=document.createElement("canvas");t.className="textmodeCanvas",t.style.imageRendering="pixelated";const i=this.hh.getBoundingClientRect();let r=Math.round(i.width),h=Math.round(i.height);if(this.hh instanceof HTMLVideoElement){const c=this.hh;(r===0||h===0)&&c.videoWidth>0&&c.videoHeight>0&&(r=c.videoWidth,h=c.videoHeight)}t.width=r,t.height=h,t.style.position="absolute",t.style.pointerEvents="none";const n=window.getComputedStyle(this.hh);let a=parseInt(n.zIndex||"0",10);return isNaN(a)&&(a=0),t.style.zIndex=(a+1).toString(),t}ph(){var t;this.mh(),(t=this.hh.parentNode)==null||t.insertBefore(this.th,this.hh.nextSibling)}Ah(){const t=[];return this.ah&&this.hh instanceof HTMLElement&&(t.push(this.hh),this.hh.parentElement&&t.push(this.hh.parentElement)),this.th.parentElement&&t.push(this.th.parentElement),t.push(this.th),t.push(document.body),t.push(document.documentElement),t}_h(){const t=this.Ah();for(const i of t){if(!i)continue;const r=xi(window.getComputedStyle(i).backgroundColor);if(r)return r}return[255,255,255,255]}mh(){if(!this.hh)return;const t=this.hh.getBoundingClientRect();let i=this.hh.offsetParent;if(i&&i!==document.body){const r=i.getBoundingClientRect();this.th.style.top=t.top-r.top+"px",this.th.style.left=t.left-r.left+"px"}else this.th.style.top=t.top+window.scrollY+"px",this.th.style.left=t.left+window.scrollX+"px"}yh(t,i){if(this.ah){const r=this.hh.getBoundingClientRect();this.th.width=Math.round(r.width),this.th.height=Math.round(r.height),this.mh()}else this.th.width=t??this.th.width,this.th.height=i??this.th.height}wh(){const t=this.th.getContext("webgl2",{alpha:!0,premultipliedAlpha:!1,bh:!0,antialias:!1,Z:!0,Ch:!1,powerPreference:"high-performance"});if(!t)throw new R("`textmode.js` requires WebGL2 support.");return t}D(){const t=this.th.getContext("webgl")||this.th.getContext("webgl2");if(t){const i=t.getExtension("WEBGL_lose_context");i==null||i.Mh()}this.uh&&this.th.parentNode&&this.th.parentNode.removeChild(this.th)}get canvas(){return this.th}get xh(){return this.hh}get width(){return this.th.width}get height(){return this.th.height}}const bi=/^#|0x/gi;function it(o){return Number.isNaN(o)||!Number.isFinite(o)||o<=0?0:o>=255?255:Math.round(o)}function ot(o){return it(parseInt(o,16))}class N{constructor(t,i,r,h,n){l(this,"Fh");l(this,"Th");l(this,"Yt");l(this,"r");l(this,"g");l(this,"b");l(this,"a");this.r=it(t),this.g=it(i),this.b=it(r),this.a=it(h),this.Fh=[this.r,this.g,this.b,this.a],this.Th=[this.r/255,this.g/255,this.b/255,this.a/255],this.Yt=n?[...n]:void 0}static Uh(t,i,r,h=255){return new N(t,i,r,h)}static Ph(t,i=255){return new N(t,t,t,i)}static Eh(t){const[i,r,h,n]=function(a){const c=a.replace(bi,""),u=(d=c).length===3||d.length===4?d.split("").map(f=>f+f).join(""):d;var d;if(u.length!==6&&u.length!==8)throw new Error(`Invalid hex color: ${a}`);return[ot(u.slice(0,2)),ot(u.slice(2,4)),ot(u.slice(4,6)),u.length===8?ot(u.slice(6,8)):255]}(t);return new N(i,r,h,n)}static Rh(t){const[i,r,h]=t;return new N(255*i,255*r,255*h,255,t)}get $h(){return[this.r,this.g,this.b]}get Sh(){return[...this.Fh]}get te(){return[...this.Th]}get do(){return this.Yt?[...this.Yt]:void 0}static kh(t){return t instanceof N}}const V=class V{constructor(t,i,r,h,n,a,c){l(this,"A");l(this,"Y");l(this,"zh");l(this,"Ih");l(this,"Oh");l(this,"L");l(this,"B");l(this,"K",null);l(this,"$t",0);l(this,"Nt",0);l(this,"Xt",0);l(this,"St",0);l(this,"Dh","sampled");l(this,"Lh","fixed");l(this,"Kt",[1,1,1,1]);l(this,"jt",[0,0,0,1]);l(this,"Bh",[0,0,0,1]);l(this,"Hh",[[.1,0,0]]);l(this,"Gh");this.A=t,this.Y=i,this.zh=r,this.Ih=h,this.Oh=n,this.L=a,this.B=c}dispose(){this.A.deleteTexture(this.zh)}ke(t=!0){return this.$t=t?1:0,this.K=null,this}flipX(t=!0){return this.Nt=t?1:0,this.K=null,this}flipY(t=!0){return this.Xt=t?1:0,this.K=null,this}Xh(t){return this.St=bt(t),this.K=null,this}Yh(t){return this.Dh=t,this.K=null,this}Kh(t){return this.Lh=t,this.K=null,this}jh(t,i,r,h){return this.Wh(this.Kt,t,i,r,h),this.K=null,this}Zh(t,i,r,h){return this.Wh(this.jt,t,i,r,h),this.K=null,this}background(t,i,r,h){return this.Wh(this.Bh,t,i,r,h),this.K=null,this}Ko(t){if(!this.Gh)throw new Error("Glyph color resolver not initialized");const i=this.Gh(t).filter(r=>Array.isArray(r)).slice(0,64);return this.Hh=i,this.K=null,this}get texture(){return this.zh}get width(){return this.L}get height(){return this.B}get qh(){return this.Ih}get Vh(){return this.Oh}ct(){return this.K||this.lt(),this.K}Qh(){}lt(){this.Qh();const t=this.Jh(),i=this.ta();this.K=this.Y.At.ji(t,i)}Wh(t,i,r,h,n){if(N.kh(i))k(t,i.r,i.g,i.b,i.a);else{if(typeof i=="string"){const a=N.Eh(i);return void k(t,a.r,a.g,a.b,a.a)}k(t,i,r,h,n)}}Jh(){return V.Nh||(V.Nh=new Z(this.A,st,`#version 300 es
|
|
11
|
-
precision highp float;in vec2 v_uv;uniform sampler2D Uh;uniform bool Ui;uniform bool Uj;uniform bool Uk;uniform float Ul;uniform bool Um;uniform vec4 Un;uniform bool Uo;uniform vec4 Up;uniform vec4 Uq;uniform int Ur;uniform vec3 Us[64];layout(location=0)out vec4 o_character;layout(location=1)out vec4 o_primaryColor;layout(location=2)out vec4 o_secondaryColor;float A(vec3 B){return dot(B,vec3(0.299f,0.587f,0.114f));}void main(){vec2 C=vec2(v_uv.x,1.0f-v_uv.y);vec4 D=texture(Uh,C);float E=A(D.rgb);vec2 F=vec2(0.);if(Ur>0){float G=float(Ur);float H=clamp(E*(G-1.0f),0.0f,G-1.0f);int I=int(floor(H+0.5f));vec3 J=Us[I];F=J.xy;}else{F=vec2(E,0.0f);}vec4 K=Um?Un:D;vec4 L=Uo?Up:D;if(D.a<0.01f){K=Uq;L=Uq;}else{}o_primaryColor=vec4(K.rgb,K.a);o_secondaryColor=vec4(L.rgb,L.a);int M=int(Ui?1:0);int N=int(Uj?1:0);int O=int(Uk?1:0);float P=float(M|(N<<1)|(O<<2))/255.;o_character=vec4(F,P,clamp(Ul,0.0f,1.0f));}`)),V.Nh}ta(){return{sa:this.ea(),ia:!!this.$t,ra:!!this.Nt,na:!!this.Xt,oa:this.St,ha:this.Dh==="fixed",aa:this.Kt,ca:this.Lh==="fixed",la:this.jt,ua:this.Bh,fa:this.Hh.length,da:this.Hh}}};l(V,"Nh",null);let at=V;class j extends at{constructor(t,i,r,h,n,a,c){const u=Math.min(a/h,c/n);super(t,i,r,h,n,Math.max(1,Math.floor(h*u)),Math.max(1,Math.floor(n*u)))}static pa(t,i,r,h,n){const a=t.context,c=a.createTexture();a.bindTexture(a.TEXTURE_2D,c),a.pixelStorei(a.UNPACK_FLIP_Y_WEBGL,1),et(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,i),a.bindTexture(a.TEXTURE_2D,null);const u=i.naturalWidth??i.width??i.videoWidth??0,d=i.naturalHeight??i.height??i.videoHeight??0,f=new j(a,t,c,u,d,r,h);return f.Gh=n,f}ea(){return this.zh}}class Fi{constructor(t=60){l(this,"ga");l(this,"va",null);l(this,"ma",0);l(this,"Aa",!0);l(this,"_a",0);l(this,"ya",0);l(this,"wa",[]);l(this,"ba",10);l(this,"Ca",0);this.ga=1e3/t}Ma(t){if(!this.Aa)return;this.ma=performance.now();const i=r=>{if(!this.Aa)return void(this.va=null);const h=r-this.ma;h>=this.ga&&(t(),this.ma=r-h%this.ga),this.Aa&&(this.va=requestAnimationFrame(i))};this.va=requestAnimationFrame(i)}xa(){this.va&&(cancelAnimationFrame(this.va),this.va=null)}Fa(){this.Aa&&(this.Aa=!1,this.xa())}Ta(t){this.Aa||(this.Aa=!0,this.Ma(t))}Ua(t,i){if(t===void 0)return this._a;this.ga=1e3/t,this.Aa&&i&&(this.xa(),this.Ma(i))}Pa(){const t=performance.now();if(this.ya>0){const i=t-this.ya;this.wa.push(i),this.wa.length>this.ba&&this.wa.shift();const r=this.wa.reduce((h,n)=>h+n,0)/this.wa.length;this._a=1e3/r}this.ya=t}get Ea(){return this.Aa}get Ra(){return this._a}get $a(){return this.Ca}set $a(t){this.Ca=t}Sa(){this.Ca++}}class Dt{constructor(t){l(this,"th");l(this,"ka");l(this,"za",{x:-1,y:-1});l(this,"Ia",{x:-1,y:-1});l(this,"Oa",null);l(this,"Da",0);l(this,"La");l(this,"Ba");l(this,"Ha");l(this,"Ga");l(this,"Na");l(this,"Xa");l(this,"Ya",!1);l(this,"Ka");l(this,"ja");l(this,"Wa");l(this,"Za");l(this,"qa");this.th=t}Va(t){const i=performance.now()+Math.max(0,t);i>this.Da&&(this.Da=i)}Qa(){return performance.now()<this.Da}Ja(t){const i=this.th.canvas;i.style.cursor=t==null||t===""?"":t}Do(t){this.ka=t,this.tc()}sc(){if(this.Ya)return;const t=this.th.canvas;this.La=i=>{this.ec(i),this.rc(i)},this.Ba=()=>{this.Ia={...this.za},this.za.x=-1,this.za.y=-1,this.Oa=null},this.Ha=i=>{this.ec(i),this.nc(i)},this.Ga=i=>{this.ec(i),this.oc(i)},this.Na=i=>{this.ec(i),this.hc(i)},this.Xa=i=>{this.ec(i),this.ac(i)},t.addEventListener("mousemove",this.La,{passive:!0}),t.addEventListener("mouseleave",this.Ba,{passive:!0}),t.addEventListener("mousedown",this.Ha,{passive:!0}),t.addEventListener("mouseup",this.Ga,{passive:!0}),t.addEventListener("click",this.Na,{passive:!0}),t.addEventListener("wheel",this.Xa,{passive:!1}),this.Ya=!0}cc(){if(!this.Ya)return;const t=this.th.canvas;t.removeEventListener("mousemove",this.La),t.removeEventListener("mouseleave",this.Ba),t.removeEventListener("mousedown",this.Ha),t.removeEventListener("mouseup",this.Ga),t.removeEventListener("click",this.Na),t.removeEventListener("wheel",this.Xa),this.Ya=!1}tc(){if(this.Ya)try{if(this.Oa){const t=new MouseEvent("mousemove",{clientX:this.Oa.x,clientY:this.Oa.y,bubbles:!1,cancelable:!1});this.ec(t)}else this.za.x!==-1&&this.za.y!==-1&&(this.za.x>=this.ka.cols||this.za.y>=this.ka.rows)&&(this.za.x=-1,this.za.y=-1)}catch{this.za.x=-1,this.za.y=-1}}lc(t){this.Ka=t}uc(t){this.ja=t}fc(t){this.Wa=t}dc(t){this.Za=t}gc(t){this.qa=t}vc(){return{x:this.za.x,y:this.za.y}}rc(t){if(this.Za&&!this.Qa()){const i={position:{...this.za},mc:{...this.Ia},Ac:t};this.Za(i)}}nc(t){if(this.ja&&!this.Qa()){const i={position:{...this.za},mc:{...this.Ia},button:t.button,Ac:t};this.ja(i)}}oc(t){if(this.Wa&&!this.Qa()){const i={position:{...this.za},mc:{...this.Ia},button:t.button,Ac:t};this.Wa(i)}}hc(t){if(this.Ka&&!this.Qa()){const i={position:{...this.za},mc:{...this.Ia},button:t.button,Ac:t};this.Ka(i)}}ac(t){if(this.qa&&!this.Qa()){const i={position:{...this.za},mc:{...this.Ia},delta:{x:t.deltaX,y:t.deltaY},Ac:t};this.qa(i)}}ec(t){const i=this.th.canvas;this.Ia={...this.za},this.Oa={x:t.clientX,y:t.clientY};const r=i.getBoundingClientRect(),h=t.clientX-r.left,n=t.clientY-r.top,a=i.width/r.width,c=n*(i.height/r.height),u=h*a-this.ka.offsetX,d=c-this.ka.offsetY,f=Math.floor(u/this.ka.nh),p=Math.floor(d/this.ka.oh);f>=0&&f<this.ka.cols&&p>=0&&p<this.ka.rows?(this.za.x=f,this.za.y=p):(this.za.x=-1,this.za.y=-1)}}const Ri=Object.freeze(Object.defineProperty({__proto__:null,_c:Dt},Symbol.toStringTag,{value:"Module"}));class Bt{constructor(){l(this,"yc",new Map);l(this,"wc",null);l(this,"bc",null);l(this,"Cc");l(this,"Mc");l(this,"Ya",!1);l(this,"xc");l(this,"Fc");l(this,"Tc",{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"})}sc(){this.Ya||(this.Cc=t=>{this.Uc(t)},this.Mc=t=>{this.Pc(t)},window.addEventListener("keydown",this.Cc,{passive:!1}),window.addEventListener("keyup",this.Mc,{passive:!1}),this.Ya=!0)}cc(){this.Ya&&(window.removeEventListener("keydown",this.Cc),window.removeEventListener("keyup",this.Mc),this.Ya=!1,this.yc.clear(),this.wc=null,this.bc=null)}uc(t){this.xc=t}fc(t){this.Fc=t}Ec(t){const i=this.Rc(t),r=this.yc.get(t)||this.yc.get(i);return(r==null?void 0:r.$c)||!1}Sc(){return this.wc}kc(){return this.bc}zc(){const t=[];for(const[i,r]of this.yc)r.$c&&t.push(i);return t}Ic(){return{Oc:this.Ec("Control"),shift:this.Ec("Shift"),alt:this.Ec("Alt"),Dc:this.Ec("Meta")}}Lc(){this.yc.clear(),this.wc=null,this.bc=null}Uc(t){const i=t.key,r=Date.now();this.yc.has(i)||this.yc.set(i,{$c:!1,Bc:0,Hc:0});const h=this.yc.get(i);if(!h.$c&&(h.$c=!0,h.Bc=r,this.wc=i,this.xc)){const n={key:i,keyCode:t.keyCode,ctrlKey:t.ctrlKey,shiftKey:t.shiftKey,altKey:t.altKey,metaKey:t.metaKey,$c:!0,Ac:t};this.xc(n)}}Pc(t){const i=t.key,r=Date.now();this.yc.has(i)||this.yc.set(i,{$c:!1,Bc:0,Hc:0});const h=this.yc.get(i);if(h.$c=!1,h.Hc=r,this.bc=i,this.Fc){const n={key:i,keyCode:t.keyCode,ctrlKey:t.ctrlKey,shiftKey:t.shiftKey,altKey:t.altKey,metaKey:t.metaKey,$c:!1,Ac:t};this.Fc(n)}}Rc(t){return this.Tc[t]||t.toLowerCase()}}const Mi=Object.freeze(Object.defineProperty({__proto__:null,Gc:Bt},Symbol.toStringTag,{value:"Module"}));class Ot{constructor(t,i){l(this,"th");l(this,"Nc");l(this,"ka");l(this,"Xc",new Map);l(this,"Yc",new Map);l(this,"Kc",new Map);l(this,"jc",null);l(this,"Wc");l(this,"Zc");l(this,"qc");l(this,"Vc");l(this,"Qc");l(this,"Jc");l(this,"Ya",!1);l(this,"tl");l(this,"sl");l(this,"el");l(this,"il");l(this,"rl");l(this,"nl");l(this,"ol");l(this,"hl");l(this,"al");l(this,"cl");l(this,"ll",320);l(this,"ul",350);l(this,"fl",10);l(this,"dl",550);l(this,"pl",14);l(this,"gl",48);l(this,"vl",650);l(this,"ml",.02);l(this,"Al",2);l(this,"_l",600);l(this,"yl",0);l(this,"wl",null);this.th=t,this.Nc=i;const r=this.th.canvas;this.Wc=r.style.touchAction,this.Zc=r.style.userSelect,r.style.touchAction||(r.style.touchAction="none"),r.style.userSelect||(r.style.userSelect="none")}Do(t){this.ka=t,this.tc()}sc(){if(this.Ya)return;const t=this.th.canvas;this.qc=i=>{this.bl(i)},this.Vc=i=>{this.Cl(i)},this.Qc=i=>{this.Ml(i)},this.Jc=i=>{this.xl(i)},t.addEventListener("touchstart",this.qc,{passive:!1}),t.addEventListener("touchmove",this.Vc,{passive:!1}),t.addEventListener("touchend",this.Qc,{passive:!1}),t.addEventListener("touchcancel",this.Jc,{passive:!1}),this.Ya=!0}cc(){if(!this.Ya)return;const t=this.th.canvas;t.removeEventListener("touchstart",this.qc),t.removeEventListener("touchmove",this.Vc),t.removeEventListener("touchend",this.Qc),t.removeEventListener("touchcancel",this.Jc),this.Ya=!1,this.jc=null,this.Xc.clear(),this.Yc.clear(),this.Kc.forEach(i=>{i.Fl!==null&&window.clearTimeout(i.Fl)}),this.Kc.clear(),this.wl=null,this.yl=0,t.style.touchAction=this.Wc,t.style.userSelect=this.Zc}tc(){if(!this.ka||this.Xc.size===0)return;const t=new Map;for(const i of this.Xc.values()){const r=this.Tl(i.clientX,i.clientY,i.id,i);t.set(i.id,r)}this.Xc=t}Ul(){return Array.from(this.Xc.values()).map(t=>({...t}))}Pl(t){this.tl=t}dc(t){this.sl=t}El(t){this.el=t}Rl(t){this.il=t}$l(t){this.rl=t}Sl(t){this.nl=t}kl(t){this.ol=t}zl(t){this.hl=t}Il(t){this.al=t}Ol(t){this.cl=t}bl(t){var h;if(!this.ka)return;t.preventDefault(),(h=this.Nc)==null||h.Va(this._l);const i=performance.now(),r=this.Dl(t.changedTouches);for(const n of r){const a=this.Xc.get(n.id);a&&this.Yc.set(n.id,this.Ll(a)),this.Xc.set(n.id,n);const c={id:n.id,Bl:n,Hl:n,startTime:i,Gl:i,Fl:null,Nl:!1};this.ol&&(c.Fl=window.setTimeout(()=>{const u=this.Xc.get(n.id);u&&(c.Nl=!0,this.ol({Xl:this.Ll(u),duration:performance.now()-c.startTime,Ac:t}))},this.dl)),this.Kc.set(n.id,c),this.tl&&this.tl(this.Yl(n,t,void 0,i))}this.Xc.size===2&&this.Kl()}Cl(t){var h;if(!this.ka)return;t.preventDefault(),(h=this.Nc)==null||h.Va(this._l);const i=performance.now(),r=this.Dl(t.changedTouches);for(const n of r){const a=this.Xc.get(n.id),c=a?this.Ll(a):void 0;c&&this.Yc.set(n.id,c),this.Xc.set(n.id,n);const u=this.Kc.get(n.id);u&&(u.Hl=n,u.Gl=i,c)&&q(c.clientX,c.clientY,n.clientX,n.clientY)>this.pl&&u.Fl!==null&&(window.clearTimeout(u.Fl),u.Fl=null),this.sl&&this.sl(this.Yl(n,t,c,i))}this.Xc.size===2?this.jl(t):this.jc=null}Ml(t){if(!this.ka)return;t.preventDefault();const i=performance.now(),r=this.Dl(t.changedTouches);for(const h of r){const n=this.Xc.get(h.id),a=n?this.Ll(n):void 0,c=this.Kc.get(h.id);c&&c.Fl!==null&&(window.clearTimeout(c.Fl),c.Fl=null),this.el&&this.el(this.Yl(h,t,a,i)),c&&this.Wl(c,t),this.Kc.delete(h.id),this.Yc.delete(h.id),this.Xc.delete(h.id)}this.Xc.size<2&&(this.jc=null)}xl(t){if(!this.ka)return;t.preventDefault();const i=performance.now(),r=this.Dl(t.changedTouches);for(const h of r){const n=this.Xc.get(h.id),a=n?this.Ll(n):void 0,c=this.Kc.get(h.id);c&&c.Fl!==null&&(window.clearTimeout(c.Fl),c.Fl=null),this.il&&this.il(this.Yl(h,t,a,i)),this.Kc.delete(h.id),this.Yc.delete(h.id),this.Xc.delete(h.id)}this.Xc.size<2&&(this.jc=null)}Dl(t){const i=[];for(let r=0;r<t.length;r+=1){const h=t.item(r);h&&i.push(this.Zl(h))}return i}Zl(t){return this.Tl(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})}Tl(t,i,r,h){const n=this.th.canvas,a=n.getBoundingClientRect(),c=t-a.left,u=i-a.top,d=n.width/a.width,f=u*(n.height/a.height),p=c*d-this.ka.offsetX,A=f-this.ka.offsetY,g=Math.floor(p/this.ka.nh),v=Math.floor(A/this.ka.oh),w=g>=0&&g<this.ka.cols&&v>=0&&v<this.ka.rows;return{id:r,x:w?g:-1,y:w?v:-1,clientX:t,clientY:i,pressure:h.pressure,radiusX:h.radiusX,radiusY:h.radiusY,rotationAngle:h.rotationAngle}}Yl(t,i,r,h){const n=this.Kc.get(t.id),a=Array.from(this.Yc.values()).map(d=>this.Ll(d)),c=Array.from(this.Xc.values()).map(d=>this.Ll(d)),u=this.Dl(i.changedTouches);return{Xl:this.Ll(t),ql:r?this.Ll(r):void 0,touches:c,Vl:a,changedTouches:u,Ql:n?h-n.Gl:0,Ac:i}}Kl(){if(this.Xc.size!==2)return void(this.jc=null);const t=Array.from(this.Xc.values()),[i,r]=t,h=q(i.x,i.y,r.x,r.y),n=xt(i.clientX,i.clientY,r.clientX,r.clientY);this.jc={sn:[i.id,r.id],Jl:Math.max(h,1e-4),tu:n,su:1,eu:0}}jl(t){if(this.jc||this.Kl(),!this.jc)return;const[i,r]=this.jc.sn,h=this.Xc.get(i),n=this.Xc.get(r);if(!h||!n)return;const a=q(h.x,h.y,n.x,n.y)/this.jc.Jl,c=a-this.jc.su;this.al&&Math.abs(c)>this.ml&&(this.al({touches:[this.Ll(h),this.Ll(n)],scale:a,iu:c,ru:this.nu(h,n),Ac:t}),this.jc.su=a);let u=xt(h.clientX,h.clientY,n.clientX,n.clientY)-this.jc.tu;u=(u+180)%360-180;const d=u-this.jc.eu;this.cl&&Math.abs(d)>this.Al&&(this.cl({touches:[this.Ll(h),this.Ll(n)],rotation:u,ou:d,ru:this.nu(h,n),Ac:t}),this.jc.eu=u)}nu(t,i){const r=(t.clientX+i.clientX)/2,h=(t.clientY+i.clientY)/2,n=this.Tl(r,h,-1,{id:-1,x:-1,y:-1,clientX:r,clientY:h});return{x:n.x,y:n.y}}Wl(t,i){const r=performance.now(),h=r-t.startTime,n=q(t.Bl.clientX,t.Bl.clientY,t.Hl.clientX,t.Hl.clientY);if(!t.Nl&&h<=this.ll&&n<=this.fl)this.hu(t.Hl,r)&&this.nl?this.nl({Xl:this.Ll(t.Hl),au:2,Ac:i}):this.rl&&this.rl({Xl:this.Ll(t.Hl),au:1,Ac:i});else if(!t.Nl&&h<=this.vl&&n>=this.gl){const a={x:t.Hl.clientX-t.Bl.clientX,y:t.Hl.clientY-t.Bl.clientY},c=Math.max(Math.hypot(a.x,a.y),1e-4),u={x:a.x/c,y:a.y/c},d={x:a.x/h,y:a.y/h};this.hl&&this.hl({Xl:this.Ll(t.Hl),direction:u,cu:c,lu:d,Ac:i})}this.yl=r,this.wl=this.Ll(t.Hl)}hu(t,i){return!!this.wl&&!(i-this.yl>this.ul)&&q(t.clientX,t.clientY,this.wl.clientX,this.wl.clientY)<=this.fl}Ll(t){return{...t}}}const Li=Object.freeze(Object.defineProperty({__proto__:null,uu:Ot},Symbol.toStringTag,{value:"Module"}));class ct extends at{constructor(i,r,h,n,a,c,u,d){const f=a/c;let p,A;f>1?(p=u,A=Math.round(u/f)):(A=d,p=Math.round(d*f));super(i,r,h,a,c,p,A);l(this,"fu");l(this,"du",!1);l(this,"pu",[]);l(this,"_a",null);l(this,"gu",0);l(this,"vu",0);l(this,"mu",-1);this.fu=n}dispose(){super.dispose();for(const i of this.pu)this.A.deleteTexture(i);this.pu=[],this.fu.pause(),this.fu.src="",this.fu.load()}Au(){if(!this.du&&this.fu.readyState>=this.fu.HAVE_CURRENT_DATA){const i=this.A;i.bindTexture(i.TEXTURE_2D,this.zh),i.texImage2D(i.TEXTURE_2D,0,i.RGBA,i.RGBA,i.UNSIGNED_BYTE,this.fu),i.bindTexture(i.TEXTURE_2D,null)}}ea(){if(this.du&&this.pu.length>0){const i=this.vu%this.pu.length;return this.pu[i]}return this.zh}ct(){return this.K=null,super.ct()}Qh(){this.Au()}async _u(i,r){var h;try{if(i<=0)throw new Error("Video preload requires a frameRate greater than 0.");const n=this.fu.duration;if(!isFinite(n)||n<=0)throw new Error("Video duration is invalid, cannot preload frames.");const a=Math.max(1,Math.ceil(n*i));if(this.yu(i,a),await this.wu(i,r))return void this.bu("captureStream",r);await this.Cu(i,r),this.bu("seeking",r)}catch(n){const a=n instanceof Error?n:new Error(String(n));throw(h=r==null?void 0:r.Mu)==null||h.call(r,a),a}}yu(i,r){this._a=i,this.gu=r,this.pu=[],this.du=!1,this.vu=0,this.mu=-1}bu(i,r){var h;if(this.pu.length===0)throw new Error(`Video preload via ${i} completed but produced 0 frames.`);this.gu=this.pu.length,this.du=!0,this.vu=0,this.mu=-1,this.fu.pause(),this.fu.currentTime=0,r!=null&&r.xu&&r.xu({percent:100,Fu:this.gu,totalFrames:this.gu,Tu:i}),(h=r==null?void 0:r.Uu)==null||h.call(r,{totalFrames:this.gu,Tu:i})}Pu(i){const r=this.A,h=r.createTexture();return r.bindTexture(r.TEXTURE_2D,h),r.pixelStorei(r.UNPACK_FLIP_Y_WEBGL,1),et(r,r.LINEAR,r.LINEAR,r.CLAMP_TO_EDGE,r.CLAMP_TO_EDGE),r.texImage2D(r.TEXTURE_2D,0,r.RGBA,r.RGBA,r.UNSIGNED_BYTE,i),r.bindTexture(r.TEXTURE_2D,null),h}Eu(i,r){if(!(r!=null&&r.xu)||this.gu===0)return;const h=Math.min(99,Math.floor(this.pu.length/this.gu*100)),n=10*Math.floor(h/10);n>this.mu&&(this.mu=n,r.xu({percent:h,Fu:this.pu.length,totalFrames:this.gu,Tu:i}))}async wu(i,r){const h=globalThis,n=h==null?void 0:h.MediaStreamTrackProcessor,a=this.fu.captureStream;if(typeof n!="function"||typeof a!="function")return!1;let c,u=null;try{const d=a.call(this.fu);if(c=d.getVideoTracks()[0],!c)return d.getTracks().forEach(A=>A.stop()),!1;if(u=new n({track:c}).readable.getReader(),this.fu.currentTime=0,this.fu.muted=!0,await this.fu.play().catch(()=>{}),this.fu.paused)return!1;const f=1e6/i;let p=0;for(;this.pu.length<this.gu;){const A=await u.read();if(A.done)break;const g=A.value;if(g)try{const v=typeof g.timestamp=="number"?g.timestamp:p;(this.pu.length===0||v>=p)&&(this.pu.push(this.Pu(g)),p=v+f,this.Eu("captureStream",r))}finally{g.close()}}return u.releaseLock(),c.stop(),u=null,c=void 0,this.fu.pause(),this.fu.currentTime=0,this.pu.length!==0}catch{return this.pu=[],this.mu=-1,!1}finally{if(u)try{await u.cancel()}catch{}c&&c.stop(),this.fu.pause(),this.fu.currentTime=0}}async Cu(i,r){const h=1/i,n=this.gu,a=this.fu;a.pause();for(let c=0;c<n;c++){const u=Math.min(a.duration,c*h);await this.Ru(u),this.pu.push(this.Pu(a)),this.Eu("seeking",r)}a.currentTime=0}Ru(i){return new Promise((r,h)=>{const n=this.fu,a=()=>{n.removeEventListener("seeked",c),n.removeEventListener("error",u)},c=()=>{a(),r()},u=()=>{a(),h(new Error("Video seek failed while preloading frames."))};n.addEventListener("seeked",c,{once:!0}),n.addEventListener("error",u,{once:!0});const d=isFinite(n.duration)?n.duration:i,f=Math.min(Math.max(i,0),d);if(Math.abs(n.currentTime-f)<1e-4)return a(),void r();n.currentTime=f})}frame(i){return this.du&&i!==void 0&&this.gu>0&&(this.vu=(i%this.gu+this.gu)%this.gu,this.K=null),this}static async pa(i,r,h,n,a,c){const u=i.context,d=c==null?void 0:c.$u;let f;if(typeof r=="string"){if(f=document.createElement("video"),f.crossOrigin="anonymous",f.loop=!0,f.muted=!0,f.playsInline=!0,await new Promise((w,m)=>{f.addEventListener("loadedmetadata",()=>w(),{once:!0}),f.addEventListener("error",T=>{var E;const y=T.target;m(new Error(`Failed to load video: ${((E=y.error)==null?void 0:E.message)||"Unknown error"}`))},{once:!0}),f.src=r}),!d)try{await f.play()}catch(w){console.warn("Video autoplay prevented - you may need to call video.play() after user interaction:",w)}}else f=r,f.readyState<f.HAVE_METADATA&&await new Promise((w,m)=>{f.addEventListener("loadedmetadata",()=>w(),{once:!0}),f.addEventListener("error",T=>{var y;return m(new Error(`Video error: ${(y=T.target.error)==null?void 0:y.message}`))},{once:!0})});const p=u.createTexture();u.bindTexture(u.TEXTURE_2D,p),u.pixelStorei(u.UNPACK_FLIP_Y_WEBGL,1),et(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,f),u.bindTexture(u.TEXTURE_2D,null);const A=f.videoWidth,g=f.videoHeight,v=new ct(u,i,p,f,A,g,h,n);return v.Gh=a,d&&d>0&&await v._u(d,c),v}async play(){await this.fu.play()}pause(){this.fu.pause()}stop(){this.fu.pause(),this.fu.currentTime=0}speed(i){return this.fu.playbackRate=i,this}loop(i=!0){return this.fu.loop=i,this}time(i){return this.fu.currentTime=i,this}volume(i){return this.fu.volume=Math.max(0,Math.min(1,i)),this}get texture(){return this.zh}get width(){return this.L}get height(){return this.B}get qh(){return this.Ih}get Vh(){return this.Oh}get Su(){return this.fu}get currentTime(){return this.fu.currentTime}get duration(){return this.fu.duration}get ku(){return!this.fu.paused&&!this.fu.ended}get zu(){return this.du}get totalFrames(){return this.gu}get Iu(){return this._a}get Ou(){return this.vu}}const Yi=o=>class extends o{Du(t,i,r,h){if(N.kh(t))return t;if(typeof t=="number"||typeof t=="string")return this.color(t,i,r,h);throw new Error("Unsupported color input passed to color-capable method.")}rotate(t=0,i=0,r=0){this.Y.state.Jt(t),this.Y.state.ts(i),this.Y.state.ss(r)}Lu(t){this.Y.state.Jt(t)}Bu(t){this.Y.state.ts(t)}Hu(t){this.Y.state.ss(t)}translate(t=0,i=0,r=0){this.Y.state.es(t,i,r)}Gu(t){this.Y.state.es(t,0,0)}Nu(t){this.Y.state.es(0,t,0)}Xu(t){this.Y.state.es(0,0,t)}push(){this.Y.state.rt()}pop(){this.Y.state.nt()}color(t,i,r,h){if(N.kh(t))return t;if(typeof t=="string"){const n=Array.from(t);if(n.length===1){const a=n[0],c=this.xo.bo(a);return N.Rh(c)}return N.Eh(t)}if(typeof t=="number")return typeof i=="number"&&typeof r=="number"?N.Uh(t,i,r,h??255):typeof i=="number"&&r===void 0?N.Ph(t,i):N.Ph(t,h??255);throw new Error("Unsupported color input passed to color().")}rect(t=1,i=1){this.Y.Er(t,i)}Yu(){this.Y.Er(1,1)}line(t,i,r,h){this.Y.Rr(t,i,r,h)}Ku(t){this.Y.state.Vt(t)}background(t,i,r,h=255){const n=this.Du(t,i,r,h);this.Y.Or(n.r,n.g,n.b,n.a)}char(t){if(N.kh(t)){const r=t.do;return void(r&&this.Y.state.cs(r))}const i=Array.from(t);if(i.length===0)throw new Error("char() requires at least one character.");this.Y.state.cs(this.xo.bo(i[0]))}jh(t,i,r,h){const n=this.Du(t,i,r,h);this.Y.state.ls(n.r,n.g,n.b,n.a)}Zh(t,i,r,h){const n=this.Du(t,i,r,h);this.Y.state.us(n.r,n.g,n.b,n.a)}flipX(t){this.Y.state.fs(t)}flipY(t){this.Y.state.ds(t)}Xh(t){this.Y.state.gs(t)}ke(t){this.Y.state.ps(t)}clear(){this.Y.Or(0,0,0,0)}ellipse(t,i){this.Y.$r(t/2,i/2)}ju(t,i,r,h,n,a){this.Y.Sr(t,i,r,h,n,a)}Wu(t,i,r,h,n,a,c,u){this.Y.kr(t,i,r,h,n,a,c,u)}arc(t,i,r,h){this.Y.zr(t/2,i/2,r,h)}Si(t){this.Y.Mr(t)}Zu(t,i){this.Y.k(t,i)}qu(t){this.Y.Fr(t)}Vu(t){return this.Y.Tr(t)}createFramebuffer(t){return this.Y.Ir(t.width,t.height,3)}image(t,i,r){this.Y.Ur(t,i,r)}Qu(){this.Y.state.As(!0)}async Ju(t){if(typeof t!="string")return j.pa(this.Y,t,this.ka.cols,this.ka.rows,h=>this.xo.Mo(h));const i=t,r=await new Promise((h,n)=>{const a=new Image;a.crossOrigin="anonymous",a.onload=()=>h(a),a.onerror=c=>n(c),a.src=i});return j.pa(this.Y,r,this.ka.cols,this.ka.rows,h=>this.xo.Mo(h))}async tf(t,i){return ct.pa(this.Y,t,this.ka.cols,this.ka.rows,r=>this.xo.Mo(r),i)}},Ci=o=>class extends o{async sf(t){return this.xo.Go(t).then(()=>{const i=this.xo.Zo;this.ka.rh(i.width,i.height),this.ef.resize(this.ka.cols,this.ka.rows),this.Y.Dr(),this.Nc.tc(),this.if.tc()})}fontSize(t){if(!W.v(typeof t=="number"&&t>0,"Font size must be a positive number greater than 0.",{method:"fontSize",Co:t})||this.xo.fontSize===t)return;this.xo.Ho(t);const i=this.xo.Zo;this.ka.rh(i.width,i.height),this.ef.resize(this.ka.cols,this.ka.rows),this.Y.Dr(),this.Nc.tc(),this.if.tc()}},Ui=o=>class extends o{get frameCount(){return this.rf.$a}set frameCount(t){this.rf.$a=t}$u(t){return t===void 0?this.rf.Ra:this.rf.Ua(t,()=>this.nf())}hf(){this.rf.Fa()}loop(){this.rf.Ta(()=>this.nf())}af(t=1){if(W.v(typeof t=="number"&&t>0&&Number.isInteger(t),"Redraw count must be a positive integer.",{method:"redraw",Co:t}))for(let i=0;i<t;i++)this.nf()}cf(){return this.rf.Ea}},Ni=o=>class extends o{constructor(...t){super(...t)}lf(t){this.Nc.lc(t)}uf(t){this.Nc.uc(t)}ff(t){this.Nc.fc(t)}df(t){this.Nc.dc(t)}pf(t){this.Nc.gc(t)}get gf(){return this.Nc.vc()}cursor(t){this.Nc.Ja(t)}},Di=o=>class extends o{constructor(...t){super(...t)}vf(t){this.if.Pl(t)}mf(t){this.if.dc(t)}Af(t){this.if.El(t)}_f(t){this.if.Rl(t)}yf(t){this.if.$l(t)}wf(t){this.if.Sl(t)}bf(t){this.if.kl(t)}Cf(t){this.if.zl(t)}Mf(t){this.if.Il(t)}xf(t){this.if.Ol(t)}get touches(){return this.if.Ul()}},Bi=o=>class extends o{constructor(...t){super(...t)}Ff(t){this.Tf.uc(t)}Uf(t){this.Tf.fc(t)}Pf(t){return this.Tf.Ec(t)}get Ef(){return this.Tf.Sc()}get Rf(){return this.Tf.kc()}get $f(){return this.Tf.zc()}get Sf(){return this.Tf.Ic()}};class Oi{constructor(t){l(this,"kf");l(this,"zf",new Map);l(this,"If",[]);l(this,"Of",new Map);l(this,"Df",new Map);this.kf=t}async Lf(t){for(const i of t){if(this.zf.has(i.name))return void console.warn(`[textmode.js] Plugin "${i.name}" is already installed.`);const r=this.Bf(i.name);try{await i.install(this.kf,r)}catch(h){throw this.Hf(i.name),h}this.zf.set(i.name,i),this.If.push(i.name)}}async Gf(t){const i=this.zf.get(t);if(!i)return;const r=this.Bf(t);i.Nf&&await i.Nf(this.kf,r),this.zf.delete(t),this.If.splice(this.If.indexOf(t),1),this.Hf(t)}Xf(){this.Yf(this.Of)}Kf(){this.Yf(this.Df)}async jf(){const t=[...this.zf.keys()];for(const i of t)await this.Gf(i)}Bf(t){return{Wf:this.kf.Y,font:this.kf.xo,grid:this.kf.ka,canvas:this.kf.th,Zf:this.kf.ef,qf:this.kf.Vf,Qf:i=>this.Jf(this.Of,t,i),td:i=>this.Jf(this.Df,t,i)}}Jf(t,i,r){const h=t.get(i)??new Set;return h.add(r),t.set(i,h),()=>{const n=t.get(i);n&&(n.delete(r),n.size===0&&t.delete(i))}}Hf(t){this.Of.delete(t),this.Df.delete(t)}Yf(t){for(const i of this.If){const r=t.get(i);r&&r.forEach(h=>h())}}}const It=`#version 300 es
|
|
12
|
-
in vec2 A0;in vec2 A1;out vec2 v_uv;void main(){v_uv=A1;gl_Position=vec4(A0,0.,1.);}`;class
|
|
13
|
-
precision highp float;uniform sampler2D U0;uniform vec2 U1;uniform sampler2D U3;uniform sampler2D U4;uniform sampler2D U2;uniform vec2 U5;uniform vec2 U6;uniform vec4
|
|
14
|
-
precision highp float;uniform sampler2D
|
|
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=>x.o(i)).join(", ")}]`:`[${t.slice(0,3).map(i=>x.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}: ${x.o(t[r])}`).join(", ")} }`:`{ ${i.slice(0,2).map(r=>`${r}: ${x.o(t[r])}`).join(", ")}, ... +${i.length-2} more }`}return t+""}}var X=(o=>(o[o.SILENT=0]="SILENT",o[o.WARNING=1]="WARNING",o[o.ERROR=2]="ERROR",o[o.THROW=3]="THROW",o))(X||{});const G=class G{constructor(){l(this,"l",{globalLevel:3})}static u(){return G.h||(G.h=new G),G.h}v(t,i){const r="%c[textmode.js] Oops! (╯°□°)╯︵ Something went wrong in your code.",h="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,h),console.warn(x.i(t,i)),console.groupEnd(),!1;case 2:return console.group(r,h),console.error(x.i(t,i)),console.groupEnd(),!1;default:throw new x(t,i)}}m(t,i,r){return!!t||(this.v(i,r),!1)}_(t){this.l.globalLevel=t}};l(G,"h",null);let ft=G;const Z=ft.u();class V{constructor(t,i,r){l(this,"A");l(this,"C");l(this,"M",new Map);l(this,"F",new Map);l(this,"$",0);this.A=t,this.C=this.U(i,r),this.P()}P(){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 h=r.name.replace(/\[0\]$/,""),n=this.A.getUniformLocation(this.C,h);n&&(this.M.set(h,n),this.F.set(h,{type:r.type,size:r.size}))}}}U(t,i){const r=this.R(this.A.VERTEX_SHADER,t),h=this.R(this.A.FRAGMENT_SHADER,i),n=this.A.createProgram();if(this.A.attachShader(n,r),this.A.attachShader(n,h),this.A.linkProgram(n),!this.A.getProgramParameter(n,this.A.LINK_STATUS)){const a=this.A.getProgramInfoLog(n);throw Error("Shader program link error: "+a)}return this.A.deleteShader(r),this.A.deleteShader(h),n}R(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 h=this.A.getShaderInfoLog(r);throw this.A.deleteShader(r),Error("Shader compilation error: "+h)}return r}S(){this.A.useProgram(this.C),this.k()}k(){this.$=0}I(t){for(const i in t)this.O(i,t[i])}O(t,i){var u,f;const r=this.M.get(t);if(!r)return;const h=this.F.get(t);if(!h)return;const{type:n,size:a}=h,c=this.A;if(i instanceof WebGLTexture){const d=this.$++;return c.uniform1i(r,d),c.activeTexture(c.TEXTURE0+d),void c.bindTexture(c.TEXTURE_2D,i)}if(i instanceof Q){const d=this.$++;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[n])==null||u.call(g)}else{const d=i,g={[c.FLOAT]:()=>a>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]:()=>a>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[n])==null||f.call(g)}else c.uniform1i(r,i?1:0);else n===c.INT||n===c.BOOL?c.uniform1i(r,i):c.uniform1f(r,i)}get L(){return this.C}D(){this.A.deleteProgram(this.C)}}function bt(o,t,i,r){return 180*Math.atan2(r-t,i-o)/Math.PI}function q(o,t,i,r){return Math.hypot(i-o,r-t)}function xt(o){return(o%360+360)%360/360}function Rt(o,t,i){o.bindTexture(o.TEXTURE_2D,t),o.pixelStorei(o.UNPACK_FLIP_Y_WEBGL,1),o.texImage2D(o.TEXTURE_2D,0,o.RGBA,o.RGBA,o.UNSIGNED_BYTE,i),o.bindTexture(o.TEXTURE_2D,null)}function it(o,t,i,r,h){o.texParameteri(o.TEXTURE_2D,o.TEXTURE_MIN_FILTER,t),o.texParameteri(o.TEXTURE_2D,o.TEXTURE_MAG_FILTER,i),o.texParameteri(o.TEXTURE_2D,o.TEXTURE_WRAP_S,r),o.texParameteri(o.TEXTURE_2D,o.TEXTURE_WRAP_T,h)}function dt(o,t,i,r,h,n=0,a=WebGL2RenderingContext.FLOAT,c=!1){o.enableVertexAttribArray(t),o.vertexAttribPointer(t,i,a,c,r,h),o.vertexAttribDivisor(t,n)}function Ft(o,t,i,r,h){o.bindBuffer(t,i),o.bufferData(t,r,h),o.bindBuffer(t,null)}const rt=`#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 Us;uniform float Ut;uniform float Uu;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/Us)*2.0f;AA.y=-AA.y;float AB=y.z/Us.y;float AC=clamp(-AB*Ut,-0.99f,0.99f);if(Uu>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);}}`,K=class K{constructor(t,i,r=i,h=1,n={},a){l(this,"H");l(this,"G");l(this,"l");l(this,"A");l(this,"N");l(this,"X",[]);l(this,"Y",null);l(this,"K");l(this,"j");l(this,"Z",null);l(this,"W",new Map);var c;this.H=i,this.G=r,this.A=t,this.K=(c=8,Math.min(Math.max(h,1),c)),this.j=a,this.l={filter:"nearest",wrap:"clamp",format:"rgba",type:"unsigned_byte",depth:!0,...n},K.q||(K.q=new V(t,rt,`#version 300 es
|
|
9
|
+
precision highp float;in vec2 v_uv;uniform sampler2D Uc;uniform sampler2D Ud;uniform sampler2D Ue;uniform vec2 Uf;layout(location=0)out vec4 o_character;layout(location=1)out vec4 o_primaryColor;layout(location=2)out vec4 o_secondaryColor;void main(){vec2 A=vec2(v_uv.x,1.-v_uv.y);vec2 B=A*Uf;vec2 C=(floor(B)+0.5f)/Uf;vec4 D=texture(Uc,C);vec4 E=texture(Ud,C);if(E.a==0.){discard;}vec4 F=texture(Ue,C);o_character=D;o_primaryColor=E;o_secondaryColor=F;}`));const u=t.getParameter(t.MAX_DRAW_BUFFERS),f=t.getParameter(t.MAX_COLOR_ATTACHMENTS);this.K=Math.min(this.K,u,f),this.N=t.createFramebuffer(),this.V(),this.J(),this.l.depth&&this.tt()}V(){const t=this.A,i=this.l.filter==="linear"?t.LINEAR:t.NEAREST,r=this.l.wrap==="repeat"?t.REPEAT:t.CLAMP_TO_EDGE,h=this.l.type==="float"?t.FLOAT:t.UNSIGNED_BYTE,n=h===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),it(t,i,i,r,r),t.texImage2D(t.TEXTURE_2D,0,n,this.H,this.G,0,a,h,null),this.X.push(u)}t.bindTexture(t.TEXTURE_2D,null)}J(){const t=this.A;if(t.bindFramebuffer(t.FRAMEBUFFER,this.N),this.K===1)t.framebufferTexture2D(t.FRAMEBUFFER,t.COLOR_ATTACHMENT0,t.TEXTURE_2D,this.X[0],0);else{const i=[];for(let r=0;r<this.K;r++){const h=t.COLOR_ATTACHMENT0+r;t.framebufferTexture2D(t.FRAMEBUFFER,h,t.TEXTURE_2D,this.X[r],0),i.push(h)}t.drawBuffers(i)}t.bindFramebuffer(t.FRAMEBUFFER,null)}tt(){const t=this.A;this.Y=t.createRenderbuffer(),t.bindRenderbuffer(t.RENDERBUFFER,this.Y),t.renderbufferStorage(t.RENDERBUFFER,t.DEPTH_COMPONENT24,this.H,this.G),t.bindFramebuffer(t.FRAMEBUFFER,this.N),t.framebufferRenderbuffer(t.FRAMEBUFFER,t.DEPTH_ATTACHMENT,t.RENDERBUFFER,this.Y),t.bindFramebuffer(t.FRAMEBUFFER,null),t.bindRenderbuffer(t.RENDERBUFFER,null)}st(t){Rt(this.A,this.X[0],t)}resize(t,i){this.H=t,this.G=i,this.W.clear();const r=this.A,h=this.l.type==="float"?r.FLOAT:r.UNSIGNED_BYTE,n=h===r.FLOAT?r.RGBA32F:r.RGBA8,a=r.RGBA;for(const c of this.X)r.bindTexture(r.TEXTURE_2D,c),r.texImage2D(r.TEXTURE_2D,0,n,this.H,this.G,0,a,h,null);r.bindTexture(r.TEXTURE_2D,null),this.Y&&(r.bindRenderbuffer(r.RENDERBUFFER,this.Y),r.renderbufferStorage(r.RENDERBUFFER,r.DEPTH_COMPONENT24,this.H,this.G),r.bindRenderbuffer(r.RENDERBUFFER,null))}readPixels(t){const i=this.W.get(t);if(i)return i;const r=this.A,h=this.H,n=this.G,a=new Uint8Array(h*n*4),c=r.getParameter(r.READ_FRAMEBUFFER_BINDING);r.bindFramebuffer(r.READ_FRAMEBUFFER,this.N),r.readBuffer(r.COLOR_ATTACHMENT0+t),r.readPixels(0,0,h,n,r.RGBA,r.UNSIGNED_BYTE,a),r.bindFramebuffer(r.READ_FRAMEBUFFER,c);const u=4*h,f=new Uint8Array(a.length);for(let d=0;d<n;d++){const g=(n-1-d)*u,p=d*u;f.set(a.subarray(g,g+u),p)}return this.W.set(t,f),f}begin(){const t=this.A;this.W.clear(),this.j.et(),this.j.it(this.N,this.H,this.G),this.l.depth&&t.clear(t.DEPTH_BUFFER_BIT),this.j.state.rt()}end(){this.j.state.nt(),this.j.ot();const t=this.j.ht();this.j.it(t.framebuffer,t.viewport[2],t.viewport[3])}ct(){return this.Z||this.lt(),this.Z}lt(){if(!this.j)return;const t={Uc:this.X[0],Ud:this.X[1],Ue:this.X[2],Uf:[this.H,this.G]},i=K.q;this.Z=this.j.ft.ut(i,t,!0)}D(){const t=this.A;t.deleteFramebuffer(this.N);for(const i of this.X)t.deleteTexture(i);this.Y&&t.deleteRenderbuffer(this.Y)}get width(){return this.H}get height(){return this.G}get textures(){return this.X}get attachmentCount(){return this.K}};l(K,"q",null);let Q=K;const Pt=new WeakMap;function gt(o,t){Pt.set(o,t)}function Ct(o){return Pt.get(o)}function Y(o,t,i,r,h=255){o[0]=t/255,o[1]=(i??t)/255,o[2]=(r??t)/255,o[3]=h/255}class st{constructor(){l(this,"dt",1);l(this,"gt",0);l(this,"vt",0);l(this,"_t",0);l(this,"At",0);l(this,"yt",0);l(this,"wt",0);l(this,"bt",[0,0,0]);l(this,"Ct",[1,1,1,1]);l(this,"Mt",[0,0,0,1]);l(this,"xt",!1);l(this,"Ft",!1);l(this,"$t",!1);l(this,"Tt",0);l(this,"Pt",[0,0,0,1]);l(this,"Et",!1);l(this,"Rt",[]);l(this,"St",[])}static kt(){return{zt:1,It:0,Ot:0,Lt:0,At:0,yt:0,wt:0,Tt:0,Dt:!1,Bt:!1,$t:!1,Et:!1,Ht:[0,0,0],Gt:[1,1,1,1],Nt:[0,0,0,1]}}Xt(t){t.zt=this.dt,t.It=this.gt,t.Ot=this.vt,t.Lt=this._t,t.At=this.At,t.yt=this.yt,t.wt=this.wt,t.Dt=this.xt,t.Bt=this.Ft,t.$t=this.$t,t.Tt=this.Tt,t.Et=this.Et,t.Ht[0]=this.bt[0],t.Ht[1]=this.bt[1],t.Ht[2]=this.bt[2],t.Gt[0]=this.Ct[0],t.Gt[1]=this.Ct[1],t.Gt[2]=this.Ct[2],t.Gt[3]=this.Ct[3],t.Nt[0]=this.Mt[0],t.Nt[1]=this.Mt[1],t.Nt[2]=this.Mt[2],t.Nt[3]=this.Mt[3]}Yt(t){this.dt=t.zt,this.gt=t.It,this.vt=t.Ot,this._t=t.Lt,this.At=t.At,this.yt=t.yt,this.wt=t.wt,this.xt=t.Dt,this.Ft=t.Bt,this.$t=t.$t,this.Tt=t.Tt,this.Et=t.Et,this.bt[0]=t.Ht[0],this.bt[1]=t.Ht[1],this.bt[2]=t.Ht[2],this.Ct[0]=t.Gt[0],this.Ct[1]=t.Gt[1],this.Ct[2]=t.Gt[2],this.Ct[3]=t.Gt[3],this.Mt[0]=t.Nt[0],this.Mt[1]=t.Nt[1],this.Mt[2]=t.Nt[2],this.Mt[3]=t.Nt[3]}rt(){let t=this.St.pop();t||(t=st.kt()),this.Xt(t),this.Rt.push(t)}nt(){const t=this.Rt.pop();t?(this.Yt(t),this.St.push(t)):console.warn("pop() called without matching push()")}Kt(t){this.Xt(t)}jt(t){this.dt=Math.abs(t)}Zt(){this.gt=0,this.vt=0,this._t=0,this.At=0,this.yt=0,this.wt=0,this.Et=!1}Wt(t){t!==0&&(this.At+=t*Math.PI/180)}qt(t){t!==0&&(this.yt+=t*Math.PI/180)}Vt(t){t!==0&&(this.wt+=t*Math.PI/180)}Qt(t=0,i=0,r=0){t===0&&i===0&&r===0||(this.gt+=t,this.vt+=i,this._t+=r)}Jt(t){this.Qt(t,0,0)}ts(t){this.Qt(0,t,0)}ss(t){this.Qt(0,0,t)}es(t){this.bt[0]=t[0],this.bt[1]=t[1],this.bt[2]=t[2]}rs(t,i,r,h=255){Y(this.Ct,t,i,r,h)}ns(t,i,r,h=255){Y(this.Mt,t,i,r,h)}hs(t){this.xt=t}cs(t){this.Ft=t}ls(t){this.$t=t}us(t){this.Tt=xt(t)}fs(t,i,r,h){Y(this.Pt,t,i,r,h)}ds(t){this.Et=t}get canvasBackgroundColor(){return this.Pt}get useOrtho(){return this.Et}get rotationX(){return this.At}get rotationY(){return this.yt}get rotationZ(){return this.wt}}const At=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={ps:16,gs:WebGL2RenderingContext.TRIANGLES,vs:{_s:{size:2,offset:0},As:{size:2,offset:8}}};class kt{constructor(t){l(this,"A");l(this,"ws");l(this,"bs");this.A=t,this.ws=t.createBuffer(),this.bs=new Float32Array(At.length)}Cs(t,i,r,h){const n=this.A,a=Ct(this.A),c=a[2],u=a[3],f=t/c*2-1,d=(t+r)/c*2-1,g=1-(i+h)/u*2,p=1-i/u*2,m=At,v=this.bs;for(let A=0;A<m.length;A+=4){const E=m[A],y=m[A+1],T=m[A+2],w=m[A+3],R=f+(E+.5)*(d-f),b=g+(y+.5)*(p-g);v[A]=R,v[A+1]=b,v[A+2]=T,v[A+3]=w}n.bindBuffer(n.ARRAY_BUFFER,this.ws),n.bufferData(n.ARRAY_BUFFER,v,n.DYNAMIC_DRAW),n.enableVertexAttribArray(0),n.vertexAttribPointer(0,2,n.FLOAT,!1,16,0),n.drawArrays(n.TRIANGLES,0,6),n.disableVertexAttribArray(0),n.bindBuffer(n.ARRAY_BUFFER,null)}D(){this.A.deleteBuffer(this.ws)}}var P=(o=>(o.RECTANGLE="rectangle",o.LINE="line",o.ELLIPSE="ellipse",o.ARC="arc",o.TRIANGLE="triangle",o.BEZIER_CURVE="bezier_curve",o))(P||{});const Kt={rectangle:2,line:2,ellipse:2,triangle:2,arc:3,bezier_curve:4};class Wt{constructor(t){l(this,"A");l(this,"Ms",new Map);this.A=t}Fs(t,i,r,h){const n=this.A;let a=this.Ms.get(t);a||(a=new Map,this.Ms.set(t,a));let c=a.get(i)||null;if(!c){c=n.createVertexArray(),a.set(i,c),n.bindVertexArray(c),n.bindBuffer(n.ARRAY_BUFFER,h);const u=n.getAttribLocation(t,"A0");u!==-1&&dt(n,u,r.vs._s.size,r.ps,r.vs._s.offset,0,n.FLOAT,!1);const f=n.getAttribLocation(t,"A1");f!==-1&&dt(n,f,r.vs.As.size,r.ps,r.vs.As.offset,0,n.FLOAT,!1)}n.bindVertexArray(c)}$s(){this.A.bindVertexArray(null)}D(){for(const[,t]of this.Ms)for(const[,i]of t)i&&this.A.deleteVertexArray(i)}}const O=class O{static Ts(t,i,r=0){const h=i||new Float32Array(O.FLOATS_PER_INSTANCE);let n=r;h[n++]=t._s[0],h[n++]=t._s[1],h[n++]=t.Ps[0],h[n++]=t.Ps[1],h[n++]=t.Ht[0],h[n++]=t.Ht[1],h[n++]=t.Ht[2],h[n++]=t.Gt[0],h[n++]=t.Gt[1],h[n++]=t.Gt[2],h[n++]=t.Gt[3],h[n++]=t.Nt[0],h[n++]=t.Nt[1],h[n++]=t.Nt[2],h[n++]=t.Nt[3],h[n++]=t.Es[0],h[n++]=t.Es[1],h[n++]=t.Es[2],h[n++]=t.Tt;const a=t.Rs;h[n++]=(a==null?void 0:a[0])??0,h[n++]=(a==null?void 0:a[1])??0,h[n++]=(a==null?void 0:a[2])??0;const c=t.Ss;h[n++]=(c==null?void 0:c[0])??0,h[n++]=(c==null?void 0:c[1])??0,h[n++]=(c==null?void 0:c[2])??0;const u=t.ks,f=t.zs,d=t.Is,g=t.Os,p=t.Ls,m=!(!f||!d);return m?(h[n++]=(g==null?void 0:g[0])??0,h[n++]=(g==null?void 0:g[1])??0,h[n++]=(p==null?void 0:p[0])??0,h[n++]=(p==null?void 0:p[1])??0,h[n++]=f[0],h[n++]=f[1],h[n++]=d[0],h[n++]=d[1]):!m&&!!u?(h[n++]=u[0],h[n++]=u[1],h[n++]=0,h[n++]=0,h[n++]=0,h[n++]=0,h[n++]=0,h[n++]=0):(h[n++]=0,h[n++]=0,h[n++]=0,h[n++]=0,h[n++]=0,h[n++]=0,h[n++]=0,h[n++]=0),h[n++]=t.Ds??0,h[n++]=t.Bs??0,h[n++]=t.Hs??0,h}static Gs(t,i){const r=t.length*O.FLOATS_PER_INSTANCE,h=i||new Float32Array(r);for(let n=0;n<t.length;n++){const a=n*O.FLOATS_PER_INSTANCE;O.Ts(t[n],h,a)}return h}};l(O,"BYTES_PER_INSTANCE",144),l(O,"FLOATS_PER_INSTANCE",36);let L=O;const U=class U{};l(U,"STRIDE",L.BYTES_PER_INSTANCE),l(U,"ATTRIBUTES",{A2:{location:-1,size:2,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:U.STRIDE,offset:0,divisor:1},A3:{location:-1,size:2,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:U.STRIDE,offset:8,divisor:1},A4:{location:-1,size:3,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:U.STRIDE,offset:16,divisor:1},A5:{location:-1,size:4,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:U.STRIDE,offset:28,divisor:1},A6:{location:-1,size:4,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:U.STRIDE,offset:44,divisor:1},A7:{location:-1,size:4,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:U.STRIDE,offset:60,divisor:1},A8:{location:-1,size:3,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:U.STRIDE,offset:76,divisor:1},A9:{location:-1,size:3,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:U.STRIDE,offset:88,divisor:1},Aa:{location:-1,size:4,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:U.STRIDE,offset:100,divisor:1},Ab:{location:-1,size:4,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:U.STRIDE,offset:116,divisor:1},Ac:{location:-1,size:3,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:U.STRIDE,offset:132,divisor:1}});let J=U;class Zt{constructor(t=1e3,i=1.5){l(this,"Ns");l(this,"Xs");l(this,"Ys");l(this,"Ks",0);l(this,"js",0);this.Xs=t,this.Ys=i;const r=t*L.FLOATS_PER_INSTANCE;this.Ns=new Float32Array(r)}Zs(t){if(t<=this.Xs)return;const i=Math.ceil(t*this.Ys),r=this.Xs;this.Xs=i;const h=i*L.FLOATS_PER_INSTANCE,n=new Float32Array(h),a=r*L.FLOATS_PER_INSTANCE;n.set(this.Ns.subarray(0,Math.min(a,this.Ks))),this.Ns=n}Ws(){return{buffer:this.Ns,offset:this.Ks}}qs(t){this.Ks+=t,this.js++}Vs(){this.Ks=0,this.js=0}Qs(t=0,i){return this.Ns.subarray(t,i??this.Ks)}get Js(){return this.js}get te(){return this.Xs}get se(){return this.Ks}get ee(){return this.js===0}}class Vt{constructor(t){l(this,"Ns");this.Ns=t}ie(t){this.Ns.Zs(this.Ns.Js+1);const{buffer:i,offset:r}=this.Ns.Ws();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 h=t.curveParams0,n=t.curveParams1;return i[r+25]=h[0],i[r+26]=h[1],i[r+27]=h[2],i[r+28]=h[3],i[r+29]=n[0],i[r+30]=n[1],i[r+31]=n[2],i[r+32]=n[3],i[r+33]=t.depth,i[r+34]=t.baseZ,i[r+35]=t.geometryType,this.Ns.qs(L.FLOATS_PER_INSTANCE),this.Ns.Js-1}get Js(){return this.Ns.Js}}class qt{constructor(t,i=1e3){l(this,"A");l(this,"re",null);l(this,"ne",0);l(this,"oe",new Map);this.A=t,this.he(i)}he(t){const i=this.A;this.re&&i.deleteBuffer(this.re),this.re=i.createBuffer();const r=t*L.BYTES_PER_INSTANCE;Ft(i,i.ARRAY_BUFFER,this.re,r,i.DYNAMIC_DRAW),this.ne=t}ae(t){this.he(t)}get te(){return this.ne}ce(t,i){if(i===0)return;const r=this.A;r.bindBuffer(r.ARRAY_BUFFER,this.re);const h=i*L.FLOATS_PER_INSTANCE;r.bufferSubData(r.ARRAY_BUFFER,0,t,0,h)}le(t){let i=this.oe.get(t);if(!i){i=new Map;const r=this.A;for(const h in J.ATTRIBUTES){const n=r.getAttribLocation(t,h);n!==-1&&i.set(h,n)}this.oe.set(t,i)}return i}ue(t){const i=this.A,r=t.L,h=this.le(r);for(const[n,a]of h){const c=J.ATTRIBUTES[n];c&&dt(i,a,c.size,c.stride,c.offset,c.divisor,c.type,c.normalized)}}fe(t){const i=this.A,r=this.le(t.L);for(const[h,n]of r)J.ATTRIBUTES[h]&&(i.disableVertexAttribArray(n),i.vertexAttribDivisor(n,0))}D(){this.re&&(this.A.deleteBuffer(this.re),this.re=null),this.oe.clear()}}class Qt{constructor(t,i=1e3,r=1.5){l(this,"A");l(this,"Ns");l(this,"de");l(this,"pe");this.A=t,this.Ns=new Zt(i,r),this.de=new Vt(this.Ns),this.pe=new qt(t,i)}ge(t){var h,n,a,c,u,f,d,g,p,m;const i=[0,0,0,0],r=[0,0,0,0];return t.zs&&t.Is?(i[0]=((h=t.Os)==null?void 0:h[0])??0,i[1]=((n=t.Os)==null?void 0:n[1])??0,i[2]=((a=t.Ls)==null?void 0:a[0])??0,i[3]=((c=t.Ls)==null?void 0:c[1])??0,r[0]=t.zs[0],r[1]=t.zs[1],r[2]=t.Is[0],r[3]=t.Is[1]):t.ks&&(i[0]=t.ks[0],i[1]=t.ks[1]),this.ie({x:t._s[0],y:t._s[1],width:t.Ps[0],height:t.Ps[1],char0:t.Ht[0],char1:t.Ht[1],char2:t.Ht[2],r1:t.Gt[0],g1:t.Gt[1],b1:t.Gt[2],a1:t.Gt[3],r2:t.Nt[0],g2:t.Nt[1],b2:t.Nt[2],a2:t.Nt[3],invert:t.Es[0],flipX:t.Es[1],flipY:t.Es[2],charRot:t.Tt,translationX:((u=t.Rs)==null?void 0:u[0])??0,translationY:((f=t.Rs)==null?void 0:f[1])??0,translationZ:((d=t.Rs)==null?void 0:d[2])??0,rotationX:((g=t.Ss)==null?void 0:g[0])??0,rotationY:((p=t.Ss)==null?void 0:p[1])??0,rotationZ:((m=t.Ss)==null?void 0:m[2])??0,curveParams0:i,curveParams1:r,depth:t.Ds||0,baseZ:t.Bs||0,geometryType:t.Hs||0})}ie(t){const i=this.de.ie(t);return this.Ns.te>this.pe.te&&this.pe.ae(this.Ns.te),i}get ve(){return this.Ns.Js}get ee(){return this.Ns.ee}me(){this.Ns.Vs()}ue(t){const i=this.Ns.Js;if(i===0)return;const r=this.Ns.Qs();this.pe.ce(r,i),this.pe.ue(t)}fe(t){this.pe.fe(t)}Cs(t,i){const r=this.Ns.Js;r!==0&&this.A.drawArraysInstanced(t,0,i,r)}D(){this.pe.D()}}class _{constructor(t,i,r,h){l(this,"A");l(this,"_e");l(this,"Ae");l(this,"ye");l(this,"we",null);this.A=t,this._e=i,this.Ae=r,this.ye=h;const n=this.A.createBuffer();Ft(this.A,this.A.ARRAY_BUFFER,n,this.ye.be,this.A.STATIC_DRAW),this.we=n}get type(){return this.Ae}get unitGeometry(){return this.ye}get unitBuffer(){return this.we}get batch(){return this._e}Ce(){this._e.me()}Me(){return!this._e.ee}D(){this._e.D(),this.A.deleteBuffer(this.we)}xe(t,i,r){return this._e.ge(t)}Fe(t,i,r,h,n,a){const c=n.It??0,u=n.Ot??0,f=n.Lt??0,d=n.At??0,g=n.yt??0,p=n.wt??0,m=[0,0,0,0],v=[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,v[0]=a.bezStartX??0,v[1]=a.bezStartY??0,v[2]=a.bezEndX??0,v[3]=a.bezEndY??0):a.arcStart===void 0&&a.arcStop===void 0||(m[0]=a.arcStart??0,m[1]=a.arcStop??0));const A={x:t,y:i,width:r,height:h,char0:n.Ht[0],char1:n.Ht[1],char2:n.Ht[2],r1:n.Gt[0],g1:n.Gt[1],b1:n.Gt[2],a1:n.Gt[3],r2:n.Nt[0],g2:n.Nt[1],b2:n.Nt[2],a2:n.Nt[3],invert:n.$t?1:0,flipX:n.Dt?1:0,flipY:n.Bt?1:0,charRot:n.Tt,translationX:c,translationY:u,translationZ:f,rotationX:d,rotationY:g,rotationZ:p,curveParams0:m,curveParams1:v,depth:(a==null?void 0:a.depth)??0,baseZ:(a==null?void 0:a.baseZ)??0,geometryType:Kt[this.Ae]??0};return this._e.ie(A)}}const Jt={be:At,$e:6,...j},$t={be: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]),$e:6,...j},te={be:function(o=32){const t=[],i=2*Math.PI/o;for(let r=0;r<o;r++){const h=r*i,n=(r+1)%o*i,a=Math.cos(h),c=Math.sin(h),u=.5*(a+1),f=.5*(c+1),d=Math.cos(n),g=Math.sin(n),p=.5*(d+1),m=.5*(g+1);t.push(0,0,.5,.5,a,c,u,f,d,g,p,m)}return new Float32Array(t)}(32),$e:96,...j};let ee={be:function(o){const t=[];for(let i=0;i<o;i++){const r=i/o,h=(i+1)/o;t.push(r,0,r,0,r,1,r,1,h,1,h,1)}return new Float32Array(t)}(32),$e:96,...j};const ie={be:new Float32Array([0,0,0,0,1,0,1,0,.5,1,.5,1]),$e:3,...j},re={be:function(o=16){const t=[];for(let i=0;i<o;i++){const r=i/o,h=(i+1)/o;t.push(r,-.5,r,0,h,-.5,h,0,r,.5,r,1,r,.5,r,1,h,-.5,h,0,h,.5,h,1)}return new Float32Array(t)}(16),$e:96,...j},se={[P.RECTANGLE]:class extends _{constructor(o,t){super(o,t,P.RECTANGLE,Jt)}ge(o,t){return this.Fe(0,0,o.width,o.height,t)}},[P.LINE]:class extends _{constructor(o,t){super(o,t,P.LINE,$t)}ge(o,t){const i=o.x2-o.x1,r=o.y2-o.y1,h=Math.hypot(i,r),n=Math.atan2(r,i),a=t.zt||1,c=o.x1+i/2-h/2,u=o.y1+r/2,f={...t,wt:(t.wt||0)+n};return this.Fe(c,u,h,a,f)}},[P.ELLIPSE]:class extends _{constructor(o,t){super(o,t,P.ELLIPSE,te)}ge(o,t){return this.Fe(0,0,o.width,o.height,t)}},[P.ARC]:class extends _{constructor(o,t){super(o,t,P.ARC,ee)}ge(o,t){const i=o.start*Math.PI/180,r=o.stop*Math.PI/180;return this.Fe(0,0,o.width,o.height,t,{arcStart:i,arcStop:r})}},[P.TRIANGLE]:class extends _{constructor(o,t){super(o,t,P.TRIANGLE,ie)}ge(o,t){const i=Math.min(o.x1,o.x2,o.x3),r=Math.max(o.x1,o.x2,o.x3),h=Math.min(o.y1,o.y2,o.y3),n=r-i,a=Math.max(o.y1,o.y2,o.y3)-h;return this.Fe(i,h,n,a,t)}},[P.BEZIER_CURVE]:class extends _{constructor(o,t){super(o,t,P.BEZIER_CURVE,re)}ge(o,t){return this.Fe(0,0,1,t.zt||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 ne{constructor(t){l(this,"A");l(this,"Te");l(this,"Pe");this.A=t,this.Pe=new Wt(t),this.Te=new Map;for(const i of Object.values(P)){const r=new Qt(t),h=new se[i](t,r);this.Te.set(i,h)}}Ee(t){const i=this.Re(t);for(const r of i)this.Se(r)}Re(t){const i=[];let r=null,h=null,n=null;for(const a of t)h!==a.material||n!==a.type?(r&&r.length>0&&i.push({material:h,type:n,commands:r}),r=[a],h=a.material,n=a.type):r.push(a);return r&&r.length>0&&i.push({material:h,type:n,commands:r}),i}Se(t){const{material:i,type:r,commands:h}=t,n=this.Te.get(r);i.shader.S(),i.shader.I(i.uniforms);const a=Ct(this.A),c=h.length>0&&h[0].state.Et;i.shader.I({Uv:a[2]/a[3],Us:[a[2],a[3]],Ut:1,Uu:c?1:0}),n.Ce();for(const u of h)n.ge(u.params,u.state);if(n.Me()){const u=n.unitGeometry,f=n.unitBuffer;try{this.Pe.Fs(i.shader.L,r+"",u,f),n.batch.ue(i.shader),n.batch.Cs(u.gs,u.$e)}finally{n.batch.fe(i.shader),this.Pe.$s(),n.Ce()}}}D(){for(const t of this.Te.values())t.D();this.Te.clear(),this.Pe.D()}}function Mt(o){let t=0;for(let i=0;i<o.length;i++)t=(t<<5)-t+o.charCodeAt(i),t&=t;return t}function Nt(o){return Mt(o+"")}function $(o,t){return(o<<5)-o+t}class he{constructor(t){l(this,"A");l(this,"ke",0);l(this,"ze");l(this,"Ie");l(this,"Oe",new Map);this.A=t,this.ze=new V(t,rt,`#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;void main(){int A=int(v_glyphFlags.r>0.5?1:0);int B=int(v_glyphFlags.g>0.5?1:0);int C=int(v_glyphFlags.b>0.5?1:0);float D=float(A|(B<<1)|(C<<2))/255.;o_character=vec4(v_glyphIndex.xy,D,clamp(v_glyphFlags.a,0.,1.));o_primaryColor=vec4(v_glyphColor.rgb,v_glyphColor.a);o_secondaryColor=vec4(v_cellColor.rgb,v_cellColor.a);}`),this.Ie={id:this.ke++,shader:this.ze,uniforms:Object.freeze({}),hash:this.Le(this.ze,{}),isBuiltIn:!0}}get De(){return this.Ie}ut(t,i={},r=!1){const h=this.Le(t,i),n=this.Oe.get(h);if(n)return n;const a={id:this.ke++,shader:t,uniforms:Object.freeze({...i}),hash:h,isBuiltIn:r};return this.Oe.set(h,a),a}Be(t,i={}){return{id:this.ke++,shader:t,uniforms:Object.freeze({...i}),hash:0,isBuiltIn:!1}}Le(t,i){const r=Nt(t.L),h=function(n,a){let c=0;const u=Object.keys(n).sort();for(const f of u)c=$(c,Mt(f)),c=$(c,a(n[f]));return c}(i,this.He.bind(this));return $(r,h)}He(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 h=Array.isArray(i[0])?i.flat():i;for(const n of h)r=$(r,typeof n=="number"?n:0);return r}(t):t instanceof Float32Array||t instanceof Int32Array?function(i){let r=0;const h=Math.min(i.length,16);for(let n=0;n<h;n++)r=$(r,i[n]);return r}(t):t instanceof WebGLTexture?Nt(t):0}D(){this.ze!=this.ze&&this.ze.D(),this.ze.D(),this.Oe.clear()}}class oe{constructor(){l(this,"Ge",[]);l(this,"Ne",1);l(this,"Ps",0)}Xe(t,i){if(this.Ps>=this.Ge.length){const h={id:this.Ne++,type:t,params:{},state:st.kt(),material:i};this.Ge.push(h)}const r=this.Ge[this.Ps];return r.id=this.Ne++,r.type=t,r.material=i,this.Ps++,r}Ye(t,i,r){const h=this.Xe(P.RECTANGLE,r),n=h.params;return n.width=t.width,n.height=t.height,i.Kt(h.state),h.id}Ke(t,i,r){const h=this.Xe(P.LINE,r),n=h.params;return n.x1=t.x1,n.y1=t.y1,n.x2=t.x2,n.y2=t.y2,n.thickness=t.thickness,i.Kt(h.state),h.id}je(t,i,r){const h=this.Xe(P.ELLIPSE,r),n=h.params;return n.width=t.width,n.height=t.height,n.startAngle=t.startAngle,n.endAngle=t.endAngle,n.segments=t.segments,i.Kt(h.state),h.id}Ze(t,i,r){const h=this.Xe(P.ARC,r),n=h.params;return n.width=t.width,n.height=t.height,n.start=t.start,n.stop=t.stop,i.Kt(h.state),h.id}We(t,i,r){const h=this.Xe(P.TRIANGLE,r),n=h.params;return n.x1=t.x1,n.y1=t.y1,n.x2=t.x2,n.y2=t.y2,n.x3=t.x3,n.y3=t.y3,i.Kt(h.state),h.id}qe(t,i,r){const h=this.Xe(P.BEZIER_CURVE,r),n=h.params;return n.x1=t.x1,n.y1=t.y1,n.cp1x=t.cp1x,n.cp1y=t.cp1y,n.cp2x=t.cp2x,n.cp2y=t.cp2y,n.x2=t.x2,n.y2=t.y2,n.thickness=t.thickness,n.segments=t.segments,i.Kt(h.state),h.id}me(){this.Ps=0}[Symbol.iterator](){let t=0;const i=this.Ps,r=this.Ge;return{next:()=>t<i?{value:r[t++],done:!1}:{value:void 0,done:!0}}}}class ae{constructor(t){l(this,"A");l(this,"Ve",null);l(this,"Qe");l(this,"ft");l(this,"Je");l(this,"ti");l(this,"si");l(this,"ei",null);l(this,"ii",{});l(this,"ri",[]);l(this,"ni",[]);l(this,"oi",null);l(this,"hi",[0,0,0,0]);this.A=t,t.enable(t.DEPTH_TEST),t.depthFunc(t.LEQUAL),t.clearDepth(1),t.depthMask(!0),t.disable(t.CULL_FACE),this.Je=new st,this.ft=new he(t),this.ti=new oe,this.Qe=new ne(t),this.si=new kt(t);const i=[0,0,t.canvas.width,t.canvas.height];gt(t,i),this.ri.push(null),this.ni.push(i),this.oi=null,this.hi=i}et(){this.ri.push(this.oi),this.ni.push([...this.hi])}ht(){return{framebuffer:this.ri.pop()??null,viewport:this.ni.pop()??[0,0,this.A.canvas.width,this.A.canvas.height]}}it(t,i,r){const h=this.A;this.oi!==t&&(h.bindFramebuffer(h.FRAMEBUFFER,t),this.oi=t);const n=[0,0,i,r];this.hi[0]===n[0]&&this.hi[1]===n[1]&&this.hi[2]===n[2]&&this.hi[3]===n[3]||(h.viewport(...n),gt(h,n),this.hi=n)}ai(t){this.Ve!==t&&(this.Ve=t,t.S())}ci(t,i){return new V(this.A,t,i)}li(t){this.ei=t,t&&(this.ii={})}O(t,i){this.ii[t]=i}ui(t){Object.assign(this.ii,t)}fi(t){return new V(this.A,rt,t)}di(t,i,r){this.ti.Ye({width:i??t.width,height:r??t.height},this.Je,t.ct())}pi(t,i,r,h){this.si.Cs(t,i,r,h)}gi(t,i){if(this.ei){const r=this.ft.Be(this.ei,this.ii);this.ti.Ye({width:t,height:i},this.Je,r),this.ei=null,this.ii={}}else this.ti.Ye({width:t,height:i},this.Je,this.ft.De)}mi(t,i,r,h){this.ti.Ke({x1:t,y1:i,x2:r,y2:h},this.Je,this.ft.De)}_i(t,i){this.ti.je({width:t,height:i},this.Je,this.ft.De)}Ai(t,i,r,h,n,a){this.ti.We({x1:t,y1:i,x2:r,y2:h,x3:n,y3:a},this.Je,this.ft.De)}yi(t,i,r,h,n,a,c,u){this.ti.qe({x1:t,y1:i,cp1x:r,cp1y:h,cp2x:n,cp2y:a,x2:c,y2:u},this.Je,this.ft.De)}wi(t,i,r,h){this.ti.Ze({width:t,height:i,start:r,stop:h},this.Je,this.ft.De)}bi(t,i,r=1,h={}){return new Q(this.A,t,i,r,h,this)}Ci(t,i=t,r=t,h=255){this.Je.fs(t,i??t,r??t,h);const[n,a,c,u]=this.Je.canvasBackgroundColor;this.me(n,a,c,u)}me(t=0,i=0,r=0,h=0){this.A.clearColor(t,i,r,h),this.A.clear(this.A.COLOR_BUFFER_BIT)}Mi(){const t=[0,0,this.A.canvas.width,this.A.canvas.height];this.A.viewport(...t),gt(this.A,t),this.hi=t,this.ni.length>0&&(this.ni[0]=t)}ot(){const t=this.ti;this.Qe.Ee(t),t.me()}D(){this.ft.D(),this.Qe.D(),this.si.D()}get context(){return this.A}get state(){return this.Je}}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,i){const r=[];for(let h=0;h<i;h++)r.push(C.readUshort(o,t+2*h));return r},readUint(o,t){const i=C.t.uint8;return i[3]=o[t],i[2]=o[t+1],i[1]=o[t+2],i[0]=o[t+3],C.t.uint32[0]},readASCII(o,t,i){let r="";for(let h=0;h<i;h++)r+=String.fromCharCode(o[t+h]);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 nt(o){return o+3&-4}function ht(o,t,i){o[t]=i>>>8&255,o[t+1]=255&i}function S(o,t,i){o[t]=i>>>24&255,o[t+1]=i>>>16&255,o[t+2]=i>>>8&255,o[t+3]=255&i}function ce(o,t,i){for(let r=0;r<i.length;r++)o[t+r]=255&i.charCodeAt(r)}function pt(o,t,i){const r=t+i;let h=0;const n=C.t;for(let a=t;a<r;a+=4)n.uint8[3]=o[a]||0,n.uint8[2]=o[a+1]||0,n.uint8[1]=o[a+2]||0,n.uint8[0]=o[a+3]||0,h=h+(n.uint32[0]>>>0)>>>0;return h>>>0}class le{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 tt(o){let t=32,i=0;for(const c of o)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 o)c&&r[c]++;const h=new Uint32Array(i+1);let n=0;r[0]=0;for(let c=1;c<=i;c++)n=n+r[c-1]<<1,h[c]=n;const a=new Map;for(let c=0;c<o.length;c++){const u=o[c];if(!u)continue;const f=h[u]++;let d=a.get(u);d||(d=[],a.set(u,d)),d[ue(f,u)]=c}return{min:t,max:i,table:a}}function mt(o,t){let i=0;for(let r=1;r<=t.max;r++){i|=o.readBits(1)<<r-1;const h=t.table.get(r);if(h&&i<h.length){const n=h[i];if(n!==void 0)return n}}throw Error("Invalid Huffman code")}function ue(o,t){let i=0;for(let r=0;r<t;r++)i=i<<1|1&o,o>>>=1;return i>>>0}function fe(o){if(o.length<2)throw Error("ZLIB data too short");const t=o[0],i=o[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 h=[];return function(n,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=n.readBits(1);const p=n.readBits(2);if(p===0){n.alignToByte();const m=n.readBits(16);if((65535&(65535^m))!==n.readBits(16))throw Error("DEFLATE uncompressed LEN/NLEN mismatch");for(let v=0;v<m;v++)a.push(n.readBits(8))}else{if(p!==1&&p!==2)throw Error("Unsupported DEFLATE type");{let m,v;if(p===1){const A=Array(288).fill(0);for(let E=0;E<=143;E++)A[E]=8;for(let E=144;E<=255;E++)A[E]=9;for(let E=256;E<=279;E++)A[E]=7;for(let E=280;E<=287;E++)A[E]=8;m=tt(A),v=tt(Array(32).fill(5))}else{const A=n.readBits(5)+257,E=n.readBits(5)+1,y=n.readBits(4)+4,T=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],w=Array(19).fill(0);for(let N=0;N<y;N++)w[T[N]]=n.readBits(3);const R=tt(w),b=[];for(;b.length<A+E;){const N=mt(n,R);if(N<=15)b.push(N);else if(N===16){const B=n.readBits(2)+3,D=b[b.length-1]||0;for(let ut=0;ut<B;ut++)b.push(D)}else if(N===17){const B=n.readBits(3)+3;for(let D=0;D<B;D++)b.push(0)}else{if(N!==18)throw Error("Invalid code length symbol");{const B=n.readBits(7)+11;for(let D=0;D<B;D++)b.push(0)}}}const M=b.slice(0,A),z=b.slice(A,A+E);m=tt(M),v=tt(z)}for(;;){const A=mt(n,m);if(A<256)a.push(A);else{if(A===256)break;if(A>256&&A<286){const E=A-257;let y=c[E];const T=u[E];T&&(y+=n.readBits(T));const w=mt(n,v);if(w>=30)throw Error("Invalid distance symbol");let R=f[w];const b=d[w];b&&(R+=n.readBits(b));const M=a.length-R;if(M<0)throw Error("Invalid distance");for(let z=0;z<y;z++)a.push(a[M+z]||0)}else if(A===286||A===287)throw Error("Reserved length symbol")}}}}}}(new le(o.subarray(r)),h),new Uint8Array(h)}function de(o){const t=C,i=new Uint8Array(o);if(t.readASCII(i,0,4)!=="wOFF")throw Error("Invalid WOFF signature");const r=t.readUint(i,4),h=t.readUshort(i,12),n=t.readUint(i,16),a=[];let c=44;for(let y=0;y<h;y++){const T=t.readASCII(i,c,4),w=t.readUint(i,c+4),R=t.readUint(i,c+8),b=t.readUint(i,c+12),M=t.readUint(i,c+16);a.push({tag:T,offset:w,compLength:R,origLength:b,checksum:M}),c+=20}for(const y of a){const T=new Uint8Array(i.buffer,y.offset,y.compLength);if(y.compLength===y.origLength)y.data=new Uint8Array(T);else if(y.data=fe(T),y.data.length!==y.origLength)if(y.data.length<y.origLength){const w=new Uint8Array(y.origLength);w.set(y.data),y.data=w}else y.data=y.data.subarray(0,y.origLength)}const u=h;let f=1,d=0;for(;f<<1<=u;)f<<=1,d++;const g=16*f,p=16*u-g;let m=12+16*u;const v={};for(const y of a)v[y.tag]=m,m=nt(m+y.data.length);const A=new Uint8Array(Math.max(n||0,m));S(A,0,r),ht(A,4,u),ht(A,6,g),ht(A,8,d),ht(A,10,p);let E=12;for(const y of a){ce(A,E,y.tag),E+=4;let T=y.data;if(y.tag==="head"&&T.length>=12){const w=new Uint8Array(T);S(w,8,0),S(A,E,pt(w,0,nt(w.length))),E+=4}else S(A,E,pt(T,0,nt(T.length))),E+=4;S(A,E,v[y.tag]),E+=4,S(A,E,y.data.length),E+=4}for(const y of a){const T=v[y.tag];A.set(y.data,T)}if(a.find(y=>y.tag==="head")){const y=v.head,T=function(w,R){const b=R+8,M=[w[b],w[b+1],w[b+2],w[b+3]];S(w,b,0);const z=2981146554-(pt(w,0,nt(w.length))>>>0)>>>0;return w[b]=M[0],w[b+1]=M[1],w[b+2]=M[2],w[b+3]=M[3],z>>>0}(A,y);S(A,y+8,T)}return A.buffer}const ge={parseTab(o,t,i){const r={tables:[],ids:{},off:t};o=new Uint8Array(o.buffer,t,i),t=0;const h=C,n=h.readUshort,a=n(o,t+=2);t+=2;const c=[];for(let u=0;u<a;u++){const f=n(o,t),d=n(o,t+=2);t+=2;const g=h.readUint(o,t);t+=4;const p=`p${f}e${d}`;let m=c.indexOf(g);if(m===-1){let v;m=r.tables.length,c.push(g);const A=n(o,g);v=A===4?this.parse4(o,g):A===12?this.parse12(o,g):{format:A},r.tables.push(v)}r.ids[p]=m}return r},parse4(o,t){const i=C,r=i.readUshort,h=i.readUshorts,n=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=h(o,t,c),t+=2*c,t+=2,u.startCount=h(o,t,c),t+=2*c;for(let f=0;f<c;f++)u.idDelta.push(i.readShort(o,t)),t+=2;return u.idRangeOffset=h(o,t,c),t+=2*c,u.glyphIdArray=h(o,t,n+a-t>>1),u},parse12(o,t){const i=C.readUint;i(o,t+=4),i(o,t+=4);const r=i(o,t+=4);t+=4;const h=new Uint32Array(3*r);for(let n=0;n<3*r;n+=3)h[n]=i(o,t+(n<<2)),h[n+1]=i(o,t+(n<<2)+4),h[n+2]=i(o,t+(n<<2)+8);return{format:12,groups:h}}},Ae={parseTab(o,t,i){const r=C;t+=18;const h=r.readUshort(o,t);t+=2,t+=16;const n=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:h,xMin:n,yMin:a,xMax:c,yMax:u,indexToLocFormat:r.readShort(o,t)}}},pe={parseTab(o,t,i){const r=C;t+=4;const h=["ascender","descender","lineGap","advanceWidthMax","minLeftSideBearing","minRightSideBearing","xMaxExtent","caretSlopeRise","caretSlopeRun","caretOffset","res0","res1","res2","res3","metricDataFormat","numberOfHMetrics"],n={};for(let a=0;a<h.length;a++){const c=h[a],u=c==="advanceWidthMax"||c==="numberOfHMetrics"?r.readUshort:r.readShort;n[c]=u(o,t+2*a)}return n}},me={parseTab(o,t,i,r){const h=C,n=[],a=[],c=r.maxp.numGlyphs,u=r.hhea.numberOfHMetrics;let f=0,d=0,g=0;for(;g<u;)f=h.readUshort(o,t+(g<<2)),d=h.readShort(o,t+(g<<2)+2),n.push(f),a.push(d),g++;for(;g<c;)n.push(f),a.push(d),g++;return{aWidth:n,lsBearing:a}}},It={cmap:ge,head:Ae,hhea:pe,maxp:{parseTab(o,t,i){const r=C;return r.readUint(o,t),t+=4,{numGlyphs:r.readUshort(o,t)}}},hmtx:me,loca:{parseTab(o,t,i,r){const h=C,n=[],a=r.head.indexToLocFormat,c=r.maxp.numGlyphs+1;if(a===0)for(let u=0;u<c;u++)n.push(h.readUshort(o,t+(u<<1))<<1);else if(a===1)for(let u=0;u<c;u++)n.push(h.readUint(o,t+(u<<2)));return n}},glyf:{parseTab(o,t,i,r){const h=[],n=r.maxp.numGlyphs;for(let a=0;a<n;a++)h.push(null);return h},xi(o,t){const i=C,r=o.Fi,h=o.loca;if(h[t]===h[t+1])return null;const n=H.findTable(r,"glyf",o.$i);if(!n)return null;let a=n[0]+h[t];const c={};if(c.noc=i.readShort(r,a),a+=2,c.xMin=i.readShort(r,a),a+=2,c.yMin=i.readShort(r,a),a+=2,c.xMax=i.readShort(r,a),a+=2,c.yMax=i.readShort(r,a),a+=2,c.xMin>=c.xMax||c.yMin>=c.yMax)return null;if(c.noc>0){c.endPts=[];for(let p=0;p<c.noc;p++)c.endPts.push(i.readUshort(r,a)),a+=2;const u=i.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 p=0;p<f;p++){const m=r[a];if(a++,c.flags.push(m),8&m){const v=r[a];a++;for(let A=0;A<v;A++)c.flags.push(m),p++}}c.xs=[];for(let p=0;p<f;p++){const m=c.flags[p],v=!!(16&m);2&m?(c.xs.push(v?r[a]:-r[a]),a++):v?c.xs.push(0):(c.xs.push(i.readShort(r,a)),a+=2)}c.ys=[];for(let p=0;p<f;p++){const m=c.flags[p],v=!!(32&m);4&m?(c.ys.push(v?r[a]:-r[a]),a++):v?c.ys.push(0):(c.ys.push(i.readShort(r,a)),a+=2)}let d=0,g=0;for(let p=0;p<f;p++)d+=c.xs[p],g+=c.ys[p],c.xs[p]=d,c.ys[p]=g}else c.parts=[],c.endPts=[],c.flags=[],c.xs=[],c.ys=[];return c}}},H={parse(o){const t=new Uint8Array(o);C.readASCII(t,0,4)==="wOFF"&&(o=de(o));const i=new Uint8Array(o),r=It,h={},n={Fi:i,Ti:0,$i:0};for(const a in r){const c=a,u=H.findTable(i,c,0);if(u){const[f,d]=u;let g=h[f];g==null&&(g=r[c].parseTab(i,f,d,n),h[f]=g),n[c]=g}}return[n]},findTable(o,t,i){const r=C,h=r.readUshort(o,i+4);let n=i+12;for(let a=0;a<h;a++){const c=r.readASCII(o,n,4);r.readUint(o,n+4);const u=r.readUint(o,n+8),f=r.readUint(o,n+12);if(c===t)return[u,f];n+=16}return null},T:It,B:C};class ve{Pi(t){var r;const i=[];return(r=t.cmap)!=null&&r.tables?(t.cmap.tables.forEach(h=>{if(h.format===4){const n=this.Ei(h);i.push(...n)}else if(h.format===12){const n=this.Ri(h);i.push(...n)}}),[...new Set(i)]):[]}Ei(t){const i=[];if(!(t.startCount&&t.endCount&&t.idRangeOffset&&t.idDelta))return i;for(let r=0;r<t.startCount.length;r++){const h=t.startCount[r],n=t.endCount[r];if(h!==65535||n!==65535){for(let a=h;a<=n;a++)if(this.Si(t,a,r)>0)try{const c=String.fromCodePoint(a);i.push(c)}catch{}}}return i}Ri(t){const i=[];if(!t.groups)return i;for(let r=0;r<t.groups.length;r+=3){const h=t.groups[r],n=t.groups[r+1],a=t.groups[r+2];for(let c=h;c<=n;c++)if(a+(c-h)>0)try{const u=String.fromCodePoint(c);i.push(u)}catch{}}return i}Si(t,i,r){if(t.idRangeOffset[r]===0)return i+t.idDelta[r]&65535;{const h=t.idRangeOffset[r]/2+(i-t.startCount[r])-(t.startCount.length-r);if(h>=0&&t.glyphIdArray&&h<t.glyphIdArray.length){const n=t.glyphIdArray[h];if(n!==0)return n+t.idDelta[r]&65535}}return 0}}class vt{constructor(){l(this,"ki",new Map);l(this,"zi",new Map)}Ii(t,i){const r=`${this.Oi(t)}_${i}`;if(this.ki.has(r))return this.ki.get(r);const h=t.cmap;if(!h||!h.tables)return this.ki.set(r,0),0;let n=0;for(const a of h.tables)if(a.format===4?n=this.Li(i,a):a.format===12&&(n=this.Di(i,a)),n>0)break;return this.ki.set(r,n),n}Bi(t,i){const r=i.codePointAt(0);return r===void 0?0:this.Ii(t,r)}Hi(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}Gi(t,i){const r=i/t.head.unitsPerEm,h=t.hhea.ascender*r,n=t.hhea.descender*r,a=t.hhea.lineGap*r;return{ascender:h,descender:n,lineGap:a,lineHeight:h-n+a,unitsPerEm:t.head.unitsPerEm,scale:r}}Ni(){this.ki.clear(),this.zi.clear()}Oi(t){return`${t.$i}_${t.Fi.length}`}Li(t,i){const r=i.endCount.length;let h=-1;for(let n=0;n<r;n++)if(t<=i.endCount[n]){h=n;break}if(h===-1||t<i.startCount[h])return 0;if(i.idRangeOffset[h]===0)return t+i.idDelta[h]&65535;{const n=i.idRangeOffset[h]/2+(t-i.startCount[h])-(r-h);if(n>=0&&n<i.glyphIdArray.length){const a=i.glyphIdArray[n];return a===0?0:a+i.idDelta[h]&65535}}return 0}Di(t,i){const r=i.groups.length/3;for(let h=0;h<r;h++){const n=i.groups[3*h],a=i.groups[3*h+1],c=i.groups[3*h+2];if(t>=n&&t<=a)return c+(t-n)}return 0}}class ye{constructor(t){l(this,"Xi");l(this,"Yi");l(this,"j");l(this,"Ki");this.j=t,this.Ki=new vt,this.Xi=document.createElement("canvas"),this.Yi=this.Xi.getContext("2d",{willReadFrequently:!0,alpha:!0})}ji(t,i,r,h){const n=t.length,a=Math.ceil(Math.sqrt(n)),c=Math.ceil(n/a),u=i.width*a,f=i.height*c;this.Zi(u,f),this.Wi(t,i,a,r,h);const d=this.j.bi(u,f,1,{filter:"nearest"});return d.st(this.Xi),{framebuffer:d,columns:a,rows:c}}Zi(t,i){this.Xi.width=t,this.Xi.height=i,this.Xi.style.width=t+"px",this.Xi.style.height=i+"px",this.Yi.imageSmoothingEnabled=!1,this.Xi.style.imageRendering="pixelated",this.Yi.clearRect(0,0,t,i),this.Yi.textBaseline="top",this.Yi.textAlign="left",this.Yi.fillStyle="white"}Wi(t,i,r,h,n){const a=h/n.head.unitsPerEm;for(let c=0;c<t.length;c++){const u=c%r,f=Math.floor(c/r),d=t[c].character,g=this.qi(n,d);if(!g)continue;const p=d.codePointAt(0)||0,m=this.Ki.Ii(n,p),v=this.Ki.Hi(n,m)*a,A=u*i.width,E=f*i.height,y=A+.5*i.width,T=E+.5*i.height,w=Math.round(y-.5*i.width),R=Math.round(T-.5*h),b=w+.5*(i.width-v),M=R+n.hhea.ascender*a;this.Vi(g,b,M,a)}}qi(t,i){const r=i.codePointAt(0)||0,h=this.Ki.Ii(t,r);return h===0?null:H.T.glyf.xi(t,h)}Vi(t,i,r,h){if(!t||!t.xs||t.noc===0)return;let{xs:n,ys:a,endPts:c,flags:u}=t;if(!(n&&a&&c&&u))return;this.Yi.beginPath();let f=0;for(let d=0;d<c.length;d++){const g=c[d];if(!(g<f)){if(g>=f){const p=i+n[f]*h,m=r-a[f]*h;this.Yi.moveTo(p,m);let v=f+1;for(;v<=g;)if(1&u[v]){const A=i+n[v]*h,E=r-a[v]*h;this.Yi.lineTo(A,E),v++}else{const A=i+n[v]*h,E=r-a[v]*h;if(v+1>g){const T=i+n[f]*h,w=r-a[f]*h;if(1&u[f])this.Yi.quadraticCurveTo(A,E,T,w);else{const R=(A+T)/2,b=(E+w)/2;this.Yi.quadraticCurveTo(A,E,R,b)}break}const y=v+1;if(1&u[y]){const T=i+n[y]*h,w=r-a[y]*h;this.Yi.quadraticCurveTo(A,E,T,w),v=y+1}else{const T=(A+(i+n[y]*h))/2,w=(E+(r-a[y]*h))/2;this.Yi.quadraticCurveTo(A,E,T,w),v=y}}this.Yi.closePath()}f=g+1}}this.Yi.fill()}}class Ee{constructor(){l(this,"Qi");this.Qi=new vt}Ji(t,i,r){let h=0;const n=this.Qi.Gi(r,i),a=n.lineHeight;for(const c of t){const u=this.Qi.Bi(r,c);if(u===0)continue;const f=this.Qi.Hi(r,u)*n.scale;h=Math.max(h,f)}return{width:Math.ceil(h),height:Math.ceil(a)}}Ni(){this.Qi.Ni()}}class we{constructor(){l(this,"Ki");this.Ki=new vt}createCharacterObjects(t,i){return t.map((r,h)=>{const n=r.codePointAt(0)||0,a=this.tr(h);let c=0;if(i.hmtx&&i.hmtx.aWidth){const u=this.Ki.Ii(i,n);u>0&&i.hmtx.aWidth[u]!==void 0&&(c=i.hmtx.aWidth[u])}return{character:r,unicode:n,color:a,advanceWidth:c}})}tr(t){return[t%256/255,Math.floor(t/256)%256/255,0]}sr(t,i){if(!Z.m(typeof t=="string","Character must be a string.",{method:"getCharacterColor",providedValue:t}))return[0,0,0];const r=i.find(h=>h.character===t);return r?r.color:[0,0,0]}er(t,i){return Z.m(typeof t=="string"&&t.length>0,"Characters must be a string with at least one character.",{method:"getCharacterColors",providedValue:t})?Array.from(t).map(r=>this.sr(r,i)||[0,0,0]):[[0,0,0]]}}class yt{constructor(t,i=16){l(this,"ir");l(this,"rr",[]);l(this,"nr");l(this,"hr",16);l(this,"ar",0);l(this,"cr",0);l(this,"lr",{width:0,height:0});l(this,"ur");l(this,"dr",new Map);l(this,"pr");l(this,"gr");l(this,"vr");l(this,"mr");this.hr=i,this.pr=new ve,this.gr=new ye(t),this.vr=new Ee,this.mr=new we}async _r(t){let i;if(t){const r=await fetch(t);if(!r.ok)throw new x(`Failed to load font file: ${r.status} ${r.statusText}`);i=await r.arrayBuffer()}else i=await(await fetch("data:font/woff;base64,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")).arrayBuffer();await this.Ar(i),this.ir=H.parse(i)[0],await this.yr()}wr(t){if(t===void 0)return this.hr;this.hr=t,this.lr=this.vr.Ji(this.rr.map(r=>r.character),this.hr,this.ir);const i=this.gr.ji(this.rr,this.lr,this.hr,this.ir);this.nr=i.framebuffer,this.ar=i.columns,this.cr=i.rows}async br(t){try{const i=await fetch(t);if(!i.ok)throw new x(`Failed to load font file: ${i.status} ${i.statusText}`);const r=await i.arrayBuffer();await this.Ar(r);const h=H.parse(r);if(!h||h.length===0)throw Error("Failed to parse font file");this.ir=h[0],await this.yr()}catch(i){throw new x("Failed to load font: "+(i instanceof Error?i.message:"Unknown error"),i)}}async Ar(t){const i=Date.now();this.ur=new FontFace("CustomFont_"+i,t),await this.ur.load(),document.fonts.add(this.ur)}async yr(){const t=this.pr.Pi(this.ir);this.dr.clear(),this.rr=this.mr.createCharacterObjects(t,this.ir),this.lr=this.vr.Ji(t,this.hr,this.ir);const i=this.gr.ji(this.rr,this.lr,this.hr,this.ir);this.nr=i.framebuffer,this.ar=i.columns,this.cr=i.rows}sr(t){return this.mr.sr(t,this.rr)}er(t){return this.mr.er(t,this.rr)}getGlyphData(t){if(!Number.isFinite(t))return null;const i=this.dr.get(t);if(i!==void 0)return i;const r=this.Cr(t);if(r<0)return this.dr.set(t,null),null;const h=this.ir.glyf;if(!h)return this.dr.set(t,null),null;let n=h[r]??null;return n==null&&(n=H.T.glyf.xi(this.ir,r)??null,h[r]=n),this.dr.set(t,n),n}Cr(t){const i=this.ir.cmap;for(const r of i.tables)if(r.format===4){const h=r;for(let n=0;n<h.startCount.length;n++)if(t>=h.startCount[n]&&t<=h.endCount[n]){if(h.idRangeOffset[n]===0)return t+h.idDelta[n]&65535;{const a=h.idRangeOffset[n]/2+(t-h.startCount[n])-(h.startCount.length-n);if(a>=0&&a<h.glyphIdArray.length){const c=h.glyphIdArray[a];if(c!==0)return c+h.idDelta[n]&65535}}}}else if(r.format===12){const h=r;for(let n=0;n<h.groups.length;n+=3){const a=h.groups[n],c=h.groups[n+1],u=h.groups[n+2];if(t>=a&&t<=c)return u+(t-a)}}return 0}D(){this.nr.D(),document.fonts.delete(this.ur)}get fontFramebuffer(){return this.nr}get characters(){return this.rr}get textureColumns(){return this.ar}get textureRows(){return this.cr}get maxGlyphDimensions(){return this.lr}get fontSize(){return this.hr}get font(){return this.ir}}class Et{constructor(t,i,r){l(this,"Mr");l(this,"Fr");l(this,"H");l(this,"G");l(this,"$r");l(this,"Tr");l(this,"Pr");l(this,"Er");l(this,"Rr");this.Pr=t,this.Er=i,this.Rr=r,this.Vs()}Vs(){this.Mr=Math.floor(this.Pr.width/this.Er),this.Fr=Math.floor(this.Pr.height/this.Rr),this.H=this.Mr*this.Er,this.G=this.Fr*this.Rr,this.$r=Math.floor((this.Pr.width-this.H)/2),this.Tr=Math.floor((this.Pr.height-this.G)/2)}Sr(t,i){this.Er=t,this.Rr=i,this.Vs()}get cellWidth(){return this.Er}get cellHeight(){return this.Rr}get cols(){return this.Mr}get rows(){return this.Fr}get width(){return this.H}get height(){return this.G}get offsetX(){return this.$r}get offsetY(){return this.Tr}}const Te=/^#([0-9a-f]{3,8})$/i,be=/^rgba?\(([^)]+)\)$/i;function wt(o){return Number.isNaN(o)?0:Math.max(0,Math.min(255,o))}function xe(o){if(!o)return null;const t=o.trim().toLowerCase();if(!t||t==="transparent")return null;let i=null;return t.startsWith("#")?i=function(r){const h=Te.exec(r.trim());if(!h)return null;const n=h[1];return n.length===3?[parseInt(n[0]+n[0],16),parseInt(n[1]+n[1],16),parseInt(n[2]+n[2],16),255]:n.length===4?[parseInt(n[0]+n[0],16),parseInt(n[1]+n[1],16),parseInt(n[2]+n[2],16),parseInt(n[3]+n[3],16)]:n.length===6||n.length===8?[parseInt(n.slice(0,2),16),parseInt(n.slice(2,4),16),parseInt(n.slice(4,6),16),n.length===8?parseInt(n.slice(6,8),16):255]:null}(t):t.startsWith("rgb")&&(i=function(r){const h=be.exec(r.trim());if(!h)return null;const n=h[1].split(",").map(d=>d.trim());if(n.length<3)return null;const a=wt(parseFloat(n[0])),c=wt(parseFloat(n[1])),u=wt(parseFloat(n[2])),f=n[3]!==void 0?255*Math.max(0,Math.min(1,parseFloat(n[3]))):255;return[a,c,u,Math.round(f)]}(t)),i?i[3]===0?null:i:null}class Ut{constructor(t={}){l(this,"Pr");l(this,"kr",null);l(this,"zr",!1);l(this,"Ir");this.zr=t.overlay??!1,this.zr&&t.canvas?(this.kr=t.canvas,this.Pr=this.Or(),this.Ir=!0,this.Lr()):t.canvas?(this.Pr=t.canvas,this.Ir=!1):(this.Pr=this.Dr(t.width,t.height),this.Ir=!0),this.Pr.style.imageRendering="pixelated"}Dr(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}Or(){const t=document.createElement("canvas");t.className="textmodeCanvas",t.style.imageRendering="pixelated";const i=this.kr.getBoundingClientRect();let r=Math.round(i.width),h=Math.round(i.height);if(this.kr instanceof HTMLVideoElement){const c=this.kr;(r===0||h===0)&&c.videoWidth>0&&c.videoHeight>0&&(r=c.videoWidth,h=c.videoHeight)}t.width=r,t.height=h,t.style.position="absolute",t.style.pointerEvents="none";const n=window.getComputedStyle(this.kr);let a=parseInt(n.zIndex||"0",10);return isNaN(a)&&(a=0),t.style.zIndex=""+(a+1),t}Lr(){var t;this.Br(),(t=this.kr.parentNode)==null||t.insertBefore(this.Pr,this.kr.nextSibling)}Hr(){const t=[];return this.zr&&this.kr instanceof HTMLElement&&(t.push(this.kr),this.kr.parentElement&&t.push(this.kr.parentElement)),this.Pr.parentElement&&t.push(this.Pr.parentElement),t.push(this.Pr),t.push(document.body),t.push(document.documentElement),t}Gr(){const t=this.Hr();for(const i of t){if(!i)continue;const r=xe(window.getComputedStyle(i).backgroundColor);if(r)return r}return[255,255,255,255]}Br(){if(!this.kr)return;const t=this.kr.getBoundingClientRect();let i=this.kr.offsetParent;if(i&&i!==document.body){const r=i.getBoundingClientRect();this.Pr.style.top=t.top-r.top+"px",this.Pr.style.left=t.left-r.left+"px"}else this.Pr.style.top=t.top+window.scrollY+"px",this.Pr.style.left=t.left+window.scrollX+"px"}Nr(t,i){if(this.zr){const r=this.kr.getBoundingClientRect();this.Pr.width=Math.round(r.width),this.Pr.height=Math.round(r.height),this.Br()}else this.Pr.width=t??this.Pr.width,this.Pr.height=i??this.Pr.height}Xr(){const t=this.Pr.getContext("webgl2",{alpha:!0,premultipliedAlpha:!1,preserveDrawingBuffer:!0,antialias:!1,depth:!0,stencil:!1,powerPreference:"high-performance"});if(!t)throw new x("`textmode.js` requires WebGL2 support.");return t}D(){const t=this.Pr.getContext("webgl")||this.Pr.getContext("webgl2");if(t){const i=t.getExtension("WEBGL_lose_context");i==null||i.loseContext()}this.Ir&&this.Pr.parentNode&&this.Pr.parentNode.removeChild(this.Pr)}get canvas(){return this.Pr}get targetCanvas(){return this.kr}get width(){return this.Pr.width}get height(){return this.Pr.height}}const Re=/^#|0x/gi;function et(o){return Number.isNaN(o)||!Number.isFinite(o)||o<=0?0:o>=255?255:Math.round(o)}function ot(o){return et(parseInt(o,16))}class I{constructor(t,i,r,h,n){l(this,"Yr");l(this,"Kr");l(this,"Ht");l(this,"r");l(this,"g");l(this,"b");l(this,"a");this.r=et(t),this.g=et(i),this.b=et(r),this.a=et(h),this.Yr=[this.r,this.g,this.b,this.a],this.Kr=[this.r/255,this.g/255,this.b/255,this.a/255],this.Ht=n?[...n]:void 0}static jr(t,i,r,h=255){return new I(t,i,r,h)}static Zr(t,i=255){return new I(t,t,t,i)}static Wr(t){const[i,r,h,n]=function(a){const c=a.replace(Re,""),u=(f=c).length===3||f.length===4?f.split("").map(d=>d+d).join(""):f;var f;if(u.length!==6&&u.length!==8)throw Error("Invalid hex color: "+a);return[ot(u.slice(0,2)),ot(u.slice(2,4)),ot(u.slice(4,6)),u.length===8?ot(u.slice(6,8)):255]}(t);return new I(i,r,h,n)}static qr(t){const[i,r,h]=t;return new I(255*i,255*r,255*h,255,t)}get rgb(){return[this.r,this.g,this.b]}get rgba(){return[...this.Yr]}get normalized(){return[...this.Kr]}get character(){return this.Ht?[...this.Ht]:void 0}static Vr(t){return t instanceof I}}const W=class W{constructor(t,i,r,h,n,a,c){l(this,"A");l(this,"j");l(this,"Qr");l(this,"Jr");l(this,"tn");l(this,"H");l(this,"G");l(this,"Z",null);l(this,"$t",0);l(this,"Dt",0);l(this,"Bt",0);l(this,"Tt",0);l(this,"sn","sampled");l(this,"en","fixed");l(this,"Gt",[1,1,1,1]);l(this,"Nt",[0,0,0,1]);l(this,"rn",[0,0,0,1]);l(this,"nn",[[.1,0,0]]);l(this,"hn");this.A=t,this.j=i,this.Qr=r,this.Jr=h,this.tn=n,this.H=a,this.G=c}D(){this.A.deleteTexture(this.Qr)}invert(t=!0){return this.$t=t?1:0,this.Z=null,this}flipX(t=!0){return this.Dt=t?1:0,this.Z=null,this}flipY(t=!0){return this.Bt=t?1:0,this.Z=null,this}charRotation(t){return this.Tt=xt(t),this.Z=null,this}charColorMode(t){return this.sn=t,this.Z=null,this}cellColorMode(t){return this.en=t,this.Z=null,this}charColor(t,i,r,h){return this.cn(this.Gt,t,i,r,h),this.Z=null,this}cellColor(t,i,r,h){return this.cn(this.Nt,t,i,r,h),this.Z=null,this}background(t,i,r,h){return this.cn(this.rn,t,i,r,h),this.Z=null,this}characters(t){if(!this.hn)throw Error("Glyph color resolver not initialized");const i=this.hn(t).filter(r=>Array.isArray(r)).slice(0,64);return this.nn=i,this.Z=null,this}get texture(){return this.Qr}get width(){return this.H}get height(){return this.G}get originalWidth(){return this.Jr}get originalHeight(){return this.tn}ct(){return this.Z||this.lt(),this.Z}ln(){}lt(){this.ln();const t=this.un(),i=this.fn();this.Z=this.j.ft.Be(t,i)}cn(t,i,r,h,n){if(I.Vr(i))Y(t,i.r,i.g,i.b,i.a);else{if(typeof i=="string"){const a=I.Wr(i);return void Y(t,a.r,a.g,a.b,a.a)}Y(t,i,r,h,n)}}un(){return W.an||(W.an=new V(this.A,rt,`#version 300 es
|
|
11
|
+
precision highp float;in vec2 v_uv;uniform sampler2D Ug;uniform bool Uh;uniform bool Ui;uniform bool Uj;uniform float Uk;uniform bool Ul;uniform vec4 Um;uniform bool Un;uniform vec4 Uo;uniform vec4 Up;uniform int Uq;uniform vec3 Ur[64];layout(location=0)out vec4 o_character;layout(location=1)out vec4 o_primaryColor;layout(location=2)out vec4 o_secondaryColor;float A(vec3 B){return dot(B,vec3(0.299f,0.587f,0.114f));}void main(){vec2 C=vec2(v_uv.x,1.0f-v_uv.y);vec4 D=texture(Ug,C);float E=A(D.rgb);vec2 F=vec2(0.);if(Uq>0){float G=float(Uq);float H=clamp(E*(G-1.0f),0.0f,G-1.0f);int I=int(floor(H+0.5f));vec3 J=Ur[I];F=J.xy;}else{F=vec2(E,0.0f);}vec4 K=Ul?Um:D;vec4 L=Un?Uo:D;if(D.a<0.01f){K=Up;L=Up;}else{}o_primaryColor=vec4(K.rgb,K.a);o_secondaryColor=vec4(L.rgb,L.a);int M=int(Uh?1:0);int N=int(Ui?1:0);int O=int(Uj?1:0);float P=float(M|(N<<1)|(O<<2))/255.;o_character=vec4(F,P,clamp(Uk,0.0f,1.0f));}`)),W.an}fn(){return{Ug:this.dn(),Uh:!!this.$t,Ui:!!this.Dt,Uj:!!this.Bt,Uk:this.Tt,Ul:this.sn==="fixed",Um:this.Gt,Un:this.en==="fixed",Uo:this.Nt,Up:this.rn,Uq:this.nn.length,Ur:this.nn}}};l(W,"an",null);let at=W;class k extends at{constructor(t,i,r,h,n,a,c){const u=Math.min(a/h,c/n);super(t,i,r,h,n,Math.max(1,Math.floor(h*u)),Math.max(1,Math.floor(n*u)))}static pn(t,i,r,h,n){const a=t.context,c=a.createTexture();a.bindTexture(a.TEXTURE_2D,c),a.pixelStorei(a.UNPACK_FLIP_Y_WEBGL,1),it(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,i),a.bindTexture(a.TEXTURE_2D,null);const u=i.naturalWidth??i.width??i.videoWidth??0,f=i.naturalHeight??i.height??i.videoHeight??0,d=new k(a,t,c,u,f,r,h);return d.hn=n,d}dn(){return this.Qr}}class Dt{constructor(t=60){l(this,"gn");l(this,"vn",null);l(this,"mn",0);l(this,"_n",!0);l(this,"An",0);l(this,"yn",0);l(this,"wn",[]);l(this,"bn",10);l(this,"Cn",0);this.gn=1e3/t}Mn(t){if(!this._n)return;this.mn=performance.now();const i=r=>{if(!this._n)return void(this.vn=null);const h=r-this.mn;h>=this.gn&&(t(),this.mn=r-h%this.gn),this._n&&(this.vn=requestAnimationFrame(i))};this.vn=requestAnimationFrame(i)}xn(){this.vn&&(cancelAnimationFrame(this.vn),this.vn=null)}Fn(){this._n&&(this._n=!1,this.xn())}$n(t){this._n||(this._n=!0,this.Mn(t))}Tn(t,i){if(t===void 0)return this.An;this.gn=1e3/t,this._n&&i&&(this.xn(),this.Mn(i))}Pn(){const t=performance.now();if(this.yn>0){const i=t-this.yn;this.wn.push(i),this.wn.length>this.bn&&this.wn.shift();const r=this.wn.reduce((h,n)=>h+n,0)/this.wn.length;this.An=1e3/r}this.yn=t}get En(){return this._n}get Rn(){return this.An}get Sn(){return this.Cn}set Sn(t){this.Cn=t}kn(){this.Cn++}}class zt{constructor(t){l(this,"Pr");l(this,"zn");l(this,"In",{x:-1,y:-1});l(this,"On",{x:-1,y:-1});l(this,"Ln",null);l(this,"Dn",0);l(this,"Bn");l(this,"Hn");l(this,"Gn");l(this,"Nn");l(this,"Xn");l(this,"Yn");l(this,"Kn",!1);l(this,"jn");l(this,"Zn");l(this,"Wn");l(this,"qn");l(this,"Vn");this.Pr=t}Qn(t){const i=performance.now()+Math.max(0,t);i>this.Dn&&(this.Dn=i)}Jn(){return performance.now()<this.Dn}so(t){const i=this.Pr.canvas;i.style.cursor=t==null||t===""?"":t}_r(t){this.zn=t,this.eo()}io(){if(this.Kn)return;const t=this.Pr.canvas;this.Bn=i=>{this.ro(i),this.no(i)},this.Hn=()=>{this.On={...this.In},this.In.x=-1,this.In.y=-1,this.Ln=null},this.Gn=i=>{this.ro(i),this.oo(i)},this.Nn=i=>{this.ro(i),this.ho(i)},this.Xn=i=>{this.ro(i),this.ao(i)},this.Yn=i=>{this.ro(i),this.co(i)},t.addEventListener("mousemove",this.Bn,{passive:!0}),t.addEventListener("mouseleave",this.Hn,{passive:!0}),t.addEventListener("mousedown",this.Gn,{passive:!0}),t.addEventListener("mouseup",this.Nn,{passive:!0}),t.addEventListener("click",this.Xn,{passive:!0}),t.addEventListener("wheel",this.Yn,{passive:!1}),this.Kn=!0}lo(){if(!this.Kn)return;const t=this.Pr.canvas;t.removeEventListener("mousemove",this.Bn),t.removeEventListener("mouseleave",this.Hn),t.removeEventListener("mousedown",this.Gn),t.removeEventListener("mouseup",this.Nn),t.removeEventListener("click",this.Xn),t.removeEventListener("wheel",this.Yn),this.Kn=!1}eo(){if(this.Kn)try{if(this.Ln){const t=new MouseEvent("mousemove",{clientX:this.Ln.x,clientY:this.Ln.y,bubbles:!1,cancelable:!1});this.ro(t)}else this.In.x!==-1&&this.In.y!==-1&&(this.In.x>=this.zn.cols||this.In.y>=this.zn.rows)&&(this.In.x=-1,this.In.y=-1)}catch{this.In.x=-1,this.In.y=-1}}uo(t){this.jn=t}fo(t){this.Zn=t}do(t){this.Wn=t}po(t){this.qn=t}vo(t){this.Vn=t}mo(){return{x:this.In.x,y:this.In.y}}no(t){if(this.qn&&!this.Jn()){const i={position:{...this.In},previousPosition:{...this.On},originalEvent:t};this.qn(i)}}oo(t){if(this.Zn&&!this.Jn()){const i={position:{...this.In},previousPosition:{...this.On},button:t.button,originalEvent:t};this.Zn(i)}}ho(t){if(this.Wn&&!this.Jn()){const i={position:{...this.In},previousPosition:{...this.On},button:t.button,originalEvent:t};this.Wn(i)}}ao(t){if(this.jn&&!this.Jn()){const i={position:{...this.In},previousPosition:{...this.On},button:t.button,originalEvent:t};this.jn(i)}}co(t){if(this.Vn&&!this.Jn()){const i={position:{...this.In},previousPosition:{...this.On},delta:{x:t.deltaX,y:t.deltaY},originalEvent:t};this.Vn(i)}}ro(t){const i=this.Pr.canvas;this.On={...this.In},this.Ln={x:t.clientX,y:t.clientY};const r=i.getBoundingClientRect(),h=t.clientX-r.left,n=t.clientY-r.top,a=i.width/r.width,c=n*(i.height/r.height),u=h*a-this.zn.offsetX,f=c-this.zn.offsetY,d=Math.floor(u/this.zn.cellWidth),g=Math.floor(f/this.zn.cellHeight);d>=0&&d<this.zn.cols&&g>=0&&g<this.zn.rows?(this.In.x=d,this.In.y=g):(this.In.x=-1,this.In.y=-1)}}const Fe=Object.freeze(Object.defineProperty({__proto__:null,MouseManager:zt},Symbol.toStringTag,{value:"Module"}));class Lt{constructor(){l(this,"_o",new Map);l(this,"Ao",null);l(this,"yo",null);l(this,"wo");l(this,"bo");l(this,"Kn",!1);l(this,"Co");l(this,"Mo");l(this,"xo",{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"})}io(){this.Kn||(this.wo=t=>{this.Fo(t)},this.bo=t=>{this.$o(t)},window.addEventListener("keydown",this.wo,{passive:!1}),window.addEventListener("keyup",this.bo,{passive:!1}),this.Kn=!0)}lo(){this.Kn&&(window.removeEventListener("keydown",this.wo),window.removeEventListener("keyup",this.bo),this.Kn=!1,this._o.clear(),this.Ao=null,this.yo=null)}fo(t){this.Co=t}do(t){this.Mo=t}To(t){const i=this.Po(t),r=this._o.get(t)||this._o.get(i);return(r==null?void 0:r.isPressed)||!1}Eo(){return this.Ao}Ro(){return this.yo}So(){const t=[];for(const[i,r]of this._o)r.isPressed&&t.push(i);return t}ko(){return{ctrl:this.To("Control"),shift:this.To("Shift"),alt:this.To("Alt"),meta:this.To("Meta")}}zo(){this._o.clear(),this.Ao=null,this.yo=null}Fo(t){const i=t.key,r=Date.now();this._o.has(i)||this._o.set(i,{isPressed:!1,lastPressTime:0,lastReleaseTime:0});const h=this._o.get(i);if(!h.isPressed&&(h.isPressed=!0,h.lastPressTime=r,this.Ao=i,this.Co)){const n={key:i,keyCode:t.keyCode,ctrlKey:t.ctrlKey,shiftKey:t.shiftKey,altKey:t.altKey,metaKey:t.metaKey,isPressed:!0,originalEvent:t};this.Co(n)}}$o(t){const i=t.key,r=Date.now();this._o.has(i)||this._o.set(i,{isPressed:!1,lastPressTime:0,lastReleaseTime:0});const h=this._o.get(i);if(h.isPressed=!1,h.lastReleaseTime=r,this.yo=i,this.Mo){const n={key:i,keyCode:t.keyCode,ctrlKey:t.ctrlKey,shiftKey:t.shiftKey,altKey:t.altKey,metaKey:t.metaKey,isPressed:!1,originalEvent:t};this.Mo(n)}}Po(t){return this.xo[t]||t.toLowerCase()}}const Pe=Object.freeze(Object.defineProperty({__proto__:null,KeyboardManager:Lt},Symbol.toStringTag,{value:"Module"}));class Bt{constructor(t,i){l(this,"Pr");l(this,"Io");l(this,"zn");l(this,"Oo",new Map);l(this,"Lo",new Map);l(this,"Do",new Map);l(this,"Bo",null);l(this,"Ho");l(this,"Go");l(this,"No");l(this,"Xo");l(this,"Yo");l(this,"Ko");l(this,"Kn",!1);l(this,"jo");l(this,"Zo");l(this,"Wo");l(this,"qo");l(this,"Vo");l(this,"Qo");l(this,"Jo");l(this,"th");l(this,"sh");l(this,"eh");l(this,"ih",320);l(this,"rh",350);l(this,"nh",10);l(this,"oh",550);l(this,"hh",14);l(this,"ah",48);l(this,"uh",650);l(this,"fh",.02);l(this,"dh",2);l(this,"ph",600);l(this,"gh",0);l(this,"mh",null);this.Pr=t,this.Io=i;const r=this.Pr.canvas;this.Ho=r.style.touchAction,this.Go=r.style.userSelect,r.style.touchAction||(r.style.touchAction="none"),r.style.userSelect||(r.style.userSelect="none")}_r(t){this.zn=t,this.eo()}io(){if(this.Kn)return;const t=this.Pr.canvas;this.No=i=>{this._h(i)},this.Xo=i=>{this.Ah(i)},this.Yo=i=>{this.yh(i)},this.Ko=i=>{this.wh(i)},t.addEventListener("touchstart",this.No,{passive:!1}),t.addEventListener("touchmove",this.Xo,{passive:!1}),t.addEventListener("touchend",this.Yo,{passive:!1}),t.addEventListener("touchcancel",this.Ko,{passive:!1}),this.Kn=!0}lo(){if(!this.Kn)return;const t=this.Pr.canvas;t.removeEventListener("touchstart",this.No),t.removeEventListener("touchmove",this.Xo),t.removeEventListener("touchend",this.Yo),t.removeEventListener("touchcancel",this.Ko),this.Kn=!1,this.Bo=null,this.Oo.clear(),this.Lo.clear(),this.Do.forEach(i=>{i.longPressTimer!==null&&window.clearTimeout(i.longPressTimer)}),this.Do.clear(),this.mh=null,this.gh=0,t.style.touchAction=this.Ho,t.style.userSelect=this.Go}eo(){if(!this.zn||this.Oo.size===0)return;const t=new Map;for(const i of this.Oo.values()){const r=this.bh(i.clientX,i.clientY,i.id,i);t.set(i.id,r)}this.Oo=t}Ch(){return Array.from(this.Oo.values()).map(t=>({...t}))}Mh(t){this.jo=t}po(t){this.Zo=t}xh(t){this.Wo=t}Fh(t){this.qo=t}$h(t){this.Vo=t}Th(t){this.Qo=t}Ph(t){this.Jo=t}Eh(t){this.th=t}Rh(t){this.sh=t}Sh(t){this.eh=t}_h(t){var h;if(!this.zn)return;t.preventDefault(),(h=this.Io)==null||h.Qn(this.ph);const i=performance.now(),r=this.kh(t.changedTouches);for(const n of r){const a=this.Oo.get(n.id);a&&this.Lo.set(n.id,this.zh(a)),this.Oo.set(n.id,n);const c={id:n.id,startPosition:n,lastPosition:n,startTime:i,lastTime:i,longPressTimer:null,longPressFired:!1};this.Jo&&(c.longPressTimer=window.setTimeout(()=>{const u=this.Oo.get(n.id);u&&(c.longPressFired=!0,this.Jo({touch:this.zh(u),duration:performance.now()-c.startTime,originalEvent:t}))},this.oh)),this.Do.set(n.id,c),this.jo&&this.jo(this.Ih(n,t,void 0,i))}this.Oo.size===2&&this.Oh()}Ah(t){var h;if(!this.zn)return;t.preventDefault(),(h=this.Io)==null||h.Qn(this.ph);const i=performance.now(),r=this.kh(t.changedTouches);for(const n of r){const a=this.Oo.get(n.id),c=a?this.zh(a):void 0;c&&this.Lo.set(n.id,c),this.Oo.set(n.id,n);const u=this.Do.get(n.id);u&&(u.lastPosition=n,u.lastTime=i,c)&&q(c.clientX,c.clientY,n.clientX,n.clientY)>this.hh&&u.longPressTimer!==null&&(window.clearTimeout(u.longPressTimer),u.longPressTimer=null),this.Zo&&this.Zo(this.Ih(n,t,c,i))}this.Oo.size===2?this.Lh(t):this.Bo=null}yh(t){if(!this.zn)return;t.preventDefault();const i=performance.now(),r=this.kh(t.changedTouches);for(const h of r){const n=this.Oo.get(h.id),a=n?this.zh(n):void 0,c=this.Do.get(h.id);c&&c.longPressTimer!==null&&(window.clearTimeout(c.longPressTimer),c.longPressTimer=null),this.Wo&&this.Wo(this.Ih(h,t,a,i)),c&&this.Dh(c,t),this.Do.delete(h.id),this.Lo.delete(h.id),this.Oo.delete(h.id)}this.Oo.size<2&&(this.Bo=null)}wh(t){if(!this.zn)return;t.preventDefault();const i=performance.now(),r=this.kh(t.changedTouches);for(const h of r){const n=this.Oo.get(h.id),a=n?this.zh(n):void 0,c=this.Do.get(h.id);c&&c.longPressTimer!==null&&(window.clearTimeout(c.longPressTimer),c.longPressTimer=null),this.qo&&this.qo(this.Ih(h,t,a,i)),this.Do.delete(h.id),this.Lo.delete(h.id),this.Oo.delete(h.id)}this.Oo.size<2&&(this.Bo=null)}kh(t){const i=[];for(let r=0;r<t.length;r+=1){const h=t.item(r);h&&i.push(this.Bh(h))}return i}Bh(t){return this.bh(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})}bh(t,i,r,h){const n=this.Pr.canvas,a=n.getBoundingClientRect(),c=t-a.left,u=i-a.top,f=n.width/a.width,d=u*(n.height/a.height),g=c*f-this.zn.offsetX,p=d-this.zn.offsetY,m=Math.floor(g/this.zn.cellWidth),v=Math.floor(p/this.zn.cellHeight),A=m>=0&&m<this.zn.cols&&v>=0&&v<this.zn.rows;return{id:r,x:A?m:-1,y:A?v:-1,clientX:t,clientY:i,pressure:h.pressure,radiusX:h.radiusX,radiusY:h.radiusY,rotationAngle:h.rotationAngle}}Ih(t,i,r,h){const n=this.Do.get(t.id),a=Array.from(this.Lo.values()).map(f=>this.zh(f)),c=Array.from(this.Oo.values()).map(f=>this.zh(f)),u=this.kh(i.changedTouches);return{touch:this.zh(t),previousTouch:r?this.zh(r):void 0,touches:c,previousTouches:a,changedTouches:u,deltaTime:n?h-n.lastTime:0,originalEvent:i}}Oh(){if(this.Oo.size!==2)return void(this.Bo=null);const t=Array.from(this.Oo.values()),[i,r]=t,h=q(i.x,i.y,r.x,r.y),n=bt(i.clientX,i.clientY,r.clientX,r.clientY);this.Bo={ids:[i.id,r.id],initialDistance:Math.max(h,1e-4),initialAngle:n,lastScale:1,lastRotation:0}}Lh(t){if(this.Bo||this.Oh(),!this.Bo)return;const[i,r]=this.Bo.ids,h=this.Oo.get(i),n=this.Oo.get(r);if(!h||!n)return;const a=q(h.x,h.y,n.x,n.y)/this.Bo.initialDistance,c=a-this.Bo.lastScale;this.sh&&Math.abs(c)>this.fh&&(this.sh({touches:[this.zh(h),this.zh(n)],scale:a,deltaScale:c,center:this.Hh(h,n),originalEvent:t}),this.Bo.lastScale=a);let u=bt(h.clientX,h.clientY,n.clientX,n.clientY)-this.Bo.initialAngle;u=(u+180)%360-180;const f=u-this.Bo.lastRotation;this.eh&&Math.abs(f)>this.dh&&(this.eh({touches:[this.zh(h),this.zh(n)],rotation:u,deltaRotation:f,center:this.Hh(h,n),originalEvent:t}),this.Bo.lastRotation=u)}Hh(t,i){const r=(t.clientX+i.clientX)/2,h=(t.clientY+i.clientY)/2,n=this.bh(r,h,-1,{id:-1,x:-1,y:-1,clientX:r,clientY:h});return{x:n.x,y:n.y}}Dh(t,i){const r=performance.now(),h=r-t.startTime,n=q(t.startPosition.clientX,t.startPosition.clientY,t.lastPosition.clientX,t.lastPosition.clientY);if(!t.longPressFired&&h<=this.ih&&n<=this.nh)this.Gh(t.lastPosition,r)&&this.Qo?this.Qo({touch:this.zh(t.lastPosition),taps:2,originalEvent:i}):this.Vo&&this.Vo({touch:this.zh(t.lastPosition),taps:1,originalEvent:i});else if(!t.longPressFired&&h<=this.uh&&n>=this.ah){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/h,y:a.y/h};this.th&&this.th({touch:this.zh(t.lastPosition),direction:u,distance:c,velocity:f,originalEvent:i})}this.gh=r,this.mh=this.zh(t.lastPosition)}Gh(t,i){return!!this.mh&&!(i-this.gh>this.rh)&&q(t.clientX,t.clientY,this.mh.clientX,this.mh.clientY)<=this.nh}zh(t){return{...t}}}const Ce=Object.freeze(Object.defineProperty({__proto__:null,TouchManager:Bt},Symbol.toStringTag,{value:"Module"}));class ct extends at{constructor(i,r,h,n,a,c,u,f){const d=a/c;let g,p;d>1?(g=u,p=Math.round(u/d)):(p=f,g=Math.round(f*d));super(i,r,h,a,c,g,p);l(this,"Nh");l(this,"Xh",!1);l(this,"Yh",[]);l(this,"An",null);l(this,"Kh",0);l(this,"jh",0);l(this,"Zh",-1);this.Nh=n}D(){super.D();for(const i of this.Yh)this.A.deleteTexture(i);this.Yh=[],this.Nh.pause(),this.Nh.src="",this.Nh.load()}Wh(){if(!this.Xh&&this.Nh.readyState>=this.Nh.HAVE_CURRENT_DATA){const i=this.A;i.bindTexture(i.TEXTURE_2D,this.Qr),i.texImage2D(i.TEXTURE_2D,0,i.RGBA,i.RGBA,i.UNSIGNED_BYTE,this.Nh),i.bindTexture(i.TEXTURE_2D,null)}}dn(){if(this.Xh&&this.Yh.length>0){const i=this.jh%this.Yh.length;return this.Yh[i]}return this.Qr}ct(){return this.Z=null,super.ct()}ln(){this.Wh()}async qh(i,r){var h;try{if(i<=0)throw Error("Video preload requires a frameRate greater than 0.");const n=this.Nh.duration;if(!isFinite(n)||n<=0)throw Error("Video duration is invalid, cannot preload frames.");const a=Math.max(1,Math.ceil(n*i));if(this.Vh(i,a),await this.Qh(i,r))return void this.Jh("captureStream",r);await this.ta(i,r),this.Jh("seeking",r)}catch(n){const a=n instanceof Error?n:Error(n+"");throw(h=r==null?void 0:r.onError)==null||h.call(r,a),a}}Vh(i,r){this.An=i,this.Kh=r,this.Yh=[],this.Xh=!1,this.jh=0,this.Zh=-1}Jh(i,r){var h;if(this.Yh.length===0)throw Error(`Video preload via ${i} completed but produced 0 frames.`);this.Kh=this.Yh.length,this.Xh=!0,this.jh=0,this.Zh=-1,this.Nh.pause(),this.Nh.currentTime=0,r!=null&&r.onProgress&&r.onProgress({percent:100,loadedFrames:this.Kh,totalFrames:this.Kh,strategy:i}),(h=r==null?void 0:r.onComplete)==null||h.call(r,{totalFrames:this.Kh,strategy:i})}sa(i){const r=this.A,h=r.createTexture();return r.bindTexture(r.TEXTURE_2D,h),r.pixelStorei(r.UNPACK_FLIP_Y_WEBGL,1),it(r,r.LINEAR,r.LINEAR,r.CLAMP_TO_EDGE,r.CLAMP_TO_EDGE),r.texImage2D(r.TEXTURE_2D,0,r.RGBA,r.RGBA,r.UNSIGNED_BYTE,i),r.bindTexture(r.TEXTURE_2D,null),h}ea(i,r){if(!(r!=null&&r.onProgress)||this.Kh===0)return;const h=Math.min(99,Math.floor(this.Yh.length/this.Kh*100)),n=10*Math.floor(h/10);n>this.Zh&&(this.Zh=n,r.onProgress({percent:h,loadedFrames:this.Yh.length,totalFrames:this.Kh,strategy:i}))}async Qh(i,r){const h=globalThis,n=h==null?void 0:h.MediaStreamTrackProcessor,a=this.Nh.captureStream;if(typeof n!="function"||typeof a!="function")return!1;let c,u=null;try{const f=a.call(this.Nh);if(c=f.getVideoTracks()[0],!c)return f.getTracks().forEach(p=>p.stop()),!1;if(u=new n({track:c}).readable.getReader(),this.Nh.currentTime=0,this.Nh.muted=!0,await this.Nh.play().catch(()=>{}),this.Nh.paused)return!1;const d=1e6/i;let g=0;for(;this.Yh.length<this.Kh;){const p=await u.read();if(p.done)break;const m=p.value;if(m)try{const v=typeof m.timestamp=="number"?m.timestamp:g;(this.Yh.length===0||v>=g)&&(this.Yh.push(this.sa(m)),g=v+d,this.ea("captureStream",r))}finally{m.close()}}return u.releaseLock(),c.stop(),u=null,c=void 0,this.Nh.pause(),this.Nh.currentTime=0,this.Yh.length!==0}catch{return this.Yh=[],this.Zh=-1,!1}finally{if(u)try{await u.cancel()}catch{}c&&c.stop(),this.Nh.pause(),this.Nh.currentTime=0}}async ta(i,r){const h=1/i,n=this.Kh,a=this.Nh;a.pause();for(let c=0;c<n;c++){const u=Math.min(a.duration,c*h);await this.ia(u),this.Yh.push(this.sa(a)),this.ea("seeking",r)}a.currentTime=0}ia(i){return new Promise((r,h)=>{const n=this.Nh,a=()=>{n.removeEventListener("seeked",c),n.removeEventListener("error",u)},c=()=>{a(),r()},u=()=>{a(),h(Error("Video seek failed while preloading frames."))};n.addEventListener("seeked",c,{once:!0}),n.addEventListener("error",u,{once:!0});const f=isFinite(n.duration)?n.duration:i,d=Math.min(Math.max(i,0),f);if(Math.abs(n.currentTime-d)<1e-4)return a(),void r();n.currentTime=d})}frame(i){return this.Xh&&i!==void 0&&this.Kh>0&&(this.jh=(i%this.Kh+this.Kh)%this.Kh,this.Z=null),this}static async pn(i,r,h,n,a,c){const u=i.context,f=c==null?void 0:c.frameRate;let d;typeof r=="string"?(d=document.createElement("video"),d.crossOrigin="anonymous",d.loop=!0,d.muted=!0,d.playsInline=!0,await new Promise((A,E)=>{d.addEventListener("loadedmetadata",()=>A(),{once:!0}),d.addEventListener("error",y=>{var w;const T=y.target;E(Error("Failed to load video: "+(((w=T.error)==null?void 0:w.message)||"Unknown error")))},{once:!0}),d.src=r})):(d=r,d.readyState<d.HAVE_METADATA&&await new Promise((A,E)=>{d.addEventListener("loadedmetadata",()=>A(),{once:!0}),d.addEventListener("error",y=>{var T;return E(Error("Video error: "+((T=y.target.error)==null?void 0:T.message)))},{once:!0})}));const g=u.createTexture();u.bindTexture(u.TEXTURE_2D,g),u.pixelStorei(u.UNPACK_FLIP_Y_WEBGL,1),it(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 p=d.videoWidth,m=d.videoHeight,v=new ct(u,i,g,d,p,m,h,n);return v.hn=a,f&&f>0&&await v.qh(f,c),v}async play(){await this.Nh.play()}pause(){this.Nh.pause()}stop(){this.Nh.pause(),this.Nh.currentTime=0}speed(i){return this.Nh.playbackRate=i,this}loop(i=!0){return this.Nh.loop=i,this}time(i){return this.Nh.currentTime=i,this}volume(i){return this.Nh.volume=Math.max(0,Math.min(1,i)),this}get texture(){return this.Qr}get width(){return this.H}get height(){return this.G}get originalWidth(){return this.Jr}get originalHeight(){return this.tn}get videoElement(){return this.Nh}get currentTime(){return this.Nh.currentTime}get duration(){return this.Nh.duration}get isPlaying(){return!this.Nh.paused&&!this.Nh.ended}get isPreloaded(){return this.Xh}get totalFrames(){return this.Kh}get preloadFrameRate(){return this.An}get currentFrameIndex(){return this.jh}}const Me=o=>class extends o{ra(t,i,r,h){if(I.Vr(t))return t;if(typeof t=="number"||typeof t=="string")return this.color(t,i,r,h);throw Error("Unsupported color input passed to color-capable method.")}rotate(t=0,i=0,r=0){this.j.state.Wt(t),this.j.state.qt(i),this.j.state.Vt(r)}rotateX(t){this.j.state.Wt(t)}rotateY(t){this.j.state.qt(t)}rotateZ(t){this.j.state.Vt(t)}translate(t=0,i=0,r=0){this.j.state.Qt(t,i,r)}translateX(t){this.j.state.Qt(t,0,0)}translateY(t){this.j.state.Qt(0,t,0)}translateZ(t){this.j.state.Qt(0,0,t)}push(){this.j.state.rt()}pop(){this.j.state.nt()}color(t,i,r,h){if(I.Vr(t))return t;if(typeof t=="string"){const n=Array.from(t);if(n.length===1){const a=n[0],c=this.ir.sr(a);return I.qr(c)}return I.Wr(t)}if(typeof t=="number")return typeof i=="number"&&typeof r=="number"?I.jr(t,i,r,h??255):typeof i=="number"&&r===void 0?I.Zr(t,i):I.Zr(t,h??255);throw Error("Unsupported color input passed to color().")}rect(t=1,i=1){this.j.gi(t,i)}point(){this.j.gi(1,1)}line(t,i,r,h){this.j.mi(t,i,r,h)}lineWeight(t){this.j.state.jt(t)}background(t,i,r,h=255){const n=this.ra(t,i,r,h);this.j.Ci(n.r,n.g,n.b,n.a)}char(t){if(I.Vr(t)){const r=t.character;return void(r&&this.j.state.es(r))}const i=Array.from(t);if(i.length===0)throw Error("char() requires at least one character.");this.j.state.es(this.ir.sr(i[0]))}charColor(t,i,r,h){const n=this.ra(t,i,r,h);this.j.state.rs(n.r,n.g,n.b,n.a)}cellColor(t,i,r,h){const n=this.ra(t,i,r,h);this.j.state.ns(n.r,n.g,n.b,n.a)}flipX(t){this.j.state.hs(t)}flipY(t){this.j.state.cs(t)}charRotation(t){this.j.state.us(t)}invert(t){this.j.state.ls(t)}clear(){this.j.Ci(0,0,0,0)}ellipse(t,i){this.j._i(t/2,i/2)}triangle(t,i,r,h,n,a){this.j.Ai(t,i,r,h,n,a)}bezierCurve(t,i,r,h,n,a,c,u){this.j.yi(t,i,r,h,n,a,c,u)}arc(t,i,r,h){this.j.wi(t/2,i/2,r,h)}shader(t){this.j.li(t)}setUniform(t,i){this.j.O(t,i)}setUniforms(t){this.j.ui(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.j.fi(r)}return this.j.fi(t)}createFramebuffer(t){return this.j.bi(t.width??this.grid.cols,t.height??this.grid.rows,3)}image(t,i,r){this.j.di(t,i,r)}ortho(){this.j.state.ds(!0)}async loadImage(t){if(typeof t!="string")return k.pn(this.j,t,this.zn.cols,this.zn.rows,h=>this.ir.er(h));const i=t,r=await new Promise((h,n)=>{const a=new Image;a.crossOrigin="anonymous",a.onload=()=>h(a),a.onerror=c=>n(c),a.src=i});return k.pn(this.j,r,this.zn.cols,this.zn.rows,h=>this.ir.er(h))}async loadVideo(t,i){return ct.pn(this.j,t,this.zn.cols,this.zn.rows,r=>this.ir.er(r),i)}},Ne=o=>class extends o{async loadFont(t){return this.ir.br(t).then(()=>{const i=this.ir.maxGlyphDimensions;this.zn.Sr(i.width,i.height),this.na.resize(this.zn.cols,this.zn.rows),this.j.Mi(),this.Io.eo(),this.oa.eo()})}fontSize(t){if(!Z.m(typeof t=="number"&&t>0,"Font size must be a positive number greater than 0.",{method:"fontSize",providedValue:t})||this.ir.fontSize===t)return;this.ir.wr(t);const i=this.ir.maxGlyphDimensions;this.zn.Sr(i.width,i.height),this.na.resize(this.zn.cols,this.zn.rows),this.j.Mi(),this.Io.eo(),this.oa.eo()}},Ie=o=>class extends o{get frameCount(){return this.ha.Sn}set frameCount(t){this.ha.Sn=t}frameRate(t){return t===void 0?this.ha.Rn:this.ha.Tn(t,()=>this.aa())}noLoop(){this.ha.Fn()}loop(){this.ha.$n(()=>this.aa())}redraw(t=1){if(Z.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.aa()}isLooping(){return this.ha.En}},Ue=o=>class extends o{constructor(...t){super(...t)}mouseClicked(t){this.Io.uo(t)}mousePressed(t){this.Io.fo(t)}mouseReleased(t){this.Io.do(t)}mouseMoved(t){this.Io.po(t)}mouseScrolled(t){this.Io.vo(t)}get mouse(){return this.Io.mo()}cursor(t){this.Io.so(t)}},De=o=>class extends o{constructor(...t){super(...t)}touchStarted(t){this.oa.Mh(t)}touchMoved(t){this.oa.po(t)}touchEnded(t){this.oa.xh(t)}touchCancelled(t){this.oa.Fh(t)}tap(t){this.oa.$h(t)}doubleTap(t){this.oa.Th(t)}longPress(t){this.oa.Ph(t)}swipe(t){this.oa.Eh(t)}pinch(t){this.oa.Rh(t)}rotateGesture(t){this.oa.Sh(t)}get touches(){return this.oa.Ch()}},ze=o=>class extends o{constructor(...t){super(...t)}keyPressed(t){this.ca.fo(t)}keyReleased(t){this.ca.do(t)}isKeyPressed(t){return this.ca.To(t)}get lastKeyPressed(){return this.ca.Eo()}get lastKeyReleased(){return this.ca.Ro()}get pressedKeys(){return this.ca.So()}get modifierState(){return this.ca.ko()}};class Le{constructor(t){l(this,"la");l(this,"ua",new Map);l(this,"fa",[]);l(this,"da",new Map);l(this,"pa",new Map);this.la=t}async ga(t){for(const i of t){if(this.ua.has(i.name))return void console.warn(`[textmode.js] Plugin "${i.name}" is already installed.`);const r=this.va(i.name);try{await i.install(this.la,r)}catch(h){throw this.ma(i.name),h}this.ua.set(i.name,i),this.fa.push(i.name)}}async _a(t){const i=this.ua.get(t);if(!i)return;const r=this.va(t);i.uninstall&&await i.uninstall(this.la,r),this.ua.delete(t),this.fa.splice(this.fa.indexOf(t),1),this.ma(t)}ya(){this.wa(this.da)}ba(){this.wa(this.pa)}async Ca(){const t=[...this.ua.keys()];for(const i of t)await this._a(i)}va(t){return{renderer:this.la.j,font:this.la.ir,grid:this.la.zn,canvas:this.la.Pr,drawFramebuffer:this.la.na,asciiFramebuffer:this.la.Ma,registerPreDrawHook:i=>this.xa(this.da,t,i),registerPostDrawHook:i=>this.xa(this.pa,t,i)}}xa(t,i,r){const h=t.get(i)??new Set;return h.add(r),t.set(i,h),()=>{const n=t.get(i);n&&(n.delete(r),n.size===0&&t.delete(i))}}ma(t){this.da.delete(t),this.pa.delete(t)}wa(t){for(const i of this.fa){const r=t.get(i);r&&r.forEach(h=>h())}}}const St=`#version 300 es
|
|
12
|
+
in vec2 A0;in vec2 A1;out vec2 v_uv;void main(){v_uv=A1;gl_Position=vec4(A0,0.,1.);}`;class Ot{constructor(){l(this,"Fa",new Map);l(this,"$a",[]);l(this,"Ta",0);l(this,"Pa",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.$a){const r=this.Fa.get(i);r&&(t+=Math.min(1,Math.max(0,r.progress))*r.weight)}return Math.min(1,t/this.Ta)}ka(t){this.Ea=t}za(t,i=1){const r=`phase-${this.$a.length+1}-${Date.now()}`,h={id:r,label:t,weight:Math.max(.001,i),progress:0,status:"running"};return this.Fa.set(r,h),this.$a.push(r),this.Ta+=h.weight,r}Ia(t,i){const r=this.Fa.get(t);if(!r)return;r.progress=Math.max(0,Math.min(1,i)),r.status=r.progress>=1?"complete":"running";const h=this.Sa;Math.abs(h-this.Pa)>.001&&(this.Pa=h,this.Ea&&this.Ea(h))}Oa(t){const i=this.Fa.get(t);i&&(i.progress=1,i.status="complete",this.Ia(t,1))}La(t){const i=this.Fa.get(t);i&&(i.status="failed")}Da(){return this.$a.map(t=>{const i=this.Fa.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 Xt{constructor(t="active"){l(this,"Ba");l(this,"Ha","");l(this,"Ga","");this.Ba=t}get Na(){return this.Ba}get Xa(){return this.Ba!=="disabled"}get Ya(){return this.Ba==="active"||this.Ba==="transitioning"||this.Ba==="error"}get Ka(){return this.Ha}get ja(){return this.Ga}Za(){this.Ba!=="done"&&this.Ba!=="transitioning"||(this.Ba="active")}Wa(){this.Ba!=="disabled"&&(this.Ba="done")}qa(){this.Ba!=="disabled"&&(this.Ba="transitioning")}Va(){this.Ba==="transitioning"&&(this.Ba="done")}Qa(t){this.Ba!=="disabled"&&(this.Ba="error",t instanceof Error?(this.Ha=t.message,this.Ga=t.stack||""):(this.Ha=t,this.Ga=""))}Ja(){this.Ba="disabled"}}class Gt{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}Mn(){this.ec!=="none"&&this.rc>0&&(this.tc=performance.now())}st(){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)}Vs(){this.sc=1,this.tc=0}}function Tt(o,t){const i=o.tone??"auto";let r="dark";return i==="light"||i==="dark"?r=i:t&&(r=function(h){if(!h)return 0;const[n,a,c]=h.map(f=>f/255),u=f=>f<=.04045?f/12.92:Math.pow((f+.055)/1.055,2.4);return .2126*u(n)+.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 Yt(o){return o.mode==="light"?["#E91E63","#9C27B0","#FF6F00"]:["#8EF9F3","#F15BB5","#FF9B71"]}function jt(o,t){return o.length?o.map(i=>t.color(i)):[t.color("#FFFFFF")]}const Be=({textmodifier:o,grid:t,progress:i,frameCount:r,message:h,palette:n,theme:a,phases:c,transitionOpacity:u,isError:f,errorMessage:d})=>{const g="|/-\\",p=Math.floor(r/6)%4,m=o.color(a.textColor),v=Math.floor(255*u),A=o.color(m.r,m.g,m.b,v);if(o.charColor(A),o.cellColor(0,0,0,0),f){const E=o.color(a.mode==="light"?"#D32F2F":"#FF6B6B",v);o.charColor(E),o.push(),o.translate(0,-2,0),o.char("X"),o.rect(1,1),o.pop();const y="SETUP ERROR",T=-Math.floor(y.length/2);o.push(),o.translate(T,0,0);for(const w of y)o.char(w),o.rect(1,1),o.translateX(1);if(o.pop(),d){const w=o.color(a.subtleColor),R=o.color(w.r,w.g,w.b,v);o.charColor(R);const b=Math.floor(.8*t.cols),M=d.split(" "),z=[];let N="";for(const D of M)(N+" "+D).length<=b?N=N?N+" "+D:D:(N&&z.push(N),N=D);N&&z.push(N);const B=z.slice(0,3);z.length>3&&(B[2]=B[2].substring(0,b-3)+"..."),B.forEach((D,ut)=>{const ke=-Math.floor(D.length/2);o.push(),o.translate(ke,3+ut,0);for(const Ke of D)o.char(Ke),o.rect(1,1),o.translateX(1);o.pop()})}return}if(o.push(),o.translate(0,0,0),o.char(g[p]),o.rect(1,1),o.pop(),i>0||c.some(E=>E.status!=="pending")){const E=Math.max(6,Math.floor(.6*t.cols)),y=-Math.floor(E/2),T=Math.floor(E*i),w=n.length?n:[o.color("#FFFFFF")];o.push(),o.translate(y,3,0);for(let R=0;R<E;R++){const b=R<T?"*":".",M=w[R%w.length],z=o.color(M.r,M.g,M.b,v);o.charColor(z),o.char(b),o.rect(1,1),o.translateX(1)}o.pop()}if(h){const E=o.color(a.subtleColor),y=o.color(E.r,E.g,E.b,v);o.charColor(y);const T=-Math.floor(h.toUpperCase().length/2);o.push(),o.translate(T,5,0);for(const w of h.toUpperCase())o.char(w),o.rect(1,1),o.translateX(1);o.pop()}},Se={message:"loading...",tone:"auto",transition:"fade",transitionDuration:500};class Oe{constructor(t,i,r){this.hc=t,this.id=i,this.label=r}report(t){this.hc.Ia(this.id,t)}complete(){this.hc.Oa(this.id)}fail(t){this.hc.La(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}}}class _t{constructor(t,i,r){l(this,"la");l(this,"l");l(this,"ac");l(this,"hc");l(this,"cc");l(this,"lc");l(this,"uc");l(this,"fc");l(this,"dc");l(this,"gc");l(this,"j");l(this,"vc",[]);l(this,"mc");l(this,"_c",performance.now());l(this,"yc",0);l(this,"wc",!1);l(this,"bc",!1);l(this,"Fc");this.la=t,this.l={...Se,...i??{}},this.ac=new Xt("active"),this.hc=new Ot,this.cc=new Gt(this.l.transition,this.l.transitionDuration),this.lc=new Dt(60),this.mc=Tt(this.l,r);const h=Yt(this.mc);this.vc=jt(h,this.la),this.j=this.Cc(),this.hc.ka(n=>{n>=.999&&this.Wa()})}async _r(t){if(this.bc)return;const i=this.la.j,r=this.la.Pr;this.uc=new yt(i,16),await this.uc._r(t);const h=this.uc.maxGlyphDimensions;this.fc=new Et(r.canvas,h.width,h.height),this.dc=i.bi(this.fc.cols,this.fc.rows,3),this.gc=i.bi(this.fc.width,this.fc.height,1),this.bc=!0}get Ya(){return this.ac.Ya&&this.wc}Mn(){this.wc||(this.wc=!0,this._c=performance.now(),this.yc=0,this.lc.Mn(()=>this.Mc()))}xn(){this.wc&&(this.wc=!1,this.lc.xn())}Nr(){this.bc&&(this.fc.Vs(),this.dc.resize(this.fc.cols,this.fc.rows),this.gc.resize(this.fc.width,this.fc.height))}D(){this.xn(),this.bc&&(this.uc.D(),this.dc.D(),this.gc.D(),this.bc=!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.ac.Za();const r=this.hc.za(t,i);return new Oe(this.hc,r,t)}Wa(){this.l.transition!=="none"&&this.l.transitionDuration>0?(this.ac.qa(),this.cc.Mn()):(this.ac.Wa(),this.xn(),this.xc())}xc(){this.Fc&&this.Fc()}$c(t){this.Fc=t}error(t){this.ac.Qa(t)}Mc(){if(this.ac.Ya){if(this.yc++,this.ac.Na==="transitioning"&&this.cc.st())return this.ac.Va(),this.xc(),void this.xn();this.Tc()}}Tc(){if(!this.bc)return;const t=this.dc,i=this.uc,r=this.fc,h=this.gc,n=this.la.j,a=this.la.Pr,c=this.la.Pc,u=this.la.Ec;n.state.Zt(),t.begin(),this.la.clear(),this.la.push();try{const f={textmodifier:this.la,grid:r,progress:this.progress,elapsedMs:performance.now()-this._c,frameCount:this.yc,message:this.l.message,palette:this.vc,theme:this.mc,phases:this.hc.Da(),transitionOpacity:this.cc.nc,isError:this.ac.Na==="error",errorMessage:this.ac.Ka||void 0,errorDetails:this.ac.ja||void 0};this.j(f)}finally{this.la.pop()}t.end(),h.begin(),n.ai(c),c.I({U0:i.fontFramebuffer,U1:[i.textureColumns,i.textureRows],U2:t.textures[0],U3:t.textures[1],U4:t.textures[2],U5:[r.cols,r.rows],U6:[h.width,h.height],U7:n.state.canvasBackgroundColor}),n.pi(0,0,a.width,a.height),h.end(),n.me(...n.state.canvasBackgroundColor),n.ai(u),u.I({U8:h.textures[0],U9:[h.width,h.height],Ua:[r.offsetX,r.offsetY],Ub:[r.width,r.height]}),n.pi(r.offsetX,r.offsetY,r.width,r.height)}Rc(t){this.mc=Tt(this.l,t)}Cc(){const t=this.l.renderer||Be;return i=>{t(i),this.Sc(i)}}Sc(t){const{textmodifier:i,grid:r,frameCount:h,theme:n,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=n.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 p=c[g],m=Math.floor(.1*h+.5*g)%d.length,[v,A,E]=d[m],y=Math.floor(255*a),T=i.color(v,A,E,y);i.charColor(T),i.char(p),i.point(),i.translateX(1)}i.pop()}}class Ht extends function(i,...r){return r.reduce((h,n)=>n(h),i)}(class{},Me,Ne,Ie,Ue,De,ze){constructor(i={}){super();l(this,"j");l(this,"ir");l(this,"Pr");l(this,"zn");l(this,"ha");l(this,"Io");l(this,"oa");l(this,"ca");l(this,"kc");l(this,"na");l(this,"Pc");l(this,"Ma");l(this,"Ec");l(this,"zc");l(this,"Ic",!1);l(this,"Oc",!1);l(this,"Lc",!1);l(this,"Dc",!1);l(this,"Bc",()=>{});l(this,"Hc",()=>{});l(this,"Gc",()=>{});l(this,"Nc");l(this,"Xc");l(this,"zr",!1);l(this,"Yc");this.zc=new Le(this),this.zr=i.overlay??!1,this.Pr=new Ut(i),this.j=new ae(this.Pr.Xr()),this.ir=new yt(this.j,i.fontSize??16),this.ha=new Dt(i.frameRate??60),this.kc=new _t(this,i.loadingScreen,this.Pr.Gr()),this.kc.$c(()=>{this.ha.Sn=0,this.Dc=!0}),this.Io=new zt(this.Pr),this.oa=new Bt(this.Pr,this.Io),this.ca=new Lt,this.Pc=this.j.ci(St,`#version 300 es
|
|
13
|
+
precision highp float;uniform sampler2D U0;uniform vec2 U1;uniform sampler2D U3;uniform sampler2D U4;uniform sampler2D U2;uniform vec2 U5;uniform vec2 U6;uniform vec4 U7;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/U6;vec2 F=E*U5;vec2 G=floor(F);vec2 H=(G+0.5)/U5;vec4 I=texture(U3,H);vec4 J=texture(U4,H);vec4 K=texture(U2,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(U1.x);int R=P/Q;int S=P-(R*Q);float T=(U1.y-1.)-float(R);vec2 U=1./U1;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(U0,a);if(M)c.rgb=mix(c.rgb,1.-c.rgb,float(M));vec4 d=mix(U7,J,J.a);fragColor=mix(d,I,c);}`),this.kc.Mn(),this.Kc(i)}async Kc(i){await Promise.all([this.ir._r(i.fontSource),this.kc._r(i.fontSource)]);const r=this.ir.maxGlyphDimensions;this.zn=new Et(this.Pr.canvas,r.width,r.height),this.Io._r(this.zn),this.oa._r(this.zn),this.na=this.j.bi(this.zn.cols,this.zn.rows,3),this.Ma=this.j.bi(this.zn.width,this.zn.height,1),this.zr&&(this.Yc=k.pn(this.j,this.Pr.targetCanvas,this.zn.cols,this.zn.rows,h=>this.ir.er(h))),this.Ec=this.j.ci(St,`#version 300 es
|
|
14
|
+
precision highp float;uniform sampler2D U8;uniform vec2 U9;uniform vec2 Ua;uniform vec2 Ub;in vec2 v_uv;out vec4 fragColor;void main(){vec2 A=gl_FragCoord.xy-Ua;vec2 B=A*(U9/Ub);vec2 C=(floor(B)+0.5)/U9;fragColor=texture(U8,C);}`),this.jc(),this.ha.Mn(()=>this.aa()),await this.zc.ga(i.plugins??[]);try{await this.Bc(),this.kc.Wa()}catch(h){console.error("Error during setup:",h),this.kc.error(h)}}jc(){this.Nc=()=>{this.zr&&this.resizeCanvas(this.Pr.targetCanvas.width,this.Pr.targetCanvas.height),this.Gc()},window.addEventListener("resize",this.Nc),this.Io.io(),this.oa.io(),this.ca.io(),window.addEventListener("blur",()=>{this.ca.zo()}),this.zr&&(this.Xc=new ResizeObserver(()=>{this.resizeCanvas(this.Pr.targetCanvas.width,this.Pr.targetCanvas.height)}),this.Xc.observe(this.Pr.targetCanvas))}aa(){if(!this.kc.Ya&&this.Dc){this.Oc=!0;try{this.ha.Pn(),this.ha.kn(),this.zr&&Rt(this.j.context,this.Yc.texture,this.Pr.targetCanvas),this.zc.ya(),this.j.state.Zt(),this.na.begin(),this.Hc(),this.na.end(),this.Ma.begin(),this.j.ai(this.Pc),this.Pc.I({U0:this.ir.fontFramebuffer,U1:[this.ir.textureColumns,this.ir.textureRows],U2:this.na.textures[0],U3:this.na.textures[1],U4:this.na.textures[2],U5:[this.zn.cols,this.zn.rows],U6:[this.Ma.width,this.Ma.height],U7:this.j.state.canvasBackgroundColor}),this.j.pi(0,0,this.Pr.width,this.Pr.height),this.Ma.end(),this.j.me(...this.j.state.canvasBackgroundColor),this.j.ai(this.Ec),this.Ec.I({U8:this.Ma.textures[0],U9:[this.Ma.width,this.Ma.height],Ua:[this.zn.offsetX,this.zn.offsetY],Ub:[this.zn.width,this.zn.height]}),this.j.pi(this.zn.offsetX,this.zn.offsetY,this.zn.width,this.zn.height),this.zc.ba()}finally{this.Oc=!1,this.Ic&&!this.Lc&&this.Zc()}}}resizeCanvas(i,r){this.Pr.Nr(i,r),this.kc.Rc(this.Pr.Gr()),this.zn.Vs(),this.kc.Nr(),this.na.resize(this.zn.cols,this.zn.rows),this.Ma.resize(this.zn.width,this.zn.height),this.j.Mi(),this.Io.eo(),this.oa.eo(),this.aa()}destroy(){this.Lc||this.Ic||(this.Ic=!0,this.ha.Fn(),this.Oc||this.Zc())}Zc(){var i,r;this.Ic=!1,this.kc.D(),this.zc.Ca(),window.removeEventListener("resize",this.Nc),(i=this.Xc)==null||i.disconnect(),this.Io.lo(),this.oa.lo(),this.ca.lo(),this.na.D(),this.Pc.D(),this.ir.D(),this.j.D(),this.Ma.D(),this.Ec.D(),(r=this.Yc)==null||r.D(),this.Pr.D(),this.Lc=!0}setup(i){this.Bc=i}draw(i){this.Hc=i}windowResized(i){this.Gc=i}get grid(){return this.zn}get font(){return this.ir}get width(){return this.Pr.width}get height(){return this.Pr.height}get canvas(){return this.Pr.canvas}get drawFramebuffer(){return this.na}get isDisposed(){return this.Lc}get overlay(){return this.Yc}get loading(){return this.kc}}class lt{constructor(){}static create(t={}){return new Ht(t)}static setErrorLevel(t){Z._(t)}static get version(){return"0.6.0-beta.3"}}const Xe=Object.freeze(Object.defineProperty({__proto__:null,LoadingPhaseTracker:Ot,LoadingScreenManager:_t,LoadingScreenStateMachine:Xt,LoadingScreenTransition:Gt,resolveColorInputs:jt,resolveDefaultPalette:Yt,resolveTheme:Tt},Symbol.toStringTag,{value:"Module"})),Ge=Object.freeze(Object.defineProperty({__proto__:null,TextmodeFont:yt,TextmodeImage:k,TextmodeVideo:ct},Symbol.toStringTag,{value:"Module"})),Ye=Object.freeze(Object.defineProperty({__proto__:null,keyboard:Pe,mouse:Fe,touch:Ce},Symbol.toStringTag,{value:"Module"})),je=lt.create,_e=lt.setErrorLevel,He=lt.version;F.TextmodeCanvas=Ut,F.TextmodeColor=I,F.TextmodeErrorLevel=X,F.TextmodeFramebuffer=Q,F.TextmodeGrid=Et,F.Textmodifier=Ht,F.create=je,F.input=Ye,F.loadables=Ge,F.loading=Xe,F.setErrorLevel=_e,F.textmode=lt,F.version=He,Object.defineProperty(F,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={});
|