modern-path2d 0.0.5 → 0.1.1

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,37 +1,23 @@
1
- type PathCommand = {
2
- type: 'M';
3
- x: number;
4
- y: number;
5
- } | {
6
- type: 'L';
7
- x: number;
8
- y: number;
9
- } | {
10
- type: 'C';
11
- x1: number;
12
- y1: number;
13
- x2: number;
14
- y2: number;
15
- x: number;
16
- y: number;
17
- } | {
18
- type: 'Q';
19
- x1: number;
20
- y1: number;
21
- x: number;
22
- y: number;
23
- } | {
24
- type: 'A';
25
- rx: number;
26
- ry: number;
27
- xAxisRotation: number;
28
- largeArcFlag: number;
29
- sweepFlag: number;
30
- x: number;
31
- y: number;
32
- } | {
33
- type: 'Z';
34
- };
1
+ declare class Matrix3 {
2
+ elements: number[];
3
+ constructor(n11?: number, n12?: number, n13?: number, n21?: number, n22?: number, n23?: number, n31?: number, n32?: number, n33?: number);
4
+ set(n11: number, n12: number, n13: number, n21: number, n22: number, n23: number, n31: number, n32: number, n33: number): this;
5
+ identity(): this;
6
+ copy(m: Matrix3): this;
7
+ multiply(m: Matrix3): this;
8
+ premultiply(m: Matrix3): this;
9
+ multiplyMatrices(a: Matrix3, b: Matrix3): this;
10
+ invert(): this;
11
+ transpose(): this;
12
+ scale(sx: number, sy: number): this;
13
+ rotate(theta: number): this;
14
+ translate(tx: number, ty: number): this;
15
+ makeTranslation(x: number, y: number): this;
16
+ makeRotation(theta: number): this;
17
+ makeScale(x: number, y: number): this;
18
+ fromArray(array: number[], offset?: number): this;
19
+ clone(): Matrix3;
20
+ }
35
21
 
