three-text 0.2.16 → 0.2.17

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.
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * three-text v0.2.16
2
+ * three-text v0.2.17
3
3
  * Copyright (C) 2025 Countertype LLC
4
4
  *
5
5
  * This program is free software: you can redistribute it and/or modify
@@ -12,58 +12,63 @@
12
12
  * This software includes third-party code - see LICENSE_THIRD_PARTY for details.
13
13
  */
14
14
  ((t,e)=>{"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).ThreeText={})})(this,function(t){function e(t){if(!t||0===Object.keys(t).length)return
15
- const e=[]
16
- for(const[i,s]of Object.entries(t))/^[a-zA-Z0-9]{4}$/.test(i)?!1===s||0===s?e.push(i+"=0"):!0===s||1===s?e.push(i):"number"==typeof s&&s>1?e.push(`${i}=${Math.floor(s)}`):c.warn(`Invalid value for feature "${i}": ${s}. Expected boolean or positive number.`):c.warn(`Invalid OpenType feature tag: "${i}". Tags must be exactly 4 alphanumeric characters.`)
17
- return e.length>0?e.join(","):void 0}function i(t){const e=t.getUint16(4),i=new Map
15
+ const e=I.get(t)
16
+ if(void 0!==e)return e??void 0
17
+ const i=[]
18
+ for(const[e,s]of Object.entries(t))/^[a-zA-Z0-9]{4}$/.test(e)?!1===s||0===s?i.push(e+"=0"):!0===s||1===s?i.push(e):"number"==typeof s&&s>1?i.push(`${e}=${Math.floor(s)}`):l.warn(`Invalid value for feature "${e}": ${s}. Expected boolean or positive number.`):l.warn(`Invalid OpenType feature tag: "${e}". Tags must be exactly 4 alphanumeric characters.`)
19
+ const s=i.length>0?i.join(","):void 0
20
+ return I.set(t,s??null),s}function i(t){const e=t.getUint16(4),i=new Map
18
21
  for(let s=0;e>s;s++){const e=12+16*s
19
22
  if(e+16>t.byteLength)break
20
23
  const n=t.getUint32(e),r=t.getUint32(e+4),o=t.getUint32(e+8),h=t.getUint32(e+12)
21
- i.set(n,{tag:n,t:r,offset:o,length:h})}return i}async function s(t,e){if(!P.test(t))throw Error(`Invalid hyphenation language code "${t}". Expected e.g. "en-us".`)
22
- if(!e&&!N.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(n,{tag:n,t:r,offset:o,length:h})}return i}async function s(t,e){if(!N.test(t))throw Error(`Invalid hyphenation language code "${t}". Expected e.g. "en-us".`)
25
+ if(!e&&!D.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).`)
23
26
  {const i="ThreeTextPatterns_"+t.replace(/-/g,"_")
24
27
  if(window[i])return window[i]
25
28
  const s=e||"/patterns/"
26
29
  return new Promise((e,n)=>{const r=document.createElement("script")
27
30
  r.src=`${s}${t}.umd.js`,r.async=!0,r.onload=()=>{window[i]?e(window[i]):n(Error(`Pattern script loaded, but global ${i} not found.`))},r.onerror=()=>{n(Error(`Failed to load hyphenation pattern from ${r.src}. Did you copy the pattern files to your public directory?`))},document.head.appendChild(r)})}}function n(t,e,i,s){return`${t}_${e}_${Math.round(1e3*i)/1e3}_${s}`}function r(t){let e=0
28
- return e+=4*t.vertices.length,e+=4*t.normals.length,e+=t.indices.length*t.indices.BYTES_PER_ELEMENT,e+=24,e+=256,e}function o(t=250){return new R({i:1/0,o:1048576*t,h:r})}function h(t){return t&&t.l&&{}.hasOwnProperty.call(t,"default")?t.default:t}function a(t){if(t.l)return t
31
+ return e+=4*t.vertices.length,e+=4*t.normals.length,e+=t.indices.length*t.indices.BYTES_PER_ELEMENT,e+=24,e+=256,e}function o(t=250){return new z({i:1/0,o:1048576*t,h:r})}function h(t){return t&&t.l&&{}.hasOwnProperty.call(t,"default")?t.default:t}function a(t){if(t.l)return t
29
32
  var e=t.default
30
33
  if("function"==typeof e){var i=function t(){return this instanceof t?Reflect.construct(e,arguments,this.constructor):e.apply(this,arguments)}
31
34
  i.prototype=e.prototype}else i={}
32
35
  return Object.defineProperty(i,"l",{value:!0}),Object.keys(t).forEach(e=>{var s=Object.getOwnPropertyDescriptor(t,e)
33
- Object.defineProperty(i,e,s.get?s:{enumerable:!0,get(){return t[e]}})}),i}const l=!("undefined"==typeof window||!window.THREE_TEXT_LOG)||"undefined"!=typeof globalThis&&"true"===globalThis.process?.u?.THREE_TEXT_LOG,c=new class{warn(t,...e){}error(t,...e){console.error(t,...e)}log(t,...e){}},u=new class{constructor(){this.p=[],this.m=new Map}start(t,e){if(!l)return
36
+ Object.defineProperty(i,e,s.get?s:{enumerable:!0,get(){return t[e]}})}),i}const c=!("undefined"==typeof window||!window.THREE_TEXT_LOG)||"undefined"!=typeof globalThis&&"true"===globalThis.process?.u?.THREE_TEXT_LOG,l=new class{warn(t,...e){}error(t,...e){console.error(t,...e)}log(t,...e){}}
37
+ new class{constructor(){this.p=[],this.v=new Map}start(t,e){if(!c)return
34
38
  const i=performance.now()
35
- this.m.set(`${t}_${i}`,i),this.p.push({name:t,startTime:i,metadata:e})}end(t){if(!l)return null
39
+ this.v.set(`${t}_${i}`,i),this.p.push({name:t,startTime:i,metadata:e})}end(t){if(!c)return null
36
40
  const e=performance.now()
37
41
  let i,s
38
- for(const[e,n]of Array.from(this.m.entries()).reverse())if(e.startsWith(t+"_")){i=e,s=n
39
- break}if(void 0===s||!i)return c.warn(`Performance timer "${t}" was not started`),null
42
+ for(const[e,n]of Array.from(this.v.entries()).reverse())if(e.startsWith(t+"_")){i=e,s=n
43
+ break}if(void 0===s||!i)return l.warn(`Performance timer "${t}" was not started`),null
40
44
  const n=e-s
41
- this.m.delete(i)
45
+ this.v.delete(i)
42
46
  for(let i=this.p.length-1;i>=0;i--){const r=this.p[i]
43
47
  if(r.name===t&&r.startTime===s&&!r.endTime){r.endTime=e,r.duration=n
44
- break}}return n.toFixed(2),n}v(){if(!l)return{}
48
+ break}}return n.toFixed(2),n}m(){if(!c)return{}
45
49
  const t={}
46
50
  for(const e of this.p){if(!e.duration)continue
47
51
  const i=t[e.name]
48
- i?(i.count++,i.S+=e.duration,i.T=i.S/i.count,i._=e.duration):t[e.name]={count:1,T:e.duration,S:e.duration,_:e.duration}}return t}L(){if(!l)return
49
- const t=this.v()
50
- console.table(t),Object.keys(t).sort().join(", ")}M(){if(!l)return
51
- const t=this.v()
52
- Object.entries(t).forEach(([t,e])=>{e.T.toFixed(2)})}clear(){l&&(this.p.length=0,this.m.clear())}time(t,e,i){if(!l)return e()
52
+ i?(i.count++,i.S+=e.duration,i._=i.S/i.count,i.T=e.duration):t[e.name]={count:1,_:e.duration,S:e.duration,T:e.duration}}return t}L(){if(!c)return
53
+ const t=this.m()
54
+ console.table(t),Object.keys(t).sort().join(", ")}M(){if(!c)return
55
+ const t=this.m()
56
+ Object.entries(t).forEach(([t,e])=>{e._.toFixed(2)})}clear(){c&&(this.p.length=0,this.v.clear())}time(t,e,i){if(!c)return e()
53
57
  this.start(t,i)
54
- try{return e()}finally{this.end(t)}}async G(t,e,i){if(!l)return e()
58
+ try{return e()}finally{this.end(t)}}async I(t,e,i){if(!c)return e()
55
59
  this.start(t,i)
56
- try{return await e()}finally{this.end(t)}}},f=800,d=100,y=0,p=1/3
57
- var g,w;(t=>{t[t.BOX=0]="BOX",t[t.GLUE=1]="GLUE",t[t.PENALTY=2]="PENALTY",t[t.DISCRETIONARY=3]="DISCRETIONARY"})(g||(g={})),(t=>{t[t.TIGHT=0]="TIGHT",t[t.NORMAL=1]="NORMAL",t[t.LOOSE=2]="LOOSE",t[t.VERY_LOOSE=3]="VERY_LOOSE"})(w||(w={}))
58
- class m{constructor(){this.F=new Map,this.I=[],this.O=new Set}getKey(t,e){return t<<2|e}k(t){const e=this.getKey(t.position,t.$),i=this.F.get(e)
59
- i&&i.U>t.U?(i.U=t.U,i.P=t.P,i.N=t.N):i||(this.F.set(e,t),this.O.add(t),t.D=this.I.length,this.I.push(t))}R(t,e){return this.F.get(this.getKey(t,e))}W(){return this.I}j(t){if(t.active&&void 0!==t.D){t.active=!1
60
- const e=t.D,i=this.I.length-1
61
- if(e!==i){const t=this.I[i]
62
- this.I[e]=t,t.D=e}this.I.pop(),t.D=void 0}}size(){return this.O.size}}const v=50,x=50,b=1e4,S=10,T=1e4,E=-1/0,_=2,A=4,L=1e4,M=.7
63
- class G{static H(t,e){if(0===t)return 0
64
- if(0>=e)return L
60
+ try{return await e()}finally{this.end(t)}}}
61
+ const u=800,f=100,d=0,y=1/3
62
+ var p,w;(t=>{t[t.BOX=0]="BOX",t[t.GLUE=1]="GLUE",t[t.PENALTY=2]="PENALTY",t[t.DISCRETIONARY=3]="DISCRETIONARY"})(p||(p={})),(t=>{t[t.TIGHT=0]="TIGHT",t[t.NORMAL=1]="NORMAL",t[t.LOOSE=2]="LOOSE",t[t.VERY_LOOSE=3]="VERY_LOOSE"})(w||(w={}))
63
+ class v{constructor(){this.G=new Map,this.O=[],this.F=new Set}getKey(t,e){return t<<2|e}k(t){const e=this.getKey(t.position,t.U),i=this.G.get(e)
64
+ i&&i.$>t.$?(i.$=t.$,i.N=t.N,i.D=t.D):i||(this.G.set(e,t),this.F.add(t),t.P=this.O.length,this.O.push(t))}R(t,e){return this.G.get(this.getKey(t,e))}W(){return this.O}j(t){if(t.active&&void 0!==t.P){t.active=!1
65
+ const e=t.P,i=this.O.length-1
66
+ if(e!==i){const t=this.O[i]
67
+ this.O[e]=t,t.P=e}this.O.pop(),t.P=void 0}}size(){return this.F.size}}const g=50,m=50,x=1e4,b=10,S=1e4,_=-1/0,E=2,T=4,A=1e4,L=.7
68
+ class M{static H(t,e){if(0===t)return 0
69
+ if(0>=e)return A
65
70
  let i
66
- return i=t>7230584?1663497>e?t:Math.floor(t/Math.floor(e/297)):Math.floor(297*t/e),i>1290?L:Math.floor((i*i*i+131072)/262144)}static V(t,e="en-us",i,s=_,n=A){let r
71
+ return i=t>7230584?1663497>e?t:Math.floor(t/Math.floor(e/297)):Math.floor(297*t/e),i>1290?A:Math.floor((i*i*i+131072)/262144)}static V(t,e="en-us",i,s=E,n=T){let r
67
72
  if(!i||!i[e])return[]
68
73
  if(r=i[e],!r)return[]
69
74
  const o=`.${t.toLowerCase()}.`,h=Array(o.length).fill(0)
@@ -73,802 +78,811 @@ if(!e.children||!e.children[s])break
73
78
  if(e=e.children[s],e.q)for(let i=0;e.q.length>i;i++){const s=t+i
74
79
  h.length>s&&(h[s]=Math.max(h[s],e.q[i]))}}}const a=[]
75
80
  for(let t=2;o.length-2>t;t++)h[t]%2==1&&a.push(t-1)
76
- return a.filter(e=>e>=s&&t.length-e>=n)}static J(t,e,i=!1,s="en-us",n,r=_,o=A,h){const a=[]
77
- return a.push(...this.Y(t,e,i,s,n,r,o,h)),a.push({type:g.GLUE,width:0,stretch:1/0,K:0,text:"",X:t.length}),a.push({type:g.PENALTY,width:0,Z:-1/0,text:"",X:t.length}),a}static tt(t){const e=t.codePointAt(0)
81
+ return a.filter(e=>e>=s&&t.length-e>=n)}static J(t,e,i,s=!1,n="en-us",r,o=E,h=T,a){const c=[]
82
+ return c.push(...this.Y(t,e,i,s,n,r,o,h,a)),c.push({type:p.GLUE,width:0,stretch:1/0,K:0,text:"",X:t.length}),c.push({type:p.PENALTY,width:0,Z:-1/0,text:"",X:t.length}),c}static tt(t){const e=t.codePointAt(0)
78
83
  return void 0!==e&&(e>=19968&&40959>=e||e>=13312&&19903>=e||e>=131072&&173791>=e||e>=173824&&177983>=e||e>=177984&&178207>=e||e>=178208&&183983>=e||e>=63744&&64255>=e||e>=12352&&12447>=e||e>=12448&&12543>=e||e>=44032&&55215>=e||e>=4352&&4607>=e||e>=12592&&12687>=e||e>=43360&&43391>=e||e>=55216&&55295>=e||e>=65440&&65500>=e)}static et(t){const e=t.charCodeAt(0)
79
84
  return 12289===e||12290===e||65292===e||65294===e||65306===e||65307===e||65281===e||65311===e||65289===e||12305===e||65373===e||12301===e||12303===e||12297===e||12299===e||12309===e||12311===e||12313===e||12315===e||12540===e||8212===e||8230===e||8229===e}static it(t){const e=t.charCodeAt(0)
80
- return 65288===e||12304===e||65371===e||12300===e||12302===e||12296===e||12298===e||12308===e||12310===e||12312===e||12314===e}static st(t){return this.et(t)||this.it(t)}static nt(t,e,i,s=0,n){const r=[],o=Array.from(t)
81
- let h,a,l,c=s
82
- if(n)h=n.width,a=n.stretch,l=n.K
85
+ return 65288===e||12304===e||65371===e||12300===e||12302===e||12296===e||12298===e||12308===e||12310===e||12312===e||12314===e}static st(t){return this.et(t)||this.it(t)}static nt(t,e,i,s,n=0,r){const o=[],h=Array.from(t),a=i?i(t):null
86
+ let c,l,u,f=n
87
+ if(r)c=r.width,l=r.stretch,u=r.K
83
88
  else{const t=e("字")
84
- h=0,a=.04*t,l=.04*t}for(let t=0;o.length>t;t++){const i=o[t],s=o.length-1>t?o[t+1]:null
85
- if(/\s/.test(i)){const t=e(i)
86
- r.push({type:g.GLUE,width:t,stretch:.5*t,K:t*p,text:i,X:c}),c+=i.length
87
- continue}if(r.push({type:g.BOX,width:e(i),text:i,X:c}),c+=i.length,s&&!/\s/.test(s)){let t=!0
89
+ c=0,l=.04*t,u=.04*t}for(let t=0;h.length>t;t++){const i=h[t],s=h.length-1>t?h[t+1]:null
90
+ if(/\s/.test(i)){const s=a?a[t]??e(i):e(i)
91
+ o.push({type:p.GLUE,width:s,stretch:.5*s,K:s*y,text:i,X:f}),f+=i.length
92
+ continue}if(o.push({type:p.BOX,width:a?a[t]??e(i):e(i),text:i,X:f}),f+=i.length,s&&!/\s/.test(s)){let t=!0
88
93
  this.et(s)&&(t=!1),this.it(i)&&(t=!1)
89
94
  const e=this.st(i)&&this.st(s)
90
- t&&!e&&r.push({type:g.GLUE,width:h,stretch:a,K:l,text:"",X:c})}}return r}static Y(t,e,i,s,n,r,o,h){const a=[],l=Array.from(t),c=e("字"),u={width:0,stretch:.04*c,K:.04*c}
91
- let f="",d=0,y=null,p=0
92
- const g=()=>{if(0!==f.length){if("cjk"===y){const t=this.nt(f,e,h,d,u)
93
- a.push(...t)}else{const t=this.rt(f,d,e,i,s,n,r,o,h)
94
- a.push(...t)}f="",y=null}}
95
+ t&&!e&&o.push({type:p.GLUE,width:c,stretch:l,K:u,text:"",X:f})}}return o}static Y(t,e,i,s,n,r,o,h,a){const c=[],l=Array.from(t)
96
+ let u,f="",d=0,y=null,p=0
97
+ const w=()=>{if(0!==f.length){if("cjk"===y){const t=this.nt(f,e,i,a,d,(()=>{if(!u){const t=e("字")
98
+ u={width:0,stretch:.04*t,K:.04*t}}return u})())
99
+ c.push(...t)}else{const t=this.rt(f,d,e,s,n,r,o,h,a)
100
+ c.push(...t)}f="",y=null}}
95
101
  for(let t=0;l.length>t;t++){const e=l[t],i=this.tt(e)?"cjk":"word"
96
- null!==y&&y!==i&&(g(),d=p),null===y&&(y=i,d=p),f+=e,p+=e.length}return g(),a}static rt(t,e,i,s,n,r,o,h,a){const l=[],c=t.match(/\S+|\s+/g)||[]
102
+ null!==y&&y!==i&&(w(),d=p),null===y&&(y=i,d=p),f+=e,p+=e.length}return w(),c}static rt(t,e,i,s,n,r,o,h,a){const c=[],l=t.match(/\S+|\s+/g)||[]
97
103
  let u=0
98
- for(let t=0;c.length>t;t++){const f=c[t],d=e+u
104
+ for(let t=0;l.length>t;t++){const f=l[t],d=e+u
99
105
  if(/\s+/.test(f)){const t=i(f)
100
- l.push({type:g.GLUE,width:t,stretch:.5*t,K:t*p,text:f,X:d}),u+=f.length}else{const t=f.split(/(-)/)
106
+ c.push({type:p.GLUE,width:t,stretch:.5*t,K:t*y,text:f,X:d}),u+=f.length}else{const t=f.split(/(-)/)
101
107
  let e=d
102
- for(let c=0;t.length>c;c++){const u=t[c]
103
- if(u)if("-"===u)l.push({type:g.DISCRETIONARY,width:i("-"),ot:"-",ht:"",lt:"-",ct:i("-"),Z:a?.ut??x,ft:!0,text:"-",X:e}),e+=1
108
+ for(let l=0;t.length>l;l++){const u=t[l]
109
+ if(u)if("-"===u)c.push({type:p.DISCRETIONARY,width:i("-"),ot:"-",ht:"",ct:"-",lt:i("-"),Z:a?.ut??m,ft:!0,text:"-",X:e}),e+=1
104
110
  else{if(u.includes("­")){const t=u.split("­")
105
111
  let s=0
106
112
  for(let n=0;t.length>n;n++){const r=t[n]
107
- r.length>0&&(l.push({type:g.BOX,width:i(r),text:r,X:e+s}),s+=r.length),t.length-1>n&&(l.push({type:g.DISCRETIONARY,width:0,ot:"-",ht:"",lt:"",ct:i("-"),Z:a?.dt??v,ft:!0,text:"",X:e+s}),s+=1)}}else if(s&&u.length>=o+h&&/^\p{L}+$/u.test(u)){const t=G.V(u,n,r,o,h)
113
+ r.length>0&&(c.push({type:p.BOX,width:i(r),text:r,X:e+s}),s+=r.length),t.length-1>n&&(c.push({type:p.DISCRETIONARY,width:0,ot:"-",ht:"",ct:"",lt:i("-"),Z:a?.dt??g,ft:!0,text:"",X:e+s}),s+=1)}}else if(s&&u.length>=o+h&&/^\p{L}+$/u.test(u)){const t=M.V(u,n,r,o,h)
108
114
  if(t.length>0){let s=0
109
115
  for(const n of t){const t=u.substring(s,n)
110
- l.push({type:g.BOX,width:i(t),text:t,X:e+s}),l.push({type:g.DISCRETIONARY,width:0,ot:"-",ht:"",lt:"",ct:i("-"),Z:a?.dt??v,ft:!0,text:"",X:e+n}),s=n}const n=u.substring(s)
111
- l.push({type:g.BOX,width:i(n),text:n,X:e+s})}else l.push({type:g.BOX,width:i(u),text:u,X:e})}else l.push({type:g.BOX,width:i(u),text:u,X:e})
112
- e+=u.length}}u+=f.length}}return l}static yt(t,e,i,s){let n=0
116
+ c.push({type:p.BOX,width:i(t),text:t,X:e+s}),c.push({type:p.DISCRETIONARY,width:0,ot:"-",ht:"",ct:"",lt:i("-"),Z:a?.dt??g,ft:!0,text:"",X:e+n}),s=n}const n=u.substring(s)
117
+ c.push({type:p.BOX,width:i(n),text:n,X:e+s})}else c.push({type:p.BOX,width:i(u),text:u,X:e})}else c.push({type:p.BOX,width:i(u),text:u,X:e})
118
+ e+=u.length}}u+=f.length}}return c}static yt(t,e,i,s){let n=0
113
119
  for(let r=0;e.length-1>r;r++){const o=e[r]
114
120
  let h=0
115
- for(let e=n;o>e;e++)t[e].type!==g.PENALTY&&(h+=t[e].width)
121
+ for(let e=n;o>e;e++)t[e].type!==p.PENALTY&&(h+=t[e].width)
116
122
  if(h>0&&s>h/i)return!0
117
- n=o+1}return!1}static gt(t){u.start("LineBreak.breakText",{textLength:t.text.length,width:t.width,align:t.align||"left",wt:t.wt||!1})
118
- const{text:e,width:i,align:s="left",direction:n="ltr",wt:r=!1,language:o="en-us",vt:h=!0,measureText:a,xt:l,bt:p,letterSpacing:g=0,St:w=f,Tt:m=d,Et:E=y,_t:F,At:I=_,Lt:O=A,Mt:C=S,Gt:k=T,Ft:B=v,It:$=x,Ot:U=b,Ct:P=0,kt:N=!1,Bt:D=M}=t
123
+ n=o+1}return!1}static wt(t){const{text:e,width:i,align:s="left",direction:n="ltr",vt:r=!1,language:o="en-us",gt:h=!0,measureText:a,xt:c,bt:y,St:p,letterSpacing:w=0,_t:v=u,Et:_=f,Tt:I=d,At:G,Lt:O=E,Mt:F=T,It:k=b,Gt:C=S,Ot:B=g,Ft:U=m,kt:$=x,Ct:N=0,Bt:D=!1,Ut:P=L}=t
119
124
  if(h&&e.includes("\n")){const i=e.split("\n"),s=[]
120
125
  let n=0
121
- for(const e of i){if(0===e.length)s.push({text:"",$t:n,Ut:n,Pt:0,Nt:!0,naturalWidth:0,Dt:!1})
122
- else{const i=G.gt({...t,text:e,vt:!1})
123
- i.forEach(t=>{t.$t+=n,t.Ut+=n}),s.push(...i)}n+=e.length+1}return u.end("LineBreak.breakText"),s}let z=r
124
- !z||l&&l[o]||(c.warn(`Hyphenation patterns for ${o} not available`),z=!1)
125
- let R=E
126
- void 0!==F&&i?R=i*F:!z&&E===y&&i&&(R=.1*i)
127
- const W={zt:C,Rt:k,Wt:U,dt:B,ut:$,jt:s,bt:p,Ht:p?g*p:0}
126
+ for(const e of i){if(0===e.length)s.push({text:"",$t:n,Nt:n,Dt:0,Pt:!0,naturalWidth:0,Rt:!1})
127
+ else{const i=M.wt({...t,text:e,gt:!1})
128
+ i.forEach(t=>{t.$t+=n,t.Nt+=n}),s.push(...i)}n+=e.length+1}return s}let R=r
129
+ !R||y&&y[o]||(l.warn(`Hyphenation patterns for ${o} not available`),R=!1)
130
+ let z=I
131
+ void 0!==G&&i?z=i*G:!R&&I===d&&i&&(z=.1*i)
132
+ const W={zt:k,Wt:C,jt:$,dt:B,ut:U,Ht:s,St:p,Vt:p?w*p:0}
128
133
  if(!i||i===1/0){const t=a(e)
129
- return u.end("LineBreak.breakText"),[{text:e,$t:0,Ut:e.length-1,Pt:0,Nt:!0,naturalWidth:t,Dt:!1}]}const j=G.J(e,a,!1,o,l,I,O,W)
134
+ return[{text:e,$t:0,Nt:e.length-1,Dt:0,Pt:!0,naturalWidth:t,Rt:!1}]}const j=M.J(e,a,c,!1,o,y,O,F,W)
130
135
  if(0===j.length)return[]
131
- let H=0,V=R,q=null
132
- const J=!N
133
- for(;5>H;){let t=j,r=G.Vt(t,i,m,P,!1,0,W)
134
- if(0===r.length&&z&&(t=G.J(e,a,!0,o,l,I,O,W),r=G.Vt(t,i,w,P,!1,0,W)),0===r.length&&(V=R+H*i*.1,r=G.Vt(t,i,w,P,!0,V,W)),0===r.length&&(r=G.Vt(t,i,L,P,!0,V,W)),r.length>0){const o=G.qt(t)
135
- if(q=G.Jt(e,t,r,i,s,n,o,W),J&&r.length>1&&G.yt(t,r,i,D)){H++
136
- continue}break}break}if(u.end("LineBreak.breakText"),q&&q.length>0)return q
136
+ let H=0,V=z,q=null
137
+ const J=!D
138
+ for(;5>H;){let t=j,r=M.qt(t,i,_,N,!1,0,W)
139
+ if(0===r.length&&R&&(t=M.J(e,a,c,!0,o,y,O,F,W),r=M.qt(t,i,v,N,!1,0,W)),0===r.length&&(V=z+H*i*.1,r=M.qt(t,i,v,N,!0,V,W)),0===r.length&&(r=M.qt(t,i,A,N,!0,V,W)),r.length>0){const o=M.Jt(t)
140
+ if(q=M.Yt(e,t,r,i,s,n,o,W),J&&r.length>1&&M.yt(t,r,i,P)){H++
141
+ continue}break}break}if(q&&q.length>0)return q
137
142
  const Y=a(e)
138
- return[{text:e,$t:0,Ut:e.length-1,Pt:0,Yt:0,Nt:!0,naturalWidth:Y,Dt:!1}]}static Vt(t,e,i=1/0,s=0,n=!1,r=0,o){const h=G.qt(t),a=new m,l={value:1/0}
139
- a.k({position:0,line:0,$:w.NORMAL,U:0,N:0,P:null,active:!0})
140
- for(let s=0;t.length>s;s++){const c=t[s]
141
- c.type===g.PENALTY&&1/0>c.Z&&G.Kt(t,a,s,e,i,r,h,o,n,l),c.type===g.DISCRETIONARY&&1/0>c.Z&&G.Kt(t,a,s,e,i,r,h,o,n,l),c.type===g.GLUE&&s>0&&t[s-1].type===g.BOX&&G.Kt(t,a,s,e,i,r,h,o,n,l),G.Xt(a,s,e,h.Qt)}const c=[]
143
+ return[{text:e,$t:0,Nt:e.length-1,Dt:0,Kt:0,Pt:!0,naturalWidth:Y,Rt:!1}]}static qt(t,e,i=1/0,s=0,n=!1,r=0,o){const h=M.Jt(t),a=new v,c={value:1/0}
144
+ a.k({position:0,line:0,U:w.NORMAL,$:0,D:0,N:null,active:!0})
145
+ for(let s=0;t.length>s;s++){const l=t[s]
146
+ l.type===p.PENALTY&&1/0>l.Z&&M.Xt(t,a,s,e,i,r,h,o,n,c),l.type===p.DISCRETIONARY&&1/0>l.Z&&M.Xt(t,a,s,e,i,r,h,o,n,c),l.type===p.GLUE&&s>0&&t[s-1].type===p.BOX&&M.Xt(t,a,s,e,i,r,h,o,n,c),M.Qt(a,s,e,h.Zt)}const l=[]
142
147
  let u=null
143
148
  if(0===s){const t=a.W()
144
149
  let e=1/0
145
- for(const i of t)i.active&&e>i.U&&(e=i.U,u=i)}else{const t=a.W()
150
+ for(const i of t)i.active&&e>i.$&&(e=i.$,u=i)}else{const t=a.W()
146
151
  let e=0,i=1/0
147
- for(const s of t)s.active&&i>s.U&&(i=s.U,e=s.line)
152
+ for(const s of t)s.active&&i>s.$&&(i=s.$,e=s.line)
148
153
  let r=0,o=1/0
149
154
  for(const i of t){if(!i.active)continue
150
155
  const t=i.line-e
151
- r>t&&t>=s||t>r&&s>=t?(u=i,r=t,o=i.U):t===r&&o>i.U&&(u=i,o=i.U)}if(!n&&r!==s&&u)return[]}if(!u)return[]
152
- for(;u&&u.position>0;)c.unshift(u.position),u=u.P
153
- return c}static Kt(t,e,i,s,n=1/0,r=0,o,h,a=!1,l={value:1/0}){const c=-1/0>=(t[i].type===g.PENALTY?t[i].Z:0),u=e.W()
156
+ r>t&&t>=s||t>r&&s>=t?(u=i,r=t,o=i.$):t===r&&o>i.$&&(u=i,o=i.$)}if(!n&&r!==s&&u)return[]}if(!u)return[]
157
+ for(;u&&u.position>0;)l.unshift(u.position),u=u.N
158
+ return l}static Xt(t,e,i,s,n=1/0,r=0,o,h,a=!1,c={value:1/0}){const l=-1/0>=(t[i].type===p.PENALTY?t[i].Z:0),u=e.W()
154
159
  for(let f=0;u.length>f;f++){const d=u[f]
155
160
  if(!d.active)continue
156
- const y=G.Zt(t,d.position,i,d.line,s,o,h),{ratio:p,te:w,stretch:m,K:v,N:x}=y
161
+ const y=M.te(t,d.position,i,d.line,s,o,h),{ratio:w,ee:v,stretch:g,K:m,D:x}=y
157
162
  let b
158
- if(w>0){const t=m+r
159
- b=t>0?G.H(w,t):10001}else b=0>w?v>0?-w>v?10001:G.H(-w,v):10001:0
160
- const S=a&&c&&l.value===1/0&&1===u.length&&d.active
161
- if(!c&&!S&&-1>p)continue
162
- const T=G.ee(b,w>0)
163
- if(!c&&!S&&b>n)continue
164
- let _=0,A=0,L=(h?.zt??0)+b,M=1e4>Math.abs(L)?L*L:1e8
165
- const F=S,I=t[i].type===g.PENALTY||t[i].type===g.DISCRETIONARY?t[i].Z:0
166
- 0!==I&&(I>0?M+=I*I:I>E&&(M-=I*I)),(t[i].type===g.PENALTY&&t[i].ft||t[i].type===g.DISCRETIONARY&&t[i].ft)&&d.position>0&&(t[d.position].type===g.PENALTY&&t[d.position].ft||t[d.position].type===g.DISCRETIONARY&&t[d.position].ft)&&(_=h?.Wt??0,M+=_),Math.abs(T-d.$)>1&&(A=h?.Rt??0,M+=A),(c||F)&&(M=0)
167
- const O=d.U+M
168
- l.value>O&&(l.value=O)
169
- let C=e.R(i,T)
170
- C?C.U>O&&(C.U=O,C.P=d,C.N=x):e.k({position:i,line:d.line+1,$:T,U:O,N:x,P:d,active:!0})}}static Zt(t,e,i,s,n,r,o){let h=0,a=0,l=0
171
- if(r){h=r.ie[i]-r.ie[e],a=r.se[i]-r.se[e],l=r.ne[i]-r.ne[e]
163
+ if(v>0){const t=g+r
164
+ b=t>0?M.H(v,t):10001}else b=0>v?m>0?-v>m?10001:M.H(-v,m):10001:0
165
+ const S=a&&l&&c.value===1/0&&1===u.length&&d.active
166
+ if(!l&&!S&&-1>w)continue
167
+ const E=M.ie(b,v>0)
168
+ if(!l&&!S&&b>n)continue
169
+ let T=0,A=0,L=(h?.zt??0)+b,I=1e4>Math.abs(L)?L*L:1e8
170
+ const G=S,O=t[i].type===p.PENALTY||t[i].type===p.DISCRETIONARY?t[i].Z:0
171
+ 0!==O&&(O>0?I+=O*O:O>_&&(I-=O*O)),(t[i].type===p.PENALTY&&t[i].ft||t[i].type===p.DISCRETIONARY&&t[i].ft)&&d.position>0&&(t[d.position].type===p.PENALTY&&t[d.position].ft||t[d.position].type===p.DISCRETIONARY&&t[d.position].ft)&&(T=h?.jt??0,I+=T),Math.abs(E-d.U)>1&&(A=h?.Wt??0,I+=A),(l||G)&&(I=0)
172
+ const F=d.$+I
173
+ c.value>F&&(c.value=F)
174
+ let k=e.R(i,E)
175
+ k?k.$>F&&(k.$=F,k.N=d,k.D=x):e.k({position:i,line:d.line+1,U:E,$:F,D:x,N:d,active:!0})}}static te(t,e,i,s,n,r,o){let h=0,a=0,c=0
176
+ if(r){h=r.se[i]-r.se[e],a=r.ne[i]-r.ne[e],c=r.re[i]-r.re[e]
172
177
  for(let s=e;i>s;s++){const e=t[s]
173
- e.type===g.PENALTY&&(h-=e.width)}}else for(let s=e;i>s;s++){const e=t[s]
174
- e.type!==g.PENALTY&&(h+=e.width,e.type===g.GLUE&&(a+=e.stretch,l+=e.K))}i>=t.length||t[i].type!==g.PENALTY&&t[i].type!==g.DISCRETIONARY||(h+=t[i].type===g.PENALTY?t[i].width:t[i].ct),o?.Ht&&0!==h&&(h-=o.Ht)
175
- const c=n-h
178
+ e.type===p.PENALTY&&(h-=e.width)}}else for(let s=e;i>s;s++){const e=t[s]
179
+ e.type!==p.PENALTY&&(h+=e.width,e.type===p.GLUE&&(a+=e.stretch,c+=e.K))}i>=t.length||t[i].type!==p.PENALTY&&t[i].type!==p.DISCRETIONARY||(h+=t[i].type===p.PENALTY?t[i].width:t[i].lt),o?.Vt&&0!==h&&(h-=o.Vt)
180
+ const l=n-h
176
181
  let u
177
- return u=c>0&&a>0?c/a:0>c&&l>0?c/l:0===c?0:c>0?3:-1,{ratio:u,te:c,stretch:a,K:l,N:h}}static ee(t,e){return e?t>12?t>99?w.VERY_LOOSE:w.LOOSE:w.NORMAL:t>12?w.TIGHT:w.NORMAL}static qt(t){const e=t.length+1,i=Array(e),s=Array(e),n=Array(e),r=Array(e)
182
+ return u=l>0&&a>0?l/a:0>l&&c>0?l/c:0===l?0:l>0?3:-1,{ratio:u,ee:l,stretch:a,K:c,D:h}}static ie(t,e){return e?t>12?t>99?w.VERY_LOOSE:w.LOOSE:w.NORMAL:t>12?w.TIGHT:w.NORMAL}static Jt(t){const e=t.length+1,i=Array(e),s=Array(e),n=Array(e),r=Array(e)
178
183
  i[0]=0,s[0]=0,n[0]=0,r[0]=0
179
184
  for(let e=0;t.length>e;e++){const o=t[e]
180
- if(i[e+1]=i[e]+o.width,o.type===g.PENALTY)s[e+1]=s[e],n[e+1]=n[e],r[e+1]=r[e]
181
- else if(o.type===g.GLUE){const t=o
182
- s[e+1]=s[e]+t.stretch,n[e+1]=n[e]+t.K,r[e+1]=r[e]+Math.max(0,t.width-t.K)}else s[e+1]=s[e],n[e+1]=n[e],r[e+1]=r[e]+o.width}return{ie:i,se:s,ne:n,Qt:r}}static Xt(t,e,i,s){const n=t.W()
185
+ if(i[e+1]=i[e]+o.width,o.type===p.PENALTY)s[e+1]=s[e],n[e+1]=n[e],r[e+1]=r[e]
186
+ else if(o.type===p.GLUE){const t=o
187
+ s[e+1]=s[e]+t.stretch,n[e+1]=n[e]+t.K,r[e+1]=r[e]+Math.max(0,t.width-t.K)}else s[e+1]=s[e],n[e+1]=n[e],r[e+1]=r[e]+o.width}return{se:i,ne:s,re:n,Zt:r}}static Qt(t,e,i,s){const n=t.W()
183
188
  for(let r=n.length-1;r>=0;r--){const o=n[r]
184
- o.active&&s[e]-s[o.position]>i&&t.j(o)}}static Jt(t,e,i,s,n,r,o,h){if(0===i.length)return[{text:t,$t:0,Ut:t.length-1,Pt:0}]
189
+ o.active&&s[e]-s[o.position]>i&&t.j(o)}}static Yt(t,e,i,s,n,r,o,h){if(0===i.length)return[{text:t,$t:0,Nt:t.length-1,Dt:0}]
185
190
  const a=[]
186
- let l=0
187
- for(let t=0;i.length>t;t++){const c=i[t],u=!(e.length-1>i[i.length-1]+1)&&t===i.length-1,f=[]
188
- let d=-1,y=-1,p=0
189
- for(let t=l;c>t;t++){const i=e[t]
190
- if((i.type!==g.PENALTY||i.text)&&(i.type!==g.DISCRETIONARY||i.lt)){if(void 0!==i.X){(-1===d||d>i.X)&&(d=i.X)
191
+ let c=0
192
+ for(let t=0;i.length>t;t++){const l=i[t],u=!(e.length-1>i[i.length-1]+1)&&t===i.length-1,f=[]
193
+ let d=-1,y=-1,w=0
194
+ for(let t=c;l>t;t++){const i=e[t]
195
+ if((i.type!==p.PENALTY||i.text)&&(i.type!==p.DISCRETIONARY||i.ct)){if(void 0!==i.X){(-1===d||d>i.X)&&(d=i.X)
191
196
  const t=i.X+(i.text?i.text.length:0)-1
192
- t>y&&(y=t)}i.text?f.push(i.text):i.type===g.DISCRETIONARY&&i.lt&&f.push(i.lt),p+=i.width}}const w=e[c]
193
- let m=!1
194
- if(e.length>c)if(w.type===g.PENALTY&&w.ft)f.push("-"),p+=w.width,m=!0,void 0!==w.X&&(y=w.X-1)
195
- else if(w.type===g.DISCRETIONARY){const t=w
196
- t.ot&&(f.push(t.ot),p+=t.ct,m=t.ft||!1,void 0!==w.X&&(y=w.X-1))}const v=f.join("")
197
- h?.Ht&&0!==p&&(p-=h.Ht)
197
+ t>y&&(y=t)}i.text?f.push(i.text):i.type===p.DISCRETIONARY&&i.ct&&f.push(i.ct),w+=i.width}}const v=e[l]
198
+ let g=!1
199
+ if(e.length>l)if(v.type===p.PENALTY&&v.ft)f.push("-"),w+=v.width,g=!0,void 0!==v.X&&(y=v.X-1)
200
+ else if(v.type===p.DISCRETIONARY){const t=v
201
+ t.ot&&(f.push(t.ot),w+=t.lt,g=t.ft||!1,void 0!==v.X&&(y=v.X-1))}const m=f.join("")
202
+ h?.Vt&&0!==w&&(w-=h.Vt)
198
203
  let x=0,b=0,S=n
199
- "justify"===n&&u&&(S="rtl"===r?"right":"left"),"center"===S?x=(s-p)/2:"right"===S?x=s-p:"justify"!==S||u||(b=G.Zt(e,l,c,t,s,o,h).ratio),a.push({text:v,$t:d,Ut:y,Pt:x,Yt:b,Nt:!1,naturalWidth:p,Dt:m}),l=c+1}if(e.length-1>l){const t=[]
200
- let i=-1,o=-1,c=0
201
- for(let s=l;e.length-1>s;s++){const n=e[s]
202
- n.type!==g.PENALTY&&(void 0!==n.X&&((-1===i||i>n.X)&&(i=n.X),n.X>o&&(o=n.X)),n.text&&t.push(n.text),c+=n.width)}const u=t.join("")
203
- h?.Ht&&0!==c&&(c-=h.Ht)
204
+ "justify"===n&&u&&(S="rtl"===r?"right":"left"),"center"===S?x=(s-w)/2:"right"===S?x=s-w:"justify"!==S||u||(b=M.te(e,c,l,t,s,o,h).ratio),a.push({text:m,$t:d,Nt:y,Dt:x,Kt:b,Pt:!1,naturalWidth:w,Rt:g}),c=l+1}if(e.length-1>c){const t=[]
205
+ let i=-1,o=-1,l=0
206
+ for(let s=c;e.length-1>s;s++){const n=e[s]
207
+ n.type!==p.PENALTY&&(void 0!==n.X&&((-1===i||i>n.X)&&(i=n.X),n.X>o&&(o=n.X)),n.text&&t.push(n.text),l+=n.width)}const u=t.join("")
208
+ h?.Vt&&0!==l&&(l-=h.Vt)
204
209
  let f=0,d=n
205
- "justify"===n&&(d="rtl"===r?"right":"left"),"center"===d?f=(s-c)/2:"right"===d&&(f=s-c),a.push({text:u,$t:i,Ut:o,Pt:f,Yt:0,Nt:!0,naturalWidth:c,Dt:!1}),a.length>1&&(a[a.length-2].Nt=!1),a[a.length-1].Nt=!0}else a.length>0&&(a[a.length-1].Nt=!0)
206
- return a}}class F{static measureTextWidth(t,i,s=0){const n=t.hb.createBuffer()
207
- n.re(i),n.oe()
208
- const r=e(t.he)
210
+ "justify"===n&&(d="rtl"===r?"right":"left"),"center"===d?f=(s-l)/2:"right"===d&&(f=s-l),a.push({text:u,$t:i,Nt:o,Dt:f,Kt:0,Pt:!0,naturalWidth:l,Rt:!1}),a.length>1&&(a[a.length-2].Pt=!1),a[a.length-1].Pt=!0}else a.length>0&&(a[a.length-1].Pt=!0)
211
+ return a}}const I=new WeakMap
212
+ class G{static xt(t,i,s=0){const n=Array.from(i)
213
+ if(0===n.length)return[]
214
+ const r=new Map
215
+ let o=0
216
+ for(let t=0;n.length>t;t++)r.set(o,t),o+=n[t].length
217
+ const h=Array(n.length).fill(0),a=t.hb.createBuffer()
218
+ try{a.oe(i),a.he()
219
+ const n=e(t.ae)
220
+ t.hb.shape(t.font,a,n)
221
+ const o=a.json(t.font),c=s*t.upem
222
+ for(let t=0;o.length>t;t++){const e=o[t],i=e.ce??0
223
+ let s=r.get(i)
224
+ if(void 0===s)for(let t=i;t>=0;t--){const e=r.get(t)
225
+ if(void 0!==e){s=e
226
+ break}}void 0!==s&&(h[s]+=e.ax,0!==c&&(h[s]+=c))}return h}finally{a.destroy()}}static measureTextWidth(t,i,s=0){const n=t.hb.createBuffer()
227
+ n.oe(i),n.he()
228
+ const r=e(t.ae)
209
229
  t.hb.shape(t.font,n,r)
210
230
  const o=n.json(t.font),h=s*t.upem
211
231
  let a=0
212
- return o.forEach(t=>{a+=t.ax,0!==h&&(a+=h)}),n.destroy(),a}}class I{constructor(t){this.ae=t}le(t){const{text:e,width:i,align:s,direction:n,wt:r,language:o,vt:h,St:a,Tt:l,Et:c,_t:u,xt:f,At:d,Lt:y,Mt:p,Gt:g,Ft:w,It:m,Ot:v,Ct:x,kt:b,Bt:S,letterSpacing:T}=t
232
+ return o.forEach(t=>{a+=t.ax,0!==h&&(a+=h)}),n.destroy(),a}}class O{constructor(t){this.le=t}ue(t){const{text:e,width:i,align:s,direction:n,vt:r,language:o,gt:h,_t:a,Et:c,Tt:l,At:u,bt:f,Lt:d,Mt:y,It:p,Gt:w,Ot:v,Ft:g,kt:m,Ct:x,Bt:b,Ut:S,letterSpacing:_}=t
213
233
  let E
214
- if(i)E=G.gt({text:e,width:i,align:s,direction:n,wt:r,language:o,vt:h,St:a,Tt:l,Et:c,_t:u,xt:f,At:d,Lt:y,Mt:p,Gt:g,Ft:w,It:m,Ot:v,Ct:x,kt:b,Bt:S,bt:this.ae.upem,letterSpacing:T,measureText:t=>F.measureTextWidth(this.ae,t,T)})
234
+ if(i)E=M.wt({text:e,width:i,align:s,direction:n,vt:r,language:o,gt:h,_t:a,Et:c,Tt:l,At:u,bt:f,Lt:d,Mt:y,It:p,Gt:w,Ot:v,Ft:g,kt:m,Ct:x,Bt:b,Ut:S,St:this.le.upem,letterSpacing:_,measureText:t=>G.measureTextWidth(this.le,t,_),xt:t=>G.xt(this.le,t,_)})
215
235
  else{const t=e.split("\n")
216
236
  E=[]
217
237
  let i=0
218
- for(const e of t)E.push({text:e,$t:i,Ut:0===e.length?i:i+e.length-1,Pt:0}),i+=e.length+1}return{lines:E}}ce(t,e){const{width:i,align:s,planeBounds:n}=e
219
- let r=0
220
- const o={min:{...n.min},max:{...n.max}}
221
- if(i&&("center"===s||"right"===s)&&("center"===s?r=(i-(n.max.x-n.min.x))/2-n.min.x:"right"===s&&(r=i-n.max.x),0!==r)){for(let e=0;t.length>e;e+=3)t[e]+=r
222
- o.min.x+=r,o.max.x+=r}return{offset:r,ue:o}}}const O=1330926671,C=2001684038,k=1851878757
223
- class B{static fe(t){if(!t||12>t.byteLength)throw Error("Invalid font buffer: too small to be a valid font file")
238
+ for(const e of t)E.push({text:e,$t:i,Nt:0===e.length?i:i+e.length-1,Dt:0}),i+=e.length+1}return{lines:E}}fe(t,e){const{offset:i,de:s}=this.ye(e)
239
+ if(0!==i)for(let e=0;t.length>e;e+=3)t[e]+=i
240
+ return{offset:i,de:s}}ye(t){const{width:e,align:i,planeBounds:s}=t
241
+ let n=0
242
+ const r={min:{...s.min},max:{...s.max}}
243
+ return!e||"center"!==i&&"right"!==i||(n="center"===i?(e-(s.max.x-s.min.x))/2-s.min.x:e-s.max.x),0!==n&&(r.min.x+=n,r.max.x+=n),{offset:n,de:r}}}const F=1330926671,k=2001684038,C=1851878757
244
+ class B{static pe(t){if(!t||12>t.byteLength)throw Error("Invalid font buffer: too small to be a valid font file")
224
245
  const e=new DataView(t),s=e.getUint32(0)
225
- if(![65536,O].includes(s))throw Error("Invalid font format. Expected TTF/OTF (or WOFF), got signature: 0x"+s.toString(16))
226
- const n=i(e),r=n.has(1128678944)||n.has(1128678962),o=n.get(1751474532)?.offset??0,h=n.get(1751672161)?.offset??0,a=n.get(1330851634)?.offset??0,l=n.get(1719034226)?.offset??0,c=n.get(1398030676)?.offset??0,u=n.get(k)?.offset??0,f=o?e.getUint16(o+18):1e3
246
+ if(![65536,F].includes(s))throw Error("Invalid font format. Expected TTF/OTF (or WOFF), got signature: 0x"+s.toString(16))
247
+ const n=i(e),r=n.has(1128678944)||n.has(1128678962),o=n.get(1751474532)?.offset??0,h=n.get(1751672161)?.offset??0,a=n.get(1330851634)?.offset??0,c=n.get(1719034226)?.offset??0,l=n.get(1398030676)?.offset??0,u=n.get(C)?.offset??0,f=o?e.getUint16(o+18):1e3
227
248
  let d=null
228
- h&&(d={de:e.getInt16(h+4),ye:e.getInt16(h+6),pe:e.getInt16(h+8)})
249
+ h&&(d={we:e.getInt16(h+4),ve:e.getInt16(h+6),ge:e.getInt16(h+8)})
229
250
  let y=null
230
- a&&(y={ge:e.getInt16(a+68),we:e.getInt16(a+70),me:e.getInt16(a+72),ve:e.getUint16(a+74),xe:e.getUint16(a+76)})
251
+ a&&(y={me:e.getInt16(a+68),xe:e.getInt16(a+70),be:e.getInt16(a+72),Se:e.getUint16(a+74),_e:e.getUint16(a+76)})
231
252
  let p=null
232
- return l&&c&&u&&(p=this.be(e,c,u)),{Se:r,bt:f,Te:d?.de||null,Ee:d?.ye||null,_e:d?.pe||null,ge:y?.ge||null,we:y?.we||null,me:y?.me||null,ve:y?.ve||null,xe:y?.xe||null,Ae:p}}static Le(t){const e=new DataView(t),s=i(e),n=s.get(1196643650)?.offset??0,r=s.get(1196445523)?.offset??0,o=s.get(k)?.offset??0,h=new Set,a={}
233
- try{if(n){const t=this.Me(e,n,o)
234
- t.features.forEach(t=>h.add(t)),Object.assign(a,t.names)}if(r){const t=this.Me(e,r,o)
235
- t.features.forEach(t=>h.add(t)),Object.assign(a,t.names)}}catch(t){return}const l=Array.from(h).sort()
236
- if(0!==l.length)return{tags:l,names:Object.keys(a).length>0?a:{}}}static Me(t,e,i){const s=e+t.getUint16(e+6),n=t.getUint16(s),r=[],o={}
253
+ return c&&l&&u&&(p=this.Ee(e,l,u)),{Te:r,St:f,Ae:d?.we||null,Le:d?.ve||null,Me:d?.ge||null,me:y?.me||null,xe:y?.xe||null,be:y?.be||null,Se:y?.Se||null,_e:y?._e||null,Ie:p}}static Ge(t){const e=new DataView(t),s=i(e),n=s.get(1196643650)?.offset??0,r=s.get(1196445523)?.offset??0,o=s.get(C)?.offset??0,h=new Set,a={}
254
+ try{if(n){const t=this.Oe(e,n,o)
255
+ t.features.forEach(t=>h.add(t)),Object.assign(a,t.names)}if(r){const t=this.Oe(e,r,o)
256
+ t.features.forEach(t=>h.add(t)),Object.assign(a,t.names)}}catch(t){return}const c=Array.from(h).sort()
257
+ if(0!==c.length)return{tags:c,names:Object.keys(a).length>0?a:{}}}static Oe(t,e,i){const s=e+t.getUint16(e+6),n=t.getUint16(s),r=[],o={}
237
258
  for(let e=0;n>e;e++){const n=s+2+6*e,h=String.fromCharCode(t.getUint8(n),t.getUint8(n+1),t.getUint8(n+2),t.getUint8(n+3))
238
259
  if(r.push(h),/^(ss\d{2}|cv\d{2})$/.test(h)&&i){const e=s+t.getUint16(n+4),r=t.getUint16(e)
239
260
  if(0!==r){const s=e+r
240
- if(0===t.getUint16(s)){const e=t.getUint16(s+2),n=this.Ge(t,i,e)
241
- n&&(o[h]=n)}}}}return{features:r,names:o}}static be(t,e,i){try{if(1>t.getUint16(e))return null
261
+ if(0===t.getUint16(s)){const e=t.getUint16(s+2),n=this.Fe(t,i,e)
262
+ n&&(o[h]=n)}}}}return{features:r,names:o}}static Ee(t,e,i){try{if(1>t.getUint16(e))return null
242
263
  const s=t.getUint16(e+4),n=t.getUint16(e+6),r=t.getUint32(e+8),o={}
243
- for(let h=0;n>h;h++){const n=e+r+h*s,a=String.fromCharCode(t.getUint8(n),t.getUint8(n+1),t.getUint8(n+2),t.getUint8(n+3)),l=t.getUint16(n+4),c=this.Ge(t,i,l)
244
- c&&(o[a]=c)}return Object.keys(o).length>0?o:null}catch(t){return null}}static Ge(t,e,i){try{const s=t.getUint16(e+2),n=t.getUint16(e+4)
245
- for(let r=0;s>r;r++){const s=e+6+12*r,o=t.getUint16(s),h=t.getUint16(s+2),a=t.getUint16(s+4),l=t.getUint16(s+6),c=t.getUint16(s+8),u=t.getUint16(s+10)
246
- if(l===i&&(0===o||3===o&&1033===a)){const i=new Uint8Array(t.buffer,e+n+u,c)
264
+ for(let h=0;n>h;h++){const n=e+r+h*s,a=String.fromCharCode(t.getUint8(n),t.getUint8(n+1),t.getUint8(n+2),t.getUint8(n+3)),c=t.getUint16(n+4),l=this.Fe(t,i,c)
265
+ l&&(o[a]=l)}return Object.keys(o).length>0?o:null}catch(t){return null}}static Fe(t,e,i){try{const s=t.getUint16(e+2),n=t.getUint16(e+4)
266
+ for(let r=0;s>r;r++){const s=e+6+12*r,o=t.getUint16(s),h=t.getUint16(s+2),a=t.getUint16(s+4),c=t.getUint16(s+6),l=t.getUint16(s+8),u=t.getUint16(s+10)
267
+ if(c===i&&(0===o||3===o&&1033===a)){const i=new Uint8Array(t.buffer,e+n+u,l)
247
268
  if(0===o||3===o&&1===h){let t=""
248
269
  for(let e=0;i.length>e;e+=2)t+=String.fromCharCode(i[e]<<8|i[e+1])
249
- return t}return new TextDecoder("ascii").decode(i)}}return null}catch(t){return null}}static Fe(t){return null!==t.ge&&null!==t.we?{de:t.ge,ye:t.we,pe:0}:null!==t.Te&&null!==t.Ee?{de:t.Te,ye:t.Ee,pe:0}:null!==t.ve&&null!==t.xe?{de:t.ve,ye:-t.xe,pe:0}:{de:Math.round(.8*t.bt),ye:-Math.round(.2*t.bt),pe:0}}static Ie(t){const e=B.Fe(t)
250
- return{de:e.de,ye:e.ye,pe:e.pe,bt:t.bt,Oe:e.de-e.ye}}}class ${static Ce(t){if(4>t.byteLength)return"ttf/otf"
270
+ return t}return new TextDecoder("ascii").decode(i)}}return null}catch(t){return null}}static ke(t){return null!==t.me&&null!==t.xe?{we:t.me,ve:t.xe,ge:0}:null!==t.Ae&&null!==t.Le?{we:t.Ae,ve:t.Le,ge:0}:null!==t.Se&&null!==t._e?{we:t.Se,ve:-t._e,ge:0}:{we:Math.round(.8*t.St),ve:-Math.round(.2*t.St),ge:0}}static Ce(t){const e=B.ke(t)
271
+ return{we:e.we,ve:e.ve,ge:e.ge,St:t.St,Be:e.we-e.ve}}}class U{static Ue(t){if(4>t.byteLength)return"ttf/otf"
251
272
  const e=new DataView(t).getUint32(0)
252
- return e===C?"woff":2001684018===e?"woff2":"ttf/otf"}static async ke(t){const e=new DataView(t),i=new Uint8Array(t)
253
- if(e.getUint32(0)!==C)throw Error("Not a valid WOFF font")
273
+ return e===k?"woff":2001684018===e?"woff2":"ttf/otf"}static async $e(t){const e=new DataView(t),i=new Uint8Array(t)
274
+ if(e.getUint32(0)!==k)throw Error("Not a valid WOFF font")
254
275
  const s=e.getUint32(4),n=e.getUint16(12),r=e.getUint32(16)
255
276
  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.")
256
277
  const o=new Uint8Array(r),h=new DataView(o.buffer)
257
278
  h.setUint32(0,s),h.setUint16(4,n)
258
279
  const a=2**Math.floor(Math.log2(n))*16
259
280
  h.setUint16(6,a),h.setUint16(8,Math.floor(Math.log2(n))),h.setUint16(10,16*n-a)
260
- let l=12+16*n
261
- const u=[]
281
+ let c=12+16*n
282
+ const l=[]
262
283
  for(let t=0;n>t;t++){const i=44+20*t
263
- u.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)})}u.sort((t,e)=>t.tag-e.tag)
264
- for(let t=0;n>t;t++){const e=u[t],s=12+16*t
265
- if(h.setUint32(s,e.tag),h.setUint32(s+4,e.t),h.setUint32(s+8,l),h.setUint32(s+12,e.Be),e.length===e.Be)o.set(i.subarray(e.offset,e.offset+e.length),l)
266
- else{const t=i.subarray(e.offset,e.offset+e.length),s=await $.$e(t)
267
- if(s.byteLength!==e.Be)throw Error(`Decompression failed: expected ${e.Be} bytes, got ${s.byteLength}`)
268
- o.set(new Uint8Array(s),l)}l+=e.Be,l+=(4-e.Be%4)%4}return c.log("WOFF font decompressed successfully"),o.buffer.slice(0,l)}static async $e(t){const e=new ReadableStream({start(e){e.enqueue(t),e.close()}}).pipeThrough(new DecompressionStream("deflate"))
269
- return new Response(e).arrayBuffer()}}class U{constructor(t){this.Ue=t}async Pe(t,e){if(u.start("FontLoader.loadFont",{bufferSize:t.byteLength}),!t||12>t.byteLength)throw Error("Invalid font buffer: too small to be a valid font file")
270
- const i=$.Ce(t)
271
- if("woff"===i)c.log("WOFF font detected, decompressing..."),t=await $.ke(t)
284
+ l.push({tag:e.getUint32(i),offset:e.getUint32(i+4),length:e.getUint32(i+8),Ne:e.getUint32(i+12),t:e.getUint32(i+16)})}l.sort((t,e)=>t.tag-e.tag)
285
+ for(let t=0;n>t;t++){const e=l[t],s=12+16*t
286
+ if(h.setUint32(s,e.tag),h.setUint32(s+4,e.t),h.setUint32(s+8,c),h.setUint32(s+12,e.Ne),e.length===e.Ne)o.set(i.subarray(e.offset,e.offset+e.length),c)
287
+ else{const t=i.subarray(e.offset,e.offset+e.length),s=await U.De(t)
288
+ if(s.byteLength!==e.Ne)throw Error(`Decompression failed: expected ${e.Ne} bytes, got ${s.byteLength}`)
289
+ o.set(new Uint8Array(s),c)}c+=e.Ne,c+=(4-e.Ne%4)%4}return o.buffer.slice(0,c)}static async De(t){const e=new ReadableStream({start(e){e.enqueue(t),e.close()}}).pipeThrough(new DecompressionStream("deflate"))
290
+ return new Response(e).arrayBuffer()}}class ${constructor(t){this.Pe=t}async Re(t,e){if(!t||12>t.byteLength)throw Error("Invalid font buffer: too small to be a valid font file")
291
+ const i=U.Ue(t)
292
+ if("woff"===i)t=await U.$e(t)
272
293
  else if("woff2"===i)throw Error("WOFF2 fonts are not yet supported. Please use WOFF or TTF/OTF format.")
273
294
  const s=new DataView(t).getUint32(0)
274
- if(![65536,O].includes(s))throw Error("Invalid font format. Expected TTF/OTF (or WOFF), got signature: 0x"+s.toString(16))
275
- const{hb:n,module:r}=await this.Ue()
276
- try{const i=n.Ne(new Uint8Array(t)),s=n.De(i,0),o=n.ze(s)
277
- e&&o.Re(e)
278
- const h=s.We(),a=Object.keys(h).length>0,l=B.fe(t)
279
- let c
280
- if(a&&h){c={}
281
- for(const[t,e]of Object.entries(h))c[t]={...e,name:l.Ae?.[t]||null}}const u=B.Le(t)
282
- return{hb:n,fontBlob:i,face:s,font:o,module:r,upem:l.bt,p:l,je:e,He:a,Ve:c,qe:u?.tags,Je:u?.names,Ye:t}}catch(t){throw c.error("Failed to load font:",t),t}finally{u.end("FontLoader.loadFont")}}static Ke(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 P=/^[a-z]{2,3}(?:-[a-z0-9]{2,16})*$/i,N=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"])
283
- class D{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 D(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}Qe(t){return this.x/=t,this.y/=t,this}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}Ze(){return this.x*this.x+this.y*this.y}normalize(){const t=this.length()
284
- return t>0&&this.Qe(t),this}ti(t){return this.x*t.x+this.y*t.y}ei(t){const e=this.x-t.x,i=this.y-t.y
285
- return Math.sqrt(e*e+i*i)}ii(t){const e=this.x-t.x,i=this.y-t.y
286
- 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 z{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 z(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}Qe(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)}Ze(){return this.x*this.x+this.y*this.y+this.z*this.z}normalize(){const t=this.length()
287
- return t>0&&this.Qe(t),this}ti(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
288
- return this.x=this.y*t.z-this.z*t.y,this.y=e,this.z=i,this}ei(t){const e=this.x-t.x,i=this.y-t.y,s=this.z-t.z
289
- return Math.sqrt(e*e+i*i+s*s)}ii(t){const e=this.x-t.x,i=this.y-t.y,s=this.z-t.z
290
- return e*e+i*i+s*s}equals(t){return this.x===t.x&&this.y===t.y&&this.z===t.z}}class R{constructor(t={}){this.cache=new Map,this.head=null,this.ni=null,this.stats={ri:0,oi:0,hi:0,size:0,ai:0},this.options={i:t.i??1/0,o:t.o??1/0,h:t.h??(()=>0),li:t.li}}get(t){const e=this.cache.get(t)
291
- return e?(this.stats.ri++,this.ci(e),e.value):void this.stats.oi++}has(t){return this.cache.has(t)}set(t,e){const i=this.cache.get(t)
295
+ if(![65536,F].includes(s))throw Error("Invalid font format. Expected TTF/OTF (or WOFF), got signature: 0x"+s.toString(16))
296
+ const{hb:n,module:r}=await this.Pe()
297
+ try{const i=n.ze(new Uint8Array(t)),s=n.We(i,0),o=n.je(s)
298
+ e&&o.He(e)
299
+ const h=s.Ve(),a=Object.keys(h).length>0,c=B.pe(t)
300
+ let l
301
+ if(a&&h){l={}
302
+ for(const[t,e]of Object.entries(h))l[t]={...e,name:c.Ie?.[t]||null}}const u=B.Ge(t)
303
+ return{hb:n,fontBlob:i,face:s,font:o,module:r,upem:c.St,p:c,qe:e,Je:a,Ye:l,Ke:u?.tags,Xe:u?.names,Qe:t}}catch(t){throw l.error("Failed to load font:",t),t}}static Ze(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){l.error("Error destroying font resources:",t)}}}const N=/^[a-z]{2,3}(?:-[a-z0-9]{2,16})*$/i,D=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"])
304
+ class P{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 P(this.x,this.y)}ti(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}ei(t){return this.x/=t,this.y/=t,this}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}ii(){return this.x*this.x+this.y*this.y}normalize(){const t=this.length()
305
+ return t>0&&this.ei(t),this}si(t){return this.x*t.x+this.y*t.y}ni(t){const e=this.x-t.x,i=this.y-t.y
306
+ return Math.sqrt(e*e+i*i)}ri(t){const e=this.x-t.x,i=this.y-t.y
307
+ 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 R{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 R(this.x,this.y,this.z)}ti(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}ei(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)}ii(){return this.x*this.x+this.y*this.y+this.z*this.z}normalize(){const t=this.length()
308
+ return t>0&&this.ei(t),this}si(t){return this.x*t.x+this.y*t.y+this.z*t.z}oi(t){const e=this.z*t.x-this.x*t.z,i=this.x*t.y-this.y*t.x
309
+ 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,s=this.z-t.z
310
+ return Math.sqrt(e*e+i*i+s*s)}ri(t){const e=this.x-t.x,i=this.y-t.y,s=this.z-t.z
311
+ return e*e+i*i+s*s}equals(t){return this.x===t.x&&this.y===t.y&&this.z===t.z}}class z{constructor(t={}){this.cache=new Map,this.head=null,this.hi=null,this.stats={ai:0,ci:0,li:0,size:0,ui:0},this.options={i:t.i??1/0,o:t.o??1/0,h:t.h??(()=>0),fi:t.fi}}get(t){const e=this.cache.get(t)
312
+ return e?(this.stats.ai++,this.di(e),e.value):void this.stats.ci++}has(t){return this.cache.has(t)}set(t,e){const i=this.cache.get(t)
292
313
  if(i){const t=this.options.h(i.value),s=this.options.h(e)
293
- return this.stats.ai=this.stats.ai-t+s,i.value=e,void this.ci(i)}const s=this.options.h(e)
294
- this.ui(s)
295
- const n={key:t,value:e,fi:null,next:null}
296
- this.cache.set(t,n),this.di(n),this.stats.size=this.cache.size,this.stats.ai+=s}delete(t){const e=this.cache.get(t)
314
+ return this.stats.ui=this.stats.ui-t+s,i.value=e,void this.di(i)}const s=this.options.h(e)
315
+ this.yi(s)
316
+ const n={key:t,value:e,pi:null,next:null}
317
+ this.cache.set(t,n),this.wi(n),this.stats.size=this.cache.size,this.stats.ui+=s}delete(t){const e=this.cache.get(t)
297
318
  if(!e)return!1
298
319
  const i=this.options.h(e.value)
299
- return this.removeNode(e),this.cache.delete(t),this.stats.size=this.cache.size,this.stats.ai-=i,this.options.li&&this.options.li(t,e.value),!0}clear(){if(this.options.li)for(const[t,e]of this.cache)this.options.li(t,e.value)
300
- this.cache.clear(),this.head=null,this.ni=null,this.stats={ri:0,oi:0,hi:0,size:0,ai:0}}getStats(){const t=this.stats.ri+this.stats.oi
301
- return{...this.stats,yi:t>0?this.stats.ri/t*100:0,pi:this.stats.ai/1048576}}keys(){const t=[]
320
+ return this.removeNode(e),this.cache.delete(t),this.stats.size=this.cache.size,this.stats.ui-=i,this.options.fi&&this.options.fi(t,e.value),!0}clear(){if(this.options.fi)for(const[t,e]of this.cache)this.options.fi(t,e.value)
321
+ this.cache.clear(),this.head=null,this.hi=null,this.stats={ai:0,ci:0,li:0,size:0,ui:0}}getStats(){const t=this.stats.ai+this.stats.ci
322
+ return{...this.stats,gi:t>0?this.stats.ai/t*100:0,mi:this.stats.ui/1048576}}keys(){const t=[]
302
323
  let e=this.head
303
324
  for(;e;)t.push(e.key),e=e.next
304
- return t}get size(){return this.cache.size}ui(t){for(;this.cache.size>=this.options.i&&this.ni;)this.gi()
305
- if(1/0>this.options.o)for(;this.ni&&this.stats.ai+t>this.options.o;)this.gi()}gi(){if(!this.ni)return
306
- const t=this.ni,e=this.options.h(t.value)
307
- this.wi(),this.cache.delete(t.key),this.stats.size=this.cache.size,this.stats.ai-=e,this.stats.hi++,this.options.li&&this.options.li(t.key,t.value)}di(t){t.fi=null,t.next=null,this.head?(t.next=this.head,this.head.fi=t,this.head=t):this.head=this.ni=t}removeNode(t){t.fi?t.fi.next=t.next:this.head=t.next,t.next?t.next.fi=t.fi:this.ni=t.fi}wi(){this.ni&&this.removeNode(this.ni)}ci(t){t!==this.head&&(this.removeNode(t),this.di(t))}}const W=new R({i:1/0,o:262144e3,h:r}),j=new R({i:1e3,h(t){let e=0
308
- for(const i of t.mi)e+=16*i.points.length
309
- return e+64}}),H=new R({i:1e3,h:r}),V=new R({i:2e3,h(){return 1}})
325
+ return t}get size(){return this.cache.size}yi(t){for(;this.cache.size>=this.options.i&&this.hi;)this.xi()
326
+ if(1/0>this.options.o)for(;this.hi&&this.stats.ui+t>this.options.o;)this.xi()}xi(){if(!this.hi)return
327
+ const t=this.hi,e=this.options.h(t.value)
328
+ this.bi(),this.cache.delete(t.key),this.stats.size=this.cache.size,this.stats.ui-=e,this.stats.li++,this.options.fi&&this.options.fi(t.key,t.value)}wi(t){t.pi=null,t.next=null,this.head?(t.next=this.head,this.head.pi=t,this.head=t):this.head=this.hi=t}removeNode(t){t.pi?t.pi.next=t.next:this.head=t.next,t.next?t.next.pi=t.pi:this.hi=t.pi}bi(){this.hi&&this.removeNode(this.hi)}di(t){t!==this.head&&(this.removeNode(t),this.wi(t))}}const W=new z({i:1/0,o:262144e3,h:r}),j=new z({i:1e3,h(t){let e=0
329
+ for(const i of t.Si)e+=16*i.points.length
330
+ return e+64}}),H=new z({i:1e3,h:r}),V=new z({i:2e3,h(){return 1}})
310
331
  var q="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},J={exports:{}}
311
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 s(t,e,i){var s=e.b-t.b,n=i.b-e.b
312
333
  return s+n>0?n>s?e.a-t.a+s/(s+n)*(t.a-i.a):e.a-i.a+n/(s+n)*(i.a-t.a):0}function n(t,e,i){var s=e.b-t.b,n=i.b-e.b
313
334
  return s+n>0?(e.a-i.a)*s+(e.a-t.a)*n:0}function r(t,e){return e.a>t.a||t.a===e.a&&e.b>=t.b}function o(t,e,i){var s=e.a-t.a,n=i.a-e.a
314
335
  return s+n>0?n>s?e.b-t.b+s/(s+n)*(t.b-i.b):e.b-i.b+n/(s+n)*(i.b-t.b):0}function h(t,e,i){var s=e.a-t.a,n=i.a-e.a
315
- return s+n>0?(e.b-i.b)*s+(e.b-t.b)*n:0}function a(t){return i(t.b.a,t.a)}function l(t){return i(t.a,t.b.a)}function c(t,e,i,s){return(t=0>t?0:t)>(i=0>i?0:i)?s+i/(t+i)*(e-s):0===i?(e+s)/2:e+t/(t+i)*(s-e)}function u(t){var e=g(t.b)
316
- return m(e,t.c),m(e.b,t.c),v(e,t.a),e}function f(t,e){var i=!1,s=!1
317
- t!==e&&(e.a!==t.a&&(s=!0,b(e.a,t.a)),e.d!==t.d&&(i=!0,S(e.d,t.d)),w(e,t),s||(m(e,t.a),t.a.c=t),i||(v(e,t.d),t.d.a=t))}function d(t){var e=t.b,i=!1
318
- t.d!==t.b.d&&(i=!0,S(t.d,t.b.d)),t.c===t?b(t.a,null):(t.b.d.a=X(t),t.a.c=t.c,w(t,X(t)),i||v(t,t.d)),e.c===e?(b(e.a,null),S(e.d,null)):(t.d.a=X(e),e.a.c=e.c,w(e,X(e))),x(t)}function y(t){var e=g(t),i=e.b
319
- return w(e,t.e),e.a=t.b.a,m(i,e.a),e.d=i.d=t.d,e=e.b,w(t.b,X(t.b)),w(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,s=g(t),n=s.b
320
- return e.d!==t.d&&(i=!0,S(e.d,t.d)),w(s,t.e),w(n,e),s.a=t.b.a,n.a=e.a,s.d=n.d=t.d,t.d.a=n,i||v(s,t.d),s}function g(t){var e=new K,i=new K,s=t.b.xi
321
- return i.xi=s,s.b.xi=e,e.xi=t,t.b.xi=i,e.b=i,e.c=e,e.e=i,i.b=e,i.c=i,i.e=e}function w(t,e){var i=t.c,s=e.c
322
- i.b.e=e,s.b.e=t,t.c=s,e.c=i}function m(t,e){var i=e.f,s=new Z(e,i)
336
+ return s+n>0?(e.b-i.b)*s+(e.b-t.b)*n:0}function a(t){return i(t.b.a,t.a)}function c(t){return i(t.a,t.b.a)}function l(t,e,i,s){return(t=0>t?0:t)>(i=0>i?0:i)?s+i/(t+i)*(e-s):0===i?(e+s)/2:e+t/(t+i)*(s-e)}function u(t){var e=w(t.b)
337
+ return g(e,t.c),g(e.b,t.c),m(e,t.a),e}function f(t,e){var i=!1,s=!1
338
+ t!==e&&(e.a!==t.a&&(s=!0,b(e.a,t.a)),e.d!==t.d&&(i=!0,S(e.d,t.d)),v(e,t),s||(g(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
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=X(t),t.a.c=t.c,v(t,X(t)),i||m(t,t.d)),e.c===e?(b(e.a,null),S(e.d,null)):(t.d.a=X(e),e.a.c=e.c,v(e,X(e))),x(t)}function y(t){var e=w(t),i=e.b
340
+ return v(e,t.e),e.a=t.b.a,g(i,e.a),e.d=i.d=t.d,e=e.b,v(t.b,X(t.b)),v(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,s=w(t),n=s.b
341
+ return e.d!==t.d&&(i=!0,S(e.d,t.d)),v(s,t.e),v(n,e),s.a=t.b.a,n.a=e.a,s.d=n.d=t.d,t.d.a=n,i||m(s,t.d),s}function w(t){var e=new K,i=new K,s=t.b._i
342
+ return i._i=s,s.b._i=e,e._i=t,t.b._i=i,e.b=i,e.c=e,e.e=i,i.b=e,i.c=i,i.e=e}function v(t,e){var i=t.c,s=e.c
343
+ i.b.e=e,s.b.e=t,t.c=s,e.c=i}function g(t,e){var i=e.f,s=new Z(e,i)
323
344
  i.e=s,e.f=s,i=s.c=t
324
- do{i.a=s,i=i.c}while(i!==t)}function v(t,e){var i=e.d,s=new Y(e,i)
345
+ do{i.a=s,i=i.c}while(i!==t)}function m(t,e){var i=e.d,s=new Y(e,i)
325
346
  i.b=s,e.d=s,s.a=t,s.c=e.c,i=t
326
- do{i.d=s,i=i.e}while(i!==t)}function x(t){var e=t.xi
327
- e.b.xi=t=t.b.xi,t.b.xi=e}function b(t,e){var i=t.c,s=i
347
+ do{i.d=s,i=i.e}while(i!==t)}function x(t){var e=t._i
348
+ e.b._i=t=t.b._i,t.b._i=e}function b(t,e){var i=t.c,s=i
328
349
  do{s.a=e,s=s.c}while(s!==i);(s=t.e).f=i=t.f,i.e=s}function S(t,e){var i=t.a,s=i
329
- do{s.d=e,s=s.e}while(s!==i);(s=t.b).d=i=t.d,i.b=s}function T(t){var e=0
330
- 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,e,r){return r=r.a,(e=e.a).b.a===(t=t.a)?r.b.a===t?i(e.a,r.a)?0>=n(r.b.a,e.a,r.a):n(e.b.a,r.a,e.a)>=0:0>=n(r.b.a,t,r.a):r.b.a===t?n(e.b.a,t,e.a)>=0:(e=s(e.b.a,t,e.a))>=(t=s(r.b.a,t,r.a))}function A(t){t.a.bi=null
350
+ do{s.d=e,s=s.e}while(s!==i);(s=t.b).d=i=t.d,i.b=s}function _(t){var e=0
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>=n(r.b.a,e.a,r.a):n(e.b.a,r.a,e.a)>=0:0>=n(r.b.a,t,r.a):r.b.a===t?n(e.b.a,t,e.a)>=0:(e=s(e.b.a,t,e.a))>=(t=s(r.b.a,t,r.a))}function A(t){t.a.Ei=null
331
352
  var e=t.e
332
- e.a.c=e.c,e.c.a=e.a,t.e=null}function L(t,e){d(t.a),t.c=!1,t.a=e,e.bi=t}function M(t){var e=t.a.a
353
+ e.a.c=e.c,e.c.a=e.a,t.e=null}function L(t,e){d(t.a),t.c=!1,t.a=e,e.Ei=t}function M(t){var e=t.a.a
333
354
  do{t=ut(t)}while(t.a.a===e)
334
- return t.c&&(L(t,e=p(ct(t).a.b,t.a.e)),t=ut(t)),t}function G(t,e,i){var s=new lt
335
- return s.a=i,s.e=W(t.f,e.e,s),i.bi=s}function F(t,e){switch(t.s){case 100130:return!!(1&e)
355
+ return t.c&&(L(t,e=p(lt(t).a.b,t.a.e)),t=ut(t)),t}function I(t,e,i){var s=new ct
356
+ return s.a=i,s.e=W(t.f,e.e,s),i.Ei=s}function G(t,e){switch(t.s){case 100130:return!!(1&e)
336
357
  case 100131:return 0!==e
337
358
  case 100132:return e>0
338
359
  case 100133:return 0>e
339
- case 100134:return e>=2||-2>=e}return!1}function I(t){var e=t.a,i=e.d
340
- i.c=t.d,i.a=e,A(t)}function O(t,e,i){for(t=e,e=e.a;t!==i;){t.c=!1
341
- var s=ct(t),n=s.a
342
- if(n.a!==e.a){if(!s.c){I(t)
343
- break}L(s,n=p(e.c.b,n.b))}e.c!==n&&(f(X(n),n),f(e,n)),I(t),e=s.a,t=s}return e}function C(t,e,i,s,n,r){var o=!0
344
- do{G(t,e,i.b),i=i.c}while(i!==s)
345
- for(null===n&&(n=ct(e).a.b.c);(i=(s=ct(e)).a.b).a===n.a;)i.c!==n&&(f(X(i),i),f(X(n),i)),s.f=e.f-i.f,s.d=F(t,s.f),e.b=!0,!o&&U(t,e)&&(E(i,n),A(e),d(n)),o=!1,e=s,n=i
346
- e.b=!0,r&&N(t,e)}function k(t,e,i,s,n){var r=[e.g[0],e.g[1],e.g[2]]
347
- e.d=null,e.d=t.Si&&t.Si(r,i,s,t.c)||null,null===e.d&&(n?t.n||(J(t,100156),t.n=!0):e.d=i[0])}function B(t,e,i){var s=[null,null,null,null]
348
- s[0]=e.a.d,s[1]=i.a.d,k(t,e.a,s,[.5,.5,0,0],!1),f(e,i)}function $(t,e,i,s,n){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),h=n+1
349
- s[n]=.5*o/(r+o),s[h]=.5*r/(r+o),t.g[0]+=s[n]*e.g[0]+s[h]*i.g[0],t.g[1]+=s[n]*e.g[1]+s[h]*i.g[1],t.g[2]+=s[n]*e.g[2]+s[h]*i.g[2]}function U(t,s){var r=ct(s),o=s.a,h=r.a
360
+ case 100134:return e>=2||-2>=e}return!1}function O(t){var e=t.a,i=e.d
361
+ i.c=t.d,i.a=e,A(t)}function F(t,e,i){for(t=e,e=e.a;t!==i;){t.c=!1
362
+ var s=lt(t),n=s.a
363
+ if(n.a!==e.a){if(!s.c){O(t)
364
+ break}L(s,n=p(e.c.b,n.b))}e.c!==n&&(f(X(n),n),f(e,n)),O(t),e=s.a,t=s}return e}function k(t,e,i,s,n,r){var o=!0
365
+ do{I(t,e,i.b),i=i.c}while(i!==s)
366
+ for(null===n&&(n=lt(e).a.b.c);(i=(s=lt(e)).a.b).a===n.a;)i.c!==n&&(f(X(i),i),f(X(n),i)),s.f=e.f-i.f,s.d=G(t,s.f),e.b=!0,!o&&$(t,e)&&(E(i,n),A(e),d(n)),o=!1,e=s,n=i
367
+ e.b=!0,r&&D(t,e)}function C(t,e,i,s,n){var r=[e.g[0],e.g[1],e.g[2]]
368
+ e.d=null,e.d=t.Ti&&t.Ti(r,i,s,t.c)||null,null===e.d&&(n?t.n||(J(t,100156),t.n=!0):e.d=i[0])}function B(t,e,i){var s=[null,null,null,null]
369
+ s[0]=e.a.d,s[1]=i.a.d,C(t,e.a,s,[.5,.5,0,0],!1),f(e,i)}function U(t,e,i,s,n){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),h=n+1
370
+ s[n]=.5*o/(r+o),s[h]=.5*r/(r+o),t.g[0]+=s[n]*e.g[0]+s[h]*i.g[0],t.g[1]+=s[n]*e.g[1]+s[h]*i.g[1],t.g[2]+=s[n]*e.g[2]+s[h]*i.g[2]}function $(t,s){var r=lt(s),o=s.a,h=r.a
350
371
  if(i(o.a,h.a)){if(n(h.b.a,o.a,h.a)>0)return!1
351
372
  if(e(o.a,h.a)){if(o.a!==h.a){r=t.e
352
- var a=o.a.xi
373
+ var a=o.a._i
353
374
  if(0>a)for(r.c[-(a+1)]=null;r.a>0&&null===r.c[r.d[r.a-1]];)--r.a
354
- else{var l=(r=r.b).d,c=r.e,u=r.c,d=u[a]
355
- l[d]=l[r.a],u[l[d]]=d,d<=--r.a&&(d>1?i(c[l[d>>1]],c[l[d]])?ht(r,d):at(r,d):ht(r,d)),c[a]=null,u[a]=r.b,r.b=a}B(t,X(h),o)}}else y(h.b),f(o,X(h)),s.b=r.b=!0}else{if(0>n(o.b.a,h.a,o.a))return!1
356
- ut(s).b=s.b=!0,y(o.b),f(X(h),o)}return!0}function P(t,a){var l=ct(a),u=a.a,d=l.a,p=u.a,g=d.a,w=u.b.a,m=d.b.a,v=new Z
357
- if(n(w,t.a,p),n(m,t.a,g),p===g||Math.min(p.a,w.a)>Math.max(g.a,m.a))return!1
358
- if(i(p,g)){if(n(m,p,g)>0)return!1}else if(0>n(w,g,p))return!1
359
- var x,b,S=w,T=p,E=m,_=g
360
- if(i(S,T)||(x=S,S=T,T=x),i(E,_)||(x=E,E=_,_=x),i(S,E)||(x=S,S=E,E=x,x=T,T=_,_=x),i(E,T)?i(T,_)?(0>(x=s(S,E,T))+(b=s(E,T,_))&&(x=-x,b=-b),v.b=c(x,E.b,b,T.b)):(0>(x=n(S,E,T))+(b=-n(S,_,T))&&(x=-x,b=-b),v.b=c(x,E.b,b,_.b)):v.b=(E.b+T.b)/2,r(S,T)||(x=S,S=T,T=x),r(E,_)||(x=E,E=_,_=x),r(S,E)||(x=S,S=E,E=x,x=T,T=_,_=x),r(E,T)?r(T,_)?(0>(x=o(S,E,T))+(b=o(E,T,_))&&(x=-x,b=-b),v.a=c(x,E.a,b,T.a)):(0>(x=h(S,E,T))+(b=-h(S,_,T))&&(x=-x,b=-b),v.a=c(x,E.a,b,_.a)):v.a=(E.a+T.a)/2,i(v,t.a)&&(v.b=t.a.b,v.a=t.a.a),S=i(p,g)?p:g,i(S,v)&&(v.b=S.b,v.a=S.a),e(v,p)||e(v,g))return U(t,a),!1
361
- if(!e(w,t.a)&&n(w,t.a,v)>=0||!e(m,t.a)&&0>=n(m,t.a,v)){if(m===t.a)return y(u.b),f(d.b,u),u=ct(a=M(a)).a,O(t,ct(a),l),C(t,a,X(u),u,u,!0),!0
362
- if(w===t.a){y(d.b),f(u.e,X(d)),g=(p=l=a).a.b.a
363
- do{p=ut(p)}while(p.a.b.a===g)
364
- return p=ct(a=p).a.b.c,l.a=X(d),C(t,a,(d=O(t,l,null)).c,u.b.c,p,!0),!0}return n(w,t.a,v)>=0&&(ut(a).b=a.b=!0,y(u.b),u.a.b=t.a.b,u.a.a=t.a.a),0>=n(m,t.a,v)&&(a.b=l.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(X(d),u),u.a.b=v.b,u.a.a=v.a,u.a.xi=et(t.e,u.a),d=[0,0,0,0],v=[p.d,w.d,g.d,m.d],(u=u.a).g[0]=u.g[1]=u.g[2]=0,$(u,p,w,d,0),$(u,g,m,d,2),k(t,u,v,d,!0),ut(a).b=a.b=l.b=!0,!1}function N(t,e){for(var s=ct(e);;){for(;s.b;)e=s,s=ct(s)
375
+ else{var c=(r=r.b).d,l=r.e,u=r.c,d=u[a]
376
+ c[d]=c[r.a],u[c[d]]=d,d<=--r.a&&(d>1?i(l[c[d>>1]],l[c[d]])?ht(r,d):at(r,d):ht(r,d)),l[a]=null,u[a]=r.b,r.b=a}B(t,X(h),o)}}else y(h.b),f(o,X(h)),s.b=r.b=!0}else{if(0>n(o.b.a,h.a,o.a))return!1
377
+ ut(s).b=s.b=!0,y(o.b),f(X(h),o)}return!0}function N(t,a){var c=lt(a),u=a.a,d=c.a,p=u.a,w=d.a,v=u.b.a,g=d.b.a,m=new Z
378
+ if(n(v,t.a,p),n(g,t.a,w),p===w||Math.min(p.a,v.a)>Math.max(w.a,g.a))return!1
379
+ if(i(p,w)){if(n(g,p,w)>0)return!1}else if(0>n(v,w,p))return!1
380
+ var x,b,S=v,_=p,E=g,T=w
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=s(S,E,_))+(b=s(E,_,T))&&(x=-x,b=-b),m.b=l(x,E.b,b,_.b)):(0>(x=n(S,E,_))+(b=-n(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=h(S,E,_))+(b=-h(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 $(t,a),!1
382
+ if(!e(v,t.a)&&n(v,t.a,m)>=0||!e(g,t.a)&&0>=n(g,t.a,m)){if(g===t.a)return y(u.b),f(d.b,u),u=lt(a=M(a)).a,F(t,lt(a),c),k(t,a,X(u),u,u,!0),!0
383
+ if(v===t.a){y(d.b),f(u.e,X(d)),w=(p=c=a).a.b.a
384
+ do{p=ut(p)}while(p.a.b.a===w)
385
+ return p=lt(a=p).a.b.c,c.a=X(d),k(t,a,(d=F(t,c,null)).c,u.b.c,p,!0),!0}return n(v,t.a,m)>=0&&(ut(a).b=a.b=!0,y(u.b),u.a.b=t.a.b,u.a.a=t.a.a),0>=n(g,t.a,m)&&(a.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(X(d),u),u.a.b=m.b,u.a.a=m.a,u.a._i=et(t.e,u.a),d=[0,0,0,0],m=[p.d,v.d,w.d,g.d],(u=u.a).g[0]=u.g[1]=u.g[2]=0,U(u,p,v,d,0),U(u,w,g,d,2),C(t,u,m,d,!0),ut(a).b=a.b=c.b=!0,!1}function D(t,e){for(var s=lt(e);;){for(;s.b;)e=s,s=lt(s)
365
386
  if(!e.b&&(s=e,null===(e=ut(e))||!e.b))break
366
387
  e.b=!1
367
388
  var r,o=e.a,h=s.a
368
- if(r=o.b.a!==h.b.a)t:{var a=ct(r=e),l=r.a,c=a.a,u=void 0
369
- if(i(l.b.a,c.b.a)){if(0>n(l.b.a,c.b.a,l.a)){r=!1
370
- break t}ut(r).b=r.b=!0,u=y(l),f(c.b,u),u.d.c=r.d}else{if(n(c.b.a,l.b.a,c.a)>0){r=!1
371
- break t}r.b=a.b=!0,u=y(c),f(l.e,c.b),u.b.d.c=r.d}r=!0}if(r&&(s.c?(A(s),d(h),h=(s=ct(e)).a):e.c&&(A(e),d(o),o=(e=ut(s)).a)),o.a!==h.a)if(o.b.a===h.b.a||e.c||s.c||o.b.a!==t.a&&h.b.a!==t.a)U(t,e)
372
- else if(P(t,e))break
373
- o.a===h.a&&o.b.a===h.b.a&&(E(h,o),A(e),d(o),e=ut(s))}}function D(t,s){t.a=s
374
- for(var r=s.c;null===r.bi;)if((r=r.c)===s.c){r=t
375
- var o=s;(u=new lt).a=o.c.b
376
- var h=(c=r.f).a
377
- do{h=h.a}while(null!==h.b&&!c.c(c.b,u,h.b))
378
- if(h=(l=ct(c=h.b)).a,0===n((u=c.a).b.a,o,u.a))e((u=c.a).a,o)||e(u.b.a,o)||(y(u.b),c.c&&(d(u.c),c.c=!1),f(o.c,u),D(r,o))
379
- else{var a=i(h.b.a,u.b.a)?c:l,l=void 0
380
- c.d||a.c?(l=a===c?p(o.c.b,u.e):p(h.b.c.b,o.c).b,a.c?L(a,l):(u=r,(c=G(r,c,l)).f=ut(c).f+c.a.f,c.d=F(u,c.f)),D(r,o)):C(r,c,o.c,o.c,null,!0)}return}if(c=(u=ct(r=M(r.bi))).a,(u=O(t,u,null)).c===c){var c,u=(c=u).c,g=(h=ct(r),!1);(l=r.a).b.a!==(a=h.a).b.a&&P(t,r),e(l.a,t.a)&&(f(X(u),l),u=ct(r=M(r)).a,O(t,ct(r),h),g=!0),e(a.a,t.a)&&(f(c,X(a)),c=O(t,h,null),g=!0),g?C(t,r,c.c,u,u,!0):(o=i(a.a,l.a)?X(a):l,C(t,r,o=p(c.c.b,o),o.c,o.c,!1),o.b.bi.c=!0,N(t,r))}else C(t,r,u.c,c,c,!0)}function z(t,e){var i=new lt,s=u(t.b)
381
- s.a.b=dt,s.a.a=e,s.b.a.b=-dt,s.b.a.a=e,t.a=s.b.a,i.a=s,i.f=0,i.d=!1,i.c=!1,i.xi=!0,i.b=!1,s=W(s=t.f,s.a,i),i.e=s}function R(t){this.a=new j,this.b=t,this.c=_}function W(t,e,i){do{e=e.c}while(null!==e.b&&!t.c(t.b,e.b,i))
382
- 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.Ti=this.b=this.Ei=null,this._i=[0,0,0],this.s=100130,this.n=!1,this.Si=this.a=this.e=this.f=null,this.Ai=!1,this.c=this.r=this.bi=this.Li=this.Mi=this.xi=null}function V(t,e){if(t.d!==e)for(;t.d!==e;)if(e>t.d)switch(t.d){case yt:J(t,100151),t.Gi(null)
389
+ if(r=o.b.a!==h.b.a)t:{var a=lt(r=e),c=r.a,l=a.a,u=void 0
390
+ if(i(c.b.a,l.b.a)){if(0>n(c.b.a,l.b.a,c.a)){r=!1
391
+ break t}ut(r).b=r.b=!0,u=y(c),f(l.b,u),u.d.c=r.d}else{if(n(l.b.a,c.b.a,l.a)>0){r=!1
392
+ break t}r.b=a.b=!0,u=y(l),f(c.e,l.b),u.b.d.c=r.d}r=!0}if(r&&(s.c?(A(s),d(h),h=(s=lt(e)).a):e.c&&(A(e),d(o),o=(e=ut(s)).a)),o.a!==h.a)if(o.b.a===h.b.a||e.c||s.c||o.b.a!==t.a&&h.b.a!==t.a)$(t,e)
393
+ else if(N(t,e))break
394
+ o.a===h.a&&o.b.a===h.b.a&&(E(h,o),A(e),d(o),e=ut(s))}}function P(t,s){t.a=s
395
+ for(var r=s.c;null===r.Ei;)if((r=r.c)===s.c){r=t
396
+ var o=s;(u=new ct).a=o.c.b
397
+ var h=(l=r.f).a
398
+ do{h=h.a}while(null!==h.b&&!l.c(l.b,u,h.b))
399
+ if(h=(c=lt(l=h.b)).a,0===n((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))
400
+ else{var a=i(h.b.a,u.b.a)?l:c,c=void 0
401
+ l.d||a.c?(c=a===l?p(o.c.b,u.e):p(h.b.c.b,o.c).b,a.c?L(a,c):(u=r,(l=I(r,l,c)).f=ut(l).f+l.a.f,l.d=G(u,l.f)),P(r,o)):k(r,l,o.c,o.c,null,!0)}return}if(l=(u=lt(r=M(r.Ei))).a,(u=F(t,u,null)).c===l){var l,u=(l=u).c,w=(h=lt(r),!1);(c=r.a).b.a!==(a=h.a).b.a&&N(t,r),e(c.a,t.a)&&(f(X(u),c),u=lt(r=M(r)).a,F(t,lt(r),h),w=!0),e(a.a,t.a)&&(f(l,X(a)),l=F(t,h,null),w=!0),w?k(t,r,l.c,u,u,!0):(o=i(a.a,c.a)?X(a):c,k(t,r,o=p(l.c.b,o),o.c,o.c,!1),o.b.Ei.c=!0,D(t,r))}else k(t,r,u.c,l,l,!0)}function R(t,e){var i=new ct,s=u(t.b)
402
+ s.a.b=dt,s.a.a=e,s.b.a.b=-dt,s.b.a.a=e,t.a=s.b.a,i.a=s,i.f=0,i.d=!1,i.c=!1,i._i=!0,i.b=!1,s=W(s=t.f,s.a,i),i.e=s}function z(t){this.a=new j,this.b=t,this.c=T}function W(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.Ai=this.b=this.Li=null,this.Mi=[0,0,0],this.s=100130,this.n=!1,this.Ti=this.a=this.e=this.f=null,this.Ii=!1,this.c=this.r=this.Ei=this.Gi=this.Oi=this._i=null}function V(t,e){if(t.d!==e)for(;t.d!==e;)if(e>t.d)switch(t.d){case yt:J(t,100151),t.Fi(null)
383
404
  break
384
- case 1:J(t,100152),t.Fi()}else switch(t.d){case 2:J(t,100154),t.Ii()
405
+ case 1:J(t,100152),t.ki()}else switch(t.d){case 2:J(t,100154),t.Ci()
385
406
  break
386
- case 1:J(t,100153),t.w()}}function J(t,e){t.Ti&&t.Ti(e,t.c)}function Y(t,e){this.b=t||this,this.d=e||this,this.a=null,this.c=!1}function K(){this.xi=this,this.bi=this.d=this.a=this.e=this.c=this.b=null,this.f=0}function X(t){return t.b.e}function Q(){this.c=new Z,this.a=new Y,this.b=new K,this.d=new K,this.b.b=this.d,this.d.b=this.b}function Z(t,e){this.e=t||this,this.f=e||this,this.d=this.c=null,this.g=[0,0,0],this.xi=this.a=this.b=0}function tt(){this.c=[],this.d=null,this.a=0,this.e=!1,this.b=new st}function et(t,e){if(t.e){var i,s=t.b,n=++s.a
387
- return 2*n>s.f&&(s.f*=2,s.c=nt(s.c,s.f+1)),0===s.b?i=n:(i=s.b,s.b=s.c[s.b]),s.e[i]=e,s.c[i]=n,s.d[n]=i,s.xi&&at(s,n),i}return s=t.a++,t.c[s]=e,-(s+1)}function it(t){if(0===t.a)return ot(t.b)
407
+ case 1:J(t,100153),t.w()}}function J(t,e){t.Ai&&t.Ai(e,t.c)}function Y(t,e){this.b=t||this,this.d=e||this,this.a=null,this.c=!1}function K(){this._i=this,this.Ei=this.d=this.a=this.e=this.c=this.b=null,this.f=0}function X(t){return t.b.e}function Q(){this.c=new Z,this.a=new Y,this.b=new K,this.d=new K,this.b.b=this.d,this.d.b=this.b}function Z(t,e){this.e=t||this,this.f=e||this,this.d=this.c=null,this.g=[0,0,0],this._i=this.a=this.b=0}function tt(){this.c=[],this.d=null,this.a=0,this.e=!1,this.b=new st}function et(t,e){if(t.e){var i,s=t.b,n=++s.a
408
+ return 2*n>s.f&&(s.f*=2,s.c=nt(s.c,s.f+1)),0===s.b?i=n:(i=s.b,s.b=s.c[s.b]),s.e[i]=e,s.c[i]=n,s.d[n]=i,s._i&&at(s,n),i}return s=t.a++,t.c[s]=e,-(s+1)}function it(t){if(0===t.a)return ot(t.b)
388
409
  var e=t.c[t.d[t.a-1]]
389
410
  if(0!==t.b.a&&i(rt(t.b),e))return ot(t.b)
390
411
  do{--t.a}while(t.a>0&&null===t.c[t.d[t.a-1]])
391
- return e}function st(){this.d=nt([0],33),this.e=[null,null],this.c=[0,0],this.a=0,this.f=32,this.b=0,this.xi=!1,this.d[1]=1}function nt(t,e){for(var i=Array(e),s=0;t.length>s;s++)i[s]=t[s]
412
+ return e}function st(){this.d=nt([0],33),this.e=[null,null],this.c=[0,0],this.a=0,this.f=32,this.b=0,this._i=!1,this.d[1]=1}function nt(t,e){for(var i=Array(e),s=0;t.length>s;s++)i[s]=t[s]
392
413
  for(;e>s;s++)i[s]=0
393
414
  return i}function rt(t){return t.e[t.d[1]]}function ot(t){var e=t.d,i=t.e,s=t.c,n=e[1],r=i[n]
394
415
  return t.a>0&&(e[1]=e[t.a],s[e[1]]=1,i[n]=null,s[n]=t.b,t.b=n,--t.a>0&&ht(t,1)),r}function ht(t,e){for(var s=t.d,n=t.e,r=t.c,o=e,h=s[o];;){var a=o<<1
395
416
  t.a>a&&i(n[s[a+1]],n[s[a]])&&(a+=1)
396
- var l=s[a]
397
- if(a>t.a||i(n[h],n[l])){s[o]=h,r[h]=o
398
- break}s[o]=l,r[l]=o,o=a}}function at(t,e){for(var s=t.d,n=t.e,r=t.c,o=e,h=s[o];;){var a=o>>1,l=s[a]
399
- if(0===a||i(n[l],n[h])){s[o]=h,r[h]=o
400
- break}s[o]=l,r[l]=o,o=a}}function lt(){this.e=this.a=null,this.f=0,this.c=this.b=this.xi=this.d=!1}function ct(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
417
+ var c=s[a]
418
+ if(a>t.a||i(n[h],n[c])){s[o]=h,r[h]=o
419
+ break}s[o]=c,r[c]=o,o=a}}function at(t,e){for(var s=t.d,n=t.e,r=t.c,o=e,h=s[o];;){var a=o>>1,c=s[a]
420
+ if(0===a||i(n[c],n[h])){s[o]=h,r[h]=o
421
+ break}s[o]=c,r[c]=o,o=a}}function ct(){this.e=this.a=null,this.f=0,this.c=this.b=this._i=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
401
422
  case 100140:switch(e){case 100130:case 100131:case 100132:case 100133:case 100134:return void(this.s=e)}break
402
- case 100141:return void(this.Ai=!!e)
423
+ case 100141:return void(this.Ii=!!e)
403
424
  default:return void J(this,100900)}J(this,100901)},ft.y=function(t){switch(t){case 100142:return 0
404
425
  case 100140:return this.s
405
- case 100141:return this.Ai
406
- default:J(this,100900)}return!1},ft.A=function(t,e,i){this._i[0]=t,this._i[1]=e,this._i[2]=i},ft.z=function(t,e){var i=e||null
407
- switch(t){case 100100:case 100106:this.xi=i
426
+ case 100141:return this.Ii
427
+ default:J(this,100900)}return!1},ft.A=function(t,e,i){this.Mi[0]=t,this.Mi[1]=e,this.Mi[2]=i},ft.z=function(t,e){var i=e||null
428
+ switch(t){case 100100:case 100106:this._i=i
408
429
  break
409
- case 100104:case 100110:this.Mi=i
430
+ case 100104:case 100110:this.Oi=i
410
431
  break
411
- case 100101:case 100107:this.Li=i
432
+ case 100101:case 100107:this.Gi=i
412
433
  break
413
- case 100102:case 100108:this.bi=i
434
+ case 100102:case 100108:this.Ei=i
414
435
  break
415
- case 100103:case 100109:this.Ti=i
436
+ case 100103:case 100109:this.Ai=i
416
437
  break
417
- case 100105:case 100111:this.Si=i
438
+ case 100105:case 100111:this.Ti=i
418
439
  break
419
440
  case 100112:this.r=i
420
441
  break
421
442
  default:J(this,100900)}},ft.C=function(t,e){var i=!1,s=[0,0,0]
422
443
  V(this,2)
423
- for(var n=0;3>n;++n){var r=t[n];-1e150>r&&(r=-1e150,i=!0),r>1e150&&(r=1e150,i=!0),s[n]=r}i&&J(this,100155),null===(i=this.Ei)?f(i=u(this.b),i.b):(y(i),i=i.e),i.a.d=e,i.a.g[0]=s[0],i.a.g[1]=s[1],i.a.g[2]=s[2],i.f=1,i.b.f=-1,this.Ei=i},ft.Gi=function(t){V(this,yt),this.d=1,this.b=new Q,this.c=t},ft.Fi=function(){V(this,1),this.d=2,this.Ei=null},ft.Ii=function(){V(this,2),this.d=1},ft.w=function(){V(this,1),this.d=yt
424
- var t=!1,s=[u=this._i[0],r=this._i[1],h=this._i[2]]
425
- if(0===u&&0===r&&0===h){for(var r=[-2e150,-2e150,-2e150],o=[2e150,2e150,2e150],h=[],c=[],u=(t=this.b.c).e;u!==t;u=u.e)for(var f=0;3>f;++f){var y=u.g[f]
426
- o[f]>y&&(o[f]=y,c[f]=u),y>r[f]&&(r[f]=y,h[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=c[u],c=[0,0,0],o=[o.g[0]-(h=h[u]).g[0],o.g[1]-h.g[1],o.g[2]-h.g[2]],f=[0,0,0],u=t.e;u!==t;u=u.e)f[0]=u.g[0]-h.g[0],f[1]=u.g[1]-h.g[1],f[2]=u.g[2]-h.g[2],c[0]=o[1]*f[2]-o[2]*f[1],c[1]=o[2]*f[0]-o[0]*f[2],c[2]=o[0]*f[1]-o[1]*f[0],(y=c[0]*c[0]+c[1]*c[1]+c[2]*c[2])>r&&(r=y,s[0]=c[0],s[1]=c[1],s[2]=c[2])
427
- 0>=r&&(s[0]=s[1]=s[2]=0,s[T(o)]=1)}else s[0]=0,s[1]=0,s[2]=1
428
- t=!0}for(r=((c=T(s))+1)%3,h=(c+2)%3,c=s[c]>0?1:-1,s=(u=this.b.c).e;s!==u;s=s.e)s.b=s.g[r],s.a=c*s.g[h]
444
+ for(var n=0;3>n;++n){var r=t[n];-1e150>r&&(r=-1e150,i=!0),r>1e150&&(r=1e150,i=!0),s[n]=r}i&&J(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]=s[0],i.a.g[1]=s[1],i.a.g[2]=s[2],i.f=1,i.b.f=-1,this.Li=i},ft.Fi=function(t){V(this,yt),this.d=1,this.b=new Q,this.c=t},ft.ki=function(){V(this,1),this.d=2,this.Li=null},ft.Ci=function(){V(this,2),this.d=1},ft.w=function(){V(this,1),this.d=yt
445
+ var t=!1,s=[u=this.Mi[0],r=this.Mi[1],h=this.Mi[2]]
446
+ if(0===u&&0===r&&0===h){for(var r=[-2e150,-2e150,-2e150],o=[2e150,2e150,2e150],h=[],l=[],u=(t=this.b.c).e;u!==t;u=u.e)for(var f=0;3>f;++f){var y=u.g[f]
447
+ o[f]>y&&(o[f]=y,l[f]=u),y>r[f]&&(r[f]=y,h[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]-(h=h[u]).g[0],o.g[1]-h.g[1],o.g[2]-h.g[2]],f=[0,0,0],u=t.e;u!==t;u=u.e)f[0]=u.g[0]-h.g[0],f[1]=u.g[1]-h.g[1],f[2]=u.g[2]-h.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,s[0]=l[0],s[1]=l[1],s[2]=l[2])
448
+ 0>=r&&(s[0]=s[1]=s[2]=0,s[_(o)]=1)}else s[0]=0,s[1]=0,s[2]=1
449
+ t=!0}for(r=((l=_(s))+1)%3,h=(l+2)%3,l=s[l]>0?1:-1,s=(u=this.b.c).e;s!==u;s=s.e)s.b=s.g[r],s.a=l*s.g[h]
429
450
  if(t){for(s=0,u=(t=this.b.a).b;u!==t;u=u.b)if((r=u.a).f>0)do{s+=(r.a.b-r.b.a.b)*(r.a.a+r.b.a.a),r=r.e}while(r!==u.a)
430
- if(0>s)for(t=(s=this.b.c).e;t!==s;t=t.e)t.a=-t.a}for(this.n=!1,u=(s=this.b.b).xi;u!==s;u=t)t=u.xi,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.xi),d(r)),u!==t&&u!==t.b||(t=t.xi),d(u))
431
- for(this.e=s=new tt,u=(t=this.b.c).e;u!==t;u=u.e)u.xi=et(s,u)
451
+ if(0>s)for(t=(s=this.b.c).e;t!==s;t=t.e)t.a=-t.a}for(this.n=!1,u=(s=this.b.b)._i;u!==s;u=t)t=u._i,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._i),d(r)),u!==t&&u!==t.b||(t=t._i),d(u))
452
+ for(this.e=s=new tt,u=(t=this.b.c).e;u!==t;u=u.e)u._i=et(s,u)
432
453
  for((t=>{t.d=[]
433
454
  for(var e=0;t.a>e;e++)t.d[e]=e
434
455
  t.d.sort((t=>(e,s)=>i(t[e],t[s])?1:-1)(t.c)),t.e=!0,(t=>{for(var e=t.a;e>=1;--e)ht(t,e)
435
- t.xi=!0})(t.b)})(s),this.f=new R(this),z(this,-dt),z(this,dt);null!==(s=it(this.e));){for(;;){t:if(u=this.e,0===u.a)t=rt(u.b)
456
+ t._i=!0})(t.b)})(s),this.f=new z(this),R(this,-dt),R(this,dt);null!==(s=it(this.e));){for(;;){t:if(u=this.e,0===u.a)t=rt(u.b)
436
457
  else if(t=u.c[u.d[u.a-1]],0!==u.b.a&&(u=rt(u.b),i(u,t))){t=u
437
458
  break t}if(null===t||!e(t,s))break
438
- t=it(this.e),B(this,s.c,t.c)}D(this,s)}for(this.a=this.f.a.a.b.a.a,s=0;null!==(t=this.f.a.a.b);)t.xi||++s,A(t)
459
+ t=it(this.e),B(this,s.c,t.c)}P(this,s)}for(this.a=this.f.a.a.b.a.a,s=0;null!==(t=this.f.a.a.b);)t._i||++s,A(t)
439
460
  for(this.f=null,(s=this.e).b=null,s.d=null,this.e=s.c=null,u=(s=this.b).a.b;u!==s.a;u=t)t=u.b,(u=u.a).e.e===u&&(E(u.c,u),d(u))
440
- if(!this.n){if(s=this.b,this.Ai)for(u=s.b.xi;u!==s.b;u=t)t=u.xi,u.b.d.c!==u.d.c?u.f=u.d.c?1:-1:d(u)
461
+ if(!this.n){if(s=this.b,this.Ii)for(u=s.b._i;u!==s.b;u=t)t=u._i,u.b.d.c!==u.d.c?u.f=u.d.c?1:-1:d(u)
441
462
  else for(u=s.a.b;u!==s.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,h=void 0;u.e!==r;)if(i(u.b.a,r.a)){for(;r.e!==u&&(a(r.e)||0>=n(r.a,r.b.a,r.e.b.a));)r=(h=p(r.e,r)).b
442
- r=r.c.b}else{for(;r.e!==u&&(l(u.c.b)||n(u.b.a,u.a,u.c.b.a)>=0);)u=(h=p(u,u.c.b)).b
443
- u=u.e}for(;r.e.e!==u;)r=(h=p(r.e,r)).b}if(this.xi||this.bi||this.Li||this.Mi)if(this.Ai){for(t=(s=this.b).a.b;t!==s.a;t=t.b)if(t.c){this.xi&&this.xi(2,this.c),u=t.a
444
- do{this.Li&&this.Li(u.a.d,this.c),u=u.e}while(u!==t.a)
445
- this.bi&&this.bi(this.c)}}else{for(t=!!this.Mi,u=!1,r=-1,h=(s=this.b).a.d;h!==s.a;h=h.d)if(h.c){u||(this.xi&&this.xi(4,this.c),u=!0),c=h.a
446
- do{t&&r!==(o=c.b.d.c?0:1)&&(r=o,this.Mi&&this.Mi(!!r,this.c)),this.Li&&this.Li(c.a.d,this.c),c=c.e}while(c!==h.a)}u&&this.bi&&this.bi(this.c)}if(this.r){for(u=(s=this.b).a.b;u!==s.a;u=t)if(t=u.b,!u.c){h=(r=u.a).e,c=void 0
447
- do{h=(c=h).e,c.d=null,null===c.b.d&&(c.c===c?b(c.a,null):(c.a.c=c.c,w(c,X(c))),(o=c.b).c===o?b(o.a,null):(o.a.c=o.c,w(o,X(o))),x(c))}while(c!==r)
448
- 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},q.Oi={GluTesselator:H,Ci:{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},ki:{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.$i=H.prototype.x,H.prototype.Ui=H.prototype.B,H.prototype.Pi=H.prototype.y,H.prototype.Ni=H.prototype.A,H.prototype.Di=H.prototype.z,H.prototype.zi=H.prototype.C,H.prototype.Ri=H.prototype.Gi,H.prototype.Wi=H.prototype.Fi,H.prototype.ji=H.prototype.Ii,H.prototype.Hi=H.prototype.w,t.exports=q.Oi})(J)
463
+ r=r.c.b}else{for(;r.e!==u&&(c(u.c.b)||n(u.b.a,u.a,u.c.b.a)>=0);)u=(h=p(u,u.c.b)).b
464
+ u=u.e}for(;r.e.e!==u;)r=(h=p(r.e,r)).b}if(this._i||this.Ei||this.Gi||this.Oi)if(this.Ii){for(t=(s=this.b).a.b;t!==s.a;t=t.b)if(t.c){this._i&&this._i(2,this.c),u=t.a
465
+ do{this.Gi&&this.Gi(u.a.d,this.c),u=u.e}while(u!==t.a)
466
+ this.Ei&&this.Ei(this.c)}}else{for(t=!!this.Oi,u=!1,r=-1,h=(s=this.b).a.d;h!==s.a;h=h.d)if(h.c){u||(this._i&&this._i(4,this.c),u=!0),l=h.a
467
+ do{t&&r!==(o=l.b.d.c?0:1)&&(r=o,this.Oi&&this.Oi(!!r,this.c)),this.Gi&&this.Gi(l.a.d,this.c),l=l.e}while(l!==h.a)}u&&this.Ei&&this.Ei(this.c)}if(this.r){for(u=(s=this.b).a.b;u!==s.a;u=t)if(t=u.b,!u.c){h=(r=u.a).e,l=void 0
468
+ do{h=(l=h).e,l.d=null,null===l.b.d&&(l.c===l?b(l.a,null):(l.a.c=l.c,v(l,X(l))),(o=l.b).c===o?b(o.a,null):(o.a.c=o.c,v(o,X(o))),x(l))}while(l!==r)
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},q.Bi={GluTesselator:H,Ui:{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},$i:{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},Ni:{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.Di=H.prototype.x,H.prototype.Pi=H.prototype.B,H.prototype.Ri=H.prototype.y,H.prototype.zi=H.prototype.A,H.prototype.Wi=H.prototype.z,H.prototype.ji=H.prototype.C,H.prototype.Hi=H.prototype.Fi,H.prototype.Vi=H.prototype.ki,H.prototype.qi=H.prototype.Ci,H.prototype.Ji=H.prototype.w,t.exports=q.Bi})(J)
449
470
  var Y=J.exports
450
- class K{process(t,e=!0,i=!1){if(0===t.length)return{Vi:{vertices:[],indices:[]},qi:[]}
451
- const s=t.filter(t=>t.points.length>=3)
452
- return 0===s.length?{Vi:{vertices:[],indices:[]},qi:[]}:(c.log(`Tessellator: removeOverlaps=${e}, processing ${s.length} paths`),this.Ji(s,e,i))}Ji(t,e,i){const s=i||e?t:t.map(t=>this.Yi(t))
453
- let n=this.Ki(s)
454
- if(e){c.log("Two-pass: boundary extraction then triangulation"),u.start("Tessellator.boundaryPass",{Xi:n.length})
455
- const t=this.Qi(n,"boundary")
456
- if(u.end("Tessellator.boundaryPass"),!t)return c.warn("libtess returned empty result from boundary pass"),{Vi:{vertices:[],indices:[]},qi:[]}
457
- n=this.Zi(t),c.log(`Boundary pass created ${n.length} contours. Starting triangulation pass.`)}else c.log("Single-pass triangulation for "+(i?"CFF":"TTF"))
458
- u.start("Tessellator.triangulationPass",{Xi:n.length})
459
- const r=this.Qi(n,"triangles")
460
- return u.end("Tessellator.triangulationPass"),r?{Vi:{vertices:r.vertices,indices:r.indices||[]},qi:n}:(c.warn(e?"libtess returned empty result from triangulation pass":"libtess returned empty result from single-pass triangulation"),{Vi:{vertices:[],indices:[]},qi:n})}Ki(t){return t.map(t=>{const e=[]
461
- for(const i of t.points)e.push(i.x,i.y)
462
- return e})}Qi(t,e){const i=new Y.GluTesselator
463
- i.Ui(Y.Bi.GLU_TESS_WINDING_RULE,Y.Ci.GLU_TESS_WINDING_NONZERO)
471
+ class K{process(t,e=!0,i=!1,s=!0){if(0===t.length)return{Yi:{vertices:[],indices:[]},Ki:[]}
472
+ const n=t.filter(t=>t.points.length>=3)
473
+ return 0===n.length?{Yi:{vertices:[],indices:[]},Ki:[]}:this.Xi(n,e,i,s)}Xi(t,e,i,s){let n,r
474
+ i||e?(n=this.Qi(t),r=n):(r=this.Qi(t,!0),(e||s)&&(n=this.Qi(t)))
475
+ let o=s?n??this.Qi(t):[]
476
+ if(e){const t=this.Zi(n,"boundary")
477
+ if(!t)return l.warn("libtess returned empty result from boundary pass"),{Yi:{vertices:[],indices:[]},Ki:[]}
478
+ r=this.ts(t),s&&(o=r)}else if(s&&!i&&this.es(o)){const t=this.Zi(o,"boundary")
479
+ t&&(o=this.ts(t))}const h=this.Zi(r,"triangles")
480
+ return h?{Yi:{vertices:h.vertices,indices:h.indices||[]},Ki:o}:(l.warn(e?"libtess returned empty result from triangulation pass":"libtess returned empty result from single-pass triangulation"),{Yi:{vertices:[],indices:[]},Ki:o})}Qi(t,e=!1){const i=Array(t.length)
481
+ for(let s=0;t.length>s;s++){const n=t[s].points,r=n.length,o=r>1&&n[0].x===n[r-1].x&&n[0].y===n[r-1].y?r-1:r,h=Array(2*(o+1))
482
+ let a=0
483
+ if(e)for(let t=o-1;t>=0;t--){const e=n[t]
484
+ h[a++]=e.x,h[a++]=e.y}else for(let t=0;o>t;t++){const e=n[t]
485
+ h[a++]=e.x,h[a++]=e.y}2>a||(h[a++]=h[0],h[a++]=h[1]),i[s]=h}return i}Zi(t,e){const i=new Y.GluTesselator
486
+ i.Pi(Y.Ni.GLU_TESS_WINDING_RULE,Y.Ui.GLU_TESS_WINDING_NONZERO)
464
487
  const s=[],n=[],r=[]
465
488
  let o=[]
466
- "boundary"===e&&i.Ui(Y.Bi.GLU_TESS_BOUNDARY_ONLY,!0),"triangles"===e?i.Di(Y.Bi.GLU_TESS_VERTEX_DATA,t=>{n.push(t)}):(i.Di(Y.Bi.GLU_TESS_BEGIN,()=>{o=[]}),i.Di(Y.Bi.GLU_TESS_VERTEX_DATA,t=>{o.push(t)}),i.Di(Y.Bi.GLU_TESS_END,()=>{o.length>0&&r.push([...o])})),i.Di(Y.Bi.GLU_TESS_COMBINE,t=>{const e=s.length/2
467
- return s.push(t[0],t[1]),e}),i.Di(Y.Bi.GLU_TESS_ERROR,t=>{c.warn("libtess error: "+t)}),i.Ni(0,0,1),i.Ri(null)
468
- for(const e of t){i.Wi()
489
+ "boundary"===e&&i.Pi(Y.Ni.GLU_TESS_BOUNDARY_ONLY,!0),"triangles"===e?i.Wi(Y.Ni.GLU_TESS_VERTEX_DATA,t=>{n.push(t)}):(i.Wi(Y.Ni.GLU_TESS_BEGIN,()=>{o=[]}),i.Wi(Y.Ni.GLU_TESS_VERTEX_DATA,t=>{o.push(t)}),i.Wi(Y.Ni.GLU_TESS_END,()=>{o.length>0&&r.push(o)})),i.Wi(Y.Ni.GLU_TESS_COMBINE,t=>{const e=s.length/2
490
+ return s.push(t[0],t[1]),e}),i.Wi(Y.Ni.GLU_TESS_ERROR,t=>{l.warn("libtess error: "+t)}),i.zi(0,0,1),i.Hi(null)
491
+ for(const e of t){i.Vi()
469
492
  for(let t=0;e.length>t;t+=2){const n=s.length/2
470
- s.push(e[t],e[t+1]),i.zi([e[t],e[t+1],0],n)}i.ji()}return i.Hi(),0===s.length?null:"triangles"===e?{vertices:s,indices:n}:{vertices:s,ts:r}}Zi(t){if(!t.ts)return[]
493
+ s.push(e[t],e[t+1]),i.ji([e[t],e[t+1],0],n)}i.qi()}return i.Ji(),0===s.length?null:"triangles"===e?{vertices:s,indices:n}:{vertices:s,ss:r}}ts(t){if(!t.ss)return[]
471
494
  const e=[]
472
- for(const i of t.ts){const s=[]
495
+ for(const i of t.ss){const s=[]
473
496
  for(const e of i){const i=2*e
474
- s.push(t.vertices[i],t.vertices[i+1])}s.length>2&&(s[0]===s[s.length-2]&&s[1]===s[s.length-1]||s.push(s[0],s[1])),e.push(s)}return e}Yi(t){return{...t,points:[...t.points].reverse()}}}class X{constructor(){}es(t,e=0,i){const s=t.Vi.vertices,n=t.Vi.indices,r=s.length/2
497
+ s.push(t.vertices[i],t.vertices[i+1])}s.length>2&&(s[0]===s[s.length-2]&&s[1]===s[s.length-1]||s.push(s[0],s[1])),e.push(s)}return e}es(t){if(0===t.length)return!1
498
+ if(1===t.length)return!1
499
+ let e=null
500
+ for(const i of t){const t=0>this.ns(i)?-1:1
501
+ if(null===e)e=t
502
+ else if(t!==e)return!0}return!1}ns(t){let e=0
503
+ const i=t.length
504
+ if(6>i)return 0
505
+ for(let s=0;i>s;s+=2)e+=t[s]*t[(s+3)%i]-t[(s+2)%i]*t[s+1]
506
+ return e/2}}class X{constructor(){}rs(t,e=0,i){const s=t.Yi.vertices,n=t.Yi.indices,r=s.length/2
475
507
  let o=0
476
- if(0!==e)for(const e of t.qi){const t=e.length/2
477
- 2>t||(o+=t-1)}const h=(0===e?r:2*r)+(0===e?0:4*o),a=new Float32Array(3*h),l=new Float32Array(3*h),c=new Uint32Array(0===e?n.length:2*n.length+6*o)
508
+ if(0!==e)for(const e of t.Ki){const t=e.length/2
509
+ 2>t||(o+=t-1)}const h=(0===e?r:2*r)+(0===e?0:4*o),a=new Float32Array(3*h),c=new Float32Array(3*h),l=new Uint32Array(0===e?n.length:2*n.length+6*o)
478
510
  if(0===e){let t=0
479
- for(let e=0;s.length>e;e+=2)a[t]=s[e],a[t+1]=s[e+1],a[t+2]=0,l[t]=0,l[t+1]=0,l[t+2]=1,t+=3
480
- for(let t=0;n.length>t;t++)c[t]=n[t]
481
- return{vertices:a,normals:l,indices:c}}const u=25e-6*i,f=e>u?e:u
482
- for(let t=0,e=0;s.length>t;t+=2,e++){const i=3*e
483
- a[i]=s[t],a[i+1]=s[t+1],a[i+2]=0,l[i]=0,l[i+1]=0,l[i+2]=-1}for(let t=0,e=0;s.length>t;t+=2,e++){const i=3*(r+e)
484
- a[i]=s[t],a[i+1]=s[t+1],a[i+2]=f,l[i]=0,l[i+1]=0,l[i+2]=1}for(let t=0;n.length>t;t++)c[t]=n[n.length-1-t]
485
- for(let t=0;n.length>t;t++)c[n.length+t]=n[t]+r
511
+ for(let e=0;s.length>e;e+=2)a[t]=s[e],a[t+1]=s[e+1],a[t+2]=0,c[t]=0,c[t+1]=0,c[t+2]=1,t+=3
512
+ for(let t=0;n.length>t;t++)l[t]=n[t]
513
+ return{vertices:a,normals:c,indices:l}}const u=25e-6*i,f=e>u?e:u
514
+ for(let t=0,e=0;s.length>t;t+=2,e++){const i=s[t],n=s[t+1],o=3*e
515
+ a[o]=i,a[o+1]=n,a[o+2]=0,c[o]=0,c[o+1]=0,c[o+2]=-1
516
+ const h=3*(r+e)
517
+ a[h]=i,a[h+1]=n,a[h+2]=f,c[h]=0,c[h+1]=0,c[h+2]=1}for(let t=0;n.length>t;t++)l[t]=n[n.length-1-t]
518
+ for(let t=0;n.length>t;t++)l[n.length+t]=n[t]+r
486
519
  let d=2*r,y=2*n.length
487
- for(const e of t.qi)for(let t=0;e.length-2>t;t+=2){const i=e[t],s=e[t+1],n=e[t+2],r=e[t+3],o=n-i,h=r-s,u=o*o+h*h
488
- let p=0,g=0
520
+ for(const e of t.Ki)for(let t=0;e.length-2>t;t+=2){const i=e[t],s=e[t+1],n=e[t+2],r=e[t+3],o=n-i,h=r-s,u=o*o+h*h
521
+ let p=0,w=0
489
522
  if(u>0){const t=1/Math.sqrt(u)
490
- p=h*t,g=-o*t}const w=d,m=3*w
491
- a[m]=i,a[m+1]=s,a[m+2]=0,a[m+3]=n,a[m+4]=r,a[m+5]=0,a[m+6]=i,a[m+7]=s,a[m+8]=f,a[m+9]=n,a[m+10]=r,a[m+11]=f,l[m]=p,l[m+1]=g,l[m+2]=0,l[m+3]=p,l[m+4]=g,l[m+5]=0,l[m+6]=p,l[m+7]=g,l[m+8]=0,l[m+9]=p,l[m+10]=g,l[m+11]=0,c[y++]=w,c[y++]=w+1,c[y++]=w+2,c[y++]=w+1,c[y++]=w+3,c[y++]=w+2,d+=4}return{vertices:a,normals:l,indices:c}}}class Q{constructor(){}ss(t,e){u.start("BoundaryClusterer.cluster",{ns:t.length})
492
- const i=t.length
493
- if(0===i)return u.end("BoundaryClusterer.cluster"),[]
494
- if(1===i)return u.end("BoundaryClusterer.cluster"),[[0]]
495
- const s=this.rs(t,e)
496
- return u.end("BoundaryClusterer.cluster"),s}rs(t,e){function i(t){return a[t]===t?t:a[t]=i(a[t])}function s(t,e){const s=i(t),n=i(e)
497
- s!==n&&(l[n]>l[s]?a[s]=n:l[s]>l[n]?a[n]=s:(a[n]=s,l[s]++))}const n=t.length,r=Array(n),o=Array(2*n)
523
+ p=h*t,w=-o*t}const v=d,g=3*v
524
+ a[g]=i,a[g+1]=s,a[g+2]=0,a[g+3]=n,a[g+4]=r,a[g+5]=0,a[g+6]=i,a[g+7]=s,a[g+8]=f,a[g+9]=n,a[g+10]=r,a[g+11]=f,c[g]=p,c[g+1]=w,c[g+2]=0,c[g+3]=p,c[g+4]=w,c[g+5]=0,c[g+6]=p,c[g+7]=w,c[g+8]=0,c[g+9]=p,c[g+10]=w,c[g+11]=0,l[y++]=v,l[y++]=v+1,l[y++]=v+2,l[y++]=v+1,l[y++]=v+3,l[y++]=v+2,d+=4}return{vertices:a,normals:c,indices:l}}}class Q{constructor(){}hs(t,e){const i=t.length
525
+ return 0===i?[]:1===i?[[0]]:this.cs(t,e)}cs(t,e){function i(t){return a[t]===t?t:a[t]=i(a[t])}function s(t,e){const s=i(t),n=i(e)
526
+ s!==n&&(c[n]>c[s]?a[s]=n:c[s]>c[n]?a[n]=s:(a[n]=s,c[s]++))}const n=t.length,r=Array(n),o=Array(2*n)
498
527
  let h=0
499
- for(let i=0;n>i;i++)r[i]=this.hs(t[i],e[i]),o[h++]=[r[i].ls,0,i],o[h++]=[r[i].cs,1,i]
528
+ for(let i=0;n>i;i++)r[i]=this.ls(t[i],e[i]),o[h++]=[r[i].us,0,i],o[h++]=[r[i].fs,1,i]
500
529
  o.sort((t,e)=>t[0]-e[0]||t[1]-e[1])
501
- const a=Array.from({length:n},(t,e)=>e),l=Array(n).fill(0),c=new Set
530
+ const a=Array.from({length:n},(t,e)=>e),c=Array(n).fill(0),l=new Set
502
531
  for(const[,t,e]of o)if(0===t){const t=r[e]
503
- for(const i of c){const n=r[i]
504
- n.us+.001>t.fs&&t.us>n.fs-.001&&s(e,i)}c.add(e)}else c.delete(e)
532
+ for(const i of l){const n=r[i]
533
+ n.ds+.001>t.ys&&t.ds>n.ys-.001&&s(e,i)}l.add(e)}else l.delete(e)
505
534
  const u=new Map
506
535
  for(let t=0;n>t;t++){const e=i(t)
507
536
  let s=u.get(e)
508
- s||(s=[],u.set(e,s)),s.push(t)}return Array.from(u.values())}hs(t,e){return{ls:t.bounds.min.x+e.x,fs:t.bounds.min.y+e.y,cs:t.bounds.max.x+e.x,us:t.bounds.max.y+e.y}}}class Z{constructor(t){this.ds=[],this.ys=new Map,this.compare=t}k(t){const e=this.ys.get(t)
509
- if(void 0!==e)return this.ps(e),void this.gs(e)
510
- const i=this.ds.length
511
- this.ds.push(t),this.ys.set(t,i),this.ps(i)}ws(){const t=this.ds.length
537
+ s||(s=[],u.set(e,s)),s.push(t)}return Array.from(u.values())}ls(t,e){return{us:t.bounds.min.x+e.x,ys:t.bounds.min.y+e.y,fs:t.bounds.max.x+e.x,ds:t.bounds.max.y+e.y}}}class Z{constructor(t){this.ps=[],this.ws=new Map,this.compare=t}k(t){const e=this.ws.get(t)
538
+ if(void 0!==e)return this.vs(e),void this.gs(e)
539
+ const i=this.ps.length
540
+ this.ps.push(t),this.ws.set(t,i),this.vs(i)}xs(){const t=this.ps.length
512
541
  if(!t)return
513
- if(1===t){const t=this.ds.pop()
514
- return this.ys.clear(),t}const e=this.ds[0],i=this.ds.pop()
515
- return this.ds[0]=i,this.ys.delete(e),this.ys.set(i,0),this.gs(0),e}update(t){const e=this.ys.get(t)
516
- void 0!==e?(this.ps(e),this.gs(e)):this.k(t)}vs(){return!this.ds.length}xs(t,e){const i=this.ds[t],s=this.ds[e]
517
- this.ds[t]=s,this.ds[e]=i,this.ys.set(i,e),this.ys.set(s,t)}ps(t){const e=this.ds[t]
518
- for(;t>0;){const i=t-1>>1,s=this.ds[i]
542
+ if(1===t){const t=this.ps.pop()
543
+ return this.ws.clear(),t}const e=this.ps[0],i=this.ps.pop()
544
+ return this.ps[0]=i,this.ws.delete(e),this.ws.set(i,0),this.gs(0),e}update(t){const e=this.ws.get(t)
545
+ void 0!==e?(this.vs(e),this.gs(e)):this.k(t)}bs(){return!this.ps.length}Ss(t,e){const i=this.ps[t],s=this.ps[e]
546
+ this.ps[t]=s,this.ps[e]=i,this.ws.set(i,e),this.ws.set(s,t)}vs(t){const e=this.ps[t]
547
+ for(;t>0;){const i=t-1>>1,s=this.ps[i]
519
548
  if(this.compare(e,s)>=0)break
520
- this.ds[t]=s,this.ys.set(s,t),t=i}this.ds[t]=e,this.ys.set(e,t)}gs(t){const e=this.ds[t],i=this.ds.length,s=i>>1
549
+ this.ps[t]=s,this.ws.set(s,t),t=i}this.ps[t]=e,this.ws.set(e,t)}gs(t){const e=this.ps[t],i=this.ps.length,s=i>>1
521
550
  for(;s>t;){const s=1+(t<<1),n=s+1
522
551
  let r=t,o=e
523
- const h=this.ds[s]
524
- if(0>this.compare(h,o)&&(r=s,o=h),i>n){const t=this.ds[n]
552
+ const h=this.ps[s]
553
+ if(0>this.compare(h,o)&&(r=s,o=h),i>n){const t=this.ps[n]
525
554
  0>this.compare(t,o)&&(r=n,o=t)}if(r===t)break
526
- this.ds[t]=o,this.ys.set(o,t),t=r}this.ds[t]=e,this.ys.set(e,t)}}const tt={enabled:!0,bs:1,Ss:.0087,Ts:10}
527
- class et{constructor(t){this.stats={Es:0,_s:0,As:0},this.config=t}Ls(t){this.config=t}Ms(t){if(!this.config.enabled||2>=t.points.length)return t
528
- this.stats.As+=t.points.length
529
- let e=[...t.points]
530
- return 5>e.length?t:(e=this.Gs(e,this.config.bs),3>e.length?t:(e=this.Fs(e,this.config.Ss),3>e.length?t:{...t,points:e}))}Gs(t,e){if(3>=t.length)return t
531
- const i=t.length,s=t.map((t,e)=>({index:e,Is:1/0,fi:null,next:null}))
532
- for(let t=0;s.length>t;t++)s[t].fi=s[t-1]||null,s[t].next=s[t+1]||null
533
- const n=new Z((t,e)=>t.Is-e.Is)
555
+ this.ps[t]=o,this.ws.set(o,t),t=r}this.ps[t]=e,this.ws.set(e,t)}}const tt={enabled:!0,_s:1,Es:.0087,Ts:10}
556
+ class et{constructor(t){this.stats={As:0,Ls:0,Ms:0},this.config=t}Is(t){this.config=t}Gs(t){if(!this.config.enabled||2>=t.points.length)return t
557
+ this.stats.Ms+=t.points.length
558
+ const e=t.points
559
+ if(5>e.length)return t
560
+ let i=this.Os(e,this.config._s)
561
+ return 3>i.length?t:(i=this.Fs(i,this.config.Es),3>i.length?t:{...t,points:i})}Os(t,e){if(3>=t.length)return t
562
+ const i=t.length,s=t.map((t,e)=>({index:e,ks:1/0,pi:null,next:null}))
563
+ for(let t=0;s.length>t;t++)s[t].pi=s[t-1]||null,s[t].next=s[t+1]||null
564
+ const n=new Z((t,e)=>t.ks-e.ks)
534
565
  for(let e=1;s.length-1>e;e++){const i=s[e]
535
- i.Is=this.Os(t[i.fi.index],t[i.index],t[i.next.index]),n.k(i)}let r=i
536
- for(;!n.vs()&&r>3;){const i=n.ws()
537
- if(!i||i.Is>e)break
538
- if(this.config.Ts>0&&i.fi&&i.next){const e=t[i.index],s=t[i.next.index],n=t[i.fi.index].ei(e),r=e.ei(s)
539
- if(this.config.Ts>n||this.config.Ts>r)continue}i.fi&&(i.fi.next=i.next),i.next&&(i.next.fi=i.fi),r--,i.fi&&i.fi.fi&&(i.fi.Is=this.Os(t[i.fi.fi.index],t[i.fi.index],t[i.next.index]),n.update(i.fi)),i.next&&i.next.next&&(i.next.Is=this.Os(t[i.fi.index],t[i.next.index],t[i.next.next.index]),n.update(i.next))}const o=[]
566
+ i.ks=this.Cs(t[i.pi.index],t[i.index],t[i.next.index]),n.k(i)}let r=i
567
+ for(;!n.bs()&&r>3;){const i=n.xs()
568
+ if(!i||i.ks>e)break
569
+ if(this.config.Ts>0&&i.pi&&i.next){const e=t[i.index],s=t[i.next.index],n=t[i.pi.index].ni(e),r=e.ni(s)
570
+ if(this.config.Ts>n||this.config.Ts>r)continue}i.pi&&(i.pi.next=i.next),i.next&&(i.next.pi=i.pi),r--,i.pi&&i.pi.pi&&(i.pi.ks=this.Cs(t[i.pi.pi.index],t[i.pi.index],t[i.next.index]),n.update(i.pi)),i.next&&i.next.next&&(i.next.ks=this.Cs(t[i.pi.index],t[i.next.index],t[i.next.next.index]),n.update(i.next))}const o=[]
540
571
  let h=s[0]
541
572
  for(;h;)o.push(t[h.index]),h=h.next
542
- return this.stats.Es+=i-o.length,o}Fs(t,e){if(2>=t.length)return t
573
+ return this.stats.As+=i-o.length,o}Fs(t,e){if(2>=t.length)return t
543
574
  const i=[t[0]]
544
- for(let s=1;t.length-1>s;s++){const n=t[s-1],r=t[s],o=t[s+1],h=r.x-n.x,a=r.y-n.y,l=o.x-r.x,c=o.y-r.y,u=this.config.Ts*this.config.Ts
545
- Math.abs(Math.atan2(h*c-a*l,h*l+a*c))>e||u>h*h+a*a||u>l*l+c*c?i.push(r):this.stats._s++}return i.push(t[t.length-1]),i}Os(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}}Cs(){this.stats={Es:0,_s:0,As:0}}}const it={ks:.5,Bs:.2},st=1e-6
546
- class nt{constructor(t){this.$s={...it,...t}}Us(t){this.$s={...it,...t}}Ps(t,e,i){const s=[]
547
- return this.Ns(t.x,t.y,e.x,e.y,i.x,i.y,s),this.Ds(i.x,i.y,s),s}zs(t,e,i,s){const n=[]
548
- return this.Rs(t.x,t.y,e.x,e.y,i.x,i.y,s.x,s.y,n),this.Ds(s.x,s.y,n),n}Ns(t,e,i,s,n,r,o,h=0){if(h>16)return
549
- const a=(t+i)/2,l=(e+s)/2,c=(i+n)/2,u=(s+r)/2,f=(a+c)/2,d=(l+u)/2,y=n-t,p=r-e,g=Math.abs((i-n)*p-(s-r)*y),w=this.$s.ks??it.ks,m=w*w
550
- if(g>st){if(m*(y*y+p*p)>=g*g){const h=this.$s.Bs??it.Bs
551
- if(0>=h)return void this.Ds(i,s,o)
552
- {const a=i-t,l=s-e,c=n-i,u=r-s
553
- if(h>Math.abs(Math.atan2(a*u-l*c,a*c+l*u)))return void this.Ds(i,s,o)}}}else{const n=y*y+p*p
554
- if(0===n){if(m>=(i-t)*(i-t)+(s-e)*(s-e))return void this.Ds(i,s,o)}else{const r=((i-t)*y+(s-e)*p)/n
555
- if(r>0&&1>r&&m*n>=g*g)return void this.Ds(i,s,o)}}this.Ns(t,e,a,l,f,d,o,h+1),this.Ns(f,d,c,u,n,r,o,h+1)}Rs(t,e,i,s,n,r,o,h,a,l=0){if(l>16)return
556
- const c=(t+i)/2,u=(e+s)/2,f=(i+n)/2,d=(s+r)/2,y=(n+o)/2,p=(r+h)/2,g=(c+f)/2,w=(u+d)/2,m=(f+y)/2,v=(d+p)/2,x=(g+m)/2,b=(w+v)/2,S=o-t,T=h-e,E=Math.abs((i-o)*T-(s-h)*S),_=Math.abs((n-o)*T-(r-h)*S),A=this.$s.ks??it.ks,L=A*A
575
+ for(let s=1;t.length-1>s;s++){const n=t[s-1],r=t[s],o=t[s+1],h=r.x-n.x,a=r.y-n.y,c=o.x-r.x,l=o.y-r.y,u=this.config.Ts*this.config.Ts
576
+ Math.abs(Math.atan2(h*l-a*c,h*c+a*l))>e||u>h*h+a*a||u>c*c+l*l?i.push(r):this.stats.Ls++}return i.push(t[t.length-1]),i}Cs(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}}Bs(){this.stats={As:0,Ls:0,Ms:0}}}const it={Us:.5,$s:.2},st=1e-6
577
+ class nt{constructor(t){this.Ns={...it,...t}}Ds(t){this.Ns={...it,...t}}Ps(t,e,i){const s=[]
578
+ return this.Rs(t.x,t.y,e.x,e.y,i.x,i.y,s),this.zs(i.x,i.y,s),s}Ws(t,e,i,s){const n=[]
579
+ return this.js(t.x,t.y,e.x,e.y,i.x,i.y,s.x,s.y,n),this.zs(s.x,s.y,n),n}Rs(t,e,i,s,n,r,o,h=0){if(h>16)return
580
+ const a=(t+i)/2,c=(e+s)/2,l=(i+n)/2,u=(s+r)/2,f=(a+l)/2,d=(c+u)/2,y=n-t,p=r-e,w=Math.abs((i-n)*p-(s-r)*y),v=this.Ns.Us??it.Us,g=v*v
581
+ if(w>st){if(g*(y*y+p*p)>=w*w){const h=this.Ns.$s??it.$s
582
+ if(0>=h)return void this.zs(i,s,o)
583
+ {const a=i-t,c=s-e,l=n-i,u=r-s
584
+ if(h>Math.abs(Math.atan2(a*u-c*l,a*l+c*u)))return void this.zs(i,s,o)}}}else{const n=y*y+p*p
585
+ if(0===n){if(g>=(i-t)*(i-t)+(s-e)*(s-e))return void this.zs(i,s,o)}else{const r=((i-t)*y+(s-e)*p)/n
586
+ if(r>0&&1>r&&g*n>=w*w)return void this.zs(i,s,o)}}this.Rs(t,e,a,c,f,d,o,h+1),this.Rs(f,d,l,u,n,r,o,h+1)}js(t,e,i,s,n,r,o,h,a,c=0){if(c>16)return
587
+ const l=(t+i)/2,u=(e+s)/2,f=(i+n)/2,d=(s+r)/2,y=(n+o)/2,p=(r+h)/2,w=(l+f)/2,v=(u+d)/2,g=(f+y)/2,m=(d+p)/2,x=(w+g)/2,b=(v+m)/2,S=o-t,_=h-e,E=Math.abs((i-o)*_-(s-h)*S),T=Math.abs((n-o)*_-(r-h)*S),A=this.Ns.Us??it.Us,L=A*A
557
588
  let M=0
558
- switch(E>st&&(M|=1),_>st&&(M|=2),M){case 0:const l=S*S+T*T
559
- if(0===l){if(L>=(i-t)*(i-t)+(s-e)*(s-e)&&L>=(n-t)*(n-t)+(r-e)*(r-e))return this.Ds(i,s,a),void this.Ds(n,r,a)}else{const o=((i-t)*S+(s-e)*T)/l,h=((n-t)*S+(r-e)*T)/l
560
- if(o>0&&1>o&&h>0&&1>h&&L*l>=(E+_)*(E+_))return this.Ds(i,s,a),void this.Ds(n,r,a)}break
561
- case 1:if(L*(S*S+T*T)>=_*_){const t=this.$s.Bs??it.Bs
562
- if(0>=t)return this.Ds(i,s,a),void this.Ds(n,r,a)
563
- {const e=n-i,l=r-s,c=o-n,u=h-r
564
- if(t>Math.abs(Math.atan2(e*u-l*c,e*c+l*u)))return this.Ds(i,s,a),void this.Ds(n,r,a)}}break
565
- case 2:if(L*(S*S+T*T)>=E*E){const o=this.$s.Bs??it.Bs
566
- if(0>=o)return this.Ds(i,s,a),void this.Ds(n,r,a)
567
- {const h=i-t,l=s-e,c=n-i,u=r-s
568
- if(o>Math.abs(Math.atan2(h*u-l*c,h*c+l*u)))return this.Ds(i,s,a),void this.Ds(n,r,a)}}break
569
- case 3:if(L*(S*S+T*T)>=(E+_)*(E+_)){const l=this.$s.Bs??it.Bs
570
- if(0>=l)return this.Ds(i,s,a),void this.Ds(n,r,a)
571
- {const c=i-t,u=s-e,f=n-i,d=r-s,y=o-n,p=h-r
572
- if(l>Math.abs(Math.atan2(c*d-u*f,c*f+u*d))+Math.abs(Math.atan2(f*p-d*y,f*y+d*p)))return this.Ds(i,s,a),void this.Ds(n,r,a)}}}this.Rs(t,e,c,u,g,w,x,b,a,l+1),this.Rs(x,b,m,v,y,p,o,h,a,l+1)}Ds(t,e,i){const s=new D(t,e)
589
+ switch(E>st&&(M|=1),T>st&&(M|=2),M){case 0:const c=S*S+_*_
590
+ if(0===c){if(L>=(i-t)*(i-t)+(s-e)*(s-e)&&L>=(n-t)*(n-t)+(r-e)*(r-e))return this.zs(i,s,a),void this.zs(n,r,a)}else{const o=((i-t)*S+(s-e)*_)/c,h=((n-t)*S+(r-e)*_)/c
591
+ if(o>0&&1>o&&h>0&&1>h&&L*c>=(E+T)*(E+T))return this.zs(i,s,a),void this.zs(n,r,a)}break
592
+ case 1:if(L*(S*S+_*_)>=T*T){const t=this.Ns.$s??it.$s
593
+ if(0>=t)return this.zs(i,s,a),void this.zs(n,r,a)
594
+ {const e=n-i,c=r-s,l=o-n,u=h-r
595
+ if(t>Math.abs(Math.atan2(e*u-c*l,e*l+c*u)))return this.zs(i,s,a),void this.zs(n,r,a)}}break
596
+ case 2:if(L*(S*S+_*_)>=E*E){const o=this.Ns.$s??it.$s
597
+ if(0>=o)return this.zs(i,s,a),void this.zs(n,r,a)
598
+ {const h=i-t,c=s-e,l=n-i,u=r-s
599
+ if(o>Math.abs(Math.atan2(h*u-c*l,h*l+c*u)))return this.zs(i,s,a),void this.zs(n,r,a)}}break
600
+ case 3:if(L*(S*S+_*_)>=(E+T)*(E+T)){const c=this.Ns.$s??it.$s
601
+ if(0>=c)return this.zs(i,s,a),void this.zs(n,r,a)
602
+ {const l=i-t,u=s-e,f=n-i,d=r-s,y=o-n,p=h-r
603
+ 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.zs(i,s,a),void this.zs(n,r,a)}}}this.js(t,e,l,u,w,v,x,b,a,c+1),this.js(x,b,g,m,y,p,o,h,a,c+1)}zs(t,e,i){const s=new P(t,e)
573
604
  if(0===i.length)return void i.push(s)
574
605
  const n=i[i.length-1],r=s.x-n.x,o=s.y-n.y
575
- r*r+o*o>1e-12&&i.push(s)}}class rt{constructor(t,e){this.Ws=0,this.js=0,this.Hs=[],this.Vs=null,this.qs=null,this.Js={min:new D(1/0,1/0),max:new D(-1/0,-1/0)},this.Ys=[],this.Ks=[],this.Xs=[],this.Qs=new D(0,0),this.Zs=new nt(t),this.tn=new et({...tt,...e})}setPosition(t,e){this.Qs.set(t,e)}en(t,e){this.Qs.x+=t,this.Qs.y+=e}sn(t,e){this.Hs.length>0&&this.nn(),this.Ws=t,this.js=e,this.Hs=[],this.Js.min.set(1/0,1/0),this.Js.max.set(-1/0,-1/0),this.Ks.push(this.Qs.clone()),u.start("Glyph.polygonizeAndOptimize",{rn:t,hn:e})}nn(){this.Vs&&this.an(),this.Hs.length>0&&(this.Ys.push({rn:this.Ws,mi:[...this.Hs],bounds:{min:{x:this.Js.min.x,y:this.Js.min.y},max:{x:this.Js.max.x,y:this.Js.max.y}}}),this.Xs.push(this.js)),u.end("Glyph.polygonizeAndOptimize"),this.Hs=[]}ln(t,e){this.Vs&&this.an(),this.qs=new D(t,e),this.cn(this.qs),this.Vs={points:[this.qs],un:this.Ws}}fn(t,e){if(!this.Vs||!this.qs)return
576
- const i=new D(t,e)
577
- this.cn(i),this.Vs.points.push(i),this.qs=i}dn(t,e,i,s){if(!this.Vs||!this.qs)return
578
- const n=this.qs,r=new D(t,e),o=new D(i,s)
579
- if(st>Math.abs((r.x-o.x)*(o.y-n.y)-(r.y-o.y)*(o.x-n.x)))return void this.fn(i,s)
580
- const h=this.Zs.Ps(n,r,o)
581
- for(const t of h)this.cn(t)
582
- for(let t=0;h.length>t;t++)this.Vs.points.push(h[t])
583
- this.qs=o}yn(t,e,i,s,n,r){if(!this.Vs||!this.qs)return
584
- const o=this.qs,h=new D(t,e),a=new D(i,s),l=new D(n,r),c=l.x-o.x,u=l.y-o.y
585
- if(st>Math.abs((h.x-l.x)*u-(h.y-l.y)*c)&&st>Math.abs((a.x-l.x)*u-(a.y-l.y)*c))return void this.fn(n,r)
586
- const f=this.Zs.zs(o,h,a,l)
587
- for(const t of f)this.cn(t)
588
- for(let t=0;f.length>t;t++)this.Vs.points.push(f[t])
589
- this.qs=l}pn(){if(!this.Vs||!this.qs)return
590
- const t=this.Vs.points[0]
591
- this.qs.equals(t)||this.Vs.points.push(t),this.an()}an(){if(this.Vs){const t=this.tn.Ms(this.Vs)
592
- this.Hs.push(t),this.Vs=null,this.qs=null}}cn(t){this.Js.min.x=Math.min(this.Js.min.x,t.x),this.Js.min.y=Math.min(this.Js.min.y,t.y),this.Js.max.x=Math.max(this.Js.max.x,t.x),this.Js.max.y=Math.max(this.Js.max.y,t.y)}gn(){return this.Hs.length>0&&this.nn(),this.Ys}wn(){return this.Ks}mn(){return this.Xs}reset(){this.Ys=[],this.Ks=[],this.Xs=[],this.Hs=[],this.Vs=null,this.qs=null,this.Ws=0,this.js=0,this.Qs.set(0,0),this.Js={min:new D(1/0,1/0),max:new D(-1/0,-1/0)}}Us(t){this.Zs.Us(t)}vn(t){this.tn.Ls({...tt,...t})}xn(){return this.tn.getStats()}}class ot{constructor(){this.bn=null,this.Sn=null,this.Tn=null,this.En=null,this._n=null,this.An=0,this.position={x:0,y:0}}setPosition(t,e){this.position.x=t,this.position.y=e,this.Ln&&this.Ln.setPosition(t,e)}en(t,e){this.position.x+=t,this.position.y+=e,this.Ln&&this.Ln.en(t,e)}Mn(t){this.Ln=t}Gn(t,e){if(!t||!t.module||!t.hb)throw Error("Invalid font object")
593
- if(this.Ln=e,this.An)return
606
+ r*r+o*o>1e-12&&i.push(s)}}class rt{constructor(t,e){this.Hs=0,this.Vs=0,this.qs=[],this.Js=null,this.Ys=null,this.Ks={min:new P(1/0,1/0),max:new P(-1/0,-1/0)},this.Xs=[],this.Qs=[],this.Zs=[],this.tn=new P(0,0),this.en=new nt(t),this.sn=new et({...tt,...e})}setPosition(t,e){this.tn.set(t,e)}nn(t,e){this.tn.x+=t,this.tn.y+=e}rn(t,e){this.qs.length>0&&this.hn(),this.Hs=t,this.Vs=e,this.qs=[],this.Ks.min.set(1/0,1/0),this.Ks.max.set(-1/0,-1/0),this.Qs.push(this.tn.clone())}hn(){this.Js&&this.an(),this.qs.length>0&&(this.Xs.push({cn:this.Hs,Si:this.qs,bounds:{min:{x:this.Ks.min.x,y:this.Ks.min.y},max:{x:this.Ks.max.x,y:this.Ks.max.y}}}),this.Zs.push(this.Vs)),this.qs=[]}ln(t,e){this.Js&&this.an(),this.Ys=new P(t,e),this.un(this.Ys),this.Js={points:[this.Ys],fn:this.Hs}}dn(t,e){if(!this.Js||!this.Ys)return
607
+ const i=new P(t,e)
608
+ this.un(i),this.Js.points.push(i),this.Ys=i}yn(t,e,i,s){if(!this.Js||!this.Ys)return
609
+ const n=this.Ys,r=new P(t,e),o=new P(i,s)
610
+ if(st>Math.abs((r.x-o.x)*(o.y-n.y)-(r.y-o.y)*(o.x-n.x)))return void this.dn(i,s)
611
+ const h=this.en.Ps(n,r,o)
612
+ for(let t=0;h.length>t;t++){const e=h[t]
613
+ this.un(e),this.Js.points.push(e)}this.Ys=o}pn(t,e,i,s,n,r){if(!this.Js||!this.Ys)return
614
+ const o=this.Ys,h=new P(t,e),a=new P(i,s),c=new P(n,r),l=c.x-o.x,u=c.y-o.y
615
+ if(st>Math.abs((h.x-c.x)*u-(h.y-c.y)*l)&&st>Math.abs((a.x-c.x)*u-(a.y-c.y)*l))return void this.dn(n,r)
616
+ const f=this.en.Ws(o,h,a,c)
617
+ for(let t=0;f.length>t;t++){const e=f[t]
618
+ this.un(e),this.Js.points.push(e)}this.Ys=c}wn(){if(!this.Js||!this.Ys)return
619
+ const t=this.Js.points[0]
620
+ this.Ys.equals(t)||this.Js.points.push(t),this.an()}an(){if(this.Js){const t=this.sn.Gs(this.Js)
621
+ this.qs.push(t),this.Js=null,this.Ys=null}}un(t){this.Ks.min.x=Math.min(this.Ks.min.x,t.x),this.Ks.min.y=Math.min(this.Ks.min.y,t.y),this.Ks.max.x=Math.max(this.Ks.max.x,t.x),this.Ks.max.y=Math.max(this.Ks.max.y,t.y)}vn(){return this.qs.length>0&&this.hn(),this.Xs}gn(){return this.Qs}mn(){return this.Zs}reset(){this.Xs=[],this.Qs=[],this.Zs=[],this.qs=[],this.Js=null,this.Ys=null,this.Hs=0,this.Vs=0,this.tn.set(0,0),this.Ks={min:new P(1/0,1/0),max:new P(-1/0,-1/0)}}Ds(t){this.en.Ds(t)}xn(t){this.sn.Is({...tt,...t})}bn(){return this.sn.getStats()}}class ot{constructor(){this.Sn=null,this._n=null,this.En=null,this.Tn=null,this.An=null,this.Ln=0,this.position={x:0,y:0}}setPosition(t,e){this.position.x=t,this.position.y=e,this.Mn&&this.Mn.setPosition(t,e)}nn(t,e){this.position.x+=t,this.position.y+=e,this.Mn&&this.Mn.nn(t,e)}In(t){this.Mn=t}Gn(t,e){if(!t||!t.module||!t.hb)throw Error("Invalid font object")
622
+ if(this.Mn=e,this.Ln)return
594
623
  const i=t.module
595
- this.bn=i.Fn((t,e,i,s,n)=>{this.Ln?.ln(s,n)},"viiiffi"),this.Sn=i.Fn((t,e,i,s,n)=>{this.Ln?.fn(s,n)},"viiiffi"),this.Tn=i.Fn((t,e,i,s,n,r,o)=>{this.Ln?.dn(s,n,r,o)},"viiiffffi"),this.En=i.Fn((t,e,i,s,n,r,o,h,a)=>{this.Ln?.yn(s,n,r,o,h,a)},"viiiffffffi"),this._n=i.Fn(()=>{this.Ln?.pn()},"viiii"),this.An=i.exports.In(),i.exports.On(this.An,this.bn,0,0),i.exports.Cn(this.An,this.Sn,0,0),i.exports.kn(this.An,this.Tn,0,0),i.exports.Bn(this.An,this.En,0,0),i.exports.$n(this.An,this._n,0,0)}Un(){if(!this.An)throw Error("Draw functions not initialized")
596
- return this.An}destroy(t){if(!t||!t.module||!t.hb)return
624
+ this.Sn=i.On((t,e,i,s,n)=>{this.Mn?.ln(s,n)},"viiiffi"),this._n=i.On((t,e,i,s,n)=>{this.Mn?.dn(s,n)},"viiiffi"),this.En=i.On((t,e,i,s,n,r,o)=>{this.Mn?.yn(s,n,r,o)},"viiiffffi"),this.Tn=i.On((t,e,i,s,n,r,o,h,a)=>{this.Mn?.pn(s,n,r,o,h,a)},"viiiffffffi"),this.An=i.On(()=>{this.Mn?.wn()},"viiii"),this.Ln=i.exports.Fn(),i.exports.kn(this.Ln,this.Sn,0,0),i.exports.Cn(this.Ln,this._n,0,0),i.exports.Bn(this.Ln,this.En,0,0),i.exports.Un(this.Ln,this.Tn,0,0),i.exports.$n(this.Ln,this.An,0,0)}Nn(){if(!this.Ln)throw Error("Draw functions not initialized")
625
+ return this.Ln}destroy(t){if(!t||!t.module||!t.hb)return
597
626
  const e=t.module
598
- try{this.An&&(e.exports.Pn(this.An),this.An=0),null!==this.bn&&(e.Nn(this.bn),this.bn=null),null!==this.Sn&&(e.Nn(this.Sn),this.Sn=null),null!==this.Tn&&(e.Nn(this.Tn),this.Tn=null),null!==this.En&&(e.Nn(this.En),this.En=null),null!==this._n&&(e.Nn(this._n),this._n=null)}catch(t){c.warn("Error destroying draw callbacks:",t)}this.Ln=void 0}}const ht=new WeakMap
599
- class at{constructor(t,e){this.Dn="default",this.zn="default",this.cache=t,this.ae=e,this.Rn=new K,this.Wn=new X,this.jn=new Q,this.Ln=new rt,this.Hn=(()=>{const t=this.ae.module,e=ht.get(t)
627
+ try{this.Ln&&(e.exports.Dn(this.Ln),this.Ln=0),null!==this.Sn&&(e.Pn(this.Sn),this.Sn=null),null!==this._n&&(e.Pn(this._n),this._n=null),null!==this.En&&(e.Pn(this.En),this.En=null),null!==this.Tn&&(e.Pn(this.Tn),this.Tn=null),null!==this.An&&(e.Pn(this.An),this.An=null)}catch(t){l.warn("Error destroying draw callbacks:",t)}this.Mn=void 0}}const ht=new WeakMap
628
+ class at{constructor(t,e){this.Rn="default",this.zn="default",this.Wn=new Set,this.cache=t,this.le=e,this.tessellator=new K,this.jn=new X,this.Hn=new Q,this.Mn=new rt,this.Vn=(()=>{const t=this.le.module,e=ht.get(t)
600
629
  if(e)return e
601
630
  const i=new ot
602
- return ht.set(t,i),i})(),this.Hn.Gn(this.ae,this.Ln),this.Vn=j,this.qn=H,this.Jn=V}xn(){return this.Ln.xn()}Us(t){this.$s=t,this.Ln.Us(t),this.Yn()}vn(t){this.Kn=t,this.Ln.vn(t),this.Yn()}Xn(t){this.Dn=t,this.Yn()}Yn(){this.zn=`${this.Dn}__${this.Qn()}`}Qn(){const t=this.$s?.ks??it.ks,e=this.$s?.Bs??it.Bs,i=this.Kn?.enabled??!0,s=this.Kn?.bs??1,n=this.Kn?.Ss??.0087,r=this.Kn?.Ts??10
603
- return[`cf:${t.toFixed(4)},${e.toFixed(4)}`,`opt:${i?1:0},${s.toFixed(4)},${n.toFixed(6)},${r.toFixed(4)}`].join("|")}Zn(t,e,i,s,r=!1,o){u.start("GlyphGeometryBuilder.buildInstancedGeometry",{tr:t.length,er:t.flat().length,depth:e,ir:i})
604
- let h=new Float32Array(1024),a=new Float32Array(1024),l=new Uint32Array(1024),c=0,f=0,d=0
605
- const y=(t,e)=>{if(t.length>=e)return t
606
- let i=t.length
607
- for(;e>i;)i*=2
608
- const s=new Float32Array(i)
609
- return s.set(t),s},p=(t,e,i)=>{const s=t.vertices,n=t.normals,r=t.indices
610
- h=y(h,c+s.length),a=y(a,f+n.length),l=((t,e)=>{if(t.length>=e)return t
611
- let i=t.length
612
- for(;e>i;)i*=2
613
- const s=new Uint32Array(i)
614
- return s.set(t),s})(l,d+r.length)
615
- const o=e.x,u=e.y,p=e.z
616
- for(let t=0;s.length>t;t+=3)h[c++]=s[t]+o,h[c++]=s[t+1]+u,h[c++]=s[t+2]+p
617
- a.set(n,f),f+=n.length
618
- for(let t=0;r.length>t;t++)l[d++]=r[t]+i},g=[],w={min:{x:1/0,y:1/0,z:0},max:{x:-1/0,y:-1/0,z:e}}
631
+ return ht.set(t,i),i})(),this.Vn.Gn(this.le,this.Mn),this.qn=j,this.Jn=H,this.Yn=V}bn(){return this.Mn.bn()}Ds(t){this.Ns=t,this.Mn.Ds(t),this.Kn()}xn(t){this.Xn=t,this.Mn.xn(t),this.Kn()}Qn(t){this.Rn=t,this.Kn()}Kn(){this.zn=`${this.Rn}__${this.Zn()}`}Zn(){const t=this.Ns?.Us??it.Us,e=this.Ns?.$s??it.$s,i=this.Xn?.enabled??!0,s=this.Xn?._s??1,n=this.Xn?.Es??.0087,r=this.Xn?.Ts??10
632
+ return[`cf:${t.toFixed(4)},${e.toFixed(4)}`,`opt:${i?1:0},${s.toFixed(4)},${n.toFixed(6)},${r.toFixed(4)}`].join("|")}tr(t,e,i,s,r=!1,o){if(c){let e=0
633
+ for(let i=0;t.length>i;i++)e+=t[i].length}const h=[]
634
+ let a=0,l=0,u=0,f=0
635
+ const d=(t,e,i,s)=>{const n=f
636
+ return h.push({data:t,px:e,er:i,ir:s,sr:n}),a+=t.vertices.length,l+=t.normals.length,u+=t.indices.length,f+=t.vertices.length/3,n},y=[],p={min:{x:1/0,y:1/0,z:0},max:{x:-1/0,y:-1/0,z:e}}
619
637
  for(let h=0;t.length>h;h++){const a=t[h]
620
- for(const t of a){const h=[]
621
- for(const e of t.glyphs)h.push(this.sr(e.g))
622
- let a
623
- if(t.glyphs.length>1){const e=`${this.zn}_${t.text}`,i=this.Jn.get(e)
638
+ for(const t of a){const h=t.position.x,a=t.position.y,c=t.position.z,l=[]
639
+ for(const e of t.glyphs)l.push(this.nr(e.g))
640
+ let u
641
+ if(t.glyphs.length>1){const e=`${this.zn}_${t.text}`,i=this.Yn.get(e)
624
642
  let s=!1
625
- if(i&&i.nr.length===t.glyphs.length){s=!0
626
- for(let e=0;t.glyphs.length>e;e++)if(i.nr[e]!==t.glyphs[e].g){s=!1
627
- break}}if(s&&i)a=i.groups
628
- else{const i=t.glyphs.map(t=>new z(t.x??0,t.y??0,0))
629
- a=this.jn.ss(h,i),this.Jn.set(e,{nr:t.glyphs.map(t=>t.g),groups:a})}}else a=[[0]]
630
- const l=o&&t.glyphs.some(t=>o.has(t.rr)),u=r||l
631
- for(const r of a)if(r.length>1&&!u){const n=r.map(e=>t.glyphs[e]),o=this.hr(n,e,i)
632
- let a=this.qn.get(o)
633
- if(!a){const i=[],l=n[0].x??0,c=n[0].y??0
634
- for(let e=0;r.length>e;e++){const s=r[e],n=h[s],o=t.glyphs[s],a=(o.x??0)-l,u=(o.y??0)-c
635
- for(const t of n.mi)i.push({...t,points:t.points.map(t=>new D(t.x+a,t.y+u))})}a=this.ar(i,e,s),this.qn.set(o,a)}const l=n[0],u=new z(t.position.x+(l.x??0),t.position.y+(l.y??0),t.position.z),f=c/3
636
- p(a,u,f)
637
- const d=a.vertices.length/3
638
- for(let i=0;r.length>i;i++){const s=r[i],n=t.glyphs[s],o=h[s],a=new z(t.position.x+(n.x??0),t.position.y+(n.y??0),t.position.z),l=this.lr(n,f,d,a,o,e)
639
- g.push(l),this.cr(l.bounds,w)}}else for(const o of r){const r=t.glyphs[o],a=h[o],l=new z(t.position.x+(r.x??0),t.position.y+(r.y??0),t.position.z)
640
- if(0===a.mi.length){const t=this.lr(r,0,0,l,a,e)
641
- g.push(t)
642
- continue}let u=this.cache.get(n(this.zn,r.g,e,i))
643
- u?u.ur++:(u=this.dr(a,e,i,s),this.cache.set(n(this.zn,r.g,e,i),u))
644
- const f=c/3
645
- p(u,l,f)
646
- const d=this.lr(r,f,u.vertices.length/3,l,a,e)
647
- g.push(d),this.cr(d.bounds,w)}}}const m=h.slice(0,c),v=a.slice(0,f),x=l.slice(0,d)
648
- return u.end("GlyphGeometryBuilder.buildInstancedGeometry"),{vertices:m,normals:v,indices:x,yr:g,planeBounds:w}}hr(t,e,i){if(0===t.length)return""
643
+ if(i&&i.rr.length===t.glyphs.length){s=!0
644
+ for(let e=0;t.glyphs.length>e;e++)if(i.rr[e]!==t.glyphs[e].g){s=!1
645
+ break}}if(s&&i)u=i.groups
646
+ else{const i=t.glyphs.map(t=>new R(t.x??0,t.y??0,0))
647
+ u=this.Hn.hs(l,i),this.Yn.set(e,{rr:t.glyphs.map(t=>t.g),groups:u})}}else u=[[0]]
648
+ const f=o&&t.glyphs.some(t=>o.has(t.hr)),w=r||f
649
+ for(const r of u)if(r.length>1&&!w){const n=r.map(e=>t.glyphs[e]),o=this.ar(n,e,i)
650
+ let u=this.Jn.get(o)
651
+ if(!u){const i=[],h=n[0].x??0,a=n[0].y??0
652
+ for(let e=0;r.length>e;e++){const s=r[e],n=l[s],o=t.glyphs[s],c=(o.x??0)-h,u=(o.y??0)-a
653
+ for(const t of n.Si)i.push({...t,points:t.points.map(t=>new P(t.x+c,t.y+u))})}u=this.cr(i,e,s),this.Jn.set(o,u)}const f=n[0],w=d(u,h+(f.x??0),a+(f.y??0),c),v=u.vertices.length/3
654
+ for(let i=0;r.length>i;i++){const s=r[i],n=t.glyphs[s],o=this.lr(n,w,v,h+(n.x??0),a+(n.y??0),c,l[s],e)
655
+ y.push(o),this.ur(o.bounds,p)}}else for(const o of r){const r=t.glyphs[o],u=l[o],f=h+(r.x??0),w=a+(r.y??0),v=c
656
+ if(0===u.Si.length){const t=this.lr(r,0,0,f,w,v,u,e)
657
+ y.push(t)
658
+ continue}const g=n(this.zn,r.g,e,i)
659
+ let m=this.cache.get(g)
660
+ m?m.dr++:(m=this.yr(u,e,i,s),this.cache.set(g,m))
661
+ const x=d(m,f,w,v),b=this.lr(r,x,m.vertices.length/3,f,w,v,u,e)
662
+ y.push(b),this.ur(b.bounds,p)}}}const w=new Float32Array(a),v=new Float32Array(l),g=new Uint32Array(u)
663
+ let m=0,x=0,b=0
664
+ for(let t=0;h.length>t;t++){const e=h[t],i=e.data.vertices,s=e.data.normals,n=e.data.indices,r=e.px,o=e.er,a=e.ir
665
+ for(let t=0;i.length>t;t+=3)w[m++]=i[t]+r,w[m++]=i[t+1]+o,w[m++]=i[t+2]+a
666
+ v.set(s,x),x+=s.length
667
+ const c=e.sr
668
+ for(let t=0;n.length>t;t++)g[b++]=n[t]+c}return{vertices:w,normals:v,indices:g,pr:y,planeBounds:p}}ar(t,e,i){if(0===t.length)return""
649
669
  const s=t[0].x??0,n=t[0].y??0,r=t.map(t=>`${t.g}:${(t.x??0)-s},${(t.y??0)-n}`).join("|")
650
- return`${this.zn}_${r}_${Math.round(1e3*e)/1e3}_${i}`}lr(t,e,i,s,n,r){return{hn:t.rr,pr:t.pr,gr:e,wr:i,bounds:{min:{x:n.bounds.min.x+s.x,y:n.bounds.min.y+s.y,z:s.z},max:{x:n.bounds.max.x+s.x,y:n.bounds.max.y+s.y,z:s.z+r}}}}sr(t){const e=`${this.zn}_${t}`,i=this.Vn.get(e)
670
+ return`${this.zn}_${r}_${Math.round(1e3*e)/1e3}_${i}`}lr(t,e,i,s,n,r,o,h){return{wr:t.hr,vr:t.vr,sr:e,gr:i,bounds:{min:{x:o.bounds.min.x+s,y:o.bounds.min.y+n,z:r},max:{x:o.bounds.max.x+s,y:o.bounds.max.y+n,z:r+h}}}}nr(t){if(this.Wn.has(t))return{cn:t,Si:[],bounds:{min:{x:0,y:0},max:{x:0,y:0}}}
671
+ const e=`${this.zn}_${t}`,i=this.qn.get(e)
651
672
  if(i)return i
652
- this.Hn.Mn(this.Ln),this.Ln.reset(),this.Ln.sn(t,0),this.ae.module.exports.mr(this.ae.font.vr,t,this.Hn.Un(),0),this.Ln.nn()
653
- const s=this.Ln.gn()[0]||{rn:t,mi:[],bounds:{min:{x:0,y:0},max:{x:0,y:0}}}
654
- return this.Vn.set(e,s),s}ar(t,e,i){const s=this.Rn.process(t,!0,i)
655
- return this.br(s,e)}br(t,e){u.start("Extruder.extrude",{depth:e,upem:this.ae.upem})
656
- const i=this.Wn.es(t,e,this.ae.upem)
657
- u.end("Extruder.extrude")
658
- const s=i.vertices
659
- let n=1/0,r=1/0,o=1/0,h=-1/0,a=-1/0,l=-1/0
660
- for(let t=0;s.length>t;t+=3){const e=s[t],i=s[t+1],c=s[t+2]
661
- n>e&&(n=e),e>h&&(h=e),r>i&&(r=i),i>a&&(a=i),o>c&&(o=c),c>l&&(l=c)}const c=new z(n,r,o),f=new z(h,a,l)
662
- return{geometry:t,vertices:i.vertices,normals:i.normals,indices:i.indices,bounds:{min:c,max:f},ur:1}}dr(t,e,i,s){u.start("GlyphGeometryBuilder.tessellateGlyph",{rn:t.rn,Sr:t.mi.length})
663
- const n=this.Rn.process(t.mi,i,s)
664
- return u.end("GlyphGeometryBuilder.tessellateGlyph"),this.br(n,e)}cr(t,e){const i=e.min,s=e.max,n=t.min,r=t.max
665
- i.x>n.x&&(i.x=n.x),i.y>n.y&&(i.y=n.y),i.z>n.z&&(i.z=n.z),r.x>s.x&&(s.x=r.x),r.y>s.y&&(s.y=r.y),r.z>s.z&&(s.z=r.z)}Tr(){return this.cache.getStats()}clearCache(){this.cache.clear(),this.qn.clear(),this.Jn.clear(),this.Vn.clear()}}class lt{constructor(t,e){this.Er=new Map,this.ae=t,this._r=e}Ar(t,e,i,s,n,r,o){u.start("TextShaper.shapeLines",{tr:t.length})
666
- try{const r=[]
673
+ this.Vn.In(this.Mn),this.Mn.reset(),this.Mn.rn(t,0),this.le.module.exports.mr(this.le.font.br,t,this.Vn.Nn(),0),this.Mn.hn()
674
+ const s=this.Mn.vn()[0]||{cn:t,Si:[],bounds:{min:{x:0,y:0},max:{x:0,y:0}}}
675
+ return 0===s.Si.length&&this.Wn.add(t),this.qn.set(e,s),s}cr(t,e,i){const s=this.tessellator.process(t,!0,i,0!==e)
676
+ return this.Sr(s,e)}Sr(t,e){const i=this.jn.rs(t,e,this.le.upem),s=i.vertices
677
+ let n=1/0,r=1/0,o=1/0,h=-1/0,a=-1/0,c=-1/0
678
+ for(let t=0;s.length>t;t+=3){const e=s[t],i=s[t+1],l=s[t+2]
679
+ n>e&&(n=e),e>h&&(h=e),r>i&&(r=i),i>a&&(a=i),o>l&&(o=l),l>c&&(c=l)}const l=new R(n,r,o),u=new R(h,a,c)
680
+ return{geometry:t,vertices:i.vertices,normals:i.normals,indices:i.indices,bounds:{min:l,max:u},dr:1}}yr(t,e,i,s){const n=this.tessellator.process(t.Si,i,s,0!==e)
681
+ return this.Sr(n,e)}ur(t,e){const i=e.min,s=e.max,n=t.min,r=t.max
682
+ i.x>n.x&&(i.x=n.x),i.y>n.y&&(i.y=n.y),i.z>n.z&&(i.z=n.z),r.x>s.x&&(s.x=r.x),r.y>s.y&&(s.y=r.y),r.z>s.z&&(s.z=r.z)}_r(){return this.cache.getStats()}clearCache(){this.cache.clear(),this.Jn.clear(),this.Yn.clear(),this.qn.clear()}}class ct{constructor(t,e){this.Er=new Map,this.le=t,this.Tr=e}Ar(t,e,i,s,n,r,o){try{const r=[]
667
683
  return t.forEach((t,o)=>{const h=this.Lr(t,o,e,i,s,n)
668
- r.push(h)}),r}finally{u.end("TextShaper.shapeLines")}}Lr(t,i,s,n,r,o){const h=this.ae.hb.createBuffer()
669
- "rtl"===o&&h.Mr("rtl"),h.re(t.text),h.oe()
670
- const a=e(this.ae.he)
671
- this.ae.hb.shape(this.ae.font,h,a)
672
- const l=h.json(this.ae.font)
684
+ r.push(h)}),r}finally{}}Lr(t,i,s,n,r,o){const h=this.le.hb.createBuffer()
685
+ "rtl"===o&&h.Mr("rtl"),h.oe(t.text),h.he()
686
+ const a=e(this.le.ae)
687
+ this.le.hb.shape(this.le.font,h,a)
688
+ const c=h.json(this.le.font)
673
689
  h.destroy()
674
- const c=[]
675
- let u=[],f="",d=new z,y=new z(t.Pt,-i*s,0)
676
- const p=n*this.ae.upem,g=this.Gr(t,r,n),w=this.Fr(t,r)
677
- for(let e=0;l.length>e;e++){const s=l[e],n=/\s/.test(t.text[s.Ir])
678
- s.rr=t.Dt&&s.Ir===t.text.length-1&&"-"===t.text[s.Ir]?t.Ut:t.$t+s.Ir,s.pr=i,n&&u.length>0&&(c.push({text:f,glyphs:u,position:d.clone()}),u=[],f="")
679
- const r=y.clone().add(new z(s.dx,s.dy,0))
680
- if(n||(0===u.length&&d.Xe(r),s.x=r.x-d.x,s.y=r.y-d.y,u.push(s),f+=t.text[s.Ir]),y.x+=s.ax,y.y+=s.ay,0!==p&&l.length-1>e&&(y.x+=p),n&&(y.x+=g),0!==w&&l.length-1>e&&!n){const i=t.text[s.Ir],n=t.text[l[e+1].Ir],r=G.tt(i),o=n&&G.tt(n)
690
+ const l=[]
691
+ let u=[],f="",d=0,y=0,p=t.Dt,w=-i*s
692
+ const v=n*this.le.upem,g=this.Ir(t,r,n),m=this.Gr(t,r)
693
+ for(let e=0;c.length>e;e++){const s=c[e],n=/\s/.test(t.text[s.ce])
694
+ s.hr=t.Rt&&s.ce===t.text.length-1&&"-"===t.text[s.ce]?t.Nt:t.$t+s.ce,s.vr=i,n&&u.length>0&&(l.push({text:f,glyphs:u,position:new R(d,y,0)}),u=[],f="")
695
+ const r=p+s.dx,o=w+s.dy
696
+ if(n||(0===u.length&&(d=r,y=o),s.x=r-d,s.y=o-y,u.push(s),f+=t.text[s.ce]),p+=s.ax,w+=s.ay,0!==v&&c.length-1>e&&(p+=v),n&&(p+=g),0!==m&&c.length-1>e&&!n){const i=t.text[s.ce],n=t.text[c[e+1].ce],r=M.tt(i),o=n&&M.tt(n)
681
697
  if(r&&o){let t=!0
682
- G.et(n)&&(t=!1),G.it(i)&&(t=!1),G.st(i)&&G.st(n)&&(t=!1),t&&(y.x+=w)}}}return u.length>0&&c.push({text:f,glyphs:u,position:d.clone()}),c}Gr(t,e,i){let s=0
683
- if(void 0!==t.Yt&&"justify"===e&&!t.Nt){let e=this.Er.get(i)
684
- void 0===e&&(e=F.measureTextWidth(this.ae," ",i),this.Er.set(i,e)),t.Yt>0?s=t.Yt*e*.5:0>t.Yt&&(s=t.Yt*e*p)}return s}Fr(t,e){if(void 0===t.Yt||"justify"!==e||t.Nt)return 0
685
- return t.Yt>0||0>t.Yt?.04*t.Yt*this.ae.upem:0}clearCache(){this._r.clearCache()}Tr(){return this._r.Tr()}}var ct={exports:{}},ut=a({__proto__:null,default:{},Or(){throw Error("fs not available in browser")}})
686
- !(function(t){var e,i=(e="undefined"!=typeof document?document.currentScript?.src:void 0,async function(t={}){function i(){var t=w.buffer
687
- n.HEAP8=new Int8Array(t),n.HEAPU8=m=new Uint8Array(t),n.HEAP32=new Int32Array(t),n.HEAPU32=new Uint32Array(t),n.HEAPF32=new Float32Array(t),new BigInt64Array(t),new BigUint64Array(t)}function s(t){n.Cr?.(t),x(t="Aborted("+t+")"),b=!0,t+=". Build with -sASSERTIONS for more info."
698
+ M.et(n)&&(t=!1),M.it(i)&&(t=!1),M.st(i)&&M.st(n)&&(t=!1),t&&(p+=m)}}}return u.length>0&&l.push({text:f,glyphs:u,position:new R(d,y,0)}),l}Ir(t,e,i){let s=0
699
+ if(void 0!==t.Kt&&"justify"===e&&!t.Pt){let e=this.Er.get(i)
700
+ void 0===e&&(e=G.measureTextWidth(this.le," ",i),this.Er.set(i,e)),t.Kt>0?s=t.Kt*e*.5:0>t.Kt&&(s=t.Kt*e*y)}return s}Gr(t,e){if(void 0===t.Kt||"justify"!==e||t.Pt)return 0
701
+ return t.Kt>0||0>t.Kt?.04*t.Kt*this.le.upem:0}clearCache(){this.Tr.clearCache()}_r(){return this.Tr._r()}}var lt={exports:{}},ut=a({__proto__:null,default:{},Or(){throw Error("fs not available in browser")}})
702
+ !(function(t){var e,i=(e="undefined"!=typeof document?document.currentScript?.src:void 0,async function(t={}){function i(){var t=v.buffer
703
+ n.HEAP8=new Int8Array(t),n.HEAPU8=g=new Uint8Array(t),n.HEAP32=new Int32Array(t),n.HEAPU32=new Uint32Array(t),n.HEAPF32=new Float32Array(t),new BigInt64Array(t),new BigUint64Array(t)}function s(t){n.Fr?.(t),x(t="Aborted("+t+")"),b=!0,t+=". Build with -sASSERTIONS for more info."
688
704
  var e=new WebAssembly.RuntimeError(t)
689
- throw g?.(e),e}var n=t,r="object"==typeof window,o="undefined"!=typeof WorkerGlobalScope,h="object"==typeof process&&process.versions?.node&&"renderer"!=process.type,a=(t,e)=>{throw e}
705
+ throw w?.(e),e}var n=t,r="object"==typeof window,o="undefined"!=typeof WorkerGlobalScope,h="object"==typeof process&&process.versions?.node&&"renderer"!=process.type,a=(t,e)=>{throw e}
690
706
  "undefined"!=typeof __filename?e=__filename:o&&(e=self.location.href)
691
- var l,c,u=""
707
+ var c,l,u=""
692
708
  if(h){var f=ut
693
- u=__dirname+"/",c=t=>(t=S(t)?new URL(t):t,f.Or(t)),l=async(t,e=!0)=>(t=S(t)?new URL(t):t,f.Or(t,e?void 0:"utf8")),process.argv.length>1&&process.argv[1].replace(/\\/g,"/"),process.argv.slice(2),a=(t,e)=>{throw process.exitCode=t,e}}else if(r||o){try{u=new URL(".",e).href}catch{}o&&(c=t=>{var e=new XMLHttpRequest
694
- return e.open("GET",t,!1),e.responseType="arraybuffer",e.send(null),new Uint8Array(e.response)}),l=async t=>{if(S(t))return new Promise((e,i)=>{var s=new XMLHttpRequest
709
+ u=__dirname+"/",l=t=>(t=S(t)?new URL(t):t,f.Or(t)),c=async(t,e=!0)=>(t=S(t)?new URL(t):t,f.Or(t,e?void 0:"utf8")),process.argv.length>1&&process.argv[1].replace(/\\/g,"/"),process.argv.slice(2),a=(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
710
+ 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 s=new XMLHttpRequest
695
711
  s.open("GET",t,!0),s.responseType="arraybuffer",s.onload=()=>{200==s.status||0==s.status&&s.response?e(s.response):i(s.status)},s.onerror=i,s.send(null)})
696
712
  var e=await fetch(t,{credentials:"same-origin"})
697
713
  if(e.ok)return e.arrayBuffer()
698
714
  throw Error(e.status+" : "+e.url)}}console.log.bind(console)
699
- var d,y,p,g,w,m,v,x=console.error.bind(console),b=!1,S=t=>t.startsWith("file://"),T=!1,E=0,_=null
715
+ var d,y,p,w,v,g,m,x=console.error.bind(console),b=!1,S=t=>t.startsWith("file://"),_=!1,E=0,T=null
700
716
  class A{name="ExitStatus"
701
- constructor(t){this.message=`Program terminated with exit(${t})`,this.status=t}}var L,M,G,F=t=>{for(;t.length>0;)t.shift()(n)},I=[],O=t=>I.push(t),C=[],k=t=>C.push(t),B=!0,$=0,U={},P=t=>{if(t instanceof A||"unwind"==t)return y
702
- a(1,t)},N=()=>B||$>0,D=t=>{y=t,N()||(n.kr?.(t),b=!0),a(t,new A(t))},z=(t,e)=>Math.ceil(t/e)*e,R=t=>{var e=(t-w.buffer.byteLength+65535)/65536|0
703
- try{return w.grow(e),i(),1}catch(t){}},W=t=>{const e=t.length
704
- return[e%128|128,e>>7,...t]},j={bi:127,Ti:127,_i:126,f:125,d:124,e:111},H=t=>W(Array.from(t,t=>j[t])),V=t=>L.get(t),q=[],J=(t,e)=>L.set(t,e)
705
- n.Br&&(B=n.Br),n.$r&&(x=n.$r),n.Ur&&(d=n.Ur),n.Pr=w,n.Nr=K,n.Fn=(t,e)=>{var i=(t=>(M||(M=new WeakMap,((t,e)=>{if(M)for(var i=0;0+e>i;i++){var s=V(i)
717
+ constructor(t){this.message=`Program terminated with exit(${t})`,this.status=t}}var L,M,I,G=t=>{for(;t.length>0;)t.shift()(n)},O=[],F=t=>O.push(t),k=[],C=t=>k.push(t),B=!0,U=0,$={},N=t=>{if(t instanceof A||"unwind"==t)return y
718
+ a(1,t)},D=()=>B||U>0,P=t=>{y=t,D()||(n.kr?.(t),b=!0),a(t,new A(t))},R=(t,e)=>Math.ceil(t/e)*e,z=t=>{var e=(t-v.buffer.byteLength+65535)/65536|0
719
+ try{return v.grow(e),i(),1}catch(t){}},W=t=>{const e=t.length
720
+ return[e%128|128,e>>7,...t]},j={Ei:127,Ai:127,Mi:126,f:125,d:124,e:111},H=t=>W(Array.from(t,t=>j[t])),V=t=>L.get(t),q=[],J=(t,e)=>L.set(t,e)
721
+ n.Cr&&(B=n.Cr),n.Br&&(x=n.Br),n.Ur&&(d=n.Ur),n.$r=v,n.Nr=K,n.On=(t,e)=>{var i=(t=>(M||(M=new WeakMap,((t,e)=>{if(M)for(var i=0;0+e>i;i++){var s=V(i)
706
722
  s&&M.set(s,i)}})(0,L.length)),M.get(t)||0))(t)
707
723
  if(i)return i
708
724
  var s=q.length?q.pop():L.grow(1)
709
725
  try{J(s,t)}catch(i){if(!(i instanceof TypeError))throw i
710
726
  var n=((t,e)=>{var i=Uint8Array.of(0,97,115,109,1,0,0,0,1,...W([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),s=new WebAssembly.Module(i)
711
727
  return new WebAssembly.Instance(s,{e:{f:t}}).exports.f})(t,e)
712
- J(s,n)}return M.set(t,s),s},n.Nn=t=>{M.delete(V(t)),J(t,null),q.push(t)}
713
- var Y={Dr:()=>s(""),zr(){B=!1,$=0},Rr(t,e){if(U[t]&&(clearTimeout(U[t].id),delete U[t]),!e)return 0
714
- var i=setTimeout(()=>{delete U[t],(t=>{if(!b)try{t(),(()=>{if(!N())try{y=t=y,D(t)}catch(t){P(t)}var t})()}catch(t){P(t)}})(()=>G(t,performance.now()))},e)
715
- return U[t]={id:i,Wr:e},0},jr(t){var e=m.length,i=2147483648
728
+ J(s,n)}return M.set(t,s),s},n.Pn=t=>{M.delete(V(t)),J(t,null),q.push(t)}
729
+ var Y={Dr:()=>s(""),Pr(){B=!1,U=0},Rr(t,e){if($[t]&&(clearTimeout($[t].id),delete $[t]),!e)return 0
730
+ var i=setTimeout(()=>{delete $[t],(t=>{if(!b)try{t(),(()=>{if(!D())try{y=t=y,P(t)}catch(t){N(t)}var t})()}catch(t){N(t)}})(()=>I(t,performance.now()))},e)
731
+ return $[t]={id:i,zr:e},0},Wr(t){var e=g.length,i=2147483648
716
732
  if((t>>>=0)>i)return!1
717
- for(var s=1;4>=s;s*=2){var n=e*(1+.2/s),r=Math.min(i,z(Math.max(t,n=Math.min(n,t+100663296)),65536))
718
- if(R(r))return!0}return!1},Hr:D},K=await(async()=>{function t(t){return n.Nr=K=t.exports,n.Pr=w=K.memory,i(),L=K.Vr,(t=>{n.qr=t.Jr,n.Yr=t.Kr,n.Xr=t.Qr,n.Zr=t.eo,n.io=t.so,n.no=t.ro,n.oo=t.ho,n.ao=t.lo,n.co=t.uo,n.fo=t.do,n.yo=t.po,n.wo=t.mo,n.vo=t.xo,n.bo=t.So,n.To=t.Eo,n._o=t.Ao,n.Lo=t.Mo,n.Go=t.Fo,n.Io=t.Oo,n.Co=t.ko,n.Bo=t.$o,n.Uo=t.Po,n.No=t.Do,n.zo=t.Ro,n.Wo=t.jo,n.Ho=t.Vo,n.qo=t.Jo,n.Yo=t.Ko,n.Xo=t.On,n.Qo=t.Cn,n.Zo=t.kn,n.th=t.Bn,n.eh=t.$n,n.ih=t.In,n.sh=t.Pn,n.nh=t.rh,n.oh=t.hh,n.ah=t.uh,n.fh=t.dh,n.yh=t.ph,n.gh=t.mr,n.wh=t.mh,n.xh=t.bh,n.Sh=t.Th,n.Eh=t._h,n.Ah=t.Lh,n.Mh=t.Gh,n.Fh=t.Ih,n.Oh=t.Ch,n.kh=t.Bh,n.$h=t.Uh,n.Ph=t.Nh,G=t.Dh})(K),(()=>{if(E--,n.zh?.(E),0==E&&_){var t=_
719
- _=null,t()}})(),K}E++,n.zh?.(E)
733
+ for(var s=1;4>=s;s*=2){var n=e*(1+.2/s),r=Math.min(i,R(Math.max(t,n=Math.min(n,t+100663296)),65536))
734
+ if(z(r))return!0}return!1},jr:P},K=await(async()=>{function t(t){return n.Nr=K=t.exports,n.$r=v=K.memory,i(),L=K.Hr,(t=>{n.Vr=t.qr,n.Jr=t.Yr,n.Kr=t.Xr,n.Qr=t.Zr,n.eo=t.io,n.so=t.no,n.ro=t.oo,n.ho=t.ao,n.co=t.lo,n.uo=t.fo,n.do=t.yo,n.po=t.wo,n.vo=t.mo,n.xo=t.bo,n.So=t._o,n.Eo=t.To,n.Ao=t.Lo,n.Mo=t.Io,n.Go=t.Oo,n.Fo=t.ko,n.Co=t.Bo,n.Uo=t.$o,n.No=t.Do,n.Po=t.Ro,n.zo=t.Wo,n.jo=t.Ho,n.Vo=t.qo,n.Jo=t.Yo,n.Ko=t.kn,n.Xo=t.Cn,n.Qo=t.Bn,n.Zo=t.Un,n.th=t.$n,n.eh=t.Fn,n.ih=t.Dn,n.sh=t.nh,n.rh=t.oh,n.hh=t.ah,n.uh=t.fh,n.dh=t.yh,n.ph=t.mr,n.wh=t.gh,n.mh=t.xh,n.bh=t.Sh,n._h=t.Eh,n.Th=t.Ah,n.Lh=t.Mh,n.Ih=t.Gh,n.Oh=t.Fh,n.kh=t.Ch,n.Bh=t.Uh,n.$h=t.Nh,I=t.Dh})(K),(()=>{if(E--,n.Ph?.(E),0==E&&T){var t=T
735
+ T=null,t()}})(),K}E++,n.Ph?.(E)
720
736
  var e,r={u:Y,Rh:Y}
721
- return n.Wh?new Promise(e=>{n.Wh(r,i=>{e(t(i))})}):(v??=(e="hb.wasm",n.jh?n.jh(e,u):u+e),t((await(async function(t,e,i){if(!t&&!S(e)&&!h)try{var n=fetch(e,{credentials:"same-origin"})
722
- return await WebAssembly.instantiateStreaming(n,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 l(t)
723
- return new Uint8Array(e)}catch{}return(t=>{if(t==v&&d)return new Uint8Array(d)
724
- if(c)return c(t)
737
+ return n.zh?new Promise(e=>{n.zh(r,i=>{e(t(i))})}):(m??=(e="hb.wasm",n.Wh?n.Wh(e,u):u+e),t((await(async function(t,e,i){if(!t&&!S(e)&&!h)try{var n=fetch(e,{credentials:"same-origin"})
738
+ return await WebAssembly.instantiateStreaming(n,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)
739
+ return new Uint8Array(e)}catch{}return(t=>{if(t==m&&d)return new Uint8Array(d)
740
+ if(l)return l(t)
725
741
  throw"both async and sync fetching of the wasm failed"})(t)})(t)
726
- return await WebAssembly.instantiate(i,e)}catch(t){x("failed to asynchronously prepare wasm: "+t),s(t)}})(e,i)})(d,v,r)).Hh))})()
727
- return(()=>{if(n.Vh)for("function"==typeof n.Vh&&(n.Vh=[n.Vh]);n.Vh.length>0;)n.Vh.shift()()})(),(function t(){function e(){n.qh=!0,b||(T=!0,K.Jh(),p?.(n),n.Yh?.(),(()=>{if(n.Kh)for("function"==typeof n.Kh&&(n.Kh=[n.Kh]);n.Kh.length;)O(n.Kh.shift())
728
- F(I)})())}E>0?_=t:((()=>{if(n.Xh)for("function"==typeof n.Xh&&(n.Xh=[n.Xh]);n.Xh.length;)k(n.Xh.shift())
729
- F(C)})(),E>0?_=t:n.setStatus?(n.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>n.setStatus(""),1),e()},1)):e())})(),T?n:new Promise((t,e)=>{p=t,g=e})})
730
- t.exports=i,t.exports.default=i})(ct)
731
- var ft=h(ct.exports),dt={exports:{}}
732
- try{dt.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=n.Jo(e.length+1)
742
+ return await WebAssembly.instantiate(i,e)}catch(t){x("failed to asynchronously prepare wasm: "+t),s(t)}})(e,i)})(d,m,r)).jh))})()
743
+ return(()=>{if(n.Hh)for("function"==typeof n.Hh&&(n.Hh=[n.Hh]);n.Hh.length>0;)n.Hh.shift()()})(),(function t(){function e(){n.Vh=!0,b||(_=!0,K.qh(),p?.(n),n.Jh?.(),(()=>{if(n.Yh)for("function"==typeof n.Yh&&(n.Yh=[n.Yh]);n.Yh.length;)F(n.Yh.shift())
744
+ G(O)})())}E>0?T=t:((()=>{if(n.Kh)for("function"==typeof n.Kh&&(n.Kh=[n.Kh]);n.Kh.length;)C(n.Kh.shift())
745
+ G(k)})(),E>0?T=t:n.setStatus?(n.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>n.setStatus(""),1),e()},1)):e())})(),_?n:new Promise((t,e)=>{p=t,w=e})})
746
+ t.exports=i,t.exports.default=i})(lt)
747
+ var ft=h(lt.exports),dt={exports:{}}
748
+ try{dt.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=n.qo(e.length+1)
733
749
  for(let s=0;e.length>s;++s){const n=e.charCodeAt(s)
734
750
  if(n>127)throw Error("Expected ASCII text")
735
- t.HEAPU8[i+s]=n}return t.HEAPU8[i+e.length]=0,{vr:i,length:e.length,Ko(){n.Ko(i)}}}function s(t,e,s){var r=0,o=0
736
- s&&(s=s.split(","),r=n.Jo(16*s.length),s.forEach(t=>{var e=i(t)
737
- n.Vo(e.vr,-1,r+16*o)&&o++,e.Ko()})),n.Nh(t.vr,e.vr,r,o),r&&n.Ko(r)}var n=t.Nr,r=new TextDecoder("utf8")
738
- let o=t.Fn,h=t.Nn
739
- var a=o(t=>{n.Ko(t)},"vi"),l=e("JSON"),c="",u=n.Jo(256)
740
- return{Ne(e){var i=n.Jo(e.byteLength)
751
+ t.HEAPU8[i+s]=n}return t.HEAPU8[i+e.length]=0,{br:i,length:e.length,Yo(){n.Yo(i)}}}function s(t,e,s){var r=0,o=0
752
+ s&&(s=s.split(","),r=n.qo(16*s.length),s.forEach(t=>{var e=i(t)
753
+ n.Ho(e.br,-1,r+16*o)&&o++,e.Yo()})),n.Nh(t.br,e.br,r,o),r&&n.Yo(r)}var n=t.Nr,r=new TextDecoder("utf8")
754
+ let o=t.On,h=t.Pn
755
+ var a=o(t=>{n.Yo(t)},"vi"),c=e("JSON"),l="",u=n.qo(256)
756
+ return{ze(e){var i=n.qo(e.byteLength)
741
757
  t.HEAPU8.set(new Uint8Array(e),i)
742
- var s=n.Jr(i,e.byteLength,2,i,a)
743
- return{vr:s,destroy(){n.Kr(s)}}},De(i,s){var r=n.rh(i.vr,s)
744
- const o=n.dh(r)
745
- return{vr:r,upem:o,Qh(i){var s=n.uh(r,e(i)),o=n.Qr(s)
746
- if(o){var h=n.eo(s,null)
747
- return t.HEAPU8.subarray(h,h+o)}},We(){var e=n.Jo(2048),i=n.Jo(4)
748
- t.HEAPU32[i/4]=64,n.Ch(r,0,i,e)
758
+ var s=n.qr(i,e.byteLength,2,i,a)
759
+ return{br:s,destroy(){n.Yr(s)}}},We(i,s){var r=n.nh(i.br,s)
760
+ const o=n.fh(r)
761
+ return{br:r,upem:o,Xh(i){var s=n.ah(r,e(i)),o=n.Xr(s)
762
+ if(o){var h=n.Zr(s,null)
763
+ return t.HEAPU8.subarray(h,h+o)}},Ve(){var e=n.qo(2048),i=n.qo(4)
764
+ t.HEAPU32[i/4]=64,n.Fh(r,0,i,e)
749
765
  var s={}
750
766
  return Array.from({length:t.HEAPU32[i/4]}).forEach((i,n)=>{var r
751
- s[(r=t.HEAPU32[e/4+8*n+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*n+4],default:t.HEAPF32[e/4+8*n+5],max:t.HEAPF32[e/4+8*n+6]}}),n.Ko(i),n.Ko(e),s},Zh(){var e=n.Gh()
752
- n.ph(r,e)
753
- var i=(e=>{const i=n.Bh(e),s=n.Jo(i<<2),r=s>>2,o=t.HEAPU32.subarray(r,r+i)
767
+ s[(r=t.HEAPU32[e/4+8*n+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*n+4],default:t.HEAPF32[e/4+8*n+5],max:t.HEAPF32[e/4+8*n+6]}}),n.Yo(i),n.Yo(e),s},Qh(){var e=n.Mh()
768
+ n.yh(r,e)
769
+ var i=(e=>{const i=n.Ch(e),s=n.qo(i<<2),r=s>>2,o=t.HEAPU32.subarray(r,r+i)
754
770
  return t.HEAPU32.set(o,r),n.Uh(e,-1,s,i),o})(e)
755
- return n.Ih(e),i},destroy(){n.hh(r)}}},ze(i){function s(t){return l||(f=o((t,e,i,s,n)=>{c+=`M${s},${n}`},"viiiffi"),d=o((t,e,i,s,n)=>{c+=`L${s},${n}`},"viiiffi"),y=o((t,e,i,s,n,r,o,h,a)=>{c+=`C${s},${n} ${r},${o} ${h},${a}`},"viiiffffffi"),p=o((t,e,i,s,n,r,o)=>{c+=`Q${s},${n} ${r},${o}`},"viiiffffi"),g=o(()=>{c+="Z"},"viiii"),l=n.In(),n.On(l,f,0,0),n.Cn(l,d,0,0),n.Bn(l,y,0,0),n.kn(l,p,0,0),n.$n(l,g,0,0)),c="",n.mr(a,t,l,0),c}var a=n.bh(i.vr),l=null,f=null,d=null,y=null,p=null,g=null
756
- return{vr:a,ta(e){n.mh(a,e,u,256)
771
+ return n.Gh(e),i},destroy(){n.oh(r)}}},je(i){function s(t){return c||(f=o((t,e,i,s,n)=>{l+=`M${s},${n}`},"viiiffi"),d=o((t,e,i,s,n)=>{l+=`L${s},${n}`},"viiiffi"),y=o((t,e,i,s,n,r,o,h,a)=>{l+=`C${s},${n} ${r},${o} ${h},${a}`},"viiiffffffi"),p=o((t,e,i,s,n,r,o)=>{l+=`Q${s},${n} ${r},${o}`},"viiiffffi"),w=o(()=>{l+="Z"},"viiii"),c=n.Fn(),n.kn(c,f,0,0),n.Cn(c,d,0,0),n.Un(c,y,0,0),n.Bn(c,p,0,0),n.$n(c,w,0,0)),l="",n.mr(a,t,c,0),l}var a=n.xh(i.br),c=null,f=null,d=null,y=null,p=null,w=null
772
+ return{br:a,Zh(e){n.gh(a,e,u,256)
757
773
  var i=t.HEAPU8.subarray(u,u+256)
758
- return r.decode(i.slice(0,i.indexOf(0)))},ea:s,ia:t=>s(t).replace(/([MLQCZ])/g,"|$1 ").split("|").filter(t=>t.length).map(t=>{var e=t.split(/[ ,]/g)
759
- return{type:e[0],values:e.slice(1).filter(t=>t.length).map(t=>+t)}}),setScale(t,e){n.Lh(a,t,e)},Re(i){var s=Object.entries(i),r=n.Jo(8*s.length)
760
- s.forEach((i,s)=>{t.HEAPU32[r/4+2*s+0]=e(i[0]),t.HEAPF32[r/4+2*s+1]=i[1]}),n.Th(a,r,s.length),n.Ko(r)},destroy(){n._h(a),l&&(n.Pn(l),l=null,h(f),h(d),h(y),h(p),h(g))}}},createBuffer(){var e=n.ro()
761
- return{vr:e,re(i){const s=(e=>{const i=n.Jo(2*e.length),s=new Uint16Array(t.Pr.buffer,i,e.length)
774
+ return r.decode(i.slice(0,i.indexOf(0)))},ta:s,ea:t=>s(t).replace(/([MLQCZ])/g,"|$1 ").split("|").filter(t=>t.length).map(t=>{var e=t.split(/[ ,]/g)
775
+ return{type:e[0],values:e.slice(1).filter(t=>t.length).map(t=>+t)}}),setScale(t,e){n.Ah(a,t,e)},He(i){var s=Object.entries(i),r=n.qo(8*s.length)
776
+ s.forEach((i,s)=>{t.HEAPU32[r/4+2*s+0]=e(i[0]),t.HEAPF32[r/4+2*s+1]=i[1]}),n.Sh(a,r,s.length),n.Yo(r)},destroy(){n.Eh(a),c&&(n.Dn(c),c=null,h(f),h(d),h(y),h(p),h(w))}}},createBuffer(){var e=n.no()
777
+ return{br:e,oe(i){const s=(e=>{const i=n.qo(2*e.length),s=new Uint16Array(t.$r.buffer,i,e.length)
762
778
  for(let t=0;s.length>t;++t)s[t]=e.charCodeAt(t)
763
- return{vr:i,length:s.length,Ko(){n.Ko(i)}}})(i)
764
- n.ko(e,s.vr,s.length,0,s.length),s.Ko()},oe:()=>n.Fo(e),Mr(t){n.uo(e,{sa:4,na:5,ra:6,oa:7}[t]||0)},ha(t){var i=0
765
- 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)}),n.mo(e,i)},aa(t){var s=i(t)
766
- n.po(e,n.Po(s.vr,-1)),s.Ko()},la(t){var s=i(t)
767
- n.do(e,n.Do(s.vr,-1)),s.Ko()},ca(t){n.xo(e,t)},json(){for(var i=n.So(e),s=[],r=n.Eo(e,0),o=r/4,h=n.Ao(e,0)/4,a=t.HEAPU32.subarray(o,o+5*i),l=t.HEAP32.subarray(h,h+5*i),c=0;i>c;++c)s.push({g:a[5*c+0],Ir:a[5*c+2],ax:l[5*c+0],ay:l[5*c+1],dx:l[5*c+2],dy:l[5*c+3],flags:n.Mo(r+20*c)})
768
- return s},destroy(){n.ho(e)}}},shape:s,ua(e,i,a,c,u){var f=[],d=0,y=!1,p=1048576,g=n.Jo(p),w=o((e,i,s)=>{var o=r.decode(t.HEAPU8.subarray(s,t.HEAPU8.indexOf(0,s)))
769
- 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 "+c)&&(y=!0),y?0:(n.so(e,0,n.So(e),g,p,0,i,l,4),f.push({Ai:o,Fi:JSON.parse(r.decode(t.HEAPU8.subarray(g,t.HEAPU8.indexOf(0,g)))),glyphs:2==n.lo(e)}),1)},"iiiii")
770
- return n.$o(i.vr,w,0,0),s(e,i,a),n.Ko(g),h(w),f},version(){var e=n.Jo(12)
779
+ return{br:i,length:s.length,Yo(){n.Yo(i)}}})(i)
780
+ n.ko(e,s.br,s.length,0,s.length),s.Yo()},he:()=>n.Io(e),Mr(t){n.lo(e,{ia:4,sa:5,na:6,ra:7}[t]||0)},oa(t){var i=0
781
+ 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)}),n.wo(e,i)},ha(t){var s=i(t)
782
+ n.yo(e,n.$o(s.br,-1)),s.Yo()},aa(t){var s=i(t)
783
+ n.fo(e,n.Do(s.br,-1)),s.Yo()},ca(t){n.mo(e,t)},json(){for(var i=n.bo(e),s=[],r=n._o(e,0),o=r/4,h=n.To(e,0)/4,a=t.HEAPU32.subarray(o,o+5*i),c=t.HEAP32.subarray(h,h+5*i),l=0;i>l;++l)s.push({g:a[5*l+0],ce:a[5*l+2],ax:c[5*l+0],ay:c[5*l+1],dx:c[5*l+2],dy:c[5*l+3],flags:n.Lo(r+20*l)})
784
+ return s},destroy(){n.oo(e)}}},shape:s,la(e,i,a,l,u){var f=[],d=0,y=!1,p=1048576,w=n.qo(p),v=o((e,i,s)=>{var o=r.decode(t.HEAPU8.subarray(s,t.HEAPU8.indexOf(0,s)))
785
+ 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:(n.io(e,0,n.bo(e),w,p,0,i,c,4),f.push({Ii:o,ki:JSON.parse(r.decode(t.HEAPU8.subarray(w,t.HEAPU8.indexOf(0,w)))),glyphs:2==n.ao(e)}),1)},"iiiii")
786
+ return n.Bo(i.br,v,0,0),s(e,i,a),n.Yo(w),h(v),f},version(){var e=n.qo(12)
771
787
  n.Ro(e,e+4,e+8)
772
- var i={fa:t.HEAPU32[e/4],da:t.HEAPU32[(e+4)/4],ya:t.HEAPU32[(e+8)/4]}
773
- return n.Ko(e),i},pa(){var e=n.jo()
788
+ var i={ua:t.HEAPU32[e/4],fa:t.HEAPU32[(e+4)/4],da:t.HEAPU32[(e+8)/4]}
789
+ return n.Yo(e),i},ya(){var e=n.Wo()
774
790
  return r.decode(t.HEAPU8.subarray(e,t.HEAPU8.indexOf(0,e)))}}}}catch(t){}var yt=h(dt.exports)
775
- let pt=null,gt=null,wt=null
776
- const mt={ga(t){gt=t,wt=null,pt=null},wa(t){wt=t,gt=null,pt=null},ma:async()=>pt||(pt=new Promise(async(t,e)=>{try{const e={}
777
- if(wt)e.Ur=wt
778
- else{if(!gt)throw Error("HarfBuzz WASM path or buffer must be set before initialization.")
779
- e.jh=(t,e)=>t.endsWith(".wasm")?gt:e+t}const i=await ft(e)
780
- t({hb:yt(i),module:{Fn:i.Fn,exports:i.Nr,Nn:i.Nn}})}catch(t){e(Error("Failed to initialize HarfBuzz: "+t))}}),pt)}
781
- class vt{constructor(t,e){this.text=t,this.va=new Map,e.forEach(t=>{const e=this.va.get(t.hn)||[]
782
- e.push(t),this.va.set(t.hn,e)})}xa(t){const e=[]
783
- return t.ba&&e.push(...this.Sa(t.ba)),t.Ta&&e.push(...this.Ea(t.Ta)),e}Sa(t){const e=[]
791
+ let pt=null,wt=null,vt=null
792
+ const gt={pa(t){wt=t,vt=null,pt=null},wa(t){vt=t,wt=null,pt=null},va:async()=>pt||(pt=new Promise(async(t,e)=>{try{const e={}
793
+ if(vt)e.Ur=vt
794
+ else{if(!wt)throw Error("HarfBuzz WASM path or buffer must be set before initialization.")
795
+ e.Wh=(t,e)=>t.endsWith(".wasm")?wt:e+t}const i=await ft(e)
796
+ t({hb:yt(i),module:{On:i.On,exports:i.Nr,Pn:i.Pn}})}catch(t){e(Error("Failed to initialize HarfBuzz: "+t))}}),pt)}
797
+ class mt{constructor(t,e){this.text=t,this.ga=new Map,e.forEach(t=>{const e=this.ga.get(t.wr)||[]
798
+ e.push(t),this.ga.set(t.wr,e)})}ma(t){const e=[]
799
+ return t.xa&&e.push(...this.ba(t.xa)),t.Sa&&e.push(...this._a(t.Sa)),e}ba(t){const e=[]
784
800
  for(const i of t){let t=0
785
- for(;-1!==(t=this.text.indexOf(i,t));)e.push(this.createTextRange(t,t+i.length,i)),t+=i.length}return e}Ea(t){return t.map(t=>{const e=this.text.slice(t.start,t.end)
801
+ for(;-1!==(t=this.text.indexOf(i,t));)e.push(this.createTextRange(t,t+i.length,i)),t+=i.length}return e}_a(t){return t.map(t=>{const e=this.text.slice(t.start,t.end)
786
802
  return this.createTextRange(t.start,t.end,e)})}createTextRange(t,e,i){const s=[],n=new Map
787
- for(let i=t;e>i;i++){const t=this.va.get(i)
803
+ for(let i=t;e>i;i++){const t=this.ga.get(i)
788
804
  if(t)for(const e of t){s.push(e)
789
- const t=n.get(e.pr)||[]
790
- t.push(e),n.set(e.pr,t)}}return{start:t,end:e,_a:i,bounds:Array.from(n.values()).map(t=>this.Aa(t)),glyphs:s,La:Array.from(n.keys()).sort((t,e)=>t-e)}}Aa(t){if(0===t.length)return{min:{x:0,y:0,z:0},max:{x:0,y:0,z:0}}
805
+ const t=n.get(e.vr)||[]
806
+ t.push(e),n.set(e.vr,t)}}return{start:t,end:e,Ea:i,bounds:Array.from(n.values()).map(t=>this.Ta(t)),glyphs:s,Aa:Array.from(n.keys()).sort((t,e)=>t-e)}}Ta(t){if(0===t.length)return{min:{x:0,y:0,z:0},max:{x:0,y:0,z:0}}
791
807
  let e=1/0,i=1/0,s=1/0,n=-1/0,r=-1/0,o=-1/0
792
808
  for(const h of t)e>h.bounds.min.x&&(e=h.bounds.min.x),i>h.bounds.min.y&&(i=h.bounds.min.y),s>h.bounds.min.z&&(s=h.bounds.min.z),h.bounds.max.x>n&&(n=h.bounds.max.x),h.bounds.max.y>r&&(r=h.bounds.max.y),h.bounds.max.z>o&&(o=h.bounds.max.z)
793
- return{min:{x:e,y:i,z:s},max:{x:n,y:r,z:o}}}}class xt{static{this.Ma=new Map}static{this.Ga=null}static{this.Fa=new Map}static{this.Ia=0}static{this.Oa=1/0}static{this.Ca=0}static ka(t){return Object.keys(t).sort().map(e=>`${e}:${t[e]}`).join(",")}constructor(){this.Ba="",xt.Ga||(xt.Ga=mt.ma()),this.$a=new U(()=>xt.Ga)}static Ua(t){mt.ga(t),xt.Ga=null}static Pa(t){mt.wa(t),xt.Ga=null}static init(){return xt.Ga||(xt.Ga=mt.ma()),xt.Ga}static async create(t){if(!t.font)throw Error("Font is required. Specify options.font as a URL string or ArrayBuffer.")
794
- xt.Ga||(xt.Ga=mt.ma())
809
+ return{min:{x:e,y:i,z:s},max:{x:n,y:r,z:o}}}}class xt{static{this.La=new Map}static{this.Ma=null}static{this.Ia=new Map}static{this.Ga=0}static{this.Oa=1/0}static{this.Fa=0}static ka(t){return Object.keys(t).sort().map(e=>`${e}:${t[e]}`).join(",")}constructor(){this.Ca="",xt.Ma||(xt.Ma=gt.va()),this.Ba=new $(()=>xt.Ma)}static Ua(t){gt.pa(t),xt.Ma=null}static $a(t){gt.wa(t),xt.Ma=null}static init(){return xt.Ma||(xt.Ma=gt.va()),xt.Ma}static async create(t){if(!t.font)throw Error("Font is required. Specify options.font as a URL string or ArrayBuffer.")
810
+ xt.Ma||(xt.Ma=gt.va())
795
811
  const e=await xt.Na(t),i=new xt
796
812
  i.Da(e)
797
- const{font:s,za:n,...r}=t,o=await i.Ra(r),h=async e=>{const s={...t}
813
+ const s=await i.Pa(t),n=async e=>{const s={...t}
798
814
  for(const t in e){const i=e[t]
799
- void 0!==i&&(s[t]=i)}if(void 0!==e.font||void 0!==e.je||void 0!==e.he){const t=await xt.Na(s)
800
- i.Da(t),i.Wa()}t=s
801
- const{font:n,za:r,...o}=t
802
- return{...await i.Ra(o),getLoadedFont(){return i.getLoadedFont()},getCacheStatistics(){return i.getCacheStatistics()},clearCache(){return i.clearCache()},measureTextWidth(t,e){return i.measureTextWidth(t,e)},update:h}}
803
- return{...o,getLoadedFont(){return i.getLoadedFont()},getCacheStatistics(){return i.getCacheStatistics()},clearCache(){return i.clearCache()},measureTextWidth(t,e){return i.measureTextWidth(t,e)},update:h}}static async Na(t){let e="string"==typeof t.font?t.font:"buffer-"+xt.ja(t.font)
804
- t.je&&(e+="_var_"+xt.ka(t.je)),t.he&&(e+="_feat_"+xt.ka(t.he))
805
- let i=xt.Fa.get(e)
806
- return i||(i=await xt.Ha(e,t.font,t.je,t.he)),i}static async Ha(t,e,i,s){const n=new xt
807
- await n.Pe(e,i,s)
815
+ void 0!==i&&(s[t]=i)}if(void 0!==e.font||void 0!==e.qe||void 0!==e.ae){const t=await xt.Na(s)
816
+ i.Da(t),i.Ra()}return t=s,{...await i.Pa(t),getLoadedFont(){return i.getLoadedFont()},getCacheStatistics(){return i.getCacheStatistics()},clearCache(){return i.clearCache()},measureTextWidth(t,e){return i.measureTextWidth(t,e)},update:n}}
817
+ return{...s,getLoadedFont(){return i.getLoadedFont()},getCacheStatistics(){return i.getCacheStatistics()},clearCache(){return i.clearCache()},measureTextWidth(t,e){return i.measureTextWidth(t,e)},update:n}}static async Na(t){let e="string"==typeof t.font?t.font:"buffer-"+xt.za(t.font)
818
+ t.qe&&(e+="_var_"+xt.ka(t.qe)),t.ae&&(e+="_feat_"+xt.ka(t.ae))
819
+ let i=xt.Ia.get(e)
820
+ return i||(i=await xt.Wa(e,t.font,t.qe,t.ae)),i}static async Wa(t,e,i,s){const n=new xt
821
+ await n.Re(e,i,s)
808
822
  const r=n.getLoadedFont()
809
- return xt.Fa.set(t,r),xt.Va(r),xt.qa(),r}static Va(t){xt.Ia+=t.Ye?.byteLength??0}static Ja(t){const e=xt.Fa.get(t)
810
- e&&(xt.Ia-=e.Ye?.byteLength??0,0>xt.Ia&&(xt.Ia=0))}static qa(){if(xt.Oa!==1/0)for(;xt.Ia>xt.Oa&&xt.Fa.size>0;){const t=xt.Fa.keys().next().value
823
+ return xt.Ia.set(t,r),xt.ja(r),xt.Ha(),r}static ja(t){xt.Ga+=t.Qe?.byteLength??0}static Va(t){const e=xt.Ia.get(t)
824
+ e&&(xt.Ga-=e.Qe?.byteLength??0,0>xt.Ga&&(xt.Ga=0))}static Ha(){if(xt.Oa!==1/0)for(;xt.Ga>xt.Oa&&xt.Ia.size>0;){const t=xt.Ia.keys().next().value
811
825
  if(void 0===t)break
812
- xt.Ja(t),xt.Fa.delete(t)}}static ja(t){if(t){const e=new Uint8Array(t)
826
+ xt.Va(t),xt.Ia.delete(t)}}static za(t){if(t){const e=new Uint8Array(t)
813
827
  let i=2166136261
814
828
  const s=Math.min(32,e.length),n=Math.floor(e.length/s)
815
829
  for(let t=0;s>t;t++)i^=e[t*n],i=Math.imul(i,16777619)
816
- return i^=e.length,i=Math.imul(i,16777619),(i>>>0).toString(36)}return"c"+ ++xt.Ca}Da(t){this.ae=t
817
- const e=xt.ja(t.Ye)
818
- this.Ba="font_"+e,t.je&&(this.Ba+="_var_"+xt.ka(t.je)),t.he&&(this.Ba+="_feat_"+xt.ka(t.he))}async Pe(t,e,i){u.start("Text.loadFont",{Ya:"string"==typeof t?t:`buffer(${t.byteLength})`}),xt.Ga||(xt.Ga=mt.ma()),await xt.Ga
830
+ return i^=e.length,i=Math.imul(i,16777619),(i>>>0).toString(36)}return"c"+ ++xt.Fa}Da(t){this.le=t
831
+ const e=xt.za(t.Qe)
832
+ this.Ca="font_"+e,t.qe&&(this.Ca+="_var_"+xt.ka(t.qe)),t.ae&&(this.Ca+="_feat_"+xt.ka(t.ae))}async Re(t,e,i){xt.Ma||(xt.Ma=gt.va()),await xt.Ma
819
833
  const s="string"==typeof t?await fetch(t).then(e=>{if(!e.ok)throw Error(`Failed to load font from ${t}: HTTP ${e.status} ${e.statusText}`)
820
834
  return e.arrayBuffer()}):t
821
- try{this.ae&&this.destroy(),this.ae=await this.$a.Pe(s,e),i&&(this.ae.he=i)
822
- const t=xt.ja(s)
823
- this.Ba="font_"+t,e&&(this.Ba+="_var_"+xt.ka(e)),i&&(this.Ba+="_feat_"+xt.ka(i))}catch(t){throw c.error("Failed to load font:",t),t}finally{u.end("Text.loadFont")}}async Ra(t){u.start("Text.createGeometry",{textLength:t.text.length,size:t.size||72,hasLayout:!!t.layout,mode:"cached"})
824
- try{if(!this.ae)throw Error("Font not loaded. Use Text.create() with a font option.")
825
- const e=await this.Ka(t)
826
- if(this.Xa(e),this.Qa(t=e),!this._r){const e=t.za?o(t.za):W
827
- this._r=new at(e,this.ae),this._r.Xn(this.Ba)}this._r.Us(t.Za),this._r.vn(t.tl),this.ae.font.setScale(this.ae.upem,this.ae.upem),this.el||(this.el=new lt(this.ae,this._r))
828
- const i=this.il(t),s=t.ir??this.ae.He??!1,n=this.el.Ar(i.lines,i.sl,i.letterSpacing,i.align,i.direction,t.color,t.text)
835
+ try{this.le&&this.destroy(),this.le=await this.Ba.Re(s,e),i&&(this.le.ae=i)
836
+ const t=xt.za(s)
837
+ this.Ca="font_"+t,e&&(this.Ca+="_var_"+xt.ka(e)),i&&(this.Ca+="_feat_"+xt.ka(i))}catch(t){throw l.error("Failed to load font:",t),t}}async Pa(t){try{if(!this.le)throw Error("Font not loaded. Use Text.create() with a font option.")
838
+ const e=await this.qa(t)
839
+ if(this.Ja(e),this.Ya(t=e),!this.Tr){const e=t.Ka?o(t.Ka):W
840
+ this.Tr=new at(e,this.le),this.Tr.Qn(this.Ca)}this.Tr.Ds(t.Xa),this.Tr.xn(t.Qa),this.le.font.setScale(this.le.upem,this.le.upem),this.Za||(this.Za=new ct(this.le,this.Tr))
841
+ const i=this.tc(t),s=t.ec??this.le.Je??!1,n=this.Za.Ar(i.lines,i.sc,i.letterSpacing,i.align,i.direction,t.color,t.text)
829
842
  let r
830
- if(t.color&&"object"==typeof t.color&&!Array.isArray(t.color)&&(t.color.ba||t.color.Ta)){if(r=new Set,t.color.ba)for(const e of Object.keys(t.color.ba)){let i=0
843
+ if(t.color&&"object"==typeof t.color&&!Array.isArray(t.color)&&(t.color.xa||t.color.Sa)){if(r=new Set,t.color.xa)for(const e of Object.keys(t.color.xa)){let i=0
831
844
  for(;-1!==(i=t.text.indexOf(e,i));){for(let t=i;i+e.length>t;t++)r.add(t)
832
- i+=e.length}}if(t.color.Ta)for(const e of t.color.Ta)for(let t=e.start;e.end>t;t++)r.add(t)}const h=this._r.Zn(n,i.depth,s,this.ae.p.Se,t.nl||!1,r),a=this._r.Tr(),l=this.rl(h.vertices,h.normals,h.indices,h.yr,h.planeBounds,t,a,t.text)
833
- if(t.nl){const t=this.ol(l.vertices.length/3,l.glyphs)
834
- l.glyphAttributes=t}return l}finally{u.end("Text.createGeometry")}}async Ka(t){if(!1!==t.layout?.wt&&t.layout?.width){const e=t.layout?.language||"en-us"
835
- if(!t.layout?.xt?.[e])try{if(!xt.Ma.has(e)){const i=await s(e,t.layout?.hl)
836
- xt.Ma.set(e,i)}return{...t,layout:{...t.layout,xt:{...t.layout?.xt,[e]:xt.Ma.get(e)}}}}catch(i){return c.warn(`Failed to load patterns for ${e}: ${i}`),{...t,layout:{...t.layout,wt:!1}}}}return t}Xa(t){if(!t.text)throw Error("Text content is required")
837
- const e=t.al??1e5
838
- if(t.text.length>e)throw Error(`Text exceeds ${e} character limit`)}Qa(t){t.je&&this.ae&&xt.ka(t.je)!==xt.ka(this.ae.je||{})&&(this.ae.font.Re(t.je),this.ae.je=t.je)}il(t){if(!this.ae)throw Error("Font not loaded. Use Text.create() with a font option")
839
- const{text:e,size:i=72,depth:s=0,lineHeight:n=1,letterSpacing:r=0,layout:o={}}=t,{width:h,direction:a="ltr",align:l=("rtl"===a?"right":"left"),vt:c=!0,wt:u=!0,language:p="en-us",St:g=f,Tt:w=d,Et:m=y,_t:v,xt:x,At:b,Lt:S,Mt:T,Gt:E,Ft:_,It:A,Ot:L,Ct:M,kt:G,Bt:F}=o
840
- let O
841
- void 0!==h&&(O=h*(this.ae.upem/i))
842
- const C=s*(this.ae.upem/i),k=C>0?Math.max(C,25e-6*this.ae.upem):0
843
- this.ll||(this.ll=new I(this.ae))
844
- const $=this.ll.le({text:e,width:O,align:l,direction:a,wt:u,language:p,vt:c,St:g,Tt:w,Et:m,_t:v,xt:x,At:b,Lt:S,Mt:T,Gt:E,Ft:_,It:A,Ot:L,Ct:M,kt:G,Bt:F,letterSpacing:r}),U=B.Fe(this.ae.p)
845
- return{lines:$.lines,sl:(U.de-U.ye)*n,letterSpacing:r,align:l,direction:a,depth:k,size:i}}cl(t,e,i,s){const n=t.length/3,r=new Float32Array(3*n),o=[]
845
+ i+=e.length}}if(t.color.Sa)for(const e of t.color.Sa)for(let t=e.start;e.end>t;t++)r.add(t)}const h=this.Tr.tr(n,i.depth,s,this.le.p.Te,t.nc||!1,r),a=this.Tr._r(),c=this.rc(h.vertices,h.normals,h.indices,h.pr,h.planeBounds,t,a,t.text)
846
+ if(t.nc){const t=this.oc(c.vertices.length/3,c.glyphs)
847
+ c.glyphAttributes=t}return c}finally{}}async qa(t){if(!1!==t.layout?.vt&&t.layout?.width){const e=t.layout?.language||"en-us"
848
+ if(!t.layout?.bt?.[e])try{if(!xt.La.has(e)){const i=await s(e,t.layout?.hc)
849
+ xt.La.set(e,i)}return{...t,layout:{...t.layout,bt:{...t.layout?.bt,[e]:xt.La.get(e)}}}}catch(i){return l.warn(`Failed to load patterns for ${e}: ${i}`),{...t,layout:{...t.layout,vt:!1}}}}return t}Ja(t){if(!t.text)throw Error("Text content is required")
850
+ const e=t.ac??1e5
851
+ if(t.text.length>e)throw Error(`Text exceeds ${e} character limit`)}Ya(t){t.qe&&this.le&&xt.ka(t.qe)!==xt.ka(this.le.qe||{})&&(this.le.font.He(t.qe),this.le.qe=t.qe)}tc(t){if(!this.le)throw Error("Font not loaded. Use Text.create() with a font option")
852
+ const{text:e,size:i=72,depth:s=0,lineHeight:n=1,letterSpacing:r=0,layout:o={}}=t,{width:h,direction:a="ltr",align:c=("rtl"===a?"right":"left"),gt:l=!0,vt:y=!0,language:p="en-us",_t:w=u,Et:v=f,Tt:g=d,At:m,bt:x,Lt:b,Mt:S,It:_,Gt:E,Ot:T,Ft:A,kt:L,Ct:M,Bt:I,Ut:G}=o
853
+ let F
854
+ void 0!==h&&(F=h*(this.le.upem/i))
855
+ const k=s*(this.le.upem/i),C=k>0?Math.max(k,25e-6*this.le.upem):0
856
+ this.cc||(this.cc=new O(this.le))
857
+ const U=this.cc.ue({text:e,width:F,align:c,direction:a,vt:y,language:p,gt:l,_t:w,Et:v,Tt:g,At:m,bt:x,Lt:b,Mt:S,It:_,Gt:E,Ot:T,Ft:A,kt:L,Ct:M,Bt:I,Ut:G,letterSpacing:r}),$=B.ke(this.le.p)
858
+ return{lines:U.lines,sc:($.we-$.ve)*n,letterSpacing:r,align:c,direction:a,depth:C,size:i}}lc(t,e,i,s){const n=t.length/3,r=new Float32Array(3*n),o=[]
846
859
  if(Array.isArray(i)){for(let t=0;n>t;t++){const e=3*t
847
- r[e]=i[0],r[e+1]=i[1],r[e+2]=i[2]}o.push({start:0,end:s.length,_a:s,color:i,bounds:[],glyphs:e,La:[...new Set(e.map(t=>t.pr))]})}else{const t=i.default||[1,1,1]
860
+ r[e]=i[0],r[e+1]=i[1],r[e+2]=i[2]}o.push({start:0,end:s.length,Ea:s,color:i,bounds:[],glyphs:e,Aa:[...new Set(e.map(t=>t.vr))]})}else{const t=i.default||[1,1,1]
848
861
  for(let e=0;r.length>e;e+=3)r[e]=t[0],r[e+1]=t[1],r[e+2]=t[2]
849
- i.ba&&new vt(s,e).xa({ba:Object.keys(i.ba)}).forEach(t=>{const e=i.ba[t._a]
850
- e&&(t.glyphs.forEach(t=>{for(let i=0;t.wr>i;i++){const s=3*(t.gr+i)
851
- s>=0&&r.length>s&&(r[s]=e[0],r[s+1]=e[1],r[s+2]=e[2])}}),o.push({start:t.start,end:t.end,_a:t._a,color:e,bounds:t.bounds,glyphs:t.glyphs,La:t.La}))}),i.Ta&&i.Ta.forEach(t=>{const i=[]
852
- for(const s of e)if(s.hn>=t.start&&t.end>s.hn){i.push(s)
853
- for(let e=0;s.wr>e;e++){const i=3*(s.gr+e)
854
- i>=0&&r.length>i&&(r[i]=t.color[0],r[i+1]=t.color[1],r[i+2]=t.color[2])}}o.push({start:t.start,end:t.end,_a:s.slice(t.start,t.end),color:t.color,bounds:[],glyphs:i,La:[...new Set(i.map(t=>t.pr))]})})}return{colors:r,ul:o}}rl(t,e,i,s,n,r,o,h){const{layout:a={},size:l=72}=r,{width:c,align:u=("rtl"===a.direction?"right":"left")}=a
855
- this.ll||(this.ll=new I(this.ae))
856
- const f=this.ll.ce(t,{width:c,align:u,planeBounds:n}),d=f.offset
857
- n.min.x=f.ue.min.x,n.max.x=f.ue.max.x
858
- const y=l/this.ae.upem
859
- for(let e=0;t.length>e;e++)t[e]*=y
862
+ i.xa&&new mt(s,e).ma({xa:Object.keys(i.xa)}).forEach(t=>{const e=i.xa[t.Ea]
863
+ e&&(t.glyphs.forEach(t=>{for(let i=0;t.gr>i;i++){const s=3*(t.sr+i)
864
+ s>=0&&r.length>s&&(r[s]=e[0],r[s+1]=e[1],r[s+2]=e[2])}}),o.push({start:t.start,end:t.end,Ea:t.Ea,color:e,bounds:t.bounds,glyphs:t.glyphs,Aa:t.Aa}))}),i.Sa&&i.Sa.forEach(t=>{const i=[]
865
+ for(const s of e)if(s.wr>=t.start&&t.end>s.wr){i.push(s)
866
+ for(let e=0;s.gr>e;e++){const i=3*(s.sr+e)
867
+ i>=0&&r.length>i&&(r[i]=t.color[0],r[i+1]=t.color[1],r[i+2]=t.color[2])}}o.push({start:t.start,end:t.end,Ea:s.slice(t.start,t.end),color:t.color,bounds:[],glyphs:i,Aa:[...new Set(i.map(t=>t.vr))]})})}return{colors:r,uc:o}}rc(t,e,i,s,n,r,o,h){const{layout:a={},size:c=72}=r,{width:l,align:u=("rtl"===a.direction?"right":"left")}=a
868
+ this.cc||(this.cc=new O(this.le))
869
+ const f=this.cc.ye({width:l,align:u,planeBounds:n}),d=f.offset
870
+ n.min.x=f.de.min.x,n.max.x=f.de.max.x
871
+ const y=c/this.le.upem,p=d*y
872
+ if(0===p)for(let e=0;t.length>e;e++)t[e]*=y
873
+ else for(let e=0;t.length>e;e+=3)t[e]=t[e]*y+p,t[e+1]*=y,t[e+2]*=y
860
874
  n.min.x*=y,n.min.y*=y,n.min.z*=y,n.max.x*=y,n.max.y*=y,n.max.z*=y
861
875
  for(let t=0;s.length>t;t++){const e=s[t]
862
- 0!==d&&(e.bounds.min.x+=d,e.bounds.max.x+=d),e.bounds.min.x*=y,e.bounds.min.y*=y,e.bounds.min.z*=y,e.bounds.max.x*=y,e.bounds.max.y*=y,e.bounds.max.z*=y}let p,g
863
- if(r.color){const e=this.cl(t,s,r.color,r.text)
864
- p=e.colors,g=e.ul}const w=this._r.xn()
865
- return{vertices:t,normals:e,indices:i,colors:p,glyphs:s,planeBounds:n,stats:{fl:i.length/3,dl:t.length/3,Es:w.Es,_s:w._s,As:w.As,...o||{}},query(t){if(!h)throw Error("Original text not available for querying")
866
- return new vt(h,s).xa(t)},ul:g,glyphAttributes:void 0}}Ie(){if(!this.ae)throw Error("Font not loaded. Call loadFont() first")
867
- return B.Ie(this.ae.p)}static async yl(t,e){await Promise.all(t.map(async t=>{if(!xt.Ma.has(t))try{const i=await s(t,e)
868
- xt.Ma.set(t,i)}catch(e){c.warn(`Failed to pre-load patterns for ${t}: ${e}`)}}))}static pl(t,e){xt.Ma.set(t,e)}static gl(){xt.Fa.clear(),xt.Ia=0}static wl(t){xt.Oa=t===1/0?1/0:1048576*Math.max(1,Math.floor(t)),xt.qa()}getLoadedFont(){return this.ae}measureTextWidth(t,e=0){if(!this.ae)throw Error("Font not loaded. Call loadFont() first")
869
- return F.measureTextWidth(this.ae,t,e)}getCacheStatistics(){return this._r?this._r.Tr():null}clearCache(){this._r&&this._r.clearCache()}ol(t,e){const i=new Float32Array(3*t),s=new Float32Array(t),n=new Float32Array(t)
876
+ e.bounds.min.x=e.bounds.min.x*y+p,e.bounds.min.y*=y,e.bounds.min.z*=y,e.bounds.max.x=e.bounds.max.x*y+p,e.bounds.max.y*=y,e.bounds.max.z*=y}let w,v
877
+ if(r.color){const e=this.lc(t,s,r.color,r.text)
878
+ w=e.colors,v=e.uc}const g=this.Tr.bn()
879
+ return{vertices:t,normals:e,indices:i,colors:w,glyphs:s,planeBounds:n,stats:{fc:i.length/3,dc:t.length/3,As:g.As,Ls:g.Ls,Ms:g.Ms,...o||{}},query(t){if(!h)throw Error("Original text not available for querying")
880
+ return new mt(h,s).ma(t)},uc:v,glyphAttributes:void 0}}Ce(){if(!this.le)throw Error("Font not loaded. Call loadFont() first")
881
+ return B.Ce(this.le.p)}static async yc(t,e){await Promise.all(t.map(async t=>{if(!xt.La.has(t))try{const i=await s(t,e)
882
+ xt.La.set(t,i)}catch(e){l.warn(`Failed to pre-load patterns for ${t}: ${e}`)}}))}static wc(t,e){xt.La.set(t,e)}static vc(){xt.Ia.clear(),xt.Ga=0}static gc(t){xt.Oa=t===1/0?1/0:1048576*Math.max(1,Math.floor(t)),xt.Ha()}getLoadedFont(){return this.le}measureTextWidth(t,e=0){if(!this.le)throw Error("Font not loaded. Call loadFont() first")
883
+ return G.measureTextWidth(this.le,t,e)}getCacheStatistics(){return this.Tr?this.Tr._r():null}clearCache(){this.Tr&&this.Tr.clearCache()}oc(t,e){const i=new Float32Array(3*t),s=new Float32Array(t),n=new Float32Array(t)
870
884
  return e.forEach((e,r)=>{const o=(e.bounds.min.x+e.bounds.max.x)/2,h=(e.bounds.min.y+e.bounds.max.y)/2,a=(e.bounds.min.z+e.bounds.max.z)/2
871
- for(let l=0;e.wr>l;l++){const c=e.gr+l
872
- t>c&&(i[3*c]=o,i[3*c+1]=h,i[3*c+2]=a,s[c]=r,n[c]=e.pr)}}),{ml:i,un:s,vl:n}}Wa(){this._r=void 0,this.el=void 0,this.ll=void 0}destroy(){if(!this.ae)return
873
- const t=this.ae
874
- try{U.Ke(t)}catch(t){c.warn("Error destroying HarfBuzz objects:",t)}finally{this.ae=void 0,this.ll=void 0,this.el=void 0}}}t.DEFAULT_CURVE_FIDELITY=it,t.FontMetadataExtractor=B,t.Text=xt,t.xl=o,t.bl=W})
885
+ for(let c=0;e.gr>c;c++){const l=e.sr+c
886
+ t>l&&(i[3*l]=o,i[3*l+1]=h,i[3*l+2]=a,s[l]=r,n[l]=e.vr)}}),{mc:i,fn:s,xc:n}}Ra(){this.Tr=void 0,this.Za=void 0,this.cc=void 0}destroy(){if(!this.le)return
887
+ const t=this.le
888
+ try{$.Ze(t)}catch(t){l.warn("Error destroying HarfBuzz objects:",t)}finally{this.le=void 0,this.cc=void 0,this.Za=void 0}}}t.DEFAULT_CURVE_FIDELITY=it,t.FontMetadataExtractor=B,t.Text=xt,t.bc=o,t.Sc=W})