modern-path2d 0.1.6 → 0.1.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +372 -330
- package/dist/index.d.cts +146 -132
- package/dist/index.d.mts +146 -132
- package/dist/index.d.ts +146 -132
- package/dist/index.js +1 -1
- package/dist/index.mjs +371 -330
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -19,27 +19,31 @@ declare class Matrix3 {
|
|
|
19
19
|
clone(): Matrix3;
|
|
20
20
|
}
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
interface VectorLike {
|
|
23
23
|
x: number;
|
|
24
24
|
y: number;
|
|
25
|
-
|
|
26
|
-
|
|
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(
|
|
30
|
-
sub(
|
|
31
|
-
distanceTo(
|
|
32
|
-
distanceToSquared(
|
|
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:
|
|
40
|
+
subVectors(a: VectorLike, b: VectorLike): this;
|
|
37
41
|
normalize(): this;
|
|
38
|
-
lerpVectors(v1:
|
|
39
|
-
equals(
|
|
42
|
+
lerpVectors(v1: VectorLike, v2: VectorLike, alpha: number): this;
|
|
43
|
+
equals(vec: VectorLike): boolean;
|
|
40
44
|
applyMatrix3(m: Matrix3): this;
|
|
41
|
-
copy(
|
|
42
|
-
clone():
|
|
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():
|
|
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:
|
|
70
|
+
currentPoint: Vector2;
|
|
67
71
|
autoClose: boolean;
|
|
68
72
|
protected _cacheLengths: number[];
|
|
69
|
-
constructor(points?:
|
|
73
|
+
constructor(points?: Vector2[]);
|
|
70
74
|
addCurve(curve: Curve): this;
|
|
71
75
|
closePath(): this;
|
|
72
|
-
getPoint(position: number, output?:
|
|
76
|
+
getPoint(position: number, output?: Vector2): Vector2;
|
|
73
77
|
getLength(): number;
|
|
74
78
|
updateArcLengths(): void;
|
|
75
79
|
getCurveLengths(): number[];
|
|
76
|
-
getSpacedPoints(divisions?: number):
|
|
77
|
-
getPoints(divisions?: number):
|
|
78
|
-
setFromPoints(points:
|
|
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:
|
|
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?:
|
|
91
|
-
min:
|
|
92
|
-
max:
|
|
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:
|
|
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?:
|
|
122
|
-
min:
|
|
123
|
-
max:
|
|
126
|
+
getMinMax(min?: Vector2, max?: Vector2): {
|
|
127
|
+
min: Vector2;
|
|
128
|
+
max: Vector2;
|
|
124
129
|
};
|
|
125
130
|
getBoundingBox(): BoundingBox;
|
|
126
131
|
getCommands(): PathCommand[];
|
|
@@ -193,26 +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?:
|
|
197
|
-
getPointAt(u: number, output?:
|
|
198
|
-
getPoints(divisions?: number):
|
|
199
|
-
getSpacedPoints(divisions?: number):
|
|
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?:
|
|
205
|
-
getTangentAt(u: number, output?:
|
|
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
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
max: Point2D;
|
|
215
|
+
getMinMax(min?: Vector2, max?: Vector2): {
|
|
216
|
+
min: Vector2;
|
|
217
|
+
max: Vector2;
|
|
214
218
|
};
|
|
215
|
-
|
|
219
|
+
getBoundingBox(): BoundingBox;
|
|
216
220
|
getCommands(): PathCommand[];
|
|
217
221
|
getData(): string;
|
|
218
222
|
/** overrideable */
|
|
@@ -222,31 +226,32 @@ declare abstract class Curve {
|
|
|
222
226
|
}
|
|
223
227
|
|
|
224
228
|
declare class CircleCurve extends Curve {
|
|
225
|
-
center:
|
|
229
|
+
center: Vector2;
|
|
226
230
|
radius: number;
|
|
227
231
|
start: number;
|
|
228
232
|
end: number;
|
|
229
|
-
constructor(center:
|
|
230
|
-
getPoint(t: number):
|
|
231
|
-
getTangent(t: number):
|
|
232
|
-
getNormal(t: number):
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
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;
|
|
236
241
|
};
|
|
237
242
|
}
|
|
238
243
|
|
|
239
244
|
declare class CubicBezierCurve extends Curve {
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
constructor(
|
|
245
|
-
getPoint(t: number, output?:
|
|
246
|
-
|
|
247
|
-
getMinMax(min?:
|
|
248
|
-
min:
|
|
249
|
-
max:
|
|
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;
|
|
250
255
|
};
|
|
251
256
|
getCommands(): PathCommand[];
|
|
252
257
|
drawTo(ctx: CanvasRenderingContext2D): this;
|
|
@@ -254,99 +259,105 @@ declare class CubicBezierCurve extends Curve {
|
|
|
254
259
|
}
|
|
255
260
|
|
|
256
261
|
declare class EllipseCurve extends Curve {
|
|
257
|
-
|
|
258
|
-
y: number;
|
|
262
|
+
center: Vector2;
|
|
259
263
|
radiusX: number;
|
|
260
264
|
radiusY: number;
|
|
261
265
|
startAngle: number;
|
|
262
266
|
endAngle: number;
|
|
263
267
|
clockwise: boolean;
|
|
264
268
|
rotation: number;
|
|
265
|
-
constructor(
|
|
266
|
-
getPoint(t: number, output?:
|
|
269
|
+
constructor(center?: Vector2, radiusX?: number, radiusY?: number, startAngle?: number, endAngle?: number, clockwise?: boolean, rotation?: number);
|
|
270
|
+
getPoint(t: number, output?: Vector2): Vector2;
|
|
267
271
|
getDivisions(divisions?: number): number;
|
|
268
272
|
getCommands(): PathCommand[];
|
|
269
273
|
drawTo(ctx: CanvasRenderingContext2D): this;
|
|
270
274
|
transform(matrix: Matrix3): this;
|
|
275
|
+
transformPoint(cb: (point: Vector2) => void): this;
|
|
276
|
+
getMinMax(min?: Vector2, max?: Vector2): {
|
|
277
|
+
min: Vector2;
|
|
278
|
+
max: Vector2;
|
|
279
|
+
};
|
|
271
280
|
copy(source: EllipseCurve): this;
|
|
272
281
|
}
|
|
273
282
|
|
|
274
|
-
declare class
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
start
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
getMinMax(min?: Point2D, max?: Point2D): {
|
|
289
|
-
min: Point2D;
|
|
290
|
-
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;
|
|
291
297
|
};
|
|
292
298
|
getCommands(): PathCommand[];
|
|
293
299
|
drawTo(ctx: CanvasRenderingContext2D): this;
|
|
300
|
+
copy(source: LineCurve): this;
|
|
294
301
|
}
|
|
295
302
|
|
|
296
|
-
declare class
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
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;
|
|
309
321
|
};
|
|
310
322
|
getCommands(): PathCommand[];
|
|
311
323
|
drawTo(ctx: CanvasRenderingContext2D): this;
|
|
312
|
-
copy(source: LineCurve): this;
|
|
313
324
|
}
|
|
314
325
|
|
|
315
326
|
declare class PloygonCurve extends Curve {
|
|
316
|
-
center:
|
|
327
|
+
center: Vector2;
|
|
317
328
|
radius: number;
|
|
318
|
-
|
|
329
|
+
number: number;
|
|
319
330
|
start: number;
|
|
320
331
|
end: number;
|
|
321
332
|
curves: LineCurve[];
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
getTangent(
|
|
330
|
-
getNormal(
|
|
331
|
-
|
|
332
|
-
getMinMax(min?:
|
|
333
|
-
min:
|
|
334
|
-
max:
|
|
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;
|
|
335
346
|
};
|
|
336
347
|
getCommands(): PathCommand[];
|
|
337
348
|
drawTo(ctx: CanvasRenderingContext2D): this;
|
|
338
349
|
}
|
|
339
350
|
|
|
340
351
|
declare class QuadraticBezierCurve extends Curve {
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
constructor(
|
|
345
|
-
getPoint(t: number, output?:
|
|
346
|
-
|
|
347
|
-
getMinMax(min?:
|
|
348
|
-
min:
|
|
349
|
-
max:
|
|
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;
|
|
350
361
|
};
|
|
351
362
|
getCommands(): PathCommand[];
|
|
352
363
|
drawTo(ctx: CanvasRenderingContext2D): this;
|
|
@@ -354,40 +365,43 @@ declare class QuadraticBezierCurve extends Curve {
|
|
|
354
365
|
}
|
|
355
366
|
|
|
356
367
|
declare class RectangularCurve extends Curve {
|
|
357
|
-
center:
|
|
368
|
+
center: Vector2;
|
|
358
369
|
rx: number;
|
|
359
370
|
aspectRatio: number;
|
|
360
371
|
start: number;
|
|
361
372
|
end: number;
|
|
362
373
|
curves: LineCurve[];
|
|
363
|
-
|
|
374
|
+
curveT: number;
|
|
364
375
|
get x(): number;
|
|
365
376
|
get y(): number;
|
|
366
377
|
get width(): number;
|
|
367
378
|
get height(): number;
|
|
368
|
-
constructor(center:
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
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;
|
|
378
390
|
};
|
|
379
391
|
getCommands(): PathCommand[];
|
|
380
392
|
drawTo(ctx: CanvasRenderingContext2D): this;
|
|
381
393
|
}
|
|
382
394
|
|
|
383
395
|
declare class SplineCurve extends Curve {
|
|
384
|
-
points:
|
|
385
|
-
constructor(points?:
|
|
396
|
+
points: Vector2[];
|
|
397
|
+
constructor(points?: Vector2[]);
|
|
386
398
|
getDivisions(divisions?: number): number;
|
|
387
|
-
getPoint(t: number, output?:
|
|
399
|
+
getPoint(t: number, output?: Vector2): Vector2;
|
|
400
|
+
transformPoint(cb: (point: Vector2) => void): this;
|
|
388
401
|
copy(source: SplineCurve): this;
|
|
389
402
|
}
|
|
390
403
|
|
|
404
|
+
declare function parseSvgToDom(svg: string | SVGElement): SVGElement;
|
|
391
405
|
declare function parseSvg(svg: string | SVGElement): Path2D[];
|
|
392
406
|
|
|
393
|
-
export { BoundingBox, CircleCurve, CubicBezierCurve, Curve, CurvePath, EllipseCurve, HeartCurve, LineCurve, Matrix3, Path2D, PloygonCurve,
|
|
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,u){typeof exports=="object"&&typeof module<"u"?u(exports):typeof define=="function"&&define.amd?define(["exports"],u):(M=typeof globalThis<"u"?globalThis:M||self,u(M.modernPath2d={}))})(this,function(M){"use strict";var Ht=Object.defineProperty;var jt=(M,u,S)=>u in M?Ht(M,u,{enumerable:!0,configurable:!0,writable:!0,value:S}):M[u]=S;var w=(M,u,S)=>jt(M,typeof u!="symbol"?u+"":u,S);class u{constructor(e=0,t=0){this.x=e,this.y=t}static get MAX(){return new u(1/0,1/0)}static get MIN(){return new u(-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 u(this.x,this.y)}}class S{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 S(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 u((this.left+this.right)/2,(this.top+this.bottom)/2)}clone(){return new S(this.left,this.top,this.width,this.height)}toArray(){return[this.left,this.top,this.width,this.height]}}class I{constructor(e=1,t=0,s=0,n=0,o=1,h=0,a=0,c=0,i=1){w(this,"elements",[]);this.set(e,t,s,n,o,h,a,c,i)}set(e,t,s,n,o,h,a,c,i){const l=this.elements;return l[0]=e,l[1]=n,l[2]=a,l[3]=t,l[4]=o,l[5]=c,l[6]=s,l[7]=h,l[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,h=s[0],a=s[3],c=s[6],i=s[1],l=s[4],y=s[7],p=s[2],x=s[5],f=s[8],g=n[0],m=n[3],T=n[6],C=n[1],P=n[4],A=n[7],b=n[2],$=n[5],z=n[8];return o[0]=h*g+a*C+c*b,o[3]=h*m+a*P+c*$,o[6]=h*T+a*A+c*z,o[1]=i*g+l*C+y*b,o[4]=i*m+l*P+y*$,o[7]=i*T+l*A+y*z,o[2]=p*g+x*C+f*b,o[5]=p*m+x*P+f*$,o[8]=p*T+x*A+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],i=e[7],l=e[8],y=l*h-a*i,p=a*c-l*o,x=i*o-h*c,f=t*y+s*p+n*x;if(f===0)return this.set(0,0,0,0,0,0,0,0,0);const g=1/f;return e[0]=y*g,e[1]=(n*i-l*s)*g,e[2]=(a*s-n*h)*g,e[3]=p*g,e[4]=(l*t-n*c)*g,e[5]=(n*o-a*t)*g,e[6]=x*g,e[7]=(s*c-i*t)*g,e[8]=(h*t-s*o)*g,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 I;function B(r,e,t,s){const n=r*t+e*s,o=Math.sqrt(r*r+e*e)*Math.sqrt(t*t+s*s);let h=Math.acos(Math.max(-1,Math.min(1,n/o)));return r*s-e*t<0&&(h=-h),h}function gt(r,e,t,s,n,o,h,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=(h.x-a.x)/2,i=(h.y-a.y)/2,l=Math.cos(s)*c+Math.sin(s)*i,y=-Math.sin(s)*c+Math.cos(s)*i;let p=e*e,x=t*t;const f=l*l,g=y*y,m=f/p+g/x;if(m>1){const pt=Math.sqrt(m);e=pt*e,t=pt*t,p=e*e,x=t*t}const T=p*g+x*f,C=(p*x-T)/T;let P=Math.sqrt(Math.max(0,C));n===o&&(P=-P);const A=P*e*y/t,b=-P*t*l/e,$=Math.cos(s)*A-Math.sin(s)*b+(h.x+a.x)/2,z=Math.sin(s)*A+Math.cos(s)*b+(h.y+a.y)/2,Y=B(1,0,(l-A)/e,(y-b)/t),V=B((l-A)/e,(y-b)/t,(-l-A)/e,(-y-b)/t)%(Math.PI*2);r.currentPath.absellipse($,z,e,t,Y,Y+V,o===0,s)}function D(r,e){return r-(e-r)}function xt(r,e){const t=new u,s=new u,n=new u;let o=!0,h=!1;for(let a=0,c=r.length;a<c;a++){const i=r[a];if(o&&(h=!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),h&&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),h&&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),h&&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),h&&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),h&&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),h&&n.copy(t);else if(i.type==="t"||i.type==="T"){const l=D(t.x,s.x),y=D(t.y,s.y);s.x=l,s.y=y,i.type==="t"?(e.quadraticCurveTo(l,y,t.x+i.x,t.y+i.y),t.x+=i.x,t.y+=i.y):(e.quadraticCurveTo(l,y,i.x,i.y),t.x=i.x,t.y=i.y),h&&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 l=t.clone();s.x=t.x,s.y=t.y,gt(e,i.rx,i.ry,i.angle,i.largeArcFlag,i.sweepFlag,l,t),h&&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);h=!1}}const d={SEPARATOR:/[ \t\r\n,.\-+]/,WHITESPACE:/[ \t\r\n]/,DIGIT:/\d/,SIGN:/[-+]/,POINT:/\./,COMMA:/,/,EXP:/e/i,FLAGS:/[01]/};function N(r,e,t=0){let a=0,c=!0,i="",l="";const y=[];function p(m,T,C){const P=new SyntaxError(`Unexpected character "${m}" at index ${T}.`);throw P.partial=C,P}function x(){i!==""&&(l===""?y.push(Number(i)):y.push(Number(i)*10**Number(l))),i="",l=""}let f;const g=r.length;for(let m=0;m<g;m++){if(f=r[m],Array.isArray(e)&&e.includes(y.length%t)&&d.FLAGS.test(f)){a=1,i=f,x();continue}if(a===0){if(d.WHITESPACE.test(f))continue;if(d.DIGIT.test(f)||d.SIGN.test(f)){a=1,i=f;continue}if(d.POINT.test(f)){a=2,i=f;continue}d.COMMA.test(f)&&(c&&p(f,m,y),c=!0)}if(a===1){if(d.DIGIT.test(f)){i+=f;continue}if(d.POINT.test(f)){i+=f,a=2;continue}if(d.EXP.test(f)){a=3;continue}d.SIGN.test(f)&&i.length===1&&d.SIGN.test(i[0])&&p(f,m,y)}if(a===2){if(d.DIGIT.test(f)){i+=f;continue}if(d.EXP.test(f)){a=3;continue}d.POINT.test(f)&&i[i.length-1]==="."&&p(f,m,y)}if(a===3){if(d.DIGIT.test(f)){l+=f;continue}if(d.SIGN.test(f)){if(l===""){l+=f;continue}l.length===1&&d.SIGN.test(l)&&p(f,m,y)}}d.WHITESPACE.test(f)?(x(),a=0,c=!1):d.COMMA.test(f)?(x(),a=0,c=!0):d.SIGN.test(f)?(x(),a=1,i=f):d.POINT.test(f)?(x(),a=2,i=f):p(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 mt(r){let e="";for(let t=0,s=r.length;t<s;t++)e+=`${Mt(r[t])} `;return e}const vt=/[a-df-z][^a-df-z]*/gi;function dt(r){const e=[],t=r.match(vt);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=N(a);for(let i=0,l=c.length;i<l;i+=2)i===0?e.push({type:h,x:c[i],y:c[i+1]}):e.push({type:h==="m"?"l":"L",x:c[i],y:c[i+1]});break;case"h":case"H":c=N(a);for(let i=0,l=c.length;i<l;i++)e.push({type:h,x:c[i]});break;case"v":case"V":c=N(a);for(let i=0,l=c.length;i<l;i++)e.push({type:h,y:c[i]});break;case"l":case"L":c=N(a);for(let i=0,l=c.length;i<l;i+=2)e.push({type:h,x:c[i],y:c[i+1]});break;case"c":case"C":c=N(a);for(let i=0,l=c.length;i<l;i+=6)e.push({type:h,x1:c[i],y1:c[i+1],x2:c[i+2],y2:c[i+3],x:c[i+4],y:c[i+5]});break;case"s":case"S":c=N(a);for(let i=0,l=c.length;i<l;i+=4)e.push({type:h,x2:c[i],y2:c[i+1],x:c[i+2],y:c[i+3]});break;case"q":case"Q":c=N(a);for(let i=0,l=c.length;i<l;i+=4)e.push({type:h,x1:c[i],y1:c[i+1],x:c[i+2],y:c[i+3]});break;case"t":case"T":c=N(a);for(let i=0,l=c.length;i<l;i+=2)e.push({type:h,x:c[i],y:c[i+1]});break;case"a":case"A":c=N(a,[3,4],7);for(let i=0,l=c.length;i<l;i+=7)e.push({type:h,rx:c[i],ry:c[i+1],angle:c[i+2],largeArcFlag:c[i+3],sweepFlag:c[i+4],x:c[i+5],y:c[i+6]});break;case"z":case"Z":e.push({type:h});break;default:console.warn(o)}}return e}class k{constructor(){w(this,"arcLengthDivisions",200);w(this,"_cacheArcLengths");w(this,"_needsUpdate",!1)}getPointAt(e,t=new u){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,i;for(;a<=c;)if(n=Math.floor(a+(c-a)/2),i=s[n]-h,i<0)a=n+1;else if(i>0)c=n-1;else{c=n;break}if(n=c,s[n]===h)return n/(o-1);const l=s[n],p=s[n+1]-l,x=(h-l)/p;return(n+x)/(o-1)}getTangent(e,t=new u){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 u){return this.getTangent(this.getUtoTmapping(e),t)}transform(e){return this}getDivisions(e){return e}getMinMax(e=u.MAX,t=u.MIN){return{min:e,max:t}}getCommands(){return[]}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 k{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 u(-s,t)}getNormal(e){const{start:t,end:s}=this,n=e*(s-t)+t-.5*Math.PI;return new u(Math.cos(n),Math.sin(n))}getMinMax(e=u.MAX,t=u.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 W(r,e,t,s,n){const o=(s-e)*.5,h=(n-t)*.5,a=r*r,c=r*a;return(2*t-2*s+o+h)*c+(-3*t+3*s-2*o-h)*a+o*r+t}function Pt(r,e){const t=1-r;return t*t*e}function Tt(r,e){return 2*(1-r)*r*e}function wt(r,e){return r*r*e}function H(r,e,t,s){return Pt(r,e)+Tt(r,t)+wt(r,s)}function bt(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 Ct(r,e){return 3*(1-r)*r*r*e}function It(r,e){return r*r*r*e}function j(r,e,t,s,n){return bt(r,e)+At(r,t)+Ct(r,s)+It(r,n)}class Z extends k{constructor(e=new u,t=new u,s=new u,n=new u){super(),this.v0=e,this.v1=t,this.v2=s,this.v3=n}getPoint(e,t=new u){const{v0:s,v1:n,v2:o,v3: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}transform(e){return this.v0.applyMatrix3(e),this.v1.applyMatrix3(e),this.v2.applyMatrix3(e),this.v3.applyMatrix3(e),this}getMinMax(e=u.MAX,t=u.MIN){const{v0:s,v1:n,v2:o,v3: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{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 kt=new I,J=new I,K=new I,R=new u;class tt extends k{constructor(e=0,t=0,s=1,n=1,o=0,h=Math.PI*2,a=!1,c=0){super(),this.x=e,this.y=t,this.radiusX=s,this.radiusY=n,this.startAngle=o,this.endAngle=h,this.clockwise=a,this.rotation=c}getPoint(e,t=new u){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.x+this.radiusX*Math.cos(h),c=this.y+this.radiusY*Math.sin(h);if(this.rotation!==0){const i=Math.cos(this.rotation),l=Math.sin(this.rotation),y=a-this.x,p=c-this.y;a=y*i-p*l+this.x,c=y*l+p*i+this.y}return t.set(a,c)}getDivisions(e=12){return e*2}getCommands(){const{x:e,y:t,radiusX:s,radiusY:n,startAngle:o,endAngle:h,clockwise:a}=this,c=!a,i=e+s*Math.cos(o),l=t+n*Math.sin(o),y=e+s*Math.cos(h),p=t+n*Math.sin(h),x=Math.abs(o-h),f=x>Math.PI?1:0,g=c?0:1,m=e+s*Math.cos(o+(h-o)/2),T=t+n*Math.sin(o+(h-o)/2);return x>=2*Math.PI?[{type:"M",x:i,y:l},{type:"A",rx:s,ry:n,angle:0,largeArcFlag:1,sweepFlag:g,x:m,y:T},{type:"A",rx:s,ry:n,angle:0,largeArcFlag:1,sweepFlag:g,x:i,y:l}]:[{type:"M",x:i,y:l},{type:"A",rx:s,ry:n,angle:0,largeArcFlag:f,sweepFlag:g,x:y,y:p}]}drawTo(e){const{x:t,y:s,radiusX:n,radiusY:o,rotation:h,startAngle:a,endAngle:c,clockwise:i}=this,l=t+n*Math.cos(a),y=s+o*Math.sin(a);return e.moveTo(l,y),e.ellipse(t,s,n,o,h,a,c,!i),this}transform(e){return R.set(this.x,this.y),R.applyMatrix3(e),this.x=R.x,this.y=R.y,Nt(e)?Lt(this,e):St(this,e),this}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 Lt(r,e){const t=r.radiusX,s=r.radiusY,n=Math.cos(r.rotation),o=Math.sin(r.rotation),h=new u(t*n,t*o),a=new u(-s*o,s*n),c=h.applyMatrix3(e),i=a.applyMatrix3(e),l=kt.set(c.x,i.x,0,c.y,i.y,0,0,0,1),y=J.copy(l).invert(),f=K.copy(y).transpose().multiply(y).elements,g=Et(f[0],f[1],f[4]),m=Math.sqrt(g.rt1),T=Math.sqrt(g.rt2);if(r.radiusX=1/m,r.radiusY=1/T,r.rotation=Math.atan2(g.sn,g.cs),!((r.endAngle-r.startAngle)%(2*Math.PI)<Number.EPSILON)){const P=J.set(m,0,0,0,T,0,0,0,1),A=K.set(g.cs,g.sn,0,-g.sn,g.cs,0,0,0,1),b=P.multiply(A).multiply(l),$=z=>{const{x:Y,y:V}=new u(Math.cos(z),Math.sin(z)).applyMatrix3(b);return Math.atan2(V,Y)};r.startAngle=$(r.startAngle),r.endAngle=$(r.endAngle),et(e)&&(r.clockwise=!r.clockwise)}}function St(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 Nt(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 Et(r,e,t){let s,n,o,h,a;const c=r+t,i=r-t,l=Math.sqrt(i*i+4*e*e);return c>0?(s=.5*(c+l),a=1/s,n=r*a*t-e*a*e):c<0?n=.5*(c-l):(s=.5*l,n=-.5*l),i>0?o=i+l:o=i-l,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),i>0&&(a=o,o=-h,h=a),{rt1:s,rt2:n,cs:o,sn:h}}class q extends k{constructor(e=new u,t=new u){super(),this.v1=e,this.v2=t}getPoint(e,t=new u){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 u){return this.getPoint(e,t)}getTangent(e,t=new u){return t.subVectors(this.v2,this.v1).normalize()}getTangentAt(e,t=new u){return this.getTangent(e,t)}transform(e){return this.v1.applyMatrix3(e),this.v2.applyMatrix3(e),this}getDivisions(){return 1}getMinMax(e=u.MAX,t=u.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 $t extends k{constructor(t,s,n=0,o=1){super();w(this,"curves");w(this,"pointT",0);this.center=t,this.size=s,this.start=n,this.end=o;const{x:h,y:a}=this.center,c=new u(h+.5*this.size,a-.5*this.size),i=new u(h-.5*this.size,a-.5*this.size),l=new u(h,a+.5*this.size),y=new O(c,Math.SQRT1_2*this.size,-.25*Math.PI,.75*Math.PI),p=new O(i,Math.SQRT1_2*this.size,-.75*Math.PI,.25*Math.PI),x=new O(l,.5*Math.SQRT1_2*this.size,.75*Math.PI,1.25*Math.PI),f=new u(h,a+this.size),g=new u(h+this.size,a),m=new u().lerpVectors(g,f,.75),T=new u(h-this.size,a),C=new u().lerpVectors(T,f,.75),P=new q(g,m),A=new q(C,T);this.curves=[y,P,x,A,p]}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 u(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=u.MAX,s=u.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 k{constructor(t,s=0,n=0,o=0,h=1){super();w(this,"curves",[]);w(this,"points",[]);this.center=t,this.radius=s,this.num=n,this.start=o,this.end=h;for(let a=0;a<this.num;a++){let c=a*2*Math.PI/this.num;c-=.5*Math.PI;const i=new u(this.radius*Math.cos(c),this.radius*Math.sin(c));i.add(this.center),this.points.push(i)}for(let a=0;a<this.num;a++)this.curves.push(new q(this.points[a],this.points[(a+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 u(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=u.MAX,s=u.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 k{constructor(e=new u,t=new u,s=new u){super(),this.v0=e,this.v1=t,this.v2=s}getPoint(e,t=new u){const{v0:s,v1:n,v2:o}=this;return t.set(H(e,s.x,n.x,o.x),H(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=u.MAX,t=u.MIN){const{v0:s,v1:n,v2:o}=this,h=.5*(s.x+n.x),a=.5*(s.y+n.y),c=.5*(s.x+o.x),i=.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,i),t.x=Math.max(t.x,s.x,o.x,h,c),t.y=Math.max(t.y,s.y,o.y,a,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 k{constructor(t,s,n=1,o=0,h=1){super();w(this,"curves",[]);w(this,"pointT",0);this.center=t,this.rx=s,this.aspectRatio=n,this.start=o,this.end=h;const{x:a,y:c}=this.center,i=this.rx,l=this.rx/this.aspectRatio,y=[new u(a-i,c-l),new u(a+i,c-l),new u(a+i,c+l),new u(a-i,c+l)];for(let p=0;p<4;p++)this.curves.push(new q(y[p].clone(),y[(p+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 u(n.y-s.y,-(n.x-s.x)).normalize()}transform(t){return this.curves.forEach(s=>s.transform(t)),this}getMinMax(t=u.MAX,s=u.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 k{constructor(e=[]){super(),this.points=e}getDivisions(e=12){return e*this.points.length}getPoint(e,t=new u){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],i=s[o>s.length-2?s.length-1:o+1],l=s[o>s.length-3?s.length-1:o+2];return t.set(W(h,a.x,c.x,i.x,l.x),W(h,a.y,c.y,i.y,l.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 k{constructor(t){super();w(this,"curves",[]);w(this,"currentPoint",new u);w(this,"autoClose",!1);w(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 u){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],i=c.getLength();return c.getPointAt(i===0?0:1-a/i,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 i=0;i<c.length;i++){const l=c[i];n&&n.equals(l)||(s.push(l),n=l)}}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 u(t,s),new u(n,o),new u(h,a))),this.currentPoint.set(h,a),this}lineTo(t,s){return this.curves.push(new q(this.currentPoint.clone(),new u(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 u(t,s),new u(n,o))),this.currentPoint.set(n,o),this}rect(t,s,n,o){return this.curves.push(new rt(new u(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,i=0){const l=this.currentPoint;return this.absellipse(t+l.x,s+l.y,n,o,h,a,c,i),this}absellipse(t,s,n,o,h,a,c=!1,i=0){const l=new tt(t,s,n,o,h,a,c,i);if(this.curves.length>0){const y=l.getPoint(0);y.equals(this.currentPoint)||this.lineTo(y.x,y.y)}return this.curves.push(l),this.currentPoint.copy(l.getPoint(1)),this}getCommands(){return this.curves.flatMap(t=>t.getCommands())}getMinMax(t=u.MAX,s=u.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 L{constructor(e){w(this,"currentPath",new X);w(this,"paths",[this.currentPath]);w(this,"userData");e&&(e instanceof L?this.addPath(e):Array.isArray(e)?this.addCommands(e):this.addData(e))}addPath(e){return e instanceof L?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){const h=this.currentPath.currentPoint,a=h.x,c=h.y,i=e-a,l=t-c,y=s-e,p=n-t,x=Math.sqrt(i*i+l*l),f=Math.sqrt(y*y+p*p);if(x<o||f<o)return this.lineTo(s,n),this;const g={x:i/x,y:l/x},m={x:y/f,y:p/f},T=e-g.y*o,C=t+g.x*o,P=Math.atan2(g.y,g.x);let b=Math.atan2(m.y,m.x)-P;return b>Math.PI?b-=2*Math.PI:b<-Math.PI&&(b+=2*Math.PI),this.arc(T,C,o,P,P+b,!1),this.lineTo(s,n),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 xt(e,this),this}addData(e){return this.addCommands(dt(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=u.MAX,t=u.MIN){return this.forEachCurve(s=>s.getMinMax(e,t)),{min:e,max:t}}getBoundingBox(){const{min:e,max:t}=this.getMinMax();return new S(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();return`<svg viewBox="${e} ${t} ${s} ${n}" 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 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 qt=new I,F=new I,ct=new I,lt=new I;function Dt(r,e,t){if(!(r.hasAttribute("transform")||r.nodeName==="use"&&(r.hasAttribute("x")||r.hasAttribute("y"))))return null;const s=Xt(r);return t.length>0&&s.premultiply(t[t.length-1]),e.copy(s),t.push(s),s}function Xt(r){const e=new I,t=qt;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 h=o.indexOf("("),a=o.length;if(h>0&&h<a){const c=o.slice(0,h),i=N(o.slice(h+1));switch(t.identity(),c){case"translate":if(i.length>=1){const l=i[0];let y=0;i.length>=2&&(y=i[1]),t.translate(l,y)}break;case"rotate":if(i.length>=1){let l=0,y=0,p=0;l=i[0]*Math.PI/180,i.length>=3&&(y=i[1],p=i[2]),F.makeTranslation(-y,-p),ct.makeRotation(l),lt.multiplyMatrices(ct,F),F.makeTranslation(y,p),t.multiplyMatrices(F,lt)}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 Ot(r){return new L().addPath(new X().absarc(v(r.getAttribute("cx")||0),v(r.getAttribute("cy")||0),v(r.getAttribute("r")||0),0,Math.PI*2))}function Rt(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 h=Object.fromEntries(Object.entries(s.style).filter(([,a])=>a!==""));e[n[o]]=Object.assign(e[n[o]]||{},h)}}}function Ft(r){return new L().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 L().moveTo(v(r.getAttribute("x1")||0),v(r.getAttribute("y1")||0)).lineTo(v(r.getAttribute("x2")||0),v(r.getAttribute("y2")||0))}function Ut(r){const e=new L,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 _t(r){var s;const e=new L;let t=0;return(s=r.getAttribute("points"))==null||s.replace(Gt,(n,o,h)=>{const a=v(o),c=v(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 Vt(r){var s;const e=new L;let t=0;return(s=r.getAttribute("points"))==null||s.replace(Qt,(n,o,h)=>{const a=v(o),c=v(h);return t===0?e.moveTo(a,c):e.lineTo(a,c),t++,n}),e.currentPath.autoClose=!1,e}function Bt(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")),h=v(r.getAttribute("height")),a=1-.551915024494,c=new L;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 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,i){i===void 0&&(i=function(y){return y.startsWith("url")&&console.warn("url access in attributes is not implemented."),y}),r.hasAttribute(a)&&(e[c]=i(r.getAttribute(a))),s[a]&&(e[c]=i(s[a])),r.style&&r.style[a]!==""&&(e[c]=i(r.style[a]))}function o(a){return Math.max(0,Math.min(1,v(a)))}function h(a){return Math.max(0,v(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 Q(r,e,t=[]){var l;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":Rt(r,o);break;case"g":e=E(r,e,o);break;case"path":e=E(r,e,o),r.hasAttribute("d")&&(n=Ut(r));break;case"rect":e=E(r,e,o),n=Bt(r);break;case"polygon":e=E(r,e,o),n=_t(r);break;case"polyline":e=E(r,e,o),n=Vt(r);break;case"circle":e=E(r,e,o),n=Ot(r);break;case"ellipse":e=E(r,e,o),n=Ft(r);break;case"line":e=E(r,e,o),n=Yt(r);break;case"defs":s=!0;break;case"use":{e=E(r,e,o);const p=(r.getAttributeNS("http://www.w3.org/1999/xlink","href")||"").substring(1),x=(l=r.viewportElement)==null?void 0:l.getElementById(p);x?Q(x,e,t):console.warn(`'use node' references non-existent node id: ${p}`);break}default:console.warn(r);break}const h=new I,a=[],c=Dt(r,h,a);n&&(n.transform(h),t.push(n),n.userData={node:r,style:e});const i=r.childNodes;for(let y=0,p=i.length;y<p;y++){const x=i[y];s&&x.nodeName!=="style"&&x.nodeName!=="defs"||Q(x,e,t)}return c&&(a.pop(),a.length>0?h.copy(a[a.length-1]):h.identity()),t}const ut="data:image/svg+xml;",yt=`${ut}base64,`,ft=`${ut}charset=utf8,`;function Wt(r){let e,t;return typeof r=="string"?(r.startsWith(yt)?(r=r.substring(yt.length,r.length),t=atob(r)):r.startsWith(ft)?(r=r.substring(ft.length,r.length),t=decodeURIComponent(r)):t=r,e=new DOMParser().parseFromString(t,"image/svg+xml").documentElement):e=r,Q(e,{fill:"#000",fillOpacity:1,strokeOpacity:1,strokeWidth:1,strokeLineJoin:"miter",strokeLineCap:"butt",strokeMiterLimit:4})}M.BoundingBox=S,M.CircleCurve=O,M.CubicBezierCurve=Z,M.Curve=k,M.CurvePath=X,M.EllipseCurve=tt,M.HeartCurve=$t,M.LineCurve=q,M.Matrix3=I,M.Path2D=L,M.PloygonCurve=zt,M.Point2D=u,M.QuadraticBezierCurve=it,M.RectangularCurve=rt,M.SplineCurve=ot,M.parseSvg=Wt,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"})});
|