modern-path2d 0.1.8 → 0.1.10

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.d.cts CHANGED
@@ -67,34 +67,41 @@ declare class BoundingBox {
67
67
 
68
68
  declare class CurvePath extends Curve {
69
69
  curves: Curve[];
70
+ startPoint?: Vector2;
70
71
  currentPoint: Vector2;
71
72
  autoClose: boolean;
72
73
  protected _cacheLengths: number[];
73
74
  constructor(points?: Vector2[]);
74
75
  addCurve(curve: Curve): this;
75
- closePath(): this;
76
- getPoint(position: number, output?: Vector2): Vector2;
76
+ addPoints(points: Vector2[]): this;
77
+ addCommands(commands: PathCommand[]): this;
78
+ addData(data: string): this;
79
+ getPoint(t: number, output?: Vector2): Vector2;
77
80
  getLength(): number;
78
81
  updateArcLengths(): void;
79
82
  getCurveLengths(): number[];
80
83
  getSpacedPoints(divisions?: number): Vector2[];
81
84
  getPoints(divisions?: number): Vector2[];
82
- setFromPoints(points: Vector2[]): this;
83
- bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): this;
84
- lineTo(x: number, y: number): this;
85
+ protected _setCurrentPoint(point: VectorLike): this;
86
+ closePath(): this;
85
87
  moveTo(x: number, y: number): this;
88
+ lineTo(x: number, y: number): this;
89
+ bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): this;
86
90
  quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): this;
91
+ arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, counterclockwise?: boolean): this;
92
+ relativeArc(x: number, y: number, radius: number, startAngle: number, endAngle: number, counterclockwise?: boolean): this;
93
+ arcTo(x1: number, y1: number, x2: number, y2: number, radius: number): this;
94
+ ellipse(x: number, y: number, radiusX: number, radiusY: number, rotation: number, startAngle: number, endAngle: number, counterclockwise?: boolean): this;
95
+ relativeEllipse(x: number, y: number, radiusX: number, radiusY: number, rotation: number, startAngle: number, endAngle: number, counterclockwise?: boolean): this;
87
96
  rect(x: number, y: number, w: number, h: number): this;
88
97
  splineThru(points: Vector2[]): this;
89
- arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, clockwise?: boolean): this;
90
- absarc(x: number, y: number, radius: number, startAngle: number, endAngle: number, clockwise?: boolean): this;
91
- ellipse(x: number, y: number, radiusX: number, radiusY: number, startAngle: number, endAngle: number, clockwise?: boolean, rotation?: number): this;
92
- absellipse(x: number, y: number, radiusX: number, radiusY: number, startAngle: number, endAngle: number, clockwise?: boolean, rotation?: number): this;
93
- getCommands(): PathCommand[];
98
+ transformPoint(cb: (point: Vector2) => void): this;
94
99
  getMinMax(min?: Vector2, max?: Vector2): {
95
100
  min: Vector2;
96
101
  max: Vector2;
97
102
  };
103
+ getBoundingBox(): BoundingBox;
104
+ getCommands(): PathCommand[];
98
105
  drawTo(ctx: CanvasRenderingContext2D): this;
99
106
  copy(source: CurvePath): this;
100
107
  }
@@ -106,6 +113,8 @@ declare class Path2D<T = any> {
106
113
  currentPath: CurvePath;
107
114
  paths: CurvePath[];
108
115
  userData?: T;
116
+ get startPoint(): Vector2 | undefined;
117
+ get currentPoint(): Vector2 | undefined;
109
118
  constructor(path?: Path2D | PathCommand[] | string);
110
119
  addPath(path: Path2D | CurvePath): this;
111
120
  closePath(): this;
@@ -262,11 +271,11 @@ declare class EllipseCurve extends Curve {
262
271
  center: Vector2;
263
272
  radiusX: number;
264
273
  radiusY: number;
274
+ rotation: number;
265
275
  startAngle: number;
266
276
  endAngle: number;
267
277
  clockwise: boolean;
268
- rotation: number;
269
- constructor(center?: Vector2, radiusX?: number, radiusY?: number, startAngle?: number, endAngle?: number, clockwise?: boolean, rotation?: number);
278
+ constructor(center?: Vector2, radiusX?: number, radiusY?: number, rotation?: number, startAngle?: number, endAngle?: number, clockwise?: boolean);
270
279
  getPoint(t: number, output?: Vector2): Vector2;
271
280
  getDivisions(divisions?: number): number;
272
281
  getCommands(): PathCommand[];
package/dist/index.d.mts CHANGED
@@ -67,34 +67,41 @@ declare class BoundingBox {
67
67
 
68
68
  declare class CurvePath extends Curve {
69
69
  curves: Curve[];
70
+ startPoint?: Vector2;
70
71
  currentPoint: Vector2;
71
72
  autoClose: boolean;
72
73
  protected _cacheLengths: number[];
73
74
  constructor(points?: Vector2[]);
74
75
  addCurve(curve: Curve): this;
75
- closePath(): this;
76
- getPoint(position: number, output?: Vector2): Vector2;
76
+ addPoints(points: Vector2[]): this;
77
+ addCommands(commands: PathCommand[]): this;
78
+ addData(data: string): this;
79
+ getPoint(t: number, output?: Vector2): Vector2;
77
80
  getLength(): number;
78
81
  updateArcLengths(): void;
79
82
  getCurveLengths(): number[];
80
83
  getSpacedPoints(divisions?: number): Vector2[];
81
84
  getPoints(divisions?: number): Vector2[];
82
- setFromPoints(points: Vector2[]): this;
83
- bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): this;
84
- lineTo(x: number, y: number): this;
85
+ protected _setCurrentPoint(point: VectorLike): this;
86
+ closePath(): this;
85
87
  moveTo(x: number, y: number): this;
88
+ lineTo(x: number, y: number): this;
89
+ bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): this;
86
90
  quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): this;
91
+ arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, counterclockwise?: boolean): this;
92
+ relativeArc(x: number, y: number, radius: number, startAngle: number, endAngle: number, counterclockwise?: boolean): this;
93
+ arcTo(x1: number, y1: number, x2: number, y2: number, radius: number): this;
94
+ ellipse(x: number, y: number, radiusX: number, radiusY: number, rotation: number, startAngle: number, endAngle: number, counterclockwise?: boolean): this;
95
+ relativeEllipse(x: number, y: number, radiusX: number, radiusY: number, rotation: number, startAngle: number, endAngle: number, counterclockwise?: boolean): this;
87
96
  rect(x: number, y: number, w: number, h: number): this;
88
97
  splineThru(points: Vector2[]): this;
89
- arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, clockwise?: boolean): this;
90
- absarc(x: number, y: number, radius: number, startAngle: number, endAngle: number, clockwise?: boolean): this;
91
- ellipse(x: number, y: number, radiusX: number, radiusY: number, startAngle: number, endAngle: number, clockwise?: boolean, rotation?: number): this;
92
- absellipse(x: number, y: number, radiusX: number, radiusY: number, startAngle: number, endAngle: number, clockwise?: boolean, rotation?: number): this;
93
- getCommands(): PathCommand[];
98
+ transformPoint(cb: (point: Vector2) => void): this;
94
99
  getMinMax(min?: Vector2, max?: Vector2): {
95
100
  min: Vector2;
96
101
  max: Vector2;
97
102
  };
103
+ getBoundingBox(): BoundingBox;
104
+ getCommands(): PathCommand[];
98
105
  drawTo(ctx: CanvasRenderingContext2D): this;
99
106
  copy(source: CurvePath): this;
100
107
  }
@@ -106,6 +113,8 @@ declare class Path2D<T = any> {
106
113
  currentPath: CurvePath;
107
114
  paths: CurvePath[];
108
115
  userData?: T;
116
+ get startPoint(): Vector2 | undefined;
117
+ get currentPoint(): Vector2 | undefined;
109
118
  constructor(path?: Path2D | PathCommand[] | string);
110
119
  addPath(path: Path2D | CurvePath): this;
111
120
  closePath(): this;
@@ -262,11 +271,11 @@ declare class EllipseCurve extends Curve {
262
271
  center: Vector2;
263
272
  radiusX: number;
264
273
  radiusY: number;
274
+ rotation: number;
265
275
  startAngle: number;
266
276
  endAngle: number;
267
277
  clockwise: boolean;
268
- rotation: number;
269
- constructor(center?: Vector2, radiusX?: number, radiusY?: number, startAngle?: number, endAngle?: number, clockwise?: boolean, rotation?: number);
278
+ constructor(center?: Vector2, radiusX?: number, radiusY?: number, rotation?: number, startAngle?: number, endAngle?: number, clockwise?: boolean);
270
279
  getPoint(t: number, output?: Vector2): Vector2;
271
280
  getDivisions(divisions?: number): number;
272
281
  getCommands(): PathCommand[];
package/dist/index.d.ts CHANGED
@@ -67,34 +67,41 @@ declare class BoundingBox {
67
67
 
68
68
  declare class CurvePath extends Curve {
69
69
  curves: Curve[];
70
+ startPoint?: Vector2;
70
71
  currentPoint: Vector2;
71
72
  autoClose: boolean;
72
73
  protected _cacheLengths: number[];
73
74
  constructor(points?: Vector2[]);
74
75
  addCurve(curve: Curve): this;
75
- closePath(): this;
76
- getPoint(position: number, output?: Vector2): Vector2;
76
+ addPoints(points: Vector2[]): this;
77
+ addCommands(commands: PathCommand[]): this;
78
+ addData(data: string): this;
79
+ getPoint(t: number, output?: Vector2): Vector2;
77
80
  getLength(): number;
78
81
  updateArcLengths(): void;
79
82
  getCurveLengths(): number[];
80
83
  getSpacedPoints(divisions?: number): Vector2[];
81
84
  getPoints(divisions?: number): Vector2[];
82
- setFromPoints(points: Vector2[]): this;
83
- bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): this;
84
- lineTo(x: number, y: number): this;
85
+ protected _setCurrentPoint(point: VectorLike): this;
86
+ closePath(): this;
85
87
  moveTo(x: number, y: number): this;
88
+ lineTo(x: number, y: number): this;
89
+ bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): this;
86
90
  quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): this;
91
+ arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, counterclockwise?: boolean): this;
92
+ relativeArc(x: number, y: number, radius: number, startAngle: number, endAngle: number, counterclockwise?: boolean): this;
93
+ arcTo(x1: number, y1: number, x2: number, y2: number, radius: number): this;
94
+ ellipse(x: number, y: number, radiusX: number, radiusY: number, rotation: number, startAngle: number, endAngle: number, counterclockwise?: boolean): this;
95
+ relativeEllipse(x: number, y: number, radiusX: number, radiusY: number, rotation: number, startAngle: number, endAngle: number, counterclockwise?: boolean): this;
87
96
  rect(x: number, y: number, w: number, h: number): this;
88
97
  splineThru(points: Vector2[]): this;
89
- arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, clockwise?: boolean): this;
90
- absarc(x: number, y: number, radius: number, startAngle: number, endAngle: number, clockwise?: boolean): this;
91
- ellipse(x: number, y: number, radiusX: number, radiusY: number, startAngle: number, endAngle: number, clockwise?: boolean, rotation?: number): this;
92
- absellipse(x: number, y: number, radiusX: number, radiusY: number, startAngle: number, endAngle: number, clockwise?: boolean, rotation?: number): this;
93
- getCommands(): PathCommand[];
98
+ transformPoint(cb: (point: Vector2) => void): this;
94
99
  getMinMax(min?: Vector2, max?: Vector2): {
95
100
  min: Vector2;
96
101
  max: Vector2;
97
102
  };
103
+ getBoundingBox(): BoundingBox;
104
+ getCommands(): PathCommand[];
98
105
  drawTo(ctx: CanvasRenderingContext2D): this;
99
106
  copy(source: CurvePath): this;
100
107
  }
