modern-path2d 1.4.11 → 1.4.13

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
@@ -2220,7 +2220,7 @@ function round(cx, cy, sx, sy, ex, ey, verts, clockwise) {
2220
2220
 
2221
2221
  class Curve {
2222
2222
  arcLengthDivision = 200;
2223
- _arcLengths;
2223
+ _lengths = [];
2224
2224
  getPointAt(u, output = new Vector2()) {
2225
2225
  return this.getPoint(this.getUToTMapping(u), output);
2226
2226
  }
@@ -2298,10 +2298,10 @@ class Curve {
2298
2298
  return lengths[lengths.length - 1];
2299
2299
  }
2300
2300
  getLengths() {
2301
- if (!this._arcLengths || this._arcLengths.length !== this.arcLengthDivision + 1) {
2301
+ if (this._lengths.length !== this.arcLengthDivision + 1) {
2302
2302
  this.updateLengths();
2303
2303
  }
2304
- return this._arcLengths;
2304
+ return this._lengths;
2305
2305
  }
2306
2306
  updateLengths() {
2307
2307
  const divisions = this.arcLengthDivision;
@@ -2312,7 +2312,7 @@ class Curve {
2312
2312
  arcLengths.push(sum);
2313
2313
  prev = current;
2314
2314
  }
2315
- this._arcLengths = arcLengths;
2315
+ this._lengths = arcLengths;
2316
2316
  }
2317
2317
  getUToTMapping(u, distance) {
2318
2318
  const lengths = this.getLengths();
@@ -2337,14 +2337,14 @@ class Curve {
2337
2337
  break;
2338
2338
  }
2339
2339
  }
2340
- i = high;
2340
+ i = Math.max(0, high);
2341
2341
  if (lengths[i] === targetLen) {
2342
2342
  return i / (lengthsLen - 1);
2343
2343
  }
2344
2344
  const before = lengths[i];
2345
2345
  const after = lengths[i + 1];
2346
2346
  const segmentLength = after - before;
2347
- const segmentFraction = (targetLen - before) / segmentLength;
2347
+ const segmentFraction = Math.max(0, (targetLen - before) / segmentLength);
2348
2348
  return (i + segmentFraction) / (lengthsLen - 1);
2349
2349
  }
2350
2350
  getTangent(t, output = new Vector2()) {
@@ -3010,13 +3010,19 @@ class CompositeCurve extends Curve {
3010
3010
  }
3011
3011
  return output;
3012
3012
  }
3013
+ getLengths() {
3014
+ if (this._lengths.length !== this.curves.length) {
3015
+ this.updateLengths();
3016
+ }
3017
+ return this._lengths;
3018
+ }
3013
3019
  updateLengths() {
3014
- const arcLengths = [];
3020
+ const lengths = [];
3015
3021
  for (let i = 0, sum = 0, len = this.curves.length; i < len; i++) {
3016
3022
  sum += this.curves[i].getLength();
3017
- arcLengths.push(sum);
3023
+ lengths.push(sum);
3018
3024
  }
3019
- this._arcLengths = arcLengths;
3025
+ this._lengths = lengths;
3020
3026
  }
3021
3027
  getControlPointRefs() {
3022
3028
  return this.curves.flatMap((curve) => curve.getControlPointRefs());
@@ -3741,9 +3747,11 @@ class Path2D extends CompositeCurve {
3741
3747
  return this;
3742
3748
  }
3743
3749
  addPath(path) {
3744
- const index = this.curves.findIndex((v) => v === this.currentCurve);
3745
- if (index > -1) {
3746
- 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
+ }
3747
3755
  }
3748
3756
  if (path instanceof Path2D) {
3749
3757
  this.curves.push(
@@ -3752,17 +3760,15 @@ class Path2D extends CompositeCurve {
3752
3760
  } else if (path.curves.length) {
3753
3761
  this.curves.push(path);
3754
3762
  }
3755
- this.curves.push(this.currentCurve);
3763
+ this.currentCurve = this.curves[this.curves.length - 1];
3756
3764
  return this;
3757
3765
  }
3758
3766
  closePath() {
3759
3767
  const startPoint = this.startPoint;
3760
- if (startPoint) {
3768
+ if (startPoint && this.currentCurve.curves.length) {
3761
3769
  this.currentCurve.closePath();
3762
- if (this.currentCurve.curves.length) {
3763
- this.currentCurve = new CurvePath().moveTo(startPoint.x, startPoint.y);
3764
- this.curves.push(this.currentCurve);
3765
- }
3770
+ this.currentCurve = new CurvePath().moveTo(startPoint.x, startPoint.y);
3771
+ this.curves.push(this.currentCurve);
3766
3772
  }
3767
3773
  return this;
3768
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,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:a=0,shadowOffsetX:l=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=a,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 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,a=1){this.set(t,e,s,r,o,n,c,h,a)}set(t,e,s,r,o,n,c,h,a){const l=this.elements;return l[0]=t,l[1]=r,l[2]=c,l[3]=e,l[4]=o,l[5]=h,l[6]=s,l[7]=n,l[8]=a,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],a=s[1],l=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]=a*x+l*C+y*b,o[4]=a*g+l*w+y*S,o[7]=a*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],s=t[1],r=t[2],o=t[3],n=t[4],c=t[5],h=t[6],a=t[7],l=t[8],y=l*n-c*a,f=c*h-l*o,p=a*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*a-l*s)*x,t[2]=(c*s-r*n)*x,t[3]=f*x,t[4]=(l*e-r*h)*x,t[5]=(r*o-c*e)*x,t[6]=p*x,t[7]=(s*h-a*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,a=(n.y-c.y)/2,l=Math.cos(s)*h+Math.sin(s)*a,y=-Math.sin(s)*h+Math.cos(s)*a;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(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,(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,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,a="",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(){a!==""&&(l===""?y.push(Number(a)):y.push(Number(a)*10**Number(l))),a="",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,a=u,p();continue}if(c===0){if(q.WHITESPACE.test(u))continue;if(q.DIGIT.test(u)||q.SIGN.test(u)){c=1,a=u;continue}if(q.POINT.test(u)){c=2,a=u;continue}q.COMMA.test(u)&&(h&&f(u,g,y),h=!0)}if(c===1){if(q.DIGIT.test(u)){a+=u;continue}if(q.POINT.test(u)){a+=u,c=2;continue}if(q.EXP.test(u)){c=3;continue}q.SIGN.test(u)&&a.length===1&&q.SIGN.test(a[0])&&f(u,g,y)}if(c===2){if(q.DIGIT.test(u)){a+=u;continue}if(q.EXP.test(u)){c=3;continue}q.POINT.test(u)&&a[a.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,h=!1):q.COMMA.test(u)?(p(),c=0,h=!0):q.SIGN.test(u)?(p(),c=1,a=u):q.POINT.test(u)?(p(),c=2,a=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 a=0,l=h.length;a<l;a+=2)a===0?t.push({type:n,x:h[a],y:h[a+1]}):t.push({type:n==="m"?"l":"L",x:h[a],y:h[a+1]});break;case"h":case"H":h=O(c);for(let a=0,l=h.length;a<l;a++)t.push({type:n,x:h[a]});break;case"v":case"V":h=O(c);for(let a=0,l=h.length;a<l;a++)t.push({type:n,y:h[a]});break;case"l":case"L":h=O(c);for(let a=0,l=h.length;a<l;a+=2)t.push({type:n,x:h[a],y:h[a+1]});break;case"c":case"C":h=O(c);for(let a=0,l=h.length;a<l;a+=6)t.push({type:n,x1:h[a],y1:h[a+1],x2:h[a+2],y2:h[a+3],x:h[a+4],y:h[a+5]});break;case"s":case"S":h=O(c);for(let a=0,l=h.length;a<l;a+=4)t.push({type:n,x2:h[a],y2:h[a+1],x:h[a+2],y:h[a+3]});break;case"q":case"Q":h=O(c);for(let a=0,l=h.length;a<l;a+=4)t.push({type:n,x1:h[a],y1:h[a+1],x:h[a+2],y:h[a+3]});break;case"t":case"T":h=O(c);for(let a=0,l=h.length;a<l;a+=2)t.push({type:n,x:h[a],y:h[a+1]});break;case"a":case"A":h=O(c,[3,4],7);for(let a=0,l=h.length;a<l;a+=7)t.push({type:n,rx:h[a],ry:h[a+1],angle:h[a+2],largeArcFlag:h[a+3],sweepFlag:h[a+4],x:h[a+5],y:h[a+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=Le(i);return e.length>0&&s.premultiply(e[e.length-1]),t.copy(s),e.push(s),s}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 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),a=O(o.slice(n+1));switch(e.identity(),h){case"translate":if(a.length>=1){const l=a[0];let y=0;a.length>=2&&(y=a[1]),e.translate(l,y)}break;case"rotate":if(a.length>=1){let l=0,y=0,f=0;l=a[0]*Math.PI/180,a.length>=3&&(y=a[1],f=a[2]),xt.makeTranslation(-y,-f),Ht.makeRotation(l),Qt.multiplyMatrices(Ht,xt),xt.makeTranslation(y,f),e.multiplyMatrices(xt,Qt)}break;case"scale":a.length>=1&&e.scale(a[0],a[1]??a[0]);break;case"skewX":a.length===1&&e.set(1,Math.tan(a[0]*Math.PI/180),0,0,1,0,0,0,1);break;case"skewY":a.length===1&&e.set(1,0,0,Math.tan(a[0]*Math.PI/180),1,0,0,0,1);break;case"matrix":a.length===6&&e.set(a[0],a[2],a[4],a[1],a[3],a[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 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 a=i.getAttribute("class").split(/\s/).filter(Boolean).map(l=>l.trim());for(let l=0;l<a.length;l++)s=Object.assign(s,e[`.${a[l]}`])}i.hasAttribute("id")&&(s=Object.assign(s,e[`#${i.getAttribute("id")}`]));for(let a=i.style.length,l=0;l<a;l++){const y=i.style.item(l),f=i.style.getPropertyValue(y);t[y]=f,s[y]=f}function r(a,l,y=o){i.hasAttribute(a)&&(t[l]=y(i.getAttribute(a))),s[a]&&(t[l]=y(s[a]))}function o(a){return a.startsWith("url")&&console.warn("url access in attributes is not implemented."),a}function n(a){return Math.max(0,Math.min(1,E(a)))}function c(a){return Math.max(0,E(a))}function h(a){return a.split(" ").filter(l=>l!=="").map(l=>E(l))}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=Fe(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=[],a=$e(i,c,h);o&&(o.applyTransform(c),e.push(o),o.style={...n});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,n,e,s)}return a&&(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,a;if(s&&(o=ts(i,t,o,e)),i.length>80*e){c=i[0],h=i[1];let l=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>l&&(l=p),u>y&&(y=u)}a=Math.max(l-c,y-h),a=a!==0?32767/a:0}return it(o,n,e,c,h,a,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)||F(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,a=i.next;if(o?Ye(i,s,r,o):Qe(i)){t.push(h.i,i.i,a.i),ct(i),i=a.next,c=a.next;continue}if(i=a,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(F(t,e,s)>=0)return!1;const r=t.x,o=e.x,n=s.x,c=t.y,h=e.y,a=s.y,l=Math.min(r,o,n),y=Math.min(c,h,a),f=Math.max(r,o,n),p=Math.max(c,h,a);let u=s.next;for(;u!==t;){if(u.x>=l&&u.x<=f&&u.y>=y&&u.y<=p&&rt(r,c,o,h,n,a,u.x,u.y)&&F(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(F(r,o,n)>=0)return!1;const c=r.x,h=o.x,a=n.x,l=r.y,y=o.y,f=n.y,p=Math.min(c,h,a),u=Math.min(l,y,f),x=Math.max(c,h,a),g=Math.max(l,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,l,h,y,a,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!==n&&rt(c,l,h,y,a,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!==n&&rt(c,l,h,y,a,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!==n&&rt(c,l,h,y,a,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 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,a=Yt(i,c,h,s,!1);a===a.next&&(a.steiner=!0),r.push(cs(a))}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,a=n.y;let l=1/0;e=n;do{if(s>=e.x&&e.x>=h&&s!==e.x&&Jt(r<a?s:o,r,h,a,r<a?o:s,r,e.x,e.y)){const y=Math.abs(r-e.y)/(s-e.x);ot(e,i)&&(y<l||y===l&&(e.x>n.x||e.x===n.x&&is(n,e)))&&(n=e,l=y)}e=e.next}while(e!==c);return n}function is(i,t){return F(i.prev,i,t.prev)<0&&F(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 a=0;a<e&&(c++,n=n.nextZ,!!n);a++);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&&!as(i,t)&&(ot(i,t)&&ot(t,i)&&ls(i,t)&&(F(i.prev,i,t.prev)||F(i,t.prev,t))||st(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 st(i,t){return i.x===t.x&&i.y===t.y}function Kt(i,t,e,s){const r=gt(F(i,t,e)),o=gt(F(i,t,s)),n=gt(F(e,s,i)),c=gt(F(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 as(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 ls(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 Lt(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 l=0;l<h.length;l+=3)s[c++]=h[l]+n,s[c++]=h[l+1]+n,s[c++]=h[l+2]+n;let a=n*o;for(let l=0;l<i.length;l+=2)e[a]=i[l],e[a+1]=i[l+1],a+=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,a=[]){const y=Math.min(.99,Math.max(0,h));let f=(ys-y)/1;return f*=f,Ft(i,t,e,s,r,o,n,c,a,f,0),a.push(n,c),a}function Ft(i,t,e,s,r,o,n,c,h,a,l){if(l>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(l>0){let d=n-i,M=c-t;const V=Math.abs((e-n)*M-(s-c)*d),L=Math.abs((r-n)*M-(o-c)*d);if(V>dt&&L>dt){if((V+L)*(V+L)<=a*(d*d+M*M)){h.push(b,S);return}}else if(V>dt){if(V*V<=a*(d*d+M*M)){h.push(b,S);return}}else if(L>dt){if(L*L<=a*(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<=a){h.push(b,S);return}}Ft(i,t,y,f,P,C,b,S,h,a,l+1),Ft(b,S,w,v,x,g,n,c,h,a,l+1)}const xs=8,ps=11920929e-14,gs=1;function ne(i,t,e,s,r,o,n=.5,c=[]){const a=Math.min(.99,Math.max(0,n));let l=(gs-a)/1;return l*=l,Nt(c,i,t,e,s,r,o,l,0),c.push(r,o),c}function Nt(i,t,e,s,r,o,n,c,h){if(h>xs)return;const a=(t+s)/2,l=(e+r)/2,y=(s+o)/2,f=(r+n)/2,p=(a+y)/2,u=(l+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,a,l,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],a=e[n],l=e[n+1];h<=t?l>t&&oe(a,l,c,h,i,t)>0&&r++:l<=t&&oe(a,l,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 a=0;for(let l=0;l<o.length;l+=2)a=ms(o[l],o[l+1],i[h]);if(a!==0){c+=a;const l=Ms(o,i[h]);(!n||l<n.dist)&&(n={index:h,dist:l,wn:a})}}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 ae(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 a=h.alignment;if(r.alignment!==.5){let $=Cs(i);o&&($*=-1),a=(a-.5)*$+.5}const l={x:i[0],y:i[1]},y={x:i[i.length-2],y:i[i.length-1]},f=n,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,W=(y.y+l.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,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=a,T=(1-at)*2,_=at*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+=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 W=d-b,lt=S-M,ut=d-V,ft=L-M,Te=W*ut+lt*ft,vt=lt*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+L),Pt=(W*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)*_,Fs=Math.min(W*W+lt*lt,ut*ut+ft*ft),Ae=yt?T:_,Ns=Fs+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+=le(d,M,k,I,T,_,!1,u)));const Ls=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))<Ls)&&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 le(i,t,e,s,r,o,n,c){const h=i-e*r,a=t-s*r,l=i+e*o,y=t+s*o;let f,p;n?(f=s,p=-e):(f=-s,p=e);const u=h+f,x=a+p,g=l+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,a=s-t;let l=Math.atan2(h,a),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(h*h+a*a),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;_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(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._arcLengths||this._arcLengths.length!==this.arcLengthDivision+1)&&this.updateLengths(),this._arcLengths}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._arcLengths=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,a;for(;c<=h;)if(n=Math.floor(c+(h-c)/2),a=s[n]-o,a<0)c=n+1;else if(a>0)h=n-1;else{h=n;break}if(n=h,s[n]===o)return n/(r-1);const l=s[n],f=s[n+1]-l,p=(o-l)/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 Lt(this.getFillVertices(t),t)}strokeTriangulate(t){return ae(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),a=o-this.cx,l=n-this.cy;o=a*c-l*h+this.cx,n=a*h+l*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,a=t+s*Math.cos(o)*Math.cos(h)-r*Math.sin(o)*Math.sin(h),l=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:a,y:l},{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:a,y:l}]}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:a,y:l},{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:a}=this;return t.ellipse(e,s,r,o,n,c,h,!a),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:a,clockwise:l,rotate:y}=this,f=!l;let p=Math.abs(h-a);(!f&&h>a||f&&a>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:a}=this;if(!(r>=0&&o>=0&&n>=0&&c>=0))return t;const l=Math.ceil(2.3*Math.sqrt(r+o)),y=l*8+(n?4:0)+(c?4:0),f=[];if(y===0)return t;{const x=f.length;if(l===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+l*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 L=s-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=n+Math.cos(k)*r,N=c+Math.sin(k)*o,D=e+I,R=e-I,at=s+N,T=s-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=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(a?-h:h),u=Math.sin(a?-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),a=c.applyMatrix3(t),l=bs.set(h.x,a.x,0,h.y,a.y,0,0,0,1),y=ue.copy(l).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(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 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,a=i-e,l=Math.sqrt(a*a+4*t*t);return h>0?(s=.5*(h+l),c=1/s,r=i*c*e-t*c*t):h<0?r=.5*(h-l):(s=.5*l,r=-.5*l),a>0?o=a+l:o=a-l,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),a>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,a=o-r||t.style?.strokeWidth||0;return[n,c,n+h,c,n+h,c+a,n,c+a]}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}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._arcLengths=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)),a=[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)}})(a,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),a=.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,a),e.x=Math.max(e.x,s.x,o.x,n,h),e.y=Math.max(e.y,s.y,o.y,c,a),{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,a=e+c,l=Math.max(0,Math.min(o,Math.min(n,c))),y=l;return this._center=new m(h,a),this._radius=new m(l,y),this._diff=new m(n-l,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],a=s[o>s.length-2?s.length-1:o+1],l=s[o>s.length-3?s.length-1:o+2];return e.set(St(n,c.x,h.x,a.x,l.x),St(n,c.y,h.y,a.y,l.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 a=new de(t,e,s,r,o,n,c,!h);return this._connetLineTo(a),this.curves.push(a),this._setCurrentPoint(a.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){const e=this.curves.findIndex(s=>s===this.currentCurve);return e>-1&&this.curves.splice(e,1),t instanceof j?this.curves.push(...t.curves.filter(s=>s.curves.length).map(s=>s.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,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 a=c.getControlPointRefs(),l=c.isClockwise();o[h]=a,r[h]=l;const y=a[0],f=a[a.length-1]??y;s.push({start:l?f:y,end:l?y:f,index:h})});const n=[];return s.forEach((c,h)=>{n[h]=[],s.forEach((a,l)=>{a.start&&c.end&&l!==h&&a.start?.equals(c.end)&&n[h].push(a.index)})}),e.forEach((c,h)=>{const a=r[h];o[h].forEach(l=>{l.add(c.getNormal(c.getTForPoint(l)).scale(a?t:-t))})}),n.forEach((c,h)=>{const a=o[h];c.forEach(l=>{const y=o[l],f=re(a[a.length-1],a[a.length-2]??a[a.length-1],y[0],y[1]??y[0]);f&&(a[a.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 a=0;a<=1;a+=1/o.arcLengthDivision){const l=o.getPoint(a),y=o.getNormal(a),f=y.clone().scale(c?n:-n),p=y.clone().scale(c?-n:n);h.push(l.clone().add(f),l.clone().add(p),l.clone().add({x:n,y:0}),l.clone().add({x:-n,y:0}),l.clone().add({x:0,y:n}),l.clone().add({x:0,y:-n}),l.clone().add({x:n,y:n}),l.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(a=>a.getFillVertices(e)),c=ce(n),h=c.length;for(let a=0;a<h;a++){const l=c[a],y=n[a];if(l.wn||!y.length)continue;const f=y.slice(),p=[];for(let u=0;u<h;u++){const x=c[u];x.parentIndex===a&&(p.push(f.length/2),f.push(...n[x.index]))}Lt(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: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),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
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=Math.max(0,h),s[n]===o)return n/(r-1);const a=s[n],f=s[n+1]-a,p=Math.max(0,(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,14 +11,14 @@ ${t}`);return e.documentElement}else return i}const Se="px",_e=90,Xt=["mm","cm",
11
11
  cy="${f[u+1]}"
12
12
  r="#r"
13
13
  fill="#dc3545"
14
- />`});const h=[o.x,o.y,n.x-o.x,n.y-o.y],a=Math.max(h[2],h[3])*.001;return`<svg
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
15
  width="${h[2]}"
16
16
  height="${h[3]}"
17
17
  viewBox="${h.join(" ")}"
18
18
  xmlns="http://www.w3.org/2000/svg"
19
19
  >
20
- ${s.replace(/#stroke-width/g,String(a))}
21
- ${r.replace(/#r/g,String(a))}
20
+ ${s.replace(/#stroke-width/g,String(l))}
21
+ ${r.replace(/#r/g,String(l))}
22
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
23
  viewBox="${t} ${e} ${s} ${r}"
24
24
  width="${s}px"
@@ -26,4 +26,4 @@ ${t}`);return e.documentElement}else return i}const Se="px",_e=90,Xt=["mm","cm",
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,...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 a=h.getContext("2d");return a&&(a.scale(e,e),a.translate(-r,-o),this.paths.forEach(l=>{l.drawTo(a,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,a=o-c,l=Pe(h),y=Pe(a);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=l[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=Lt,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=ae,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"})}));
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
@@ -2214,7 +2214,7 @@ function round(cx, cy, sx, sy, ex, ey, verts, clockwise) {
2214
2214
 
2215
2215
  class Curve {
2216
2216
  arcLengthDivision = 200;
2217
- _arcLengths;
2217
+ _lengths = [];
2218
2218
  getPointAt(u, output = new Vector2()) {
2219
2219
  return this.getPoint(this.getUToTMapping(u), output);
2220
2220
  }
@@ -2292,10 +2292,10 @@ class Curve {
2292
2292
  return lengths[lengths.length - 1];
2293
2293
  }
2294
2294
  getLengths() {
2295
- if (!this._arcLengths || this._arcLengths.length !== this.arcLengthDivision + 1) {
2295
+ if (this._lengths.length !== this.arcLengthDivision + 1) {
2296
2296
  this.updateLengths();
2297
2297
  }
2298
- return this._arcLengths;
2298
+ return this._lengths;
2299
2299
  }
2300
2300
  updateLengths() {
2301
2301
  const divisions = this.arcLengthDivision;
@@ -2306,7 +2306,7 @@ class Curve {
2306
2306
  arcLengths.push(sum);
2307
2307
  prev = current;
2308
2308
  }
2309
- this._arcLengths = arcLengths;
2309
+ this._lengths = arcLengths;
2310
2310
  }
2311
2311
  getUToTMapping(u, distance) {
2312
2312
  const lengths = this.getLengths();
@@ -2331,14 +2331,14 @@ class Curve {
2331
2331
  break;
2332
2332
  }
2333
2333
  }
2334
- i = high;
2334
+ i = Math.max(0, high);
2335
2335
  if (lengths[i] === targetLen) {
2336
2336
  return i / (lengthsLen - 1);
2337
2337
  }
2338
2338
  const before = lengths[i];
2339
2339
  const after = lengths[i + 1];
2340
2340
  const segmentLength = after - before;
2341
- const segmentFraction = (targetLen - before) / segmentLength;
2341
+ const segmentFraction = Math.max(0, (targetLen - before) / segmentLength);
2342
2342
  return (i + segmentFraction) / (lengthsLen - 1);
2343
2343
  }
2344
2344
  getTangent(t, output = new Vector2()) {
@@ -3004,13 +3004,19 @@ class CompositeCurve extends Curve {
3004
3004
  }
3005
3005
  return output;
3006
3006
  }
3007
+ getLengths() {
3008
+ if (this._lengths.length !== this.curves.length) {
3009
+ this.updateLengths();
3010
+ }
3011
+ return this._lengths;
3012
+ }
3007
3013
  updateLengths() {
3008
- const arcLengths = [];
3014
+ const lengths = [];
3009
3015
  for (let i = 0, sum = 0, len = this.curves.length; i < len; i++) {
3010
3016
  sum += this.curves[i].getLength();
3011
- arcLengths.push(sum);
3017
+ lengths.push(sum);
3012
3018
  }
3013
- this._arcLengths = arcLengths;
3019
+ this._lengths = lengths;
3014
3020
  }
3015
3021
  getControlPointRefs() {
3016
3022
  return this.curves.flatMap((curve) => curve.getControlPointRefs());
@@ -3735,9 +3741,11 @@ class Path2D extends CompositeCurve {
3735
3741
  return this;
3736
3742
  }
3737
3743
  addPath(path) {
3738
- const index = this.curves.findIndex((v) => v === this.currentCurve);
3739
- if (index > -1) {
3740
- 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
+ }
3741
3749
  }
3742
3750
  if (path instanceof Path2D) {
3743
3751
  this.curves.push(
@@ -3746,17 +3754,15 @@ class Path2D extends CompositeCurve {
3746
3754
  } else if (path.curves.length) {
3747
3755
  this.curves.push(path);
3748
3756
  }
3749
- this.curves.push(this.currentCurve);
3757
+ this.currentCurve = this.curves[this.curves.length - 1];
3750
3758
  return this;
3751
3759
  }
3752
3760
  closePath() {
3753
3761
  const startPoint = this.startPoint;
3754
- if (startPoint) {
3762
+ if (startPoint && this.currentCurve.curves.length) {
3755
3763
  this.currentCurve.closePath();
3756
- if (this.currentCurve.curves.length) {
3757
- this.currentCurve = new CurvePath().moveTo(startPoint.x, startPoint.y);
3758
- this.curves.push(this.currentCurve);
3759
- }
3764
+ this.currentCurve = new CurvePath().moveTo(startPoint.x, startPoint.y);
3765
+ this.curves.push(this.currentCurve);
3760
3766
  }
3761
3767
  return this;
3762
3768
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "modern-path2d",
3
3
  "type": "module",
4
- "version": "1.4.11",
4
+ "version": "1.4.13",
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",