three-text 0.2.16 → 0.2.18

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.18
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}M(){if(!c)return
53
+ const t=this.m()
54
+ console.table(t),Object.keys(t).sort().join(", ")}L(){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,M=.7
68
+ class L{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,819 @@ 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=L.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,Mt:O=E,Lt:F=T,It:k=b,Gt:C=S,Ot:B=g,Ft:U=m,kt:$=x,Ct:N=0,Bt:D=!1,Ut:P=M}=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=L.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=L.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=L.qt(t,i,_,N,!1,0,W)
139
+ if(0===r.length&&R&&(t=L.J(e,a,c,!0,o,y,O,F,W),r=L.qt(t,i,v,N,!1,0,W)),0===r.length&&(V=z+H*i*.1,r=L.qt(t,i,v,N,!0,V,W)),0===r.length&&(r=L.qt(t,i,A,N,!0,V,W)),r.length>0){const o=L.Jt(t)
140
+ if(q=L.Yt(e,t,r,i,s,n,o,W),J&&r.length>1&&L.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=L.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&&L.Xt(t,a,s,e,i,r,h,o,n,c),l.type===p.DISCRETIONARY&&1/0>l.Z&&L.Xt(t,a,s,e,i,r,h,o,n,c),l.type===p.GLUE&&s>0&&t[s-1].type===p.BOX&&L.Xt(t,a,s,e,i,r,h,o,n,c),L.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=L.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?L.H(v,t):10001}else b=0>v?m>0?-v>m?10001:L.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=L.ie(b,v>0)
168
+ if(!l&&!S&&b>n)continue
169
+ let T=0,A=0,M=(h?.zt??0)+b,I=1e4>Math.abs(M)?M*M: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=L.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,Mt:d,Lt: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=L.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,Mt:d,Lt: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,Me:d?.ve||null,Le: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.Me?{we:t.Ae,ve:t.Me,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 M(t,e){d(t.a),t.c=!1,t.a=e,e.Ei=t}function L(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&&(M(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}M(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=L(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?M(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=L(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=L(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.Mi=null,this.Li=[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.Li[0]=t,this.Li[1]=e,this.Li[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.Mi)?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.Mi=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.Mi=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.Li[0],r=this.Li[1],h=this.Li[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){const n=!i&&!e
474
+ let r,o
475
+ n?(o=this.Qi(t,!0),(e||s)&&(r=this.Qi(t))):(r=this.Qi(t),o=r)
476
+ let h=s?n?o:r??this.Qi(t):[]
477
+ if(e){const t=this.Zi(r,"boundary")
478
+ if(!t)return l.warn("libtess returned empty result from boundary pass"),{Yi:{vertices:[],indices:[]},Ki:[]}
479
+ o=this.ts(t),s&&(h=o)}const a=this.Zi(o,"triangles")
480
+ return a?{Yi:{vertices:a.vertices,indices:a.indices||[]},Ki:h}:(l.warn(e?"libtess returned empty result from triangulation pass":"libtess returned empty result from single-pass triangulation"),{Yi:{vertices:[],indices:[]},Ki:h})}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,es:r}}ts(t){if(!t.es)return[]
471
494
  const e=[]
472
- for(const i of t.ts){const s=[]
495
+ for(const i of t.es){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
475
- 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)
478
- 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
486
- 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
489
- 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})
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}ss(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
492
503
  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)
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){return 4294967296*(e>t?t:e)+(e>t?e:t)}hs(t,e=0,i){const s=t.Yi.vertices,n=t.Yi.indices,r=s.length/2
507
+ let o=[]
508
+ if(0!==e){const t=new Map,e=new Map
509
+ for(let i=0;n.length>i;i+=3){const s=n[i],r=n[i+1],o=n[i+2],h=this.rs(s,r),a=(t.get(h)??0)+1
510
+ t.set(h,a),1===a&&e.set(h,[s,r])
511
+ const c=this.rs(r,o),l=(t.get(c)??0)+1
512
+ t.set(c,l),1===l&&e.set(c,[r,o])
513
+ const u=this.rs(o,s),f=(t.get(u)??0)+1
514
+ t.set(u,f),1===f&&e.set(u,[o,s])}o=[]
515
+ for(const[i,s]of t){if(1!==s)continue
516
+ const t=e.get(i)
517
+ t&&o.push(t)}}const h=0===e?0:o.length,a=(0===e?r:2*r)+(0===e?0:4*h),c=new Float32Array(3*a),l=new Float32Array(3*a),u=new Uint32Array(0===e?n.length:2*n.length+6*h)
518
+ if(0===e){let t=0
519
+ for(let e=0;s.length>e;e+=2)c[t]=s[e],c[t+1]=s[e+1],c[t+2]=0,l[t]=0,l[t+1]=0,l[t+2]=1,t+=3
520
+ for(let t=0;n.length>t;t++)u[t]=n[t]
521
+ return{vertices:c,normals:l,indices:u}}const f=25e-6*i,d=e>f?e:f
522
+ for(let t=0,e=0;s.length>t;t+=2,e++){const i=s[t],n=s[t+1],o=3*e
523
+ c[o]=i,c[o+1]=n,c[o+2]=0,l[o]=0,l[o+1]=0,l[o+2]=-1
524
+ const h=3*(r+e)
525
+ c[h]=i,c[h+1]=n,c[h+2]=d,l[h]=0,l[h+1]=0,l[h+2]=1}for(let t=0;n.length>t;t++)u[t]=n[n.length-1-t]
526
+ for(let t=0;n.length>t;t++)u[n.length+t]=n[t]+r
527
+ let y=2*r,p=2*n.length
528
+ for(let t=0;o.length>t;t++){const[e,i]=o[t],n=2*e,r=2*i,h=s[n],a=s[n+1],f=s[r],w=s[r+1],v=f-h,g=w-a,m=v*v+g*g
529
+ let x=0,b=0
530
+ if(m>0){const t=1/Math.sqrt(m)
531
+ x=g*t,b=-v*t}const S=y,_=3*S
532
+ c[_]=h,c[_+1]=a,c[_+2]=0,c[_+3]=f,c[_+4]=w,c[_+5]=0,c[_+6]=h,c[_+7]=a,c[_+8]=d,c[_+9]=f,c[_+10]=w,c[_+11]=d,l[_]=x,l[_+1]=b,l[_+2]=0,l[_+3]=x,l[_+4]=b,l[_+5]=0,l[_+6]=x,l[_+7]=b,l[_+8]=0,l[_+9]=x,l[_+10]=b,l[_+11]=0,u[p++]=S,u[p++]=S+1,u[p++]=S+2,u[p++]=S+1,u[p++]=S+3,u[p++]=S+2,y+=4}return{vertices:c,normals:l,indices:u}}}class Q{constructor(){}cs(t,e){const i=t.length
533
+ return 0===i?[]:1===i?[[0]]:this.ls(t,e)}ls(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)
534
+ 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
535
  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]
536
+ for(let i=0;n>i;i++)r[i]=this.us(t[i],e[i]),o[h++]=[r[i].fs,0,i],o[h++]=[r[i].ds,1,i]
500
537
  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
538
+ const a=Array.from({length:n},(t,e)=>e),c=Array(n).fill(0),l=new Set
502
539
  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)
540
+ for(const i of l){const n=r[i]
541
+ n.ys+.001>t.ps&&t.ys>n.ps-.001&&s(e,i)}l.add(e)}else l.delete(e)
505
542
  const u=new Map
506
543
  for(let t=0;n>t;t++){const e=i(t)
507
544
  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
545
+ s||(s=[],u.set(e,s)),s.push(t)}return Array.from(u.values())}us(t,e){return{fs:t.bounds.min.x+e.x,ps:t.bounds.min.y+e.y,ds:t.bounds.max.x+e.x,ys:t.bounds.max.y+e.y}}}class Z{constructor(t){this.ws=[],this.vs=new Map,this.compare=t}k(t){const e=this.vs.get(t)
546
+ if(void 0!==e)return this.gs(e),void this.xs(e)
547
+ const i=this.ws.length
548
+ this.ws.push(t),this.vs.set(t,i),this.gs(i)}bs(){const t=this.ws.length
512
549
  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]
550
+ if(1===t){const t=this.ws.pop()
551
+ return this.vs.clear(),t}const e=this.ws[0],i=this.ws.pop()
552
+ return this.ws[0]=i,this.vs.delete(e),this.vs.set(i,0),this.xs(0),e}update(t){const e=this.vs.get(t)
553
+ void 0!==e?(this.gs(e),this.xs(e)):this.k(t)}Ss(){return!this.ws.length}_s(t,e){const i=this.ws[t],s=this.ws[e]
554
+ this.ws[t]=s,this.ws[e]=i,this.vs.set(i,e),this.vs.set(s,t)}gs(t){const e=this.ws[t]
555
+ for(;t>0;){const i=t-1>>1,s=this.ws[i]
519
556
  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
557
+ this.ws[t]=s,this.vs.set(s,t),t=i}this.ws[t]=e,this.vs.set(e,t)}xs(t){const e=this.ws[t],i=this.ws.length,s=i>>1
521
558
  for(;s>t;){const s=1+(t<<1),n=s+1
522
559
  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]
560
+ const h=this.ws[s]
561
+ if(0>this.compare(h,o)&&(r=s,o=h),i>n){const t=this.ws[n]
525
562
  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)
563
+ this.ws[t]=o,this.vs.set(o,t),t=r}this.ws[t]=e,this.vs.set(e,t)}}const tt={enabled:!0,Es:1,Ts:.0087,As:10}
564
+ class et{constructor(t){this.stats={Ms:0,Ls:0,Is:0},this.config=t}Gs(t){this.config=t}Os(t){if(!this.config.enabled||2>=t.points.length)return t
565
+ this.stats.Is+=t.points.length
566
+ const e=t.points
567
+ if(5>e.length)return t
568
+ let i=this.Fs(e,this.config.Es)
569
+ return 3>i.length?t:(i=this.ks(i,this.config.Ts),3>i.length?t:{...t,points:i})}Fs(t,e){if(3>=t.length)return t
570
+ const i=t.length,s=t.map((t,e)=>({index:e,Cs:1/0,pi:null,next:null}))
571
+ for(let t=0;s.length>t;t++)s[t].pi=s[t-1]||null,s[t].next=s[t+1]||null
572
+ const n=new Z((t,e)=>t.Cs-e.Cs)
534
573
  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=[]
574
+ i.Cs=this.Bs(t[i.pi.index],t[i.index],t[i.next.index]),n.k(i)}let r=i
575
+ for(;!n.Ss()&&r>3;){const i=n.bs()
576
+ if(!i||i.Cs>e)break
577
+ if(this.config.As>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)
578
+ if(this.config.As>n||this.config.As>r)continue}i.pi&&(i.pi.next=i.next),i.next&&(i.next.pi=i.pi),r--,i.pi&&i.pi.pi&&(i.pi.Cs=this.Bs(t[i.pi.pi.index],t[i.pi.index],t[i.next.index]),n.update(i.pi)),i.next&&i.next.next&&(i.next.Cs=this.Bs(t[i.pi.index],t[i.next.index],t[i.next.next.index]),n.update(i.next))}const o=[]
540
579
  let h=s[0]