36
22
  declare class Point2D {
37
23
  x: number;
@@ -51,36 +37,11 @@ declare class Point2D {
51
37
  normalize(): this;
52
38
  lerpVectors(v1: Point2D, v2: Point2D, alpha: number): this;
53
39
  equals(point: Point2D): boolean;
40
+ applyMatrix3(matrix3: Matrix3): this;
54
41
  copy(point: Point2D): this;
55
42
  clone(): Point2D;
56
43
  }
57
44
 
58
- declare abstract class Curve {
59
- arcLengthDivisions: number;
60
- protected _cacheArcLengths?: number[];
61
- protected _needsUpdate: boolean;
62
- abstract getPoint(t: number, output?: Point2D): Point2D;
63
- abstract getCommands(): PathCommand[];
64
- abstract drawTo(ctx: CanvasRenderingContext2D): void;
65
- getMinMax(min?: Point2D, max?: Point2D): {
66
- min: Point2D;
67
- max: Point2D;
68
- };
69
- getDivisions(divisions: number): number;
70
- getPointAt(u: number, output?: Point2D): Point2D;
71
- getPoints(divisions?: number): Point2D[];
72
- getSpacedPoints(divisions?: number): Point2D[];
73
- getLength(): number;
74
- getLengths(divisions?: number): number[];
75
- updateArcLengths(): void;
76
- getUtoTmapping(u: number, distance?: number): number;
77
- getTangent(t: number, output?: Point2D): Point2D;
78
- getTangentAt(u: number, output?: Point2D): Point2D;
79
- getData(): string;
80
- clone(): this;
81
- copy(source: Curve): this;
82
- }
83
-
84
45
  declare class CurvePath extends Curve {
85
46
  curves: Curve[];
86
47
  currentPoint: Point2D;
@@ -104,32 +65,164 @@ declare class CurvePath extends Curve {
104
65
  splineThru(points: Point2D[]): this;
105
66
  arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, clockwise?: boolean): this;
106
67
  absarc(x: number, y: number, radius: number, startAngle: number, endAngle: number, clockwise?: boolean): this;
107
- ellipse(x: number, y: number, xRadius: number, yRadius: number, startAngle: number, endAngle: number, clockwise?: boolean, rotation?: number): this;
108
- absellipse(x: number, y: number, xRadius: number, yRadius: number, startAngle: number, endAngle: number, clockwise?: boolean, rotation?: number): this;
68
+ ellipse(x: number, y: number, radiusX: number, radiusY: number, startAngle: number, endAngle: number, clockwise?: boolean, rotation?: number): this;
69
+ absellipse(x: number, y: number, radiusX: number, radiusY: number, startAngle: number, endAngle: number, clockwise?: boolean, rotation?: number): this;
109
70
  getCommands(): PathCommand[];
110
71
  getMinMax(min?: Point2D, max?: Point2D): {
111
72
  min: Point2D;
112
73
  max: Point2D;
113
74
  };
114
- drawTo(ctx: CanvasRenderingContext2D): void;
75
+ drawTo(ctx: CanvasRenderingContext2D): this;
115
76
  copy(source: CurvePath): this;
116
77
  }
117
78
 
79
+ /**
80
+ * @see https://developer.mozilla.org/zh-CN/docs/Web/API/Path2D
81
+ */
82
+ declare class Path2D<T = any> {
83
+ currentPath: CurvePath;
84
+ paths: CurvePath[];
85
+ userData?: T;
86
+ constructor(path?: Path2D | PathCommand[] | string);
87
+ addPath(path: Path2D | CurvePath): this;
88
+ closePath(): this;
89
+ moveTo(x: number, y: number): this;
90
+ lineTo(x: number, y: number): this;
91
+ bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): this;
92
+ quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): this;
93
+ arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, counterclockwise?: boolean): this;
94
+ arcTo(x1: number, y1: number, x2: number, y2: number, radius: number): this;
95
+ ellipse(x: number, y: number, radiusX: number, radiusY: number, rotation: number, startAngle: number, endAngle: number, counterclockwise?: boolean): this;
96
+ rect(x: number, y: number, w: number, h: number): this;
97
+ addCommands(commands: PathCommand[]): this;
98
+ addData(data: string): this;
99
+ splineThru(points: Point2D[]): this;
100
+ forEachCurve(cb: (curve: Curve) => void): this;
101
+ transform(matrix: Matrix3): this;
102
+ getMinMax(min?: Point2D, max?: Point2D): {
103
+ min: Point2D;
104
+ max: Point2D;
105
+ };
106
+ getBoundingBox(): {
107
+ x: number;
108
+ y: number;
109
+ left: number;
110
+ top: number;
111
+ right: number;
112
+ bottom: number;
113
+ width: number;
114
+ height: number;
115
+ };
116
+ getCommands(): PathCommand[];
117
+ getData(): string;
118
+ getSvgString(): string;
119
+ getSvgDataUri(): string;
120
+ drawTo(ctx: CanvasRenderingContext2D): void;
121
+ strokeTo(ctx: CanvasRenderingContext2D): void;
122
+ fillTo(ctx: CanvasRenderingContext2D): void;
123
+ copy(source: Path2D): this;
124
+ clone(): Path2D;
125
+ }
126
+
127
+ /**
128
+ * @link https://developer.mozilla.org/docs/Web/SVG/Attribute/d
129
+ */
130
+ type PathCommand = {
131
+ type: 'm' | 'M';
132
+ x: number;
133
+ y: number;
134
+ } | {
135
+ type: 'h' | 'H';
136
+ x: number;
137
+ } | {
138
+ type: 'v' | 'V';
139
+ y: number;
140
+ } | {
141
+ type: 'l' | 'L';
142
+ x: number;
143
+ y: number;
144
+ } | {
145
+ type: 'c' | 'C';
146
+ x1: number;
147
+ y1: number;
148
+ x2: number;
149
+ y2: number;
150
+ x: number;
151
+ y: number;
152
+ } | {
153
+ type: 's' | 'S';
154
+ x2: number;
155
+ y2: number;
156
+ x: number;
157
+ y: number;
158
+ } | {
159
+ type: 'q' | 'Q';
160
+ x1: number;
161
+ y1: number;
162
+ x: number;
163
+ y: number;
164
+ } | {
165
+ type: 't' | 'T';
166
+ x: number;
167
+ y: number;
168
+ } | {
169
+ type: 'a' | 'A';
170
+ rx: number;
171
+ ry: number;
172
+ angle: number;
173
+ largeArcFlag: number;
174
+ sweepFlag: number;
175
+ x: number;
176
+ y: number;
177
+ } | {
178
+ type: 'z' | 'Z';
179
+ };
180
+
181
+ declare abstract class Curve {
182
+ arcLengthDivisions: number;
183
+ protected _cacheArcLengths?: number[];
184
+ protected _needsUpdate: boolean;
185
+ abstract getPoint(t: number, output?: Point2D): Point2D;
186
+ getPointAt(u: number, output?: Point2D): Point2D;
187
+ getPoints(divisions?: number): Point2D[];
188
+ getSpacedPoints(divisions?: number): Point2D[];
189
+ getLength(): number;
190
+ getLengths(divisions?: number): number[];
191
+ updateArcLengths(): void;
192
+ getUtoTmapping(u: number, distance?: number): number;
193
+ getTangent(t: number, output?: Point2D): Point2D;
194
+ getTangentAt(u: number, output?: Point2D): Point2D;
195
+ /** overrideable */
196
+ transform(matrix: Matrix3): this;
197
+ /** overrideable */
198
+ getDivisions(divisions: number): number;
199
+ /** overrideable */
200
+ getMinMax(min?: Point2D, max?: Point2D): {
201
+ min: Point2D;
202
+ max: Point2D;
203
+ };
204
+ /** overrideable */
205
+ getCommands(): PathCommand[];
206
+ getData(): string;
207
+ /** overrideable */
208
+ drawTo(ctx: CanvasRenderingContext2D): this;
209
+ copy(source: Curve): this;
210
+ clone(): this;
211
+ }
212
+
118
213
  declare class CircleCurve extends Curve {
119
214
  center: Point2D;
120
215
  radius: number;
121
216
  start: number;
122
217
  end: number;
123
218
  constructor(center: Point2D, radius: number, start?: number, end?: number);
219
+ getPoint(t: number): Point2D;
220
+ getTangent(t: number): Point2D;
221
+ getNormal(t: number): Point2D;
124
222
  getMinMax(min?: Point2D, max?: Point2D): {
125
223
  min: Point2D;
126
224
  max: Point2D;
127
225
  };
128
- getPoint(t: number): Point2D;
129
- getTangent(t: number): Point2D;
130
- getNormal(t: number): Point2D;
131
- getCommands(): PathCommand[];
132
- drawTo(_ctx: CanvasRenderingContext2D): void;
133
226
  }
