three-text 0.4.5 → 0.4.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.min.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * three-text v0.4.5
2
+ * three-text v0.4.7
3
3
  * Copyright (C) 2025 Countertype LLC
4
4
  *
5
5
  * This program is free software: you can redistribute it and/or modify
@@ -21,11 +21,11 @@ return M.set(t,n??null),n}function e(t){const e=t.getUint16(4),i=new Map
21
21
  for(let n=0;e>n;n++){const e=12+16*n
22
22
  if(e+16>t.byteLength)break
23
23
  const s=t.getUint32(e),r=t.getUint32(e+4),o=t.getUint32(e+8),a=t.getUint32(e+12)
24
- i.set(s,{tag:s,t:r,offset:o,length:a})}return i}async function i(t,e){if(!q.test(t))throw Error(`Invalid hyphenation language code "${t}". Expected e.g. "en-us".`)
25
- if(!e&&!Y.has(t))throw Error(`Unsupported hyphenation language "${t}". Use a built-in language (e.g. "en-us") or register patterns via Text.registerPattern("${t}", pattern).`)
24
+ i.set(s,{tag:s,t:r,offset:o,length:a})}return i}async function i(t,e){if(!J.test(t))throw Error(`Invalid hyphenation language code "${t}". Expected e.g. "en-us".`)
25
+ if(!e&&!K.has(t))throw Error(`Unsupported hyphenation language "${t}". Use a built-in language (e.g. "en-us") or register patterns via Text.registerPattern("${t}", pattern).`)
26
26
  try{if(e)return(await import(`${e}${t}.js`)).default
27
27
  if("string"==typeof import.meta?.url){const e=new URL(".",import.meta.url).href,i=new URL(`./patterns/${t}.js`,e).href
28
- return(await import(i)).default}return(await import(`./patterns/${t}.js`)).default}catch(e){throw Error(`Failed to load hyphenation patterns for ${t}. Consider using static imports: import pattern from 'three-text/patterns/${t}'; Text.registerPattern('${t}', pattern);`)}}function n(t,e,i,n){return`${t}_${e}_${Math.round(1e3*i)/1e3}_${n}`}function s(){return new Q}function r(t){return t&&t.i&&{}.hasOwnProperty.call(t,"default")?t.default:t}function o(t){if(t.i)return t
28
+ return(await import(i)).default}return(await import(`./patterns/${t}.js`)).default}catch(e){throw Error(`Failed to load hyphenation patterns for ${t}. Consider using static imports: import pattern from 'three-text/patterns/${t}'; Text.registerPattern('${t}', pattern);`)}}function n(t,e,i,n){return`${t}_${e}_${Math.round(1e3*i)/1e3}_${n}`}function s(){return new Z}function r(t){return t&&t.i&&{}.hasOwnProperty.call(t,"default")?t.default:t}function o(t){if(t.i)return t
29
29
  var e=t.default
30
30
  if("function"==typeof e){var i=function t(){return this instanceof t?Reflect.construct(e,arguments,this.constructor):e.apply(this,arguments)}
31
31
  i.prototype=e.prototype}else i={}
@@ -66,7 +66,7 @@ try{return await e()}finally{this.end(t)}}}
66
66
  const l=800,u=100,f=0,d=1/3
67
67
  var y,p;(t=>{t[t.BOX=0]="BOX",t[t.GLUE=1]="GLUE",t[t.PENALTY=2]="PENALTY",t[t.DISCRETIONARY=3]="DISCRETIONARY"})(y||(y={})),(t=>{t[t.VERY_LOOSE=0]="VERY_LOOSE",t[t.LOOSE=1]="LOOSE",t[t.DECENT=2]="DECENT",t[t.TIGHT=3]="TIGHT"})(p||(p={}))
68
68
  class w{constructor(){this.F=new Map,this.L=[]}getKey(t,e){return t<<2|e}G(t){const e=this.getKey(t.position,t.O),i=this.F.get(e)
69
- return i?i.k>t.k&&(i.k=t.k,i.D=t.D,i.U=t.U,i.line=t.line,i.$=t.$,i.N=t.N,i.P=t.P,!0):(t.active=!0,t.W=this.L.length,this.L.push(t),this.F.set(e,t),!0)}R(t){if(!t.active)return
69
+ return i?i.k>t.k&&(i.k=t.k,i.D=t.D,i.N=t.N,i.line=t.line,i.U=t.U,i.$=t.$,i.P=t.P,!0):(t.active=!0,t.W=this.L.length,this.L.push(t),this.F.set(e,t),!0)}R(t){if(!t.active)return
70
70
  t.active=!1
71
71
  const e=t.W,i=this.L.length-1
72
72
  if(e!==i){const t=this.L[i]
@@ -124,7 +124,7 @@ if(c&&e>c){const e=Array.from(t)
124
124
  for(let t=0;e.length>t;t++)l.push({type:y.BOX,width:i(e[t]),text:e[t],Z:d+t}),e.length-1>t&&l.push({type:y.PENALTY,width:0,tt:5e3,Z:d+t+1})}else l.push({type:y.BOX,width:e,text:t,Z:d})}}else{const e=i(t)
125
125
  if(c&&e>c){const e=Array.from(t)
126
126
  for(let t=0;e.length>t;t++)l.push({type:y.BOX,width:i(e[t]),text:e[t],Z:d+t}),e.length-1>t&&l.push({type:y.PENALTY,width:0,tt:5e3,Z:d+t+1})}else l.push({type:y.BOX,width:e,text:t,Z:d})}d+=t.length}f+=t.length}}return l}static lineBreak(t,e,i,n,s){const r=new w
127
- r.G({position:0,line:0,O:p.DECENT,k:0,D:null,U:!1,active:!0,W:0,$:0,N:0,P:0})
127
+ r.G({position:0,line:0,O:p.DECENT,k:0,D:null,N:!1,active:!0,W:0,U:0,$:0,P:0})
128
128
  let o=0,a=0,h=0
129
129
  for(let c=0;t.length>c;c++){const l=t[c]
130
130
  if(!(l.type===y.PENALTY&&1e4>l.tt||l.type===y.DISCRETIONARY||l.type===y.GLUE&&c>0&&t[c-1].type===y.BOX)){l.type===y.BOX?o+=l.width:l.type===y.GLUE?(o+=l.width,a+=l.stretch,h+=l.X):l.type===y.DISCRETIONARY&&(o+=l.width)
@@ -132,7 +132,7 @@ continue}let u=0,f=!1;(l.type===y.PENALTY||l.type===y.DISCRETIONARY)&&(u=l.tt,f=
132
132
  let d=0
133
133
  l.type===y.DISCRETIONARY&&(d=l.ut)
134
134
  const p=[null,null,null,null],w=[1/0,1/0,1/0,1/0],g=[],v=r.j()
135
- for(let t=0;v.length>t;t++){const r=v[t],l=a-r.N,y=h-r.P,m=e-(o-r.$+d)
135
+ for(let t=0;v.length>t;t++){const r=v[t],l=a-r.$,y=h-r.P,m=e-(o-r.U+d)
136
136
  let x
137
137
  if(m>0){const t=l+n
138
138
  x=t>0?m/t:1/0}else x=0>m?y>0?m/y:-1/0:0
@@ -140,34 +140,34 @@ const b=this.H(m,m>0?l+n:y)
140
140
  if(-1>x){g.push(r)
141
141
  continue}if(u!==T&&b>i)continue
142
142
  let S=s.wt+b
143
- 1e4>Math.abs(S)?S*=S:S=1e8,u>0?S+=u*u:u>T&&(S-=u*u),f&&r.U&&(S+=s.gt)
143
+ 1e4>Math.abs(S)?S*=S:S=1e8,u>0?S+=u*u:u>T&&(S-=u*u),f&&r.N&&(S+=s.gt)
144
144
  const _=this.V(x)
145
145
  Math.abs(_-r.O)>1&&(S+=s.vt)
146
146
  const E=r.k+S
147
- w[_]>E&&(w[_]=E,p[_]={position:c,line:r.line+1,O:_,k:E,D:r,U:f,active:!0,W:-1,$:o,N:a,P:h})}for(const t of g)r.R(t)
147
+ w[_]>E&&(w[_]=E,p[_]={position:c,line:r.line+1,O:_,k:E,D:r,N:f,active:!0,W:-1,U:o,$:a,P:h})}for(const t of g)r.R(t)
148
148
  for(let t=0;4>t;t++)p[t]&&r.G(p[t])
149
149
  if(0===r.size()&&u!==T)return null
150
150
  l.type===y.BOX?o+=l.width:l.type===y.GLUE?(o+=l.width,a+=l.stretch,h+=l.X):l.type===y.DISCRETIONARY&&(o+=l.width)}let c=null,l=1/0
151
151
  for(const t of r.j())l>t.k&&(l=t.k,c=t)
152
152
  return c}static xt(t){if(!t.text||0===t.text.length)return[]
153
- const{text:e,width:i,align:n="left",direction:s="ltr",bt:r=!1,language:o="en-us",St:a=!0,measureText:h,_t:d,Et:y,Tt:p,letterSpacing:w=0,At:T=l,Mt:A=u,It:M=f,Ft:I,Lt:F=_,Gt:L=E,Ot:G=b,Ct:O=S,kt:C=g,Bt:k=v,Dt:B=m,Ut:D=x}=t
153
+ const{text:e,width:i,align:n="left",direction:s="ltr",bt:r=!1,language:o="en-us",St:a=!0,measureText:h,_t:d,Et:y,Tt:p,letterSpacing:w=0,At:T=l,Mt:A=u,It:M=f,Ft:I,Lt:F=_,Gt:L=E,Ot:G=b,Ct:O=S,kt:C=g,Dt:k=v,Bt:D=m,Nt:B=x}=t
154
154
  if(a&&e.includes("\n")){const i=e.split("\n"),n=[]
155
155
  let s=0
156
- for(const e of i){if(0===e.length)n.push({text:"",$t:s,Nt:s,Pt:0,zt:!0,naturalWidth:0,Wt:!1})
156
+ for(const e of i){if(0===e.length)n.push({text:"",Ut:s,$t:s,Pt:0,Wt:!0,naturalWidth:0,zt:!1})
157
157
  else{const i=this.xt({...t,text:e,St:!1})
158
- i.forEach(t=>{t.$t+=s,t.Nt+=s}),n.push(...i)}s+=e.length+1}return n}let U=r
159
- !U||y&&y[o]||(c.warn(`Hyphenation patterns for ${o} not available`),U=!1)
160
- let $=M
161
- void 0!==I&&i&&($=i*I)
162
- const N={wt:G,vt:O,gt:B,Rt:D,yt:C,ft:k,jt:n,Tt:p,Ht:p?w*p:0}
158
+ i.forEach(t=>{t.Ut+=s,t.$t+=s}),n.push(...i)}s+=e.length+1}return n}let N=r
159
+ !N||y&&y[o]||(c.warn(`Hyphenation patterns for ${o} not available`),N=!1)
160
+ let U=M
161
+ void 0!==I&&i&&(U=i*I)
162
+ const $={wt:G,vt:O,gt:D,Rt:B,yt:C,ft:k,jt:n,Tt:p,Ht:p?w*p:0}
163
163
  if(!i||i===1/0){const t=h(e)
164
- return[{text:e,$t:0,Nt:e.length-1,Pt:0,zt:!0,naturalWidth:t,Wt:!1}]}let P=this.J(e,h,d,!1,o,y,F,L,N,i),z=this.lineBreak(P,i,A,0,N)
165
- if(!z&&U&&(P=this.J(e,h,d,!0,o,y,F,L,N,i),z=this.lineBreak(P,i,T,0,N)),!z){const t=5
166
- for(let e=0;t>e&&!z;e++){const t=$+e*i*.1
167
- z=this.lineBreak(P,i,T,t,N),z||(z=this.lineBreak(P,i,1e4,t,N))}}if(z){const t=[]
168
- let r=z
164
+ return[{text:e,Ut:0,$t:e.length-1,Pt:0,Wt:!0,naturalWidth:t,zt:!1}]}let P=this.J(e,h,d,!1,o,y,F,L,$,i),W=this.lineBreak(P,i,A,0,$)
165
+ if(!W&&N&&(P=this.J(e,h,d,!0,o,y,F,L,$,i),W=this.lineBreak(P,i,T,0,$)),!W){const t=5
166
+ for(let e=0;t>e&&!W;e++){const t=U+e*i*.1
167
+ W=this.lineBreak(P,i,T,t,$),W||(W=this.lineBreak(P,i,1e4,t,$))}}if(W){const t=[]
168
+ let r=W
169
169
  for(;r&&r.position>0;)t.unshift(r.position),r=r.D
170
- return this.Vt(e,P,t,i,n,s,N)}return[{text:e,$t:0,Nt:e.length-1,Pt:0,qt:0,zt:!0,naturalWidth:h(e),Wt:!1}]}static Vt(t,e,i,n,s,r,o){if(0===i.length)return[{text:t,$t:0,Nt:t.length-1,Pt:0}]
170
+ return this.Vt(e,P,t,i,n,s,$)}return[{text:e,Ut:0,$t:e.length-1,Pt:0,qt:0,Wt:!0,naturalWidth:h(e),zt:!1}]}static Vt(t,e,i,n,s,r,o){if(0===i.length)return[{text:t,Ut:0,$t:t.length-1,Pt:0}]
171
171
  const a=[]
172
172
  let h=0
173
173
  for(let t=0;i.length>t;t++){const c=i[t],l=!(e.length-1>i[i.length-1]+1)&&t===i.length-1,u=[]
@@ -185,12 +185,12 @@ let b=0,S=0,_=s
185
185
  if("justify"===s&&l&&(_="rtl"===r?"right":"left"),"center"===_)b=(n-p)/2
186
186
  else if("right"===_)b=n-p
187
187
  else if("justify"===_&&!l){const t=n-p
188
- t>0&&w>0?S=t/w:0>t&&g>0&&(S=t/g)}a.push({text:x,$t:f,Nt:d,Pt:b,qt:S,zt:!1,naturalWidth:p,Wt:m}),h=c+1}if(e.length-1>h){const t=[]
188
+ t>0&&w>0?S=t/w:0>t&&g>0&&(S=t/g)}a.push({text:x,Ut:f,$t:d,Pt:b,qt:S,Wt:!1,naturalWidth:p,zt:m}),h=c+1}if(e.length-1>h){const t=[]
189
189
  let i=-1,c=-1,l=0
190
190
  for(let n=h;e.length-1>n;n++){const s=e[n]
191
191
  s.type!==y.PENALTY&&(void 0!==s.Z&&((-1===i||i>s.Z)&&(i=s.Z),s.Z>c&&(c=s.Z)),s.text&&t.push(s.text),l+=s.width)}o?.Ht&&0!==l&&(l-=o.Ht)
192
192
  let u=0,f=s
193
- "justify"===s&&(f="rtl"===r?"right":"left"),"center"===f?u=(n-l)/2:"right"===f&&(u=n-l),a.push({text:t.join(""),$t:i,Nt:c,Pt:u,qt:0,zt:!0,naturalWidth:l,Wt:!1}),a.length>1&&(a[a.length-2].zt=!1),a[a.length-1].zt=!0}else a.length>0&&(a[a.length-1].zt=!0)
193
+ "justify"===s&&(f="rtl"===r?"right":"left"),"center"===f?u=(n-l)/2:"right"===f&&(u=n-l),a.push({text:t.join(""),Ut:i,$t:c,Pt:u,qt:0,Wt:!0,naturalWidth:l,zt:!1}),a.length>1&&(a[a.length-2].Wt=!1),a[a.length-1].Wt=!0}else a.length>0&&(a[a.length-1].Wt=!0)
194
194
  return a}}const M=new WeakMap