541
580
  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
581
+ return this.stats.Ms+=i-o.length,o}ks(t,e){if(2>=t.length)return t
543
582
  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
557
- 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)
583
+ 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.As*this.config.As
584
+ 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}Bs(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}}Us(){this.stats={Ms:0,Ls:0,Is:0}}}const it={$s:.5,Ns:.2},st=1e-6
585
+ class nt{constructor(t){this.Ds={...it,...t}}Ps(t){this.Ds={...it,...t}}Rs(t,e,i){const s=[]
586
+ return this.zs(t.x,t.y,e.x,e.y,i.x,i.y,s),this.Ws(i.x,i.y,s),s}js(t,e,i,s){const n=[]
587
+ return this.Hs(t.x,t.y,e.x,e.y,i.x,i.y,s.x,s.y,n),this.Ws(s.x,s.y,n),n}zs(t,e,i,s,n,r,o,h=0){if(h>16)return
588
+ 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.Ds.$s??it.$s,g=v*v
589
+ if(w>st){if(g*(y*y+p*p)>=w*w){const h=this.Ds.Ns??it.Ns
590
+ if(0>=h)return void this.Ws(i,s,o)
591
+ {const a=i-t,c=s-e,l=n-i,u=r-s
592
+ if(h>Math.abs(Math.atan2(a*u-c*l,a*l+c*u)))return void this.Ws(i,s,o)}}}else{const n=y*y+p*p
593
+ if(0===n){if(g>=(i-t)*(i-t)+(s-e)*(s-e))return void this.Ws(i,s,o)}else{const r=((i-t)*y+(s-e)*p)/n
594
+ if(r>0&&1>r&&g*n>=w*w)return void this.Ws(i,s,o)}}this.zs(t,e,a,c,f,d,o,h+1),this.zs(f,d,l,u,n,r,o,h+1)}Hs(t,e,i,s,n,r,o,h,a,c=0){if(c>16)return
595
+ 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.Ds.$s??it.$s,M=A*A
596
+ let L=0
597
+ switch(E>st&&(L|=1),T>st&&(L|=2),L){case 0:const c=S*S+_*_
598
+ if(0===c){if(M>=(i-t)*(i-t)+(s-e)*(s-e)&&M>=(n-t)*(n-t)+(r-e)*(r-e))return this.Ws(i,s,a),void this.Ws(n,r,a)}else{const o=((i-t)*S+(s-e)*_)/c,h=((n-t)*S+(r-e)*_)/c
599
+ if(o>0&&1>o&&h>0&&1>h&&M*c>=(E+T)*(E+T))return this.Ws(i,s,a),void this.Ws(n,r,a)}break
600
+ case 1:if(M*(S*S+_*_)>=T*T){const t=this.Ds.Ns??it.Ns
601
+ if(0>=t)return this.Ws(i,s,a),void this.Ws(n,r,a)
602
+ {const e=n-i,c=r-s,l=o-n,u=h-r
603
+ if(t>Math.abs(Math.atan2(e*u-c*l,e*l+c*u)))return this.Ws(i,s,a),void this.Ws(n,r,a)}}break
604
+ case 2:if(M*(S*S+_*_)>=E*E){const o=this.Ds.Ns??it.Ns
605
+ if(0>=o)return this.Ws(i,s,a),void this.Ws(n,r,a)
606
+ {const h=i-t,c=s-e,l=n-i,u=r-s
607
+ if(o>Math.abs(Math.atan2(h*u-c*l,h*l+c*u)))return this.Ws(i,s,a),void this.Ws(n,r,a)}}break
608
+ case 3:if(M*(S*S+_*_)>=(E+T)*(E+T)){const c=this.Ds.Ns??it.Ns
609
+ if(0>=c)return this.Ws(i,s,a),void this.Ws(n,r,a)
610
+ {const l=i-t,u=s-e,f=n-i,d=r-s,y=o-n,p=h-r
611
+ 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.Ws(i,s,a),void this.Ws(n,r,a)}}}this.Hs(t,e,l,u,w,v,x,b,a,c+1),this.Hs(x,b,g,m,y,p,o,h,a,c+1)}Ws(t,e,i){const s=new P(t,e)
573
612
  if(0===i.length)return void i.push(s)
574
613
  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
614
+ r*r+o*o>1e-12&&i.push(s)}}class rt{constructor(t,e){this.Vs=0,this.qs=0,this.Js=[],this.Ys=null,this.Ks=null,this.Xs={min:new P(1/0,1/0),max:new P(-1/0,-1/0)},this.Qs=[],this.Zs=[],this.tn=[],this.en=new P(0,0),this.sn=new nt(t),this.nn=new et({...tt,...e})}setPosition(t,e){this.en.set(t,e)}rn(t,e){this.en.x+=t,this.en.y+=e}hn(t,e){this.Js.length>0&&this.an(),this.Vs=t,this.qs=e,this.Js=[],this.Xs.min.set(1/0,1/0),this.Xs.max.set(-1/0,-1/0),this.Zs.push(this.en.clone())}an(){this.Ys&&this.cn(),this.Js.length>0&&(this.Qs.push({ln:this.Vs,Si:this.Js,bounds:{min:{x:this.Xs.min.x,y:this.Xs.min.y},max:{x:this.Xs.max.x,y:this.Xs.max.y}}}),this.tn.push(this.qs)),this.Js=[]}un(t,e){this.Ys&&this.cn(),this.Ks=new P(t,e),this.fn(this.Ks),this.Ys={points:[this.Ks],dn:this.Vs}}yn(t,e){if(!this.Ys||!this.Ks)return
615
+ const i=new P(t,e)
616
+ this.fn(i),this.Ys.points.push(i),this.Ks=i}pn(t,e,i,s){if(!this.Ys||!this.Ks)return
617
+ const n=this.Ks,r=new P(t,e),o=new P(i,s)
618
+ if(st>Math.abs((r.x-o.x)*(o.y-n.y)-(r.y-o.y)*(o.x-n.x)))return void this.yn(i,s)
619
+ const h=this.sn.Rs(n,r,o)
620
+ for(let t=0;h.length>t;t++){const e=h[t]
621
+ this.fn(e),this.Ys.points.push(e)}this.Ks=o}wn(t,e,i,s,n,r){if(!this.Ys||!this.Ks)return
622
+ const o=this.Ks,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
623
+ 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.yn(n,r)
624
+ const f=this.sn.js(o,h,a,c)
625
+ for(let t=0;f.length>t;t++){const e=f[t]
626
+ this.fn(e),this.Ys.points.push(e)}this.Ks=c}vn(){if(!this.Ys||!this.Ks)return
627
+ const t=this.Ys.points[0]
628
+ this.Ks.equals(t)||this.Ys.points.push(t),this.cn()}cn(){if(this.Ys){const t=this.nn.Os(this.Ys)
629
+ this.Js.push(t),this.Ys=null,this.Ks=null}}fn(t){this.Xs.min.x=Math.min(this.Xs.min.x,t.x),this.Xs.min.y=Math.min(this.Xs.min.y,t.y),this.Xs.max.x=Math.max(this.Xs.max.x,t.x),this.Xs.max.y=Math.max(this.Xs.max.y,t.y)}gn(){return this.Js.length>0&&this.an(),this.Qs}mn(){return this.Zs}xn(){return this.tn}reset(){this.Qs=[],this.Zs=[],this.tn=[],this.Js=[],this.Ys=null,this.Ks=null,this.Vs=0,this.qs=0,this.en.set(0,0),this.Xs={min:new P(1/0,1/0),max:new P(-1/0,-1/0)}}Ps(t){this.sn.Ps(t)}bn(t){this.nn.Gs({...tt,...t})}Sn(){return this.nn.getStats()}}class ot{constructor(){this._n=null,this.En=null,this.Tn=null,this.An=null,this.Mn=null,this.Ln=0,this.position={x:0,y:0}}setPosition(t,e){this.position.x=t,this.position.y=e,this.In&&this.In.setPosition(t,e)}rn(t,e){this.position.x+=t,this.position.y+=e,this.In&&this.In.rn(t,e)}Gn(t){this.In=t}On(t,e){if(!t||!t.module||!t.hb)throw Error("Invalid font object")
630
+ if(this.In=e,this.Ln)return
594
631
  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
632
+ this._n=i.Fn((t,e,i,s,n)=>{this.In?.un(s,n)},"viiiffi"),this.En=i.Fn((t,e,i,s,n)=>{this.In?.yn(s,n)},"viiiffi"),this.Tn=i.Fn((t,e,i,s,n,r,o)=>{this.In?.pn(s,n,r,o)},"viiiffffi"),this.An=i.Fn((t,e,i,s,n,r,o,h,a)=>{this.In?.wn(s,n,r,o,h,a)},"viiiffffffi"),this.Mn=i.Fn(()=>{this.In?.vn()},"viiii"),this.Ln=i.exports.kn(),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),i.exports.Nn(this.Ln,this.Mn,0,0)}Dn(){if(!this.Ln)throw Error("Draw functions not initialized")
633
+ return this.Ln}destroy(t){if(!t||!t.module||!t.hb)return
597
634
  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)
