modern-path2d 0.1.7 → 0.1.9

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.ts CHANGED
@@ -19,27 +19,31 @@ declare class Matrix3 {
19
19
  clone(): Matrix3;
20
20
  }
21
21
 
22
- declare class Point2D {
22
+ interface VectorLike {
23
23
  x: number;
24
24
  y: number;
25
- static get MAX(): Point2D;
26
- static get MIN(): Point2D;
25
+ }
26
+ declare class Vector2 {
27
+ x: number;
28
+ y: number;
29
+ static get MAX(): Vector2;
30
+ static get MIN(): Vector2;
27
31
  constructor(x?: number, y?: number);
28
32
  set(x: number, y: number): this;
29
- add(point: Point2D): this;
30
- sub(point: Point2D): this;
31
- distanceTo(point: Point2D): number;
32
- distanceToSquared(point: Point2D): number;
33
+ add(vec: VectorLike): this;
34
+ sub(vec: VectorLike): this;
35
+ distanceTo(vec: VectorLike): number;
36
+ distanceToSquared(vec: VectorLike): number;
33
37
  length(): number;
34
38
  multiplyScalar(scalar: number): this;
35
39
  divideScalar(scalar: number): this;
36
- subVectors(a: Point2D, b: Point2D): this;
40
+ subVectors(a: VectorLike, b: VectorLike): this;
37
41
  normalize(): this;
38
- lerpVectors(v1: Point2D, v2: Point2D, alpha: number): this;
39
- equals(point: Point2D): boolean;
42
+ lerpVectors(v1: VectorLike, v2: VectorLike, alpha: number): this;
43
+ equals(vec: VectorLike): boolean;
40
44
  applyMatrix3(m: Matrix3): this;
41
- copy(point: Point2D): this;
42
- clone(): Point2D;
45
+ copy(vec: VectorLike): this;
46
+ clone(): Vector2;
43
47
  }
44
48
 
45
49
  declare class BoundingBox {
@@ -56,40 +60,40 @@ declare class BoundingBox {
56
60
  constructor(left?: number, top?: number, width?: number, height?: number);
57
61
  static from(...boxes: BoundingBox[]): BoundingBox;
58
62
  translate(tx: number, ty: number): this;
59
- getCenterPoint(): Point2D;
63
+ getCenterPoint(): Vector2;
60
64
  clone(): BoundingBox;
61
65
  toArray(): [number, number, number, number];
62
66
  }
63
67
 
64
68
  declare class CurvePath extends Curve {
65
69
  curves: Curve[];
66
- currentPoint: Point2D;
70
+ currentPoint: Vector2;
67
71
  autoClose: boolean;
68
72
  protected _cacheLengths: number[];
69
- constructor(points?: Point2D[]);
73
+ constructor(points?: Vector2[]);
70
74
  addCurve(curve: Curve): this;
71
75
  closePath(): this;
72
- getPoint(position: number, output?: Point2D): Point2D;
76
+ getPoint(position: number, output?: Vector2): Vector2;
73
77
  getLength(): number;
74
78
  updateArcLengths(): void;
75
79
  getCurveLengths(): number[];
76
- getSpacedPoints(divisions?: number): Point2D[];
77
- getPoints(divisions?: number): Point2D[];
78
- setFromPoints(points: Point2D[]): this;
80
+ getSpacedPoints(divisions?: number): Vector2[];
81
+ getPoints(divisions?: number): Vector2[];
82
+ setFromPoints(points: Vector2[]): this;
79
83
  bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): this;
80
84
  lineTo(x: number, y: number): this;
81
85
  moveTo(x: number, y: number): this;
82
86
  quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): this;
83
87
  rect(x: number, y: number, w: number, h: number): this;
84
- splineThru(points: Point2D[]): this;
88
+ splineThru(points: Vector2[]): this;
85
89
  arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, clockwise?: boolean): this;
86
90
  absarc(x: number, y: number, radius: number, startAngle: number, endAngle: number, clockwise?: boolean): this;
87
91
  ellipse(x: number, y: number, radiusX: number, radiusY: number, startAngle: number, endAngle: number, clockwise?: boolean, rotation?: number): this;
88
92
  absellipse(x: number, y: number, radiusX: number, radiusY: number, startAngle: number, endAngle: number, clockwise?: boolean, rotation?: number): this;
89
93
  getCommands(): PathCommand[];
