three-text 0.4.0 → 0.4.2

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