195
195
  class I{static _t(e,i,n=0){const s=Array.from(i)
196
196
  if(0===s.length)return[]
@@ -212,28 +212,28 @@ const r=t(e.Kt)
212
212
  e.hb.shape(e.font,s,r)
213
213
  const o=s.json(e.font),a=n*e.upem
214
214
  let h=0
215
- return o.forEach(t=>{h+=t.ax,0!==a&&(h+=a)}),s.destroy(),h}}class F{constructor(t){this.Xt=t}Zt(t){const{text:e,width:i,align:n,direction:s,bt:r,language:o,St:a,At:h,Mt:c,It:l,Ft:u,Et:f,Lt:d,Gt:y,Ot:p,Ct:w,kt:g,Bt:v,Dt:m,letterSpacing:x}=t
215
+ return o.forEach(t=>{h+=t.ax,0!==a&&(h+=a)}),s.destroy(),h}}class F{constructor(t){this.Xt=t}Zt(t){const{text:e,width:i,align:n,direction:s,bt:r,language:o,St:a,At:h,Mt:c,It:l,Ft:u,Et:f,Lt:d,Gt:y,Ot:p,Ct:w,kt:g,Dt:v,Bt:m,letterSpacing:x}=t
216
216
  let b
217
- if(i)b=A.xt({text:e,width:i,align:n,direction:s,bt:r,language:o,St:a,At:h,Mt:c,It:l,Ft:u,Et:f,Lt:d,Gt:y,Ot:p,Ct:w,kt:g,Bt:v,Dt:m,Tt:this.Xt.upem,letterSpacing:x,measureText:t=>I.measureTextWidth(this.Xt,t,x),_t:t=>I._t(this.Xt,t,x)})
217
+ if(i)b=A.xt({text:e,width:i,align:n,direction:s,bt:r,language:o,St:a,At:h,Mt:c,It:l,Ft:u,Et:f,Lt:d,Gt:y,Ot:p,Ct:w,kt:g,Dt:v,Bt:m,Tt:this.Xt.upem,letterSpacing:x,measureText:t=>I.measureTextWidth(this.Xt,t,x),_t:t=>I._t(this.Xt,t,x)})
218
218
  else{const t=e.split("\n")
219
219
  b=[]
220
220
  let i=0
221
- for(const e of t)b.push({text:e,$t:i,Nt:0===e.length?i:i+e.length-1,Pt:0}),i+=e.length+1}return{lines:b}}te(t,e){const{offset:i,ee:n}=this.ie(e)
221
+ for(const e of t)b.push({text:e,Ut:i,$t:0===e.length?i:i+e.length-1,Pt:0}),i+=e.length+1}return{lines:b}}te(t,e){const{offset:i,ee:n}=this.ie(e)
222
222
  if(0!==i)for(let e=0;t.length>e;e+=3)t[e]+=i
223
223
  return{offset:i,ee:n}}ie(t){const{width:e,align:i,planeBounds:n}=t
224
224
  let s=0
225
225
  const r={min:{...n.min},max:{...n.max}}
226
- return!e||"center"!==i&&"right"!==i||(s="center"===i?(e-(n.max.x-n.min.x))/2-n.min.x:e-n.max.x),0!==s&&(r.min.x+=s,r.max.x+=s),{offset:s,ee:r}}}const L=65536,G=1330926671,O=2001684038,C=1751474532,k=1751672161,B=1330851634,D=1719034226,U=1398030676,$=1851878757,N=1128678944,P=1128678962,z=1196643650,W=1196445523,R=new TextDecoder("utf-16be")
227
- class j{static ne(t){if(!t||12>t.byteLength)throw Error("Invalid font buffer: too small to be a valid font file")
226
+ return!e||"center"!==i&&"right"!==i||(s="center"===i?(e-(n.max.x-n.min.x))/2-n.min.x:e-n.max.x),0!==s&&(r.min.x+=s,r.max.x+=s),{offset:s,ee:r}}}const L=65536,G=1330926671,O=2001684038,C=2001684018,k=1751474532,D=1751672161,B=1330851634,N=1719034226,U=1398030676,$=1851878757,P=1128678944,W=1128678962,z=1196643650,R=1196445523,j=new TextDecoder("utf-16be")
227
+ class H{static ne(t){if(!t||12>t.byteLength)throw Error("Invalid font buffer: too small to be a valid font file")
228
228
  const i=new DataView(t),n=i.getUint32(0)
229
- if(![L,G].includes(n))throw Error("Invalid font format. Expected TTF/OTF (or WOFF), got signature: 0x"+n.toString(16))
230
- const s=e(i),r=s.has(N)||s.has(P),o=s.get(C)?.offset??0,a=s.get(k)?.offset??0,h=s.get(B)?.offset??0,c=s.get(D)?.offset??0,l=s.get(U)?.offset??0,u=s.get($)?.offset??0,f=o?i.getUint16(o+18):1e3
229
+ if(![L,G].includes(n))throw Error("Invalid font format. Expected TTF/OTF/WOFF/WOFF2, got signature: 0x"+n.toString(16))
230
+ const s=e(i),r=s.has(P)||s.has(W),o=s.get(k)?.offset??0,a=s.get(D)?.offset??0,h=s.get(B)?.offset??0,c=s.get(N)?.offset??0,l=s.get(U)?.offset??0,u=s.get($)?.offset??0,f=o?i.getUint16(o+18):1e3
231
231
  let d=null
232
232
  a&&(d={se:i.getInt16(a+4),re:i.getInt16(a+6),oe:i.getInt16(a+8)})
233
233
  let y=null
234
234
  h&&(y={ae:i.getInt16(h+68),he:i.getInt16(h+70),ce:i.getInt16(h+72),le:i.getUint16(h+74),ue:i.getUint16(h+76)})
235
235
  let p=null
236
- return c&&l&&u&&(p=this.fe(i,l,u)),{de:r,Tt:f,ye:d?.se||null,pe:d?.re||null,we:d?.oe||null,ae:y?.ae||null,he:y?.he||null,ce:y?.ce||null,le:y?.le||null,ue:y?.ue||null,ge:p}}static ve(t){const i=new DataView(t),n=e(i),s=n.get(z)?.offset??0,r=n.get(W)?.offset??0,o=n.get($)?.offset??0,a=new Set,h={}
236
+ return c&&l&&u&&(p=this.fe(i,l,u)),{de:r,Tt:f,ye:d?.se||null,pe:d?.re||null,we:d?.oe||null,ae:y?.ae||null,he:y?.he||null,ce:y?.ce||null,le:y?.le||null,ue:y?.ue||null,ge:p}}static ve(t){const i=new DataView(t),n=e(i),s=n.get(z)?.offset??0,r=n.get(R)?.offset??0,o=n.get($)?.offset??0,a=new Set,h={}
237
237
  try{if(s){const t=this.me(i,s,o)
238
238
  t.features.forEach(t=>a.add(t)),Object.assign(h,t.names)}if(r){const t=this.me(i,r,o)
239
239
  t.features.forEach(t=>a.add(t)),Object.assign(h,t.names)}}catch(t){return}const c=Array.from(a).sort()
@@ -254,14 +254,14 @@ if(0===o||3===o&&1===a){let t=""
254
254
  for(let e=0;f.length>e;e+=2)t+=String.fromCharCode(f[e]<<8|f[e+1])
255
255
  return t}return new TextDecoder("ascii").decode(f)}return null}catch(t){return null}}static be(t){if(!t||12>t.byteLength)throw Error("Invalid font buffer: too small to be a valid font file")
256
256
  const i=new DataView(t),n=i.getUint32(0)
257
- if(![L,G].includes(n))throw Error("Invalid font format. Expected TTF/OTF (or WOFF), got signature: 0x"+n.toString(16))
257
+ if(![L,G].includes(n))throw Error("Invalid font format. Expected TTF/OTF/WOFF/WOFF2, got signature: 0x"+n.toString(16))
258
258
  const s=e(i),r=s.get($)?.offset??0,o=r?this.Se(i,r):null
259
259
  return{u:this._e(i,s,o),features:this.Ee(i,s,o)}}static Se(t,e){const i=new Map,n=t.getUint16(e+2),s=t.getUint16(e+4)
260
260
  for(let r=0;n>r;r++){const n=e+6+12*r,o=t.getUint16(n),a=t.getUint16(n+2),h=t.getUint16(n+4),c=t.getUint16(n+6),l=t.getUint16(n+8),u=t.getUint16(n+10);(0===o||3===o&&1033===h)&&(i.has(c)||i.set(c,{offset:e+s+u,length:l,Te:o,Ae:a}))}return i}static Me(t,e,i){if(!e)return null
261
261
  const n=e.get(i)
262
262
  if(!n)return null
263
263
  try{const e=new Uint8Array(t.buffer,n.offset,n.length)
264
- return 0===n.Te||3===n.Te&&1===n.Ae?R.decode(e):new TextDecoder("ascii").decode(e)}catch{return null}}static _e(t,e,i){const n=e.has(N)||e.has(P),s=e.get(C)?.offset??0,r=e.get(k)?.offset??0,o=e.get(B)?.offset??0,a=e.get(D)?.offset??0,h=e.get(U)?.offset??0,c=s?t.getUint16(s+18):1e3
264
+ return 0===n.Te||3===n.Te&&1===n.Ae?j.decode(e):new TextDecoder("ascii").decode(e)}catch{return null}}static _e(t,e,i){const n=e.has(P)||e.has(W),s=e.get(k)?.offset??0,r=e.get(D)?.offset??0,o=e.get(B)?.offset??0,a=e.get(N)?.offset??0,h=e.get(U)?.offset??0,c=s?t.getUint16(s+18):1e3
265
265
  let l=null
266
266
  r&&(l={se:t.getInt16(r+4),re:t.getInt16(r+6),oe:t.getInt16(r+8)})
267
267
  let u=null
@@ -270,7 +270,7 @@ let f=null
270
270
  return a&&h&&i&&(f=this.Ie(t,h,i)),{de:n,Tt:c,ye:l?.se||null,pe:l?.re||null,we:l?.oe||null,ae:u?.ae||null,he:u?.he||null,ce:u?.ce||null,le:u?.le||null,ue:u?.ue||null,ge:f}}static Ie(t,e,i){try{if(1>t.getUint16(e))return null
271
271
  const n=t.getUint16(e+4),s=t.getUint16(e+6),r=t.getUint32(e+8),o={}
272
272
  for(let a=0;s>a;a++){const s=e+r+a*n,h=String.fromCharCode(t.getUint8(s),t.getUint8(s+1),t.getUint8(s+2),t.getUint8(s+3)),c=t.getUint16(s+4),l=this.Me(t,i,c)
273
- l&&(o[h]=l)}return Object.keys(o).length>0?o:null}catch{return null}}static Ee(t,e,i){const n=e.get(z)?.offset??0,s=e.get(W)?.offset??0,r=new Set,o={}
273
+ l&&(o[h]=l)}return Object.keys(o).length>0?o:null}catch{return null}}static Ee(t,e,i){const n=e.get(z)?.offset??0,s=e.get(R)?.offset??0,r=new Set,o={}
274
274
  try{n&&this.Fe(t,n,i,r,o),s&&this.Fe(t,s,i,r,o)}catch{return}if(0!==r.size)return{tags:Array.from(r).sort((t,e)=>t-e).map(this.Le),names:Object.keys(o).length>0?o:{}}}static Fe(t,e,i,n,s){const r=e+t.getUint16(e+6),o=t.getUint16(r)
275
275
  for(let e=0;o>e;e++){const o=r+2+6*e,a=t.getUint32(o)
276
276
  n.add(a)
@@ -284,10 +284,11 @@ if(0===f)continue
284
284
  const d=u+f
285
285
  if(0!==t.getUint16(d))continue
286
286
  const y=t.getUint16(d+2),p=this.Me(t,i,y)
287
- p&&(s[String.fromCharCode(a>>24&255,a>>16&255,a>>8&255,255&a)]=p)}}static Le(t){return String.fromCharCode(t>>24&255,t>>16&255,t>>8&255,255&t)}static Ge(t){return null!==t.ae&&null!==t.he?{se:t.ae,re:t.he,oe:0}:null!==t.ye&&null!==t.pe?{se:t.ye,re:t.pe,oe:0}:null!==t.le&&null!==t.ue?{se:t.le,re:-t.ue,oe:0}:{se:Math.round(.8*t.Tt),re:-Math.round(.2*t.Tt),oe:0}}static Oe(t){const e=j.Ge(t)
288
- return{se:e.se,re:e.re,oe:e.oe,Tt:t.Tt,Ce:e.se-e.re}}}class H{static ke(t){if(4>t.byteLength)return"ttf/otf"
287
+ p&&(s[String.fromCharCode(a>>24&255,a>>16&255,a>>8&255,255&a)]=p)}}static Le(t){return String.fromCharCode(t>>24&255,t>>16&255,t>>8&255,255&t)}static Ge(t){return null!==t.ae&&null!==t.he?{se:t.ae,re:t.he,oe:0}:null!==t.ye&&null!==t.pe?{se:t.ye,re:t.pe,oe:0}:null!==t.le&&null!==t.ue?{se:t.le,re:-t.ue,oe:0}:{se:Math.round(.8*t.Tt),re:-Math.round(.2*t.Tt),oe:0}}static Oe(t){const e=H.Ge(t)
288
+ return{se:e.se,re:e.re,oe:e.oe,Tt:t.Tt,Ce:e.se-e.re}}}let V=null
289
+ class q{static ke(t){if(4>t.byteLength)return"ttf/otf"
289
290
  const e=new DataView(t).getUint32(0)
290
- return e===O?"woff":2001684018===e?"woff2":"ttf/otf"}static async Be(t){const e=new DataView(t),i=new Uint8Array(t)
291
+ return e===O?"woff":e===C?"woff2":"ttf/otf"}static async De(t){const e=new DataView(t),i=new Uint8Array(t)
291
292
  if(e.getUint32(0)!==O)throw Error("Not a valid WOFF font")
292
293
  const n=e.getUint32(4),s=e.getUint16(12),r=e.getUint32(16)
293
294
  if("undefined"==typeof DecompressionStream)throw Error("WOFF fonts require DecompressionStream API (Chrome 80+, Firefox 113+, Safari 16.4+). Please use TTF/OTF fonts or upgrade your browser.")
@@ -298,35 +299,36 @@ a.setUint16(6,h),a.setUint16(8,Math.floor(Math.log2(s))),a.setUint16(10,16*s-h)
298
299
  let c=12+16*s
299
300
  const l=[]
300
301
  for(let t=0;s>t;t++){const i=44+20*t
301
- l.push({tag:e.getUint32(i),offset:e.getUint32(i+4),length:e.getUint32(i+8),De:e.getUint32(i+12),t:e.getUint32(i+16)})}l.sort((t,e)=>t.tag-e.tag)
302
- const u=await Promise.all(l.map(async t=>{if(t.length===t.De)return i.subarray(t.offset,t.offset+t.length)
303
- const e=i.subarray(t.offset,t.offset+t.length),n=await H.Ue(e)
304
- if(n.byteLength!==t.De)throw Error(`Decompression failed: expected ${t.De} bytes, got ${n.byteLength}`)
302
+ l.push({tag:e.getUint32(i),offset:e.getUint32(i+4),length:e.getUint32(i+8),Be:e.getUint32(i+12),t:e.getUint32(i+16)})}l.sort((t,e)=>t.tag-e.tag)
303
+ const u=await Promise.all(l.map(async t=>{if(t.length===t.Be)return i.subarray(t.offset,t.offset+t.length)
304
+ const e=i.subarray(t.offset,t.offset+t.length),n=await q.Ne(e)
305
+ if(n.byteLength!==t.Be)throw Error(`Decompression failed: expected ${t.Be} bytes, got ${n.byteLength}`)
305
306
  return new Uint8Array(n)}))
306
307
  for(let t=0;s>t;t++){const e=l[t],i=12+16*t
307
- a.setUint32(i,e.tag),a.setUint32(i+4,e.t),a.setUint32(i+8,c),a.setUint32(i+12,e.De),o.set(u[t],c),c+=e.De,c+=(4-e.De%4)%4}return o.buffer.slice(0,c)}static async Ue(t){const e=new ReadableStream({start(e){e.enqueue(t),e.close()}}).pipeThrough(new DecompressionStream("deflate"))
308
- return new Response(e).arrayBuffer()}}class V{constructor(t){this.$e=t}async Ne(t,e){if(!t||12>t.byteLength)throw Error("Invalid font buffer: too small to be a valid font file")
309
- const i=H.ke(t)
310
- if("woff"===i)t=await H.Be(t)
311
- else if("woff2"===i)throw Error("WOFF2 fonts are not yet supported. Please use WOFF or TTF/OTF format.")
308
+ a.setUint32(i,e.tag),a.setUint32(i+4,e.t),a.setUint32(i+8,c),a.setUint32(i+12,e.Be),o.set(u[t],c),c+=e.Be,c+=(4-e.Be%4)%4}return o.buffer.slice(0,c)}static async Ue(t){if(new DataView(t).getUint32(0)!==C)throw Error("Not a valid WOFF2 font")
309
+ if(!V)throw Error("WOFF2 fonts require enabling the decoder. Add to your code:\n import { decode } from 'woff2-decode';\n Text.enableWoff2(decode);")
310
+ return(await V(t)).buffer}static async Ne(t){const e=new ReadableStream({start(e){e.enqueue(t),e.close()}}).pipeThrough(new DecompressionStream("deflate"))
311
+ return new Response(e).arrayBuffer()}}class Y{constructor(t){this.$e=t}async Pe(t,e){if(!t||12>t.byteLength)throw Error("Invalid font buffer: too small to be a valid font file")
312
+ const i=q.ke(t)
313
+ "woff"===i?t=await q.De(t):"woff2"===i&&(t=await q.Ue(t))
312
314
  const n=new DataView(t).getUint32(0)
313
- if(![L,G].includes(n))throw Error("Invalid font format. Expected TTF/OTF (or WOFF), got signature: 0x"+n.toString(16))
315
+ if(![L,G].includes(n))throw Error("Invalid font format. Expected TTF/OTF/WOFF/WOFF2, got signature: 0x"+n.toString(16))
314
316
  const{hb:s,module:r}=await this.$e()
315
- try{const i=s.Pe(new Uint8Array(t)),n=s.ze(i,0),o=s.We(n)
316
- e&&o.Re(e)
317
- const a=n.je(),h=Object.keys(a).length>0,{u:c,features:l}=j.be(t)
317
+ try{const i=s.We(new Uint8Array(t)),n=s.ze(i,0),o=s.Re(n)
318
+ e&&o.je(e)
319
+ const a=n.He(),h=Object.keys(a).length>0,{u:c,features:l}=H.be(t)
318
320
  let u
319
321
  if(h&&a){u={}
320
- for(const[t,e]of Object.entries(a))u[t]={...e,name:c.ge?.[t]||null}}return{hb:s,fontBlob:i,face:n,font:o,module:r,upem:c.Tt,u:c,He:e,Ve:h,qe:u,Ye:l?.tags,Je:l?.names,Ke:t}}catch(t){throw c.error("Failed to load font:",t),t}}static Qe(t){try{t.font&&"function"==typeof t.font.destroy&&t.font.destroy(),t.face&&"function"==typeof t.face.destroy&&t.face.destroy(),t.fontBlob&&"function"==typeof t.fontBlob.destroy&&t.fontBlob.destroy()}catch(t){c.error("Error destroying font resources:",t)}}}const q=/^[a-z]{2,3}(?:-[a-z0-9]{2,16})*$/i,Y=new Set(["af","as","be","bg","bn","ca","cs","cy","da","de-1996","el-monoton","el-polyton","en-gb","en-us","eo","es","et","eu","fi","fr","fur","ga","gl","gu","hi","hr","hsb","hu","hy","ia","id","is","it","ka","kmr","kn","la","lt","lv","mk","ml","mn-cyrl","mr","mul-ethi","nb","nl","nn","oc","or","pa","pl","pms","pt","rm","ro","ru","sa","sh-cyrl","sh-latn","sk","sl","sq","sr-cyrl","sv","ta","te","th","tk","tr","uk","zh-latn-pinyin"])
321
- class J{constructor(t=0,e=0){this.x=t,this.y=e}set(t,e){return this.x=t,this.y=e,this}clone(){return new J(this.x,this.y)}Xe(t){return this.x=t.x,this.y=t.y,this}add(t){return this.x+=t.x,this.y+=t.y,this}sub(t){return this.x-=t.x,this.y-=t.y,this}multiply(t){return this.x*=t,this.y*=t,this}Ze(t){return this.x/=t,this.y/=t,this}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}ti(){return this.x*this.x+this.y*this.y}normalize(){const t=this.length()
322
- return t>0&&this.Ze(t),this}ei(t){return this.x*t.x+this.y*t.y}ii(t){const e=this.x-t.x,i=this.y-t.y
323
- return Math.sqrt(e*e+i*i)}ni(t){const e=this.x-t.x,i=this.y-t.y
324
- return e*e+i*i}equals(t){return this.x===t.x&&this.y===t.y}angle(){return Math.atan2(this.y,this.x)}}class K{constructor(t=0,e=0,i=0){this.x=t,this.y=e,this.z=i}set(t,e,i){return this.x=t,this.y=e,this.z=i,this}clone(){return new K(this.x,this.y,this.z)}Xe(t){return this.x=t.x,this.y=t.y,this.z=t.z,this}add(t){return this.x+=t.x,this.y+=t.y,this.z+=t.z,this}sub(t){return this.x-=t.x,this.y-=t.y,this.z-=t.z,this}multiply(t){return this.x*=t,this.y*=t,this.z*=t,this}Ze(t){return this.x/=t,this.y/=t,this.z/=t,this}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}ti(){return this.x*this.x+this.y*this.y+this.z*this.z}normalize(){const t=this.length()
325
- return t>0&&this.Ze(t),this}ei(t){return this.x*t.x+this.y*t.y+this.z*t.z}si(t){const e=this.z*t.x-this.x*t.z,i=this.x*t.y-this.y*t.x
326
- return this.x=this.y*t.z-this.z*t.y,this.y=e,this.z=i,this}ii(t){const e=this.x-t.x,i=this.y-t.y,n=this.z-t.z
327
- return Math.sqrt(e*e+i*i+n*n)}ni(t){const e=this.x-t.x,i=this.y-t.y,n=this.z-t.z
328
- return e*e+i*i+n*n}equals(t){return this.x===t.x&&this.y===t.y&&this.z===t.z}}class Q{constructor(){this.cache=new Map}get(t){return this.cache.get(t)}has(t){return this.cache.has(t)}set(t,e){this.cache.set(t,e)}delete(t){return this.cache.delete(t)}clear(){this.cache.clear()}get size(){return this.cache.size}keys(){return Array.from(this.cache.keys())}getStats(){return{size:this.cache.size}}}const X=new Q,Z=new Q,tt=new Q,et=new Q
329
- var it="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},nt={exports:{}}
322
+ for(const[t,e]of Object.entries(a))u[t]={...e,name:c.ge?.[t]||null}}return{hb:s,fontBlob:i,face:n,font:o,module:r,upem:c.Tt,u:c,Ve:e,qe:h,Ye:u,Je:l?.tags,Ke:l?.names,Qe:t}}catch(t){throw c.error("Failed to load font:",t),t}}static Xe(t){try{t.font&&"function"==typeof t.font.destroy&&t.font.destroy(),t.face&&"function"==typeof t.face.destroy&&t.face.destroy(),t.fontBlob&&"function"==typeof t.fontBlob.destroy&&t.fontBlob.destroy()}catch(t){c.error("Error destroying font resources:",t)}}}const J=/^[a-z]{2,3}(?:-[a-z0-9]{2,16})*$/i,K=new Set(["af","as","be","bg","bn","ca","cs","cy","da","de-1996","el-monoton","el-polyton","en-gb","en-us","eo","es","et","eu","fi","fr","fur","ga","gl","gu","hi","hr","hsb","hu","hy","ia","id","is","it","ka","kmr","kn","la","lt","lv","mk","ml","mn-cyrl","mr","mul-ethi","nb","nl","nn","oc","or","pa","pl","pms","pt","rm","ro","ru","sa","sh-cyrl","sh-latn","sk","sl","sq","sr-cyrl","sv","ta","te","th","tk","tr","uk","zh-latn-pinyin"])
323
+ class Q{constructor(t=0,e=0){this.x=t,this.y=e}set(t,e){return this.x=t,this.y=e,this}clone(){return new Q(this.x,this.y)}Ze(t){return this.x=t.x,this.y=t.y,this}add(t){return this.x+=t.x,this.y+=t.y,this}sub(t){return this.x-=t.x,this.y-=t.y,this}multiply(t){return this.x*=t,this.y*=t,this}ti(t){return this.x/=t,this.y/=t,this}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}ei(){return this.x*this.x+this.y*this.y}normalize(){const t=this.length()
324
+ return t>0&&this.ti(t),this}ii(t){return this.x*t.x+this.y*t.y}ni(t){const e=this.x-t.x,i=this.y-t.y
325
+ return Math.sqrt(e*e+i*i)}si(t){const e=this.x-t.x,i=this.y-t.y
326
+ return e*e+i*i}equals(t){return this.x===t.x&&this.y===t.y}angle(){return Math.atan2(this.y,this.x)}}class X{constructor(t=0,e=0,i=0){this.x=t,this.y=e,this.z=i}set(t,e,i){return this.x=t,this.y=e,this.z=i,this}clone(){return new X(this.x,this.y,this.z)}Ze(t){return this.x=t.x,this.y=t.y,this.z=t.z,this}add(t){return this.x+=t.x,this.y+=t.y,this.z+=t.z,this}sub(t){return this.x-=t.x,this.y-=t.y,this.z-=t.z,this}multiply(t){return this.x*=t,this.y*=t,this.z*=t,this}ti(t){return this.x/=t,this.y/=t,this.z/=t,this}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}ei(){return this.x*this.x+this.y*this.y+this.z*this.z}normalize(){const t=this.length()
327
+ return t>0&&this.ti(t),this}ii(t){return this.x*t.x+this.y*t.y+this.z*t.z}ri(t){const e=this.z*t.x-this.x*t.z,i=this.x*t.y-this.y*t.x
328
+ return this.x=this.y*t.z-this.z*t.y,this.y=e,this.z=i,this}ni(t){const e=this.x-t.x,i=this.y-t.y,n=this.z-t.z
329
+ return Math.sqrt(e*e+i*i+n*n)}si(t){const e=this.x-t.x,i=this.y-t.y,n=this.z-t.z
330
+ return e*e+i*i+n*n}equals(t){return this.x===t.x&&this.y===t.y&&this.z===t.z}}class Z{constructor(){this.cache=new Map}get(t){return this.cache.get(t)}has(t){return this.cache.has(t)}set(t,e){this.cache.set(t,e)}delete(t){return this.cache.delete(t)}clear(){this.cache.clear()}get size(){return this.cache.size}keys(){return Array.from(this.cache.keys())}getStats(){return{size:this.cache.size}}}const tt=new Z,et=new Z,it=new Z,nt=new Z
331
+ var st="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},rt={exports:{}}
330
332
  !(function(t){function e(t,e){return t.b===e.b&&t.a===e.a}function i(t,e){return e.b>t.b||t.b===e.b&&e.a>=t.a}function n(t,e,i){var n=e.b-t.b,s=i.b-e.b
331
333
  return n+s>0?s>n?e.a-t.a+n/(n+s)*(t.a-i.a):e.a-i.a+s/(n+s)*(i.a-t.a):0}function s(t,e,i){var n=e.b-t.b,s=i.b-e.b
332
334
  return n+s>0?(e.a-i.a)*n+(e.a-t.a)*s:0}function r(t,e){return e.a>t.a||t.a===e.a&&e.b>=t.b}function o(t,e,i){var n=e.a-t.a,s=i.a-e.a
@@ -336,22 +338,22 @@ return v(e,t.c),v(e.b,t.c),m(e,t.a),e}function f(t,e){var i=!1,n=!1
336
338
  t!==e&&(e.a!==t.a&&(n=!0,b(e.a,t.a)),e.d!==t.d&&(i=!0,S(e.d,t.d)),g(e,t),n||(v(e,t.a),t.a.c=t),i||(m(e,t.d),t.d.a=t))}function d(t){var e=t.b,i=!1
337
339
  t.d!==t.b.d&&(i=!0,S(t.d,t.b.d)),t.c===t?b(t.a,null):(t.b.d.a=K(t),t.a.c=t.c,g(t,K(t)),i||m(t,t.d)),e.c===e?(b(e.a,null),S(e.d,null)):(t.d.a=K(e),e.a.c=e.c,g(e,K(e))),x(t)}function y(t){var e=w(t),i=e.b
338
340
  return g(e,t.e),e.a=t.b.a,v(i,e.a),e.d=i.d=t.d,e=e.b,g(t.b,K(t.b)),g(t.b,e),t.b.a=e.a,e.b.a.c=e.b,e.b.d=t.b.d,e.f=t.f,e.b.f=t.b.f,e}function p(t,e){var i=!1,n=w(t),s=n.b
339
- return e.d!==t.d&&(i=!0,S(e.d,t.d)),g(n,t.e),g(s,e),n.a=t.b.a,s.a=e.a,n.d=s.d=t.d,t.d.a=s,i||m(n,t.d),n}function w(t){var e=new J,i=new J,n=t.b.ri
340
- return i.ri=n,n.b.ri=e,e.ri=t,t.b.ri=i,e.b=i,e.c=e,e.e=i,i.b=e,i.c=i,i.e=e}function g(t,e){var i=t.c,n=e.c
341
+ return e.d!==t.d&&(i=!0,S(e.d,t.d)),g(n,t.e),g(s,e),n.a=t.b.a,s.a=e.a,n.d=s.d=t.d,t.d.a=s,i||m(n,t.d),n}function w(t){var e=new J,i=new J,n=t.b.oi
342
+ return i.oi=n,n.b.oi=e,e.oi=t,t.b.oi=i,e.b=i,e.c=e,e.e=i,i.b=e,i.c=i,i.e=e}function g(t,e){var i=t.c,n=e.c
341
343
  i.b.e=e,n.b.e=t,t.c=n,e.c=i}function v(t,e){var i=e.f,n=new X(e,i)
342
344
  i.e=n,e.f=n,i=n.c=t
343
345
  do{i.a=n,i=i.c}while(i!==t)}function m(t,e){var i=e.d,n=new Y(e,i)
344
346
  i.b=n,e.d=n,n.a=t,n.c=e.c,i=t
345
- do{i.d=n,i=i.e}while(i!==t)}function x(t){var e=t.ri
346
- e.b.ri=t=t.b.ri,t.b.ri=e}function b(t,e){var i=t.c,n=i
347
+ do{i.d=n,i=i.e}while(i!==t)}function x(t){var e=t.oi
348
+ e.b.oi=t=t.b.oi,t.b.oi=e}function b(t,e){var i=t.c,n=i
347
349
  do{n.a=e,n=n.c}while(n!==i);(n=t.e).f=i=t.f,i.e=n}function S(t,e){var i=t.a,n=i
348
350
  do{n.d=e,n=n.e}while(n!==i);(n=t.b).d=i=t.d,i.b=n}function _(t){var e=0
349
- return Math.abs(t[1])>Math.abs(t[0])&&(e=1),Math.abs(t[2])>Math.abs(t[e])&&(e=2),e}function E(t,e){t.f+=e.f,t.b.f+=e.b.f}function T(t,e,r){return r=r.a,(e=e.a).b.a===(t=t.a)?r.b.a===t?i(e.a,r.a)?0>=s(r.b.a,e.a,r.a):s(e.b.a,r.a,e.a)>=0:0>=s(r.b.a,t,r.a):r.b.a===t?s(e.b.a,t,e.a)>=0:(e=n(e.b.a,t,e.a))>=(t=n(r.b.a,t,r.a))}function A(t){t.a.oi=null
351
+ return Math.abs(t[1])>Math.abs(t[0])&&(e=1),Math.abs(t[2])>Math.abs(t[e])&&(e=2),e}function E(t,e){t.f+=e.f,t.b.f+=e.b.f}function T(t,e,r){return r=r.a,(e=e.a).b.a===(t=t.a)?r.b.a===t?i(e.a,r.a)?0>=s(r.b.a,e.a,r.a):s(e.b.a,r.a,e.a)>=0:0>=s(r.b.a,t,r.a):r.b.a===t?s(e.b.a,t,e.a)>=0:(e=n(e.b.a,t,e.a))>=(t=n(r.b.a,t,r.a))}function A(t){t.a.ai=null
350
352
  var e=t.e
351
- e.a.c=e.c,e.c.a=e.a,t.e=null}function M(t,e){d(t.a),t.c=!1,t.a=e,e.oi=t}function I(t){var e=t.a.a
353
+ e.a.c=e.c,e.c.a=e.a,t.e=null}function M(t,e){d(t.a),t.c=!1,t.a=e,e.ai=t}function I(t){var e=t.a.a
352
354
  do{t=ut(t)}while(t.a.a===e)
353
355
  return t.c&&(M(t,e=p(lt(t).a.b,t.a.e)),t=ut(t)),t}function F(t,e,i){var n=new ct
354
- return n.a=i,n.e=R(t.f,e.e,n),i.oi=n}function L(t,e){switch(t.s){case 100130:return!!(1&e)
356
+ return n.a=i,n.e=R(t.f,e.e,n),i.ai=n}function L(t,e){switch(t.s){case 100130:return!!(1&e)
355
357
  case 100131:return 0!==e
356
358
  case 100132:return e>0
357
359
  case 100133:return 0>e
@@ -361,53 +363,53 @@ var n=lt(t),s=n.a
361
363
  if(s.a!==e.a){if(!n.c){G(t)
362
364
  break}M(n,s=p(e.c.b,s.b))}e.c!==s&&(f(K(s),s),f(e,s)),G(t),e=n.a,t=n}return e}function C(t,e,i,n,s,r){var o=!0
363
365
  do{F(t,e,i.b),i=i.c}while(i!==n)
364
- for(null===s&&(s=lt(e).a.b.c);(i=(n=lt(e)).a.b).a===s.a;)i.c!==s&&(f(K(i),i),f(K(s),i)),n.f=e.f-i.f,n.d=L(t,n.f),e.b=!0,!o&&U(t,e)&&(E(i,s),A(e),d(s)),o=!1,e=n,s=i
365
- e.b=!0,r&&N(t,e)}function k(t,e,i,n,s){var r=[e.g[0],e.g[1],e.g[2]]
366
- e.d=null,e.d=t.ai&&t.ai(r,i,n,t.c)||null,null===e.d&&(s?t.n||(q(t,100156),t.n=!0):e.d=i[0])}function B(t,e,i){var n=[null,null,null,null]
367
- n[0]=e.a.d,n[1]=i.a.d,k(t,e.a,n,[.5,.5,0,0],!1),f(e,i)}function D(t,e,i,n,s){var r=Math.abs(e.b-t.b)+Math.abs(e.a-t.a),o=Math.abs(i.b-t.b)+Math.abs(i.a-t.a),a=s+1
368
- n[s]=.5*o/(r+o),n[a]=.5*r/(r+o),t.g[0]+=n[s]*e.g[0]+n[a]*i.g[0],t.g[1]+=n[s]*e.g[1]+n[a]*i.g[1],t.g[2]+=n[s]*e.g[2]+n[a]*i.g[2]}function U(t,n){var r=lt(n),o=n.a,a=r.a
366
+ for(null===s&&(s=lt(e).a.b.c);(i=(n=lt(e)).a.b).a===s.a;)i.c!==s&&(f(K(i),i),f(K(s),i)),n.f=e.f-i.f,n.d=L(t,n.f),e.b=!0,!o&&N(t,e)&&(E(i,s),A(e),d(s)),o=!1,e=n,s=i
367
+ e.b=!0,r&&$(t,e)}function k(t,e,i,n,s){var r=[e.g[0],e.g[1],e.g[2]]
368
+ e.d=null,e.d=t.hi&&t.hi(r,i,n,t.c)||null,null===e.d&&(s?t.n||(q(t,100156),t.n=!0):e.d=i[0])}function D(t,e,i){var n=[null,null,null,null]
369
+ n[0]=e.a.d,n[1]=i.a.d,k(t,e.a,n,[.5,.5,0,0],!1),f(e,i)}function B(t,e,i,n,s){var r=Math.abs(e.b-t.b)+Math.abs(e.a-t.a),o=Math.abs(i.b-t.b)+Math.abs(i.a-t.a),a=s+1
370
+ n[s]=.5*o/(r+o),n[a]=.5*r/(r+o),t.g[0]+=n[s]*e.g[0]+n[a]*i.g[0],t.g[1]+=n[s]*e.g[1]+n[a]*i.g[1],t.g[2]+=n[s]*e.g[2]+n[a]*i.g[2]}function N(t,n){var r=lt(n),o=n.a,a=r.a
369
371
  if(i(o.a,a.a)){if(s(a.b.a,o.a,a.a)>0)return!1
370
372
  if(e(o.a,a.a)){if(o.a!==a.a){r=t.e
371
- var h=o.a.ri
373
+ var h=o.a.oi
372
374
  if(0>h)for(r.c[-(h+1)]=null;r.a>0&&null===r.c[r.d[r.a-1]];)--r.a
373
375
  else{var c=(r=r.b).d,l=r.e,u=r.c,d=u[h]
374
- c[d]=c[r.a],u[c[d]]=d,d<=--r.a&&(d>1?i(l[c[d>>1]],l[c[d]])?at(r,d):ht(r,d):at(r,d)),l[h]=null,u[h]=r.b,r.b=h}B(t,K(a),o)}}else y(a.b),f(o,K(a)),n.b=r.b=!0}else{if(0>s(o.b.a,a.a,o.a))return!1
375
- ut(n).b=n.b=!0,y(o.b),f(K(a),o)}return!0}function $(t,h){var c=lt(h),u=h.a,d=c.a,p=u.a,w=d.a,g=u.b.a,v=d.b.a,m=new X
376
+ c[d]=c[r.a],u[c[d]]=d,d<=--r.a&&(d>1?i(l[c[d>>1]],l[c[d]])?at(r,d):ht(r,d):at(r,d)),l[h]=null,u[h]=r.b,r.b=h}D(t,K(a),o)}}else y(a.b),f(o,K(a)),n.b=r.b=!0}else{if(0>s(o.b.a,a.a,o.a))return!1
377
+ ut(n).b=n.b=!0,y(o.b),f(K(a),o)}return!0}function U(t,h){var c=lt(h),u=h.a,d=c.a,p=u.a,w=d.a,g=u.b.a,v=d.b.a,m=new X
376
378
  if(s(g,t.a,p),s(v,t.a,w),p===w||Math.min(p.a,g.a)>Math.max(w.a,v.a))return!1
377
379
  if(i(p,w)){if(s(v,p,w)>0)return!1}else if(0>s(g,w,p))return!1
378
380
  var x,b,S=g,_=p,E=v,T=w
379
- if(i(S,_)||(x=S,S=_,_=x),i(E,T)||(x=E,E=T,T=x),i(S,E)||(x=S,S=E,E=x,x=_,_=T,T=x),i(E,_)?i(_,T)?(0>(x=n(S,E,_))+(b=n(E,_,T))&&(x=-x,b=-b),m.b=l(x,E.b,b,_.b)):(0>(x=s(S,E,_))+(b=-s(S,T,_))&&(x=-x,b=-b),m.b=l(x,E.b,b,T.b)):m.b=(E.b+_.b)/2,r(S,_)||(x=S,S=_,_=x),r(E,T)||(x=E,E=T,T=x),r(S,E)||(x=S,S=E,E=x,x=_,_=T,T=x),r(E,_)?r(_,T)?(0>(x=o(S,E,_))+(b=o(E,_,T))&&(x=-x,b=-b),m.a=l(x,E.a,b,_.a)):(0>(x=a(S,E,_))+(b=-a(S,T,_))&&(x=-x,b=-b),m.a=l(x,E.a,b,T.a)):m.a=(E.a+_.a)/2,i(m,t.a)&&(m.b=t.a.b,m.a=t.a.a),S=i(p,w)?p:w,i(S,m)&&(m.b=S.b,m.a=S.a),e(m,p)||e(m,w))return U(t,h),!1
381
+ if(i(S,_)||(x=S,S=_,_=x),i(E,T)||(x=E,E=T,T=x),i(S,E)||(x=S,S=E,E=x,x=_,_=T,T=x),i(E,_)?i(_,T)?(0>(x=n(S,E,_))+(b=n(E,_,T))&&(x=-x,b=-b),m.b=l(x,E.b,b,_.b)):(0>(x=s(S,E,_))+(b=-s(S,T,_))&&(x=-x,b=-b),m.b=l(x,E.b,b,T.b)):m.b=(E.b+_.b)/2,r(S,_)||(x=S,S=_,_=x),r(E,T)||(x=E,E=T,T=x),r(S,E)||(x=S,S=E,E=x,x=_,_=T,T=x),r(E,_)?r(_,T)?(0>(x=o(S,E,_))+(b=o(E,_,T))&&(x=-x,b=-b),m.a=l(x,E.a,b,_.a)):(0>(x=a(S,E,_))+(b=-a(S,T,_))&&(x=-x,b=-b),m.a=l(x,E.a,b,T.a)):m.a=(E.a+_.a)/2,i(m,t.a)&&(m.b=t.a.b,m.a=t.a.a),S=i(p,w)?p:w,i(S,m)&&(m.b=S.b,m.a=S.a),e(m,p)||e(m,w))return N(t,h),!1
380
382
  if(!e(g,t.a)&&s(g,t.a,m)>=0||!e(v,t.a)&&0>=s(v,t.a,m)){if(v===t.a)return y(u.b),f(d.b,u),u=lt(h=I(h)).a,O(t,lt(h),c),C(t,h,K(u),u,u,!0),!0
381
383
  if(g===t.a){y(d.b),f(u.e,K(d)),w=(p=c=h).a.b.a
382
384
  do{p=ut(p)}while(p.a.b.a===w)
383
- return p=lt(h=p).a.b.c,c.a=K(d),C(t,h,(d=O(t,c,null)).c,u.b.c,p,!0),!0}return s(g,t.a,m)>=0&&(ut(h).b=h.b=!0,y(u.b),u.a.b=t.a.b,u.a.a=t.a.a),0>=s(v,t.a,m)&&(h.b=c.b=!0,y(d.b),d.a.b=t.a.b,d.a.a=t.a.a),!1}return y(u.b),y(d.b),f(K(d),u),u.a.b=m.b,u.a.a=m.a,u.a.ri=tt(t.e,u.a),d=[0,0,0,0],m=[p.d,g.d,w.d,v.d],(u=u.a).g[0]=u.g[1]=u.g[2]=0,D(u,p,g,d,0),D(u,w,v,d,2),k(t,u,m,d,!0),ut(h).b=h.b=c.b=!0,!1}function N(t,e){for(var n=lt(e);;){for(;n.b;)e=n,n=lt(n)
385
+ return p=lt(h=p).a.b.c,c.a=K(d),C(t,h,(d=O(t,c,null)).c,u.b.c,p,!0),!0}return s(g,t.a,m)>=0&&(ut(h).b=h.b=!0,y(u.b),u.a.b=t.a.b,u.a.a=t.a.a),0>=s(v,t.a,m)&&(h.b=c.b=!0,y(d.b),d.a.b=t.a.b,d.a.a=t.a.a),!1}return y(u.b),y(d.b),f(K(d),u),u.a.b=m.b,u.a.a=m.a,u.a.oi=tt(t.e,u.a),d=[0,0,0,0],m=[p.d,g.d,w.d,v.d],(u=u.a).g[0]=u.g[1]=u.g[2]=0,B(u,p,g,d,0),B(u,w,v,d,2),k(t,u,m,d,!0),ut(h).b=h.b=c.b=!0,!1}function $(t,e){for(var n=lt(e);;){for(;n.b;)e=n,n=lt(n)
384
386
  if(!e.b&&(n=e,null===(e=ut(e))||!e.b))break
385
387
  e.b=!1
386
388
  var r,o=e.a,a=n.a
387
389
  if(r=o.b.a!==a.b.a)t:{var h=lt(r=e),c=r.a,l=h.a,u=void 0
388
390
  if(i(c.b.a,l.b.a)){if(0>s(c.b.a,l.b.a,c.a)){r=!1
389
391
  break t}ut(r).b=r.b=!0,u=y(c),f(l.b,u),u.d.c=r.d}else{if(s(l.b.a,c.b.a,l.a)>0){r=!1
390
- break t}r.b=h.b=!0,u=y(l),f(c.e,l.b),u.b.d.c=r.d}r=!0}if(r&&(n.c?(A(n),d(a),a=(n=lt(e)).a):e.c&&(A(e),d(o),o=(e=ut(n)).a)),o.a!==a.a)if(o.b.a===a.b.a||e.c||n.c||o.b.a!==t.a&&a.b.a!==t.a)U(t,e)
391
- else if($(t,e))break
392
+ break t}r.b=h.b=!0,u=y(l),f(c.e,l.b),u.b.d.c=r.d}r=!0}if(r&&(n.c?(A(n),d(a),a=(n=lt(e)).a):e.c&&(A(e),d(o),o=(e=ut(n)).a)),o.a!==a.a)if(o.b.a===a.b.a||e.c||n.c||o.b.a!==t.a&&a.b.a!==t.a)N(t,e)
393
+ else if(U(t,e))break
392
394
  o.a===a.a&&o.b.a===a.b.a&&(E(a,o),A(e),d(o),e=ut(n))}}function P(t,n){t.a=n
393
- for(var r=n.c;null===r.oi;)if((r=r.c)===n.c){r=t
395
+ for(var r=n.c;null===r.ai;)if((r=r.c)===n.c){r=t
394
396
  var o=n;(u=new ct).a=o.c.b
395
397
  var a=(l=r.f).a
396
398
  do{a=a.a}while(null!==a.b&&!l.c(l.b,u,a.b))
397
399
  if(a=(c=lt(l=a.b)).a,0===s((u=l.a).b.a,o,u.a))e((u=l.a).a,o)||e(u.b.a,o)||(y(u.b),l.c&&(d(u.c),l.c=!1),f(o.c,u),P(r,o))
398
400
  else{var h=i(a.b.a,u.b.a)?l:c,c=void 0
399
- l.d||h.c?(c=h===l?p(o.c.b,u.e):p(a.b.c.b,o.c).b,h.c?M(h,c):(u=r,(l=F(r,l,c)).f=ut(l).f+l.a.f,l.d=L(u,l.f)),P(r,o)):C(r,l,o.c,o.c,null,!0)}return}if(l=(u=lt(r=I(r.oi))).a,(u=O(t,u,null)).c===l){var l,u=(l=u).c,w=(a=lt(r),!1);(c=r.a).b.a!==(h=a.a).b.a&&$(t,r),e(c.a,t.a)&&(f(K(u),c),u=lt(r=I(r)).a,O(t,lt(r),a),w=!0),e(h.a,t.a)&&(f(l,K(h)),l=O(t,a,null),w=!0),w?C(t,r,l.c,u,u,!0):(o=i(h.a,c.a)?K(h):c,C(t,r,o=p(l.c.b,o),o.c,o.c,!1),o.b.oi.c=!0,N(t,r))}else C(t,r,u.c,l,l,!0)}function z(t,e){var i=new ct,n=u(t.b)
400
- n.a.b=dt,n.a.a=e,n.b.a.b=-dt,n.b.a.a=e,t.a=n.b.a,i.a=n,i.f=0,i.d=!1,i.c=!1,i.ri=!0,i.b=!1,n=R(n=t.f,n.a,i),i.e=n}function W(t){this.a=new j,this.b=t,this.c=T}function R(t,e,i){do{e=e.c}while(null!==e.b&&!t.c(t.b,e.b,i))
401
- return t=new j(i,e.a,e),e.a.c=t,e.a=t}function j(t,e,i){this.b=t||null,this.a=e||this,this.c=i||this}function H(){this.d=yt,this.hi=this.b=this.ci=null,this.li=[0,0,0],this.s=100130,this.n=!1,this.ai=this.a=this.e=this.f=null,this.ui=!1,this.c=this.r=this.oi=this.fi=this.di=this.ri=null}function V(t,e){if(t.d!==e)for(;t.d!==e;)if(e>t.d)switch(t.d){case yt:q(t,100151),t.yi(null)
401
+ l.d||h.c?(c=h===l?p(o.c.b,u.e):p(a.b.c.b,o.c).b,h.c?M(h,c):(u=r,(l=F(r,l,c)).f=ut(l).f+l.a.f,l.d=L(u,l.f)),P(r,o)):C(r,l,o.c,o.c,null,!0)}return}if(l=(u=lt(r=I(r.ai))).a,(u=O(t,u,null)).c===l){var l,u=(l=u).c,w=(a=lt(r),!1);(c=r.a).b.a!==(h=a.a).b.a&&U(t,r),e(c.a,t.a)&&(f(K(u),c),u=lt(r=I(r)).a,O(t,lt(r),a),w=!0),e(h.a,t.a)&&(f(l,K(h)),l=O(t,a,null),w=!0),w?C(t,r,l.c,u,u,!0):(o=i(h.a,c.a)?K(h):c,C(t,r,o=p(l.c.b,o),o.c,o.c,!1),o.b.ai.c=!0,$(t,r))}else C(t,r,u.c,l,l,!0)}function W(t,e){var i=new ct,n=u(t.b)
402
+ n.a.b=dt,n.a.a=e,n.b.a.b=-dt,n.b.a.a=e,t.a=n.b.a,i.a=n,i.f=0,i.d=!1,i.c=!1,i.oi=!0,i.b=!1,n=R(n=t.f,n.a,i),i.e=n}function z(t){this.a=new j,this.b=t,this.c=T}function R(t,e,i){do{e=e.c}while(null!==e.b&&!t.c(t.b,e.b,i))
403
+ return t=new j(i,e.a,e),e.a.c=t,e.a=t}function j(t,e,i){this.b=t||null,this.a=e||this,this.c=i||this}function H(){this.d=yt,this.ci=this.b=this.li=null,this.ui=[0,0,0],this.s=100130,this.n=!1,this.hi=this.a=this.e=this.f=null,this.fi=!1,this.c=this.r=this.ai=this.di=this.yi=this.oi=null}function V(t,e){if(t.d!==e)for(;t.d!==e;)if(e>t.d)switch(t.d){case yt:q(t,100151),t.pi(null)
402
404
  break
403
- case 1:q(t,100152),t.pi()}else switch(t.d){case 2:q(t,100154),t.wi()
405
+ case 1:q(t,100152),t.wi()}else switch(t.d){case 2:q(t,100154),t.gi()
404
406
  break
405
- case 1:q(t,100153),t.w()}}function q(t,e){t.hi&&t.hi(e,t.c)}function Y(t,e){this.b=t||this,this.d=e||this,this.a=null,this.c=!1}function J(){this.ri=this,this.oi=this.d=this.a=this.e=this.c=this.b=null,this.f=0}function K(t){return t.b.e}function Q(){this.c=new X,this.a=new Y,this.b=new J,this.d=new J,this.b.b=this.d,this.d.b=this.b}function X(t,e){this.e=t||this,this.f=e||this,this.d=this.c=null,this.g=[0,0,0],this.ri=this.a=this.b=0}function Z(){this.c=[],this.d=null,this.a=0,this.e=!1,this.b=new nt}function tt(t,e){if(t.e){var i,n=t.b,s=++n.a
406
- return 2*s>n.f&&(n.f*=2,n.c=st(n.c,n.f+1)),0===n.b?i=s:(i=n.b,n.b=n.c[n.b]),n.e[i]=e,n.c[i]=s,n.d[s]=i,n.ri&&ht(n,s),i}return n=t.a++,t.c[n]=e,-(n+1)}function et(t){if(0===t.a)return ot(t.b)
407
+ case 1:q(t,100153),t.w()}}function q(t,e){t.ci&&t.ci(e,t.c)}function Y(t,e){this.b=t||this,this.d=e||this,this.a=null,this.c=!1}function J(){this.oi=this,this.ai=this.d=this.a=this.e=this.c=this.b=null,this.f=0}function K(t){return t.b.e}function Q(){this.c=new X,this.a=new Y,this.b=new J,this.d=new J,this.b.b=this.d,this.d.b=this.b}function X(t,e){this.e=t||this,this.f=e||this,this.d=this.c=null,this.g=[0,0,0],this.oi=this.a=this.b=0}function Z(){this.c=[],this.d=null,this.a=0,this.e=!1,this.b=new it}function tt(t,e){if(t.e){var i,n=t.b,s=++n.a
408
+ return 2*s>n.f&&(n.f*=2,n.c=nt(n.c,n.f+1)),0===n.b?i=s:(i=n.b,n.b=n.c[n.b]),n.e[i]=e,n.c[i]=s,n.d[s]=i,n.oi&&ht(n,s),i}return n=t.a++,t.c[n]=e,-(n+1)}function et(t){if(0===t.a)return ot(t.b)
407
409
  var e=t.c[t.d[t.a-1]]
408
410
  if(0!==t.b.a&&i(rt(t.b),e))return ot(t.b)
409
411
  do{--t.a}while(t.a>0&&null===t.c[t.d[t.a-1]])
410
- return e}function nt(){this.d=st([0],33),this.e=[null,null],this.c=[0,0],this.a=0,this.f=32,this.b=0,this.ri=!1,this.d[1]=1}function st(t,e){for(var i=Array(e),n=0;t.length>n;n++)i[n]=t[n]
412
+ return e}function it(){this.d=nt([0],33),this.e=[null,null],this.c=[0,0],this.a=0,this.f=32,this.b=0,this.oi=!1,this.d[1]=1}function nt(t,e){for(var i=Array(e),n=0;t.length>n;n++)i[n]=t[n]
411
413
  for(;e>n;n++)i[n]=0
412
414
  return i}function rt(t){return t.e[t.d[1]]}function ot(t){var e=t.d,i=t.e,n=t.c,s=e[1],r=i[s]
413
415
  return t.a>0&&(e[1]=e[t.a],n[e[1]]=1,i[s]=null,n[s]=t.b,t.b=s,--t.a>0&&at(t,1)),r}function at(t,e){for(var n=t.d,s=t.e,r=t.c,o=e,a=n[o];;){var h=o<<1
@@ -416,110 +418,110 @@ var c=n[h]
416
418
  if(h>t.a||i(s[a],s[c])){n[o]=a,r[a]=o
417
419
  break}n[o]=c,r[c]=o,o=h}}function ht(t,e){for(var n=t.d,s=t.e,r=t.c,o=e,a=n[o];;){var h=o>>1,c=n[h]
418
420
  if(0===h||i(s[c],s[a])){n[o]=a,r[a]=o
419
- break}n[o]=c,r[c]=o,o=h}}function ct(){this.e=this.a=null,this.f=0,this.c=this.b=this.ri=this.d=!1}function lt(t){return t.e.c.b}function ut(t){return t.e.a.b}var ft,dt=4e150,yt=0;(ft=H.prototype).x=function(){V(this,yt)},ft.B=function(t,e){switch(t){case 100142:return
421
+ break}n[o]=c,r[c]=o,o=h}}function ct(){this.e=this.a=null,this.f=0,this.c=this.b=this.oi=this.d=!1}function lt(t){return t.e.c.b}function ut(t){return t.e.a.b}var ft,dt=4e150,yt=0;(ft=H.prototype).x=function(){V(this,yt)},ft.B=function(t,e){switch(t){case 100142:return
420
422
  case 100140:switch(e){case 100130:case 100131:case 100132:case 100133:case 100134:return void(this.s=e)}break
421
- case 100141:return void(this.ui=!!e)
423
+ case 100141:return void(this.fi=!!e)
422
424
  default:return void q(this,100900)}q(this,100901)},ft.y=function(t){switch(t){case 100142:return 0
423
425
  case 100140:return this.s
424
- case 100141:return this.ui
425
- default:q(this,100900)}return!1},ft.A=function(t,e,i){this.li[0]=t,this.li[1]=e,this.li[2]=i},ft.z=function(t,e){var i=e||null
426
- switch(t){case 100100:case 100106:this.ri=i
426
+ case 100141:return this.fi
427
+ default:q(this,100900)}return!1},ft.A=function(t,e,i){this.ui[0]=t,this.ui[1]=e,this.ui[2]=i},ft.z=function(t,e){var i=e||null
428
+ switch(t){case 100100:case 100106:this.oi=i
427
429
  break
428
- case 100104:case 100110:this.di=i
430
+ case 100104:case 100110:this.yi=i
429
431
  break
430
- case 100101:case 100107:this.fi=i
432
+ case 100101:case 100107:this.di=i
431
433
  break
432
- case 100102:case 100108:this.oi=i
434
+ case 100102:case 100108:this.ai=i
433
435
  break
434
- case 100103:case 100109:this.hi=i
436
+ case 100103:case 100109:this.ci=i
435
437
  break
436
- case 100105:case 100111:this.ai=i
438
+ case 100105:case 100111:this.hi=i
437
439
  break
438
440
  case 100112:this.r=i
439
441
  break
440
442
  default:q(this,100900)}},ft.C=function(t,e){var i=!1,n=[0,0,0]
441
443
  V(this,2)
442
- for(var s=0;3>s;++s){var r=t[s];-1e150>r&&(r=-1e150,i=!0),r>1e150&&(r=1e150,i=!0),n[s]=r}i&&q(this,100155),null===(i=this.ci)?f(i=u(this.b),i.b):(y(i),i=i.e),i.a.d=e,i.a.g[0]=n[0],i.a.g[1]=n[1],i.a.g[2]=n[2],i.f=1,i.b.f=-1,this.ci=i},ft.yi=function(t){V(this,yt),this.d=1,this.b=new Q,this.c=t},ft.pi=function(){V(this,1),this.d=2,this.ci=null},ft.wi=function(){V(this,2),this.d=1},ft.w=function(){V(this,1),this.d=yt
443
- var t=!1,n=[u=this.li[0],r=this.li[1],a=this.li[2]]
444
+ for(var s=0;3>s;++s){var r=t[s];-1e150>r&&(r=-1e150,i=!0),r>1e150&&(r=1e150,i=!0),n[s]=r}i&&q(this,100155),null===(i=this.li)?f(i=u(this.b),i.b):(y(i),i=i.e),i.a.d=e,i.a.g[0]=n[0],i.a.g[1]=n[1],i.a.g[2]=n[2],i.f=1,i.b.f=-1,this.li=i},ft.pi=function(t){V(this,yt),this.d=1,this.b=new Q,this.c=t},ft.wi=function(){V(this,1),this.d=2,this.li=null},ft.gi=function(){V(this,2),this.d=1},ft.w=function(){V(this,1),this.d=yt
445
+ var t=!1,n=[u=this.ui[0],r=this.ui[1],a=this.ui[2]]
444
446
  if(0===u&&0===r&&0===a){for(var r=[-2e150,-2e150,-2e150],o=[2e150,2e150,2e150],a=[],l=[],u=(t=this.b.c).e;u!==t;u=u.e)for(var f=0;3>f;++f){var y=u.g[f]
445
447
  o[f]>y&&(o[f]=y,l[f]=u),y>r[f]&&(r[f]=y,a[f]=u)}if(u=0,r[1]-o[1]>r[0]-o[0]&&(u=1),r[2]-o[2]>r[u]-o[u]&&(u=2),r[u]>o[u]){for(r=0,o=l[u],l=[0,0,0],o=[o.g[0]-(a=a[u]).g[0],o.g[1]-a.g[1],o.g[2]-a.g[2]],f=[0,0,0],u=t.e;u!==t;u=u.e)f[0]=u.g[0]-a.g[0],f[1]=u.g[1]-a.g[1],f[2]=u.g[2]-a.g[2],l[0]=o[1]*f[2]-o[2]*f[1],l[1]=o[2]*f[0]-o[0]*f[2],l[2]=o[0]*f[1]-o[1]*f[0],(y=l[0]*l[0]+l[1]*l[1]+l[2]*l[2])>r&&(r=y,n[0]=l[0],n[1]=l[1],n[2]=l[2])
446
448
  0>=r&&(n[0]=n[1]=n[2]=0,n[_(o)]=1)}else n[0]=0,n[1]=0,n[2]=1
447
449
  t=!0}for(r=((l=_(n))+1)%3,a=(l+2)%3,l=n[l]>0?1:-1,n=(u=this.b.c).e;n!==u;n=n.e)n.b=n.g[r],n.a=l*n.g[a]
448
450
  if(t){for(n=0,u=(t=this.b.a).b;u!==t;u=u.b)if((r=u.a).f>0)do{n+=(r.a.b-r.b.a.b)*(r.a.a+r.b.a.a),r=r.e}while(r!==u.a)
449
- if(0>n)for(t=(n=this.b.c).e;t!==n;t=t.e)t.a=-t.a}for(this.n=!1,u=(n=this.b.b).ri;u!==n;u=t)t=u.ri,r=u.e,e(u.a,u.b.a)&&u.e.e!==u&&(B(this,r,u),d(u),r=(u=r).e),r.e===u&&(r!==u&&(r!==t&&r!==t.b||(t=t.ri),d(r)),u!==t&&u!==t.b||(t=t.ri),d(u))
450
- for(this.e=n=new Z,u=(t=this.b.c).e;u!==t;u=u.e)u.ri=tt(n,u)
451
+ if(0>n)for(t=(n=this.b.c).e;t!==n;t=t.e)t.a=-t.a}for(this.n=!1,u=(n=this.b.b).oi;u!==n;u=t)t=u.oi,r=u.e,e(u.a,u.b.a)&&u.e.e!==u&&(D(this,r,u),d(u),r=(u=r).e),r.e===u&&(r!==u&&(r!==t&&r!==t.b||(t=t.oi),d(r)),u!==t&&u!==t.b||(t=t.oi),d(u))
452
+ for(this.e=n=new Z,u=(t=this.b.c).e;u!==t;u=u.e)u.oi=tt(n,u)
451
453
  for((t=>{t.d=[]
452
454
  for(var e=0;t.a>e;e++)t.d[e]=e
453
455
  t.d.sort((t=>(e,n)=>i(t[e],t[n])?1:-1)(t.c)),t.e=!0,(t=>{for(var e=t.a;e>=1;--e)at(t,e)
454
- t.ri=!0})(t.b)})(n),this.f=new W(this),z(this,-dt),z(this,dt);null!==(n=et(this.e));){for(;;){t:if(u=this.e,0===u.a)t=rt(u.b)
456
+ t.oi=!0})(t.b)})(n),this.f=new z(this),W(this,-dt),W(this,dt);null!==(n=et(this.e));){for(;;){t:if(u=this.e,0===u.a)t=rt(u.b)
455
457
  else if(t=u.c[u.d[u.a-1]],0!==u.b.a&&(u=rt(u.b),i(u,t))){t=u
456
458
  break t}if(null===t||!e(t,n))break
457
- t=et(this.e),B(this,n.c,t.c)}P(this,n)}for(this.a=this.f.a.a.b.a.a,n=0;null!==(t=this.f.a.a.b);)t.ri||++n,A(t)
459
+ t=et(this.e),D(this,n.c,t.c)}P(this,n)}for(this.a=this.f.a.a.b.a.a,n=0;null!==(t=this.f.a.a.b);)t.oi||++n,A(t)
458
460
  for(this.f=null,(n=this.e).b=null,n.d=null,this.e=n.c=null,u=(n=this.b).a.b;u!==n.a;u=t)t=u.b,(u=u.a).e.e===u&&(E(u.c,u),d(u))