635
+ try{this.Ln&&(e.exports.Pn(this.Ln),this.Ln=0),null!==this._n&&(e.Rn(this._n),this._n=null),null!==this.En&&(e.Rn(this.En),this.En=null),null!==this.Tn&&(e.Rn(this.Tn),this.Tn=null),null!==this.An&&(e.Rn(this.An),this.An=null),null!==this.Mn&&(e.Rn(this.Mn),this.Mn=null)}catch(t){l.warn("Error destroying draw callbacks:",t)}this.In=void 0}}const ht=new WeakMap
636
+ class at{constructor(t,e){this.zn="default",this.Wn="default",this.jn=new Set,this.cache=t,this.le=e,this.tessellator=new K,this.Hn=new X,this.Vn=new Q,this.In=new rt,this.qn=(()=>{const t=this.le.module,e=ht.get(t)
600
637
  if(e)return e
601
638
  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}}
639
+ return ht.set(t,i),i})(),this.qn.On(this.le,this.In),this.Jn=j,this.Yn=H,this.Kn=V}Sn(){return this.In.Sn()}Ps(t){this.Ds=t,this.In.Ps(t),this.Xn()}bn(t){this.Qn=t,this.In.bn(t),this.Xn()}Zn(t){this.zn=t,this.Xn()}Xn(){this.Wn=`${this.zn}__${this.tr()}`}tr(){const t=this.Ds?.$s??it.$s,e=this.Ds?.Ns??it.Ns,i=this.Qn?.enabled??!0,s=this.Qn?.Es??1,n=this.Qn?.Ts??.0087,r=this.Qn?.As??10
640
+ return[`cf:${t.toFixed(4)},${e.toFixed(4)}`,`opt:${i?1:0},${s.toFixed(4)},${n.toFixed(6)},${r.toFixed(4)}`].join("|")}er(t,e,i,s,r=!1,o){if(c){let e=0
641
+ for(let i=0;t.length>i;i++)e+=t[i].length}const h=[]
642
+ let a=0,l=0,u=0,f=0
643
+ const d=(t,e,i,s)=>{const n=f
644
+ return h.push({data:t,px:e,ir:i,sr:s,nr: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
645
  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)
646
+ for(const t of a){const h=t.position.x,a=t.position.y,c=t.position.z,l=[]
647
+ for(const e of t.glyphs)l.push(this.rr(e.g))
648
+ let u
649
+ if(t.glyphs.length>1){const e=`${this.Wn}_${t.text}`,i=this.Kn.get(e)
624
650
  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""
651
+ if(i&&i.hr.length===t.glyphs.length){s=!0
652
+ for(let e=0;t.glyphs.length>e;e++)if(i.hr[e]!==t.glyphs[e].g){s=!1
653
+ break}}if(s&&i)u=i.groups
654
+ else{const i=t.glyphs.map(t=>new R(t.x??0,t.y??0,0))
655
+ u=this.Vn.cs(l,i),this.Kn.set(e,{hr:t.glyphs.map(t=>t.g),groups:u})}}else u=[[0]]
656
+ const f=o&&t.glyphs.some(t=>o.has(t.ar)),w=r||f
657
+ for(const r of u)if(r.length>1&&!w){const n=r.map(e=>t.glyphs[e]),o=this.cr(n,e,i)
658
+ let u=this.Yn.get(o)
659
+ if(!u){const i=[],h=n[0].x??0,a=n[0].y??0
660
+ 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
661
+ for(const t of n.Si)i.push({...t,points:t.points.map(t=>new P(t.x+c,t.y+u))})}u=this.lr(i,e,s),this.Yn.set(o,u)}const f=n[0],w=d(u,h+(f.x??0),a+(f.y??0),c),v=u.vertices.length/3
662
+ for(let i=0;r.length>i;i++){const s=r[i],n=t.glyphs[s],o=this.ur(n,w,v,h+(n.x??0),a+(n.y??0),c,l[s],e)
663
+ y.push(o),this.dr(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
664
+ if(0===u.Si.length){const t=this.ur(r,0,0,f,w,v,u,e)
665
+ y.push(t)
666
+ continue}const g=n(this.Wn,r.g,e,i)
667
+ let m=this.cache.get(g)
668
+ m?m.yr++:(m=this.pr(u,e,i,s),this.cache.set(g,m))
669
+ const x=d(m,f,w,v),b=this.ur(r,x,m.vertices.length/3,f,w,v,u,e)
670
+ y.push(b),this.dr(b.bounds,p)}}}const w=new Float32Array(a),v=new Float32Array(l),g=new Uint32Array(u)
671
+ let m=0,x=0,b=0
672
+ 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.ir,a=e.sr
673
+ 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
674
+ v.set(s,x),x+=s.length
675
+ const c=e.nr
676
+ for(let t=0;n.length>t;t++)g[b++]=n[t]+c}return{vertices:w,normals:v,indices:g,wr:y,planeBounds:p}}cr(t,e,i){if(0===t.length)return""
649
677
  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)
678
+ return`${this.Wn}_${r}_${Math.round(1e3*e)/1e3}_${i}`}ur(t,e,i,s,n,r,o,h){return{vr:t.ar,gr:t.gr,nr:e,mr: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}}}}rr(t){if(this.jn.has(t))return{ln:t,Si:[],bounds:{min:{x:0,y:0},max:{x:0,y:0}}}
679
+ const e=`${this.Wn}_${t}`,i=this.Jn.get(e)
651
680
  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=[]
681
+ this.qn.Gn(this.In),this.In.reset(),this.In.hn(t,0),this.le.module.exports.br(this.le.font.Sr,t,this.qn.Dn(),0),this.In.an()
682
+ const s=this.In.gn()[0]||{ln:t,Si:[],bounds:{min:{x:0,y:0},max:{x:0,y:0}}}
683
+ return 0===s.Si.length&&this.jn.add(t),this.Jn.set(e,s),s}lr(t,e,i){const s=this.tessellator.process(t,!0,i,0!==e)
684
+ return this._r(s,e)}_r(t,e){const i=this.Hn.hs(t,e,this.le.upem),s=i.vertices
685
+ let n=1/0,r=1/0,o=1/0,h=-1/0,a=-1/0,c=-1/0
686
+ for(let t=0;s.length>t;t+=3){const e=s[t],i=s[t+1],l=s[t+2]
687
+ 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)
688
+ return{geometry:t,vertices:i.vertices,normals:i.normals,indices:i.indices,bounds:{min:l,max:u},yr:1}}pr(t,e,i,s){const n=this.tessellator.process(t.Si,i,s,0!==e)
689
+ return this._r(n,e)}dr(t,e){const i=e.min,s=e.max,n=t.min,r=t.max
690
+ 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)}Er(){return this.cache.getStats()}clearCache(){this.cache.clear(),this.Yn.clear(),this.Kn.clear(),this.Jn.clear()}}class ct{constructor(t,e){this.Tr=new Map,this.le=t,this.Ar=e}Mr(t,e,i,s,n,r,o){try{const r=[]
667
691
  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)
692
+ r.push(h)}),r}finally{}}Lr(t,i,s,n,r,o){const h=this.le.hb.createBuffer()
693
+ "rtl"===o&&h.Ir("rtl"),h.oe(t.text),h.he()
694
+ const a=e(this.le.ae)
695
+ this.le.hb.shape(this.le.font,h,a)
696
+ const c=h.json(this.le.font)
673
697
  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)