@@ -106,6 +113,8 @@ declare class Path2D<T = any> {
106
113
  currentPath: CurvePath;
107
114
  paths: CurvePath[];
108
115
  userData?: T;
116
+ get startPoint(): Vector2 | undefined;
117
+ get currentPoint(): Vector2 | undefined;
109
118
  constructor(path?: Path2D | PathCommand[] | string);
110
119
  addPath(path: Path2D | CurvePath): this;
111
120
  closePath(): this;
@@ -262,11 +271,11 @@ declare class EllipseCurve extends Curve {
262
271
  center: Vector2;
263
272
  radiusX: number;
264
273
  radiusY: number;
274
+ rotation: number;
265
275
  startAngle: number;
266
276
  endAngle: number;
267
277
  clockwise: boolean;
268
- rotation: number;
269
- constructor(center?: Vector2, radiusX?: number, radiusY?: number, startAngle?: number, endAngle?: number, clockwise?: boolean, rotation?: number);
278
+ constructor(center?: Vector2, radiusX?: number, radiusY?: number, rotation?: number, startAngle?: number, endAngle?: number, clockwise?: boolean);
270
279
  getPoint(t: number, output?: Vector2): Vector2;
271
280
  getDivisions(divisions?: number): number;
272
281
  getCommands(): PathCommand[];
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- (function(d,l){typeof exports=="object"&&typeof module<"u"?l(exports):typeof define=="function"&&define.amd?define(["exports"],l):(d=typeof globalThis<"u"?globalThis:d||self,l(d.modernPath2d={}))})(this,function(d){"use strict";var jt=Object.defineProperty;var Zt=(d,l,v)=>l in d?jt(d,l,{enumerable:!0,configurable:!0,writable:!0,value:v}):d[l]=v;var T=(d,l,v)=>Zt(d,typeof l!="symbol"?l+"":l,v);class l{constructor(e=0,t=0){this.x=e,this.y=t}static get MAX(){return new l(1/0,1/0)}static get MIN(){return new l(-1/0,-1/0)}set(e,t){return this.x=e,this.y=t,this}add(e){return this.x+=e.x,this.y+=e.y,this}sub(e){return this.x-=e.x,this.y-=e.y,this}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){const t=this.x-e.x,s=this.y-e.y;return t*t+s*s}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}multiplyScalar(e){return this.x*=e,this.y*=e,this}divideScalar(e){return this.multiplyScalar(1/e)}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this}normalize(){return this.divideScalar(this.length()||1)}lerpVectors(e,t,s){return this.x=e.x+(t.x-e.x)*s,this.y=e.y+(t.y-e.y)*s,this}equals(e){return this.x===e.x&&this.y===e.y}applyMatrix3(e){const t=this.x,s=this.y,n=e.elements;return this.x=n[0]*t+n[3]*s+n[6],this.y=n[1]*t+n[4]*s+n[7],this}copy(e){return this.x=e.x,this.y=e.y,this}clone(){return new l(this.x,this.y)}}class v{constructor(e=0,t=0,s=0,n=0){this.left=e,this.top=t,this.width=s,this.height=n}get x(){return this.left}set x(e){this.left=e}get y(){return this.top}set y(e){this.top=e}get right(){return this.left+this.width}get bottom(){return this.top+this.height}static from(...e){const t=e[0],s=e.slice(1).reduce((n,o)=>(n.left=Math.min(n.left,o.left),n.top=Math.min(n.top,o.top),n.right=Math.max(n.right,o.right),n.bottom=Math.max(n.bottom,o.bottom),n),{left:(t==null?void 0:t.left)??0,top:(t==null?void 0:t.top)??0,right:(t==null?void 0:t.right)??0,bottom:(t==null?void 0:t.bottom)??0});return new v(s.left,s.top,s.right-s.left,s.bottom-s.top)}translate(e,t){return this.left+=e,this.top+=t,this}getCenterPoint(){return new l((this.left+this.right)/2,(this.top+this.bottom)/2)}clone(){return new v(this.left,this.top,this.width,this.height)}toArray(){return[this.left,this.top,this.width,this.height]}}class C{constructor(e=1,t=0,s=0,n=0,o=1,h=0,a=0,c=0,r=1){T(this,"elements",[]);this.set(e,t,s,n,o,h,a,c,r)}set(e,t,s,n,o,h,a,c,r){const u=this.elements;return u[0]=e,u[1]=n,u[2]=a,u[3]=t,u[4]=o,u[5]=c,u[6]=s,u[7]=h,u[8]=r,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(e){const t=this.elements,s=e.elements;return t[0]=s[0],t[1]=s[1],t[2]=s[2],t[3]=s[3],t[4]=s[4],t[5]=s[5],t[6]=s[6],t[7]=s[7],t[8]=s[8],this}multiply(e){return this.multiplyMatrices(this,e)}premultiply(e){return this.multiplyMatrices(e,this)}multiplyMatrices(e,t){const s=e.elements,n=t.elements,o=this.elements,h=s[0],a=s[3],c=s[6],r=s[1],u=s[4],y=s[7],g=s[2],p=s[5],f=s[8],x=n[0],M=n[3],w=n[6],E=n[1],b=n[4],k=n[7],N=n[2],$=n[5],z=n[8];return o[0]=h*x+a*E+c*N,o[3]=h*M+a*b+c*$,o[6]=h*w+a*k+c*z,o[1]=r*x+u*E+y*N,o[4]=r*M+u*b+y*$,o[7]=r*w+u*k+y*z,o[2]=g*x+p*E+f*N,o[5]=g*M+p*b+f*$,o[8]=g*w+p*k+f*z,this}invert(){const e=this.elements,t=e[0],s=e[1],n=e[2],o=e[3],h=e[4],a=e[5],c=e[6],r=e[7],u=e[8],y=u*h-a*r,g=a*c-u*o,p=r*o-h*c,f=t*y+s*g+n*p;if(f===0)return this.set(0,0,0,0,0,0,0,0,0);const x=1/f;return e[0]=y*x,e[1]=(n*r-u*s)*x,e[2]=(a*s-n*h)*x,e[3]=g*x,e[4]=(u*t-n*c)*x,e[5]=(n*o-a*t)*x,e[6]=p*x,e[7]=(s*c-r*t)*x,e[8]=(h*t-s*o)*x,this}transpose(){let e;const t=this.elements;return e=t[1],t[1]=t[3],t[3]=e,e=t[2],t[2]=t[6],t[6]=e,e=t[5],t[5]=t[7],t[7]=e,this}scale(e,t){return this.premultiply(U.makeScale(e,t)),this}rotate(e){return this.premultiply(U.makeRotation(-e)),this}translate(e,t){return this.premultiply(U.makeTranslation(e,t)),this}makeTranslation(e,t){return this.set(1,0,e,0,1,t,0,0,1),this}makeRotation(e){const t=Math.cos(e),s=Math.sin(e);return this.set(t,-s,0,s,t,0,0,0,1),this}makeScale(e,t){return this.set(e,0,0,0,t,0,0,0,1),this}fromArray(e,t=0){for(let s=0;s<9;s++)this.elements[s]=e[s+t];return this}clone(){return new this.constructor().fromArray(this.elements)}}const U=new C;function W(i,e,t,s){const n=i*t+e*s,o=Math.sqrt(i*i+e*e)*Math.sqrt(t*t+s*s);let h=Math.acos(Math.max(-1,Math.min(1,n/o)));return i*s-e*t<0&&(h=-h),h}function xt(i,e,t,s,n,o,h,a){if(e===0||t===0){i.lineTo(a.x,a.y);return}s=s*Math.PI/180,e=Math.abs(e),t=Math.abs(t);const c=(h.x-a.x)/2,r=(h.y-a.y)/2,u=Math.cos(s)*c+Math.sin(s)*r,y=-Math.sin(s)*c+Math.cos(s)*r;let g=e*e,p=t*t;const f=u*u,x=y*y,M=f/g+x/p;if(M>1){const pt=Math.sqrt(M);e=pt*e,t=pt*t,g=e*e,p=t*t}const w=g*x+p*f,E=(g*p-w)/w;let b=Math.sqrt(Math.max(0,E));n===o&&(b=-b);const k=b*e*y/t,N=-b*t*u/e,$=Math.cos(s)*k-Math.sin(s)*N+(h.x+a.x)/2,z=Math.sin(s)*k+Math.cos(s)*N+(h.y+a.y)/2,_=W(1,0,(u-k)/e,(y-N)/t),Q=W((u-k)/e,(y-N)/t,(-u-k)/e,(-y-N)/t)%(Math.PI*2);i.currentPath.absellipse($,z,e,t,_,_+Q,o===0,s)}function q(i,e){return i-(e-i)}function Mt(i,e){const t=new l,s=new l,n=new l;let o=!0,h=!1;for(let a=0,c=i.length;a<c;a++){const r=i[a];if(o&&(h=!0,o=!1),r.type==="m"||r.type==="M")r.type==="m"?(t.x+=r.x,t.y+=r.y):(t.x=r.x,t.y=r.y),s.x=t.x,s.y=t.y,e.moveTo(t.x,t.y),n.copy(t);else if(r.type==="h"||r.type==="H")r.type==="h"?t.x+=r.x:t.x=r.x,s.x=t.x,s.y=t.y,e.lineTo(t.x,t.y),h&&n.copy(t);else if(r.type==="v"||r.type==="V")r.type==="v"?t.y+=r.y:t.y=r.y,s.x=t.x,s.y=t.y,e.lineTo(t.x,t.y),h&&n.copy(t);else if(r.type==="l"||r.type==="L")r.type==="l"?(t.x+=r.x,t.y+=r.y):(t.x=r.x,t.y=r.y),s.x=t.x,s.y=t.y,e.lineTo(t.x,t.y),h&&n.copy(t);else if(r.type==="c"||r.type==="C")r.type==="c"?(e.bezierCurveTo(t.x+r.x1,t.y+r.y1,t.x+r.x2,t.y+r.y2,t.x+r.x,t.y+r.y),s.x=t.x+r.x2,s.y=t.y+r.y2,t.x+=r.x,t.y+=r.y):(e.bezierCurveTo(r.x1,r.y1,r.x2,r.y2,r.x,r.y),s.x=r.x2,s.y=r.y2,t.x=r.x,t.y=r.y),h&&n.copy(t);else if(r.type==="s"||r.type==="S")r.type==="s"?(e.bezierCurveTo(q(t.x,s.x),q(t.y,s.y),t.x+r.x2,t.y+r.y2,t.x+r.x,t.y+r.y),s.x=t.x+r.x2,s.y=t.y+r.y2,t.x+=r.x,t.y+=r.y):(e.bezierCurveTo(q(t.x,s.x),q(t.y,s.y),r.x2,r.y2,r.x,r.y),s.x=r.x2,s.y=r.y2,t.x=r.x,t.y=r.y),h&&n.copy(t);else if(r.type==="q"||r.type==="Q")r.type==="q"?(e.quadraticCurveTo(t.x+r.x1,t.y+r.y1,t.x+r.x,t.y+r.y),s.x=t.x+r.x1,s.y=t.y+r.y1,t.x+=r.x,t.y+=r.y):(e.quadraticCurveTo(r.x1,r.y1,r.x,r.y),s.x=r.x1,s.y=r.y1,t.x=r.x,t.y=r.y),h&&n.copy(t);else if(r.type==="t"||r.type==="T"){const u=q(t.x,s.x),y=q(t.y,s.y);s.x=u,s.y=y,r.type==="t"?(e.quadraticCurveTo(u,y,t.x+r.x,t.y+r.y),t.x+=r.x,t.y+=r.y):(e.quadraticCurveTo(u,y,r.x,r.y),t.x=r.x,t.y=r.y),h&&n.copy(t)}else if(r.type==="a"||r.type==="A"){if(r.type==="a"){if(r.x===0&&r.y===0)continue;t.x+=r.x,t.y+=r.y}else{if(r.x===t.x&&r.y===t.y)continue;t.x=r.x,t.y=r.y}const u=t.clone();s.x=t.x,s.y=t.y,xt(e,r.rx,r.ry,r.angle,r.largeArcFlag,r.sweepFlag,u,t),h&&n.copy(t)}else r.type==="z"||r.type==="Z"?(e.currentPath.autoClose=!0,e.currentPath.curves.length>0&&(t.copy(n),e.currentPath.currentPoint.copy(t),o=!0)):console.warn("Unsupported commands",r);h=!1}}const P={SEPARATOR:/[ \t\r\n,.\-+]/,WHITESPACE:/[ \t\r\n]/,DIGIT:/\d/,SIGN:/[-+]/,POINT:/\./,COMMA:/,/,EXP:/e/i,FLAGS:/[01]/};function S(i,e,t=0){let a=0,c=!0,r="",u="";const y=[];function g(M,w,E){const b=new SyntaxError(`Unexpected character "${M}" at index ${w}.`);throw b.partial=E,b}function p(){r!==""&&(u===""?y.push(Number(r)):y.push(Number(r)*10**Number(u))),r="",u=""}let f;const x=i.length;for(let M=0;M<x;M++){if(f=i[M],Array.isArray(e)&&e.includes(y.length%t)&&P.FLAGS.test(f)){a=1,r=f,p();continue}if(a===0){if(P.WHITESPACE.test(f))continue;if(P.DIGIT.test(f)||P.SIGN.test(f)){a=1,r=f;continue}if(P.POINT.test(f)){a=2,r=f;continue}P.COMMA.test(f)&&(c&&g(f,M,y),c=!0)}if(a===1){if(P.DIGIT.test(f)){r+=f;continue}if(P.POINT.test(f)){r+=f,a=2;continue}if(P.EXP.test(f)){a=3;continue}P.SIGN.test(f)&&r.length===1&&P.SIGN.test(r[0])&&g(f,M,y)}if(a===2){if(P.DIGIT.test(f)){r+=f;continue}if(P.EXP.test(f)){a=3;continue}P.POINT.test(f)&&r[r.length-1]==="."&&g(f,M,y)}if(a===3){if(P.DIGIT.test(f)){u+=f;continue}if(P.SIGN.test(f)){if(u===""){u+=f;continue}u.length===1&&P.SIGN.test(u)&&g(f,M,y)}}P.WHITESPACE.test(f)?(p(),a=0,c=!1):P.COMMA.test(f)?(p(),a=0,c=!0):P.SIGN.test(f)?(p(),a=1,r=f):P.POINT.test(f)?(p(),a=2,r=f):g(f,M,y)}return p(),y}function dt(i){switch(i.type){case"m":case"M":return`${i.type} ${i.x} ${i.y}`;case"h":case"H":return`${i.type} ${i.x}`;case"v":case"V":return`${i.type} ${i.y}`;case"l":case"L":return`${i.type} ${i.x} ${i.y}`;case"c":case"C":return`${i.type} ${i.x1} ${i.y1} ${i.x2} ${i.y2} ${i.x} ${i.y}`;case"s":case"S":return`${i.type} ${i.x2} ${i.y2} ${i.x} ${i.y}`;case"q":case"Q":return`${i.type} ${i.x1} ${i.y1} ${i.x} ${i.y}`;case"t":case"T":return`${i.type} ${i.x} ${i.y}`;case"a":case"A":return`${i.type} ${i.rx} ${i.ry} ${i.angle} ${i.largeArcFlag} ${i.sweepFlag} ${i.x} ${i.y}`;case"z":case"Z":return i.type;default:return""}}function mt(i){let e="";for(let t=0,s=i.length;t<s;t++)e+=`${dt(i[t])} `;return e}const Pt=/[a-df-z][^a-df-z]*/gi;function Tt(i){const e=[],t=i.match(Pt);if(!t)return e;for(let s=0,n=t.length;s<n;s++){const o=t[s],h=o.charAt(0),a=o.slice(1).trim();let c;switch(h){case"m":case"M":c=S(a);for(let r=0,u=c.length;r<u;r+=2)r===0?e.push({type:h,x:c[r],y:c[r+1]}):e.push({type:h==="m"?"l":"L",x:c[r],y:c[r+1]});break;case"h":case"H":c=S(a);for(let r=0,u=c.length;r<u;r++)e.push({type:h,x:c[r]});break;case"v":case"V":c=S(a);for(let r=0,u=c.length;r<u;r++)e.push({type:h,y:c[r]});break;case"l":case"L":c=S(a);for(let r=0,u=c.length;r<u;r+=2)e.push({type:h,x:c[r],y:c[r+1]});break;case"c":case"C":c=S(a);for(let r=0,u=c.length;r<u;r+=6)e.push({type:h,x1:c[r],y1:c[r+1],x2:c[r+2],y2:c[r+3],x:c[r+4],y:c[r+5]});break;case"s":case"S":c=S(a);for(let r=0,u=c.length;r<u;r+=4)e.push({type:h,x2:c[r],y2:c[r+1],x:c[r+2],y:c[r+3]});break;case"q":case"Q":c=S(a);for(let r=0,u=c.length;r<u;r+=4)e.push({type:h,x1:c[r],y1:c[r+1],x:c[r+2],y:c[r+3]});break;case"t":case"T":c=S(a);for(let r=0,u=c.length;r<u;r+=2)e.push({type:h,x:c[r],y:c[r+1]});break;case"a":case"A":c=S(a,[3,4],7);for(let r=0,u=c.length;r<u;r+=7)e.push({type:h,rx:c[r],ry:c[r+1],angle:c[r+2],largeArcFlag:c[r+3],sweepFlag:c[r+4],x:c[r+5],y:c[r+6]});break;case"z":case"Z":e.push({type:h});break;default:console.warn(o)}}return e}class A{constructor(){T(this,"arcLengthDivisions",200);T(this,"_cacheArcLengths");T(this,"_needsUpdate",!1)}getPointAt(e,t=new l){return this.getPoint(this.getUtoTmapping(e),t)}getPoints(e=5){const t=[];for(let s=0;s<=e;s++)t.push(this.getPoint(s/e));return t}getSpacedPoints(e=5){const t=[];for(let s=0;s<=e;s++)t.push(this.getPointAt(s/e));return t}getLength(){const e=this.getLengths();return e[e.length-1]}getLengths(e=this.arcLengthDivisions){if(this._cacheArcLengths&&this._cacheArcLengths.length===e+1&&!this._needsUpdate)return this._cacheArcLengths;this._needsUpdate=!1;const t=[];let s,n=this.getPoint(0),o=0;t.push(0);for(let h=1;h<=e;h++)s=this.getPoint(h/e),o+=s.distanceTo(n),t.push(o),n=s;return this._cacheArcLengths=t,t}updateArcLengths(){this._needsUpdate=!0,this.getLengths()}getUtoTmapping(e,t){const s=this.getLengths();let n=0;const o=s.length;let h;t?h=t:h=e*s[o-1];let a=0,c=o-1,r;for(;a<=c;)if(n=Math.floor(a+(c-a)/2),r=s[n]-h,r<0)a=n+1;else if(r>0)c=n-1;else{c=n;break}if(n=c,s[n]===h)return n/(o-1);const u=s[n],g=s[n+1]-u,p=(h-u)/g;return(n+p)/(o-1)}getTangent(e,t=new l){const n=Math.max(0,e-1e-4),o=Math.min(1,e+1e-4);return t.copy(this.getPoint(o).sub(this.getPoint(n)).normalize())}getTangentAt(e,t){return this.getTangent(this.getUtoTmapping(e),t)}transformPoint(e){return this}transform(e){return this.transformPoint(t=>t.applyMatrix3(e)),this}getDivisions(e){return e}getMinMax(e=l.MAX,t=l.MIN){return this.getPoints().forEach(s=>{e.x=Math.min(e.x,s.x),e.y=Math.min(e.y,s.y),t.x=Math.max(t.x,s.x),t.y=Math.max(t.y,s.y)}),{min:e,max:t}}getBoundingBox(){const{min:e,max:t}=this.getMinMax();return new v(e.x,e.y,t.x-e.x,t.y-e.y)}getCommands(){return this.getPoints().map((e,t)=>t===0?{type:"M",x:e.x,y:e.y}:{type:"L",x:e.x,y:e.y})}getData(){return mt(this.getCommands())}drawTo(e){return this}copy(e){return this.arcLengthDivisions=e.arcLengthDivisions,this}clone(){return new this.constructor().copy(this)}}class O extends A{constructor(e,t,s=0,n=Math.PI*2){super(),this.center=e,this.radius=t,this.start=s,this.end=n}getPoint(e){const{radius:t,center:s}=this;return s.clone().add(this.getNormal(e).clone().multiplyScalar(t))}getTangent(e){const{x:t,y:s}=this.getNormal(e);return new l(-s,t)}getNormal(e){const{start:t,end:s}=this,n=e*(s-t)+t-.5*Math.PI;return new l(Math.cos(n),Math.sin(n))}transformPoint(e){return e(this.center),this}getMinMax(e=l.MAX,t=l.MIN){return e.x=Math.min(e.x,this.center.x-this.radius),e.y=Math.min(e.y,this.center.y-this.radius),t.x=Math.max(t.x,this.center.x+this.radius),t.y=Math.max(t.y,this.center.y+this.radius),{min:e,max:t}}}function H(i,e,t,s,n){const o=(s-e)*.5,h=(n-t)*.5,a=i*i,c=i*a;return(2*t-2*s+o+h)*c+(-3*t+3*s-2*o-h)*a+o*i+t}function wt(i,e){const t=1-i;return t*t*e}function bt(i,e){return 2*(1-i)*i*e}function vt(i,e){return i*i*e}function V(i,e,t,s){return wt(i,e)+bt(i,t)+vt(i,s)}function Ct(i,e){const t=1-i;return t*t*t*e}function At(i,e){const t=1-i;return 3*t*t*i*e}function It(i,e){return 3*(1-i)*i*i*e}function kt(i,e){return i*i*i*e}function j(i,e,t,s,n){return Ct(i,e)+At(i,t)+It(i,s)+kt(i,n)}class Z extends A{constructor(e=new l,t=new l,s=new l,n=new l){super(),this.start=e,this.startControl=t,this.endControl=s,this.end=n}getPoint(e,t=new l){const{start:s,startControl:n,endControl:o,end:h}=this;return t.set(j(e,s.x,n.x,o.x,h.x),j(e,s.y,n.y,o.y,h.y)),t}transformPoint(e){return e(this.start),e(this.startControl),e(this.endControl),e(this.end),this}getMinMax(e=l.MAX,t=l.MIN){const{start:s,startControl:n,endControl:o,end:h}=this;return e.x=Math.min(e.x,s.x,n.x,o.x,h.x),e.y=Math.min(e.y,s.y,n.y,o.y,h.y),t.x=Math.max(t.x,s.x,n.x,o.x,h.x),t.y=Math.max(t.y,s.y,n.y,o.y,h.y),{min:e,max:t}}getCommands(){const{start:e,startControl:t,endControl:s,end:n}=this;return[{type:"M",x:e.x,y:e.y},{type:"C",x1:t.x,y1:t.y,x2:s.x,y2:s.y,x:n.x,y:n.y}]}drawTo(e){const{startControl:t,endControl:s,end:n}=this;return e.bezierCurveTo(t.x,t.y,s.x,s.y,n.x,n.y),this}copy(e){return super.copy(e),this.start.copy(e.start),this.startControl.copy(e.startControl),this.endControl.copy(e.endControl),this.end.copy(e.end),this}}const Nt=new C,J=new C,K=new C,R=new l;class tt extends A{constructor(e=new l,t=1,s=1,n=0,o=Math.PI*2,h=!1,a=0){super(),this.center=e,this.radiusX=t,this.radiusY=s,this.startAngle=n,this.endAngle=o,this.clockwise=h,this.rotation=a}getPoint(e,t=new l){const s=Math.PI*2;let n=this.endAngle-this.startAngle;const o=Math.abs(n)<Number.EPSILON;for(;n<0;)n+=s;for(;n>s;)n-=s;n<Number.EPSILON&&(o?n=0:n=s),this.clockwise&&!o&&(n===s?n=-s:n=n-s);const h=this.startAngle+e*n;let a=this.center.x+this.radiusX*Math.cos(h),c=this.center.y+this.radiusY*Math.sin(h);if(this.rotation!==0){const r=Math.cos(this.rotation),u=Math.sin(this.rotation),y=a-this.center.x,g=c-this.center.y;a=y*r-g*u+this.center.x,c=y*u+g*r+this.center.y}return t.set(a,c)}getDivisions(e=12){return e*2}getCommands(){const{center:e,radiusX:t,radiusY:s,startAngle:n,endAngle:o,clockwise:h,rotation:a}=this,{x:c,y:r}=e,u=c+t*Math.cos(n)*Math.cos(a)-s*Math.sin(n)*Math.sin(a),y=r+t*Math.cos(n)*Math.sin(a)+s*Math.sin(n)*Math.cos(a),g=Math.abs(n-o),p=g>Math.PI?1:0,f=h?1:0,x=a*180/Math.PI;if(g>=2*Math.PI){const M=n+Math.PI,w=c+t*Math.cos(M)*Math.cos(a)-s*Math.sin(M)*Math.sin(a),E=r+t*Math.cos(M)*Math.sin(a)+s*Math.sin(M)*Math.cos(a);return[{type:"M",x:u,y},{type:"A",rx:t,ry:s,angle:x,largeArcFlag:0,sweepFlag:f,x:w,y:E},{type:"A",rx:t,ry:s,angle:x,largeArcFlag:0,sweepFlag:f,x:u,y}]}else{const M=c+t*Math.cos(o)*Math.cos(a)-s*Math.sin(o)*Math.sin(a),w=r+t*Math.cos(o)*Math.sin(a)+s*Math.sin(o)*Math.cos(a);return[{type:"M",x:u,y},{type:"A",rx:t,ry:s,angle:x,largeArcFlag:p,sweepFlag:f,x:M,y:w}]}}drawTo(e){const{center:t,radiusX:s,radiusY:n,rotation:o,startAngle:h,endAngle:a,clockwise:c}=this;return e.ellipse(t.x,t.y,s,n,o,h,a,!c),this}transform(e){return R.set(this.center.x,this.center.y),R.applyMatrix3(e),this.center.x=R.x,this.center.y=R.y,Et(e)?St(this,e):Lt(this,e),this}transformPoint(e){return e(this.center),this}getMinMax(e=l.MAX,t=l.MIN){const{center:s,radiusX:n,radiusY:o,rotation:h}=this,{x:a,y:c}=s,r=Math.cos(h),u=Math.sin(h),y=Math.sqrt(n*n*r*r+o*o*u*u),g=Math.sqrt(n*n*u*u+o*o*r*r);return e.x=Math.min(e.x,a-y),e.y=Math.min(e.y,c-g),t.x=Math.max(t.x,a+y),t.y=Math.max(t.y,c+g),{min:e,max:t}}copy(e){return super.copy(e),this.center.x=e.center.x,this.center.y=e.center.y,this.radiusX=e.radiusX,this.radiusY=e.radiusY,this.startAngle=e.startAngle,this.endAngle=e.endAngle,this.clockwise=e.clockwise,this.rotation=e.rotation,this}}function St(i,e){const t=i.radiusX,s=i.radiusY,n=Math.cos(i.rotation),o=Math.sin(i.rotation),h=new l(t*n,t*o),a=new l(-s*o,s*n),c=h.applyMatrix3(e),r=a.applyMatrix3(e),u=Nt.set(c.x,r.x,0,c.y,r.y,0,0,0,1),y=J.copy(u).invert(),f=K.copy(y).transpose().multiply(y).elements,x=$t(f[0],f[1],f[4]),M=Math.sqrt(x.rt1),w=Math.sqrt(x.rt2);if(i.radiusX=1/M,i.radiusY=1/w,i.rotation=Math.atan2(x.sn,x.cs),!((i.endAngle-i.startAngle)%(2*Math.PI)<Number.EPSILON)){const b=J.set(M,0,0,0,w,0,0,0,1),k=K.set(x.cs,x.sn,0,-x.sn,x.cs,0,0,0,1),N=b.multiply(k).multiply(u),$=z=>{const{x:_,y:Q}=new l(Math.cos(z),Math.sin(z)).applyMatrix3(N);return Math.atan2(Q,_)};i.startAngle=$(i.startAngle),i.endAngle=$(i.endAngle),et(e)&&(i.clockwise=!i.clockwise)}}function Lt(i,e){const t=st(e),s=nt(e);i.radiusX*=t,i.radiusY*=s;const n=t>Number.EPSILON?Math.atan2(e.elements[1],e.elements[0]):Math.atan2(-e.elements[3],e.elements[4]);i.rotation+=n,et(e)&&(i.startAngle*=-1,i.endAngle*=-1,i.clockwise=!i.clockwise)}function et(i){const e=i.elements;return e[0]*e[4]-e[1]*e[3]<0}function Et(i){const e=i.elements,t=e[0]*e[3]+e[1]*e[4];if(t===0)return!1;const s=st(i),n=nt(i);return Math.abs(t/(s*n))>Number.EPSILON}function st(i){const e=i.elements;return Math.sqrt(e[0]*e[0]+e[1]*e[1])}function nt(i){const e=i.elements;return Math.sqrt(e[3]*e[3]+e[4]*e[4])}function $t(i,e,t){let s,n,o,h,a;const c=i+t,r=i-t,u=Math.sqrt(r*r+4*e*e);return c>0?(s=.5*(c+u),a=1/s,n=i*a*t-e*a*e):c<0?n=.5*(c-u):(s=.5*u,n=-.5*u),r>0?o=r+u:o=r-u,Math.abs(o)>2*Math.abs(e)?(a=-2*e/o,h=1/Math.sqrt(1+a*a),o=a*h):Math.abs(e)===0?(o=1,h=0):(a=-.5*o/e,o=1/Math.sqrt(1+a*a),h=a*o),r>0&&(a=o,o=-h,h=a),{rt1:s,rt2:n,cs:o,sn:h}}class D extends A{constructor(e=new l,t=new l){super(),this.start=e,this.end=t}getPoint(e,t=new l){return e===1?t.copy(this.end):t.copy(this.end).sub(this.start).multiplyScalar(e).add(this.start),t}getPointAt(e,t=new l){return this.getPoint(e,t)}getTangent(e,t=new l){return t.subVectors(this.end,this.start).normalize()}getTangentAt(e,t=new l){return this.getTangent(e,t)}getNormal(e,t=new l){const{x:s,y:n}=this.getPoint(e).sub(this.start);return t.set(n,-s).normalize()}transformPoint(e){return e(this.start),e(this.end),this}getDivisions(){return 1}getMinMax(e=l.MAX,t=l.MIN){const{start:s,end:n}=this;return e.x=Math.min(e.x,s.x,n.x),e.y=Math.min(e.y,s.y,n.y),t.x=Math.max(t.x,s.x,n.x),t.y=Math.max(t.y,s.y,n.y),{min:e,max:t}}getCommands(){const{start:e,end:t}=this;return[{type:"M",x:e.x,y:e.y},{type:"L",x:t.x,y:t.y}]}drawTo(e){const{end:t}=this;return e.lineTo(t.x,t.y),this}copy(e){return super.copy(e),this.start.copy(e.start),this.end.copy(e.end),this}}class zt extends A{constructor(t,s,n=0,o=1){super();T(this,"curveT",0);this.center=t,this.size=s,this.start=n,this.end=o,this.update()}update(){const{x:t,y:s}=this.center,n=new l(t+.5*this.size,s-.5*this.size),o=new l(t-.5*this.size,s-.5*this.size),h=new l(t,s+.5*this.size),a=new O(n,Math.SQRT1_2*this.size,-.25*Math.PI,.75*Math.PI),c=new O(o,Math.SQRT1_2*this.size,-.75*Math.PI,.25*Math.PI),r=new O(h,.5*Math.SQRT1_2*this.size,.75*Math.PI,1.25*Math.PI),u=new l(t,s+this.size),y=new l(t+this.size,s),g=new l().lerpVectors(y,u,.75),p=new l(t-this.size,s),f=new l().lerpVectors(p,u,.75),x=new D(y,g),M=new D(f,p);return this.curves=[a,x,r,M,c],this}getPoint(t){return this.getCurve(t).getPoint(this.curveT)}getPointAt(t){return this.getPoint(t)}getCurve(t){let s=(t*(this.end-this.start)+this.start)%1;s<0&&(s+=1),s*=9*Math.PI/8+1.5;let n;const o=.5*Math.PI;return s<o?(n=0,this.curveT=s/o):s<o+.75?(n=1,this.curveT=(s-o)/.75):s<5*Math.PI/8+.75?(n=2,this.curveT=(s-o-.75)/(Math.PI/8)):s<5*Math.PI/8+1.5?(n=3,this.curveT=(s-5*Math.PI/8-.75)/.75):(n=4,this.curveT=(s-5*Math.PI/8-1.5)/o),this.curves[n]}getTangent(t){return this.getCurve(t).getTangent(this.curveT)}getNormal(t){return this.getCurve(t).getNormal(this.curveT)}transformPoint(t){return this.curves.forEach(s=>s.transformPoint(t)),this}getMinMax(t=l.MAX,s=l.MIN){return this.curves.forEach(n=>n.getMinMax(t,s)),{min:t,max:s}}getCommands(){return this.curves.flatMap(t=>t.getCommands())}drawTo(t){return this.curves.forEach(s=>s.drawTo(t)),this}}class Dt extends A{constructor(t,s=0,n=0,o=0,h=1){super();T(this,"curves",[]);T(this,"curveT",0);T(this,"points",[]);this.center=t,this.radius=s,this.number=n,this.start=o,this.end=h,this.update()}update(){for(let t=0;t<this.number;t++){let s=t*2*Math.PI/this.number;s-=.5*Math.PI,this.points.push(new l(this.radius*Math.cos(s),this.radius*Math.sin(s)).add(this.center))}for(let t=0;t<this.number;t++)this.curves.push(new D(this.points[t],this.points[(t+1)%this.number]));return this}getCurve(t){let s=(t*(this.end-this.start)+this.start)%1;s<0&&(s+=1);const n=s*this.number,o=Math.floor(n);return this.curveT=n-o,this.curves[o]}getPoint(t,s){return this.getCurve(t).getPoint(this.curveT,s)}getPointAt(t,s){return this.getPoint(t,s)}getTangent(t,s){return this.getCurve(t).getTangent(this.curveT,s)}getNormal(t,s){return this.getCurve(t).getNormal(this.curveT,s)}transformPoint(t){return this.curves.forEach(s=>s.transformPoint(t)),this}getMinMax(t=l.MAX,s=l.MIN){return this.curves.forEach(n=>n.getMinMax(t,s)),{min:t,max:s}}getCommands(){return this.curves.flatMap(t=>t.getCommands())}drawTo(t){return this.curves.forEach(s=>s.drawTo(t)),this}}class rt extends A{constructor(e=new l,t=new l,s=new l){super(),this.start=e,this.control=t,this.end=s}getPoint(e,t=new l){const{start:s,control:n,end:o}=this;return t.set(V(e,s.x,n.x,o.x),V(e,s.y,n.y,o.y)),t}transformPoint(e){return e(this.start),e(this.control),e(this.end),this}getMinMax(e=l.MAX,t=l.MIN){const{start:s,control:n,end:o}=this,h=.5*(s.x+n.x),a=.5*(s.y+n.y),c=.5*(s.x+o.x),r=.5*(s.y+o.y);return e.x=Math.min(e.x,s.x,o.x,h,c),e.y=Math.min(e.y,s.y,o.y,a,r),t.x=Math.max(t.x,s.x,o.x,h,c),t.y=Math.max(t.y,s.y,o.y,a,r),{min:e,max:t}}getCommands(){const{start:e,control:t,end:s}=this;return[{type:"M",x:e.x,y:e.y},{type:"Q",x1:t.x,y1:t.y,x:s.x,y:s.y}]}drawTo(e){const{control:t,end:s}=this;return e.quadraticCurveTo(t.x,t.y,s.x,s.y),this}copy(e){return super.copy(e),this.start.copy(e.start),this.control.copy(e.control),this.end.copy(e.end),this}}class it extends A{constructor(t,s,n=1,o=0,h=1){super();T(this,"curves",[]);T(this,"curveT",0);this.center=t,this.rx=s,this.aspectRatio=n,this.start=o,this.end=h,this.update()}get x(){return this.center.x-this.rx}get y(){return this.center.y-this.rx/this.aspectRatio}get width(){return this.rx*2}get height(){return this.rx/this.aspectRatio*2}update(){const{x:t,y:s}=this.center,n=this.rx,o=this.rx/this.aspectRatio,h=[new l(t-n,s-o),new l(t+n,s-o),new l(t+n,s+o),new l(t-n,s+o)];for(let a=0;a<4;a++)this.curves.push(new D(h[a].clone(),h[(a+1)%4].clone()));return this}getCurve(t){let s=(t*(this.end-this.start)+this.start)%1;s<0&&(s+=1),s*=(1+this.aspectRatio)*2;let n;return s<this.aspectRatio?(n=0,this.curveT=s/this.aspectRatio):s<this.aspectRatio+1?(n=1,this.curveT=(s-this.aspectRatio)/1):s<2*this.aspectRatio+1?(n=2,this.curveT=(s-this.aspectRatio-1)/this.aspectRatio):(n=3,this.curveT=(s-2*this.aspectRatio-1)/1),this.curves[n]}getPoint(t,s){return this.getCurve(t).getPoint(this.curveT,s)}getPointAt(t,s){return this.getPoint(t,s)}getTangent(t,s){return this.getCurve(t).getTangent(this.curveT,s)}getNormal(t,s){return this.getCurve(t).getNormal(this.curveT,s)}transformPoint(t){return this.curves.forEach(s=>s.transformPoint(t)),this}getMinMax(t=l.MAX,s=l.MIN){return this.curves.forEach(n=>n.getMinMax(t,s)),{min:t,max:s}}getCommands(){return this.curves.flatMap(t=>t.getCommands())}drawTo(t){return this.curves.forEach(s=>s.drawTo(t)),this}}class ot extends A{constructor(e=[]){super(),this.points=e}getDivisions(e=12){return e*this.points.length}getPoint(e,t=new l){const{points:s}=this,n=(s.length-1)*e,o=Math.floor(n),h=n-o,a=s[o===0?o:o-1],c=s[o],r=s[o>s.length-2?s.length-1:o+1],u=s[o>s.length-3?s.length-1:o+2];return t.set(H(h,a.x,c.x,r.x,u.x),H(h,a.y,c.y,r.y,u.y)),t}transformPoint(e){return this.points.forEach(t=>e(t)),this}copy(e){super.copy(e),this.points=[];for(let t=0,s=e.points.length;t<s;t++)this.points.push(e.points[t].clone());return this}}class X extends A{constructor(t){super();T(this,"curves",[]);T(this,"currentPoint",new l);T(this,"autoClose",!1);T(this,"_cacheLengths",[]);t&&this.setFromPoints(t)}addCurve(t){return this.curves.push(t),this}closePath(){const t=this.curves[0].getPoint(0),s=this.curves[this.curves.length-1].getPoint(1);return t.equals(s)||this.curves.push(new D(s,t)),this}getPoint(t,s=new l){const n=t*this.getLength(),o=this.getCurveLengths();let h=0;for(;h<o.length;){if(o[h]>=n){const a=o[h]-n,c=this.curves[h],r=c.getLength();return c.getPointAt(r===0?0:1-a/r,s)}h++}return s}getLength(){const t=this.getCurveLengths();return t[t.length-1]}updateArcLengths(){super.updateArcLengths(),this._cacheLengths=[],this.getCurveLengths()}getCurveLengths(){if(this._cacheLengths.length===this.curves.length)return this._cacheLengths;const t=[];let s=0;for(let n=0,o=this.curves.length;n<o;n++)s+=this.curves[n].getLength(),t.push(s);return this._cacheLengths=t,t}getSpacedPoints(t=40){const s=[];for(let n=0;n<=t;n++)s.push(this.getPoint(n/t));return this.autoClose&&s.push(s[0]),s}getPoints(t=12){const s=[];let n;for(let o=0,h=this.curves;o<h.length;o++){const a=h[o],c=a.getPoints(a.getDivisions(t));for(let r=0;r<c.length;r++){const u=c[r];n!=null&&n.equals(u)||(s.push(u),n=u)}}return this.autoClose&&s.length>1&&!s[s.length-1].equals(s[0])&&s.push(s[0]),s}setFromPoints(t){this.moveTo(t[0].x,t[0].y);for(let s=1,n=t.length;s<n;s++)this.lineTo(t[s].x,t[s].y);return this}bezierCurveTo(t,s,n,o,h,a){return this.curves.push(new Z(this.currentPoint.clone(),new l(t,s),new l(n,o),new l(h,a))),this.currentPoint.set(h,a),this}lineTo(t,s){return this.curves.push(new D(this.currentPoint.clone(),new l(t,s))),this.currentPoint.set(t,s),this}moveTo(t,s){return this.currentPoint.set(t,s),this}quadraticCurveTo(t,s,n,o){return this.curves.push(new rt(this.currentPoint.clone(),new l(t,s),new l(n,o))),this.currentPoint.set(n,o),this}rect(t,s,n,o){return this.curves.push(new it(new l(t+n/2,s+o/2),n/2,n/o)),this.currentPoint.set(t,s),this}splineThru(t){const s=[this.currentPoint.clone()].concat(t);return this.curves.push(new ot(s)),this.currentPoint.copy(t[t.length-1]),this}arc(t,s,n,o,h,a=!1){const c=this.currentPoint;return this.absarc(t+c.x,s+c.y,n,o,h,a),this}absarc(t,s,n,o,h,a=!1){return this.absellipse(t,s,n,n,o,h,a),this}ellipse(t,s,n,o,h,a,c=!1,r=0){const u=this.currentPoint;return this.absellipse(t+u.x,s+u.y,n,o,h,a,c,r),this}absellipse(t,s,n,o,h,a,c=!1,r=0){const u=new tt(new l(t,s),n,o,h,a,c,r);if(this.curves.length>0){const y=u.getPoint(0);y.equals(this.currentPoint)||this.lineTo(y.x,y.y)}return this.curves.push(u),this.currentPoint.copy(u.getPoint(1)),this}getCommands(){return this.curves.flatMap(t=>t.getCommands())}getMinMax(t=l.MAX,s=l.MIN){return this.curves.forEach(n=>n.getMinMax(t,s)),{min:t,max:s}}drawTo(t){var n;const s=(n=this.curves[0])==null?void 0:n.getPoint(0);return s&&t.moveTo(s.x,s.y),this.curves.forEach(o=>o.drawTo(t)),this.autoClose&&t.closePath(),this}copy(t){super.copy(t),this.curves=[];for(let s=0,n=t.curves.length;s<n;s++)this.curves.push(t.curves[s].clone());return this.autoClose=t.autoClose,this.currentPoint.copy(t.currentPoint),this}}class I{constructor(e){T(this,"currentPath",new X);T(this,"paths",[this.currentPath]);T(this,"userData");e&&(e instanceof I?this.addPath(e):Array.isArray(e)?this.addCommands(e):this.addData(e))}addPath(e){return e instanceof I?this.paths.push(...e.paths.map(t=>t.clone())):this.paths.push(e),this}closePath(){return this.currentPath.closePath(),this}moveTo(e,t){const{currentPoint:s,curves:n}=this.currentPath;return(s.x!==e||s.y!==t)&&(n.length?(this.currentPath=new X().moveTo(e,t),this.paths.push(this.currentPath)):this.currentPath.moveTo(e,t)),this}lineTo(e,t){return this.currentPath.lineTo(e,t),this}bezierCurveTo(e,t,s,n,o,h){return this.currentPath.bezierCurveTo(e,t,s,n,o,h),this}quadraticCurveTo(e,t,s,n){return this.currentPath.quadraticCurveTo(e,t,s,n),this}arc(e,t,s,n,o,h){return this.currentPath.absarc(e,t,s,n,o,!h),this}arcTo(e,t,s,n,o){return console.warn("Method arcTo not supported yet"),this}ellipse(e,t,s,n,o,h,a,c){return this.currentPath.absellipse(e,t,s,n,h,a,!c,o),this}rect(e,t,s,n){return this.currentPath.rect(e,t,s,n),this}addCommands(e){return Mt(e,this),this}addData(e){return this.addCommands(Tt(e)),this}splineThru(e){return this.currentPath.splineThru(e),this}forEachCurve(e){return this.paths.forEach(t=>t.curves.forEach(s=>e(s))),this}transformPoint(e){return this.forEachCurve(t=>t.transformPoint(e)),this}transform(e){return this.forEachCurve(t=>t.transform(e)),this}getMinMax(e=l.MAX,t=l.MIN){return this.forEachCurve(s=>s.getMinMax(e,t)),{min:e,max:t}}getBoundingBox(){const{min:e,max:t}=this.getMinMax();return new v(e.x,e.y,t.x-e.x,t.y-e.y)}getCommands(){return this.paths.flatMap(e=>e.curves.flatMap(t=>t.getCommands()))}getData(){return this.paths.map(e=>e.getData()).join(" ")}getSvgString(){const{x:e,y:t,width:s,height:n}=this.getBoundingBox(),o=1;return`<svg viewBox="${e-o} ${t-o} ${s+o*2} ${n+o*2}" xmlns="http://www.w3.org/2000/svg"><path fill="none" stroke="currentColor" d="${this.getData()}"></path></svg>`}getSvgDataUri(){return`data:image/svg+xml;base64,${btoa(this.getSvgString())}`}drawTo(e){this.paths.forEach(t=>{t.drawTo(e)})}strokeTo(e){this.drawTo(e),e.stroke()}fillTo(e){this.drawTo(e),e.fill()}copy(e){return this.currentPath=e.currentPath.clone(),this.paths=e.paths.map(t=>t.clone()),this.userData=e.userData,this}toCanvas(e=!0){const t=document.createElement("canvas"),{left:s,top:n,width:o,height:h}=this.getBoundingBox();t.width=o,t.height=h;const a=t.getContext("2d");return a&&(a.translate(-s,-n),e?this.fillTo(a):this.strokeTo(a)),t}clone(){return new this.constructor().copy(this)}}const Y="px",at=90,ht=["mm","cm","in","pt","pc","px"],G={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 m(i){let e="px";if(typeof i=="string"||i instanceof String)for(let s=0,n=ht.length;s<n;s++){const o=ht[s];if(i.endsWith(o)){e=o,i=i.substring(0,i.length-o.length);break}}let t;return e==="px"&&Y!=="px"?t=G.in[Y]/at:(t=G[e][Y],t<0&&(t=G[e].in*at)),t*Number.parseFloat(i)}const qt=new C,F=new C,ct=new C,ut=new C;function Xt(i,e,t){if(!(i.hasAttribute("transform")||i.nodeName==="use"&&(i.hasAttribute("x")||i.hasAttribute("y"))))return null;const s=Ot(i);return t.length>0&&s.premultiply(t[t.length-1]),e.copy(s),t.push(s),s}function Ot(i){const e=new C,t=qt;if(i.nodeName==="use"&&(i.hasAttribute("x")||i.hasAttribute("y"))&&e.translate(m(i.getAttribute("x")),m(i.getAttribute("y"))),i.hasAttribute("transform")){const s=i.getAttribute("transform").split(")");for(let n=s.length-1;n>=0;n--){const o=s[n].trim();if(o==="")continue;const h=o.indexOf("("),a=o.length;if(h>0&&h<a){const c=o.slice(0,h),r=S(o.slice(h+1));switch(t.identity(),c){case"translate":if(r.length>=1){const u=r[0];let y=0;r.length>=2&&(y=r[1]),t.translate(u,y)}break;case"rotate":if(r.length>=1){let u=0,y=0,g=0;u=r[0]*Math.PI/180,r.length>=3&&(y=r[1],g=r[2]),F.makeTranslation(-y,-g),ct.makeRotation(u),ut.multiplyMatrices(ct,F),F.makeTranslation(y,g),t.multiplyMatrices(F,ut)}break;case"scale":r.length>=1&&t.scale(r[0],r[1]??r[0]);break;case"skewX":r.length===1&&t.set(1,Math.tan(r[0]*Math.PI/180),0,0,1,0,0,0,1);break;case"skewY":r.length===1&&t.set(1,0,0,Math.tan(r[0]*Math.PI/180),1,0,0,0,1);break;case"matrix":r.length===6&&t.set(r[0],r[2],r[4],r[1],r[3],r[5],0,0,1);break}}e.premultiply(t)}}return e}function Rt(i){return new I().addPath(new X().absarc(m(i.getAttribute("cx")||0),m(i.getAttribute("cy")||0),m(i.getAttribute("r")||0),0,Math.PI*2))}function Ft(i,e){if(!(!i.sheet||!i.sheet.cssRules||!i.sheet.cssRules.length))for(let t=0;t<i.sheet.cssRules.length;t++){const s=i.sheet.cssRules[t];if(s.type!==1)continue;const n=s.selectorText.split(/,/g).filter(Boolean).map(o=>o.trim());for(let o=0;o<n.length;o++){const h=Object.fromEntries(Object.entries(s.style).filter(([,a])=>a!==""));e[n[o]]=Object.assign(e[n[o]]||{},h)}}}function _t(i){return new I().addPath(new X().absellipse(m(i.getAttribute("cx")||0),m(i.getAttribute("cy")||0),m(i.getAttribute("rx")||0),m(i.getAttribute("ry")||0),0,Math.PI*2))}function Ut(i){return new I().moveTo(m(i.getAttribute("x1")||0),m(i.getAttribute("y1")||0)).lineTo(m(i.getAttribute("x2")||0),m(i.getAttribute("y2")||0))}function Yt(i){const e=new I,t=i.getAttribute("d");return!t||t==="none"?null:(e.addData(t),e)}const Gt=/([+-]?(?:\d+(?:\.\d+)?|\.\d+)(?:e[+-]?\d+)?)(?:,|\s)([+-]?\d*\.?\d+(?:e[+-]?\d+)?)/g;function Bt(i){var s;const e=new I;let t=0;return(s=i.getAttribute("points"))==null||s.replace(Gt,(n,o,h)=>{const a=m(o),c=m(h);return t===0?e.moveTo(a,c):e.lineTo(a,c),t++,n}),e.currentPath.autoClose=!0,e}const Qt=/([+-]?(?:\d+(?:\.\d+)?|\.\d+)(?:e[+-]?\d+)?)(?:,|\s)([+-]?\d*\.?\d+(?:e[+-]?\d+)?)/g;function Wt(i){var s;const e=new I;let t=0;return(s=i.getAttribute("points"))==null||s.replace(Qt,(n,o,h)=>{const a=m(o),c=m(h);return t===0?e.moveTo(a,c):e.lineTo(a,c),t++,n}),e.currentPath.autoClose=!1,e}function Ht(i){const e=m(i.getAttribute("x")||0),t=m(i.getAttribute("y")||0),s=m(i.getAttribute("rx")||i.getAttribute("ry")||0),n=m(i.getAttribute("ry")||i.getAttribute("rx")||0),o=m(i.getAttribute("width")),h=m(i.getAttribute("height")),a=1-.551915024494,c=new I;return c.moveTo(e+s,t),c.lineTo(e+o-s,t),(s!==0||n!==0)&&c.bezierCurveTo(e+o-s*a,t,e+o,t+n*a,e+o,t+n),c.lineTo(e+o,t+h-n),(s!==0||n!==0)&&c.bezierCurveTo(e+o,t+h-n*a,e+o-s*a,t+h,e+o-s,t+h),c.lineTo(e+s,t+h),(s!==0||n!==0)&&c.bezierCurveTo(e+s*a,t+h,e,t+h-n*a,e,t+h-n),c.lineTo(e,t+n),(s!==0||n!==0)&&c.bezierCurveTo(e,t+n*a,e+s*a,t,e+s,t),c}function L(i,e,t){e=Object.assign({},e);let s={};if(i.hasAttribute("class")){const a=i.getAttribute("class").split(/\s/).filter(Boolean).map(c=>c.trim());for(let c=0;c<a.length;c++)s=Object.assign(s,t[`.${a[c]}`])}i.hasAttribute("id")&&(s=Object.assign(s,t[`#${i.getAttribute("id")}`]));function n(a,c,r){r===void 0&&(r=function(y){return y.startsWith("url")&&console.warn("url access in attributes is not implemented."),y}),i.hasAttribute(a)&&(e[c]=r(i.getAttribute(a))),s[a]&&(e[c]=r(s[a])),i.style&&i.style[a]!==""&&(e[c]=r(i.style[a]))}function o(a){return Math.max(0,Math.min(1,m(a)))}function h(a){return Math.max(0,m(a))}return n("fill","fill"),n("fill-opacity","fillOpacity",o),n("fill-rule","fillRule"),n("opacity","opacity",o),n("stroke","stroke"),n("stroke-dashoffset","strokeDashoffset"),n("stroke-dasharray","strokeDasharray"),n("stroke-linecap","strokeLineCap"),n("stroke-linejoin","strokeLineJoin"),n("stroke-miterlimit","strokeMiterLimit",h),n("stroke-opacity","strokeOpacity",o),n("stroke-width","strokeWidth",h),n("visibility","visibility"),e}function B(i,e,t=[]){var u;if(i.nodeType!==1)return t;let s=!1,n=null;const o={};switch(i.nodeName){case"svg":e=L(i,e,o);break;case"style":Ft(i,o);break;case"g":e=L(i,e,o);break;case"path":e=L(i,e,o),i.hasAttribute("d")&&(n=Yt(i));break;case"rect":e=L(i,e,o),n=Ht(i);break;case"polygon":e=L(i,e,o),n=Bt(i);break;case"polyline":e=L(i,e,o),n=Wt(i);break;case"circle":e=L(i,e,o),n=Rt(i);break;case"ellipse":e=L(i,e,o),n=_t(i);break;case"line":e=L(i,e,o),n=Ut(i);break;case"defs":s=!0;break;case"use":{e=L(i,e,o);const g=(i.getAttributeNS("http://www.w3.org/1999/xlink","href")||"").substring(1),p=(u=i.viewportElement)==null?void 0:u.getElementById(g);p?B(p,e,t):console.warn(`'use node' references non-existent node id: ${g}`);break}default:console.warn(i);break}const h=new C,a=[],c=Xt(i,h,a);n&&(n.transform(h),t.push(n),n.userData={node:i,style:e});const r=i.childNodes;for(let y=0,g=r.length;y<g;y++){const p=r[y];s&&p.nodeName!=="style"&&p.nodeName!=="defs"||B(p,e,t)}return c&&(a.pop(),a.length>0?h.copy(a[a.length-1]):h.identity()),t}const lt="data:image/svg+xml;",yt=`${lt}base64,`,ft=`${lt}charset=utf8,`;function gt(i){if(typeof i=="string"){let e;return i.startsWith(yt)?(i=i.substring(yt.length,i.length),e=atob(i)):i.startsWith(ft)?(i=i.substring(ft.length,i.length),e=decodeURIComponent(i)):e=i,new DOMParser().parseFromString(e,"image/svg+xml").documentElement}else return i}function Vt(i){return B(gt(i),{fill:"#000",fillOpacity:1,strokeOpacity:1,strokeWidth:1,strokeLineJoin:"miter",strokeLineCap:"butt",strokeMiterLimit:4})}d.BoundingBox=v,d.CircleCurve=O,d.CubicBezierCurve=Z,d.Curve=A,d.CurvePath=X,d.EllipseCurve=tt,d.HeartCurve=zt,d.LineCurve=D,d.Matrix3=C,d.Path2D=I,d.PloygonCurve=Dt,d.QuadraticBezierCurve=rt,d.RectangularCurve=it,d.SplineCurve=ot,d.Vector2=l,d.parseSvg=Vt,d.parseSvgToDom=gt,Object.defineProperty(d,Symbol.toStringTag,{value:"Module"})});
1
+ (function(M,l){typeof exports=="object"&&typeof module<"u"?l(exports):typeof define=="function"&&define.amd?define(["exports"],l):(M=typeof globalThis<"u"?globalThis:M||self,l(M.modernPath2d={}))})(this,function(M){"use strict";var jt=Object.defineProperty;var Zt=(M,l,v)=>l in M?jt(M,l,{enumerable:!0,configurable:!0,writable:!0,value:v}):M[l]=v;var T=(M,l,v)=>Zt(M,typeof l!="symbol"?l+"":l,v);class l{constructor(e=0,t=0){this.x=e,this.y=t}static get MAX(){return new l(1/0,1/0)}static get MIN(){return new l(-1/0,-1/0)}set(e,t){return this.x=e,this.y=t,this}add(e){return this.x+=e.x,this.y+=e.y,this}sub(e){return this.x-=e.x,this.y-=e.y,this}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){const t=this.x-e.x,s=this.y-e.y;return t*t+s*s}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}multiplyScalar(e){return this.x*=e,this.y*=e,this}divideScalar(e){return this.multiplyScalar(1/e)}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this}normalize(){return this.divideScalar(this.length()||1)}lerpVectors(e,t,s){return this.x=e.x+(t.x-e.x)*s,this.y=e.y+(t.y-e.y)*s,this}equals(e){return this.x===e.x&&this.y===e.y}applyMatrix3(e){const t=this.x,s=this.y,n=e.elements;return this.x=n[0]*t+n[3]*s+n[6],this.y=n[1]*t+n[4]*s+n[7],this}copy(e){return this.x=e.x,this.y=e.y,this}clone(){return new l(this.x,this.y)}}class v{constructor(e=0,t=0,s=0,n=0){this.left=e,this.top=t,this.width=s,this.height=n}get x(){return this.left}set x(e){this.left=e}get y(){return this.top}set y(e){this.top=e}get right(){return this.left+this.width}get bottom(){return this.top+this.height}static from(...e){const t=e[0],s=e.slice(1).reduce((n,o)=>(n.left=Math.min(n.left,o.left),n.top=Math.min(n.top,o.top),n.right=Math.max(n.right,o.right),n.bottom=Math.max(n.bottom,o.bottom),n),{left:(t==null?void 0:t.left)??0,top:(t==null?void 0:t.top)??0,right:(t==null?void 0:t.right)??0,bottom:(t==null?void 0:t.bottom)??0});return new v(s.left,s.top,s.right-s.left,s.bottom-s.top)}translate(e,t){return this.left+=e,this.top+=t,this}getCenterPoint(){return new l((this.left+this.right)/2,(this.top+this.bottom)/2)}clone(){return new v(this.left,this.top,this.width,this.height)}toArray(){return[this.left,this.top,this.width,this.height]}}class C{constructor(e=1,t=0,s=0,n=0,o=1,i=0,a=0,c=0,h=1){T(this,"elements",[]);this.set(e,t,s,n,o,i,a,c,h)}set(e,t,s,n,o,i,a,c,h){const u=this.elements;return u[0]=e,u[1]=n,u[2]=a,u[3]=t,u[4]=o,u[5]=c,u[6]=s,u[7]=i,u[8]=h,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(e){const t=this.elements,s=e.elements;return t[0]=s[0],t[1]=s[1],t[2]=s[2],t[3]=s[3],t[4]=s[4],t[5]=s[5],t[6]=s[6],t[7]=s[7],t[8]=s[8],this}multiply(e){return this.multiplyMatrices(this,e)}premultiply(e){return this.multiplyMatrices(e,this)}multiplyMatrices(e,t){const s=e.elements,n=t.elements,o=this.elements,i=s[0],a=s[3],c=s[6],h=s[1],u=s[4],g=s[7],f=s[2],p=s[5],y=s[8],x=n[0],d=n[3],w=n[6],L=n[1],b=n[4],k=n[7],N=n[2],$=n[5],q=n[8];return o[0]=i*x+a*L+c*N,o[3]=i*d+a*b+c*$,o[6]=i*w+a*k+c*q,o[1]=h*x+u*L+g*N,o[4]=h*d+u*b+g*$,o[7]=h*w+u*k+g*q,o[2]=f*x+p*L+y*N,o[5]=f*d+p*b+y*$,o[8]=f*w+p*k+y*q,this}invert(){const e=this.elements,t=e[0],s=e[1],n=e[2],o=e[3],i=e[4],a=e[5],c=e[6],h=e[7],u=e[8],g=u*i-a*h,f=a*c-u*o,p=h*o-i*c,y=t*g+s*f+n*p;if(y===0)return this.set(0,0,0,0,0,0,0,0,0);const x=1/y;return e[0]=g*x,e[1]=(n*h-u*s)*x,e[2]=(a*s-n*i)*x,e[3]=f*x,e[4]=(u*t-n*c)*x,e[5]=(n*o-a*t)*x,e[6]=p*x,e[7]=(s*c-h*t)*x,e[8]=(i*t-s*o)*x,this}transpose(){let e;const t=this.elements;return e=t[1],t[1]=t[3],t[3]=e,e=t[2],t[2]=t[6],t[6]=e,e=t[5],t[5]=t[7],t[7]=e,this}scale(e,t){return this.premultiply(U.makeScale(e,t)),this}rotate(e){return this.premultiply(U.makeRotation(-e)),this}translate(e,t){return this.premultiply(U.makeTranslation(e,t)),this}makeTranslation(e,t){return this.set(1,0,e,0,1,t,0,0,1),this}makeRotation(e){const t=Math.cos(e),s=Math.sin(e);return this.set(t,-s,0,s,t,0,0,0,1),this}makeScale(e,t){return this.set(e,0,0,0,t,0,0,0,1),this}fromArray(e,t=0){for(let s=0;s<9;s++)this.elements[s]=e[s+t];return this}clone(){return new this.constructor().fromArray(this.elements)}}const U=new C;function W(r,e,t,s){const n=r*t+e*s,o=Math.sqrt(r*r+e*e)*Math.sqrt(t*t+s*s);let i=Math.acos(Math.max(-1,Math.min(1,n/o)));return r*s-e*t<0&&(i=-i),i}function Mt(r,e,t,s,n,o,i,a){if(e===0||t===0){r.lineTo(a.x,a.y);return}s=s*Math.PI/180,e=Math.abs(e),t=Math.abs(t);const c=(i.x-a.x)/2,h=(i.y-a.y)/2,u=Math.cos(s)*c+Math.sin(s)*h,g=-Math.sin(s)*c+Math.cos(s)*h;let f=e*e,p=t*t;const y=u*u,x=g*g,d=y/f+x/p;if(d>1){const dt=Math.sqrt(d);e=dt*e,t=dt*t,f=e*e,p=t*t}const w=f*x+p*y,L=(f*p-w)/w;let b=Math.sqrt(Math.max(0,L));n===o&&(b=-b);const k=b*e*g/t,N=-b*t*u/e,$=Math.cos(s)*k-Math.sin(s)*N+(i.x+a.x)/2,q=Math.sin(s)*k+Math.cos(s)*N+(i.y+a.y)/2,F=W(1,0,(u-k)/e,(g-N)/t),Q=W((u-k)/e,(g-N)/t,(-u-k)/e,(-g-N)/t)%(Math.PI*2);r.ellipse($,q,e,t,s,F,F+Q,o===1)}function D(r,e){return r-(e-r)}function H(r,e){const t=new l,s=new l;for(let n=0,o=r.length;n<o;n++){const i=r[n];if(i.type==="m"||i.type==="M")i.type==="m"?t.add(i):t.copy(i),e.moveTo(t.x,t.y),s.copy(t);else if(i.type==="h"||i.type==="H")i.type==="h"?t.x+=i.x:t.x=i.x,e.lineTo(t.x,t.y),s.copy(t);else if(i.type==="v"||i.type==="V")i.type==="v"?t.y+=i.y:t.y=i.y,e.lineTo(t.x,t.y),s.copy(t);else if(i.type==="l"||i.type==="L")i.type==="l"?t.add(i):t.copy(i),e.lineTo(t.x,t.y),s.copy(t);else if(i.type==="c"||i.type==="C")i.type==="c"?(e.bezierCurveTo(t.x+i.x1,t.y+i.y1,t.x+i.x2,t.y+i.y2,t.x+i.x,t.y+i.y),s.x=t.x+i.x2,s.y=t.y+i.y2,t.add(i)):(e.bezierCurveTo(i.x1,i.y1,i.x2,i.y2,i.x,i.y),s.x=i.x2,s.y=i.y2,t.copy(i));else if(i.type==="s"||i.type==="S")i.type==="s"?(e.bezierCurveTo(D(t.x,s.x),D(t.y,s.y),t.x+i.x2,t.y+i.y2,t.x+i.x,t.y+i.y),s.x=t.x+i.x2,s.y=t.y+i.y2,t.add(i)):(e.bezierCurveTo(D(t.x,s.x),D(t.y,s.y),i.x2,i.y2,i.x,i.y),s.x=i.x2,s.y=i.y2,t.copy(i));else if(i.type==="q"||i.type==="Q")i.type==="q"?(e.quadraticCurveTo(t.x+i.x1,t.y+i.y1,t.x+i.x,t.y+i.y),s.x=t.x+i.x1,s.y=t.y+i.y1,t.add(i)):(e.quadraticCurveTo(i.x1,i.y1,i.x,i.y),s.x=i.x1,s.y=i.y1,t.copy(i));else if(i.type==="t"||i.type==="T"){const a=D(t.x,s.x),c=D(t.y,s.y);s.x=a,s.y=c,i.type==="t"?(e.quadraticCurveTo(a,c,t.x+i.x,t.y+i.y),t.add(i)):(e.quadraticCurveTo(a,c,i.x,i.y),t.copy(i))}else if(i.type==="a"||i.type==="A"){const a=t.clone();if(i.type==="a"){if(i.x===0&&i.y===0)continue;t.add(i)}else{if(t.equals(i))continue;t.copy(i)}s.copy(t),Mt(e,i.rx,i.ry,i.angle,i.largeArcFlag,i.sweepFlag,a,t)}else i.type==="z"||i.type==="Z"?(e.startPoint&&t.copy(e.startPoint),e.closePath()):console.warn("Unsupported commands",i)}}const P={SEPARATOR:/[ \t\r\n,.\-+]/,WHITESPACE:/[ \t\r\n]/,DIGIT:/\d/,SIGN:/[-+]/,POINT:/\./,COMMA:/,/,EXP:/e/i,FLAGS:/[01]/};function S(r,e,t=0){let a=0,c=!0,h="",u="";const g=[];function f(d,w,L){const b=new SyntaxError(`Unexpected character "${d}" at index ${w}.`);throw b.partial=L,b}function p(){h!==""&&(u===""?g.push(Number(h)):g.push(Number(h)*10**Number(u))),h="",u=""}let y;const x=r.length;for(let d=0;d<x;d++){if(y=r[d],Array.isArray(e)&&e.includes(g.length%t)&&P.FLAGS.test(y)){a=1,h=y,p();continue}if(a===0){if(P.WHITESPACE.test(y))continue;if(P.DIGIT.test(y)||P.SIGN.test(y)){a=1,h=y;continue}if(P.POINT.test(y)){a=2,h=y;continue}P.COMMA.test(y)&&(c&&f(y,d,g),c=!0)}if(a===1){if(P.DIGIT.test(y)){h+=y;continue}if(P.POINT.test(y)){h+=y,a=2;continue}if(P.EXP.test(y)){a=3;continue}P.SIGN.test(y)&&h.length===1&&P.SIGN.test(h[0])&&f(y,d,g)}if(a===2){if(P.DIGIT.test(y)){h+=y;continue}if(P.EXP.test(y)){a=3;continue}P.POINT.test(y)&&h[h.length-1]==="."&&f(y,d,g)}if(a===3){if(P.DIGIT.test(y)){u+=y;continue}if(P.SIGN.test(y)){if(u===""){u+=y;continue}u.length===1&&P.SIGN.test(u)&&f(y,d,g)}}P.WHITESPACE.test(y)?(p(),a=0,c=!1):P.COMMA.test(y)?(p(),a=0,c=!0):P.SIGN.test(y)?(p(),a=1,h=y):P.POINT.test(y)?(p(),a=2,h=y):f(y,d,g)}return p(),g}function mt(r){switch(r.type){case"m":case"M":return`${r.type} ${r.x} ${r.y}`;case"h":case"H":return`${r.type} ${r.x}`;case"v":case"V":return`${r.type} ${r.y}`;case"l":case"L":return`${r.type} ${r.x} ${r.y}`;case"c":case"C":return`${r.type} ${r.x1} ${r.y1} ${r.x2} ${r.y2} ${r.x} ${r.y}`;case"s":case"S":return`${r.type} ${r.x2} ${r.y2} ${r.x} ${r.y}`;case"q":case"Q":return`${r.type} ${r.x1} ${r.y1} ${r.x} ${r.y}`;case"t":case"T":return`${r.type} ${r.x} ${r.y}`;case"a":case"A":return`${r.type} ${r.rx} ${r.ry} ${r.angle} ${r.largeArcFlag} ${r.sweepFlag} ${r.x} ${r.y}`;case"z":case"Z":return r.type;default:return""}}function Pt(r){let e="";for(let t=0,s=r.length;t<s;t++)e+=`${mt(r[t])} `;return e}const Tt=/[a-df-z][^a-df-z]*/gi;function V(r){const e=[],t=r.match(Tt);if(!t)return e;for(let s=0,n=t.length;s<n;s++){const o=t[s],i=o.charAt(0),a=o.slice(1).trim();let c;switch(i){case"m":case"M":c=S(a);for(let h=0,u=c.length;h<u;h+=2)h===0?e.push({type:i,x:c[h],y:c[h+1]}):e.push({type:i==="m"?"l":"L",x:c[h],y:c[h+1]});break;case"h":case"H":c=S(a);for(let h=0,u=c.length;h<u;h++)e.push({type:i,x:c[h]});break;case"v":case"V":c=S(a);for(let h=0,u=c.length;h<u;h++)e.push({type:i,y:c[h]});break;case"l":case"L":c=S(a);for(let h=0,u=c.length;h<u;h+=2)e.push({type:i,x:c[h],y:c[h+1]});break;case"c":case"C":c=S(a);for(let h=0,u=c.length;h<u;h+=6)e.push({type:i,x1:c[h],y1:c[h+1],x2:c[h+2],y2:c[h+3],x:c[h+4],y:c[h+5]});break;case"s":case"S":c=S(a);for(let h=0,u=c.length;h<u;h+=4)e.push({type:i,x2:c[h],y2:c[h+1],x:c[h+2],y:c[h+3]});break;case"q":case"Q":c=S(a);for(let h=0,u=c.length;h<u;h+=4)e.push({type:i,x1:c[h],y1:c[h+1],x:c[h+2],y:c[h+3]});break;case"t":case"T":c=S(a);for(let h=0,u=c.length;h<u;h+=2)e.push({type:i,x:c[h],y:c[h+1]});break;case"a":case"A":c=S(a,[3,4],7);for(let h=0,u=c.length;h<u;h+=7)e.push({type:i,rx:c[h],ry:c[h+1],angle:c[h+2],largeArcFlag:c[h+3],sweepFlag:c[h+4],x:c[h+5],y:c[h+6]});break;case"z":case"Z":e.push({type:i});break;default:console.warn(o)}}return e}class A{constructor(){T(this,"arcLengthDivisions",200);T(this,"_cacheArcLengths");T(this,"_needsUpdate",!1)}getPointAt(e,t=new l){return this.getPoint(this.getUtoTmapping(e),t)}getPoints(e=5){const t=[];for(let s=0;s<=e;s++)t.push(this.getPoint(s/e));return t}getSpacedPoints(e=5){const t=[];for(let s=0;s<=e;s++)t.push(this.getPointAt(s/e));return t}getLength(){const e=this.getLengths();return e[e.length-1]}getLengths(e=this.arcLengthDivisions){if(this._cacheArcLengths&&this._cacheArcLengths.length===e+1&&!this._needsUpdate)return this._cacheArcLengths;this._needsUpdate=!1;const t=[];let s,n=this.getPoint(0),o=0;t.push(0);for(let i=1;i<=e;i++)s=this.getPoint(i/e),o+=s.distanceTo(n),t.push(o),n=s;return this._cacheArcLengths=t,t}updateArcLengths(){this._needsUpdate=!0,this.getLengths()}getUtoTmapping(e,t){const s=this.getLengths();let n=0;const o=s.length;let i;t?i=t:i=e*s[o-1];let a=0,c=o-1,h;for(;a<=c;)if(n=Math.floor(a+(c-a)/2),h=s[n]-i,h<0)a=n+1;else if(h>0)c=n-1;else{c=n;break}if(n=c,s[n]===i)return n/(o-1);const u=s[n],f=s[n+1]-u,p=(i-u)/f;return(n+p)/(o-1)}getTangent(e,t=new l){const n=Math.max(0,e-1e-4),o=Math.min(1,e+1e-4);return t.copy(this.getPoint(o).sub(this.getPoint(n)).normalize())}getTangentAt(e,t){return this.getTangent(this.getUtoTmapping(e),t)}transformPoint(e){return this}transform(e){return this.transformPoint(t=>t.applyMatrix3(e)),this}getDivisions(e){return e}getMinMax(e=l.MAX,t=l.MIN){return this.getPoints().forEach(s=>{e.x=Math.min(e.x,s.x),e.y=Math.min(e.y,s.y),t.x=Math.max(t.x,s.x),t.y=Math.max(t.y,s.y)}),{min:e,max:t}}getBoundingBox(){const{min:e,max:t}=this.getMinMax();return new v(e.x,e.y,t.x-e.x,t.y-e.y)}getCommands(){return this.getPoints().map((e,t)=>t===0?{type:"M",x:e.x,y:e.y}:{type:"L",x:e.x,y:e.y})}getData(){return Pt(this.getCommands())}drawTo(e){return this}copy(e){return this.arcLengthDivisions=e.arcLengthDivisions,this}clone(){return new this.constructor().copy(this)}}class O extends A{constructor(e,t,s=0,n=Math.PI*2){super(),this.center=e,this.radius=t,this.start=s,this.end=n}getPoint(e){const{radius:t,center:s}=this;return s.clone().add(this.getNormal(e).clone().multiplyScalar(t))}getTangent(e){const{x:t,y:s}=this.getNormal(e);return new l(-s,t)}getNormal(e){const{start:t,end:s}=this,n=e*(s-t)+t-.5*Math.PI;return new l(Math.cos(n),Math.sin(n))}transformPoint(e){return e(this.center),this}getMinMax(e=l.MAX,t=l.MIN){return e.x=Math.min(e.x,this.center.x-this.radius),e.y=Math.min(e.y,this.center.y-this.radius),t.x=Math.max(t.x,this.center.x+this.radius),t.y=Math.max(t.y,this.center.y+this.radius),{min:e,max:t}}}function j(r,e,t,s,n){const o=(s-e)*.5,i=(n-t)*.5,a=r*r,c=r*a;return(2*t-2*s+o+i)*c+(-3*t+3*s-2*o-i)*a+o*r+t}function wt(r,e){const t=1-r;return t*t*e}function bt(r,e){return 2*(1-r)*r*e}function vt(r,e){return r*r*e}function Z(r,e,t,s){return wt(r,e)+bt(r,t)+vt(r,s)}function Ct(r,e){const t=1-r;return t*t*t*e}function At(r,e){const t=1-r;return 3*t*t*r*e}function It(r,e){return 3*(1-r)*r*r*e}function kt(r,e){return r*r*r*e}function J(r,e,t,s,n){return Ct(r,e)+At(r,t)+It(r,s)+kt(r,n)}class K extends A{constructor(e=new l,t=new l,s=new l,n=new l){super(),this.start=e,this.startControl=t,this.endControl=s,this.end=n}getPoint(e,t=new l){const{start:s,startControl:n,endControl:o,end:i}=this;return t.set(J(e,s.x,n.x,o.x,i.x),J(e,s.y,n.y,o.y,i.y)),t}transformPoint(e){return e(this.start),e(this.startControl),e(this.endControl),e(this.end),this}getMinMax(e=l.MAX,t=l.MIN){const{start:s,startControl:n,endControl:o,end:i}=this;return e.x=Math.min(e.x,s.x,n.x,o.x,i.x),e.y=Math.min(e.y,s.y,n.y,o.y,i.y),t.x=Math.max(t.x,s.x,n.x,o.x,i.x),t.y=Math.max(t.y,s.y,n.y,o.y,i.y),{min:e,max:t}}getCommands(){const{start:e,startControl:t,endControl:s,end:n}=this;return[{type:"M",x:e.x,y:e.y},{type:"C",x1:t.x,y1:t.y,x2:s.x,y2:s.y,x:n.x,y:n.y}]}drawTo(e){const{startControl:t,endControl:s,end:n}=this;return e.bezierCurveTo(t.x,t.y,s.x,s.y,n.x,n.y),this}copy(e){return super.copy(e),this.start.copy(e.start),this.startControl.copy(e.startControl),this.endControl.copy(e.endControl),this.end.copy(e.end),this}}const Nt=new C,tt=new C,et=new C,R=new l;class st extends A{constructor(e=new l,t=1,s=1,n=0,o=0,i=Math.PI*2,a=!1){super(),this.center=e,this.radiusX=t,this.radiusY=s,this.rotation=n,this.startAngle=o,this.endAngle=i,this.clockwise=a}getPoint(e,t=new l){const s=Math.PI*2;let n=this.endAngle-this.startAngle;const o=Math.abs(n)<Number.EPSILON;for(;n<0;)n+=s;for(;n>s;)n-=s;n<Number.EPSILON&&(o?n=0:n=s),this.clockwise&&!o&&(n===s?n=-s:n=n-s);const i=this.startAngle+e*n;let a=this.center.x+this.radiusX*Math.cos(i),c=this.center.y+this.radiusY*Math.sin(i);if(this.rotation!==0){const h=Math.cos(this.rotation),u=Math.sin(this.rotation),g=a-this.center.x,f=c-this.center.y;a=g*h-f*u+this.center.x,c=g*u+f*h+this.center.y}return t.set(a,c)}getDivisions(e=12){return e*2}getCommands(){const{center:e,radiusX:t,radiusY:s,startAngle:n,endAngle:o,clockwise:i,rotation:a}=this,{x:c,y:h}=e,u=c+t*Math.cos(n)*Math.cos(a)-s*Math.sin(n)*Math.sin(a),g=h+t*Math.cos(n)*Math.sin(a)+s*Math.sin(n)*Math.cos(a),f=Math.abs(n-o),p=f>Math.PI?1:0,y=i?1:0,x=a*180/Math.PI;if(f>=2*Math.PI){const d=n+Math.PI,w=c+t*Math.cos(d)*Math.cos(a)-s*Math.sin(d)*Math.sin(a),L=h+t*Math.cos(d)*Math.sin(a)+s*Math.sin(d)*Math.cos(a);return[{type:"M",x:u,y:g},{type:"A",rx:t,ry:s,angle:x,largeArcFlag:0,sweepFlag:y,x:w,y:L},{type:"A",rx:t,ry:s,angle:x,largeArcFlag:0,sweepFlag:y,x:u,y:g}]}else{const d=c+t*Math.cos(o)*Math.cos(a)-s*Math.sin(o)*Math.sin(a),w=h+t*Math.cos(o)*Math.sin(a)+s*Math.sin(o)*Math.cos(a);return[{type:"M",x:u,y:g},{type:"A",rx:t,ry:s,angle:x,largeArcFlag:p,sweepFlag:y,x:d,y:w}]}}drawTo(e){const{center:t,radiusX:s,radiusY:n,rotation:o,startAngle:i,endAngle:a,clockwise:c}=this;return e.ellipse(t.x,t.y,s,n,o,i,a,!c),this}transform(e){return R.set(this.center.x,this.center.y),R.applyMatrix3(e),this.center.x=R.x,this.center.y=R.y,Lt(e)?St(this,e):Et(this,e),this}transformPoint(e){return e(this.center),this}getMinMax(e=l.MAX,t=l.MIN){const{center:s,radiusX:n,radiusY:o,rotation:i}=this,{x:a,y:c}=s,h=Math.cos(i),u=Math.sin(i),g=Math.sqrt(n*n*h*h+o*o*u*u),f=Math.sqrt(n*n*u*u+o*o*h*h);return e.x=Math.min(e.x,a-g),e.y=Math.min(e.y,c-f),t.x=Math.max(t.x,a+g),t.y=Math.max(t.y,c+f),{min:e,max:t}}copy(e){return super.copy(e),this.center.x=e.center.x,this.center.y=e.center.y,this.radiusX=e.radiusX,this.radiusY=e.radiusY,this.startAngle=e.startAngle,this.endAngle=e.endAngle,this.clockwise=e.clockwise,this.rotation=e.rotation,this}}function St(r,e){const t=r.radiusX,s=r.radiusY,n=Math.cos(r.rotation),o=Math.sin(r.rotation),i=new l(t*n,t*o),a=new l(-s*o,s*n),c=i.applyMatrix3(e),h=a.applyMatrix3(e),u=Nt.set(c.x,h.x,0,c.y,h.y,0,0,0,1),g=tt.copy(u).invert(),y=et.copy(g).transpose().multiply(g).elements,x=$t(y[0],y[1],y[4]),d=Math.sqrt(x.rt1),w=Math.sqrt(x.rt2);if(r.radiusX=1/d,r.radiusY=1/w,r.rotation=Math.atan2(x.sn,x.cs),!((r.endAngle-r.startAngle)%(2*Math.PI)<Number.EPSILON)){const b=tt.set(d,0,0,0,w,0,0,0,1),k=et.set(x.cs,x.sn,0,-x.sn,x.cs,0,0,0,1),N=b.multiply(k).multiply(u),$=q=>{const{x:F,y:Q}=new l(Math.cos(q),Math.sin(q)).applyMatrix3(N);return Math.atan2(Q,F)};r.startAngle=$(r.startAngle),r.endAngle=$(r.endAngle),nt(e)&&(r.clockwise=!r.clockwise)}}function Et(r,e){const t=rt(e),s=it(e);r.radiusX*=t,r.radiusY*=s;const n=t>Number.EPSILON?Math.atan2(e.elements[1],e.elements[0]):Math.atan2(-e.elements[3],e.elements[4]);r.rotation+=n,nt(e)&&(r.startAngle*=-1,r.endAngle*=-1,r.clockwise=!r.clockwise)}function nt(r){const e=r.elements;return e[0]*e[4]-e[1]*e[3]<0}function Lt(r){const e=r.elements,t=e[0]*e[3]+e[1]*e[4];if(t===0)return!1;const s=rt(r),n=it(r);return Math.abs(t/(s*n))>Number.EPSILON}function rt(r){const e=r.elements;return Math.sqrt(e[0]*e[0]+e[1]*e[1])}function it(r){const e=r.elements;return Math.sqrt(e[3]*e[3]+e[4]*e[4])}function $t(r,e,t){let s,n,o,i,a;const c=r+t,h=r-t,u=Math.sqrt(h*h+4*e*e);return c>0?(s=.5*(c+u),a=1/s,n=r*a*t-e*a*e):c<0?n=.5*(c-u):(s=.5*u,n=-.5*u),h>0?o=h+u:o=h-u,Math.abs(o)>2*Math.abs(e)?(a=-2*e/o,i=1/Math.sqrt(1+a*a),o=a*i):Math.abs(e)===0?(o=1,i=0):(a=-.5*o/e,o=1/Math.sqrt(1+a*a),i=a*o),h>0&&(a=o,o=-i,i=a),{rt1:s,rt2:n,cs:o,sn:i}}class z extends A{constructor(e=new l,t=new l){super(),this.start=e,this.end=t}getPoint(e,t=new l){return e===1?t.copy(this.end):t.copy(this.end).sub(this.start).multiplyScalar(e).add(this.start),t}getPointAt(e,t=new l){return this.getPoint(e,t)}getTangent(e,t=new l){return t.subVectors(this.end,this.start).normalize()}getTangentAt(e,t=new l){return this.getTangent(e,t)}getNormal(e,t=new l){const{x:s,y:n}=this.getPoint(e).sub(this.start);return t.set(n,-s).normalize()}transformPoint(e){return e(this.start),e(this.end),this}getDivisions(){return 1}getMinMax(e=l.MAX,t=l.MIN){const{start:s,end:n}=this;return e.x=Math.min(e.x,s.x,n.x),e.y=Math.min(e.y,s.y,n.y),t.x=Math.max(t.x,s.x,n.x),t.y=Math.max(t.y,s.y,n.y),{min:e,max:t}}getCommands(){const{start:e,end:t}=this;return[{type:"M",x:e.x,y:e.y},{type:"L",x:t.x,y:t.y}]}drawTo(e){const{end:t}=this;return e.lineTo(t.x,t.y),this}copy(e){return super.copy(e),this.start.copy(e.start),this.end.copy(e.end),this}}class qt extends A{constructor(t,s,n=0,o=1){super();T(this,"curveT",0);this.center=t,this.size=s,this.start=n,this.end=o,this.update()}update(){const{x:t,y:s}=this.center,n=new l(t+.5*this.size,s-.5*this.size),o=new l(t-.5*this.size,s-.5*this.size),i=new l(t,s+.5*this.size),a=new O(n,Math.SQRT1_2*this.size,-.25*Math.PI,.75*Math.PI),c=new O(o,Math.SQRT1_2*this.size,-.75*Math.PI,.25*Math.PI),h=new O(i,.5*Math.SQRT1_2*this.size,.75*Math.PI,1.25*Math.PI),u=new l(t,s+this.size),g=new l(t+this.size,s),f=new l().lerpVectors(g,u,.75),p=new l(t-this.size,s),y=new l().lerpVectors(p,u,.75),x=new z(g,f),d=new z(y,p);return this.curves=[a,x,h,d,c],this}getPoint(t){return this.getCurve(t).getPoint(this.curveT)}getPointAt(t){return this.getPoint(t)}getCurve(t){let s=(t*(this.end-this.start)+this.start)%1;s<0&&(s+=1),s*=9*Math.PI/8+1.5;let n;const o=.5*Math.PI;return s<o?(n=0,this.curveT=s/o):s<o+.75?(n=1,this.curveT=(s-o)/.75):s<5*Math.PI/8+.75?(n=2,this.curveT=(s-o-.75)/(Math.PI/8)):s<5*Math.PI/8+1.5?(n=3,this.curveT=(s-5*Math.PI/8-.75)/.75):(n=4,this.curveT=(s-5*Math.PI/8-1.5)/o),this.curves[n]}getTangent(t){return this.getCurve(t).getTangent(this.curveT)}getNormal(t){return this.getCurve(t).getNormal(this.curveT)}transformPoint(t){return this.curves.forEach(s=>s.transformPoint(t)),this}getMinMax(t=l.MAX,s=l.MIN){return this.curves.forEach(n=>n.getMinMax(t,s)),{min:t,max:s}}getCommands(){return this.curves.flatMap(t=>t.getCommands())}drawTo(t){return this.curves.forEach(s=>s.drawTo(t)),this}}class zt extends A{constructor(t,s=0,n=0,o=0,i=1){super();T(this,"curves",[]);T(this,"curveT",0);T(this,"points",[]);this.center=t,this.radius=s,this.number=n,this.start=o,this.end=i,this.update()}update(){for(let t=0;t<this.number;t++){let s=t*2*Math.PI/this.number;s-=.5*Math.PI,this.points.push(new l(this.radius*Math.cos(s),this.radius*Math.sin(s)).add(this.center))}for(let t=0;t<this.number;t++)this.curves.push(new z(this.points[t],this.points[(t+1)%this.number]));return this}getCurve(t){let s=(t*(this.end-this.start)+this.start)%1;s<0&&(s+=1);const n=s*this.number,o=Math.floor(n);return this.curveT=n-o,this.curves[o]}getPoint(t,s){return this.getCurve(t).getPoint(this.curveT,s)}getPointAt(t,s){return this.getPoint(t,s)}getTangent(t,s){return this.getCurve(t).getTangent(this.curveT,s)}getNormal(t,s){return this.getCurve(t).getNormal(this.curveT,s)}transformPoint(t){return this.curves.forEach(s=>s.transformPoint(t)),this}getMinMax(t=l.MAX,s=l.MIN){return this.curves.forEach(n=>n.getMinMax(t,s)),{min:t,max:s}}getCommands(){return this.curves.flatMap(t=>t.getCommands())}drawTo(t){return this.curves.forEach(s=>s.drawTo(t)),this}}class ot extends A{constructor(e=new l,t=new l,s=new l){super(),this.start=e,this.control=t,this.end=s}getPoint(e,t=new l){const{start:s,control:n,end:o}=this;return t.set(Z(e,s.x,n.x,o.x),Z(e,s.y,n.y,o.y)),t}transformPoint(e){return e(this.start),e(this.control),e(this.end),this}getMinMax(e=l.MAX,t=l.MIN){const{start:s,control:n,end:o}=this,i=.5*(s.x+n.x),a=.5*(s.y+n.y),c=.5*(s.x+o.x),h=.5*(s.y+o.y);return e.x=Math.min(e.x,s.x,o.x,i,c),e.y=Math.min(e.y,s.y,o.y,a,h),t.x=Math.max(t.x,s.x,o.x,i,c),t.y=Math.max(t.y,s.y,o.y,a,h),{min:e,max:t}}getCommands(){const{start:e,control:t,end:s}=this;return[{type:"M",x:e.x,y:e.y},{type:"Q",x1:t.x,y1:t.y,x:s.x,y:s.y}]}drawTo(e){const{control:t,end:s}=this;return e.quadraticCurveTo(t.x,t.y,s.x,s.y),this}copy(e){return super.copy(e),this.start.copy(e.start),this.control.copy(e.control),this.end.copy(e.end),this}}class at extends A{constructor(t,s,n=1,o=0,i=1){super();T(this,"curves",[]);T(this,"curveT",0);this.center=t,this.rx=s,this.aspectRatio=n,this.start=o,this.end=i,this.update()}get x(){return this.center.x-this.rx}get y(){return this.center.y-this.rx/this.aspectRatio}get width(){return this.rx*2}get height(){return this.rx/this.aspectRatio*2}update(){const{x:t,y:s}=this.center,n=this.rx,o=this.rx/this.aspectRatio,i=[new l(t-n,s-o),new l(t+n,s-o),new l(t+n,s+o),new l(t-n,s+o)];for(let a=0;a<4;a++)this.curves.push(new z(i[a].clone(),i[(a+1)%4].clone()));return this}getCurve(t){let s=(t*(this.end-this.start)+this.start)%1;s<0&&(s+=1),s*=(1+this.aspectRatio)*2;let n;return s<this.aspectRatio?(n=0,this.curveT=s/this.aspectRatio):s<this.aspectRatio+1?(n=1,this.curveT=(s-this.aspectRatio)/1):s<2*this.aspectRatio+1?(n=2,this.curveT=(s-this.aspectRatio-1)/this.aspectRatio):(n=3,this.curveT=(s-2*this.aspectRatio-1)/1),this.curves[n]}getPoint(t,s){return this.getCurve(t).getPoint(this.curveT,s)}getPointAt(t,s){return this.getPoint(t,s)}getTangent(t,s){return this.getCurve(t).getTangent(this.curveT,s)}getNormal(t,s){return this.getCurve(t).getNormal(this.curveT,s)}transformPoint(t){return this.curves.forEach(s=>s.transformPoint(t)),this}getMinMax(t=l.MAX,s=l.MIN){return this.curves.forEach(n=>n.getMinMax(t,s)),{min:t,max:s}}getCommands(){return this.curves.flatMap(t=>t.getCommands())}drawTo(t){return this.curves.forEach(s=>s.drawTo(t)),this}}class ht extends A{constructor(e=[]){super(),this.points=e}getDivisions(e=12){return e*this.points.length}getPoint(e,t=new l){const{points:s}=this,n=(s.length-1)*e,o=Math.floor(n),i=n-o,a=s[o===0?o:o-1],c=s[o],h=s[o>s.length-2?s.length-1:o+1],u=s[o>s.length-3?s.length-1:o+2];return t.set(j(i,a.x,c.x,h.x,u.x),j(i,a.y,c.y,h.y,u.y)),t}transformPoint(e){return this.points.forEach(t=>e(t)),this}copy(e){super.copy(e),this.points=[];for(let t=0,s=e.points.length;t<s;t++)this.points.push(e.points[t].clone());return this}}class X extends A{constructor(t){super();T(this,"curves",[]);T(this,"startPoint");T(this,"currentPoint",new l);T(this,"autoClose",!1);T(this,"_cacheLengths",[]);t&&this.addPoints(t)}addCurve(t){return this.curves.push(t),this}addPoints(t){this.moveTo(t[0].x,t[0].y);for(let s=1,n=t.length;s<n;s++){const{x:o,y:i}=t[s];this.lineTo(o,i)}return this}addCommands(t){return H(t,this),this}addData(t){return this.addCommands(V(t)),this}getPoint(t,s=new l){const n=t*this.getLength(),o=this.getCurveLengths();let i=0;for(;i<o.length;){if(o[i]>=n){const a=o[i]-n,c=this.curves[i],h=c.getLength();return c.getPointAt(h===0?0:1-a/h,s)}i++}return s}getLength(){const t=this.getCurveLengths();return t[t.length-1]}updateArcLengths(){super.updateArcLengths(),this._cacheLengths=[],this.getCurveLengths()}getCurveLengths(){if(this._cacheLengths.length===this.curves.length)return this._cacheLengths;const t=[];let s=0;for(let n=0,o=this.curves.length;n<o;n++)s+=this.curves[n].getLength(),t.push(s);return this._cacheLengths=t,t}getSpacedPoints(t=40){const s=[];for(let n=0;n<=t;n++)s.push(this.getPoint(n/t));return this.autoClose&&s.push(s[0]),s}getPoints(t=12){const s=[];let n;for(let o=0,i=this.curves;o<i.length;o++){const a=i[o],c=a.getPoints(a.getDivisions(t));for(let h=0;h<c.length;h++){const u=c[h];n!=null&&n.equals(u)||(s.push(u),n=u)}}return this.autoClose&&s.length>1&&!s[s.length-1].equals(s[0])&&s.push(s[0]),s}_setCurrentPoint(t){return this.currentPoint.copy(t),this.startPoint||(this.startPoint=this.currentPoint.clone()),this}closePath(){const t=this.startPoint;if(t){const s=this.currentPoint;t.equals(s)||(this.curves.push(new z(s,t)),this.currentPoint.copy(t)),this.startPoint=void 0}return this}moveTo(t,s){return this.currentPoint.set(t,s),this.startPoint=this.currentPoint.clone(),this}lineTo(t,s){return this.curves.push(new z(this.currentPoint.clone(),new l(t,s))),this._setCurrentPoint({x:t,y:s}),this}bezierCurveTo(t,s,n,o,i,a){return this.curves.push(new K(this.currentPoint.clone(),new l(t,s),new l(n,o),new l(i,a))),this._setCurrentPoint({x:i,y:a}),this}quadraticCurveTo(t,s,n,o){return this.curves.push(new ot(this.currentPoint.clone(),new l(t,s),new l(n,o))),this._setCurrentPoint({x:n,y:o}),this}arc(t,s,n,o,i,a){return this.ellipse(t,s,n,n,0,o,i,a),this}relativeArc(t,s,n,o,i,a){const c=this.currentPoint;return this.arc(t+c.x,s+c.y,n,o,i,a),this}arcTo(t,s,n,o,i){return console.warn("Method arcTo not supported yet"),this}ellipse(t,s,n,o,i,a,c,h=!0){const u=new st(new l(t,s),n,o,i,a,c,!h);if(this.curves.length>0){const g=u.getPoint(0);g.equals(this.currentPoint)||this.lineTo(g.x,g.y)}return this.curves.push(u),this._setCurrentPoint(u.getPoint(1)),this}relativeEllipse(t,s,n,o,i,a,c,h){const u=this.currentPoint;return this.ellipse(t+u.x,s+u.y,n,o,i,a,c,h),this}rect(t,s,n,o){return this.curves.push(new at(new l(t+n/2,s+o/2),n/2,n/o)),this._setCurrentPoint({x:t,y:s}),this}splineThru(t){return this.curves.push(new ht([this.currentPoint.clone()].concat(t))),this._setCurrentPoint(t[t.length-1]),this}transformPoint(t){return this.curves.forEach(s=>s.transformPoint(t)),this}getMinMax(t=l.MAX,s=l.MIN){return this.curves.forEach(n=>n.getMinMax(t,s)),{min:t,max:s}}getBoundingBox(){const{min:t,max:s}=this.getMinMax();return new v(t.x,t.y,s.x-t.x,s.y-t.y)}getCommands(){return this.curves.flatMap(t=>t.getCommands())}drawTo(t){var n;const s=(n=this.curves[0])==null?void 0:n.getPoint(0);return s&&t.moveTo(s.x,s.y),this.curves.forEach(o=>o.drawTo(t)),this.autoClose&&t.closePath(),this}copy(t){super.copy(t),this.curves=[];for(let s=0,n=t.curves.length;s<n;s++)this.curves.push(t.curves[s].clone());return this.autoClose=t.autoClose,this.currentPoint.copy(t.currentPoint),this}}class I{constructor(e){T(this,"currentPath",new X);T(this,"paths",[this.currentPath]);T(this,"userData");e&&(e instanceof I?this.addPath(e):Array.isArray(e)?this.addCommands(e):this.addData(e))}get startPoint(){return this.currentPath.startPoint}get currentPoint(){return this.currentPath.currentPoint}addPath(e){return e instanceof I?this.paths.push(...e.paths.map(t=>t.clone())):this.paths.push(e),this}closePath(){const e=this.startPoint;return e&&(this.currentPath.closePath(),this.currentPath.curves.length>0&&(this.currentPath=new X().moveTo(e.x,e.y),this.paths.push(this.currentPath))),this}moveTo(e,t){const{currentPoint:s,curves:n}=this.currentPath;return s.equals({x:e,y:t})||(n.length?(this.currentPath=new X().moveTo(e,t),this.paths.push(this.currentPath)):this.currentPath.moveTo(e,t)),this}lineTo(e,t){return this.currentPath.lineTo(e,t),this}bezierCurveTo(e,t,s,n,o,i){return this.currentPath.bezierCurveTo(e,t,s,n,o,i),this}quadraticCurveTo(e,t,s,n){return this.currentPath.quadraticCurveTo(e,t,s,n),this}arc(e,t,s,n,o,i){return this.currentPath.arc(e,t,s,n,o,i),this}arcTo(e,t,s,n,o){return this.currentPath.arcTo(e,t,s,n,o),this}ellipse(e,t,s,n,o,i,a,c){return this.currentPath.ellipse(e,t,s,n,o,i,a,c),this}rect(e,t,s,n){return this.currentPath.rect(e,t,s,n),this}addCommands(e){return H(e,this),this}addData(e){return this.addCommands(V(e)),this}splineThru(e){return this.currentPath.splineThru(e),this}forEachCurve(e){return this.paths.forEach(t=>t.curves.forEach(s=>e(s))),this}transformPoint(e){return this.forEachCurve(t=>t.transformPoint(e)),this}transform(e){return this.forEachCurve(t=>t.transform(e)),this}getMinMax(e=l.MAX,t=l.MIN){return this.forEachCurve(s=>s.getMinMax(e,t)),{min:e,max:t}}getBoundingBox(){const{min:e,max:t}=this.getMinMax();return new v(e.x,e.y,t.x-e.x,t.y-e.y)}getCommands(){return this.paths.flatMap(e=>e.getCommands())}getData(){return this.paths.map(e=>e.getData()).join(" ")}getSvgString(){const{x:e,y:t,width:s,height:n}=this.getBoundingBox(),o=1;return`<svg viewBox="${e-o} ${t-o} ${s+o*2} ${n+o*2}" xmlns="http://www.w3.org/2000/svg"><path fill="none" stroke="currentColor" d="${this.getData()}"></path></svg>`}getSvgDataUri(){return`data:image/svg+xml;base64,${btoa(this.getSvgString())}`}drawTo(e){this.paths.forEach(t=>{t.drawTo(e)})}strokeTo(e){this.drawTo(e),e.stroke()}fillTo(e){this.drawTo(e),e.fill()}copy(e){return this.currentPath=e.currentPath.clone(),this.paths=e.paths.map(t=>t.clone()),this.userData=e.userData,this}toCanvas(e=!0){const t=document.createElement("canvas"),{left:s,top:n,width:o,height:i}=this.getBoundingBox();t.width=o,t.height=i;const a=t.getContext("2d");return a&&(a.translate(-s,-n),e?this.fillTo(a):this.strokeTo(a)),t}clone(){return new this.constructor().copy(this)}}const Y="px",ct=90,ut=["mm","cm","in","pt","pc","px"],G={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 m(r){let e="px";if(typeof r=="string"||r instanceof String)for(let s=0,n=ut.length;s<n;s++){const o=ut[s];if(r.endsWith(o)){e=o,r=r.substring(0,r.length-o.length);break}}let t;return e==="px"&&Y!=="px"?t=G.in[Y]/ct:(t=G[e][Y],t<0&&(t=G[e].in*ct)),t*Number.parseFloat(r)}const Dt=new C,_=new C,lt=new C,gt=new C;function Xt(r,e,t){if(!(r.hasAttribute("transform")||r.nodeName==="use"&&(r.hasAttribute("x")||r.hasAttribute("y"))))return null;const s=Ot(r);return t.length>0&&s.premultiply(t[t.length-1]),e.copy(s),t.push(s),s}function Ot(r){const e=new C,t=Dt;if(r.nodeName==="use"&&(r.hasAttribute("x")||r.hasAttribute("y"))&&e.translate(m(r.getAttribute("x")),m(r.getAttribute("y"))),r.hasAttribute("transform")){const s=r.getAttribute("transform").split(")");for(let n=s.length-1;n>=0;n--){const o=s[n].trim();if(o==="")continue;const i=o.indexOf("("),a=o.length;if(i>0&&i<a){const c=o.slice(0,i),h=S(o.slice(i+1));switch(t.identity(),c){case"translate":if(h.length>=1){const u=h[0];let g=0;h.length>=2&&(g=h[1]),t.translate(u,g)}break;case"rotate":if(h.length>=1){let u=0,g=0,f=0;u=h[0]*Math.PI/180,h.length>=3&&(g=h[1],f=h[2]),_.makeTranslation(-g,-f),lt.makeRotation(u),gt.multiplyMatrices(lt,_),_.makeTranslation(g,f),t.multiplyMatrices(_,gt)}break;case"scale":h.length>=1&&t.scale(h[0],h[1]??h[0]);break;case"skewX":h.length===1&&t.set(1,Math.tan(h[0]*Math.PI/180),0,0,1,0,0,0,1);break;case"skewY":h.length===1&&t.set(1,0,0,Math.tan(h[0]*Math.PI/180),1,0,0,0,1);break;case"matrix":h.length===6&&t.set(h[0],h[2],h[4],h[1],h[3],h[5],0,0,1);break}}e.premultiply(t)}}return e}function Rt(r){return new I().addPath(new X().arc(m(r.getAttribute("cx")||0),m(r.getAttribute("cy")||0),m(r.getAttribute("r")||0),0,Math.PI*2))}function _t(r,e){if(!(!r.sheet||!r.sheet.cssRules||!r.sheet.cssRules.length))for(let t=0;t<r.sheet.cssRules.length;t++){const s=r.sheet.cssRules[t];if(s.type!==1)continue;const n=s.selectorText.split(/,/g).filter(Boolean).map(o=>o.trim());for(let o=0;o<n.length;o++){const i=Object.fromEntries(Object.entries(s.style).filter(([,a])=>a!==""));e[n[o]]=Object.assign(e[n[o]]||{},i)}}}function Ft(r){return new I().addPath(new X().ellipse(m(r.getAttribute("cx")||0),m(r.getAttribute("cy")||0),m(r.getAttribute("rx")||0),m(r.getAttribute("ry")||0),0,0,Math.PI*2))}function Ut(r){return new I().moveTo(m(r.getAttribute("x1")||0),m(r.getAttribute("y1")||0)).lineTo(m(r.getAttribute("x2")||0),m(r.getAttribute("y2")||0))}function Yt(r){const e=new I,t=r.getAttribute("d");return!t||t==="none"?null:(e.addData(t),e)}const Gt=/([+-]?(?:\d+(?:\.\d+)?|\.\d+)(?:e[+-]?\d+)?)(?:,|\s)([+-]?\d*\.?\d+(?:e[+-]?\d+)?)/g;function Bt(r){var s;const e=new I;let t=0;return(s=r.getAttribute("points"))==null||s.replace(Gt,(n,o,i)=>{const a=m(o),c=m(i);return t===0?e.moveTo(a,c):e.lineTo(a,c),t++,n}),e.currentPath.autoClose=!0,e}const Qt=/([+-]?(?:\d+(?:\.\d+)?|\.\d+)(?:e[+-]?\d+)?)(?:,|\s)([+-]?\d*\.?\d+(?:e[+-]?\d+)?)/g;function Wt(r){var s;const e=new I;let t=0;return(s=r.getAttribute("points"))==null||s.replace(Qt,(n,o,i)=>{const a=m(o),c=m(i);return t===0?e.moveTo(a,c):e.lineTo(a,c),t++,n}),e.currentPath.autoClose=!1,e}function Ht(r){const e=m(r.getAttribute("x")||0),t=m(r.getAttribute("y")||0),s=m(r.getAttribute("rx")||r.getAttribute("ry")||0),n=m(r.getAttribute("ry")||r.getAttribute("rx")||0),o=m(r.getAttribute("width")),i=m(r.getAttribute("height")),a=1-.551915024494,c=new I;return c.moveTo(e+s,t),c.lineTo(e+o-s,t),(s!==0||n!==0)&&c.bezierCurveTo(e+o-s*a,t,e+o,t+n*a,e+o,t+n),c.lineTo(e+o,t+i-n),(s!==0||n!==0)&&c.bezierCurveTo(e+o,t+i-n*a,e+o-s*a,t+i,e+o-s,t+i),c.lineTo(e+s,t+i),(s!==0||n!==0)&&c.bezierCurveTo(e+s*a,t+i,e,t+i-n*a,e,t+i-n),c.lineTo(e,t+n),(s!==0||n!==0)&&c.bezierCurveTo(e,t+n*a,e+s*a,t,e+s,t),c}function E(r,e,t){e=Object.assign({},e);let s={};if(r.hasAttribute("class")){const a=r.getAttribute("class").split(/\s/).filter(Boolean).map(c=>c.trim());for(let c=0;c<a.length;c++)s=Object.assign(s,t[`.${a[c]}`])}r.hasAttribute("id")&&(s=Object.assign(s,t[`#${r.getAttribute("id")}`]));function n(a,c,h){h===void 0&&(h=function(g){return g.startsWith("url")&&console.warn("url access in attributes is not implemented."),g}),r.hasAttribute(a)&&(e[c]=h(r.getAttribute(a))),s[a]&&(e[c]=h(s[a])),r.style&&r.style[a]!==""&&(e[c]=h(r.style[a]))}function o(a){return Math.max(0,Math.min(1,m(a)))}function i(a){return Math.max(0,m(a))}return n("fill","fill"),n("fill-opacity","fillOpacity",o),n("fill-rule","fillRule"),n("opacity","opacity",o),n("stroke","stroke"),n("stroke-dashoffset","strokeDashoffset"),n("stroke-dasharray","strokeDasharray"),n("stroke-linecap","strokeLineCap"),n("stroke-linejoin","strokeLineJoin"),n("stroke-miterlimit","strokeMiterLimit",i),n("stroke-opacity","strokeOpacity",o),n("stroke-width","strokeWidth",i),n("visibility","visibility"),e}function B(r,e,t=[]){var u;if(r.nodeType!==1)return t;let s=!1,n=null;const o={};switch(r.nodeName){case"svg":e=E(r,e,o);break;case"style":_t(r,o);break;case"g":e=E(r,e,o);break;case"path":e=E(r,e,o),r.hasAttribute("d")&&(n=Yt(r));break;case"rect":e=E(r,e,o),n=Ht(r);break;case"polygon":e=E(r,e,o),n=Bt(r);break;case"polyline":e=E(r,e,o),n=Wt(r);break;case"circle":e=E(r,e,o),n=Rt(r);break;case"ellipse":e=E(r,e,o),n=Ft(r);break;case"line":e=E(r,e,o),n=Ut(r);break;case"defs":s=!0;break;case"use":{e=E(r,e,o);const f=(r.getAttributeNS("http://www.w3.org/1999/xlink","href")||"").substring(1),p=(u=r.viewportElement)==null?void 0:u.getElementById(f);p?B(p,e,t):console.warn(`'use node' references non-existent node id: ${f}`);break}default:console.warn(r);break}const i=new C,a=[],c=Xt(r,i,a);n&&(n.transform(i),t.push(n),n.userData={node:r,style:e});const h=r.childNodes;for(let g=0,f=h.length;g<f;g++){const p=h[g];s&&p.nodeName!=="style"&&p.nodeName!=="defs"||B(p,e,t)}return c&&(a.pop(),a.length>0?i.copy(a[a.length-1]):i.identity()),t}const yt="data:image/svg+xml;",ft=`${yt}base64,`,pt=`${yt}charset=utf8,`;function xt(r){if(typeof r=="string"){let e;return r.startsWith(ft)?(r=r.substring(ft.length,r.length),e=atob(r)):r.startsWith(pt)?(r=r.substring(pt.length,r.length),e=decodeURIComponent(r)):e=r,new DOMParser().parseFromString(e,"image/svg+xml").documentElement}else return r}function Vt(r){return B(xt(r),{fill:"#000",fillOpacity:1,strokeOpacity:1,strokeWidth:1,strokeLineJoin:"miter",strokeLineCap:"butt",strokeMiterLimit:4})}M.BoundingBox=v,M.CircleCurve=O,M.CubicBezierCurve=K,M.Curve=A,M.CurvePath=X,M.EllipseCurve=st,M.HeartCurve=qt,M.LineCurve=z,M.Matrix3=C,M.Path2D=I,M.PloygonCurve=zt,M.QuadraticBezierCurve=ot,M.RectangularCurve=at,M.SplineCurve=ht,M.Vector2=l,M.parseSvg=Vt,M.parseSvgToDom=xt,Object.defineProperty(M,Symbol.toStringTag,{value:"Module"})});