@remotion/paths 3.3.5 → 3.3.7
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/get-parts.d.ts +1 -0
- package/dist/get-parts.js +1 -0
- package/dist/get-subpaths.d.ts +6 -0
- package/dist/get-subpaths.js +18 -0
- package/dist/helpers/construct.d.ts +2 -0
- package/dist/helpers/construct.js +128 -118
- package/dist/helpers/parse.d.ts +2 -2
- package/dist/helpers/parse.js +3 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +3 -1
- package/dist/split-parts.d.ts +6 -0
- package/dist/split-parts.js +18 -0
- package/package.json +2 -2
package/dist/get-parts.d.ts
CHANGED
|
@@ -3,5 +3,6 @@ import type { Part } from './helpers/types';
|
|
|
3
3
|
* Splits a valid SVG path into it's parts.
|
|
4
4
|
* @param {string} path A valid SVG path
|
|
5
5
|
* @link https://remotion.dev/docs/paths/get-parts
|
|
6
|
+
* @deprecated In favor of getSubpaths()
|
|
6
7
|
*/
|
|
7
8
|
export declare const getParts: (path: string) => Part[];
|
package/dist/get-parts.js
CHANGED
|
@@ -6,6 +6,7 @@ const construct_1 = require("./helpers/construct");
|
|
|
6
6
|
* Splits a valid SVG path into it's parts.
|
|
7
7
|
* @param {string} path A valid SVG path
|
|
8
8
|
* @link https://remotion.dev/docs/paths/get-parts
|
|
9
|
+
* @deprecated In favor of getSubpaths()
|
|
9
10
|
*/
|
|
10
11
|
const getParts = (path) => {
|
|
11
12
|
const parts = [];
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getSubpaths = void 0;
|
|
4
|
+
const construct_1 = require("./helpers/construct");
|
|
5
|
+
/**
|
|
6
|
+
* Splits a valid SVG path into it's parts.
|
|
7
|
+
* @param {string} path A valid SVG path
|
|
8
|
+
* @link https://remotion.dev/docs/paths/get-subpaths
|
|
9
|
+
*/
|
|
10
|
+
const getSubpaths = (path) => {
|
|
11
|
+
const { segments } = (0, construct_1.construct)(path);
|
|
12
|
+
return segments
|
|
13
|
+
.map((seg) => {
|
|
14
|
+
return seg.map((s) => s.join(' '));
|
|
15
|
+
})
|
|
16
|
+
.map((_s) => _s.join(' '));
|
|
17
|
+
};
|
|
18
|
+
exports.getSubpaths = getSubpaths;
|
|
@@ -1,113 +1,117 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
// Copied from: https://github.com/rveciana/svg-path-properties
|
|
3
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
4
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
5
|
-
};
|
|
6
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
4
|
exports.construct = void 0;
|
|
8
5
|
const arc_1 = require("./arc");
|
|
9
6
|
const bezier_1 = require("./bezier");
|
|
10
7
|
const linear_1 = require("./linear");
|
|
11
|
-
const parse_1 =
|
|
8
|
+
const parse_1 = require("./parse");
|
|
12
9
|
const construct = (string) => {
|
|
13
10
|
let length = 0;
|
|
14
11
|
const partial_lengths = [];
|
|
15
12
|
const functions = [];
|
|
16
13
|
let initial_point = null;
|
|
17
|
-
const parsed = (0, parse_1.
|
|
14
|
+
const parsed = (0, parse_1.parsePath)(string);
|
|
18
15
|
let cur = [0, 0];
|
|
19
16
|
let prev_point = [0, 0];
|
|
20
17
|
let curve;
|
|
21
18
|
let ringStart = [0, 0];
|
|
19
|
+
const segments = [];
|
|
22
20
|
for (let i = 0; i < parsed.length; i++) {
|
|
21
|
+
const instruction = parsed[i];
|
|
22
|
+
if (instruction[0].toLowerCase() !== 'm' && segments.length > 0) {
|
|
23
|
+
segments[segments.length - 1].push(instruction);
|
|
24
|
+
}
|
|
23
25
|
// moveTo
|
|
24
|
-
if (
|
|
25
|
-
cur = [
|
|
26
|
+
if (instruction[0] === 'M') {
|
|
27
|
+
cur = [instruction[1], instruction[2]];
|
|
26
28
|
ringStart = [cur[0], cur[1]];
|
|
29
|
+
segments.push([instruction]);
|
|
27
30
|
functions.push(null);
|
|
28
31
|
if (i === 0) {
|
|
29
|
-
initial_point = { x:
|
|
32
|
+
initial_point = { x: instruction[1], y: instruction[2] };
|
|
30
33
|
}
|
|
31
34
|
}
|
|
32
|
-
else if (
|
|
33
|
-
cur = [
|
|
35
|
+
else if (instruction[0] === 'm') {
|
|
36
|
+
cur = [instruction[1] + cur[0], instruction[2] + cur[1]];
|
|
34
37
|
ringStart = [cur[0], cur[1]];
|
|
38
|
+
segments.push([['M', cur[0], cur[1]]]);
|
|
35
39
|
functions.push(null);
|
|
36
40
|
// lineTo
|
|
37
41
|
}
|
|
38
|
-
else if (
|
|
39
|
-
length += Math.sqrt((cur[0] -
|
|
40
|
-
functions.push((0, linear_1.makeLinearPosition)(cur[0],
|
|
41
|
-
cur = [
|
|
42
|
+
else if (instruction[0] === 'L') {
|
|
43
|
+
length += Math.sqrt((cur[0] - instruction[1]) ** 2 + (cur[1] - instruction[2]) ** 2);
|
|
44
|
+
functions.push((0, linear_1.makeLinearPosition)(cur[0], instruction[1], cur[1], instruction[2]));
|
|
45
|
+
cur = [instruction[1], instruction[2]];
|
|
42
46
|
}
|
|
43
|
-
else if (
|
|
44
|
-
length += Math.sqrt(
|
|
45
|
-
functions.push((0, linear_1.makeLinearPosition)(cur[0],
|
|
46
|
-
cur = [
|
|
47
|
+
else if (instruction[0] === 'l') {
|
|
48
|
+
length += Math.sqrt(instruction[1] ** 2 + instruction[2] ** 2);
|
|
49
|
+
functions.push((0, linear_1.makeLinearPosition)(cur[0], instruction[1] + cur[0], cur[1], instruction[2] + cur[1]));
|
|
50
|
+
cur = [instruction[1] + cur[0], instruction[2] + cur[1]];
|
|
47
51
|
}
|
|
48
|
-
else if (
|
|
49
|
-
length += Math.abs(cur[0] -
|
|
50
|
-
functions.push((0, linear_1.makeLinearPosition)(cur[0],
|
|
51
|
-
cur[0] =
|
|
52
|
+
else if (instruction[0] === 'H') {
|
|
53
|
+
length += Math.abs(cur[0] - instruction[1]);
|
|
54
|
+
functions.push((0, linear_1.makeLinearPosition)(cur[0], instruction[1], cur[1], cur[1]));
|
|
55
|
+
cur[0] = instruction[1];
|
|
52
56
|
}
|
|
53
|
-
else if (
|
|
54
|
-
length += Math.abs(
|
|
55
|
-
functions.push((0, linear_1.makeLinearPosition)(cur[0], cur[0] +
|
|
56
|
-
cur[0] =
|
|
57
|
+
else if (instruction[0] === 'h') {
|
|
58
|
+
length += Math.abs(instruction[1]);
|
|
59
|
+
functions.push((0, linear_1.makeLinearPosition)(cur[0], cur[0] + instruction[1], cur[1], cur[1]));
|
|
60
|
+
cur[0] = instruction[1] + cur[0];
|
|
57
61
|
}
|
|
58
|
-
else if (
|
|
59
|
-
length += Math.abs(cur[1] -
|
|
60
|
-
functions.push((0, linear_1.makeLinearPosition)(cur[0], cur[0], cur[1],
|
|
61
|
-
cur[1] =
|
|
62
|
+
else if (instruction[0] === 'V') {
|
|
63
|
+
length += Math.abs(cur[1] - instruction[1]);
|
|
64
|
+
functions.push((0, linear_1.makeLinearPosition)(cur[0], cur[0], cur[1], instruction[1]));
|
|
65
|
+
cur[1] = instruction[1];
|
|
62
66
|
}
|
|
63
|
-
else if (
|
|
64
|
-
length += Math.abs(
|
|
65
|
-
functions.push((0, linear_1.makeLinearPosition)(cur[0], cur[0], cur[1], cur[1] +
|
|
66
|
-
cur[1] =
|
|
67
|
+
else if (instruction[0] === 'v') {
|
|
68
|
+
length += Math.abs(instruction[1]);
|
|
69
|
+
functions.push((0, linear_1.makeLinearPosition)(cur[0], cur[0], cur[1], cur[1] + instruction[1]));
|
|
70
|
+
cur[1] = instruction[1] + cur[1];
|
|
67
71
|
// Close path
|
|
68
72
|
}
|
|
69
|
-
else if (
|
|
73
|
+
else if (instruction[0] === 'z' || instruction[0] === 'Z') {
|
|
70
74
|
length += Math.sqrt((ringStart[0] - cur[0]) ** 2 + (ringStart[1] - cur[1]) ** 2);
|
|
71
75
|
functions.push((0, linear_1.makeLinearPosition)(cur[0], ringStart[0], cur[1], ringStart[1]));
|
|
72
76
|
cur = [ringStart[0], ringStart[1]];
|
|
73
77
|
// Cubic Bezier curves
|
|
74
78
|
}
|
|
75
|
-
else if (
|
|
79
|
+
else if (instruction[0] === 'C') {
|
|
76
80
|
curve = (0, bezier_1.makeBezier)({
|
|
77
81
|
ax: cur[0],
|
|
78
82
|
ay: cur[1],
|
|
79
|
-
bx:
|
|
80
|
-
by:
|
|
81
|
-
cx:
|
|
82
|
-
cy:
|
|
83
|
-
dx:
|
|
84
|
-
dy:
|
|
83
|
+
bx: instruction[1],
|
|
84
|
+
by: instruction[2],
|
|
85
|
+
cx: instruction[3],
|
|
86
|
+
cy: instruction[4],
|
|
87
|
+
dx: instruction[5],
|
|
88
|
+
dy: instruction[6],
|
|
85
89
|
});
|
|
86
90
|
length += curve.getTotalLength();
|
|
87
|
-
cur = [
|
|
91
|
+
cur = [instruction[5], instruction[6]];
|
|
88
92
|
functions.push(curve);
|
|
89
93
|
}
|
|
90
|
-
else if (
|
|
94
|
+
else if (instruction[0] === 'c') {
|
|
91
95
|
curve = (0, bezier_1.makeBezier)({
|
|
92
96
|
ax: cur[0],
|
|
93
97
|
ay: cur[1],
|
|
94
|
-
bx: cur[0] +
|
|
95
|
-
by: cur[1] +
|
|
96
|
-
cx: cur[0] +
|
|
97
|
-
cy: cur[1] +
|
|
98
|
-
dx: cur[0] +
|
|
99
|
-
dy: cur[1] +
|
|
98
|
+
bx: cur[0] + instruction[1],
|
|
99
|
+
by: cur[1] + instruction[2],
|
|
100
|
+
cx: cur[0] + instruction[3],
|
|
101
|
+
cy: cur[1] + instruction[4],
|
|
102
|
+
dx: cur[0] + instruction[5],
|
|
103
|
+
dy: cur[1] + instruction[6],
|
|
100
104
|
});
|
|
101
105
|
if (curve.getTotalLength() > 0) {
|
|
102
106
|
length += curve.getTotalLength();
|
|
103
107
|
functions.push(curve);
|
|
104
|
-
cur = [
|
|
108
|
+
cur = [instruction[5] + cur[0], instruction[6] + cur[1]];
|
|
105
109
|
}
|
|
106
110
|
else {
|
|
107
111
|
functions.push((0, linear_1.makeLinearPosition)(cur[0], cur[0], cur[1], cur[1]));
|
|
108
112
|
}
|
|
109
113
|
}
|
|
110
|
-
else if (
|
|
114
|
+
else if (instruction[0] === 'S') {
|
|
111
115
|
if (i > 0 && ['C', 'c', 'S', 's'].indexOf(parsed[i - 1][0]) > -1) {
|
|
112
116
|
if (curve) {
|
|
113
117
|
const c = curve.getC();
|
|
@@ -116,10 +120,10 @@ const construct = (string) => {
|
|
|
116
120
|
ay: cur[1],
|
|
117
121
|
bx: 2 * cur[0] - c.x,
|
|
118
122
|
by: 2 * cur[1] - c.y,
|
|
119
|
-
cx:
|
|
120
|
-
cy:
|
|
121
|
-
dx:
|
|
122
|
-
dy:
|
|
123
|
+
cx: instruction[1],
|
|
124
|
+
cy: instruction[2],
|
|
125
|
+
dx: instruction[3],
|
|
126
|
+
dy: instruction[4],
|
|
123
127
|
});
|
|
124
128
|
}
|
|
125
129
|
}
|
|
@@ -129,19 +133,19 @@ const construct = (string) => {
|
|
|
129
133
|
ay: cur[1],
|
|
130
134
|
bx: cur[0],
|
|
131
135
|
by: cur[1],
|
|
132
|
-
cx:
|
|
133
|
-
cy:
|
|
134
|
-
dx:
|
|
135
|
-
dy:
|
|
136
|
+
cx: instruction[1],
|
|
137
|
+
cy: instruction[2],
|
|
138
|
+
dx: instruction[3],
|
|
139
|
+
dy: instruction[4],
|
|
136
140
|
});
|
|
137
141
|
}
|
|
138
142
|
if (curve) {
|
|
139
143
|
length += curve.getTotalLength();
|
|
140
|
-
cur = [
|
|
144
|
+
cur = [instruction[3], instruction[4]];
|
|
141
145
|
functions.push(curve);
|
|
142
146
|
}
|
|
143
147
|
}
|
|
144
|
-
else if (
|
|
148
|
+
else if (instruction[0] === 's') {
|
|
145
149
|
// 240 225
|
|
146
150
|
if (i > 0 && ['C', 'c', 'S', 's'].indexOf(parsed[i - 1][0]) > -1) {
|
|
147
151
|
if (curve) {
|
|
@@ -152,10 +156,10 @@ const construct = (string) => {
|
|
|
152
156
|
ay: cur[1],
|
|
153
157
|
bx: cur[0] + d.x - c.x,
|
|
154
158
|
by: cur[1] + d.y - c.y,
|
|
155
|
-
cx: cur[0] +
|
|
156
|
-
cy: cur[1] +
|
|
157
|
-
dx: cur[0] +
|
|
158
|
-
dy: cur[1] +
|
|
159
|
+
cx: cur[0] + instruction[1],
|
|
160
|
+
cy: cur[1] + instruction[2],
|
|
161
|
+
dx: cur[0] + instruction[3],
|
|
162
|
+
dy: cur[1] + instruction[4],
|
|
159
163
|
});
|
|
160
164
|
}
|
|
161
165
|
}
|
|
@@ -165,22 +169,22 @@ const construct = (string) => {
|
|
|
165
169
|
ay: cur[1],
|
|
166
170
|
bx: cur[0],
|
|
167
171
|
by: cur[1],
|
|
168
|
-
cx: cur[0] +
|
|
169
|
-
cy: cur[1] +
|
|
170
|
-
dx: cur[0] +
|
|
171
|
-
dy: cur[1] +
|
|
172
|
+
cx: cur[0] + instruction[1],
|
|
173
|
+
cy: cur[1] + instruction[2],
|
|
174
|
+
dx: cur[0] + instruction[3],
|
|
175
|
+
dy: cur[1] + instruction[4],
|
|
172
176
|
});
|
|
173
177
|
}
|
|
174
178
|
if (curve) {
|
|
175
179
|
length += curve.getTotalLength();
|
|
176
|
-
cur = [
|
|
180
|
+
cur = [instruction[3] + cur[0], instruction[4] + cur[1]];
|
|
177
181
|
functions.push(curve);
|
|
178
182
|
}
|
|
179
183
|
}
|
|
180
184
|
// Quadratic Bezier curves
|
|
181
|
-
else if (
|
|
182
|
-
if (cur[0] ===
|
|
183
|
-
const linearCurve = (0, linear_1.makeLinearPosition)(
|
|
185
|
+
else if (instruction[0] === 'Q') {
|
|
186
|
+
if (cur[0] === instruction[1] && cur[1] === instruction[2]) {
|
|
187
|
+
const linearCurve = (0, linear_1.makeLinearPosition)(instruction[1], instruction[3], instruction[2], instruction[4]);
|
|
184
188
|
length += linearCurve.getTotalLength();
|
|
185
189
|
functions.push(linearCurve);
|
|
186
190
|
}
|
|
@@ -188,22 +192,22 @@ const construct = (string) => {
|
|
|
188
192
|
curve = (0, bezier_1.makeBezier)({
|
|
189
193
|
ax: cur[0],
|
|
190
194
|
ay: cur[1],
|
|
191
|
-
bx:
|
|
192
|
-
by:
|
|
193
|
-
cx:
|
|
194
|
-
cy:
|
|
195
|
+
bx: instruction[1],
|
|
196
|
+
by: instruction[2],
|
|
197
|
+
cx: instruction[3],
|
|
198
|
+
cy: instruction[4],
|
|
195
199
|
dx: null,
|
|
196
200
|
dy: null,
|
|
197
201
|
});
|
|
198
202
|
length += curve.getTotalLength();
|
|
199
203
|
functions.push(curve);
|
|
200
204
|
}
|
|
201
|
-
cur = [
|
|
202
|
-
prev_point = [
|
|
205
|
+
cur = [instruction[3], instruction[4]];
|
|
206
|
+
prev_point = [instruction[1], instruction[2]];
|
|
203
207
|
}
|
|
204
|
-
else if (
|
|
205
|
-
if (
|
|
206
|
-
const linearCurve = (0, linear_1.makeLinearPosition)(cur[0] +
|
|
208
|
+
else if (instruction[0] === 'q') {
|
|
209
|
+
if (instruction[1] === 0 && instruction[2] === 0) {
|
|
210
|
+
const linearCurve = (0, linear_1.makeLinearPosition)(cur[0] + instruction[1], cur[0] + instruction[3], cur[1] + instruction[2], cur[1] + instruction[4]);
|
|
207
211
|
length += linearCurve.getTotalLength();
|
|
208
212
|
functions.push(linearCurve);
|
|
209
213
|
}
|
|
@@ -211,28 +215,28 @@ const construct = (string) => {
|
|
|
211
215
|
curve = (0, bezier_1.makeBezier)({
|
|
212
216
|
ax: cur[0],
|
|
213
217
|
ay: cur[1],
|
|
214
|
-
bx: cur[0] +
|
|
215
|
-
by: cur[1] +
|
|
216
|
-
cx: cur[0] +
|
|
217
|
-
cy: cur[1] +
|
|
218
|
+
bx: cur[0] + instruction[1],
|
|
219
|
+
by: cur[1] + instruction[2],
|
|
220
|
+
cx: cur[0] + instruction[3],
|
|
221
|
+
cy: cur[1] + instruction[4],
|
|
218
222
|
dx: null,
|
|
219
223
|
dy: null,
|
|
220
224
|
});
|
|
221
225
|
length += curve.getTotalLength();
|
|
222
226
|
functions.push(curve);
|
|
223
227
|
}
|
|
224
|
-
prev_point = [cur[0] +
|
|
225
|
-
cur = [
|
|
228
|
+
prev_point = [cur[0] + instruction[1], cur[1] + instruction[2]];
|
|
229
|
+
cur = [instruction[3] + cur[0], instruction[4] + cur[1]];
|
|
226
230
|
}
|
|
227
|
-
else if (
|
|
231
|
+
else if (instruction[0] === 'T') {
|
|
228
232
|
if (i > 0 && ['Q', 'q', 'T', 't'].indexOf(parsed[i - 1][0]) > -1) {
|
|
229
233
|
curve = (0, bezier_1.makeBezier)({
|
|
230
234
|
ax: cur[0],
|
|
231
235
|
ay: cur[1],
|
|
232
236
|
bx: 2 * cur[0] - prev_point[0],
|
|
233
237
|
by: 2 * cur[1] - prev_point[1],
|
|
234
|
-
cx:
|
|
235
|
-
cy:
|
|
238
|
+
cx: instruction[1],
|
|
239
|
+
cy: instruction[2],
|
|
236
240
|
dx: null,
|
|
237
241
|
dy: null,
|
|
238
242
|
});
|
|
@@ -240,22 +244,22 @@ const construct = (string) => {
|
|
|
240
244
|
length += curve.getTotalLength();
|
|
241
245
|
}
|
|
242
246
|
else {
|
|
243
|
-
const linearCurve = (0, linear_1.makeLinearPosition)(cur[0],
|
|
247
|
+
const linearCurve = (0, linear_1.makeLinearPosition)(cur[0], instruction[1], cur[1], instruction[2]);
|
|
244
248
|
functions.push(linearCurve);
|
|
245
249
|
length += linearCurve.getTotalLength();
|
|
246
250
|
}
|
|
247
251
|
prev_point = [2 * cur[0] - prev_point[0], 2 * cur[1] - prev_point[1]];
|
|
248
|
-
cur = [
|
|
252
|
+
cur = [instruction[1], instruction[2]];
|
|
249
253
|
}
|
|
250
|
-
else if (
|
|
254
|
+
else if (instruction[0] === 't') {
|
|
251
255
|
if (i > 0 && ['Q', 'q', 'T', 't'].indexOf(parsed[i - 1][0]) > -1) {
|
|
252
256
|
curve = (0, bezier_1.makeBezier)({
|
|
253
257
|
ax: cur[0],
|
|
254
258
|
ay: cur[1],
|
|
255
259
|
bx: 2 * cur[0] - prev_point[0],
|
|
256
260
|
by: 2 * cur[1] - prev_point[1],
|
|
257
|
-
cx: cur[0] +
|
|
258
|
-
cy: cur[1] +
|
|
261
|
+
cx: cur[0] + instruction[1],
|
|
262
|
+
cy: cur[1] + instruction[2],
|
|
259
263
|
dx: null,
|
|
260
264
|
dy: null,
|
|
261
265
|
});
|
|
@@ -263,47 +267,53 @@ const construct = (string) => {
|
|
|
263
267
|
functions.push(curve);
|
|
264
268
|
}
|
|
265
269
|
else {
|
|
266
|
-
const linearCurve = (0, linear_1.makeLinearPosition)(cur[0], cur[0] +
|
|
270
|
+
const linearCurve = (0, linear_1.makeLinearPosition)(cur[0], cur[0] + instruction[1], cur[1], cur[1] + instruction[2]);
|
|
267
271
|
length += linearCurve.getTotalLength();
|
|
268
272
|
functions.push(linearCurve);
|
|
269
273
|
}
|
|
270
274
|
prev_point = [2 * cur[0] - prev_point[0], 2 * cur[1] - prev_point[1]];
|
|
271
|
-
cur = [
|
|
275
|
+
cur = [instruction[1] + cur[0], instruction[2] + cur[1]];
|
|
272
276
|
}
|
|
273
|
-
else if (
|
|
277
|
+
else if (instruction[0] === 'A') {
|
|
274
278
|
const arcCurve = (0, arc_1.makeArc)({
|
|
275
279
|
x0: cur[0],
|
|
276
280
|
y0: cur[1],
|
|
277
|
-
rx:
|
|
278
|
-
ry:
|
|
279
|
-
xAxisRotate:
|
|
280
|
-
LargeArcFlag:
|
|
281
|
-
SweepFlag:
|
|
282
|
-
x1:
|
|
283
|
-
y1:
|
|
281
|
+
rx: instruction[1],
|
|
282
|
+
ry: instruction[2],
|
|
283
|
+
xAxisRotate: instruction[3],
|
|
284
|
+
LargeArcFlag: instruction[4] === 1,
|
|
285
|
+
SweepFlag: instruction[5] === 1,
|
|
286
|
+
x1: instruction[6],
|
|
287
|
+
y1: instruction[7],
|
|
284
288
|
});
|
|
285
289
|
length += arcCurve.getTotalLength();
|
|
286
|
-
cur = [
|
|
290
|
+
cur = [instruction[6], instruction[7]];
|
|
287
291
|
functions.push(arcCurve);
|
|
288
292
|
}
|
|
289
|
-
else if (
|
|
293
|
+
else if (instruction[0] === 'a') {
|
|
290
294
|
const arcCurve = (0, arc_1.makeArc)({
|
|
291
295
|
x0: cur[0],
|
|
292
296
|
y0: cur[1],
|
|
293
|
-
rx:
|
|
294
|
-
ry:
|
|
295
|
-
xAxisRotate:
|
|
296
|
-
LargeArcFlag:
|
|
297
|
-
SweepFlag:
|
|
298
|
-
x1: cur[0] +
|
|
299
|
-
y1: cur[1] +
|
|
297
|
+
rx: instruction[1],
|
|
298
|
+
ry: instruction[2],
|
|
299
|
+
xAxisRotate: instruction[3],
|
|
300
|
+
LargeArcFlag: instruction[4] === 1,
|
|
301
|
+
SweepFlag: instruction[5] === 1,
|
|
302
|
+
x1: cur[0] + instruction[6],
|
|
303
|
+
y1: cur[1] + instruction[7],
|
|
300
304
|
});
|
|
301
305
|
length += arcCurve.getTotalLength();
|
|
302
|
-
cur = [cur[0] +
|
|
306
|
+
cur = [cur[0] + instruction[6], cur[1] + instruction[7]];
|
|
303
307
|
functions.push(arcCurve);
|
|
304
308
|
}
|
|
305
309
|
partial_lengths.push(length);
|
|
306
310
|
}
|
|
307
|
-
return {
|
|
311
|
+
return {
|
|
312
|
+
segments,
|
|
313
|
+
initial_point,
|
|
314
|
+
length,
|
|
315
|
+
partial_lengths,
|
|
316
|
+
functions,
|
|
317
|
+
};
|
|
308
318
|
};
|
|
309
319
|
exports.construct = construct;
|
package/dist/helpers/parse.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
declare
|
|
2
|
-
export
|
|
1
|
+
export declare type Instruction = [string, ...number[]];
|
|
2
|
+
export declare const parsePath: (path: string) => Instruction[];
|
package/dist/helpers/parse.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
// Copied from: https://github.com/rveciana/svg-path-properties
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.parsePath = void 0;
|
|
4
5
|
const length = {
|
|
5
6
|
a: 7,
|
|
6
7
|
c: 6,
|
|
@@ -15,7 +16,7 @@ const length = {
|
|
|
15
16
|
};
|
|
16
17
|
const segmentRegExp = /([astvzqmhlc])([^astvzqmhlc]*)/gi;
|
|
17
18
|
const numberRegExp = /-?[0-9]*\.?[0-9]+(?:e[-+]?\d+)?/gi;
|
|
18
|
-
|
|
19
|
+
const parsePath = (path) => {
|
|
19
20
|
const segments = (path && path.length > 0 ? path : 'M0,0').match(segmentRegExp);
|
|
20
21
|
if (!segments) {
|
|
21
22
|
throw new Error(`No path elements found in string ${path}`);
|
|
@@ -43,6 +44,7 @@ exports.default = (path) => {
|
|
|
43
44
|
return segmentsArray;
|
|
44
45
|
}, []);
|
|
45
46
|
};
|
|
47
|
+
exports.parsePath = parsePath;
|
|
46
48
|
const parseValues = (args) => {
|
|
47
49
|
const numbers = args.match(numberRegExp);
|
|
48
50
|
return numbers ? numbers.map(Number) : [];
|
package/dist/index.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ export { extendViewBox } from './extend-viewbox';
|
|
|
3
3
|
export { getLength } from './get-length';
|
|
4
4
|
export { getParts } from './get-parts';
|
|
5
5
|
export { getPointAtLength } from './get-point-at-length';
|
|
6
|
+
export { getSubpaths } from './get-subpaths';
|
|
6
7
|
export { getTangentAtLength } from './get-tangent-at-length';
|
|
7
8
|
export { Part } from './helpers/types';
|
|
8
9
|
export { interpolatePath } from './interpolate-path';
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.reversePath = exports.normalizePath = exports.interpolatePath = exports.getTangentAtLength = exports.getPointAtLength = exports.getParts = exports.getLength = exports.extendViewBox = exports.evolvePath = void 0;
|
|
3
|
+
exports.reversePath = exports.normalizePath = exports.interpolatePath = exports.getTangentAtLength = exports.getSubpaths = exports.getPointAtLength = exports.getParts = exports.getLength = exports.extendViewBox = exports.evolvePath = void 0;
|
|
4
4
|
var evolve_path_1 = require("./evolve-path");
|
|
5
5
|
Object.defineProperty(exports, "evolvePath", { enumerable: true, get: function () { return evolve_path_1.evolvePath; } });
|
|
6
6
|
var extend_viewbox_1 = require("./extend-viewbox");
|
|
@@ -11,6 +11,8 @@ var get_parts_1 = require("./get-parts");
|
|
|
11
11
|
Object.defineProperty(exports, "getParts", { enumerable: true, get: function () { return get_parts_1.getParts; } });
|
|
12
12
|
var get_point_at_length_1 = require("./get-point-at-length");
|
|
13
13
|
Object.defineProperty(exports, "getPointAtLength", { enumerable: true, get: function () { return get_point_at_length_1.getPointAtLength; } });
|
|
14
|
+
var get_subpaths_1 = require("./get-subpaths");
|
|
15
|
+
Object.defineProperty(exports, "getSubpaths", { enumerable: true, get: function () { return get_subpaths_1.getSubpaths; } });
|
|
14
16
|
var get_tangent_at_length_1 = require("./get-tangent-at-length");
|
|
15
17
|
Object.defineProperty(exports, "getTangentAtLength", { enumerable: true, get: function () { return get_tangent_at_length_1.getTangentAtLength; } });
|
|
16
18
|
var interpolate_path_1 = require("./interpolate-path");
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.splitParts = void 0;
|
|
4
|
+
const construct_1 = require("./helpers/construct");
|
|
5
|
+
/**
|
|
6
|
+
* Splits a valid SVG path into it's parts.
|
|
7
|
+
* @param {string} path A valid SVG path
|
|
8
|
+
* @link https://remotion.dev/docs/paths/split-parts
|
|
9
|
+
*/
|
|
10
|
+
const splitParts = (path) => {
|
|
11
|
+
const { segments } = (0, construct_1.construct)(path);
|
|
12
|
+
return segments
|
|
13
|
+
.map((seg) => {
|
|
14
|
+
return seg.map((s) => s.join(' '));
|
|
15
|
+
})
|
|
16
|
+
.map((_s) => _s.join(' '));
|
|
17
|
+
};
|
|
18
|
+
exports.splitParts = splitParts;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@remotion/paths",
|
|
3
|
-
"version": "3.3.
|
|
3
|
+
"version": "3.3.7",
|
|
4
4
|
"description": "Utility functions for SVG paths",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -35,5 +35,5 @@
|
|
|
35
35
|
"publishConfig": {
|
|
36
36
|
"access": "public"
|
|
37
37
|
},
|
|
38
|
-
"gitHead": "
|
|
38
|
+
"gitHead": "5a9310dd3db431e7a3e2eb2e2b3c508bbc7b258a"
|
|
39
39
|
}
|