698
+ const l=[]
699
+ let u=[],f="",d=0,y=0,p=t.Dt,w=-i*s
700
+ const v=n*this.le.upem,g=this.Gr(t,r,n),m=this.Or(t,r)
701
+ for(let e=0;c.length>e;e++){const s=c[e],n=/\s/.test(t.text[s.ce])
702
+ s.ar=t.Rt&&s.ce===t.text.length-1&&"-"===t.text[s.ce]?t.Nt:t.$t+s.ce,s.gr=i,n&&u.length>0&&(l.push({text:f,glyphs:u,position:new R(d,y,0)}),u=[],f="")
703
+ const r=p+s.dx,o=w+s.dy
704
+ 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=L.tt(i),o=n&&L.tt(n)
681
705
  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."
706
+ L.et(n)&&(t=!1),L.it(i)&&(t=!1),L.st(i)&&L.st(n)&&(t=!1),t&&(p+=m)}}}return u.length>0&&l.push({text:f,glyphs:u,position:new R(d,y,0)}),l}Gr(t,e,i){let s=0
707
+ if(void 0!==t.Kt&&"justify"===e&&!t.Pt){let e=this.Tr.get(i)
708
+ void 0===e&&(e=G.measureTextWidth(this.le," ",i),this.Tr.set(i,e)),t.Kt>0?s=t.Kt*e*.5:0>t.Kt&&(s=t.Kt*e*y)}return s}Or(t,e){if(void 0===t.Kt||"justify"!==e||t.Pt)return 0
709
+ return t.Kt>0||0>t.Kt?.04*t.Kt*this.le.upem:0}clearCache(){this.Ar.clearCache()}Er(){return this.Ar.Er()}}var lt={exports:{}},ut=a({__proto__:null,default:{},Fr(){throw Error("fs not available in browser")}})
710
+ !(function(t){var e,i=(e="undefined"!=typeof document?document.currentScript?.src:void 0,async function(t={}){function i(){var t=v.buffer
711
+ 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.kr?.(t),x(t="Aborted("+t+")"),b=!0,t+=". Build with -sASSERTIONS for more info."
688
712
  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}
713
+ 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
714
  "undefined"!=typeof __filename?e=__filename:o&&(e=self.location.href)
691
- var l,c,u=""
715
+ var c,l,u=""
692
716
  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
717
+ u=__dirname+"/",l=t=>(t=S(t)?new URL(t):t,f.Fr(t)),c=async(t,e=!0)=>(t=S(t)?new URL(t):t,f.Fr(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
718
+ 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
719
  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
720
  var e=await fetch(t,{credentials:"same-origin"})
697
721
  if(e.ok)return e.arrayBuffer()
698
722
  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
723
+ 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
724
  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)
706
- s&&M.set(s,i)}})(0,L.length)),M.get(t)||0))(t)
725
+ constructor(t){this.message=`Program terminated with exit(${t})`,this.status=t}}var M,L,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
726
+ a(1,t)},D=()=>B||U>0,P=t=>{y=t,D()||(n.Cr?.(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
727
+ try{return v.grow(e),i(),1}catch(t){}},W=t=>{const e=t.length
728
+ return[e%128|128,e>>7,...t]},j={Ei:127,Ai:127,Li:126,f:125,d:124,e:111},H=t=>W(Array.from(t,t=>j[t])),V=t=>M.get(t),q=[],J=(t,e)=>M.set(t,e)
729
+ n.Br&&(B=n.Br),n.Ur&&(x=n.Ur),n.$r&&(d=n.$r),n.Nr=v,n.Dr=K,n.Fn=(t,e)=>{var i=(t=>(L||(L=new WeakMap,((t,e)=>{if(L)for(var i=0;0+e>i;i++){var s=V(i)
730
+ s&&L.set(s,i)}})(0,M.length)),L.get(t)||0))(t)
707
731
  if(i)return i
708
- var s=q.length?q.pop():L.grow(1)
732
+ var s=q.length?q.pop():M.grow(1)
709
733
  try{J(s,t)}catch(i){if(!(i instanceof TypeError))throw i
710
734
  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
735
  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
736
+ J(s,n)}return L.set(t,s),s},n.Rn=t=>{L.delete(V(t)),J(t,null),q.push(t)}
737
+ var Y={Pr:()=>s(""),Rr(){B=!1,U=0},zr(t,e){if($[t]&&(clearTimeout($[t].id),delete $[t]),!e)return 0
738
+ 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)
739
+ return $[t]={id:i,Wr:e},0},jr(t){var e=g.length,i=2147483648
716
740
  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)
720
- 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)
741
+ 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))
742
+ if(z(r))return!0}return!1},Hr:P},K=await(async()=>{function t(t){return n.Dr=K=t.exports,n.Nr=v=K.memory,i(),M=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.co,n.lo=t.uo,n.fo=t.do,n.yo=t.po,n.wo=t.vo,n.mo=t.xo,n.bo=t.So,n._o=t.Eo,n.To=t.Ao,n.Mo=t.Lo,n.Io=t.Go,n.Oo=t.Fo,n.ko=t.Co,n.Bo=t.Uo,n.$o=t.No,n.Do=t.Po,n.Ro=t.zo,n.Wo=t.jo,n.Ho=t.Vo,n.qo=t.Jo,n.Yo=t.Ko,n.Xo=t.Cn,n.Qo=t.Bn,n.Zo=t.Un,n.th=t.$n,n.eh=t.Nn,n.ih=t.kn,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.wh=t.br,n.gh=t.mh,n.xh=t.bh,n.Sh=t._h,n.Eh=t.Th,n.Ah=t.Mh,n.Lh=t.Ih,n.Gh=t.Oh,n.Fh=t.kh,n.Ch=t.Bh,n.Uh=t.$h,n.Nh=t.Dh,I=t.Ph})(K),(()=>{if(E--,n.Rh?.(E),0==E&&T){var t=T
743
+ T=null,t()}})(),K}E++,n.Rh?.(E)
744
+ var e,r={u:Y,zh:Y}
745
+ return n.Wh?new Promise(e=>{n.Wh(r,i=>{e(t(i))})}):(m??=(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"})
746
+ 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)
747
+ return new Uint8Array(e)}catch{}return(t=>{if(t==m&&d)return new Uint8Array(d)
748
+ if(l)return l(t)
725
749
  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:{}}
750
+ return await WebAssembly.instantiate(i,e)}catch(t){x("failed to asynchronously prepare wasm: "+t),s(t)}})(e,i)})(d,m,r)).Hh))})()
751
+ 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||(_=!0,K.Jh(),p?.(n),n.Yh?.(),(()=>{if(n.Kh)for("function"==typeof n.Kh&&(n.Kh=[n.Kh]);n.Kh.length;)F(n.Kh.shift())
752
+ G(O)})())}E>0?T=t:((()=>{if(n.Xh)for("function"==typeof n.Xh&&(n.Xh=[n.Xh]);n.Xh.length;)C(n.Xh.shift())
753
+ 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})})
754
+ t.exports=i,t.exports.default=i})(lt)
755
+ var ft=h(lt.exports),dt={exports:{}}
732
756
  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)
