@dnyantra/dtly 0.2.2 → 0.3.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/README.md +16 -3
- package/dist/cli.js +33 -3
- package/dist/cli.js.map +1 -1
- package/dist/core/anim.js +20 -0
- package/dist/core/anim.js.map +1 -1
- package/dist/core/captions.d.ts +13 -0
- package/dist/core/captions.js +57 -0
- package/dist/core/captions.js.map +1 -0
- package/dist/core/geo.d.ts +13 -0
- package/dist/core/geo.js +41 -0
- package/dist/core/geo.js.map +1 -0
- package/dist/core/model.d.ts +112 -9
- package/dist/core/model.js.map +1 -1
- package/dist/core/path.d.ts +35 -0
- package/dist/core/path.js +324 -0
- package/dist/core/path.js.map +1 -0
- package/dist/core/svg.d.ts +22 -0
- package/dist/core/svg.js +217 -0
- package/dist/core/svg.js.map +1 -0
- package/dist/core/text.d.ts +3 -1
- package/dist/core/text.js +49 -3
- package/dist/core/text.js.map +1 -1
- package/dist/mcp/server.js +28 -1
- package/dist/mcp/server.js.map +1 -1
- package/dist/ops/ops.d.ts +7 -0
- package/dist/ops/ops.js +11 -1
- package/dist/ops/ops.js.map +1 -1
- package/dist/presets/app.d.ts +2 -0
- package/dist/presets/app.js +82 -0
- package/dist/presets/app.js.map +1 -0
- package/dist/presets/captions.d.ts +2 -0
- package/dist/presets/captions.js +48 -0
- package/dist/presets/captions.js.map +1 -0
- package/dist/presets/charts.d.ts +2 -0
- package/dist/presets/charts.js +162 -0
- package/dist/presets/charts.js.map +1 -0
- package/dist/presets/index.d.ts +1 -1
- package/dist/presets/index.js +62 -1
- package/dist/presets/index.js.map +1 -1
- package/dist/presets/maps.d.ts +2 -0
- package/dist/presets/maps.js +79 -0
- package/dist/presets/maps.js.map +1 -0
- package/dist/render/fx.d.ts +11 -0
- package/dist/render/fx.js +87 -0
- package/dist/render/fx.js.map +1 -0
- package/dist/render/grade.d.ts +20 -0
- package/dist/render/grade.js +178 -0
- package/dist/render/grade.js.map +1 -0
- package/dist/render/lottie.d.ts +36 -0
- package/dist/render/lottie.js +523 -0
- package/dist/render/lottie.js.map +1 -0
- package/dist/render/node-host.d.ts +1 -0
- package/dist/render/node-host.js +15 -4
- package/dist/render/node-host.js.map +1 -1
- package/dist/render/perspective.d.ts +5 -0
- package/dist/render/perspective.js +71 -0
- package/dist/render/perspective.js.map +1 -0
- package/dist/render/renderer.d.ts +6 -0
- package/dist/render/renderer.js +156 -95
- package/dist/render/renderer.js.map +1 -1
- package/dist/render/shapes.d.ts +6 -0
- package/dist/render/shapes.js +129 -0
- package/dist/render/shapes.js.map +1 -0
- package/dist/render/tiles.d.ts +11 -0
- package/dist/render/tiles.js +42 -0
- package/dist/render/tiles.js.map +1 -0
- package/dist/render/transcribe.d.ts +14 -0
- package/dist/render/transcribe.js +55 -0
- package/dist/render/transcribe.js.map +1 -0
- package/dist/studio/server.js +14 -1
- package/dist/studio/server.js.map +1 -1
- package/dist/studio-app/app.js +5 -4
- package/dist/studio-app/app.js.map +4 -4
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
- package/plugin/skills/moti/SKILL.md +23 -3
|
@@ -0,0 +1,324 @@
|
|
|
1
|
+
// Parses SVG path data into absolute M/L/C/Z segments (H, V, S, Q, T and A are converted).
|
|
2
|
+
export const parsePath = (d) => {
|
|
3
|
+
const out = [];
|
|
4
|
+
const tokens = d.match(/[a-df-z]|-?(?:\d+\.?\d*|\.\d+)(?:e[-+]?\d+)?/gi) ?? [];
|
|
5
|
+
let i = 0, cmd = '', cur = [0, 0], start = [0, 0], lastC = null, lastQ = null;
|
|
6
|
+
const num = () => Number(tokens[i++]);
|
|
7
|
+
const isNum = () => i < tokens.length && !/^[a-z]$/i.test(tokens[i]);
|
|
8
|
+
while (i < tokens.length) {
|
|
9
|
+
if (/^[a-z]$/i.test(tokens[i]))
|
|
10
|
+
cmd = tokens[i++];
|
|
11
|
+
else if (!cmd) {
|
|
12
|
+
i++;
|
|
13
|
+
continue;
|
|
14
|
+
}
|
|
15
|
+
const rel = cmd === cmd.toLowerCase();
|
|
16
|
+
const R = (p) => (rel ? [cur[0] + p[0], cur[1] + p[1]] : p);
|
|
17
|
+
const C = cmd.toUpperCase();
|
|
18
|
+
if (C === 'Z') {
|
|
19
|
+
out.push({ kind: 'Z' });
|
|
20
|
+
cur = start;
|
|
21
|
+
lastC = lastQ = null;
|
|
22
|
+
if (!isNum())
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
do {
|
|
26
|
+
if (C === 'M') {
|
|
27
|
+
cur = R([num(), num()]);
|
|
28
|
+
start = cur;
|
|
29
|
+
out.push({ kind: 'M', p: cur });
|
|
30
|
+
cmd = rel ? 'l' : 'L';
|
|
31
|
+
lastC = lastQ = null;
|
|
32
|
+
break;
|
|
33
|
+
}
|
|
34
|
+
if (C === 'L') {
|
|
35
|
+
cur = R([num(), num()]);
|
|
36
|
+
out.push({ kind: 'L', p: cur });
|
|
37
|
+
lastC = lastQ = null;
|
|
38
|
+
}
|
|
39
|
+
else if (C === 'H') {
|
|
40
|
+
const x = num();
|
|
41
|
+
cur = [rel ? cur[0] + x : x, cur[1]];
|
|
42
|
+
out.push({ kind: 'L', p: cur });
|
|
43
|
+
lastC = lastQ = null;
|
|
44
|
+
}
|
|
45
|
+
else if (C === 'V') {
|
|
46
|
+
const y = num();
|
|
47
|
+
cur = [cur[0], rel ? cur[1] + y : y];
|
|
48
|
+
out.push({ kind: 'L', p: cur });
|
|
49
|
+
lastC = lastQ = null;
|
|
50
|
+
}
|
|
51
|
+
else if (C === 'C') {
|
|
52
|
+
const c1 = R([num(), num()]), c2 = R([num(), num()]), p = R([num(), num()]);
|
|
53
|
+
out.push({ kind: 'C', c1, c2, p });
|
|
54
|
+
cur = p;
|
|
55
|
+
lastC = c2;
|
|
56
|
+
lastQ = null;
|
|
57
|
+
}
|
|
58
|
+
else if (C === 'S') {
|
|
59
|
+
const c1 = lastC ? [2 * cur[0] - lastC[0], 2 * cur[1] - lastC[1]] : cur;
|
|
60
|
+
const c2 = R([num(), num()]), p = R([num(), num()]);
|
|
61
|
+
out.push({ kind: 'C', c1, c2, p });
|
|
62
|
+
cur = p;
|
|
63
|
+
lastC = c2;
|
|
64
|
+
lastQ = null;
|
|
65
|
+
}
|
|
66
|
+
else if (C === 'Q' || C === 'T') {
|
|
67
|
+
const q = C === 'Q' ? R([num(), num()]) : lastQ ? [2 * cur[0] - lastQ[0], 2 * cur[1] - lastQ[1]] : cur;
|
|
68
|
+
const p = R([num(), num()]);
|
|
69
|
+
out.push({ kind: 'C', c1: [cur[0] + (2 / 3) * (q[0] - cur[0]), cur[1] + (2 / 3) * (q[1] - cur[1])], c2: [p[0] + (2 / 3) * (q[0] - p[0]), p[1] + (2 / 3) * (q[1] - p[1])], p });
|
|
70
|
+
cur = p;
|
|
71
|
+
lastQ = q;
|
|
72
|
+
lastC = null;
|
|
73
|
+
}
|
|
74
|
+
else if (C === 'A') {
|
|
75
|
+
const rx = num(), ry = num(), rot = num(), large = num(), sweep = num(), p = R([num(), num()]);
|
|
76
|
+
for (const s of arcToCubics(cur, p, rx, ry, rot, !!large, !!sweep))
|
|
77
|
+
out.push(s);
|
|
78
|
+
cur = p;
|
|
79
|
+
lastC = lastQ = null;
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
i++;
|
|
83
|
+
break;
|
|
84
|
+
}
|
|
85
|
+
} while (isNum());
|
|
86
|
+
}
|
|
87
|
+
return out;
|
|
88
|
+
};
|
|
89
|
+
// SVG elliptical arc → cubic beziers (SVG spec F.6).
|
|
90
|
+
const arcToCubics = (p0, p1, rx, ry, deg, large, sweep) => {
|
|
91
|
+
if (!rx || !ry)
|
|
92
|
+
return [{ kind: 'L', p: p1 }];
|
|
93
|
+
rx = Math.abs(rx);
|
|
94
|
+
ry = Math.abs(ry);
|
|
95
|
+
const phi = (deg * Math.PI) / 180, cos = Math.cos(phi), sin = Math.sin(phi);
|
|
96
|
+
const dx = (p0[0] - p1[0]) / 2, dy = (p0[1] - p1[1]) / 2;
|
|
97
|
+
const x1 = cos * dx + sin * dy, y1 = -sin * dx + cos * dy;
|
|
98
|
+
const lam = (x1 * x1) / (rx * rx) + (y1 * y1) / (ry * ry);
|
|
99
|
+
if (lam > 1) {
|
|
100
|
+
rx *= Math.sqrt(lam);
|
|
101
|
+
ry *= Math.sqrt(lam);
|
|
102
|
+
}
|
|
103
|
+
const sign = large === sweep ? -1 : 1;
|
|
104
|
+
const num = rx * rx * ry * ry - rx * rx * y1 * y1 - ry * ry * x1 * x1;
|
|
105
|
+
const co = sign * Math.sqrt(Math.max(0, num / (rx * rx * y1 * y1 + ry * ry * x1 * x1)));
|
|
106
|
+
const cx1 = (co * rx * y1) / ry, cy1 = (-co * ry * x1) / rx;
|
|
107
|
+
const cx = cos * cx1 - sin * cy1 + (p0[0] + p1[0]) / 2, cy = sin * cx1 + cos * cy1 + (p0[1] + p1[1]) / 2;
|
|
108
|
+
const ang = (ux, uy, vx, vy) => { const a = Math.atan2(ux * vy - uy * vx, ux * vx + uy * vy); return a; };
|
|
109
|
+
let t1 = ang(1, 0, (x1 - cx1) / rx, (y1 - cy1) / ry);
|
|
110
|
+
let dt = ang((x1 - cx1) / rx, (y1 - cy1) / ry, (-x1 - cx1) / rx, (-y1 - cy1) / ry);
|
|
111
|
+
if (!sweep && dt > 0)
|
|
112
|
+
dt -= Math.PI * 2;
|
|
113
|
+
if (sweep && dt < 0)
|
|
114
|
+
dt += Math.PI * 2;
|
|
115
|
+
const n = Math.ceil(Math.abs(dt) / (Math.PI / 2));
|
|
116
|
+
const segs = [];
|
|
117
|
+
const step = dt / n, k = (4 / 3) * Math.tan(step / 4);
|
|
118
|
+
const pt = (a) => [cx + rx * Math.cos(a) * cos - ry * Math.sin(a) * sin, cy + rx * Math.cos(a) * sin + ry * Math.sin(a) * cos];
|
|
119
|
+
const der = (a) => [-rx * Math.sin(a) * cos - ry * Math.cos(a) * sin, -rx * Math.sin(a) * sin + ry * Math.cos(a) * cos];
|
|
120
|
+
for (let j = 0; j < n; j++) {
|
|
121
|
+
const a0 = t1, a1 = t1 + step;
|
|
122
|
+
const s = pt(a0), e = pt(a1), d0 = der(a0), d1 = der(a1);
|
|
123
|
+
segs.push({ kind: 'C', c1: [s[0] + k * d0[0], s[1] + k * d0[1]], c2: [e[0] - k * d1[0], e[1] - k * d1[1]], p: j === n - 1 ? p1 : e });
|
|
124
|
+
t1 = a1;
|
|
125
|
+
}
|
|
126
|
+
return segs;
|
|
127
|
+
};
|
|
128
|
+
export const pathToString = (path) => path.map((s) => {
|
|
129
|
+
const f = (v) => `${+v[0].toFixed(2)} ${+v[1].toFixed(2)}`;
|
|
130
|
+
if (s.kind === 'Z')
|
|
131
|
+
return 'Z';
|
|
132
|
+
if (s.kind === 'C')
|
|
133
|
+
return `C${f(s.c1)} ${f(s.c2)} ${f(s.p)}`;
|
|
134
|
+
return `${s.kind}${f(s.p)}`;
|
|
135
|
+
}).join(' ');
|
|
136
|
+
export const transformPath = (path, m) => {
|
|
137
|
+
const T = ([x, y]) => [m[0] * x + m[2] * y + m[4], m[1] * x + m[3] * y + m[5]];
|
|
138
|
+
return path.map((s) => (s.kind === 'Z' ? s : s.kind === 'C' ? { kind: 'C', c1: T(s.c1), c2: T(s.c2), p: T(s.p) } : { kind: s.kind, p: T(s.p) }));
|
|
139
|
+
};
|
|
140
|
+
export const tracePath = (ctx, path) => {
|
|
141
|
+
for (const s of path) {
|
|
142
|
+
if (s.kind === 'M')
|
|
143
|
+
ctx.moveTo(...s.p);
|
|
144
|
+
else if (s.kind === 'L')
|
|
145
|
+
ctx.lineTo(...s.p);
|
|
146
|
+
else if (s.kind === 'C')
|
|
147
|
+
ctx.bezierCurveTo(...s.c1, ...s.c2, ...s.p);
|
|
148
|
+
else
|
|
149
|
+
ctx.closePath();
|
|
150
|
+
}
|
|
151
|
+
};
|
|
152
|
+
const bez = (a, b, c, d, t) => {
|
|
153
|
+
const u = 1 - t;
|
|
154
|
+
return [u * u * u * a[0] + 3 * u * u * t * b[0] + 3 * u * t * t * c[0] + t * t * t * d[0], u * u * u * a[1] + 3 * u * u * t * b[1] + 3 * u * t * t * c[1] + t * t * t * d[1]];
|
|
155
|
+
};
|
|
156
|
+
// Subpaths flattened into polylines (curves sampled finely enough for trims and morphs).
|
|
157
|
+
export const flatten = (path, tolerance = 0.75) => {
|
|
158
|
+
const subs = [];
|
|
159
|
+
let cur = null;
|
|
160
|
+
let last = [0, 0], start = [0, 0];
|
|
161
|
+
for (const s of path) {
|
|
162
|
+
if (s.kind === 'M') {
|
|
163
|
+
cur = { pts: [s.p], closed: false };
|
|
164
|
+
subs.push(cur);
|
|
165
|
+
last = start = s.p;
|
|
166
|
+
continue;
|
|
167
|
+
}
|
|
168
|
+
if (!cur) {
|
|
169
|
+
cur = { pts: [last], closed: false };
|
|
170
|
+
subs.push(cur);
|
|
171
|
+
}
|
|
172
|
+
if (s.kind === 'L') {
|
|
173
|
+
cur.pts.push(s.p);
|
|
174
|
+
last = s.p;
|
|
175
|
+
}
|
|
176
|
+
else if (s.kind === 'C') {
|
|
177
|
+
const len = Math.hypot(s.c1[0] - last[0], s.c1[1] - last[1]) + Math.hypot(s.c2[0] - s.c1[0], s.c2[1] - s.c1[1]) + Math.hypot(s.p[0] - s.c2[0], s.p[1] - s.c2[1]);
|
|
178
|
+
const n = Math.max(4, Math.min(200, Math.ceil(Math.sqrt(len / tolerance) * 2)));
|
|
179
|
+
for (let k = 1; k <= n; k++)
|
|
180
|
+
cur.pts.push(bez(last, s.c1, s.c2, s.p, k / n));
|
|
181
|
+
last = s.p;
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
cur.closed = true;
|
|
185
|
+
last = start;
|
|
186
|
+
cur = null;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
return subs.filter((s) => s.pts.length > 1);
|
|
190
|
+
};
|
|
191
|
+
const polyLen = (pts, closed) => {
|
|
192
|
+
let l = 0;
|
|
193
|
+
const n = closed ? pts.length : pts.length - 1;
|
|
194
|
+
for (let i = 0; i < n; i++) {
|
|
195
|
+
const a = pts[i], b = pts[(i + 1) % pts.length];
|
|
196
|
+
l += Math.hypot(b[0] - a[0], b[1] - a[1]);
|
|
197
|
+
}
|
|
198
|
+
return l;
|
|
199
|
+
};
|
|
200
|
+
// Evenly spaced points along a polyline (used for morphing paths with different structures).
|
|
201
|
+
export const resample = (pts, closed, n) => {
|
|
202
|
+
const all = closed ? [...pts, pts[0]] : pts;
|
|
203
|
+
const lens = all.slice(1).map((p, i) => Math.hypot(p[0] - all[i][0], p[1] - all[i][1]));
|
|
204
|
+
const total = lens.reduce((a, b) => a + b, 0) || 1;
|
|
205
|
+
const out = [];
|
|
206
|
+
let seg = 0, acc = 0;
|
|
207
|
+
for (let k = 0; k < n; k++) {
|
|
208
|
+
const d = (closed ? k / n : k / (n - 1)) * total;
|
|
209
|
+
while (seg < lens.length - 1 && acc + lens[seg] < d) {
|
|
210
|
+
acc += lens[seg];
|
|
211
|
+
seg++;
|
|
212
|
+
}
|
|
213
|
+
const f = lens[seg] ? (d - acc) / lens[seg] : 0;
|
|
214
|
+
out.push([all[seg][0] + (all[seg + 1][0] - all[seg][0]) * f, all[seg][1] + (all[seg + 1][1] - all[seg][1]) * f]);
|
|
215
|
+
}
|
|
216
|
+
return out;
|
|
217
|
+
};
|
|
218
|
+
// Trim paths (AE "Trim Paths"): the part of the outline between start% and end%, across subpaths.
|
|
219
|
+
export const trimPolylines = (subs, start, end, offset = 0) => {
|
|
220
|
+
const total = subs.reduce((a, s) => a + polyLen(s.pts, s.closed), 0);
|
|
221
|
+
if (!total)
|
|
222
|
+
return [];
|
|
223
|
+
let a = Math.min(start, end) + offset, b = Math.max(start, end) + offset;
|
|
224
|
+
const ranges = [];
|
|
225
|
+
const shift = Math.floor(a);
|
|
226
|
+
a -= shift;
|
|
227
|
+
b -= shift;
|
|
228
|
+
if (b <= 1)
|
|
229
|
+
ranges.push([a, b]);
|
|
230
|
+
else {
|
|
231
|
+
ranges.push([a, 1]);
|
|
232
|
+
ranges.push([0, Math.min(1, b - 1)]);
|
|
233
|
+
}
|
|
234
|
+
const out = [];
|
|
235
|
+
for (const [ra, rb] of ranges) {
|
|
236
|
+
const from = ra * total, to = rb * total;
|
|
237
|
+
let acc = 0;
|
|
238
|
+
for (const s of subs) {
|
|
239
|
+
const all = s.closed ? [...s.pts, s.pts[0]] : s.pts;
|
|
240
|
+
let line = null;
|
|
241
|
+
for (let i = 0; i < all.length - 1; i++) {
|
|
242
|
+
const p = all[i], q = all[i + 1];
|
|
243
|
+
const l = Math.hypot(q[0] - p[0], q[1] - p[1]);
|
|
244
|
+
const s0 = acc, s1 = acc + l;
|
|
245
|
+
acc = s1;
|
|
246
|
+
if (s1 < from || s0 > to || !l) {
|
|
247
|
+
if (line && s0 > to)
|
|
248
|
+
break;
|
|
249
|
+
continue;
|
|
250
|
+
}
|
|
251
|
+
const at = (d) => { const f = (d - s0) / l; return [p[0] + (q[0] - p[0]) * f, p[1] + (q[1] - p[1]) * f]; };
|
|
252
|
+
if (!line) {
|
|
253
|
+
line = [at(Math.max(from, s0))];
|
|
254
|
+
out.push(line);
|
|
255
|
+
}
|
|
256
|
+
line.push(at(Math.min(to, s1)));
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
return out;
|
|
261
|
+
};
|
|
262
|
+
const area = (pts) => pts.reduce((a, p, i) => { const q = pts[(i + 1) % pts.length]; return a + p[0] * q[1] - q[0] * p[1]; }, 0) / 2;
|
|
263
|
+
// Shape morphing: both paths resampled to the same point count, rotated to the best start point, blended.
|
|
264
|
+
const MORPH_POINTS = 160;
|
|
265
|
+
export const morph = (a, b, p) => {
|
|
266
|
+
const sa = flatten(a), sb = flatten(b);
|
|
267
|
+
const n = Math.max(sa.length, sb.length);
|
|
268
|
+
const out = [];
|
|
269
|
+
for (let k = 0; k < n; k++) {
|
|
270
|
+
const A = sa[k] ?? sa[sa.length - 1], B = sb[k] ?? sb[sb.length - 1];
|
|
271
|
+
if (!A || !B)
|
|
272
|
+
continue;
|
|
273
|
+
const closed = A.closed || B.closed;
|
|
274
|
+
const pa = resample(A.pts, closed, MORPH_POINTS);
|
|
275
|
+
let pb = resample(B.pts, closed, MORPH_POINTS);
|
|
276
|
+
if (closed) {
|
|
277
|
+
// Same winding direction, then the rotation that pairs points with the least travel.
|
|
278
|
+
if (Math.sign(area(pa)) !== Math.sign(area(pb)))
|
|
279
|
+
pb = pb.reverse();
|
|
280
|
+
let best = 0, bestD = Infinity;
|
|
281
|
+
for (let r = 0; r < MORPH_POINTS; r++) {
|
|
282
|
+
let d = 0;
|
|
283
|
+
for (let i = 0; i < MORPH_POINTS; i += 4) {
|
|
284
|
+
const q = pb[(i + r) % MORPH_POINTS];
|
|
285
|
+
d += (pa[i][0] - q[0]) ** 2 + (pa[i][1] - q[1]) ** 2;
|
|
286
|
+
}
|
|
287
|
+
if (d < bestD) {
|
|
288
|
+
bestD = d;
|
|
289
|
+
best = r;
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
const rotated = pb;
|
|
293
|
+
pb = rotated.map((_, i) => rotated[(i + best) % MORPH_POINTS]);
|
|
294
|
+
}
|
|
295
|
+
pa.forEach((q, i) => out.push({ kind: i ? 'L' : 'M', p: [q[0] + (pb[i][0] - q[0]) * p, q[1] + (pb[i][1] - q[1]) * p] }));
|
|
296
|
+
if (closed)
|
|
297
|
+
out.push({ kind: 'Z' });
|
|
298
|
+
}
|
|
299
|
+
return out;
|
|
300
|
+
};
|
|
301
|
+
export const pathBounds = (path) => {
|
|
302
|
+
const pts = flatten(path).flatMap((s) => s.pts);
|
|
303
|
+
if (!pts.length)
|
|
304
|
+
return null;
|
|
305
|
+
const xs = pts.map((p) => p[0]), ys = pts.map((p) => p[1]);
|
|
306
|
+
const x = Math.min(...xs), y = Math.min(...ys);
|
|
307
|
+
return [x, y, Math.max(...xs) - x, Math.max(...ys) - y];
|
|
308
|
+
};
|
|
309
|
+
// Point and direction at a fraction of the path's length (motion along a path, map markers).
|
|
310
|
+
export const pointAt = (path, f) => {
|
|
311
|
+
const pts = flatten(path).flatMap((s) => s.pts);
|
|
312
|
+
if (pts.length < 2)
|
|
313
|
+
return { p: pts[0] ?? [0, 0], angle: 0 };
|
|
314
|
+
const lens = pts.slice(1).map((p, i) => Math.hypot(p[0] - pts[i][0], p[1] - pts[i][1]));
|
|
315
|
+
const total = lens.reduce((a, b) => a + b, 0);
|
|
316
|
+
let d = Math.max(0, Math.min(1, f)) * total, i = 0;
|
|
317
|
+
while (i < lens.length - 1 && d > lens[i]) {
|
|
318
|
+
d -= lens[i];
|
|
319
|
+
i++;
|
|
320
|
+
}
|
|
321
|
+
const a = pts[i], b = pts[i + 1], k = lens[i] ? d / lens[i] : 0;
|
|
322
|
+
return { p: [a[0] + (b[0] - a[0]) * k, a[1] + (b[1] - a[1]) * k], angle: (Math.atan2(b[1] - a[1], b[0] - a[0]) * 180) / Math.PI };
|
|
323
|
+
};
|
|
324
|
+
//# sourceMappingURL=path.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path.js","sourceRoot":"","sources":["../../src/core/path.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { NewLayer, Vec2 } from './model.js';
|
|
2
|
+
interface El {
|
|
3
|
+
tag: string;
|
|
4
|
+
attrs: Record<string, string>;
|
|
5
|
+
children: El[];
|
|
6
|
+
text: string;
|
|
7
|
+
}
|
|
8
|
+
export declare const parseXml: (src: string) => El;
|
|
9
|
+
export interface SvgImportOptions {
|
|
10
|
+
name?: string;
|
|
11
|
+
width?: number;
|
|
12
|
+
position?: Vec2;
|
|
13
|
+
color?: string;
|
|
14
|
+
inPoint?: number;
|
|
15
|
+
}
|
|
16
|
+
export interface SvgImportResult {
|
|
17
|
+
layers: NewLayer[];
|
|
18
|
+
size: Vec2;
|
|
19
|
+
parts: number;
|
|
20
|
+
}
|
|
21
|
+
export declare const importSvg: (svg: string, opts?: SvgImportOptions) => SvgImportResult;
|
|
22
|
+
export {};
|
package/dist/core/svg.js
ADDED
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
import { parseColor, rgbaString } from './color.js';
|
|
2
|
+
import { flatten, parsePath, pathBounds, pathToString, transformPath } from './path.js';
|
|
3
|
+
const mul = (m, n) => [m[0] * n[0] + m[2] * n[1], m[1] * n[0] + m[3] * n[1], m[0] * n[2] + m[2] * n[3], m[1] * n[2] + m[3] * n[3], m[0] * n[4] + m[2] * n[5] + m[4], m[1] * n[4] + m[3] * n[5] + m[5]];
|
|
4
|
+
const I = [1, 0, 0, 1, 0, 0];
|
|
5
|
+
// A small, forgiving XML parser (SVGs from design tools and icon sets).
|
|
6
|
+
export const parseXml = (src) => {
|
|
7
|
+
const root = { tag: '#root', attrs: {}, children: [], text: '' };
|
|
8
|
+
const stack = [root];
|
|
9
|
+
const re = /<!--[\s\S]*?-->|<!\[CDATA\[([\s\S]*?)\]\]>|<\?[\s\S]*?\?>|<!DOCTYPE[\s\S]*?>|<\/([\w:-]+)\s*>|<([\w:-]+)((?:\s+[\w:.-]+\s*=\s*(?:"[^"]*"|'[^']*'))*)\s*(\/?)>|([^<]+)/g;
|
|
10
|
+
let m;
|
|
11
|
+
while ((m = re.exec(src))) {
|
|
12
|
+
const top = stack[stack.length - 1];
|
|
13
|
+
if (m[1] !== undefined)
|
|
14
|
+
top.text += m[1];
|
|
15
|
+
else if (m[2]) {
|
|
16
|
+
if (stack.length > 1)
|
|
17
|
+
stack.pop();
|
|
18
|
+
}
|
|
19
|
+
else if (m[3]) {
|
|
20
|
+
const attrs = {};
|
|
21
|
+
for (const a of m[4].matchAll(/([\w:.-]+)\s*=\s*(?:"([^"]*)"|'([^']*)')/g))
|
|
22
|
+
attrs[a[1]] = (a[2] ?? a[3]).replace(/"/g, '"').replace(/&/g, '&');
|
|
23
|
+
const el = { tag: m[3].replace(/^svg:/, ''), attrs, children: [], text: '' };
|
|
24
|
+
top.children.push(el);
|
|
25
|
+
if (!m[5])
|
|
26
|
+
stack.push(el);
|
|
27
|
+
}
|
|
28
|
+
else if (m[6])
|
|
29
|
+
top.text += m[6];
|
|
30
|
+
}
|
|
31
|
+
return root;
|
|
32
|
+
};
|
|
33
|
+
const parseTransform = (s) => {
|
|
34
|
+
if (!s)
|
|
35
|
+
return I;
|
|
36
|
+
let m = I;
|
|
37
|
+
for (const [, fn, args] of s.matchAll(/(\w+)\s*\(([^)]*)\)/g)) {
|
|
38
|
+
const a = args.split(/[\s,]+/).filter(Boolean).map(Number);
|
|
39
|
+
let n = I;
|
|
40
|
+
if (fn === 'matrix')
|
|
41
|
+
n = a;
|
|
42
|
+
else if (fn === 'translate')
|
|
43
|
+
n = [1, 0, 0, 1, a[0] ?? 0, a[1] ?? 0];
|
|
44
|
+
else if (fn === 'scale')
|
|
45
|
+
n = [a[0], 0, 0, a[1] ?? a[0], 0, 0];
|
|
46
|
+
else if (fn === 'rotate') {
|
|
47
|
+
const r = ((a[0] ?? 0) * Math.PI) / 180, c = Math.cos(r), s2 = Math.sin(r);
|
|
48
|
+
n = [c, s2, -s2, c, 0, 0];
|
|
49
|
+
if (a.length >= 3)
|
|
50
|
+
n = mul(mul([1, 0, 0, 1, a[1], a[2]], n), [1, 0, 0, 1, -a[1], -a[2]]);
|
|
51
|
+
}
|
|
52
|
+
else if (fn === 'skewX')
|
|
53
|
+
n = [1, 0, Math.tan(((a[0] ?? 0) * Math.PI) / 180), 1, 0, 0];
|
|
54
|
+
else if (fn === 'skewY')
|
|
55
|
+
n = [1, Math.tan(((a[0] ?? 0) * Math.PI) / 180), 0, 1, 0, 0];
|
|
56
|
+
m = mul(m, n);
|
|
57
|
+
}
|
|
58
|
+
return m;
|
|
59
|
+
};
|
|
60
|
+
const num = (v, d = 0) => (v === undefined || v === '' ? d : v.trim().endsWith('%') ? parseFloat(v) / 100 : parseFloat(v));
|
|
61
|
+
const elementPath = (el) => {
|
|
62
|
+
const a = el.attrs;
|
|
63
|
+
switch (el.tag) {
|
|
64
|
+
case 'path': return a.d ? parsePath(a.d) : null;
|
|
65
|
+
case 'rect': {
|
|
66
|
+
const x = num(a.x), y = num(a.y), w = num(a.width), h = num(a.height);
|
|
67
|
+
let rx = num(a.rx, NaN), ry = num(a.ry, NaN);
|
|
68
|
+
if (isNaN(rx))
|
|
69
|
+
rx = isNaN(ry) ? 0 : ry;
|
|
70
|
+
if (isNaN(ry))
|
|
71
|
+
ry = rx;
|
|
72
|
+
rx = Math.min(rx, w / 2);
|
|
73
|
+
ry = Math.min(ry, h / 2);
|
|
74
|
+
if (!rx)
|
|
75
|
+
return parsePath(`M${x} ${y}H${x + w}V${y + h}H${x}Z`);
|
|
76
|
+
return parsePath(`M${x + rx} ${y}H${x + w - rx}A${rx} ${ry} 0 0 1 ${x + w} ${y + ry}V${y + h - ry}A${rx} ${ry} 0 0 1 ${x + w - rx} ${y + h}H${x + rx}A${rx} ${ry} 0 0 1 ${x} ${y + h - ry}V${y + ry}A${rx} ${ry} 0 0 1 ${x + rx} ${y}Z`);
|
|
77
|
+
}
|
|
78
|
+
case 'circle':
|
|
79
|
+
case 'ellipse': {
|
|
80
|
+
const cx = num(a.cx), cy = num(a.cy), rx = el.tag === 'circle' ? num(a.r) : num(a.rx), ry = el.tag === 'circle' ? num(a.r) : num(a.ry);
|
|
81
|
+
return parsePath(`M${cx} ${cy - ry}A${rx} ${ry} 0 1 1 ${cx} ${cy + ry}A${rx} ${ry} 0 1 1 ${cx} ${cy - ry}Z`);
|
|
82
|
+
}
|
|
83
|
+
case 'line': return parsePath(`M${num(a.x1)} ${num(a.y1)}L${num(a.x2)} ${num(a.y2)}`);
|
|
84
|
+
case 'polyline':
|
|
85
|
+
case 'polygon': {
|
|
86
|
+
const n = (a.points ?? '').trim().split(/[\s,]+/).map(Number);
|
|
87
|
+
if (n.length < 4)
|
|
88
|
+
return null;
|
|
89
|
+
return parsePath(`M${n[0]} ${n[1]}${Array.from({ length: n.length / 2 - 1 }, (_, i) => `L${n[2 * i + 2]} ${n[2 * i + 3]}`).join('')}${el.tag === 'polygon' ? 'Z' : ''}`);
|
|
90
|
+
}
|
|
91
|
+
default: return null;
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
const PAINT_PROPS = ['fill', 'stroke', 'stroke-width', 'opacity', 'fill-opacity', 'stroke-opacity', 'fill-rule', 'stroke-linecap', 'stroke-linejoin', 'display', 'visibility'];
|
|
95
|
+
// Converts SVG text into layers: one null "group" layer plus one shape layer per drawable element.
|
|
96
|
+
export const importSvg = (svg, opts = {}) => {
|
|
97
|
+
const root = parseXml(svg).children.find((c) => c.tag === 'svg');
|
|
98
|
+
if (!root)
|
|
99
|
+
throw new Error('Not an SVG file');
|
|
100
|
+
const vb = (root.attrs.viewBox ?? '').split(/[\s,]+/).map(Number);
|
|
101
|
+
const vbW = vb.length === 4 ? vb[2] : num(root.attrs.width, 100), vbH = vb.length === 4 ? vb[3] : num(root.attrs.height, 100);
|
|
102
|
+
const vbX = vb.length === 4 ? vb[0] : 0, vbY = vb.length === 4 ? vb[1] : 0;
|
|
103
|
+
const targetW = opts.width ?? 600;
|
|
104
|
+
const k = targetW / vbW;
|
|
105
|
+
const size = [targetW, vbH * k];
|
|
106
|
+
// viewBox → layer space centred on the group's origin.
|
|
107
|
+
const base = [k, 0, 0, k, -vbX * k - size[0] / 2, -vbY * k - size[1] / 2];
|
|
108
|
+
// Class rules from <style> blocks (".a{fill:#f00}" / ".a,.b{...}").
|
|
109
|
+
const classes = {};
|
|
110
|
+
const gradients = {};
|
|
111
|
+
const walkDefs = (el) => {
|
|
112
|
+
if (el.tag === 'style')
|
|
113
|
+
for (const [, sel, body] of el.text.matchAll(/([^{}]+)\{([^}]*)\}/g)) {
|
|
114
|
+
const decl = Object.fromEntries(body.split(';').map((d) => d.split(':').map((x) => x.trim())).filter((d) => d.length === 2 && d[0]));
|
|
115
|
+
for (const s of sel.split(',')) {
|
|
116
|
+
const c = s.trim().match(/^\.([\w-]+)$/);
|
|
117
|
+
if (c)
|
|
118
|
+
classes[c[1]] = { ...classes[c[1]], ...decl };
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
if ((el.tag === 'linearGradient' || el.tag === 'radialGradient') && el.attrs.id)
|
|
122
|
+
gradients[el.attrs.id] = el;
|
|
123
|
+
el.children.forEach(walkDefs);
|
|
124
|
+
};
|
|
125
|
+
walkDefs(root);
|
|
126
|
+
const props = (el) => {
|
|
127
|
+
const out = {};
|
|
128
|
+
for (const c of (el.attrs.class ?? '').split(/\s+/))
|
|
129
|
+
Object.assign(out, classes[c] ?? {});
|
|
130
|
+
for (const p of PAINT_PROPS)
|
|
131
|
+
if (el.attrs[p] !== undefined)
|
|
132
|
+
out[p] = el.attrs[p];
|
|
133
|
+
for (const d of (el.attrs.style ?? '').split(';')) {
|
|
134
|
+
const [kk, v] = d.split(':').map((x) => x?.trim());
|
|
135
|
+
if (kk && v)
|
|
136
|
+
out[kk] = v;
|
|
137
|
+
}
|
|
138
|
+
return out;
|
|
139
|
+
};
|
|
140
|
+
const color = (v, opacity, m, bbox) => {
|
|
141
|
+
if (!v || v === 'none' || v === 'transparent')
|
|
142
|
+
return undefined;
|
|
143
|
+
if (v === 'currentColor')
|
|
144
|
+
v = opts.color ?? '#000000';
|
|
145
|
+
const ref = v.match(/url\(#([^)]+)\)/);
|
|
146
|
+
if (ref) {
|
|
147
|
+
const g = gradients[ref[1]];
|
|
148
|
+
const stops = (g?.children ?? []).filter((c) => c.tag === 'stop').map((st) => {
|
|
149
|
+
const sp = { ...Object.fromEntries((st.attrs.style ?? '').split(';').map((d) => d.split(':').map((x) => x.trim())).filter((d) => d.length === 2)), ...st.attrs };
|
|
150
|
+
const off = sp.offset?.endsWith('%') ? parseFloat(sp.offset) / 100 : num(sp.offset);
|
|
151
|
+
const c = parseColor(sp['stop-color'] ?? '#000') ?? [0, 0, 0, 1];
|
|
152
|
+
return [off, rgbaString([c[0], c[1], c[2], c[3] * num(sp['stop-opacity'], 1) * opacity])];
|
|
153
|
+
});
|
|
154
|
+
if (!g || !stops.length)
|
|
155
|
+
return undefined;
|
|
156
|
+
// Default gradientUnits is objectBoundingBox: 0..1 across the shape's own bounds.
|
|
157
|
+
const box = g.attrs.gradientUnits === 'userSpaceOnUse' ? null : bbox;
|
|
158
|
+
const U = (x, y) => (box ? [box[0] + x * box[2], box[1] + y * box[3]] : [x, y]);
|
|
159
|
+
const gt = parseTransform(g.attrs.gradientTransform);
|
|
160
|
+
const T = (x, y) => { const [ux, uy] = U(x, y); const gx = gt[0] * ux + gt[2] * uy + gt[4], gy = gt[1] * ux + gt[3] * uy + gt[5]; return [m[0] * gx + m[2] * gy + m[4], m[1] * gx + m[3] * gy + m[5]]; };
|
|
161
|
+
if (g.tag === 'linearGradient')
|
|
162
|
+
return { linear: { from: T(num(g.attrs.x1), num(g.attrs.y1)), to: T(num(g.attrs.x2, 1), num(g.attrs.y2)), stops } };
|
|
163
|
+
const r = num(g.attrs.r, 0.5) * (box ? Math.max(box[2], box[3]) : 1) * Math.hypot(m[0], m[1]) * Math.hypot(gt[0], gt[1]);
|
|
164
|
+
return { radial: { center: T(num(g.attrs.cx, 0.5), num(g.attrs.cy, 0.5)), radius: r, stops } };
|
|
165
|
+
}
|
|
166
|
+
const c = parseColor(v);
|
|
167
|
+
if (!c)
|
|
168
|
+
return v;
|
|
169
|
+
return opacity < 1 || c[3] < 1 ? rgbaString([c[0], c[1], c[2], c[3] * opacity]) : v;
|
|
170
|
+
};
|
|
171
|
+
const groupName = opts.name ?? 'svg';
|
|
172
|
+
const layers = [];
|
|
173
|
+
const shapes = [];
|
|
174
|
+
let index = 0;
|
|
175
|
+
const visit = (el, m, inherited) => {
|
|
176
|
+
if (['defs', 'style', 'title', 'desc', 'metadata', 'clipPath', 'mask', 'symbol', 'linearGradient', 'radialGradient', 'pattern', 'filter'].includes(el.tag))
|
|
177
|
+
return;
|
|
178
|
+
const p = props(el);
|
|
179
|
+
const st = {
|
|
180
|
+
fill: p.fill ?? inherited.fill, stroke: p.stroke ?? inherited.stroke,
|
|
181
|
+
strokeWidth: p['stroke-width'] !== undefined ? parseFloat(p['stroke-width']) : inherited.strokeWidth,
|
|
182
|
+
opacity: inherited.opacity * num(p.opacity, 1), fillOpacity: p['fill-opacity'] !== undefined ? num(p['fill-opacity'], 1) : inherited.fillOpacity,
|
|
183
|
+
strokeOpacity: p['stroke-opacity'] !== undefined ? num(p['stroke-opacity'], 1) : inherited.strokeOpacity,
|
|
184
|
+
fillRule: p['fill-rule'] ?? inherited.fillRule, lineCap: p['stroke-linecap'] ?? inherited.lineCap, lineJoin: p['stroke-linejoin'] ?? inherited.lineJoin,
|
|
185
|
+
display: p.display === 'none' || p.visibility === 'hidden' ? 'none' : inherited.display,
|
|
186
|
+
};
|
|
187
|
+
if (st.display === 'none')
|
|
188
|
+
return;
|
|
189
|
+
const mm = mul(m, parseTransform(el.attrs.transform));
|
|
190
|
+
const path = elementPath(el);
|
|
191
|
+
if (path && flatten(path).length) {
|
|
192
|
+
const baked = transformPath(path, mm);
|
|
193
|
+
const scale = Math.sqrt(Math.abs(mm[0] * mm[3] - mm[1] * mm[2]));
|
|
194
|
+
const bbox = pathBounds(path);
|
|
195
|
+
const fill = el.tag === 'line' || el.tag === 'polyline' ? undefined : color(st.fill, st.opacity * st.fillOpacity, mm, bbox);
|
|
196
|
+
const stroke = color(st.stroke, st.opacity * st.strokeOpacity, mm, bbox);
|
|
197
|
+
if (fill || stroke) {
|
|
198
|
+
shapes.push({
|
|
199
|
+
type: 'shape', name: el.attrs.id ?? `${groupName}-part-${++index}`, shape: 'path', path: pathToString(baked), parent: '__group__',
|
|
200
|
+
transform: { anchor: [0, 0], position: [0, 0] },
|
|
201
|
+
...(fill ? { fill } : {}), ...(typeof stroke === 'string' ? { stroke, strokeWidth: +(st.strokeWidth * scale).toFixed(2) } : {}),
|
|
202
|
+
...(st.fillRule === 'evenodd' ? { fillRule: 'evenodd' } : {}),
|
|
203
|
+
...(st.lineCap ? { lineCap: st.lineCap } : {}), ...(st.lineJoin ? { lineJoin: st.lineJoin } : {}),
|
|
204
|
+
...(opts.inPoint !== undefined ? { inPoint: opts.inPoint } : {}),
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
for (const c of el.children)
|
|
209
|
+
visit(c, mm, st);
|
|
210
|
+
};
|
|
211
|
+
visit(root, base, { fill: '#000000', stroke: 'none', strokeWidth: 1, opacity: 1, fillOpacity: 1, strokeOpacity: 1 });
|
|
212
|
+
layers.push({ type: 'null', name: groupName, transform: { position: opts.position ?? [540, 960] }, ...(opts.inPoint !== undefined ? { inPoint: opts.inPoint } : {}) });
|
|
213
|
+
// Topmost SVG element = top layer (index 0), as in the drawing order of the file.
|
|
214
|
+
layers.push(...shapes.reverse());
|
|
215
|
+
return { layers, size, parts: shapes.length };
|
|
216
|
+
};
|
|
217
|
+
//# sourceMappingURL=svg.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"svg.js","sourceRoot":"","sources":["../../src/core/svg.ts"],"names":[],"mappings":"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"}
|