modern-path2d 1.0.0 → 1.1.0

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.mts CHANGED
@@ -1,83 +1,53 @@
1
- /**
2
- * @link https://developer.mozilla.org/docs/Web/SVG/Attribute/d
3
- */
4
- type PathCommand = {
5
- type: 'm' | 'M';
6
- x: number;
7
- y: number;
8
- } | {
9
- type: 'h' | 'H';
10
- x: number;
11
- } | {
12
- type: 'v' | 'V';
13
- y: number;
14
- } | {
15
- type: 'l' | 'L';
16
- x: number;
17
- y: number;
18
- } | {
19
- type: 'c' | 'C';
20
- x1: number;
21
- y1: number;
22
- x2: number;
23
- y2: number;
24
- x: number;
25
- y: number;
26
- } | {
27
- type: 's' | 'S';
28
- x2: number;
29
- y2: number;
30
- x: number;
31
- y: number;
32
- } | {
33
- type: 'q' | 'Q';
34
- x1: number;
35
- y1: number;
36
- x: number;
37
- y: number;
38
- } | {
39
- type: 't' | 'T';
40
- x: number;
41
- y: number;
42
- } | {
43
- type: 'a' | 'A';
44
- rx: number;
45
- ry: number;
46
- angle: number;
47
- largeArcFlag: number;
48
- sweepFlag: number;
49
- x: number;
50
- y: number;
51
- } | {
52
- type: 'z' | 'Z';
53
- };
54
- type FillRule = 'nonzero' | 'evenodd';
55
- type StrokeLinecap = 'butt' | 'round' | 'square';
56
- type StrokeLinejoin = 'arcs' | 'bevel' | 'miter' | 'miter-clip' | 'round';
57
- interface PathDrawStyle {
58
- fill: string | CanvasGradient | CanvasPattern;
59
- stroke: string | CanvasGradient | CanvasPattern;
60
- shadowColor: string;
61
- shadowOffsetX: number;
62
- shadowOffsetY: number;
63
- shadowBlur: number;
1
+ interface DrawPointOptions {
2
+ radius?: number;
64
3
  }
65
- interface PathStyle extends PathDrawStyle {
66
- [key: string]: any;
67
- fillOpacity: number;
68
- fillRule: FillRule;
69
- opacity: number;
70
- strokeOpacity: number;
71
- strokeWidth: number;
72
- strokeLinecap: StrokeLinecap;
73
- strokeLinejoin: StrokeLinejoin;
74
- strokeMiterlimit: number;
75
- strokeDasharray: number[];
76
- strokeDashoffset: number;
77
- visibility: string;
4
+ declare function drawPoint(ctx: CanvasRenderingContext2D, x: number, y: number, options?: DrawPointOptions): void;
5
+
6
+ declare function catmullRom(t: number, p0: number, p1: number, p2: number, p3: number): number;
7
+
8
+ declare function cubicBezier(t: number, p0: number, p1: number, p2: number, p3: number): number;
9
+
10
+ interface FillTriangulateOptions {
11
+ holes?: number[];
12
+ vertices?: number[];
13
+ indices?: number[];
14
+ verticesStride?: number;
15
+ verticesOffset?: number;
16
+ indicesOffset?: number;
78
17
  }
18
+ interface FillTriangulateResult {
19
+ vertices: number[];
20
+ indices: number[];
21
+ }
22
+ declare function fillTriangulate(points: number[], options?: FillTriangulateOptions): FillTriangulateResult;
23
+
24
+ declare function getAdaptiveCubicBezierCurvePoints(sX: number, sY: number, x1: number, y1: number, x2: number, y2: number, x: number, y: number, smoothness: number | undefined, points: number[]): number[];
25
+
26
+ declare function getAdaptiveQuadraticBezierCurvePoints(sX: number, sY: number, x1: number, y1: number, x: number, y: number, smoothness: number | undefined, points: number[]): number[];
27
+
28
+ declare function quadraticBezier(t: number, p0: number, p1: number, p2: number): number;
79
29
 
80
- declare function setCanvasContext(ctx: CanvasRenderingContext2D, style: Partial<PathStyle>): void;
30
+ type LineCap = 'butt' | 'round' | 'square';
31
+ type LineJoin = 'round' | 'bevel' | 'miter';
32
+ interface StrokeTriangulateOptions {
33
+ vertices?: number[];
34
+ indices?: number[];
35
+ lineStyle?: LineStyle;
36
+ flipAlignment?: boolean;
37
+ closed?: boolean;
38
+ }
39
+ interface StrokeTriangulateResult {
40
+ vertices: number[];
41
+ indices: number[];
42
+ }
43
+ interface LineStyle {
44
+ width: number;
45
+ alignment: number;
46
+ join: LineJoin;
47
+ cap: LineCap;
48
+ miterLimit: number;
49
+ }
50
+ declare function strokeTriangulate(points: number[], options?: StrokeTriangulateOptions): StrokeTriangulateResult;
81
51
 
82
52
  declare class Matrix3 {
83
53
  elements: number[];
@@ -160,19 +130,25 @@ declare class BoundingBox {
160
130
  }
161
131
 
162
132
  declare abstract class Curve {
163
- arcLengthDivisions: number;
164
- protected _cacheArcLengths?: number[];
165
- protected _needsUpdate: boolean;
166
- isClockwise(): boolean;
133
+ startT: number;
134
+ endT: number;
135
+ arcLengthDivision: number;
136
+ protected _arcLengths?: number[];
167
137
  abstract getPoint(t: number, output?: Vector2): Vector2;
168
138
  getPointAt(u: number, output?: Vector2): Vector2;
169
- getPoints(divisions?: number): Vector2[];
170
- abstract getControlPoints(): Vector2[];
171
- forEachControlPoints(cb: (point: Vector2, index: number) => void): this;
172
- getSpacedPoints(divisions?: number): Vector2[];
139
+ isClockwise(): boolean;
140
+ getControlPointRefs(): Vector2[];
141
+ getUnevenPointArray(count?: number, output?: number[]): number[];
142
+ getSpacedPointArray(count?: number, output?: number[]): number[];
143
+ getAdaptivePointArray(output?: number[]): number[];
144
+ protected _pointArrayToPoint(array: number[], output?: Vector2[]): Vector2[];
145
+ getSpacedPoints(count?: number, output?: Vector2[]): Vector2[];
146
+ getUnevenPoints(count?: number, output?: Vector2[]): Vector2[];
147
+ getAdaptivePoints(output?: Vector2[]): Vector2[];
148
+ getPoints(count?: number, output?: Vector2[]): Vector2[];
173
149
  getLength(): number;
174
- getLengths(divisions?: number): number[];
175
- updateArcLengths(): void;
150
+ getLengths(): number[];
151
+ updateLengths(): void;
176
152
  getUToTMapping(u: number, distance?: number): number;
177
153
  getTangent(t: number, output?: Vector2): Vector2;
178
154
  getTangentAt(u: number, output?: Vector2): Vector2;
@@ -185,62 +161,31 @@ declare abstract class Curve {
185
161
  max: Vector2;
186
162
  };
187
163
  getBoundingBox(): BoundingBox;
188
- toCommands(): PathCommand[];
189
- toData(): string;
164
+ fillTriangulate(options?: FillTriangulateOptions): FillTriangulateResult;
165
+ strokeTriangulate(options?: StrokeTriangulateOptions): StrokeTriangulateResult;
166
+ toCommands(): Path2DCommand[];
167
+ toData(): Path2DData;
190
168
  drawTo(ctx: CanvasRenderingContext2D): this;
191
169
  copy(source: Curve): this;
192
170
  clone(): this;
193
171
  }
194
172
 
195
- declare class CircleCurve extends Curve {
196
- center: Vector2;
197
- radius: number;
198
- start: number;
199
- end: number;
200
- constructor(center: Vector2, radius: number, start?: number, end?: number);
201
- getPoint(t: number): Vector2;
202
- getTangent(t: number, output?: Vector2): Vector2;
203
- getNormal(t: number, output?: Vector2): Vector2;
204
- getControlPoints(): Vector2[];
205
- getMinMax(min?: Vector2, max?: Vector2): {
206
- min: Vector2;
207
- max: Vector2;
208
- };
209
- }
210
-
211
- declare class CubicBezierCurve extends Curve {
212
- start: Vector2;
213
- startControl: Vector2;
214
- endControl: Vector2;
215
- end: Vector2;
216
- constructor(start?: Vector2, startControl?: Vector2, endControl?: Vector2, end?: Vector2);
217
- getPoint(t: number, output?: Vector2): Vector2;
218
- getControlPoints(): Vector2[];
219
- protected _solveQuadratic(a: number, b: number, c: number): number[];
220
- getMinMax(min?: Vector2, max?: Vector2): {
221
- min: Vector2;
222
- max: Vector2;
223
- };
224
- toCommands(): PathCommand[];
225
- drawTo(ctx: CanvasRenderingContext2D): this;
226
- copy(source: CubicBezierCurve): this;
227
- }
228
-
229
173
  declare class EllipseCurve extends Curve {
230
- center: Vector2;
231
- radiusX: number;
232
- radiusY: number;
233
174
  rotation: number;
234
175
  startAngle: number;
235
176
  endAngle: number;
236
177
  clockwise: boolean;
237
- constructor(center?: Vector2, radiusX?: number, radiusY?: number, rotation?: number, startAngle?: number, endAngle?: number, clockwise?: boolean);
178
+ center: Vector2;
179
+ radius: Vector2;
180
+ constructor(cx?: number, cy?: number, rx?: number, ry?: number, rotation?: number, startAngle?: number, endAngle?: number, clockwise?: boolean);
238
181
  isClockwise(): boolean;
239
182
  getPoint(t: number, output?: Vector2): Vector2;
240
- toCommands(): PathCommand[];
183
+ toCommands(): Path2DCommand[];
241
184
  drawTo(ctx: CanvasRenderingContext2D): this;
242
185
  matrix(matrix: Matrix3): this;
243
- getControlPoints(): Vector2[];
186
+ getControlPointRefs(): Vector2[];
187
+ getAdaptivePointArray(output?: number[]): number[];
188
+ fillTriangulate(options?: FillTriangulateOptions): FillTriangulateResult;
244
189
  getMinMax(min?: Vector2, max?: Vector2): {
245
190
  min: Vector2;
246
191
  max: Vector2;
@@ -248,143 +193,173 @@ declare class EllipseCurve extends Curve {
248
193
  copy(source: EllipseCurve): this;
249
194
  }
250
195
 
251
- declare class LineCurve extends Curve {
252
- start: Vector2;
253
- end: Vector2;
254
- constructor(start?: Vector2, end?: Vector2);
196
+ declare class ArcCurve extends EllipseCurve {
197
+ constructor(cx?: number, cy?: number, radius?: number, startAngle?: number, endAngle?: number, clockwise?: boolean);
198
+ getAdaptivePointArray(output?: number[]): number[];
199
+ }
200
+
201
+ declare class CompositeCurve<T extends Curve = Curve> extends Curve {
202
+ curves: T[];
203
+ constructor(curves?: T[]);
204
+ addCurve(curve: T): this;
255
205
  getPoint(t: number, output?: Vector2): Vector2;
256
- getPointAt(u: number, output?: Vector2): Vector2;
257
- getTangent(_t: number, output?: Vector2): Vector2;
258
- getTangentAt(u: number, output?: Vector2): Vector2;
259
- getControlPoints(): Vector2[];
206
+ updateLengths(): void;
207
+ getControlPointRefs(): Vector2[];
208
+ getAdaptivePointArray(output?: number[]): number[];
260
209
  getMinMax(min?: Vector2, max?: Vector2): {
261
210
  min: Vector2;
262
211
  max: Vector2;
263
212
  };
264
- toCommands(): PathCommand[];
213
+ getBoundingBox(): BoundingBox;
214
+ toCommands(): Path2DCommand[];
265
215
  drawTo(ctx: CanvasRenderingContext2D): this;
266
- copy(source: LineCurve): this;
267
216
  }
268
217
 
269
- declare class HeartCurve extends Curve {
270
- center: Vector2;
271
- size: number;
272
- start: number;
273
- end: number;
274
- curves: (CircleCurve | LineCurve)[];
275
- curveT: number;
276
- constructor(center: Vector2, size: number, start?: number, end?: number);
277
- update(): this;
278
- getPoint(t: number): Vector2;
279
- getPointAt(t: number): Vector2;
280
- getCurve(t: number): CircleCurve | LineCurve;
281
- getTangent(t: number, output?: Vector2): Vector2;
282
- getNormal(t: number, output?: Vector2): Vector2;
283
- getControlPoints(): Vector2[];
218
+ declare class CubicBezierCurve extends Curve {
219
+ p1: Vector2;
220
+ cp1: Vector2;
221
+ cp2: Vector2;
222
+ p2: Vector2;
223
+ static from(p1: Vector2, cp1: Vector2, cp2: Vector2, p2: Vector2): CubicBezierCurve;
224
+ constructor(p1x: number, p1y: number, cp1x: number, cp1y: number, cp2x: number, cp2y: number, p2x: number, p2y: number);
225
+ getPoint(t: number, output?: Vector2): Vector2;
226
+ getAdaptivePointArray(output?: number[]): number[];
227
+ getControlPointRefs(): Vector2[];
228
+ protected _solveQuadratic(a: number, b: number, c: number): number[];
284
229
  getMinMax(min?: Vector2, max?: Vector2): {
285
230
  min: Vector2;
286
231
  max: Vector2;
287
232
  };
288
- toCommands(): PathCommand[];
233
+ toCommands(): Path2DCommand[];
289
234
  drawTo(ctx: CanvasRenderingContext2D): this;
235
+ copy(source: CubicBezierCurve): this;
290
236
  }
291
237
 
292
- declare class PloygonCurve extends Curve {
293
- center: Vector2;
294
- radius: number;
295
- number: number;
296
- start: number;
297
- end: number;
298
- curves: LineCurve[];
299
- curveT: number;
300
- points: Vector2[];
301
- constructor(center: Vector2, radius?: number, number?: number, start?: number, end?: number);
302
- update(): this;
303
- getCurve(t: number): LineCurve;
238
+ declare class LineCurve extends Curve {
239
+ p1: Vector2;
240
+ p2: Vector2;
241
+ static from(p1: Vector2, p2: Vector2): LineCurve;
242
+ constructor(p1x: number, p1y: number, p2x: number, p2y: number);
304
243
  getPoint(t: number, output?: Vector2): Vector2;
305
244
  getPointAt(u: number, output?: Vector2): Vector2;
306
- getTangent(t: number, output?: Vector2): Vector2;
307
- getNormal(t: number, output?: Vector2): Vector2;
308
- getControlPoints(): Vector2[];
245
+ getTangent(_t: number, output?: Vector2): Vector2;
246
+ getTangentAt(u: number, output?: Vector2): Vector2;
247
+ getControlPointRefs(): Vector2[];
248
+ getAdaptivePointArray(output?: number[]): number[];
309
249
  getMinMax(min?: Vector2, max?: Vector2): {
310
250
  min: Vector2;
311
251
  max: Vector2;
312
252
  };
313
- toCommands(): PathCommand[];
253
+ toCommands(): Path2DCommand[];
314
254
  drawTo(ctx: CanvasRenderingContext2D): this;
255
+ copy(source: LineCurve): this;
256
+ }
257
+
258
+ declare class PloygonCurve extends CompositeCurve<LineCurve> {
259
+ static equilateral(cx?: number, cy?: number, radius?: number, sideCount?: number): PloygonCurve;
315
260
  }
316
261
 
317
262
  declare class QuadraticBezierCurve extends Curve {
318
- start: Vector2;
319
- control: Vector2;
320
- end: Vector2;
321
- constructor(start?: Vector2, control?: Vector2, end?: Vector2);
263
+ p1: Vector2;
264
+ cp: Vector2;
265
+ p2: Vector2;
266
+ static from(p1: Vector2, cp: Vector2, p2: Vector2): QuadraticBezierCurve;
267
+ constructor(p1x: number, p1y: number, cpx: number, cpy: number, p2x: number, p2y: number);
322
268
  getPoint(t: number, output?: Vector2): Vector2;
323
- getControlPoints(): Vector2[];
269
+ getControlPointRefs(): Vector2[];
270
+ getAdaptivePointArray(output?: number[]): number[];
324
271
  getMinMax(min?: Vector2, max?: Vector2): {
325
272
  min: Vector2;
326
273
  max: Vector2;
327
274
  };
328
- toCommands(): PathCommand[];
275
+ toCommands(): Path2DCommand[];
329
276
  drawTo(ctx: CanvasRenderingContext2D): this;
330
277
  copy(source: QuadraticBezierCurve): this;
331
278
  }
332
279
 
333
- declare class RectangularCurve extends Curve {
334
- center: Vector2;
335
- rx: number;
336
- aspectRatio: number;
337
- start: number;
338
- end: number;
339
- curves: LineCurve[];
340
- curveT: number;
341
- get x(): number;
342
- get y(): number;
343
- get width(): number;
344
- get height(): number;
345
- constructor(center: Vector2, rx: number, aspectRatio?: number, start?: number, end?: number);
346
- update(): this;
347
- getCurve(t: number): LineCurve;
348
- getPoint(t: number, output?: Vector2): Vector2;
349
- getPointAt(u: number, output?: Vector2): Vector2;
350
- getTangent(t: number, output?: Vector2): Vector2;
351
- getNormal(t: number, output?: Vector2): Vector2;
352
- getControlPoints(): Vector2[];
353
- getMinMax(min?: Vector2, max?: Vector2): {
354
- min: Vector2;
355
- max: Vector2;
356
- };
357
- toCommands(): PathCommand[];
358
- drawTo(ctx: CanvasRenderingContext2D): this;
280
+ declare class RectangleCurve extends PloygonCurve {
281
+ x: number;
282
+ y: number;
283
+ width: number;
284
+ height: number;
285
+ constructor(x?: number, y?: number, width?: number, height?: number);
286
+ fillTriangulate(options?: FillTriangulateOptions): FillTriangulateResult;
359
287
  }
360
288
 
361
289
  declare class SplineCurve extends Curve {
362
290
  points: Vector2[];
363
291
  constructor(points?: Vector2[]);
364
292
  getPoint(t: number, output?: Vector2): Vector2;
365
- getControlPoints(): Vector2[];
293
+ getControlPointRefs(): Vector2[];
366
294
  copy(source: SplineCurve): this;
367
295
  }
368
296
 
369
- declare class CurvePath extends Curve {
370
- curves: Curve[];
297
+ /**
298
+ * @link https://developer.mozilla.org/docs/Web/SVG/Attribute/d
299
+ */
300
+ type Path2DCommand = {
301
+ type: 'm' | 'M';
302
+ x: number;
303
+ y: number;
304
+ } | {
305
+ type: 'h' | 'H';
306
+ x: number;
307
+ } | {
308
+ type: 'v' | 'V';
309
+ y: number;
310
+ } | {
311
+ type: 'l' | 'L';
312
+ x: number;
313
+ y: number;
314
+ } | {
315
+ type: 'c' | 'C';
316
+ x1: number;
317
+ y1: number;
318
+ x2: number;
319
+ y2: number;
320
+ x: number;
321
+ y: number;
322
+ } | {
323
+ type: 's' | 'S';
324
+ x2: number;
325
+ y2: number;
326
+ x: number;
327
+ y: number;
328
+ } | {
329
+ type: 'q' | 'Q';
330
+ x1: number;
331
+ y1: number;
332
+ x: number;
333
+ y: number;
334
+ } | {
335
+ type: 't' | 'T';
336
+ x: number;
337
+ y: number;
338
+ } | {
339
+ type: 'a' | 'A';
340
+ rx: number;
341
+ ry: number;
342
+ angle: number;
343
+ largeArcFlag: number;
344
+ sweepFlag: number;
345
+ x: number;
346
+ y: number;
347
+ } | {
348
+ type: 'z' | 'Z';
349
+ };
350
+
351
+ declare class CurvePath extends CompositeCurve {
371
352
  startPoint?: Vector2;
372
353
  currentPoint?: Vector2;
373
354
  autoClose: boolean;
374
- protected _cacheLengths: number[];
375
355
  constructor(points?: Vector2[]);
376
- addCurve(curve: Curve): this;
377
356
  addPoints(points: Vector2[]): this;
378
- addCommands(commands: PathCommand[]): this;
357
+ addCommands(commands: Path2DCommand[]): this;
379
358
  addData(data: string): this;
380
- getPoint(t: number, output?: Vector2): Vector2;
381
- getControlPoints(): Vector2[];
382
- getLength(): number;
383
- updateArcLengths(): void;
384
- getCurveLengths(): number[];
385
- getSpacedPoints(divisions?: number): Vector2[];
386
- getPoints(divisions?: number): Vector2[];
359
+ getUnevenPointArray(count?: number, output?: number[]): number[];
360
+ getSpacedPointArray(count?: number, output?: number[]): number[];
387
361
  protected _setCurrentPoint(point: VectorLike): this;
362
+ protected _connetLineTo(curve: Curve): this;
388
363
  closePath(): this;
389
364
  moveTo(x: number, y: number): this;
390
365
  lineTo(x: number, y: number): this;
@@ -397,27 +372,53 @@ declare class CurvePath extends Curve {
397
372
  relativeEllipse(x: number, y: number, radiusX: number, radiusY: number, rotation: number, startAngle: number, endAngle: number, counterclockwise?: boolean): this;
398
373
  rect(x: number, y: number, w: number, h: number): this;
399
374
  splineThru(points: Vector2[]): this;
400
- getMinMax(min?: Vector2, max?: Vector2): {
401
- min: Vector2;
402
- max: Vector2;
403
- };
404
- getBoundingBox(): BoundingBox;
405
- toCommands(): PathCommand[];
406
375
  drawTo(ctx: CanvasRenderingContext2D): this;
407
376
  copy(source: CurvePath): this;
408
377
  }
409
378
 
379
+ /**
380
+ * Svg path data
381
+ *
382
+ * @link https://developer.mozilla.org/docs/Web/SVG/Attribute/d
383
+ */
384
+ type Path2DData = string;
385
+
386
+ type FillRule = 'nonzero' | 'evenodd';
387
+ type StrokeLinecap = 'butt' | 'round' | 'square';
388
+ type StrokeLinejoin = 'arcs' | 'bevel' | 'miter' | 'miter-clip' | 'round';
389
+ interface Path2DDrawStyle {
390
+ fill: string | CanvasGradient | CanvasPattern;
391
+ stroke: string | CanvasGradient | CanvasPattern;
392
+ shadowColor: string;
393
+ shadowOffsetX: number;
394
+ shadowOffsetY: number;
395
+ shadowBlur: number;
396
+ }
397
+ interface Path2DStyle extends Path2DDrawStyle {
398
+ [key: string]: any;
399
+ fillOpacity: number;
400
+ fillRule: FillRule;
401
+ opacity: number;
402
+ strokeOpacity: number;
403
+ strokeWidth: number;
404
+ strokeLinecap: StrokeLinecap;
405
+ strokeLinejoin: StrokeLinejoin;
406
+ strokeMiterlimit: number;
407
+ strokeDasharray: number[];
408
+ strokeDashoffset: number;
409
+ visibility: string;
410
+ }
411
+
410
412
  /**
411
413
  * @link https://developer.mozilla.org/zh-CN/docs/Web/API/Path2D
412
414
  */
413
- declare class Path2D {
414
- currentPath: CurvePath;
415
- paths: CurvePath[];
416
- style: Partial<PathStyle>;
415
+ declare class Path2D extends CompositeCurve<CurvePath> {
416
+ currentCurve: CurvePath;
417
+ style: Partial<Path2DStyle>;
417
418
  get startPoint(): Vector2 | undefined;
418
419
  get currentPoint(): Vector2 | undefined;
419
420
  get strokeWidth(): number;
420
- constructor(path?: Path2D | PathCommand[] | string, style?: Partial<PathStyle>);
421
+ constructor(path?: Path2D | Path2DCommand[] | Path2DData, style?: Partial<Path2DStyle>);
421
422
  addPath(path: Path2D | CurvePath): this;
422
423
  closePath(): this;
423
424
  moveTo(x: number, y: number): this;
@@ -428,11 +429,9 @@ declare class Path2D {
428
429
  arcTo(x1: number, y1: number, x2: number, y2: number, radius: number): this;
429
430
  ellipse(x: number, y: number, radiusX: number, radiusY: number, rotation: number, startAngle: number, endAngle: number, counterclockwise?: boolean): this;
430
431
  rect(x: number, y: number, w: number, h: number): this;
431
- addCommands(commands: PathCommand[]): this;
432
- addData(data: string): this;
432
+ addCommands(commands: Path2DCommand[]): this;
433
+ addData(data: Path2DData): this;
433
434
  splineThru(points: Vector2[]): this;
434
- getControlPoints(): Vector2[];
435
- getCurves(): Curve[];
436
435
  scale(sx: number, sy?: number, target?: VectorLike): this;
437
436
  skew(ax: number, ay?: number, target?: VectorLike): this;
438
437
  rotate(a: number, target?: VectorLike): this;
@@ -443,25 +442,28 @@ declare class Path2D {
443
442
  max: Vector2;
444
443
  };
445
444
  getBoundingBox(withStyle?: boolean): BoundingBox;
446
- drawTo(ctx: CanvasRenderingContext2D, style?: Partial<PathStyle>): this;
447
- drawControlPointsTo(ctx: CanvasRenderingContext2D, style?: Partial<PathStyle>): this;
448
- toCommands(): PathCommand[];
449
- toData(): string;
445
+ drawTo(ctx: CanvasRenderingContext2D, style?: Partial<Path2DStyle>): this;
446
+ drawControlPointsTo(ctx: CanvasRenderingContext2D, style?: Partial<Path2DStyle>): this;
447
+ toCommands(): Path2DCommand[];
448
+ toData(): Path2DData;
450
449
  toSVGPathString(): string;
450
+ copy(source: Path2D): this;
451
+ clone(): this;
452
+ }
453
+
454
+ declare class Path2DSet {
455
+ paths: Path2D[];
456
+ constructor(paths?: Path2D[]);
457
+ getBoundingBox(withStyle?: boolean): BoundingBox | undefined;
451
458
  toSVGString(): string;
452
459
  toSVGUrl(): string;
453
460
  toSVG(): SVGElement;
454
- toCanvas(options?: Partial<PathStyle & {
461
+ toCanvas(options?: Partial<Path2DStyle & {
455
462
  pixelRatio: number;
456
463
  }>): HTMLCanvasElement;
457
- copy(source: Path2D): this;
458
- clone(): this;
459
464
  }
460
465
 
461
- /**
462
- * @link http://www.w3.org/TR/SVG11/implnote.html#PathElementImplementationNotes
463
- */
464
- declare function addPathCommandsToPath2D(commands: PathCommand[], path: Path2D | CurvePath): void;
466
+ declare function setCanvasContext(ctx: CanvasRenderingContext2D, style: Partial<Path2DStyle>): void;
465
467
 
466
468
  /**
467
469
  * @link https://www.w3.org/TR/SVG/implnote.html#ArcImplementationNotes
@@ -478,19 +480,16 @@ declare function parseArcCommand(path: Path2D | CurvePath, rx: number, ry: numbe
478
480
  */
479
481
  declare function parsePathDataArgs(input: string, flags?: number[], stride?: number): number[];
480
482
 
481
- declare function pathCommandsToPathData(commands: PathCommand[]): string;
483
+ /**
484
+ * @link http://www.w3.org/TR/SVG11/implnote.html#PathElementImplementationNotes
485
+ */
486
+ declare function svgPathCommandsAddToPath2D(commands: Path2DCommand[], path: Path2D | CurvePath): void;
482
487
 
483
- declare function pathDataToPathCommands(d: string): PathCommand[];
488
+ declare function svgPathCommandsToData(commands: Path2DCommand[]): Path2DData;
484
489
 
485
- declare function parseSVGToDOM(svg: string | SVGElement): SVGElement;
486
- declare function parseSVG(svg: string | SVGElement): Path2D[];
490
+ declare function svgPathDataToCommands(data: Path2DData): Path2DCommand[];
487
491
 
488
- declare function getPathsBoundingBox(paths: Path2D[], withStyle?: boolean): BoundingBox | undefined;
489
- declare function pathsToSVGString(paths: Path2D[]): string;
490
- declare function pathsToSVGUrl(paths: Path2D[]): string;
491
- declare function pathsToSVG(paths: Path2D[]): SVGElement;
492
- declare function pathsToCanvas(paths: Path2D[], options?: Partial<PathStyle & {
493
- pixelRatio: number;
494
- }>): HTMLCanvasElement;
492
+ declare function parseSVGToDOM(svg: string | SVGElement): SVGElement;
493
+ declare function parseSVG(svg: string | SVGElement): Path2DSet;
495
494
 
496
- export { BoundingBox, CircleCurve, CubicBezierCurve, Curve, CurvePath, EllipseCurve, type FillRule, HeartCurve, LineCurve, Matrix3, Path2D, type PathCommand, type PathDrawStyle, type PathStyle, PloygonCurve, QuadraticBezierCurve, RectangularCurve, SplineCurve, type StrokeLinecap, type StrokeLinejoin, Vector2, type VectorLike, addPathCommandsToPath2D, getPathsBoundingBox, parseArcCommand, parsePathDataArgs, parseSVG, parseSVGToDOM, pathCommandsToPathData, pathDataToPathCommands, pathsToCanvas, pathsToSVG, pathsToSVGString, pathsToSVGUrl, setCanvasContext };
495
+ export { ArcCurve, BoundingBox, CompositeCurve, CubicBezierCurve, Curve, CurvePath, type DrawPointOptions, EllipseCurve, type FillRule, type FillTriangulateOptions, type FillTriangulateResult, type LineCap, LineCurve, type LineJoin, type LineStyle, Matrix3, Path2D, type Path2DCommand, type Path2DData, type Path2DDrawStyle, Path2DSet, type Path2DStyle, PloygonCurve, QuadraticBezierCurve, RectangleCurve, SplineCurve, type StrokeLinecap, type StrokeLinejoin, type StrokeTriangulateOptions, type StrokeTriangulateResult, Vector2, type VectorLike, catmullRom, cubicBezier, drawPoint, fillTriangulate, getAdaptiveCubicBezierCurvePoints, getAdaptiveQuadraticBezierCurvePoints, parseArcCommand, parsePathDataArgs, parseSVG, parseSVGToDOM, quadraticBezier, setCanvasContext, strokeTriangulate, svgPathCommandsAddToPath2D, svgPathCommandsToData, svgPathDataToCommands };