134
227
 
135
228
  declare class CubicBezierCurve extends Curve {
@@ -139,29 +232,31 @@ declare class CubicBezierCurve extends Curve {
139
232
  v3: Point2D;
140
233
  constructor(v0?: Point2D, v1?: Point2D, v2?: Point2D, v3?: Point2D);
141
234
  getPoint(t: number, output?: Point2D): Point2D;
235
+ transform(matrix: Matrix3): this;
142
236
  getMinMax(min?: Point2D, max?: Point2D): {
143
237
  min: Point2D;
144
238
  max: Point2D;
145
239
  };
146
240
  getCommands(): PathCommand[];
147
- drawTo(ctx: CanvasRenderingContext2D): void;
241
+ drawTo(ctx: CanvasRenderingContext2D): this;
148
242
  copy(source: CubicBezierCurve): this;
149
243
  }
150
244
 
151
245
  declare class EllipseCurve extends Curve {
152
246
  x: number;
153
247
  y: number;
154
- rx: number;
155
- ry: number;
248
+ radiusX: number;
249
+ radiusY: number;
156
250
  startAngle: number;
157
251
  endAngle: number;
158
252
  clockwise: boolean;
159
253
  rotation: number;
160
- constructor(x?: number, y?: number, rx?: number, ry?: number, startAngle?: number, endAngle?: number, clockwise?: boolean, rotation?: number);
161
- getDivisions(divisions?: number): number;
254
+ constructor(x?: number, y?: number, radiusX?: number, radiusY?: number, startAngle?: number, endAngle?: number, clockwise?: boolean, rotation?: number);
162
255
  getPoint(t: number, output?: Point2D): Point2D;
256
+ getDivisions(divisions?: number): number;
163
257
  getCommands(): PathCommand[];
164
- drawTo(ctx: CanvasRenderingContext2D): void;
258
+ drawTo(ctx: CanvasRenderingContext2D): this;
259
+ transform(matrix: Matrix3): this;
165
260
  copy(source: EllipseCurve): this;
166
261
  }
167
262
 
@@ -179,24 +274,25 @@ declare class HeartCurve extends Curve {
179
274
  getTangent(value: number): Point2D;
180
275
  getNormal(value: number): Point2D;
181
276
  getCommands(): PathCommand[];
182
- drawTo(ctx: CanvasRenderingContext2D): void;
277
+ drawTo(ctx: CanvasRenderingContext2D): this;
183
278
  }
184
279
 
185
280
  declare class LineCurve extends Curve {
186
281
  v1: Point2D;
187
282
  v2: Point2D;
188
283
  constructor(v1?: Point2D, v2?: Point2D);
189
- getDivisions(): number;
190
284
  getPoint(t: number, output?: Point2D): Point2D;
191
285
  getPointAt(u: number, output?: Point2D): Point2D;
192
286
  getTangent(t: number, output?: Point2D): Point2D;
193
287
  getTangentAt(u: number, output?: Point2D): Point2D;
194
- getCommands(): PathCommand[];
288
+ transform(matrix: Matrix3): this;
289
+ getDivisions(): number;
195
290
  getMinMax(min?: Point2D, max?: Point2D): {
196
291
  min: Point2D;
197
292
  max: Point2D;
198
293
  };
199
- drawTo(ctx: CanvasRenderingContext2D): void;
294
+ getCommands(): PathCommand[];
295
+ drawTo(ctx: CanvasRenderingContext2D): this;
200
296
  copy(source: LineCurve): this;
201
297
  }
202
298
 
@@ -221,7 +317,7 @@ declare class PloygonCurve extends Curve {
221
317
  min: Point2D;
222
318
  max: Point2D;
223
319
  };
224
- drawTo(ctx: CanvasRenderingContext2D): void;
320
+ drawTo(ctx: CanvasRenderingContext2D): this;
225
321
  }