459
- if(!this.n){if(n=this.b,this.ui)for(u=n.b.ri;u!==n.b;u=t)t=u.ri,u.b.d.c!==u.d.c?u.f=u.d.c?1:-1:d(u)
461
+ if(!this.n){if(n=this.b,this.fi)for(u=n.b.oi;u!==n.b;u=t)t=u.oi,u.b.d.c!==u.d.c?u.f=u.d.c?1:-1:d(u)
460
462
  else for(u=n.a.b;u!==n.a;u=t)if(t=u.b,u.c){for(u=u.a;i(u.b.a,u.a);u=u.c.b);for(;i(u.a,u.b.a);u=u.e);for(r=u.c.b,a=void 0;u.e!==r;)if(i(u.b.a,r.a)){for(;r.e!==u&&(h(r.e)||0>=s(r.a,r.b.a,r.e.b.a));)r=(a=p(r.e,r)).b
461
463
  r=r.c.b}else{for(;r.e!==u&&(c(u.c.b)||s(u.b.a,u.a,u.c.b.a)>=0);)u=(a=p(u,u.c.b)).b
462
- u=u.e}for(;r.e.e!==u;)r=(a=p(r.e,r)).b}if(this.ri||this.oi||this.fi||this.di)if(this.ui){for(t=(n=this.b).a.b;t!==n.a;t=t.b)if(t.c){this.ri&&this.ri(2,this.c),u=t.a
463
- do{this.fi&&this.fi(u.a.d,this.c),u=u.e}while(u!==t.a)
464
- this.oi&&this.oi(this.c)}}else{for(t=!!this.di,u=!1,r=-1,a=(n=this.b).a.d;a!==n.a;a=a.d)if(a.c){u||(this.ri&&this.ri(4,this.c),u=!0),l=a.a
465
- do{t&&r!==(o=l.b.d.c?0:1)&&(r=o,this.di&&this.di(!!r,this.c)),this.fi&&this.fi(l.a.d,this.c),l=l.e}while(l!==a.a)}u&&this.oi&&this.oi(this.c)}if(this.r){for(u=(n=this.b).a.b;u!==n.a;u=t)if(t=u.b,!u.c){a=(r=u.a).e,l=void 0
464
+ u=u.e}for(;r.e.e!==u;)r=(a=p(r.e,r)).b}if(this.oi||this.ai||this.di||this.yi)if(this.fi){for(t=(n=this.b).a.b;t!==n.a;t=t.b)if(t.c){this.oi&&this.oi(2,this.c),u=t.a
465
+ do{this.di&&this.di(u.a.d,this.c),u=u.e}while(u!==t.a)
466
+ this.ai&&this.ai(this.c)}}else{for(t=!!this.yi,u=!1,r=-1,a=(n=this.b).a.d;a!==n.a;a=a.d)if(a.c){u||(this.oi&&this.oi(4,this.c),u=!0),l=a.a
467
+ do{t&&r!==(o=l.b.d.c?0:1)&&(r=o,this.yi&&this.yi(!!r,this.c)),this.di&&this.di(l.a.d,this.c),l=l.e}while(l!==a.a)}u&&this.ai&&this.ai(this.c)}if(this.r){for(u=(n=this.b).a.b;u!==n.a;u=t)if(t=u.b,!u.c){a=(r=u.a).e,l=void 0
466
468
  do{a=(l=a).e,l.d=null,null===l.b.d&&(l.c===l?b(l.a,null):(l.a.c=l.c,g(l,K(l))),(o=l.b).c===o?b(o.a,null):(o.a.c=o.c,g(o,K(o))),x(l))}while(l!==r)
467
- r=u.d,(u=u.b).d=r,r.b=u}return this.r(this.b),void(this.c=this.b=null)}}this.b=this.c=null},it.gi={GluTesselator:H,mi:{GLU_TESS_WINDING_ODD:100130,GLU_TESS_WINDING_NONZERO:100131,GLU_TESS_WINDING_POSITIVE:100132,GLU_TESS_WINDING_NEGATIVE:100133,GLU_TESS_WINDING_ABS_GEQ_TWO:100134},primitiveType:{GL_LINE_LOOP:2,GL_TRIANGLES:4,GL_TRIANGLE_STRIP:5,GL_TRIANGLE_FAN:6},xi:{GLU_TESS_MISSING_BEGIN_POLYGON:100151,GLU_TESS_MISSING_END_POLYGON:100153,GLU_TESS_MISSING_BEGIN_CONTOUR:100152,GLU_TESS_MISSING_END_CONTOUR:100154,GLU_TESS_COORD_TOO_LARGE:100155,GLU_TESS_NEED_COMBINE_CALLBACK:100156},bi:{GLU_TESS_MESH:100112,GLU_TESS_TOLERANCE:100142,GLU_TESS_WINDING_RULE:100140,GLU_TESS_BOUNDARY_ONLY:100141,GLU_INVALID_ENUM:100900,GLU_INVALID_VALUE:100901,GLU_TESS_BEGIN:100100,GLU_TESS_VERTEX:100101,GLU_TESS_END:100102,GLU_TESS_ERROR:100103,GLU_TESS_EDGE_FLAG:100104,GLU_TESS_COMBINE:100105,GLU_TESS_BEGIN_DATA:100106,GLU_TESS_VERTEX_DATA:100107,GLU_TESS_END_DATA:100108,GLU_TESS_ERROR_DATA:100109,GLU_TESS_EDGE_FLAG_DATA:100110,GLU_TESS_COMBINE_DATA:100111}},H.prototype.Si=H.prototype.x,H.prototype._i=H.prototype.B,H.prototype.Ei=H.prototype.y,H.prototype.Ti=H.prototype.A,H.prototype.Ai=H.prototype.z,H.prototype.Mi=H.prototype.C,H.prototype.Ii=H.prototype.yi,H.prototype.Fi=H.prototype.pi,H.prototype.Li=H.prototype.wi,H.prototype.Gi=H.prototype.w,t.exports=it.gi})(nt)
468
- var st=nt.exports
469
- class rt{process(t,e=!0,i=!1,n=!0){if(0===t.length)return{Oi:{vertices:[],indices:[]},Ci:[]}
469
+ r=u.d,(u=u.b).d=r,r.b=u}return this.r(this.b),void(this.c=this.b=null)}}this.b=this.c=null},st.mi={GluTesselator:H,xi:{GLU_TESS_WINDING_ODD:100130,GLU_TESS_WINDING_NONZERO:100131,GLU_TESS_WINDING_POSITIVE:100132,GLU_TESS_WINDING_NEGATIVE:100133,GLU_TESS_WINDING_ABS_GEQ_TWO:100134},primitiveType:{GL_LINE_LOOP:2,GL_TRIANGLES:4,GL_TRIANGLE_STRIP:5,GL_TRIANGLE_FAN:6},bi:{GLU_TESS_MISSING_BEGIN_POLYGON:100151,GLU_TESS_MISSING_END_POLYGON:100153,GLU_TESS_MISSING_BEGIN_CONTOUR:100152,GLU_TESS_MISSING_END_CONTOUR:100154,GLU_TESS_COORD_TOO_LARGE:100155,GLU_TESS_NEED_COMBINE_CALLBACK:100156},Si:{GLU_TESS_MESH:100112,GLU_TESS_TOLERANCE:100142,GLU_TESS_WINDING_RULE:100140,GLU_TESS_BOUNDARY_ONLY:100141,GLU_INVALID_ENUM:100900,GLU_INVALID_VALUE:100901,GLU_TESS_BEGIN:100100,GLU_TESS_VERTEX:100101,GLU_TESS_END:100102,GLU_TESS_ERROR:100103,GLU_TESS_EDGE_FLAG:100104,GLU_TESS_COMBINE:100105,GLU_TESS_BEGIN_DATA:100106,GLU_TESS_VERTEX_DATA:100107,GLU_TESS_END_DATA:100108,GLU_TESS_ERROR_DATA:100109,GLU_TESS_EDGE_FLAG_DATA:100110,GLU_TESS_COMBINE_DATA:100111}},H.prototype._i=H.prototype.x,H.prototype.Ei=H.prototype.B,H.prototype.Ti=H.prototype.y,H.prototype.Ai=H.prototype.A,H.prototype.Mi=H.prototype.z,H.prototype.Ii=H.prototype.C,H.prototype.Fi=H.prototype.pi,H.prototype.Li=H.prototype.wi,H.prototype.Gi=H.prototype.gi,H.prototype.Oi=H.prototype.w,t.exports=st.mi})(rt)
470
+ var ot=rt.exports
471
+ class at{process(t,e=!0,i=!1,n=!0){if(0===t.length)return{Ci:{vertices:[],indices:[]},ki:[]}
470
472
  const s=t.filter(t=>t.points.length>=3)
471
- return 0===s.length?{Oi:{vertices:[],indices:[]},Ci:[]}:this.ki(s,e,i,n)}Bi(t,e=!0,i=!1,n=!0){return 0===t.length?{Oi:{vertices:[],indices:[]},Ci:[]}:this.Di(t,e,i,n)}ki(t,e,i,n){const s=!i&&!e
473
+ return 0===s.length?{Ci:{vertices:[],indices:[]},ki:[]}:this.Di(s,e,i,n)}Bi(t,e=!0,i=!1,n=!0){return 0===t.length?{Ci:{vertices:[],indices:[]},ki:[]}:this.Ni(t,e,i,n)}Di(t,e,i,n){const s=!i&&!e
472
474
  let r,o
473
475
  s?(o=this.Ui(t,!0),(e||n)&&(r=this.Ui(t))):(r=this.Ui(t),o=r)
474
476
  let a=n?s?o:r??this.Ui(t):[]
475
477
  if(e){const t=this.$i(r,"boundary")
476
- if(!t)return c.warn("libtess returned empty result from boundary pass"),{Oi:{vertices:[],indices:[]},Ci:[]}
477
- o=this.Ni(t),n&&(a=o)}const h=this.$i(o,"triangles")
478
- return h?{Oi:{vertices:h.vertices,indices:h.indices||[]},Ci:a,Pi:e}:(c.warn(e?"libtess returned empty result from triangulation pass":"libtess returned empty result from single-pass triangulation"),{Oi:{vertices:[],indices:[]},Ci:a})}Di(t,e,i,n){const s=!i&&!e
478
+ if(!t)return c.warn("libtess returned empty result from boundary pass"),{Ci:{vertices:[],indices:[]},ki:[]}
479
+ o=this.Pi(t),n&&(a=o)}const h=this.$i(o,"triangles")
480
+ return h?{Ci:{vertices:h.vertices,indices:h.indices||[]},ki:a,Wi:e}:(c.warn(e?"libtess returned empty result from triangulation pass":"libtess returned empty result from single-pass triangulation"),{Ci:{vertices:[],indices:[]},ki:a})}Ni(t,e,i,n){const s=!i&&!e
479
481
  let r,o
480
482
  s?(o=this.zi(t),(e||n)&&(r=t)):(r=t,o=t)
481
483
  let a=n?s?o:r??t:[]
482
484
  if(e){const t=this.$i(r,"boundary")
483
- if(!t)return c.warn("libtess returned empty result from boundary pass"),{Oi:{vertices:[],indices:[]},Ci:[]}
484
- o=this.Ni(t),n&&(a=o)}const h=this.$i(o,"triangles")
485
- return h?{Oi:{vertices:h.vertices,indices:h.indices||[]},Ci:a,Pi:e}:(c.warn(e?"libtess returned empty result from triangulation pass":"libtess returned empty result from single-pass triangulation"),{Oi:{vertices:[],indices:[]},Ci:a})}Ui(t,e=!1){const i=Array(t.length)
485
+ if(!t)return c.warn("libtess returned empty result from boundary pass"),{Ci:{vertices:[],indices:[]},ki:[]}
486
+ o=this.Pi(t),n&&(a=o)}const h=this.$i(o,"triangles")
487
+ return h?{Ci:{vertices:h.vertices,indices:h.indices||[]},ki:a,Wi:e}:(c.warn(e?"libtess returned empty result from triangulation pass":"libtess returned empty result from single-pass triangulation"),{Ci:{vertices:[],indices:[]},ki:a})}Ui(t,e=!1){const i=Array(t.length)
486
488
  for(let n=0;t.length>n;n++){const s=t[n].points,r=s.length,o=r>1&&s[0].x===s[r-1].x&&s[0].y===s[r-1].y?r-1:r,a=Array(2*(o+1))
487
489
  let h=0
488
490
  if(e)for(let t=o-1;t>=0;t--){const e=s[t]
489
491
  a[h++]=e.x,a[h++]=e.y}else for(let t=0;o>t;t++){const e=s[t]
490
492
  a[h++]=e.x,a[h++]=e.y}2>h||(a[h++]=a[0],a[h++]=a[1]),i[n]=a}return i}zi(t){const e=Array(t.length)
491
- for(let i=0;t.length>i;i++)e[i]=this.Wi(t[i])
492
- return e}Wi(t){const e=t.length
493
+ for(let i=0;t.length>i;i++)e[i]=this.Ri(t[i])
494
+ return e}Ri(t){const e=t.length
493
495
  if(0===e)return[]
494
496
  const i=4>e||t[0]!==t[e-2]||t[1]!==t[e-1]?e:e-2
495
497
  if(0===i)return[]
496
498
  const n=Array(i+2)
497
499
  let s=0
498
500
  for(let e=i-2;e>=0;e-=2)n[s++]=t[e],n[s++]=t[e+1]
499
- return 2>s||(n[s++]=n[0],n[s++]=n[1]),n}$i(t,e){const i=new st.GluTesselator
500
- i._i(st.bi.GLU_TESS_WINDING_RULE,st.mi.GLU_TESS_WINDING_NONZERO)
501
+ return 2>s||(n[s++]=n[0],n[s++]=n[1]),n}$i(t,e){const i=new ot.GluTesselator
502
+ i.Ei(ot.Si.GLU_TESS_WINDING_RULE,ot.xi.GLU_TESS_WINDING_NONZERO)
501
503
  const n=[],s=[],r=[]
502
504
  let o=[]
503
- "boundary"===e&&i._i(st.bi.GLU_TESS_BOUNDARY_ONLY,!0),"triangles"===e?i.Ai(st.bi.GLU_TESS_VERTEX_DATA,t=>{s.push(t)}):(i.Ai(st.bi.GLU_TESS_BEGIN,()=>{o=[]}),i.Ai(st.bi.GLU_TESS_VERTEX_DATA,t=>{o.push(t)}),i.Ai(st.bi.GLU_TESS_END,()=>{o.length>0&&r.push(o)})),i.Ai(st.bi.GLU_TESS_COMBINE,t=>{const e=n.length/2
504
- return n.push(t[0],t[1]),e}),i.Ai(st.bi.GLU_TESS_ERROR,t=>{c.warn("libtess error: "+t)}),i.Ti(0,0,1),i.Ii(null)
505
- for(const e of t){i.Fi()
505
+ "boundary"===e&&i.Ei(ot.Si.GLU_TESS_BOUNDARY_ONLY,!0),"triangles"===e?i.Mi(ot.Si.GLU_TESS_VERTEX_DATA,t=>{s.push(t)}):(i.Mi(ot.Si.GLU_TESS_BEGIN,()=>{o=[]}),i.Mi(ot.Si.GLU_TESS_VERTEX_DATA,t=>{o.push(t)}),i.Mi(ot.Si.GLU_TESS_END,()=>{o.length>0&&r.push(o)})),i.Mi(ot.Si.GLU_TESS_COMBINE,t=>{const e=n.length/2
506
+ return n.push(t[0],t[1]),e}),i.Mi(ot.Si.GLU_TESS_ERROR,t=>{c.warn("libtess error: "+t)}),i.Ai(0,0,1),i.Fi(null)
507
+ for(const e of t){i.Li()
506
508
  for(let t=0;e.length>t;t+=2){const s=n.length/2
507
- n.push(e[t],e[t+1]),i.Mi([e[t],e[t+1],0],s)}i.Li()}return i.Gi(),0===n.length?null:"triangles"===e?{vertices:n,indices:s}:{vertices:n,Ri:r}}Ni(t){if(!t.Ri)return[]
509
+ n.push(e[t],e[t+1]),i.Ii([e[t],e[t+1],0],s)}i.Gi()}return i.Oi(),0===n.length?null:"triangles"===e?{vertices:n,indices:s}:{vertices:n,ji:r}}Pi(t){if(!t.ji)return[]
508
510
  const e=[]
509
- for(const i of t.Ri){const n=[]
511
+ for(const i of t.ji){const n=[]
510
512
  for(const e of i){const i=2*e
511
- n.push(t.vertices[i],t.vertices[i+1])}n.length>2&&(n[0]===n[n.length-2]&&n[1]===n[n.length-1]||n.push(n[0],n[1])),e.push(n)}return e}ji(t){if(0===t.length)return!1
513
+ n.push(t.vertices[i],t.vertices[i+1])}n.length>2&&(n[0]===n[n.length-2]&&n[1]===n[n.length-1]||n.push(n[0],n[1])),e.push(n)}return e}Hi(t){if(0===t.length)return!1
512
514
  if(1===t.length)return!1
513
515
  let e=null
514
- for(const i of t){const t=0>this.Hi(i)?-1:1
516
+ for(const i of t){const t=0>this.Vi(i)?-1:1
515
517
  if(null===e)e=t
516
- else if(t!==e)return!0}return!1}Hi(t){let e=0
518
+ else if(t!==e)return!0}return!1}Vi(t){let e=0
517
519
  const i=t.length
518
520
  if(6>i)return 0
519
521
  for(let n=0;i>n;n+=2)e+=t[n]*t[(n+3)%i]-t[(n+2)%i]*t[n+1]
520
- return e/2}}class ot{constructor(){}Vi(t,e=0,i){const n=t.Oi.vertices,s=t.Oi.indices,r=t.Ci,o=n.length,a=o/2
522
+ return e/2}}class ht{constructor(){}qi(t,e=0,i){const n=t.Ci.vertices,s=t.Ci.indices,r=t.ki,o=n.length,a=o/2
521
523
  let h=[],c=0,l=!1
522
- if(0!==e)if(!0===t.Pi&&r.length>0){l=!0
524
+ if(0!==e)if(!0===t.Wi&&r.length>0){l=!0
523
525
  for(const t of r){const e=t.length>>1
524
526
  2>e||(c+=e-1)}}else{const t=new Map,e=s.length
525
527
  for(let i=0;e>i;i+=3){const e=s[i],n=s[i+1],r=s[i+2]
@@ -551,229 +553,229 @@ if(p>1e-10){const t=1/Math.sqrt(p)
551
553
  g=u*t,v=-l*t}const b=3*m
552
554
  f[b]=r,f[b+1]=o,f[b+2]=0,f[b+3]=a,f[b+4]=c,f[b+5]=0,f[b+6]=r,f[b+7]=o,f[b+8]=w,f[b+9]=a,f[b+10]=c,f[b+11]=w,d[b]=g,d[b+1]=v,d[b+2]=0,d[b+3]=g,d[b+4]=v,d[b+5]=0,d[b+6]=g,d[b+7]=v,d[b+8]=0,d[b+9]=g,d[b+10]=v,d[b+11]=0
553
555
  const S=m
554
- y[x]=S,y[x+1]=S+1,y[x+2]=S+2,y[x+3]=S+1,y[x+4]=S+3,y[x+5]=S+2,x+=6,m+=4}return{vertices:f,normals:d,indices:y}}}class at{constructor(){}qi(t,e){const i=t.length
555
- return 0===i?[]:1===i?[[0]]:this.Yi(t,e)}Yi(t,e){function i(t){return h[t]===t?t:h[t]=i(h[t])}function n(t,e){const n=i(t),s=i(e)
556
+ y[x]=S,y[x+1]=S+1,y[x+2]=S+2,y[x+3]=S+1,y[x+4]=S+3,y[x+5]=S+2,x+=6,m+=4}return{vertices:f,normals:d,indices:y}}}class ct{constructor(){}Yi(t,e){const i=t.length
557
+ return 0===i?[]:1===i?[[0]]:this.Ji(t,e)}Ji(t,e){function i(t){return h[t]===t?t:h[t]=i(h[t])}function n(t,e){const n=i(t),s=i(e)
556
558
  n!==s&&(c[s]>c[n]?h[n]=s:c[n]>c[s]?h[s]=n:(h[s]=n,c[n]++))}const s=t.length,r=Array(s),o=Array(2*s)
557
559
  let a=0
558
- for(let i=0;s>i;i++)r[i]=this.Ji(t[i],e[i]),o[a++]=[r[i].Ki,0,i],o[a++]=[r[i].Qi,1,i]
560
+ for(let i=0;s>i;i++)r[i]=this.Ki(t[i],e[i]),o[a++]=[r[i].Qi,0,i],o[a++]=[r[i].Xi,1,i]
559
561
  o.sort((t,e)=>t[0]-e[0]||t[1]-e[1])
560
562
  const h=Array.from({length:s},(t,e)=>e),c=Array(s).fill(0),l=new Set
561
563
  for(const[,t,e]of o)if(0===t){const t=r[e]
562
564
  for(const i of l){const s=r[i]
563
- s.Xi+.001>t.Zi&&t.Xi>s.Zi-.001&&n(e,i)}l.add(e)}else l.delete(e)
565
+ s.Zi+.001>t.tn&&t.Zi>s.tn-.001&&n(e,i)}l.add(e)}else l.delete(e)
564
566
  const u=new Map
565
567
  for(let t=0;s>t;t++){const e=i(t)
566
568
  let n=u.get(e)
567
- n||(n=[],u.set(e,n)),n.push(t)}return Array.from(u.values())}Ji(t,e){return{Ki:t.bounds.min.x+e.x,Zi:t.bounds.min.y+e.y,Qi:t.bounds.max.x+e.x,Xi:t.bounds.max.y+e.y}}}class ht{constructor(t){this.tn=[],this.en=new Map,this.compare=t}G(t){const e=this.en.get(t)
568
- if(void 0!==e)return this.nn(e),void this.sn(e)
569
- const i=this.tn.length
570
- this.tn.push(t),this.en.set(t,i),this.nn(i)}rn(){const t=this.tn.length
569
+ n||(n=[],u.set(e,n)),n.push(t)}return Array.from(u.values())}Ki(t,e){return{Qi:t.bounds.min.x+e.x,tn:t.bounds.min.y+e.y,Xi:t.bounds.max.x+e.x,Zi:t.bounds.max.y+e.y}}}class lt{constructor(t){this.en=[],this.nn=new Map,this.compare=t}G(t){const e=this.nn.get(t)
570
+ if(void 0!==e)return this.sn(e),void this.rn(e)
571
+ const i=this.en.length
572
+ this.en.push(t),this.nn.set(t,i),this.sn(i)}an(){const t=this.en.length
571
573
  if(!t)return
572
- if(1===t){const t=this.tn.pop()
573
- return this.en.clear(),t}const e=this.tn[0],i=this.tn.pop()
574
- return this.tn[0]=i,this.en.delete(e),this.en.set(i,0),this.sn(0),e}update(t){const e=this.en.get(t)
575
- void 0!==e?(this.nn(e),this.sn(e)):this.G(t)}an(){return!this.tn.length}hn(t,e){const i=this.tn[t],n=this.tn[e]
576
- this.tn[t]=n,this.tn[e]=i,this.en.set(i,e),this.en.set(n,t)}nn(t){const e=this.tn[t]
577
- for(;t>0;){const i=t-1>>1,n=this.tn[i]
574
+ if(1===t){const t=this.en.pop()
575
+ return this.nn.clear(),t}const e=this.en[0],i=this.en.pop()
576
+ return this.en[0]=i,this.nn.delete(e),this.nn.set(i,0),this.rn(0),e}update(t){const e=this.nn.get(t)
577
+ void 0!==e?(this.sn(e),this.rn(e)):this.G(t)}hn(){return!this.en.length}cn(t,e){const i=this.en[t],n=this.en[e]
578
+ this.en[t]=n,this.en[e]=i,this.nn.set(i,e),this.nn.set(n,t)}sn(t){const e=this.en[t]
579
+ for(;t>0;){const i=t-1>>1,n=this.en[i]
578
580
  if(this.compare(e,n)>=0)break
579
- this.tn[t]=n,this.en.set(n,t),t=i}this.tn[t]=e,this.en.set(e,t)}sn(t){const e=this.tn[t],i=this.tn.length,n=i>>1
581
+ this.en[t]=n,this.nn.set(n,t),t=i}this.en[t]=e,this.nn.set(e,t)}rn(t){const e=this.en[t],i=this.en.length,n=i>>1
580
582
  for(;n>t;){const n=1+(t<<1),s=n+1
581
583
  let r=t,o=e
582
- const a=this.tn[n]
583
- if(0>this.compare(a,o)&&(r=n,o=a),i>s){const t=this.tn[s]
584
+ const a=this.en[n]
585
+ if(0>this.compare(a,o)&&(r=n,o=a),i>s){const t=this.en[s]
584
586
  0>this.compare(t,o)&&(r=s,o=t)}if(r===t)break
585
- this.tn[t]=o,this.en.set(o,t),t=r}this.tn[t]=e,this.en.set(e,t)}}const ct={enabled:!0,areaThreshold:1}
586
- class lt{constructor(t){this.stats={pointsRemovedByVisvalingam:0,originalPointCount:0},this.config=t}cn(t){this.config=t}ln(t){if(2>=t.points.length)return t
587
+ this.en[t]=o,this.nn.set(o,t),t=r}this.en[t]=e,this.nn.set(e,t)}}const ut={enabled:!0,areaThreshold:1}
588
+ class ft{constructor(t){this.stats={pointsRemovedByVisvalingam:0,originalPointCount:0},this.config=t}ln(t){this.config=t}un(t){if(2>=t.points.length)return t
587
589
  if(!this.config.enabled)return t
588
590
  this.stats.originalPointCount+=t.points.length
589
591
  const e=t.points
590
592
  if(5>e.length)return t
591
593
  let i=e
592
- return i=this.un(i,this.config.areaThreshold),3>i.length?t:{...t,points:i}}un(t,e){if(3>=t.length)return t
593
- const i=t.length,n=t.map((t,e)=>({index:e,fn:1/0,dn:null,next:null}))
594
- for(let t=0;n.length>t;t++)n[t].dn=n[t-1]||null,n[t].next=n[t+1]||null
595
- const s=new ht((t,e)=>t.fn-e.fn)
594
+ return i=this.fn(i,this.config.areaThreshold),3>i.length?t:{...t,points:i}}fn(t,e){if(3>=t.length)return t
595
+ const i=t.length,n=t.map((t,e)=>({index:e,dn:1/0,yn:null,next:null}))
596
+ for(let t=0;n.length>t;t++)n[t].yn=n[t-1]||null,n[t].next=n[t+1]||null
597
+ const s=new lt((t,e)=>t.dn-e.dn)
596
598
  for(let e=1;n.length-1>e;e++){const i=n[e]
597
- i.fn=this.yn(t[i.dn.index],t[i.index],t[i.next.index]),s.G(i)}let r=i
598
- for(;!s.an()&&r>3;){const i=s.rn()
599
- if(!i||i.fn>e)break
600
- i.dn&&(i.dn.next=i.next),i.next&&(i.next.dn=i.dn),r--,i.dn&&i.dn.dn&&(i.dn.fn=this.yn(t[i.dn.dn.index],t[i.dn.index],t[i.next.index]),s.update(i.dn)),i.next&&i.next.next&&(i.next.fn=this.yn(t[i.dn.index],t[i.next.index],t[i.next.next.index]),s.update(i.next))}const o=[]
599
+ i.dn=this.pn(t[i.yn.index],t[i.index],t[i.next.index]),s.G(i)}let r=i
600
+ for(;!s.hn()&&r>3;){const i=s.an()
601
+ if(!i||i.dn>e)break
602
+ i.yn&&(i.yn.next=i.next),i.next&&(i.next.yn=i.yn),r--,i.yn&&i.yn.yn&&(i.yn.dn=this.pn(t[i.yn.yn.index],t[i.yn.index],t[i.next.index]),s.update(i.yn)),i.next&&i.next.next&&(i.next.dn=this.pn(t[i.yn.index],t[i.next.index],t[i.next.next.index]),s.update(i.next))}const o=[]
601
603
  let a=n[0]
602
604
  for(;a;)o.push(t[a.index]),a=a.next
603
- return this.stats.pointsRemovedByVisvalingam+=i-o.length,o}yn(t,e,i){return Math.abs((t.x*(e.y-i.y)+e.x*(i.y-t.y)+i.x*(t.y-e.y))/2)}getStats(){return{...this.stats}}pn(){this.stats={pointsRemovedByVisvalingam:0,originalPointCount:0}}}const ut={distanceTolerance:.5,angleTolerance:.2},ft=1e-6
604
- class dt{constructor(t){this.curveSteps=null,this.wn={...ut,...t}}gn(t){this.wn={...ut,...t}}vn(t){if(null==t)return void(this.curveSteps=null)
605
+ return this.stats.pointsRemovedByVisvalingam+=i-o.length,o}pn(t,e,i){return Math.abs((t.x*(e.y-i.y)+e.x*(i.y-t.y)+i.x*(t.y-e.y))/2)}getStats(){return{...this.stats}}wn(){this.stats={pointsRemovedByVisvalingam:0,originalPointCount:0}}}const dt={distanceTolerance:.5,angleTolerance:.2},yt=1e-6
606
+ class pt{constructor(t){this.curveSteps=null,this.gn={...dt,...t}}vn(t){this.gn={...dt,...t}}mn(t){if(null==t)return void(this.curveSteps=null)
605
607
  if(!Number.isFinite(t))return void(this.curveSteps=null)
606
608
  const e=Math.round(t)
607
- this.curveSteps=1>e?null:e}mn(t,e,i){if(null!==this.curveSteps)return this.xn(t,e,i,this.curveSteps)
609
+ this.curveSteps=1>e?null:e}xn(t,e,i){if(null!==this.curveSteps)return this.bn(t,e,i,this.curveSteps)
608
610
  const n=[]
609
- return this.bn(t.x,t.y,e.x,e.y,i.x,i.y,n),this.Sn(i.x,i.y,n),n}_n(t,e,i,n){if(null!==this.curveSteps)return this.En(t,e,i,n,this.curveSteps)
611
+ return this.Sn(t.x,t.y,e.x,e.y,i.x,i.y,n),this._n(i.x,i.y,n),n}En(t,e,i,n){if(null!==this.curveSteps)return this.Tn(t,e,i,n,this.curveSteps)
610
612
  const s=[]
611
- return this.Tn(t.x,t.y,e.x,e.y,i.x,i.y,n.x,n.y,s),this.Sn(n.x,n.y,s),s}An(t,e,i){return t+(e-t)*i}xn(t,e,i,n){const s=[]
612
- for(let r=1;n>=r;r++){const o=r/n,a=this.An(t.x,e.x,o),h=this.An(t.y,e.y,o),c=this.An(e.x,i.x,o),l=this.An(e.y,i.y,o),u=this.An(a,c,o),f=this.An(h,l,o)
613
- this.Sn(u,f,s)}return s}En(t,e,i,n,s){const r=[]
614
- for(let o=1;s>=o;o++){const a=o/s,h=this.An(t.x,e.x,a),c=this.An(t.y,e.y,a),l=this.An(e.x,i.x,a),u=this.An(e.y,i.y,a),f=this.An(i.x,n.x,a),d=this.An(i.y,n.y,a),y=this.An(h,l,a),p=this.An(c,u,a),w=this.An(l,f,a),g=this.An(u,d,a),v=this.An(y,w,a),m=this.An(p,g,a)
615
- this.Sn(v,m,r)}return r}bn(t,e,i,n,s,r,o,a=0){if(a>16)return
616
- const h=(t+i)/2,c=(e+n)/2,l=(i+s)/2,u=(n+r)/2,f=(h+l)/2,d=(c+u)/2,y=s-t,p=r-e,w=Math.abs((i-s)*p-(n-r)*y),g=this.wn.distanceTolerance??.5,v=g*g
617
- if(w>ft){if(v*(y*y+p*p)>=w*w){const a=this.wn.angleTolerance??.2
618
- if(0>=a)return void this.Sn(i,n,o)
613
+ return this.An(t.x,t.y,e.x,e.y,i.x,i.y,n.x,n.y,s),this._n(n.x,n.y,s),s}Mn(t,e,i){return t+(e-t)*i}bn(t,e,i,n){const s=[]
614
+ for(let r=1;n>=r;r++){const o=r/n,a=this.Mn(t.x,e.x,o),h=this.Mn(t.y,e.y,o),c=this.Mn(e.x,i.x,o),l=this.Mn(e.y,i.y,o),u=this.Mn(a,c,o),f=this.Mn(h,l,o)
615
+ this._n(u,f,s)}return s}Tn(t,e,i,n,s){const r=[]
616
+ for(let o=1;s>=o;o++){const a=o/s,h=this.Mn(t.x,e.x,a),c=this.Mn(t.y,e.y,a),l=this.Mn(e.x,i.x,a),u=this.Mn(e.y,i.y,a),f=this.Mn(i.x,n.x,a),d=this.Mn(i.y,n.y,a),y=this.Mn(h,l,a),p=this.Mn(c,u,a),w=this.Mn(l,f,a),g=this.Mn(u,d,a),v=this.Mn(y,w,a),m=this.Mn(p,g,a)
617
+ this._n(v,m,r)}return r}Sn(t,e,i,n,s,r,o,a=0){if(a>16)return
618
+ const h=(t+i)/2,c=(e+n)/2,l=(i+s)/2,u=(n+r)/2,f=(h+l)/2,d=(c+u)/2,y=s-t,p=r-e,w=Math.abs((i-s)*p-(n-r)*y),g=this.gn.distanceTolerance??.5,v=g*g
619
+ if(w>yt){if(v*(y*y+p*p)>=w*w){const a=this.gn.angleTolerance??.2
620
+ if(0>=a)return void this._n(i,n,o)
619
621
  {const h=i-t,c=n-e,l=s-i,u=r-n
620
- if(a>Math.abs(Math.atan2(h*u-c*l,h*l+c*u)))return void this.Sn(i,n,o)}}}else{const s=y*y+p*p
621
- if(0===s){if(v>=(i-t)*(i-t)+(n-e)*(n-e))return void this.Sn(i,n,o)}else{const r=((i-t)*y+(n-e)*p)/s
622
- if(r>0&&1>r&&v*s>=w*w)return void this.Sn(i,n,o)}}this.bn(t,e,h,c,f,d,o,a+1),this.bn(f,d,l,u,s,r,o,a+1)}Tn(t,e,i,n,s,r,o,a,h,c=0){if(c>16)return
623
- const l=(t+i)/2,u=(e+n)/2,f=(i+s)/2,d=(n+r)/2,y=(s+o)/2,p=(r+a)/2,w=(l+f)/2,g=(u+d)/2,v=(f+y)/2,m=(d+p)/2,x=(w+v)/2,b=(g+m)/2,S=o-t,_=a-e,E=Math.abs((i-o)*_-(n-a)*S),T=Math.abs((s-o)*_-(r-a)*S),A=this.wn.distanceTolerance??.5,M=A*A
622
+ if(a>Math.abs(Math.atan2(h*u-c*l,h*l+c*u)))return void this._n(i,n,o)}}}else{const s=y*y+p*p
623
+ if(0===s){if(v>=(i-t)*(i-t)+(n-e)*(n-e))return void this._n(i,n,o)}else{const r=((i-t)*y+(n-e)*p)/s
624
+ if(r>0&&1>r&&v*s>=w*w)return void this._n(i,n,o)}}this.Sn(t,e,h,c,f,d,o,a+1),this.Sn(f,d,l,u,s,r,o,a+1)}An(t,e,i,n,s,r,o,a,h,c=0){if(c>16)return
625
+ const l=(t+i)/2,u=(e+n)/2,f=(i+s)/2,d=(n+r)/2,y=(s+o)/2,p=(r+a)/2,w=(l+f)/2,g=(u+d)/2,v=(f+y)/2,m=(d+p)/2,x=(w+v)/2,b=(g+m)/2,S=o-t,_=a-e,E=Math.abs((i-o)*_-(n-a)*S),T=Math.abs((s-o)*_-(r-a)*S),A=this.gn.distanceTolerance??.5,M=A*A
624
626
  let I=0
625
- switch(E>ft&&(I|=1),T>ft&&(I|=2),I){case 0:const c=S*S+_*_
626
- if(0===c){if(M>=(i-t)*(i-t)+(n-e)*(n-e)&&M>=(s-t)*(s-t)+(r-e)*(r-e))return this.Sn(i,n,h),void this.Sn(s,r,h)}else{const o=((i-t)*S+(n-e)*_)/c,a=((s-t)*S+(r-e)*_)/c
627
- if(o>0&&1>o&&a>0&&1>a&&M*c>=(E+T)*(E+T))return this.Sn(i,n,h),void this.Sn(s,r,h)}break
628
- case 1:if(M*(S*S+_*_)>=T*T){const t=this.wn.angleTolerance??.2
629
- if(0>=t)return this.Sn(i,n,h),void this.Sn(s,r,h)
627
+ switch(E>yt&&(I|=1),T>yt&&(I|=2),I){case 0:const c=S*S+_*_
628
+ if(0===c){if(M>=(i-t)*(i-t)+(n-e)*(n-e)&&M>=(s-t)*(s-t)+(r-e)*(r-e))return this._n(i,n,h),void this._n(s,r,h)}else{const o=((i-t)*S+(n-e)*_)/c,a=((s-t)*S+(r-e)*_)/c
629
+ if(o>0&&1>o&&a>0&&1>a&&M*c>=(E+T)*(E+T))return this._n(i,n,h),void this._n(s,r,h)}break
630
+ case 1:if(M*(S*S+_*_)>=T*T){const t=this.gn.angleTolerance??.2
631
+ if(0>=t)return this._n(i,n,h),void this._n(s,r,h)
630
632
  {const e=s-i,c=r-n,l=o-s,u=a-r
631
- if(t>Math.abs(Math.atan2(e*u-c*l,e*l+c*u)))return this.Sn(i,n,h),void this.Sn(s,r,h)}}break
632
- case 2:if(M*(S*S+_*_)>=E*E){const o=this.wn.angleTolerance??.2
633
- if(0>=o)return this.Sn(i,n,h),void this.Sn(s,r,h)
633
+ if(t>Math.abs(Math.atan2(e*u-c*l,e*l+c*u)))return this._n(i,n,h),void this._n(s,r,h)}}break
634
+ case 2:if(M*(S*S+_*_)>=E*E){const o=this.gn.angleTolerance??.2
635
+ if(0>=o)return this._n(i,n,h),void this._n(s,r,h)
634
636
  {const a=i-t,c=n-e,l=s-i,u=r-n
635
- if(o>Math.abs(Math.atan2(a*u-c*l,a*l+c*u)))return this.Sn(i,n,h),void this.Sn(s,r,h)}}break
636
- case 3:if(M*(S*S+_*_)>=(E+T)*(E+T)){const c=this.wn.angleTolerance??.2
637
- if(0>=c)return this.Sn(i,n,h),void this.Sn(s,r,h)
637
+ if(o>Math.abs(Math.atan2(a*u-c*l,a*l+c*u)))return this._n(i,n,h),void this._n(s,r,h)}}break
638
+ case 3:if(M*(S*S+_*_)>=(E+T)*(E+T)){const c=this.gn.angleTolerance??.2
639
+ if(0>=c)return this._n(i,n,h),void this._n(s,r,h)
638
640
  {const l=i-t,u=n-e,f=s-i,d=r-n,y=o-s,p=a-r
639
- if(c>Math.abs(Math.atan2(l*d-u*f,l*f+u*d))+Math.abs(Math.atan2(f*p-d*y,f*y+d*p)))return this.Sn(i,n,h),void this.Sn(s,r,h)}}}this.Tn(t,e,l,u,w,g,x,b,h,c+1),this.Tn(x,b,v,m,y,p,o,a,h,c+1)}Sn(t,e,i){const n=new J(t,e)
641
+ if(c>Math.abs(Math.atan2(l*d-u*f,l*f+u*d))+Math.abs(Math.atan2(f*p-d*y,f*y+d*p)))return this._n(i,n,h),void this._n(s,r,h)}}}this.An(t,e,l,u,w,g,x,b,h,c+1),this.An(x,b,v,m,y,p,o,a,h,c+1)}_n(t,e,i){const n=new Q(t,e)
640
642
  if(0===i.length)return void i.push(n)
641
643
  const s=i[i.length-1],r=n.x-s.x,o=n.y-s.y
642
- r*r+o*o>1e-12&&i.push(n)}}class yt{constructor(t,e){this.Mn=0,this.In=0,this.Fn=[],this.Ln=null,this.Gn=null,this.On={min:new J(1/0,1/0),max:new J(-1/0,-1/0)},this.Cn=[],this.kn=[],this.Bn=[],this.Dn=new J(0,0),this.Un=new dt(t),this.$n=new lt({...ct,...e})}setPosition(t,e){this.Dn.set(t,e)}Nn(t,e){this.Dn.x+=t,this.Dn.y+=e}Pn(t,e){this.Fn.length>0&&this.zn(),this.Mn=t,this.In=e,this.Fn=[],this.On.min.set(1/0,1/0),this.On.max.set(-1/0,-1/0),this.kn.push(this.Dn.clone())}zn(){this.Ln&&this.Wn(),this.Fn.length>0&&(this.Cn.push({Rn:this.Mn,jn:this.Fn,bounds:{min:{x:this.On.min.x,y:this.On.min.y},max:{x:this.On.max.x,y:this.On.max.y}}}),this.Bn.push(this.In)),this.Fn=[]}Hn(t,e){this.Ln&&this.Wn(),this.Gn=new J(t,e),this.Vn(this.Gn),this.Ln={points:[this.Gn],glyphIndex:this.Mn}}qn(t,e){if(!this.Ln||!this.Gn)return
643
- const i=new J(t,e)
644
- this.Vn(i),this.Ln.points.push(i),this.Gn=i}Yn(t,e,i,n){if(!this.Ln||!this.Gn)return
645
- const s=this.Gn,r=new J(t,e),o=new J(i,n)
646
- if(ft>Math.abs((r.x-o.x)*(o.y-s.y)-(r.y-o.y)*(o.x-s.x)))return void this.qn(i,n)
647
- const a=this.Un.mn(s,r,o)
644
+ r*r+o*o>1e-12&&i.push(n)}}class wt{constructor(t,e){this.In=0,this.Fn=0,this.Ln=[],this.Gn=null,this.On=null,this.Cn={min:new Q(1/0,1/0),max:new Q(-1/0,-1/0)},this.kn=[],this.Dn=[],this.Bn=[],this.Nn=new Q(0,0),this.Un=new pt(t),this.$n=new ft({...ut,...e})}setPosition(t,e){this.Nn.set(t,e)}Pn(t,e){this.Nn.x+=t,this.Nn.y+=e}Wn(t,e){this.Ln.length>0&&this.zn(),this.In=t,this.Fn=e,this.Ln=[],this.Cn.min.set(1/0,1/0),this.Cn.max.set(-1/0,-1/0),this.Dn.push(this.Nn.clone())}zn(){this.Gn&&this.Rn(),this.Ln.length>0&&(this.kn.push({jn:this.In,Hn:this.Ln,bounds:{min:{x:this.Cn.min.x,y:this.Cn.min.y},max:{x:this.Cn.max.x,y:this.Cn.max.y}}}),this.Bn.push(this.Fn)),this.Ln=[]}Vn(t,e){this.Gn&&this.Rn(),this.On=new Q(t,e),this.qn(this.On),this.Gn={points:[this.On],glyphIndex:this.In}}Yn(t,e){if(!this.Gn||!this.On)return
645
+ const i=new Q(t,e)
646
+ this.qn(i),this.Gn.points.push(i),this.On=i}Jn(t,e,i,n){if(!this.Gn||!this.On)return
647
+ const s=this.On,r=new Q(t,e),o=new Q(i,n)
648
+ if(yt>Math.abs((r.x-o.x)*(o.y-s.y)-(r.y-o.y)*(o.x-s.x)))return void this.Yn(i,n)
649
+ const a=this.Un.xn(s,r,o)
648
650
  for(let t=0;a.length>t;t++){const e=a[t]
649
- this.Vn(e),this.Ln.points.push(e)}this.Gn=o}Jn(t,e,i,n,s,r){if(!this.Ln||!this.Gn)return
650
- const o=this.Gn,a=new J(t,e),h=new J(i,n),c=new J(s,r),l=c.x-o.x,u=c.y-o.y
651
- if(ft>Math.abs((a.x-c.x)*u-(a.y-c.y)*l)&&ft>Math.abs((h.x-c.x)*u-(h.y-c.y)*l))return void this.qn(s,r)
652
- const f=this.Un._n(o,a,h,c)
651
+ this.qn(e),this.Gn.points.push(e)}this.On=o}Kn(t,e,i,n,s,r){if(!this.Gn||!this.On)return
652
+ const o=this.On,a=new Q(t,e),h=new Q(i,n),c=new Q(s,r),l=c.x-o.x,u=c.y-o.y
653
+ if(yt>Math.abs((a.x-c.x)*u-(a.y-c.y)*l)&&yt>Math.abs((h.x-c.x)*u-(h.y-c.y)*l))return void this.Yn(s,r)
654
+ const f=this.Un.En(o,a,h,c)
653
655
  for(let t=0;f.length>t;t++){const e=f[t]
654
- this.Vn(e),this.Ln.points.push(e)}this.Gn=c}Kn(){if(!this.Ln||!this.Gn)return
655
- const t=this.Ln.points[0]
656
- this.Gn.equals(t)||this.Ln.points.push(t),this.Wn()}Wn(){if(this.Ln){const t=this.$n.ln(this.Ln)
657
- this.Fn.push(t),this.Ln=null,this.Gn=null}}Vn(t){this.On.min.x=Math.min(this.On.min.x,t.x),this.On.min.y=Math.min(this.On.min.y,t.y),this.On.max.x=Math.max(this.On.max.x,t.x),this.On.max.y=Math.max(this.On.max.y,t.y)}Qn(){return this.Fn.length>0&&this.zn(),this.Cn}Xn(){return this.kn}Zn(){return this.Bn}reset(){this.Cn=[],this.kn=[],this.Bn=[],this.Fn=[],this.Ln=null,this.Gn=null,this.Mn=0,this.In=0,this.Dn.set(0,0),this.On={min:new J(1/0,1/0),max:new J(-1/0,-1/0)}}gn(t){this.Un.gn(t)}vn(t){this.Un.vn(t)}ts(t){this.$n.cn({...ct,...t})}es(){return this.$n.getStats()}}class pt{constructor(){this.ns=null,this.ss=null,this.rs=null,this.hs=null,this.cs=null,this.ls=0,this.position={x:0,y:0}}setPosition(t,e){this.position.x=t,this.position.y=e,this.us&&this.us.setPosition(t,e)}Nn(t,e){this.position.x+=t,this.position.y+=e,this.us&&this.us.Nn(t,e)}fs(t){this.us=t}ds(t,e){if(!t||!t.module||!t.hb)throw Error("Invalid font object")
658
- if(this.us=e,this.ls)return
656
+ this.qn(e),this.Gn.points.push(e)}this.On=c}Qn(){if(!this.Gn||!this.On)return
657
+ const t=this.Gn.points[0]
658
+ this.On.equals(t)||this.Gn.points.push(t),this.Rn()}Rn(){if(this.Gn){const t=this.$n.un(this.Gn)
659
+ this.Ln.push(t),this.Gn=null,this.On=null}}qn(t){this.Cn.min.x=Math.min(this.Cn.min.x,t.x),this.Cn.min.y=Math.min(this.Cn.min.y,t.y),this.Cn.max.x=Math.max(this.Cn.max.x,t.x),this.Cn.max.y=Math.max(this.Cn.max.y,t.y)}Xn(){return this.Ln.length>0&&this.zn(),this.kn}Zn(){return this.Dn}ts(){return this.Bn}reset(){this.kn=[],this.Dn=[],this.Bn=[],this.Ln=[],this.Gn=null,this.On=null,this.In=0,this.Fn=0,this.Nn.set(0,0),this.Cn={min:new Q(1/0,1/0),max:new Q(-1/0,-1/0)}}vn(t){this.Un.vn(t)}mn(t){this.Un.mn(t)}es(t){this.$n.ln({...ut,...t})}ns(){return this.$n.getStats()}}class gt{constructor(){this.ss=null,this.rs=null,this.hs=null,this.cs=null,this.ls=null,this.us=0,this.position={x:0,y:0}}setPosition(t,e){this.position.x=t,this.position.y=e,this.fs&&this.fs.setPosition(t,e)}Pn(t,e){this.position.x+=t,this.position.y+=e,this.fs&&this.fs.Pn(t,e)}ds(t){this.fs=t}ys(t,e){if(!t||!t.module||!t.hb)throw Error("Invalid font object")
660
+ if(this.fs=e,this.us)return
659
661
  const i=t.module
660
- this.ns=i.ys((t,e,i,n,s)=>{this.us?.Hn(n,s)},"viiiffi"),this.ss=i.ys((t,e,i,n,s)=>{this.us?.qn(n,s)},"viiiffi"),this.rs=i.ys((t,e,i,n,s,r,o)=>{this.us?.Yn(n,s,r,o)},"viiiffffi"),this.hs=i.ys((t,e,i,n,s,r,o,a,h)=>{this.us?.Jn(n,s,r,o,a,h)},"viiiffffffi"),this.cs=i.ys(()=>{this.us?.Kn()},"viiii"),this.ls=i.exports.ps(),i.exports.ws(this.ls,this.ns,0,0),i.exports.gs(this.ls,this.ss,0,0),i.exports.vs(this.ls,this.rs,0,0),i.exports.xs(this.ls,this.hs,0,0),i.exports.bs(this.ls,this.cs,0,0)}Ss(){if(!this.ls)throw Error("Draw functions not initialized")
661
- return this.ls}destroy(t){if(!t||!t.module||!t.hb)return
662
+ this.ss=i.ps((t,e,i,n,s)=>{this.fs?.Vn(n,s)},"viiiffi"),this.rs=i.ps((t,e,i,n,s)=>{this.fs?.Yn(n,s)},"viiiffi"),this.hs=i.ps((t,e,i,n,s,r,o)=>{this.fs?.Jn(n,s,r,o)},"viiiffffi"),this.cs=i.ps((t,e,i,n,s,r,o,a,h)=>{this.fs?.Kn(n,s,r,o,a,h)},"viiiffffffi"),this.ls=i.ps(()=>{this.fs?.Qn()},"viiii"),this.us=i.exports.ws(),i.exports.gs(this.us,this.ss,0,0),i.exports.vs(this.us,this.rs,0,0),i.exports.xs(this.us,this.hs,0,0),i.exports.bs(this.us,this.cs,0,0),i.exports.Ss(this.us,this.ls,0,0)}_s(){if(!this.us)throw Error("Draw functions not initialized")
663
+ return this.us}destroy(t){if(!t||!t.module||!t.hb)return
662
664
  const e=t.module
663
- try{this.ls&&(e.exports._s(this.ls),this.ls=0),null!==this.ns&&(e.Es(this.ns),this.ns=null),null!==this.ss&&(e.Es(this.ss),this.ss=null),null!==this.rs&&(e.Es(this.rs),this.rs=null),null!==this.hs&&(e.Es(this.hs),this.hs=null),null!==this.cs&&(e.Es(this.cs),this.cs=null)}catch(t){c.warn("Error destroying draw callbacks:",t)}this.us=void 0}}const wt=new WeakMap
664
- class gt{constructor(t,e){this.Ts="default",this.As="default",this.Ms=new Set,this.Is=[],this.Fs=[],this.Ls=[],this.cache=t,this.Xt=e,this.tessellator=new rt,this.Gs=new ot,this.Os=new at,this.us=new yt,this.Cs=(()=>{const t=this.Xt.module,e=wt.get(t)
665
+ try{this.us&&(e.exports.Es(this.us),this.us=0),null!==this.ss&&(e.Ts(this.ss),this.ss=null),null!==this.rs&&(e.Ts(this.rs),this.rs=null),null!==this.hs&&(e.Ts(this.hs),this.hs=null),null!==this.cs&&(e.Ts(this.cs),this.cs=null),null!==this.ls&&(e.Ts(this.ls),this.ls=null)}catch(t){c.warn("Error destroying draw callbacks:",t)}this.fs=void 0}}const vt=new WeakMap
666
+ class mt{constructor(t,e){this.As="default",this.Ms="default",this.Is=new Set,this.Fs=[],this.Ls=[],this.Gs=[],this.cache=t,this.Xt=e,this.tessellator=new at,this.Os=new ht,this.Cs=new ct,this.fs=new wt,this.ks=(()=>{const t=this.Xt.module,e=vt.get(t)
665
667
  if(e)return e
666
- const i=new pt
667
- return wt.set(t,i),i})(),this.Cs.ds(this.Xt,this.us),this.ks=Z,this.Bs=tt,this.Ds=et}es(){return this.us.es()}gn(t){this.wn=t,this.us.gn(t),this.Us()}vn(t){if(null==t)this.curveSteps=void 0
668
+ const i=new gt
669
+ return vt.set(t,i),i})(),this.ks.ys(this.Xt,this.fs),this.Ds=et,this.Bs=it,this.Ns=nt}ns(){return this.fs.ns()}vn(t){this.gn=t,this.fs.vn(t),this.Us()}mn(t){if(null==t)this.curveSteps=void 0
668
670
  else if(Number.isFinite(t)){const e=Math.round(t)
669
671
  this.curveSteps=1>e?void 0:e}else this.curveSteps=void 0
670
- this.us.vn(this.curveSteps),this.Us()}ts(t){this.$s=t,this.us.ts(t),this.Us()}Ns(t){this.Ts=t,this.Us()}Us(){this.As=`${this.Ts}__${this.Ps()}`}Ps(){return[(()=>{if(void 0!==this.curveSteps)return"cf:steps:"+this.curveSteps
671
- const t=this.wn?.distanceTolerance??.5,e=this.wn?.angleTolerance??.2
672
+ this.fs.mn(this.curveSteps),this.Us()}es(t){this.$s=t,this.fs.es(t),this.Us()}Ps(t){this.As=t,this.Us()}Us(){this.Ms=`${this.As}__${this.Ws()}`}Ws(){return[(()=>{if(void 0!==this.curveSteps)return"cf:steps:"+this.curveSteps
673
+ const t=this.gn?.distanceTolerance??.5,e=this.gn?.angleTolerance??.2
672
674
  return`cf:${t.toFixed(4)},${e.toFixed(4)}`})(),`opt:${this.$s?.enabled??1?1:0},${(this.$s?.areaThreshold??1).toFixed(4)}`].join("|")}zs(t,e,i,s,r,o=!1,a){if(h){let e=0
673
- for(let i=0;t.length>i;i++)e+=t[i].length}const c=this.Ls
675
+ for(let i=0;t.length>i;i++)e+=t[i].length}const c=this.Gs
674
676
  c.length=0
675
677
  let l=0,u=0,f=0,d=0,y=0
676
678
  const p=(t,e,i,n)=>{const s=y
677
679
  let r=c[l]
678
- return r?(r.data=t,r.px=e,r.Ws=i,r.Rs=n,r.js=s):(r={data:t,px:e,Ws:i,Rs:n,js:s},c[l]=r),l++,u+=t.vertices.length,f+=t.normals.length,d+=t.indices.length,y+=t.vertices.length/3,s},w=[],g={min:{x:1/0,y:1/0,z:0},max:{x:-1/0,y:-1/0,z:e}}
680
+ return r?(r.data=t,r.px=e,r.Rs=i,r.js=n,r.Hs=s):(r={data:t,px:e,Rs:i,js:n,Hs:s},c[l]=r),l++,u+=t.vertices.length,f+=t.normals.length,d+=t.indices.length,y+=t.vertices.length/3,s},w=[],g={min:{x:1/0,y:1/0,z:0},max:{x:-1/0,y:-1/0,z:e}}
679
681
  for(let r=0;t.length>r;r++){const h=t[r]
680
682
  for(const t of h){const r=t.position.x,h=t.position.y,c=t.position.z,l=[]
681
- for(const e of t.glyphs)l.push(this.Hs(e.g))
683
+ for(const e of t.glyphs)l.push(this.Vs(e.g))
682
684
  let u
683
- if(t.glyphs.length>1){const e=`${this.As}_${t.text}`,i=this.Ds.get(e)
685
+ if(t.glyphs.length>1){const e=`${this.Ms}_${t.text}`,i=this.Ns.get(e)
684
686
  let n=!1
685
- if(i&&i.Vs.length===t.glyphs.length){n=!0
686
- for(let e=0;t.glyphs.length>e;e++){const s=t.glyphs[e],r=i.qs[e]
687
- if(i.Vs[e]!==s.g||r.x!==(s.x??0)||r.y!==(s.y??0)){n=!1
687
+ if(i&&i.qs.length===t.glyphs.length){n=!0
688
+ for(let e=0;t.glyphs.length>e;e++){const s=t.glyphs[e],r=i.Ys[e]
689
+ if(i.qs[e]!==s.g||r.x!==(s.x??0)||r.y!==(s.y??0)){n=!1
688
690
  break}}}if(n&&i)u=i.groups
689
691
  else{const i=t.glyphs.length
690
- if(i>this.Is.length)for(let t=this.Is.length;i>t;t++)this.Is.push(new K(0,0,0))
691
- this.Is.length=i
692
- for(let e=0;i>e;e++){const i=t.glyphs[e],n=this.Is[e]
693
- n.x=i.x??0,n.y=i.y??0,n.z=0}u=this.Os.qi(l,this.Is),this.Ds.set(e,{Vs:t.glyphs.map(t=>t.g),qs:t.glyphs.map(t=>({x:t.x??0,y:t.y??0})),groups:u})}}else u=[[0]]
692
+ if(i>this.Fs.length)for(let t=this.Fs.length;i>t;t++)this.Fs.push(new X(0,0,0))
693
+ this.Fs.length=i
694
+ for(let e=0;i>e;e++){const i=t.glyphs[e],n=this.Fs[e]
695
+ n.x=i.x??0,n.y=i.y??0,n.z=0}u=this.Cs.Yi(l,this.Fs),this.Ns.set(e,{qs:t.glyphs.map(t=>t.g),Ys:t.glyphs.map(t=>({x:t.x??0,y:t.y??0})),groups:u})}}else u=[[0]]
694
696
  const f=o
695
697
  let d=u
696
698
  if(a&&a.size>0){d=[]
697
699
  for(const e of u)if(e.length>1){const i=[],n=[]
698
- for(const s of e)a.has(t.glyphs[s].Ys)?i.push(s):n.push(s)
699
- i.length>0&&d.push(i),n.length>0&&d.push(n)}else d.push(e)}for(const o of d)if(o.length>1&&!f){const n=o.map(e=>t.glyphs[e]),a=this.Js(n,e,i)
700
+ for(const s of e)a.has(t.glyphs[s].Js)?i.push(s):n.push(s)
701
+ i.length>0&&d.push(i),n.length>0&&d.push(n)}else d.push(e)}for(const o of d)if(o.length>1&&!f){const n=o.map(e=>t.glyphs[e]),a=this.Ks(n,e,i)
700
702
  let u=this.Bs.get(a)
701
- if(!u){const i=this.Fs
703
+ if(!u){const i=this.Ls
702
704
  let r=0
703
705
  const h=n[0].x??0,c=n[0].y??0
704
706
  for(let e=0;o.length>e;e++){const n=o[e],s=l[n],a=t.glyphs[n],u=(a.x??0)-h,f=(a.y??0)-c
705
- for(const t of s.jn){const e=t.points,n=e.length
707
+ for(const t of s.Hn){const e=t.points,n=e.length
706
708
  if(3>n)continue
707
709
  const s=n>1&&e[0].x===e[n-1].x&&e[0].y===e[n-1].y?n-1:n,o=2*(s+1)
708
710
  let a=i[r]
709
711
  !a||o>a.length?(a=Array(o),i[r]=a):a.length=o
710
712
  let h=0
711
713
  for(let t=0;s>t;t++){const i=e[t]
712
- a[h++]=i.x+u,a[h++]=i.y+f}2>h||(a[h++]=a[0],a[h++]=a[1]),r++}}i.length=r,u=this.Ks(i,e,s),this.Bs.set(a,u)}const f=n[0],d=p(u,r+(f.x??0),h+(f.y??0),c),y=u.vertices.length/3
713
- for(let i=0;o.length>i;i++){const n=o[i],s=t.glyphs[n],a=this.Qs(s,d,y,r+(s.x??0),h+(s.y??0),c,l[n],e)
714
- w.push(a),this.Xs(a.bounds,g)}}else for(const a of o){const o=t.glyphs[a],u=l[a],f=r+(o.x??0),d=h+(o.y??0),y=c
715
- if(0===u.jn.length){const t=this.Qs(o,0,0,f,d,y,u,e)
714
+ a[h++]=i.x+u,a[h++]=i.y+f}2>h||(a[h++]=a[0],a[h++]=a[1]),r++}}i.length=r,u=this.Qs(i,e,s),this.Bs.set(a,u)}const f=n[0],d=p(u,r+(f.x??0),h+(f.y??0),c),y=u.vertices.length/3
715
+ for(let i=0;o.length>i;i++){const n=o[i],s=t.glyphs[n],a=this.Xs(s,d,y,r+(s.x??0),h+(s.y??0),c,l[n],e)
716
+ w.push(a),this.Zs(a.bounds,g)}}else for(const a of o){const o=t.glyphs[a],u=l[a],f=r+(o.x??0),d=h+(o.y??0),y=c
717
+ if(0===u.Hn.length){const t=this.Xs(o,0,0,f,d,y,u,e)
716
718
  w.push(t)
717
- continue}const v=n(this.As,o.g,e,i)
719
+ continue}const v=n(this.Ms,o.g,e,i)
718
720
  let m=this.cache.get(v)
719
- m?m.Zs++:(m=this.tr(u,e,i,s),this.cache.set(v,m))
720
- const x=p(m,f,d,y),b=this.Qs(o,x,m.vertices.length/3,f,d,y,u,e)
721
- w.push(b),this.Xs(b.bounds,g)}}}c.length=l
721
+ m?m.tr++:(m=this.er(u,e,i,s),this.cache.set(v,m))
722
+ const x=p(m,f,d,y),b=this.Xs(o,x,m.vertices.length/3,f,d,y,u,e)
723
+ w.push(b),this.Zs(b.bounds,g)}}}c.length=l
722
724
  const v=new Float32Array(u),m=new Float32Array(f),x=new Uint32Array(d)