90
- getMinMax(min?: Point2D, max?: Point2D): {
91
- min: Point2D;
92
- max: Point2D;
94
+ getMinMax(min?: Vector2, max?: Vector2): {
95
+ min: Vector2;
96
+ max: Vector2;
93
97
  };
94
98
  drawTo(ctx: CanvasRenderingContext2D): this;
95
99
  copy(source: CurvePath): this;
@@ -115,12 +119,13 @@ declare class Path2D<T = any> {
115
119
  rect(x: number, y: number, w: number, h: number): this;
116
120
  addCommands(commands: PathCommand[]): this;
117
121
  addData(data: string): this;
118
- splineThru(points: Point2D[]): this;
122
+ splineThru(points: Vector2[]): this;
119
123
  forEachCurve(cb: (curve: Curve) => void): this;
124
+ transformPoint(cb: (point: Vector2) => void): this;
120
125
  transform(matrix: Matrix3): this;
121
- getMinMax(min?: Point2D, max?: Point2D): {
122
- min: Point2D;
123
- max: Point2D;
126
+ getMinMax(min?: Vector2, max?: Vector2): {
127
+ min: Vector2;
128
+ max: Vector2;
124
129
  };
125
130
  getBoundingBox(): BoundingBox;
126
131
  getCommands(): PathCommand[];
@@ -193,27 +198,25 @@ declare abstract class Curve {
193
198
  arcLengthDivisions: number;
194
199
  protected _cacheArcLengths?: number[];
195
200
  protected _needsUpdate: boolean;
196
- abstract getPoint(t: number, output?: Point2D): Point2D;
197
- getPointAt(u: number, output?: Point2D): Point2D;
198
- getPoints(divisions?: number): Point2D[];
199
- getSpacedPoints(divisions?: number): Point2D[];
201
+ abstract getPoint(t: number, output?: Vector2): Vector2;
202
+ getPointAt(u: number, output?: Vector2): Vector2;
203
+ getPoints(divisions?: number): Vector2[];
204
+ getSpacedPoints(divisions?: number): Vector2[];
200
205
  getLength(): number;
201
206
  getLengths(divisions?: number): number[];
202
207
  updateArcLengths(): void;
203
208
  getUtoTmapping(u: number, distance?: number): number;
204
- getTangent(t: number, output?: Point2D): Point2D;
205
- getTangentAt(u: number, output?: Point2D): Point2D;
209
+ getTangent(t: number, output?: Vector2): Vector2;
210
+ getTangentAt(u: number, output?: Vector2): Vector2;
206
211
  /** overrideable */
212
+ transformPoint(cb: (point: Vector2) => void): this;
207
213
  transform(matrix: Matrix3): this;
208
- /** overrideable */
209
214
  getDivisions(divisions: number): number;
210
- /** overrideable */
211
- getMinMax(min?: Point2D, max?: Point2D): {
212
- min: Point2D;
213
- max: Point2D;
215
+ getMinMax(min?: Vector2, max?: Vector2): {
216
+ min: Vector2;
217
+ max: Vector2;
214
218
  };
215
219
  getBoundingBox(): BoundingBox;
216
- /** overrideable */
217
220
  getCommands(): PathCommand[];
218
221
  getData(): string;
219
222
  /** overrideable */
@@ -223,31 +226,32 @@ declare abstract class Curve {
223
226
  }
224
227
 
225
228
  declare class CircleCurve extends Curve {
226
- center: Point2D;
229
+ center: Vector2;
227
230
  radius: number;
228
231
  start: number;
229
232
  end: number;
230
- constructor(center: Point2D, radius: number, start?: number, end?: number);
231
- getPoint(t: number): Point2D;
232
- getTangent(t: number): Point2D;
233
- getNormal(t: number): Point2D;
234
- getMinMax(min?: Point2D, max?: Point2D): {
235
- min: Point2D;
236
- max: Point2D;
233
+ constructor(center: Vector2, radius: number, start?: number, end?: number);
234
+ getPoint(t: number): Vector2;
235
+ getTangent(t: number): Vector2;
236
+ getNormal(t: number): Vector2;
237
+ transformPoint(cb: (point: Vector2) => void): this;
238
+ getMinMax(min?: Vector2, max?: Vector2): {
239
+ min: Vector2;
240
+ max: Vector2;
237
241
  };
238
242
  }
239
243
 
240
244
  declare class CubicBezierCurve extends Curve {
241
- v0: Point2D;
242
- v1: Point2D;
243
- v2: Point2D;
244
- v3: Point2D;
245
- constructor(v0?: Point2D, v1?: Point2D, v2?: Point2D, v3?: Point2D);
246
- getPoint(t: number, output?: Point2D): Point2D;
247
- transform(matrix: Matrix3): this;
248
- getMinMax(min?: Point2D, max?: Point2D): {
249
- min: Point2D;
250
- max: Point2D;
245
+ start: Vector2;
246
+ startControl: Vector2;
247
+ endControl: Vector2;
248
+ end: Vector2;
249
+ constructor(start?: Vector2, startControl?: Vector2, endControl?: Vector2, end?: Vector2);
250
+ getPoint(t: number, output?: Vector2): Vector2;
251
+ transformPoint(cb: (point: Vector2) => void): this;
252
+ getMinMax(min?: Vector2, max?: Vector2): {
253
+ min: Vector2;
254
+ max: Vector2;
251
255
  };
252
256
  getCommands(): PathCommand[];
253
257
  drawTo(ctx: CanvasRenderingContext2D): this;
@@ -255,103 +259,105 @@ declare class CubicBezierCurve extends Curve {
255
259
  }
256
260
 
257
261
  declare class EllipseCurve extends Curve {
258
- x: number;
259
- y: number;
262
+ center: Vector2;
260
263
  radiusX: number;
261
264
  radiusY: number;
262
265
  startAngle: number;
263
266
  endAngle: number;
264
267
  clockwise: boolean;
265
268
  rotation: number;
266
- constructor(x?: number, y?: number, radiusX?: number, radiusY?: number, startAngle?: number, endAngle?: number, clockwise?: boolean, rotation?: number);
267
- getPoint(t: number, output?: Point2D): Point2D;
269
+ constructor(center?: Vector2, radiusX?: number, radiusY?: number, startAngle?: number, endAngle?: number, clockwise?: boolean, rotation?: number);
270
+ getPoint(t: number, output?: Vector2): Vector2;
268
271
  getDivisions(divisions?: number): number;
269
272
  getCommands(): PathCommand[];
270
273
  drawTo(ctx: CanvasRenderingContext2D): this;
271
274
  transform(matrix: Matrix3): this;
272
- getMinMax(min?: Point2D, max?: Point2D): {
273
- min: Point2D;
274
- max: Point2D;
275
+ transformPoint(cb: (point: Vector2) => void): this;
276
+ getMinMax(min?: Vector2, max?: Vector2): {
277
+ min: Vector2;
278
+ max: Vector2;
275
279
  };
276
280
  copy(source: EllipseCurve): this;
277
281
  }
278
282
 
279
- declare class HeartCurve extends Curve {
280
- center: Point2D;
281
- size: number;
282
- start: number;
283
- end: number;
284
- curves: Curve[];
285
- pointT: number;
286
- constructor(center: Point2D, size: number, start?: number, end?: number);
287
- getPoint(value: number): Point2D;
288
- getPointAt(value: number): Point2D;
289
- getCurrentLine(value: number): Curve;
290
- getTangent(value: number): Point2D;
291
- getNormal(value: number): Point2D;
292
- transform(matrix: Matrix3): this;
293
- getMinMax(min?: Point2D, max?: Point2D): {
294
- min: Point2D;
295
- max: Point2D;
283
+ declare class LineCurve extends Curve {
284
+ start: Vector2;
285
+ end: Vector2;
286
+ constructor(start?: Vector2, end?: Vector2);
287
+ getPoint(t: number, output?: Vector2): Vector2;
288
+ getPointAt(u: number, output?: Vector2): Vector2;
289
+ getTangent(_t: number, output?: Vector2): Vector2;
290
+ getTangentAt(u: number, output?: Vector2): Vector2;
291
+ getNormal(t: number, output?: Vector2): Vector2;
292
+ transformPoint(cb: (point: Vector2) => void): this;
293
+ getDivisions(): number;
294
+ getMinMax(min?: Vector2, max?: Vector2): {
295
+ min: Vector2;
296
+ max: Vector2;
296
297
  };
297
298
  getCommands(): PathCommand[];
298
299
  drawTo(ctx: CanvasRenderingContext2D): this;
300
+ copy(source: LineCurve): this;
299
301
  }
300
302
 
301
- declare class LineCurve extends Curve {
302
- v1: Point2D;
303
- v2: Point2D;
304
- constructor(v1?: Point2D, v2?: Point2D);
305
- getPoint(t: number, output?: Point2D): Point2D;
306
- getPointAt(u: number, output?: Point2D): Point2D;
307
- getTangent(t: number, output?: Point2D): Point2D;
308
- getTangentAt(u: number, output?: Point2D): Point2D;
309
- transform(matrix: Matrix3): this;
310
- getDivisions(): number;
311
- getMinMax(min?: Point2D, max?: Point2D): {
312
- min: Point2D;
313
- max: Point2D;
303
+ declare class HeartCurve extends Curve {
304
+ center: Vector2;
305
+ size: number;
306
+ start: number;
307
+ end: number;
308
+ curves: (CircleCurve | LineCurve)[];
309
+ curveT: number;
310
+ constructor(center: Vector2, size: number, start?: number, end?: number);
311
+ update(): this;
312
+ getPoint(t: number): Vector2;
313
+ getPointAt(t: number): Vector2;
314
+ getCurve(t: number): CircleCurve | LineCurve;
315
+ getTangent(t: number): Vector2;
316
+ getNormal(t: number): Vector2;
317
+ transformPoint(cb: (point: Vector2) => void): this;
318
+ getMinMax(min?: Vector2, max?: Vector2): {
319
+ min: Vector2;
320
+ max: Vector2;
314
321
  };
315
322
  getCommands(): PathCommand[];
316
323
  drawTo(ctx: CanvasRenderingContext2D): this;
317
- copy(source: LineCurve): this;
318
324
  }
319
325
 
320
326
  declare class PloygonCurve extends Curve {
321
- center: Point2D;
327
+ center: Vector2;
322
328
  radius: number;
323
- num: number;
329
+ number: number;
324
330
  start: number;
325
331
  end: number;
326
332
  curves: LineCurve[];
327
- points: Point2D[];
328
- currentLine: LineCurve;
329
- pointK: any;
330
- constructor(center: Point2D, radius?: number, num?: number, start?: number, end?: number);
331
- getPoint(value: number): Point2D;
332
- getPointAt(value: number): Point2D;
333
- getCurrentLine(value: number): LineCurve;
334
- getTangent(value: number): Point2D;
335
- getNormal(value: number): Point2D;
336
- transform(matrix: Matrix3): this;
337
- getMinMax(min?: Point2D, max?: Point2D): {
338
- min: Point2D;
339
- max: Point2D;
333
+ curveT: number;
334
+ points: Vector2[];
335
+ constructor(center: Vector2, radius?: number, number?: number, start?: number, end?: number);
336
+ update(): this;
337
+ getCurve(t: number): LineCurve;
338
+ getPoint(t: number, output?: Vector2): Vector2;
339
+ getPointAt(u: number, output?: Vector2): Vector2;
340
+ getTangent(t: number, output?: Vector2): Vector2;
341
+ getNormal(t: number, output?: Vector2): Vector2;
342
+ transformPoint(cb: (point: Vector2) => void): this;
343
+ getMinMax(min?: Vector2, max?: Vector2): {
344
+ min: Vector2;
345
+ max: Vector2;
340
346
  };
341
347
  getCommands(): PathCommand[];
342
348
  drawTo(ctx: CanvasRenderingContext2D): this;
343
349
  }
344
350
 
345
351
  declare class QuadraticBezierCurve extends Curve {
346
- v0: Point2D;
347
- v1: Point2D;
348
- v2: Point2D;
349
- constructor(v0?: Point2D, v1?: Point2D, v2?: Point2D);
350
- getPoint(t: number, output?: Point2D): Point2D;
351
- transform(matrix: Matrix3): this;
352
- getMinMax(min?: Point2D, max?: Point2D): {
353
- min: Point2D;
354
- max: Point2D;
352
+ start: Vector2;
353
+ control: Vector2;
354
+ end: Vector2;
355
+ constructor(start?: Vector2, control?: Vector2, end?: Vector2);
356
+ getPoint(t: number, output?: Vector2): Vector2;
357
+ transformPoint(cb: (point: Vector2) => void): this;
358
+ getMinMax(min?: Vector2, max?: Vector2): {
359
+ min: Vector2;
360
+ max: Vector2;
355
361
  };
356
362
  getCommands(): PathCommand[];
357
363
  drawTo(ctx: CanvasRenderingContext2D): this;
@@ -359,41 +365,43 @@ declare class QuadraticBezierCurve extends Curve {
359
365
  }
360
366
 
361
367
  declare class RectangularCurve extends Curve {
362
- center: Point2D;
368
+ center: Vector2;
363
369
  rx: number;
364
370
  aspectRatio: number;
365
371
  start: number;
366
372
  end: number;
367
373
  curves: LineCurve[];
368
- pointT: number;
374
+ curveT: number;
369
375
  get x(): number;
370
376
  get y(): number;
371
377
  get width(): number;
372
378
  get height(): number;
373
- constructor(center: Point2D, rx: number, aspectRatio?: number, start?: number, end?: number);
374
- getPoint(t: number): Point2D;
375
- getPointAt(u: number): Point2D;
376
- getCurrentLine(t: number): LineCurve;
377
- getTangent(t: number): Point2D;
378
- getNormal(value: number): Point2D;
379
- transform(matrix: Matrix3): this;
380
- getMinMax(min?: Point2D, max?: Point2D): {
381
- min: Point2D;
382
- max: Point2D;
379
+ constructor(center: Vector2, rx: number, aspectRatio?: number, start?: number, end?: number);
380
+ update(): this;
381
+ getCurve(t: number): LineCurve;
382
+ getPoint(t: number, output?: Vector2): Vector2;
383
+ getPointAt(u: number, output?: Vector2): Vector2;
384
+ getTangent(t: number, output?: Vector2): Vector2;
385
+ getNormal(t: number, output?: Vector2): Vector2;
386
+ transformPoint(cb: (point: Vector2) => void): this;
387
+ getMinMax(min?: Vector2, max?: Vector2): {
388
+ min: Vector2;
389
+ max: Vector2;
383
390
  };
384
391
  getCommands(): PathCommand[];
385
392
  drawTo(ctx: CanvasRenderingContext2D): this;
386
393
  }
387
394
 
388
395
  declare class SplineCurve extends Curve {
389
- points: Point2D[];
390
- constructor(points?: Point2D[]);
396
+ points: Vector2[];
397
+ constructor(points?: Vector2[]);
391
398
  getDivisions(divisions?: number): number;
392
- getPoint(t: number, output?: Point2D): Point2D;
399
+ getPoint(t: number, output?: Vector2): Vector2;
400
+ transformPoint(cb: (point: Vector2) => void): this;
393
401
  copy(source: SplineCurve): this;
394
402
  }
395
403
 
396
404
  declare function parseSvgToDom(svg: string | SVGElement): SVGElement;
397
405
  declare function parseSvg(svg: string | SVGElement): Path2D[];
398
406
 
399
- export { BoundingBox, CircleCurve, CubicBezierCurve, Curve, CurvePath, EllipseCurve, HeartCurve, LineCurve, Matrix3, Path2D, PloygonCurve, Point2D, QuadraticBezierCurve, RectangularCurve, SplineCurve, parseSvg, parseSvgToDom };
407
+ export { BoundingBox, CircleCurve, CubicBezierCurve, Curve, CurvePath, EllipseCurve, HeartCurve, LineCurve, Matrix3, Path2D, PloygonCurve, QuadraticBezierCurve, RectangularCurve, SplineCurve, Vector2, type VectorLike, parseSvg, parseSvgToDom };
package/dist/index.js CHANGED
@@ -1 +1 @@
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,A)=>l in M?jt(M,l,{enumerable:!0,configurable:!0,writable:!0,value:A}):M[l]=A;var P=(M,l,A)=>Zt(M,typeof l!="symbol"?l+"":l,A);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 A{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 A(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 A(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,c=0,h=0,a=0,i=1){P(this,"elements",[]);this.set(e,t,s,n,o,c,h,a,i)}set(e,t,s,n,o,c,h,a,i){const u=this.elements;return u[0]=e,u[1]=n,u[2]=h,u[3]=t,u[4]=o,u[5]=a,u[6]=s,u[7]=c,u[8]=i,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,c=s[0],h=s[3],a=s[6],i=s[1],u=s[4],y=s[7],g=s[2],x=s[5],f=s[8],p=n[0],m=n[3],T=n[6],E=n[1],w=n[4],b=n[7],L=n[2],$=n[5],z=n[8];return o[0]=c*p+h*E+a*L,o[3]=c*m+h*w+a*$,o[6]=c*T+h*b+a*z,o[1]=i*p+u*E+y*L,o[4]=i*m+u*w+y*$,o[7]=i*T+u*b+y*z,o[2]=g*p+x*E+f*L,o[5]=g*m+x*w+f*$,o[8]=g*T+x*b+f*z,this}invert(){const e=this.elements,t=e[0],s=e[1],n=e[2],o=e[3],c=e[4],h=e[5],a=e[6],i=e[7],u=e[8],y=u*c-h*i,g=h*a-u*o,x=i*o-c*a,f=t*y+s*g+n*x;if(f===0)return this.set(0,0,0,0,0,0,0,0,0);const p=1/f;return e[0]=y*p,e[1]=(n*i-u*s)*p,e[2]=(h*s-n*c)*p,e[3]=g*p,e[4]=(u*t-n*a)*p,e[5]=(n*o-h*t)*p,e[6]=x*p,e[7]=(s*a-i*t)*p,e[8]=(c*t-s*o)*p,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(Y.makeScale(e,t)),this}rotate(e){return this.premultiply(Y.makeRotation(-e)),this}translate(e,t){return this.premultiply(Y.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 Y=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 c=Math.acos(Math.max(-1,Math.min(1,n/o)));return r*s-e*t<0&&(c=-c),c}function xt(r,e,t,s,n,o,c,h){if(e===0||t===0){r.lineTo(h.x,h.y);return}s=s*Math.PI/180,e=Math.abs(e),t=Math.abs(t);const a=(c.x-h.x)/2,i=(c.y-h.y)/2,u=Math.cos(s)*a+Math.sin(s)*i,y=-Math.sin(s)*a+Math.cos(s)*i;let g=e*e,x=t*t;const f=u*u,p=y*y,m=f/g+p/x;if(m>1){const pt=Math.sqrt(m);e=pt*e,t=pt*t,g=e*e,x=t*t}const T=g*p+x*f,E=(g*x-T)/T;let w=Math.sqrt(Math.max(0,E));n===o&&(w=-w);const b=w*e*y/t,L=-w*t*u/e,$=Math.cos(s)*b-Math.sin(s)*L+(c.x+h.x)/2,z=Math.sin(s)*b+Math.cos(s)*L+(c.y+h.y)/2,U=W(1,0,(u-b)/e,(y-L)/t),Q=W((u-b)/e,(y-L)/t,(-u-b)/e,(-y-L)/t)%(Math.PI*2);r.currentPath.absellipse($,z,e,t,U,U+Q,o===0,s)}function D(r,e){return r-(e-r)}function Mt(r,e){const t=new l,s=new l,n=new l;let o=!0,c=!1;for(let h=0,a=r.length;h<a;h++){const i=r[h];if(o&&(c=!0,o=!1),i.type==="m"||i.type==="M")i.type==="m"?(t.x+=i.x,t.y+=i.y):(t.x=i.x,t.y=i.y),s.x=t.x,s.y=t.y,e.moveTo(t.x,t.y),n.copy(t);else if(i.type==="h"||i.type==="H")i.type==="h"?t.x+=i.x:t.x=i.x,s.x=t.x,s.y=t.y,e.lineTo(t.x,t.y),c&&n.copy(t);else if(i.type==="v"||i.type==="V")i.type==="v"?t.y+=i.y:t.y=i.y,s.x=t.x,s.y=t.y,e.lineTo(t.x,t.y),c&&n.copy(t);else if(i.type==="l"||i.type==="L")i.type==="l"?(t.x+=i.x,t.y+=i.y):(t.x=i.x,t.y=i.y),s.x=t.x,s.y=t.y,e.lineTo(t.x,t.y),c&&n.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.x+=i.x,t.y+=i.y):(e.bezierCurveTo(i.x1,i.y1,i.x2,i.y2,i.x,i.y),s.x=i.x2,s.y=i.y2,t.x=i.x,t.y=i.y),c&&n.copy(t);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.x+=i.x,t.y+=i.y):(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.x=i.x,t.y=i.y),c&&n.copy(t);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.x+=i.x,t.y+=i.y):(e.quadraticCurveTo(i.x1,i.y1,i.x,i.y),s.x=i.x1,s.y=i.y1,t.x=i.x,t.y=i.y),c&&n.copy(t);else if(i.type==="t"||i.type==="T"){const u=D(t.x,s.x),y=D(t.y,s.y);s.x=u,s.y=y,i.type==="t"?(e.quadraticCurveTo(u,y,t.x+i.x,t.y+i.y),t.x+=i.x,t.y+=i.y):(e.quadraticCurveTo(u,y,i.x,i.y),t.x=i.x,t.y=i.y),c&&n.copy(t)}else if(i.type==="a"||i.type==="A"){if(i.type==="a"){if(i.x===0&&i.y===0)continue;t.x+=i.x,t.y+=i.y}else{if(i.x===t.x&&i.y===t.y)continue;t.x=i.x,t.y=i.y}const u=t.clone();s.x=t.x,s.y=t.y,xt(e,i.rx,i.ry,i.angle,i.largeArcFlag,i.sweepFlag,u,t),c&&n.copy(t)}else i.type==="z"||i.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",i);c=!1}}const d={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 h=0,a=!0,i="",u="";const y=[];function g(m,T,E){const w=new SyntaxError(`Unexpected character "${m}" at index ${T}.`);throw w.partial=E,w}function x(){i!==""&&(u===""?y.push(Number(i)):y.push(Number(i)*10**Number(u))),i="",u=""}let f;const p=r.length;for(let m=0;m<p;m++){if(f=r[m],Array.isArray(e)&&e.includes(y.length%t)&&d.FLAGS.test(f)){h=1,i=f,x();continue}if(h===0){if(d.WHITESPACE.test(f))continue;if(d.DIGIT.test(f)||d.SIGN.test(f)){h=1,i=f;continue}if(d.POINT.test(f)){h=2,i=f;continue}d.COMMA.test(f)&&(a&&g(f,m,y),a=!0)}if(h===1){if(d.DIGIT.test(f)){i+=f;continue}if(d.POINT.test(f)){i+=f,h=2;continue}if(d.EXP.test(f)){h=3;continue}d.SIGN.test(f)&&i.length===1&&d.SIGN.test(i[0])&&g(f,m,y)}if(h===2){if(d.DIGIT.test(f)){i+=f;continue}if(d.EXP.test(f)){h=3;continue}d.POINT.test(f)&&i[i.length-1]==="."&&g(f,m,y)}if(h===3){if(d.DIGIT.test(f)){u+=f;continue}if(d.SIGN.test(f)){if(u===""){u+=f;continue}u.length===1&&d.SIGN.test(u)&&g(f,m,y)}}d.WHITESPACE.test(f)?(x(),h=0,a=!1):d.COMMA.test(f)?(x(),h=0,a=!0):d.SIGN.test(f)?(x(),h=1,i=f):d.POINT.test(f)?(x(),h=2,i=f):g(f,m,y)}return x(),y}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 vt(r){let e="";for(let t=0,s=r.length;t<s;t++)e+=`${mt(r[t])} `;return e}const dt=/[a-df-z][^a-df-z]*/gi;function Pt(r){const e=[],t=r.match(dt);if(!t)return e;for(let s=0,n=t.length;s<n;s++){const o=t[s],c=o.charAt(0),h=o.slice(1).trim();let a;switch(c){case"m":case"M":a=S(h);for(let i=0,u=a.length;i<u;i+=2)i===0?e.push({type:c,x:a[i],y:a[i+1]}):e.push({type:c==="m"?"l":"L",x:a[i],y:a[i+1]});break;case"h":case"H":a=S(h);for(let i=0,u=a.length;i<u;i++)e.push({type:c,x:a[i]});break;case"v":case"V":a=S(h);for(let i=0,u=a.length;i<u;i++)e.push({type:c,y:a[i]});break;case"l":case"L":a=S(h);for(let i=0,u=a.length;i<u;i+=2)e.push({type:c,x:a[i],y:a[i+1]});break;case"c":case"C":a=S(h);for(let i=0,u=a.length;i<u;i+=6)e.push({type:c,x1:a[i],y1:a[i+1],x2:a[i+2],y2:a[i+3],x:a[i+4],y:a[i+5]});break;case"s":case"S":a=S(h);for(let i=0,u=a.length;i<u;i+=4)e.push({type:c,x2:a[i],y2:a[i+1],x:a[i+2],y:a[i+3]});break;case"q":case"Q":a=S(h);for(let i=0,u=a.length;i<u;i+=4)e.push({type:c,x1:a[i],y1:a[i+1],x:a[i+2],y:a[i+3]});break;case"t":case"T":a=S(h);for(let i=0,u=a.length;i<u;i+=2)e.push({type:c,x:a[i],y:a[i+1]});break;case"a":case"A":a=S(h,[3,4],7);for(let i=0,u=a.length;i<u;i+=7)e.push({type:c,rx:a[i],ry:a[i+1],angle:a[i+2],largeArcFlag:a[i+3],sweepFlag:a[i+4],x:a[i+5],y:a[i+6]});break;case"z":case"Z":e.push({type:c});break;default:console.warn(o)}}return e}class I{constructor(){P(this,"arcLengthDivisions",200);P(this,"_cacheArcLengths");P(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 c=1;c<=e;c++)s=this.getPoint(c/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 c;t?c=t:c=e*s[o-1];let h=0,a=o-1,i;for(;h<=a;)if(n=Math.floor(h+(a-h)/2),i=s[n]-c,i<0)h=n+1;else if(i>0)a=n-1;else{a=n;break}if(n=a,s[n]===c)return n/(o-1);const u=s[n],g=s[n+1]-u,x=(c-u)/g;return(n+x)/(o-1)}getTangent(e,t=new l){let n=e-1e-4,o=e+1e-4;return n<0&&(n=0),o>1&&(o=1),t.copy(this.getPoint(o)).sub(this.getPoint(n)).normalize()}getTangentAt(e,t=new l){return this.getTangent(this.getUtoTmapping(e),t)}transform(e){return 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 A(e.x,e.y,t.x-e.x,t.y-e.y)}getCommands(){return[]}getData(){return vt(this.getCommands())}drawTo(e){return this}copy(e){return this.arcLengthDivisions=e.arcLengthDivisions,this}clone(){return new this.constructor().copy(this)}}class O extends I{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))}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(r,e,t,s,n){const o=(s-e)*.5,c=(n-t)*.5,h=r*r,a=r*h;return(2*t-2*s+o+c)*a+(-3*t+3*s-2*o-c)*h+o*r+t}function Tt(r,e){const t=1-r;return t*t*e}function wt(r,e){return 2*(1-r)*r*e}function bt(r,e){return r*r*e}function V(r,e,t,s){return Tt(r,e)+wt(r,t)+bt(r,s)}function At(r,e){const t=1-r;return t*t*t*e}function Ct(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 At(r,e)+Ct(r,t)+It(r,s)+kt(r,n)}class Z extends I{constructor(e=new l,t=new l,s=new l,n=new l){super(),this.v0=e,this.v1=t,this.v2=s,this.v3=n}getPoint(e,t=new l){const{v0:s,v1:n,v2:o,v3:c}=this;return t.set(j(e,s.x,n.x,o.x,c.x),j(e,s.y,n.y,o.y,c.y)),t}transform(e){return this.v0.applyMatrix3(e),this.v1.applyMatrix3(e),this.v2.applyMatrix3(e),this.v3.applyMatrix3(e),this}getMinMax(e=l.MAX,t=l.MIN){const{v0:s,v1:n,v2:o,v3:c}=this;return e.x=Math.min(e.x,s.x,n.x,o.x,c.x),e.y=Math.min(e.y,s.y,n.y,o.y,c.y),t.x=Math.max(t.x,s.x,n.x,o.x,c.x),t.y=Math.max(t.y,s.y,n.y,o.y,c.y),{min:e,max:t}}getCommands(){const{v0:e,v1:t,v2:s,v3: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{v1:t,v2:s,v3: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.v0.copy(e.v0),this.v1.copy(e.v1),this.v2.copy(e.v2),this.v3.copy(e.v3),this}}const Lt=new C,J=new C,K=new C,R=new l;class tt extends I{constructor(e=0,t=0,s=1,n=1,o=0,c=Math.PI*2,h=!1,a=0){super(),this.x=e,this.y=t,this.radiusX=s,this.radiusY=n,this.startAngle=o,this.endAngle=c,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 c=this.startAngle+e*n;let h=this.x+this.radiusX*Math.cos(c),a=this.y+this.radiusY*Math.sin(c);if(this.rotation!==0){const i=Math.cos(this.rotation),u=Math.sin(this.rotation),y=h-this.x,g=a-this.y;h=y*i-g*u+this.x,a=y*u+g*i+this.y}return t.set(h,a)}getDivisions(e=12){return e*2}getCommands(){const{x:e,y:t,radiusX:s,radiusY:n,startAngle:o,endAngle:c,clockwise:h,rotation:a}=this,i=e+s*Math.cos(o)*Math.cos(a)-n*Math.sin(o)*Math.sin(a),u=t+s*Math.cos(o)*Math.sin(a)+n*Math.sin(o)*Math.cos(a),y=Math.abs(o-c),g=y>Math.PI?1:0,x=h?1:0,f=a*180/Math.PI;if(y>=2*Math.PI){const p=o+Math.PI,m=e+s*Math.cos(p)*Math.cos(a)-n*Math.sin(p)*Math.sin(a),T=t+s*Math.cos(p)*Math.sin(a)+n*Math.sin(p)*Math.cos(a);return[{type:"M",x:i,y:u},{type:"A",rx:s,ry:n,angle:f,largeArcFlag:0,sweepFlag:x,x:m,y:T},{type:"A",rx:s,ry:n,angle:f,largeArcFlag:0,sweepFlag:x,x:i,y:u}]}else{const p=e+s*Math.cos(c)*Math.cos(a)-n*Math.sin(c)*Math.sin(a),m=t+s*Math.cos(c)*Math.sin(a)+n*Math.sin(c)*Math.cos(a);return[{type:"M",x:i,y:u},{type:"A",rx:s,ry:n,angle:f,largeArcFlag:g,sweepFlag:x,x:p,y:m}]}}drawTo(e){const{x:t,y:s,radiusX:n,radiusY:o,rotation:c,startAngle:h,endAngle:a,clockwise:i}=this;return e.ellipse(t,s,n,o,c,h,a,!i),this}transform(e){return R.set(this.x,this.y),R.applyMatrix3(e),this.x=R.x,this.y=R.y,Et(e)?St(this,e):Nt(this,e),this}getMinMax(e=l.MAX,t=l.MIN){const{x:s,y:n,radiusX:o,radiusY:c,rotation:h}=this,a=Math.cos(h),i=Math.sin(h),u=Math.sqrt(o*o*a*a+c*c*i*i),y=Math.sqrt(o*o*i*i+c*c*a*a);return e.x=Math.min(e.x,s-u),e.y=Math.min(e.y,n-y),t.x=Math.max(t.x,s+u),t.y=Math.max(t.y,n+y),{min:e,max:t}}copy(e){return super.copy(e),this.x=e.x,this.y=e.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),c=new l(t*n,t*o),h=new l(-s*o,s*n),a=c.applyMatrix3(e),i=h.applyMatrix3(e),u=Lt.set(a.x,i.x,0,a.y,i.y,0,0,0,1),y=J.copy(u).invert(),f=K.copy(y).transpose().multiply(y).elements,p=$t(f[0],f[1],f[4]),m=Math.sqrt(p.rt1),T=Math.sqrt(p.rt2);if(r.radiusX=1/m,r.radiusY=1/T,r.rotation=Math.atan2(p.sn,p.cs),!((r.endAngle-r.startAngle)%(2*Math.PI)<Number.EPSILON)){const w=J.set(m,0,0,0,T,0,0,0,1),b=K.set(p.cs,p.sn,0,-p.sn,p.cs,0,0,0,1),L=w.multiply(b).multiply(u),$=z=>{const{x:U,y:Q}=new l(Math.cos(z),Math.sin(z)).applyMatrix3(L);return Math.atan2(Q,U)};r.startAngle=$(r.startAngle),r.endAngle=$(r.endAngle),et(e)&&(r.clockwise=!r.clockwise)}}function Nt(r,e){const t=st(e),s=nt(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,et(e)&&(r.startAngle*=-1,r.endAngle*=-1,r.clockwise=!r.clockwise)}function et(r){const e=r.elements;return e[0]*e[4]-e[1]*e[3]<0}function Et(r){const e=r.elements,t=e[0]*e[3]+e[1]*e[4];if(t===0)return!1;const s=st(r),n=nt(r);return Math.abs(t/(s*n))>Number.EPSILON}function st(r){const e=r.elements;return Math.sqrt(e[0]*e[0]+e[1]*e[1])}function nt(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,c,h;const a=r+t,i=r-t,u=Math.sqrt(i*i+4*e*e);return a>0?(s=.5*(a+u),h=1/s,n=r*h*t-e*h*e):a<0?n=.5*(a-u):(s=.5*u,n=-.5*u),i>0?o=i+u:o=i-u,Math.abs(o)>2*Math.abs(e)?(h=-2*e/o,c=1/Math.sqrt(1+h*h),o=h*c):Math.abs(e)===0?(o=1,c=0):(h=-.5*o/e,o=1/Math.sqrt(1+h*h),c=h*o),i>0&&(h=o,o=-c,c=h),{rt1:s,rt2:n,cs:o,sn:c}}class q extends I{constructor(e=new l,t=new l){super(),this.v1=e,this.v2=t}getPoint(e,t=new l){return e===1?t.copy(this.v2):(t.copy(this.v2).sub(this.v1),t.multiplyScalar(e).add(this.v1)),t}getPointAt(e,t=new l){return this.getPoint(e,t)}getTangent(e,t=new l){return t.subVectors(this.v2,this.v1).normalize()}getTangentAt(e,t=new l){return this.getTangent(e,t)}transform(e){return this.v1.applyMatrix3(e),this.v2.applyMatrix3(e),this}getDivisions(){return 1}getMinMax(e=l.MAX,t=l.MIN){const{v1:s,v2: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{v1:e,v2:t}=this;return[{type:"M",x:e.x,y:e.y},{type:"L",x:t.x,y:t.y}]}drawTo(e){const{v2:t}=this;return e.lineTo(t.x,t.y),this}copy(e){return super.copy(e),this.v1.copy(e.v1),this.v2.copy(e.v2),this}}class zt extends I{constructor(t,s,n=0,o=1){super();P(this,"curves");P(this,"pointT",0);this.center=t,this.size=s,this.start=n,this.end=o;const{x:c,y:h}=this.center,a=new l(c+.5*this.size,h-.5*this.size),i=new l(c-.5*this.size,h-.5*this.size),u=new l(c,h+.5*this.size),y=new O(a,Math.SQRT1_2*this.size,-.25*Math.PI,.75*Math.PI),g=new O(i,Math.SQRT1_2*this.size,-.75*Math.PI,.25*Math.PI),x=new O(u,.5*Math.SQRT1_2*this.size,.75*Math.PI,1.25*Math.PI),f=new l(c,h+this.size),p=new l(c+this.size,h),m=new l().lerpVectors(p,f,.75),T=new l(c-this.size,h),E=new l().lerpVectors(T,f,.75),w=new q(p,m),b=new q(E,T);this.curves=[y,w,x,b,g]}getPoint(t){return this.getCurrentLine(t).getPoint(this.pointT)}getPointAt(t){return this.getPoint(t)}getCurrentLine(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.pointT=s/o):s<o+.75?(n=1,this.pointT=(s-o)/.75):s<5*Math.PI/8+.75?(n=2,this.pointT=(s-o-.75)/(Math.PI/8)):s<5*Math.PI/8+1.5?(n=3,this.pointT=(s-5*Math.PI/8-.75)/.75):(n=4,this.pointT=(s-5*Math.PI/8-1.5)/o),this.curves[n]}getTangent(t){return this.getCurrentLine(t).getTangent(this.pointT).normalize()}getNormal(t){const s=this.getCurrentLine(t);return new l(s.v2.y-s.v1.y,-(s.v2.x-s.v1.x)).normalize()}transform(t){return this.curves.forEach(s=>s.transform(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 qt extends I{constructor(t,s=0,n=0,o=0,c=1){super();P(this,"curves",[]);P(this,"points",[]);this.center=t,this.radius=s,this.num=n,this.start=o,this.end=c;for(let h=0;h<this.num;h++){let a=h*2*Math.PI/this.num;a-=.5*Math.PI;const i=new l(this.radius*Math.cos(a),this.radius*Math.sin(a));i.add(this.center),this.points.push(i)}for(let h=0;h<this.num;h++)this.curves.push(new q(this.points[h],this.points[(h+1)%this.num]))}getPoint(t){return this.getCurrentLine(t),this.currentLine.getPoint(this.pointK)}getPointAt(t){return this.getPoint(t)}getCurrentLine(t){let s=(t*(this.end-this.start)+this.start)%1;s<0&&(s+=1);const n=s*this.num,o=Math.floor(n);return this.pointK=n-o,this.currentLine=this.curves[o],this.currentLine}getTangent(t){return this.getCurrentLine(t).getTangent(0).normalize()}getNormal(t){const s=this.getCurrentLine(t);return new l(s.v2.y-s.v1.y,-(s.v2.x-s.v1.x)).normalize()}transform(t){return this.curves.forEach(s=>s.transform(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 it extends I{constructor(e=new l,t=new l,s=new l){super(),this.v0=e,this.v1=t,this.v2=s}getPoint(e,t=new l){const{v0:s,v1:n,v2:o}=this;return t.set(V(e,s.x,n.x,o.x),V(e,s.y,n.y,o.y)),t}transform(e){return this.v0.applyMatrix3(e),this.v1.applyMatrix3(e),this.v2.applyMatrix3(e),this}getMinMax(e=l.MAX,t=l.MIN){const{v0:s,v1:n,v2:o}=this,c=.5*(s.x+n.x),h=.5*(s.y+n.y),a=.5*(s.x+o.x),i=.5*(s.y+o.y);return e.x=Math.min(e.x,s.x,o.x,c,a),e.y=Math.min(e.y,s.y,o.y,h,i),t.x=Math.max(t.x,s.x,o.x,c,a),t.y=Math.max(t.y,s.y,o.y,h,i),{min:e,max:t}}getCommands(){const{v0:e,v1:t,v2: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{v1:t,v2:s}=this;return e.quadraticCurveTo(t.x,t.y,s.x,s.y),this}copy(e){return super.copy(e),this.v0.copy(e.v0),this.v1.copy(e.v1),this.v2.copy(e.v2),this}}class rt extends I{constructor(t,s,n=1,o=0,c=1){super();P(this,"curves",[]);P(this,"pointT",0);this.center=t,this.rx=s,this.aspectRatio=n,this.start=o,this.end=c;const{x:h,y:a}=this.center,i=this.rx,u=this.rx/this.aspectRatio,y=[new l(h-i,a-u),new l(h+i,a-u),new l(h+i,a+u),new l(h-i,a+u)];for(let g=0;g<4;g++)this.curves.push(new q(y[g].clone(),y[(g+1)%4].clone()))}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}getPoint(t){return this.getCurrentLine(t).getPoint(this.pointT)}getPointAt(t){return this.getPoint(t)}getCurrentLine(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.pointT=s/this.aspectRatio):s<this.aspectRatio+1?(n=1,this.pointT=(s-this.aspectRatio)/1):s<2*this.aspectRatio+1?(n=2,this.pointT=(s-this.aspectRatio-1)/this.aspectRatio):(n=3,this.pointT=(s-2*this.aspectRatio-1)/1),this.curves[n]}getTangent(t){return this.getCurrentLine(t).getTangent(0).normalize()}getNormal(t){const{v1:s,v2:n}=this.getCurrentLine(t);return new l(n.y-s.y,-(n.x-s.x)).normalize()}transform(t){return this.curves.forEach(s=>s.transform(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 I{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),c=n-o,h=s[o===0?o:o-1],a=s[o],i=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(c,h.x,a.x,i.x,u.x),H(c,h.y,a.y,i.y,u.y)),t}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 I{constructor(t){super();P(this,"curves",[]);P(this,"currentPoint",new l);P(this,"autoClose",!1);P(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 q(s,t)),this}getPoint(t,s=new l){const n=t*this.getLength(),o=this.getCurveLengths();let c=0;for(;c<o.length;){if(o[c]>=n){const h=o[c]-n,a=this.curves[c],i=a.getLength();return a.getPointAt(i===0?0:1-h/i,s)}c++}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,c=this.curves;o<c.length;o++){const h=c[o],a=h.getPoints(h.getDivisions(t));for(let i=0;i<a.length;i++){const u=a[i];n&&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,c,h){return this.curves.push(new Z(this.currentPoint.clone(),new l(t,s),new l(n,o),new l(c,h))),this.currentPoint.set(c,h),this}lineTo(t,s){return this.curves.push(new q(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 it(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 rt(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,c,h=!1){const a=this.currentPoint;return this.absarc(t+a.x,s+a.y,n,o,c,h),this}absarc(t,s,n,o,c,h=!1){return this.absellipse(t,s,n,n,o,c,h),this}ellipse(t,s,n,o,c,h,a=!1,i=0){const u=this.currentPoint;return this.absellipse(t+u.x,s+u.y,n,o,c,h,a,i),this}absellipse(t,s,n,o,c,h,a=!1,i=0){const u=new tt(t,s,n,o,c,h,a,i);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 k{constructor(e){P(this,"currentPath",new X);P(this,"paths",[this.currentPath]);P(this,"userData");e&&(e instanceof k?this.addPath(e):Array.isArray(e)?this.addCommands(e):this.addData(e))}addPath(e){return e instanceof k?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,c){return this.currentPath.bezierCurveTo(e,t,s,n,o,c),this}quadraticCurveTo(e,t,s,n){return this.currentPath.quadraticCurveTo(e,t,s,n),this}arc(e,t,s,n,o,c){return this.currentPath.absarc(e,t,s,n,o,!c),this}arcTo(e,t,s,n,o){return console.warn("Method arcTo not supported yet"),this}ellipse(e,t,s,n,o,c,h,a){return this.currentPath.absellipse(e,t,s,n,c,h,!a,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(Pt(e)),this}splineThru(e){return this.currentPath.splineThru(e),this}forEachCurve(e){return this.paths.forEach(t=>t.curves.forEach(s=>e(s))),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 A(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:c}=this.getBoundingBox();t.width=o,t.height=c;const h=t.getContext("2d");return h&&(h.translate(-s,-n),e?this.fillTo(h):this.strokeTo(h)),t}clone(){return new this.constructor().copy(this)}}const G="px",at=90,ht=["mm","cm","in","pt","pc","px"],_={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 v(r){let e="px";if(typeof r=="string"||r instanceof String)for(let s=0,n=ht.length;s<n;s++){const o=ht[s];if(r.endsWith(o)){e=o,r=r.substring(0,r.length-o.length);break}}let t;return e==="px"&&G!=="px"?t=_.in[G]/at:(t=_[e][G],t<0&&(t=_[e].in*at)),t*Number.parseFloat(r)}const Dt=new C,F=new C,ct=new C,ut=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(v(r.getAttribute("x")),v(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 c=o.indexOf("("),h=o.length;if(c>0&&c<h){const a=o.slice(0,c),i=S(o.slice(c+1));switch(t.identity(),a){case"translate":if(i.length>=1){const u=i[0];let y=0;i.length>=2&&(y=i[1]),t.translate(u,y)}break;case"rotate":if(i.length>=1){let u=0,y=0,g=0;u=i[0]*Math.PI/180,i.length>=3&&(y=i[1],g=i[2]),F.makeTranslation(-y,-g),ct.makeRotation(u),ut.multiplyMatrices(ct,F),F.makeTranslation(y,g),t.multiplyMatrices(F,ut)}break;case"scale":i.length>=1&&t.scale(i[0],i[1]??i[0]);break;case"skewX":i.length===1&&t.set(1,Math.tan(i[0]*Math.PI/180),0,0,1,0,0,0,1);break;case"skewY":i.length===1&&t.set(1,0,0,Math.tan(i[0]*Math.PI/180),1,0,0,0,1);break;case"matrix":i.length===6&&t.set(i[0],i[2],i[4],i[1],i[3],i[5],0,0,1);break}}e.premultiply(t)}}return e}function Rt(r){return new k().addPath(new X().absarc(v(r.getAttribute("cx")||0),v(r.getAttribute("cy")||0),v(r.getAttribute("r")||0),0,Math.PI*2))}function Ft(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 c=Object.fromEntries(Object.entries(s.style).filter(([,h])=>h!==""));e[n[o]]=Object.assign(e[n[o]]||{},c)}}}function Ut(r){return new k().addPath(new X().absellipse(v(r.getAttribute("cx")||0),v(r.getAttribute("cy")||0),v(r.getAttribute("rx")||0),v(r.getAttribute("ry")||0),0,Math.PI*2))}function Yt(r){return new k().moveTo(v(r.getAttribute("x1")||0),v(r.getAttribute("y1")||0)).lineTo(v(r.getAttribute("x2")||0),v(r.getAttribute("y2")||0))}function Gt(r){const e=new k,t=r.getAttribute("d");return!t||t==="none"?null:(e.addData(t),e)}const _t=/([+-]?(?:\d+(?:\.\d+)?|\.\d+)(?:e[+-]?\d+)?)(?:,|\s)([+-]?\d*\.?\d+(?:e[+-]?\d+)?)/g;function Bt(r){var s;const e=new k;let t=0;return(s=r.getAttribute("points"))==null||s.replace(_t,(n,o,c)=>{const h=v(o),a=v(c);return t===0?e.moveTo(h,a):e.lineTo(h,a),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 k;let t=0;return(s=r.getAttribute("points"))==null||s.replace(Qt,(n,o,c)=>{const h=v(o),a=v(c);return t===0?e.moveTo(h,a):e.lineTo(h,a),t++,n}),e.currentPath.autoClose=!1,e}function Ht(r){const e=v(r.getAttribute("x")||0),t=v(r.getAttribute("y")||0),s=v(r.getAttribute("rx")||r.getAttribute("ry")||0),n=v(r.getAttribute("ry")||r.getAttribute("rx")||0),o=v(r.getAttribute("width")),c=v(r.getAttribute("height")),h=1-.551915024494,a=new k;return a.moveTo(e+s,t),a.lineTo(e+o-s,t),(s!==0||n!==0)&&a.bezierCurveTo(e+o-s*h,t,e+o,t+n*h,e+o,t+n),a.lineTo(e+o,t+c-n),(s!==0||n!==0)&&a.bezierCurveTo(e+o,t+c-n*h,e+o-s*h,t+c,e+o-s,t+c),a.lineTo(e+s,t+c),(s!==0||n!==0)&&a.bezierCurveTo(e+s*h,t+c,e,t+c-n*h,e,t+c-n),a.lineTo(e,t+n),(s!==0||n!==0)&&a.bezierCurveTo(e,t+n*h,e+s*h,t,e+s,t),a}function N(r,e,t){e=Object.assign({},e);let s={};if(r.hasAttribute("class")){const h=r.getAttribute("class").split(/\s/).filter(Boolean).map(a=>a.trim());for(let a=0;a<h.length;a++)s=Object.assign(s,t[`.${h[a]}`])}r.hasAttribute("id")&&(s=Object.assign(s,t[`#${r.getAttribute("id")}`]));function n(h,a,i){i===void 0&&(i=function(y){return y.startsWith("url")&&console.warn("url access in attributes is not implemented."),y}),r.hasAttribute(h)&&(e[a]=i(r.getAttribute(h))),s[h]&&(e[a]=i(s[h])),r.style&&r.style[h]!==""&&(e[a]=i(r.style[h]))}function o(h){return Math.max(0,Math.min(1,v(h)))}function c(h){return Math.max(0,v(h))}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",c),n("stroke-opacity","strokeOpacity",o),n("stroke-width","strokeWidth",c),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=N(r,e,o);break;case"style":Ft(r,o);break;case"g":e=N(r,e,o);break;case"path":e=N(r,e,o),r.hasAttribute("d")&&(n=Gt(r));break;case"rect":e=N(r,e,o),n=Ht(r);break;case"polygon":e=N(r,e,o),n=Bt(r);break;case"polyline":e=N(r,e,o),n=Wt(r);break;case"circle":e=N(r,e,o),n=Rt(r);break;case"ellipse":e=N(r,e,o),n=Ut(r);break;case"line":e=N(r,e,o),n=Yt(r);break;case"defs":s=!0;break;case"use":{e=N(r,e,o);const g=(r.getAttributeNS("http://www.w3.org/1999/xlink","href")||"").substring(1),x=(u=r.viewportElement)==null?void 0:u.getElementById(g);x?B(x,e,t):console.warn(`'use node' references non-existent node id: ${g}`);break}default:console.warn(r);break}const c=new C,h=[],a=Xt(r,c,h);n&&(n.transform(c),t.push(n),n.userData={node:r,style:e});const i=r.childNodes;for(let y=0,g=i.length;y<g;y++){const x=i[y];s&&x.nodeName!=="style"&&x.nodeName!=="defs"||B(x,e,t)}return a&&(h.pop(),h.length>0?c.copy(h[h.length-1]):c.identity()),t}const lt="data:image/svg+xml;",yt=`${lt}base64,`,ft=`${lt}charset=utf8,`;function gt(r){if(typeof r=="string"){let e;return r.startsWith(yt)?(r=r.substring(yt.length,r.length),e=atob(r)):r.startsWith(ft)?(r=r.substring(ft.length,r.length),e=decodeURIComponent(r)):e=r,new DOMParser().parseFromString(e,"image/svg+xml").documentElement}else return r}function Vt(r){return B(gt(r),{fill:"#000",fillOpacity:1,strokeOpacity:1,strokeWidth:1,strokeLineJoin:"miter",strokeLineCap:"butt",strokeMiterLimit:4})}M.BoundingBox=A,M.CircleCurve=O,M.CubicBezierCurve=Z,M.Curve=I,M.CurvePath=X,M.EllipseCurve=tt,M.HeartCurve=zt,M.LineCurve=q,M.Matrix3=C,M.Path2D=k,M.PloygonCurve=qt,M.Point2D=l,M.QuadraticBezierCurve=it,M.RectangularCurve=rt,M.SplineCurve=ot,M.parseSvg=Vt,M.parseSvgToDom=gt,Object.defineProperty(M,Symbol.toStringTag,{value:"Module"})});
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"})});