textmode.js 0.3.0 → 0.3.2-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -4
- package/dist/textmode.esm.js +1540 -1621
- package/dist/textmode.esm.min.js +1502 -1583
- package/dist/textmode.umd.js +6 -8
- package/dist/textmode.umd.min.js +7 -9
- package/dist/types/index.d.ts +2 -0
- package/dist/types/rendering/webgl/Framebuffer.d.ts +2 -3
- package/dist/types/textmode/TextmodeImage.d.ts +4 -4
- package/dist/types/textmode/Textmodifier.d.ts +55 -5
- package/dist/types/textmode/managers/KeyboardManager.d.ts +2 -0
- package/dist/types/textmode/managers/MouseManager.d.ts +19 -1
- package/dist/types/textmode/managers/TouchManager.d.ts +225 -0
- package/dist/types/textmode/managers/index.d.ts +12 -4
- package/dist/types/textmode/mixins/KeyboardMixin.d.ts +3 -2
- package/dist/types/textmode/mixins/MouseMixin.d.ts +23 -6
- package/dist/types/textmode/mixins/RenderingMixin.d.ts +4 -2
- package/dist/types/textmode/mixins/TextmodifierMixin.d.ts +5 -2
- package/dist/types/textmode/mixins/TouchMixin.d.ts +191 -0
- package/dist/types/textmode/mixins/index.d.ts +4 -2
- package/package.json +1 -1
package/dist/textmode.umd.js
CHANGED
|
@@ -1,13 +1,11 @@
|
|
|
1
|
-
var
|
|
1
|
+
var he=Object.defineProperty;var ae=(b,R,S)=>R in b?he(b,R,{enumerable:!0,configurable:!0,writable:!0,value:S}):b[R]=S;var c=(b,R,S)=>ae(b,typeof R!="symbol"?R+"":R,S);var s,e;s=this,e=function(b){class R extends Error{constructor(t,i={}){super(R.i(t,i)),this.name="TextmodeError"}static i(t,i){return`${t}${i&&Object.keys(i).length>0?`
|
|
2
2
|
|
|
3
3
|
📋 Context:`+Object.entries(i).map(([r,n])=>`
|
|
4
4
|
- ${r}: ${R.o(n)}`).join(""):""}
|
|
5
5
|
|
|
6
6
|
${"↓".repeat(24)}
|
|
7
|
-
`}static o(t){if(t===null)return"null";if(t===void 0)return"undefined";if(typeof t=="string")return`"${t}"`;if(typeof t=="number"||typeof t=="boolean")return t+"";if(Array.isArray(t))return t.length===0?"[]":t.length<=5?`[${t.map(i=>R.o(i)).join(", ")}]`:`[${t.slice(0,3).map(i=>R.o(i)).join(", ")}, ... +${t.length-3} more]`;if(typeof t=="object"){const i=Object.keys(t);return i.length===0?"{}":i.length<=3?`{ ${i.map(r=>`${r}: ${R.o(t[r])}`).join(", ")} }`:`{ ${i.slice(0,2).map(r=>`${r}: ${R.o(t[r])}`).join(", ")}, ... +${i.length-2} more }`}return t+""}}var
|
|
8
|
-
in vec2 a_position;in vec2 a_texCoord;in vec2 a_instancePosition;in vec2 a_instanceSize;in vec3 a_instanceCharacter;in vec4 a_instancePrimaryColor;in vec4 a_instanceSecondaryColor;in vec2 a_instanceRotation;in vec3 a_instanceTransform;in vec3 a_instanceGlobalRotation;in vec2 a_instanceRotationCenter;in vec2 a_instanceBezierCP1;in vec2 a_instanceBezierCP2;in vec2 a_instanceBezierStart;in vec2 a_instanceBezierEnd;in vec2 a_instanceArcAngles;uniform float U9;uniform vec2
|
|
9
|
-
precision highp float;in vec2 v_uv;in vec3 v_character;in vec4 v_primaryColor;in vec4 v_secondaryColor;in vec2 v_rotation;in vec3 v_transform;layout(location=0)out vec4 o_character;layout(location=1)out vec4 o_primaryColor;layout(location=2)out vec4 o_secondaryColor;layout(location=3)out vec4 o_rotation;layout(location=4)out vec4 o_transform;void main(){o_character=vec4(v_character,1.);o_primaryColor=v_primaryColor;o_secondaryColor=v_secondaryColor;o_rotation=vec4(v_rotation,0.,1.);o_transform=vec4(v_transform,1.);}`),this.
|
|
10
|
-
precision highp float;in vec2 v_uv;uniform sampler2D Ue;uniform sampler2D Uf;uniform sampler2D Ug;uniform sampler2D Uh;uniform sampler2D Ui;uniform vec2 Uj;layout(location=0)out vec4 o_character;layout(location=1)out vec4 o_primaryColor;layout(location=2)out vec4 o_secondaryColor;layout(location=3)out vec4 o_rotation;layout(location=4)out vec4 o_transform;void main(){vec2 A=vec2(v_uv.x,1.-v_uv.y);vec2 B=A*Uj;vec2 C=(floor(B)+0.5f)/Uj;vec4 D=texture(Ue,C);vec4 E=texture(Uf,C);if(E.a==0.){discard;}vec4 F=texture(Ug,C);vec4 G=texture(Uh,C);vec4 H=texture(Ui,C);o_character=D;o_primaryColor=E;o_secondaryColor=F;o_rotation=G;o_transform=H;}`),this.
|
|
11
|
-
precision highp float;in vec2 v_uv;uniform sampler2D Uk;uniform bool Ul;uniform bool Um;uniform bool Un;uniform vec2 Uo;uniform bool Up;uniform vec3 Uq;uniform bool Ur;uniform vec3 Us;uniform vec4 Ut;uniform int Uu;uniform vec3 Uv[64];layout(location=0)out vec4 o_character;layout(location=1)out vec4 o_primaryColor;layout(location=2)out vec4 o_secondaryColor;layout(location=3)out vec4 o_rotation;layout(location=4)out vec4 o_transform;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(Uk,C);float E=A(D.rgb);if(Uu>0){float F=float(Uu);float G=clamp(E*(F-1.0f),0.0f,F-1.0f);int H=int(floor(G+0.5f));vec3 I=Uv[H];o_character=vec4(I,1.0f);}else{o_character=vec4(E,0.0f,0.0f,1.0f);}vec3 J=D.rgb;vec3 K=Up?Uq:J;vec3 L=Ur?Us:J;float M=1.0f;float N=1.0f;if(D.a<0.01f){K=Ut.rgb;L=Ut.rgb;}o_primaryColor=vec4(K,M);o_secondaryColor=vec4(L,N);o_rotation=vec4(Uo.xy,0.0f,1.0f);o_transform=vec4(float(Ul),float(Um),float(Un),1.0f);}`)}ie(){return this.Jt}Tt(){return this.te}re(){return this.ee}ne(){return this.se}oe(t){return new G(this.vt,K,t)}ae(t,i){return new G(this.vt,t,i)}Gt(){this.Jt.Gt(),this.te.Gt(),this.ee.Gt(),this.se.Gt()}}var b=(c=>(c.RECTANGLE="rectangle",c.LINE="line",c.ELLIPSE="ellipse",c.ARC="arc",c.TRIANGLE="triangle",c.BEZIER_CURVE="bezier_curve",c.CUSTOM="custom",c))(b||{});class At{constructor(t){l(this,"vt");l(this,"he",new Map);this.vt=t}ce(t,i,r,n){const o=this.vt;let h=this.he.get(t);h||(h=new Map,this.he.set(t,h));let a=h.get(i)||null;if(!a){a=o.createVertexArray(),h.set(i,a),o.bindVertexArray(a),o.bindBuffer(o.ARRAY_BUFFER,n);const u=o.getAttribLocation(t,"a_position");u!==-1&&(o.enableVertexAttribArray(u),o.vertexAttribPointer(u,r.ue.le.size,o.FLOAT,!1,r.fe,r.ue.le.offset),o.vertexAttribDivisor(u,0));const f=o.getAttribLocation(t,"a_texCoord");f!==-1&&(o.enableVertexAttribArray(f),o.vertexAttribPointer(f,r.ue.de.size,o.FLOAT,!1,r.fe,r.ue.de.offset),o.vertexAttribDivisor(f,0))}o.bindVertexArray(a)}pe(){this.vt.bindVertexArray(null)}Gt(){for(const[,t]of this.he)for(const[,i]of t)i&&this.vt.deleteVertexArray(i)}}class xt{constructor(t,i){l(this,"me");l(this,"vt");l(this,"xt");l(this,"ge",null);l(this,"_e",null);this.vt=t,this.me=new At(t),this.xt=i}ve(t,i,r){const{shader:n}=t,o=V(this.vt)||this.vt.getParameter(this.vt.VIEWPORT);n.Vt({U9:o[2]/o[3],Uy:[o[2],o[3]]});const h=f=>{if(!f||!f.ye())return;const d=f.unitGeometry,g=f.unitBuffer;try{this.me.ce(n.Qt,f.type+"",d,g),f.batch.Ae(n),f.batch.we(d.Ce,d.be)}finally{f.batch.xe(n),this.me.pe(),f.$e()}};let a=null,u=null;for(const f of i){if(f.type===b.CUSTOM){u&&(h(u),a=null,u=null),this.Me(t,f.params,f.state,r.get(b.RECTANGLE));continue}a!==null&&f.type!==a&&(h(u),a=null,u=null);let d=u;d&&f.type===a||(d=r.get(f.type)||null,u=d,a=f.type),d&&d.Fe(f.params,f.state)}h(u)}Me(t,i,r,n){const{x:o,y:h,width:a,height:u,shader:f,uniforms:d}=i,g=this.Re(Math.max(1,Math.floor(a)),Math.max(1,Math.floor(u)));g.begin(),this.ze(n,f,d,0,0,g.width,g.height,{}),g.end();const m=this.Pe(),x={Ue:g.textures[0],Uf:g.textures[1],Ug:g.textures[2],Uh:g.textures[3],Ui:g.textures[4],Uj:[g.width,g.height]};this.ze(n,m,x,Math.floor(o),Math.floor(h),Math.max(1,Math.floor(a)),Math.max(1,Math.floor(u)),r),t.shader.Xt()}ze(t,i,r,n,o,h,a,u){i.Xt(),i.Vt(r);const f=this.vt.getParameter(this.vt.VIEWPORT);if(i.Vt({U9:f[2]/f[3],Uy:[f[2],f[3]]}),t.$e(),t.Fe({x:n,y:o,width:h,height:a},u),t.ye()){const d=t.unitGeometry,g=t.unitBuffer;try{this.me.ce(i.Qt,t.type+"",d,g),t.batch.Ae(i),t.batch.we(d.Ce,d.be)}finally{t.batch.xe(i),this.me.pe(),t.$e()}}}Pe(){return this.xt.ie()}Re(t,i){return this.ge&&this._e&&this._e.w===t&&this._e.h===i||(this.ge&&this.ge.Gt(),this.ge=new j(this.vt,t,i,5),this._e={w:t,h:i}),this.ge}Gt(){this.me.Gt(),this.ge&&this.ge.Gt()}}class Et{constructor(){l(this,"Te",[]);l(this,"Se",1);l(this,"Ee",0)}Be(t){if(this.Ee>=this.Te.length){const r={id:this.Se++,type:t,params:{},state:{I:1,N:0,X:0,W:0,j:[0,0,0],Y:[1,1,1,1],q:[0,0,0,1],V:!1,K:!1,D:!1,L:[0,0]}};this.Te.push(r)}const i=this.Te[this.Ee];return i.id=this.Se++,i.type=t,this.Ee++,i}Ge(t,i,r,n,o){const h=this.Be(b.RECTANGLE);return h.params.x=t,h.params.y=i,h.params.width=r,h.params.height=n,o.J(h.state),h.id}De(t,i,r,n,o,h,a){const u=this.Be(b.CUSTOM);return u.params.x=t,u.params.y=i,u.params.width=r,u.params.height=n,u.params.shader=o,u.params.uniforms=h,a.J(u.state),u.id}Le(t,i,r,n,o,h){const a=this.Be(b.LINE);return a.params.x1=t,a.params.y1=i,a.params.x2=r,a.params.y2=n,a.params.thickness=o,h.J(a.state),a.id}Oe(t,i,r,n,o){const h=this.Be(b.ELLIPSE);return h.params.x=t,h.params.y=i,h.params.width=r,h.params.height=n,o.J(h.state),h.id}ke(t,i,r,n,o,h,a){const u=this.Be(b.ARC);return u.params.x=t,u.params.y=i,u.params.width=r,u.params.height=n,u.params.start=o,u.params.stop=h,a.J(u.state),u.id}He(t,i,r,n,o,h,a){const u=this.Be(b.TRIANGLE);return u.params.x1=t,u.params.y1=i,u.params.x2=r,u.params.y2=n,u.params.x3=o,u.params.y3=h,a.J(u.state),u.id}Ie(t,i,r,n,o,h,a,u,f,d){const g=this.Be(b.BEZIER_CURVE);return g.params.x1=t,g.params.y1=i,g.params.cp1x=r,g.params.cp1y=n,g.params.cp2x=o,g.params.cp2y=h,g.params.x2=a,g.params.y2=u,g.params.thickness=f,d.J(g.state),g.id}get length(){return this.Ee}get isEmpty(){return this.Ee===0}Ne(){this.Ee=0}[Symbol.iterator](){let t=0;const i=this.Ee,r=this.Te;return{next:()=>t<i?{value:r[t++],done:!1}:{value:void 0,done:!0}}}}const M=class M{static Xe(t,i,r=0){var h,a,u,f,d,g,m,x,A,p;const n=i||new Float32Array(M.FLOATS_PER_INSTANCE);let o=r;return n[o++]=t.le[0],n[o++]=t.le[1],n[o++]=t.Ee[0],n[o++]=t.Ee[1],n[o++]=t.j[0],n[o++]=t.j[1],n[o++]=t.j[2],n[o++]=t.Y[0],n[o++]=t.Y[1],n[o++]=t.Y[2],n[o++]=t.Y[3],n[o++]=t.q[0],n[o++]=t.q[1],n[o++]=t.q[2],n[o++]=t.q[3],n[o++]=t.L[0],n[o++]=t.L[1],n[o++]=t.We[0],n[o++]=t.We[1],n[o++]=t.We[2],n[o++]=t.N,n[o++]=t.X,n[o++]=t.W,n[o++]=t.Ve[0],n[o++]=t.Ve[1],n[o++]=((h=t.Ke)==null?void 0:h[0])||0,n[o++]=((a=t.Ke)==null?void 0:a[1])||0,n[o++]=((u=t.je)==null?void 0:u[0])||0,n[o++]=((f=t.je)==null?void 0:f[1])||0,n[o++]=((d=t.Ye)==null?void 0:d[0])||0,n[o++]=((g=t.Ye)==null?void 0:g[1])||0,n[o++]=((m=t.qe)==null?void 0:m[0])||0,n[o++]=((x=t.qe)==null?void 0:x[1])||0,n[o++]=((A=t.Ze)==null?void 0:A[0])||0,n[o++]=((p=t.Ze)==null?void 0:p[1])||0,n}static Qe(t){const i=t.length*M.FLOATS_PER_INSTANCE,r=new Float32Array(i);for(let n=0;n<t.length;n++){const o=n*M.FLOATS_PER_INSTANCE;M.Xe(t[n],r,o)}return r}};l(M,"BYTES_PER_INSTANCE",140),l(M,"FLOATS_PER_INSTANCE",35);let I=M;const U=class U{};l(U,"STRIDE",I.BYTES_PER_INSTANCE),l(U,"ATTRIBUTES",{a_instancePosition:{location:-1,size:2,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:U.STRIDE,offset:0,divisor:1},a_instanceSize:{location:-1,size:2,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:U.STRIDE,offset:8,divisor:1},a_instanceCharacter:{location:-1,size:3,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:U.STRIDE,offset:16,divisor:1},a_instancePrimaryColor:{location:-1,size:4,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:U.STRIDE,offset:28,divisor:1},a_instanceSecondaryColor:{location:-1,size:4,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:U.STRIDE,offset:44,divisor:1},a_instanceRotation:{location:-1,size:2,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:U.STRIDE,offset:60,divisor:1},a_instanceTransform:{location:-1,size:3,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:U.STRIDE,offset:68,divisor:1},a_instanceGlobalRotation:{location:-1,size:3,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:U.STRIDE,offset:80,divisor:1},a_instanceRotationCenter:{location:-1,size:2,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:U.STRIDE,offset:92,divisor:1},a_instanceArcAngles:{location:-1,size:2,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:U.STRIDE,offset:100,divisor:1},a_instanceBezierCP1:{location:-1,size:2,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:U.STRIDE,offset:108,divisor:1},a_instanceBezierCP2:{location:-1,size:2,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:U.STRIDE,offset:116,divisor:1},a_instanceBezierStart:{location:-1,size:2,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:U.STRIDE,offset:124,divisor:1},a_instanceBezierEnd:{location:-1,size:2,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:U.STRIDE,offset:132,divisor:1}});let q=U;class yt{constructor(t,i=1e3,r=1.5){l(this,"vt");l(this,"Je",[]);l(this,"ts");l(this,"es");l(this,"ss",null);l(this,"rs",!0);l(this,"ns",0);l(this,"hs",new Map);l(this,"cs",null);this.vt=t,this.ts=i,this.es=r,this.ls()}Fe(t){const i=this.Je.length;return this.Je.push(t),this.rs=!0,i}get count(){return this.Je.length}get isEmpty(){return this.Je.length===0}clear(){this.Je.length=0,this.rs=!0}us(t){if(t<=this.ts)return;const i=Math.ceil(t*this.es);this.ts=i,this.ls()}ls(){const t=this.vt;this.ss&&t.deleteBuffer(this.ss),this.ss=t.createBuffer();const i=this.ts*I.BYTES_PER_INSTANCE;t.bindBuffer(t.ARRAY_BUFFER,this.ss),t.bufferData(t.ARRAY_BUFFER,i,t.DYNAMIC_DRAW),t.bindBuffer(t.ARRAY_BUFFER,null),this.rs=!0,this.ns=0}fs(){if(!this.rs||this.Je.length===0)return;const t=this.vt,i=this.Je.length;this.us(i),(!this.cs||this.cs.length<i*I.FLOATS_PER_INSTANCE)&&(this.cs=new Float32Array(i*I.FLOATS_PER_INSTANCE));const r=I.Qe(this.Je);t.bindBuffer(t.ARRAY_BUFFER,this.ss),i<=this.ns?t.bufferSubData(t.ARRAY_BUFFER,0,r):t.bufferData(t.ARRAY_BUFFER,r,t.DYNAMIC_DRAW),t.bindBuffer(t.ARRAY_BUFFER,null),this.rs=!1,this.ns=i}ds(t){let i=this.hs.get(t);if(!i){i=new Map;const r=this.vt;for(const n in q.ATTRIBUTES){const o=r.getAttribLocation(t,n);o!==-1&&i.set(n,o)}this.hs.set(t,i)}return i}Ae(t){if(!this.ss||this.Je.length===0)return;const i=this.vt,r=t.Qt;this.fs();const n=this.ds(r);i.bindBuffer(i.ARRAY_BUFFER,this.ss);for(const[o,h]of n){const a=q.ATTRIBUTES[o];a&&(i.enableVertexAttribArray(h),i.vertexAttribPointer(h,a.size,a.type,a.normalized,a.stride,a.offset),i.vertexAttribDivisor(h,a.divisor))}}xe(t){const i=this.vt,r=this.ds(t.Qt);for(const[,n]of r)i.disableVertexAttribArray(n),i.vertexAttribDivisor(n,0)}we(t,i){this.Je.length!==0&&this.vt.drawArraysInstanced(t,0,i,this.Je.length)}Gt(){this.ss&&this.vt.deleteBuffer(this.ss)}}class z{constructor(t,i,r,n){l(this,"vt");l(this,"ps");l(this,"gs");l(this,"_s");l(this,"vs",null);this.vt=t,this.ps=i,this.gs=r,this._s=n;const o=this.vt.createBuffer();if(!o)throw Error("Failed to create unit geometry buffer");this.vt.bindBuffer(this.vt.ARRAY_BUFFER,o),this.vt.bufferData(this.vt.ARRAY_BUFFER,this._s.As,this.vt.STATIC_DRAW),this.vt.bindBuffer(this.vt.ARRAY_BUFFER,null),this.vs=o}get type(){return this.gs}get unitGeometry(){return this._s}get unitBuffer(){return this.vs}get batch(){return this.ps}$e(){this.ps.clear()}ye(){return!this.ps.isEmpty}Gt(){this.ps.Gt(),this.vt.deleteBuffer(this.vs)}ws(t,i,r,n,o){const h=this.Cs(t,i,r,n,o.N||0,o.X||0,o.W||0);return{le:[t,i],Ee:[r,n],j:o.j||[0,0,0],Y:o.Y||[1,1,1,1],q:o.q||[0,0,0,1],L:o.L||[0,0],We:[o.D?1:0,o.V?1:0,o.K?1:0],N:h.radiansX,X:h.radiansY,W:h.radiansZ,Ve:[h.centerX,h.centerY]}}bs(t,i){const r=V(this.vt)||[0,0,this.vt.canvas.width,this.vt.canvas.height];return{nx:t/r[2]*2-1,ny:1-i/r[3]*2}}$s(t,i,r){const n=this.bs(i,r);t.Ve=[n.nx,n.ny]}Cs(t,i,r,n,o,h,a){const u=V(this.vt)||[0,0,this.vt.canvas.width,this.vt.canvas.height],f=u[2],d=u[3];return{centerX:(t+r/2)/f*2-1,centerY:1-(i+n/2)/d*2,radiansX:-o*Math.PI/180,radiansY:-h*Math.PI/180,radiansZ:-a*Math.PI/180,aspectRatio:f/d}}}const wt={As:new Float32Array([0,0,0,0,1,0,1,0,0,1,0,1,0,1,0,1,1,0,1,0,1,1,1,1]),be:6,Ce:WebGL2RenderingContext.TRIANGLES,fe:16,ue:{le:{size:2,offset:0},de:{size:2,offset:8}}};class bt extends z{constructor(t,i){super(t,i,b.RECTANGLE,wt)}Fe(t,i){const r=this.ws(t.x,t.y,t.width,t.height,i);return this.ps.Fe(r)}}const Rt={As: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]),be:6,Ce:WebGL2RenderingContext.TRIANGLES,fe:16,ue:{le:{size:2,offset:0},de:{size:2,offset:8}}};class Tt extends z{constructor(t,i){super(t,i,b.LINE,Rt)}Fe(t,i){const r=t.x2-t.x1,n=t.y2-t.y1,o=Math.hypot(r,n),h=t.thickness||i.I||1,a=t.x1+r/2,u=t.y1+n/2,f=a-o/2,d=u,g=this.ws(f,d,o,h,i);return this.$s(g,a,u),this.ps.Fe(g)}}const Ct={As:function(c=32){const t=[],i=2*Math.PI/c;for(let r=0;r<c;r++){const n=r*i,o=(r+1)%c*i,h=Math.cos(n),a=Math.sin(n),u=.5*(h+1),f=.5*(a+1),d=Math.cos(o),g=Math.sin(o),m=.5*(d+1),x=.5*(g+1);t.push(0,0,.5,.5,h,a,u,f,d,g,m,x)}return new Float32Array(t)}(32),be:96,Ce:WebGL2RenderingContext.TRIANGLES,fe:16,ue:{le:{size:2,offset:0},de:{size:2,offset:8}}};class Ut extends z{constructor(t,i){super(t,i,b.ELLIPSE,Ct)}Fe(t,i){const r=this.ws(t.x,t.y,t.width,t.height,i);return this.$s(r,t.x,t.y),this.ps.Fe(r)}}let Ft={As:function(c){const t=[];for(let i=0;i<c;i++){const r=i/c,n=(i+1)/c;t.push(r,0,r,0,r,1,r,1,n,1,n,1)}return new Float32Array(t)}(32),be:96,Ce:WebGL2RenderingContext.TRIANGLES,fe:16,ue:{le:{size:2,offset:0},de:{size:2,offset:8}}};class Bt extends z{constructor(t,i){super(t,i,b.ARC,Ft)}Fe(t,i){const r=t.x-t.width/2,n=t.y-t.height/2,o=t.start*Math.PI/180,h=t.stop*Math.PI/180,a=this.ws(r,n,t.width,t.height,i);return this.$s(a,t.x,t.y),a.Ke=[o,h],this.ps.Fe(a)}}const Lt={As:new Float32Array([0,0,0,0,1,0,1,0,.5,1,.5,1]),be:3,Ce:WebGL2RenderingContext.TRIANGLES,fe:16,ue:{le:{size:2,offset:0},de:{size:2,offset:8}}};class St extends z{constructor(t,i){super(t,i,b.TRIANGLE,Lt)}Fe(t,i){const r=Math.min(t.x1,t.x2,t.x3),n=Math.max(t.x1,t.x2,t.x3),o=Math.min(t.y1,t.y2,t.y3),h=n-r,a=Math.max(t.y1,t.y2,t.y3)-o,u=this.ws(r,o,h,a,i),f=r+.5*h,d=o+a*(1/3);return this.$s(u,f,d),this.ps.Fe(u)}}function ht(c,t,i,r,n){const o=1-c,h=o*o,a=c*c;return h*o*t+3*h*c*i+3*o*a*r+a*c*n}const Pt={As:function(c=16){const t=[];for(let i=0;i<c;i++){const r=i/c,n=(i+1)/c;t.push(r,-.5,r,0),t.push(n,-.5,n,0),t.push(r,.5,r,1),t.push(r,.5,r,1),t.push(n,-.5,n,0),t.push(n,.5,n,1)}return new Float32Array(t)}(16),be:96,Ce:WebGL2RenderingContext.TRIANGLES,fe:16,ue:{le:{size:2,offset:0},de:{size:2,offset:8}}};class Dt extends z{constructor(t,i){super(t,i,b.BEZIER_CURVE,Pt)}Fe(t,i){const r=i.I||1,n=ht(.5,t.x1,t.cp1x,t.cp2x,t.x2),o=ht(.5,t.y1,t.cp1y,t.cp2y,t.y2),h=this.ws(0,0,1,r,i);return this.$s(h,n,o),h.qe=[t.x1,t.y1],h.je=[t.cp1x,t.cp1y],h.Ye=[t.cp2x,t.cp2y],h.Ze=[t.x2,t.y2],this.ps.Fe(h)}}class Mt{constructor(t){l(this,"vt");l(this,"Ms",null);l(this,"Fs");l(this,"Rs",null);l(this,"zs",{});l(this,"Ps",null);l(this,"Ts",new Map);l(this,"Ss");l(this,"Es");l(this,"Bs");l(this,"k",[]);this.vt=t,this.Fs=new vt(t),this.Bs=new nt,this.Ss=new xt(t,this),this.Es=new Et,this.Ps=t.createBuffer(),Y(this.vt,[0,0,this.vt.canvas.width,this.vt.canvas.height])}Gs(t){let i=this.Ts.get(t);if(i)return i;const r=new yt(this.vt);return i=(0,{[b.RECTANGLE]:()=>new bt(this.vt,r),[b.LINE]:()=>new Tt(this.vt,r),[b.ELLIPSE]:()=>new Ut(this.vt,r),[b.ARC]:()=>new Bt(this.vt,r),[b.TRIANGLE]:()=>new St(this.vt,r),[b.BEZIER_CURVE]:()=>new Dt(this.vt,r)}[t])(),this.Ts.set(t,i),i}Ds(t){this.Ms!==t&&(this.Ms=t,t.Xt())}ae(t,i){return this.Fs.ae(t,i)}ie(){return this.Fs.ie()}Tt(){return this.Fs.Tt()}re(){return this.Fs.re()}ne(){return this.Fs.ne()}Ls(t){this.Rs=t,t&&(this.zs={})}Kt(t,i){this.zs[t]=i}Os(t){Object.assign(this.zs,t)}oe(t){return this.Fs.oe(t)}ks(t,i,r,n,o){const h=this.ie(),a={Ue:t.textures[0],Uf:t.textures[1],Ug:t.textures[2],Uh:t.textures[3],Ui:t.textures[4],Uj:[t.width,t.height]};this.Es.De(i,r,n,o,h,a,this.Bs)}Hs(t,i,r,n,o){const h=this.ne(),a=t.Is(),u={Uk:a.texture,Ul:!!a.invert,Um:!!a.flipX,Un:!!a.flipY,Uo:a.charRotation,Up:a.charColorFixed,Uq:a.charColor,Ur:a.cellColorFixed,Us:a.cellColor,Ut:a.backgroundColor,Uu:a.charCount,Uv:a.charList};this.Es.De(i,r,n,o,h,u,this.Bs)}Ns(t,i,r,n){var p;const o=this.vt,h=o.canvas.width,a=o.canvas.height,u=t/h*2-1,f=(t+r)/h*2-1,d=1-i/a*2,g=1-(i+n)/a*2,m=new Float32Array([u,g,f,g,u,d,f,g,f,d,u,d]);o.bindBuffer(o.ARRAY_BUFFER,this.Ps),o.bufferData(o.ARRAY_BUFFER,m,o.DYNAMIC_DRAW);const x=((p=this.Ms)==null?void 0:p.Qt)||o.getParameter(o.CURRENT_PROGRAM),A=x?o.getAttribLocation(x,"a_position"):-1;A!==-1&&(o.enableVertexAttribArray(A),o.vertexAttribPointer(A,2,o.FLOAT,!1,8,0)),o.drawArrays(o.TRIANGLES,0,6),A!==-1&&o.disableVertexAttribArray(A)}Xs(t,i,r,n){this.Rs?(this.Es.De(t,i,r,n,this.Rs,{...this.zs},this.Bs),this.Rs=null,this.zs={}):this.Es.Ge(t,i,r,n,this.Bs)}Ws(t,i,r,n){this.Es.Le(t,i,r,n,this.Bs.lineWeight,this.Bs)}Vs(t,i,r,n){this.Es.Oe(t,i,r,n,this.Bs)}Ks(t,i,r,n,o,h){this.Es.He(t,i,r,n,o,h,this.Bs)}js(t,i,r,n,o,h,a,u){const f=this.Bs.lineWeight;this.Es.Ie(t,i,r,n,o,h,a,u,f,this.Bs)}Ys(t,i,r=1,n={}){return new j(this.vt,t,i,r,n,this,!0)}qs(t,i,r,n,o,h){this.Es.ke(t,i,r,n,o,h,this.Bs)}Zs(t,i=t,r=t,n=255){this.state.ft(t,i,r,n),this.Ne(t/255,i/255,r/255,n/255)}Ne(t=0,i=0,r=0,n=0){this.vt.clearColor(t,i,r,n),this.vt.clear(this.vt.COLOR_BUFFER_BIT)}Qs(){this.vt.viewport(0,0,this.vt.canvas.width,this.vt.canvas.height),Y(this.vt,[0,0,this.vt.canvas.width,this.vt.canvas.height])}get context(){return this.vt}get state(){return this.Bs}Et(t){this.k.push(this.Bs),this.Bs=t}Bt(){const t=this.k.pop();t&&(this.Bs=t)}St(t){const i=t,r=V(this.vt)??this.vt.getParameter(this.vt.VIEWPORT),n={shader:i,gl:this.vt,viewport:r};this.Ds(i);const o=new Set;for(const h of this.Es)h.type===b.CUSTOM?o.add(b.RECTANGLE):o.add(h.type);for(const h of o)h!==b.CUSTOM&&this.Gs(h);this.Ss.ve(n,this.Es,this.Ts),this.Es.Ne()}Gt(){this.vt.deleteBuffer(this.Ps),this.Es.Ne();for(const t of this.Ts.values())t.Gt();this.Fs.Gt(),this.Ss.Gt()}}const T={readShort:(c,t)=>(T.t.uint16[0]=c[t]<<8|c[t+1],T.t.int16[0]),readUshort:(c,t)=>c[t]<<8|c[t+1],readUshorts(c,t,i){const r=[];for(let n=0;n<i;n++)r.push(T.readUshort(c,t+2*n));return r},readUint(c,t){const i=T.t.uint8;return i[3]=c[t],i[2]=c[t+1],i[1]=c[t+2],i[0]=c[t+3],T.t.uint32[0]},readASCII(c,t,i){let r="";for(let n=0;n<i;n++)r+=String.fromCharCode(c[t+n]);return r},writeUshort(c,t,i){c[t]=i>>>8&255,c[t+1]=255&i},writeUint(c,t,i){c[t]=i>>>24&255,c[t+1]=i>>>16&255,c[t+2]=i>>>8&255,c[t+3]=255&i},writeASCII(c,t,i){for(let r=0;r<i.length;r++)c[t+r]=255&i.charCodeAt(r)},t:(()=>{const c=new ArrayBuffer(8);return{uint8:new Uint8Array(c),int16:new Int16Array(c),uint16:new Uint16Array(c),uint32:new Uint32Array(c)}})()};function Z(c){return c+3&-4}function Q(c,t,i){const r=t+i;let n=0;const o=T.t;for(let h=t;h<r;h+=4)o.uint8[3]=c[h]||0,o.uint8[2]=c[h+1]||0,o.uint8[1]=c[h+2]||0,o.uint8[0]=c[h+3]||0,n=n+(o.uint32[0]>>>0)>>>0;return n>>>0}class Ot{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 H(c){let t=32,i=0;for(const a of c)a&&(a<t&&(t=a),a>i&&(i=a));if(i===0)return{min:0,max:0,table:new Map};const r=new Uint32Array(i+1);for(const a of c)a&&r[a]++;const n=new Uint32Array(i+1);let o=0;r[0]=0;for(let a=1;a<=i;a++)o=o+r[a-1]<<1,n[a]=o;const h=new Map;for(let a=0;a<c.length;a++){const u=c[a];if(!u)continue;const f=n[u]++;let d=h.get(u);d||(d=[],h.set(u,d)),d[It(f,u)]=a}return{min:t,max:i,table:h}}function tt(c,t){let i=0;for(let r=1;r<=t.max;r++){i|=c.readBits(1)<<r-1;const n=t.table.get(r);if(n&&i<n.length){const o=n[i];if(o!==void 0)return o}}throw Error("Invalid Huffman code")}function It(c,t){let i=0;for(let r=0;r<t;r++)i=i<<1|1&c,c>>>=1;return i>>>0}function _t(c){if(c.length<2)throw Error("ZLIB data too short");const t=c[0],i=c[1];if((15&t)!=8)throw Error("Unsupported ZLIB compression method");if(((t<<8)+i)%31!=0)throw Error("Bad ZLIB header check");let r=2;32&i&&(r+=4);const n=[];return function(o,h){const a=[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=o.readBits(1);const m=o.readBits(2);if(m===0){o.alignToByte();const x=o.readBits(16);if((65535&(65535^x))!==o.readBits(16))throw Error("DEFLATE uncompressed LEN/NLEN mismatch");for(let A=0;A<x;A++)h.push(o.readBits(8))}else{if(m!==1&&m!==2)throw Error("Unsupported DEFLATE type");{let x,A;if(m===1){const p=Array(288).fill(0);for(let E=0;E<=143;E++)p[E]=8;for(let E=144;E<=255;E++)p[E]=9;for(let E=256;E<=279;E++)p[E]=7;for(let E=280;E<=287;E++)p[E]=8;x=H(p),A=H(Array(32).fill(5))}else{const p=o.readBits(5)+257,E=o.readBits(5)+1,v=o.readBits(4)+4,w=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],y=Array(19).fill(0);for(let S=0;S<v;S++)y[w[S]]=o.readBits(3);const L=H(y),F=[];for(;F.length<p+E;){const S=tt(o,L);if(S<=15)F.push(S);else if(S===16){const k=o.readBits(2)+3,N=F[F.length-1]||0;for(let mt=0;mt<k;mt++)F.push(N)}else if(S===17){const k=o.readBits(3)+3;for(let N=0;N<k;N++)F.push(0)}else{if(S!==18)throw Error("Invalid code length symbol");{const k=o.readBits(7)+11;for(let N=0;N<k;N++)F.push(0)}}}const B=F.slice(0,p),P=F.slice(p,p+E);x=H(B),A=H(P)}for(;;){const p=tt(o,x);if(p<256)h.push(p);else{if(p===256)break;if(p>256&&p<286){const E=p-257;let v=a[E];const w=u[E];w&&(v+=o.readBits(w));const y=tt(o,A);if(y>=30)throw Error("Invalid distance symbol");let L=f[y];const F=d[y];F&&(L+=o.readBits(F));const B=h.length-L;if(B<0)throw Error("Invalid distance");for(let P=0;P<v;P++)h.push(h[B+P]||0)}else if(p===286||p===287)throw Error("Reserved length symbol")}}}}}}(new Ot(c.subarray(r)),n),new Uint8Array(n)}function Nt(c){const t=T,i=new Uint8Array(c);if(t.readASCII(i,0,4)!=="wOFF")throw Error("Invalid WOFF signature");const r=t.readUint(i,4),n=t.readUshort(i,12),o=t.readUint(i,16),h=[];let a=44;for(let v=0;v<n;v++){const w=t.readASCII(i,a,4),y=t.readUint(i,a+4),L=t.readUint(i,a+8),F=t.readUint(i,a+12),B=t.readUint(i,a+16);h.push({tag:w,offset:y,compLength:L,origLength:F,checksum:B}),a+=20}for(const v of h){const w=new Uint8Array(i.buffer,v.offset,v.compLength);if(v.compLength===v.origLength)v.data=new Uint8Array(w);else if(v.data=_t(w),v.data.length!==v.origLength)if(v.data.length<v.origLength){const y=new Uint8Array(v.origLength);y.set(v.data),v.data=y}else v.data=v.data.subarray(0,v.origLength)}const u=n;let f=1,d=0;for(;f<<1<=u;)f<<=1,d++;const g=16*f,m=16*u-g;let x=12+16*u;const A={};for(const v of h)A[v.tag]=x,x=Z(x+v.data.length);const p=new Uint8Array(Math.max(o||0,x));t.writeUint(p,0,r),t.writeUshort(p,4,u),t.writeUshort(p,6,g),t.writeUshort(p,8,d),t.writeUshort(p,10,m);let E=12;for(const v of h){t.writeASCII(p,E,v.tag),E+=4;let w=v.data;if(v.tag==="head"&&w.length>=12){const y=new Uint8Array(w);t.writeUint(y,8,0);const L=Q(y,0,Z(y.length));t.writeUint(p,E,L),E+=4}else{const y=Q(w,0,Z(w.length));t.writeUint(p,E,y),E+=4}t.writeUint(p,E,A[v.tag]),E+=4,t.writeUint(p,E,v.data.length),E+=4}for(const v of h){const w=A[v.tag];p.set(v.data,w)}if(h.find(v=>v.tag==="head")){const v=A.head,w=function(y,L){const F=T,B=L+8,P=[y[B],y[B+1],y[B+2],y[B+3]];F.writeUint(y,B,0);const S=2981146554-(Q(y,0,Z(y.length))>>>0)>>>0;return y[B]=P[0],y[B+1]=P[1],y[B+2]=P[2],y[B+3]=P[3],S>>>0}(p,v);t.writeUint(p,v+8,w)}return p.buffer}const Gt={parseTab(c,t,i){const r={tables:[],ids:{},off:t};c=new Uint8Array(c.buffer,t,i),t=0;const n=T,o=n.readUshort,h=o(c,t+=2);t+=2;const a=[];for(let u=0;u<h;u++){const f=o(c,t),d=o(c,t+=2);t+=2;const g=n.readUint(c,t);t+=4;const m=`p${f}e${d}`;let x=a.indexOf(g);if(x===-1){let A;x=r.tables.length,a.push(g);const p=o(c,g);A=p===4?this.parse4(c,g):p===12?this.parse12(c,g):{format:p},r.tables.push(A)}r.ids[m]=x}return r},parse4(c,t){const i=T,r=i.readUshort,n=i.readUshorts,o=t,h=r(c,t+=2);t+=2;const a=r(c,t+=2)>>>1,u={format:4,searchRange:r(c,t+=2),entrySelector:0,rangeShift:0,endCount:[],startCount:[],idDelta:[],idRangeOffset:[],glyphIdArray:[]};t+=2,u.entrySelector=r(c,t),t+=2,u.rangeShift=r(c,t),t+=2,u.endCount=n(c,t,a),t+=2*a,t+=2,u.startCount=n(c,t,a),t+=2*a;for(let f=0;f<a;f++)u.idDelta.push(i.readShort(c,t)),t+=2;return u.idRangeOffset=n(c,t,a),t+=2*a,u.glyphIdArray=n(c,t,o+h-t>>1),u},parse12(c,t){const i=T.readUint;i(c,t+=4),i(c,t+=4);const r=i(c,t+=4);t+=4;const n=new Uint32Array(3*r);for(let o=0;o<3*r;o+=3)n[o]=i(c,t+(o<<2)),n[o+1]=i(c,t+(o<<2)+4),n[o+2]=i(c,t+(o<<2)+8);return{format:12,groups:n}}},zt={parseTab(c,t,i){const r=T;t+=18;const n=r.readUshort(c,t);t+=2,t+=16;const o=r.readShort(c,t);t+=2;const h=r.readShort(c,t);t+=2;const a=r.readShort(c,t);t+=2;const u=r.readShort(c,t);return t+=2,t+=6,{unitsPerEm:n,xMin:o,yMin:h,xMax:a,yMax:u,indexToLocFormat:r.readShort(c,t)}}},Wt={parseTab(c,t,i){const r=T;t+=4;const n=["ascender","descender","lineGap","advanceWidthMax","minLeftSideBearing","minRightSideBearing","xMaxExtent","caretSlopeRise","caretSlopeRun","caretOffset","res0","res1","res2","res3","metricDataFormat","numberOfHMetrics"],o={};for(let h=0;h<n.length;h++){const a=n[h],u=a==="advanceWidthMax"||a==="numberOfHMetrics"?r.readUshort:r.readShort;o[a]=u(c,t+2*h)}return o}},Xt={parseTab(c,t,i,r){const n=T,o=[],h=[],a=r.maxp.numGlyphs,u=r.hhea.numberOfHMetrics;let f=0,d=0,g=0;for(;g<u;)f=n.readUshort(c,t+(g<<2)),d=n.readShort(c,t+(g<<2)+2),o.push(f),h.push(d),g++;for(;g<a;)o.push(f),h.push(d),g++;return{aWidth:o,lsBearing:h}}},at={cmap:Gt,head:zt,hhea:Wt,maxp:{parseTab(c,t,i){const r=T;return r.readUint(c,t),t+=4,{numGlyphs:r.readUshort(c,t)}}},hmtx:Xt,loca:{parseTab(c,t,i,r){const n=T,o=[],h=r.head.indexToLocFormat,a=r.maxp.numGlyphs+1;if(h===0)for(let u=0;u<a;u++)o.push(n.readUshort(c,t+(u<<1))<<1);else if(h===1)for(let u=0;u<a;u++)o.push(n.readUint(c,t+(u<<2)));return o}},glyf:{parseTab(c,t,i,r){const n=[],o=r.maxp.numGlyphs;for(let h=0;h<o;h++)n.push(null);return n},Js(c,t){const i=T,r=c.ti,n=c.loca;if(n[t]===n[t+1])return null;const o=D.findTable(r,"glyf",c.ei);if(!o)return null;let h=o[0]+n[t];const a={};if(a.noc=i.readShort(r,h),h+=2,a.xMin=i.readShort(r,h),h+=2,a.yMin=i.readShort(r,h),h+=2,a.xMax=i.readShort(r,h),h+=2,a.yMax=i.readShort(r,h),h+=2,a.xMin>=a.xMax||a.yMin>=a.yMax)return null;if(a.noc>0){a.endPts=[];for(let m=0;m<a.noc;m++)a.endPts.push(i.readUshort(r,h)),h+=2;const u=i.readUshort(r,h);if(h+=2,r.length-h<u)return null;h+=u;const f=a.endPts[a.noc-1]+1;a.flags=[];for(let m=0;m<f;m++){const x=r[h];if(h++,a.flags.push(x),8&x){const A=r[h];h++;for(let p=0;p<A;p++)a.flags.push(x),m++}}a.xs=[];for(let m=0;m<f;m++){const x=a.flags[m],A=!!(16&x);2&x?(a.xs.push(A?r[h]:-r[h]),h++):A?a.xs.push(0):(a.xs.push(i.readShort(r,h)),h+=2)}a.ys=[];for(let m=0;m<f;m++){const x=a.flags[m],A=!!(32&x);4&x?(a.ys.push(A?r[h]:-r[h]),h++):A?a.ys.push(0):(a.ys.push(i.readShort(r,h)),h+=2)}let d=0,g=0;for(let m=0;m<f;m++)d+=a.xs[m],g+=a.ys[m],a.xs[m]=d,a.ys[m]=g}else a.parts=[],a.endPts=[],a.flags=[],a.xs=[],a.ys=[];return a}}},D={parse(c){const t=new Uint8Array(c),i=T.readASCII(t,0,4);if(i==="wOFF")c=Nt(c);else if(i==="wOF2")throw Error("WOFF2 is not supported in this build (Brotli + WOFF2 transforms required)");return[((r,n,o,h)=>{const a=at,u={ti:r,si:n,ei:o};for(const f in a){const d=f,g=D.findTable(r,d,o);if(g){const[m,x]=g;let A=h[m];A==null&&(A=a[d].parseTab(r,m,x,u),h[m]=A),u[d]=A}}return u})(new Uint8Array(c),0,0,{})]},findTable(c,t,i){const r=T,n=r.readUshort(c,i+4);let o=i+12;for(let h=0;h<n;h++){const a=r.readASCII(c,o,4);r.readUint(c,o+4);const u=r.readUint(c,o+8),f=r.readUint(c,o+12);if(a===t)return[u,f];o+=16}return null},T:at,B:T};class Ht{ii(t){var r;const i=[];return(r=t.cmap)!=null&&r.tables?(t.cmap.tables.forEach(n=>{if(n.format===4){const o=this.ri(n);i.push(...o)}else if(n.format===12){const o=this.ni(n);i.push(...o)}}),[...new Set(i)]):[]}oi(t){return t.filter(i=>this.ai(i))}ri(t){const i=[];if(!(t.startCount&&t.endCount&&t.idRangeOffset&&t.idDelta))return i;for(let r=0;r<t.startCount.length;r++){const n=t.startCount[r],o=t.endCount[r];if(n!==65535||o!==65535){for(let h=n;h<=o;h++)if(this.hi(t,h,r)>0)try{const a=String.fromCodePoint(h);i.push(a)}catch{}}}return i}ni(t){const i=[];if(!t.groups)return i;for(let r=0;r<t.groups.length;r+=3){const n=t.groups[r],o=t.groups[r+1],h=t.groups[r+2];for(let a=n;a<=o;a++)if(h+(a-n)>0)try{const u=String.fromCodePoint(a);i.push(u)}catch{}}return i}hi(t,i,r){if(t.idRangeOffset[r]===0)return i+t.idDelta[r]&65535;{const n=t.idRangeOffset[r]/2+(i-t.startCount[r])-(t.startCount.length-r);if(n>=0&&t.glyphIdArray&&n<t.glyphIdArray.length){const o=t.glyphIdArray[n];if(o!==0)return o+t.idDelta[r]&65535}}return 0}ai(t){const i=t.codePointAt(0)||0;return!(i>=0&&i<=31&&i!==9&&i!==10&&i!==13||i>=127&&i<=159)}}class et{constructor(){l(this,"ci",new Map);l(this,"li",new Map)}ui(t,i){const r=`${this.fi(t)}_${i}`;if(this.ci.has(r))return this.ci.get(r);const n=t.cmap;if(!n||!n.tables)return this.ci.set(r,0),0;let o=0;for(const h of n.tables)if(h.format===4?o=this.di(i,h):h.format===12&&(o=this.pi(i,h)),o>0)break;return this.ci.set(r,o),o}mi(t,i){const r=i.codePointAt(0);return r===void 0?0:this.ui(t,r)}gi(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}_i(t,i){const r=i/t.head.unitsPerEm,n=t.hhea.ascender*r,o=t.hhea.descender*r,h=t.hhea.lineGap*r;return{ascender:n,descender:o,lineGap:h,lineHeight:n-o+h,unitsPerEm:t.head.unitsPerEm,scale:r}}yi(){this.ci.clear(),this.li.clear()}fi(t){return`${t.ei}_${t.ti.length}`}di(t,i){const r=i.endCount.length;let n=-1;for(let o=0;o<r;o++)if(t<=i.endCount[o]){n=o;break}if(n===-1||t<i.startCount[n])return 0;if(i.idRangeOffset[n]===0)return t+i.idDelta[n]&65535;{const o=i.idRangeOffset[n]/2+(t-i.startCount[n])-(r-n);if(o>=0&&o<i.glyphIdArray.length){const h=i.glyphIdArray[o];return h===0?0:h+i.idDelta[n]&65535}}return 0}pi(t,i){const r=i.groups.length/3;for(let n=0;n<r;n++){const o=i.groups[3*n],h=i.groups[3*n+1],a=i.groups[3*n+2];if(t>=o&&t<=h)return a+(t-o)}return 0}}class kt{constructor(t){l(this,"Ai");l(this,"wi");l(this,"xt");l(this,"Ci");this.xt=t,this.Ci=new et,this.Ai=document.createElement("canvas"),this.wi=this.Ai.getContext("2d",{willReadFrequently:!0,alpha:!1})}createTextureAtlas(t,i,r,n){const o=t.length,h=Math.ceil(Math.sqrt(o)),a=Math.ceil(o/h),u=i.width*h,f=i.height*a,d=typeof n=="object"?n:null;this.bi(u,f),this.xi(t,i,h,r,d);const g=this.xt.Ys(u,f,1,{filter:"nearest"});return g.zt(this.Ai),{framebuffer:g,columns:h,rows:a}}bi(t,i){this.Ai.width=t,this.Ai.height=i,this.Ai.style.width=t+"px",this.Ai.style.height=t+"px",this.wi.imageSmoothingEnabled=!1,this.Ai.style.imageRendering="pixelated",this.wi.fillStyle="black",this.wi.fillRect(0,0,t,i),this.wi.textBaseline="top",this.wi.textAlign="left",this.wi.fillStyle="white"}xi(t,i,r,n,o){const h=n/o.head.unitsPerEm;for(let a=0;a<t.length;a++){const u=a%r,f=Math.floor(a/r),d=t[a].character,g=this.$i(o,d);if(!g)continue;const m=d.codePointAt(0)||0,x=this.Ci.ui(o,m),A=this.Mi(o,x)*h,p=u*i.width,E=f*i.height,v=p+.5*i.width,w=E+.5*i.height,y=Math.round(v-.5*i.width),L=Math.round(w-.5*n),F=y+.5*(i.width-A),B=L+o.hhea.ascender*h;this.Fi(g,F,B,h)}}$i(t,i){const r=i.codePointAt(0)||0,n=this.Ci.ui(t,r);if(n===0)return null;if(t.glyf&&t.glyf[n]!==null)return t.glyf[n];if(D&&D.T&&D.T.glyf){const o=D.T.glyf.Js(t,n);return t.glyf&&o&&(t.glyf[n]=o),o}return null}Mi(t,i){const r=t.hmtx;return r&&r.aWidth?i<r.aWidth.length?r.aWidth[i]:r.aWidth[r.aWidth.length-1]:0}Fi(t,i,r,n){if(!t||!t.xs||t.noc===0)return;const{xs:o,ys:h,endPts:a,flags:u}=t;if(!(o&&h&&a&&u))return;this.wi.beginPath();let f=0;for(let d=0;d<a.length;d++){const g=a[d];if(!(g<f)){if(g>=f){const m=i+o[f]*n,x=r-h[f]*n;this.wi.moveTo(m,x);let A=f+1;for(;A<=g;)if(1&u[A]){const p=i+o[A]*n,E=r-h[A]*n;this.wi.lineTo(p,E),A++}else{const p=i+o[A]*n,E=r-h[A]*n;let v=A+1>g?f:A+1;if(1&u[v]){const w=i+o[v]*n,y=r-h[v]*n;this.wi.quadraticCurveTo(p,E,w,y),A=v+1}else{const w=(p+(i+o[v]*n))/2,y=(E+(r-h[v]*n))/2;this.wi.quadraticCurveTo(p,E,w,y),A=v}}this.wi.closePath()}f=g+1}}this.wi.fill()}}class Yt{constructor(){l(this,"Ri");this.Ri=new et}zi(t,i,r){let n=0;const o=this.Ri._i(r,i),h=o.lineHeight;for(const a of t){const u=this.Ri.mi(r,a);if(u===0)continue;const f=this.Ri.gi(r,u)*o.scale;n=Math.max(n,f)}return{width:Math.ceil(n),height:Math.ceil(h)}}yi(){this.Ri.yi()}}class Vt{constructor(){l(this,"Ci");this.Ci=new et}createCharacterObjects(t,i){return t.map((r,n)=>{const o=r.codePointAt(0)||0,h=this.Pi(n);let a=0;if(i.hmtx&&i.hmtx.aWidth){const u=this.Ci.ui(i,o);u>0&&i.hmtx.aWidth[u]!==void 0&&(a=i.hmtx.aWidth[u])}return{character:r,unicode:o,color:h,advanceWidth:a}})}Pi(t){return[t%256/255,Math.floor(t/256)%256/255,Math.floor(t/65536)%256/255]}Ti(t,i){if(!X.v(typeof t=="string","Character must be a string.",{method:"getCharacterColor",providedValue:t}))return[0,0,0];const r=i.find(n=>n.character===t);return r?r.color:[0,0,0]}Si(t,i){return X.v(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.Ti(r,i)||[0,0,0]):[[0,0,0]]}}class ct{constructor(t,i=16){l(this,"Ei");l(this,"Bi",[]);l(this,"Gi");l(this,"Di",16);l(this,"Li",0);l(this,"Oi",0);l(this,"ki",{width:0,height:0});l(this,"Hi");l(this,"Ii");l(this,"Ni");l(this,"Xi");l(this,"Wi");this.Di=i,this.Ii=new Ht,this.Ni=new kt(t),this.Xi=new Yt,this.Wi=new Vt}async Vi(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.Ki(i),this.Ei=D.parse(i)[0],await this.ji()}Yi(t){if(t===void 0)return this.Di;this.Di=t,this.ki=this.Xi.zi(this.Bi.map(r=>r.character),this.Di,this.Ei);const i=this.Ni.createTextureAtlas(this.Bi,this.ki,this.Di,this.Ei);this.Gi=i.framebuffer,this.Li=i.columns,this.Oi=i.rows}async qi(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.Ki(r);const n=D.parse(r);if(!n||n.length===0)throw Error("Failed to parse font file");this.Ei=n[0],await this.ji()}catch(i){throw new R("Failed to load font: "+(i instanceof Error?i.message:"Unknown error"),i)}}async Ki(t){const i=Date.now();this.Hi=new FontFace("CustomFont_"+i,t),await this.Hi.load(),document.fonts.add(this.Hi)}async ji(){const t=this.Ii.ii(this.Ei),i=this.Ii.oi(t);this.Bi=this.Wi.createCharacterObjects(i,this.Ei),this.ki=this.Xi.zi(i,this.Di,this.Ei);const r=this.Ni.createTextureAtlas(this.Bi,this.ki,this.Di,this.Ei);this.Gi=r.framebuffer,this.Li=r.columns,this.Oi=r.rows}Ti(t){return this.Wi.Ti(t,this.Bi)}Si(t){return this.Wi.Si(t,this.Bi)}Gt(){this.Gi.Gt(),document.fonts.delete(this.Hi)}get fontFramebuffer(){return this.Gi}get characters(){return this.Bi}get textureColumns(){return this.Li}get textureRows(){return this.Oi}get maxGlyphDimensions(){return this.ki}get fontSize(){return this.Di}get font(){return this.Ei}}class lt{constructor(t,i,r){l(this,"Zi");l(this,"Qi");l(this,"dt");l(this,"gt");l(this,"Ji");l(this,"tr");l(this,"er");l(this,"sr");l(this,"ir");this.er=t,this.sr=i,this.ir=r,this.rr()}rr(){this.Zi=Math.floor(this.er.width/this.sr),this.Qi=Math.floor(this.er.height/this.ir),this.dt=this.Zi*this.sr,this.gt=this.Qi*this.ir,this.Ji=Math.floor((this.er.width-this.dt)/2),this.tr=Math.floor((this.er.height-this.gt)/2)}nr(t,i){this.sr=t,this.ir=i,this.rr()}get cellWidth(){return this.sr}get cellHeight(){return this.ir}get cols(){return this.Zi}get rows(){return this.Qi}get width(){return this.dt}get height(){return this.gt}get offsetX(){return this.Ji}get offsetY(){return this.tr}}class ut{constructor(t={}){l(this,"er");l(this,"ar",null);l(this,"hr",!1);l(this,"cr");l(this,"lr");this.hr=t.overlay??!1,this.hr&&t.canvas?(this.ar=t.canvas,this.er=this.ur(),this.lr=!0,this.dr()):t.canvas?(this.er=t.canvas,this.lr=!1):(this.er=this.pr(t.width,t.height),this.lr=!0),this.er.style.imageRendering="pixelated"}pr(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}ur(){const t=document.createElement("canvas");t.className="textmodeCanvas",t.style.imageRendering="pixelated";const i=this.ar.getBoundingClientRect();let r=Math.round(i.width),n=Math.round(i.height);if(this.ar instanceof HTMLVideoElement){const a=this.ar;(r===0||n===0)&&a.videoWidth>0&&a.videoHeight>0&&(r=a.videoWidth,n=a.videoHeight)}t.width=r,t.height=n,t.style.position="absolute",t.style.pointerEvents="none";const o=window.getComputedStyle(this.ar);let h=parseInt(o.zIndex||"0",10);return isNaN(h)&&(h=0),t.style.zIndex=""+(h+1),t}dr(){var t;this.mr(),(t=this.ar.parentNode)==null||t.insertBefore(this.er,this.ar.nextSibling),window.ResizeObserver&&(this.cr=new ResizeObserver(()=>{this.gr()}),this.cr.observe(this.ar)),window.addEventListener("resize",()=>{this.gr()})}mr(){if(!this.ar)return;const t=this.ar.getBoundingClientRect();let i=this.ar.offsetParent;if(i&&i!==document.body){const r=i.getBoundingClientRect();this.er.style.top=t.top-r.top+"px",this.er.style.left=t.left-r.left+"px"}else this.er.style.top=t.top+window.scrollY+"px",this.er.style.left=t.left+window.scrollX+"px"}gr(t,i){if(this.hr){const r=this.ar.getBoundingClientRect();let n=Math.round(r.width),o=Math.round(r.height);if(this.ar instanceof HTMLVideoElement){const h=this.ar;(n===0||o===0)&&h.videoWidth>0&&h.videoHeight>0&&(n=h.videoWidth,o=h.videoHeight)}this.er.width=n,this.er.height=o,this.mr()}else this.er.width=t??this.er.width,this.er.height=i??this.er.height}_r(){const t=this.er.getContext("webgl2",{alpha:!0,premultipliedAlpha:!1,preserveDrawingBuffer:!0,antialias:!1,depth:!1,stencil:!1,powerPreference:"high-performance"});if(!t)throw new R("`textmode.js` requires WebGL2 support.");return t}Gt(){this.cr&&this.cr.disconnect();const t=this.er.getContext("webgl")||this.er.getContext("webgl2");if(t){const i=t.getExtension("WEBGL_lose_context");i&&i.loseContext()}this.lr&&this.er.parentNode&&this.er.parentNode.removeChild(this.er)}get canvas(){return this.er}get targetCanvas(){return this.ar}get width(){return this.er.width}get height(){return this.er.height}}class W{constructor(t,i,r,n){l(this,"vr");l(this,"dt");l(this,"gt");l(this,"vt");l(this,"D",0);l(this,"V",0);l(this,"K",0);l(this,"L",[0,0]);l(this,"yr","sampled");l(this,"Ar","fixed");l(this,"Y",[1,1,1]);l(this,"q",[0,0,0]);l(this,"wr",[0,0,0,1]);l(this,"Cr",[[.1,0,0]]);l(this,"br");this.vt=t,this.vr=i,this.dt=r,this.gt=n}Gt(){this.vt.deleteTexture(this.vr)}$r(t){return typeof t=="boolean"?t?1:0:(t==null?0:Number(t))>0?1:0}invert(t=!0){return this.D=this.$r(t),this}flipX(t=!0){return this.V=this.$r(t),this}flipY(t=!0){return this.K=this.$r(t),this}charRotation(t){const i=255*t/360,r=Math.floor(i)/255,n=Math.round(i-Math.floor(i));return this.L=[r,n],this}Is(){return{texture:this.vr,invert:this.D,flipX:this.V,flipY:this.K,charRotation:this.L,charColorFixed:this.yr==="fixed",charColor:this.Y,cellColorFixed:this.Ar==="fixed",cellColor:this.q,backgroundColor:this.wr,charCount:this.Cr.length,charList:this.Cr}}charColorMode(t){return this.yr=t,this}cellColorMode(t){return this.Ar=t,this}charColor(t,i,r){return this.Y=[(t??0)/255,(i??t??0)/255,(r??t??0)/255],this}cellColor(t,i,r){return this.q=[(t??0)/255,(i??t??0)/255,(r??t??0)/255],this}background(t,i,r,n){return this.wr=[(t??0)/255,(i??t??0)/255,(r??t??0)/255,(n??255)/255],this}characters(t){const i=this.br(t).filter(r=>Array.isArray(r)).slice(0,64);return this.Cr=i,this}static Mr(t,i,r){const n=t.context,o=n.createTexture();n.bindTexture(n.TEXTURE_2D,o),n.pixelStorei(n.UNPACK_FLIP_Y_WEBGL,1),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MIN_FILTER,n.NEAREST),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MAG_FILTER,n.NEAREST),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_S,n.CLAMP_TO_EDGE),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_T,n.CLAMP_TO_EDGE),n.texImage2D(n.TEXTURE_2D,0,n.RGBA,n.RGBA,n.UNSIGNED_BYTE,i),n.bindTexture(n.TEXTURE_2D,null);const h=i.naturalWidth??i.width??i.videoWidth??0,a=i.naturalHeight??i.height??i.videoHeight??0,u=new W(n,o,h,a);return u.br=r,u}get texture(){return this.vr}get width(){return this.dt}get height(){return this.gt}}class jt{constructor(t=60){l(this,"Fr");l(this,"Rr");l(this,"zr",null);l(this,"Pr",0);l(this,"Tr",!0);l(this,"Sr",0);l(this,"Er",0);l(this,"Br",[]);l(this,"Gr",10);l(this,"Dr",0);this.Fr=t,this.Rr=1e3/t}start(t){if(!this.Tr)return;this.Pr=performance.now();const i=r=>{if(!this.Tr)return void(this.zr=null);const n=r-this.Pr;n>=this.Rr&&(t(),this.Pr=r-n%this.Rr),this.Tr&&(this.zr=requestAnimationFrame(i))};this.zr=requestAnimationFrame(i)}stop(){this.zr&&(cancelAnimationFrame(this.zr),this.zr=null)}pause(){this.Tr&&(this.Tr=!1,this.stop())}resume(t){this.Tr||(this.Tr=!0,this.start(t))}frameRate(t,i){if(t===void 0)return this.Sr;this.Fr=t,this.Rr=1e3/t,this.Tr&&i&&(this.stop(),this.start(i))}measureFrameRate(){const t=performance.now();if(this.Er>0){const i=t-this.Er;this.Br.push(i),this.Br.length>this.Gr&&this.Br.shift();const r=this.Br.reduce((n,o)=>n+o,0)/this.Br.length;this.Sr=1e3/r}this.Er=t}get isLooping(){return this.Tr}get frameRateLimit(){return this.Fr}get currentFrameRate(){return this.Sr}get frameCount(){return this.Dr}set frameCount(t){this.Dr=t}incrementFrame(){this.Dr++}resetFrameCount(){this.Dr=0}}class Kt{constructor(){l(this,"Lr",new Map);l(this,"Or",null);l(this,"kr",null);l(this,"Hr");l(this,"Ir");l(this,"Nr",!1);l(this,"Xr");l(this,"Wr");l(this,"Vr",{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"})}Kr(){this.Nr||(this.Hr=t=>{this.jr(t)},this.Ir=t=>{this.Yr(t)},window.addEventListener("keydown",this.Hr,{passive:!1}),window.addEventListener("keyup",this.Ir,{passive:!1}),this.Nr=!0)}qr(){this.Nr&&(window.removeEventListener("keydown",this.Hr),window.removeEventListener("keyup",this.Ir),this.Nr=!1,this.Lr.clear(),this.Or=null,this.kr=null)}Zr(t){this.Xr=t}Qr(t){this.Wr=t}Jr(t){const i=this.tn(t),r=this.Lr.get(t)||this.Lr.get(i);return(r==null?void 0:r.isPressed)||!1}en(){return this.Or}sn(){return this.kr}rn(){const t=[];for(const[i,r]of this.Lr)r.isPressed&&t.push(i);return t}nn(){return{ctrl:this.Jr("Control"),shift:this.Jr("Shift"),alt:this.Jr("Alt"),meta:this.Jr("Meta")}}an(){this.Lr.clear(),this.Or=null,this.kr=null}jr(t){const i=t.key,r=Date.now();this.Lr.has(i)||this.Lr.set(i,{isPressed:!1,lastPressTime:0,lastReleaseTime:0});const n=this.Lr.get(i);if(!n.isPressed&&(n.isPressed=!0,n.lastPressTime=r,this.Or=i,this.Xr)){const o={key:i,keyCode:t.keyCode,ctrlKey:t.ctrlKey,shiftKey:t.shiftKey,altKey:t.altKey,metaKey:t.metaKey,isPressed:!0,originalEvent:t};this.Xr(o)}}Yr(t){const i=t.key,r=Date.now();this.Lr.has(i)||this.Lr.set(i,{isPressed:!1,lastPressTime:0,lastReleaseTime:0});const n=this.Lr.get(i);if(n.isPressed=!1,n.lastReleaseTime=r,this.kr=i,this.Wr){const o={key:i,keyCode:t.keyCode,ctrlKey:t.ctrlKey,shiftKey:t.shiftKey,altKey:t.altKey,metaKey:t.metaKey,isPressed:!1,originalEvent:t};this.Wr(o)}}tn(t){return this.Vr[t]||t.toLowerCase()}}class qt{constructor(t){l(this,"er");l(this,"hn");l(this,"cn",{x:-1,y:-1});l(this,"ln",{x:-1,y:-1});l(this,"un",null);l(this,"fn");l(this,"dn");l(this,"pn");l(this,"mn");l(this,"gn");l(this,"_n");l(this,"Nr",!1);l(this,"vn");l(this,"yn");l(this,"An");l(this,"wn");l(this,"Cn");this.er=t}Vi(t){this.hn=t,this.bn()}Kr(){if(this.Nr)return;const t=this.er.canvas;this.fn=i=>{this.xn(i),this.$n(i)},this.dn=()=>{this.ln={...this.cn},this.cn.x=-1,this.cn.y=-1,this.un=null},this.pn=i=>{this.xn(i),this.Mn(i)},this.mn=i=>{this.xn(i),this.Fn(i)},this.gn=i=>{this.xn(i),this.Rn(i)},this._n=i=>{this.xn(i),this.zn(i)},t.addEventListener("mousemove",this.fn,{passive:!0}),t.addEventListener("mouseleave",this.dn,{passive:!0}),t.addEventListener("mousedown",this.pn,{passive:!0}),t.addEventListener("mouseup",this.mn,{passive:!0}),t.addEventListener("click",this.gn,{passive:!0}),t.addEventListener("wheel",this._n,{passive:!1}),this.Nr=!0}qr(){if(!this.Nr)return;const t=this.er.canvas;t.removeEventListener("mousemove",this.fn),t.removeEventListener("mouseleave",this.dn),t.removeEventListener("mousedown",this.pn),t.removeEventListener("mouseup",this.mn),t.removeEventListener("click",this.gn),t.removeEventListener("wheel",this._n),this.Nr=!1}bn(){if(this.Nr)try{if(this.un){const t=new MouseEvent("mousemove",{clientX:this.un.x,clientY:this.un.y,bubbles:!1,cancelable:!1});this.xn(t)}else this.cn.x!==-1&&this.cn.y!==-1&&(this.cn.x>=this.hn.cols||this.cn.y>=this.hn.rows)&&(this.cn.x=-1,this.cn.y=-1)}catch{this.cn.x=-1,this.cn.y=-1}}Pn(t){this.vn=t}Zr(t){this.yn=t}Qr(t){this.An=t}Tn(t){this.wn=t}Sn(t){this.Cn=t}En(){return{x:this.cn.x,y:this.cn.y}}$n(t){if(this.wn){const i={position:{...this.cn},previousPosition:{...this.ln},originalEvent:t};this.wn(i)}}Mn(t){if(this.yn){const i={position:{...this.cn},previousPosition:{...this.ln},button:t.button,originalEvent:t};this.yn(i)}}Fn(t){if(this.An){const i={position:{...this.cn},previousPosition:{...this.ln},button:t.button,originalEvent:t};this.An(i)}}Rn(t){if(this.vn){const i={position:{...this.cn},previousPosition:{...this.ln},button:t.button,originalEvent:t};this.vn(i)}}zn(t){if(this.Cn){const i={position:{...this.cn},previousPosition:{...this.ln},delta:{x:t.deltaX,y:t.deltaY},originalEvent:t};this.Cn(i)}}xn(t){const i=this.er.canvas;this.ln={...this.cn},this.un={x:t.clientX,y:t.clientY};const r=i.getBoundingClientRect(),n=t.clientX-r.left,o=t.clientY-r.top,h=i.width/r.width,a=o*(i.height/r.height),u=n*h-this.hn.offsetX,f=a-this.hn.offsetY,d=Math.floor(u/this.hn.cellWidth),g=Math.floor(f/this.hn.cellHeight);d>=0&&d<this.hn.cols&&g>=0&&g<this.hn.rows?(this.cn.x=d,this.cn.y=g):(this.cn.x=-1,this.cn.y=-1)}}const Zt=c=>class extends c{rotate(t=0,i=0,r=0){this.xt.state.et(t),this.xt.state.st(i),this.xt.state.it(r)}rotateX(t){this.xt.state.et(t)}rotateY(t){this.xt.state.st(t)}rotateZ(t){this.xt.state.it(t)}push(){this.xt.state.H()}pop(){this.xt.state.Z()}rect(t,i,r=1,n=1){this.xt.Xs(t,i,r,n)}point(t,i){this.xt.Xs(t,i,1,1)}line(t,i,r,n){this.xt.Ws(t,i,r,n)}lineWeight(t){this.xt.state.tt(t)}background(t,i=t,r=t,n=255){this.xt.Zs(t,i,r,n)}char(t){this.xt.state.rt(this.Ei.Ti(t))}charColor(t,i,r){this.xt.state.nt(t,i,r)}cellColor(t,i,r){this.xt.state.ot(t,i,r)}flipX(t){this.xt.state.ht(t)}flipY(t){this.xt.state.ct(t)}charRotation(t){this.xt.state.ut(t)}invert(t){this.xt.state.lt(t)}clear(){this.xt.Zs(0,0,0,0)}ellipse(t,i,r,n){this.xt.Vs(t,i,r/2,n/2)}triangle(t,i,r,n,o,h){this.xt.Ks(t,i,r,n,o,h)}bezierCurve(t,i,r,n,o,h,a,u){this.xt.js(t,i,r,n,o,h,a,u)}arc(t,i,r,n,o,h){this.xt.qs(t,i,r,n,o,h)}shader(t){this.xt.Ls(t)}setUniform(t,i){this.xt.Kt(t,i)}setUniforms(t){this.xt.Os(t)}createFilterShader(t){return this.xt.oe(t)}createFramebuffer(t){return this.xt.Ys(t.width,t.height,5,{filter:"nearest",wrap:"clamp",format:"rgba",type:"unsigned_byte"})}image(t,i,r,n,o){if(t.textures){const h=t;this.xt.ks(h,i,r,n??h.width,o??h.height)}else{const h=t;this.xt.Hs(h,i,r,n??Math.floor(this.hn.cols/2),o??Math.floor(this.hn.rows/2))}}async loadImage(t){if(typeof t!="string")return W.Mr(this.xt,t,n=>this.Ei.Si(n));const i=t,r=await new Promise((n,o)=>{const h=new Image;h.crossOrigin="anonymous",h.onload=()=>n(h),h.onerror=a=>o(a),h.src=i});return W.Mr(this.xt,r,n=>this.Ei.Si(n))}};class it{Bn(t){const i=t.Pt(0),r=t.Pt(1),n=t.Pt(2),o=t.Pt(3);return{characterPixels:i,primaryColorPixels:r,secondaryColorPixels:n,transformPixels:t.Pt(4),rotationPixels:o}}Gn(t,i){return t[i]+(t[i+1]<<8)}Dn(t,i){return{r:t[i],g:t[i+1],b:t[i+2],a:t[i+3]}}}class st{Ln(t,i){return new Blob([t],{type:i})}On(t,i,r){try{const n=this.Ln(t,r),o=URL.createObjectURL(n),h=document.createElement("a");h.href=o,h.download=i,h.style.display="none",h.rel="noopener",document.body.appendChild(h),h.click(),document.body.removeChild(h),URL.revokeObjectURL(o)}catch(n){console.error("Failed to download file:",n)}}kn(){return new Date().toISOString().slice(0,19).replace(/:/g,"-")}Hn(){const t=new Date;return{date:t.toISOString().split("T")[0],time:t.toTimeString().split(" ")[0].replace(/:/g,"-")}}In(t){return t.replace(/[<>:"/\\|?*]/g,"_").replace(/\s+/g,"_").replace(/_{2,}/g,"_").replace(/^_+|_+$/g,"").substring(0,255)}Nn(){return"textmode-export-"+this.kn()}}class $t extends it{Xn(t,i,r){const n=t[r]===255,o=t[r+1]===255,h=t[r+2]===255,a=i[r],u=i[r+1];return{isInverted:n,flipHorizontal:o,flipVertical:h,rotation:Math.round(360*(a+u/255)/255*100)/100}}Wn(t,i,r){return{x:t,y:i,cellX:t*r.cellWidth,cellY:i*r.cellHeight}}Vn(t,i){const r=[];let n=0;for(let o=0;o<i.rows;o++)for(let h=0;h<i.cols;h++){const a=4*n,u=this.Gn(t.characterPixels,a);let f=this.Dn(t.primaryColorPixels,a),d=this.Dn(t.secondaryColorPixels,a);const g=this.Xn(t.transformPixels,t.rotationPixels,a);if(g.isInverted){const x=f;f=d,d=x}const m=this.Wn(h,o,i);r.push({charIndex:u,primaryColor:f,secondaryColor:d,transform:g,position:m}),n++}return r}}class Jt{Kn(t,i){const r=t.cmap;for(const n of r.tables)if(n.format===4){const o=n;for(let h=0;h<o.startCount.length;h++)if(i>=o.startCount[h]&&i<=o.endCount[h]){if(o.idRangeOffset[h]===0)return i+o.idDelta[h]&65535;{const a=o.idRangeOffset[h]/2+(i-o.startCount[h])-(o.startCount.length-h);if(a>=0&&a<o.glyphIdArray.length){const u=o.glyphIdArray[a];if(u!==0)return u+o.idDelta[h]&65535}}}}else if(n.format===12){const o=n;for(let h=0;h<o.groups.length;h+=3){const a=o.groups[h],u=o.groups[h+1],f=o.groups[h+2];if(i>=a&&i<=u)return f+(i-a)}}return 0}jn(t,i,r,n,o){const h=o/t.head.unitsPerEm;return{getBoundingBox:()=>({x1:r+i.xMin*h,y1:n+-i.yMax*h,x2:r+i.xMax*h,y2:n+-i.yMin*h}),toSVG:()=>this.Yn(i,r,n,h)}}Yn(t,i,r,n){if(!t||!t.xs)return"";const{xs:o,ys:h,endPts:a,flags:u}=t;if(!(o&&h&&a&&u))return"";let f="",d=0;for(let g=0;g<a.length;g++){const m=a[g];if(!(m<d)){if(m>=d){const x=i+o[d]*n,A=r-h[d]*n;f+=`M${x.toFixed(2)},${A.toFixed(2)}`;let p=d+1;for(;p<=m;)if(1&u[p]){const E=i+o[p]*n,v=r-h[p]*n;f+=`L${E.toFixed(2)},${v.toFixed(2)}`,p++}else{const E=i+o[p]*n,v=r-h[p]*n;let w=p+1>m?d:p+1;if(1&u[w]){const y=i+o[w]*n,L=r-h[w]*n;f+=`Q${E.toFixed(2)},${v.toFixed(2)} ${y.toFixed(2)},${L.toFixed(2)}`,p=w+1}else{const y=(E+(i+o[w]*n))/2,L=(v+(r-h[w]*n))/2;f+=`Q${E.toFixed(2)},${v.toFixed(2)} ${y.toFixed(2)},${L.toFixed(2)}`,p=w}}f+="Z"}d=m+1}}return f}qn(t,i,r,n,o){const h=t.codePointAt(0)||0,a=this.Kn(i,h);let u=null;return i.glyf&&i.glyf[a]!==null?u=i.glyf[a]:(u=D.T.glyf.Js(i,a),i.glyf[a]=u),this.jn(i,u,r,n,o)}Zn(t,i,r,n,o,h,a,u){const f=r+(o-u*(a/i.head.unitsPerEm))/2,d=n+(h+.7*a)/2;return this.qn(t,i,f,d,a).toSVG()||null}}class Qt{constructor(){l(this,"Qn");this.Qn=new Jt}Jn(t){const{width:i,height:r}=t;return`<?xml version="1.0" encoding="UTF-8"?><svg width="${i}" height="${r}" viewBox="0 0 ${i} ${r}" xmlns="http://www.w3.org/2000/svg"><title>textmode.js sketch</title>`}eo(){return"</g></svg>"}so(t,i){if(!i.includeBackgroundRectangles)return"";const[r,n,o,h]=i.backgroundColor;return`<rect width="${t.width}" height="${t.height}" fill="rgba(${r},${n},${o},${h/255})"/>`}io(t,i){const{transform:r,position:n}=t;if(!r.flipHorizontal&&!r.flipVertical&&!r.rotation)return"";const o=n.cellX+i.cellWidth/2,h=n.cellY+i.cellHeight/2,a=[];if(r.flipHorizontal||r.flipVertical){const u=r.flipHorizontal?-1:1,f=r.flipVertical?-1:1;a.push(`translate(${o} ${h})scale(${u} ${f})translate(${-o} ${-h})`)}return r.rotation&&a.push(`rotate(${r.rotation} ${o} ${h})`),` transform="${a.join(" ")}"`}ro(t,i,r){if(!r.includeBackgroundRectangles||t.secondaryColor.a===0)return"";const{position:n}=t,{r:o,g:h,b:a,a:u}=t.secondaryColor,f=`rgba(${o},${h},${a},${u/255})`;return r.drawMode==="stroke"?`<rect x="${n.cellX}" y="${n.cellY}" width="${i.cellWidth}" height="${i.cellHeight}" stroke="${f}" fill="none" stroke-width="${r.strokeWidth}"/>`:`<rect x="${n.cellX}" y="${n.cellY}" width="${i.cellWidth}" height="${i.cellHeight}" fill="${f}"/>`}qn(t,i,r,n){const o=r.characters[t.charIndex];if(!o)return"";const h=this.Qn.Zn(o.character,r.font,t.position.cellX,t.position.cellY,i.cellWidth,i.cellHeight,r.fontSize,o.advanceWidth);if(!h)return"";const{r:a,g:u,b:f,a:d}=t.primaryColor,g=`rgba(${a},${u},${f},${d/255})`;return n.drawMode==="stroke"?`<path d="${h}" stroke="${g}" stroke-width="${n.strokeWidth}" fill="none"/>`:`<path d="${h}" fill="${g}"/>`}no(t,i,r,n){const o=[],h=this.ro(t,i,n);h&&o.push(h);const a=this.qn(t,i,r,n);if(a){const u=this.io(t,i);o.push(u?`<g${u}>${a}</g>`:a)}return o.join("")}oo(t,i,r,n){const o=[this.Jn(i),this.so(i,n),'<g id="ascii-cells">'];for(const h of t)o.push(this.no(h,i,r,n));return o.push(this.eo()),o.join("")}ao(t){return t.replace(/<path[^>]*d=""[^>]*\/>/g,"").replace(/\s+/g," ").replace(/> </g,"><")}}class te extends st{ho(t){return this.Ln(t,"image/svg+xml;charset=utf-8")}co(t,i){this.On(t,this.In(i)+".svg","image/svg+xml;charset=utf-8")}lo(t,i){this.co(t,i||this.Nn())}}class ft{constructor(){l(this,"uo");l(this,"fo");l(this,"do");this.uo=new $t,this.fo=new Qt,this.do=new te}po(t){return{includeBackgroundRectangles:t.includeBackgroundRectangles??!0,drawMode:t.drawMode??"fill",strokeWidth:t.strokeWidth??1,backgroundColor:t.backgroundColor??[0,0,0,0],filename:t.filename||this.do.Nn()}}mo(t,i={}){const r=this.uo.Vn(this.uo.Bn(t.pipeline),t.grid),n=this.fo.oo(r,t.grid,t.font,this.po(i));return this.fo.ao(n)}lo(t,i={}){this.do.lo(this.mo(t,i),i.filename)}}class ee extends it{_o(t,i,r,n=" "){var a;const o=[];let h=0;for(let u=0;u<i.rows;u++){const f=[];for(let d=0;d<i.cols;d++){const g=4*h,m=this.Gn(t.characterPixels,g),x=((a=r.characters[m])==null?void 0:a.character)||n;f.push(x),h++}o.push(f)}return o}}class ie{vo(t,i){const r=[];for(const o of t){let h=o.join("");i.preserveTrailingSpaces||(h=h.replace(/\s+$/,"")),r.push(h)}const n=i.lineEnding==="crlf"?`\r
|
|
12
|
-
`:`
|
|
13
|
-
`;return r.join(n)}}class se extends st{yo(t,i){const r=this.Ao(i);this.On(t,r,"text/plain;charset=utf-8")}Ao(t){let i=this.In(t);return i===".txt"||i.length<=4?this.Nn():i}}class dt{constructor(){l(this,"uo");l(this,"fo");l(this,"do");this.uo=new ee,this.fo=new ie,this.do=new se}po(t){return{preserveTrailingSpaces:t.preserveTrailingSpaces??!1,lineEnding:t.lineEnding??"lf",emptyCharacter:t.emptyCharacter??" ",filename:t.filename||this.do.Nn()}}wo(t,i={}){const r=this.po(i),n=this.uo._o(this.uo.Bn(t.pipeline),t.grid,t.font,r.emptyCharacter);return this.fo.vo(n,r)}yo(t,i={}){this.do.yo(this.wo(t,i),i.filename)}}class re extends it{Co(t,i=1,r="transparent"){const n=t.canvas;if(i===1&&r==="transparent")return n;const o=document.createElement("canvas"),h=o.getContext("2d"),a=Math.round(n.width*i),u=Math.round(n.height*i);return o.width=a,o.height=u,r!=="transparent"&&(h.fillStyle=r,h.fillRect(0,0,a,u)),h.imageSmoothingEnabled=!1,h.drawImage(n,0,0,n.width,n.height,0,0,a,u),o}}class ne{bo(t,i){const r=this.xo(i.format);return i.format==="png"?t.toDataURL(r):t.toDataURL(r,i.quality)}async $o(t,i){return new Promise((r,n)=>{const o=this.xo(i.format),h=a=>{a?r(a):n(Error(`Failed to generate ${i.format.toUpperCase()} blob`))};i.format==="png"?t.toBlob(h,o):t.toBlob(h,o,i.quality)})}xo(t){switch(t){case"png":return"image/png";case"jpg":return"image/jpeg";case"webp":return"image/webp";default:throw Error("Unsupported image format: "+t)}}}const oe={png:"image/png",jpg:"image/jpeg",webp:"image/webp"},gt={png:".png",jpg:".jpg",webp:".webp"};class he extends st{Mo(t,i,r){this.Fo(t,this.In(i)+gt[r])}Fo(t,i){const r=URL.createObjectURL(t);try{const n=document.createElement("a");n.href=r,n.download=i,n.style.display="none",n.rel="noopener",document.body.appendChild(n),n.click(),document.body.removeChild(n)}finally{URL.revokeObjectURL(r)}}Ro(t){return t in oe&&t in gt}}class ae{constructor(){l(this,"uo");l(this,"fo");l(this,"do");this.uo=new re,this.fo=new ne,this.do=new he}po(t){return{format:t.format??"png",quality:t.quality??1,scale:t.scale??1,backgroundColor:t.backgroundColor??"transparent",filename:t.filename||this.do.Nn()}}zo(t){if(!this.do.Ro(t.format))throw Error(`Saving '${t.format}' files is not supported`);if(t.quality<0||t.quality>1)throw Error("Image quality must be between 0.0 and 1.0");if(t.scale<=0)throw Error("Scale factor must be greater than 0");t.format==="jpg"&&t.backgroundColor==="transparent"&&(t.backgroundColor="black")}async $o(t,i){if(i.scale===1&&i.backgroundColor==="transparent")return await this.fo.$o(t.canvas,i);const r=this.uo.Co(t,i.scale,i.backgroundColor);return await this.fo.$o(r,i)}async Mo(t,i={}){const r=this.po(i);this.zo(r);const n=await this.$o(t,r);this.do.Mo(n,r.filename,r.format)}}const ce=c=>class extends c{Po(){this.xt.St(this.To)}toString(t={}){return this.Po(),new dt().wo({pipeline:this.So,grid:this.hn,font:this.Ei},t)}saveStrings(t={}){this.Po(),new dt().yo({pipeline:this.So,grid:this.hn,font:this.Ei},t)}toSVG(t={}){return this.Po(),new ft().mo({pipeline:this.So,grid:this.hn,font:this.Ei},t)}saveSVG(t={}){this.Po(),new ft().lo({pipeline:this.So,grid:this.hn,font:this.Ei},t)}async saveCanvas(t={}){await new ae().Mo(this.er,t)}},le=c=>class extends c{async loadFont(t){return this.Ei.qi(t).then(()=>{const i=this.Ei.maxGlyphDimensions;this.hn.nr(i.width,i.height),this.So.resize(this.hn.cols,this.hn.rows),this.xt.Qs(),this.Eo.bn()})}fontSize(t){if(!X.v(typeof t=="number"&&t>0,"Font size must be a positive number greater than 0.",{method:"fontSize",providedValue:t})||this.Ei.fontSize===t)return;this.Ei.Yi(t);const i=this.Ei.maxGlyphDimensions;this.hn.nr(i.width,i.height),this.So.resize(this.hn.cols,this.hn.rows),this.xt.Qs(),this.Eo.bn()}glyphColor(t){return this.Ei.Ti(t)}glyphColors(t){return this.Ei.Si(t)}},ue=c=>class extends c{get frameCount(){return this.Bo.frameCount}set frameCount(t){this.Bo.frameCount=t}frameRate(t){return t===void 0?this.Bo.currentFrameRate:this.Bo.frameRate(t,()=>this.Go())}noLoop(){this.Bo.pause()}loop(){this.Bo.resume(()=>this.Go())}redraw(t=1){if(X.v(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.Go()}isLooping(){return this.Bo.isLooping}},fe=c=>class extends c{constructor(...t){super(...t)}mouseClicked(t){this.Eo.Pn(t)}mousePressed(t){this.Eo.Zr(t)}mouseReleased(t){this.Eo.Qr(t)}mouseMoved(t){this.Eo.Tn(t)}mouseScrolled(t){this.Eo.Sn(t)}get mouse(){return this.Eo.En()}},de=c=>class extends c{constructor(...t){super(...t)}keyPressed(t){this.Do.Zr(t)}keyReleased(t){this.Do.Qr(t)}isKeyPressed(t){return this.Do.Jr(t)}get lastKeyPressed(){return this.Do.en()}get lastKeyReleased(){return this.Do.sn()}get pressedKeys(){return this.Do.rn()}get modifierState(){return this.Do.nn()}};class ge{constructor(){l(this,"xt");l(this,"Ei");l(this,"er");l(this,"hn");l(this,"Bo");l(this,"Eo");l(this,"Do");l(this,"To");l(this,"So");l(this,"Lo");l(this,"Oo");l(this,"ko")}Go(){}}class pt extends function(i,...r){return r.reduce((n,o)=>o(n),i)}(ge,Zt,ce,le,ue,fe,de){constructor(i={}){super();l(this,"Ho",!1);l(this,"Io",()=>{});l(this,"No",()=>{});l(this,"Xo",()=>{});l(this,"Wo");l(this,"cr");l(this,"hr",!1);l(this,"Vo");this.hr=i.overlay??!1,this.er=new ut(i),this.xt=new Mt(this.er._r()),this.Ei=new ct(this.xt,i.fontSize??16),this.Bo=new jt(i.frameRate??60),this.Eo=new qt(this.er),this.Do=new Kt,this.To=this.xt.Tt(),this.Lo=this.xt.re(),this.Ko(i)}async Ko(i){await this.Ei.Vi(i.fontSource);const r=this.Ei.maxGlyphDimensions;this.hn=new lt(this.er.canvas,r.width,r.height),this.Eo.Vi(this.hn),this.So=this.xt.Ys(this.hn.cols,this.hn.rows,5),this.Oo=this.xt.Ys(this.hn.width,this.hn.height,1),this.hr&&(this.Vo=W.Mr(this.xt,this.er.targetCanvas,n=>this.Ei.Si(n))),this.ko=this.xt.ae(ot,"precision mediump float;uniform sampler2D Ua;uniform vec2 Ub;uniform vec2 Uc;uniform vec2 Ud;void main(){vec2 A=gl_FragCoord.xy-Uc;vec2 B=A*(Ub/Ud);vec2 C=(floor(B)+0.5)/Ub;gl_FragColor=texture2D(Ua,C);}"),this.jo(),this.Io(),this.Bo.start(()=>this.Go())}jo(){this.Wo=()=>{this.hr&&this.resizeCanvas(this.er.targetCanvas.width,this.er.targetCanvas.height),this.Xo()},window.addEventListener("resize",this.Wo),this.Eo.Kr(),this.Do.Kr(),window.addEventListener("blur",()=>{this.Do.an()}),window.ResizeObserver&&this.hr&&(this.cr=new ResizeObserver(()=>{this.resizeCanvas(this.er.targetCanvas.width,this.er.targetCanvas.height)}),this.cr.observe(this.er.targetCanvas))}Go(){if(this.Bo.measureFrameRate(),this.Bo.incrementFrame(),this.Ho)return;if(this.hr){const r=this.xt.context;r.bindTexture(r.TEXTURE_2D,this.Vo.texture),r.pixelStorei(r.UNPACK_FLIP_Y_WEBGL,1),r.texImage2D(r.TEXTURE_2D,0,r.RGBA,r.RGBA,r.UNSIGNED_BYTE,this.er.targetCanvas),r.bindTexture(r.TEXTURE_2D,null)}this.So.begin(),this.xt.Ds(this.To),this.No(),this.xt.St(this.To),this.So.end(),this.Oo.begin(),this.xt.Ds(this.Lo),this.Lo.Vt({U0:this.Ei.fontFramebuffer,U1:[this.Ei.textureColumns,this.Ei.textureRows],U2:this.So.textures[0],U3:this.So.textures[1],U4:this.So.textures[2],U5:this.So.textures[4],U6:this.So.textures[3],U7:[this.hn.cols,this.hn.rows],U8:[this.Oo.width,this.Oo.height],U9:this.Oo.width/this.Oo.height}),this.xt.Ns(0,0,this.er.width,this.er.height),this.Oo.end();const i=this.xt.state.canvasBackgroundColor;this.xt.Ne(i[0],i[1],i[2],i[3]),this.xt.Ds(this.ko),this.ko.Vt({Ua:this.Oo.textures[0],Ub:[this.Oo.width,this.Oo.height],Uc:[this.hn.offsetX,this.hn.offsetY],Ud:[this.hn.width,this.hn.height]}),this.xt.Ns(this.hn.offsetX,this.hn.offsetY,this.hn.width,this.hn.height)}setup(i){this.Io=i}draw(i){this.No=i}windowResized(i){this.Xo=i}resizeCanvas(i,r){this.er.gr(i,r),this.hn.rr(),this.So.resize(this.hn.cols,this.hn.rows),this.Oo.resize(this.hn.width,this.hn.height),this.xt.Qs(),this.Eo.bn(),this.Go()}destroy(){this.Ho||(this.Bo.stop(),window.removeEventListener("resize",this.Wo),this.Eo.qr(),this.Do.qr(),this.Ei.Gt(),this.xt.Gt(),this.Oo.Gt(),this.ko.Gt(),this.Vo&&this.Vo.Gt(),this.Ho=!0)}get grid(){return this.hn}get font(){return this.Ei}get width(){return this.er.width}get height(){return this.er.height}get canvas(){return this.er.canvas}get isDisposed(){return this.Ho}get overlay(){return this.Vo}}class ${constructor(){}static create(t={}){return new pt(t)}static setErrorLevel(t){X.A(t)}static get version(){return"0.3.0"}}const pe=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),me=$.create,ve=$.setErrorLevel,Ae=$.version;C.TextmodeCanvas=ut,C.TextmodeErrorLevel=O,C.TextmodeFont=ct,C.TextmodeFramebuffer=j,C.TextmodeGrid=lt,C.TextmodeImage=W,C.Textmodifier=pt,C.create=me,C.export=pe,C.setErrorLevel=ve,C.textmode=$,C.version=Ae,Object.defineProperty(C,Symbol.toStringTag,{value:"Module"})},typeof exports=="object"&&typeof module<"u"?s(exports):typeof define=="function"&&define.amd?define(["exports"],s):s((e=typeof globalThis<"u"?globalThis:e||self).textmode={});
|
|
7
|
+
`}static o(t){if(t===null)return"null";if(t===void 0)return"undefined";if(typeof t=="string")return`"${t}"`;if(typeof t=="number"||typeof t=="boolean")return t+"";if(Array.isArray(t))return t.length===0?"[]":t.length<=5?`[${t.map(i=>R.o(i)).join(", ")}]`:`[${t.slice(0,3).map(i=>R.o(i)).join(", ")}, ... +${t.length-3} more]`;if(typeof t=="object"){const i=Object.keys(t);return i.length===0?"{}":i.length<=3?`{ ${i.map(r=>`${r}: ${R.o(t[r])}`).join(", ")} }`:`{ ${i.slice(0,2).map(r=>`${r}: ${R.o(t[r])}`).join(", ")}, ... +${i.length-2} more }`}return t+""}}var S=(l=>(l[l.SILENT=0]="SILENT",l[l.WARNING=1]="WARNING",l[l.ERROR=2]="ERROR",l[l.THROW=3]="THROW",l))(S||{});const I=class I{constructor(){c(this,"u",{globalLevel:3})}static _(){return I.l||(I.l=new I),I.l}v(t,i){const r="%c[textmode.js] Oops! (╯°□°)╯︵ Something went wrong in your code.",n="color: #f44336; font-weight: bold; background: #ffebee; padding: 2px 6px; border-radius: 3px;";switch(this.u.globalLevel){case 0:return!1;case 1:return console.group(r,n),console.warn(R.i(t,i)),console.groupEnd(),!1;case 2:return console.group(r,n),console.error(R.i(t,i)),console.groupEnd(),!1;default:throw new R(t,i)}}m(t,i,r){return!!t||(this.v(i,r),!1)}A(t){this.u.globalLevel=t}};c(I,"l",null);let J=I;const X=J._(),it=new WeakMap;function k(l,t){it.set(l,t)}function V(l){return it.get(l)}class st{constructor(){c(this,"C",1);c(this,"M",0);c(this,"U",0);c(this,"F",0);c(this,"R",[0,0,0]);c(this,"P",[1,1,1,1]);c(this,"S",[0,0,0,1]);c(this,"$",!1);c(this,"D",!1);c(this,"k",!1);c(this,"O",[0,0]);c(this,"L",[0,0,0,1]);c(this,"G",[])}H(){this.G.push({I:this.C,N:this.M,X:this.U,W:this.F,O:[...this.O],K:this.$,j:this.D,k:this.k,Y:[...this.R],V:[...this.P],q:[...this.S]})}Z(){const t=this.G.pop();t?(this.C=t.I,this.M=t.N,this.U=t.X,this.F=t.W,this.O=t.O,this.$=t.K,this.D=t.j,this.k=t.k,this.R=t.Y,this.P=t.V,this.S=t.q):console.warn("pop() called without matching push()")}J(t){t.I=this.C,t.N=this.M,t.X=this.U,t.W=this.F,t.Y[0]=this.R[0],t.Y[1]=this.R[1],t.Y[2]=this.R[2],t.V[0]=this.P[0],t.V[1]=this.P[1],t.V[2]=this.P[2],t.V[3]=this.P[3],t.q[0]=this.S[0],t.q[1]=this.S[1],t.q[2]=this.S[2],t.q[3]=this.S[3],t.K=this.$,t.j=this.D,t.k=this.k,t.O[0]=this.O[0],t.O[1]=this.O[1]}get lineWeight(){return this.C}get canvasBackgroundColor(){return this.L}tt(t){this.C=Math.abs(t)}st(t){this.M=t}et(t){this.U=t}it(t){this.F=t}rt(t){this.R=t}nt(t,i,r,n=255){this.P=[t/255,i/255,r/255,n/255]}ot(t,i,r,n=255){this.S=[t/255,i/255,r/255,n/255]}ht(t){this.$=t}ct(t){this.D=t}lt(t){this.k=t}ut(t){const i=255*t/360,r=Math.floor(i)/255,n=Math.round(i-Math.floor(i));this.O=[r,n]}ft(t,i,r,n){this.L=[t/255,i/255,r/255,n/255]}}class j{constructor(t,i,r=i,n=1,o={},h=null,a=!1){c(this,"dt");c(this,"_t");c(this,"u");c(this,"vt",null);c(this,"gt");c(this,"At");c(this,"yt",[]);c(this,"Ct");c(this,"wt",null);c(this,"bt",[]);c(this,"xt",null);c(this,"Mt",!1);c(this,"Ft",null);this.dt=i,this._t=r,this.u={filter:"nearest",wrap:"clamp",format:"rgba",type:"unsigned_byte",...o},this.gt=t,this.Ct=Math.min(Math.max(1,n),8),this.xt=h,this.Mt=!!a,this.Ft=this.Mt?new st:null;const u=t.getParameter(t.MAX_DRAW_BUFFERS),f=t.getParameter(t.MAX_COLOR_ATTACHMENTS);this.Ct=Math.min(this.Ct,u,f),this.At=t.createFramebuffer(),this.zt(),this.Rt(),this.bt=Array(this.Ct).fill(null)}zt(){const t=this.gt,i=this.u.filter==="linear"?t.LINEAR:t.NEAREST,r=this.u.wrap==="repeat"?t.REPEAT:t.CLAMP_TO_EDGE,n=this.u.type==="float"?t.FLOAT:t.UNSIGNED_BYTE;for(let o=0;o<this.Ct;o++){const h=t.createTexture();t.bindTexture(t.TEXTURE_2D,h),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,i),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,i),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,r),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,r),t.texImage2D(t.TEXTURE_2D,0,t.RGBA,this.dt,this._t,0,t.RGBA,n,null),this.yt.push(h)}t.bindTexture(t.TEXTURE_2D,null)}Rt(){const t=this.gt;if(t.bindFramebuffer(t.FRAMEBUFFER,this.At),this.Ct===1)t.framebufferTexture2D(t.FRAMEBUFFER,t.COLOR_ATTACHMENT0,t.TEXTURE_2D,this.yt[0],0);else{const r=[];for(let n=0;n<this.Ct;n++){const o=t.COLOR_ATTACHMENT0+n;t.framebufferTexture2D(t.FRAMEBUFFER,o,t.TEXTURE_2D,this.yt[n],0),r.push(o)}t.drawBuffers(r)}const i=t.checkFramebufferStatus(t.FRAMEBUFFER);i!==t.FRAMEBUFFER_COMPLETE&&console.error("GLFramebuffer is not complete:",i),t.bindFramebuffer(t.FRAMEBUFFER,null)}Tt(t){const i=this.gt;i.bindTexture(i.TEXTURE_2D,this.yt[0]),i.pixelStorei(i.UNPACK_FLIP_Y_WEBGL,1),i.texImage2D(i.TEXTURE_2D,0,i.RGBA,i.RGBA,i.UNSIGNED_BYTE,t),i.bindTexture(i.TEXTURE_2D,null)}resize(t,i){this.dt=t,this._t=i,this.vt=null,this.bt=Array(this.Ct).fill(null);const r=this.gt,n=this.u.type==="float"?r.FLOAT:r.UNSIGNED_BYTE;for(const o of this.yt)r.bindTexture(r.TEXTURE_2D,o),r.texImage2D(r.TEXTURE_2D,0,r.RGBA,this.dt,this._t,0,r.RGBA,n,null);r.bindTexture(r.TEXTURE_2D,null)}readPixels(t){const i=this.gt,r=this.bt[t];if(r)return r;const n=this.dt,o=this._t,h=new Uint8Array(n*o*4),a=i.getParameter(i.READ_FRAMEBUFFER_BINDING);i.bindFramebuffer(i.READ_FRAMEBUFFER,this.At),i.readBuffer(i.COLOR_ATTACHMENT0+t),i.readPixels(0,0,n,o,i.RGBA,i.UNSIGNED_BYTE,h),i.bindFramebuffer(i.READ_FRAMEBUFFER,a);const u=4*n,f=new Uint8Array(h.length);for(let g=0;g<o;g++){const d=(o-1-g)*u,p=g*u;f.set(h.subarray(d,d+u),p)}return this.bt[t]=f,f}begin(){var i,r,n,o;const t=this.gt;if(this.xt){const h=((r=(i=this.xt).Pt)==null?void 0:r.call(i))??null;h&&this.xt.St(h),this.Mt&&this.Ft&&((o=(n=this.xt).Et)==null||o.call(n,this.Ft))}this.wt={framebuffer:t.getParameter(t.FRAMEBUFFER_BINDING),viewport:t.getParameter(t.VIEWPORT)},t.bindFramebuffer(t.FRAMEBUFFER,this.At),this.bt=Array(this.Ct).fill(null);for(let h=0;h<this.Ct;h++)t.clearBufferfv(t.COLOR,h,new Float32Array([0,0,0,0]));t.viewport(0,0,this.dt,this._t),k(t,[0,0,this.dt,this._t])}end(){var i,r,n,o;if(!this.wt)return;const t=this.gt;if(this.xt){const h=((r=(i=this.xt).Pt)==null?void 0:r.call(i))??null;h&&this.xt.St(h)}t.bindFramebuffer(t.FRAMEBUFFER,this.wt.framebuffer),t.viewport(...this.wt.viewport),k(t,this.wt.viewport),this.wt=null,this.xt&&this.Mt&&this.Ft&&((o=(n=this.xt).$t)==null||o.call(n))}Dt(){const t=this.gt;t.deleteFramebuffer(this.At);for(const i of this.yt)t.deleteTexture(i)}get width(){return this.dt}get height(){return this._t}get textures(){return[...this.yt]}}class N{constructor(t,i,r){c(this,"gt");c(this,"kt");c(this,"Bt",new Map);c(this,"Ot",new Map);c(this,"Lt",0);this.gt=t,this.kt=this.Gt(i,r),this.Ht()}Ht(){const t=this.gt.getProgramParameter(this.kt,this.gt.ACTIVE_UNIFORMS);for(let i=0;i<t;i++){const r=this.gt.getActiveUniform(this.kt,i);if(r){const n=this.gt.getUniformLocation(this.kt,r.name);if(n&&(this.Bt.set(r.name,n),this.Ot.set(r.name,{type:r.type,size:r.size}),r.size>1)){const o=r.name.replace(/\[.*\]$/,"");this.Bt.has(o)||(this.Bt.set(o,n),this.Ot.set(o,{type:r.type,size:r.size}))}}}}Gt(t,i){const r=this.It(this.gt.VERTEX_SHADER,t),n=this.It(this.gt.FRAGMENT_SHADER,i),o=this.gt.createProgram();if(this.gt.attachShader(o,r),this.gt.attachShader(o,n),this.gt.linkProgram(o),!this.gt.getProgramParameter(o,this.gt.LINK_STATUS)){const h=this.gt.getProgramInfoLog(o);throw Error("Shader program link error: "+h)}return this.gt.deleteShader(r),this.gt.deleteShader(n),o}It(t,i){const r=this.gt.createShader(t);if(this.gt.shaderSource(r,i),this.gt.compileShader(r),!this.gt.getShaderParameter(r,this.gt.COMPILE_STATUS)){const n=this.gt.getShaderInfoLog(r);throw this.gt.deleteShader(r),Error("Shader compilation error: "+n)}return r}Nt(){this.gt.useProgram(this.kt),this.Xt()}Xt(){this.Lt=0}Wt(t){for(const[i,r]of Object.entries(t))this.Kt(i,r)}jt(t){return this.Bt.has(t)}Yt(t){return this.Ot.get(t)||null}Vt(){const t=[];for(const[i,r]of this.Ot.entries())t.push({name:i,...r});return t}Kt(t,i){var u;const r=this.Bt.get(t);if(!r)return;const n=this.Ot.get(t);if(!n)return void console.warn(`No type information found for uniform '${t}'`);const{type:o,size:h}=n,a=this.gt;if(typeof i=="number")switch(o){case a.INT:case a.BOOL:a.uniform1i(r,i);break;case a.FLOAT:a.uniform1f(r,i);break;default:console.warn(`Unexpected uniform type for scalar '${t}': ${o}`),a.uniform1f(r,i)}else if(typeof i=="boolean")a.uniform1i(r,i?1:0);else if(Array.isArray(i))if(Array.isArray(i[0])){const f=i,g=((u=f[0])==null?void 0:u.length)||0,d=f.flat();switch(o){case a.FLOAT_VEC2:g===2?a.uniform2fv(r,d):console.warn(`Vector length mismatch for '${t}': expected 2, got ${g}`);break;case a.FLOAT_VEC3:g===3?a.uniform3fv(r,d):console.warn(`Vector length mismatch for '${t}': expected 3, got ${g}`);break;case a.FLOAT_VEC4:g===4?a.uniform4fv(r,d):console.warn(`Vector length mismatch for '${t}': expected 4, got ${g}`);break;default:console.warn(`Unsupported uniform type for vector array '${t}': ${o}`)}}else switch(o){case a.FLOAT_VEC2:i.length===2?a.uniform2f(r,i[0],i[1]):console.warn(`Vector length mismatch for '${t}': expected 2, got ${i.length}`);break;case a.FLOAT_VEC3:i.length===3?a.uniform3f(r,i[0],i[1],i[2]):console.warn(`Vector length mismatch for '${t}': expected 3, got ${i.length}`);break;case a.FLOAT_VEC4:i.length===4?a.uniform4f(r,i[0],i[1],i[2],i[3]):console.warn(`Vector length mismatch for '${t}': expected 4, got ${i.length}`);break;case a.INT:h>1?a.uniform1iv(r,i):console.warn(`Array provided for scalar uniform '${t}'`);break;case a.FLOAT:h>1?a.uniform1fv(r,i):console.warn(`Array provided for scalar uniform '${t}'`);break;default:console.warn(`Unsupported uniform type for array '${t}': ${o}`)}else if(i instanceof WebGLTexture){const f=this.qt();a.uniform1i(r,f),a.activeTexture(a.TEXTURE0+f),a.bindTexture(a.TEXTURE_2D,i)}else if(i instanceof j){const f=this.qt();a.uniform1i(r,f),a.activeTexture(a.TEXTURE0+f),a.bindTexture(a.TEXTURE_2D,i.textures[0])}else console.warn(`Unsupported uniform type for '${t}':`,typeof i)}qt(){return this.Lt++}get Zt(){return this.kt}Dt(){this.gt.deleteProgram(this.kt)}}const q=`#version 300 es
|
|
8
|
+
in vec2 a_position;in vec2 a_texCoord;in vec2 a_instancePosition;in vec2 a_instanceSize;in vec3 a_instanceCharacter;in vec4 a_instancePrimaryColor;in vec4 a_instanceSecondaryColor;in vec2 a_instanceRotation;in vec3 a_instanceTransform;in vec3 a_instanceGlobalRotation;in vec2 a_instanceRotationCenter;in vec2 a_instanceBezierCP1;in vec2 a_instanceBezierCP2;in vec2 a_instanceBezierStart;in vec2 a_instanceBezierEnd;in vec2 a_instanceArcAngles;uniform float U9;uniform vec2 Uw;out vec2 v_uv;out vec3 v_character;out vec4 v_primaryColor;out vec4 v_secondaryColor;out vec2 v_rotation;out vec3 v_transform;mat3 A(float B){float C=sin(B),D=cos(B);return mat3(1,0,0,0,D,-C,0,C,D);}mat3 E(float B){float C=sin(B),D=cos(B);return mat3(D,0,C,0,1,0,-C,0,D);}mat3 F(float B){float C=sin(B),D=cos(B);return mat3(D,-C,0,C,D,0,0,0,1);}vec2 G(float H,vec2 I,vec2 J,vec2 K,vec2 L){float M=1.-H,N=M*M,O=H*H;return N*M*I+3.*N*H*J+3.*M*O*K+O*H*L;}vec2 P(float H,vec2 I,vec2 J,vec2 K,vec2 L){float M=1.-H,N=M*M,O=H*H;return-3.*N*I+3.*N*J-6.*M*H*J+6.*M*H*K-3.*O*K+3.*O*L;}void main(){v_uv=a_texCoord;v_character=a_instanceCharacter;v_primaryColor=a_instancePrimaryColor;v_secondaryColor=a_instanceSecondaryColor;v_rotation=a_instanceRotation;v_transform=a_instanceTransform;vec2 Q;bool R=length(a_instanceBezierCP1)+length(a_instanceBezierCP2)+length(a_instanceBezierStart)+length(a_instanceBezierEnd)>0.;bool S=a_instanceArcAngles.x!=0.||a_instanceArcAngles.y!=0.;if(R){float H=a_position.x;vec2 T=G(H,a_instanceBezierStart,a_instanceBezierCP1,a_instanceBezierCP2,a_instanceBezierEnd);vec2 U=P(H,a_instanceBezierStart,a_instanceBezierCP1,a_instanceBezierCP2,a_instanceBezierEnd);float V=length(U);U=V>0.?U/V:vec2(1,0);Q=T+vec2(-U.y,U.x)*a_position.y*a_instanceSize.y;}else if(S){float C=a_instanceArcAngles.x,W=a_instanceArcAngles.y;C=mod(C,6.28318530718);if(C<0.)C+=6.28318530718;W=mod(W,6.28318530718);if(W<0.)W+=6.28318530718;float X=C-W;if(X<=0.)X+=6.28318530718;float Y=C-a_position.x*X;vec2 Z=vec2(cos(Y),sin(Y))*a_position.y;Q=Z*a_instanceSize*.5+a_instanceSize*.5+a_instancePosition;}else{Q=a_position*a_instanceSize+a_instancePosition;}vec2 a=(Q/Uw)*2.-1.;a.y=-a.y;if(length(a_instanceGlobalRotation)>0.){vec3 b=vec3(a-a_instanceRotationCenter,0);b.x*=U9;if(a_instanceGlobalRotation.x!=0.)b=A(-a_instanceGlobalRotation.x)*b;if(a_instanceGlobalRotation.y!=0.)b=E(-a_instanceGlobalRotation.y)*b;if(a_instanceGlobalRotation.z!=0.)b=F(-a_instanceGlobalRotation.z)*b;b.x/=U9;a=b.xy+a_instanceRotationCenter;}gl_Position=vec4(a,0,1);}`,rt="attribute vec2 a_position;attribute vec2 a_texCoord;varying vec2 v_uv;void main(){v_uv=a_texCoord;gl_Position=vec4(a_position,0.,1.);}";class mt{constructor(t){c(this,"gt");c(this,"Qt");c(this,"Jt");c(this,"ts");c(this,"ss");this.gt=t,this.Jt=new N(this.gt,q,`#version 300 es
|
|
9
|
+
precision highp float;in vec2 v_uv;in vec3 v_character;in vec4 v_primaryColor;in vec4 v_secondaryColor;in vec2 v_rotation;in vec3 v_transform;layout(location=0)out vec4 o_character;layout(location=1)out vec4 o_primaryColor;layout(location=2)out vec4 o_secondaryColor;layout(location=3)out vec4 o_rotation;layout(location=4)out vec4 o_transform;void main(){o_character=vec4(v_character,1.);o_primaryColor=v_primaryColor;o_secondaryColor=v_secondaryColor;o_rotation=vec4(v_rotation,0.,1.);o_transform=vec4(v_transform,1.);}`),this.Qt=new N(this.gt,q,`#version 300 es
|
|
10
|
+
precision highp float;in vec2 v_uv;uniform sampler2D Ue;uniform sampler2D Uf;uniform sampler2D Ug;uniform sampler2D Uh;uniform sampler2D Ui;uniform vec2 Uj;layout(location=0)out vec4 o_character;layout(location=1)out vec4 o_primaryColor;layout(location=2)out vec4 o_secondaryColor;layout(location=3)out vec4 o_rotation;layout(location=4)out vec4 o_transform;void main(){vec2 A=vec2(v_uv.x,1.-v_uv.y);vec2 B=A*Uj;vec2 C=(floor(B)+0.5f)/Uj;vec4 D=texture(Ue,C);vec4 E=texture(Uf,C);if(E.a==0.){discard;}vec4 F=texture(Ug,C);vec4 G=texture(Uh,C);vec4 H=texture(Ui,C);o_character=D;o_primaryColor=E;o_secondaryColor=F;o_rotation=G;o_transform=H;}`),this.ts=new N(this.gt,rt,"precision mediump float;uniform sampler2D U0;uniform vec2 U1;uniform sampler2D U3;uniform sampler2D U4;uniform sampler2D U5;uniform sampler2D U2;uniform sampler2D U6;uniform vec2 U7;uniform vec2 U8;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/U8;vec2 F=E*U7;vec2 G=floor(F);vec2 H=(G+0.5)/U7;vec4 I=texture2D(U3,H);vec4 J=texture2D(U4,H);vec4 K=texture2D(U5,H);bool L=K.r>0.5;bool M=K.g>0.5;bool N=K.b>0.5;vec4 O=texture2D(U2,H);int P=int(O.r*255.+0.5)+int(O.g*255.+0.5)*256;int Q=int(mod(float(P),U1.x));int R=P/int(U1.x);float S=(U1.y-1.)-float(R);vec2 T=vec2(float(Q),S)/U1;vec4 U=texture2D(U6,H);float V=U.r*255.+U.g;float W=-(V*360./255.)*0.017453292;vec2 X=fract(F)-0.5;if(M)X.x=-X.x;if(N)X.y=-X.y;X=A(W)*X+0.5;vec2 Y=1./U1;vec2 Z=T+X*Y;vec2 a=T+Y;if(any(lessThan(Z,T))||any(greaterThan(Z,a))){gl_FragColor=L?I:J;return;}vec4 b=texture2D(U0,Z);if(L)b.rgb=1.-b.rgb;gl_FragColor=mix(J,I,b);}"),this.ss=new N(this.gt,q,`#version 300 es
|
|
11
|
+
precision highp float;in vec2 v_uv;uniform sampler2D Uk;uniform bool Ul;uniform bool Um;uniform bool Un;uniform vec2 Uo;uniform bool Up;uniform vec4 Uq;uniform bool Ur;uniform vec4 Us;uniform vec4 Ut;uniform int Uu;uniform vec3 Uv[64];layout(location=0)out vec4 o_character;layout(location=1)out vec4 o_primaryColor;layout(location=2)out vec4 o_secondaryColor;layout(location=3)out vec4 o_rotation;layout(location=4)out vec4 o_transform;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(Uk,C);float E=A(D.rgb);if(Uu>0){float F=float(Uu);float G=clamp(E*(F-1.0f),0.0f,F-1.0f);int H=int(floor(G+0.5f));vec3 I=Uv[H];o_character=vec4(I,1.0f);}else{o_character=vec4(E,0.0f,0.0f,1.0f);}vec4 J=Up?Uq:D;vec4 K=Ur?Us:D;if(D.a<0.01f){J=Ut;K=Ut;}else{}o_primaryColor=vec4(J);o_secondaryColor=vec4(K);o_rotation=vec4(Uo.xy,0.0f,1.0f);o_transform=vec4(float(Ul),float(Um),float(Un),1.0f);}`)}es(){return this.Qt}Pt(){return this.Jt}rs(){return this.ts}ns(){return this.ss}hs(t){return new N(this.gt,q,t)}cs(t,i){return new N(this.gt,t,i)}Dt(){this.Qt.Dt(),this.Jt.Dt(),this.ts.Dt(),this.ss.Dt()}}var w=(l=>(l.RECTANGLE="rectangle",l.LINE="line",l.ELLIPSE="ellipse",l.ARC="arc",l.TRIANGLE="triangle",l.BEZIER_CURVE="bezier_curve",l.CUSTOM="custom",l))(w||{});class At{constructor(t){c(this,"gt");c(this,"ls",new Map);this.gt=t}us(t,i,r,n){const o=this.gt;let h=this.ls.get(t);h||(h=new Map,this.ls.set(t,h));let a=h.get(i)||null;if(!a){a=o.createVertexArray(),h.set(i,a),o.bindVertexArray(a),o.bindBuffer(o.ARRAY_BUFFER,n);const u=o.getAttribLocation(t,"a_position");u!==-1&&(o.enableVertexAttribArray(u),o.vertexAttribPointer(u,r.ds.fs.size,o.FLOAT,!1,r._s,r.ds.fs.offset),o.vertexAttribDivisor(u,0));const f=o.getAttribLocation(t,"a_texCoord");f!==-1&&(o.enableVertexAttribArray(f),o.vertexAttribPointer(f,r.ds.ps.size,o.FLOAT,!1,r._s,r.ds.ps.offset),o.vertexAttribDivisor(f,0))}o.bindVertexArray(a)}vs(){this.gt.bindVertexArray(null)}Dt(){for(const[,t]of this.ls)for(const[,i]of t)i&&this.gt.deleteVertexArray(i)}}class pt{constructor(t,i){c(this,"gs");c(this,"gt");c(this,"xt");c(this,"As",null);c(this,"Cs",null);this.gt=t,this.gs=new At(t),this.xt=i}ws(t,i,r){const{shader:n}=t,o=V(this.gt)||this.gt.getParameter(this.gt.VIEWPORT);n.Wt({U9:o[2]/o[3],Uw:[o[2],o[3]]});const h=f=>{if(!f||!f.bs())return;const g=f.unitGeometry,d=f.unitBuffer;try{this.gs.us(n.Zt,f.type+"",g,d),f.batch.Ms(n),f.batch.Fs(g.zs,g.Rs)}finally{f.batch.Ts(n),this.gs.vs(),f.Ps()}};let a=null,u=null;for(const f of i){if(f.type===w.CUSTOM){u&&(h(u),a=null,u=null),this.Ss(t,f.params,f.state,r.get(w.RECTANGLE));continue}a!==null&&f.type!==a&&(h(u),a=null,u=null);let g=u;g&&f.type===a||(g=r.get(f.type)||null,u=g,a=f.type),g&&g.Es(f.params,f.state)}h(u)}Ss(t,i,r,n){const{x:o,y:h,width:a,height:u,shader:f,uniforms:g}=i,d=this.$s(Math.max(1,Math.floor(a)),Math.max(1,Math.floor(u)));d.begin(),this.Ds(n,f,g,0,0,d.width,d.height,{}),d.end();const p=this.ks(),y={Ue:d.textures[0],Uf:d.textures[1],Ug:d.textures[2],Uh:d.textures[3],Ui:d.textures[4],Uj:[d.width,d.height]};this.Ds(n,p,y,Math.floor(o),Math.floor(h),Math.max(1,Math.floor(a)),Math.max(1,Math.floor(u)),r),t.shader.Nt()}Ds(t,i,r,n,o,h,a,u){i.Nt(),i.Wt(r);const f=this.gt.getParameter(this.gt.VIEWPORT);if(i.Wt({U9:f[2]/f[3],Uw:[f[2],f[3]]}),t.Ps(),t.Es({x:n,y:o,width:h,height:a},u),t.bs()){const g=t.unitGeometry,d=t.unitBuffer;try{this.gs.us(i.Zt,t.type+"",g,d),t.batch.Ms(i),t.batch.Fs(g.zs,g.Rs)}finally{t.batch.Ts(i),this.gs.vs(),t.Ps()}}}ks(){return this.xt.es()}$s(t,i){return this.As&&this.Cs&&this.Cs.w===t&&this.Cs.h===i||(this.As&&this.As.Dt(),this.As=new j(this.gt,t,i,5),this.Cs={w:t,h:i}),this.As}Dt(){this.gs.Dt(),this.As&&this.As.Dt()}}class vt{constructor(){c(this,"Bs",[]);c(this,"Os",1);c(this,"Ls",0)}Gs(t){if(this.Ls>=this.Bs.length){const r={id:this.Os++,type:t,params:{},state:{I:1,N:0,X:0,W:0,Y:[0,0,0],V:[1,1,1,1],q:[0,0,0,1],K:!1,j:!1,k:!1,O:[0,0]}};this.Bs.push(r)}const i=this.Bs[this.Ls];return i.id=this.Os++,i.type=t,this.Ls++,i}Hs(t,i,r,n,o){const h=this.Gs(w.RECTANGLE);return h.params.x=t,h.params.y=i,h.params.width=r,h.params.height=n,o.J(h.state),h.id}Is(t,i,r,n,o,h,a){const u=this.Gs(w.CUSTOM);return u.params.x=t,u.params.y=i,u.params.width=r,u.params.height=n,u.params.shader=o,u.params.uniforms=h,a.J(u.state),u.id}Ns(t,i,r,n,o,h){const a=this.Gs(w.LINE);return a.params.x1=t,a.params.y1=i,a.params.x2=r,a.params.y2=n,a.params.thickness=o,h.J(a.state),a.id}Xs(t,i,r,n,o){const h=this.Gs(w.ELLIPSE);return h.params.x=t,h.params.y=i,h.params.width=r,h.params.height=n,o.J(h.state),h.id}Ws(t,i,r,n,o,h,a){const u=this.Gs(w.ARC);return u.params.x=t,u.params.y=i,u.params.width=r,u.params.height=n,u.params.start=o,u.params.stop=h,a.J(u.state),u.id}Ks(t,i,r,n,o,h,a){const u=this.Gs(w.TRIANGLE);return u.params.x1=t,u.params.y1=i,u.params.x2=r,u.params.y2=n,u.params.x3=o,u.params.y3=h,a.J(u.state),u.id}js(t,i,r,n,o,h,a,u,f,g){const d=this.Gs(w.BEZIER_CURVE);return d.params.x1=t,d.params.y1=i,d.params.cp1x=r,d.params.cp1y=n,d.params.cp2x=o,d.params.cp2y=h,d.params.x2=a,d.params.y2=u,d.params.thickness=f,g.J(d.state),d.id}get length(){return this.Ls}get isEmpty(){return this.Ls===0}Ys(){this.Ls=0}[Symbol.iterator](){let t=0;const i=this.Ls,r=this.Bs;return{next:()=>t<i?{value:r[t++],done:!1}:{value:void 0,done:!0}}}}const _=class _{static Vs(t,i,r=0){var h,a,u,f,g,d,p,y,A,m;const n=i||new Float32Array(_.FLOATS_PER_INSTANCE);let o=r;return n[o++]=t.fs[0],n[o++]=t.fs[1],n[o++]=t.Ls[0],n[o++]=t.Ls[1],n[o++]=t.Y[0],n[o++]=t.Y[1],n[o++]=t.Y[2],n[o++]=t.V[0],n[o++]=t.V[1],n[o++]=t.V[2],n[o++]=t.V[3],n[o++]=t.q[0],n[o++]=t.q[1],n[o++]=t.q[2],n[o++]=t.q[3],n[o++]=t.O[0],n[o++]=t.O[1],n[o++]=t.qs[0],n[o++]=t.qs[1],n[o++]=t.qs[2],n[o++]=t.N,n[o++]=t.X,n[o++]=t.W,n[o++]=t.Zs[0],n[o++]=t.Zs[1],n[o++]=((h=t.Qs)==null?void 0:h[0])||0,n[o++]=((a=t.Qs)==null?void 0:a[1])||0,n[o++]=((u=t.Js)==null?void 0:u[0])||0,n[o++]=((f=t.Js)==null?void 0:f[1])||0,n[o++]=((g=t.te)==null?void 0:g[0])||0,n[o++]=((d=t.te)==null?void 0:d[1])||0,n[o++]=((p=t.se)==null?void 0:p[0])||0,n[o++]=((y=t.se)==null?void 0:y[1])||0,n[o++]=((A=t.ee)==null?void 0:A[0])||0,n[o++]=((m=t.ee)==null?void 0:m[1])||0,n}static ie(t){const i=t.length*_.FLOATS_PER_INSTANCE,r=new Float32Array(i);for(let n=0;n<t.length;n++){const o=n*_.FLOATS_PER_INSTANCE;_.Vs(t[n],r,o)}return r}};c(_,"BYTES_PER_INSTANCE",140),c(_,"FLOATS_PER_INSTANCE",35);let D=_;const U=class U{};c(U,"STRIDE",D.BYTES_PER_INSTANCE),c(U,"ATTRIBUTES",{a_instancePosition:{location:-1,size:2,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:U.STRIDE,offset:0,divisor:1},a_instanceSize:{location:-1,size:2,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:U.STRIDE,offset:8,divisor:1},a_instanceCharacter:{location:-1,size:3,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:U.STRIDE,offset:16,divisor:1},a_instancePrimaryColor:{location:-1,size:4,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:U.STRIDE,offset:28,divisor:1},a_instanceSecondaryColor:{location:-1,size:4,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:U.STRIDE,offset:44,divisor:1},a_instanceRotation:{location:-1,size:2,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:U.STRIDE,offset:60,divisor:1},a_instanceTransform:{location:-1,size:3,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:U.STRIDE,offset:68,divisor:1},a_instanceGlobalRotation:{location:-1,size:3,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:U.STRIDE,offset:80,divisor:1},a_instanceRotationCenter:{location:-1,size:2,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:U.STRIDE,offset:92,divisor:1},a_instanceArcAngles:{location:-1,size:2,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:U.STRIDE,offset:100,divisor:1},a_instanceBezierCP1:{location:-1,size:2,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:U.STRIDE,offset:108,divisor:1},a_instanceBezierCP2:{location:-1,size:2,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:U.STRIDE,offset:116,divisor:1},a_instanceBezierStart:{location:-1,size:2,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:U.STRIDE,offset:124,divisor:1},a_instanceBezierEnd:{location:-1,size:2,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:U.STRIDE,offset:132,divisor:1}});let K=U;class yt{constructor(t,i=1e3,r=1.5){c(this,"gt");c(this,"re",[]);c(this,"ne");c(this,"oe");c(this,"he",null);c(this,"ae",!0);c(this,"ce",0);c(this,"le",new Map);c(this,"ue",null);this.gt=t,this.ne=i,this.oe=r,this.fe()}Es(t){const i=this.re.length;return this.re.push(t),this.ae=!0,i}get count(){return this.re.length}get isEmpty(){return this.re.length===0}clear(){this.re.length=0,this.ae=!0}de(t){if(t<=this.ne)return;const i=Math.ceil(t*this.oe);this.ne=i,this.fe()}fe(){const t=this.gt;this.he&&t.deleteBuffer(this.he),this.he=t.createBuffer();const i=this.ne*D.BYTES_PER_INSTANCE;t.bindBuffer(t.ARRAY_BUFFER,this.he),t.bufferData(t.ARRAY_BUFFER,i,t.DYNAMIC_DRAW),t.bindBuffer(t.ARRAY_BUFFER,null),this.ae=!0,this.ce=0}_e(){if(!this.ae||this.re.length===0)return;const t=this.gt,i=this.re.length;this.de(i),(!this.ue||this.ue.length<i*D.FLOATS_PER_INSTANCE)&&(this.ue=new Float32Array(i*D.FLOATS_PER_INSTANCE));const r=D.ie(this.re);t.bindBuffer(t.ARRAY_BUFFER,this.he),i<=this.ce?t.bufferSubData(t.ARRAY_BUFFER,0,r):t.bufferData(t.ARRAY_BUFFER,r,t.DYNAMIC_DRAW),t.bindBuffer(t.ARRAY_BUFFER,null),this.ae=!1,this.ce=i}pe(t){let i=this.le.get(t);if(!i){i=new Map;const r=this.gt;for(const n in K.ATTRIBUTES){const o=r.getAttribLocation(t,n);o!==-1&&i.set(n,o)}this.le.set(t,i)}return i}Ms(t){if(!this.he||this.re.length===0)return;const i=this.gt,r=t.Zt;this._e();const n=this.pe(r);i.bindBuffer(i.ARRAY_BUFFER,this.he);for(const[o,h]of n){const a=K.ATTRIBUTES[o];a&&(i.enableVertexAttribArray(h),i.vertexAttribPointer(h,a.size,a.type,a.normalized,a.stride,a.offset),i.vertexAttribDivisor(h,a.divisor))}}Ts(t){const i=this.gt,r=this.pe(t.Zt);for(const[,n]of r)i.disableVertexAttribArray(n),i.vertexAttribDivisor(n,0)}Fs(t,i){this.re.length!==0&&this.gt.drawArraysInstanced(t,0,i,this.re.length)}Dt(){this.he&&this.gt.deleteBuffer(this.he)}}class G{constructor(t,i,r,n){c(this,"gt");c(this,"ve");c(this,"me");c(this,"ge");c(this,"Ae",null);this.gt=t,this.ve=i,this.me=r,this.ge=n;const o=this.gt.createBuffer();if(!o)throw Error("Failed to create unit geometry buffer");this.gt.bindBuffer(this.gt.ARRAY_BUFFER,o),this.gt.bufferData(this.gt.ARRAY_BUFFER,this.ge.ye,this.gt.STATIC_DRAW),this.gt.bindBuffer(this.gt.ARRAY_BUFFER,null),this.Ae=o}get type(){return this.me}get unitGeometry(){return this.ge}get unitBuffer(){return this.Ae}get batch(){return this.ve}Ps(){this.ve.clear()}bs(){return!this.ve.isEmpty}Dt(){this.ve.Dt(),this.gt.deleteBuffer(this.Ae)}Ce(t,i,r,n,o){const h=this.we(t,i,r,n,o.N||0,o.X||0,o.W||0);return{fs:[t,i],Ls:[r,n],Y:o.Y||[0,0,0],V:o.V||[1,1,1,1],q:o.q||[0,0,0,1],O:o.O||[0,0],qs:[o.k?1:0,o.K?1:0,o.j?1:0],N:h.radiansX,X:h.radiansY,W:h.radiansZ,Zs:[h.centerX,h.centerY]}}be(t,i){const r=V(this.gt)||[0,0,this.gt.canvas.width,this.gt.canvas.height];return{nx:t/r[2]*2-1,ny:1-i/r[3]*2}}xe(t,i,r){const n=this.be(i,r);t.Zs=[n.nx,n.ny]}we(t,i,r,n,o,h,a){const u=V(this.gt)||[0,0,this.gt.canvas.width,this.gt.canvas.height],f=u[2],g=u[3];return{centerX:(t+r/2)/f*2-1,centerY:1-(i+n/2)/g*2,radiansX:-o*Math.PI/180,radiansY:-h*Math.PI/180,radiansZ:-a*Math.PI/180,aspectRatio:f/g}}}const Et={ye:new Float32Array([0,0,0,0,1,0,1,0,0,1,0,1,0,1,0,1,1,0,1,0,1,1,1,1]),Rs:6,zs:WebGL2RenderingContext.TRIANGLES,_s:16,ds:{fs:{size:2,offset:0},ps:{size:2,offset:8}}};class xt extends G{constructor(t,i){super(t,i,w.RECTANGLE,Et)}Es(t,i){const r=this.Ce(t.x,t.y,t.width,t.height,i);return this.ve.Es(r)}}const wt={ye: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]),Rs:6,zs:WebGL2RenderingContext.TRIANGLES,_s:16,ds:{fs:{size:2,offset:0},ps:{size:2,offset:8}}};class Tt extends G{constructor(t,i){super(t,i,w.LINE,wt)}Es(t,i){const r=t.x2-t.x1,n=t.y2-t.y1,o=Math.hypot(r,n),h=t.thickness||i.I||1,a=t.x1+r/2,u=t.y1+n/2,f=a-o/2,g=u,d=this.Ce(f,g,o,h,i);return this.xe(d,a,u),this.ve.Es(d)}}const Rt={ye:function(l=32){const t=[],i=2*Math.PI/l;for(let r=0;r<l;r++){const n=r*i,o=(r+1)%l*i,h=Math.cos(n),a=Math.sin(n),u=.5*(h+1),f=.5*(a+1),g=Math.cos(o),d=Math.sin(o),p=.5*(g+1),y=.5*(d+1);t.push(0,0,.5,.5,h,a,u,f,g,d,p,y)}return new Float32Array(t)}(32),Rs:96,zs:WebGL2RenderingContext.TRIANGLES,_s:16,ds:{fs:{size:2,offset:0},ps:{size:2,offset:8}}};class bt extends G{constructor(t,i){super(t,i,w.ELLIPSE,Rt)}Es(t,i){const r=this.Ce(t.x,t.y,t.width,t.height,i);return this.xe(r,t.x,t.y),this.ve.Es(r)}}let Ct={ye:function(l){const t=[];for(let i=0;i<l;i++){const r=i/l,n=(i+1)/l;t.push(r,0,r,0,r,1,r,1,n,1,n,1)}return new Float32Array(t)}(32),Rs:96,zs:WebGL2RenderingContext.TRIANGLES,_s:16,ds:{fs:{size:2,offset:0},ps:{size:2,offset:8}}};class Ut extends G{constructor(t,i){super(t,i,w.ARC,Ct)}Es(t,i){const r=t.x-t.width/2,n=t.y-t.height/2,o=t.start*Math.PI/180,h=t.stop*Math.PI/180,a=this.Ce(r,n,t.width,t.height,i);return this.xe(a,t.x,t.y),a.Qs=[o,h],this.ve.Es(a)}}const Ft={ye:new Float32Array([0,0,0,0,1,0,1,0,.5,1,.5,1]),Rs:3,zs:WebGL2RenderingContext.TRIANGLES,_s:16,ds:{fs:{size:2,offset:0},ps:{size:2,offset:8}}};class Bt extends G{constructor(t,i){super(t,i,w.TRIANGLE,Ft)}Es(t,i){const r=Math.min(t.x1,t.x2,t.x3),n=Math.max(t.x1,t.x2,t.x3),o=Math.min(t.y1,t.y2,t.y3),h=n-r,a=Math.max(t.y1,t.y2,t.y3)-o,u=this.Ce(r,o,h,a,i),f=r+.5*h,g=o+a*(1/3);return this.xe(u,f,g),this.ve.Es(u)}}function nt(l,t,i,r,n){const o=1-l,h=o*o,a=l*l;return h*o*t+3*h*l*i+3*o*a*r+a*l*n}const Pt={ye:function(l=16){const t=[];for(let i=0;i<l;i++){const r=i/l,n=(i+1)/l;t.push(r,-.5,r,0),t.push(n,-.5,n,0),t.push(r,.5,r,1),t.push(r,.5,r,1),t.push(n,-.5,n,0),t.push(n,.5,n,1)}return new Float32Array(t)}(16),Rs:96,zs:WebGL2RenderingContext.TRIANGLES,_s:16,ds:{fs:{size:2,offset:0},ps:{size:2,offset:8}}};class Lt extends G{constructor(t,i){super(t,i,w.BEZIER_CURVE,Pt)}Es(t,i){const r=i.I||1,n=nt(.5,t.x1,t.cp1x,t.cp2x,t.x2),o=nt(.5,t.y1,t.cp1y,t.cp2y,t.y2),h=this.Ce(0,0,1,r,i);return this.xe(h,n,o),h.se=[t.x1,t.y1],h.Js=[t.cp1x,t.cp1y],h.te=[t.cp2x,t.cp2y],h.ee=[t.x2,t.y2],this.ve.Es(h)}}class Ot{constructor(t){c(this,"gt");c(this,"Me",null);c(this,"Fe");c(this,"ze",null);c(this,"Re",{});c(this,"Te",null);c(this,"Pe",new Map);c(this,"Se");c(this,"Ee");c(this,"$e");c(this,"G",[]);this.gt=t,this.Fe=new mt(t),this.$e=new st,this.Se=new pt(t,this),this.Ee=new vt,this.Te=t.createBuffer(),k(this.gt,[0,0,this.gt.canvas.width,this.gt.canvas.height])}De(t){let i=this.Pe.get(t);if(i)return i;const r=new yt(this.gt);return i=(0,{[w.RECTANGLE]:()=>new xt(this.gt,r),[w.LINE]:()=>new Tt(this.gt,r),[w.ELLIPSE]:()=>new bt(this.gt,r),[w.ARC]:()=>new Ut(this.gt,r),[w.TRIANGLE]:()=>new Bt(this.gt,r),[w.BEZIER_CURVE]:()=>new Lt(this.gt,r)}[t])(),this.Pe.set(t,i),i}ke(t){this.Me!==t&&(this.Me=t,t.Nt())}cs(t,i){return this.Fe.cs(t,i)}es(){return this.Fe.es()}Pt(){return this.Fe.Pt()}rs(){return this.Fe.rs()}ns(){return this.Fe.ns()}Be(t){this.ze=t,t&&(this.Re={})}Kt(t,i){this.Re[t]=i}Oe(t){Object.assign(this.Re,t)}hs(t){return this.Fe.hs(t)}Le(t,i,r,n,o){const h=this.es(),a={Ue:t.textures[0],Uf:t.textures[1],Ug:t.textures[2],Uh:t.textures[3],Ui:t.textures[4],Uj:[t.width,t.height]};this.Ee.Is(i,r,n,o,h,a,this.$e)}Ge(t,i,r,n,o){const h=this.ns(),a=t.He(),u={Uk:a.texture,Ul:!!a.invert,Um:!!a.flipX,Un:!!a.flipY,Uo:a.charRotation,Up:a.charColorFixed,Uq:a.charColor,Ur:a.cellColorFixed,Us:a.cellColor,Ut:a.backgroundColor,Uu:a.charCount,Uv:a.charList};this.Ee.Is(i,r,n,o,h,u,this.$e)}Ie(t,i,r,n){var m;const o=this.gt,h=o.canvas.width,a=o.canvas.height,u=t/h*2-1,f=(t+r)/h*2-1,g=1-i/a*2,d=1-(i+n)/a*2,p=new Float32Array([u,d,f,d,u,g,f,d,f,g,u,g]);o.bindBuffer(o.ARRAY_BUFFER,this.Te),o.bufferData(o.ARRAY_BUFFER,p,o.DYNAMIC_DRAW);const y=((m=this.Me)==null?void 0:m.Zt)||o.getParameter(o.CURRENT_PROGRAM),A=y?o.getAttribLocation(y,"a_position"):-1;A!==-1&&(o.enableVertexAttribArray(A),o.vertexAttribPointer(A,2,o.FLOAT,!1,8,0)),o.drawArrays(o.TRIANGLES,0,6),A!==-1&&o.disableVertexAttribArray(A)}Ne(t,i,r,n){this.ze?(this.Ee.Is(t,i,r,n,this.ze,{...this.Re},this.$e),this.ze=null,this.Re={}):this.Ee.Hs(t,i,r,n,this.$e)}Xe(t,i,r,n){this.Ee.Ns(t,i,r,n,this.$e.lineWeight,this.$e)}We(t,i,r,n){this.Ee.Xs(t,i,r,n,this.$e)}Ke(t,i,r,n,o,h){this.Ee.Ks(t,i,r,n,o,h,this.$e)}je(t,i,r,n,o,h,a,u){const f=this.$e.lineWeight;this.Ee.js(t,i,r,n,o,h,a,u,f,this.$e)}Ye(t,i,r=1,n={}){return new j(this.gt,t,i,r,n,this,!0)}Ve(t,i,r,n,o,h){this.Ee.Ws(t,i,r,n,o,h,this.$e)}qe(t,i=t,r=t,n=255){this.$e.ft(t,i,r,n),this.Ys(t/255,i/255,r/255,n/255)}Ys(t=0,i=0,r=0,n=0){this.gt.clearColor(t,i,r,n),this.gt.clear(this.gt.COLOR_BUFFER_BIT)}Ze(){this.gt.viewport(0,0,this.gt.canvas.width,this.gt.canvas.height),k(this.gt,[0,0,this.gt.canvas.width,this.gt.canvas.height])}get context(){return this.gt}get state(){return this.$e}Et(t){this.G.push(this.$e),this.$e=t}$t(){const t=this.G.pop();t&&(this.$e=t)}St(t){const i=t,r=V(this.gt)??this.gt.getParameter(this.gt.VIEWPORT),n={shader:i,gl:this.gt,viewport:r};this.ke(i);const o=new Set;for(const h of this.Ee)h.type===w.CUSTOM?o.add(w.RECTANGLE):o.add(h.type);for(const h of o)h!==w.CUSTOM&&this.De(h);this.Se.ws(n,this.Ee,this.Pe),this.Ee.Ys()}Dt(){this.gt.deleteBuffer(this.Te),this.Ee.Ys();for(const t of this.Pe.values())t.Dt();this.Fe.Dt(),this.Se.Dt()}}const C={readShort:(l,t)=>(C.t.uint16[0]=l[t]<<8|l[t+1],C.t.int16[0]),readUshort:(l,t)=>l[t]<<8|l[t+1],readUshorts(l,t,i){const r=[];for(let n=0;n<i;n++)r.push(C.readUshort(l,t+2*n));return r},readUint(l,t){const i=C.t.uint8;return i[3]=l[t],i[2]=l[t+1],i[1]=l[t+2],i[0]=l[t+3],C.t.uint32[0]},readASCII(l,t,i){let r="";for(let n=0;n<i;n++)r+=String.fromCharCode(l[t+n]);return r},writeUshort(l,t,i){l[t]=i>>>8&255,l[t+1]=255&i},writeUint(l,t,i){l[t]=i>>>24&255,l[t+1]=i>>>16&255,l[t+2]=i>>>8&255,l[t+3]=255&i},writeASCII(l,t,i){for(let r=0;r<i.length;r++)l[t+r]=255&i.charCodeAt(r)},t:(()=>{const l=new ArrayBuffer(8);return{uint8:new Uint8Array(l),int16:new Int16Array(l),uint16:new Uint16Array(l),uint32:new Uint32Array(l)}})()};function Z(l){return l+3&-4}function $(l,t,i){const r=t+i;let n=0;const o=C.t;for(let h=t;h<r;h+=4)o.uint8[3]=l[h]||0,o.uint8[2]=l[h+1]||0,o.uint8[1]=l[h+2]||0,o.uint8[0]=l[h+3]||0,n=n+(o.uint32[0]>>>0)>>>0;return n>>>0}class Mt{constructor(t){c(this,"b");c(this,"p",0);c(this,"bitbuf",0);c(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 W(l){let t=32,i=0;for(const a of l)a&&(a<t&&(t=a),a>i&&(i=a));if(i===0)return{min:0,max:0,table:new Map};const r=new Uint32Array(i+1);for(const a of l)a&&r[a]++;const n=new Uint32Array(i+1);let o=0;r[0]=0;for(let a=1;a<=i;a++)o=o+r[a-1]<<1,n[a]=o;const h=new Map;for(let a=0;a<l.length;a++){const u=l[a];if(!u)continue;const f=n[u]++;let g=h.get(u);g||(g=[],h.set(u,g)),g[_t(f,u)]=a}return{min:t,max:i,table:h}}function tt(l,t){let i=0;for(let r=1;r<=t.max;r++){i|=l.readBits(1)<<r-1;const n=t.table.get(r);if(n&&i<n.length){const o=n[i];if(o!==void 0)return o}}throw Error("Invalid Huffman code")}function _t(l,t){let i=0;for(let r=0;r<t;r++)i=i<<1|1&l,l>>>=1;return i>>>0}function St(l){if(l.length<2)throw Error("ZLIB data too short");const t=l[0],i=l[1];if((15&t)!=8)throw Error("Unsupported ZLIB compression method");if(((t<<8)+i)%31!=0)throw Error("Bad ZLIB header check");let r=2;32&i&&(r+=4);const n=[];return function(o,h){const a=[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],g=[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 d=0;for(;!d;){d=o.readBits(1);const p=o.readBits(2);if(p===0){o.alignToByte();const y=o.readBits(16);if((65535&(65535^y))!==o.readBits(16))throw Error("DEFLATE uncompressed LEN/NLEN mismatch");for(let A=0;A<y;A++)h.push(o.readBits(8))}else{if(p!==1&&p!==2)throw Error("Unsupported DEFLATE type");{let y,A;if(p===1){const m=Array(288).fill(0);for(let E=0;E<=143;E++)m[E]=8;for(let E=144;E<=255;E++)m[E]=9;for(let E=256;E<=279;E++)m[E]=7;for(let E=280;E<=287;E++)m[E]=8;y=W(m),A=W(Array(32).fill(5))}else{const m=o.readBits(5)+257,E=o.readBits(5)+1,v=o.readBits(4)+4,T=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],x=Array(19).fill(0);for(let L=0;L<v;L++)x[T[L]]=o.readBits(3);const P=W(x),F=[];for(;F.length<m+E;){const L=tt(o,P);if(L<=15)F.push(L);else if(L===16){const H=o.readBits(2)+3,z=F[F.length-1]||0;for(let gt=0;gt<H;gt++)F.push(z)}else if(L===17){const H=o.readBits(3)+3;for(let z=0;z<H;z++)F.push(0)}else{if(L!==18)throw Error("Invalid code length symbol");{const H=o.readBits(7)+11;for(let z=0;z<H;z++)F.push(0)}}}const B=F.slice(0,m),O=F.slice(m,m+E);y=W(B),A=W(O)}for(;;){const m=tt(o,y);if(m<256)h.push(m);else{if(m===256)break;if(m>256&&m<286){const E=m-257;let v=a[E];const T=u[E];T&&(v+=o.readBits(T));const x=tt(o,A);if(x>=30)throw Error("Invalid distance symbol");let P=f[x];const F=g[x];F&&(P+=o.readBits(F));const B=h.length-P;if(B<0)throw Error("Invalid distance");for(let O=0;O<v;O++)h.push(h[B+O]||0)}else if(m===286||m===287)throw Error("Reserved length symbol")}}}}}}(new Mt(l.subarray(r)),n),new Uint8Array(n)}function Dt(l){const t=C,i=new Uint8Array(l);if(t.readASCII(i,0,4)!=="wOFF")throw Error("Invalid WOFF signature");const r=t.readUint(i,4),n=t.readUshort(i,12),o=t.readUint(i,16),h=[];let a=44;for(let v=0;v<n;v++){const T=t.readASCII(i,a,4),x=t.readUint(i,a+4),P=t.readUint(i,a+8),F=t.readUint(i,a+12),B=t.readUint(i,a+16);h.push({tag:T,offset:x,compLength:P,origLength:F,checksum:B}),a+=20}for(const v of h){const T=new Uint8Array(i.buffer,v.offset,v.compLength);if(v.compLength===v.origLength)v.data=new Uint8Array(T);else if(v.data=St(T),v.data.length!==v.origLength)if(v.data.length<v.origLength){const x=new Uint8Array(v.origLength);x.set(v.data),v.data=x}else v.data=v.data.subarray(0,v.origLength)}const u=n;let f=1,g=0;for(;f<<1<=u;)f<<=1,g++;const d=16*f,p=16*u-d;let y=12+16*u;const A={};for(const v of h)A[v.tag]=y,y=Z(y+v.data.length);const m=new Uint8Array(Math.max(o||0,y));t.writeUint(m,0,r),t.writeUshort(m,4,u),t.writeUshort(m,6,d),t.writeUshort(m,8,g),t.writeUshort(m,10,p);let E=12;for(const v of h){t.writeASCII(m,E,v.tag),E+=4;let T=v.data;if(v.tag==="head"&&T.length>=12){const x=new Uint8Array(T);t.writeUint(x,8,0);const P=$(x,0,Z(x.length));t.writeUint(m,E,P),E+=4}else{const x=$(T,0,Z(T.length));t.writeUint(m,E,x),E+=4}t.writeUint(m,E,A[v.tag]),E+=4,t.writeUint(m,E,v.data.length),E+=4}for(const v of h){const T=A[v.tag];m.set(v.data,T)}if(h.find(v=>v.tag==="head")){const v=A.head,T=function(x,P){const F=C,B=P+8,O=[x[B],x[B+1],x[B+2],x[B+3]];F.writeUint(x,B,0);const L=2981146554-($(x,0,Z(x.length))>>>0)>>>0;return x[B]=O[0],x[B+1]=O[1],x[B+2]=O[2],x[B+3]=O[3],L>>>0}(m,v);t.writeUint(m,v+8,T)}return m.buffer}const It={parseTab(l,t,i){const r={tables:[],ids:{},off:t};l=new Uint8Array(l.buffer,t,i),t=0;const n=C,o=n.readUshort,h=o(l,t+=2);t+=2;const a=[];for(let u=0;u<h;u++){const f=o(l,t),g=o(l,t+=2);t+=2;const d=n.readUint(l,t);t+=4;const p=`p${f}e${g}`;let y=a.indexOf(d);if(y===-1){let A;y=r.tables.length,a.push(d);const m=o(l,d);A=m===4?this.parse4(l,d):m===12?this.parse12(l,d):{format:m},r.tables.push(A)}r.ids[p]=y}return r},parse4(l,t){const i=C,r=i.readUshort,n=i.readUshorts,o=t,h=r(l,t+=2);t+=2;const a=r(l,t+=2)>>>1,u={format:4,searchRange:r(l,t+=2),entrySelector:0,rangeShift:0,endCount:[],startCount:[],idDelta:[],idRangeOffset:[],glyphIdArray:[]};t+=2,u.entrySelector=r(l,t),t+=2,u.rangeShift=r(l,t),t+=2,u.endCount=n(l,t,a),t+=2*a,t+=2,u.startCount=n(l,t,a),t+=2*a;for(let f=0;f<a;f++)u.idDelta.push(i.readShort(l,t)),t+=2;return u.idRangeOffset=n(l,t,a),t+=2*a,u.glyphIdArray=n(l,t,o+h-t>>1),u},parse12(l,t){const i=C.readUint;i(l,t+=4),i(l,t+=4);const r=i(l,t+=4);t+=4;const n=new Uint32Array(3*r);for(let o=0;o<3*r;o+=3)n[o]=i(l,t+(o<<2)),n[o+1]=i(l,t+(o<<2)+4),n[o+2]=i(l,t+(o<<2)+8);return{format:12,groups:n}}},zt={parseTab(l,t,i){const r=C;t+=18;const n=r.readUshort(l,t);t+=2,t+=16;const o=r.readShort(l,t);t+=2;const h=r.readShort(l,t);t+=2;const a=r.readShort(l,t);t+=2;const u=r.readShort(l,t);return t+=2,t+=6,{unitsPerEm:n,xMin:o,yMin:h,xMax:a,yMax:u,indexToLocFormat:r.readShort(l,t)}}},Nt={parseTab(l,t,i){const r=C;t+=4;const n=["ascender","descender","lineGap","advanceWidthMax","minLeftSideBearing","minRightSideBearing","xMaxExtent","caretSlopeRise","caretSlopeRun","caretOffset","res0","res1","res2","res3","metricDataFormat","numberOfHMetrics"],o={};for(let h=0;h<n.length;h++){const a=n[h],u=a==="advanceWidthMax"||a==="numberOfHMetrics"?r.readUshort:r.readShort;o[a]=u(l,t+2*h)}return o}},Gt={parseTab(l,t,i,r){const n=C,o=[],h=[],a=r.maxp.numGlyphs,u=r.hhea.numberOfHMetrics;let f=0,g=0,d=0;for(;d<u;)f=n.readUshort(l,t+(d<<2)),g=n.readShort(l,t+(d<<2)+2),o.push(f),h.push(g),d++;for(;d<a;)o.push(f),h.push(g),d++;return{aWidth:o,lsBearing:h}}},ot={cmap:It,head:zt,hhea:Nt,maxp:{parseTab(l,t,i){const r=C;return r.readUint(l,t),t+=4,{numGlyphs:r.readUshort(l,t)}}},hmtx:Gt,loca:{parseTab(l,t,i,r){const n=C,o=[],h=r.head.indexToLocFormat,a=r.maxp.numGlyphs+1;if(h===0)for(let u=0;u<a;u++)o.push(n.readUshort(l,t+(u<<1))<<1);else if(h===1)for(let u=0;u<a;u++)o.push(n.readUint(l,t+(u<<2)));return o}},glyf:{parseTab(l,t,i,r){const n=[],o=r.maxp.numGlyphs;for(let h=0;h<o;h++)n.push(null);return n},Qe(l,t){const i=C,r=l.Je,n=l.loca;if(n[t]===n[t+1])return null;const o=M.findTable(r,"glyf",l.ti);if(!o)return null;let h=o[0]+n[t];const a={};if(a.noc=i.readShort(r,h),h+=2,a.xMin=i.readShort(r,h),h+=2,a.yMin=i.readShort(r,h),h+=2,a.xMax=i.readShort(r,h),h+=2,a.yMax=i.readShort(r,h),h+=2,a.xMin>=a.xMax||a.yMin>=a.yMax)return null;if(a.noc>0){a.endPts=[];for(let p=0;p<a.noc;p++)a.endPts.push(i.readUshort(r,h)),h+=2;const u=i.readUshort(r,h);if(h+=2,r.length-h<u)return null;h+=u;const f=a.endPts[a.noc-1]+1;a.flags=[];for(let p=0;p<f;p++){const y=r[h];if(h++,a.flags.push(y),8&y){const A=r[h];h++;for(let m=0;m<A;m++)a.flags.push(y),p++}}a.xs=[];for(let p=0;p<f;p++){const y=a.flags[p],A=!!(16&y);2&y?(a.xs.push(A?r[h]:-r[h]),h++):A?a.xs.push(0):(a.xs.push(i.readShort(r,h)),h+=2)}a.ys=[];for(let p=0;p<f;p++){const y=a.flags[p],A=!!(32&y);4&y?(a.ys.push(A?r[h]:-r[h]),h++):A?a.ys.push(0):(a.ys.push(i.readShort(r,h)),h+=2)}let g=0,d=0;for(let p=0;p<f;p++)g+=a.xs[p],d+=a.ys[p],a.xs[p]=g,a.ys[p]=d}else a.parts=[],a.endPts=[],a.flags=[],a.xs=[],a.ys=[];return a}}},M={parse(l){const t=new Uint8Array(l),i=C.readASCII(t,0,4);if(i==="wOFF")l=Dt(l);else if(i==="wOF2")throw Error("WOFF2 is not supported in this build (Brotli + WOFF2 transforms required)");return[((r,n,o,h)=>{const a=ot,u={Je:r,si:n,ti:o};for(const f in a){const g=f,d=M.findTable(r,g,o);if(d){const[p,y]=d;let A=h[p];A==null&&(A=a[g].parseTab(r,p,y,u),h[p]=A),u[g]=A}}return u})(new Uint8Array(l),0,0,{})]},findTable(l,t,i){const r=C,n=r.readUshort(l,i+4);let o=i+12;for(let h=0;h<n;h++){const a=r.readASCII(l,o,4);r.readUint(l,o+4);const u=r.readUint(l,o+8),f=r.readUint(l,o+12);if(a===t)return[u,f];o+=16}return null},T:ot,B:C};class Yt{ei(t){var r;const i=[];return(r=t.cmap)!=null&&r.tables?(t.cmap.tables.forEach(n=>{if(n.format===4){const o=this.ii(n);i.push(...o)}else if(n.format===12){const o=this.ri(n);i.push(...o)}}),[...new Set(i)]):[]}ni(t){return t.filter(i=>this.oi(i))}ii(t){const i=[];if(!(t.startCount&&t.endCount&&t.idRangeOffset&&t.idDelta))return i;for(let r=0;r<t.startCount.length;r++){const n=t.startCount[r],o=t.endCount[r];if(n!==65535||o!==65535){for(let h=n;h<=o;h++)if(this.hi(t,h,r)>0)try{const a=String.fromCodePoint(h);i.push(a)}catch{}}}return i}ri(t){const i=[];if(!t.groups)return i;for(let r=0;r<t.groups.length;r+=3){const n=t.groups[r],o=t.groups[r+1],h=t.groups[r+2];for(let a=n;a<=o;a++)if(h+(a-n)>0)try{const u=String.fromCodePoint(a);i.push(u)}catch{}}return i}hi(t,i,r){if(t.idRangeOffset[r]===0)return i+t.idDelta[r]&65535;{const n=t.idRangeOffset[r]/2+(i-t.startCount[r])-(t.startCount.length-r);if(n>=0&&t.glyphIdArray&&n<t.glyphIdArray.length){const o=t.glyphIdArray[n];if(o!==0)return o+t.idDelta[r]&65535}}return 0}oi(t){const i=t.codePointAt(0)||0;return!(i>=0&&i<=31&&i!==9&&i!==10&&i!==13||i>=127&&i<=159)}}class et{constructor(){c(this,"ai",new Map);c(this,"ci",new Map)}li(t,i){const r=`${this.ui(t)}_${i}`;if(this.ai.has(r))return this.ai.get(r);const n=t.cmap;if(!n||!n.tables)return this.ai.set(r,0),0;let o=0;for(const h of n.tables)if(h.format===4?o=this.fi(i,h):h.format===12&&(o=this.di(i,h)),o>0)break;return this.ai.set(r,o),o}_i(t,i){const r=i.codePointAt(0);return r===void 0?0:this.li(t,r)}pi(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}mi(t,i){const r=i/t.head.unitsPerEm,n=t.hhea.ascender*r,o=t.hhea.descender*r,h=t.hhea.lineGap*r;return{ascender:n,descender:o,lineGap:h,lineHeight:n-o+h,unitsPerEm:t.head.unitsPerEm,scale:r}}gi(){this.ai.clear(),this.ci.clear()}ui(t){return`${t.ti}_${t.Je.length}`}fi(t,i){const r=i.endCount.length;let n=-1;for(let o=0;o<r;o++)if(t<=i.endCount[o]){n=o;break}if(n===-1||t<i.startCount[n])return 0;if(i.idRangeOffset[n]===0)return t+i.idDelta[n]&65535;{const o=i.idRangeOffset[n]/2+(t-i.startCount[n])-(r-n);if(o>=0&&o<i.glyphIdArray.length){const h=i.glyphIdArray[o];return h===0?0:h+i.idDelta[n]&65535}}return 0}di(t,i){const r=i.groups.length/3;for(let n=0;n<r;n++){const o=i.groups[3*n],h=i.groups[3*n+1],a=i.groups[3*n+2];if(t>=o&&t<=h)return a+(t-o)}return 0}}class Xt{constructor(t){c(this,"Ai");c(this,"yi");c(this,"xt");c(this,"Ci");this.xt=t,this.Ci=new et,this.Ai=document.createElement("canvas"),this.yi=this.Ai.getContext("2d",{willReadFrequently:!0,alpha:!0})}createTextureAtlas(t,i,r,n){const o=t.length,h=Math.ceil(Math.sqrt(o)),a=Math.ceil(o/h),u=i.width*h,f=i.height*a,g=typeof n=="object"?n:null;this.wi(u,f),this.bi(t,i,h,r,g);const d=this.xt.Ye(u,f,1,{filter:"nearest"});return d.Tt(this.Ai),{framebuffer:d,columns:h,rows:a}}wi(t,i){this.Ai.width=t,this.Ai.height=i,this.Ai.style.width=t+"px",this.Ai.style.height=i+"px",this.yi.imageSmoothingEnabled=!1,this.Ai.style.imageRendering="pixelated",this.yi.clearRect(0,0,t,i),this.yi.textBaseline="top",this.yi.textAlign="left",this.yi.fillStyle="white"}bi(t,i,r,n,o){const h=n/o.head.unitsPerEm;for(let a=0;a<t.length;a++){const u=a%r,f=Math.floor(a/r),g=t[a].character,d=this.xi(o,g);if(!d)continue;const p=g.codePointAt(0)||0,y=this.Ci.li(o,p),A=this.Mi(o,y)*h,m=u*i.width,E=f*i.height,v=m+.5*i.width,T=E+.5*i.height,x=Math.round(v-.5*i.width),P=Math.round(T-.5*n),F=x+.5*(i.width-A),B=P+o.hhea.ascender*h;this.Fi(d,F,B,h)}}xi(t,i){const r=i.codePointAt(0)||0,n=this.Ci.li(t,r);if(n===0)return null;if(t.glyf&&t.glyf[n]!==null)return t.glyf[n];if(M&&M.T&&M.T.glyf){const o=M.T.glyf.Qe(t,n);return t.glyf&&o&&(t.glyf[n]=o),o}return null}Mi(t,i){const r=t.hmtx;return r&&r.aWidth?i<r.aWidth.length?r.aWidth[i]:r.aWidth[r.aWidth.length-1]:0}Fi(t,i,r,n){if(!t||!t.xs||t.noc===0)return;const{xs:o,ys:h,endPts:a,flags:u}=t;if(!(o&&h&&a&&u))return;this.yi.beginPath();let f=0;for(let g=0;g<a.length;g++){const d=a[g];if(!(d<f)){if(d>=f){const p=i+o[f]*n,y=r-h[f]*n;this.yi.moveTo(p,y);let A=f+1;for(;A<=d;)if(1&u[A]){const m=i+o[A]*n,E=r-h[A]*n;this.yi.lineTo(m,E),A++}else{const m=i+o[A]*n,E=r-h[A]*n;let v=A+1>d?f:A+1;if(1&u[v]){const T=i+o[v]*n,x=r-h[v]*n;this.yi.quadraticCurveTo(m,E,T,x),A=v+1}else{const T=(m+(i+o[v]*n))/2,x=(E+(r-h[v]*n))/2;this.yi.quadraticCurveTo(m,E,T,x),A=v}}this.yi.closePath()}f=d+1}}this.yi.fill()}}class Wt{constructor(){c(this,"zi");this.zi=new et}Ri(t,i,r){let n=0;const o=this.zi.mi(r,i),h=o.lineHeight;for(const a of t){const u=this.zi._i(r,a);if(u===0)continue;const f=this.zi.pi(r,u)*o.scale;n=Math.max(n,f)}return{width:Math.ceil(n),height:Math.ceil(h)}}gi(){this.zi.gi()}}class Ht{constructor(){c(this,"Ci");this.Ci=new et}createCharacterObjects(t,i){return t.map((r,n)=>{const o=r.codePointAt(0)||0,h=this.Ti(n);let a=0;if(i.hmtx&&i.hmtx.aWidth){const u=this.Ci.li(i,o);u>0&&i.hmtx.aWidth[u]!==void 0&&(a=i.hmtx.aWidth[u])}return{character:r,unicode:o,color:h,advanceWidth:a}})}Ti(t){return[t%256/255,Math.floor(t/256)%256/255,Math.floor(t/65536)%256/255]}Pi(t,i){if(!X.m(typeof t=="string","Character must be a string.",{method:"getCharacterColor",providedValue:t}))return[0,0,0];const r=i.find(n=>n.character===t);return r?r.color:[0,0,0]}Si(t,i){return X.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.Pi(r,i)||[0,0,0]):[[0,0,0]]}}class ht{constructor(t,i=16){c(this,"Ei");c(this,"$i",[]);c(this,"Di");c(this,"ki",16);c(this,"Bi",0);c(this,"Oi",0);c(this,"Li",{width:0,height:0});c(this,"Gi");c(this,"Hi");c(this,"Ii");c(this,"Ni");c(this,"Xi");this.ki=i,this.Hi=new Yt,this.Ii=new Xt(t),this.Ni=new Wt,this.Xi=new Ht}async Wi(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,d09GRgABAAAAABbwAAoAAAAAfywAAQABAAAAAAAAAAAAAAAAAAAAAAAAAABjbWFwAAAA9AAAAbsAAAkgIO8lSWdseWYAAAKwAAAOfgAAaLS4ctN0aGVhZAAAETAAAAAsAAAAOCi8/PVoaGVhAAARXAAAABkAAAAkCwEFAmhtdHgAABF4AAAAhQAABAQEAIOAbG9jYQAAEgAAAAKUAAAECAAy54BtYXhwAAAUlAAAABgAAAAgASIAgm5hbWUAABSsAAAB5wAAA6RWz85KT1MvMgAAFpQAAABFAAAAYM+QEyRwb3N0AAAW3AAAABQAAAAgAGkANHja7dRPSFRRFMfx38wdXblw4cJC7M0bz60gWlULGUFctWgR0UIQQkmDyn27kpAQaaEO2jhWJuafiQFtcDJtSqGhiFZtot5x3jzEVQQhlRJcOb0khiRc1+J94R64uw8cOADCAJT/avwZAiIpRCK3/P999KAS9biOSUxhBhlksYjnWMFrvME7vMca1vEF37ANAwkNqYRKqkk1rdLqscqpVVVQryzbils3rJnocHTWPmgfso/ap+0OuysWjlXHogQKUxVVUw3VUh010DE6QXHqph7qpT66TQmaoAxlaZnyVKC39FHHdbNu0e36or6kr4r4TgsTu75HmEcOy76vUPaVsIFNbOHHX74F3/fyD9+A7ztg1//2de76rH18Z8u+AXqwx/dBN5Z9XfqKiKzLqqzIC8nLkixKThZkXuZkVh7KuNyTuzImKRmVO1KxU7ETMtvmu/lqPptPxjOuKXo3vcveYQ+l2lKlO+Im3H632z3vnis+KaaLKc7zM87yHGc4zdM8zkke5H6+xp3cwRe4jVv5DLdwE5/ik3ycj3Cdk3eWnKfOmDPqJJ3hX9sOCvpPC65QcIWCgv5pPwGY9ak7AHja3V07ryQ5FT62axjQaDWsVmiCFQJpA4QINiAgICDYgICAgICAgICAgICAgIAA//AuF9Xlsn2etqv67iIY6apv3+6yj31e33nYA95FiD4uAAHeA7jyLzoA2Paf/Lp/Dun5W8x/Be/AxyCfO79fnj+e25/ZZzlewcM+3wIhwpfwE/Sc9e8YDyLU1ycF5XUD+to+L98O/An8VKQj0lnOtYdM776OJ71fTVC8//N1rLKDGsXl863OjSl5/iyIUu0HjJ+d+uO3rX3rXd33d/DjfR0/h6/n1iK5kWf36Hf2AxpVa6zU7ZLTnt3Q3wN7+tK6MVcBjUP/3vj56diHuT3YxVbKSvl9FdJHeFE4jfmJn2DSSOS9fuJ27SH7umuoL3oLWGOLxh3f2b8bnn/5Ql8n5SEYFD33q/0lKXxwjQfDOZtGgyEz+W8X5txl2zVb9MXO2S8HfD3ncbHousP6WPV2i/R7C+c06HK5ye/lfdl3Bj5Q2qitaLYhgLQWZY+fr/65A9Ly1r10jI783HOffJWZJ6ee8uuB0nmMXeSqWvRz5Dx/tiWf7H0OF+1DuK7vhy4ffP8An/doofqbQNXTqmlNT1c0v4/Eqpy29eBMLHty0PKZoCMW6VqRlDXNwvbD4RW2MYfyjNdXV3LaJuEdKgXcHvX2nHiz27RxHmC9w/qn0AbS+mJbSeX8pO1zlbbogPK7zJxAs3iFtrV8W/LHsHVZvxJ6Rlt7gum1nvjpnHNO4gFJqaoBWOKFVwKqAangorb2j5KKvG5N31O1ownZdhcZH7FuT9nznoxRv4ylrbfvzA9D88GO8uGDtgN0/1O09ntFlv3YhbIf/ml3/dPGqvi6rCMw6jNd53PM07BnK2eCJXmnzxrruI8ObOuxmZ/dxbd5nS77U7I/xaMdLm5/DXzuLLcwXlOLIVQ0an722pou6raGnpp/QYiwR0V5nwDL0Gk/f2TSUalIGOkSvfNAcVNCesV9a2q675FtsVAk4c5GPEfZT27XVqT9PmpxXtVn0577KO3MGrkXs+xKkHZk6EMUS440uO01t+Ark8yGYYjtsleqoPQksLuF0kOd/7TtbZ3XvNalNRNLqK+90fEDTAfy1FWWOBcT9fkTmrExe+viDNccYF+JqHeIbyBtlYxhStbmSc8DSX9/rICoXkkGSMfEJR7QsYAjNlhgn6iNS7T0AtakNnvaJ+W1TeQdeIxHaHtXaMtU+GP3CL5v+2RqHfc5JC6k9DJ6HhFaHHfu9Lc1Z5HlB5JWNOc8NupiUSlpa/7NIx0W0Ra10YcOVWnDfqhodmgI1CM5nrJS1DYKlMmyeAmoZaLrQnmNSRxAV7qZ0u0sr2Q8WbzUrRivE200nZ+x371Yj+idQH+bsOAFD16woZXuheBJI85UYyA+Ht17bJsTKLHHG+tuQpJX/AGX4eu2lq+vh8gQPgaLUpk1h7fcb1SJ4LEnGb+rdUHRHw96riVV36L5EgdqHNByqCTy82hnkrSSk3k5KTNWnJZ/buTlOvQngiceAkd4OHPz0K+tdOmGUYwJht2kcuBEntSRPOmZfyc40tFqD40IQeb2goGZvKIVzW4G5DMcQ4qOY3zVRzpmo1sMg+U1VemumtLofjFeCcxqJIUnM2vJuQeCHiOOwx4ss7pF6u+PtXxmZApbjCti22JtA+hVxUw7z6Xs2sSzMkeklSLPfwalYkjjt/0bHye4gKkXeaig5MpILVRiAd1vCrtP5Aj5uaN2PF1zxrE7koOgaY2PPL9FkccCKlprUZGr+zr0tw56iCvwGBTs+MFFxVbWeTaCQTj2WCBM1NnoWNxOBpBZU8f00hPsFDr+15wPevNsJG4IN+OGwKyWzKnW8S/GDUHZOd+44SsvbDvCuhYUTQSaQSFeWtoR4Xc833VimVzRvgm58QwZFQTthQ+awgQTeuVI7gLrF638Yixi+ot4RVZ5niDPFxBediyXNj++jUWDgkU3Zc96fDKwv4iiylyA4nalMkLX9C1hf24DNNkZyNDkflOPF4BqwdYbv1vLG9VX03W96PVKiCq+A01i5utY2d9YfSMP0qvQ7eFQUHSKvNfpCl21nqNafqf1UQksqfVe1PEPPNiJpY81iZoP119ZTUHojdpseMYqec5zr/2Jgo695rmycZWzSgOpXzMpbFrHu1Zmq/xA8pX3cgEQZU1/YzaexuQbXIoxF9THdaEzz9VaE5fgNVIPR/sIS8fQyipam9JXqHdOtPEIRllqzP7Ewh9063Z2IYH+GiLNUPFXJIcEM4RYc7bEkjwQL4/1fx+aHL8/62Of5vo3y+p92QX2fh18zrNFcPX9sfZAdBDZu8vxCM4clX31Qr9RrLPkDDDau8v8LZRar2N8lSOj1NGsLJeBZam1TIuwpzwepL3CJAvyANsPnj3BAzsD3a5X6ydEaZUSs50b7g2JrYcyG2lRL+xl+jD+Gfod33w82P0FTuYREa3c70CRS82XCtxIueJHXuIMB6tMt+x7lf7m5U4tyK9L3smuLrxqDxYPI30rYzk2h2NzgPXqAvPrQdqUxvdWF2zVwDrHCq0RoI0Hcrzcn9D8BMxYEMszZBzooqa/jsTxSeTthXTm9FC2n+pYEh8uVqyL9436quMD6pnK7njZM6msy4uYsunVquBSi4clVn8gblYc96TFyF04ll2oqCB300cDIbPxrZoqXZ1DHWvNh2irrNxstSaZYa2VB333tOr9mRcx7ETmXKmSFz6GkidstKjZFE8qIX26eG8KoS/b9uij9GFOiwFIVj5NyErT8rZGstdmD4lc4/xaNevd1uwOPCLX7Ems2TTc81MrUVmzyqdOr1v1PCPat9jmQfUYJEEbzNCSse4DevSYCIXal+bDCC3I2+EeTFKd7ltnFNN0sGLIfRcGfSWKD0BPANWTQIqcNtsaAON/1A/BeywPGhybs2ZEA1sH9FbgDMpTQx5L5k4fN/RR8lBHvif2ftB7oa8isVdrdWDxp/Hp6N8MsdUgqdS0M12EZrhC7TpJZZLZOZelRdeDUyffq3s6xPhztK4Xd9h6f4pIieNu4lI/jEN1XEMjbafK6lry/jkOYedyVMyp2vaHGlM8zBjCkdi28NdrNldgLa/a0orYtN6OwoMh7vPAsxb9eNTDrOdJBWuXsb6En8Evb5yTrJw1Y1XTHnmCFNtPkhHnuN+8QwHGi3JUJf4zeaTJsBpFdnik5V4fZq510ifEHMf7M55f2fteR1DJ73gzf4vyO42Or3Z5mZcWdlY6wb3sRvd0olKfGeaCWm5yGEtDwzLH6yPS95wmcVb2BBrYzig5tGb7Bvb5fkyfvW2nRhlxF3cyz8qGOF//eVLXq7P4oQTop9UASTKPr91h1zu5wu753DbqtXUO8pOT6wzdnQfWn2X3Csr5ktxP4FUmlBHHPThBO0mQ6wTFVxbM5mPCeXWP7ha4YDf8BdvAeaGd/XntlgHlW2eMFAR2CBPYAQzPrGeVy1ieYCOQdtpXGZyss4F2rkr5W8tJh06NTd/HGi+1vbiPN6JTeSfP5k0ihAhRQwgad9wQ1dhoKAntU87DfZy/K8SuEsPg82VQRU5xUGU+ZVrp8SMYtOHiwFC+Z1jLG2dqRuhAw01cZ2qeXBk/ROjaAS1TIuKHVp+Fi5YMrHqqahlY3YbJ0E/N2uUTq/0Cvt717Vfwa/gNfAO/hd/B7+EP8Ef4E/wZ/gJ/hb/B3+Ef8E/4F/z7nla+5T+Afp1wHdQRH/F/+/lF6VrSbuP4v/18VHMVmm7q6TX/Czha0mxJrf+YyNyOfRcYeKSap3+b8UufB8GnJSdec6Iu+toF6nHkaeZxvJ5h4PVgj3ILMz5teArdxnr8/PPoCXqiuvR91zoh2pvS8b0SqUD1FLPubHPaK9Q5lU+GzwI3PgfCOsB9NORgqm5OqfVxLMd1L9+A/s2s+0/0a93MTd3NNRHapruGQLnhZTSzpBMuYFNaz7N5RffPo/MnV2zac3wfRX6Vng0As1cTmE5M38U0eS+H0rvZxXtg6460jlQTZ3Snxw+pO9TKz+mOB5vffTs6umGj+UjMb3/QKfndvlP47UsVAO9Drzo11h+T/rF09Po0st98jHsKh31Ruj2UnbYWLuEd/pM9wOwpZ+KqccfWNZsc4F6c3jtf2ou7Ca6akqXRPThzsadua+/4hq7vgmn6uqux6bXw6AjnLMJbXMM5Ixwi8mR2rc3AOfg2nrs4zZlnDFaChbCtk/bwilwMfBxc0iMYy0MX40x2o/ft9D2Znn9Kl+3MO90HUb747jnzjpyCKVeTuij6DllsctyiUzXN0dgE9We1yK54WBffFqtew9TXpbYfy7dILWH/SXxmqeg4zlvRsZfIbuFnic0SHfRtfj4vsaVq532jl/QpYBykzpe/jec7n1uOmhuETi2xzM5vfy01xQC0vkp6PiKpDd07x6qcUc719K0A1YZjpvLivftqNpzxV/tDtXPTWFrbaowzXj+czsG+nmMt/bQspzj7fnvxeeuG4O/s/Xe412VW3+5VuPT+EV97/r++14Gc3ZvQRHrXMz91IrWHZ4FnK7WOVGjJPfAO3R0BczdLKuevQd5LPVsXd/X8PK6Ll2jK0/NM7P4V1PuI51FvsEMV+KhV4T2+22IQF85a0FlLWXs/IHTOX1B5CGCeEDh6V2ZiTK+eee/dnNjOa2xXz2zndd7sq+XYEZ/Gx/exoK5PoOceWNdnef9W9KCT9EYXqkrPxuhC9GA7faMXpHef1smLTDe1qaDY1N4ozLI4fqsHlwpf+3Cu9F1E/Z4AajG3V8430/6bCdq8QQs9b4OqJyQa1+6BACWaTPI8zrROa//7QGJ19U4tHeTTtePNqu3PnVhXJFSjzZFz4eo3Ndqidi/O6J5Z7X+VsS3cYki51T35Iv+merFeuGe69cbJM3Jq1Fn4kUA5rze4o9CRs22iy5jMsYLMS8g5/wOjbDW/AAB42mNgZGBgAOIzT9tXxvPbfGVgYGEAgZokCXVkmgUizsHABFLNwAAACJYG1HjaY2BkYGBhAAEIyc7AwMiAAhgZAQHPABQAAAB42r1TwRaAIAgD88P59PRA0hxUlw578mBDQOwi0i+oDUzb7nC/xyKH8SuwHH/jSx83jnE745c1RO44G9E1WTE14AQtYvKO6PN6BXRW5EONgCazSS4VXiere+sp7F7cQeSp7Pe2YkaxN7fVFhg/8z/1hfnfaBXnZ8k7wNzp/y13+wRWwErCAAAAeNpl0ylUVVEUBuCtoiKgoiIzAjIIMj9mZBZYMsmMjwcuBhEIBoPBYDAYDAaDwWA0GAwGgsFgMBgMBoPBYDAYDAaDweBnlrX+9e6955x/2oeI//664HbEgTL4HnHwZ8Sh1/AlIm0W3kUc3oN9+BFxJBva4E3E0SvwLCIdR/qniGO98Coiw3vG04hMv5n/fj9GZBUD3iz8xx9FnMiBJxEn0+E+/IrIppNt/VQzvITfEadH4HnEmUG4BV8jchaBn7NZgCMXdy7uXGfzeMjjKZ/PfBwF9hTYU/AhotC5QtpFtIt4K7oLnyOK6RXTKP4TUcJDCe5zNXAHcJTiKOWxlEZZPeAo00U5b+XyltM9vw24KvBWyFzpTOWLiCr5qu6BPdV0qx+Cni+sAc4a3mvw1nqu/RZxsRJkrEsDWeo2wAzq8dY/iGgwpwbfGvTdaA6NOmnUb5PnpiTY00S3SXfN/DU/BustdFrMq8VagqcE/YReEjK3+t4qayuPbTTbdNH2PqJdL+06a5e33VoHjg7vHdY7cXTK2ekedPHWha+b5279ddPo1ndPPuDrkbkH3yX5e/XXy3OvzH34+sy132+//P14B/AO6GuA3qBOB3U6hH/It2Haw2Y2rI9hHV6WdcSsR6eAl1GZx3Qwpr9xcxv3PqGDCbyTvE3KM+muT+lwypkpe6bNaZqfaX6v8j7D8wyNGbwzbyNmdTMrzxxfc9bndDFn5vM8zds37x4smMeCHhf5WTKHJb0uuc/L/C7bs4zrGr2kO5m0ntRZkv8VfazIkvI9RSelg5ReUrKvOrvqHq7p4Lr5retx3fcN/5Mb+Dfs25RpE/8mji0etqzfwLHteZufmzrZobfj/K5ednna0/fe/l+Pca7seNpjYGRgYGRkaGBQYAABJgY0AAAP+ACmeNp1ksFO20AQhv8NgRJaUApSy61LDxVc4uAjNxoJReoNKdCrYy8hZb1rrTcIuPMKfaY+QM899RH6AP3tDJEKqlcefzvzz/xrywD21ScoLK9N3ktW5E3hDl6hL7zG7HvhLrMfhNfxGonwBjUnwj2uz8JbzH4R3sZbPArvIMV34T28wQ+6qG6Puz5+Civyb+EOO/4Ir6GvOsJdaLUrvI53KhXeoGYs3MOu+iq8hai+CW/jo/olvIOiA+E97HeKw/xIp8M0nYQ6O/MunpvZwmbhafv01JK/MKGee6ePB8N/JCFzN6dO+8o4bee5cbnRM+NMyKyuFqHytdHR3MXSF0ZfNQOn93rVORoNm4l64ua3NMjsdYxVfZIkeTBZZC73ZeldPfBhllSLKR0KX2ZzlzyY4BO2JmNjrdeXPtjiAIfIcQTNbz/knWKCgBoZzuDhEHEOgxkWsMyFF9Xne/1Mf8Fdo5i3dY1jDOjz/ymB0eEGp63ao2J/Q5YT8pabqOnQsGn1lvuKjoHRc05Tj4x3jCUzRZu5Wp1winvGl54jruHqjI3C0fVW3qDxuWZ/pEvNPzjhylkxrETR5fQoW09HzYDPwJMm7emm8g5Fq8nIjpWHdronLV0TjJmxXJ4nuGwnWPYcAH8BoeumrAB42mNgYmFgnMDAysDCxMDEAAIQGoiNGc6A+CwMENDAwNDNwFDwGMpliHT00WNwYFBQy4aogJCMgSCSGcJTYGAAAEBYBpIAAAB42mNgZoCANAZjIMnIgAYADecAng==")).arrayBuffer();await this.Ki(i),this.Ei=M.parse(i)[0],await this.ji()}Yi(t){if(t===void 0)return this.ki;this.ki=t,this.Li=this.Ni.Ri(this.$i.map(r=>r.character),this.ki,this.Ei);const i=this.Ii.createTextureAtlas(this.$i,this.Li,this.ki,this.Ei);this.Di=i.framebuffer,this.Bi=i.columns,this.Oi=i.rows}async Vi(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.Ki(r);const n=M.parse(r);if(!n||n.length===0)throw Error("Failed to parse font file");this.Ei=n[0],await this.ji()}catch(i){throw new R("Failed to load font: "+(i instanceof Error?i.message:"Unknown error"),i)}}async Ki(t){const i=Date.now();this.Gi=new FontFace("CustomFont_"+i,t),await this.Gi.load(),document.fonts.add(this.Gi)}async ji(){const t=this.Hi.ei(this.Ei),i=this.Hi.ni(t);this.$i=this.Xi.createCharacterObjects(i,this.Ei),this.Li=this.Ni.Ri(i,this.ki,this.Ei);const r=this.Ii.createTextureAtlas(this.$i,this.Li,this.ki,this.Ei);this.Di=r.framebuffer,this.Bi=r.columns,this.Oi=r.rows}Pi(t){return this.Xi.Pi(t,this.$i)}Si(t){return this.Xi.Si(t,this.$i)}Dt(){this.Di.Dt(),document.fonts.delete(this.Gi)}get fontFramebuffer(){return this.Di}get characters(){return this.$i}get textureColumns(){return this.Bi}get textureRows(){return this.Oi}get maxGlyphDimensions(){return this.Li}get fontSize(){return this.ki}get font(){return this.Ei}}class at{constructor(t,i,r){c(this,"qi");c(this,"Zi");c(this,"dt");c(this,"_t");c(this,"Qi");c(this,"Ji");c(this,"tr");c(this,"sr");c(this,"er");this.tr=t,this.sr=i,this.er=r,this.ir()}ir(){this.qi=Math.floor(this.tr.width/this.sr),this.Zi=Math.floor(this.tr.height/this.er),this.dt=this.qi*this.sr,this._t=this.Zi*this.er,this.Qi=Math.floor((this.tr.width-this.dt)/2),this.Ji=Math.floor((this.tr.height-this._t)/2)}rr(t,i){this.sr=t,this.er=i,this.ir()}get cellWidth(){return this.sr}get cellHeight(){return this.er}get cols(){return this.qi}get rows(){return this.Zi}get width(){return this.dt}get height(){return this._t}get offsetX(){return this.Qi}get offsetY(){return this.Ji}}class ct{constructor(t={}){c(this,"tr");c(this,"nr",null);c(this,"hr",!1);c(this,"ar");c(this,"cr");this.hr=t.overlay??!1,this.hr&&t.canvas?(this.nr=t.canvas,this.tr=this.lr(),this.cr=!0,this.ur()):t.canvas?(this.tr=t.canvas,this.cr=!1):(this.tr=this.dr(t.width,t.height),this.cr=!0),this.tr.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}lr(){const t=document.createElement("canvas");t.className="textmodeCanvas",t.style.imageRendering="pixelated";const i=this.nr.getBoundingClientRect();let r=Math.round(i.width),n=Math.round(i.height);if(this.nr instanceof HTMLVideoElement){const a=this.nr;(r===0||n===0)&&a.videoWidth>0&&a.videoHeight>0&&(r=a.videoWidth,n=a.videoHeight)}t.width=r,t.height=n,t.style.position="absolute",t.style.pointerEvents="none";const o=window.getComputedStyle(this.nr);let h=parseInt(o.zIndex||"0",10);return isNaN(h)&&(h=0),t.style.zIndex=""+(h+1),t}ur(){var t;this._r(),(t=this.nr.parentNode)==null||t.insertBefore(this.tr,this.nr.nextSibling),window.ResizeObserver&&(this.ar=new ResizeObserver(()=>{this.pr()}),this.ar.observe(this.nr)),window.addEventListener("resize",()=>{this.pr()})}_r(){if(!this.nr)return;const t=this.nr.getBoundingClientRect();let i=this.nr.offsetParent;if(i&&i!==document.body){const r=i.getBoundingClientRect();this.tr.style.top=t.top-r.top+"px",this.tr.style.left=t.left-r.left+"px"}else this.tr.style.top=t.top+window.scrollY+"px",this.tr.style.left=t.left+window.scrollX+"px"}pr(t,i){if(this.hr){const r=this.nr.getBoundingClientRect();let n=Math.round(r.width),o=Math.round(r.height);if(this.nr instanceof HTMLVideoElement){const h=this.nr;(n===0||o===0)&&h.videoWidth>0&&h.videoHeight>0&&(n=h.videoWidth,o=h.videoHeight)}this.tr.width=n,this.tr.height=o,this._r()}else this.tr.width=t??this.tr.width,this.tr.height=i??this.tr.height}vr(){const t=this.tr.getContext("webgl2",{alpha:!0,premultipliedAlpha:!1,preserveDrawingBuffer:!0,antialias:!1,depth:!1,stencil:!1,powerPreference:"high-performance"});if(!t)throw new R("`textmode.js` requires WebGL2 support.");return t}Dt(){this.ar&&this.ar.disconnect();const t=this.tr.getContext("webgl")||this.tr.getContext("webgl2");if(t){const i=t.getExtension("WEBGL_lose_context");i&&i.loseContext()}this.cr&&this.tr.parentNode&&this.tr.parentNode.removeChild(this.tr)}get canvas(){return this.tr}get targetCanvas(){return this.nr}get width(){return this.tr.width}get height(){return this.tr.height}}class Y{constructor(t,i,r,n){c(this,"mr");c(this,"dt");c(this,"_t");c(this,"gt");c(this,"k",0);c(this,"K",0);c(this,"j",0);c(this,"O",[0,0]);c(this,"gr","sampled");c(this,"Ar","fixed");c(this,"V",[1,1,1,1]);c(this,"q",[0,0,0,1]);c(this,"yr",[0,0,0,1]);c(this,"Cr",[[.1,0,0]]);c(this,"wr");this.gt=t,this.mr=i,this.dt=r,this._t=n}Dt(){this.gt.deleteTexture(this.mr)}br(t){return typeof t=="boolean"?t?1:0:(t==null?0:Number(t))>0?1:0}invert(t=!0){return this.k=this.br(t),this}flipX(t=!0){return this.K=this.br(t),this}flipY(t=!0){return this.j=this.br(t),this}charRotation(t){const i=255*t/360,r=Math.floor(i)/255,n=Math.round(i-Math.floor(i));return this.O=[r,n],this}He(){return{texture:this.mr,invert:this.k,flipX:this.K,flipY:this.j,charRotation:this.O,charColorFixed:this.gr==="fixed",charColor:this.V,cellColorFixed:this.Ar==="fixed",cellColor:this.q,backgroundColor:this.yr,charCount:this.Cr.length,charList:this.Cr}}charColorMode(t){return this.gr=t,this}cellColorMode(t){return this.Ar=t,this}charColor(t,i,r,n){return this.V=[(t??0)/255,(i??t??0)/255,(r??t??0)/255,(n??255)/255],this}cellColor(t,i,r,n){return this.q=[(t??0)/255,(i??t??0)/255,(r??t??0)/255,(n??255)/255],this}background(t,i,r,n){return this.yr=[(t??0)/255,(i??t??0)/255,(r??t??0)/255,(n??255)/255],this}characters(t){const i=this.wr(t).filter(r=>Array.isArray(r)).slice(0,64);return this.Cr=i,this}static Mr(t,i,r){const n=t.context,o=n.createTexture();n.bindTexture(n.TEXTURE_2D,o),n.pixelStorei(n.UNPACK_FLIP_Y_WEBGL,1),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MIN_FILTER,n.NEAREST),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MAG_FILTER,n.NEAREST),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_S,n.CLAMP_TO_EDGE),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_T,n.CLAMP_TO_EDGE),n.texImage2D(n.TEXTURE_2D,0,n.RGBA,n.RGBA,n.UNSIGNED_BYTE,i),n.bindTexture(n.TEXTURE_2D,null);const h=i.naturalWidth??i.width??i.videoWidth??0,a=i.naturalHeight??i.height??i.videoHeight??0,u=new Y(n,o,h,a);return u.wr=r,u}get texture(){return this.mr}get width(){return this.dt}get height(){return this._t}}class kt{constructor(t=60){c(this,"Fr");c(this,"zr");c(this,"Rr",null);c(this,"Tr",0);c(this,"Pr",!0);c(this,"Sr",0);c(this,"Er",0);c(this,"$r",[]);c(this,"Dr",10);c(this,"kr",0);this.Fr=t,this.zr=1e3/t}start(t){if(!this.Pr)return;this.Tr=performance.now();const i=r=>{if(!this.Pr)return void(this.Rr=null);const n=r-this.Tr;n>=this.zr&&(t(),this.Tr=r-n%this.zr),this.Pr&&(this.Rr=requestAnimationFrame(i))};this.Rr=requestAnimationFrame(i)}stop(){this.Rr&&(cancelAnimationFrame(this.Rr),this.Rr=null)}pause(){this.Pr&&(this.Pr=!1,this.stop())}resume(t){this.Pr||(this.Pr=!0,this.start(t))}frameRate(t,i){if(t===void 0)return this.Sr;this.Fr=t,this.zr=1e3/t,this.Pr&&i&&(this.stop(),this.start(i))}measureFrameRate(){const t=performance.now();if(this.Er>0){const i=t-this.Er;this.$r.push(i),this.$r.length>this.Dr&&this.$r.shift();const r=this.$r.reduce((n,o)=>n+o,0)/this.$r.length;this.Sr=1e3/r}this.Er=t}get isLooping(){return this.Pr}get frameRateLimit(){return this.Fr}get currentFrameRate(){return this.Sr}get frameCount(){return this.kr}set frameCount(t){this.kr=t}incrementFrame(){this.kr++}resetFrameCount(){this.kr=0}}class lt{constructor(t){c(this,"tr");c(this,"Br");c(this,"Or",{x:-1,y:-1});c(this,"Lr",{x:-1,y:-1});c(this,"Gr",null);c(this,"Hr",0);c(this,"Ir");c(this,"Nr");c(this,"Xr");c(this,"Wr");c(this,"Kr");c(this,"jr");c(this,"Yr",!1);c(this,"Vr");c(this,"qr");c(this,"Zr");c(this,"Qr");c(this,"Jr");this.tr=t}tn(t){const i=performance.now()+Math.max(0,t);i>this.Hr&&(this.Hr=i)}sn(){return performance.now()<this.Hr}en(t){const i=this.tr.canvas;i.style.cursor=t==null||t===""?"":t}Wi(t){this.Br=t,this.rn()}nn(){if(this.Yr)return;const t=this.tr.canvas;this.Ir=i=>{this.hn(i),this.an(i)},this.Nr=()=>{this.Lr={...this.Or},this.Or.x=-1,this.Or.y=-1,this.Gr=null},this.Xr=i=>{this.hn(i),this.cn(i)},this.Wr=i=>{this.hn(i),this.ln(i)},this.Kr=i=>{this.hn(i),this.un(i)},this.jr=i=>{this.hn(i),this.fn(i)},t.addEventListener("mousemove",this.Ir,{passive:!0}),t.addEventListener("mouseleave",this.Nr,{passive:!0}),t.addEventListener("mousedown",this.Xr,{passive:!0}),t.addEventListener("mouseup",this.Wr,{passive:!0}),t.addEventListener("click",this.Kr,{passive:!0}),t.addEventListener("wheel",this.jr,{passive:!1}),this.Yr=!0}dn(){if(!this.Yr)return;const t=this.tr.canvas;t.removeEventListener("mousemove",this.Ir),t.removeEventListener("mouseleave",this.Nr),t.removeEventListener("mousedown",this.Xr),t.removeEventListener("mouseup",this.Wr),t.removeEventListener("click",this.Kr),t.removeEventListener("wheel",this.jr),this.Yr=!1}rn(){if(this.Yr)try{if(this.Gr){const t=new MouseEvent("mousemove",{clientX:this.Gr.x,clientY:this.Gr.y,bubbles:!1,cancelable:!1});this.hn(t)}else this.Or.x!==-1&&this.Or.y!==-1&&(this.Or.x>=this.Br.cols||this.Or.y>=this.Br.rows)&&(this.Or.x=-1,this.Or.y=-1)}catch{this.Or.x=-1,this.Or.y=-1}}_n(t){this.Vr=t}pn(t){this.qr=t}vn(t){this.Zr=t}mn(t){this.Qr=t}gn(t){this.Jr=t}An(){return{x:this.Or.x,y:this.Or.y}}an(t){if(this.Qr&&!this.sn()){const i={position:{...this.Or},previousPosition:{...this.Lr},originalEvent:t};this.Qr(i)}}cn(t){if(this.qr&&!this.sn()){const i={position:{...this.Or},previousPosition:{...this.Lr},button:t.button,originalEvent:t};this.qr(i)}}ln(t){if(this.Zr&&!this.sn()){const i={position:{...this.Or},previousPosition:{...this.Lr},button:t.button,originalEvent:t};this.Zr(i)}}un(t){if(this.Vr&&!this.sn()){const i={position:{...this.Or},previousPosition:{...this.Lr},button:t.button,originalEvent:t};this.Vr(i)}}fn(t){if(this.Jr&&!this.sn()){const i={position:{...this.Or},previousPosition:{...this.Lr},delta:{x:t.deltaX,y:t.deltaY},originalEvent:t};this.Jr(i)}}hn(t){const i=this.tr.canvas;this.Lr={...this.Or},this.Gr={x:t.clientX,y:t.clientY};const r=i.getBoundingClientRect(),n=t.clientX-r.left,o=t.clientY-r.top,h=i.width/r.width,a=o*(i.height/r.height),u=n*h-this.Br.offsetX,f=a-this.Br.offsetY,g=Math.floor(u/this.Br.cellWidth),d=Math.floor(f/this.Br.cellHeight);g>=0&&g<this.Br.cols&&d>=0&&d<this.Br.rows?(this.Or.x=g,this.Or.y=d):(this.Or.x=-1,this.Or.y=-1)}}const Vt=Object.freeze(Object.defineProperty({__proto__:null,MouseManager:lt},Symbol.toStringTag,{value:"Module"}));class ut{constructor(){c(this,"yn",new Map);c(this,"Cn",null);c(this,"wn",null);c(this,"bn");c(this,"xn");c(this,"Yr",!1);c(this,"Mn");c(this,"Fn");c(this,"zn",{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"})}nn(){this.Yr||(this.bn=t=>{this.Rn(t)},this.xn=t=>{this.Tn(t)},window.addEventListener("keydown",this.bn,{passive:!1}),window.addEventListener("keyup",this.xn,{passive:!1}),this.Yr=!0)}dn(){this.Yr&&(window.removeEventListener("keydown",this.bn),window.removeEventListener("keyup",this.xn),this.Yr=!1,this.yn.clear(),this.Cn=null,this.wn=null)}pn(t){this.Mn=t}vn(t){this.Fn=t}Pn(t){const i=this.Sn(t),r=this.yn.get(t)||this.yn.get(i);return(r==null?void 0:r.isPressed)||!1}En(){return this.Cn}$n(){return this.wn}Dn(){const t=[];for(const[i,r]of this.yn)r.isPressed&&t.push(i);return t}kn(){return{ctrl:this.Pn("Control"),shift:this.Pn("Shift"),alt:this.Pn("Alt"),meta:this.Pn("Meta")}}Bn(){this.yn.clear(),this.Cn=null,this.wn=null}Rn(t){const i=t.key,r=Date.now();this.yn.has(i)||this.yn.set(i,{isPressed:!1,lastPressTime:0,lastReleaseTime:0});const n=this.yn.get(i);if(!n.isPressed&&(n.isPressed=!0,n.lastPressTime=r,this.Cn=i,this.Mn)){const o={key:i,keyCode:t.keyCode,ctrlKey:t.ctrlKey,shiftKey:t.shiftKey,altKey:t.altKey,metaKey:t.metaKey,isPressed:!0,originalEvent:t};this.Mn(o)}}Tn(t){const i=t.key,r=Date.now();this.yn.has(i)||this.yn.set(i,{isPressed:!1,lastPressTime:0,lastReleaseTime:0});const n=this.yn.get(i);if(n.isPressed=!1,n.lastReleaseTime=r,this.wn=i,this.Fn){const o={key:i,keyCode:t.keyCode,ctrlKey:t.ctrlKey,shiftKey:t.shiftKey,altKey:t.altKey,metaKey:t.metaKey,isPressed:!1,originalEvent:t};this.Fn(o)}}Sn(t){return this.zn[t]||t.toLowerCase()}}const jt=Object.freeze(Object.defineProperty({__proto__:null,KeyboardManager:ut},Symbol.toStringTag,{value:"Module"}));class ft{constructor(t,i){c(this,"tr");c(this,"On");c(this,"Br");c(this,"Ln",new Map);c(this,"Gn",new Map);c(this,"Hn",new Map);c(this,"In",null);c(this,"Nn");c(this,"Xn");c(this,"Wn");c(this,"Kn");c(this,"jn");c(this,"Yn");c(this,"Yr",!1);c(this,"Vn");c(this,"qn");c(this,"Zn");c(this,"Qn");c(this,"Jn");c(this,"so");c(this,"eo");c(this,"io");c(this,"ro");c(this,"no");c(this,"oo",320);c(this,"ho",350);c(this,"ao",10);c(this,"co",550);c(this,"lo",14);c(this,"uo",48);c(this,"fo",650);c(this,"do",.02);c(this,"_o",2);c(this,"po",600);c(this,"vo",0);c(this,"mo",null);this.tr=t,this.On=i;const r=this.tr.canvas;this.Nn=r.style.touchAction,this.Xn=r.style.userSelect,r.style.touchAction||(r.style.touchAction="none"),r.style.userSelect||(r.style.userSelect="none")}Wi(t){this.Br=t,this.Ao()}nn(){if(this.Yr)return;const t=this.tr.canvas;this.Wn=i=>{this.yo(i)},this.Kn=i=>{this.Co(i)},this.jn=i=>{this.wo(i)},this.Yn=i=>{this.bo(i)},t.addEventListener("touchstart",this.Wn,{passive:!1}),t.addEventListener("touchmove",this.Kn,{passive:!1}),t.addEventListener("touchend",this.jn,{passive:!1}),t.addEventListener("touchcancel",this.Yn,{passive:!1}),this.Yr=!0}dn(){if(!this.Yr)return;const t=this.tr.canvas;t.removeEventListener("touchstart",this.Wn),t.removeEventListener("touchmove",this.Kn),t.removeEventListener("touchend",this.jn),t.removeEventListener("touchcancel",this.Yn),this.Yr=!1,this.In=null,this.Ln.clear(),this.Gn.clear(),this.Hn.forEach(i=>{i.longPressTimer!==null&&window.clearTimeout(i.longPressTimer)}),this.Hn.clear(),this.mo=null,this.vo=0,t.style.touchAction=this.Nn,t.style.userSelect=this.Xn}Ao(){if(!this.Br||this.Ln.size===0)return;const t=new Map;for(const i of this.Ln.values()){const r=this.xo(i.clientX,i.clientY,i.id,i);t.set(i.id,r)}this.Ln=t}Mo(){return Array.from(this.Ln.values()).map(t=>({...t}))}Fo(t){this.Vn=t}mn(t){this.qn=t}zo(t){this.Zn=t}Ro(t){this.Qn=t}To(t){this.Jn=t}Po(t){this.so=t}So(t){this.eo=t}Eo(t){this.io=t}$o(t){this.ro=t}Do(t){this.no=t}yo(t){var n;if(!this.Br)return;t.preventDefault(),(n=this.On)==null||n.tn(this.po);const i=performance.now(),r=this.ko(t.changedTouches);for(const o of r){const h=this.Ln.get(o.id);h&&this.Gn.set(o.id,this.Bo(h)),this.Ln.set(o.id,o);const a={id:o.id,startPosition:o,lastPosition:o,startTime:i,lastTime:i,longPressTimer:null,longPressFired:!1};this.eo&&(a.longPressTimer=window.setTimeout(()=>{const u=this.Ln.get(o.id);u&&(a.longPressFired=!0,this.eo({touch:this.Bo(u),duration:performance.now()-a.startTime,originalEvent:t}))},this.co)),this.Hn.set(o.id,a),this.Vn&&this.Vn(this.Oo(o,t,void 0,i))}this.Ln.size===2&&this.Lo()}Co(t){var n;if(!this.Br)return;t.preventDefault(),(n=this.On)==null||n.tn(this.po);const i=performance.now(),r=this.ko(t.changedTouches);for(const o of r){const h=this.Ln.get(o.id),a=h?this.Bo(h):void 0;a&&this.Gn.set(o.id,a),this.Ln.set(o.id,o);const u=this.Hn.get(o.id);u&&(u.lastPosition=o,u.lastTime=i,a)&&this.Go(a,o,!0)>this.lo&&u.longPressTimer!==null&&(window.clearTimeout(u.longPressTimer),u.longPressTimer=null),this.qn&&this.qn(this.Oo(o,t,a,i))}this.Ln.size===2?this.Ho(t):this.In=null}wo(t){if(!this.Br)return;t.preventDefault();const i=performance.now(),r=this.ko(t.changedTouches);for(const n of r){const o=this.Ln.get(n.id),h=o?this.Bo(o):void 0,a=this.Hn.get(n.id);a&&a.longPressTimer!==null&&(window.clearTimeout(a.longPressTimer),a.longPressTimer=null),this.Zn&&this.Zn(this.Oo(n,t,h,i)),a&&this.Io(a,t),this.Hn.delete(n.id),this.Gn.delete(n.id),this.Ln.delete(n.id)}this.Ln.size<2&&(this.In=null)}bo(t){if(!this.Br)return;t.preventDefault();const i=performance.now(),r=this.ko(t.changedTouches);for(const n of r){const o=this.Ln.get(n.id),h=o?this.Bo(o):void 0,a=this.Hn.get(n.id);a&&a.longPressTimer!==null&&(window.clearTimeout(a.longPressTimer),a.longPressTimer=null),this.Qn&&this.Qn(this.Oo(n,t,h,i)),this.Hn.delete(n.id),this.Gn.delete(n.id),this.Ln.delete(n.id)}this.Ln.size<2&&(this.In=null)}ko(t){const i=[];for(let r=0;r<t.length;r+=1){const n=t.item(r);n&&i.push(this.No(n))}return i}No(t){return this.xo(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})}xo(t,i,r,n){const o=this.tr.canvas,h=o.getBoundingClientRect(),a=t-h.left,u=i-h.top,f=o.width/h.width,g=u*(o.height/h.height),d=a*f-this.Br.offsetX,p=g-this.Br.offsetY,y=Math.floor(d/this.Br.cellWidth),A=Math.floor(p/this.Br.cellHeight),m=y>=0&&y<this.Br.cols&&A>=0&&A<this.Br.rows;return{id:r,x:m?y:-1,y:m?A:-1,clientX:t,clientY:i,pressure:n.pressure,radiusX:n.radiusX,radiusY:n.radiusY,rotationAngle:n.rotationAngle}}Oo(t,i,r,n){const o=this.Hn.get(t.id),h=Array.from(this.Gn.values()).map(f=>this.Bo(f)),a=Array.from(this.Ln.values()).map(f=>this.Bo(f)),u=this.ko(i.changedTouches);return{touch:this.Bo(t),previousTouch:r?this.Bo(r):void 0,touches:a,previousTouches:h,changedTouches:u,deltaTime:o?n-o.lastTime:0,originalEvent:i}}Lo(){if(this.Ln.size!==2)return void(this.In=null);const t=Array.from(this.Ln.values()),[i,r]=t,n=this.Go(i,r,!1),o=this.Xo(i,r);this.In={ids:[i.id,r.id],initialDistance:Math.max(n,1e-4),initialAngle:o,lastScale:1,lastRotation:0}}Ho(t){if(this.In||this.Lo(),!this.In)return;const[i,r]=this.In.ids,n=this.Ln.get(i),o=this.Ln.get(r);if(!n||!o)return;const h=this.Go(n,o,!1)/this.In.initialDistance,a=h-this.In.lastScale;this.ro&&Math.abs(a)>this.do&&(this.ro({touches:[this.Bo(n),this.Bo(o)],scale:h,deltaScale:a,center:this.Wo(n,o),originalEvent:t}),this.In.lastScale=h);let u=this.Xo(n,o)-this.In.initialAngle;u=(u+180)%360-180;const f=u-this.In.lastRotation;this.no&&Math.abs(f)>this._o&&(this.no({touches:[this.Bo(n),this.Bo(o)],rotation:u,deltaRotation:f,center:this.Wo(n,o),originalEvent:t}),this.In.lastRotation=u)}Wo(t,i){const r=(t.clientX+i.clientX)/2,n=(t.clientY+i.clientY)/2,o=this.xo(r,n,-1,{id:-1,x:-1,y:-1,clientX:r,clientY:n});return{x:o.x,y:o.y}}Io(t,i){const r=performance.now(),n=r-t.startTime,o=this.Go(t.startPosition,t.lastPosition,!0);if(!t.longPressFired&&n<=this.oo&&o<=this.ao)this.Ko(t.lastPosition,r)&&this.so?this.so({touch:this.Bo(t.lastPosition),taps:2,originalEvent:i}):this.Jn&&this.Jn({touch:this.Bo(t.lastPosition),taps:1,originalEvent:i});else if(!t.longPressFired&&n<=this.fo&&o>=this.uo){const h={x:t.lastPosition.clientX-t.startPosition.clientX,y:t.lastPosition.clientY-t.startPosition.clientY},a=Math.max(Math.hypot(h.x,h.y),1e-4),u={x:h.x/a,y:h.y/a},f={x:h.x/n,y:h.y/n};this.io&&this.io({touch:this.Bo(t.lastPosition),direction:u,distance:a,velocity:f,originalEvent:i})}this.vo=r,this.mo=this.Bo(t.lastPosition)}Ko(t,i){return!!this.mo&&!(i-this.vo>this.ho)&&this.Go(t,this.mo,!0)<=this.ao}Bo(t){return{...t}}Go(t,i,r){return r?Math.hypot(t.clientX-i.clientX,t.clientY-i.clientY):Math.hypot(t.x-i.x,t.y-i.y)}Xo(t,i){return 180*Math.atan2(i.clientY-t.clientY,i.clientX-t.clientX)/Math.PI}}const qt=Object.freeze(Object.defineProperty({__proto__:null,TouchManager:ft},Symbol.toStringTag,{value:"Module"})),Kt=l=>class extends l{rotate(t=0,i=0,r=0){this.xt.state.st(t),this.xt.state.et(i),this.xt.state.it(r)}rotateX(t){this.xt.state.st(t)}rotateY(t){this.xt.state.et(t)}rotateZ(t){this.xt.state.it(t)}push(){this.xt.state.H()}pop(){this.xt.state.Z()}rect(t,i,r=1,n=1){this.xt.Ne(t,i,r,n)}point(t,i){this.xt.Ne(t,i,1,1)}line(t,i,r,n){this.xt.Xe(t,i,r,n)}lineWeight(t){this.xt.state.tt(t)}background(t,i=t,r=t,n=255){this.xt.qe(t,i,r,n)}char(t){this.xt.state.rt(this.Ei.Pi(t))}charColor(t,i,r,n=255){this.xt.state.nt(t,i,r,n)}cellColor(t,i,r,n=255){this.xt.state.ot(t,i,r,n)}flipX(t){this.xt.state.ht(t)}flipY(t){this.xt.state.ct(t)}charRotation(t){this.xt.state.ut(t)}invert(t){this.xt.state.lt(t)}clear(){this.xt.qe(0,0,0,0)}ellipse(t,i,r,n){this.xt.We(t,i,r/2,n/2)}triangle(t,i,r,n,o,h){this.xt.Ke(t,i,r,n,o,h)}bezierCurve(t,i,r,n,o,h,a,u){this.xt.je(t,i,r,n,o,h,a,u)}arc(t,i,r,n,o,h){this.xt.Ve(t,i,r,n,o,h)}shader(t){this.xt.Be(t)}setUniform(t,i){this.xt.Kt(t,i)}setUniforms(t){this.xt.Oe(t)}createFilterShader(t){return this.xt.hs(t)}createFramebuffer(t){return this.xt.Ye(t.width,t.height,5,{filter:"nearest",wrap:"clamp",format:"rgba",type:"unsigned_byte"})}image(t,i,r,n,o){if(t.textures){const h=t;this.xt.Le(h,i,r,n??h.width,o??h.height)}else{const h=t;this.xt.Ge(h,i,r,n??Math.floor(this.Br.cols/2),o??Math.floor(this.Br.rows/2))}}async loadImage(t){if(typeof t!="string")return Y.Mr(this.xt,t,n=>this.Ei.Si(n));const i=t,r=await new Promise((n,o)=>{const h=new Image;h.crossOrigin="anonymous",h.onload=()=>n(h),h.onerror=a=>o(a),h.src=i});return Y.Mr(this.xt,r,n=>this.Ei.Si(n))}},Zt=l=>class extends l{async loadFont(t){return this.Ei.Vi(t).then(()=>{const i=this.Ei.maxGlyphDimensions;this.Br.rr(i.width,i.height),this.jo.resize(this.Br.cols,this.Br.rows),this.xt.Ze(),this.On.rn()})}fontSize(t){if(!X.m(typeof t=="number"&&t>0,"Font size must be a positive number greater than 0.",{method:"fontSize",providedValue:t})||this.Ei.fontSize===t)return;this.Ei.Yi(t);const i=this.Ei.maxGlyphDimensions;this.Br.rr(i.width,i.height),this.jo.resize(this.Br.cols,this.Br.rows),this.xt.Ze(),this.On.rn()}glyphColor(t){return this.Ei.Pi(t)}glyphColors(t){return this.Ei.Si(t)}},Qt=l=>class extends l{get frameCount(){return this.Yo.frameCount}set frameCount(t){this.Yo.frameCount=t}frameRate(t){return t===void 0?this.Yo.currentFrameRate:this.Yo.frameRate(t,()=>this.Vo())}noLoop(){this.Yo.pause()}loop(){this.Yo.resume(()=>this.Vo())}redraw(t=1){if(X.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.Vo()}isLooping(){return this.Yo.isLooping}},Jt=l=>class extends l{constructor(...t){super(...t)}mouseClicked(t){this.On._n(t)}mousePressed(t){this.On.pn(t)}mouseReleased(t){this.On.vn(t)}mouseMoved(t){this.On.mn(t)}mouseScrolled(t){this.On.gn(t)}get mouse(){return this.On.An()}cursor(t){this.On.en(t)}},$t=l=>class extends l{constructor(...t){super(...t)}touchStarted(t){this.qo.Fo(t)}touchMoved(t){this.qo.mn(t)}touchEnded(t){this.qo.zo(t)}touchCancelled(t){this.qo.Ro(t)}tap(t){this.qo.To(t)}doubleTap(t){this.qo.Po(t)}longPress(t){this.qo.So(t)}swipe(t){this.qo.Eo(t)}pinch(t){this.qo.$o(t)}rotateGesture(t){this.qo.Do(t)}get touches(){return this.qo.Mo()}},te=l=>class extends l{constructor(...t){super(...t)}keyPressed(t){this.Zo.pn(t)}keyReleased(t){this.Zo.vn(t)}isKeyPressed(t){return this.Zo.Pn(t)}get lastKeyPressed(){return this.Zo.En()}get lastKeyReleased(){return this.Zo.$n()}get pressedKeys(){return this.Zo.Dn()}get modifierState(){return this.Zo.kn()}};class ee{constructor(){c(this,"xt");c(this,"Ei");c(this,"tr");c(this,"Br");c(this,"Yo");c(this,"On");c(this,"qo");c(this,"Zo");c(this,"Qo");c(this,"jo");c(this,"Jo");c(this,"th");c(this,"sh")}Vo(){}}class dt extends function(i,...r){return r.reduce((n,o)=>o(n),i)}(ee,Kt,Zt,Qt,Jt,$t,te){constructor(i={}){var r;super();c(this,"eh",new Map);c(this,"ih");c(this,"rh",!1);c(this,"nh",!1);c(this,"oh",()=>{});c(this,"hh",()=>{});c(this,"ah",()=>{});c(this,"uh");c(this,"ar");c(this,"hr",!1);c(this,"fh");this.ih=((r=i.plugins)==null?void 0:r.slice())??[],this.hr=i.overlay??!1,this.tr=new ct(i),this.xt=new Ot(this.tr.vr()),this.Ei=new ht(this.xt,i.fontSize??16),this.Yo=new kt(i.frameRate??60),this.On=new lt(this.tr),this.qo=new ft(this.tr,this.On),this.Zo=new ut,this.Qo=this.xt.Pt(),this.Jo=this.xt.rs(),this.dh(i)}async dh(i){await this.Ei.Wi(i.fontSource);const r=this.Ei.maxGlyphDimensions;this.Br=new at(this.tr.canvas,r.width,r.height),this.On.Wi(this.Br),this.qo.Wi(this.Br),this.jo=this.xt.Ye(this.Br.cols,this.Br.rows,5),this.th=this.xt.Ye(this.Br.width,this.Br.height,1),this.hr&&(this.fh=Y.Mr(this.xt,this.tr.targetCanvas,n=>this.Ei.Si(n))),this.sh=this.xt.cs(rt,"precision mediump float;uniform sampler2D Ua;uniform vec2 Ub;uniform vec2 Uc;uniform vec2 Ud;void main(){vec2 A=gl_FragCoord.xy-Uc;vec2 B=A*(Ub/Ud);vec2 C=(floor(B)+0.5)/Ub;gl_FragColor=texture2D(Ua,C);}"),this._h(),await this.ph(this.ih),this.ih=[],this.rh=!0,this.oh(),this.Yo.start(()=>this.Vo())}async ph(i){if(i.length)for(const r of i)this.eh.has(r.name)?console.warn(`[textmode.js] Plugin "${r.name}" is already installed.`):(await r.install(this,this.mh()),this.eh.set(r.name,r))}async gh(i){const r=this.eh.get(i);r&&(r.uninstall&&await r.uninstall(this,this.mh()),this.eh.delete(i))}async use(i){return this.rh?await this.ph([i]):this.ih.push(i),this}async unuse(i){return this.rh?(await this.gh(i),this):(this.ih=this.ih.filter(r=>r.name!==i),this)}hasPlugin(i){return this.rh?this.eh.has(i):this.ih.some(r=>r.name===i)||this.eh.has(i)}mh(){return{renderer:this.xt,font:this.Ei,grid:this.Br,canvas:this.tr,drawFramebuffer:this.jo,asciiFramebuffer:this.th,flushDrawCommands:()=>{this.xt.St(this.Qo)}}}_h(){this.uh=()=>{this.hr&&this.resizeCanvas(this.tr.targetCanvas.width,this.tr.targetCanvas.height),this.ah()},window.addEventListener("resize",this.uh),this.On.nn(),this.qo.nn(),this.Zo.nn(),window.addEventListener("blur",()=>{this.Zo.Bn()}),window.ResizeObserver&&this.hr&&(this.ar=new ResizeObserver(()=>{this.resizeCanvas(this.tr.targetCanvas.width,this.tr.targetCanvas.height)}),this.ar.observe(this.tr.targetCanvas))}Vo(){if(this.Yo.measureFrameRate(),this.Yo.incrementFrame(),this.nh)return;if(this.hr){const r=this.xt.context;r.bindTexture(r.TEXTURE_2D,this.fh.texture),r.pixelStorei(r.UNPACK_FLIP_Y_WEBGL,1),r.texImage2D(r.TEXTURE_2D,0,r.RGBA,r.RGBA,r.UNSIGNED_BYTE,this.tr.targetCanvas),r.bindTexture(r.TEXTURE_2D,null)}this.jo.begin(),this.xt.ke(this.Qo),this.hh(),this.xt.St(this.Qo),this.jo.end(),this.th.begin(),this.xt.ke(this.Jo),this.Jo.Wt({U0:this.Ei.fontFramebuffer,U1:[this.Ei.textureColumns,this.Ei.textureRows],U2:this.jo.textures[0],U3:this.jo.textures[1],U4:this.jo.textures[2],U5:this.jo.textures[4],U6:this.jo.textures[3],U7:[this.Br.cols,this.Br.rows],U8:[this.th.width,this.th.height],U9:this.th.width/this.th.height}),this.xt.Ie(0,0,this.tr.width,this.tr.height),this.th.end();const i=this.xt.state.canvasBackgroundColor;this.xt.Ys(i[0],i[1],i[2],i[3]),this.xt.ke(this.sh),this.sh.Wt({Ua:this.th.textures[0],Ub:[this.th.width,this.th.height],Uc:[this.Br.offsetX,this.Br.offsetY],Ud:[this.Br.width,this.Br.height]}),this.xt.Ie(this.Br.offsetX,this.Br.offsetY,this.Br.width,this.Br.height)}setup(i){this.oh=i}draw(i){this.hh=i}windowResized(i){this.ah=i}resizeCanvas(i,r){this.tr.pr(i,r),this.Br.ir(),this.jo.resize(this.Br.cols,this.Br.rows),this.th.resize(this.Br.width,this.Br.height),this.xt.Ze(),this.On.rn(),this.qo.Ao(),this.Vo()}destroy(){this.nh||(this.Yo.stop(),window.removeEventListener("resize",this.uh),this.On.dn(),this.qo.dn(),this.Zo.dn(),this.Ei.Dt(),this.xt.Dt(),this.th.Dt(),this.sh.Dt(),this.fh&&this.fh.Dt(),this.nh=!0)}get grid(){return this.Br}get font(){return this.Ei}get width(){return this.tr.width}get height(){return this.tr.height}get canvas(){return this.tr.canvas}get isDisposed(){return this.nh}get overlay(){return this.fh}}class Q{constructor(){}static create(t={}){return new dt(t)}static setErrorLevel(t){X.A(t)}static get version(){return"0.3.2-beta.1"}}const ie=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),se=Object.freeze(Object.defineProperty({__proto__:null,keyboard:jt,mouse:Vt,touch:qt},Symbol.toStringTag,{value:"Module"})),re=Q.create,ne=Q.setErrorLevel,oe=Q.version;b.TextmodeCanvas=ct,b.TextmodeErrorLevel=S,b.TextmodeFont=ht,b.TextmodeFramebuffer=j,b.TextmodeGrid=at,b.TextmodeImage=Y,b.Textmodifier=dt,b.create=re,b.export=ie,b.input=se,b.setErrorLevel=ne,b.textmode=Q,b.version=oe,Object.defineProperty(b,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={});
|