723
725
  let b=0,S=0,_=0
724
- for(let t=0;c.length>t;t++){const e=c[t],i=e.data.vertices,n=e.data.normals,s=e.data.indices,o=e.px*r,a=e.Ws*r,h=e.Rs*r,l=i.length
726
+ for(let t=0;c.length>t;t++){const e=c[t],i=e.data.vertices,n=e.data.normals,s=e.data.indices,o=e.px*r,a=e.Rs*r,h=e.js*r,l=i.length
725
727
  let u=b
726
728
  for(let t=0;l>t;t+=3)v[u]=i[t]*r+o,v[u+1]=i[t+1]*r+a,v[u+2]=i[t+2]*r+h,u+=3
727
729
  b=u,m.set(n,S),S+=n.length
728
- const f=e.js,d=s.length
730
+ const f=e.Hs,d=s.length
729
731
  let y=_
730
732
  for(let t=0;d>t;t++)x[y++]=s[t]+f
731
733
  _=y}g.min.x*=r,g.min.y*=r,g.min.z*=r,g.max.x*=r,g.max.y*=r,g.max.z*=r
732
734
  for(let t=0;w.length>t;t++)w[t].bounds.min.x*=r,w[t].bounds.min.y*=r,w[t].bounds.min.z*=r,w[t].bounds.max.x*=r,w[t].bounds.max.y*=r,w[t].bounds.max.z*=r
733
- return{vertices:v,normals:m,indices:x,er:w,planeBounds:g}}Js(t,e,i){if(0===t.length)return""
735
+ return{vertices:v,normals:m,indices:x,ir:w,planeBounds:g}}Ks(t,e,i){if(0===t.length)return""
734
736
  const n=t[0].x??0,s=t[0].y??0,r=t.map(t=>`${t.g}:${(t.x??0)-n},${(t.y??0)-s}`).join("|")
735
- return`${this.As}_${r}_${Math.round(1e3*e)/1e3}_${i}`}Qs(t,e,i,n,s,r,o,a){return{ir:t.Ys,nr:t.nr,js:e,sr:i,bounds:{min:{x:o.bounds.min.x+n,y:o.bounds.min.y+s,z:r},max:{x:o.bounds.max.x+n,y:o.bounds.max.y+s,z:r+a}}}}Hs(t){if(this.Ms.has(t))return{Rn:t,jn:[],bounds:{min:{x:0,y:0},max:{x:0,y:0}}}
736
- const e=`${this.As}_${t}`,i=this.ks.get(e)
737
+ return`${this.Ms}_${r}_${Math.round(1e3*e)/1e3}_${i}`}Xs(t,e,i,n,s,r,o,a){return{nr:t.Js,sr:t.sr,Hs:e,rr:i,bounds:{min:{x:o.bounds.min.x+n,y:o.bounds.min.y+s,z:r},max:{x:o.bounds.max.x+n,y:o.bounds.max.y+s,z:r+a}}}}Vs(t){if(this.Is.has(t))return{jn:t,Hn:[],bounds:{min:{x:0,y:0},max:{x:0,y:0}}}
738
+ const e=`${this.Ms}_${t}`,i=this.Ds.get(e)
737
739
  if(i)return i
738
- this.Cs.fs(this.us),this.us.reset(),this.us.Pn(t,0),this.Xt.module.exports.rr(this.Xt.font.ar,t,this.Cs.Ss(),0),this.us.zn()
739
- const n=this.us.Qn()[0]||{Rn:t,jn:[],bounds:{min:{x:0,y:0},max:{x:0,y:0}}}
740
- return 0===n.jn.length&&this.Ms.add(t),this.ks.set(e,n),n}Ks(t,e,i){const n=this.tessellator.Bi(t,!0,i,0!==e)
741
- return this.hr(n,e)}hr(t,e){const i=this.Gs.Vi(t,e,this.Xt.upem),n=i.vertices
740
+ this.ks.ds(this.fs),this.fs.reset(),this.fs.Wn(t,0),this.Xt.module.exports.ar(this.Xt.font.hr,t,this.ks._s(),0),this.fs.zn()
741
+ const n=this.fs.Xn()[0]||{jn:t,Hn:[],bounds:{min:{x:0,y:0},max:{x:0,y:0}}}
742
+ return 0===n.Hn.length&&this.Is.add(t),this.Ds.set(e,n),n}Qs(t,e,i){const n=this.tessellator.Bi(t,!0,i,0!==e)
743
+ return this.cr(n,e)}cr(t,e){const i=this.Os.qi(t,e,this.Xt.upem),n=i.vertices
742
744
  let s=1/0,r=1/0,o=1/0,a=-1/0,h=-1/0,c=-1/0
743
745
  for(let t=0;n.length>t;t+=3){const e=n[t],i=n[t+1],l=n[t+2]
744
- s>e&&(s=e),e>a&&(a=e),r>i&&(r=i),i>h&&(h=i),o>l&&(o=l),l>c&&(c=l)}const l=new K(s,r,o),u=new K(a,h,c)
745
- return{geometry:t,vertices:i.vertices,normals:i.normals,indices:i.indices,bounds:{min:l,max:u},Zs:1}}tr(t,e,i,n){const s=this.tessellator.process(t.jn,i,n,0!==e)
746
- return this.hr(s,e)}Xs(t,e){const i=e.min,n=e.max,s=t.min,r=t.max
747
- i.x>s.x&&(i.x=s.x),i.y>s.y&&(i.y=s.y),i.z>s.z&&(i.z=s.z),r.x>n.x&&(n.x=r.x),r.y>n.y&&(n.y=r.y),r.z>n.z&&(n.z=r.z)}cr(){return this.cache.getStats()}clearCache(){this.cache.clear(),this.Bs.clear(),this.Ds.clear(),this.ks.clear()}}class vt{constructor(t,e){this.lr=new Map,this.Xt=t,this.ur=e}dr(t,e,i,n,s,r,o){try{const r=[]
748
- return t.forEach((t,o)=>{const a=this.yr(t,o,e,i,n,s)
749
- r.push(a)}),r}finally{}}yr(e,i,n,s,r,o){const a=this.Xt.hb.createBuffer()
750
- "rtl"===o&&a.pr("rtl"),a.Yt(e.text),a.Jt()
746
+ s>e&&(s=e),e>a&&(a=e),r>i&&(r=i),i>h&&(h=i),o>l&&(o=l),l>c&&(c=l)}const l=new X(s,r,o),u=new X(a,h,c)
747
+ return{geometry:t,vertices:i.vertices,normals:i.normals,indices:i.indices,bounds:{min:l,max:u},tr:1}}er(t,e,i,n){const s=this.tessellator.process(t.Hn,i,n,0!==e)
748
+ return this.cr(s,e)}Zs(t,e){const i=e.min,n=e.max,s=t.min,r=t.max
749
+ i.x>s.x&&(i.x=s.x),i.y>s.y&&(i.y=s.y),i.z>s.z&&(i.z=s.z),r.x>n.x&&(n.x=r.x),r.y>n.y&&(n.y=r.y),r.z>n.z&&(n.z=r.z)}lr(){return this.cache.getStats()}clearCache(){this.cache.clear(),this.Bs.clear(),this.Ns.clear(),this.Ds.clear()}}class xt{constructor(t,e){this.ur=new Map,this.Xt=t,this.dr=e}yr(t,e,i,n,s,r,o){try{const r=[]
750
+ return t.forEach((t,o)=>{const a=this.pr(t,o,e,i,n,s)
751
+ r.push(a)}),r}finally{}}pr(e,i,n,s,r,o){const a=this.Xt.hb.createBuffer()
752
+ "rtl"===o&&a.wr("rtl"),a.Yt(e.text),a.Jt()
751
753
  const h=t(this.Xt.Kt)
752
754
  this.Xt.hb.shape(this.Xt.font,a,h)
753
755
  const c=a.json(this.Xt.font)
754
756
  a.destroy()
755
757
  const l=[]
756
758
  let u=[],f=[],d=0,y=0,p=e.Pt,w=-i*n
757
- const g=s*this.Xt.upem,v=this.wr(e,r,s),m=this.gr(e,r),x=e.text,b=x.length,S=c.length
759
+ const g=s*this.Xt.upem,v=this.gr(e,r,s),m=this.vr(e,r),x=e.text,b=x.length,S=c.length
758
760
  let _
759
761
  for(let t=0;S>t;t++){const n=c[t],s=n.Qt,r=x[s],o=r.charCodeAt(0),a=32===o||9===o||10===o||13===o
760
- n.Ys=e.Wt&&s===b-1&&"-"===r?e.Nt:e.$t+s,n.nr=i,a&&u.length>0&&(l.push({text:f.join(""),glyphs:u,position:new K(d,y,0)}),u=[],f=[])
762
+ n.Js=e.zt&&s===b-1&&"-"===r?e.$t:e.Ut+s,n.sr=i,a&&u.length>0&&(l.push({text:f.join(""),glyphs:u,position:new X(d,y,0)}),u=[],f=[])
761
763
  const h=p+n.dx,E=w+n.dy
762
764
  if(a||(0===u.length&&(d=h,y=E),n.x=h-d,n.y=E-y,u.push(n),f.push(r)),p+=n.ax,w+=n.ay,0!==g&&S-1>t&&(p+=g),a&&(p+=v),0!==m&&S-1>t&&!a){const e=x[c[t+1].Qt],i=void 0!==_?_:A.et(r)
763
765
  if(_=!!e&&A.et(e),i&&_){let t=!0
764
- A.it(e)&&(t=!1),A.nt(r)&&(t=!1),A.st(r)&&A.st(e)&&(t=!1),t&&(p+=m)}}else _=void 0}return u.length>0&&l.push({text:f.join(""),glyphs:u,position:new K(d,y,0)}),l}wr(t,e,i){let n=0
765
- if(void 0!==t.qt&&"justify"===e&&!t.zt){let e=this.lr.get(i)
766
- void 0===e&&(e=I.measureTextWidth(this.Xt," ",i),this.lr.set(i,e)),t.qt>0?n=t.qt*e*.5:0>t.qt&&(n=t.qt*e*d)}return n}gr(t,e){if(void 0===t.qt||"justify"!==e||t.zt)return 0
767
- return t.qt>0||0>t.qt?.04*t.qt*this.Xt.upem:0}clearCache(){this.ur.clearCache()}cr(){return this.ur.cr()}}var mt={exports:{}},xt=o(Object.freeze({__proto__:null,default:{},h(...t){const e="undefined"!=typeof globalThis?globalThis.require:void 0
766
+ A.it(e)&&(t=!1),A.nt(r)&&(t=!1),A.st(r)&&A.st(e)&&(t=!1),t&&(p+=m)}}else _=void 0}return u.length>0&&l.push({text:f.join(""),glyphs:u,position:new X(d,y,0)}),l}gr(t,e,i){let n=0
767
+ if(void 0!==t.qt&&"justify"===e&&!t.Wt){let e=this.ur.get(i)
768
+ void 0===e&&(e=I.measureTextWidth(this.Xt," ",i),this.ur.set(i,e)),t.qt>0?n=t.qt*e*.5:0>t.qt&&(n=t.qt*e*d)}return n}vr(t,e){if(void 0===t.qt||"justify"!==e||t.Wt)return 0
769
+ return t.qt>0||0>t.qt?.04*t.qt*this.Xt.upem:0}clearCache(){this.dr.clearCache()}lr(){return this.dr.lr()}}var bt={exports:{}},St=o(Object.freeze({__proto__:null,default:{},h(...t){const e="undefined"!=typeof globalThis?globalThis.require:void 0
768
770
  if("function"==typeof e)return e("fs").h(...t)
769
771
  throw Error("fs not available in this environment")}}))