733
757
  for(let s=0;e.length>s;++s){const n=e.charCodeAt(s)
734
758
  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
759
+ t.HEAPU8[i+s]=n}return t.HEAPU8[i+e.length]=0,{Sr:i,length:e.length,Ko(){n.Ko(i)}}}function s(t,e,s){var r=0,o=0
736
760
  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)
761
+ n.Vo(e.Sr,-1,r+16*o)&&o++,e.Ko()})),n.Dh(t.Sr,e.Sr,r,o),r&&n.Ko(r)}var n=t.Dr,r=new TextDecoder("utf8")
762
+ let o=t.Fn,h=t.Rn
763
+ var a=o(t=>{n.Ko(t)},"vi"),c=e("JSON"),l="",u=n.Jo(256)
764
+ return{ze(e){var i=n.Jo(e.byteLength)
741
765
  t.HEAPU8.set(new Uint8Array(e),i)
742
766
  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)
767
+ return{Sr:s,destroy(){n.Kr(s)}}},We(i,s){var r=n.rh(i.Sr,s)
744
768
  const o=n.dh(r)
745
- return{vr:r,upem:o,Qh(i){var s=n.uh(r,e(i)),o=n.Qr(s)
769
+ return{Sr:r,upem:o,Qh(i){var s=n.uh(r,e(i)),o=n.Qr(s)
746
770
  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)
771
+ return t.HEAPU8.subarray(h,h+o)}},Ve(){var e=n.Jo(2048),i=n.Jo(4)
772
+ t.HEAPU32[i/4]=64,n.kh(r,0,i,e)
749
773
  var s={}
750
774
  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()
775
+ 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.Ih()
752
776
  n.ph(r,e)
753
777
  var i=(e=>{const i=n.Bh(e),s=n.Jo(i<<2),r=s>>2,o=t.HEAPU32.subarray(r,r+i)
754
- 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)
778
+ return t.HEAPU32.set(o,r),n.$h(e,-1,s,i),o})(e)
779
+ return n.Oh(e),i},destroy(){n.hh(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.kn(),n.Cn(c,f,0,0),n.Bn(c,d,0,0),n.$n(c,y,0,0),n.Un(c,p,0,0),n.Nn(c,w,0,0)),l="",n.br(a,t,c,0),l}var a=n.bh(i.Sr),c=null,f=null,d=null,y=null,p=null,w=null
780
+ return{Sr:a,ta(e){n.mh(a,e,u,256)
757
781
  var i=t.HEAPU8.subarray(u,u+256)
758
782
  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)
783
+ return{type:e[0],values:e.slice(1).filter(t=>t.length).map(t=>+t)}}),setScale(t,e){n.Mh(a,t,e)},He(i){var s=Object.entries(i),r=n.Jo(8*s.length)
784
+ s.forEach((i,s)=>{t.HEAPU32[r/4+2*s+0]=e(i[0]),t.HEAPF32[r/4+2*s+1]=i[1]}),n._h(a,r,s.length),n.Ko(r)},destroy(){n.Th(a),c&&(n.Pn(c),c=null,h(f),h(d),h(y),h(p),h(w))}}},createBuffer(){var e=n.ro()
785
+ return{Sr:e,oe(i){const s=(e=>{const i=n.Jo(2*e.length),s=new Uint16Array(t.Nr.buffer,i,e.length)
762
786
  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)
771
- n.Ro(e,e+4,e+8)
787
+ return{Sr:i,length:s.length,Ko(){n.Ko(i)}}})(i)
788
+ n.Co(e,s.Sr,s.length,0,s.length),s.Ko()},he:()=>n.Go(e),Ir(t){n.uo(e,{sa:4,na:5,ra:6,oa:7}[t]||0)},ha(t){var i=0
789
+ 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.vo(e,i)},aa(t){var s=i(t)
790
+ n.po(e,n.No(s.Sr,-1)),s.Ko()},ca(t){var s=i(t)
791
+ n.do(e,n.Po(s.Sr,-1)),s.Ko()},la(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),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)})
792
+ return s},destroy(){n.ho(e)}}},shape:s,ua(e,i,a,l,u){var f=[],d=0,y=!1,p=1048576,w=n.Jo(p),v=o((e,i,s)=>{var o=r.decode(t.HEAPU8.subarray(s,t.HEAPU8.indexOf(0,s)))
793
+ 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.so(e,0,n.So(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.co(e)}),1)},"iiiii")
794
+ return n.Uo(i.Sr,v,0,0),s(e,i,a),n.Ko(w),h(v),f},version(){var e=n.Jo(12)
795
+ n.zo(e,e+4,e+8)
772
796
  var i={fa:t.HEAPU32[e/4],da:t.HEAPU32[(e+4)/4],ya:t.HEAPU32[(e+8)/4]}
773
797
  return n.Ko(e),i},pa(){var e=n.jo()
774
798
  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=[]
799
+ let pt=null,wt=null,vt=null
800
+ const gt={wa(t){wt=t,vt=null,pt=null},va(t){vt=t,wt=null,pt=null},ga:async()=>pt||(pt=new Promise(async(t,e)=>{try{const e={}
801
+ if(vt)e.$r=vt
802
+ else{if(!wt)throw Error("HarfBuzz WASM path or buffer must be set before initialization.")
803
+ e.jh=(t,e)=>t.endsWith(".wasm")?wt:e+t}const i=await ft(e)
804
+ t({hb:yt(i),module:{Fn:i.Fn,exports:i.Dr,Rn:i.Rn}})}catch(t){e(Error("Failed to initialize HarfBuzz: "+t))}}),pt)}
805
+ class mt{constructor(t,e){this.text=t,this.ma=new Map,e.forEach(t=>{const e=this.ma.get(t.vr)||[]
806
+ e.push(t),this.ma.set(t.vr,e)})}xa(t){const e=[]
807
+ return t.ba&&e.push(...this.Sa(t.ba)),t._a&&e.push(...this.Ea(t._a)),e}Sa(t){const e=[]
784
808
  for(const i of t){let t=0
785
809
  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)
786
810
  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)
811
+ for(let i=t;e>i;i++){const t=this.ma.get(i)
788
812
  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}}
813
+ const t=n.get(e.gr)||[]
814
+ t.push(e),n.set(e.gr,t)}}return{start:t,end:e,Ta:i,bounds:Array.from(n.values()).map(t=>this.Aa(t)),glyphs:s,Ma: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}}
791
815
  let e=1/0,i=1/0,s=1/0,n=-1/0,r=-1/0,o=-1/0
