UNPKG

textmode.js

Version:

textmode.js is a lightweight creative coding library for creating real-time ASCII art on the web.

10 lines (8 loc) 115 kB
var ni=Object.defineProperty;var hi=(T,R,I)=>R in T?ni(T,R,{enumerable:!0,configurable:!0,writable:!0,value:I}):T[R]=I;var l=(T,R,I)=>hi(T,typeof R!="symbol"?R+"":R,I);var s,i;s=this,i=function(T){class R extends Error{constructor(t,e={}){super(R.i(t,e)),this.name="TextmodeError"}static i(t,e){return`${t}${e&&Object.keys(e).length>0?` 📋 Context:`+Object.entries(e).map(([r,n])=>` - ${r}: ${R.o(n)}`).join(""):""} ${"↓".repeat(24)} `}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(e=>R.o(e)).join(", ")}]`:`[${t.slice(0,3).map(e=>R.o(e)).join(", ")}, ... +${t.length-3} more]`;if(typeof t=="object"){const e=Object.keys(t);return e.length===0?"{}":e.length<=3?`{ ${e.map(r=>`${r}: ${R.o(t[r])}`).join(", ")} }`:`{ ${e.slice(0,2).map(r=>`${r}: ${R.o(t[r])}`).join(", ")}, ... +${e.length-2} more }`}return t+""}}var I=(a=>(a[a.SILENT=0]="SILENT",a[a.WARNING=1]="WARNING",a[a.ERROR=2]="ERROR",a[a.THROW=3]="THROW",a))(I||{});const z=class z{constructor(){l(this,"l",{globalLevel:3})}static u(){return z.h||(z.h=new z),z.h}v(t,e){const r="%c[textmode.js] Oops! (╯°□°)╯︵ Something went wrong in your code.",n="color: #f44336; font-weight: bold; background: #ffebee; padding: 2px 6px; border-radius: 3px;";switch(this.l.globalLevel){case 0:return!1;case 1:return console.group(r,n),console.warn(R.i(t,e)),console.groupEnd(),!1;case 2:return console.group(r,n),console.error(R.i(t,e)),console.groupEnd(),!1;default:throw new R(t,e)}}m(t,e,r){return!!t||(this.v(e,r),!1)}_(t){this.l.globalLevel=t}};l(z,"h",null);let ut=z;const ft=ut.u();class W{constructor(t,e,r){l(this,"A");l(this,"C");l(this,"M",new Map);l(this,"F",new Map);l(this,"$",0);l(this,"P",new Map);l(this,"U");this.A=t,this.U=t.getParameter(t.MAX_TEXTURE_IMAGE_UNITS)??16,this.C=this.R(e,r),this.S()}S(){const t=this.A.getProgramParameter(this.C,this.A.ACTIVE_UNIFORMS);for(let e=0;e<t;e++){const r=this.A.getActiveUniform(this.C,e);if(r){const n=r.name.replace(/\[0\]$/,""),h=this.A.getUniformLocation(this.C,n);h&&(this.M.set(n,h),this.F.set(n,{type:r.type,size:r.size}))}}}R(t,e){const r=this.k(this.A.VERTEX_SHADER,t),n=this.k(this.A.FRAGMENT_SHADER,e),h=this.A.createProgram();if(this.A.attachShader(h,r),this.A.attachShader(h,n),this.A.linkProgram(h),!this.A.getProgramParameter(h,this.A.LINK_STATUS)){const o=this.A.getProgramInfoLog(h);throw Error("Shader program link error: "+o)}return this.A.deleteShader(r),this.A.deleteShader(n),h}k(t,e){const r=this.A.createShader(t);if(this.A.shaderSource(r,e),this.A.compileShader(r),!this.A.getShaderParameter(r,this.A.COMPILE_STATUS)){const n=this.A.getShaderInfoLog(r);throw this.A.deleteShader(r),Error("Shader compilation error: "+n)}return r}D(){this.A.useProgram(this.C),this.L()}L(){this.$=0,this.P.clear()}O(t){for(const e in t)this.I(e,t[e])}I(t,e){var u,f;const r=this.M.get(t);if(!r)return;const n=this.F.get(t);if(!n)return;const{type:h,size:o}=n,c=this.A;if(e instanceof WebGLTexture){const d=this.H(t);return c.uniform1i(r,d),c.activeTexture(c.TEXTURE0+d),void c.bindTexture(c.TEXTURE_2D,e)}if(e instanceof X){const d=this.H(t);return c.uniform1i(r,d),c.activeTexture(c.TEXTURE0+d),void c.bindTexture(c.TEXTURE_2D,e.textures[0])}if(typeof e!="number")if(typeof e!="boolean")if(Array.isArray(e[0])){const d=e.flat(),g={[c.FLOAT_VEC2]:()=>c.uniform2fv(r,d),[c.FLOAT_VEC3]:()=>c.uniform3fv(r,d),[c.FLOAT_VEC4]:()=>c.uniform4fv(r,d)};(u=g[h])==null||u.call(g)}else{const d=e,g={[c.FLOAT]:()=>o>1?c.uniform1fv(r,d):c.uniform1f(r,d[0]),[c.FLOAT_VEC2]:()=>c.uniform2fv(r,d),[c.FLOAT_VEC3]:()=>c.uniform3fv(r,d),[c.FLOAT_VEC4]:()=>c.uniform4fv(r,d),[c.INT]:()=>o>1?c.uniform1iv(r,d):c.uniform1i(r,d[0]),[c.INT_VEC2]:()=>c.uniform2iv(r,d),[c.INT_VEC3]:()=>c.uniform3iv(r,d),[c.INT_VEC4]:()=>c.uniform4iv(r,d),[c.BOOL]:()=>c.uniform1iv(r,d),[c.FLOAT_MAT2]:()=>c.uniformMatrix2fv(r,!1,d),[c.FLOAT_MAT3]:()=>c.uniformMatrix3fv(r,!1,d),[c.FLOAT_MAT4]:()=>c.uniformMatrix4fv(r,!1,d)};(f=g[h])==null||f.call(g)}else c.uniform1i(r,e?1:0);else h===c.INT||h===c.BOOL?c.uniform1i(r,e):c.uniform1f(r,e)}H(t){const e=this.P.get(t);if(e!==void 0)return e;if(this.$>=this.U)throw Error(`[textmode.js] Shader attempted to bind more than ${this.U} texture samplers. Uniform "${t}" cannot be assigned.`);const r=this.$++;return this.P.set(t,r),r}get G(){return this.C}dispose(){this.A.deleteProgram(this.C)}}function bt(a,t,e,r){return 180*Math.atan2(r-t,e-a)/Math.PI}function j(a,t,e,r){return Math.hypot(e-a,r-t)}function Y(a,t,e){return Math.min(Math.max(a,t),e)}function xt(a){return(a%360+360)%360/360}function Tt(a,t,e){a.bindTexture(a.TEXTURE_2D,t),a.pixelStorei(a.UNPACK_FLIP_Y_WEBGL,1),a.texImage2D(a.TEXTURE_2D,0,a.RGBA,a.RGBA,a.UNSIGNED_BYTE,e),a.bindTexture(a.TEXTURE_2D,null)}function dt(a,t,e,r,n){a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MIN_FILTER,t),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MAG_FILTER,e),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_WRAP_S,r),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_WRAP_T,n)}function gt(a,t,e,r,n,h=0,o=WebGL2RenderingContext.FLOAT,c=!1){a.enableVertexAttribArray(t),a.vertexAttribPointer(t,e,o,c,r,n),a.vertexAttribDivisor(t,h)}function Rt(a,t,e,r,n){a.bindBuffer(t,e),a.bufferData(t,r,n),a.bindBuffer(t,null)}const tt=`#version 300 es in vec2 A0;in vec2 A1;in vec2 A2;in vec2 A3;in vec3 A4;in vec4 A5;in vec4 A6;in vec4 A7;in vec3 A8;in vec3 A9;in vec4 Aa;in vec4 Ab;in vec3 Ac;uniform vec2 Ur;uniform float Us;uniform float Ut;out vec2 v_uv;out vec3 v_glyphIndex;out vec4 v_glyphColor;out vec4 v_cellColor;out vec4 v_glyphFlags;out vec3 v_worldPosition;out vec3 v_normal;out float v_geometryType;const float A=6.28318530718f;const int B=2;const int C=3;const int D=4;vec2 E(float F,vec2 G,vec2 H,vec2 I,vec2 J){float K=1.0f-F;float L=K*K;float M=L*K;float N=F*F;float O=N*F;return M*G+3.0f*L*F*H+3.0f*K*N*I+O*J;}vec2 P(float F,vec2 G,vec2 H,vec2 I,vec2 J){float K=1.0f-F;float L=K*K;float N=F*F;return-3.0f*L*G+3.0f*(L-2.0f*K*F)*H+3.0f*(2.0f*K*F-N)*I+3.0f*N*J;}vec3 Q(vec3 R,float S){float T=cos(S);float U=sin(S);return vec3(R.x,R.y*T-R.z*U,R.y*U+R.z*T);}vec3 V(vec3 R,float S){float T=cos(S);float U=sin(S);return vec3(R.x*T+R.z*U,R.y,-R.x*U+R.z*T);}vec3 W(vec3 R,float S){float T=cos(S);float U=sin(S);return vec3(R.x*T-R.y*U,R.x*U+R.y*T,R.z);}vec3 X(vec3 R,vec3 Y){vec3 Z=R;if(Y.z!=0.0f){Z=W(Z,Y.z);}if(Y.y!=0.0f){Z=V(Z,Y.y);}if(Y.x!=0.0f){Z=Q(Z,Y.x);}return Z;}void main(){v_uv=A1;v_glyphIndex=A4;v_glyphColor=A5;v_cellColor=A6;v_glyphFlags=A7;vec4 a=Aa;vec4 b=Ab;vec2 c=A3;vec2 d=A2;float e=Ac.x;float f=Ac.y;int g=int(Ac.z);vec2 h=d;vec2 i=h+c*0.5f;float j=f+e*0.5f;vec3 k=vec3(i,j);vec3 l;if(g==D){float F=clamp(A0.x,0.0f,1.0f);vec2 G=b.xy;vec2 H=a.xy;vec2 I=a.zw;vec2 J=b.zw;vec2 m=E(F,G,H,I,J);vec2 n=P(F,G,H,I,J);float o=length(n);vec2 p=o>0.0f?n/o:vec2(1.0f,0.0f);vec2 q=vec2(-p.y,p.x);vec2 r=m;vec2 s=r+q*A0.y*c.y;l=vec3(s,f);}else if(g==C){float t=mod(a.x,A);if(t<0.0f){t+=A;}float u=mod(a.y,A);if(u<0.0f){u+=A;}float v=t-u;if(v<=0.0f){v+=A;}float S=t-A0.x*v;vec2 w=vec2(cos(S),sin(S))*A0.y;vec2 s=w*c+h;l=vec3(s,f);}else if(g==B){vec2 s=A0.xy*c+h;l=vec3(s,f);}vec3 x=X(l,A9);vec3 y=x+A8;vec3 z=vec3(0.0f,0.0f,1.0f);v_worldPosition=y;v_normal=z;v_geometryType=float(g);vec2 AA=(y.xy/Ur)*2.0f;AA.y=-AA.y;float AB=y.z/Ur.y;float AC=clamp(-AB*Us,-0.99f,0.99f);if(Ut>0.5f){gl_Position=vec4(AA,AC,1.0f);}else{float AD=0.5f;float AE=1.0f/(1.0f-AB*AD);AA*=AE;gl_Position=vec4(AA,AC,1.0f);}}`,q=class q{constructor(t,e,r=e,n=1,h={},o){l(this,"N");l(this,"X");l(this,"l");l(this,"A");l(this,"Y");l(this,"j",[]);l(this,"K",null);l(this,"W");l(this,"Z");l(this,"q",null);l(this,"V",new Map);this.N=e,this.X=r,this.A=t,this.W=Y(n,1,8),this.Z=o,this.l={filter:"nearest",wrap:"clamp",format:"rgba",type:"unsigned_byte",depth:!0,...h},q.J||(q.J=new W(t,tt,`#version 300 es precision highp float;in vec2 v_uv;uniform sampler2D U5;uniform sampler2D U6;uniform sampler2D U7;uniform sampler2D U8;uniform vec2 U9;uniform bool Ua;uniform bool Ub;uniform bool Uc;layout(location=0)out vec4 o_character;layout(location=1)out vec4 o_primaryColor;layout(location=2)out vec4 o_secondaryColor;layout(location=3)out vec4 A;void main(){vec2 B=vec2(v_uv.x,1.-v_uv.y);vec2 C=B*U9;vec2 D=(floor(C)+0.5f)/U9;vec4 E=texture(U5,D);vec4 F=Ua?texture(U6,D):vec4(0.);if(Ua&&F.a==0.){discard;}vec4 G=Ub?texture(U7,D):vec4(0.);vec4 H=Uc?texture(U8,D):vec4(0.);o_character=E;o_primaryColor=F;o_secondaryColor=G;A=H;}`));const c=t.getParameter(t.MAX_DRAW_BUFFERS),u=t.getParameter(t.MAX_COLOR_ATTACHMENTS);this.W=Math.min(this.W,c,u),this.Y=t.createFramebuffer(),this.tt(),this.st(),this.l.depth&&this.it()}tt(){const t=this.A,e=this.l.filter==="linear"?t.LINEAR:t.NEAREST,r=this.l.wrap==="repeat"?t.REPEAT:t.CLAMP_TO_EDGE,n=this.l.type==="float"?t.FLOAT:t.UNSIGNED_BYTE,h=n===t.FLOAT?t.RGBA32F:t.RGBA8,o=t.RGBA;for(let c=0;c<this.W;c++){const u=t.createTexture();t.bindTexture(t.TEXTURE_2D,u),dt(t,e,e,r,r),t.texImage2D(t.TEXTURE_2D,0,h,this.N,this.X,0,o,n,null),this.j.push(u)}t.bindTexture(t.TEXTURE_2D,null)}st(){const t=this.A;if(t.bindFramebuffer(t.FRAMEBUFFER,this.Y),this.W===1)t.framebufferTexture2D(t.FRAMEBUFFER,t.COLOR_ATTACHMENT0,t.TEXTURE_2D,this.j[0],0);else{const e=[];for(let r=0;r<this.W;r++){const n=t.COLOR_ATTACHMENT0+r;t.framebufferTexture2D(t.FRAMEBUFFER,n,t.TEXTURE_2D,this.j[r],0),e.push(n)}t.drawBuffers(e)}t.bindFramebuffer(t.FRAMEBUFFER,null)}it(){const t=this.A;this.K=t.createRenderbuffer(),t.bindRenderbuffer(t.RENDERBUFFER,this.K),t.renderbufferStorage(t.RENDERBUFFER,t.DEPTH_COMPONENT24,this.N,this.X),t.bindFramebuffer(t.FRAMEBUFFER,this.Y),t.framebufferRenderbuffer(t.FRAMEBUFFER,t.DEPTH_ATTACHMENT,t.RENDERBUFFER,this.K),t.bindFramebuffer(t.FRAMEBUFFER,null),t.bindRenderbuffer(t.RENDERBUFFER,null)}et(t){Tt(this.A,this.j[0],t)}resize(t,e){this.N=t,this.X=e,this.V.clear();const r=this.A,n=this.l.type==="float"?r.FLOAT:r.UNSIGNED_BYTE,h=n===r.FLOAT?r.RGBA32F:r.RGBA8,o=r.RGBA;for(const c of this.j)r.bindTexture(r.TEXTURE_2D,c),r.texImage2D(r.TEXTURE_2D,0,h,this.N,this.X,0,o,n,null);r.bindTexture(r.TEXTURE_2D,null),this.K&&(r.bindRenderbuffer(r.RENDERBUFFER,this.K),r.renderbufferStorage(r.RENDERBUFFER,r.DEPTH_COMPONENT24,this.N,this.X),r.bindRenderbuffer(r.RENDERBUFFER,null))}readPixels(t){const e=this.V.get(t);if(e)return e;const r=this.A,n=this.N,h=this.X,o=new Uint8Array(n*h*4),c=r.getParameter(r.READ_FRAMEBUFFER_BINDING);r.bindFramebuffer(r.READ_FRAMEBUFFER,this.Y),r.readBuffer(r.COLOR_ATTACHMENT0+t),r.readPixels(0,0,n,h,r.RGBA,r.UNSIGNED_BYTE,o),r.bindFramebuffer(r.READ_FRAMEBUFFER,c);const u=4*n,f=new Uint8Array(o.length);for(let d=0;d<h;d++){const g=(h-1-d)*u,v=d*u;f.set(o.subarray(g,g+u),v)}return this.V.set(t,f),f}begin(){const t=this.A;this.V.clear(),this.Z.rt(),this.Z.nt(this.Y,this.N,this.X,this.W),this.l.depth&&t.clear(t.DEPTH_BUFFER_BIT),this.Z.state.ot()}end(){this.Z.state.ht(),this.Z.ct(),this.Z.lt()}ut(){return this.q||this.ft(),this.q}ft(){if(!this.Z)return;const t=this.W>1,e=this.W>2,r=this.W>3,n={U5:this.j[0],U6:t?this.j[1]:this.j[0],U7:e?this.j[2]:this.j[0],U8:r?this.j[3]:this.j[0],U9:[this.N,this.X],Ua:t,Ub:e,Uc:r},h=q.J;this.q=this.Z.vt.dt(h,n,!0)}gt(){const t=this.A;t.deleteFramebuffer(this.Y),this.j.forEach(e=>{t.deleteTexture(e)}),this.K&&t.deleteRenderbuffer(this.K)}get width(){return this.N}get height(){return this.X}get textures(){return this.j}get attachmentCount(){return this.W}};l(q,"J",null);let X=q;const Ft=new WeakMap;function vt(a,t){Ft.set(a,t)}function Ct(a){return Ft.get(a)}function et(a,t,e,r,n=255){a[0]=t/255,a[1]=(e??t)/255,a[2]=(r??t)/255,a[3]=n/255}class it{constructor(){l(this,"_t",1);l(this,"yt",0);l(this,"At",0);l(this,"wt",0);l(this,"bt",0);l(this,"Ct",0);l(this,"xt",0);l(this,"Mt",[0,0,0]);l(this,"Ft",[1,1,1,1]);l(this,"$t",[0,0,0,1]);l(this,"Pt",!1);l(this,"Tt",!1);l(this,"Et",!1);l(this,"Rt",0);l(this,"St",[0,0,0,1]);l(this,"zt",!1);l(this,"kt",[]);l(this,"Dt",[])}static Lt(){return{Ot:1,Bt:0,It:0,Ht:0,bt:0,Ct:0,xt:0,Rt:0,Gt:!1,Qt:!1,Et:!1,zt:!1,Nt:[0,0,0],Xt:[1,1,1,1],Yt:[0,0,0,1]}}jt(t){t.Ot=this._t,t.Bt=this.yt,t.It=this.At,t.Ht=this.wt,t.bt=this.bt,t.Ct=this.Ct,t.xt=this.xt,t.Gt=this.Pt,t.Qt=this.Tt,t.Et=this.Et,t.Rt=this.Rt,t.zt=this.zt,t.Nt[0]=this.Mt[0],t.Nt[1]=this.Mt[1],t.Nt[2]=this.Mt[2],t.Xt[0]=this.Ft[0],t.Xt[1]=this.Ft[1],t.Xt[2]=this.Ft[2],t.Xt[3]=this.Ft[3],t.Yt[0]=this.$t[0],t.Yt[1]=this.$t[1],t.Yt[2]=this.$t[2],t.Yt[3]=this.$t[3]}Kt(t){this._t=t.Ot,this.yt=t.Bt,this.At=t.It,this.wt=t.Ht,this.bt=t.bt,this.Ct=t.Ct,this.xt=t.xt,this.Pt=t.Gt,this.Tt=t.Qt,this.Et=t.Et,this.Rt=t.Rt,this.zt=t.zt,this.Mt[0]=t.Nt[0],this.Mt[1]=t.Nt[1],this.Mt[2]=t.Nt[2],this.Ft[0]=t.Xt[0],this.Ft[1]=t.Xt[1],this.Ft[2]=t.Xt[2],this.Ft[3]=t.Xt[3],this.$t[0]=t.Yt[0],this.$t[1]=t.Yt[1],this.$t[2]=t.Yt[2],this.$t[3]=t.Yt[3]}ot(){let t=this.Dt.pop();t||(t=it.Lt()),this.jt(t),this.kt.push(t)}ht(){const t=this.kt.pop();t?(this.Kt(t),this.Dt.push(t)):console.warn("pop() called without matching push()")}Wt(t){this.jt(t)}Zt(t){this._t=Math.abs(t)}qt(){this.yt=0,this.At=0,this.wt=0,this.bt=0,this.Ct=0,this.xt=0,this.zt=!1}Vt(t){t!==0&&(this.bt+=t*Math.PI/180)}Jt(t){t!==0&&(this.Ct+=t*Math.PI/180)}ts(t){t!==0&&(this.xt+=t*Math.PI/180)}ss(t=0,e=0,r=0){t===0&&e===0&&r===0||(this.yt+=t,this.At+=e,this.wt+=r)}es(t){this.ss(t,0,0)}rs(t){this.ss(0,t,0)}ns(t){this.ss(0,0,t)}hs(t){this.Mt[0]=t[0],this.Mt[1]=t[1],this.Mt[2]=t[2]}cs(t,e,r,n=255){et(this.Ft,t,e,r,n)}ls(t,e,r,n=255){et(this.$t,t,e,r,n)}us(t){this.Pt=t}fs(t){this.Tt=t}ds(t){this.Et=t}vs(t){this.Rt=xt(t)}ps(t,e,r,n){et(this.St,t,e,r,n)}gs(t){this.zt=t}get canvasBackgroundColor(){return this.St}get useOrtho(){return this.zt}get rotationX(){return this.bt}get rotationY(){return this.Ct}get rotationZ(){return this.xt}}const pt=new Float32Array([-.5,-.5,0,0,.5,-.5,1,0,-.5,.5,0,1,-.5,.5,0,1,.5,-.5,1,0,.5,.5,1,1]),k={_s:16,As:WebGL2RenderingContext.TRIANGLES,ws:{bs:{size:2,offset:0},Cs:{size:2,offset:8}}};class ie{constructor(t){l(this,"A");l(this,"Ms");l(this,"Fs");this.A=t,this.Ms=t.createBuffer(),this.Fs=new Float32Array(pt.length)}$s(t,e,r,n){const h=this.A,o=Ct(this.A),c=o[2],u=o[3],f=t/c*2-1,d=(t+r)/c*2-1,g=1-(e+n)/u*2,v=1-e/u*2,p=pt,m=this.Fs;for(let A=0;A<p.length;A+=4){const y=p[A],E=p[A+1],b=p[A+2],w=p[A+3],P=f+(y+.5)*(d-f),x=g+(E+.5)*(v-g);m[A]=P,m[A+1]=x,m[A+2]=b,m[A+3]=w}h.bindBuffer(h.ARRAY_BUFFER,this.Ms),h.bufferData(h.ARRAY_BUFFER,m,h.DYNAMIC_DRAW),h.enableVertexAttribArray(0),h.vertexAttribPointer(0,2,h.FLOAT,!1,16,0),h.enableVertexAttribArray(1),h.vertexAttribPointer(1,2,h.FLOAT,!1,16,8),h.drawArrays(h.TRIANGLES,0,6),h.disableVertexAttribArray(1),h.disableVertexAttribArray(0),h.bindBuffer(h.ARRAY_BUFFER,null)}gt(){this.A.deleteBuffer(this.Ms)}}var F=(a=>(a.RECTANGLE="rectangle",a.LINE="line",a.ELLIPSE="ellipse",a.ARC="arc",a.TRIANGLE="triangle",a.BEZIER_CURVE="bezier_curve",a))(F||{});const re={rectangle:2,line:2,ellipse:2,triangle:2,arc:3,bezier_curve:4};class se{constructor(t){l(this,"A");l(this,"Ps",new Map);this.A=t}Ts(t,e,r,n){const h=this.A;let o=this.Ps.get(t);o||(o=new Map,this.Ps.set(t,o));let c=o.get(e)||null;if(!c){c=h.createVertexArray(),o.set(e,c),h.bindVertexArray(c),h.bindBuffer(h.ARRAY_BUFFER,n);const u=h.getAttribLocation(t,"A0");u!==-1&&gt(h,u,r.ws.bs.size,r._s,r.ws.bs.offset,0,h.FLOAT,!1);const f=h.getAttribLocation(t,"A1");f!==-1&&gt(h,f,r.ws.Cs.size,r._s,r.ws.Cs.offset,0,h.FLOAT,!1)}h.bindVertexArray(c)}Es(){this.A.bindVertexArray(null)}gt(){for(const[,t]of this.Ps)for(const[,e]of t)e&&this.A.deleteVertexArray(e)}}const Z=class Z{static Rs(t,e,r=0){const n=e||new Float32Array(Z.FLOATS_PER_INSTANCE);let h=r;n[h++]=t.bs[0],n[h++]=t.bs[1],n[h++]=t.Ss[0],n[h++]=t.Ss[1],n[h++]=t.Nt[0],n[h++]=t.Nt[1],n[h++]=t.Nt[2],n[h++]=t.Xt[0],n[h++]=t.Xt[1],n[h++]=t.Xt[2],n[h++]=t.Xt[3],n[h++]=t.Yt[0],n[h++]=t.Yt[1],n[h++]=t.Yt[2],n[h++]=t.Yt[3],n[h++]=t.zs[0],n[h++]=t.zs[1],n[h++]=t.zs[2],n[h++]=t.Rt;const o=t.ks;n[h++]=(o==null?void 0:o[0])??0,n[h++]=(o==null?void 0:o[1])??0,n[h++]=(o==null?void 0:o[2])??0;const c=t.Ds;n[h++]=(c==null?void 0:c[0])??0,n[h++]=(c==null?void 0:c[1])??0,n[h++]=(c==null?void 0:c[2])??0;const u=t.Ls,f=t.Os,d=t.Bs,g=t.Is,v=t.Hs,p=!(!f||!d);return p?(n[h++]=(g==null?void 0:g[0])??0,n[h++]=(g==null?void 0:g[1])??0,n[h++]=(v==null?void 0:v[0])??0,n[h++]=(v==null?void 0:v[1])??0,n[h++]=f[0],n[h++]=f[1],n[h++]=d[0],n[h++]=d[1]):!p&&!!u?(n[h++]=u[0],n[h++]=u[1],n[h++]=0,n[h++]=0,n[h++]=0,n[h++]=0,n[h++]=0,n[h++]=0):(n[h++]=0,n[h++]=0,n[h++]=0,n[h++]=0,n[h++]=0,n[h++]=0,n[h++]=0,n[h++]=0),n[h++]=t.Gs??0,n[h++]=t.Qs??0,n[h++]=t.Ns??0,n}static Xs(t,e){const r=t.length*Z.FLOATS_PER_INSTANCE,n=e||new Float32Array(r);for(let h=0;h<t.length;h++){const o=h*Z.FLOATS_PER_INSTANCE;Z.Rs(t[h],n,o)}return n}};l(Z,"BYTES_PER_INSTANCE",144),l(Z,"FLOATS_PER_INSTANCE",36);let B=Z;const L=class L{};l(L,"STRIDE",B.BYTES_PER_INSTANCE),l(L,"ATTRIBUTES",{A2:{location:-1,size:2,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:L.STRIDE,offset:0,divisor:1},A3:{location:-1,size:2,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:L.STRIDE,offset:8,divisor:1},A4:{location:-1,size:3,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:L.STRIDE,offset:16,divisor:1},A5:{location:-1,size:4,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:L.STRIDE,offset:28,divisor:1},A6:{location:-1,size:4,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:L.STRIDE,offset:44,divisor:1},A7:{location:-1,size:4,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:L.STRIDE,offset:60,divisor:1},A8:{location:-1,size:3,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:L.STRIDE,offset:76,divisor:1},A9:{location:-1,size:3,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:L.STRIDE,offset:88,divisor:1},Aa:{location:-1,size:4,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:L.STRIDE,offset:100,divisor:1},Ab:{location:-1,size:4,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:L.STRIDE,offset:116,divisor:1},Ac:{location:-1,size:3,type:WebGL2RenderingContext.FLOAT,normalized:!1,stride:L.STRIDE,offset:132,divisor:1}});let V=L;class ne{constructor(t=1e3,e=1.5){l(this,"Ys");l(this,"js");l(this,"Ks");l(this,"Ws",0);l(this,"Zs",0);this.js=t,this.Ks=e;const r=t*B.FLOATS_PER_INSTANCE;this.Ys=new Float32Array(r)}qs(t){if(t<=this.js)return;const e=Math.ceil(t*this.Ks),r=this.js;this.js=e;const n=e*B.FLOATS_PER_INSTANCE,h=new Float32Array(n),o=r*B.FLOATS_PER_INSTANCE;h.set(this.Ys.subarray(0,Math.min(o,this.Ws))),this.Ys=h}Vs(){return{buffer:this.Ys,offset:this.Ws}}Js(t){this.Ws+=t,this.Zs++}ti(){this.Ws=0,this.Zs=0}si(t=0,e){return this.Ys.subarray(t,e??this.Ws)}get ii(){return this.Zs}get ei(){return this.js}get ri(){return this.Ws}get ni(){return this.Zs===0}}class he{constructor(t){l(this,"Ys");this.Ys=t}oi(t){this.Ys.qs(this.Ys.ii+1);const{buffer:e,offset:r}=this.Ys.Vs();e[r+0]=t.x,e[r+1]=t.y,e[r+2]=t.width,e[r+3]=t.height,e[r+4]=t.char0,e[r+5]=t.char1,e[r+6]=t.char2,e[r+7]=t.r1,e[r+8]=t.g1,e[r+9]=t.b1,e[r+10]=t.a1,e[r+11]=t.r2,e[r+12]=t.g2,e[r+13]=t.b2,e[r+14]=t.a2,e[r+15]=t.invert,e[r+16]=t.flipX,e[r+17]=t.flipY,e[r+18]=t.charRot,e[r+19]=t.translationX,e[r+20]=t.translationY,e[r+21]=t.translationZ,e[r+22]=t.rotationX,e[r+23]=t.rotationY,e[r+24]=t.rotationZ;const n=t.curveParams0,h=t.curveParams1;return e[r+25]=n[0],e[r+26]=n[1],e[r+27]=n[2],e[r+28]=n[3],e[r+29]=h[0],e[r+30]=h[1],e[r+31]=h[2],e[r+32]=h[3],e[r+33]=t.depth,e[r+34]=t.baseZ,e[r+35]=t.geometryType,this.Ys.Js(B.FLOATS_PER_INSTANCE),this.Ys.ii-1}get ii(){return this.Ys.ii}}class oe{constructor(t,e=1e3){l(this,"A");l(this,"hi",null);l(this,"ai",0);l(this,"ci",new Map);this.A=t,this.li(e)}li(t){const e=this.A;this.hi&&e.deleteBuffer(this.hi),this.hi=e.createBuffer();const r=t*B.BYTES_PER_INSTANCE;Rt(e,e.ARRAY_BUFFER,this.hi,r,e.DYNAMIC_DRAW),this.ai=t}ui(t){this.li(t)}get ei(){return this.ai}fi(t,e){if(e===0)return;const r=this.A;r.bindBuffer(r.ARRAY_BUFFER,this.hi);const n=e*B.FLOATS_PER_INSTANCE;r.bufferSubData(r.ARRAY_BUFFER,0,t,0,n)}di(t){let e=this.ci.get(t);if(!e){e=new Map;const r=this.A;for(const n in V.ATTRIBUTES){const h=r.getAttribLocation(t,n);h!==-1&&e.set(n,h)}this.ci.set(t,e)}return e}pi(t){const e=this.A,r=t.G,n=this.di(r);for(const[h,o]of n){const c=V.ATTRIBUTES[h];c&&gt(e,o,c.size,c.stride,c.offset,c.divisor,c.type,c.normalized)}}gi(t){const e=this.A,r=this.di(t.G);for(const[n,h]of r)V.ATTRIBUTES[n]&&(e.disableVertexAttribArray(h),e.vertexAttribDivisor(h,0))}gt(){this.hi&&(this.A.deleteBuffer(this.hi),this.hi=null),this.ci.clear()}}class ae{constructor(t,e=1e3,r=1.5){l(this,"A");l(this,"Ys");l(this,"mi");l(this,"_i");this.A=t,this.Ys=new ne(e,r),this.mi=new he(this.Ys),this._i=new oe(t,e)}yi(t){var n,h,o,c,u,f,d,g,v,p;const e=[0,0,0,0],r=[0,0,0,0];return t.Os&&t.Bs?(e[0]=((n=t.Is)==null?void 0:n[0])??0,e[1]=((h=t.Is)==null?void 0:h[1])??0,e[2]=((o=t.Hs)==null?void 0:o[0])??0,e[3]=((c=t.Hs)==null?void 0:c[1])??0,r[0]=t.Os[0],r[1]=t.Os[1],r[2]=t.Bs[0],r[3]=t.Bs[1]):t.Ls&&(e[0]=t.Ls[0],e[1]=t.Ls[1]),this.oi({x:t.bs[0],y:t.bs[1],width:t.Ss[0],height:t.Ss[1],char0:t.Nt[0],char1:t.Nt[1],char2:t.Nt[2],r1:t.Xt[0],g1:t.Xt[1],b1:t.Xt[2],a1:t.Xt[3],r2:t.Yt[0],g2:t.Yt[1],b2:t.Yt[2],a2:t.Yt[3],invert:t.zs[0],flipX:t.zs[1],flipY:t.zs[2],charRot:t.Rt,translationX:((u=t.ks)==null?void 0:u[0])??0,translationY:((f=t.ks)==null?void 0:f[1])??0,translationZ:((d=t.ks)==null?void 0:d[2])??0,rotationX:((g=t.Ds)==null?void 0:g[0])??0,rotationY:((v=t.Ds)==null?void 0:v[1])??0,rotationZ:((p=t.Ds)==null?void 0:p[2])??0,curveParams0:e,curveParams1:r,depth:t.Gs||0,baseZ:t.Qs||0,geometryType:t.Ns||0})}oi(t){const e=this.mi.oi(t);return this.Ys.ei>this._i.ei&&this._i.ui(this.Ys.ei),e}get Ai(){return this.Ys.ii}get ni(){return this.Ys.ni}wi(){this.Ys.ti()}pi(t){const e=this.Ys.ii;if(e===0)return;const r=this.Ys.si();this._i.fi(r,e),this._i.pi(t)}gi(t){this._i.gi(t)}$s(t,e){const r=this.Ys.ii;r!==0&&this.A.drawArraysInstanced(t,0,e,r)}gt(){this._i.gt()}}class H{constructor(t,e,r,n){l(this,"A");l(this,"bi");l(this,"Ci");l(this,"xi");l(this,"Mi",null);this.A=t,this.bi=e,this.Ci=r,this.xi=n;const h=this.A.createBuffer();Rt(this.A,this.A.ARRAY_BUFFER,h,this.xi.Fi,this.A.STATIC_DRAW),this.Mi=h}get type(){return this.Ci}get unitGeometry(){return this.xi}get unitBuffer(){return this.Mi}get batch(){return this.bi}$i(){this.bi.wi()}Pi(){return!this.bi.ni}gt(){this.bi.gt(),this.A.deleteBuffer(this.Mi)}Ti(t,e,r){return this.bi.yi(t)}Ei(t,e,r,n,h,o){const c=h.Bt??0,u=h.It??0,f=h.Ht??0,d=h.bt??0,g=h.Ct??0,v=h.xt??0,p=[0,0,0,0],m=[0,0,0,0];o&&(o.bezStartX!==void 0&&o.bezStartY!==void 0&&o.bezEndX!==void 0&&o.bezEndY!==void 0?(p[0]=o.cp1x??0,p[1]=o.cp1y??0,p[2]=o.cp2x??0,p[3]=o.cp2y??0,m[0]=o.bezStartX??0,m[1]=o.bezStartY??0,m[2]=o.bezEndX??0,m[3]=o.bezEndY??0):o.arcStart===void 0&&o.arcStop===void 0||(p[0]=o.arcStart??0,p[1]=o.arcStop??0));const A={x:t,y:e,width:r,height:n,char0:h.Nt[0],char1:h.Nt[1],char2:h.Nt[2],r1:h.Xt[0],g1:h.Xt[1],b1:h.Xt[2],a1:h.Xt[3],r2:h.Yt[0],g2:h.Yt[1],b2:h.Yt[2],a2:h.Yt[3],invert:h.Et?1:0,flipX:h.Gt?1:0,flipY:h.Qt?1:0,charRot:h.Rt,translationX:c,translationY:u,translationZ:f,rotationX:d,rotationY:g,rotationZ:v,curveParams0:p,curveParams1:m,depth:(o==null?void 0:o.depth)??0,baseZ:(o==null?void 0:o.baseZ)??0,geometryType:re[this.Ci]??0};return this.bi.oi(A)}}const ce={Fi:pt,Ri:6,...k},le={Fi:new Float32Array([0,-.5,0,0,1,-.5,1,0,0,.5,0,1,0,.5,0,1,1,-.5,1,0,1,.5,1,1]),Ri:6,...k},ue={Fi:function(a=32){const t=[],e=2*Math.PI/a;for(let r=0;r<a;r++){const n=r*e,h=(r+1)%a*e,o=Math.cos(n),c=Math.sin(n),u=.5*(o+1),f=.5*(c+1),d=Math.cos(h),g=Math.sin(h),v=.5*(d+1),p=.5*(g+1);t.push(0,0,.5,.5,o,c,u,f,d,g,v,p)}return new Float32Array(t)}(32),Ri:96,...k};let fe={Fi:function(a){const t=[];for(let e=0;e<a;e++){const r=e/a,n=(e+1)/a;t.push(r,0,r,0,r,1,r,1,n,1,n,1)}return new Float32Array(t)}(32),Ri:96,...k};const de={Fi:new Float32Array([0,0,0,0,1,0,1,0,.5,1,.5,1]),Ri:3,...k},ge={Fi:function(a=16){const t=[];for(let e=0;e<a;e++){const r=e/a,n=(e+1)/a;t.push(r,-.5,r,0,n,-.5,n,0,r,.5,r,1,r,.5,r,1,n,-.5,n,0,n,.5,n,1)}return new Float32Array(t)}(16),Ri:96,...k},ve={[F.RECTANGLE]:class extends H{constructor(a,t){super(a,t,F.RECTANGLE,ce)}yi(a,t){return this.Ei(0,0,a.width,a.height,t)}},[F.LINE]:class extends H{constructor(a,t){super(a,t,F.LINE,le)}yi(a,t){const e=a.x2-a.x1,r=a.y2-a.y1,n=Math.hypot(e,r),h=Math.atan2(r,e),o=t.Ot||1,c=a.x1+e/2-n/2,u=a.y1+r/2,f={...t,xt:(t.xt||0)+h};return this.Ei(c,u,n,o,f)}},[F.ELLIPSE]:class extends H{constructor(a,t){super(a,t,F.ELLIPSE,ue)}yi(a,t){return this.Ei(0,0,a.width,a.height,t)}},[F.ARC]:class extends H{constructor(a,t){super(a,t,F.ARC,fe)}yi(a,t){const e=a.start*Math.PI/180,r=a.stop*Math.PI/180;return this.Ei(0,0,a.width,a.height,t,{arcStart:e,arcStop:r})}},[F.TRIANGLE]:class extends H{constructor(a,t){super(a,t,F.TRIANGLE,de)}yi(a,t){const e=Math.min(a.x1,a.x2,a.x3),r=Math.max(a.x1,a.x2,a.x3),n=Math.min(a.y1,a.y2,a.y3),h=r-e,o=Math.max(a.y1,a.y2,a.y3)-n;return this.Ei(e,n,h,o,t)}},[F.BEZIER_CURVE]:class extends H{constructor(a,t){super(a,t,F.BEZIER_CURVE,ge)}yi(a,t){return this.Ei(0,0,1,t.Ot||1,t,{cp1x:a.cp1x,cp1y:a.cp1y,cp2x:a.cp2x,cp2y:a.cp2y,bezStartX:a.x1,bezStartY:a.y1,bezEndX:a.x2,bezEndY:a.y2})}}};class pe{constructor(t){l(this,"A");l(this,"Si");l(this,"zi");this.A=t,this.zi=new se(t),this.Si=new Map;for(const e of Object.values(F)){const r=new ae(t),n=new ve[e](t,r);this.Si.set(e,n)}}ki(t){this.Di(t).forEach(e=>{this.Li(e)})}Di(t){const e=[];let r=null,n=null,h=null;for(const o of t)n!==o.material||h!==o.type?(r&&r.length>0&&e.push({material:n,type:h,commands:r}),r=[o],n=o.material,h=o.type):r.push(o);return r&&r.length>0&&e.push({material:n,type:h,commands:r}),e}Li(t){const{material:e,type:r,commands:n}=t,h=this.Si.get(r);e.shader.D(),e.shader.O(e.uniforms);const o=Ct(this.A),c=n.length>0&&n[0].state.zt;if(e.shader.O({Uu:o[2]/o[3],Ur:[o[2],o[3]],Us:1,Ut:c?1:0}),h.$i(),n.forEach(u=>{h.yi(u.params,u.state)}),h.Pi()){const u=h.unitGeometry,f=h.unitBuffer;try{this.zi.Ts(e.shader.G,r+"",u,f),h.batch.pi(e.shader),h.batch.$s(u.As,u.Ri)}finally{h.batch.gi(e.shader),this.zi.Es(),h.$i()}}}gt(){for(const t of this.Si.values())t.gt();this.Si.clear(),this.zi.gt()}}function Pt(a){let t=0;for(let e=0;e<a.length;e++)t=(t<<5)-t+a.charCodeAt(e),t&=t;return t}const Mt=new WeakMap;let Ae=1;function St(a){if(a==null)return 0;if(typeof a!="object"&&typeof a!="function")return Pt(a+"");let t=Mt.get(a);return t||(t=Ae++,Mt.set(a,t)),t}function Q(a,t){return(a<<5)-a+t}class me{constructor(t){l(this,"Oi",0);l(this,"Bi");l(this,"Ii");l(this,"Hi",new Map);this.Bi=new W(t,tt,`#version 300 es precision highp float;in vec3 v_glyphIndex;in vec4 v_glyphColor;in vec4 v_cellColor;in vec4 v_glyphFlags;layout(location=0)out vec4 o_character;layout(location=1)out vec4 o_primaryColor;layout(location=2)out vec4 o_secondaryColor;layout(location=3)out vec4 A;void main(){int B=int(v_glyphFlags.r>0.5?1:0);int C=int(v_glyphFlags.g>0.5?1:0);int D=int(v_glyphFlags.b>0.5?1:0);float E=float(B|(C<<1)|(D<<2))/255.;o_character=vec4(v_glyphIndex.xy,E,clamp(v_glyphFlags.a,0.,1.));o_primaryColor=vec4(v_glyphColor.rgb,v_glyphColor.a);o_secondaryColor=vec4(v_cellColor.rgb,v_cellColor.a);A=vec4(0.);}`),this.Ii={id:this.Oi++,shader:this.Bi,uniforms:Object.freeze({}),hash:this.Gi(this.Bi,{}),isBuiltIn:!0}}get Qi(){return this.Ii}dt(t,e={},r=!1){const n=this.Gi(t,e),h=this.Hi.get(n);if(h)return h;const o={id:this.Oi++,shader:t,uniforms:Object.freeze({...e}),hash:n,isBuiltIn:r};return this.Hi.set(n,o),o}Ni(t,e={}){return{id:this.Oi++,shader:t,uniforms:Object.freeze({...e}),hash:0,isBuiltIn:!1}}Gi(t,e){const r=St(t.G),n=function(h,o){let c=0;const u=Object.keys(h).sort();for(const f of u)c=Q(c,Pt(f)),c=Q(c,o(h[f]));return c}(e,this.Xi.bind(this));return Q(r,n)}Xi(t){return typeof t=="number"||typeof t=="boolean"?function(e){return typeof e=="boolean"?e?1:0:Math.floor(e)}(t):Array.isArray(t)?function(e){let r=0;const n=Array.isArray(e[0])?e.flat():e;for(const h of n)r=Q(r,typeof h=="number"?h:0);return r}(t):t instanceof Float32Array||t instanceof Int32Array?function(e){let r=0;const n=Math.min(e.length,16);for(let h=0;h<n;h++)r=Q(r,e[h]);return r}(t):t instanceof WebGLTexture?St(t):0}gt(){this.Bi!=this.Bi&&this.Bi.dispose(),this.Bi.dispose(),this.Hi.clear()}}class ye{constructor(){l(this,"Yi",[]);l(this,"ji",1);l(this,"Ss",0)}Ki(t,e){if(this.Ss>=this.Yi.length){const n={id:this.ji++,type:t,params:{},state:it.Lt(),material:e};this.Yi.push(n)}const r=this.Yi[this.Ss];return r.id=this.ji++,r.type=t,r.material=e,this.Ss++,r}Wi(t,e,r){const n=this.Ki(F.RECTANGLE,r),h=n.params;return h.width=t.width,h.height=t.height,e.Wt(n.state),n.id}Zi(t,e,r){const n=this.Ki(F.LINE,r),h=n.params;return h.x1=t.x1,h.y1=t.y1,h.x2=t.x2,h.y2=t.y2,h.thickness=t.thickness,e.Wt(n.state),n.id}qi(t,e,r){const n=this.Ki(F.ELLIPSE,r),h=n.params;return h.width=t.width,h.height=t.height,h.startAngle=t.startAngle,h.endAngle=t.endAngle,h.segments=t.segments,e.Wt(n.state),n.id}Vi(t,e,r){const n=this.Ki(F.ARC,r),h=n.params;return h.width=t.width,h.height=t.height,h.start=t.start,h.stop=t.stop,e.Wt(n.state),n.id}Ji(t,e,r){const n=this.Ki(F.TRIANGLE,r),h=n.params;return h.x1=t.x1,h.y1=t.y1,h.x2=t.x2,h.y2=t.y2,h.x3=t.x3,h.y3=t.y3,e.Wt(n.state),n.id}te(t,e,r){const n=this.Ki(F.BEZIER_CURVE,r),h=n.params;return h.x1=t.x1,h.y1=t.y1,h.cp1x=t.cp1x,h.cp1y=t.cp1y,h.cp2x=t.cp2x,h.cp2y=t.cp2y,h.x2=t.x2,h.y2=t.y2,h.thickness=t.thickness,h.segments=t.segments,e.Wt(n.state),n.id}wi(){this.Ss=0}[Symbol.iterator](){let t=0;const e=this.Ss,r=this.Yi;return{next:()=>t<e?{value:r[t++],done:!1}:{value:void 0,done:!0}}}}class Ee{constructor(t){l(this,"A");l(this,"se",null);l(this,"ie");l(this,"vt");l(this,"ee");l(this,"re");l(this,"ne");l(this,"oe",null);l(this,"he",{});l(this,"ae",[]);l(this,"ce",[]);l(this,"le",[]);l(this,"ue",null);l(this,"fe",[0,0,0,0]);l(this,"de",1);this.A=t,t.enable(t.DEPTH_TEST),t.depthFunc(t.LEQUAL),t.clearDepth(1),t.depthMask(!0),t.disable(t.CULL_FACE),this.ee=new it,this.vt=new me(t),this.re=new ye,this.ie=new pe(t),this.ne=new ie(t);const e=[0,0,t.canvas.width,t.canvas.height];vt(t,e),this.ae.push(null),this.ce.push(e),this.le.push(1),this.ue=null,this.fe=e,this.de=1}rt(){this.ae.push(this.ue),this.ce.push([...this.fe]),this.le.push(this.de)}lt(){const t=this.ae.pop()??null,e=this.ce.pop()??[0,0,this.A.canvas.width,this.A.canvas.height],r=this.le.pop()??1;this.nt(t,e[2],e[3],r)}nt(t,e,r,n=1){const h=this.A;this.ue!==t&&(h.bindFramebuffer(h.FRAMEBUFFER,t),this.ue=t),this.de=n;const o=[0,0,e,r];this.fe[0]===o[0]&&this.fe[1]===o[1]&&this.fe[2]===o[2]&&this.fe[3]===o[3]||(h.viewport(...o),vt(h,o),this.fe=o)}ve(t){this.se!==t&&(this.se=t,t.D())}pe(t,e){return new W(this.A,t,e)}ge(t){this.oe=t,t&&(this.he={})}I(t,e){this.he[t]=e}me(t){Object.assign(this.he,t)}_e(t){return new W(this.A,tt,t)}ye(t,e,r,n){t instanceof X||!n||t.Ae(n),this.re.Wi({width:e??t.width,height:r??t.height},this.ee,t.ut())}we(t,e,r,n){this.ne.$s(t,e,r,n)}be(t,e){if(this.oe){const r=this.vt.Ni(this.oe,this.he);this.re.Wi({width:t,height:e},this.ee,r),this.oe=null,this.he={}}else this.re.Wi({width:t,height:e},this.ee,this.vt.Qi)}Ce(t,e,r,n){this.re.Zi({x1:t,y1:e,x2:r,y2:n},this.ee,this.vt.Qi)}xe(t,e){this.re.qi({width:t,height:e},this.ee,this.vt.Qi)}Me(t,e,r,n,h,o){this.re.Ji({x1:t,y1:e,x2:r,y2:n,x3:h,y3:o},this.ee,this.vt.Qi)}Fe(t,e,r,n,h,o,c,u){this.re.te({x1:t,y1:e,cp1x:r,cp1y:n,cp2x:h,cp2y:o,x2:c,y2:u},this.ee,this.vt.Qi)}$e(t,e,r,n){this.re.Vi({width:t,height:e,start:r,stop:n},this.ee,this.vt.Qi)}Pe(t,e,r=1,n={}){return new X(this.A,t,e,r,n,this)}Te(t,e=t,r=t,n=255){this.ee.ps(t,e??t,r??t,n);const[h,o,c,u]=this.ee.canvasBackgroundColor;this.Ee(h,o,c,u,!1)}wi(t=0,e=0,r=0,n=0){this.Ee(t,e,r,n,!0)}Ee(t,e,r,n,h){const o=this.A;if(this.de>1){const c=h?[1,1,0,0]:[0,0,0,0];o.clearBufferfv(o.COLOR,0,new Float32Array(c)),o.clearBufferfv(o.COLOR,1,new Float32Array([0,0,0,0])),this.de>=3&&o.clearBufferfv(o.COLOR,2,new Float32Array([t,e,r,n]));for(let u=3;u<this.de;u++)o.clearBufferfv(o.COLOR,u,new Float32Array([0,0,0,0]))}else o.clearColor(t,e,r,n),o.clear(o.COLOR_BUFFER_BIT)}Re(){const t=[0,0,this.A.canvas.width,this.A.canvas.height];this.A.viewport(...t),vt(this.A,t),this.fe=t,this.ce.length>0&&(this.ce[0]=t)}ct(){const t=this.re;this.ie.ki(t),t.wi(),this.se=null}gt(){this.vt.gt(),this.ie.gt(),this.ne.gt()}get context(){return this.A}get state(){return this.ee}get materialManager(){return this.vt}}const C={readShort:(a,t)=>(C.t.uint16[0]=a[t]<<8|a[t+1],C.t.int16[0]),readUshort:(a,t)=>a[t]<<8|a[t+1],readUshorts(a,t,e){const r=[];for(let n=0;n<e;n++)r.push(C.readUshort(a,t+2*n));return r},readUint(a,t){const e=C.t.uint8;return e[3]=a[t],e[2]=a[t+1],e[1]=a[t+2],e[0]=a[t+3],C.t.uint32[0]},readASCII(a,t,e){let r="";for(let n=0;n<e;n++)r+=String.fromCharCode(a[t+n]);return r},t:(()=>{const a=new ArrayBuffer(8);return{uint8:new Uint8Array(a),int16:new Int16Array(a),uint16:new Uint16Array(a),uint32:new Uint32Array(a)}})()};function rt(a){return a+3&-4}function st(a,t,e){a[t]=e>>>8&255,a[t+1]=255&e}function O(a,t,e){a[t]=e>>>24&255,a[t+1]=e>>>16&255,a[t+2]=e>>>8&255,a[t+3]=255&e}function we(a,t,e){for(let r=0;r<e.length;r++)a[t+r]=255&e.charCodeAt(r)}function At(a,t,e){const r=t+e;let n=0;const h=C.t;for(let o=t;o<r;o+=4)h.uint8[3]=a[o]||0,h.uint8[2]=a[o+1]||0,h.uint8[1]=a[o+2]||0,h.uint8[0]=a[o+3]||0,n=n+(h.uint32[0]>>>0)>>>0;return n>>>0}class be{constructor(t){l(this,"b");l(this,"p",0);l(this,"bitbuf",0);l(this,"bitcnt",0);this.b=t}readBits(t){for(;this.bitcnt<t;){const r=this.b[this.p++]||0;this.bitbuf|=r<<this.bitcnt,this.bitcnt+=8}const e=this.bitbuf&(1<<t)-1;return this.bitbuf>>>=t,this.bitcnt-=t,e}alignToByte(){this.bitbuf=0,this.bitcnt=0}get offset(){return this.p}}function K(a){let t=32,e=0;for(const c of a)c&&(c<t&&(t=c),c>e&&(e=c));if(e===0)return{min:0,max:0,table:new Map};const r=new Uint32Array(e+1);for(const c of a)c&&r[c]++;const n=new Uint32Array(e+1);let h=0;r[0]=0;for(let c=1;c<=e;c++)h=h+r[c-1]<<1,n[c]=h;const o=new Map;for(let c=0;c<a.length;c++){const u=a[c];if(!u)continue;const f=n[u]++;let d=o.get(u);d||(d=[],o.set(u,d)),d[xe(f,u)]=c}return{min:t,max:e,table:o}}function mt(a,t){let e=0;for(let r=1;r<=t.max;r++){e|=a.readBits(1)<<r-1;const n=t.table.get(r);if(n&&e<n.length){const h=n[e];if(h!==void 0)return h}}throw Error("Invalid Huffman code")}function xe(a,t){let e=0;for(let r=0;r<t;r++)e=e<<1|1&a,a>>>=1;return e>>>0}function Te(a){if(a.length<2)throw Error("ZLIB data too short");const t=a[0],e=a[1];if((15&t)!=8)throw Error("Unsupported ZLIB compression method");if(((t<<8)+e)%31!=0)throw Error("Bad ZLIB header check");let r=2;32&e&&(r+=4);const n=[];return function(h,o){const c=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258],u=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],f=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577],d=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13];let g=0;for(;!g;){g=h.readBits(1);const v=h.readBits(2);if(v===0){h.alignToByte();const p=h.readBits(16);if((65535&(65535^p))!==h.readBits(16))throw Error("DEFLATE uncompressed LEN/NLEN mismatch");for(let m=0;m<p;m++)o.push(h.readBits(8))}else{if(v!==1&&v!==2)throw Error("Unsupported DEFLATE type");{let p,m;if(v===1){const A=Array(288).fill(0);for(let y=0;y<=143;y++)A[y]=8;for(let y=144;y<=255;y++)A[y]=9;for(let y=256;y<=279;y++)A[y]=7;for(let y=280;y<=287;y++)A[y]=8;p=K(A),m=K(Array(32).fill(5))}else{const A=h.readBits(5)+257,y=h.readBits(5)+1,E=h.readBits(4)+4,b=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],w=Array(19).fill(0);for(let M=0;M<E;M++)w[b[M]]=h.readBits(3);const P=K(w),x=[];for(;x.length<A+y;){const M=mt(h,P);if(M<=15)x.push(M);else if(M===16){const _=h.readBits(2)+3,N=x[x.length-1]||0;for(let lt=0;lt<_;lt++)x.push(N)}else if(M===17){const _=h.readBits(3)+3;for(let N=0;N<_;N++)x.push(0)}else{if(M!==18)throw Error("Invalid code length symbol");{const _=h.readBits(7)+11;for(let N=0;N<_;N++)x.push(0)}}}const S=x.slice(0,A),D=x.slice(A,A+y);p=K(S),m=K(D)}for(;;){const A=mt(h,p);if(A<256)o.push(A);else{if(A===256)break;if(A>256&&A<286){const y=A-257;let E=c[y];const b=u[y];b&&(E+=h.readBits(b));const w=mt(h,m);if(w>=30)throw Error("Invalid distance symbol");let P=f[w];const x=d[w];x&&(P+=h.readBits(x));const S=o.length-P;if(S<0)throw Error("Invalid distance");for(let D=0;D<E;D++)o.push(o[S+D]||0)}else if(A===286||A===287)throw Error("Reserved length symbol")}}}}}}(new be(a.subarray(r)),n),new Uint8Array(n)}function Re(a){const t=C,e=new Uint8Array(a);if(t.readASCII(e,0,4)!=="wOFF")throw Error("Invalid WOFF signature");const r=t.readUint(e,4),n=t.readUshort(e,12),h=t.readUint(e,16),o=[];let c=44;for(let E=0;E<n;E++){const b=t.readASCII(e,c,4),w=t.readUint(e,c+4),P=t.readUint(e,c+8),x=t.readUint(e,c+12),S=t.readUint(e,c+16);o.push({tag:b,offset:w,compLength:P,origLength:x,checksum:S}),c+=20}for(const E of o){const b=new Uint8Array(e.buffer,E.offset,E.compLength);if(E.compLength===E.origLength)E.data=new Uint8Array(b);else if(E.data=Te(b),E.data.length!==E.origLength)if(E.data.length<E.origLength){const w=new Uint8Array(E.origLength);w.set(E.data),E.data=w}else E.data=E.data.subarray(0,E.origLength)}const u=n;let f=1,d=0;for(;f<<1<=u;)f<<=1,d++;const g=16*f,v=16*u-g;let p=12+16*u;const m={};for(const E of o)m[E.tag]=p,p=rt(p+E.data.length);const A=new Uint8Array(Math.max(h||0,p));O(A,0,r),st(A,4,u),st(A,6,g),st(A,8,d),st(A,10,v);let y=12;for(const E of o){we(A,y,E.tag),y+=4;let b=E.data;if(E.tag==="head"&&b.length>=12){const w=new Uint8Array(b);O(w,8,0),O(A,y,At(w,0,rt(w.length))),y+=4}else O(A,y,At(b,0,rt(b.length))),y+=4;O(A,y,m[E.tag]),y+=4,O(A,y,E.data.length),y+=4}for(const E of o){const b=m[E.tag];A.set(E.data,b)}if(o.find(E=>E.tag==="head")){const E=m.head,b=function(w,P){const x=P+8,S=[w[x],w[x+1],w[x+2],w[x+3]];O(w,x,0);const D=2981146554-(At(w,0,rt(w.length))>>>0)>>>0;return w[x]=S[0],w[x+1]=S[1],w[x+2]=S[2],w[x+3]=S[3],D>>>0}(A,E);O(A,E+8,b)}return A.buffer}const Fe={parseTab(a,t,e){const r={tables:[],ids:{},off:t};a=new Uint8Array(a.buffer,t,e),t=0;const n=C,h=n.readUshort,o=h(a,t+=2);t+=2;const c=[];for(let u=0;u<o;u++){const f=h(a,t),d=h(a,t+=2);t+=2;const g=n.readUint(a,t);t+=4;const v=`p${f}e${d}`;let p=c.indexOf(g);if(p===-1){let m;p=r.tables.length,c.push(g);const A=h(a,g);m=A===4?this.parse4(a,g):A===12?this.parse12(a,g):{format:A},r.tables.push(m)}r.ids[v]=p}return r},parse4(a,t){const e=C,r=e.readUshort,n=e.readUshorts,h=t,o=r(a,t+=2);t+=2;const c=r(a,t+=2)>>>1,u={format:4,searchRange:r(a,t+=2),entrySelector:0,rangeShift:0,endCount:[],startCount:[],idDelta:[],idRangeOffset:[],glyphIdArray:[]};t+=2,u.entrySelector=r(a,t),t+=2,u.rangeShift=r(a,t),t+=2,u.endCount=n(a,t,c),t+=2*c,t+=2,u.startCount=n(a,t,c),t+=2*c;for(let f=0;f<c;f++)u.idDelta.push(e.readShort(a,t)),t+=2;return u.idRangeOffset=n(a,t,c),t+=2*c,u.glyphIdArray=n(a,t,h+o-t>>1),u},parse12(a,t){const e=C.readUint;e(a,t+=4),e(a,t+=4);const r=e(a,t+=4);t+=4;const n=new Uint32Array(3*r);for(let h=0;h<3*r;h+=3)n[h]=e(a,t+(h<<2)),n[h+1]=e(a,t+(h<<2)+4),n[h+2]=e(a,t+(h<<2)+8);return{format:12,groups:n}}},Ce={parseTab(a,t,e){const r=C;t+=18;const n=r.readUshort(a,t);t+=2,t+=16;const h=r.readShort(a,t);t+=2;const o=r.readShort(a,t);t+=2;const c=r.readShort(a,t);t+=2;const u=r.readShort(a,t);return t+=2,t+=6,{unitsPerEm:n,xMin:h,yMin:o,xMax:c,yMax:u,indexToLocFormat:r.readShort(a,t)}}},Pe={parseTab(a,t,e){const r=C;t+=4;const n=["ascender","descender","lineGap","advanceWidthMax","minLeftSideBearing","minRightSideBearing","xMaxExtent","caretSlopeRise","caretSlopeRun","caretOffset","res0","res1","res2","res3","metricDataFormat","numberOfHMetrics"],h={};for(let o=0;o<n.length;o++){const c=n[o],u=c==="advanceWidthMax"||c==="numberOfHMetrics"?r.readUshort:r.readShort;h[c]=u(a,t+2*o)}return h}},Me={parseTab(a,t,e,r){const n=C,h=[],o=[],c=r.maxp.numGlyphs,u=r.hhea.numberOfHMetrics;let f=0,d=0,g=0;for(;g<u;)f=n.readUshort(a,t+(g<<2)),d=n.readShort(a,t+(g<<2)+2),h.push(f),o.push(d),g++;for(;g<c;)h.push(f),o.push(d),g++;return{aWidth:h,lsBearing:o}}},Ut={cmap:Fe,head:Ce,hhea:Pe,maxp:{parseTab(a,t,e){const r=C;return r.readUint(a,t),t+=4,{numGlyphs:r.readUshort(a,t)}}},hmtx:Me,loca:{parseTab(a,t,e,r){const n=C,h=[],o=r.head.indexToLocFormat,c=r.maxp.numGlyphs+1;if(o===0)for(let u=0;u<c;u++)h.push(n.readUshort(a,t+(u<<1))<<1);else if(o===1)for(let u=0;u<c;u++)h.push(n.readUint(a,t+(u<<2)));return h}},glyf:{parseTab(a,t,e,r){const n=[],h=r.maxp.numGlyphs;for(let o=0;o<h;o++)n.push(null);return n},Se(a,t){const e=C,r=a.ze,n=a.loca;if(n[t]===n[t+1])return null;const h=J.findTable(r,"glyf",a.ke);if(!h)return null;let o=h[0]+n[t];const c={};if(c.noc=e.readShort(r,o),o+=2,c.xMin=e.readShort(r,o),o+=2,c.yMin=e.readShort(r,o),o+=2,c.xMax=e.readShort(r,o),o+=2,c.yMax=e.readShort(r,o),o+=2,c.xMin>=c.xMax||c.yMin>=c.yMax)return null;if(c.noc>0){c.endPts=[];for(let v=0;v<c.noc;v++)c.endPts.push(e.readUshort(r,o)),o+=2;const u=e.readUshort(r,o);if(o+=2,r.length-o<u)return null;o+=u;const f=c.endPts[c.noc-1]+1;c.flags=[];for(let v=0;v<f;v++){const p=r[o];if(o++,c.flags.push(p),8&p){const m=r[o];o++;for(let A=0;A<m;A++)c.flags.push(p),v++}}c.xs=[];for(let v=0;v<f;v++){const p=c.flags[v],m=!!(16&p);2&p?(c.xs.push(m?r[o]:-r[o]),o++):m?c.xs.push(0):(c.xs.push(e.readShort(r,o)),o+=2)}c.ys=[];for(let v=0;v<f;v++){const p=c.flags[v],m=!!(32&p);4&p?(c.ys.push(m?r[o]:-r[o]),o++):m?c.ys.push(0):(c.ys.push(e.readShort(r,o)),o+=2)}let d=0,g=0;for(let v=0;v<f;v++)d+=c.xs[v],g+=c.ys[v],c.xs[v]=d,c.ys[v]=g}else c.parts=[],c.endPts=[],c.flags=[],c.xs=[],c.ys=[];return c}}},J={parse(a){const t=new Uint8Array(a);C.readASCII(t,0,4)==="wOFF"&&(a=Re(a));const e=new Uint8Array(a),r=Ut,n={},h={ze:e,De:0,ke:0};for(const o in r){const c=o,u=J.findTable(e,c,0);if(u){const[f,d]=u;let g=n[f];g==null&&(g=r[c].parseTab(e,f,d,h),n[f]=g),h[c]=g}}return[h]},findTable(a,t,e){const r=C,n=r.readUshort(a,e+4);let h=e+12;for(let o=0;o<n;o++){const c=r.readASCII(a,h,4);r.readUint(a,h+4);const u=r.readUint(a,h+8),f=r.readUint(a,h+12);if(c===t)return[u,f];h+=16}return null},T:Ut,B:C};class Se{Le(t){var r;const e=[];return(r=t.cmap)!=null&&r.tables?(t.cmap.tables.forEach(n=>{if(n.format===4){const h=this.Oe(n);e.push(...h)}else if(n.format===12){const h=this.Be(n);e.push(...h)}}),[...new Set(e)]):[]}Oe(t){const e=[];if(!(t.startCount&&t.endCount&&t.idRangeOffset&&t.idDelta))return e;for(let r=0;r<t.startCount.length;r++){const n=t.startCount[r],h=t.endCount[r];if(n!==65535||h!==65535){for(let o=n;o<=h;o++)if(this.Ie(t,o,r)>0)try{const c=String.fromCodePoint(o);e.push(c)}catch{}}}return e}Be(t){const e=[];if(!t.groups)return e;for(let r=0;r<t.groups.length;r+=3){const n=t.groups[r],h=t.groups[r+1],o=t.groups[r+2];for(let c=n;c<=h;c++)if(o+(c-n)>0)try{const u=String.fromCodePoint(c);e.push(u)}catch{}}return e}Ie(t,e,r){if(t.idRangeOffset[r]===0)return e+t.idDelta[r]&65535;{const n=t.idRangeOffset[r]/2+(e-t.startCount[r])-(t.startCount.length-r);if(n>=0&&t.glyphIdArray&&n<t.glyphIdArray.length){const h=t.glyphIdArray[n];if(h!==0)return h+t.idDelta[r]&65535}}return 0}}class Ue{constructor(t){l(this,"He");l(this,"Ge");l(this,"Z");this.Z=t,this.He=document.createElement("canvas"),this.Ge=this.He.getContext("2d",{willReadFrequently:!0,alpha:!0})}Qe(t,e,r,n){const h=t.length,o=Math.ceil(Math.sqrt(h)),c=Math.ceil(h/o),u=e.width*o,f=e.height*c;this.Ne(u,f),this.Xe(t,e,o,r,n);const d=this.Z.Pe(u,f,1,{filter:"nearest"});return d.et(this.He),{framebuffer:d,columns:o,rows:c}}Ne(t,e){this.He.width=t,this.He.height=e,this.He.style.width=t+"px",this.He.style.height=e+"px",this.Ge.imageSmoothingEnabled=!1,this.He.style.imageRendering="pixelated",this.Ge.clearRect(0,0,t,e),this.Ge.textBaseline="top",this.Ge.textAlign="left",this.Ge.fillStyle="white"}Xe(t,e,r,n,h){const o=n/h.head.unitsPerEm;for(let c=0;c<t.length;c++){const u=c%r,f=Math.floor(c/r),d=t[c].glyphData;if(!d)continue;const g=d.advanceWidth*o,v=u*e.width,p=f*e.height,m=v+.5*e.width,A=p+.5*e.height,y=Math.round(m-.5*e.width),E=Math.round(A-.5*n),b=y+.5*(e.width-g),w=E+h.hhea.ascender*o;this.Ye(d,b,w,o)}}Ye(t,e,r,n){if(!t||!t.xs||t.noc===0)return;let{xs:h,ys:o,endPts:c,flags:u}=t;if(!(h&&o&&c&&u))return;this.Ge.beginPath();let f=0;for(let d=0;d<c.length;d++){const g=c[d];if(!(g<f)){if(g>=f){const v=e+h[f]*n,p=r-o[f]*n;this.Ge.moveTo(v,p);let m=f+1;for(;m<=g;)if(1&u[m]){const A=e+h[m]*n,y=r-o[m]*n;this.Ge.lineTo(A,y),m++}else{const A=e+h[m]*n,y=r-o[m]*n;if(m+1>g){const b=e+h[f]*n,w=r-o[f]*n;if(1&u[f])this.Ge.quadraticCurveTo(A,y,b,w);else{const P=(A+b)/2,x=(y+w)/2;this.Ge.quadraticCurveTo(A,y,P,x)}break}const E=m+1;if(1&u[E]){const b=e+h[E]*n,w=r-o[E]*n;this.Ge.quadraticCurveTo(A,y,b,w),m=E+1}else{const b=(A+(e+h[E]*n))/2,w=(y+(r-o[E]*n))/2;this.Ge.quadraticCurveTo(A,y,b,w),m=E}}this.Ge.closePath()}f=g+1}}this.Ge.fill()}}class Lt{je(t,e){const r=t.cmap;if(!r||!r.tables)return 0;let n=0;for(const h of r.tables)if(h.format===4?n=this.Ke(e,h):h.format===12&&(n=this.We(e,h)),n>0)break;return n}Ze(t,e){const r=e.codePointAt(0);return r===void 0?0:this.je(t,r)}qe(t,e){const r=t.hmtx;return r&&r.aWidth&&r.aWidth.length!==0?e<r.aWidth.length?r.aWidth[e]:r.aWidth[r.aWidth.length-1]:0}Ve(t,e){const r=e/t.head.unitsPerEm,n=t.hhea.ascender*r,h=t.hhea.descender*r,o=t.hhea.lineGap*r;return{ascender:n,descender:h,lineGap:o,lineHeight:n-h+o,unitsPerEm:t.head.unitsPerEm,scale:r}}Ke(t,e){const r=e.endCount.length;let n=-1;for(let h=0;h<r;h++)if(t<=e.endCount[h]){n=h;break}if(n===-1||t<e.startCount[n])return 0;if(e.idRangeOffset[n]===0)return t+e.idDelta[n]&65535;{const h=e.idRangeOffset[n]/2+(t-e.startCount[n])-(r-n);if(h>=0&&h<e.glyphIdArray.length){const o=e.glyphIdArray[h];return o===0?0:o+e.idDelta[n]&65535}}return 0}We(t,e){const r=e.groups.length/3;for(let n=0;n<r;n++){const h=e.groups[3*n],o=e.groups[3*n+1],c=e.groups[3*n+2];if(t>=h&&t<=o)return c+(t-h)}return 0}}class Le{constructor(){l(this,"Je");this.Je=new Lt}tr(t,e,r){let n=0;const h=this.Je.Ve(r,e),o=h.lineHeight;for(const c of t){const u=this.Je.Ze(r,c);if(u===0)continue;const f=this.Je.qe(r,u)*h.scale;n=Math.max(n,f)}return{width:Math.ceil(n),height:Math.ceil(o)}}}class Ne{constructor(){l(this,"sr");this.sr=new Lt}ir(t,e){const r=[],n=new Map;return t.forEach((h,o)=>{const c=h.codePointAt(0)||0,u={character:h,unicode:c,color:this.er(o),glyphData:this.rr(e,h)};r.push(u),n.set(h,u)}),{array:r,map:n}}er(t){return[t%256/255,Math.floor(t/256)%256/255,0]}rr(t,e){const r=e.codePointAt(0)||0,n=this.sr.je(t,r);if(n===0)return null;let h=0;t.hmtx&&t.hmtx.aWidth&&n>0&&t.hmtx.aWidth[n]!==void 0&&(h=t.hmtx.aWidth[n]);const o=J.T.glyf.Se(t,n);return o?{...o,advanceWidth:h}:null}}class nt{constructor(t,e=16){l(this,"nr");l(this,"hr",[]);l(this,"ar",new Map);l(this,"cr");l(this,"lr",16);l(this,"ur",0);l(this,"dr",0);l(this,"vr",{width:0,height:0});l(this,"pr");l(this,"gr");l(this,"mr");l(this,"_r");l(this,"yr");l(this,"Ar",!1);this.lr=e,this.gr=new Se,this.mr=new Ue(t),this._r=new Le,this.yr=new Ne}async wr(t){if(this.Ar)return;let e;if(t){const r=await fetch(t);if(!r.ok)throw new R(`Failed to load font file: ${r.status} ${r.statusText}`);e=await r.arrayBuffer()}else e=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+OGwKyWzKnW