226
322
 
227
323
  declare class QuadraticBezierCurve extends Curve {
@@ -230,12 +326,13 @@ declare class QuadraticBezierCurve extends Curve {
230
326
  v2: Point2D;
231
327
  constructor(v0?: Point2D, v1?: Point2D, v2?: Point2D);
232
328
  getPoint(t: number, output?: Point2D): Point2D;
233
- getCommands(): PathCommand[];
329
+ transform(matrix: Matrix3): this;
234
330
  getMinMax(min?: Point2D, max?: Point2D): {
235
331
  min: Point2D;
236
332
  max: Point2D;
237
333
  };
238
- drawTo(ctx: CanvasRenderingContext2D): void;
334
+ getCommands(): PathCommand[];
335
+ drawTo(ctx: CanvasRenderingContext2D): this;
239
336
  copy(source: QuadraticBezierCurve): this;
240
337
  }
241
338
 
@@ -262,7 +359,7 @@ declare class RectangularCurve extends Curve {
262
359
  min: Point2D;
263
360
  max: Point2D;
264
361
  };
265
- drawTo(ctx: CanvasRenderingContext2D): void;
362
+ drawTo(ctx: CanvasRenderingContext2D): this;
266
363
  }
267
364
 
268
365
  declare class SplineCurve extends Curve {
@@ -270,56 +367,9 @@ declare class SplineCurve extends Curve {
270
367
  constructor(points?: Point2D[]);
271
368
  getDivisions(divisions?: number): number;
272
369
  getPoint(t: number, output?: Point2D): Point2D;
273
- getCommands(): PathCommand[];
274
- drawTo(_ctx: CanvasRenderingContext2D): void;
275
370
  copy(source: SplineCurve): this;
276
371
  }
277
372
 
278
- /**
279
- * @see https://developer.mozilla.org/zh-CN/docs/Web/API/Path2D
280
- */
281
- declare class Path2D {
282
- currentPath: CurvePath;
283
- paths: CurvePath[];
284
- constructor(path?: Path2D | PathCommand[] | string);
285
- addPath(path: Path2D): this;
286
- addCommands(commands: PathCommand[]): this;
287
- addData(data: string): this;
288
- closePath(): this;
289
- moveTo(x: number, y: number): this;
290
- lineTo(x: number, y: number): this;
291
- bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): this;
292
- quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): this;
293
- arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, counterclockwise?: boolean): this;
294
- arcTo(x1: number, y1: number, x2: number, y2: number, radius: number): this;
295
- ellipse(x: number, y: number, radiusX: number, radiusY: number, rotation: number, startAngle: number, endAngle: number, counterclockwise?: boolean): this;
296
- rect(x: number, y: number, w: number, h: number): this;
297
- splineThru(points: Point2D[]): this;
298
- getMinMax(min?: Point2D, max?: Point2D): {
299
- min: Point2D;
300
- max: Point2D;
301
- };
302
- getCommands(): PathCommand[];
303
- getData(): string;
304
- getBoundingBox(): {
305
- x: number;
306
- y: number;
307
- width: number;
308
- height: number;
309
- };
310
- getSvgString(): string;
311
- getSvgDataUri(): string;
312
- drawTo(ctx: CanvasRenderingContext2D): void;
313
- strokeTo(ctx: CanvasRenderingContext2D): void;
314
- fillTo(ctx: CanvasRenderingContext2D): void;
315
- }
316
-
317
- /**
318
- * Bezier Curves formulas obtained from
319
- * https://en.wikipedia.org/wiki/B%C3%A9zier_curve
320
- */
321
- declare function catmullRom(t: number, p0: number, p1: number, p2: number, p3: number): number;
322
- declare function quadraticBezier(t: number, p0: number, p1: number, p2: number): number;
323
- declare function cubicBezier(t: number, p0: number, p1: number, p2: number, p3: number): number;
373
+ declare function parseSvg(svg: string | SVGElement): Path2D[];
324
374
 
325
- export { CircleCurve, CubicBezierCurve, Curve, CurvePath, EllipseCurve, HeartCurve, LineCurve, Path2D, type PathCommand, PloygonCurve, Point2D, QuadraticBezierCurve, RectangularCurve, SplineCurve, catmullRom, cubicBezier, quadraticBezier };
375
+ export { CircleCurve, CubicBezierCurve, Curve, CurvePath, EllipseCurve, HeartCurve, LineCurve, Matrix3, Path2D, PloygonCurve, Point2D, QuadraticBezierCurve, RectangularCurve, SplineCurve, parseSvg };