792
816
  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())
795
- const e=await xt.Na(t),i=new xt
796
- i.Da(e)
797
- const{font:s,za:n,...r}=t,o=await i.Ra(r),h=async e=>{const s={...t}
817
+ return{min:{x:e,y:i,z:s},max:{x:n,y:r,z:o}}}}class xt{static{this.La=new Map}static{this.Ia=null}static{this.Ga=new Map}static{this.Oa=0}static{this.Fa=1/0}static{this.ka=0}static Ca(t){return Object.keys(t).sort().map(e=>`${e}:${t[e]}`).join(",")}constructor(){this.Ba="",xt.Ia||(xt.Ia=gt.ga()),this.Ua=new $(()=>xt.Ia)}static $a(t){gt.wa(t),xt.Ia=null}static Na(t){gt.va(t),xt.Ia=null}static init(){return xt.Ia||(xt.Ia=gt.ga()),xt.Ia}static async create(t){if(!t.font)throw Error("Font is required. Specify options.font as a URL string or ArrayBuffer.")
818
+ xt.Ia||(xt.Ia=gt.ga())
819
+ const e=await xt.Da(t),i=new xt
820
+ i.Pa(e)
821
+ const s=await i.Ra(t),n=async e=>{const s={...t}
798
822
  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)
823
+ void 0!==i&&(s[t]=i)}if(void 0!==e.font||void 0!==e.qe||void 0!==e.ae){const t=await xt.Da(s)
824
+ i.Pa(t),i.za()}return t=s,{...await i.Ra(t),getLoadedFont(){return i.getLoadedFont()},getCacheStatistics(){return i.getCacheStatistics()},clearCache(){return i.clearCache()},measureTextWidth(t,e){return i.measureTextWidth(t,e)},update:n}}
825
+ 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 Da(t){let e="string"==typeof t.font?t.font:"buffer-"+xt.Wa(t.font)
826
+ t.qe&&(e+="_var_"+xt.Ca(t.qe)),t.ae&&(e+="_feat_"+xt.Ca(t.ae))
827
+ let i=xt.Ga.get(e)
828
+ return i||(i=await xt.ja(e,t.font,t.qe,t.ae)),i}static async ja(t,e,i,s){const n=new xt
829
+ await n.Re(e,i,s)
808
830
  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
831
+ return xt.Ga.set(t,r),xt.Ha(r),xt.Va(),r}static Ha(t){xt.Oa+=t.Qe?.byteLength??0}static qa(t){const e=xt.Ga.get(t)
832
+ e&&(xt.Oa-=e.Qe?.byteLength??0,0>xt.Oa&&(xt.Oa=0))}static Va(){if(xt.Fa!==1/0)for(;xt.Oa>xt.Fa&&xt.Ga.size>0;){const t=xt.Ga.keys().next().value
811
833
  if(void 0===t)break
812
- xt.Ja(t),xt.Fa.delete(t)}}static ja(t){if(t){const e=new Uint8Array(t)
834
+ xt.qa(t),xt.Ga.delete(t)}}static Wa(t){if(t){const e=new Uint8Array(t)
813
835
  let i=2166136261
814
836
  const s=Math.min(32,e.length),n=Math.floor(e.length/s)
815
837
  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
838
+ return i^=e.length,i=Math.imul(i,16777619),(i>>>0).toString(36)}return"c"+ ++xt.ka}Pa(t){this.le=t
839
+ const e=xt.Wa(t.Qe)
840
+ this.Ba="font_"+e,t.qe&&(this.Ba+="_var_"+xt.Ca(t.qe)),t.ae&&(this.Ba+="_feat_"+xt.Ca(t.ae))}async Re(t,e,i){xt.Ia||(xt.Ia=gt.ga()),await xt.Ia
819
841
  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
842
  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)
