modern-path2d 1.4.10 → 1.4.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -1749,19 +1749,6 @@ function getIntersectionPoint(p1, p2, q1, q2) {
1749
1749
  );
1750
1750
  }
1751
1751
 
1752
- function signedArea(pts) {
1753
- let sum = 0;
1754
- const len = pts.length / 2;
1755
- for (let i = 0; i < len; i++) {
1756
- const xi = pts[2 * i];
1757
- const yi = pts[2 * i + 1];
1758
- const j = (i + 1) % len;
1759
- const xj = pts[2 * j];
1760
- const yj = pts[2 * j + 1];
1761
- sum += (xj - xi) * (yj + yi);
1762
- }
1763
- return sum;
1764
- }
1765
1752
  function cross(ax, ay, bx, by, cx, cy) {
1766
1753
  return (bx - ax) * (cy - ay) - (cx - ax) * (by - ay);
1767
1754
  }
@@ -1797,33 +1784,30 @@ function nonzeroFillRule(paths) {
1797
1784
  parentIndex: void 0
1798
1785
  }));
1799
1786
  for (let i = 0; i < pathsLen; i++) {
1800
- if (signedArea(paths[i]) < 0) {
1801
- continue;
1802
- }
1803
- const firstPoint = paths[i];
1787
+ const pointArray = paths[i];
1804
1788
  const testPointArray = [
1805
- ...firstPoint
1789
+ pointArray[0],
1790
+ pointArray[1]
1806
1791
  ];
1807
1792
  let parent;
1793
+ let totalWn = 0;
1808
1794
  for (let j = 0; j < pathsLen; j++) {
1809
1795
  if (i === j) {
1810
1796
  continue;
1811
1797
  }
1812
1798
  let wn = 0;
1813
1799
  for (let p = 0; p < testPointArray.length; p += 2) {
1814
- wn = wn || windingNumber(testPointArray[p], testPointArray[p + 1], paths[j]);
1815
- if (wn) {
1816
- break;
1817
- }
1800
+ wn = windingNumber(testPointArray[p], testPointArray[p + 1], paths[j]);
1818
1801
  }
1819
- if (Math.abs(wn) > 0) {
1820
- const dist = distance(firstPoint, paths[j]);
1802
+ if (wn !== 0) {
1803
+ totalWn += wn;
1804
+ const dist = distance(testPointArray, paths[j]);
1821
1805
  if (!parent || dist < parent.dist) {
1822
1806
  parent = { index: j, dist, wn };
1823
1807
  }
1824
1808
  }
1825
1809
  }
1826
- if (parent) {
1810
+ if (totalWn !== 0 && parent) {
1827
1811
  results[i].dist = parent.dist;
1828
1812
  results[i].wn = parent.wn;
1829
1813
  results[i].parentIndex = parent.index;
@@ -2236,7 +2220,7 @@ function round(cx, cy, sx, sy, ex, ey, verts, clockwise) {
2236
2220
 
2237
2221
  class Curve {
2238
2222
  arcLengthDivision = 200;
2239
- _arcLengths;
2223
+ _lengths = [];
2240
2224
  getPointAt(u, output = new Vector2()) {
2241
2225
  return this.getPoint(this.getUToTMapping(u), output);
2242
2226
  }
@@ -2314,10 +2298,10 @@ class Curve {
2314
2298
  return lengths[lengths.length - 1];
2315
2299
  }
2316
2300
  getLengths() {
2317
- if (!this._arcLengths || this._arcLengths.length !== this.arcLengthDivision + 1) {
2301
+ if (this._lengths.length !== this.arcLengthDivision + 1) {
2318
2302
  this.updateLengths();
2319
2303
  }
2320
- return this._arcLengths;
2304
+ return this._lengths;
2321
2305
  }
2322
2306
  updateLengths() {
2323
2307
  const divisions = this.arcLengthDivision;
@@ -2328,7 +2312,7 @@ class Curve {
2328
2312
  arcLengths.push(sum);
2329
2313
  prev = current;
2330
2314
  }
2331
- this._arcLengths = arcLengths;
2315
+ this._lengths = arcLengths;
2332
2316
  }
2333
2317
  getUToTMapping(u, distance) {
2334
2318
  const lengths = this.getLengths();
@@ -3026,13 +3010,19 @@ class CompositeCurve extends Curve {
3026
3010
  }
3027
3011
  return output;
3028
3012
  }
3013
+ getLengths() {
3014
+ if (this._lengths.length !== this.curves.length) {
3015
+ this.updateLengths();
3016
+ }
3017
+ return this._lengths;
3018
+ }
3029
3019
  updateLengths() {
3030
- const arcLengths = [];
3020
+ const lengths = [];
3031
3021
  for (let i = 0, sum = 0, len = this.curves.length; i < len; i++) {
3032
3022
  sum += this.curves[i].getLength();
3033
- arcLengths.push(sum);
3023
+ lengths.push(sum);
3034
3024
  }
3035
- this._arcLengths = arcLengths;
3025
+ this._lengths = lengths;
3036
3026
  }
3037
3027
  getControlPointRefs() {
3038
3028
  return this.curves.flatMap((curve) => curve.getControlPointRefs());
@@ -3757,9 +3747,11 @@ class Path2D extends CompositeCurve {
3757
3747
  return this;
3758
3748
  }
3759
3749
  addPath(path) {
3760
- const index = this.curves.findIndex((v) => v === this.currentCurve);
3761
- if (index > -1) {
3762
- this.curves.splice(index, 1);
3750
+ if (!this.currentCurve.curves.length) {
3751
+ const index = this.curves.findIndex((v) => v === this.currentCurve);
3752
+ if (index > -1) {
3753
+ this.curves.splice(index, 1);
3754
+ }
3763
3755
  }
3764
3756
  if (path instanceof Path2D) {
3765
3757
  this.curves.push(
@@ -3768,17 +3760,15 @@ class Path2D extends CompositeCurve {
3768
3760
  } else if (path.curves.length) {
3769
3761
  this.curves.push(path);
3770
3762
  }
3771
- this.curves.push(this.currentCurve);
3763
+ this.currentCurve = this.curves[this.curves.length - 1];
3772
3764
  return this;
3773
3765
  }
3774
3766
  closePath() {
3775
3767
  const startPoint = this.startPoint;
3776
- if (startPoint) {
3768
+ if (startPoint && this.currentCurve.curves.length) {
3777
3769
  this.currentCurve.closePath();
3778
- if (this.currentCurve.curves.length) {
3779
- this.currentCurve = new CurvePath().moveTo(startPoint.x, startPoint.y);
3780
- this.curves.push(this.currentCurve);
3781
- }
3770
+ this.currentCurve = new CurvePath().moveTo(startPoint.x, startPoint.y);
3771
+ this.curves.push(this.currentCurve);
3782
3772
  }
3783
3773
  return this;
3784
3774
  }
package/dist/index.d.cts CHANGED
@@ -234,7 +234,7 @@ declare function strokeTriangulate(points: number[], options?: StrokeTriangulate
234
234
 
235
235
  declare abstract class Curve {
236
236
  arcLengthDivision: number;
237
- protected _arcLengths?: number[];
237
+ protected _lengths: number[];
238
238
  abstract getPoint(t: number, output?: Vector2): Vector2;
239
239
  getPointAt(u: number, output?: Vector2): Vector2;
240
240
  isClockwise(): boolean;
@@ -317,6 +317,7 @@ declare class CompositeCurve<T extends Curve = Curve> extends Curve {
317
317
  getFlatCurves(): Curve[];
318
318
  addCurve(curve: T): this;
319
319
  getPoint(t: number, output?: Vector2): Vector2;
320
+ getLengths(): number[];
320
321
  updateLengths(): void;
321
322
  getControlPointRefs(): Vector2[];
322
323
  protected _removeNextPointIfEqualPrevPoint(output: number[], offset: number): number[];
package/dist/index.d.mts CHANGED
@@ -234,7 +234,7 @@ declare function strokeTriangulate(points: number[], options?: StrokeTriangulate
234
234
 
235
235
  declare abstract class Curve {
236
236
  arcLengthDivision: number;
237
- protected _arcLengths?: number[];
237
+ protected _lengths: number[];
238
238
  abstract getPoint(t: number, output?: Vector2): Vector2;
239
239
  getPointAt(u: number, output?: Vector2): Vector2;
240
240
  isClockwise(): boolean;
@@ -317,6 +317,7 @@ declare class CompositeCurve<T extends Curve = Curve> extends Curve {
317
317
  getFlatCurves(): Curve[];
318
318
  addCurve(curve: T): this;
319
319
  getPoint(t: number, output?: Vector2): Vector2;
320
+ getLengths(): number[];
320
321
  updateLengths(): void;
321
322
  getControlPointRefs(): Vector2[];
322
323
  protected _removeNextPointIfEqualPrevPoint(output: number[], offset: number): number[];
package/dist/index.d.ts CHANGED
@@ -234,7 +234,7 @@ declare function strokeTriangulate(points: number[], options?: StrokeTriangulate
234
234
 
235
235
  declare abstract class Curve {
236
236
  arcLengthDivision: number;
237
- protected _arcLengths?: number[];
237
+ protected _lengths: number[];
238
238
  abstract getPoint(t: number, output?: Vector2): Vector2;
239
239
  getPointAt(u: number, output?: Vector2): Vector2;
240
240
  isClockwise(): boolean;
@@ -317,6 +317,7 @@ declare class CompositeCurve<T extends Curve = Curve> extends Curve {
317
317
  getFlatCurves(): Curve[];
318
318
  addCurve(curve: T): this;
319
319
  getPoint(t: number, output?: Vector2): Vector2;
320
+ getLengths(): number[];
320
321
  updateLengths(): void;
321
322
  getControlPointRefs(): Vector2[];
322
323
  protected _removeNextPointIfEqualPrevPoint(output: number[], offset: number): number[];
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
- (function(A,tt){typeof exports=="object"&&typeof module<"u"?tt(exports):typeof define=="function"&&define.amd?define(["exports"],tt):(A=typeof globalThis<"u"?globalThis:A||self,tt(A.modernPath2d={}))})(this,(function(A){"use strict";function tt(i,t,e,n={}){const{radius:r=1}=n;i.moveTo(t,e),i.arc(t,e,r,0,Math.PI*2)}const ke={arcs:"bevel",bevel:"bevel",miter:"miter","miter-clip":"miter",round:"round"};function Ct(i,t){const{fill:e="#000",stroke:n="none",strokeWidth:r=n==="none"?0:1,strokeLinecap:o="round",strokeLinejoin:s="miter",strokeMiterlimit:c=0,strokeDasharray:a=[],strokeDashoffset:h=0,shadowOffsetX:l=0,shadowOffsetY:y=0,shadowBlur:f=0,shadowColor:p="rgba(0, 0, 0, 0)"}=t;i.fillStyle=e,i.strokeStyle=n,i.lineWidth=r,i.lineCap=o,i.lineJoin=ke[s],i.miterLimit=c,i.setLineDash(a),i.lineDashOffset=h,i.shadowOffsetX=l,i.shadowOffsetY=y,i.shadowBlur=f,i.shadowColor=p}class m{constructor(t=0,e=0){this.x=t,this.y=e}static get MAX(){return new m(1/0,1/0)}static get MIN(){return new m(-1/0,-1/0)}get array(){return[this.x,this.y]}finite(){return this.x=Number.isFinite(this.x)?this.x:0,this.y=Number.isFinite(this.y)?this.y:0,this}set(t,e){return this.x=t,this.y=e,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.x,this.y*=t.y,this}divide(t){return this.x/=t.x,this.y/=t.y,this}dot(t){return this.x*t.x+this.y*t.y}cross(t){return this.x*t.y-this.y*t.x}rotate(t,e={x:0,y:0}){const n=-t/180*Math.PI,r=this.x-e.x,o=-(this.y-e.y),s=Math.sin(n),c=Math.cos(n);return this.set(e.x+(r*c-o*s),e.y-(r*s+o*c)),this}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,n=this.y-t.y;return e*e+n*n}lengthSquared(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.lengthSquared())}scale(t,e=t,n={x:0,y:0}){const r=t<0?n.x-this.x+n.x:this.x,o=e<0?n.y-this.y+n.y:this.y;return this.x=r*Math.abs(t),this.y=o*Math.abs(e),this}skew(t,e=0,n={x:0,y:0}){const r=this.x-n.x,o=this.y-n.y;return this.x=n.x+(r+Math.tan(t)*o),this.y=n.y+(o+Math.tan(e)*r),this}min(...t){return this.x=Math.min(this.x,...t.map(e=>e.x)),this.y=Math.min(this.y,...t.map(e=>e.y)),this}max(...t){return this.x=Math.max(this.x,...t.map(e=>e.x)),this.y=Math.max(this.y,...t.map(e=>e.y)),this}normalize(){return this.scale(1/(this.length()||1))}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this}multiplyVectors(t,e){return this.x=t.x*e.x,this.y=t.y*e.y,this}divideVectors(t,e){return this.x=t.x/e.x,this.y=t.y/e.y,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this}equals(t){return this.x===t.x&&this.y===t.y}applyMatrix3(t){const e=this.x,n=this.y,r=t.elements;return this.x=r[0]*e+r[3]*n+r[6],this.y=r[1]*e+r[4]*n+r[7],this}copy(t){return this.x=t.x,this.y=t.y,this}clone(){return new m(this.x,this.y)}}class U{constructor(t=0,e=0,n=0,r=0){this.left=t,this.top=e,this.width=n,this.height=r}get x(){return this.left}set x(t){this.left=t}get y(){return this.top}set y(t){this.top=t}get right(){return this.left+this.width}get bottom(){return this.top+this.height}get center(){return new m((this.left+this.right)/2,(this.top+this.bottom)/2)}get array(){return[this.left,this.top,this.width,this.height]}static from(...t){if(t.length===0)return new U;if(t.length===1)return t[0].clone();const e=t[0],n=t.slice(1).reduce((r,o)=>(r.left=Math.min(r.left,o.left),r.top=Math.min(r.top,o.top),r.right=Math.max(r.right,o.right),r.bottom=Math.max(r.bottom,o.bottom),r),{left:e?.left??0,top:e?.top??0,right:e?.right??0,bottom:e?.bottom??0});return new U(n.left,n.top,n.right-n.left,n.bottom-n.top)}translate(t,e){return this.left+=t,this.top+=e,this}copy(t){return this.left=t.left,this.top=t.top,this.width=t.width,this.height=t.height,this}clone(){return new U(this.left,this.top,this.width,this.height)}}class z{elements=[];constructor(t=1,e=0,n=0,r=0,o=1,s=0,c=0,a=0,h=1){this.set(t,e,n,r,o,s,c,a,h)}set(t,e,n,r,o,s,c,a,h){const l=this.elements;return l[0]=t,l[1]=r,l[2]=c,l[3]=e,l[4]=o,l[5]=a,l[6]=n,l[7]=s,l[8]=h,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(t){const e=this.elements,n=t.elements;return e[0]=n[0],e[1]=n[1],e[2]=n[2],e[3]=n[3],e[4]=n[4],e[5]=n[5],e[6]=n[6],e[7]=n[7],e[8]=n[8],this}multiply(t){return this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const n=t.elements,r=e.elements,o=this.elements,s=n[0],c=n[3],a=n[6],h=n[1],l=n[4],y=n[7],f=n[2],p=n[5],u=n[8],x=r[0],g=r[3],P=r[6],C=r[1],w=r[4],v=r[7],b=r[2],S=r[5],d=r[8];return o[0]=s*x+c*C+a*b,o[3]=s*g+c*w+a*S,o[6]=s*P+c*v+a*d,o[1]=h*x+l*C+y*b,o[4]=h*g+l*w+y*S,o[7]=h*P+l*v+y*d,o[2]=f*x+p*C+u*b,o[5]=f*g+p*w+u*S,o[8]=f*P+p*v+u*d,this}invert(){const t=this.elements,e=t[0],n=t[1],r=t[2],o=t[3],s=t[4],c=t[5],a=t[6],h=t[7],l=t[8],y=l*s-c*h,f=c*a-l*o,p=h*o-s*a,u=e*y+n*f+r*p;if(u===0)return this.set(0,0,0,0,0,0,0,0,0);const x=1/u;return t[0]=y*x,t[1]=(r*h-l*n)*x,t[2]=(c*n-r*s)*x,t[3]=f*x,t[4]=(l*e-r*a)*x,t[5]=(r*o-c*e)*x,t[6]=p*x,t[7]=(n*a-h*e)*x,t[8]=(s*e-n*o)*x,this}transpose(){let t;const e=this.elements;return t=e[1],e[1]=e[3],e[3]=t,t=e[2],e[2]=e[6],e[6]=t,t=e[5],e[5]=e[7],e[7]=t,this}scale(t,e){return this.premultiply(bt.makeScale(t,e)),this}rotate(t){return this.premultiply(bt.makeRotation(-t)),this}translate(t,e){return this.premultiply(bt.makeTranslation(t,e)),this}makeTranslation(t,e){return this.set(1,0,t,0,1,e,0,0,1),this}makeRotation(t){const e=Math.cos(t),n=Math.sin(t);return this.set(e,-n,0,n,e,0,0,0,1),this}makeScale(t,e){return this.set(t,0,0,0,e,0,0,0,1),this}fromArray(t,e=0){for(let n=0;n<9;n++)this.elements[n]=t[n+e];return this}clone(){return new this.constructor().fromArray(this.elements)}}const bt=new z;function zt(i,t,e,n){const r=i*e+t*n,o=Math.sqrt(i*i+t*t)*Math.sqrt(e*e+n*n);let s=Math.acos(Math.max(-1,Math.min(1,r/o)));return i*n-t*e<0&&(s=-s),s}function Ot(i,t,e,n,r,o,s,c){if(t===0||e===0){i.lineTo(c.x,c.y);return}n=n*Math.PI/180,t=Math.abs(t),e=Math.abs(e);const a=(s.x-c.x)/2,h=(s.y-c.y)/2,l=Math.cos(n)*a+Math.sin(n)*h,y=-Math.sin(n)*a+Math.cos(n)*h;let f=t*t,p=e*e;const u=l*l,x=y*y,g=u/f+x/p;if(g>1){const L=Math.sqrt(g);t=L*t,e=L*e,f=t*t,p=e*e}const P=f*x+p*u,C=(f*p-P)/P;let w=Math.sqrt(Math.max(0,C));r===o&&(w=-w);const v=w*t*y/e,b=-w*e*l/t,S=Math.cos(n)*v-Math.sin(n)*b+(s.x+c.x)/2,d=Math.sin(n)*v+Math.cos(n)*b+(s.y+c.y)/2,M=zt(1,0,(l-v)/t,(y-b)/e),V=zt((l-v)/t,(y-b)/e,(-l-v)/t,(-y-b)/e)%(Math.PI*2);i.ellipse(S,d,t,e,n,M,M+V,o===0)}const q={WHITESPACE:/[ \t\r\n]/,DIGIT:/\d/,SIGN:/[-+]/,POINT:/\./,COMMA:/,/,EXP:/e/i,FLAGS:/[01]/};function O(i,t,e=0){let c=0,a=!0,h="",l="";const y=[];function f(g,P,C){const w=new SyntaxError(`Unexpected character "${g}" at index ${P}.`);throw w.partial=C,w}function p(){h!==""&&(l===""?y.push(Number(h)):y.push(Number(h)*10**Number(l))),h="",l=""}let u;const x=i.length;for(let g=0;g<x;g++){if(u=i[g],Array.isArray(t)&&t.includes(y.length%e)&&q.FLAGS.test(u)){c=1,h=u,p();continue}if(c===0){if(q.WHITESPACE.test(u))continue;if(q.DIGIT.test(u)||q.SIGN.test(u)){c=1,h=u;continue}if(q.POINT.test(u)){c=2,h=u;continue}q.COMMA.test(u)&&(a&&f(u,g,y),a=!0)}if(c===1){if(q.DIGIT.test(u)){h+=u;continue}if(q.POINT.test(u)){h+=u,c=2;continue}if(q.EXP.test(u)){c=3;continue}q.SIGN.test(u)&&h.length===1&&q.SIGN.test(h[0])&&f(u,g,y)}if(c===2){if(q.DIGIT.test(u)){h+=u;continue}if(q.EXP.test(u)){c=3;continue}q.POINT.test(u)&&h[h.length-1]==="."&&f(u,g,y)}if(c===3){if(q.DIGIT.test(u)){l+=u;continue}if(q.SIGN.test(u)){if(l===""){l+=u;continue}l.length===1&&q.SIGN.test(l)&&f(u,g,y)}}q.WHITESPACE.test(u)?(p(),c=0,a=!1):q.COMMA.test(u)?(p(),c=0,a=!0):q.SIGN.test(u)?(p(),c=1,h=u):q.POINT.test(u)?(p(),c=2,h=u):f(u,g,y)}return p(),y}function et(i,t){return i-(t-i)}function At(i,t){const e=new m,n=new m;for(let r=0,o=i.length;r<o;r++){const s=i[r];if(s.type==="m"||s.type==="M")s.type==="m"?e.add(s):e.copy(s),t.moveTo(e.x,e.y),n.copy(e);else if(s.type==="h"||s.type==="H")s.type==="h"?e.x+=s.x:e.x=s.x,t.lineTo(e.x,e.y),n.copy(e);else if(s.type==="v"||s.type==="V")s.type==="v"?e.y+=s.y:e.y=s.y,t.lineTo(e.x,e.y),n.copy(e);else if(s.type==="l"||s.type==="L")s.type==="l"?e.add(s):e.copy(s),t.lineTo(e.x,e.y),n.copy(e);else if(s.type==="c"||s.type==="C")s.type==="c"?(t.bezierCurveTo(e.x+s.x1,e.y+s.y1,e.x+s.x2,e.y+s.y2,e.x+s.x,e.y+s.y),n.x=e.x+s.x2,n.y=e.y+s.y2,e.add(s)):(t.bezierCurveTo(s.x1,s.y1,s.x2,s.y2,s.x,s.y),n.x=s.x2,n.y=s.y2,e.copy(s));else if(s.type==="s"||s.type==="S")s.type==="s"?(t.bezierCurveTo(et(e.x,n.x),et(e.y,n.y),e.x+s.x2,e.y+s.y2,e.x+s.x,e.y+s.y),n.x=e.x+s.x2,n.y=e.y+s.y2,e.add(s)):(t.bezierCurveTo(et(e.x,n.x),et(e.y,n.y),s.x2,s.y2,s.x,s.y),n.x=s.x2,n.y=s.y2,e.copy(s));else if(s.type==="q"||s.type==="Q")s.type==="q"?(t.quadraticCurveTo(e.x+s.x1,e.y+s.y1,e.x+s.x,e.y+s.y),n.x=e.x+s.x1,n.y=e.y+s.y1,e.add(s)):(t.quadraticCurveTo(s.x1,s.y1,s.x,s.y),n.x=s.x1,n.y=s.y1,e.copy(s));else if(s.type==="t"||s.type==="T"){const c=et(e.x,n.x),a=et(e.y,n.y);n.x=c,n.y=a,s.type==="t"?(t.quadraticCurveTo(c,a,e.x+s.x,e.y+s.y),e.add(s)):(t.quadraticCurveTo(c,a,s.x,s.y),e.copy(s))}else if(s.type==="a"||s.type==="A"){const c=e.clone();if(s.type==="a"){if(s.x===0&&s.y===0)continue;e.add(s)}else{if(e.equals(s))continue;e.copy(s)}n.copy(e),Ot(t,s.rx,s.ry,s.angle,s.largeArcFlag,s.sweepFlag,c,e)}else s.type==="z"||s.type==="Z"?(t.startPoint&&e.copy(t.startPoint),t.closePath()):console.warn("Unsupported commands",s)}}function Bt(i){let t,e;const n=[];for(let r=0,o=i.length;r<o;r++){const s=i[r];switch(s.type){case"m":case"M":if(s.x.toFixed(4)===e?.x.toFixed(4)&&s.y.toFixed(4)===e?.y.toFixed(4))continue;n.push(`${s.type} ${s.x} ${s.y}`),e={x:s.x,y:s.y},t={x:s.x,y:s.y};break;case"h":case"H":n.push(`${s.type} ${s.x}`),e={x:s.x,y:e?.y??0};break;case"v":case"V":n.push(`${s.type} ${s.y}`),e={x:e?.x??0,y:s.y};break;case"l":case"L":n.push(`${s.type} ${s.x} ${s.y}`),e={x:s.x,y:s.y};break;case"c":case"C":n.push(`${s.type} ${s.x1} ${s.y1} ${s.x2} ${s.y2} ${s.x} ${s.y}`),e={x:s.x,y:s.y};break;case"s":case"S":n.push(`${s.type} ${s.x2} ${s.y2} ${s.x} ${s.y}`),e={x:s.x,y:s.y};break;case"q":case"Q":n.push(`${s.type} ${s.x1} ${s.y1} ${s.x} ${s.y}`),e={x:s.x,y:s.y};break;case"t":case"T":n.push(`${s.type} ${s.x} ${s.y}`),e={x:s.x,y:s.y};break;case"a":case"A":n.push(`${s.type} ${s.rx} ${s.ry} ${s.angle} ${s.largeArcFlag} ${s.sweepFlag} ${s.x} ${s.y}`),e={x:s.x,y:s.y};break;case"z":case"Z":n.push(s.type),t&&(e={x:t.x,y:t.y});break}}return n.join(" ")}const Ie=/[a-df-z][^a-df-z]*/gi;function kt(i){const t=[],e=i.match(Ie);if(!e)return t;for(let n=0,r=e.length;n<r;n++){const o=e[n],s=o.charAt(0),c=o.slice(1).trim();let a;switch(s){case"m":case"M":a=O(c);for(let h=0,l=a.length;h<l;h+=2)h===0?t.push({type:s,x:a[h],y:a[h+1]}):t.push({type:s==="m"?"l":"L",x:a[h],y:a[h+1]});break;case"h":case"H":a=O(c);for(let h=0,l=a.length;h<l;h++)t.push({type:s,x:a[h]});break;case"v":case"V":a=O(c);for(let h=0,l=a.length;h<l;h++)t.push({type:s,y:a[h]});break;case"l":case"L":a=O(c);for(let h=0,l=a.length;h<l;h+=2)t.push({type:s,x:a[h],y:a[h+1]});break;case"c":case"C":a=O(c);for(let h=0,l=a.length;h<l;h+=6)t.push({type:s,x1:a[h],y1:a[h+1],x2:a[h+2],y2:a[h+3],x:a[h+4],y:a[h+5]});break;case"s":case"S":a=O(c);for(let h=0,l=a.length;h<l;h+=4)t.push({type:s,x2:a[h],y2:a[h+1],x:a[h+2],y:a[h+3]});break;case"q":case"Q":a=O(c);for(let h=0,l=a.length;h<l;h+=4)t.push({type:s,x1:a[h],y1:a[h+1],x:a[h+2],y:a[h+3]});break;case"t":case"T":a=O(c);for(let h=0,l=a.length;h<l;h+=2)t.push({type:s,x:a[h],y:a[h+1]});break;case"a":case"A":a=O(c,[3,4],7);for(let h=0,l=a.length;h<l;h+=7)t.push({type:s,rx:a[h],ry:a[h+1],angle:a[h+2],largeArcFlag:a[h+3],sweepFlag:a[h+4],x:a[h+5],y:a[h+6]});break;case"z":case"Z":t.push({type:s});break;default:console.warn(o)}}return t}const jt="data:image/svg+xml;",Zt=`${jt}base64,`,Ut=`${jt}charset=utf8,`;function Xt(i){if(typeof i=="string"){let t;i.startsWith(Zt)?(i=i.substring(Zt.length,i.length),t=atob(i)):i.startsWith(Ut)?(i=i.substring(Ut.length,i.length),t=decodeURIComponent(i)):t=i;const e=new DOMParser().parseFromString(t,"text/xml"),n=e.querySelector("parsererror");if(n)throw new Error(`${n.textContent??"parser error"}
2
- ${t}`);return e.documentElement}else return i}const Se="px",_e=90,Wt=["mm","cm","in","pt","pc","px"],Gt={mm:{mm:1,cm:.1,in:1/25.4,pt:72/25.4,pc:6/25.4,px:-1},cm:{mm:10,cm:1,in:1/2.54,pt:72/2.54,pc:6/2.54,px:-1},in:{mm:25.4,cm:2.54,in:1,pt:72,pc:6,px:-1},pt:{mm:25.4/72,cm:2.54/72,in:1/72,pt:1,pc:6/72,px:-1},pc:{mm:25.4/6,cm:2.54/6,in:1/6,pt:72/6,pc:1,px:-1},px:{px:1}};function E(i){let t="px";if(typeof i=="string")for(let n=0,r=Wt.length;n<r;n++){const o=Wt[n];if(i.endsWith(o)){t=o,i=i.substring(0,i.length-o.length);break}}let e;return e=Gt[t][Se],e<0&&(e=Gt[t].in*_e),e*Number.parseFloat(i)}const Ee=new z,xt=new z,Ht=new z,Qt=new z;function $e(i,t,e){if(!(i.hasAttribute("transform")||i.nodeName==="use"&&(i.hasAttribute("x")||i.hasAttribute("y"))))return null;const n=Le(i);return e.length>0&&n.premultiply(e[e.length-1]),t.copy(n),e.push(n),n}function Le(i){const t=new z,e=Ee;if(i.nodeName==="use"&&(i.hasAttribute("x")||i.hasAttribute("y"))&&t.translate(E(i.getAttribute("x")),E(i.getAttribute("y"))),i.hasAttribute("transform")){const n=i.getAttribute("transform").split(")");for(let r=n.length-1;r>=0;r--){const o=n[r].trim();if(o==="")continue;const s=o.indexOf("("),c=o.length;if(s>0&&s<c){const a=o.slice(0,s),h=O(o.slice(s+1));switch(e.identity(),a){case"translate":if(h.length>=1){const l=h[0];let y=0;h.length>=2&&(y=h[1]),e.translate(l,y)}break;case"rotate":if(h.length>=1){let l=0,y=0,f=0;l=h[0]*Math.PI/180,h.length>=3&&(y=h[1],f=h[2]),xt.makeTranslation(-y,-f),Ht.makeRotation(l),Qt.multiplyMatrices(Ht,xt),xt.makeTranslation(y,f),e.multiplyMatrices(xt,Qt)}break;case"scale":h.length>=1&&e.scale(h[0],h[1]??h[0]);break;case"skewX":h.length===1&&e.set(1,Math.tan(h[0]*Math.PI/180),0,0,1,0,0,0,1);break;case"skewY":h.length===1&&e.set(1,0,0,Math.tan(h[0]*Math.PI/180),1,0,0,0,1);break;case"matrix":h.length===6&&e.set(h[0],h[2],h[4],h[1],h[3],h[5],0,0,1);break}}t.premultiply(e)}}return t}function Fe(i){return new j().arc(E(i.getAttribute("cx")||0),E(i.getAttribute("cy")||0),E(i.getAttribute("r")||0),0,Math.PI*2)}function Ne(i,t){if(!(!i.sheet||!i.sheet.cssRules||!i.sheet.cssRules.length))for(let e=0;e<i.sheet.cssRules.length;e++){const n=i.sheet.cssRules[e];if(n.type!==1)continue;const r=n.selectorText.split(/,/g).filter(Boolean).map(s=>s.trim()),o={};for(let s=n.style.length,c=0;c<s;c++){const a=n.style.item(c);o[a]=n.style.getPropertyValue(a)}for(let s=0;s<r.length;s++)t[r[s]]=Object.assign(t[r[s]]||{},{...o})}}function De(i){return new j().ellipse(E(i.getAttribute("cx")||0),E(i.getAttribute("cy")||0),E(i.getAttribute("rx")||0),E(i.getAttribute("ry")||0),0,0,Math.PI*2)}function qe(i){return new j().moveTo(E(i.getAttribute("x1")||0),E(i.getAttribute("y1")||0)).lineTo(E(i.getAttribute("x2")||0),E(i.getAttribute("y2")||0))}function Ve(i){const t=new j,e=i.getAttribute("d");return!e||e==="none"?null:(t.addData(e),t)}const Re=/([+-]?(?:\d+(?:\.\d+)?|\.\d+)(?:e[+-]?\d+)?)(?:,|\s)([+-]?\d*\.?\d+(?:e[+-]?\d+)?)/g;function ze(i){const t=new j;let e=0;return i.getAttribute("points")?.replace(Re,(n,r,o)=>{const s=E(r),c=E(o);return e===0?t.moveTo(s,c):t.lineTo(s,c),e++,n}),t.currentCurve.autoClose=!0,t}const Oe=/([+-]?(?:\d+(?:\.\d+)?|\.\d+)(?:e[+-]?\d+)?)(?:,|\s)([+-]?\d*\.?\d+(?:e[+-]?\d+)?)/g;function Be(i){const t=new j;let e=0;return i.getAttribute("points")?.replace(Oe,(n,r,o)=>{const s=E(r),c=E(o);return e===0?t.moveTo(s,c):t.lineTo(s,c),e++,n}),t.currentCurve.autoClose=!1,t}function je(i){const t=E(i.getAttribute("x")||0),e=E(i.getAttribute("y")||0),n=E(i.getAttribute("rx")||i.getAttribute("ry")||0),r=E(i.getAttribute("ry")||i.getAttribute("rx")||0),o=E(i.getAttribute("width")),s=E(i.getAttribute("height")),c=1-.551915024494,a=new j;return a.moveTo(t+n,e),a.lineTo(t+o-n,e),(n!==0||r!==0)&&a.bezierCurveTo(t+o-n*c,e,t+o,e+r*c,t+o,e+r),a.lineTo(t+o,e+s-r),(n!==0||r!==0)&&a.bezierCurveTo(t+o,e+s-r*c,t+o-n*c,e+s,t+o-n,e+s),a.lineTo(t+n,e+s),(n!==0||r!==0)&&a.bezierCurveTo(t+n*c,e+s,t,e+s-r*c,t,e+s-r),a.lineTo(t,e+r),(n!==0||r!==0)&&a.bezierCurveTo(t,e+r*c,t+n*c,e,t+n,e),a}function Z(i,t,e){t=Object.assign({},t);let n={};if(i.hasAttribute("class")){const h=i.getAttribute("class").split(/\s/).filter(Boolean).map(l=>l.trim());for(let l=0;l<h.length;l++)n=Object.assign(n,e[`.${h[l]}`])}i.hasAttribute("id")&&(n=Object.assign(n,e[`#${i.getAttribute("id")}`]));for(let h=i.style.length,l=0;l<h;l++){const y=i.style.item(l),f=i.style.getPropertyValue(y);t[y]=f,n[y]=f}function r(h,l,y=o){i.hasAttribute(h)&&(t[l]=y(i.getAttribute(h))),n[h]&&(t[l]=y(n[h]))}function o(h){return h.startsWith("url")&&console.warn("url access in attributes is not implemented."),h}function s(h){return Math.max(0,Math.min(1,E(h)))}function c(h){return Math.max(0,E(h))}function a(h){return h.split(" ").filter(l=>l!=="").map(l=>E(l))}return r("fill","fill"),r("fill-opacity","fillOpacity",s),r("fill-rule","fillRule"),r("opacity","opacity",s),r("stroke","stroke"),r("stroke-opacity","strokeOpacity",s),r("stroke-width","strokeWidth",c),r("stroke-linecap","strokeLinecap"),r("stroke-linejoin","strokeLinejoin"),r("stroke-miterlimit","strokeMiterlimit",c),r("stroke-dasharray","strokeDasharray",a),r("stroke-dashoffset","strokeDashoffset",E),r("visibility","visibility"),t}function It(i,t,e=[],n={}){if(i.nodeType!==1)return e;let r=!1,o=null,s={...t};switch(i.nodeName){case"svg":s=Z(i,s,n);break;case"style":Ne(i,n);break;case"g":s=Z(i,s,n);break;case"path":s=Z(i,s,n),i.hasAttribute("d")&&(o=Ve(i));break;case"rect":s=Z(i,s,n),o=je(i);break;case"polygon":s=Z(i,s,n),o=ze(i);break;case"polyline":s=Z(i,s,n),o=Be(i);break;case"circle":s=Z(i,s,n),o=Fe(i);break;case"ellipse":s=Z(i,s,n),o=De(i);break;case"line":s=Z(i,s,n),o=qe(i);break;case"defs":r=!0;break;case"use":{s=Z(i,s,n);const f=(i.getAttributeNS("http://www.w3.org/1999/xlink","href")||i.getAttribute("href")||"").substring(1),p=i.viewportElement?.getElementById(f);p?It(p,s,e,n):console.warn(`'use node' references non-existent node id: ${f}`);break}default:console.warn(i);break}if(s.display==="none")return e;const c=new z,a=[],h=$e(i,c,a);o&&(o.applyTransform(c),e.push(o),o.style={...s});const l=i.childNodes;for(let y=0,f=l.length;y<f;y++){const p=l[y];r&&p.nodeName!=="style"&&p.nodeName!=="defs"||It(p,s,e,n)}return h&&(a.pop(),a.length>0?c.copy(a[a.length-1]):c.identity()),e}function Ze(i){const t=Xt(i);return new ve(It(t,{}),t.getAttribute("viewBox")?.trim().split(" ").map(e=>Number(e)))}function St(i,t,e,n,r){const o=(n-t)*.5,s=(r-e)*.5,c=i*i,a=i*c;return(2*e-2*n+o+s)*a+(-3*e+3*n-2*o-s)*c+o*i+e}function Ue(i,t){const e=1-i;return e*e*e*t}function Xe(i,t){const e=1-i;return 3*e*e*i*t}function We(i,t){return 3*(1-i)*i*i*t}function Ge(i,t){return i*i*i*t}function _t(i,t,e,n,r){return Ue(i,t)+Xe(i,e)+We(i,n)+Ge(i,r)}function He(i,t,e=2){const n=t&&t.length,r=n?t[0]*e:i.length;let o=Yt(i,0,r,e,!0);const s=[];if(!o||o.next===o.prev)return s;let c,a,h;if(n&&(o=tn(i,t,o,e)),i.length>80*e){c=i[0],a=i[1];let l=c,y=a;for(let f=e;f<r;f+=e){const p=i[f],u=i[f+1];p<c&&(c=p),u<a&&(a=u),p>l&&(l=p),u>y&&(y=u)}h=Math.max(l-c,y-a),h=h!==0?32767/h:0}return it(o,s,e,c,a,h,0),s}function Yt(i,t,e,n,r){let o;if(r===fn(i,t,e,n)>0)for(let s=t;s<e;s+=n)o=ee(s/n|0,i[s],i[s+1],o);else for(let s=e-n;s>=t;s-=n)o=ee(s/n|0,i[s],i[s+1],o);return o&&nt(o,o.next)&&(ct(o),o=o.next),o}function W(i,t){if(!i)return i;t||(t=i);let e=i,n;do if(n=!1,!e.steiner&&(nt(e,e.next)||F(e.prev,e,e.next)===0)){if(ct(e),e=t=e.prev,e===e.next)break;n=!0}else e=e.next;while(n||e!==t);return t}function it(i,t,e,n,r,o,s){if(!i)return;!s&&o&&on(i,n,r,o);let c=i;for(;i.prev!==i.next;){const a=i.prev,h=i.next;if(o?Ye(i,n,r,o):Qe(i)){t.push(a.i,i.i,h.i),ct(i),i=h.next,c=h.next;continue}if(i=h,i===c){s?s===1?(i=Je(W(i),t),it(i,t,e,n,r,o,2)):s===2&&Ke(i,t,e,n,r,o):it(W(i),t,e,n,r,o,1);break}}}function Qe(i){const t=i.prev,e=i,n=i.next;if(F(t,e,n)>=0)return!1;const r=t.x,o=e.x,s=n.x,c=t.y,a=e.y,h=n.y,l=Math.min(r,o,s),y=Math.min(c,a,h),f=Math.max(r,o,s),p=Math.max(c,a,h);let u=n.next;for(;u!==t;){if(u.x>=l&&u.x<=f&&u.y>=y&&u.y<=p&&rt(r,c,o,a,s,h,u.x,u.y)&&F(u.prev,u,u.next)>=0)return!1;u=u.next}return!0}function Ye(i,t,e,n){const r=i.prev,o=i,s=i.next;if(F(r,o,s)>=0)return!1;const c=r.x,a=o.x,h=s.x,l=r.y,y=o.y,f=s.y,p=Math.min(c,a,h),u=Math.min(l,y,f),x=Math.max(c,a,h),g=Math.max(l,y,f),P=Et(p,u,t,e,n),C=Et(x,g,t,e,n);let w=i.prevZ,v=i.nextZ;for(;w&&w.z>=P&&v&&v.z<=C;){if(w.x>=p&&w.x<=x&&w.y>=u&&w.y<=g&&w!==r&&w!==s&&rt(c,l,a,y,h,f,w.x,w.y)&&F(w.prev,w,w.next)>=0||(w=w.prevZ,v.x>=p&&v.x<=x&&v.y>=u&&v.y<=g&&v!==r&&v!==s&&rt(c,l,a,y,h,f,v.x,v.y)&&F(v.prev,v,v.next)>=0))return!1;v=v.nextZ}for(;w&&w.z>=P;){if(w.x>=p&&w.x<=x&&w.y>=u&&w.y<=g&&w!==r&&w!==s&&rt(c,l,a,y,h,f,w.x,w.y)&&F(w.prev,w,w.next)>=0)return!1;w=w.prevZ}for(;v&&v.z<=C;){if(v.x>=p&&v.x<=x&&v.y>=u&&v.y<=g&&v!==r&&v!==s&&rt(c,l,a,y,h,f,v.x,v.y)&&F(v.prev,v,v.next)>=0)return!1;v=v.nextZ}return!0}function Je(i,t){let e=i;do{const n=e.prev,r=e.next.next;!nt(n,r)&&Kt(n,e,e.next,r)&&ot(n,r)&&ot(r,n)&&(t.push(n.i,e.i,r.i),ct(e),ct(e.next),e=i=r),e=e.next}while(e!==i);return W(e)}function Ke(i,t,e,n,r,o){let s=i;do{let c=s.next.next;for(;c!==s.prev;){if(s.i!==c.i&&an(s,c)){let a=te(s,c);s=W(s,s.next),a=W(a,a.next),it(s,t,e,n,r,o,0),it(a,t,e,n,r,o,0);return}c=c.next}s=s.next}while(s!==i)}function tn(i,t,e,n){const r=[];for(let o=0,s=t.length;o<s;o++){const c=t[o]*n,a=o<s-1?t[o+1]*n:i.length,h=Yt(i,c,a,n,!1);h===h.next&&(h.steiner=!0),r.push(hn(h))}r.sort(en);for(let o=0;o<r.length;o++)e=nn(r[o],e);return e}function en(i,t){let e=i.x-t.x;if(e===0&&(e=i.y-t.y,e===0)){const n=(i.next.y-i.y)/(i.next.x-i.x),r=(t.next.y-t.y)/(t.next.x-t.x);e=n-r}return e}function nn(i,t){const e=sn(i,t);if(!e)return t;const n=te(e,i);return W(n,n.next),W(e,e.next)}function sn(i,t){let e=t;const n=i.x,r=i.y;let o=-1/0,s;if(nt(i,e))return e;do{if(nt(i,e.next))return e.next;if(r<=e.y&&r>=e.next.y&&e.next.y!==e.y){const y=e.x+(r-e.y)*(e.next.x-e.x)/(e.next.y-e.y);if(y<=n&&y>o&&(o=y,s=e.x<e.next.x?e:e.next,y===n))return s}e=e.next}while(e!==t);if(!s)return null;const c=s,a=s.x,h=s.y;let l=1/0;e=s;do{if(n>=e.x&&e.x>=a&&n!==e.x&&Jt(r<h?n:o,r,a,h,r<h?o:n,r,e.x,e.y)){const y=Math.abs(r-e.y)/(n-e.x);ot(e,i)&&(y<l||y===l&&(e.x>s.x||e.x===s.x&&rn(s,e)))&&(s=e,l=y)}e=e.next}while(e!==c);return s}function rn(i,t){return F(i.prev,i,t.prev)<0&&F(t.next,i,i.next)<0}function on(i,t,e,n){let r=i;do r.z===0&&(r.z=Et(r.x,r.y,t,e,n)),r.prevZ=r.prev,r.nextZ=r.next,r=r.next;while(r!==i);r.prevZ.nextZ=null,r.prevZ=null,cn(r)}function cn(i){let t,e=1;do{let n=i,r;i=null;let o=null;for(t=0;n;){t++;let s=n,c=0;for(let h=0;h<e&&(c++,s=s.nextZ,!!s);h++);let a=e;for(;c>0||a>0&&s;)c!==0&&(a===0||!s||n.z<=s.z)?(r=n,n=n.nextZ,c--):(r=s,s=s.nextZ,a--),o?o.nextZ=r:i=r,r.prevZ=o,o=r;n=s}o.nextZ=null,e*=2}while(t>1);return i}function Et(i,t,e,n,r){return i=(i-e)*r|0,t=(t-n)*r|0,i=(i|i<<8)&16711935,i=(i|i<<4)&252645135,i=(i|i<<2)&858993459,i=(i|i<<1)&1431655765,t=(t|t<<8)&16711935,t=(t|t<<4)&252645135,t=(t|t<<2)&858993459,t=(t|t<<1)&1431655765,i|t<<1}function hn(i){let t=i,e=i;do(t.x<e.x||t.x===e.x&&t.y<e.y)&&(e=t),t=t.next;while(t!==i);return e}function Jt(i,t,e,n,r,o,s,c){return(r-s)*(t-c)>=(i-s)*(o-c)&&(i-s)*(n-c)>=(e-s)*(t-c)&&(e-s)*(o-c)>=(r-s)*(n-c)}function rt(i,t,e,n,r,o,s,c){return!(i===s&&t===c)&&Jt(i,t,e,n,r,o,s,c)}function an(i,t){return i.next.i!==t.i&&i.prev.i!==t.i&&!ln(i,t)&&(ot(i,t)&&ot(t,i)&&un(i,t)&&(F(i.prev,i,t.prev)||F(i,t.prev,t))||nt(i,t)&&F(i.prev,i,i.next)>0&&F(t.prev,t,t.next)>0)}function F(i,t,e){return(t.y-i.y)*(e.x-t.x)-(t.x-i.x)*(e.y-t.y)}function nt(i,t){return i.x===t.x&&i.y===t.y}function Kt(i,t,e,n){const r=gt(F(i,t,e)),o=gt(F(i,t,n)),s=gt(F(e,n,i)),c=gt(F(e,n,t));return!!(r!==o&&s!==c||r===0&&pt(i,e,t)||o===0&&pt(i,n,t)||s===0&&pt(e,i,n)||c===0&&pt(e,t,n))}function pt(i,t,e){return t.x<=Math.max(i.x,e.x)&&t.x>=Math.min(i.x,e.x)&&t.y<=Math.max(i.y,e.y)&&t.y>=Math.min(i.y,e.y)}function gt(i){return i>0?1:i<0?-1:0}function ln(i,t){let e=i;do{if(e.i!==i.i&&e.next.i!==i.i&&e.i!==t.i&&e.next.i!==t.i&&Kt(e,e.next,i,t))return!0;e=e.next}while(e!==i);return!1}function ot(i,t){return F(i.prev,i,i.next)<0?F(i,t,i.next)>=0&&F(i,i.prev,t)>=0:F(i,t,i.prev)<0||F(i,i.next,t)<0}function un(i,t){let e=i,n=!1;const r=(i.x+t.x)/2,o=(i.y+t.y)/2;do e.y>o!=e.next.y>o&&e.next.y!==e.y&&r<(e.next.x-e.x)*(o-e.y)/(e.next.y-e.y)+e.x&&(n=!n),e=e.next;while(e!==i);return n}function te(i,t){const e=$t(i.i,i.x,i.y),n=$t(t.i,t.x,t.y),r=i.next,o=t.prev;return i.next=t,t.prev=i,e.next=r,r.prev=e,n.next=e,e.prev=n,o.next=n,n.prev=o,n}function ee(i,t,e,n){const r=$t(i,t,e);return n?(r.next=n.next,r.prev=n,n.next.prev=r,n.next=r):(r.prev=r,r.next=r),r}function ct(i){i.next.prev=i.prev,i.prev.next=i.next,i.prevZ&&(i.prevZ.nextZ=i.nextZ),i.nextZ&&(i.nextZ.prevZ=i.prevZ)}function $t(i,t,e){return{i,x:t,y:e,prev:null,next:null,z:0,prevZ:null,nextZ:null,steiner:!1}}function fn(i,t,e,n){let r=0;for(let o=t,s=e-n;o<e;o+=n)r+=(i[s]-i[o])*(i[o+1]+i[s+1]),s=o;return r}function Lt(i,t={}){let{vertices:e=[],indices:n=[],holes:r=[],verticesStride:o=2,verticesOffset:s=e.length/o,indicesOffset:c=n.length}=t;const a=He(i,r,2);if(a.length){for(let l=0;l<a.length;l+=3)n[c++]=a[l]+s,n[c++]=a[l+1]+s,n[c++]=a[l+2]+s;let h=s*o;for(let l=0;l<i.length;l+=2)e[h]=i[l],e[h+1]=i[l+1],h+=o}return{vertices:e,indices:n}}const yn=8,dt=11920929e-14,xn=1;function ne(i,t,e,n,r,o,s,c,a=.5,h=[]){const y=Math.min(.99,Math.max(0,a));let f=(xn-y)/1;return f*=f,Ft(i,t,e,n,r,o,s,c,h,f,0),h.push(s,c),h}function Ft(i,t,e,n,r,o,s,c,a,h,l){if(l>yn)return;const y=(i+e)/2,f=(t+n)/2,p=(e+r)/2,u=(n+o)/2,x=(r+s)/2,g=(o+c)/2,P=(y+p)/2,C=(f+u)/2,w=(p+x)/2,v=(u+g)/2,b=(P+w)/2,S=(C+v)/2;if(l>0){let d=s-i,M=c-t;const V=Math.abs((e-s)*M-(n-c)*d),L=Math.abs((r-s)*M-(o-c)*d);if(V>dt&&L>dt){if((V+L)*(V+L)<=h*(d*d+M*M)){a.push(b,S);return}}else if(V>dt){if(V*V<=h*(d*d+M*M)){a.push(b,S);return}}else if(L>dt){if(L*L<=h*(d*d+M*M)){a.push(b,S);return}}else if(d=b-(i+s)/2,M=S-(t+c)/2,d*d+M*M<=h){a.push(b,S);return}}Ft(i,t,y,f,P,C,b,S,a,h,l+1),Ft(b,S,w,v,x,g,s,c,a,h,l+1)}const pn=8,gn=11920929e-14,dn=1;function se(i,t,e,n,r,o,s=.5,c=[]){const h=Math.min(.99,Math.max(0,s));let l=(dn-h)/1;return l*=l,Nt(c,i,t,e,n,r,o,l,0),c.push(r,o),c}function Nt(i,t,e,n,r,o,s,c,a){if(a>pn)return;const h=(t+n)/2,l=(e+r)/2,y=(n+o)/2,f=(r+s)/2,p=(h+y)/2,u=(l+f)/2;let x=o-t,g=s-e;const P=Math.abs((n-o)*g-(r-s)*x);if(P>gn){if(P*P<=c*(x*x+g*g)){i.push(p,u);return}}else if(x=p-(t+o)/2,g=u-(e+s)/2,x*x+g*g<=c){i.push(p,u);return}Nt(i,t,e,h,l,p,u,c,a+1),Nt(i,p,u,y,f,o,s,c,a+1)}function mn(i){let t=0;const e=i.length;for(let n=0;n<e;n+=2){const r=i[n],o=i[n+1],s=i[(n+2)%(e-1)],c=i[(n+3)%e];t+=r*c-s*o}return t/2}function ie(i){return i.replace(/[^a-z0-9]/gi,"-").replace(/\B([A-Z])/g,"-$1").toLowerCase()}function re(i,t,e,n){const r=t.clone().sub(i),o=n.clone().sub(e),s=e.clone().sub(i),c=r.cross(o);if(c===0)return new m((i.x+e.x)/2,(i.y+e.y)/2);const a=s.cross(o)/c;return Math.abs(a)>1?new m((i.x+e.x)/2,(i.y+e.y)/2):new m(i.x+a*r.x,i.y+a*r.y)}function Mn(i){let t=0;const e=i.length/2;for(let n=0;n<e;n++){const r=i[2*n],o=i[2*n+1],s=(n+1)%e,c=i[2*s],a=i[2*s+1];t+=(c-r)*(a+o)}return t}function oe(i,t,e,n,r,o){return(e-i)*(o-t)-(r-i)*(n-t)}function wn(i,t,e){const n=e.length;let r=0;for(let o=0,s=n-2;o<n;s=o,o+=2){const c=e[o],a=e[o+1],h=e[s],l=e[s+1];a<=t?l>t&&oe(h,l,c,a,i,t)>0&&r++:l<=t&&oe(h,l,c,a,i,t)<0&&r--}return r}function vn(i,t){const e=t[0]-i[0],n=t[1]-i[1];return Math.sqrt(e*e+n*n)}function ce(i){const t=i.length,e=i.map((n,r)=>({index:r,dist:0,wn:0,parentIndex:void 0}));for(let n=0;n<t;n++){if(Mn(i[n])<0)continue;const r=i[n],o=[...r];let s;for(let c=0;c<t;c++){if(n===c)continue;let a=0;for(let h=0;h<o.length&&(a=a||wn(o[h],o[h+1],i[c]),!a);h+=2);if(Math.abs(a)>0){const h=vn(r,i[c]);(!s||h<s.dist)&&(s={index:c,dist:h,wn:a})}}s&&(e[n].dist=s.dist,e[n].wn=s.wn,e[n].parentIndex=s.index)}return e}function Pn(i,t){const e=1-i;return e*e*t}function Tn(i,t){return 2*(1-i)*i*t}function Cn(i,t){return i*i*t}function Dt(i,t,e,n){return Pn(i,t)+Tn(i,e)+Cn(i,n)}const bn=1e-4,he=1e-4;function ae(i,t={}){const{vertices:e=[],indices:n=[],lineStyle:r={alignment:.5,cap:"butt",join:"miter",width:1,miterLimit:10},flipAlignment:o=!1,closed:s=!0}=t,c=bn;if(i.length===0)return{vertices:e,indices:n};const a=r;let h=a.alignment;if(r.alignment!==.5){let $=An(i);o&&($*=-1),h=(h-.5)*$+.5}const l={x:i[0],y:i[1]},y={x:i[i.length-2],y:i[i.length-1]},f=s,p=Math.abs(l.x-y.x)<c&&Math.abs(l.y-y.y)<c;if(f){i=i.slice(),p&&(i.pop(),i.pop(),y.x=i[i.length-2],y.y=i[i.length-1]);const $=(l.x+y.x)*.5,X=(y.y+l.y)*.5;i.unshift($,X),i.push($,X)}const u=e,x=i.length/2;let g=i.length;const P=u.length/2,C=a.width/2,w=C*C,v=a.miterLimit*a.miterLimit;let b=i[0],S=i[1],d=i[2],M=i[3],V=0,L=0,k=-(S-M),I=b-d,N=0,D=0,R=Math.sqrt(k*k+I*I);k/=R,I/=R,k*=C,I*=C;const at=h,T=(1-at)*2,_=at*2;f||(a.cap==="round"?g+=G(b-k*(T-_)*.5,S-I*(T-_)*.5,b-k*T,S-I*T,b+k*_,S+I*_,u,!0)+2:a.cap==="square"&&(g+=le(b,S,k,I,T,_,!0,u))),u.push(b-k*T,S-I*T),u.push(b+k*_,S+I*_);for(let $=1;$<x-1;++$){b=i[($-1)*2],S=i[($-1)*2+1],d=i[$*2],M=i[$*2+1],V=i[($+1)*2],L=i[($+1)*2+1],k=-(S-M),I=b-d,R=Math.sqrt(k*k+I*I),k/=R,I/=R,k*=C,I*=C,N=-(M-L),D=d-V,R=Math.sqrt(N*N+D*D),N/=R,D/=R,N*=C,D*=C;const X=d-b,lt=S-M,ut=d-V,ft=L-M,Te=X*ut+lt*ft,vt=lt*ut-ft*X,yt=vt<0;if(Math.abs(vt)<.001*Math.abs(Te)){u.push(d-k*T,M-I*T),u.push(d+k*_,M+I*_),Te>=0&&(a.join==="round"?g+=G(d,M,d-k*T,M-I*T,d-N*T,M-D*T,u,!1)+4:g+=2,u.push(d-N*_,M-D*_),u.push(d+N*T,M+D*T));continue}const Ce=(-k+b)*(-I+M)-(-k+d)*(-I+S),be=(-N+V)*(-D+M)-(-N+d)*(-D+L),Pt=(X*be-ut*Ce)/vt,Tt=(ft*Ce-lt*be)/vt,Rt=(Pt-d)*(Pt-d)+(Tt-M)*(Tt-M),Q=d+(Pt-d)*T,Y=M+(Tt-M)*T,J=d-(Pt-d)*_,K=M-(Tt-M)*_,Dn=Math.min(X*X+lt*lt,ut*ut+ft*ft),Ae=yt?T:_,qn=Dn+Ae*Ae*w;Rt<=qn?a.join==="bevel"||Rt/w>v?(yt?(u.push(Q,Y),u.push(d+k*_,M+I*_),u.push(Q,Y),u.push(d+N*_,M+D*_)):(u.push(d-k*T,M-I*T),u.push(J,K),u.push(d-N*T,M-D*T),u.push(J,K)),g+=2):a.join==="round"?yt?(u.push(Q,Y),u.push(d+k*_,M+I*_),g+=G(d,M,d+k*_,M+I*_,d+N*_,M+D*_,u,!0)+4,u.push(Q,Y),u.push(d+N*_,M+D*_)):(u.push(d-k*T,M-I*T),u.push(J,K),g+=G(d,M,d-k*T,M-I*T,d-N*T,M-D*T,u,!1)+4,u.push(d-N*T,M-D*T),u.push(J,K)):(u.push(Q,Y),u.push(J,K)):(u.push(d-k*T,M-I*T),u.push(d+k*_,M+I*_),a.join==="round"?yt?g+=G(d,M,d+k*_,M+I*_,d+N*_,M+D*_,u,!0)+2:g+=G(d,M,d-k*T,M-I*T,d-N*T,M-D*T,u,!1)+2:a.join==="miter"&&Rt/w<=v&&(yt?(u.push(J,K),u.push(J,K)):(u.push(Q,Y),u.push(Q,Y)),g+=2),u.push(d-N*T,M-D*T),u.push(d+N*_,M+D*_),g+=2)}b=i[(x-2)*2],S=i[(x-2)*2+1],d=i[(x-1)*2],M=i[(x-1)*2+1],k=-(S-M),I=b-d,R=Math.sqrt(k*k+I*I),k/=R,I/=R,k*=C,I*=C,u.push(d-k*T,M-I*T),u.push(d+k*_,M+I*_),f||(a.cap==="round"?g+=G(d-k*(T-_)*.5,M-I*(T-_)*.5,d-k*T,M-I*T,d+k*_,M+I*_,u,!1)+2:a.cap==="square"&&(g+=le(d,M,k,I,T,_,!1,u)));const Nn=he*he;for(let $=P;$<g+P-2;++$)b=u[$*2],S=u[$*2+1],d=u[($+1)*2],M=u[($+1)*2+1],V=u[($+2)*2],L=u[($+2)*2+1],!(Math.abs(b*(M-L)+d*(L-S)+V*(S-M))<Nn)&&n.push($,$+1,$+2);return{vertices:e,indices:n}}function An(i){const t=i.length;if(t<6)return 1;let e=0;for(let n=0,r=i[t-2],o=i[t-1];n<t;n+=2){const s=i[n],c=i[n+1];e+=(s-r)*(c+o),r=s,o=c}return e<0?-1:1}function le(i,t,e,n,r,o,s,c){const a=i-e*r,h=t-n*r,l=i+e*o,y=t+n*o;let f,p;s?(f=n,p=-e):(f=-n,p=e);const u=a+f,x=h+p,g=l+f,P=y+p;return c.push(u,x),c.push(g,P),2}function G(i,t,e,n,r,o,s,c){const a=e-i,h=n-t;let l=Math.atan2(a,h),y=Math.atan2(r-i,o-t);c&&l<y?l+=Math.PI*2:!c&&l>y&&(y+=Math.PI*2);let f=l;const p=y-l,u=Math.abs(p),x=Math.sqrt(a*a+h*h),g=(15*u*Math.sqrt(x)/Math.PI>>0)+1,P=p/g;if(f+=P,c){s.push(i,t),s.push(e,n);for(let C=1,w=f;C<g;C++,w+=P)s.push(i,t),s.push(i+Math.sin(w)*x,t+Math.cos(w)*x);s.push(i,t),s.push(r,o)}else{s.push(e,n),s.push(i,t);for(let C=1,w=f;C<g;C++,w+=P)s.push(i+Math.sin(w)*x,t+Math.cos(w)*x),s.push(i,t);s.push(r,o),s.push(i,t)}return g*2}class H{arcLengthDivision=200;_arcLengths;getPointAt(t,e=new m){return this.getPoint(this.getUToTMapping(t),e)}isClockwise(){return!1}getControlPointRefs(){return[]}applyTransform(t){const e=typeof t=="function";return this.getControlPointRefs().forEach(n=>{e?t(n):n.applyMatrix3(t)}),this}getUnevenVertices(t=5,e=[]){const n=new m;for(let r=0,o=Math.max(1,t)-1;r<=o;r++)this.getPoint(r/o,n),e.push(n.x,n.y);return e}getSpacedVertices(t=5,e=[]){const n=new m;for(let r=0,o=Math.max(1,t)-1;r<=o;r++)this.getPointAt(r/o,n),e.push(n.x,n.y);return e}getAdaptiveVertices(t=[]){return this.getUnevenVertices(5,t)}_verticesToPoints(t,e=[]){for(let n=0,r=t.length;n<r;n+=2){const o=t[n],s=t[n+1];e.push(new m(o,s))}return e}getSpacedPoints(t,e=[]){const n=this.getSpacedVertices(t);return this._verticesToPoints(n,e),e}getUnevenPoints(t,e=[]){const n=this.getUnevenVertices(t);return this._verticesToPoints(n,e),e}getAdaptivePoints(t=[]){const e=this.getAdaptiveVertices();return this._verticesToPoints(e,t),t}getPoints(t,e=[]){let n;return t?n=this.getUnevenVertices(t):n=this.getAdaptiveVertices(),this._verticesToPoints(n,e),e}getLength(){const t=this.getLengths();return t[t.length-1]}getLengths(){return(!this._arcLengths||this._arcLengths.length!==this.arcLengthDivision+1)&&this.updateLengths(),this._arcLengths}updateLengths(){const t=this.arcLengthDivision,e=[0];for(let n=0,r=this.getPoint(0),o=1;o<=t;o++){const s=this.getPoint(o/t);n+=s.distanceTo(r),e.push(n),r=s}this._arcLengths=e}getUToTMapping(t,e){const n=this.getLengths(),r=n.length,o=e??t*n[r-1];if(r<2)return o/n[0];let s=0,c=0,a=r-1,h;for(;c<=a;)if(s=Math.floor(c+(a-c)/2),h=n[s]-o,h<0)c=s+1;else if(h>0)a=s-1;else{a=s;break}if(s=a,n[s]===o)return s/(r-1);const l=n[s],f=n[s+1]-l,p=(o-l)/f;return(s+p)/(r-1)}getTangent(t,e=new m){const r=Math.max(0,t-1e-4),o=Math.min(1,t+1e-4);return e.copy(this.getPoint(o).sub(this.getPoint(r)).normalize())}getTangentAt(t,e){return this.getTangent(this.getUToTMapping(t),e)}getNormal(t,e=new m){return this.getTangent(t,e),e.set(-e.y,e.x).normalize()}getNormalAt(t,e){return this.getNormal(this.getUToTMapping(t),e)}getTForPoint(t,e=.001){let n=0,r=1,o=(n+r)/2;for(;r-n>e;){o=(n+r)/2;const s=this.getPoint(o);if(s.distanceTo(t)<e)return o;s.x<t.x?n=o:r=o}return o}getMinMax(t=m.MAX,e=m.MIN){const n=this.getPoints();for(let r=0,o=n.length;r<o;r++){const s=n[r];t.min(s),e.max(s)}return{min:t.finite(),max:e.finite()}}getBoundingBox(){const{min:t,max:e}=this.getMinMax();return new U(t.x,t.y,e.x-t.x,e.y-t.y)}getFillVertices(t){return this.getAdaptiveVertices()}fillTriangulate(t){return Lt(this.getFillVertices(t),t)}strokeTriangulate(t){return ae(this.getAdaptiveVertices(),t)}toCommands(){const t=[],e=this.getPoints();for(let n=0,r=e.length;n<r;n++){const o=e[n];n===0?t.push({type:"M",x:o.x,y:o.y}):t.push({type:"L",x:o.x,y:o.y})}return t}toData(){return Bt(this.toCommands())}drawTo(t){return this.toCommands().forEach(e=>{switch(e.type){case"M":t.moveTo(e.x,e.y);break;case"L":t.lineTo(e.x,e.y);break}}),this}copy(t){return this.arcLengthDivision=t.arcLengthDivision,this}clone(){return new this.constructor().copy(this)}}const kn=new z,ue=new z,fe=new z,mt=new m;class qt extends H{constructor(t=new m,e=new m,n=new m,r=0,o=0,s=Math.PI*2,c=!1){super(),this._center=t,this._radius=e,this._diff=n,this.rotate=r,this.startAngle=o,this.endAngle=s,this.clockwise=c}get cx(){return this._center.x}set cx(t){this._center.x=t}get cy(){return this._center.y}set cy(t){this._center.y=t}get rx(){return this._radius.x}set rx(t){this._radius.x=t}get ry(){return this._radius.y}set ry(t){this._radius.y=t}get dx(){return this._diff.x}set dx(t){this._diff.x=t}get dy(){return this._diff.y}set dy(t){this._diff.y=t}isClockwise(){return this.clockwise}_getDeltaAngle(){const t=Math.PI*2;let e=this.endAngle-this.startAngle;const n=Math.abs(e)<Number.EPSILON;return e=(e%t+t)%t,n?e=0:this.clockwise||(e=e===0?-t:e-t),e}getPoint(t,e=new m){const n=this._getDeltaAngle(),r=this.startAngle+t*n;let o=this.cx+this.rx*Math.cos(r),s=this.cy+this.ry*Math.sin(r);if(this.rotate!==0){const c=Math.cos(this.rotate),a=Math.sin(this.rotate),h=o-this.cx,l=s-this.cy;o=h*c-l*a+this.cx,s=h*a+l*c+this.cy}return e.set(o,s)}toCommands(){const{cx:t,cy:e,rx:n,ry:r,startAngle:o,endAngle:s,clockwise:c,rotate:a}=this,h=t+n*Math.cos(o)*Math.cos(a)-r*Math.sin(o)*Math.sin(a),l=e+n*Math.cos(o)*Math.sin(a)+r*Math.sin(o)*Math.cos(a),y=Math.abs(o-s),f=y>Math.PI?1:0,p=c?1:0,u=a*180/Math.PI;if(y>=2*Math.PI){const x=o+Math.PI,g=t+n*Math.cos(x)*Math.cos(a)-r*Math.sin(x)*Math.sin(a),P=e+n*Math.cos(x)*Math.sin(a)+r*Math.sin(x)*Math.cos(a);return[{type:"M",x:h,y:l},{type:"A",rx:n,ry:r,angle:u,largeArcFlag:0,sweepFlag:p,x:g,y:P},{type:"A",rx:n,ry:r,angle:u,largeArcFlag:0,sweepFlag:p,x:h,y:l}]}else{const x=t+n*Math.cos(s)*Math.cos(a)-r*Math.sin(s)*Math.sin(a),g=e+n*Math.cos(s)*Math.sin(a)+r*Math.sin(s)*Math.cos(a);return[{type:"M",x:h,y:l},{type:"A",rx:n,ry:r,angle:u,largeArcFlag:f,sweepFlag:p,x,y:g}]}}drawTo(t){const{cx:e,cy:n,rx:r,ry:o,rotate:s,startAngle:c,endAngle:a,clockwise:h}=this;return t.ellipse(e,n,r,o,s,c,a,!h),this}applyTransform(t){return mt.set(this.cx,this.cy),mt.applyMatrix3(t),this.cx=mt.x,this.cy=mt.y,_n(t)?In(this,t):Sn(this,t),this}getControlPointRefs(){return[this._center]}_getAdaptiveVerticesByArc(t=[]){const{cx:e,cy:n,rx:r,ry:o,dx:s,dy:c,startAngle:a,endAngle:h,clockwise:l,rotate:y}=this,f=!l;let p=Math.abs(a-h);(!f&&a>h||f&&h>a)&&(p=2*Math.PI-p);const u=Math.max(12,Math.floor(12*r**(1/3)*(p/Math.PI)));let x=p/u,g=a;x*=f?-1:1;const P=Math.cos(f?y:-y),C=Math.sin(f?y:-y);for(let w=0;w<u+1;w++){const v=s+Math.cos(g)*r,b=c+Math.sin(g)*o,S=v*P-b*C,d=v*C+b*P;t.push(e+S,n+d),g+=x}return t}_getAdaptiveVerticesByCircle(t=[]){const{cx:e,cy:n,rx:r,ry:o,dx:s,dy:c,rotate:a,clockwise:h}=this;if(!(r>=0&&o>=0&&s>=0&&c>=0))return t;const l=Math.ceil(2.3*Math.sqrt(r+o)),y=l*8+(s?4:0)+(c?4:0),f=[];if(y===0)return t;{const x=f.length;if(l===0)f[x]=f[x+6]=e+s,f[x+1]=f[x+3]=n+c,f[x+2]=f[x+4]=e-s,f[x+5]=f[x+7]=n-c;else{let g=x,P=x+l*4+(s?2:0)+2,C=P,w=y,v=s+r,b=c,S=e+v,d=e-v,M=n+b;if(f[g++]=S,f[g++]=M,f[--P]=M,f[--P]=d,c){const L=n-b;f[C++]=d,f[C++]=L,f[--w]=L,f[--w]=S}for(let L=1;L<l;L++){const k=Math.PI/2*(L/l),I=s+Math.cos(k)*r,N=c+Math.sin(k)*o,D=e+I,R=e-I,at=n+N,T=n-N;f[g++]=D,f[g++]=at,f[--P]=at,f[--P]=R,f[C++]=R,f[C++]=T,f[--w]=T,f[--w]=D}v=s,b=c+o,S=e+v,d=e-v,M=n+b;const V=n-b;f[g++]=S,f[g++]=M,f[--w]=V,f[--w]=S,s&&(f[g++]=d,f[g++]=M,f[--w]=V,f[--w]=d)}}const p=Math.cos(h?-a:a),u=Math.sin(h?-a:a);for(let x=0;x<f.length;x+=2){const g=f[x],P=f[x+1],C=g-e,w=P-n,v=C*p-w*u,b=C*u+w*p;t.push(e+v,n+b)}return t}getAdaptiveVertices(t=[]){return this.startAngle===0&&this.endAngle===Math.PI*2?this._getAdaptiveVerticesByCircle(t):this._getAdaptiveVerticesByArc(t)}copy(t){return super.copy(t),this.cx=t.cx,this.cy=t.cy,this.rx=t.rx,this.ry=t.ry,this.dx=t.dx,this.dy=t.dy,this.startAngle=t.startAngle,this.endAngle=t.endAngle,this.clockwise=t.clockwise,this.rotate=t.rotate,this}}function In(i,t){const e=i.rx,n=i.ry,r=Math.cos(i.rotate),o=Math.sin(i.rotate),s=new m(e*r,e*o),c=new m(-n*o,n*r),a=s.applyMatrix3(t),h=c.applyMatrix3(t),l=kn.set(a.x,h.x,0,a.y,h.y,0,0,0,1),y=ue.copy(l).invert(),u=fe.copy(y).transpose().multiply(y).elements,x=En(u[0],u[1],u[4]),g=Math.sqrt(x.rt1),P=Math.sqrt(x.rt2);if(i.rx=1/g,i.ry=1/P,i.rotate=Math.atan2(x.sn,x.cs),!((i.endAngle-i.startAngle)%(2*Math.PI)<Number.EPSILON)){const w=ue.set(g,0,0,0,P,0,0,0,1),v=fe.set(x.cs,x.sn,0,-x.sn,x.cs,0,0,0,1),b=w.multiply(v).multiply(l),S=d=>{const{x:M,y:V}=new m(Math.cos(d),Math.sin(d)).applyMatrix3(b);return Math.atan2(V,M)};i.startAngle=S(i.startAngle),i.endAngle=S(i.endAngle),ye(t)&&(i.clockwise=!i.clockwise)}}function Sn(i,t){const e=xe(t),n=pe(t);i.rx*=e,i.ry*=n;const r=e>Number.EPSILON?Math.atan2(t.elements[1],t.elements[0]):Math.atan2(-t.elements[3],t.elements[4]);i.rotate+=r,ye(t)&&(i.startAngle*=-1,i.endAngle*=-1,i.clockwise=!i.clockwise)}function ye(i){const t=i.elements;return t[0]*t[4]-t[1]*t[3]<0}function _n(i){const t=i.elements,e=t[0]*t[3]+t[1]*t[4];if(e===0)return!1;const n=xe(i),r=pe(i);return Math.abs(e/(n*r))>Number.EPSILON}function xe(i){const t=i.elements;return Math.sqrt(t[0]*t[0]+t[1]*t[1])}function pe(i){const t=i.elements;return Math.sqrt(t[3]*t[3]+t[4]*t[4])}function En(i,t,e){let n,r,o,s,c;const a=i+e,h=i-e,l=Math.sqrt(h*h+4*t*t);return a>0?(n=.5*(a+l),c=1/n,r=i*c*e-t*c*t):a<0?r=.5*(a-l):(n=.5*l,r=-.5*l),h>0?o=h+l:o=h-l,Math.abs(o)>2*Math.abs(t)?(c=-2*t/o,s=1/Math.sqrt(1+c*c),o=c*s):Math.abs(t)===0?(o=1,s=0):(c=-.5*o/t,o=1/Math.sqrt(1+c*c),s=c*o),h>0&&(c=o,o=-s,s=c),{rt1:n,rt2:r,cs:o,sn:s}}class ge extends qt{constructor(t=0,e=0,n=1,r=0,o=Math.PI*2,s=!1){super(new m(t,e),new m(n,n),new m,0,r,o,s)}drawTo(t){const{cx:e,cy:n,rx:r,startAngle:o,endAngle:s,clockwise:c}=this;return t.arc(e,n,r,o,s,!c),this}}class B extends H{constructor(t=new m,e=new m){super(),this.p1=t,this.p2=e}static from(t,e,n,r){return new B(new m(t,e),new m(n,r))}getPoint(t,e=new m){return t===1?e.copy(this.p2):e.copy(this.p2).sub(this.p1).scale(t).add(this.p1),e}getPointAt(t,e=new m){return this.getPoint(t,e)}getTangent(t,e=new m){return e.subVectors(this.p2,this.p1).normalize()}getTangentAt(t,e=new m){return this.getTangent(t,e)}getControlPointRefs(){return[this.p1,this.p2]}getAdaptiveVertices(t=[]){return t.push(this.p1.x,this.p1.y,this.p2.x,this.p2.y),t}getMinMax(t=m.MAX,e=m.MIN){const{p1:n,p2:r}=this;return t.x=Math.min(t.x,n.x,r.x),t.y=Math.min(t.y,n.y,r.y),e.x=Math.max(e.x,n.x,r.x),e.y=Math.max(e.y,n.y,r.y),{min:t.finite(),max:e.finite()}}toCommands(){const{p1:t,p2:e}=this;return[{type:"M",x:t.x,y:t.y},{type:"L",x:e.x,y:e.y}]}getFillVertices(t={}){const e=Math.min(this.p1.x,this.p2.x),n=Math.max(this.p1.x,this.p2.x),r=Math.min(this.p1.y,this.p2.y),o=Math.max(this.p1.y,this.p2.y),s=e,c=r,a=n-e||t.style?.strokeWidth||0,h=o-r||t.style?.strokeWidth||0;return[s,c,s+a,c,s+a,c+h,s,c+h]}drawTo(t){const{p1:e,p2:n}=this;return t.lineTo(e.x,e.y),t.lineTo(n.x,n.y),this}copy(t){return super.copy(t),this.p1.copy(t.p1),this.p2.copy(t.p2),this}}class st extends H{constructor(t=[]){super(),this.curves=t}getFlatCurves(){return this.curves.flatMap(t=>t instanceof st?t.getFlatCurves():t)}addCurve(t){return this.curves.push(t),this}getPoint(t,e=new m){const n=t*this.getLength(),r=this.getLengths();let o=0;for(;o<r.length;){if(r[o]>=n){const s=r[o]-n,c=this.curves[o],a=c.getLength();return c.getPointAt(a===0?0:1-s/a,e)}o++}return e}updateLengths(){const t=[];for(let e=0,n=0,r=this.curves.length;e<r;e++)n+=this.curves[e].getLength(),t.push(n);this._arcLengths=t}getControlPointRefs(){return this.curves.flatMap(t=>t.getControlPointRefs())}_removeNextPointIfEqualPrevPoint(t,e){const n=[t[e-1],t[e]],r=[t[e+1],t[e+2]];return n[0]===r[0]&&n[1]===r[1]&&t.splice(e+1,2),t}getSpacedVertices(t=5,e=[]){let n;return this.curves.forEach(r=>{r.getSpacedVertices(t,e),n&&this._removeNextPointIfEqualPrevPoint(e,n),n=e.length-1}),e}getAdaptiveVertices(t=[]){let e;return this.curves.forEach(n=>{n.getAdaptiveVertices(t),e&&this._removeNextPointIfEqualPrevPoint(t,e),e=t.length-1}),t}strokeTriangulate(t){return this.curves.length===1?this.curves[0].strokeTriangulate(t):super.strokeTriangulate(t)}getFillVertices(t){if(this.curves.length===1)return this.curves[0].getFillVertices(t);{const e=[];let n;return this.curves.forEach(r=>{let o;r instanceof B?o=r.getAdaptiveVertices():o=r.getFillVertices(t),e.push(...o),n&&this._removeNextPointIfEqualPrevPoint(e,n),n=e.length-1}),e}}applyTransform(t){return this.curves.forEach(e=>e.applyTransform(t)),this}getMinMax(t=m.MAX,e=m.MIN){return this.curves.forEach(n=>n.getMinMax(t,e)),{min:t.finite(),max:e.finite()}}getBoundingBox(){const{min:t,max:e}=this.getMinMax();return new U(t.x,t.y,e.x-t.x,e.y-t.y)}toCommands(){return this.curves.flatMap(t=>t.toCommands())}drawTo(t){const e=this.curves[0]?.getPoint(0);return e&&t.moveTo(e.x,e.y),this.curves.forEach(n=>n.drawTo(t)),this}copy(t){return super.copy(t),this.curves=t.curves.map(e=>e.clone()),this}}class Mt extends H{constructor(t=new m,e=new m,n=new m,r=new m){super(),this.p1=t,this.cp1=e,this.cp2=n,this.p2=r}static from(t,e,n,r,o,s,c,a){return new Mt(new m(t,e),new m(n,r),new m(o,s),new m(c,a))}getPoint(t,e=new m){const{p1:n,cp1:r,cp2:o,p2:s}=this;return e.set(_t(t,n.x,r.x,o.x,s.x),_t(t,n.y,r.y,o.y,s.y))}getAdaptiveVertices(t=[]){return ne(this.p1.x,this.p1.y,this.cp1.x,this.cp1.y,this.cp2.x,this.cp2.y,this.p2.x,this.p2.y,.5,t)}getControlPointRefs(){return[this.p1,this.cp1,this.cp2,this.p2]}_solveQuadratic(t,e,n){const r=e*e-4*t*n;if(r<0)return[];const o=Math.sqrt(r),s=(-e+o)/(2*t),c=(-e-o)/(2*t);return[s,c].filter(a=>a>=0&&a<=1)}getMinMax(t=m.MAX,e=m.MIN){const{p1:n,cp1:r,cp2:o,p2:s}=this,c=this._solveQuadratic(3*(r.x-n.x),6*(o.x-r.x),3*(s.x-o.x)),a=this._solveQuadratic(3*(r.y-n.y),6*(o.y-r.y),3*(s.y-o.y)),h=[0,1,...c,...a];return((y,f)=>{for(const p of y)for(let u=0;u<=f;u++){const x=u/f-.5,g=Math.min(1,Math.max(0,p+x)),P=this.getPoint(g);t.x=Math.min(t.x,P.x),t.y=Math.min(t.y,P.y),e.x=Math.max(e.x,P.x),e.y=Math.max(e.y,P.y)}})(h,10),{min:t.finite(),max:e.finite()}}toCommands(){const{p1:t,cp1:e,cp2:n,p2:r}=this;return[{type:"M",x:t.x,y:t.y},{type:"C",x1:e.x,y1:e.y,x2:n.x,y2:n.y,x:r.x,y:r.y}]}drawTo(t){const{p1:e,cp1:n,cp2:r,p2:o}=this;return t.lineTo(e.x,e.y),t.bezierCurveTo(n.x,n.y,r.x,r.y,o.x,o.y),this}copy(t){return super.copy(t),this.p1.copy(t.p1),this.cp1.copy(t.cp1),this.cp2.copy(t.cp2),this.p2.copy(t.p2),this}}class de extends qt{constructor(t=0,e=0,n=1,r=1,o=0,s=0,c=Math.PI*2,a=!1){super(new m(t,e),new m(n,r),new m,o,s,c,a)}drawTo(t){return t.ellipse(this.cx,this.cy,this.rx,this.ry,this.rotate,this.startAngle,this.endAngle,!this.clockwise),this}}class Vt extends st{}class $n extends Vt{constructor(t=0,e=0,n=1,r=3){super(),this.cx=t,this.cy=e,this.radius=n,this.sideCount=r,this.update()}update(){const{cx:t,cy:e,radius:n,sideCount:r}=this,o=[];for(let c=0;c<r;c++){const a=c*2*Math.PI/r-.5*Math.PI;o.push(new m(n*Math.cos(a),n*Math.sin(a)).add({x:t,y:e}))}const s=[];for(let c=0;c<r;c++)s.push(new B(o[c],o[(c+1)%r]));return this.curves=s,this}copy(t){return super.copy(t),this.cx=t.cx,this.cy=t.cy,this.radius=t.radius,this.sideCount=t.sideCount,this.update(),this}}class wt extends H{constructor(t=new m,e=new m,n=new m){super(),this.p1=t,this.cp=e,this.p2=n}static from(t,e,n,r,o,s){return new wt(new m(t,e),new m(n,r),new m(o,s))}getPoint(t,e=new m){const{p1:n,cp:r,p2:o}=this;return e.set(Dt(t,n.x,r.x,o.x),Dt(t,n.y,r.y,o.y)),e}getControlPointRefs(){return[this.p1,this.cp,this.p2]}getAdaptiveVertices(t=[]){return se(this.p1.x,this.p1.y,this.cp.x,this.cp.y,this.p2.x,this.p2.y,.5,t)}getMinMax(t=m.MAX,e=m.MIN){const{p1:n,cp:r,p2:o}=this,s=.5*(n.x+r.x),c=.5*(n.y+r.y),a=.5*(n.x+o.x),h=.5*(n.y+o.y);return t.x=Math.min(t.x,n.x,o.x,s,a),t.y=Math.min(t.y,n.y,o.y,c,h),e.x=Math.max(e.x,n.x,o.x,s,a),e.y=Math.max(e.y,n.y,o.y,c,h),{min:t.finite(),max:e.finite()}}toCommands(){const{p1:t,cp:e,p2:n}=this;return[{type:"M",x:t.x,y:t.y},{type:"Q",x1:e.x,y1:e.y,x:n.x,y:n.y}]}drawTo(t){const{p1:e,cp:n,p2:r}=this;return t.lineTo(e.x,e.y),t.quadraticCurveTo(n.x,n.y,r.x,r.y),this}copy(t){return super.copy(t),this.p1.copy(t.p1),this.cp.copy(t.cp),this.p2.copy(t.p2),this}}class me extends Vt{constructor(t=0,e=0,n=0,r=0){super(),this.x=t,this.y=e,this.width=n,this.height=r,this.update()}update(){const{x:t,y:e,width:n,height:r}=this,o=[new m(t,e),new m(t+n,e),new m(t+n,e+r),new m(t,e+r)];return this.curves=[new B(o[0],o[1]),new B(o[1],o[2]),new B(o[2],o[3]),new B(o[3],o[0])],this}drawTo(t){return t.rect(this.x,this.y,this.width,this.height),this}getFillVertices(t={}){const{x:e,y:n,width:r,height:o}=this;return[e,n,e+r,n,e+r,n+o,e,n+o]}copy(t){return super.copy(t),this.x=t.x,this.y=t.y,this.width=t.width,this.height=t.height,this.update(),this}}class Me extends qt{constructor(t=0,e=0,n=1,r=1,o=1){super(),this.x=t,this.y=e,this.width=n,this.height=r,this.radius=o,this.update()}update(){const{x:t,y:e,width:n,height:r,radius:o}=this,s=n/2,c=r/2,a=t+s,h=e+c,l=Math.max(0,Math.min(o,Math.min(s,c))),y=l;return this._center=new m(a,h),this._radius=new m(l,y),this._diff=new m(s-l,c-y),this}drawTo(t){const{x:e,y:n,width:r,height:o,radius:s}=this;return t.roundRect(e,n,r,o,s),this}copy(t){return super.copy(t),this.x=t.x,this.y=t.y,this.width=t.width,this.height=t.height,this.radius=t.radius,this.update(),this}}class we extends H{constructor(t=[]){super(),this.points=t}getPoint(t,e=new m){const{points:n}=this,r=(n.length-1)*t,o=Math.floor(r),s=r-o,c=n[o===0?o:o-1],a=n[o],h=n[o>n.length-2?n.length-1:o+1],l=n[o>n.length-3?n.length-1:o+2];return e.set(St(s,c.x,a.x,h.x,l.x),St(s,c.y,a.y,h.y,l.y)),e}getControlPointRefs(){return this.points}copy(t){super.copy(t),this.points=[];for(let e=0,n=t.points.length;e<n;e++)this.points.push(t.points[e].clone());return this}}class ht extends st{startPoint;currentPoint;autoClose=!1;constructor(t){super(),t&&this.addPoints(t)}addPoints(t){this.moveTo(t[0].x,t[0].y);for(let e=1,n=t.length;e<n;e++){const{x:r,y:o}=t[e];this.lineTo(r,o)}return this}addCommands(t){return At(t,this),this}addData(t){return this.addCommands(kt(t)),this}_closeVertices(t){return this.autoClose&&t.length>=4&&t[0]!==t[t.length-2]&&t[1]!==t[t.length-1]&&t.push(t[0],t[1]),t}getUnevenVertices(t=40,e=[]){return this._closeVertices(super.getUnevenVertices(t,e))}getSpacedVertices(t=40,e=[]){return this._closeVertices(super.getSpacedVertices(t,e))}getAdaptiveVertices(t=[]){return this._closeVertices(super.getAdaptiveVertices(t))}getFillVertices(t){return this._closeVertices(super.getFillVertices(t))}_setCurrentPoint(t){return this.currentPoint=new m(t.x,t.y),this.startPoint||(this.startPoint=this.currentPoint.clone()),this}_connetLineTo(t){if(this.curves.length>0){const e=t.getPoint(0);(!this.currentPoint||!e.equals(this.currentPoint))&&this.lineTo(e.x,e.y)}return this}closePath(){const t=this.startPoint;if(t){const e=this.currentPoint;e&&!t.equals(e)&&(this.curves.push(new B(e.clone(),t.clone())),e.copy(t)),this.startPoint=void 0}return this}moveTo(t,e){return this.currentPoint=new m(t,e),this.startPoint=this.currentPoint.clone(),this}lineTo(t,e){const n=this.currentPoint;return n?.equals({x:t,y:e})||this.curves.push(B.from(n?.x??0,n?.y??0,t,e)),this._setCurrentPoint({x:t,y:e}),this}bezierCurveTo(t,e,n,r,o,s){const c=this.currentPoint;return c?.equals({x:o,y:s})||this.curves.push(Mt.from(c?.x??0,c?.y??0,t,e,n,r,o,s)),this._setCurrentPoint({x:o,y:s}),this}quadraticCurveTo(t,e,n,r){const o=this.currentPoint;return o?.equals({x:n,y:r})||this.curves.push(wt.from(o?.x??0,o?.y??0,t,e,n,r)),this._setCurrentPoint({x:n,y:r}),this}arc(t,e,n,r,o,s){const c=new ge(t,e,n,r,o,!s);return this._connetLineTo(c),this.curves.push(c),this._setCurrentPoint(c.getPoint(1)),this}relativeArc(t,e,n,r,o,s){return t+=this.currentPoint?.x??0,e+=this.currentPoint?.y??0,this.arc(t,e,n,r,o,s),this}arcTo(t,e,n,r,o){return console.warn("Method arcTo not supported yet"),this}ellipse(t,e,n,r,o,s,c,a=!0){const h=new de(t,e,n,r,o,s,c,!a);return this._connetLineTo(h),this.curves.push(h),this._setCurrentPoint(h.getPoint(1)),this}relativeEllipse(t,e,n,r,o,s,c,a){return t+=this.currentPoint?.x??0,e+=this.currentPoint?.y??0,this.ellipse(t,e,n,r,o,s,c,a),this}rect(t,e,n,r){const o=new me(t,e,n,r);return this._connetLineTo(o),this.curves.push(o),this._setCurrentPoint({x:t,y:e}),this}roundRect(t,e,n,r,o){const s=new Me(t,e,n,r,o);return this._connetLineTo(s),this.curves.push(s),this._setCurrentPoint({x:t,y:e}),this}splineThru(t){const e=this.currentPoint??new m;return this.curves.push(new we([e].concat(t))),this._setCurrentPoint(t[t.length-1]),this}drawTo(t){const e=this.curves[0]?.getPoint(0);return e&&t.moveTo(e.x,e.y),this.curves.forEach(n=>n.drawTo(t)),this.autoClose&&t.closePath(),this}copy(t){return super.copy(t),this.autoClose=t.autoClose,this.currentPoint=t.currentPoint?.clone(),this}}class j extends st{_meta;currentCurve=new ht;style;get startPoint(){return this.currentCurve.startPoint}get currentPoint(){return this.currentCurve.currentPoint}get strokeWidth(){return this.style.strokeWidth??((this.style.stroke??"none")==="none"?0:1)}constructor(t,e={}){super(),this.curves.push(this.currentCurve),this.style=e,t&&(t instanceof j?this.addPath(t):Array.isArray(t)?this.addCommands(t):this.addData(t))}getMeta(){return this._meta}setMeta(t){return this._meta=t,this}addPath(t){const e=this.curves.findIndex(n=>n===this.currentCurve);return e>-1&&this.curves.splice(e,1),t instanceof j?this.curves.push(...t.curves.filter(n=>n.curves.length).map(n=>n.clone())):t.curves.length&&this.curves.push(t),this.curves.push(this.currentCurve),this}closePath(){const t=this.startPoint;return t&&(this.currentCurve.closePath(),this.currentCurve.curves.length&&(this.currentCurve=new ht().moveTo(t.x,t.y),this.curves.push(this.currentCurve))),this}moveTo(t,e){return this.currentCurve.currentPoint?.equals({x:t,y:e})||(this.currentCurve.curves.length&&(this.currentCurve=new ht,this.curves.push(this.currentCurve)),this.currentCurve.moveTo(t,e)),this}lineTo(t,e){return this.currentCurve.lineTo(t,e),this}bezierCurveTo(t,e,n,r,o,s){return this.currentCurve.bezierCurveTo(t,e,n,r,o,s),this}quadraticCurveTo(t,e,n,r){return this.currentCurve.quadraticCurveTo(t,e,n,r),this}arc(t,e,n,r,o,s){return this.currentCurve.arc(t,e,n,r,o,s),this}arcTo(t,e,n,r,o){return this.currentCurve.arcTo(t,e,n,r,o),this}ellipse(t,e,n,r,o,s,c,a){return this.currentCurve.ellipse(t,e,n,r,o,s,c,a),this}rect(t,e,n,r){return this.currentCurve.rect(t,e,n,r),this}roundRect(t,e,n,r,o){return this.currentCurve.roundRect(t,e,n,r,o),this}reset(){return this.currentCurve=new ht,this.curves=[this.currentCurve],this.style={},this}addCommands(t){return At(t,this),this}addData(t){return this.addCommands(kt(t)),this}splineThru(t){return this.currentCurve.splineThru(t),this}scale(t,e=t,n={x:0,y:0}){return this.getControlPointRefs().forEach(r=>{r.scale(t,e,n)}),this}skew(t,e=0,n={x:0,y:0}){return this.getControlPointRefs().forEach(r=>{r.skew(t,e,n)}),this}rotate(t,e={x:0,y:0}){return this.getControlPointRefs().forEach(n=>{n.rotate(t,e)}),this}bold(t){if(t===0)return this;const e=this.getFlatCurves(),n=[],r=[],o=[];e.forEach((c,a)=>{const h=c.getControlPointRefs(),l=c.isClockwise();o[a]=h,r[a]=l;const y=h[0],f=h[h.length-1]??y;n.push({start:l?f:y,end:l?y:f,index:a})});const s=[];return n.forEach((c,a)=>{s[a]=[],n.forEach((h,l)=>{h.start&&c.end&&l!==a&&h.start?.equals(c.end)&&s[a].push(h.index)})}),e.forEach((c,a)=>{const h=r[a];o[a].forEach(l=>{l.add(c.getNormal(c.getTForPoint(l)).scale(h?t:-t))})}),s.forEach((c,a)=>{const h=o[a];c.forEach(l=>{const y=o[l],f=re(h[h.length-1],h[h.length-2]??h[h.length-1],y[0],y[1]??y[0]);f&&(h[h.length-1].copy(f),y[0].copy(f))})}),this}getMinMax(t=m.MAX,e=m.MIN,n=!0){const r=this.strokeWidth;return this.curves.forEach(o=>{if(o.getMinMax(t,e),n&&r>1){const s=r/2,c=o.isClockwise(),a=[];for(let h=0;h<=1;h+=1/o.arcLengthDivision){const l=o.getPoint(h),y=o.getNormal(h),f=y.clone().scale(c?s:-s),p=y.clone().scale(c?-s:s);a.push(l.clone().add(f),l.clone().add(p),l.clone().add({x:s,y:0}),l.clone().add({x:-s,y:0}),l.clone().add({x:0,y:s}),l.clone().add({x:0,y:-s}),l.clone().add({x:s,y:s}),l.clone().add({x:-s,y:-s}))}t.min(...a),e.max(...a)}}),{min:t.finite(),max:e.finite()}}strokeTriangulate(t){const e=t?.indices??[],n=t?.vertices??[];return this.curves.forEach(r=>{r.strokeTriangulate({...t,indices:e,vertices:n,style:{...this.style}})}),{indices:e,vertices:n}}fillTriangulate(t){const e={...t,style:{...this.style,...t?.style}},n=e.indices??[],r=e.vertices??[];if((e.style.fillRule??"nonzero")==="nonzero"){const s=this.curves.map(h=>h.getFillVertices(e)),c=ce(s),a=c.length;for(let h=0;h<a;h++){const l=c[h],y=s[h];if(l.wn||!y.length)continue;const f=y.slice(),p=[];for(let u=0;u<a;u++){const x=c[u];x.parentIndex===h&&(p.push(f.length/2),f.push(...s[x.index]))}Lt(f,{...t,indices:n,vertices:r,holes:p,style:{...this.style}})}}else this.curves.forEach(s=>{s.fillTriangulate({...t,indices:n,vertices:r,style:{...this.style}})});return{indices:n,vertices:r}}getBoundingBox(t=!0){const{min:e,max:n}=this.getMinMax(void 0,void 0,t);return new U(e.x,e.y,n.x-e.x,n.y-e.y)}drawTo(t,e={}){e={...this.style,...e};const{fill:n="#000",stroke:r="none"}=e;return t.beginPath(),t.save(),Ct(t,e),this.curves.forEach(o=>{o.drawTo(t)}),n!=="none"&&t.fill(),r!=="none"&&t.stroke(),t.restore(),this}drawControlPointsTo(t,e={}){e={...this.style,...e};const{fill:n="#000",stroke:r="none"}=e;return t.beginPath(),t.save(),Ct(t,e),this.getControlPointRefs().forEach(o=>{tt(t,o.x,o.y,{radius:4})}),n!=="none"&&t.fill(),r!=="none"&&t.stroke(),t.restore(),this}toCommands(){return this.curves.flatMap(t=>t.toCommands())}toData(){return this.curves.filter(t=>t.curves.length).map(t=>t.toData()).join(" ")}toSvgPathString(){const t={...this.style,fill:this.style.fill??"#000",stroke:this.style.stroke??"none"},e={};for(const r in t)t[r]!==void 0&&(e[ie(r)]=t[r]);Object.assign(e,{"stroke-width":`${this.strokeWidth}px`});let n="";for(const r in e)e[r]!==void 0&&(n+=`${r}:${e[r]};`);return`<path d="${this.toData()}" style="${n}"></path>`}copy(t){return super.copy(t),this.currentCurve=t.currentCurve.clone(),this.style={...t.style},this}}class ve{constructor(t=[],e){this.paths=t,this.viewBox=e}getBoundingBox(t=!0){if(!this.paths.length)return;const e=m.MAX,n=m.MIN;return this.paths.forEach(r=>r.getMinMax(e,n,t)),new U(e.x,e.y,n.x-e.x,n.y-e.y)}toTriangulatedSvgString(t=this.paths.map(n=>n.fillTriangulate()),e=0){let n="",r="";const o={x:-e,y:-e},s={x:e,y:e};(Array.isArray(t)?t:[t]).forEach(({vertices:l,indices:y,points:f=[]})=>{const p=u=>{const x=l[u*2],g=l[u*2+1];return o.x=Math.min(o.x,x+e),s.x=Math.max(s.x,x+e),o.y=Math.min(o.y,g+e),s.y=Math.max(s.y,g+e),[x,g]};for(let u=0,x=y.length;u<x;u+=3){const g=p(y[u]),P=p(y[u+1]),C=p(y[u+2]);n+=`<polygon
1
+ (function(A,tt){typeof exports=="object"&&typeof module<"u"?tt(exports):typeof define=="function"&&define.amd?define(["exports"],tt):(A=typeof globalThis<"u"?globalThis:A||self,tt(A.modernPath2d={}))})(this,(function(A){"use strict";function tt(i,t,e,s={}){const{radius:r=1}=s;i.moveTo(t,e),i.arc(t,e,r,0,Math.PI*2)}const ke={arcs:"bevel",bevel:"bevel",miter:"miter","miter-clip":"miter",round:"round"};function Ct(i,t){const{fill:e="#000",stroke:s="none",strokeWidth:r=s==="none"?0:1,strokeLinecap:o="round",strokeLinejoin:n="miter",strokeMiterlimit:c=0,strokeDasharray:h=[],strokeDashoffset:l=0,shadowOffsetX:a=0,shadowOffsetY:y=0,shadowBlur:f=0,shadowColor:p="rgba(0, 0, 0, 0)"}=t;i.fillStyle=e,i.strokeStyle=s,i.lineWidth=r,i.lineCap=o,i.lineJoin=ke[n],i.miterLimit=c,i.setLineDash(h),i.lineDashOffset=l,i.shadowOffsetX=a,i.shadowOffsetY=y,i.shadowBlur=f,i.shadowColor=p}class m{constructor(t=0,e=0){this.x=t,this.y=e}static get MAX(){return new m(1/0,1/0)}static get MIN(){return new m(-1/0,-1/0)}get array(){return[this.x,this.y]}finite(){return this.x=Number.isFinite(this.x)?this.x:0,this.y=Number.isFinite(this.y)?this.y:0,this}set(t,e){return this.x=t,this.y=e,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.x,this.y*=t.y,this}divide(t){return this.x/=t.x,this.y/=t.y,this}dot(t){return this.x*t.x+this.y*t.y}cross(t){return this.x*t.y-this.y*t.x}rotate(t,e={x:0,y:0}){const s=-t/180*Math.PI,r=this.x-e.x,o=-(this.y-e.y),n=Math.sin(s),c=Math.cos(s);return this.set(e.x+(r*c-o*n),e.y-(r*n+o*c)),this}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,s=this.y-t.y;return e*e+s*s}lengthSquared(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.lengthSquared())}scale(t,e=t,s={x:0,y:0}){const r=t<0?s.x-this.x+s.x:this.x,o=e<0?s.y-this.y+s.y:this.y;return this.x=r*Math.abs(t),this.y=o*Math.abs(e),this}skew(t,e=0,s={x:0,y:0}){const r=this.x-s.x,o=this.y-s.y;return this.x=s.x+(r+Math.tan(t)*o),this.y=s.y+(o+Math.tan(e)*r),this}min(...t){return this.x=Math.min(this.x,...t.map(e=>e.x)),this.y=Math.min(this.y,...t.map(e=>e.y)),this}max(...t){return this.x=Math.max(this.x,...t.map(e=>e.x)),this.y=Math.max(this.y,...t.map(e=>e.y)),this}normalize(){return this.scale(1/(this.length()||1))}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this}multiplyVectors(t,e){return this.x=t.x*e.x,this.y=t.y*e.y,this}divideVectors(t,e){return this.x=t.x/e.x,this.y=t.y/e.y,this}lerpVectors(t,e,s){return this.x=t.x+(e.x-t.x)*s,this.y=t.y+(e.y-t.y)*s,this}equals(t){return this.x===t.x&&this.y===t.y}applyMatrix3(t){const e=this.x,s=this.y,r=t.elements;return this.x=r[0]*e+r[3]*s+r[6],this.y=r[1]*e+r[4]*s+r[7],this}copy(t){return this.x=t.x,this.y=t.y,this}clone(){return new m(this.x,this.y)}}class U{constructor(t=0,e=0,s=0,r=0){this.left=t,this.top=e,this.width=s,this.height=r}get x(){return this.left}set x(t){this.left=t}get y(){return this.top}set y(t){this.top=t}get right(){return this.left+this.width}get bottom(){return this.top+this.height}get center(){return new m((this.left+this.right)/2,(this.top+this.bottom)/2)}get array(){return[this.left,this.top,this.width,this.height]}static from(...t){if(t.length===0)return new U;if(t.length===1)return t[0].clone();const e=t[0],s=t.slice(1).reduce((r,o)=>(r.left=Math.min(r.left,o.left),r.top=Math.min(r.top,o.top),r.right=Math.max(r.right,o.right),r.bottom=Math.max(r.bottom,o.bottom),r),{left:e?.left??0,top:e?.top??0,right:e?.right??0,bottom:e?.bottom??0});return new U(s.left,s.top,s.right-s.left,s.bottom-s.top)}translate(t,e){return this.left+=t,this.top+=e,this}copy(t){return this.left=t.left,this.top=t.top,this.width=t.width,this.height=t.height,this}clone(){return new U(this.left,this.top,this.width,this.height)}}class z{elements=[];constructor(t=1,e=0,s=0,r=0,o=1,n=0,c=0,h=0,l=1){this.set(t,e,s,r,o,n,c,h,l)}set(t,e,s,r,o,n,c,h,l){const a=this.elements;return a[0]=t,a[1]=r,a[2]=c,a[3]=e,a[4]=o,a[5]=h,a[6]=s,a[7]=n,a[8]=l,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(t){const e=this.elements,s=t.elements;return e[0]=s[0],e[1]=s[1],e[2]=s[2],e[3]=s[3],e[4]=s[4],e[5]=s[5],e[6]=s[6],e[7]=s[7],e[8]=s[8],this}multiply(t){return this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const s=t.elements,r=e.elements,o=this.elements,n=s[0],c=s[3],h=s[6],l=s[1],a=s[4],y=s[7],f=s[2],p=s[5],u=s[8],x=r[0],g=r[3],P=r[6],C=r[1],w=r[4],v=r[7],b=r[2],S=r[5],d=r[8];return o[0]=n*x+c*C+h*b,o[3]=n*g+c*w+h*S,o[6]=n*P+c*v+h*d,o[1]=l*x+a*C+y*b,o[4]=l*g+a*w+y*S,o[7]=l*P+a*v+y*d,o[2]=f*x+p*C+u*b,o[5]=f*g+p*w+u*S,o[8]=f*P+p*v+u*d,this}invert(){const t=this.elements,e=t[0],s=t[1],r=t[2],o=t[3],n=t[4],c=t[5],h=t[6],l=t[7],a=t[8],y=a*n-c*l,f=c*h-a*o,p=l*o-n*h,u=e*y+s*f+r*p;if(u===0)return this.set(0,0,0,0,0,0,0,0,0);const x=1/u;return t[0]=y*x,t[1]=(r*l-a*s)*x,t[2]=(c*s-r*n)*x,t[3]=f*x,t[4]=(a*e-r*h)*x,t[5]=(r*o-c*e)*x,t[6]=p*x,t[7]=(s*h-l*e)*x,t[8]=(n*e-s*o)*x,this}transpose(){let t;const e=this.elements;return t=e[1],e[1]=e[3],e[3]=t,t=e[2],e[2]=e[6],e[6]=t,t=e[5],e[5]=e[7],e[7]=t,this}scale(t,e){return this.premultiply(bt.makeScale(t,e)),this}rotate(t){return this.premultiply(bt.makeRotation(-t)),this}translate(t,e){return this.premultiply(bt.makeTranslation(t,e)),this}makeTranslation(t,e){return this.set(1,0,t,0,1,e,0,0,1),this}makeRotation(t){const e=Math.cos(t),s=Math.sin(t);return this.set(e,-s,0,s,e,0,0,0,1),this}makeScale(t,e){return this.set(t,0,0,0,e,0,0,0,1),this}fromArray(t,e=0){for(let s=0;s<9;s++)this.elements[s]=t[s+e];return this}clone(){return new this.constructor().fromArray(this.elements)}}const bt=new z;function zt(i,t,e,s){const r=i*e+t*s,o=Math.sqrt(i*i+t*t)*Math.sqrt(e*e+s*s);let n=Math.acos(Math.max(-1,Math.min(1,r/o)));return i*s-t*e<0&&(n=-n),n}function Ot(i,t,e,s,r,o,n,c){if(t===0||e===0){i.lineTo(c.x,c.y);return}s=s*Math.PI/180,t=Math.abs(t),e=Math.abs(e);const h=(n.x-c.x)/2,l=(n.y-c.y)/2,a=Math.cos(s)*h+Math.sin(s)*l,y=-Math.sin(s)*h+Math.cos(s)*l;let f=t*t,p=e*e;const u=a*a,x=y*y,g=u/f+x/p;if(g>1){const F=Math.sqrt(g);t=F*t,e=F*e,f=t*t,p=e*e}const P=f*x+p*u,C=(f*p-P)/P;let w=Math.sqrt(Math.max(0,C));r===o&&(w=-w);const v=w*t*y/e,b=-w*e*a/t,S=Math.cos(s)*v-Math.sin(s)*b+(n.x+c.x)/2,d=Math.sin(s)*v+Math.cos(s)*b+(n.y+c.y)/2,M=zt(1,0,(a-v)/t,(y-b)/e),V=zt((a-v)/t,(y-b)/e,(-a-v)/t,(-y-b)/e)%(Math.PI*2);i.ellipse(S,d,t,e,s,M,M+V,o===0)}const q={WHITESPACE:/[ \t\r\n]/,DIGIT:/\d/,SIGN:/[-+]/,POINT:/\./,COMMA:/,/,EXP:/e/i,FLAGS:/[01]/};function O(i,t,e=0){let c=0,h=!0,l="",a="";const y=[];function f(g,P,C){const w=new SyntaxError(`Unexpected character "${g}" at index ${P}.`);throw w.partial=C,w}function p(){l!==""&&(a===""?y.push(Number(l)):y.push(Number(l)*10**Number(a))),l="",a=""}let u;const x=i.length;for(let g=0;g<x;g++){if(u=i[g],Array.isArray(t)&&t.includes(y.length%e)&&q.FLAGS.test(u)){c=1,l=u,p();continue}if(c===0){if(q.WHITESPACE.test(u))continue;if(q.DIGIT.test(u)||q.SIGN.test(u)){c=1,l=u;continue}if(q.POINT.test(u)){c=2,l=u;continue}q.COMMA.test(u)&&(h&&f(u,g,y),h=!0)}if(c===1){if(q.DIGIT.test(u)){l+=u;continue}if(q.POINT.test(u)){l+=u,c=2;continue}if(q.EXP.test(u)){c=3;continue}q.SIGN.test(u)&&l.length===1&&q.SIGN.test(l[0])&&f(u,g,y)}if(c===2){if(q.DIGIT.test(u)){l+=u;continue}if(q.EXP.test(u)){c=3;continue}q.POINT.test(u)&&l[l.length-1]==="."&&f(u,g,y)}if(c===3){if(q.DIGIT.test(u)){a+=u;continue}if(q.SIGN.test(u)){if(a===""){a+=u;continue}a.length===1&&q.SIGN.test(a)&&f(u,g,y)}}q.WHITESPACE.test(u)?(p(),c=0,h=!1):q.COMMA.test(u)?(p(),c=0,h=!0):q.SIGN.test(u)?(p(),c=1,l=u):q.POINT.test(u)?(p(),c=2,l=u):f(u,g,y)}return p(),y}function et(i,t){return i-(t-i)}function At(i,t){const e=new m,s=new m;for(let r=0,o=i.length;r<o;r++){const n=i[r];if(n.type==="m"||n.type==="M")n.type==="m"?e.add(n):e.copy(n),t.moveTo(e.x,e.y),s.copy(e);else if(n.type==="h"||n.type==="H")n.type==="h"?e.x+=n.x:e.x=n.x,t.lineTo(e.x,e.y),s.copy(e);else if(n.type==="v"||n.type==="V")n.type==="v"?e.y+=n.y:e.y=n.y,t.lineTo(e.x,e.y),s.copy(e);else if(n.type==="l"||n.type==="L")n.type==="l"?e.add(n):e.copy(n),t.lineTo(e.x,e.y),s.copy(e);else if(n.type==="c"||n.type==="C")n.type==="c"?(t.bezierCurveTo(e.x+n.x1,e.y+n.y1,e.x+n.x2,e.y+n.y2,e.x+n.x,e.y+n.y),s.x=e.x+n.x2,s.y=e.y+n.y2,e.add(n)):(t.bezierCurveTo(n.x1,n.y1,n.x2,n.y2,n.x,n.y),s.x=n.x2,s.y=n.y2,e.copy(n));else if(n.type==="s"||n.type==="S")n.type==="s"?(t.bezierCurveTo(et(e.x,s.x),et(e.y,s.y),e.x+n.x2,e.y+n.y2,e.x+n.x,e.y+n.y),s.x=e.x+n.x2,s.y=e.y+n.y2,e.add(n)):(t.bezierCurveTo(et(e.x,s.x),et(e.y,s.y),n.x2,n.y2,n.x,n.y),s.x=n.x2,s.y=n.y2,e.copy(n));else if(n.type==="q"||n.type==="Q")n.type==="q"?(t.quadraticCurveTo(e.x+n.x1,e.y+n.y1,e.x+n.x,e.y+n.y),s.x=e.x+n.x1,s.y=e.y+n.y1,e.add(n)):(t.quadraticCurveTo(n.x1,n.y1,n.x,n.y),s.x=n.x1,s.y=n.y1,e.copy(n));else if(n.type==="t"||n.type==="T"){const c=et(e.x,s.x),h=et(e.y,s.y);s.x=c,s.y=h,n.type==="t"?(t.quadraticCurveTo(c,h,e.x+n.x,e.y+n.y),e.add(n)):(t.quadraticCurveTo(c,h,n.x,n.y),e.copy(n))}else if(n.type==="a"||n.type==="A"){const c=e.clone();if(n.type==="a"){if(n.x===0&&n.y===0)continue;e.add(n)}else{if(e.equals(n))continue;e.copy(n)}s.copy(e),Ot(t,n.rx,n.ry,n.angle,n.largeArcFlag,n.sweepFlag,c,e)}else n.type==="z"||n.type==="Z"?(t.startPoint&&e.copy(t.startPoint),t.closePath()):console.warn("Unsupported commands",n)}}function Bt(i){let t,e;const s=[];for(let r=0,o=i.length;r<o;r++){const n=i[r];switch(n.type){case"m":case"M":if(n.x.toFixed(4)===e?.x.toFixed(4)&&n.y.toFixed(4)===e?.y.toFixed(4))continue;s.push(`${n.type} ${n.x} ${n.y}`),e={x:n.x,y:n.y},t={x:n.x,y:n.y};break;case"h":case"H":s.push(`${n.type} ${n.x}`),e={x:n.x,y:e?.y??0};break;case"v":case"V":s.push(`${n.type} ${n.y}`),e={x:e?.x??0,y:n.y};break;case"l":case"L":s.push(`${n.type} ${n.x} ${n.y}`),e={x:n.x,y:n.y};break;case"c":case"C":s.push(`${n.type} ${n.x1} ${n.y1} ${n.x2} ${n.y2} ${n.x} ${n.y}`),e={x:n.x,y:n.y};break;case"s":case"S":s.push(`${n.type} ${n.x2} ${n.y2} ${n.x} ${n.y}`),e={x:n.x,y:n.y};break;case"q":case"Q":s.push(`${n.type} ${n.x1} ${n.y1} ${n.x} ${n.y}`),e={x:n.x,y:n.y};break;case"t":case"T":s.push(`${n.type} ${n.x} ${n.y}`),e={x:n.x,y:n.y};break;case"a":case"A":s.push(`${n.type} ${n.rx} ${n.ry} ${n.angle} ${n.largeArcFlag} ${n.sweepFlag} ${n.x} ${n.y}`),e={x:n.x,y:n.y};break;case"z":case"Z":s.push(n.type),t&&(e={x:t.x,y:t.y});break}}return s.join(" ")}const Ie=/[a-df-z][^a-df-z]*/gi;function kt(i){const t=[],e=i.match(Ie);if(!e)return t;for(let s=0,r=e.length;s<r;s++){const o=e[s],n=o.charAt(0),c=o.slice(1).trim();let h;switch(n){case"m":case"M":h=O(c);for(let l=0,a=h.length;l<a;l+=2)l===0?t.push({type:n,x:h[l],y:h[l+1]}):t.push({type:n==="m"?"l":"L",x:h[l],y:h[l+1]});break;case"h":case"H":h=O(c);for(let l=0,a=h.length;l<a;l++)t.push({type:n,x:h[l]});break;case"v":case"V":h=O(c);for(let l=0,a=h.length;l<a;l++)t.push({type:n,y:h[l]});break;case"l":case"L":h=O(c);for(let l=0,a=h.length;l<a;l+=2)t.push({type:n,x:h[l],y:h[l+1]});break;case"c":case"C":h=O(c);for(let l=0,a=h.length;l<a;l+=6)t.push({type:n,x1:h[l],y1:h[l+1],x2:h[l+2],y2:h[l+3],x:h[l+4],y:h[l+5]});break;case"s":case"S":h=O(c);for(let l=0,a=h.length;l<a;l+=4)t.push({type:n,x2:h[l],y2:h[l+1],x:h[l+2],y:h[l+3]});break;case"q":case"Q":h=O(c);for(let l=0,a=h.length;l<a;l+=4)t.push({type:n,x1:h[l],y1:h[l+1],x:h[l+2],y:h[l+3]});break;case"t":case"T":h=O(c);for(let l=0,a=h.length;l<a;l+=2)t.push({type:n,x:h[l],y:h[l+1]});break;case"a":case"A":h=O(c,[3,4],7);for(let l=0,a=h.length;l<a;l+=7)t.push({type:n,rx:h[l],ry:h[l+1],angle:h[l+2],largeArcFlag:h[l+3],sweepFlag:h[l+4],x:h[l+5],y:h[l+6]});break;case"z":case"Z":t.push({type:n});break;default:console.warn(o)}}return t}const jt="data:image/svg+xml;",Zt=`${jt}base64,`,Ut=`${jt}charset=utf8,`;function Wt(i){if(typeof i=="string"){let t;i.startsWith(Zt)?(i=i.substring(Zt.length,i.length),t=atob(i)):i.startsWith(Ut)?(i=i.substring(Ut.length,i.length),t=decodeURIComponent(i)):t=i;const e=new DOMParser().parseFromString(t,"text/xml"),s=e.querySelector("parsererror");if(s)throw new Error(`${s.textContent??"parser error"}
2
+ ${t}`);return e.documentElement}else return i}const Se="px",_e=90,Xt=["mm","cm","in","pt","pc","px"],Gt={mm:{mm:1,cm:.1,in:1/25.4,pt:72/25.4,pc:6/25.4,px:-1},cm:{mm:10,cm:1,in:1/2.54,pt:72/2.54,pc:6/2.54,px:-1},in:{mm:25.4,cm:2.54,in:1,pt:72,pc:6,px:-1},pt:{mm:25.4/72,cm:2.54/72,in:1/72,pt:1,pc:6/72,px:-1},pc:{mm:25.4/6,cm:2.54/6,in:1/6,pt:72/6,pc:1,px:-1},px:{px:1}};function E(i){let t="px";if(typeof i=="string")for(let s=0,r=Xt.length;s<r;s++){const o=Xt[s];if(i.endsWith(o)){t=o,i=i.substring(0,i.length-o.length);break}}let e;return e=Gt[t][Se],e<0&&(e=Gt[t].in*_e),e*Number.parseFloat(i)}const Ee=new z,xt=new z,Ht=new z,Qt=new z;function $e(i,t,e){if(!(i.hasAttribute("transform")||i.nodeName==="use"&&(i.hasAttribute("x")||i.hasAttribute("y"))))return null;const s=Fe(i);return e.length>0&&s.premultiply(e[e.length-1]),t.copy(s),e.push(s),s}function Fe(i){const t=new z,e=Ee;if(i.nodeName==="use"&&(i.hasAttribute("x")||i.hasAttribute("y"))&&t.translate(E(i.getAttribute("x")),E(i.getAttribute("y"))),i.hasAttribute("transform")){const s=i.getAttribute("transform").split(")");for(let r=s.length-1;r>=0;r--){const o=s[r].trim();if(o==="")continue;const n=o.indexOf("("),c=o.length;if(n>0&&n<c){const h=o.slice(0,n),l=O(o.slice(n+1));switch(e.identity(),h){case"translate":if(l.length>=1){const a=l[0];let y=0;l.length>=2&&(y=l[1]),e.translate(a,y)}break;case"rotate":if(l.length>=1){let a=0,y=0,f=0;a=l[0]*Math.PI/180,l.length>=3&&(y=l[1],f=l[2]),xt.makeTranslation(-y,-f),Ht.makeRotation(a),Qt.multiplyMatrices(Ht,xt),xt.makeTranslation(y,f),e.multiplyMatrices(xt,Qt)}break;case"scale":l.length>=1&&e.scale(l[0],l[1]??l[0]);break;case"skewX":l.length===1&&e.set(1,Math.tan(l[0]*Math.PI/180),0,0,1,0,0,0,1);break;case"skewY":l.length===1&&e.set(1,0,0,Math.tan(l[0]*Math.PI/180),1,0,0,0,1);break;case"matrix":l.length===6&&e.set(l[0],l[2],l[4],l[1],l[3],l[5],0,0,1);break}}t.premultiply(e)}}return t}function Le(i){return new j().arc(E(i.getAttribute("cx")||0),E(i.getAttribute("cy")||0),E(i.getAttribute("r")||0),0,Math.PI*2)}function Ne(i,t){if(!(!i.sheet||!i.sheet.cssRules||!i.sheet.cssRules.length))for(let e=0;e<i.sheet.cssRules.length;e++){const s=i.sheet.cssRules[e];if(s.type!==1)continue;const r=s.selectorText.split(/,/g).filter(Boolean).map(n=>n.trim()),o={};for(let n=s.style.length,c=0;c<n;c++){const h=s.style.item(c);o[h]=s.style.getPropertyValue(h)}for(let n=0;n<r.length;n++)t[r[n]]=Object.assign(t[r[n]]||{},{...o})}}function De(i){return new j().ellipse(E(i.getAttribute("cx")||0),E(i.getAttribute("cy")||0),E(i.getAttribute("rx")||0),E(i.getAttribute("ry")||0),0,0,Math.PI*2)}function qe(i){return new j().moveTo(E(i.getAttribute("x1")||0),E(i.getAttribute("y1")||0)).lineTo(E(i.getAttribute("x2")||0),E(i.getAttribute("y2")||0))}function Ve(i){const t=new j,e=i.getAttribute("d");return!e||e==="none"?null:(t.addData(e),t)}const Re=/([+-]?(?:\d+(?:\.\d+)?|\.\d+)(?:e[+-]?\d+)?)(?:,|\s)([+-]?\d*\.?\d+(?:e[+-]?\d+)?)/g;function ze(i){const t=new j;let e=0;return i.getAttribute("points")?.replace(Re,(s,r,o)=>{const n=E(r),c=E(o);return e===0?t.moveTo(n,c):t.lineTo(n,c),e++,s}),t.currentCurve.autoClose=!0,t}const Oe=/([+-]?(?:\d+(?:\.\d+)?|\.\d+)(?:e[+-]?\d+)?)(?:,|\s)([+-]?\d*\.?\d+(?:e[+-]?\d+)?)/g;function Be(i){const t=new j;let e=0;return i.getAttribute("points")?.replace(Oe,(s,r,o)=>{const n=E(r),c=E(o);return e===0?t.moveTo(n,c):t.lineTo(n,c),e++,s}),t.currentCurve.autoClose=!1,t}function je(i){const t=E(i.getAttribute("x")||0),e=E(i.getAttribute("y")||0),s=E(i.getAttribute("rx")||i.getAttribute("ry")||0),r=E(i.getAttribute("ry")||i.getAttribute("rx")||0),o=E(i.getAttribute("width")),n=E(i.getAttribute("height")),c=1-.551915024494,h=new j;return h.moveTo(t+s,e),h.lineTo(t+o-s,e),(s!==0||r!==0)&&h.bezierCurveTo(t+o-s*c,e,t+o,e+r*c,t+o,e+r),h.lineTo(t+o,e+n-r),(s!==0||r!==0)&&h.bezierCurveTo(t+o,e+n-r*c,t+o-s*c,e+n,t+o-s,e+n),h.lineTo(t+s,e+n),(s!==0||r!==0)&&h.bezierCurveTo(t+s*c,e+n,t,e+n-r*c,t,e+n-r),h.lineTo(t,e+r),(s!==0||r!==0)&&h.bezierCurveTo(t,e+r*c,t+s*c,e,t+s,e),h}function Z(i,t,e){t=Object.assign({},t);let s={};if(i.hasAttribute("class")){const l=i.getAttribute("class").split(/\s/).filter(Boolean).map(a=>a.trim());for(let a=0;a<l.length;a++)s=Object.assign(s,e[`.${l[a]}`])}i.hasAttribute("id")&&(s=Object.assign(s,e[`#${i.getAttribute("id")}`]));for(let l=i.style.length,a=0;a<l;a++){const y=i.style.item(a),f=i.style.getPropertyValue(y);t[y]=f,s[y]=f}function r(l,a,y=o){i.hasAttribute(l)&&(t[a]=y(i.getAttribute(l))),s[l]&&(t[a]=y(s[l]))}function o(l){return l.startsWith("url")&&console.warn("url access in attributes is not implemented."),l}function n(l){return Math.max(0,Math.min(1,E(l)))}function c(l){return Math.max(0,E(l))}function h(l){return l.split(" ").filter(a=>a!=="").map(a=>E(a))}return r("fill","fill"),r("fill-opacity","fillOpacity",n),r("fill-rule","fillRule"),r("opacity","opacity",n),r("stroke","stroke"),r("stroke-opacity","strokeOpacity",n),r("stroke-width","strokeWidth",c),r("stroke-linecap","strokeLinecap"),r("stroke-linejoin","strokeLinejoin"),r("stroke-miterlimit","strokeMiterlimit",c),r("stroke-dasharray","strokeDasharray",h),r("stroke-dashoffset","strokeDashoffset",E),r("visibility","visibility"),t}function It(i,t,e=[],s={}){if(i.nodeType!==1)return e;let r=!1,o=null,n={...t};switch(i.nodeName){case"svg":n=Z(i,n,s);break;case"style":Ne(i,s);break;case"g":n=Z(i,n,s);break;case"path":n=Z(i,n,s),i.hasAttribute("d")&&(o=Ve(i));break;case"rect":n=Z(i,n,s),o=je(i);break;case"polygon":n=Z(i,n,s),o=ze(i);break;case"polyline":n=Z(i,n,s),o=Be(i);break;case"circle":n=Z(i,n,s),o=Le(i);break;case"ellipse":n=Z(i,n,s),o=De(i);break;case"line":n=Z(i,n,s),o=qe(i);break;case"defs":r=!0;break;case"use":{n=Z(i,n,s);const f=(i.getAttributeNS("http://www.w3.org/1999/xlink","href")||i.getAttribute("href")||"").substring(1),p=i.viewportElement?.getElementById(f);p?It(p,n,e,s):console.warn(`'use node' references non-existent node id: ${f}`);break}default:console.warn(i);break}if(n.display==="none")return e;const c=new z,h=[],l=$e(i,c,h);o&&(o.applyTransform(c),e.push(o),o.style={...n});const a=i.childNodes;for(let y=0,f=a.length;y<f;y++){const p=a[y];r&&p.nodeName!=="style"&&p.nodeName!=="defs"||It(p,n,e,s)}return l&&(h.pop(),h.length>0?c.copy(h[h.length-1]):c.identity()),e}function Ze(i){const t=Wt(i);return new ve(It(t,{}),t.getAttribute("viewBox")?.trim().split(" ").map(e=>Number(e)))}function St(i,t,e,s,r){const o=(s-t)*.5,n=(r-e)*.5,c=i*i,h=i*c;return(2*e-2*s+o+n)*h+(-3*e+3*s-2*o-n)*c+o*i+e}function Ue(i,t){const e=1-i;return e*e*e*t}function We(i,t){const e=1-i;return 3*e*e*i*t}function Xe(i,t){return 3*(1-i)*i*i*t}function Ge(i,t){return i*i*i*t}function _t(i,t,e,s,r){return Ue(i,t)+We(i,e)+Xe(i,s)+Ge(i,r)}function He(i,t,e=2){const s=t&&t.length,r=s?t[0]*e:i.length;let o=Yt(i,0,r,e,!0);const n=[];if(!o||o.next===o.prev)return n;let c,h,l;if(s&&(o=ts(i,t,o,e)),i.length>80*e){c=i[0],h=i[1];let a=c,y=h;for(let f=e;f<r;f+=e){const p=i[f],u=i[f+1];p<c&&(c=p),u<h&&(h=u),p>a&&(a=p),u>y&&(y=u)}l=Math.max(a-c,y-h),l=l!==0?32767/l:0}return it(o,n,e,c,h,l,0),n}function Yt(i,t,e,s,r){let o;if(r===us(i,t,e,s)>0)for(let n=t;n<e;n+=s)o=ee(n/s|0,i[n],i[n+1],o);else for(let n=e-s;n>=t;n-=s)o=ee(n/s|0,i[n],i[n+1],o);return o&&st(o,o.next)&&(ct(o),o=o.next),o}function X(i,t){if(!i)return i;t||(t=i);let e=i,s;do if(s=!1,!e.steiner&&(st(e,e.next)||L(e.prev,e,e.next)===0)){if(ct(e),e=t=e.prev,e===e.next)break;s=!0}else e=e.next;while(s||e!==t);return t}function it(i,t,e,s,r,o,n){if(!i)return;!n&&o&&rs(i,s,r,o);let c=i;for(;i.prev!==i.next;){const h=i.prev,l=i.next;if(o?Ye(i,s,r,o):Qe(i)){t.push(h.i,i.i,l.i),ct(i),i=l.next,c=l.next;continue}if(i=l,i===c){n?n===1?(i=Je(X(i),t),it(i,t,e,s,r,o,2)):n===2&&Ke(i,t,e,s,r,o):it(X(i),t,e,s,r,o,1);break}}}function Qe(i){const t=i.prev,e=i,s=i.next;if(L(t,e,s)>=0)return!1;const r=t.x,o=e.x,n=s.x,c=t.y,h=e.y,l=s.y,a=Math.min(r,o,n),y=Math.min(c,h,l),f=Math.max(r,o,n),p=Math.max(c,h,l);let u=s.next;for(;u!==t;){if(u.x>=a&&u.x<=f&&u.y>=y&&u.y<=p&&rt(r,c,o,h,n,l,u.x,u.y)&&L(u.prev,u,u.next)>=0)return!1;u=u.next}return!0}function Ye(i,t,e,s){const r=i.prev,o=i,n=i.next;if(L(r,o,n)>=0)return!1;const c=r.x,h=o.x,l=n.x,a=r.y,y=o.y,f=n.y,p=Math.min(c,h,l),u=Math.min(a,y,f),x=Math.max(c,h,l),g=Math.max(a,y,f),P=Et(p,u,t,e,s),C=Et(x,g,t,e,s);let w=i.prevZ,v=i.nextZ;for(;w&&w.z>=P&&v&&v.z<=C;){if(w.x>=p&&w.x<=x&&w.y>=u&&w.y<=g&&w!==r&&w!==n&&rt(c,a,h,y,l,f,w.x,w.y)&&L(w.prev,w,w.next)>=0||(w=w.prevZ,v.x>=p&&v.x<=x&&v.y>=u&&v.y<=g&&v!==r&&v!==n&&rt(c,a,h,y,l,f,v.x,v.y)&&L(v.prev,v,v.next)>=0))return!1;v=v.nextZ}for(;w&&w.z>=P;){if(w.x>=p&&w.x<=x&&w.y>=u&&w.y<=g&&w!==r&&w!==n&&rt(c,a,h,y,l,f,w.x,w.y)&&L(w.prev,w,w.next)>=0)return!1;w=w.prevZ}for(;v&&v.z<=C;){if(v.x>=p&&v.x<=x&&v.y>=u&&v.y<=g&&v!==r&&v!==n&&rt(c,a,h,y,l,f,v.x,v.y)&&L(v.prev,v,v.next)>=0)return!1;v=v.nextZ}return!0}function Je(i,t){let e=i;do{const s=e.prev,r=e.next.next;!st(s,r)&&Kt(s,e,e.next,r)&&ot(s,r)&&ot(r,s)&&(t.push(s.i,e.i,r.i),ct(e),ct(e.next),e=i=r),e=e.next}while(e!==i);return X(e)}function Ke(i,t,e,s,r,o){let n=i;do{let c=n.next.next;for(;c!==n.prev;){if(n.i!==c.i&&hs(n,c)){let h=te(n,c);n=X(n,n.next),h=X(h,h.next),it(n,t,e,s,r,o,0),it(h,t,e,s,r,o,0);return}c=c.next}n=n.next}while(n!==i)}function ts(i,t,e,s){const r=[];for(let o=0,n=t.length;o<n;o++){const c=t[o]*s,h=o<n-1?t[o+1]*s:i.length,l=Yt(i,c,h,s,!1);l===l.next&&(l.steiner=!0),r.push(cs(l))}r.sort(es);for(let o=0;o<r.length;o++)e=ss(r[o],e);return e}function es(i,t){let e=i.x-t.x;if(e===0&&(e=i.y-t.y,e===0)){const s=(i.next.y-i.y)/(i.next.x-i.x),r=(t.next.y-t.y)/(t.next.x-t.x);e=s-r}return e}function ss(i,t){const e=ns(i,t);if(!e)return t;const s=te(e,i);return X(s,s.next),X(e,e.next)}function ns(i,t){let e=t;const s=i.x,r=i.y;let o=-1/0,n;if(st(i,e))return e;do{if(st(i,e.next))return e.next;if(r<=e.y&&r>=e.next.y&&e.next.y!==e.y){const y=e.x+(r-e.y)*(e.next.x-e.x)/(e.next.y-e.y);if(y<=s&&y>o&&(o=y,n=e.x<e.next.x?e:e.next,y===s))return n}e=e.next}while(e!==t);if(!n)return null;const c=n,h=n.x,l=n.y;let a=1/0;e=n;do{if(s>=e.x&&e.x>=h&&s!==e.x&&Jt(r<l?s:o,r,h,l,r<l?o:s,r,e.x,e.y)){const y=Math.abs(r-e.y)/(s-e.x);ot(e,i)&&(y<a||y===a&&(e.x>n.x||e.x===n.x&&is(n,e)))&&(n=e,a=y)}e=e.next}while(e!==c);return n}function is(i,t){return L(i.prev,i,t.prev)<0&&L(t.next,i,i.next)<0}function rs(i,t,e,s){let r=i;do r.z===0&&(r.z=Et(r.x,r.y,t,e,s)),r.prevZ=r.prev,r.nextZ=r.next,r=r.next;while(r!==i);r.prevZ.nextZ=null,r.prevZ=null,os(r)}function os(i){let t,e=1;do{let s=i,r;i=null;let o=null;for(t=0;s;){t++;let n=s,c=0;for(let l=0;l<e&&(c++,n=n.nextZ,!!n);l++);let h=e;for(;c>0||h>0&&n;)c!==0&&(h===0||!n||s.z<=n.z)?(r=s,s=s.nextZ,c--):(r=n,n=n.nextZ,h--),o?o.nextZ=r:i=r,r.prevZ=o,o=r;s=n}o.nextZ=null,e*=2}while(t>1);return i}function Et(i,t,e,s,r){return i=(i-e)*r|0,t=(t-s)*r|0,i=(i|i<<8)&16711935,i=(i|i<<4)&252645135,i=(i|i<<2)&858993459,i=(i|i<<1)&1431655765,t=(t|t<<8)&16711935,t=(t|t<<4)&252645135,t=(t|t<<2)&858993459,t=(t|t<<1)&1431655765,i|t<<1}function cs(i){let t=i,e=i;do(t.x<e.x||t.x===e.x&&t.y<e.y)&&(e=t),t=t.next;while(t!==i);return e}function Jt(i,t,e,s,r,o,n,c){return(r-n)*(t-c)>=(i-n)*(o-c)&&(i-n)*(s-c)>=(e-n)*(t-c)&&(e-n)*(o-c)>=(r-n)*(s-c)}function rt(i,t,e,s,r,o,n,c){return!(i===n&&t===c)&&Jt(i,t,e,s,r,o,n,c)}function hs(i,t){return i.next.i!==t.i&&i.prev.i!==t.i&&!ls(i,t)&&(ot(i,t)&&ot(t,i)&&as(i,t)&&(L(i.prev,i,t.prev)||L(i,t.prev,t))||st(i,t)&&L(i.prev,i,i.next)>0&&L(t.prev,t,t.next)>0)}function L(i,t,e){return(t.y-i.y)*(e.x-t.x)-(t.x-i.x)*(e.y-t.y)}function st(i,t){return i.x===t.x&&i.y===t.y}function Kt(i,t,e,s){const r=gt(L(i,t,e)),o=gt(L(i,t,s)),n=gt(L(e,s,i)),c=gt(L(e,s,t));return!!(r!==o&&n!==c||r===0&&pt(i,e,t)||o===0&&pt(i,s,t)||n===0&&pt(e,i,s)||c===0&&pt(e,t,s))}function pt(i,t,e){return t.x<=Math.max(i.x,e.x)&&t.x>=Math.min(i.x,e.x)&&t.y<=Math.max(i.y,e.y)&&t.y>=Math.min(i.y,e.y)}function gt(i){return i>0?1:i<0?-1:0}function ls(i,t){let e=i;do{if(e.i!==i.i&&e.next.i!==i.i&&e.i!==t.i&&e.next.i!==t.i&&Kt(e,e.next,i,t))return!0;e=e.next}while(e!==i);return!1}function ot(i,t){return L(i.prev,i,i.next)<0?L(i,t,i.next)>=0&&L(i,i.prev,t)>=0:L(i,t,i.prev)<0||L(i,i.next,t)<0}function as(i,t){let e=i,s=!1;const r=(i.x+t.x)/2,o=(i.y+t.y)/2;do e.y>o!=e.next.y>o&&e.next.y!==e.y&&r<(e.next.x-e.x)*(o-e.y)/(e.next.y-e.y)+e.x&&(s=!s),e=e.next;while(e!==i);return s}function te(i,t){const e=$t(i.i,i.x,i.y),s=$t(t.i,t.x,t.y),r=i.next,o=t.prev;return i.next=t,t.prev=i,e.next=r,r.prev=e,s.next=e,e.prev=s,o.next=s,s.prev=o,s}function ee(i,t,e,s){const r=$t(i,t,e);return s?(r.next=s.next,r.prev=s,s.next.prev=r,s.next=r):(r.prev=r,r.next=r),r}function ct(i){i.next.prev=i.prev,i.prev.next=i.next,i.prevZ&&(i.prevZ.nextZ=i.nextZ),i.nextZ&&(i.nextZ.prevZ=i.prevZ)}function $t(i,t,e){return{i,x:t,y:e,prev:null,next:null,z:0,prevZ:null,nextZ:null,steiner:!1}}function us(i,t,e,s){let r=0;for(let o=t,n=e-s;o<e;o+=s)r+=(i[n]-i[o])*(i[o+1]+i[n+1]),n=o;return r}function Ft(i,t={}){let{vertices:e=[],indices:s=[],holes:r=[],verticesStride:o=2,verticesOffset:n=e.length/o,indicesOffset:c=s.length}=t;const h=He(i,r,2);if(h.length){for(let a=0;a<h.length;a+=3)s[c++]=h[a]+n,s[c++]=h[a+1]+n,s[c++]=h[a+2]+n;let l=n*o;for(let a=0;a<i.length;a+=2)e[l]=i[a],e[l+1]=i[a+1],l+=o}return{vertices:e,indices:s}}const fs=8,dt=11920929e-14,ys=1;function se(i,t,e,s,r,o,n,c,h=.5,l=[]){const y=Math.min(.99,Math.max(0,h));let f=(ys-y)/1;return f*=f,Lt(i,t,e,s,r,o,n,c,l,f,0),l.push(n,c),l}function Lt(i,t,e,s,r,o,n,c,h,l,a){if(a>fs)return;const y=(i+e)/2,f=(t+s)/2,p=(e+r)/2,u=(s+o)/2,x=(r+n)/2,g=(o+c)/2,P=(y+p)/2,C=(f+u)/2,w=(p+x)/2,v=(u+g)/2,b=(P+w)/2,S=(C+v)/2;if(a>0){let d=n-i,M=c-t;const V=Math.abs((e-n)*M-(s-c)*d),F=Math.abs((r-n)*M-(o-c)*d);if(V>dt&&F>dt){if((V+F)*(V+F)<=l*(d*d+M*M)){h.push(b,S);return}}else if(V>dt){if(V*V<=l*(d*d+M*M)){h.push(b,S);return}}else if(F>dt){if(F*F<=l*(d*d+M*M)){h.push(b,S);return}}else if(d=b-(i+n)/2,M=S-(t+c)/2,d*d+M*M<=l){h.push(b,S);return}}Lt(i,t,y,f,P,C,b,S,h,l,a+1),Lt(b,S,w,v,x,g,n,c,h,l,a+1)}const xs=8,ps=11920929e-14,gs=1;function ne(i,t,e,s,r,o,n=.5,c=[]){const l=Math.min(.99,Math.max(0,n));let a=(gs-l)/1;return a*=a,Nt(c,i,t,e,s,r,o,a,0),c.push(r,o),c}function Nt(i,t,e,s,r,o,n,c,h){if(h>xs)return;const l=(t+s)/2,a=(e+r)/2,y=(s+o)/2,f=(r+n)/2,p=(l+y)/2,u=(a+f)/2;let x=o-t,g=n-e;const P=Math.abs((s-o)*g-(r-n)*x);if(P>ps){if(P*P<=c*(x*x+g*g)){i.push(p,u);return}}else if(x=p-(t+o)/2,g=u-(e+n)/2,x*x+g*g<=c){i.push(p,u);return}Nt(i,t,e,l,a,p,u,c,h+1),Nt(i,p,u,y,f,o,n,c,h+1)}function ds(i){let t=0;const e=i.length;for(let s=0;s<e;s+=2){const r=i[s],o=i[s+1],n=i[(s+2)%(e-1)],c=i[(s+3)%e];t+=r*c-n*o}return t/2}function ie(i){return i.replace(/[^a-z0-9]/gi,"-").replace(/\B([A-Z])/g,"-$1").toLowerCase()}function re(i,t,e,s){const r=t.clone().sub(i),o=s.clone().sub(e),n=e.clone().sub(i),c=r.cross(o);if(c===0)return new m((i.x+e.x)/2,(i.y+e.y)/2);const h=n.cross(o)/c;return Math.abs(h)>1?new m((i.x+e.x)/2,(i.y+e.y)/2):new m(i.x+h*r.x,i.y+h*r.y)}function oe(i,t,e,s,r,o){return(e-i)*(o-t)-(r-i)*(s-t)}function ms(i,t,e){const s=e.length;let r=0;for(let o=0,n=s-2;o<s;n=o,o+=2){const c=e[o],h=e[o+1],l=e[n],a=e[n+1];h<=t?a>t&&oe(l,a,c,h,i,t)>0&&r++:a<=t&&oe(l,a,c,h,i,t)<0&&r--}return r}function Ms(i,t){const e=t[0]-i[0],s=t[1]-i[1];return Math.sqrt(e*e+s*s)}function ce(i){const t=i.length,e=i.map((s,r)=>({index:r,dist:0,wn:0,parentIndex:void 0}));for(let s=0;s<t;s++){const r=i[s],o=[r[0],r[1]];let n,c=0;for(let h=0;h<t;h++){if(s===h)continue;let l=0;for(let a=0;a<o.length;a+=2)l=ms(o[a],o[a+1],i[h]);if(l!==0){c+=l;const a=Ms(o,i[h]);(!n||a<n.dist)&&(n={index:h,dist:a,wn:l})}}c!==0&&n&&(e[s].dist=n.dist,e[s].wn=n.wn,e[s].parentIndex=n.index)}return e}function ws(i,t){const e=1-i;return e*e*t}function vs(i,t){return 2*(1-i)*i*t}function Ps(i,t){return i*i*t}function Dt(i,t,e,s){return ws(i,t)+vs(i,e)+Ps(i,s)}const Ts=1e-4,he=1e-4;function le(i,t={}){const{vertices:e=[],indices:s=[],lineStyle:r={alignment:.5,cap:"butt",join:"miter",width:1,miterLimit:10},flipAlignment:o=!1,closed:n=!0}=t,c=Ts;if(i.length===0)return{vertices:e,indices:s};const h=r;let l=h.alignment;if(r.alignment!==.5){let $=Cs(i);o&&($*=-1),l=(l-.5)*$+.5}const a={x:i[0],y:i[1]},y={x:i[i.length-2],y:i[i.length-1]},f=n,p=Math.abs(a.x-y.x)<c&&Math.abs(a.y-y.y)<c;if(f){i=i.slice(),p&&(i.pop(),i.pop(),y.x=i[i.length-2],y.y=i[i.length-1]);const $=(a.x+y.x)*.5,W=(y.y+a.y)*.5;i.unshift($,W),i.push($,W)}const u=e,x=i.length/2;let g=i.length;const P=u.length/2,C=h.width/2,w=C*C,v=h.miterLimit*h.miterLimit;let b=i[0],S=i[1],d=i[2],M=i[3],V=0,F=0,k=-(S-M),I=b-d,N=0,D=0,R=Math.sqrt(k*k+I*I);k/=R,I/=R,k*=C,I*=C;const lt=l,T=(1-lt)*2,_=lt*2;f||(h.cap==="round"?g+=G(b-k*(T-_)*.5,S-I*(T-_)*.5,b-k*T,S-I*T,b+k*_,S+I*_,u,!0)+2:h.cap==="square"&&(g+=ae(b,S,k,I,T,_,!0,u))),u.push(b-k*T,S-I*T),u.push(b+k*_,S+I*_);for(let $=1;$<x-1;++$){b=i[($-1)*2],S=i[($-1)*2+1],d=i[$*2],M=i[$*2+1],V=i[($+1)*2],F=i[($+1)*2+1],k=-(S-M),I=b-d,R=Math.sqrt(k*k+I*I),k/=R,I/=R,k*=C,I*=C,N=-(M-F),D=d-V,R=Math.sqrt(N*N+D*D),N/=R,D/=R,N*=C,D*=C;const W=d-b,at=S-M,ut=d-V,ft=F-M,Te=W*ut+at*ft,vt=at*ut-ft*W,yt=vt<0;if(Math.abs(vt)<.001*Math.abs(Te)){u.push(d-k*T,M-I*T),u.push(d+k*_,M+I*_),Te>=0&&(h.join==="round"?g+=G(d,M,d-k*T,M-I*T,d-N*T,M-D*T,u,!1)+4:g+=2,u.push(d-N*_,M-D*_),u.push(d+N*T,M+D*T));continue}const Ce=(-k+b)*(-I+M)-(-k+d)*(-I+S),be=(-N+V)*(-D+M)-(-N+d)*(-D+F),Pt=(W*be-ut*Ce)/vt,Tt=(ft*Ce-at*be)/vt,Rt=(Pt-d)*(Pt-d)+(Tt-M)*(Tt-M),Q=d+(Pt-d)*T,Y=M+(Tt-M)*T,J=d-(Pt-d)*_,K=M-(Tt-M)*_,Ls=Math.min(W*W+at*at,ut*ut+ft*ft),Ae=yt?T:_,Ns=Ls+Ae*Ae*w;Rt<=Ns?h.join==="bevel"||Rt/w>v?(yt?(u.push(Q,Y),u.push(d+k*_,M+I*_),u.push(Q,Y),u.push(d+N*_,M+D*_)):(u.push(d-k*T,M-I*T),u.push(J,K),u.push(d-N*T,M-D*T),u.push(J,K)),g+=2):h.join==="round"?yt?(u.push(Q,Y),u.push(d+k*_,M+I*_),g+=G(d,M,d+k*_,M+I*_,d+N*_,M+D*_,u,!0)+4,u.push(Q,Y),u.push(d+N*_,M+D*_)):(u.push(d-k*T,M-I*T),u.push(J,K),g+=G(d,M,d-k*T,M-I*T,d-N*T,M-D*T,u,!1)+4,u.push(d-N*T,M-D*T),u.push(J,K)):(u.push(Q,Y),u.push(J,K)):(u.push(d-k*T,M-I*T),u.push(d+k*_,M+I*_),h.join==="round"?yt?g+=G(d,M,d+k*_,M+I*_,d+N*_,M+D*_,u,!0)+2:g+=G(d,M,d-k*T,M-I*T,d-N*T,M-D*T,u,!1)+2:h.join==="miter"&&Rt/w<=v&&(yt?(u.push(J,K),u.push(J,K)):(u.push(Q,Y),u.push(Q,Y)),g+=2),u.push(d-N*T,M-D*T),u.push(d+N*_,M+D*_),g+=2)}b=i[(x-2)*2],S=i[(x-2)*2+1],d=i[(x-1)*2],M=i[(x-1)*2+1],k=-(S-M),I=b-d,R=Math.sqrt(k*k+I*I),k/=R,I/=R,k*=C,I*=C,u.push(d-k*T,M-I*T),u.push(d+k*_,M+I*_),f||(h.cap==="round"?g+=G(d-k*(T-_)*.5,M-I*(T-_)*.5,d-k*T,M-I*T,d+k*_,M+I*_,u,!1)+2:h.cap==="square"&&(g+=ae(d,M,k,I,T,_,!1,u)));const Fs=he*he;for(let $=P;$<g+P-2;++$)b=u[$*2],S=u[$*2+1],d=u[($+1)*2],M=u[($+1)*2+1],V=u[($+2)*2],F=u[($+2)*2+1],!(Math.abs(b*(M-F)+d*(F-S)+V*(S-M))<Fs)&&s.push($,$+1,$+2);return{vertices:e,indices:s}}function Cs(i){const t=i.length;if(t<6)return 1;let e=0;for(let s=0,r=i[t-2],o=i[t-1];s<t;s+=2){const n=i[s],c=i[s+1];e+=(n-r)*(c+o),r=n,o=c}return e<0?-1:1}function ae(i,t,e,s,r,o,n,c){const h=i-e*r,l=t-s*r,a=i+e*o,y=t+s*o;let f,p;n?(f=s,p=-e):(f=-s,p=e);const u=h+f,x=l+p,g=a+f,P=y+p;return c.push(u,x),c.push(g,P),2}function G(i,t,e,s,r,o,n,c){const h=e-i,l=s-t;let a=Math.atan2(h,l),y=Math.atan2(r-i,o-t);c&&a<y?a+=Math.PI*2:!c&&a>y&&(y+=Math.PI*2);let f=a;const p=y-a,u=Math.abs(p),x=Math.sqrt(h*h+l*l),g=(15*u*Math.sqrt(x)/Math.PI>>0)+1,P=p/g;if(f+=P,c){n.push(i,t),n.push(e,s);for(let C=1,w=f;C<g;C++,w+=P)n.push(i,t),n.push(i+Math.sin(w)*x,t+Math.cos(w)*x);n.push(i,t),n.push(r,o)}else{n.push(e,s),n.push(i,t);for(let C=1,w=f;C<g;C++,w+=P)n.push(i+Math.sin(w)*x,t+Math.cos(w)*x),n.push(i,t);n.push(r,o),n.push(i,t)}return g*2}class H{arcLengthDivision=200;_lengths=[];getPointAt(t,e=new m){return this.getPoint(this.getUToTMapping(t),e)}isClockwise(){return!1}getControlPointRefs(){return[]}applyTransform(t){const e=typeof t=="function";return this.getControlPointRefs().forEach(s=>{e?t(s):s.applyMatrix3(t)}),this}getUnevenVertices(t=5,e=[]){const s=new m;for(let r=0,o=Math.max(1,t)-1;r<=o;r++)this.getPoint(r/o,s),e.push(s.x,s.y);return e}getSpacedVertices(t=5,e=[]){const s=new m;for(let r=0,o=Math.max(1,t)-1;r<=o;r++)this.getPointAt(r/o,s),e.push(s.x,s.y);return e}getAdaptiveVertices(t=[]){return this.getUnevenVertices(5,t)}_verticesToPoints(t,e=[]){for(let s=0,r=t.length;s<r;s+=2){const o=t[s],n=t[s+1];e.push(new m(o,n))}return e}getSpacedPoints(t,e=[]){const s=this.getSpacedVertices(t);return this._verticesToPoints(s,e),e}getUnevenPoints(t,e=[]){const s=this.getUnevenVertices(t);return this._verticesToPoints(s,e),e}getAdaptivePoints(t=[]){const e=this.getAdaptiveVertices();return this._verticesToPoints(e,t),t}getPoints(t,e=[]){let s;return t?s=this.getUnevenVertices(t):s=this.getAdaptiveVertices(),this._verticesToPoints(s,e),e}getLength(){const t=this.getLengths();return t[t.length-1]}getLengths(){return this._lengths.length!==this.arcLengthDivision+1&&this.updateLengths(),this._lengths}updateLengths(){const t=this.arcLengthDivision,e=[0];for(let s=0,r=this.getPoint(0),o=1;o<=t;o++){const n=this.getPoint(o/t);s+=n.distanceTo(r),e.push(s),r=n}this._lengths=e}getUToTMapping(t,e){const s=this.getLengths(),r=s.length,o=e??t*s[r-1];if(r<2)return o/s[0];let n=0,c=0,h=r-1,l;for(;c<=h;)if(n=Math.floor(c+(h-c)/2),l=s[n]-o,l<0)c=n+1;else if(l>0)h=n-1;else{h=n;break}if(n=h,s[n]===o)return n/(r-1);const a=s[n],f=s[n+1]-a,p=(o-a)/f;return(n+p)/(r-1)}getTangent(t,e=new m){const r=Math.max(0,t-1e-4),o=Math.min(1,t+1e-4);return e.copy(this.getPoint(o).sub(this.getPoint(r)).normalize())}getTangentAt(t,e){return this.getTangent(this.getUToTMapping(t),e)}getNormal(t,e=new m){return this.getTangent(t,e),e.set(-e.y,e.x).normalize()}getNormalAt(t,e){return this.getNormal(this.getUToTMapping(t),e)}getTForPoint(t,e=.001){let s=0,r=1,o=(s+r)/2;for(;r-s>e;){o=(s+r)/2;const n=this.getPoint(o);if(n.distanceTo(t)<e)return o;n.x<t.x?s=o:r=o}return o}getMinMax(t=m.MAX,e=m.MIN){const s=this.getPoints();for(let r=0,o=s.length;r<o;r++){const n=s[r];t.min(n),e.max(n)}return{min:t.finite(),max:e.finite()}}getBoundingBox(){const{min:t,max:e}=this.getMinMax();return new U(t.x,t.y,e.x-t.x,e.y-t.y)}getFillVertices(t){return this.getAdaptiveVertices()}fillTriangulate(t){return Ft(this.getFillVertices(t),t)}strokeTriangulate(t){return le(this.getAdaptiveVertices(),t)}toCommands(){const t=[],e=this.getPoints();for(let s=0,r=e.length;s<r;s++){const o=e[s];s===0?t.push({type:"M",x:o.x,y:o.y}):t.push({type:"L",x:o.x,y:o.y})}return t}toData(){return Bt(this.toCommands())}drawTo(t){return this.toCommands().forEach(e=>{switch(e.type){case"M":t.moveTo(e.x,e.y);break;case"L":t.lineTo(e.x,e.y);break}}),this}copy(t){return this.arcLengthDivision=t.arcLengthDivision,this}clone(){return new this.constructor().copy(this)}}const bs=new z,ue=new z,fe=new z,mt=new m;class qt extends H{constructor(t=new m,e=new m,s=new m,r=0,o=0,n=Math.PI*2,c=!1){super(),this._center=t,this._radius=e,this._diff=s,this.rotate=r,this.startAngle=o,this.endAngle=n,this.clockwise=c}get cx(){return this._center.x}set cx(t){this._center.x=t}get cy(){return this._center.y}set cy(t){this._center.y=t}get rx(){return this._radius.x}set rx(t){this._radius.x=t}get ry(){return this._radius.y}set ry(t){this._radius.y=t}get dx(){return this._diff.x}set dx(t){this._diff.x=t}get dy(){return this._diff.y}set dy(t){this._diff.y=t}isClockwise(){return this.clockwise}_getDeltaAngle(){const t=Math.PI*2;let e=this.endAngle-this.startAngle;const s=Math.abs(e)<Number.EPSILON;return e=(e%t+t)%t,s?e=0:this.clockwise||(e=e===0?-t:e-t),e}getPoint(t,e=new m){const s=this._getDeltaAngle(),r=this.startAngle+t*s;let o=this.cx+this.rx*Math.cos(r),n=this.cy+this.ry*Math.sin(r);if(this.rotate!==0){const c=Math.cos(this.rotate),h=Math.sin(this.rotate),l=o-this.cx,a=n-this.cy;o=l*c-a*h+this.cx,n=l*h+a*c+this.cy}return e.set(o,n)}toCommands(){const{cx:t,cy:e,rx:s,ry:r,startAngle:o,endAngle:n,clockwise:c,rotate:h}=this,l=t+s*Math.cos(o)*Math.cos(h)-r*Math.sin(o)*Math.sin(h),a=e+s*Math.cos(o)*Math.sin(h)+r*Math.sin(o)*Math.cos(h),y=Math.abs(o-n),f=y>Math.PI?1:0,p=c?1:0,u=h*180/Math.PI;if(y>=2*Math.PI){const x=o+Math.PI,g=t+s*Math.cos(x)*Math.cos(h)-r*Math.sin(x)*Math.sin(h),P=e+s*Math.cos(x)*Math.sin(h)+r*Math.sin(x)*Math.cos(h);return[{type:"M",x:l,y:a},{type:"A",rx:s,ry:r,angle:u,largeArcFlag:0,sweepFlag:p,x:g,y:P},{type:"A",rx:s,ry:r,angle:u,largeArcFlag:0,sweepFlag:p,x:l,y:a}]}else{const x=t+s*Math.cos(n)*Math.cos(h)-r*Math.sin(n)*Math.sin(h),g=e+s*Math.cos(n)*Math.sin(h)+r*Math.sin(n)*Math.cos(h);return[{type:"M",x:l,y:a},{type:"A",rx:s,ry:r,angle:u,largeArcFlag:f,sweepFlag:p,x,y:g}]}}drawTo(t){const{cx:e,cy:s,rx:r,ry:o,rotate:n,startAngle:c,endAngle:h,clockwise:l}=this;return t.ellipse(e,s,r,o,n,c,h,!l),this}applyTransform(t){return mt.set(this.cx,this.cy),mt.applyMatrix3(t),this.cx=mt.x,this.cy=mt.y,Is(t)?As(this,t):ks(this,t),this}getControlPointRefs(){return[this._center]}_getAdaptiveVerticesByArc(t=[]){const{cx:e,cy:s,rx:r,ry:o,dx:n,dy:c,startAngle:h,endAngle:l,clockwise:a,rotate:y}=this,f=!a;let p=Math.abs(h-l);(!f&&h>l||f&&l>h)&&(p=2*Math.PI-p);const u=Math.max(12,Math.floor(12*r**(1/3)*(p/Math.PI)));let x=p/u,g=h;x*=f?-1:1;const P=Math.cos(f?y:-y),C=Math.sin(f?y:-y);for(let w=0;w<u+1;w++){const v=n+Math.cos(g)*r,b=c+Math.sin(g)*o,S=v*P-b*C,d=v*C+b*P;t.push(e+S,s+d),g+=x}return t}_getAdaptiveVerticesByCircle(t=[]){const{cx:e,cy:s,rx:r,ry:o,dx:n,dy:c,rotate:h,clockwise:l}=this;if(!(r>=0&&o>=0&&n>=0&&c>=0))return t;const a=Math.ceil(2.3*Math.sqrt(r+o)),y=a*8+(n?4:0)+(c?4:0),f=[];if(y===0)return t;{const x=f.length;if(a===0)f[x]=f[x+6]=e+n,f[x+1]=f[x+3]=s+c,f[x+2]=f[x+4]=e-n,f[x+5]=f[x+7]=s-c;else{let g=x,P=x+a*4+(n?2:0)+2,C=P,w=y,v=n+r,b=c,S=e+v,d=e-v,M=s+b;if(f[g++]=S,f[g++]=M,f[--P]=M,f[--P]=d,c){const F=s-b;f[C++]=d,f[C++]=F,f[--w]=F,f[--w]=S}for(let F=1;F<a;F++){const k=Math.PI/2*(F/a),I=n+Math.cos(k)*r,N=c+Math.sin(k)*o,D=e+I,R=e-I,lt=s+N,T=s-N;f[g++]=D,f[g++]=lt,f[--P]=lt,f[--P]=R,f[C++]=R,f[C++]=T,f[--w]=T,f[--w]=D}v=n,b=c+o,S=e+v,d=e-v,M=s+b;const V=s-b;f[g++]=S,f[g++]=M,f[--w]=V,f[--w]=S,n&&(f[g++]=d,f[g++]=M,f[--w]=V,f[--w]=d)}}const p=Math.cos(l?-h:h),u=Math.sin(l?-h:h);for(let x=0;x<f.length;x+=2){const g=f[x],P=f[x+1],C=g-e,w=P-s,v=C*p-w*u,b=C*u+w*p;t.push(e+v,s+b)}return t}getAdaptiveVertices(t=[]){return this.startAngle===0&&this.endAngle===Math.PI*2?this._getAdaptiveVerticesByCircle(t):this._getAdaptiveVerticesByArc(t)}copy(t){return super.copy(t),this.cx=t.cx,this.cy=t.cy,this.rx=t.rx,this.ry=t.ry,this.dx=t.dx,this.dy=t.dy,this.startAngle=t.startAngle,this.endAngle=t.endAngle,this.clockwise=t.clockwise,this.rotate=t.rotate,this}}function As(i,t){const e=i.rx,s=i.ry,r=Math.cos(i.rotate),o=Math.sin(i.rotate),n=new m(e*r,e*o),c=new m(-s*o,s*r),h=n.applyMatrix3(t),l=c.applyMatrix3(t),a=bs.set(h.x,l.x,0,h.y,l.y,0,0,0,1),y=ue.copy(a).invert(),u=fe.copy(y).transpose().multiply(y).elements,x=Ss(u[0],u[1],u[4]),g=Math.sqrt(x.rt1),P=Math.sqrt(x.rt2);if(i.rx=1/g,i.ry=1/P,i.rotate=Math.atan2(x.sn,x.cs),!((i.endAngle-i.startAngle)%(2*Math.PI)<Number.EPSILON)){const w=ue.set(g,0,0,0,P,0,0,0,1),v=fe.set(x.cs,x.sn,0,-x.sn,x.cs,0,0,0,1),b=w.multiply(v).multiply(a),S=d=>{const{x:M,y:V}=new m(Math.cos(d),Math.sin(d)).applyMatrix3(b);return Math.atan2(V,M)};i.startAngle=S(i.startAngle),i.endAngle=S(i.endAngle),ye(t)&&(i.clockwise=!i.clockwise)}}function ks(i,t){const e=xe(t),s=pe(t);i.rx*=e,i.ry*=s;const r=e>Number.EPSILON?Math.atan2(t.elements[1],t.elements[0]):Math.atan2(-t.elements[3],t.elements[4]);i.rotate+=r,ye(t)&&(i.startAngle*=-1,i.endAngle*=-1,i.clockwise=!i.clockwise)}function ye(i){const t=i.elements;return t[0]*t[4]-t[1]*t[3]<0}function Is(i){const t=i.elements,e=t[0]*t[3]+t[1]*t[4];if(e===0)return!1;const s=xe(i),r=pe(i);return Math.abs(e/(s*r))>Number.EPSILON}function xe(i){const t=i.elements;return Math.sqrt(t[0]*t[0]+t[1]*t[1])}function pe(i){const t=i.elements;return Math.sqrt(t[3]*t[3]+t[4]*t[4])}function Ss(i,t,e){let s,r,o,n,c;const h=i+e,l=i-e,a=Math.sqrt(l*l+4*t*t);return h>0?(s=.5*(h+a),c=1/s,r=i*c*e-t*c*t):h<0?r=.5*(h-a):(s=.5*a,r=-.5*a),l>0?o=l+a:o=l-a,Math.abs(o)>2*Math.abs(t)?(c=-2*t/o,n=1/Math.sqrt(1+c*c),o=c*n):Math.abs(t)===0?(o=1,n=0):(c=-.5*o/t,o=1/Math.sqrt(1+c*c),n=c*o),l>0&&(c=o,o=-n,n=c),{rt1:s,rt2:r,cs:o,sn:n}}class ge extends qt{constructor(t=0,e=0,s=1,r=0,o=Math.PI*2,n=!1){super(new m(t,e),new m(s,s),new m,0,r,o,n)}drawTo(t){const{cx:e,cy:s,rx:r,startAngle:o,endAngle:n,clockwise:c}=this;return t.arc(e,s,r,o,n,!c),this}}class B extends H{constructor(t=new m,e=new m){super(),this.p1=t,this.p2=e}static from(t,e,s,r){return new B(new m(t,e),new m(s,r))}getPoint(t,e=new m){return t===1?e.copy(this.p2):e.copy(this.p2).sub(this.p1).scale(t).add(this.p1),e}getPointAt(t,e=new m){return this.getPoint(t,e)}getTangent(t,e=new m){return e.subVectors(this.p2,this.p1).normalize()}getTangentAt(t,e=new m){return this.getTangent(t,e)}getControlPointRefs(){return[this.p1,this.p2]}getAdaptiveVertices(t=[]){return t.push(this.p1.x,this.p1.y,this.p2.x,this.p2.y),t}getMinMax(t=m.MAX,e=m.MIN){const{p1:s,p2:r}=this;return t.x=Math.min(t.x,s.x,r.x),t.y=Math.min(t.y,s.y,r.y),e.x=Math.max(e.x,s.x,r.x),e.y=Math.max(e.y,s.y,r.y),{min:t.finite(),max:e.finite()}}toCommands(){const{p1:t,p2:e}=this;return[{type:"M",x:t.x,y:t.y},{type:"L",x:e.x,y:e.y}]}getFillVertices(t={}){const e=Math.min(this.p1.x,this.p2.x),s=Math.max(this.p1.x,this.p2.x),r=Math.min(this.p1.y,this.p2.y),o=Math.max(this.p1.y,this.p2.y),n=e,c=r,h=s-e||t.style?.strokeWidth||0,l=o-r||t.style?.strokeWidth||0;return[n,c,n+h,c,n+h,c+l,n,c+l]}drawTo(t){const{p1:e,p2:s}=this;return t.lineTo(e.x,e.y),t.lineTo(s.x,s.y),this}copy(t){return super.copy(t),this.p1.copy(t.p1),this.p2.copy(t.p2),this}}class nt extends H{constructor(t=[]){super(),this.curves=t}getFlatCurves(){return this.curves.flatMap(t=>t instanceof nt?t.getFlatCurves():t)}addCurve(t){return this.curves.push(t),this}getPoint(t,e=new m){const s=t*this.getLength(),r=this.getLengths();let o=0;for(;o<r.length;){if(r[o]>=s){const n=r[o]-s,c=this.curves[o],h=c.getLength();return c.getPointAt(h===0?0:1-n/h,e)}o++}return e}getLengths(){return this._lengths.length!==this.curves.length&&this.updateLengths(),this._lengths}updateLengths(){const t=[];for(let e=0,s=0,r=this.curves.length;e<r;e++)s+=this.curves[e].getLength(),t.push(s);this._lengths=t}getControlPointRefs(){return this.curves.flatMap(t=>t.getControlPointRefs())}_removeNextPointIfEqualPrevPoint(t,e){const s=[t[e-1],t[e]],r=[t[e+1],t[e+2]];return s[0]===r[0]&&s[1]===r[1]&&t.splice(e+1,2),t}getSpacedVertices(t=5,e=[]){let s;return this.curves.forEach(r=>{r.getSpacedVertices(t,e),s&&this._removeNextPointIfEqualPrevPoint(e,s),s=e.length-1}),e}getAdaptiveVertices(t=[]){let e;return this.curves.forEach(s=>{s.getAdaptiveVertices(t),e&&this._removeNextPointIfEqualPrevPoint(t,e),e=t.length-1}),t}strokeTriangulate(t){return this.curves.length===1?this.curves[0].strokeTriangulate(t):super.strokeTriangulate(t)}getFillVertices(t){if(this.curves.length===1)return this.curves[0].getFillVertices(t);{const e=[];let s;return this.curves.forEach(r=>{let o;r instanceof B?o=r.getAdaptiveVertices():o=r.getFillVertices(t),e.push(...o),s&&this._removeNextPointIfEqualPrevPoint(e,s),s=e.length-1}),e}}applyTransform(t){return this.curves.forEach(e=>e.applyTransform(t)),this}getMinMax(t=m.MAX,e=m.MIN){return this.curves.forEach(s=>s.getMinMax(t,e)),{min:t.finite(),max:e.finite()}}getBoundingBox(){const{min:t,max:e}=this.getMinMax();return new U(t.x,t.y,e.x-t.x,e.y-t.y)}toCommands(){return this.curves.flatMap(t=>t.toCommands())}drawTo(t){const e=this.curves[0]?.getPoint(0);return e&&t.moveTo(e.x,e.y),this.curves.forEach(s=>s.drawTo(t)),this}copy(t){return super.copy(t),this.curves=t.curves.map(e=>e.clone()),this}}class Mt extends H{constructor(t=new m,e=new m,s=new m,r=new m){super(),this.p1=t,this.cp1=e,this.cp2=s,this.p2=r}static from(t,e,s,r,o,n,c,h){return new Mt(new m(t,e),new m(s,r),new m(o,n),new m(c,h))}getPoint(t,e=new m){const{p1:s,cp1:r,cp2:o,p2:n}=this;return e.set(_t(t,s.x,r.x,o.x,n.x),_t(t,s.y,r.y,o.y,n.y))}getAdaptiveVertices(t=[]){return se(this.p1.x,this.p1.y,this.cp1.x,this.cp1.y,this.cp2.x,this.cp2.y,this.p2.x,this.p2.y,.5,t)}getControlPointRefs(){return[this.p1,this.cp1,this.cp2,this.p2]}_solveQuadratic(t,e,s){const r=e*e-4*t*s;if(r<0)return[];const o=Math.sqrt(r),n=(-e+o)/(2*t),c=(-e-o)/(2*t);return[n,c].filter(h=>h>=0&&h<=1)}getMinMax(t=m.MAX,e=m.MIN){const{p1:s,cp1:r,cp2:o,p2:n}=this,c=this._solveQuadratic(3*(r.x-s.x),6*(o.x-r.x),3*(n.x-o.x)),h=this._solveQuadratic(3*(r.y-s.y),6*(o.y-r.y),3*(n.y-o.y)),l=[0,1,...c,...h];return((y,f)=>{for(const p of y)for(let u=0;u<=f;u++){const x=u/f-.5,g=Math.min(1,Math.max(0,p+x)),P=this.getPoint(g);t.x=Math.min(t.x,P.x),t.y=Math.min(t.y,P.y),e.x=Math.max(e.x,P.x),e.y=Math.max(e.y,P.y)}})(l,10),{min:t.finite(),max:e.finite()}}toCommands(){const{p1:t,cp1:e,cp2:s,p2:r}=this;return[{type:"M",x:t.x,y:t.y},{type:"C",x1:e.x,y1:e.y,x2:s.x,y2:s.y,x:r.x,y:r.y}]}drawTo(t){const{p1:e,cp1:s,cp2:r,p2:o}=this;return t.lineTo(e.x,e.y),t.bezierCurveTo(s.x,s.y,r.x,r.y,o.x,o.y),this}copy(t){return super.copy(t),this.p1.copy(t.p1),this.cp1.copy(t.cp1),this.cp2.copy(t.cp2),this.p2.copy(t.p2),this}}class de extends qt{constructor(t=0,e=0,s=1,r=1,o=0,n=0,c=Math.PI*2,h=!1){super(new m(t,e),new m(s,r),new m,o,n,c,h)}drawTo(t){return t.ellipse(this.cx,this.cy,this.rx,this.ry,this.rotate,this.startAngle,this.endAngle,!this.clockwise),this}}class Vt extends nt{}class _s extends Vt{constructor(t=0,e=0,s=1,r=3){super(),this.cx=t,this.cy=e,this.radius=s,this.sideCount=r,this.update()}update(){const{cx:t,cy:e,radius:s,sideCount:r}=this,o=[];for(let c=0;c<r;c++){const h=c*2*Math.PI/r-.5*Math.PI;o.push(new m(s*Math.cos(h),s*Math.sin(h)).add({x:t,y:e}))}const n=[];for(let c=0;c<r;c++)n.push(new B(o[c],o[(c+1)%r]));return this.curves=n,this}copy(t){return super.copy(t),this.cx=t.cx,this.cy=t.cy,this.radius=t.radius,this.sideCount=t.sideCount,this.update(),this}}class wt extends H{constructor(t=new m,e=new m,s=new m){super(),this.p1=t,this.cp=e,this.p2=s}static from(t,e,s,r,o,n){return new wt(new m(t,e),new m(s,r),new m(o,n))}getPoint(t,e=new m){const{p1:s,cp:r,p2:o}=this;return e.set(Dt(t,s.x,r.x,o.x),Dt(t,s.y,r.y,o.y)),e}getControlPointRefs(){return[this.p1,this.cp,this.p2]}getAdaptiveVertices(t=[]){return ne(this.p1.x,this.p1.y,this.cp.x,this.cp.y,this.p2.x,this.p2.y,.5,t)}getMinMax(t=m.MAX,e=m.MIN){const{p1:s,cp:r,p2:o}=this,n=.5*(s.x+r.x),c=.5*(s.y+r.y),h=.5*(s.x+o.x),l=.5*(s.y+o.y);return t.x=Math.min(t.x,s.x,o.x,n,h),t.y=Math.min(t.y,s.y,o.y,c,l),e.x=Math.max(e.x,s.x,o.x,n,h),e.y=Math.max(e.y,s.y,o.y,c,l),{min:t.finite(),max:e.finite()}}toCommands(){const{p1:t,cp:e,p2:s}=this;return[{type:"M",x:t.x,y:t.y},{type:"Q",x1:e.x,y1:e.y,x:s.x,y:s.y}]}drawTo(t){const{p1:e,cp:s,p2:r}=this;return t.lineTo(e.x,e.y),t.quadraticCurveTo(s.x,s.y,r.x,r.y),this}copy(t){return super.copy(t),this.p1.copy(t.p1),this.cp.copy(t.cp),this.p2.copy(t.p2),this}}class me extends Vt{constructor(t=0,e=0,s=0,r=0){super(),this.x=t,this.y=e,this.width=s,this.height=r,this.update()}update(){const{x:t,y:e,width:s,height:r}=this,o=[new m(t,e),new m(t+s,e),new m(t+s,e+r),new m(t,e+r)];return this.curves=[new B(o[0],o[1]),new B(o[1],o[2]),new B(o[2],o[3]),new B(o[3],o[0])],this}drawTo(t){return t.rect(this.x,this.y,this.width,this.height),this}getFillVertices(t={}){const{x:e,y:s,width:r,height:o}=this;return[e,s,e+r,s,e+r,s+o,e,s+o]}copy(t){return super.copy(t),this.x=t.x,this.y=t.y,this.width=t.width,this.height=t.height,this.update(),this}}class Me extends qt{constructor(t=0,e=0,s=1,r=1,o=1){super(),this.x=t,this.y=e,this.width=s,this.height=r,this.radius=o,this.update()}update(){const{x:t,y:e,width:s,height:r,radius:o}=this,n=s/2,c=r/2,h=t+n,l=e+c,a=Math.max(0,Math.min(o,Math.min(n,c))),y=a;return this._center=new m(h,l),this._radius=new m(a,y),this._diff=new m(n-a,c-y),this}drawTo(t){const{x:e,y:s,width:r,height:o,radius:n}=this;return t.roundRect(e,s,r,o,n),this}copy(t){return super.copy(t),this.x=t.x,this.y=t.y,this.width=t.width,this.height=t.height,this.radius=t.radius,this.update(),this}}class we extends H{constructor(t=[]){super(),this.points=t}getPoint(t,e=new m){const{points:s}=this,r=(s.length-1)*t,o=Math.floor(r),n=r-o,c=s[o===0?o:o-1],h=s[o],l=s[o>s.length-2?s.length-1:o+1],a=s[o>s.length-3?s.length-1:o+2];return e.set(St(n,c.x,h.x,l.x,a.x),St(n,c.y,h.y,l.y,a.y)),e}getControlPointRefs(){return this.points}copy(t){super.copy(t),this.points=[];for(let e=0,s=t.points.length;e<s;e++)this.points.push(t.points[e].clone());return this}}class ht extends nt{startPoint;currentPoint;autoClose=!1;constructor(t){super(),t&&this.addPoints(t)}addPoints(t){this.moveTo(t[0].x,t[0].y);for(let e=1,s=t.length;e<s;e++){const{x:r,y:o}=t[e];this.lineTo(r,o)}return this}addCommands(t){return At(t,this),this}addData(t){return this.addCommands(kt(t)),this}_closeVertices(t){return this.autoClose&&t.length>=4&&t[0]!==t[t.length-2]&&t[1]!==t[t.length-1]&&t.push(t[0],t[1]),t}getUnevenVertices(t=40,e=[]){return this._closeVertices(super.getUnevenVertices(t,e))}getSpacedVertices(t=40,e=[]){return this._closeVertices(super.getSpacedVertices(t,e))}getAdaptiveVertices(t=[]){return this._closeVertices(super.getAdaptiveVertices(t))}getFillVertices(t){return this._closeVertices(super.getFillVertices(t))}_setCurrentPoint(t){return this.currentPoint=new m(t.x,t.y),this.startPoint||(this.startPoint=this.currentPoint.clone()),this}_connetLineTo(t){if(this.curves.length>0){const e=t.getPoint(0);(!this.currentPoint||!e.equals(this.currentPoint))&&this.lineTo(e.x,e.y)}return this}closePath(){const t=this.startPoint;if(t){const e=this.currentPoint;e&&!t.equals(e)&&(this.curves.push(new B(e.clone(),t.clone())),e.copy(t)),this.startPoint=void 0}return this}moveTo(t,e){return this.currentPoint=new m(t,e),this.startPoint=this.currentPoint.clone(),this}lineTo(t,e){const s=this.currentPoint;return s?.equals({x:t,y:e})||this.curves.push(B.from(s?.x??0,s?.y??0,t,e)),this._setCurrentPoint({x:t,y:e}),this}bezierCurveTo(t,e,s,r,o,n){const c=this.currentPoint;return c?.equals({x:o,y:n})||this.curves.push(Mt.from(c?.x??0,c?.y??0,t,e,s,r,o,n)),this._setCurrentPoint({x:o,y:n}),this}quadraticCurveTo(t,e,s,r){const o=this.currentPoint;return o?.equals({x:s,y:r})||this.curves.push(wt.from(o?.x??0,o?.y??0,t,e,s,r)),this._setCurrentPoint({x:s,y:r}),this}arc(t,e,s,r,o,n){const c=new ge(t,e,s,r,o,!n);return this._connetLineTo(c),this.curves.push(c),this._setCurrentPoint(c.getPoint(1)),this}relativeArc(t,e,s,r,o,n){return t+=this.currentPoint?.x??0,e+=this.currentPoint?.y??0,this.arc(t,e,s,r,o,n),this}arcTo(t,e,s,r,o){return console.warn("Method arcTo not supported yet"),this}ellipse(t,e,s,r,o,n,c,h=!0){const l=new de(t,e,s,r,o,n,c,!h);return this._connetLineTo(l),this.curves.push(l),this._setCurrentPoint(l.getPoint(1)),this}relativeEllipse(t,e,s,r,o,n,c,h){return t+=this.currentPoint?.x??0,e+=this.currentPoint?.y??0,this.ellipse(t,e,s,r,o,n,c,h),this}rect(t,e,s,r){const o=new me(t,e,s,r);return this._connetLineTo(o),this.curves.push(o),this._setCurrentPoint({x:t,y:e}),this}roundRect(t,e,s,r,o){const n=new Me(t,e,s,r,o);return this._connetLineTo(n),this.curves.push(n),this._setCurrentPoint({x:t,y:e}),this}splineThru(t){const e=this.currentPoint??new m;return this.curves.push(new we([e].concat(t))),this._setCurrentPoint(t[t.length-1]),this}drawTo(t){const e=this.curves[0]?.getPoint(0);return e&&t.moveTo(e.x,e.y),this.curves.forEach(s=>s.drawTo(t)),this.autoClose&&t.closePath(),this}copy(t){return super.copy(t),this.autoClose=t.autoClose,this.currentPoint=t.currentPoint?.clone(),this}}class j extends nt{_meta;currentCurve=new ht;style;get startPoint(){return this.currentCurve.startPoint}get currentPoint(){return this.currentCurve.currentPoint}get strokeWidth(){return this.style.strokeWidth??((this.style.stroke??"none")==="none"?0:1)}constructor(t,e={}){super(),this.curves.push(this.currentCurve),this.style=e,t&&(t instanceof j?this.addPath(t):Array.isArray(t)?this.addCommands(t):this.addData(t))}getMeta(){return this._meta}setMeta(t){return this._meta=t,this}addPath(t){if(!this.currentCurve.curves.length){const e=this.curves.findIndex(s=>s===this.currentCurve);e>-1&&this.curves.splice(e,1)}return t instanceof j?this.curves.push(...t.curves.filter(e=>e.curves.length).map(e=>e.clone())):t.curves.length&&this.curves.push(t),this.currentCurve=this.curves[this.curves.length-1],this}closePath(){const t=this.startPoint;return t&&this.currentCurve.curves.length&&(this.currentCurve.closePath(),this.currentCurve=new ht().moveTo(t.x,t.y),this.curves.push(this.currentCurve)),this}moveTo(t,e){return this.currentCurve.currentPoint?.equals({x:t,y:e})||(this.currentCurve.curves.length&&(this.currentCurve=new ht,this.curves.push(this.currentCurve)),this.currentCurve.moveTo(t,e)),this}lineTo(t,e){return this.currentCurve.lineTo(t,e),this}bezierCurveTo(t,e,s,r,o,n){return this.currentCurve.bezierCurveTo(t,e,s,r,o,n),this}quadraticCurveTo(t,e,s,r){return this.currentCurve.quadraticCurveTo(t,e,s,r),this}arc(t,e,s,r,o,n){return this.currentCurve.arc(t,e,s,r,o,n),this}arcTo(t,e,s,r,o){return this.currentCurve.arcTo(t,e,s,r,o),this}ellipse(t,e,s,r,o,n,c,h){return this.currentCurve.ellipse(t,e,s,r,o,n,c,h),this}rect(t,e,s,r){return this.currentCurve.rect(t,e,s,r),this}roundRect(t,e,s,r,o){return this.currentCurve.roundRect(t,e,s,r,o),this}reset(){return this.currentCurve=new ht,this.curves=[this.currentCurve],this.style={},this}addCommands(t){return At(t,this),this}addData(t){return this.addCommands(kt(t)),this}splineThru(t){return this.currentCurve.splineThru(t),this}scale(t,e=t,s={x:0,y:0}){return this.getControlPointRefs().forEach(r=>{r.scale(t,e,s)}),this}skew(t,e=0,s={x:0,y:0}){return this.getControlPointRefs().forEach(r=>{r.skew(t,e,s)}),this}rotate(t,e={x:0,y:0}){return this.getControlPointRefs().forEach(s=>{s.rotate(t,e)}),this}bold(t){if(t===0)return this;const e=this.getFlatCurves(),s=[],r=[],o=[];e.forEach((c,h)=>{const l=c.getControlPointRefs(),a=c.isClockwise();o[h]=l,r[h]=a;const y=l[0],f=l[l.length-1]??y;s.push({start:a?f:y,end:a?y:f,index:h})});const n=[];return s.forEach((c,h)=>{n[h]=[],s.forEach((l,a)=>{l.start&&c.end&&a!==h&&l.start?.equals(c.end)&&n[h].push(l.index)})}),e.forEach((c,h)=>{const l=r[h];o[h].forEach(a=>{a.add(c.getNormal(c.getTForPoint(a)).scale(l?t:-t))})}),n.forEach((c,h)=>{const l=o[h];c.forEach(a=>{const y=o[a],f=re(l[l.length-1],l[l.length-2]??l[l.length-1],y[0],y[1]??y[0]);f&&(l[l.length-1].copy(f),y[0].copy(f))})}),this}getMinMax(t=m.MAX,e=m.MIN,s=!0){const r=this.strokeWidth;return this.curves.forEach(o=>{if(o.getMinMax(t,e),s&&r>1){const n=r/2,c=o.isClockwise(),h=[];for(let l=0;l<=1;l+=1/o.arcLengthDivision){const a=o.getPoint(l),y=o.getNormal(l),f=y.clone().scale(c?n:-n),p=y.clone().scale(c?-n:n);h.push(a.clone().add(f),a.clone().add(p),a.clone().add({x:n,y:0}),a.clone().add({x:-n,y:0}),a.clone().add({x:0,y:n}),a.clone().add({x:0,y:-n}),a.clone().add({x:n,y:n}),a.clone().add({x:-n,y:-n}))}t.min(...h),e.max(...h)}}),{min:t.finite(),max:e.finite()}}strokeTriangulate(t){const e=t?.indices??[],s=t?.vertices??[];return this.curves.forEach(r=>{r.strokeTriangulate({...t,indices:e,vertices:s,style:{...this.style}})}),{indices:e,vertices:s}}fillTriangulate(t){const e={...t,style:{...this.style,...t?.style}},s=e.indices??[],r=e.vertices??[];if((e.style.fillRule??"nonzero")==="nonzero"){const n=this.curves.map(l=>l.getFillVertices(e)),c=ce(n),h=c.length;for(let l=0;l<h;l++){const a=c[l],y=n[l];if(a.wn||!y.length)continue;const f=y.slice(),p=[];for(let u=0;u<h;u++){const x=c[u];x.parentIndex===l&&(p.push(f.length/2),f.push(...n[x.index]))}Ft(f,{...t,indices:s,vertices:r,holes:p,style:{...this.style}})}}else this.curves.forEach(n=>{n.fillTriangulate({...t,indices:s,vertices:r,style:{...this.style}})});return{indices:s,vertices:r}}getBoundingBox(t=!0){const{min:e,max:s}=this.getMinMax(void 0,void 0,t);return new U(e.x,e.y,s.x-e.x,s.y-e.y)}drawTo(t,e={}){e={...this.style,...e};const{fill:s="#000",stroke:r="none"}=e;return t.beginPath(),t.save(),Ct(t,e),this.curves.forEach(o=>{o.drawTo(t)}),s!=="none"&&t.fill(),r!=="none"&&t.stroke(),t.restore(),this}drawControlPointsTo(t,e={}){e={...this.style,...e};const{fill:s="#000",stroke:r="none"}=e;return t.beginPath(),t.save(),Ct(t,e),this.getControlPointRefs().forEach(o=>{tt(t,o.x,o.y,{radius:4})}),s!=="none"&&t.fill(),r!=="none"&&t.stroke(),t.restore(),this}toCommands(){return this.curves.flatMap(t=>t.toCommands())}toData(){return this.curves.filter(t=>t.curves.length).map(t=>t.toData()).join(" ")}toSvgPathString(){const t={...this.style,fill:this.style.fill??"#000",stroke:this.style.stroke??"none"},e={};for(const r in t)t[r]!==void 0&&(e[ie(r)]=t[r]);Object.assign(e,{"stroke-width":`${this.strokeWidth}px`});let s="";for(const r in e)e[r]!==void 0&&(s+=`${r}:${e[r]};`);return`<path d="${this.toData()}" style="${s}"></path>`}copy(t){return super.copy(t),this.currentCurve=t.currentCurve.clone(),this.style={...t.style},this}}class ve{constructor(t=[],e){this.paths=t,this.viewBox=e}getBoundingBox(t=!0){if(!this.paths.length)return;const e=m.MAX,s=m.MIN;return this.paths.forEach(r=>r.getMinMax(e,s,t)),new U(e.x,e.y,s.x-e.x,s.y-e.y)}toTriangulatedSvgString(t=this.paths.map(s=>s.fillTriangulate()),e=0){let s="",r="";const o={x:-e,y:-e},n={x:e,y:e};(Array.isArray(t)?t:[t]).forEach(({vertices:a,indices:y,points:f=[]})=>{const p=u=>{const x=a[u*2],g=a[u*2+1];return o.x=Math.min(o.x,x+e),n.x=Math.max(n.x,x+e),o.y=Math.min(o.y,g+e),n.y=Math.max(n.y,g+e),[x,g]};for(let u=0,x=y.length;u<x;u+=3){const g=p(y[u]),P=p(y[u+1]),C=p(y[u+2]);s+=`<polygon
3
3
  points="${g.join(",")} ${P.join(",")} ${C.join(",")}"
4
4
  stroke="#28a745"
5
5
  stroke-width="#stroke-width"
@@ -11,19 +11,19 @@ ${t}`);return e.documentElement}else return i}const Se="px",_e=90,Wt=["mm","cm",
11
11
  cy="${f[u+1]}"
12
12
  r="#r"
13
13
  fill="#dc3545"
14
- />`});const a=[o.x,o.y,s.x-o.x,s.y-o.y],h=Math.max(a[2],a[3])*.001;return`<svg
15
- width="${a[2]}"
16
- height="${a[3]}"
17
- viewBox="${a.join(" ")}"
14
+ />`});const h=[o.x,o.y,n.x-o.x,n.y-o.y],l=Math.max(h[2],h[3])*.001;return`<svg
15
+ width="${h[2]}"
16
+ height="${h[3]}"
17
+ viewBox="${h.join(" ")}"
18
18
  xmlns="http://www.w3.org/2000/svg"
19
19
  >
20
- ${n.replace(/#stroke-width/g,String(h))}
21
- ${r.replace(/#r/g,String(h))}
22
- </svg>`}toTriangulatedSvg(t,e){return new DOMParser().parseFromString(this.toTriangulatedSvgString(t,e),"image/svg+xml").documentElement}toSvgString(){const{x:t,y:e,width:n,height:r}=this.getBoundingBox(),o=this.paths.map(s=>s.toSvgPathString()).join("");return`<svg
23
- viewBox="${t} ${e} ${n} ${r}"
24
- width="${n}px"
20
+ ${s.replace(/#stroke-width/g,String(l))}
21
+ ${r.replace(/#r/g,String(l))}
22
+ </svg>`}toTriangulatedSvg(t,e){return new DOMParser().parseFromString(this.toTriangulatedSvgString(t,e),"image/svg+xml").documentElement}toSvgString(){const{x:t,y:e,width:s,height:r}=this.getBoundingBox(),o=this.paths.map(n=>n.toSvgPathString()).join("");return`<svg
23
+ viewBox="${t} ${e} ${s} ${r}"
24
+ width="${s}px"
25
25
  height="${r}px"
26
26
  xmlns="http://www.w3.org/2000/svg"
27
27
  >
28
28
  ${o}
29
- </svg>`}toSvgUrl(){return`data:image/svg+xml;base64,${btoa(this.toSvgString())}`}toSvg(){return new DOMParser().parseFromString(this.toSvgString(),"image/svg+xml").documentElement}toCanvas(t={}){const{pixelRatio:e=2,...n}=t,{left:r,top:o,width:s,height:c}=this.getBoundingBox(),a=document.createElement("canvas");a.width=s*e,a.height=c*e,a.style.width=`${s}px`,a.style.height=`${c}px`;const h=a.getContext("2d");return h&&(h.scale(e,e),h.translate(-r,-o),this.paths.forEach(l=>{l.drawTo(h,n)})),a}}class Ln{constructor(t,e,n=1,r=1){this.rows=t,this.cols=e,this.width=n,this.height=r;for(let o=0;o<t;o++){this.controlPoints[o]=[];for(let s=0;s<e;s++)this.controlPoints[o][s]={x:s/(e-1)*n,y:o/(t-1)*r}}}controlPoints=[];moveControlPoint(t,e,n,r){return this.controlPoints[t][e].x+=n,this.controlPoints[t][e].y+=r,this}}function Pe(i){const t=[];return t[0]=(1-i)**3/6,t[1]=(3*i**3-6*i**2+4)/6,t[2]=(-3*i**3+3*i**2+3*i+1)/6,t[3]=i**3/6,t}function Fn(i,t,e=t.width,n=t.height){const r=i.x/e*(t.cols-1),o=i.y/n*(t.rows-1),s=Math.floor(r),c=Math.floor(o),a=r-s,h=o-c,l=Pe(a),y=Pe(h);let f=0,p=0;for(let u=0;u<4;u++)for(let x=0;x<4;x++){const g=Math.min(Math.max(c-1+u,0),t.rows-1),P=Math.min(Math.max(s-1+x,0),t.cols-1),C=t.controlPoints[g][P],w=l[x]*y[u];f+=C.x*w,p+=C.y*w}i.set(f,p)}A.ArcCurve=ge,A.BoundingBox=U,A.CompositeCurve=st,A.CubicBezierCurve=Mt,A.Curve=H,A.CurvePath=ht,A.EllipseCurve=de,A.EquilateralPloygonCurve=$n,A.FFDControlGrid=Ln,A.LineCurve=B,A.Matrix3=z,A.Path2D=j,A.Path2DSet=ve,A.PloygonCurve=Vt,A.QuadraticBezierCurve=wt,A.RectangleCurve=me,A.RoundRectangleCurve=Me,A.SplineCurve=we,A.Vector2=m,A.applyFFD=Fn,A.catmullRom=St,A.cubicBezier=_t,A.drawPoint=tt,A.fillTriangulate=Lt,A.getAdaptiveCubicBezierCurvePoints=ne,A.getAdaptiveQuadraticBezierCurvePoints=se,A.getDirectedArea=mn,A.getIntersectionPoint=re,A.nonzeroFillRule=ce,A.parseArcCommand=Ot,A.parsePathDataArgs=O,A.quadraticBezier=Dt,A.setCanvasContext=Ct,A.strokeTriangulate=ae,A.svgPathCommandsAddToPath2D=At,A.svgPathCommandsToData=Bt,A.svgPathDataToCommands=kt,A.svgToDom=Xt,A.svgToPath2DSet=Ze,A.toKebabCase=ie,Object.defineProperty(A,Symbol.toStringTag,{value:"Module"})}));
29
+ </svg>`}toSvgUrl(){return`data:image/svg+xml;base64,${btoa(this.toSvgString())}`}toSvg(){return new DOMParser().parseFromString(this.toSvgString(),"image/svg+xml").documentElement}toCanvas(t={}){const{pixelRatio:e=2,...s}=t,{left:r,top:o,width:n,height:c}=this.getBoundingBox(),h=document.createElement("canvas");h.width=n*e,h.height=c*e,h.style.width=`${n}px`,h.style.height=`${c}px`;const l=h.getContext("2d");return l&&(l.scale(e,e),l.translate(-r,-o),this.paths.forEach(a=>{a.drawTo(l,s)})),h}}class Es{constructor(t,e,s=1,r=1){this.rows=t,this.cols=e,this.width=s,this.height=r;for(let o=0;o<t;o++){this.controlPoints[o]=[];for(let n=0;n<e;n++)this.controlPoints[o][n]={x:n/(e-1)*s,y:o/(t-1)*r}}}controlPoints=[];moveControlPoint(t,e,s,r){return this.controlPoints[t][e].x+=s,this.controlPoints[t][e].y+=r,this}}function Pe(i){const t=[];return t[0]=(1-i)**3/6,t[1]=(3*i**3-6*i**2+4)/6,t[2]=(-3*i**3+3*i**2+3*i+1)/6,t[3]=i**3/6,t}function $s(i,t,e=t.width,s=t.height){const r=i.x/e*(t.cols-1),o=i.y/s*(t.rows-1),n=Math.floor(r),c=Math.floor(o),h=r-n,l=o-c,a=Pe(h),y=Pe(l);let f=0,p=0;for(let u=0;u<4;u++)for(let x=0;x<4;x++){const g=Math.min(Math.max(c-1+u,0),t.rows-1),P=Math.min(Math.max(n-1+x,0),t.cols-1),C=t.controlPoints[g][P],w=a[x]*y[u];f+=C.x*w,p+=C.y*w}i.set(f,p)}A.ArcCurve=ge,A.BoundingBox=U,A.CompositeCurve=nt,A.CubicBezierCurve=Mt,A.Curve=H,A.CurvePath=ht,A.EllipseCurve=de,A.EquilateralPloygonCurve=_s,A.FFDControlGrid=Es,A.LineCurve=B,A.Matrix3=z,A.Path2D=j,A.Path2DSet=ve,A.PloygonCurve=Vt,A.QuadraticBezierCurve=wt,A.RectangleCurve=me,A.RoundRectangleCurve=Me,A.SplineCurve=we,A.Vector2=m,A.applyFFD=$s,A.catmullRom=St,A.cubicBezier=_t,A.drawPoint=tt,A.fillTriangulate=Ft,A.getAdaptiveCubicBezierCurvePoints=se,A.getAdaptiveQuadraticBezierCurvePoints=ne,A.getDirectedArea=ds,A.getIntersectionPoint=re,A.nonzeroFillRule=ce,A.parseArcCommand=Ot,A.parsePathDataArgs=O,A.quadraticBezier=Dt,A.setCanvasContext=Ct,A.strokeTriangulate=le,A.svgPathCommandsAddToPath2D=At,A.svgPathCommandsToData=Bt,A.svgPathDataToCommands=kt,A.svgToDom=Wt,A.svgToPath2DSet=Ze,A.toKebabCase=ie,Object.defineProperty(A,Symbol.toStringTag,{value:"Module"})}));
package/dist/index.mjs CHANGED
@@ -1743,19 +1743,6 @@ function getIntersectionPoint(p1, p2, q1, q2) {
1743
1743
  );
1744
1744
  }
1745
1745
 
1746
- function signedArea(pts) {
1747
- let sum = 0;
1748
- const len = pts.length / 2;
1749
- for (let i = 0; i < len; i++) {
1750
- const xi = pts[2 * i];
1751
- const yi = pts[2 * i + 1];
1752
- const j = (i + 1) % len;
1753
- const xj = pts[2 * j];
1754
- const yj = pts[2 * j + 1];
1755
- sum += (xj - xi) * (yj + yi);
1756
- }
1757
- return sum;
1758
- }
1759
1746
  function cross(ax, ay, bx, by, cx, cy) {
1760
1747
  return (bx - ax) * (cy - ay) - (cx - ax) * (by - ay);
1761
1748
  }
@@ -1791,33 +1778,30 @@ function nonzeroFillRule(paths) {
1791
1778
  parentIndex: void 0
1792
1779
  }));
1793
1780
  for (let i = 0; i < pathsLen; i++) {
1794
- if (signedArea(paths[i]) < 0) {
1795
- continue;
1796
- }
1797
- const firstPoint = paths[i];
1781
+ const pointArray = paths[i];
1798
1782
  const testPointArray = [
1799
- ...firstPoint
1783
+ pointArray[0],
1784
+ pointArray[1]
1800
1785
  ];
1801
1786
  let parent;
1787
+ let totalWn = 0;
1802
1788
  for (let j = 0; j < pathsLen; j++) {
1803
1789
  if (i === j) {
1804
1790
  continue;
1805
1791
  }
1806
1792
  let wn = 0;
1807
1793
  for (let p = 0; p < testPointArray.length; p += 2) {
1808
- wn = wn || windingNumber(testPointArray[p], testPointArray[p + 1], paths[j]);
1809
- if (wn) {
1810
- break;
1811
- }
1794
+ wn = windingNumber(testPointArray[p], testPointArray[p + 1], paths[j]);
1812
1795
  }
1813
- if (Math.abs(wn) > 0) {
1814
- const dist = distance(firstPoint, paths[j]);
1796
+ if (wn !== 0) {
1797
+ totalWn += wn;
1798
+ const dist = distance(testPointArray, paths[j]);
1815
1799
  if (!parent || dist < parent.dist) {
1816
1800
  parent = { index: j, dist, wn };
1817
1801
  }
1818
1802
  }
1819
1803
  }
1820
- if (parent) {
1804
+ if (totalWn !== 0 && parent) {
1821
1805
  results[i].dist = parent.dist;
1822
1806
  results[i].wn = parent.wn;
1823
1807
  results[i].parentIndex = parent.index;
@@ -2230,7 +2214,7 @@ function round(cx, cy, sx, sy, ex, ey, verts, clockwise) {
2230
2214
 
2231
2215
  class Curve {
2232
2216
  arcLengthDivision = 200;
2233
- _arcLengths;
2217
+ _lengths = [];
2234
2218
  getPointAt(u, output = new Vector2()) {
2235
2219
  return this.getPoint(this.getUToTMapping(u), output);
2236
2220
  }
@@ -2308,10 +2292,10 @@ class Curve {
2308
2292
  return lengths[lengths.length - 1];
2309
2293
  }
2310
2294
  getLengths() {
2311
- if (!this._arcLengths || this._arcLengths.length !== this.arcLengthDivision + 1) {
2295
+ if (this._lengths.length !== this.arcLengthDivision + 1) {
2312
2296
  this.updateLengths();
2313
2297
  }
2314
- return this._arcLengths;
2298
+ return this._lengths;
2315
2299
  }
2316
2300
  updateLengths() {
2317
2301
  const divisions = this.arcLengthDivision;
@@ -2322,7 +2306,7 @@ class Curve {
2322
2306
  arcLengths.push(sum);
2323
2307
  prev = current;
2324
2308
  }
2325
- this._arcLengths = arcLengths;
2309
+ this._lengths = arcLengths;
2326
2310
  }
2327
2311
  getUToTMapping(u, distance) {
2328
2312
  const lengths = this.getLengths();
@@ -3020,13 +3004,19 @@ class CompositeCurve extends Curve {
3020
3004
  }
3021
3005
  return output;
3022
3006
  }
3007
+ getLengths() {
3008
+ if (this._lengths.length !== this.curves.length) {
3009
+ this.updateLengths();
3010
+ }
3011
+ return this._lengths;
3012
+ }
3023
3013
  updateLengths() {
3024
- const arcLengths = [];
3014
+ const lengths = [];
3025
3015
  for (let i = 0, sum = 0, len = this.curves.length; i < len; i++) {
3026
3016
  sum += this.curves[i].getLength();
3027
- arcLengths.push(sum);
3017
+ lengths.push(sum);
3028
3018
  }
3029
- this._arcLengths = arcLengths;
3019
+ this._lengths = lengths;
3030
3020
  }
3031
3021
  getControlPointRefs() {
3032
3022
  return this.curves.flatMap((curve) => curve.getControlPointRefs());
@@ -3751,9 +3741,11 @@ class Path2D extends CompositeCurve {
3751
3741
  return this;
3752
3742
  }
3753
3743
  addPath(path) {
3754
- const index = this.curves.findIndex((v) => v === this.currentCurve);
3755
- if (index > -1) {
3756
- this.curves.splice(index, 1);
3744
+ if (!this.currentCurve.curves.length) {
3745
+ const index = this.curves.findIndex((v) => v === this.currentCurve);
3746
+ if (index > -1) {
3747
+ this.curves.splice(index, 1);
3748
+ }
3757
3749
  }
3758
3750
  if (path instanceof Path2D) {
3759
3751
  this.curves.push(
@@ -3762,17 +3754,15 @@ class Path2D extends CompositeCurve {
3762
3754
  } else if (path.curves.length) {
3763
3755
  this.curves.push(path);
3764
3756
  }
3765
- this.curves.push(this.currentCurve);
3757
+ this.currentCurve = this.curves[this.curves.length - 1];
3766
3758
  return this;
3767
3759
  }
3768
3760
  closePath() {
3769
3761
  const startPoint = this.startPoint;
3770
- if (startPoint) {
3762
+ if (startPoint && this.currentCurve.curves.length) {
3771
3763
  this.currentCurve.closePath();
3772
- if (this.currentCurve.curves.length) {
3773
- this.currentCurve = new CurvePath().moveTo(startPoint.x, startPoint.y);
3774
- this.curves.push(this.currentCurve);
3775
- }
3764
+ this.currentCurve = new CurvePath().moveTo(startPoint.x, startPoint.y);
3765
+ this.curves.push(this.currentCurve);
3776
3766
  }
3777
3767
  return this;
3778
3768
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "modern-path2d",
3
3
  "type": "module",
4
- "version": "1.4.10",
4
+ "version": "1.4.12",
5
5
  "packageManager": "pnpm@9.15.1",
6
6
  "description": "A Path2D library, fully compatible with Web Path2D, with additional support for triangulate、animation、deformation etc.",
7
7
  "author": "wxm",
@@ -59,18 +59,18 @@
59
59
  "earcut": "^3.0.2"
60
60
  },
61
61
  "devDependencies": {
62
- "@antfu/eslint-config": "^5.4.1",
62
+ "@antfu/eslint-config": "^6.2.0",
63
63
  "@types/earcut": "^3.0.0",
64
- "@types/node": "^24.5.2",
65
- "bumpp": "^10.2.3",
64
+ "@types/node": "^24.10.0",
65
+ "bumpp": "^10.3.1",
66
66
  "conventional-changelog-cli": "^5.0.0",
67
- "eslint": "^9.36.0",
68
- "lint-staged": "^16.2.0",
67
+ "eslint": "^9.39.0",
68
+ "lint-staged": "^16.2.6",
69
69
  "simple-git-hooks": "^2.13.1",
70
- "typescript": "^5.9.2",
70
+ "typescript": "^5.9.3",
71
71
  "unbuild": "^3.6.1",
72
- "vite": "^7.1.7",
73
- "vitest": "^3.2.4"
72
+ "vite": "^7.1.12",
73
+ "vitest": "^4.0.6"
74
74
  },
75
75
  "simple-git-hooks": {
76
76
  "pre-commit": "pnpm lint-staged"