770
772
  !(function(t){var e,i=(e="undefined"!=typeof document?document.currentScript?.src:void 0,async function(t={}){function i(){var t=g.buffer
771
- s.HEAP8=new Int8Array(t),s.HEAPU8=v=new Uint8Array(t),s.HEAP32=new Int32Array(t),s.HEAPU32=new Uint32Array(t),s.HEAPF32=new Float32Array(t),new BigInt64Array(t),new BigUint64Array(t)}function n(t){s.vr?.(t),x(t="Aborted("+t+")"),b=!0,t+=". Build with -sASSERTIONS for more info."
773
+ s.HEAP8=new Int8Array(t),s.HEAPU8=v=new Uint8Array(t),s.HEAP32=new Int32Array(t),s.HEAPU32=new Uint32Array(t),s.HEAPF32=new Float32Array(t),new BigInt64Array(t),new BigUint64Array(t)}function n(t){s.mr?.(t),x(t="Aborted("+t+")"),b=!0,t+=". Build with -sASSERTIONS for more info."
772
774
  var e=new WebAssembly.RuntimeError(t)
773
775
  throw w?.(e),e}var s=t,r="object"==typeof window,o="undefined"!=typeof WorkerGlobalScope,a="object"==typeof process&&process.versions?.node&&"renderer"!=process.type,h=(t,e)=>{throw e}
774
776
  "undefined"!=typeof __filename?e=__filename:o&&(e=self.location.href)
775
777
  var c,l,u=""
776
- if(a){var f=xt
778
+ if(a){var f=St
777
779
  u="undefined"!=typeof __dirname?__dirname+"/":"",l=t=>(t=S(t)?new URL(t):t,f.h(t)),c=async(t,e=!0)=>(t=S(t)?new URL(t):t,f.h(t,e?void 0:"utf8")),process.argv.length>1&&process.argv[1].replace(/\\/g,"/"),process.argv.slice(2),h=(t,e)=>{throw process.exitCode=t,e}}else if(r||o){try{u=new URL(".",e).href}catch{}o&&(l=t=>{var e=new XMLHttpRequest
778
780
  return e.open("GET",t,!1),e.responseType="arraybuffer",e.send(null),new Uint8Array(e.response)}),c=async t=>{if(S(t))return new Promise((e,i)=>{var n=new XMLHttpRequest
779
781
  n.open("GET",t,!0),n.responseType="arraybuffer",n.onload=()=>{200==n.status||0==n.status&&n.response?e(n.response):i(n.status)},n.onerror=i,n.send(null)})
@@ -782,197 +784,197 @@ if(e.ok)return e.arrayBuffer()
782
784
  throw Error(e.status+" : "+e.url)}}console.log.bind(console)
783
785
  var d,y,p,w,g,v,m,x=console.error.bind(console),b=!1,S=t=>t.startsWith("file://"),_=!1,E=0,T=null
784
786
  class A{name="ExitStatus"
785
- constructor(t){this.message=`Program terminated with exit(${t})`,this.status=t}}var M,I,F,L=t=>{for(;t.length>0;)t.shift()(s)},G=[],O=t=>G.push(t),C=[],k=t=>C.push(t),B=!0,D=0,U={},$=t=>{if(t instanceof A||"unwind"==t)return y
786
- h(1,t)},N=()=>B||D>0,P=t=>{y=t,N()||(s.mr?.(t),b=!0),h(t,new A(t))},z=(t,e)=>Math.ceil(t/e)*e,W=t=>{var e=(t-g.buffer.byteLength+65535)/65536|0
787
+ constructor(t){this.message=`Program terminated with exit(${t})`,this.status=t}}var M,I,F,L=t=>{for(;t.length>0;)t.shift()(s)},G=[],O=t=>G.push(t),C=[],k=t=>C.push(t),D=!0,B=0,N={},U=t=>{if(t instanceof A||"unwind"==t)return y
788
+ h(1,t)},$=()=>D||B>0,P=t=>{y=t,$()||(s.br?.(t),b=!0),h(t,new A(t))},W=(t,e)=>Math.ceil(t/e)*e,z=t=>{var e=(t-g.buffer.byteLength+65535)/65536|0
787
789
  try{return g.grow(e),i(),1}catch(t){}},R=t=>{const e=t.length
788
- return[e%128|128,e>>7,...t]},j={oi:127,hi:127,li:126,f:125,d:124,e:111},H=t=>R(Array.from(t,t=>j[t])),V=t=>M.get(t),q=[],Y=(t,e)=>M.set(t,e)
789
- s.br&&(B=s.br),s.Sr&&(x=s.Sr),s._r&&(d=s._r),s.Er=g,s.Tr=K,s.ys=(t,e)=>{var i=(t=>(I||(I=new WeakMap,((t,e)=>{if(I)for(var i=0;0+e>i;i++){var n=V(i)
790
+ return[e%128|128,e>>7,...t]},j={ai:127,ci:127,ui:126,f:125,d:124,e:111},H=t=>R(Array.from(t,t=>j[t])),V=t=>M.get(t),q=[],Y=(t,e)=>M.set(t,e)
791
+ s.Sr&&(D=s.Sr),s._r&&(x=s._r),s.Er&&(d=s.Er),s.Tr=g,s.Ar=K,s.ps=(t,e)=>{var i=(t=>(I||(I=new WeakMap,((t,e)=>{if(I)for(var i=0;0+e>i;i++){var n=V(i)
790
792
  n&&I.set(n,i)}})(0,M.length)),I.get(t)||0))(t)
791
793
  if(i)return i
792
794
  var n=q.length?q.pop():M.grow(1)
793
795
  try{Y(n,t)}catch(i){if(!(i instanceof TypeError))throw i
794
796
  var s=((t,e)=>{var i=Uint8Array.of(0,97,115,109,1,0,0,0,1,...R([1,96,...H(e.slice(1)),...H("v"===e[0]?"":e[0])]),2,7,1,1,101,1,102,0,0,7,5,1,1,102,0,0),n=new WebAssembly.Module(i)
795
797
  return new WebAssembly.Instance(n,{e:{f:t}}).exports.f})(t,e)
796
- Y(n,s)}return I.set(t,n),n},s.Es=t=>{I.delete(V(t)),Y(t,null),q.push(t)}
797
- var J={Ar:()=>n(""),Mr(){B=!1,D=0},Ir(t,e){if(U[t]&&(clearTimeout(U[t].id),delete U[t]),!e)return 0
798
- var i=setTimeout(()=>{delete U[t],(t=>{if(!b)try{t(),(()=>{if(!N())try{y=t=y,P(t)}catch(t){$(t)}var t})()}catch(t){$(t)}})(()=>F(t,performance.now()))},e)
799
- return U[t]={id:i,Fr:e},0},Lr(t){var e=v.length,i=2147483648
798
+ Y(n,s)}return I.set(t,n),n},s.Ts=t=>{I.delete(V(t)),Y(t,null),q.push(t)}
799
+ var J={Mr:()=>n(""),Ir(){D=!1,B=0},Fr(t,e){if(N[t]&&(clearTimeout(N[t].id),delete N[t]),!e)return 0
800
+ var i=setTimeout(()=>{delete N[t],(t=>{if(!b)try{t(),(()=>{if(!$())try{y=t=y,P(t)}catch(t){U(t)}var t})()}catch(t){U(t)}})(()=>F(t,performance.now()))},e)
801
+ return N[t]={id:i,Lr:e},0},Gr(t){var e=v.length,i=2147483648
800
802
  if((t>>>=0)>i)return!1
801
- for(var n=1;4>=n;n*=2){var s=e*(1+.2/n),r=Math.min(i,z(Math.max(t,s=Math.min(s,t+100663296)),65536))
802
- if(W(r))return!0}return!1},Gr:P},K=await(async()=>{function t(t){return s.Tr=K=t.exports,s.Er=g=K.memory,i(),M=K.Or,(t=>{s.Cr=t.kr,s.Br=t.Dr,s.Ur=t.$r,s.Nr=t.Pr,s.zr=t.Wr,s.Rr=t.jr,s.Hr=t.Vr,s.qr=t.Yr,s.Jr=t.Kr,s.Qr=t.Xr,s.Zr=t.eo,s.io=t.no,s.so=t.ro,s.oo=t.ao,s.ho=t.co,s.lo=t.uo,s.fo=t.do,s.yo=t.po,s.wo=t.vo,s.mo=t.xo,s.bo=t.So,s._o=t.Eo,s.To=t.Ao,s.Mo=t.Io,s.Fo=t.Lo,s.Go=t.Oo,s.Co=t.ko,s.Bo=t.Do,s.Uo=t.ws,s.$o=t.gs,s.No=t.vs,s.Po=t.xs,s.zo=t.bs,s.Wo=t.ps,s.Ro=t._s,s.jo=t.Ho,s.Vo=t.qo,s.Yo=t.Jo,s.Ko=t.Qo,s.Xo=t.Zo,s.ta=t.rr,s.ea=t.ia,s.na=t.sa,s.ra=t.oa,s.aa=t.ha,s.ca=t.la,s.ua=t.fa,s.da=t.ya,s.pa=t.wa,s.ga=t.va,s.ma=t.xa,s.ba=t.Sa,F=t._a})(K),(()=>{if(E--,s.Ea?.(E),0==E&&T){var t=T
803
- T=null,t()}})(),K}E++,s.Ea?.(E)
804
- var e,r={l:J,Ta:J}
805
- return s.Aa?new Promise(e=>{s.Aa(r,i=>{e(t(i))})}):(m??=(e="hb.wasm",s.Ma?s.Ma(e,u):u+e),t((await(async function(t,e,i){if(!t&&!S(e)&&!a)try{var s=fetch(e,{credentials:"same-origin"})
803
+ for(var n=1;4>=n;n*=2){var s=e*(1+.2/n),r=Math.min(i,W(Math.max(t,s=Math.min(s,t+100663296)),65536))
804
+ if(z(r))return!0}return!1},Or:P},K=await(async()=>{function t(t){return s.Ar=K=t.exports,s.Tr=g=K.memory,i(),M=K.Cr,(t=>{s.kr=t.Dr,s.Br=t.Nr,s.Ur=t.$r,s.Pr=t.Wr,s.zr=t.Rr,s.jr=t.Hr,s.Vr=t.qr,s.Yr=t.Jr,s.Kr=t.Qr,s.Xr=t.Zr,s.eo=t.io,s.no=t.so,s.ro=t.oo,s.ao=t.ho,s.co=t.lo,s.uo=t.fo,s.do=t.yo,s.po=t.wo,s.vo=t.mo,s.xo=t.bo,s.So=t._o,s.Eo=t.To,s.Ao=t.Mo,s.Io=t.Fo,s.Lo=t.Go,s.Oo=t.Co,s.ko=t.Do,s.Bo=t.No,s.Uo=t.gs,s.$o=t.vs,s.Po=t.xs,s.Wo=t.bs,s.zo=t.Ss,s.Ro=t.ws,s.jo=t.Es,s.Ho=t.Vo,s.qo=t.Yo,s.Jo=t.Ko,s.Qo=t.Xo,s.Zo=t.ta,s.ea=t.ar,s.ia=t.na,s.sa=t.ra,s.oa=t.aa,s.ha=t.ca,s.la=t.ua,s.fa=t.da,s.ya=t.pa,s.wa=t.ga,s.va=t.ma,s.xa=t.ba,s.Sa=t._a,F=t.Ea})(K),(()=>{if(E--,s.Ta?.(E),0==E&&T){var t=T
805
+ T=null,t()}})(),K}E++,s.Ta?.(E)
806
+ var e,r={l:J,Aa:J}
807
+ return s.Ma?new Promise(e=>{s.Ma(r,i=>{e(t(i))})}):(m??=(e="hb.wasm",s.Ia?s.Ia(e,u):u+e),t((await(async function(t,e,i){if(!t&&!S(e)&&!a)try{var s=fetch(e,{credentials:"same-origin"})
806
808
  return await WebAssembly.instantiateStreaming(s,i)}catch(t){x("wasm streaming compile failed: "+t),x("falling back to ArrayBuffer instantiation")}return(async(t,e)=>{try{var i=await(async t=>{if(!d)try{var e=await c(t)
807
809
  return new Uint8Array(e)}catch{}return(t=>{if(t==m&&d)return new Uint8Array(d)
808
810
  if(l)return l(t)
809
811
  throw"both async and sync fetching of the wasm failed"})(t)})(t)
810
- return await WebAssembly.instantiate(i,e)}catch(t){x("failed to asynchronously prepare wasm: "+t),n(t)}})(e,i)})(d,m,r)).Ia))})()
811
- return(()=>{if(s.Fa)for("function"==typeof s.Fa&&(s.Fa=[s.Fa]);s.Fa.length>0;)s.Fa.shift()()})(),(function t(){function e(){s.La=!0,b||(_=!0,K.Ga(),p?.(s),s.Oa?.(),(()=>{if(s.Ca)for("function"==typeof s.Ca&&(s.Ca=[s.Ca]);s.Ca.length;)O(s.Ca.shift())
812
- L(G)})())}E>0?T=t:((()=>{if(s.ka)for("function"==typeof s.ka&&(s.ka=[s.ka]);s.ka.length;)k(s.ka.shift())
812
+ return await WebAssembly.instantiate(i,e)}catch(t){x("failed to asynchronously prepare wasm: "+t),n(t)}})(e,i)})(d,m,r)).Fa))})()
813
+ return(()=>{if(s.La)for("function"==typeof s.La&&(s.La=[s.La]);s.La.length>0;)s.La.shift()()})(),(function t(){function e(){s.Ga=!0,b||(_=!0,K.Oa(),p?.(s),s.Ca?.(),(()=>{if(s.ka)for("function"==typeof s.ka&&(s.ka=[s.ka]);s.ka.length;)O(s.ka.shift())
814
+ L(G)})())}E>0?T=t:((()=>{if(s.Da)for("function"==typeof s.Da&&(s.Da=[s.Da]);s.Da.length;)k(s.Da.shift())
813
815
  L(C)})(),E>0?T=t:s.setStatus?(s.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>s.setStatus(""),1),e()},1)):e())})(),_?s:new Promise((t,e)=>{p=t,w=e})})
814
- t.exports=i,t.exports.default=i})(mt)
815
- var bt=r(mt.exports),St={exports:{}}
816
- try{St.exports=t=>{function e(t){return(255&t.charCodeAt(0))<<24|(255&t.charCodeAt(1))<<16|(255&t.charCodeAt(2))<<8|255&t.charCodeAt(3)}function i(e){var i=s.ko(e.length+1)
816
+ t.exports=i,t.exports.default=i})(bt)
817
+ var _t=r(bt.exports),Et={exports:{}}
818
+ try{Et.exports=t=>{function e(t){return(255&t.charCodeAt(0))<<24|(255&t.charCodeAt(1))<<16|(255&t.charCodeAt(2))<<8|255&t.charCodeAt(3)}function i(e){var i=s.Do(e.length+1)
817
819
  for(let n=0;e.length>n;++n){const s=e.charCodeAt(n)
818
820
  if(s>127)throw Error("Expected ASCII text")
819
- t.HEAPU8[i+n]=s}return t.HEAPU8[i+e.length]=0,{ar:i,length:e.length,Do(){s.Do(i)}}}function n(t,e,n){var r=0,o=0
820
- n&&(n=n.split(","),r=s.ko(16*n.length),n.forEach(t=>{var e=i(t)
821
- s.Oo(e.ar,-1,r+16*o)&&o++,e.Do()})),s.Sa(t.ar,e.ar,r,o),r&&s.Do(r)}var s=t.Tr,r=new TextDecoder("utf8")
822
- let o=t.ys,a=t.Es
823
- var h=o(t=>{s.Do(t)},"vi"),c=e("JSON"),l="",u=s.ko(256)
824
- return{Pe(e){var i=s.ko(e.byteLength)
821
+ t.HEAPU8[i+n]=s}return t.HEAPU8[i+e.length]=0,{hr:i,length:e.length,No(){s.No(i)}}}function n(t,e,n){var r=0,o=0
822
+ n&&(n=n.split(","),r=s.Do(16*n.length),n.forEach(t=>{var e=i(t)
823
+ s.Co(e.hr,-1,r+16*o)&&o++,e.No()})),s._a(t.hr,e.hr,r,o),r&&s.No(r)}var s=t.Ar,r=new TextDecoder("utf8")
824
+ let o=t.ps,a=t.Ts
825
+ var h=o(t=>{s.No(t)},"vi"),c=e("JSON"),l="",u=s.Do(256)
826
+ return{We(e){var i=s.Do(e.byteLength)
825
827
  t.HEAPU8.set(new Uint8Array(e),i)
826
- var n=s.kr(i,e.byteLength,2,i,h)
827
- return{ar:n,destroy(){s.Dr(n)}}},ze(i,n){var r=s.Ho(i.ar,n)
828
- const o=s.Qo(r)
829
- return{ar:r,upem:o,Ba(i){var n=s.Jo(r,e(i)),o=s.$r(n)
830
- if(o){var a=s.Pr(n,null)
831
- return t.HEAPU8.subarray(a,a+o)}},je(){var e=s.ko(2048),i=s.ko(4)
832
- t.HEAPU32[i/4]=64,s.wa(r,0,i,e)
828
+ var n=s.Dr(i,e.byteLength,2,i,h)
829
+ return{hr:n,destroy(){s.Nr(n)}}},ze(i,n){var r=s.Vo(i.hr,n)
830
+ const o=s.Xo(r)
831
+ return{hr:r,upem:o,Ba(i){var n=s.Ko(r,e(i)),o=s.$r(n)
832
+ if(o){var a=s.Wr(n,null)
833
+ return t.HEAPU8.subarray(a,a+o)}},He(){var e=s.Do(2048),i=s.Do(4)
834
+ t.HEAPU32[i/4]=64,s.ga(r,0,i,e)
833
835
  var n={}
834
836
  return Array.from({length:t.HEAPU32[i/4]}).forEach((i,s)=>{var r
835
- n[(r=t.HEAPU32[e/4+8*s+1],""+String.fromCharCode(r>>24&255)+String.fromCharCode(r>>16&255)+String.fromCharCode(r>>8&255)+String.fromCharCode(255&r))]={min:t.HEAPF32[e/4+8*s+4],default:t.HEAPF32[e/4+8*s+5],max:t.HEAPF32[e/4+8*s+6]}}),s.Do(i),s.Do(e),n},Da(){var e=s.fa()
836
- s.Zo(r,e)
837
- var i=(e=>{const i=s.va(e),n=s.ko(i<<2),r=n>>2,o=t.HEAPU32.subarray(r,r+i)
838
- return t.HEAPU32.set(o,r),s.xa(e,-1,n,i),o})(e)
839
- return s.ya(e),i},destroy(){s.qo(r)}}},We(i){function n(t){return c||(f=o((t,e,i,n,s)=>{l+=`M${n},${s}`},"viiiffi"),d=o((t,e,i,n,s)=>{l+=`L${n},${s}`},"viiiffi"),y=o((t,e,i,n,s,r,o,a,h)=>{l+=`C${n},${s} ${r},${o} ${a},${h}`},"viiiffffffi"),p=o((t,e,i,n,s,r,o)=>{l+=`Q${n},${s} ${r},${o}`},"viiiffffi"),w=o(()=>{l+="Z"},"viiii"),c=s.ps(),s.ws(c,f,0,0),s.gs(c,d,0,0),s.xs(c,y,0,0),s.vs(c,p,0,0),s.bs(c,w,0,0)),l="",s.rr(h,t,c,0),l}var h=s.sa(i.ar),c=null,f=null,d=null,y=null,p=null,w=null
840
- return{ar:h,Ua(e){s.ia(h,e,u,256)
837
+ n[(r=t.HEAPU32[e/4+8*s+1],""+String.fromCharCode(r>>24&255)+String.fromCharCode(r>>16&255)+String.fromCharCode(r>>8&255)+String.fromCharCode(255&r))]={min:t.HEAPF32[e/4+8*s+4],default:t.HEAPF32[e/4+8*s+5],max:t.HEAPF32[e/4+8*s+6]}}),s.No(i),s.No(e),n},Na(){var e=s.da()
838
+ s.ta(r,e)
839
+ var i=(e=>{const i=s.ma(e),n=s.Do(i<<2),r=n>>2,o=t.HEAPU32.subarray(r,r+i)
840
+ return t.HEAPU32.set(o,r),s.ba(e,-1,n,i),o})(e)
841
+ return s.pa(e),i},destroy(){s.Yo(r)}}},Re(i){function n(t){return c||(f=o((t,e,i,n,s)=>{l+=`M${n},${s}`},"viiiffi"),d=o((t,e,i,n,s)=>{l+=`L${n},${s}`},"viiiffi"),y=o((t,e,i,n,s,r,o,a,h)=>{l+=`C${n},${s} ${r},${o} ${a},${h}`},"viiiffffffi"),p=o((t,e,i,n,s,r,o)=>{l+=`Q${n},${s} ${r},${o}`},"viiiffffi"),w=o(()=>{l+="Z"},"viiii"),c=s.ws(),s.gs(c,f,0,0),s.vs(c,d,0,0),s.bs(c,y,0,0),s.xs(c,p,0,0),s.Ss(c,w,0,0)),l="",s.ar(h,t,c,0),l}var h=s.ra(i.hr),c=null,f=null,d=null,y=null,p=null,w=null
842
+ return{hr:h,Ua(e){s.na(h,e,u,256)
841
843
  var i=t.HEAPU8.subarray(u,u+256)
842
- return r.decode(i.slice(0,i.indexOf(0)))},$a:n,Na:t=>n(t).replace(/([MLQCZ])/g,"|$1 ").split("|").filter(t=>t.length).map(t=>{var e=t.split(/[ ,]/g)
843
- return{type:e[0],values:e.slice(1).filter(t=>t.length).map(t=>+t)}}),setScale(t,e){s.la(h,t,e)},Re(i){var n=Object.entries(i),r=s.ko(8*n.length)
844
- n.forEach((i,n)=>{t.HEAPU32[r/4+2*n+0]=e(i[0]),t.HEAPF32[r/4+2*n+1]=i[1]}),s.oa(h,r,n.length),s.Do(r)},destroy(){s.ha(h),c&&(s._s(c),c=null,a(f),a(d),a(y),a(p),a(w))}}},createBuffer(){var e=s.jr()
845
- return{ar:e,Yt(i){const n=(e=>{const i=s.ko(2*e.length),n=new Uint16Array(t.Er.buffer,i,e.length)
844
+ return r.decode(i.slice(0,i.indexOf(0)))},$a:n,Pa:t=>n(t).replace(/([MLQCZ])/g,"|$1 ").split("|").filter(t=>t.length).map(t=>{var e=t.split(/[ ,]/g)
845
+ return{type:e[0],values:e.slice(1).filter(t=>t.length).map(t=>+t)}}),setScale(t,e){s.ua(h,t,e)},je(i){var n=Object.entries(i),r=s.Do(8*n.length)
846
+ n.forEach((i,n)=>{t.HEAPU32[r/4+2*n+0]=e(i[0]),t.HEAPF32[r/4+2*n+1]=i[1]}),s.aa(h,r,n.length),s.No(r)},destroy(){s.ca(h),c&&(s.Es(c),c=null,a(f),a(d),a(y),a(p),a(w))}}},createBuffer(){var e=s.Hr()
847
+ return{hr:e,Yt(i){const n=(e=>{const i=s.Do(2*e.length),n=new Uint16Array(t.Tr.buffer,i,e.length)
846
848
  for(let t=0;n.length>t;++t)n[t]=e.charCodeAt(t)
847
- return{ar:i,length:n.length,Do(){s.Do(i)}}})(i)
848
- s.xo(e,n.ar,n.length,0,n.length),n.Do()},Jt:()=>s.po(e),pr(t){s.Kr(e,{Pa:4,za:5,Wa:6,Ra:7}[t]||0)},ja(t){var i=0
849
- t.forEach(t=>{i|=(t=>"BOT"==t?1:"EOT"==t?2:"PRESERVE_DEFAULT_IGNORABLES"==t?4:"REMOVE_DEFAULT_IGNORABLES"==t?8:"DO_NOT_INSERT_DOTTED_CIRCLE"==t?16:"PRODUCE_UNSAFE_TO_CONCAT"==t?64:0)(t)}),s.no(e,i)},Ha(t){var n=i(t)
850
- s.eo(e,s.Eo(n.ar,-1)),n.Do()},Va(t){var n=i(t)
851
- s.Xr(e,s.Ao(n.ar,-1)),n.Do()},qa(t){s.ro(e,t)},json(){for(var i=s.ao(e),n=[],r=s.co(e,0),o=r/4,a=s.uo(e,0)/4,h=t.HEAPU32.subarray(o,o+5*i),c=t.HEAP32.subarray(a,a+5*i),l=0;i>l;++l)n.push({g:h[5*l+0],Qt:h[5*l+2],ax:c[5*l+0],ay:c[5*l+1],dx:c[5*l+2],dy:c[5*l+3],flags:s.do(r+20*l)})
852
- return n},destroy(){s.Vr(e)}}},shape:n,Ya(e,i,h,l,u){var f=[],d=0,y=!1,p=1048576,w=s.ko(p),g=o((e,i,n)=>{var o=r.decode(t.HEAPU8.subarray(n,t.HEAPU8.indexOf(0,n)))
853
- return o.startsWith("start table GSUB")?d=1:o.startsWith("start table GPOS")&&(d=2),d!=u&&(y=!1),0!=u&&d==u&&o.startsWith("end lookup "+l)&&(y=!0),y?0:(s.Wr(e,0,s.ao(e),w,p,0,i,c,4),f.push({ui:o,pi:JSON.parse(r.decode(t.HEAPU8.subarray(w,t.HEAPU8.indexOf(0,w)))),glyphs:2==s.Yr(e)}),1)},"iiiii")
854
- return s.So(i.ar,g,0,0),n(e,i,h),s.Do(w),a(g),f},version(){var e=s.ko(12)
855
- s.Io(e,e+4,e+8)
856
- var i={Ja:t.HEAPU32[e/4],Ka:t.HEAPU32[(e+4)/4],Qa:t.HEAPU32[(e+8)/4]}
857
- return s.Do(e),i},Xa(){var e=s.Lo()
858
- return r.decode(t.HEAPU8.subarray(e,t.HEAPU8.indexOf(0,e)))}}}}catch(t){}var _t=r(St.exports)
859
- let Et=null,Tt=null,At=null
860
- const Mt={Za(t){Tt=t,At=null,Et=null},th(t){At=t,Tt=null,Et=null},eh:async()=>Et||(Et=new Promise(async(t,e)=>{try{const e={}
861
- if(At)e._r=At
862
- else{if(!Tt)throw Error("HarfBuzz WASM path or buffer must be set before initialization.")
863
- e._r=await a(Tt)}const i=await bt(e)
864
- t({hb:_t(i),module:{ys:i.ys,exports:i.Tr,Es:i.Es}})}catch(t){e(Error("Failed to initialize HarfBuzz: "+t))}}),Et)}
865
- class It{constructor(t,e){this.text=t,this.ih=new Map,e.forEach(t=>{const e=this.ih.get(t.ir)||[]
866
- e.push(t),this.ih.set(t.ir,e)})}nh(t){const e=[]
867
- return t.sh&&e.push(...this.rh(t.sh)),t.oh&&e.push(...this.ah(t.oh)),e}rh(t){const e=[]
849
+ return{hr:i,length:n.length,No(){s.No(i)}}})(i)
850
+ s.bo(e,n.hr,n.length,0,n.length),n.No()},Jt:()=>s.wo(e),wr(t){s.Qr(e,{Wa:4,za:5,Ra:6,ja:7}[t]||0)},Ha(t){var i=0
851
+ t.forEach(t=>{i|=(t=>"BOT"==t?1:"EOT"==t?2:"PRESERVE_DEFAULT_IGNORABLES"==t?4:"REMOVE_DEFAULT_IGNORABLES"==t?8:"DO_NOT_INSERT_DOTTED_CIRCLE"==t?16:"PRODUCE_UNSAFE_TO_CONCAT"==t?64:0)(t)}),s.so(e,i)},Va(t){var n=i(t)
852
+ s.io(e,s.To(n.hr,-1)),n.No()},qa(t){var n=i(t)
853
+ s.Zr(e,s.Mo(n.hr,-1)),n.No()},Ya(t){s.oo(e,t)},json(){for(var i=s.ho(e),n=[],r=s.lo(e,0),o=r/4,a=s.fo(e,0)/4,h=t.HEAPU32.subarray(o,o+5*i),c=t.HEAP32.subarray(a,a+5*i),l=0;i>l;++l)n.push({g:h[5*l+0],Qt:h[5*l+2],ax:c[5*l+0],ay:c[5*l+1],dx:c[5*l+2],dy:c[5*l+3],flags:s.yo(r+20*l)})
854
+ return n},destroy(){s.qr(e)}}},shape:n,Ja(e,i,h,l,u){var f=[],d=0,y=!1,p=1048576,w=s.Do(p),g=o((e,i,n)=>{var o=r.decode(t.HEAPU8.subarray(n,t.HEAPU8.indexOf(0,n)))
855
+ return o.startsWith("start table GSUB")?d=1:o.startsWith("start table GPOS")&&(d=2),d!=u&&(y=!1),0!=u&&d==u&&o.startsWith("end lookup "+l)&&(y=!0),y?0:(s.Rr(e,0,s.ho(e),w,p,0,i,c,4),f.push({fi:o,wi:JSON.parse(r.decode(t.HEAPU8.subarray(w,t.HEAPU8.indexOf(0,w)))),glyphs:2==s.Jr(e)}),1)},"iiiii")
856
+ return s._o(i.hr,g,0,0),n(e,i,h),s.No(w),a(g),f},version(){var e=s.Do(12)
857
+ s.Fo(e,e+4,e+8)
858
+ var i={Ka:t.HEAPU32[e/4],Qa:t.HEAPU32[(e+4)/4],Xa:t.HEAPU32[(e+8)/4]}
859
+ return s.No(e),i},Za(){var e=s.Go()
860
+ return r.decode(t.HEAPU8.subarray(e,t.HEAPU8.indexOf(0,e)))}}}}catch(t){}var Tt=r(Et.exports)
861
+ let At=null,Mt=null,It=null
862
+ const Ft={th(t){Mt=t,It=null,At=null},eh(t){It=t,Mt=null,At=null},ih:async()=>At||(At=new Promise(async(t,e)=>{try{const e={}
863
+ if(It)e.Er=It
864
+ else{if(!Mt)throw Error("HarfBuzz WASM path or buffer must be set before initialization.")
865
+ e.Er=await a(Mt)}const i=await _t(e)
866
+ t({hb:Tt(i),module:{ps:i.ps,exports:i.Ar,Ts:i.Ts}})}catch(t){e(Error("Failed to initialize HarfBuzz: "+t))}}),At)}
867
+ class Lt{constructor(t,e){this.text=t,this.nh=new Map,e.forEach(t=>{const e=this.nh.get(t.nr)||[]
868
+ e.push(t),this.nh.set(t.nr,e)})}sh(t){const e=[]
869
+ return t.rh&&e.push(...this.oh(t.rh)),t.ah&&e.push(...this.hh(t.ah)),e}oh(t){const e=[]
868
870
  for(const i of t){let t=0
869
- for(;-1!==(t=this.text.indexOf(i,t));)e.push(this.createTextRange(t,t+i.length,i)),t+=i.length}return e}ah(t){return t.map(t=>{const e=this.text.slice(t.start,t.end)
871
+ for(;-1!==(t=this.text.indexOf(i,t));)e.push(this.createTextRange(t,t+i.length,i)),t+=i.length}return e}hh(t){return t.map(t=>{const e=this.text.slice(t.start,t.end)
870
872
  return this.createTextRange(t.start,t.end,e)})}createTextRange(t,e,i){const n=[],s=new Map
871
- for(let i=t;e>i;i++){const t=this.ih.get(i)
873
+ for(let i=t;e>i;i++){const t=this.nh.get(i)
872
874
  if(t)for(const e of t){n.push(e)
873
- const t=s.get(e.nr)||[]
874
- t.push(e),s.set(e.nr,t)}}return{start:t,end:e,hh:i,bounds:Array.from(s.values()).map(t=>this.uh(t)),glyphs:n,fh:Array.from(s.keys()).sort((t,e)=>t-e)}}uh(t){if(0===t.length)return{min:{x:0,y:0,z:0},max:{x:0,y:0,z:0}}
875
+ const t=s.get(e.sr)||[]
876
+ t.push(e),s.set(e.sr,t)}}return{start:t,end:e,uh:i,bounds:Array.from(s.values()).map(t=>this.fh(t)),glyphs:n,dh:Array.from(s.keys()).sort((t,e)=>t-e)}}fh(t){if(0===t.length)return{min:{x:0,y:0,z:0},max:{x:0,y:0,z:0}}
875
877
  let e=1/0,i=1/0,n=1/0,s=-1/0,r=-1/0,o=-1/0
876
878
  for(const a of t)e>a.bounds.min.x&&(e=a.bounds.min.x),i>a.bounds.min.y&&(i=a.bounds.min.y),n>a.bounds.min.z&&(n=a.bounds.min.z),a.bounds.max.x>s&&(s=a.bounds.max.x),a.bounds.max.y>r&&(r=a.bounds.max.y),a.bounds.max.z>o&&(o=a.bounds.max.z)
877
- return{min:{x:e,y:i,z:n},max:{x:s,y:r,z:o}}}}const Ft=72
878
- class Lt{static{this.dh=new Map}static{this.yh=null}static{this.ph=new Map}static{this.wh=0}static{this.gh=1/0}static{this.mh=0}static xh(t){const e=Object.keys(t).sort()
879
+ return{min:{x:e,y:i,z:n},max:{x:s,y:r,z:o}}}}const Gt=72
880
+ class Ot{static{this.yh=new Map}static{this.ph=null}static{this.wh=new Map}static{this.gh=0}static{this.mh=1/0}static{this.xh=0}static bh(t){(t=>{V=t})(t)}static Sh(t){const e=Object.keys(t).sort()
879
881
  let i=""
880
882
  for(let n=0;e.length>n;n++)n>0&&(i+=","),i+=e[n]+":"+t[e[n]]
881
- return i}constructor(){this.bh="",Lt.yh||(Lt.yh=Mt.eh()),this.Sh=new V(()=>Lt.yh)}static _h(t){Mt.Za(t),Lt.yh=null}static Eh(t){Mt.th(t),Lt.yh=null}static init(){return Lt.yh||(Lt.yh=Mt.eh()),Lt.yh}static async create(t){if(!t.font)throw Error("Font is required. Specify options.font as a URL string or ArrayBuffer.")
882
- Lt.yh||(Lt.yh=Mt.eh())
883
- const e=await Lt.Th(t),i=new Lt
884
- i.Ah(e)
885
- const n=await i.Mh(t),s=async e=>{const n={...t}
883
+ return i}constructor(){this._h="",Ot.ph||(Ot.ph=Ft.ih()),this.Eh=new Y(()=>Ot.ph)}static Th(t){Ft.th(t),Ot.ph=null}static Ah(t){Ft.eh(t),Ot.ph=null}static init(){return Ot.ph||(Ot.ph=Ft.ih()),Ot.ph}static async create(t){if(!t.font)throw Error("Font is required. Specify options.font as a URL string or ArrayBuffer.")
884
+ Ot.ph||(Ot.ph=Ft.ih())
885
+ const e=await Ot.Mh(t),i=new Ot
886
+ i.Ih(e)
887
+ const n=await i.Fh(t),s=async e=>{const n={...t}
886
888
  for(const t in e){const i=e[t]
887
- void 0!==i&&(n[t]=i)}if(void 0!==e.font||void 0!==e.He||void 0!==e.Kt){const t=await Lt.Th(n)
888
- i.Ah(t),i.Ih()}return t=n,{...await i.Mh(t),getLoadedFont(){return i.getLoadedFont()},getCacheSize(){return i.getCacheSize()},clearCache(){return i.clearCache()},measureTextWidth(t,e){return i.measureTextWidth(t,e)},update:s}}
889
- return{...n,getLoadedFont(){return i.getLoadedFont()},getCacheSize(){return i.getCacheSize()},clearCache(){return i.clearCache()},measureTextWidth(t,e){return i.measureTextWidth(t,e)},update:s}}static async Th(t){let e="string"==typeof t.font?t.font:"buffer-"+Lt.Fh(t.font)
890
- t.He&&(e+="_var_"+Lt.xh(t.He)),t.Kt&&(e+="_feat_"+Lt.xh(t.Kt))
891
- let i=Lt.ph.get(e)
892
- return i||(i=await Lt.Lh(e,t.font,t.He,t.Kt)),i}static async Lh(t,e,i,n){const s=new Lt
893
- await s.Ne(e,i,n)
889
+ void 0!==i&&(n[t]=i)}if(void 0!==e.font||void 0!==e.Ve||void 0!==e.Kt){const t=await Ot.Mh(n)
890
+ i.Ih(t),i.Lh()}return t=n,{...await i.Fh(t),getLoadedFont(){return i.getLoadedFont()},getCacheSize(){return i.getCacheSize()},clearCache(){return i.clearCache()},measureTextWidth(t,e){return i.measureTextWidth(t,e)},update:s}}
891
+ return{...n,getLoadedFont(){return i.getLoadedFont()},getCacheSize(){return i.getCacheSize()},clearCache(){return i.clearCache()},measureTextWidth(t,e){return i.measureTextWidth(t,e)},update:s}}static async Mh(t){let e="string"==typeof t.font?t.font:"buffer-"+Ot.Gh(t.font)
892
+ t.Ve&&(e+="_var_"+Ot.Sh(t.Ve)),t.Kt&&(e+="_feat_"+Ot.Sh(t.Kt))
893
+ let i=Ot.wh.get(e)
894
+ return i||(i=await Ot.Oh(e,t.font,t.Ve,t.Kt)),i}static async Oh(t,e,i,n){const s=new Ot
895
+ await s.Pe(e,i,n)
894
896
  const r=s.getLoadedFont()
895
- return Lt.ph.set(t,r),Lt.Gh(r),Lt.Oh(),r}static Gh(t){Lt.wh+=t.Ke?.byteLength??0}static Ch(t){const e=Lt.ph.get(t)
896
- e&&(Lt.wh-=e.Ke?.byteLength??0,0>Lt.wh&&(Lt.wh=0))}static Oh(){if(Lt.gh!==1/0)for(;Lt.wh>Lt.gh&&Lt.ph.size>0;){const t=Lt.ph.keys().next().value
897
+ return Ot.wh.set(t,r),Ot.Ch(r),Ot.kh(),r}static Ch(t){Ot.gh+=t.Qe?.byteLength??0}static Dh(t){const e=Ot.wh.get(t)
898
+ e&&(Ot.gh-=e.Qe?.byteLength??0,0>Ot.gh&&(Ot.gh=0))}static kh(){if(Ot.mh!==1/0)for(;Ot.gh>Ot.mh&&Ot.wh.size>0;){const t=Ot.wh.keys().next().value
897
899
  if(void 0===t)break
898
- Lt.Ch(t),Lt.ph.delete(t)}}static Fh(t){if(t){const e=new Uint8Array(t)
900
+ Ot.Dh(t),Ot.wh.delete(t)}}static Gh(t){if(t){const e=new Uint8Array(t)
899
901
  let i=2166136261
900
902
  const n=Math.min(32,e.length),s=Math.floor(e.length/n)
901
903
  for(let t=0;n>t;t++)i^=e[t*s],i=Math.imul(i,16777619)
902
- return i^=e.length,i=Math.imul(i,16777619),(i>>>0).toString(36)}return"c"+ ++Lt.mh}Ah(t){this.Xt=t
903
- const e=Lt.Fh(t.Ke)
904
- this.bh="font_"+e,t.He&&(this.bh+="_var_"+Lt.xh(t.He)),t.Kt&&(this.bh+="_feat_"+Lt.xh(t.Kt))}async Ne(t,e,i){Lt.yh||(Lt.yh=Mt.eh()),await Lt.yh
904
+ return i^=e.length,i=Math.imul(i,16777619),(i>>>0).toString(36)}return"c"+ ++Ot.xh}Ih(t){this.Xt=t
905
+ const e=Ot.Gh(t.Qe)
906
+ this._h="font_"+e,t.Ve&&(this._h+="_var_"+Ot.Sh(t.Ve)),t.Kt&&(this._h+="_feat_"+Ot.Sh(t.Kt))}async Pe(t,e,i){Ot.ph||(Ot.ph=Ft.ih()),await Ot.ph
905
907
  const n="string"==typeof t?await a(t):t
906
- try{this.Xt&&this.destroy(),this.Xt=await this.Sh.Ne(n,e),i&&(this.Xt.Kt=i)
907
- const t=Lt.Fh(n)
908
- this.bh="font_"+t,e&&(this.bh+="_var_"+Lt.xh(e)),i&&(this.bh+="_feat_"+Lt.xh(i))}catch(t){throw c.error("Failed to load font:",t),t}}async Mh(t){try{if(!this.Xt)throw Error("Font not loaded. Use Text.create() with a font option.")
909
- const e=await this.kh(t)
910
- this.Bh(e),this.Dh(t=e),this.ur||(this.ur=new gt(X,this.Xt),this.ur.Ns(this.bh))
908
+ try{this.Xt&&this.destroy(),this.Xt=await this.Eh.Pe(n,e),i&&(this.Xt.Kt=i)
909
+ const t=Ot.Gh(n)
910
+ this._h="font_"+t,e&&(this._h+="_var_"+Ot.Sh(e)),i&&(this._h+="_feat_"+Ot.Sh(i))}catch(t){throw c.error("Failed to load font:",t),t}}async Fh(t){try{if(!this.Xt)throw Error("Font not loaded. Use Text.create() with a font option.")
911
+ const e=await this.Bh(t)
912
+ this.Nh(e),this.Uh(t=e),this.dr||(this.dr=new mt(tt,this.Xt),this.dr.Ps(this._h))
911
913
  const i=null!=t.curveSteps&&t.curveSteps>0
912
- this.ur.vn(t.curveSteps),this.ur.gn(i?void 0:t.curveFidelity),this.ur.ts(t.geometryOptimization),this.Xt.font.setScale(this.Xt.upem,this.Xt.upem),this.Uh||(this.Uh=new vt(this.Xt,this.ur))
913
- const n=this.$h(t),s=t.Nh??this.Xt.Ve??!1,r=this.Uh.dr(n.lines,n.Ph,n.letterSpacing,n.align,n.direction,t.color,t.text)
914
+ this.dr.mn(t.curveSteps),this.dr.vn(i?void 0:t.curveFidelity),this.dr.es(t.geometryOptimization),this.Xt.font.setScale(this.Xt.upem,this.Xt.upem),this.$h||(this.$h=new xt(this.Xt,this.dr))
915
+ const n=this.Ph(t),s=t.Wh??this.Xt.qe??!1,r=this.$h.yr(n.lines,n.zh,n.letterSpacing,n.align,n.direction,t.color,t.text)
914
916
  let o,a
915
- if(t.color&&"object"==typeof t.color&&!Array.isArray(t.color)&&(t.color.sh||t.color.oh)){if(o=new Set,t.color.sh){a=[]
916
- for(const e of Object.keys(t.color.sh)){let i=0
917
+ if(t.color&&"object"==typeof t.color&&!Array.isArray(t.color)&&(t.color.rh||t.color.ah)){if(o=new Set,t.color.rh){a=[]
918
+ for(const e of Object.keys(t.color.rh)){let i=0
917
919
  for(;-1!==(i=t.text.indexOf(e,i));){a.push({pattern:e,start:i,end:i+e.length})
918
920
  for(let t=i;i+e.length>t;t++)o.add(t)
919
- i+=e.length}}}if(t.color.oh)for(const e of t.color.oh)for(let t=e.start;e.end>t;t++)o.add(t)}const h=this.ur.zs(r,n.depth,s,this.Xt.u.de,n.zh,t.perGlyphAttributes??!1,o),c=this.Wh(h.vertices,h.normals,h.indices,h.er,h.planeBounds,t,t.text,a)
920
- if(t.perGlyphAttributes){const t=this.Rh(c.vertices.length/3,c.glyphs)
921
- c.glyphAttributes=t}return c}finally{}}async kh(t){if(!1!==t.layout?.bt&&t.layout?.width){const e=t.layout?.language||"en-us"
922
- if(!t.layout?.Et?.[e])try{if(!Lt.dh.has(e)){const n=await i(e,t.layout?.jh)
923
- Lt.dh.set(e,n)}return{...t,layout:{...t.layout,Et:{...t.layout?.Et,[e]:Lt.dh.get(e)}}}}catch(i){return c.warn(`Failed to load patterns for ${e}: ${i}`),{...t,layout:{...t.layout,bt:!1}}}}return t}Bh(t){if(!t.text)throw Error("Text content is required")
924
- const e=t.Hh??1e5
925
- if(t.text.length>e)throw Error(`Text exceeds ${e} character limit`)}Dh(t){t.He&&this.Xt&&Lt.xh(t.He)!==Lt.xh(this.Xt.He||{})&&(this.Xt.font.Re(t.He),this.Xt.He=t.He)}$h(t){if(!this.Xt)throw Error("Font not loaded. Use Text.create() with a font option")
926
- const{text:e,size:i=Ft,depth:n=0,lineHeight:s=1,letterSpacing:r=0,layout:o={}}=t,{width:a,direction:h="ltr",align:c=("rtl"===h?"right":"left"),St:d=!0,bt:y=!0,language:p="en-us",At:w=l,Mt:g=u,It:v=f,Ft:m,Et:x,Lt:b,Gt:S,Ot:_,Ct:E,kt:T,Bt:A,Dt:M}=o,I=this.Xt.upem/i
921
+ i+=e.length}}}if(t.color.ah)for(const e of t.color.ah)for(let t=e.start;e.end>t;t++)o.add(t)}const h=this.dr.zs(r,n.depth,s,this.Xt.u.de,n.Rh,t.perGlyphAttributes??!1,o),c=this.jh(h.vertices,h.normals,h.indices,h.ir,h.planeBounds,t,t.text,a)
922
+ if(t.perGlyphAttributes){const t=this.Hh(c.vertices.length/3,c.glyphs)
923
+ c.glyphAttributes=t}return c}finally{}}async Bh(t){if(!1!==t.layout?.bt&&t.layout?.width){const e=t.layout?.language||"en-us"
924
+ if(!t.layout?.Et?.[e])try{if(!Ot.yh.has(e)){const n=await i(e,t.layout?.Vh)
925
+ Ot.yh.set(e,n)}return{...t,layout:{...t.layout,Et:{...t.layout?.Et,[e]:Ot.yh.get(e)}}}}catch(i){return c.warn(`Failed to load patterns for ${e}: ${i}`),{...t,layout:{...t.layout,bt:!1}}}}return t}Nh(t){if(!t.text)throw Error("Text content is required")
926
+ const e=t.qh??1e5
927
+ if(t.text.length>e)throw Error(`Text exceeds ${e} character limit`)}Uh(t){t.Ve&&this.Xt&&Ot.Sh(t.Ve)!==Ot.Sh(this.Xt.Ve||{})&&(this.Xt.font.je(t.Ve),this.Xt.Ve=t.Ve)}Ph(t){if(!this.Xt)throw Error("Font not loaded. Use Text.create() with a font option")
928
+ const{text:e,size:i=Gt,depth:n=0,lineHeight:s=1,letterSpacing:r=0,layout:o={}}=t,{width:a,direction:h="ltr",align:c=("rtl"===h?"right":"left"),St:d=!0,bt:y=!0,language:p="en-us",At:w=l,Mt:g=u,It:v=f,Ft:m,Et:x,Lt:b,Gt:S,Ot:_,Ct:E,kt:T,Dt:A,Bt:M}=o,I=this.Xt.upem/i
927
929
  let L
928
930
  void 0!==a&&(L=a*I)
929
931
  const G=n*I,O=G>0?Math.max(G,25e-6*this.Xt.upem):0
930
- this.Vh||(this.Vh=new F(this.Xt))
931
- const C=this.Vh.Zt({text:e,width:L,align:c,direction:h,bt:y,language:p,St:d,At:w,Mt:g,It:v,Ft:m,Et:x,Lt:b,Gt:S,Ot:_,Ct:E,kt:T,Bt:A,Dt:M,letterSpacing:r}),k=j.Ge(this.Xt.u)
932
- return{lines:C.lines,Ph:(k.se-k.re)*s,letterSpacing:r,align:c,direction:h,depth:O,size:i,zh:1/I}}qh(t,e,i,n,s){const r=t.length/3,o=new Float32Array(3*r),a=[]
932
+ this.Yh||(this.Yh=new F(this.Xt))
933
+ const C=this.Yh.Zt({text:e,width:L,align:c,direction:h,bt:y,language:p,St:d,At:w,Mt:g,It:v,Ft:m,Et:x,Lt:b,Gt:S,Ot:_,Ct:E,kt:T,Dt:A,Bt:M,letterSpacing:r}),k=H.Ge(this.Xt.u)
934
+ return{lines:C.lines,zh:(k.se-k.re)*s,letterSpacing:r,align:c,direction:h,depth:O,size:i,Rh:1/I}}Jh(t,e,i,n,s){const r=t.length/3,o=new Float32Array(3*r),a=[]
933
935
  if(Array.isArray(i)){for(let t=0;r>t;t++){const e=3*t
934
- o[e]=i[0],o[e+1]=i[1],o[e+2]=i[2]}a.push({start:0,end:n.length,hh:n,color:i,bounds:[],glyphs:e,fh:[...new Set(e.map(t=>t.nr))]})}else{const t=i.default||[1,1,1]
936
+ o[e]=i[0],o[e+1]=i[1],o[e+2]=i[2]}a.push({start:0,end:n.length,uh:n,color:i,bounds:[],glyphs:e,dh:[...new Set(e.map(t=>t.sr))]})}else{const t=i.default||[1,1,1]
935
937
  for(let e=0;o.length>e;e+=3)o[e]=t[0],o[e+1]=t[1],o[e+2]=t[2]
936
938
  let r
937
- if(i.sh&&s||i.oh){r=new Map
938
- for(const t of e){const e=r.get(t.ir)
939
- e?e.push(t):r.set(t.ir,[t])}}if(i.sh&&s&&r)for(const t of s){const e=i.sh[t.pattern]
939
+ if(i.rh&&s||i.ah){r=new Map
940
+ for(const t of e){const e=r.get(t.nr)
941
+ e?e.push(t):r.set(t.nr,[t])}}if(i.rh&&s&&r)for(const t of s){const e=i.rh[t.pattern]
940
942
  if(!e)continue
941
943
  const n=[],s=new Map
942
944
  for(let i=t.start;t.end>i;i++){const t=r.get(i)
943
945
  if(t)for(const i of t){n.push(i)
944
- const t=s.get(i.nr)
945
- t?t.push(i):s.set(i.nr,[i])
946
- for(let t=0;i.sr>t;t++){const n=3*(i.js+t)
947
- n>=0&&o.length>n&&(o[n]=e[0],o[n+1]=e[1],o[n+2]=e[2])}}}const h=Array.from(s.values()).map(t=>this.Yh(t))
948
- a.push({start:t.start,end:t.end,hh:t.pattern,color:e,bounds:h,glyphs:n,fh:Array.from(s.keys()).sort((t,e)=>t-e)})}if(i.oh&&r)for(const t of i.oh){const e=[],i=new Map
946
+ const t=s.get(i.sr)
947
+ t?t.push(i):s.set(i.sr,[i])
948
+ for(let t=0;i.rr>t;t++){const n=3*(i.Hs+t)
949
+ n>=0&&o.length>n&&(o[n]=e[0],o[n+1]=e[1],o[n+2]=e[2])}}}const h=Array.from(s.values()).map(t=>this.Kh(t))
950
+ a.push({start:t.start,end:t.end,uh:t.pattern,color:e,bounds:h,glyphs:n,dh:Array.from(s.keys()).sort((t,e)=>t-e)})}if(i.ah&&r)for(const t of i.ah){const e=[],i=new Map
949
951
  for(let n=t.start;t.end>n;n++){const s=r.get(n)
950
952
  if(s)for(const n of s){e.push(n)
951
- const s=i.get(n.nr)
952
- s?s.push(n):i.set(n.nr,[n])
953
- for(let e=0;n.sr>e;e++){const i=3*(n.js+e)
954
- i>=0&&o.length>i&&(o[i]=t.color[0],o[i+1]=t.color[1],o[i+2]=t.color[2])}}}const s=Array.from(i.values()).map(t=>this.Yh(t))
955
- a.push({start:t.start,end:t.end,hh:n.slice(t.start,t.end),color:t.color,bounds:s,glyphs:e,fh:Array.from(i.keys()).sort((t,e)=>t-e)})}}return{colors:o,Jh:a}}Yh(t){if(0===t.length)return{min:{x:0,y:0,z:0},max:{x:0,y:0,z:0}}
953
+ const s=i.get(n.sr)
954
+ s?s.push(n):i.set(n.sr,[n])
955
+ for(let e=0;n.rr>e;e++){const i=3*(n.Hs+e)
956
+ i>=0&&o.length>i&&(o[i]=t.color[0],o[i+1]=t.color[1],o[i+2]=t.color[2])}}}const s=Array.from(i.values()).map(t=>this.Kh(t))
957
+ a.push({start:t.start,end:t.end,uh:n.slice(t.start,t.end),color:t.color,bounds:s,glyphs:e,dh:Array.from(i.keys()).sort((t,e)=>t-e)})}}return{colors:o,Qh:a}}Kh(t){if(0===t.length)return{min:{x:0,y:0,z:0},max:{x:0,y:0,z:0}}
956
958
  let e=1/0,i=1/0,n=1/0,s=-1/0,r=-1/0,o=-1/0
957
959
  for(const a of t)e>a.bounds.min.x&&(e=a.bounds.min.x),i>a.bounds.min.y&&(i=a.bounds.min.y),n>a.bounds.min.z&&(n=a.bounds.min.z),a.bounds.max.x>s&&(s=a.bounds.max.x),a.bounds.max.y>r&&(r=a.bounds.max.y),a.bounds.max.z>o&&(o=a.bounds.max.z)
958
- return{min:{x:e,y:i,z:n},max:{x:s,y:r,z:o}}}Wh(t,e,i,n,s,r,o,a){const{layout:h={}}=r,{width:c,align:l=("rtl"===h.direction?"right":"left")}=h
959
- this.Vh||(this.Vh=new F(this.Xt))
960
- const u=this.Vh.ie({width:c,align:l,planeBounds:s}),f=u.offset
960
+ return{min:{x:e,y:i,z:n},max:{x:s,y:r,z:o}}}jh(t,e,i,n,s,r,o,a){const{layout:h={}}=r,{width:c,align:l=("rtl"===h.direction?"right":"left")}=h
961
+ this.Yh||(this.Yh=new F(this.Xt))
962
+ const u=this.Yh.ie({width:c,align:l,planeBounds:s}),f=u.offset
961
963
  if(s.min.x=u.ee.min.x,s.max.x=u.ee.max.x,0!==f){for(let e=0;t.length>e;e+=3)t[e]+=f
962
964
  for(let t=0;n.length>t;t++)n[t].bounds.min.x+=f,n[t].bounds.max.x+=f}let d,y
963
- if(r.color){const e=this.qh(t,n,r.color,r.text,a)
964
- d=e.colors,y=e.Jh}const p=this.ur.es()
965
+ if(r.color){const e=this.Jh(t,n,r.color,r.text,a)
966
+ d=e.colors,y=e.Qh}const p=this.dr.ns()
965
967
  return{vertices:t,normals:e,indices:i,colors:d,glyphs:n,planeBounds:s,stats:{trianglesGenerated:i.length/3,verticesGenerated:t.length/3,pointsRemovedByVisvalingam:p.pointsRemovedByVisvalingam,originalPointCount:p.originalPointCount},query:(()=>{let t=null
966
968
  return e=>{if(!o)throw Error("Original text not available for querying")
967
- return t||(t=new It(o,n)),t.nh(e)}})(),Jh:y,glyphAttributes:void 0}}Oe(){if(!this.Xt)throw Error("Font not loaded. Call loadFont() first")
968
- return j.Oe(this.Xt.u)}static async Kh(t,e){await Promise.all(t.map(async t=>{if(!Lt.dh.has(t))try{const n=await i(t,e)
969
- Lt.dh.set(t,n)}catch(e){c.warn(`Failed to pre-load patterns for ${t}: ${e}`)}}))}static Qh(t,e){Lt.dh.set(t,e)}static Xh(t){Lt.gh=t===1/0?1/0:1048576*Math.max(1,Math.floor(t)),Lt.Oh()}getLoadedFont(){return this.Xt}measureTextWidth(t,e=0){if(!this.Xt)throw Error("Font not loaded. Call loadFont() first")
970
- return I.measureTextWidth(this.Xt,t,e)}getCacheSize(){return this.ur?this.ur.cr().size:0}clearCache(){this.ur&&this.ur.clearCache()}Rh(t,e){const i=new Float32Array(3*t),n=new Float32Array(t),s=new Float32Array(t),r=new Float32Array(t),o=new Float32Array(t)
969
+ return t||(t=new Lt(o,n)),t.sh(e)}})(),Qh:y,glyphAttributes:void 0}}Oe(){if(!this.Xt)throw Error("Font not loaded. Call loadFont() first")
970
+ return H.Oe(this.Xt.u)}static async Xh(t,e){await Promise.all(t.map(async t=>{if(!Ot.yh.has(t))try{const n=await i(t,e)
971
+ Ot.yh.set(t,n)}catch(e){c.warn(`Failed to pre-load patterns for ${t}: ${e}`)}}))}static Zh(t,e){Ot.yh.set(t,e)}static tc(t){Ot.mh=t===1/0?1/0:1048576*Math.max(1,Math.floor(t)),Ot.kh()}getLoadedFont(){return this.Xt}measureTextWidth(t,e=0){if(!this.Xt)throw Error("Font not loaded. Call loadFont() first")
972
+ return I.measureTextWidth(this.Xt,t,e)}getCacheSize(){return this.dr?this.dr.lr().size:0}clearCache(){this.dr&&this.dr.clearCache()}Hh(t,e){const i=new Float32Array(3*t),n=new Float32Array(t),s=new Float32Array(t),r=new Float32Array(t),o=new Float32Array(t)
971
973
  let a=1/0,h=-1/0
972
974
  for(let t=0;e.length>t;t++){const i=(e[t].bounds.min.x+e[t].bounds.max.x)/2
973
975
  a>i&&(a=i),i>h&&(h=i)}const c=h-a
974
- for(let h=0;e.length>h;h++){const l=e[h],u=(l.bounds.min.x+l.bounds.max.x)/2,f=(l.bounds.min.y+l.bounds.max.y)/2,d=(l.bounds.min.z+l.bounds.max.z)/2,y=l.bounds.min.y,p=c>0?(u-a)/c:0,w=l.js,g=Math.min(w+l.sr,t)
975
- if(g>w){n.fill(h,w,g),s.fill(l.nr,w,g),r.fill(p,w,g),o.fill(y,w,g)
976
- for(let t=3*w;3*g>t;t+=3)i[t]=u,i[t+1]=f,i[t+2]=d}}return{glyphCenter:i,glyphIndex:n,glyphLineIndex:s,glyphProgress:r,glyphBaselineY:o}}Ih(){this.ur=void 0,this.Uh=void 0,this.Vh=void 0}destroy(){if(!this.Xt)return
976
+ for(let h=0;e.length>h;h++){const l=e[h],u=(l.bounds.min.x+l.bounds.max.x)/2,f=(l.bounds.min.y+l.bounds.max.y)/2,d=(l.bounds.min.z+l.bounds.max.z)/2,y=l.bounds.min.y,p=c>0?(u-a)/c:0,w=l.Hs,g=Math.min(w+l.rr,t)
977
+ if(g>w){n.fill(h,w,g),s.fill(l.sr,w,g),r.fill(p,w,g),o.fill(y,w,g)
978
+ for(let t=3*w;3*g>t;t+=3)i[t]=u,i[t+1]=f,i[t+2]=d}}return{glyphCenter:i,glyphIndex:n,glyphLineIndex:s,glyphProgress:r,glyphBaselineY:o}}Lh(){this.dr=void 0,this.$h=void 0,this.Yh=void 0}destroy(){if(!this.Xt)return
977
979
  const t=this.Xt
978
- try{V.Qe(t)}catch(t){c.warn("Error destroying HarfBuzz objects:",t)}finally{this.Xt=void 0,this.Vh=void 0,this.Uh=void 0}}}export{ut as DEFAULT_CURVE_FIDELITY,j as FontMetadataExtractor,Lt as Text,s as createGlyphCache,X as globalGlyphCache}
980
+ try{Y.Xe(t)}catch(t){c.warn("Error destroying HarfBuzz objects:",t)}finally{this.Xt=void 0,this.Yh=void 0,this.$h=void 0}}}export{dt as DEFAULT_CURVE_FIDELITY,H as FontMetadataExtractor,Ot as Text,s as createGlyphCache,tt as globalGlyphCache}