843
+ try{this.le&&this.destroy(),this.le=await this.Ua.Re(s,e),i&&(this.le.ae=i)
844
+ const t=xt.Wa(s)
845
+ this.Ba="font_"+t,e&&(this.Ba+="_var_"+xt.Ca(e)),i&&(this.Ba+="_feat_"+xt.Ca(i))}catch(t){throw l.error("Failed to load font:",t),t}}async Ra(t){try{if(!this.le)throw Error("Font not loaded. Use Text.create() with a font option.")
846
+ const e=await this.Ja(t)
847
+ if(this.Ya(e),this.Ka(t=e),!this.Ar){const e=t.Xa?o(t.Xa):W
848
+ this.Ar=new at(e,this.le),this.Ar.Zn(this.Ba)}this.Ar.Ps(t.Qa),this.Ar.bn(t.Za),this.le.font.setScale(this.le.upem,this.le.upem),this.tc||(this.tc=new ct(this.le,this.Ar))
849
+ const i=this.ec(t),s=t.sc??this.le.Je??!1,n=this.tc.Mr(i.lines,i.nc,i.letterSpacing,i.align,i.direction,t.color,t.text)
829
850
  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
851
+ if(t.color&&"object"==typeof t.color&&!Array.isArray(t.color)&&(t.color.ba||t.color._a)){if(r=new Set,t.color.ba)for(const e of Object.keys(t.color.ba)){let i=0
831
852
  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=[]
853
+ i+=e.length}}if(t.color._a)for(const e of t.color._a)for(let t=e.start;e.end>t;t++)r.add(t)}const h=this.Ar.er(n,i.depth,s,this.le.p.Te,t.rc||!1,r),a=this.Ar.Er(),c=this.oc(h.vertices,h.normals,h.indices,h.wr,h.planeBounds,t,a,t.text)
854
+ if(t.rc){const t=this.hc(c.vertices.length/3,c.glyphs)
855
+ c.glyphAttributes=t}return c}finally{}}async Ja(t){if(!1!==t.layout?.vt&&t.layout?.width){const e=t.layout?.language||"en-us"
856
+ if(!t.layout?.bt?.[e])try{if(!xt.La.has(e)){const i=await s(e,t.layout?.ac)
857
+ 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}Ya(t){if(!t.text)throw Error("Text content is required")
858
+ const e=t.cc??1e5
859
+ if(t.text.length>e)throw Error(`Text exceeds ${e} character limit`)}Ka(t){t.qe&&this.le&&xt.Ca(t.qe)!==xt.Ca(this.le.qe||{})&&(this.le.font.He(t.qe),this.le.qe=t.qe)}ec(t){if(!this.le)throw Error("Font not loaded. Use Text.create() with a font option")
860
+ 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,Mt:b,Lt:S,It:_,Gt:E,Ot:T,Ft:A,kt:M,Ct:L,Bt:I,Ut:G}=o
861
+ let F
862
+ void 0!==h&&(F=h*(this.le.upem/i))
863
+ const k=s*(this.le.upem/i),C=k>0?Math.max(k,25e-6*this.le.upem):0
864
+ this.lc||(this.lc=new O(this.le))
865
+ const U=this.lc.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,Mt:b,Lt:S,It:_,Gt:E,Ot:T,Ft:A,kt:M,Ct:L,Bt:I,Ut:G,letterSpacing:r}),$=B.ke(this.le.p)
866
+ return{lines:U.lines,nc:($.we-$.ve)*n,letterSpacing:r,align:c,direction:a,depth:C,size:i}}uc(t,e,i,s){const n=t.length/3,r=new Float32Array(3*n),o=[]
846
867
  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]
868
+ r[e]=i[0],r[e+1]=i[1],r[e+2]=i[2]}o.push({start:0,end:s.length,Ta:s,color:i,bounds:[],glyphs:e,Ma:[...new Set(e.map(t=>t.gr))]})}else{const t=i.default||[1,1,1]
848
869
  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
870
+ i.ba&&new mt(s,e).xa({ba:Object.keys(i.ba)}).forEach(t=>{const e=i.ba[t.Ta]
871
+ e&&(t.glyphs.forEach(t=>{for(let i=0;t.mr>i;i++){const s=3*(t.nr+i)
872
+ 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,Ta:t.Ta,color:e,bounds:t.bounds,glyphs:t.glyphs,Ma:t.Ma}))}),i._a&&i._a.forEach(t=>{const i=[]
873
+ for(const s of e)if(s.vr>=t.start&&t.end>s.vr){i.push(s)
874
+ for(let e=0;s.mr>e;e++){const i=3*(s.nr+e)
875
+ 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,Ta:s.slice(t.start,t.end),color:t.color,bounds:[],glyphs:i,Ma:[...new Set(i.map(t=>t.gr))]})})}return{colors:r,fc:o}}oc(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
876
+ this.lc||(this.lc=new O(this.le))
877
+ const f=this.lc.ye({width:l,align:u,planeBounds:n}),d=f.offset
878
+ n.min.x=f.de.min.x,n.max.x=f.de.max.x
879
+ const y=c/this.le.upem,p=d*y
880
+ if(0===p)for(let e=0;t.length>e;e++)t[e]*=y
881
+ 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
882
  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
883
  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)
884
+ 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
885
+ if(r.color){const e=this.uc(t,s,r.color,r.text)
886
+ w=e.colors,v=e.fc}const g=this.Ar.Sn()
887
+ return{vertices:t,normals:e,indices:i,colors:w,glyphs:s,planeBounds:n,stats:{dc:i.length/3,yc:t.length/3,Ms:g.Ms,Ls:g.Ls,Is:g.Is,...o||{}},query(t){if(!h)throw Error("Original text not available for querying")
888
+ return new mt(h,s).xa(t)},fc:v,glyphAttributes:void 0}}Ce(){if(!this.le)throw Error("Font not loaded. Call loadFont() first")
889
+ return B.Ce(this.le.p)}static async wc(t,e){await Promise.all(t.map(async t=>{if(!xt.La.has(t))try{const i=await s(t,e)
890
+ xt.La.set(t,i)}catch(e){l.warn(`Failed to pre-load patterns for ${t}: ${e}`)}}))}static vc(t,e){xt.La.set(t,e)}static gc(){xt.Ga.clear(),xt.Oa=0}static mc(t){xt.Fa=t===1/0?1/0:1048576*Math.max(1,Math.floor(t)),xt.Va()}getLoadedFont(){return this.le}measureTextWidth(t,e=0){if(!this.le)throw Error("Font not loaded. Call loadFont() first")
891
+ return G.measureTextWidth(this.le,t,e)}getCacheStatistics(){return this.Ar?this.Ar.Er():null}clearCache(){this.Ar&&this.Ar.clearCache()}hc(t,e){const i=new Float32Array(3*t),s=new Float32Array(t),n=new Float32Array(t)
870
892
  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})
893
+ for(let c=0;e.mr>c;c++){const l=e.nr+c
894
+ t>l&&(i[3*l]=o,i[3*l+1]=h,i[3*l+2]=a,s[l]=r,n[l]=e.gr)}}),{xc:i,dn:s,bc:n}}za(){this.Ar=void 0,this.tc=void 0,this.lc=void 0}destroy(){if(!this.le)return
895
+ const t=this.le
896
+ try{$.Ze(t)}catch(t){l.warn("Error destroying HarfBuzz objects:",t)}finally{this.le=void 0,this.lc=void 0,this.tc=void 0}}}t.DEFAULT_CURVE_FIDELITY=it,t.FontMetadataExtractor=B,t.Text=xt,t.Sc=o,t._c=W})