@pixerate/editor 0.108.0 → 0.109.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/animation/index.cjs +5 -5
- package/dist/animation/index.cjs.map +1 -1
- package/dist/animation/index.js +9 -9
- package/dist/animation-editor/index.cjs +59 -59
- package/dist/animation-editor/index.cjs.map +1 -1
- package/dist/animation-editor/index.d.cts +2 -1
- package/dist/animation-editor/index.d.ts +2 -1
- package/dist/animation-editor/index.js +29 -29
- package/dist/canvas/index.cjs +27 -27
- package/dist/canvas/index.cjs.map +1 -1
- package/dist/canvas/index.js +11 -11
- package/dist/{chunk-2FGRTYJN.cjs → chunk-477UVMNR.cjs} +3 -3
- package/dist/{chunk-2FGRTYJN.cjs.map → chunk-477UVMNR.cjs.map} +1 -1
- package/dist/{chunk-T3QZ6S47.cjs → chunk-AZTZRLDI.cjs} +40 -2
- package/dist/chunk-AZTZRLDI.cjs.map +1 -0
- package/dist/{chunk-HUQ7EHVI.js → chunk-BLWCAQCW.js} +723 -1975
- package/dist/chunk-BLWCAQCW.js.map +1 -0
- package/dist/{chunk-G4BIYE6R.js → chunk-CFMWALBM.js} +39 -1
- package/dist/chunk-CFMWALBM.js.map +1 -0
- package/dist/{chunk-FRD3FUXI.cjs → chunk-D37BX2ZA.cjs} +2081 -460
- package/dist/chunk-D37BX2ZA.cjs.map +1 -0
- package/dist/chunk-JLYX4V57.cjs +2001 -0
- package/dist/chunk-JLYX4V57.cjs.map +1 -0
- package/dist/chunk-KB2YBCVS.js +2001 -0
- package/dist/chunk-KB2YBCVS.js.map +1 -0
- package/dist/{chunk-SOROZ2BF.js → chunk-RE77QYUF.js} +1938 -317
- package/dist/chunk-RE77QYUF.js.map +1 -0
- package/dist/{chunk-UTEVPQTS.cjs → chunk-W3GXSUSQ.cjs} +746 -1998
- package/dist/chunk-W3GXSUSQ.cjs.map +1 -0
- package/dist/{chunk-JK6M6V7G.js → chunk-Z3YWVUWT.js} +4 -4
- package/dist/{export-a9bnF7Cl.d.ts → export-BLPLaE6Z.d.ts} +417 -16
- package/dist/{export-JGWQEPJn.d.cts → export-DSUc4fQD.d.cts} +417 -16
- package/dist/image-editor/index.cjs +1527 -1001
- package/dist/image-editor/index.cjs.map +1 -1
- package/dist/image-editor/index.d.cts +73 -9
- package/dist/image-editor/index.d.ts +73 -9
- package/dist/image-editor/index.js +814 -288
- package/dist/image-editor/index.js.map +1 -1
- package/dist/paint-editor/index.cjs +56 -53
- package/dist/paint-editor/index.cjs.map +1 -1
- package/dist/paint-editor/index.d.cts +5 -2
- package/dist/paint-editor/index.d.ts +5 -2
- package/dist/paint-editor/index.js +6 -3
- package/dist/paint-editor/index.js.map +1 -1
- package/dist/raster/index.cjs +4 -2
- package/dist/raster/index.cjs.map +1 -1
- package/dist/raster/index.d.cts +3 -129
- package/dist/raster/index.d.ts +3 -129
- package/dist/raster/index.js +3 -1
- package/dist/{compositor-D92URMlm.d.cts → render-C-fO_mes.d.cts} +135 -1
- package/dist/{compositor-Kt_M4ruo.d.ts → render-OLIMk_v0.d.ts} +135 -1
- package/dist/{svg-SseJTIrA.d.ts → svg-D_cfkhlB.d.cts} +3 -629
- package/dist/{svg-ClVIG4T7.d.cts → svg-wIaKLrU0.d.ts} +3 -629
- package/dist/types-DtL_qLFz.d.ts +630 -0
- package/dist/types-DyQq-WPY.d.cts +630 -0
- package/dist/vector/index.cjs +563 -563
- package/dist/vector/index.cjs.map +1 -1
- package/dist/vector/index.d.cts +4 -2
- package/dist/vector/index.d.ts +4 -2
- package/dist/vector/index.js +69 -69
- package/dist/video-editor/index.cjs +3 -3
- package/dist/video-editor/index.js +2 -2
- package/package.json +1 -1
- package/dist/chunk-DWGZUSES.cjs +0 -694
- package/dist/chunk-DWGZUSES.cjs.map +0 -1
- package/dist/chunk-FRD3FUXI.cjs.map +0 -1
- package/dist/chunk-G4BIYE6R.js.map +0 -1
- package/dist/chunk-HUQ7EHVI.js.map +0 -1
- package/dist/chunk-KKREERP2.js +0 -694
- package/dist/chunk-KKREERP2.js.map +0 -1
- package/dist/chunk-SOROZ2BF.js.map +0 -1
- package/dist/chunk-T3QZ6S47.cjs.map +0 -1
- package/dist/chunk-UTEVPQTS.cjs.map +0 -1
- /package/dist/{chunk-JK6M6V7G.js.map → chunk-Z3YWVUWT.js.map} +0 -0
package/dist/vector/index.cjs
CHANGED
|
@@ -42,6 +42,7 @@ var _chunkMUUXNRU4cjs = require('../chunk-MUUXNRU4.cjs');
|
|
|
42
42
|
|
|
43
43
|
|
|
44
44
|
|
|
45
|
+
var _chunkJLYX4V57cjs = require('../chunk-JLYX4V57.cjs');
|
|
45
46
|
|
|
46
47
|
|
|
47
48
|
|
|
@@ -310,7 +311,6 @@ var _chunkMUUXNRU4cjs = require('../chunk-MUUXNRU4.cjs');
|
|
|
310
311
|
|
|
311
312
|
|
|
312
313
|
|
|
313
|
-
var _chunkUTEVPQTScjs = require('../chunk-UTEVPQTS.cjs');
|
|
314
314
|
|
|
315
315
|
|
|
316
316
|
|
|
@@ -328,7 +328,6 @@ var _chunkUTEVPQTScjs = require('../chunk-UTEVPQTS.cjs');
|
|
|
328
328
|
|
|
329
329
|
|
|
330
330
|
|
|
331
|
-
var _chunkXGD3FSNCcjs = require('../chunk-XGD3FSNC.cjs');
|
|
332
331
|
|
|
333
332
|
|
|
334
333
|
|
|
@@ -348,6 +347,7 @@ var _chunkXGD3FSNCcjs = require('../chunk-XGD3FSNC.cjs');
|
|
|
348
347
|
|
|
349
348
|
|
|
350
349
|
|
|
350
|
+
var _chunkW3GXSUSQcjs = require('../chunk-W3GXSUSQ.cjs');
|
|
351
351
|
|
|
352
352
|
|
|
353
353
|
|
|
@@ -365,15 +365,15 @@ var _chunkXGD3FSNCcjs = require('../chunk-XGD3FSNC.cjs');
|
|
|
365
365
|
|
|
366
366
|
|
|
367
367
|
|
|
368
|
-
var
|
|
368
|
+
var _chunkXGD3FSNCcjs = require('../chunk-XGD3FSNC.cjs');
|
|
369
369
|
|
|
370
370
|
|
|
371
371
|
var _chunkQKLRAA4Tcjs = require('../chunk-QKLRAA4T.cjs');
|
|
372
|
+
require('../chunk-2FHLHZAL.cjs');
|
|
372
373
|
require('../chunk-MR3Z4OQI.cjs');
|
|
373
374
|
|
|
374
375
|
|
|
375
376
|
var _chunkA6PHCAGXcjs = require('../chunk-A6PHCAGX.cjs');
|
|
376
|
-
require('../chunk-2FHLHZAL.cjs');
|
|
377
377
|
|
|
378
378
|
// src/vector/gradientTool.ts
|
|
379
379
|
var VECTOR_GRADIENT_STOP_GAP = 12;
|
|
@@ -387,9 +387,9 @@ var fmt = (n) => Math.round(n * 100) / 100;
|
|
|
387
387
|
var apply = (m, p) => ({ x: m[0] * p.x + m[2] * p.y + m[4], y: m[1] * p.x + m[3] * p.y + m[5] });
|
|
388
388
|
function vectorGradientTargetPath(doc, selection, target, layer = null) {
|
|
389
389
|
for (const id of selection) {
|
|
390
|
-
const node =
|
|
390
|
+
const node = _chunkW3GXSUSQcjs.findVectorNode.call(void 0, doc.nodes, id);
|
|
391
391
|
if (!node) continue;
|
|
392
|
-
const path =
|
|
392
|
+
const path = _chunkW3GXSUSQcjs.collectPathNodes.call(void 0, node).find((p) => _chunkW3GXSUSQcjs.isVectorGradient.call(void 0, _chunkW3GXSUSQcjs.vectorTargetPaint.call(void 0, p, target, layer)));
|
|
393
393
|
if (path) return path;
|
|
394
394
|
}
|
|
395
395
|
return null;
|
|
@@ -397,24 +397,24 @@ function vectorGradientTargetPath(doc, selection, target, layer = null) {
|
|
|
397
397
|
function getVectorGradientAnnotator(doc, selection, viewport, target, layer = null) {
|
|
398
398
|
const path = vectorGradientTargetPath(doc, selection, target, layer);
|
|
399
399
|
if (!path) return null;
|
|
400
|
-
const gradient =
|
|
401
|
-
const world = _nullishCoalesce(
|
|
402
|
-
const screen =
|
|
403
|
-
const bounds =
|
|
404
|
-
const h =
|
|
400
|
+
const gradient = _chunkW3GXSUSQcjs.vectorTargetPaint.call(void 0, path, target, layer);
|
|
401
|
+
const world = _nullishCoalesce(_chunkW3GXSUSQcjs.vectorWorldMatrix.call(void 0, doc.nodes, path.id), () => ( _chunkW3GXSUSQcjs.IDENTITY_MATRIX));
|
|
402
|
+
const screen = _chunkW3GXSUSQcjs.multiplyMatrices.call(void 0, world, [viewport.zoom, 0, 0, viewport.zoom, viewport.x, viewport.y]);
|
|
403
|
+
const bounds = _chunkJLYX4V57cjs.vectorPathLocalBounds.call(void 0, path);
|
|
404
|
+
const h = _chunkW3GXSUSQcjs.vectorGradientHandles.call(void 0, gradient, bounds, screen);
|
|
405
405
|
const v = { x: h.end.x - h.start.x, y: h.end.y - h.start.y };
|
|
406
406
|
const len = Math.hypot(v.x, v.y);
|
|
407
407
|
const normal = len > 1e-9 ? { x: -v.y / len, y: v.x / len } : { x: 0, y: 1 };
|
|
408
408
|
const at = (t, gap) => ({ x: h.start.x + v.x * t + normal.x * gap, y: h.start.y + v.y * t + normal.y * gap });
|
|
409
|
-
const sorted =
|
|
409
|
+
const sorted = _chunkW3GXSUSQcjs.sortedVectorGradientStops.call(void 0, gradient);
|
|
410
410
|
const stops = sorted.map((s, index) => ({ ...s, index, ...at(s.offset, VECTOR_GRADIENT_STOP_GAP) }));
|
|
411
411
|
const midpoints = sorted.slice(0, -1).flatMap((s, index) => {
|
|
412
|
-
const pos =
|
|
412
|
+
const pos = _chunkW3GXSUSQcjs.vectorGradientMidpointPosition.call(void 0, sorted, index);
|
|
413
413
|
return pos === null || sorted[index + 1].offset - s.offset < 1e-6 ? [] : [{ index, midpoint: _nullishCoalesce(s.midpoint, () => ( 0.5)), ...at(pos, -VECTOR_GRADIENT_MIDPOINT_GAP) }];
|
|
414
414
|
});
|
|
415
415
|
let extent = null;
|
|
416
|
-
if (
|
|
417
|
-
const frame =
|
|
416
|
+
if (_chunkW3GXSUSQcjs.isCentredVectorGradient.call(void 0, gradient.type)) {
|
|
417
|
+
const frame = _chunkW3GXSUSQcjs.multiplyMatrices.call(void 0, _chunkW3GXSUSQcjs.vectorGradientMatrix.call(void 0, gradient, bounds), screen);
|
|
418
418
|
const pts = gradient.type === "diamond" ? [{ x: 1, y: 0 }, { x: 0, y: 1 }, { x: -1, y: 0 }, { x: 0, y: -1 }] : Array.from({ length: 48 }, (_, k) => ({ x: Math.cos(k * Math.PI / 24), y: Math.sin(k * Math.PI / 24) }));
|
|
419
419
|
extent = `M${pts.map((p) => apply(frame, p)).map((p) => `${fmt(p.x)} ${fmt(p.y)}`).join("L")}Z`;
|
|
420
420
|
}
|
|
@@ -431,7 +431,7 @@ function hitVectorGradientAnnotator(a, p) {
|
|
|
431
431
|
const near = (q, r) => !!q && Math.hypot(q.x - p.x, q.y - p.y) <= r;
|
|
432
432
|
for (let i = a.stops.length - 1; i >= 0; i--) if (near(a.stops[i], STOP_HIT)) return { kind: "stop", index: a.stops[i].index };
|
|
433
433
|
for (const m of a.midpoints) if (near(m, MIDPOINT_HIT)) return { kind: "midpoint", index: m.index };
|
|
434
|
-
const centred =
|
|
434
|
+
const centred = _chunkW3GXSUSQcjs.isCentredVectorGradient.call(void 0, a.gradient.type);
|
|
435
435
|
if (near(a.end, HANDLE_HIT)) return { kind: "handle", handle: centred ? "radius" : "end" };
|
|
436
436
|
if (a.focal && near(a.focal, HANDLE_HIT) && !near(a.start, 1)) return { kind: "handle", handle: "focal" };
|
|
437
437
|
if (near(a.start, HANDLE_HIT)) return { kind: "handle", handle: "start" };
|
|
@@ -467,8 +467,8 @@ function paintColors(p) {
|
|
|
467
467
|
return [];
|
|
468
468
|
}
|
|
469
469
|
function vectorBlendColorDistance(a, b) {
|
|
470
|
-
const pa =
|
|
471
|
-
const pb =
|
|
470
|
+
const pa = _chunkW3GXSUSQcjs.collectPathNodes.call(void 0, a)[0];
|
|
471
|
+
const pb = _chunkW3GXSUSQcjs.collectPathNodes.call(void 0, b)[0];
|
|
472
472
|
if (!pa || !pb) return 0;
|
|
473
473
|
let d = 0;
|
|
474
474
|
for (const key of ["fill", "stroke"]) {
|
|
@@ -486,7 +486,7 @@ function vectorBlendColorDistance(a, b) {
|
|
|
486
486
|
return d;
|
|
487
487
|
}
|
|
488
488
|
var centreOf = (n) => {
|
|
489
|
-
const b =
|
|
489
|
+
const b = _chunkW3GXSUSQcjs.vectorNodeBounds.call(void 0, n);
|
|
490
490
|
return b ? [b.x + b.width / 2, b.y + b.height / 2] : [0, 0];
|
|
491
491
|
};
|
|
492
492
|
function vectorBlendStepCount(a, b, options, length) {
|
|
@@ -498,8 +498,8 @@ function vectorBlendStepCount(a, b, options, length) {
|
|
|
498
498
|
if (o.spacing === "smoothColor") {
|
|
499
499
|
const cd = vectorBlendColorDistance(a, b);
|
|
500
500
|
if (cd > 1 / 255) return Math.min(VECTOR_BLEND_MAX_SMOOTH_STEPS, Math.max(1, Math.ceil(cd * 255 / 2)));
|
|
501
|
-
const ba =
|
|
502
|
-
const bb =
|
|
501
|
+
const ba = _chunkW3GXSUSQcjs.vectorNodeBounds.call(void 0, a);
|
|
502
|
+
const bb = _chunkW3GXSUSQcjs.vectorNodeBounds.call(void 0, b);
|
|
503
503
|
const dist3 = ba && bb ? Math.max(Math.abs(ba.x - bb.x), Math.abs(ba.y - bb.y), Math.abs(ba.x + ba.width - bb.x - bb.width), Math.abs(ba.y + ba.height - bb.y - bb.height)) : length;
|
|
504
504
|
return Math.min(VECTOR_BLEND_MAX_SMOOTH_STEPS, Math.max(1, Math.ceil(dist3 / 2)));
|
|
505
505
|
}
|
|
@@ -514,9 +514,9 @@ function vectorBlendRail(sp) {
|
|
|
514
514
|
pts.push(p);
|
|
515
515
|
angles.push(Math.atan2(tangent[1], tangent[0]));
|
|
516
516
|
};
|
|
517
|
-
const count =
|
|
517
|
+
const count = _chunkW3GXSUSQcjs.subpathSegmentCount.call(void 0, sp);
|
|
518
518
|
for (let i = 0; i < count; i++) {
|
|
519
|
-
const seg =
|
|
519
|
+
const seg = _chunkW3GXSUSQcjs.subpathSegment.call(void 0, sp, i);
|
|
520
520
|
const samples = seg.length === 2 ? 1 : 32;
|
|
521
521
|
if (i === 0) push(seg[0], _chunkXGD3FSNCcjs.segmentTangent.call(void 0, seg, 0));
|
|
522
522
|
for (let k = 1; k <= samples; k++) push(_chunkXGD3FSNCcjs.segmentPoint.call(void 0, seg, k / samples), _chunkXGD3FSNCcjs.segmentTangent.call(void 0, seg, k / samples));
|
|
@@ -574,7 +574,7 @@ function morphFor(a, b, blend) {
|
|
|
574
574
|
let byKey = inner.get(b);
|
|
575
575
|
if (!byKey) inner.set(b, byKey = /* @__PURE__ */ new Map());
|
|
576
576
|
let morph = byKey.get(key);
|
|
577
|
-
if (!morph) byKey.set(key, morph =
|
|
577
|
+
if (!morph) byKey.set(key, morph = _chunkJLYX4V57cjs.createVectorMorph.call(void 0, a, b, { linear: blend.linear, starts }));
|
|
578
578
|
return morph;
|
|
579
579
|
}
|
|
580
580
|
var wrapAngle = (a) => Math.atan2(Math.sin(a), Math.cos(a));
|
|
@@ -607,16 +607,16 @@ function generateVectorBlendChildren(group) {
|
|
|
607
607
|
const p = vectorBlendRailAt(spine.rail, s0 + (s1 - s0) * t);
|
|
608
608
|
const dx = p.point[0] - (p0.point[0] + (p1.point[0] - p0.point[0]) * t);
|
|
609
609
|
const dy = p.point[1] - (p0.point[1] + (p1.point[1] - p0.point[1]) * t);
|
|
610
|
-
let m = Math.hypot(dx, dy) > 1e-9 ?
|
|
610
|
+
let m = Math.hypot(dx, dy) > 1e-9 ? _chunkW3GXSUSQcjs.translateMatrix.call(void 0, dx, dy) : _chunkW3GXSUSQcjs.IDENTITY_MATRIX;
|
|
611
611
|
if (blend.orientToSpine) {
|
|
612
612
|
const turn = wrapAngle(p.angle - (p0.angle + wrapAngle(p1.angle - p0.angle) * t));
|
|
613
613
|
if (Math.abs(turn) > 1e-9) {
|
|
614
614
|
const c = centreOf(step);
|
|
615
615
|
const origin = { x: c[0] + m[4], y: c[1] + m[5] };
|
|
616
|
-
m =
|
|
616
|
+
m = _chunkW3GXSUSQcjs.multiplyMatrices.call(void 0, m, _chunkW3GXSUSQcjs.rotateMatrix.call(void 0, turn * 180 / Math.PI, origin));
|
|
617
617
|
}
|
|
618
618
|
}
|
|
619
|
-
if (m !==
|
|
619
|
+
if (m !== _chunkW3GXSUSQcjs.IDENTITY_MATRIX) step = _chunkW3GXSUSQcjs.transformVectorNode.call(void 0, step, m);
|
|
620
620
|
}
|
|
621
621
|
out.push(asStep(step, `${group.id}~${++counter}`));
|
|
622
622
|
}
|
|
@@ -663,13 +663,13 @@ function expandVectorBlend(group, newId) {
|
|
|
663
663
|
return { ...rest, children: group.children.map((c) => c.blendStep ? plain(c, newId) : c) };
|
|
664
664
|
}
|
|
665
665
|
function releaseVectorBlend(group, newId) {
|
|
666
|
-
const m =
|
|
666
|
+
const m = _chunkW3GXSUSQcjs.nodeMatrix.call(void 0, group);
|
|
667
667
|
const opacity = group.opacity;
|
|
668
|
-
const keys = vectorBlendKeys(group).map((c) => group.transform ?
|
|
668
|
+
const keys = vectorBlendKeys(group).map((c) => group.transform ? _chunkW3GXSUSQcjs.transformVectorNode.call(void 0, c, m) : c).map((c) => opacity !== void 0 && opacity < 1 ? { ...c, opacity: (_nullishCoalesce(c.opacity, () => ( 1))) * opacity } : c);
|
|
669
669
|
const spine = _optionalChain([group, 'access', _13 => _13.blend, 'optionalAccess', _14 => _14.spine]);
|
|
670
670
|
if (!spine || spine.anchors.length < 2) return keys;
|
|
671
671
|
const path = { id: newId(), type: "path", name: "Spine", fill: null, stroke: null, subpaths: [{ closed: spine.closed, anchors: spine.anchors.map((a) => ({ ...a })) }] };
|
|
672
|
-
return [...keys, group.transform ?
|
|
672
|
+
return [...keys, group.transform ? _chunkW3GXSUSQcjs.transformVectorNode.call(void 0, path, m) : path];
|
|
673
673
|
}
|
|
674
674
|
|
|
675
675
|
// src/vector/distort.ts
|
|
@@ -706,7 +706,7 @@ function vectorDistortQuad(b, handle, d, mode = "distort") {
|
|
|
706
706
|
if (side) for (const k of side) q[k] = { x: q[k].x + d.x, y: q[k].y + d.y };
|
|
707
707
|
return q;
|
|
708
708
|
}
|
|
709
|
-
var about = (o, m) =>
|
|
709
|
+
var about = (o, m) => _chunkW3GXSUSQcjs.matrixAbout.call(void 0, m, o);
|
|
710
710
|
function vectorShearForSide(b, handle, d, fromCenter = false) {
|
|
711
711
|
const center = { x: b.x + b.width / 2, y: b.y + b.height / 2 };
|
|
712
712
|
if (handle === "n" || handle === "s") {
|
|
@@ -722,22 +722,22 @@ function vectorShearForSide(b, handle, d, fromCenter = false) {
|
|
|
722
722
|
return [1, 0, 0, 1, 0, 0];
|
|
723
723
|
}
|
|
724
724
|
function vectorSkewMatrix(ax, ay, origin = { x: 0, y: 0 }) {
|
|
725
|
-
return
|
|
725
|
+
return _chunkW3GXSUSQcjs.skewMatrix.call(void 0, ax, ay, origin);
|
|
726
726
|
}
|
|
727
727
|
function mapEffects(node, f) {
|
|
728
728
|
if (!_optionalChain([node, 'access', _15 => _15.effects, 'optionalAccess', _16 => _16.length])) return void 0;
|
|
729
729
|
return node.effects.map((e) => {
|
|
730
730
|
if (e.type !== "envelope") return e;
|
|
731
|
-
if (e.params.style === "mesh") return e.params.mesh ? { ...e, params: { ...e.params, mesh:
|
|
732
|
-
const bounds =
|
|
733
|
-
if (!bounds || !
|
|
734
|
-
return { ...e, params: { ...e.params, style: "mesh", mesh:
|
|
731
|
+
if (e.params.style === "mesh") return e.params.mesh ? { ...e, params: { ...e.params, mesh: _chunkW3GXSUSQcjs.mapWarpMeshPoints.call(void 0, e.params.mesh, f) } } : e;
|
|
732
|
+
const bounds = _chunkW3GXSUSQcjs.vectorEffectInputBounds.call(void 0, node, e.id);
|
|
733
|
+
if (!bounds || !_chunkW3GXSUSQcjs.vectorEnvelopeMap.call(void 0, e.params, bounds)) return e;
|
|
734
|
+
return { ...e, params: { ...e.params, style: "mesh", mesh: _chunkW3GXSUSQcjs.mapWarpMeshPoints.call(void 0, _chunkW3GXSUSQcjs.vectorEnvelopeMesh.call(void 0, e.params, bounds), f) } };
|
|
735
735
|
});
|
|
736
736
|
}
|
|
737
737
|
function distortVectorNode(node, parentToDoc, f, tolerance = VECTOR_DISTORT_TOLERANCE) {
|
|
738
|
-
const toDoc =
|
|
739
|
-
const inv =
|
|
740
|
-
const local = (p) =>
|
|
738
|
+
const toDoc = _chunkW3GXSUSQcjs.multiplyMatrices.call(void 0, _chunkW3GXSUSQcjs.nodeMatrix.call(void 0, node), parentToDoc);
|
|
739
|
+
const inv = _chunkW3GXSUSQcjs.invertMatrix.call(void 0, toDoc);
|
|
740
|
+
const local = (p) => _chunkW3GXSUSQcjs.applyMatrix.call(void 0, inv, f(_chunkW3GXSUSQcjs.applyMatrix.call(void 0, toDoc, p)));
|
|
741
741
|
const effects = mapEffects(node, local);
|
|
742
742
|
if (node.type === "group") {
|
|
743
743
|
const group = node;
|
|
@@ -747,16 +747,16 @@ function distortVectorNode(node, parentToDoc, f, tolerance = VECTOR_DISTORT_TOLE
|
|
|
747
747
|
...group,
|
|
748
748
|
children,
|
|
749
749
|
...effects ? { effects } : {},
|
|
750
|
-
...spine ? { blend: { ...group.blend, spine:
|
|
750
|
+
...spine ? { blend: { ...group.blend, spine: _chunkW3GXSUSQcjs.mapVectorSubpaths.call(void 0, [spine], local, tolerance)[0] } } : {}
|
|
751
751
|
};
|
|
752
752
|
}
|
|
753
753
|
const path = node;
|
|
754
754
|
return {
|
|
755
755
|
...path,
|
|
756
756
|
...effects ? { effects } : {},
|
|
757
|
-
...path.fill !== void 0 ? { fill:
|
|
758
|
-
...path.stroke !== void 0 ? { stroke:
|
|
759
|
-
subpaths:
|
|
757
|
+
...path.fill !== void 0 ? { fill: _chunkW3GXSUSQcjs.mapVectorPaint.call(void 0, path.fill, local) } : {},
|
|
758
|
+
...path.stroke !== void 0 ? { stroke: _chunkW3GXSUSQcjs.mapVectorPaint.call(void 0, path.stroke, local) } : {},
|
|
759
|
+
subpaths: _chunkW3GXSUSQcjs.mapVectorSubpaths.call(void 0, path.subpaths, local, tolerance)
|
|
760
760
|
};
|
|
761
761
|
}
|
|
762
762
|
|
|
@@ -817,11 +817,11 @@ var LABELS = {
|
|
|
817
817
|
};
|
|
818
818
|
var fmtLength = (n) => String(Math.round(n * 100) / 100);
|
|
819
819
|
function nodeFrame(node, parent, aabb) {
|
|
820
|
-
const angle =
|
|
821
|
-
const b = angle ?
|
|
820
|
+
const angle = _chunkW3GXSUSQcjs.matrixRotation.call(void 0, _chunkW3GXSUSQcjs.multiplyMatrices.call(void 0, _chunkW3GXSUSQcjs.nodeMatrix.call(void 0, node), parent));
|
|
821
|
+
const b = angle ? _chunkW3GXSUSQcjs.vectorNodeBounds.call(void 0, node, _chunkW3GXSUSQcjs.multiplyMatrices.call(void 0, parent, _chunkW3GXSUSQcjs.rotateMatrix.call(void 0, -angle))) : aabb !== void 0 ? aabb : _chunkW3GXSUSQcjs.vectorNodeBounds.call(void 0, node, parent);
|
|
822
822
|
if (!b) return null;
|
|
823
823
|
const c = { x: b.x + b.width / 2, y: b.y + b.height / 2 };
|
|
824
|
-
return { width: b.width, height: b.height, centre: angle ?
|
|
824
|
+
return { width: b.width, height: b.height, centre: angle ? _chunkW3GXSUSQcjs.applyMatrix.call(void 0, _chunkW3GXSUSQcjs.rotateMatrix.call(void 0, angle), c) : c };
|
|
825
825
|
}
|
|
826
826
|
function contains(node, ids) {
|
|
827
827
|
if (ids.has(node.id)) return true;
|
|
@@ -893,13 +893,13 @@ var VectorSnapTargets = (_class = class _VectorSnapTargets {
|
|
|
893
893
|
let segmentBudget = segments ? BUDGET : 0;
|
|
894
894
|
const visit = (list, parent) => {
|
|
895
895
|
for (const n of list) {
|
|
896
|
-
const m =
|
|
896
|
+
const m = _chunkW3GXSUSQcjs.multiplyMatrices.call(void 0, _chunkW3GXSUSQcjs.nodeMatrix.call(void 0, n), parent);
|
|
897
897
|
if (n.type === "group") visit(n.children, m);
|
|
898
898
|
else if (ids.has(n.id) && n.visible !== false) {
|
|
899
899
|
n.subpaths.forEach((sp, s) => {
|
|
900
900
|
sp.anchors.forEach((a, i) => {
|
|
901
901
|
if (anchors <= 0 || moving(n.id, s, i)) return;
|
|
902
|
-
this.pushAnchor(
|
|
902
|
+
this.pushAnchor(_chunkW3GXSUSQcjs.applyMatrix.call(void 0, m, a));
|
|
903
903
|
anchors--;
|
|
904
904
|
});
|
|
905
905
|
segmentBudget = this.pushSegments(sp, m, (i) => moving(n.id, s, i), segmentBudget);
|
|
@@ -907,7 +907,7 @@ var VectorSnapTargets = (_class = class _VectorSnapTargets {
|
|
|
907
907
|
}
|
|
908
908
|
}
|
|
909
909
|
};
|
|
910
|
-
visit(doc.nodes,
|
|
910
|
+
visit(doc.nodes, _chunkW3GXSUSQcjs.IDENTITY_MATRIX);
|
|
911
911
|
}
|
|
912
912
|
pushAnchor(p) {
|
|
913
913
|
this.points.push({ p, kind: "anchor" });
|
|
@@ -917,10 +917,10 @@ var VectorSnapTargets = (_class = class _VectorSnapTargets {
|
|
|
917
917
|
/** The segments of `sp` (mapped by `m`) that stay put while the anchors `moving` accepts move. */
|
|
918
918
|
pushSegments(sp, m, moving, budget) {
|
|
919
919
|
const n = sp.anchors.length;
|
|
920
|
-
const count =
|
|
920
|
+
const count = _chunkW3GXSUSQcjs.subpathSegmentCount.call(void 0, sp);
|
|
921
921
|
for (let i = 0; i < count && budget > 0; i++) {
|
|
922
922
|
if (moving(i) || moving((i + 1) % n)) continue;
|
|
923
|
-
const seg =
|
|
923
|
+
const seg = _chunkW3GXSUSQcjs.subpathSegment.call(void 0, sp, i).map((q) => toPoint(_chunkW3GXSUSQcjs.applyMatrix.call(void 0, m, toVec(q))));
|
|
924
924
|
let minX = Infinity;
|
|
925
925
|
let minY = Infinity;
|
|
926
926
|
let maxX = -Infinity;
|
|
@@ -975,12 +975,12 @@ var VectorSnapTargets = (_class = class _VectorSnapTargets {
|
|
|
975
975
|
const visit = (list, parent) => {
|
|
976
976
|
for (const stored of list) {
|
|
977
977
|
if (exclude.has(stored.id) || stored.visible === false) continue;
|
|
978
|
-
if (
|
|
979
|
-
visit(
|
|
978
|
+
if (_chunkW3GXSUSQcjs.isVectorMaskActive.call(void 0, stored) && !contains(stored, exclude)) {
|
|
979
|
+
visit(_chunkW3GXSUSQcjs.vectorAppearanceNodes.call(void 0, stored), _chunkW3GXSUSQcjs.multiplyMatrices.call(void 0, _chunkW3GXSUSQcjs.nodeMatrix.call(void 0, stored), parent));
|
|
980
980
|
continue;
|
|
981
981
|
}
|
|
982
|
-
const n = contains(stored, exclude) ? stored :
|
|
983
|
-
const m =
|
|
982
|
+
const n = contains(stored, exclude) ? stored : _chunkW3GXSUSQcjs.expandVectorAppearance.call(void 0, stored);
|
|
983
|
+
const m = _chunkW3GXSUSQcjs.multiplyMatrices.call(void 0, _chunkW3GXSUSQcjs.nodeMatrix.call(void 0, n), parent);
|
|
984
984
|
if (n.type === "group") {
|
|
985
985
|
visit(n.children, m);
|
|
986
986
|
continue;
|
|
@@ -989,32 +989,32 @@ var VectorSnapTargets = (_class = class _VectorSnapTargets {
|
|
|
989
989
|
for (const sp of n.subpaths) {
|
|
990
990
|
for (const a of sp.anchors) {
|
|
991
991
|
if (anchors-- <= 0) break;
|
|
992
|
-
const p =
|
|
992
|
+
const p = _chunkW3GXSUSQcjs.applyMatrix.call(void 0, m, a);
|
|
993
993
|
if (gather === "drawing") self.pushAnchor(p);
|
|
994
994
|
else self.points.push({ p, kind: "anchor" });
|
|
995
995
|
}
|
|
996
996
|
if (gather !== "bounds") segments = self.pushSegments(sp, m, () => false, segments);
|
|
997
997
|
}
|
|
998
|
-
const b =
|
|
998
|
+
const b = _chunkW3GXSUSQcjs.vectorNodeBounds.call(void 0, n, parent);
|
|
999
999
|
const f = nodeFrame(n, parent, b);
|
|
1000
1000
|
if (b) self.pushRect(b, "edge", _nullishCoalesce(_optionalChain([f, 'optionalAccess', _24 => _24.centre]), () => ( null)));
|
|
1001
1001
|
}
|
|
1002
1002
|
};
|
|
1003
|
-
visit(doc.nodes,
|
|
1003
|
+
visit(doc.nodes, _chunkW3GXSUSQcjs.IDENTITY_MATRIX);
|
|
1004
1004
|
const objects = (list, parent) => {
|
|
1005
1005
|
for (const n of list) {
|
|
1006
1006
|
if (exclude.has(n.id) || n.visible === false || self.boxes.length >= BUDGET) continue;
|
|
1007
1007
|
if (n.type === "group" && contains(n, exclude)) {
|
|
1008
|
-
objects(n.children,
|
|
1008
|
+
objects(n.children, _chunkW3GXSUSQcjs.multiplyMatrices.call(void 0, _chunkW3GXSUSQcjs.nodeMatrix.call(void 0, n), parent));
|
|
1009
1009
|
continue;
|
|
1010
1010
|
}
|
|
1011
|
-
const b =
|
|
1011
|
+
const b = _chunkW3GXSUSQcjs.vectorNodeBounds.call(void 0, n, parent);
|
|
1012
1012
|
if (b) self.boxes.push(b);
|
|
1013
1013
|
const f = nodeFrame(n, parent, b);
|
|
1014
1014
|
if (f) self.sizes.push(f.width, f.height);
|
|
1015
1015
|
}
|
|
1016
1016
|
};
|
|
1017
|
-
objects(doc.nodes,
|
|
1017
|
+
objects(doc.nodes, _chunkW3GXSUSQcjs.IDENTITY_MATRIX);
|
|
1018
1018
|
return sort ? self.index() : self;
|
|
1019
1019
|
}
|
|
1020
1020
|
// -------------------------------------------------------------------------
|
|
@@ -1295,8 +1295,8 @@ var VectorSnapTargets = (_class = class _VectorSnapTargets {
|
|
|
1295
1295
|
* may match another object's width or height instead.
|
|
1296
1296
|
*/
|
|
1297
1297
|
snapScale(frame, handle, sx, sy, mods, tol) {
|
|
1298
|
-
const toDoc = frame.angle ?
|
|
1299
|
-
const toLocal = frame.angle ?
|
|
1298
|
+
const toDoc = frame.angle ? _chunkW3GXSUSQcjs.rotateMatrix.call(void 0, frame.angle) : _chunkW3GXSUSQcjs.IDENTITY_MATRIX;
|
|
1299
|
+
const toLocal = frame.angle ? _chunkW3GXSUSQcjs.rotateMatrix.call(void 0, -frame.angle) : _chunkW3GXSUSQcjs.IDENTITY_MATRIX;
|
|
1300
1300
|
const corner = handle.length === 2;
|
|
1301
1301
|
const proportional = !!mods.shift;
|
|
1302
1302
|
const centre = { x: frame.x + frame.width / 2, y: frame.y + frame.height / 2 };
|
|
@@ -1313,7 +1313,7 @@ var VectorSnapTargets = (_class = class _VectorSnapTargets {
|
|
|
1313
1313
|
let ny = sy;
|
|
1314
1314
|
let snap = { hx: null, hy: null, on: null };
|
|
1315
1315
|
if (corner && !proportional) {
|
|
1316
|
-
const p =
|
|
1316
|
+
const p = _chunkW3GXSUSQcjs.applyMatrix.call(void 0, toDoc, { x: origin.x + d0.x * sx, y: origin.y + d0.y * sy });
|
|
1317
1317
|
const hx = nearest(p.x, this.xs);
|
|
1318
1318
|
const hy = nearest(p.y, this.ys);
|
|
1319
1319
|
const on = this.nearestPoint(p, tol);
|
|
@@ -1324,7 +1324,7 @@ var VectorSnapTargets = (_class = class _VectorSnapTargets {
|
|
|
1324
1324
|
tries.push({ tx: null, ty: _nullishCoalesce(_optionalChain([hy, 'optionalAccess', _37 => _37.v]), () => ( null)), s: { hx: null, hy, on: null } });
|
|
1325
1325
|
for (const { tx, ty, s } of tries) {
|
|
1326
1326
|
if (tx === null && ty === null) continue;
|
|
1327
|
-
const q =
|
|
1327
|
+
const q = _chunkW3GXSUSQcjs.applyMatrix.call(void 0, toLocal, { x: _nullishCoalesce(tx, () => ( p.x)), y: _nullishCoalesce(ty, () => ( p.y)) });
|
|
1328
1328
|
let cx = (q.x - origin.x) / d0.x;
|
|
1329
1329
|
let cy = (q.y - origin.y) / d0.y;
|
|
1330
1330
|
if (!frame.angle) {
|
|
@@ -1358,8 +1358,8 @@ var VectorSnapTargets = (_class = class _VectorSnapTargets {
|
|
|
1358
1358
|
for (const h of [handle, ...ends]) {
|
|
1359
1359
|
const hv = handlePos(h, frame);
|
|
1360
1360
|
const v = { x: hv.x - origin.x, y: hv.y - origin.y };
|
|
1361
|
-
const base =
|
|
1362
|
-
const dir =
|
|
1361
|
+
const base = _chunkW3GXSUSQcjs.applyMatrix.call(void 0, toDoc, { x: origin.x + c.x * v.x, y: origin.y + c.y * v.y });
|
|
1362
|
+
const dir = _chunkW3GXSUSQcjs.applyMatrix.call(void 0, toDoc, { x: e.x * v.x, y: e.y * v.y });
|
|
1363
1363
|
const p = { x: base.x + dir.x * s0, y: base.y + dir.y * s0 };
|
|
1364
1364
|
const l2 = dir.x * dir.x + dir.y * dir.y;
|
|
1365
1365
|
const on = l2 > 1e-18 ? this.nearestPoint(p, tol) : null;
|
|
@@ -1381,7 +1381,7 @@ var VectorSnapTargets = (_class = class _VectorSnapTargets {
|
|
|
1381
1381
|
}
|
|
1382
1382
|
}
|
|
1383
1383
|
const out = { sx: nx, sy: ny, snapped: false, lines: [], labels: [] };
|
|
1384
|
-
const handleAt = () =>
|
|
1384
|
+
const handleAt = () => _chunkW3GXSUSQcjs.applyMatrix.call(void 0, toDoc, { x: origin.x + d0.x * out.sx, y: origin.y + d0.y * out.sy });
|
|
1385
1385
|
if (snap.on) {
|
|
1386
1386
|
out.snapped = true;
|
|
1387
1387
|
out.labels.push(this.label(snap.on.p, snap.on.kind));
|
|
@@ -1416,7 +1416,7 @@ var VectorSnapTargets = (_class = class _VectorSnapTargets {
|
|
|
1416
1416
|
{ x: box.x1, y: box.y0 },
|
|
1417
1417
|
{ x: box.x1, y: box.y1 },
|
|
1418
1418
|
{ x: box.x0, y: box.y1 }
|
|
1419
|
-
].map((q) =>
|
|
1419
|
+
].map((q) => _chunkW3GXSUSQcjs.applyMatrix.call(void 0, toDoc, q));
|
|
1420
1420
|
const pminY = Math.min(...page.map((q) => q.y));
|
|
1421
1421
|
const pmaxY = Math.max(...page.map((q) => q.y));
|
|
1422
1422
|
const pminX = Math.min(...page.map((q) => q.x));
|
|
@@ -1431,8 +1431,8 @@ var VectorSnapTargets = (_class = class _VectorSnapTargets {
|
|
|
1431
1431
|
out.snapped = true;
|
|
1432
1432
|
const off = tol * 2;
|
|
1433
1433
|
const [a, b] = axis === "x" ? [{ x: box.x0, y: box.y1 + off }, { x: box.x1, y: box.y1 + off }] : [{ x: box.x1 + off, y: box.y0 }, { x: box.x1 + off, y: box.y1 }];
|
|
1434
|
-
const pa =
|
|
1435
|
-
const pb =
|
|
1434
|
+
const pa = _chunkW3GXSUSQcjs.applyMatrix.call(void 0, toDoc, a);
|
|
1435
|
+
const pb = _chunkW3GXSUSQcjs.applyMatrix.call(void 0, toDoc, b);
|
|
1436
1436
|
out.lines.push(line("size", pa, pb));
|
|
1437
1437
|
out.labels.push(this.label({ x: (pa.x + pb.x) / 2, y: (pa.y + pb.y) / 2 }, "size", `${axis === "x" ? "W" : "H"} ${fmtLength(axis === "x" ? box.x1 - box.x0 : box.y1 - box.y0)}`));
|
|
1438
1438
|
}
|
|
@@ -1523,12 +1523,12 @@ var unit = (x, y) => {
|
|
|
1523
1523
|
return l > 1e-12 && Number.isFinite(l) ? [x / l, y / l] : null;
|
|
1524
1524
|
};
|
|
1525
1525
|
function cubicOf(sp, i) {
|
|
1526
|
-
const s =
|
|
1526
|
+
const s = _chunkW3GXSUSQcjs.subpathSegment.call(void 0, sp, i);
|
|
1527
1527
|
if (s.length === 4) return s;
|
|
1528
1528
|
const [a, b] = s;
|
|
1529
1529
|
return [a, [a[0] + (b[0] - a[0]) / 3, a[1] + (b[1] - a[1]) / 3], [a[0] + 2 * (b[0] - a[0]) / 3, a[1] + 2 * (b[1] - a[1]) / 3], b];
|
|
1530
1530
|
}
|
|
1531
|
-
var isLine = (sp, i) =>
|
|
1531
|
+
var isLine = (sp, i) => _chunkW3GXSUSQcjs.subpathSegment.call(void 0, sp, i).length === 2;
|
|
1532
1532
|
function startTangent(c) {
|
|
1533
1533
|
for (let k = 1; k < 4; k++) {
|
|
1534
1534
|
const u = unit(c[k][0] - c[0][0], c[k][1] - c[0][1]);
|
|
@@ -1548,10 +1548,10 @@ function sample(c, n, out, withStart) {
|
|
|
1548
1548
|
}
|
|
1549
1549
|
var onAnchor = (a, h) => !h || Math.abs(h.x - a.x) < EPS && Math.abs(h.y - a.y) < EPS;
|
|
1550
1550
|
function tidy(a, keepType = true) {
|
|
1551
|
-
const next =
|
|
1551
|
+
const next = _chunkW3GXSUSQcjs.cloneAnchor.call(void 0, a);
|
|
1552
1552
|
if (onAnchor(next, next.in)) delete next.in;
|
|
1553
1553
|
if (onAnchor(next, next.out)) delete next.out;
|
|
1554
|
-
const shown =
|
|
1554
|
+
const shown = _chunkW3GXSUSQcjs.inferAnchorType.call(void 0, next);
|
|
1555
1555
|
const type = keepType && a.type ? a.type === "symmetric" && shown !== "symmetric" ? shown === "corner" ? "corner" : "smooth" : a.type === "smooth" && shown === "corner" ? "corner" : a.type : shown;
|
|
1556
1556
|
if (type === "corner") delete next.type;
|
|
1557
1557
|
else next.type = type;
|
|
@@ -1595,7 +1595,7 @@ function fitAcross(pts, N, t0, t1) {
|
|
|
1595
1595
|
return goldenMin(fit, 0, 1);
|
|
1596
1596
|
}
|
|
1597
1597
|
function removeAnchorKeepingShape(sp, index) {
|
|
1598
|
-
const anchors = sp.anchors.map(
|
|
1598
|
+
const anchors = sp.anchors.map(_chunkW3GXSUSQcjs.cloneAnchor);
|
|
1599
1599
|
const n = anchors.length;
|
|
1600
1600
|
if (index < 0 || index >= n) return { anchors, closed: sp.closed };
|
|
1601
1601
|
if ((sp.closed || index > 0 && index < n - 1) && n >= 3) {
|
|
@@ -1629,12 +1629,12 @@ function removeAnchorKeepingShape(sp, index) {
|
|
|
1629
1629
|
}
|
|
1630
1630
|
function removeAnchorsKeepingShape(sp, indices) {
|
|
1631
1631
|
const order = [...new Set(indices)].filter((i) => i >= 0 && i < sp.anchors.length).sort((a, b) => b - a);
|
|
1632
|
-
return order.reduce((acc, i) => removeAnchorKeepingShape(acc, i), { anchors: sp.anchors.map(
|
|
1632
|
+
return order.reduce((acc, i) => removeAnchorKeepingShape(acc, i), { anchors: sp.anchors.map(_chunkW3GXSUSQcjs.cloneAnchor), closed: sp.closed });
|
|
1633
1633
|
}
|
|
1634
1634
|
function bendSegment(sp, segment, t, p) {
|
|
1635
|
-
const anchors = sp.anchors.map(
|
|
1635
|
+
const anchors = sp.anchors.map(_chunkW3GXSUSQcjs.cloneAnchor);
|
|
1636
1636
|
const n = anchors.length;
|
|
1637
|
-
if (segment < 0 || segment >=
|
|
1637
|
+
if (segment < 0 || segment >= _chunkW3GXSUSQcjs.subpathSegmentCount.call(void 0, sp) || !Number.isFinite(t) || !Number.isFinite(p.x) || !Number.isFinite(p.y)) return { anchors, closed: sp.closed };
|
|
1638
1638
|
const tc = Math.min(0.95, Math.max(0.05, t));
|
|
1639
1639
|
const ia = segment;
|
|
1640
1640
|
const ib = (segment + 1) % n;
|
|
@@ -1645,16 +1645,16 @@ function bendSegment(sp, segment, t, p) {
|
|
|
1645
1645
|
const oy = (p.y - (a.y + (b.y - a.y) * tc)) / k;
|
|
1646
1646
|
const c1 = { x: a.x + (b.x - a.x) / 3 + ox, y: a.y + (b.y - a.y) / 3 + oy };
|
|
1647
1647
|
const c2 = { x: b.x + (a.x - b.x) / 3 + ox, y: b.y + (a.y - b.y) / 3 + oy };
|
|
1648
|
-
anchors[ia] =
|
|
1649
|
-
anchors[ib] =
|
|
1648
|
+
anchors[ia] = _chunkW3GXSUSQcjs.moveAnchorHandle.call(void 0, a, "out", c1);
|
|
1649
|
+
anchors[ib] = _chunkW3GXSUSQcjs.moveAnchorHandle.call(void 0, b, "in", c2);
|
|
1650
1650
|
return { anchors, closed: sp.closed };
|
|
1651
1651
|
}
|
|
1652
1652
|
function subpathPointAt(sp, segment, t) {
|
|
1653
|
-
const [x, y] = _chunkXGD3FSNCcjs.segmentPoint.call(void 0,
|
|
1653
|
+
const [x, y] = _chunkXGD3FSNCcjs.segmentPoint.call(void 0, _chunkW3GXSUSQcjs.subpathSegment.call(void 0, sp, segment), t);
|
|
1654
1654
|
return { x, y };
|
|
1655
1655
|
}
|
|
1656
1656
|
function curvatureMoveAnchor(sp, index, q) {
|
|
1657
|
-
const anchors = sp.anchors.map(
|
|
1657
|
+
const anchors = sp.anchors.map(_chunkW3GXSUSQcjs.cloneAnchor);
|
|
1658
1658
|
const a = sp.anchors[index];
|
|
1659
1659
|
if (!a) return { anchors, closed: sp.closed };
|
|
1660
1660
|
const own = [
|
|
@@ -1699,7 +1699,7 @@ function curvatureMoveAnchor(sp, index, q) {
|
|
|
1699
1699
|
function cutSubpathAt(sp, at) {
|
|
1700
1700
|
const n = sp.anchors.length;
|
|
1701
1701
|
const cuts = [...new Set(at)].filter((i) => Number.isInteger(i) && i >= 0 && i < n && (sp.closed || i > 0 && i < n - 1)).sort((a, b) => a - b);
|
|
1702
|
-
if (!cuts.length || n < 2) return [{ anchors: sp.anchors.map(
|
|
1702
|
+
if (!cuts.length || n < 2) return [{ anchors: sp.anchors.map(_chunkW3GXSUSQcjs.cloneAnchor), closed: sp.closed }];
|
|
1703
1703
|
const first = cuts[0];
|
|
1704
1704
|
const run = sp.closed ? Array.from({ length: n + 1 }, (_, i) => sp.anchors[(first + i) % n]) : sp.anchors;
|
|
1705
1705
|
const cutSet = new Set(sp.closed ? [...cuts.map((c) => (c - first + n) % n), n] : cuts);
|
|
@@ -1707,7 +1707,7 @@ function cutSubpathAt(sp, at) {
|
|
|
1707
1707
|
let cur = [];
|
|
1708
1708
|
run.forEach((a, i) => {
|
|
1709
1709
|
if (!cutSet.has(i)) {
|
|
1710
|
-
cur.push(
|
|
1710
|
+
cur.push(_chunkW3GXSUSQcjs.cloneAnchor.call(void 0, a));
|
|
1711
1711
|
return;
|
|
1712
1712
|
}
|
|
1713
1713
|
if (cur.length) {
|
|
@@ -1722,10 +1722,10 @@ function cutSubpathAt(sp, at) {
|
|
|
1722
1722
|
}
|
|
1723
1723
|
function splitSubpathAt(sp, segment, t, endTolerance = 1e-6) {
|
|
1724
1724
|
const n = sp.anchors.length;
|
|
1725
|
-
if (segment < 0 || segment >=
|
|
1725
|
+
if (segment < 0 || segment >= _chunkW3GXSUSQcjs.subpathSegmentCount.call(void 0, sp)) return [{ anchors: sp.anchors.map(_chunkW3GXSUSQcjs.cloneAnchor), closed: sp.closed }];
|
|
1726
1726
|
if (t <= endTolerance) return cutSubpathAt(sp, [segment]);
|
|
1727
1727
|
if (t >= 1 - endTolerance) return cutSubpathAt(sp, [(segment + 1) % n]);
|
|
1728
|
-
const { subpath, index } =
|
|
1728
|
+
const { subpath, index } = _chunkW3GXSUSQcjs.insertAnchor.call(void 0, sp, segment, t);
|
|
1729
1729
|
return cutSubpathAt(subpath, [index]);
|
|
1730
1730
|
}
|
|
1731
1731
|
var endOf = (sp, last) => sp.anchors[last ? sp.anchors.length - 1 : 0];
|
|
@@ -1747,7 +1747,7 @@ function joinSubpaths(subpaths, tolerance) {
|
|
|
1747
1747
|
const closed = [];
|
|
1748
1748
|
let open = [];
|
|
1749
1749
|
for (const sp of subpaths) {
|
|
1750
|
-
const copy = { anchors: sp.anchors.map(
|
|
1750
|
+
const copy = { anchors: sp.anchors.map(_chunkW3GXSUSQcjs.cloneAnchor), closed: sp.closed };
|
|
1751
1751
|
if (sp.closed || sp.anchors.length < 2) {
|
|
1752
1752
|
if (sp.anchors.length) closed.push(copy);
|
|
1753
1753
|
} else open.push(copy);
|
|
@@ -1802,7 +1802,7 @@ function smoothSubpath(sp, amount = 1, only) {
|
|
|
1802
1802
|
const t = Math.min(1, Math.max(0, amount));
|
|
1803
1803
|
const orig = sp.anchors;
|
|
1804
1804
|
const n = orig.length;
|
|
1805
|
-
const anchors = orig.map(
|
|
1805
|
+
const anchors = orig.map(_chunkW3GXSUSQcjs.cloneAnchor);
|
|
1806
1806
|
if (n < 3 || t === 0) return { anchors, closed: sp.closed };
|
|
1807
1807
|
for (let i = 0; i < n; i++) {
|
|
1808
1808
|
if (!sp.closed && (i === 0 || i === n - 1)) continue;
|
|
@@ -1831,8 +1831,8 @@ function smoothSubpath(sp, amount = 1, only) {
|
|
|
1831
1831
|
}
|
|
1832
1832
|
function segsOf(sp) {
|
|
1833
1833
|
const out = [];
|
|
1834
|
-
for (let i = 0; i <
|
|
1835
|
-
const s =
|
|
1834
|
+
for (let i = 0; i < _chunkW3GXSUSQcjs.subpathSegmentCount.call(void 0, sp); i++) {
|
|
1835
|
+
const s = _chunkW3GXSUSQcjs.subpathSegment.call(void 0, sp, i);
|
|
1836
1836
|
out.push(s.length === 2 ? { c: s, line: true } : { c: s, line: false });
|
|
1837
1837
|
}
|
|
1838
1838
|
return out;
|
|
@@ -1889,7 +1889,7 @@ function removeRedundantPoints(sp, tolerance) {
|
|
|
1889
1889
|
const tol = Math.max(tolerance, 1e-9);
|
|
1890
1890
|
const types = new Map(sp.anchors.filter((a) => a.type).map((a) => [`${a.x},${a.y}`, a.type]));
|
|
1891
1891
|
const segs = segsOf(sp).filter((s) => !isZeroSeg(s));
|
|
1892
|
-
if (!segs.length) return { anchors: sp.anchors.map(
|
|
1892
|
+
if (!segs.length) return { anchors: sp.anchors.map(_chunkW3GXSUSQcjs.cloneAnchor), closed: sp.closed };
|
|
1893
1893
|
const minSegs = sp.closed ? 2 : 1;
|
|
1894
1894
|
let changed = true;
|
|
1895
1895
|
while (changed && segs.length > minSegs) {
|
|
@@ -1907,7 +1907,7 @@ function removeRedundantPoints(sp, tolerance) {
|
|
|
1907
1907
|
break;
|
|
1908
1908
|
}
|
|
1909
1909
|
}
|
|
1910
|
-
return _nullishCoalesce(segsToSubpath(segs, sp.closed, types), () => ( { anchors: sp.anchors.map(
|
|
1910
|
+
return _nullishCoalesce(segsToSubpath(segs, sp.closed, types), () => ( { anchors: sp.anchors.map(_chunkW3GXSUSQcjs.cloneAnchor), closed: sp.closed }));
|
|
1911
1911
|
}
|
|
1912
1912
|
|
|
1913
1913
|
// src/vector/ink.ts
|
|
@@ -2141,22 +2141,22 @@ function vectorPathEntries(doc, roots, options = {}) {
|
|
|
2141
2141
|
const out = [];
|
|
2142
2142
|
const visit = (stored, parent, inside) => {
|
|
2143
2143
|
if (stored.visible === false || stored.locked && !options.locked) return;
|
|
2144
|
-
const node = options.expand === false ? stored :
|
|
2144
|
+
const node = options.expand === false ? stored : _chunkW3GXSUSQcjs.expandVectorAppearance.call(void 0, _chunkW3GXSUSQcjs.vectorMaskedGeometry.call(void 0, stored));
|
|
2145
2145
|
const picked = inside || roots === null || roots.includes(node.id);
|
|
2146
2146
|
if (node.type === "group") {
|
|
2147
|
-
const m =
|
|
2147
|
+
const m = _chunkW3GXSUSQcjs.multiplyMatrices.call(void 0, _chunkW3GXSUSQcjs.nodeMatrix.call(void 0, node), parent);
|
|
2148
2148
|
for (const c of node.children) visit(c, m, picked);
|
|
2149
2149
|
} else if (picked) out.push({ node, parent });
|
|
2150
2150
|
};
|
|
2151
|
-
for (const n of doc.nodes) visit(n,
|
|
2151
|
+
for (const n of doc.nodes) visit(n, _chunkW3GXSUSQcjs.IDENTITY_MATRIX, false);
|
|
2152
2152
|
return out;
|
|
2153
2153
|
}
|
|
2154
2154
|
var usable = (sp) => sp.anchors.length > 1;
|
|
2155
2155
|
function worldOf(entry, subpaths) {
|
|
2156
|
-
return
|
|
2156
|
+
return _chunkW3GXSUSQcjs.vectorPathWorldBezier.call(void 0, { ...entry.node, subpaths }, entry.parent);
|
|
2157
2157
|
}
|
|
2158
2158
|
function subpathEnclosesArea(sp) {
|
|
2159
|
-
const contour = _chunkXGD3FSNCcjs.pathToContours.call(void 0,
|
|
2159
|
+
const contour = _chunkXGD3FSNCcjs.pathToContours.call(void 0, _chunkW3GXSUSQcjs.subpathsToBezier.call(void 0, [{ ...sp, closed: true }]))[0];
|
|
2160
2160
|
if (!contour) return false;
|
|
2161
2161
|
const segs = _chunkXGD3FSNCcjs.closeContour.call(void 0, contour, true);
|
|
2162
2162
|
const b = _chunkXGD3FSNCcjs.bezierPathBounds.call(void 0, _chunkXGD3FSNCcjs.contoursToPath.call(void 0, [{ segments: segs, closed: true }]));
|
|
@@ -2171,11 +2171,11 @@ function vectorPathfinderShape(entry, op) {
|
|
|
2171
2171
|
const subpaths = node.subpaths.filter(usable);
|
|
2172
2172
|
const closed = subpaths.map((s) => ({ ...s, closed: true }));
|
|
2173
2173
|
const fillRule = _nullishCoalesce(node.fillRule, () => ( "nonzero"));
|
|
2174
|
-
if (
|
|
2174
|
+
if (_chunkW3GXSUSQcjs.hasPaint.call(void 0, node.fill)) return { path: worldOf(entry, closed), fillRule, key: `fill:${paintKey(node.fill)}`, paint: "fill" };
|
|
2175
2175
|
const open = subpaths.length > 0 && subpaths.every((s) => !s.closed);
|
|
2176
2176
|
if (op === "divide" && open) return { path: worldOf(entry, subpaths), line: true, paint: "line" };
|
|
2177
|
-
if (
|
|
2178
|
-
const path =
|
|
2177
|
+
if (_chunkW3GXSUSQcjs.hasPaint.call(void 0, node.stroke) && (_nullishCoalesce(node.strokeWidth, () => ( 1))) > 0) {
|
|
2178
|
+
const path = _chunkW3GXSUSQcjs.vectorStrokeOutline.call(void 0, { ...node, subpaths }, entry.parent);
|
|
2179
2179
|
return { path, fillRule: "nonzero", key: `fill:${paintKey(node.stroke)}`, paint: "stroke" };
|
|
2180
2180
|
}
|
|
2181
2181
|
return { path: worldOf(entry, closed), fillRule, key: "none", paint: "outline" };
|
|
@@ -2199,7 +2199,7 @@ function vectorResultStyle(node, paint, edge = false) {
|
|
|
2199
2199
|
const base = { ...rest, fillRule: "nonzero" };
|
|
2200
2200
|
if (edge) {
|
|
2201
2201
|
for (const k of STROKE_KEYS) delete base[k];
|
|
2202
|
-
const stroke = paint === "stroke" || !
|
|
2202
|
+
const stroke = paint === "stroke" || !_chunkW3GXSUSQcjs.hasPaint.call(void 0, node.fill) ? node.stroke : node.fill;
|
|
2203
2203
|
return { ...base, fill: null, stroke: _nullishCoalesce(stroke, () => ( "#000000")), strokeWidth: _nullishCoalesce(node.strokeWidth, () => ( 1)) };
|
|
2204
2204
|
}
|
|
2205
2205
|
if (paint === "stroke") {
|
|
@@ -2211,7 +2211,7 @@ function vectorResultStyle(node, paint, edge = false) {
|
|
|
2211
2211
|
function vectorShapeBuilderMap(entries) {
|
|
2212
2212
|
const lines = [];
|
|
2213
2213
|
const inputs = entries.map((entry) => {
|
|
2214
|
-
const filled =
|
|
2214
|
+
const filled = _chunkW3GXSUSQcjs.hasPaint.call(void 0, entry.node.fill);
|
|
2215
2215
|
const subpaths = entry.node.subpaths.filter(usable).map((sp) => !sp.closed && filled && subpathEnclosesArea(sp) ? { ...sp, closed: true } : sp);
|
|
2216
2216
|
lines.push(!subpaths.some((s) => s.closed));
|
|
2217
2217
|
return { path: worldOf(entry, subpaths), fillRule: _nullishCoalesce(entry.node.fillRule, () => ( "nonzero")) };
|
|
@@ -2316,7 +2316,7 @@ function planShapeBuilder(m, touched, erase) {
|
|
|
2316
2316
|
const kept = faces.flatMap((_, f) => sourcesOf[f].includes(i) && !picked.has(f) ? [f] : []);
|
|
2317
2317
|
rest = kept.length ? m.map.merge(kept) : [];
|
|
2318
2318
|
} else rest = worldOf(entry, entry.node.subpaths.filter(usable));
|
|
2319
|
-
const fillCloses =
|
|
2319
|
+
const fillCloses = _chunkW3GXSUSQcjs.hasPaint.call(void 0, entry.node.fill);
|
|
2320
2320
|
let cut = false;
|
|
2321
2321
|
for (const piece of cuts) {
|
|
2322
2322
|
const r = rest.length ? _chunkJEYDXRWQcjs.cutOutPiece.call(void 0, rest, piece, fillCloses, m.tolerance) : null;
|
|
@@ -2407,18 +2407,18 @@ function getEditablePathIds(state) {
|
|
|
2407
2407
|
if (state.tool === "direct") {
|
|
2408
2408
|
if (state.editingId) ids.add(state.editingId);
|
|
2409
2409
|
for (const id of state.selection) {
|
|
2410
|
-
const node =
|
|
2410
|
+
const node = _chunkW3GXSUSQcjs.findVectorNode.call(void 0, state.document.nodes, id);
|
|
2411
2411
|
if (node && !node.locked) {
|
|
2412
|
-
for (const p of
|
|
2412
|
+
for (const p of _chunkW3GXSUSQcjs.collectPathNodes.call(void 0, node)) if (!p.locked) ids.add(p.id);
|
|
2413
2413
|
}
|
|
2414
2414
|
}
|
|
2415
2415
|
}
|
|
2416
|
-
return [...ids].filter((id) => _optionalChain([
|
|
2416
|
+
return [...ids].filter((id) => _optionalChain([_chunkW3GXSUSQcjs.findVectorNode.call(void 0, state.document.nodes, id), 'optionalAccess', _38 => _38.type]) === "path");
|
|
2417
2417
|
}
|
|
2418
2418
|
function getVisibleAnchors(state) {
|
|
2419
2419
|
const out = [];
|
|
2420
2420
|
for (const id of getEditablePathIds(state)) {
|
|
2421
|
-
const node =
|
|
2421
|
+
const node = _chunkW3GXSUSQcjs.findVectorNode.call(void 0, state.document.nodes, id);
|
|
2422
2422
|
node.subpaths.forEach((sp, s) => sp.anchors.forEach((_, i) => out.push({ nodeId: id, subpath: s, index: i })));
|
|
2423
2423
|
}
|
|
2424
2424
|
return out;
|
|
@@ -2436,7 +2436,7 @@ function getVisibleHandles(state) {
|
|
|
2436
2436
|
out.push({ nodeId: node.id, subpath: s, index: i, handle });
|
|
2437
2437
|
};
|
|
2438
2438
|
if (state.tool === "pen" && state.pen) {
|
|
2439
|
-
const node =
|
|
2439
|
+
const node = _chunkW3GXSUSQcjs.findVectorNode.call(void 0, state.document.nodes, state.pen.nodeId);
|
|
2440
2440
|
const sp = _optionalChain([node, 'optionalAccess', _41 => _41.type]) === "path" ? node.subpaths[state.pen.subpath] : void 0;
|
|
2441
2441
|
if (_optionalChain([node, 'optionalAccess', _42 => _42.type]) === "path" && sp) {
|
|
2442
2442
|
const last = sp.anchors.length - 1;
|
|
@@ -2449,7 +2449,7 @@ function getVisibleHandles(state) {
|
|
|
2449
2449
|
const editable = new Set(getEditablePathIds(state));
|
|
2450
2450
|
for (const ref of state.selectedAnchors) {
|
|
2451
2451
|
if (!editable.has(ref.nodeId)) continue;
|
|
2452
|
-
const node =
|
|
2452
|
+
const node = _chunkW3GXSUSQcjs.findVectorNode.call(void 0, state.document.nodes, ref.nodeId);
|
|
2453
2453
|
const sp = node.subpaths[ref.subpath];
|
|
2454
2454
|
if (!sp) continue;
|
|
2455
2455
|
const n = sp.anchors.length;
|
|
@@ -2468,26 +2468,26 @@ function getVectorCornerWidgets(state) {
|
|
|
2468
2468
|
const zoom = state.viewport.zoom;
|
|
2469
2469
|
const out = [];
|
|
2470
2470
|
for (const id of getEditablePathIds(state)) {
|
|
2471
|
-
const node =
|
|
2471
|
+
const node = _chunkW3GXSUSQcjs.findVectorNode.call(void 0, state.document.nodes, id);
|
|
2472
2472
|
const picked = state.selectedAnchors.filter((r) => r.nodeId === id);
|
|
2473
|
-
const m = _nullishCoalesce(
|
|
2474
|
-
for (const c of
|
|
2473
|
+
const m = _nullishCoalesce(_chunkW3GXSUSQcjs.vectorWorldMatrix.call(void 0, state.document.nodes, id), () => ( _chunkW3GXSUSQcjs.IDENTITY_MATRIX));
|
|
2474
|
+
for (const c of _chunkW3GXSUSQcjs.vectorCorners.call(void 0, node.subpaths)) {
|
|
2475
2475
|
if (picked.length && !picked.some((r) => r.subpath === c.subpath && r.index === c.index)) continue;
|
|
2476
2476
|
const side = Math.min(c.lu, c.lv);
|
|
2477
2477
|
if (side * zoom < 3 * VECTOR_CORNER_WIDGET_INSET) continue;
|
|
2478
2478
|
const a = node.subpaths[c.subpath].anchors[c.index];
|
|
2479
2479
|
const radius = _nullishCoalesce(_optionalChain([a, 'access', _43 => _43.corner, 'optionalAccess', _44 => _44.radius]), () => ( 0));
|
|
2480
|
-
const drawn =
|
|
2480
|
+
const drawn = _chunkW3GXSUSQcjs.fitCornerRadius.call(void 0, c, radius);
|
|
2481
2481
|
const k = Math.min(Math.max(drawn / c.sin, VECTOR_CORNER_WIDGET_INSET / (zoom * Math.sqrt(1 + c.cos))), side / 2);
|
|
2482
|
-
const p =
|
|
2482
|
+
const p = _chunkW3GXSUSQcjs.applyMatrix.call(void 0, m, _chunkW3GXSUSQcjs.cornerBisectorPoint.call(void 0, c, k));
|
|
2483
2483
|
out.push({ ref: { nodeId: id, subpath: c.subpath, index: c.index }, x: p.x, y: p.y, radius, drawnRadius: drawn, kind: _nullishCoalesce(_optionalChain([a, 'access', _45 => _45.corner, 'optionalAccess', _46 => _46.kind]), () => ( "round")), corner: c });
|
|
2484
2484
|
}
|
|
2485
2485
|
}
|
|
2486
2486
|
return out;
|
|
2487
2487
|
}
|
|
2488
2488
|
function vectorStrokeWidthGeometry(node) {
|
|
2489
|
-
if (!
|
|
2490
|
-
const parts =
|
|
2489
|
+
if (!_chunkW3GXSUSQcjs.hasPaint.call(void 0, node.stroke) || !((_nullishCoalesce(node.strokeWidth, () => ( 1))) > 0)) return null;
|
|
2490
|
+
const parts = _chunkW3GXSUSQcjs.vectorStrokeParts.call(void 0, _chunkW3GXSUSQcjs.subpathsToBezier.call(void 0, node.subpaths), node);
|
|
2491
2491
|
return parts.line.length ? { line: parts.line, unit: parts.drawWidth / 2 } : null;
|
|
2492
2492
|
}
|
|
2493
2493
|
function shiftWidthPoints(profile, indices, dt) {
|
|
@@ -2500,30 +2500,30 @@ function getVectorWidthHandles(state) {
|
|
|
2500
2500
|
if (state.tool !== "width") return [];
|
|
2501
2501
|
const ids = /* @__PURE__ */ new Set();
|
|
2502
2502
|
for (const id of state.selection) {
|
|
2503
|
-
const n =
|
|
2504
|
-
if (n) for (const p of
|
|
2503
|
+
const n = _chunkW3GXSUSQcjs.findVectorNode.call(void 0, state.document.nodes, id);
|
|
2504
|
+
if (n) for (const p of _chunkW3GXSUSQcjs.collectPathNodes.call(void 0, n)) ids.add(p.id);
|
|
2505
2505
|
}
|
|
2506
2506
|
if (_optionalChain([state, 'access', _47 => _47.hover, 'optionalAccess', _48 => _48.nodeId])) ids.add(state.hover.nodeId);
|
|
2507
2507
|
if (_optionalChain([state, 'access', _49 => _49.interaction, 'optionalAccess', _50 => _50.type]) === "width") ids.add(state.interaction.ref.nodeId);
|
|
2508
2508
|
for (const r of state.selectedWidthPoints) ids.add(r.nodeId);
|
|
2509
2509
|
const out = [];
|
|
2510
2510
|
for (const id of ids) {
|
|
2511
|
-
const node =
|
|
2511
|
+
const node = _chunkW3GXSUSQcjs.findVectorNode.call(void 0, state.document.nodes, id);
|
|
2512
2512
|
if (_optionalChain([node, 'optionalAccess', _51 => _51.type]) !== "path" || node.visible === false || !_optionalChain([node, 'access', _52 => _52.strokeWidthProfile, 'optionalAccess', _53 => _53.length])) continue;
|
|
2513
2513
|
const g = vectorStrokeWidthGeometry(node);
|
|
2514
2514
|
if (!g) continue;
|
|
2515
|
-
const profile =
|
|
2516
|
-
const m = _nullishCoalesce(
|
|
2515
|
+
const profile = _chunkW3GXSUSQcjs.sanitizeWidthProfile.call(void 0, node.strokeWidthProfile);
|
|
2516
|
+
const m = _nullishCoalesce(_chunkW3GXSUSQcjs.vectorWorldMatrix.call(void 0, state.document.nodes, id), () => ( _chunkW3GXSUSQcjs.IDENTITY_MATRIX));
|
|
2517
2517
|
const contours = node.subpaths.length;
|
|
2518
2518
|
for (let sp = 0; sp < contours; sp++) {
|
|
2519
2519
|
profile.forEach((w, index) => {
|
|
2520
|
-
const at =
|
|
2520
|
+
const at = _chunkW3GXSUSQcjs.strokePositionPoint.call(void 0, g.line, sp, w.t);
|
|
2521
2521
|
if (!at) return;
|
|
2522
2522
|
const n = { x: at.tangent[1], y: -at.tangent[0] };
|
|
2523
2523
|
const c = { x: at.point[0], y: at.point[1] };
|
|
2524
|
-
const p =
|
|
2525
|
-
const l =
|
|
2526
|
-
const r =
|
|
2524
|
+
const p = _chunkW3GXSUSQcjs.applyMatrix.call(void 0, m, c);
|
|
2525
|
+
const l = _chunkW3GXSUSQcjs.applyMatrix.call(void 0, m, { x: c.x + n.x * w.left * g.unit, y: c.y + n.y * w.left * g.unit });
|
|
2526
|
+
const r = _chunkW3GXSUSQcjs.applyMatrix.call(void 0, m, { x: c.x - n.x * w.right * g.unit, y: c.y - n.y * w.right * g.unit });
|
|
2527
2527
|
out.push({
|
|
2528
2528
|
ref: { nodeId: id, index, subpath: sp },
|
|
2529
2529
|
x: p.x,
|
|
@@ -2541,24 +2541,24 @@ function getVectorWidthHandles(state) {
|
|
|
2541
2541
|
return out;
|
|
2542
2542
|
}
|
|
2543
2543
|
function getAnchor(doc, ref) {
|
|
2544
|
-
const node =
|
|
2544
|
+
const node = _chunkW3GXSUSQcjs.findVectorNode.call(void 0, doc.nodes, ref.nodeId);
|
|
2545
2545
|
return _optionalChain([node, 'optionalAccess', _54 => _54.type]) === "path" ? _optionalChain([node, 'access', _55 => _55.subpaths, 'access', _56 => _56[ref.subpath], 'optionalAccess', _57 => _57.anchors, 'access', _58 => _58[ref.index]]) : void 0;
|
|
2546
2546
|
}
|
|
2547
2547
|
function getAnchorWorld(doc, ref) {
|
|
2548
2548
|
const a = getAnchor(doc, ref);
|
|
2549
2549
|
if (!a) return void 0;
|
|
2550
|
-
const m = _nullishCoalesce(
|
|
2551
|
-
const p =
|
|
2552
|
-
return { x: p.x, y: p.y, ...a.in ? { in:
|
|
2550
|
+
const m = _nullishCoalesce(_chunkW3GXSUSQcjs.vectorWorldMatrix.call(void 0, doc.nodes, ref.nodeId), () => ( _chunkW3GXSUSQcjs.IDENTITY_MATRIX));
|
|
2551
|
+
const p = _chunkW3GXSUSQcjs.applyMatrix.call(void 0, m, a);
|
|
2552
|
+
return { x: p.x, y: p.y, ...a.in ? { in: _chunkW3GXSUSQcjs.applyMatrix.call(void 0, m, a.in) } : {}, ...a.out ? { out: _chunkW3GXSUSQcjs.applyMatrix.call(void 0, m, a.out) } : {}, ...a.type ? { type: a.type } : {} };
|
|
2553
2553
|
}
|
|
2554
2554
|
function getVectorSelectionFrame(doc, ids) {
|
|
2555
|
-
const nodes = ids.map((id) => ({ node:
|
|
2555
|
+
const nodes = ids.map((id) => ({ node: _chunkW3GXSUSQcjs.findVectorNode.call(void 0, doc.nodes, id), parent: _nullishCoalesce(_chunkW3GXSUSQcjs.vectorParentMatrix.call(void 0, doc.nodes, id), () => ( _chunkW3GXSUSQcjs.IDENTITY_MATRIX)) })).filter((n) => n.node);
|
|
2556
2556
|
if (!nodes.length) return null;
|
|
2557
|
-
const angles = nodes.map((n) =>
|
|
2557
|
+
const angles = nodes.map((n) => _chunkW3GXSUSQcjs.matrixRotation.call(void 0, _chunkW3GXSUSQcjs.multiplyMatrices.call(void 0, _chunkW3GXSUSQcjs.nodeMatrix.call(void 0, n.node), n.parent)));
|
|
2558
2558
|
const same = angles.every((a) => Math.abs(normalizeAngle(a - angles[0])) < 1e-6);
|
|
2559
2559
|
const angle = same ? angles[0] : 0;
|
|
2560
|
-
const unrotate =
|
|
2561
|
-
const b =
|
|
2560
|
+
const unrotate = _chunkW3GXSUSQcjs.rotateMatrix.call(void 0, -angle);
|
|
2561
|
+
const b = _chunkW3GXSUSQcjs.unionBounds.call(void 0, nodes.map((n) => _chunkW3GXSUSQcjs.vectorNodeBounds.call(void 0, n.node, _chunkW3GXSUSQcjs.multiplyMatrices.call(void 0, n.parent, unrotate))));
|
|
2562
2562
|
return b ? { ...b, angle } : null;
|
|
2563
2563
|
}
|
|
2564
2564
|
var normalizeAngle = (a) => ((a + 180) % 360 + 360) % 360 - 180;
|
|
@@ -2579,8 +2579,8 @@ function getTransformHandlePositions(box) {
|
|
|
2579
2579
|
function getVectorSelectionBoxGeometry(frame, viewport) {
|
|
2580
2580
|
const z = viewport.zoom;
|
|
2581
2581
|
const box = { x: frame.x * z + viewport.x, y: frame.y * z + viewport.y, width: frame.width * z, height: frame.height * z };
|
|
2582
|
-
const rot =
|
|
2583
|
-
const toScreen2 = (p) => frame.angle ?
|
|
2582
|
+
const rot = _chunkW3GXSUSQcjs.rotateMatrix.call(void 0, frame.angle, { x: viewport.x, y: viewport.y });
|
|
2583
|
+
const toScreen2 = (p) => frame.angle ? _chunkW3GXSUSQcjs.applyMatrix.call(void 0, rot, p) : { x: p.x, y: p.y };
|
|
2584
2584
|
const handles = getTransformHandlePositions(box).map((h) => ({ ...h, screen: toScreen2(h) }));
|
|
2585
2585
|
const corners2 = [
|
|
2586
2586
|
{ x: box.x, y: box.y },
|
|
@@ -2593,10 +2593,10 @@ function getVectorSelectionBoxGeometry(frame, viewport) {
|
|
|
2593
2593
|
}
|
|
2594
2594
|
function getVectorEnvelopeTarget(doc, selection) {
|
|
2595
2595
|
if (selection.length !== 1) return null;
|
|
2596
|
-
const node =
|
|
2597
|
-
if (!node || !
|
|
2598
|
-
const frame =
|
|
2599
|
-
return frame ? { node, frame, world: _nullishCoalesce(
|
|
2596
|
+
const node = _chunkW3GXSUSQcjs.findVectorNode.call(void 0, doc.nodes, selection[0]);
|
|
2597
|
+
if (!node || !_chunkW3GXSUSQcjs.vectorNodeEnvelope.call(void 0, node)) return null;
|
|
2598
|
+
const frame = _chunkW3GXSUSQcjs.vectorEnvelopeFrame.call(void 0, node);
|
|
2599
|
+
return frame ? { node, frame, world: _nullishCoalesce(_chunkW3GXSUSQcjs.vectorWorldMatrix.call(void 0, doc.nodes, node.id), () => ( _chunkW3GXSUSQcjs.IDENTITY_MATRIX)) } : null;
|
|
2600
2600
|
}
|
|
2601
2601
|
var RESIZE_CURSOR_ORDER = ["ew-resize", "nwse-resize", "ns-resize", "nesw-resize"];
|
|
2602
2602
|
var HANDLE_ANGLES = { e: 0, se: 45, s: 90, sw: 135, w: 180, nw: 225, n: 270, ne: 315 };
|
|
@@ -2707,7 +2707,7 @@ var VECTOR_PATHFINDER_LABELS = {
|
|
|
2707
2707
|
function normalizeVectorTree(nodes, prefer) {
|
|
2708
2708
|
let changed = false;
|
|
2709
2709
|
const out = nodes.map((n) => {
|
|
2710
|
-
let next = n.type === "path" ?
|
|
2710
|
+
let next = n.type === "path" ? _chunkW3GXSUSQcjs.normalizeVectorPaintStacks.call(void 0, n, prefer) : n;
|
|
2711
2711
|
if (next.type === "group") {
|
|
2712
2712
|
const children = normalizeVectorTree(next.children, prefer);
|
|
2713
2713
|
if (children !== next.children) next = { ...next, children };
|
|
@@ -2718,7 +2718,7 @@ function normalizeVectorTree(nodes, prefer) {
|
|
|
2718
2718
|
return changed ? out : nodes;
|
|
2719
2719
|
}
|
|
2720
2720
|
function loadedDocument(doc) {
|
|
2721
|
-
const copy =
|
|
2721
|
+
const copy = _chunkW3GXSUSQcjs.cloneVectorDocument.call(void 0, doc);
|
|
2722
2722
|
const nodes = normalizeVectorTree(copy.nodes, "stack");
|
|
2723
2723
|
return nodes === copy.nodes ? copy : { ...copy, nodes };
|
|
2724
2724
|
}
|
|
@@ -2764,7 +2764,7 @@ var placementOf = (n) => ({
|
|
|
2764
2764
|
...n.locked ? { locked: true } : {},
|
|
2765
2765
|
...n.booleanOperation ? { booleanOperation: n.booleanOperation } : {}
|
|
2766
2766
|
});
|
|
2767
|
-
var isRoot = (m) => m ===
|
|
2767
|
+
var isRoot = (m) => m === _chunkW3GXSUSQcjs.IDENTITY_MATRIX || m[0] === 1 && m[1] === 0 && m[2] === 0 && m[3] === 1 && m[4] === 0 && m[5] === 0;
|
|
2768
2768
|
var idCounter = 0;
|
|
2769
2769
|
var defaultCreateId = () => `vn-${Date.now().toString(36)}${(++idCounter).toString(36)}`;
|
|
2770
2770
|
var VectorEditorController = (_class3 = class {
|
|
@@ -2869,7 +2869,7 @@ var VectorEditorController = (_class3 = class {
|
|
|
2869
2869
|
return this.doc;
|
|
2870
2870
|
}
|
|
2871
2871
|
getNode(id) {
|
|
2872
|
-
return
|
|
2872
|
+
return _chunkW3GXSUSQcjs.findVectorNode.call(void 0, this.doc.nodes, id);
|
|
2873
2873
|
}
|
|
2874
2874
|
computeState() {
|
|
2875
2875
|
const h = this.history.getState();
|
|
@@ -2928,10 +2928,10 @@ var VectorEditorController = (_class3 = class {
|
|
|
2928
2928
|
});
|
|
2929
2929
|
}
|
|
2930
2930
|
boundsOf(ids) {
|
|
2931
|
-
return
|
|
2931
|
+
return _chunkW3GXSUSQcjs.unionBounds.call(void 0,
|
|
2932
2932
|
ids.map((id) => {
|
|
2933
2933
|
const n = this.getNode(id);
|
|
2934
|
-
return n ?
|
|
2934
|
+
return n ? _chunkW3GXSUSQcjs.vectorNodeBounds.call(void 0, n, _nullishCoalesce(_chunkW3GXSUSQcjs.vectorParentMatrix.call(void 0, this.doc.nodes, id), () => ( _chunkW3GXSUSQcjs.IDENTITY_MATRIX))) : null;
|
|
2935
2935
|
})
|
|
2936
2936
|
);
|
|
2937
2937
|
}
|
|
@@ -2940,11 +2940,11 @@ var VectorEditorController = (_class3 = class {
|
|
|
2940
2940
|
}
|
|
2941
2941
|
/** Local → document matrix of a node in `doc` (default: the current document). */
|
|
2942
2942
|
worldOf(id, doc = this.doc) {
|
|
2943
|
-
return _nullishCoalesce(
|
|
2943
|
+
return _nullishCoalesce(_chunkW3GXSUSQcjs.vectorWorldMatrix.call(void 0, doc.nodes, id), () => ( _chunkW3GXSUSQcjs.IDENTITY_MATRIX));
|
|
2944
2944
|
}
|
|
2945
2945
|
/** A document point in node `id`'s own space. */
|
|
2946
2946
|
toLocal(id, p, doc = this.doc) {
|
|
2947
|
-
return
|
|
2947
|
+
return _chunkW3GXSUSQcjs.applyMatrix.call(void 0, _chunkW3GXSUSQcjs.invertMatrix.call(void 0, this.worldOf(id, doc)), p);
|
|
2948
2948
|
}
|
|
2949
2949
|
cursorFor() {
|
|
2950
2950
|
if (_optionalChain([this, 'access', _61 => _61.drag, 'optionalAccess', _62 => _62.kind]) === "pan" || this.spaceHeld) return this.drag ? "grabbing" : "grab";
|
|
@@ -3057,9 +3057,9 @@ var VectorEditorController = (_class3 = class {
|
|
|
3057
3057
|
this.setDoc(mapTree(this.doc.nodes, (n) => n.id === id ? next : n));
|
|
3058
3058
|
}
|
|
3059
3059
|
freshIds(node) {
|
|
3060
|
-
const copy =
|
|
3060
|
+
const copy = _chunkW3GXSUSQcjs.cloneVectorNode.call(void 0, node);
|
|
3061
3061
|
const used = /* @__PURE__ */ new Set();
|
|
3062
|
-
|
|
3062
|
+
_chunkW3GXSUSQcjs.walkVectorNodes.call(void 0, this.doc.nodes, (n) => used.add(n.id));
|
|
3063
3063
|
const next = () => {
|
|
3064
3064
|
let id = this.createId();
|
|
3065
3065
|
while (used.has(id)) id = this.createId();
|
|
@@ -3255,7 +3255,7 @@ var VectorEditorController = (_class3 = class {
|
|
|
3255
3255
|
/** Replaces the document with parsed SVG markup (one undo step). */
|
|
3256
3256
|
loadSvg(svg, options = {}) {
|
|
3257
3257
|
try {
|
|
3258
|
-
const doc =
|
|
3258
|
+
const doc = _chunkJLYX4V57cjs.parseVectorSvg.call(void 0, svg, { createId: () => this.createId() });
|
|
3259
3259
|
this.setDocument(doc, { history: options.history, label: "Import SVG" });
|
|
3260
3260
|
return { ok: true };
|
|
3261
3261
|
} catch (error) {
|
|
@@ -3265,7 +3265,7 @@ var VectorEditorController = (_class3 = class {
|
|
|
3265
3265
|
/** Adds the nodes of SVG markup on top of the document, selected. */
|
|
3266
3266
|
importSvg(svg) {
|
|
3267
3267
|
try {
|
|
3268
|
-
const parsed =
|
|
3268
|
+
const parsed = _chunkJLYX4V57cjs.parseVectorSvg.call(void 0, svg);
|
|
3269
3269
|
const nodes = parsed.nodes.map((n) => this.freshIds(n));
|
|
3270
3270
|
if (!nodes.length) return { ok: false, message: "The SVG has no shapes the editor can read." };
|
|
3271
3271
|
this.change("Import SVG", () => {
|
|
@@ -3279,21 +3279,21 @@ var VectorEditorController = (_class3 = class {
|
|
|
3279
3279
|
}
|
|
3280
3280
|
}
|
|
3281
3281
|
toSvg(options) {
|
|
3282
|
-
return
|
|
3282
|
+
return _chunkJLYX4V57cjs.vectorDocumentToSvg.call(void 0, this.doc, options);
|
|
3283
3283
|
}
|
|
3284
3284
|
toJSON() {
|
|
3285
|
-
return
|
|
3285
|
+
return _chunkW3GXSUSQcjs.cloneVectorDocument.call(void 0, this.doc);
|
|
3286
3286
|
}
|
|
3287
3287
|
/** Adds a node (ids are kept unless taken). Returns its id. */
|
|
3288
3288
|
addNode(node, options = {}) {
|
|
3289
3289
|
const taken = (() => {
|
|
3290
3290
|
let clash = false;
|
|
3291
|
-
|
|
3291
|
+
_chunkW3GXSUSQcjs.walkVectorNodes.call(void 0, [node], (n) => {
|
|
3292
3292
|
if (this.getNode(n.id)) clash = true;
|
|
3293
3293
|
});
|
|
3294
3294
|
return clash;
|
|
3295
3295
|
})();
|
|
3296
|
-
const next = taken ? this.freshIds(node) :
|
|
3296
|
+
const next = taken ? this.freshIds(node) : _chunkW3GXSUSQcjs.cloneVectorNode.call(void 0, node);
|
|
3297
3297
|
this.change(_nullishCoalesce(options.label, () => ( `Add ${next.type === "group" ? "Group" : _nullishCoalesce(next.name, () => ( "Path"))}`)), () => {
|
|
3298
3298
|
const insert = (list) => {
|
|
3299
3299
|
const copy = list.slice();
|
|
@@ -3317,24 +3317,24 @@ var VectorEditorController = (_class3 = class {
|
|
|
3317
3317
|
let subpath;
|
|
3318
3318
|
switch (input.kind) {
|
|
3319
3319
|
case "rect":
|
|
3320
|
-
subpath =
|
|
3320
|
+
subpath = _chunkW3GXSUSQcjs.rectSubpath.call(void 0, b);
|
|
3321
3321
|
break;
|
|
3322
3322
|
case "ellipse":
|
|
3323
|
-
subpath =
|
|
3323
|
+
subpath = _chunkW3GXSUSQcjs.ellipseSubpath.call(void 0, b);
|
|
3324
3324
|
break;
|
|
3325
3325
|
case "polygon":
|
|
3326
|
-
subpath =
|
|
3326
|
+
subpath = _chunkW3GXSUSQcjs.polygonSubpath.call(void 0, b, _nullishCoalesce(input.sides, () => ( d.polygonSides)));
|
|
3327
3327
|
break;
|
|
3328
3328
|
case "star":
|
|
3329
|
-
subpath =
|
|
3329
|
+
subpath = _chunkW3GXSUSQcjs.starSubpath.call(void 0, b, _nullishCoalesce(input.points, () => ( d.starPoints)), _nullishCoalesce(input.innerRatio, () => ( d.starInnerRatio)));
|
|
3330
3330
|
break;
|
|
3331
3331
|
case "line":
|
|
3332
|
-
subpath =
|
|
3332
|
+
subpath = _chunkW3GXSUSQcjs.lineSubpath.call(void 0, { x: b.x, y: b.y }, { x: b.x + b.width, y: b.y + b.height });
|
|
3333
3333
|
break;
|
|
3334
3334
|
}
|
|
3335
3335
|
const radius = _nullishCoalesce(input.cornerRadius, () => ( d.cornerRadius));
|
|
3336
3336
|
const kind = _nullishCoalesce(input.cornerKind, () => ( d.cornerKind));
|
|
3337
|
-
if ((input.kind === "rect" || input.kind === "polygon" || input.kind === "star") && radius > 0) subpath =
|
|
3337
|
+
if ((input.kind === "rect" || input.kind === "polygon" || input.kind === "star") && radius > 0) subpath = _chunkW3GXSUSQcjs.setSubpathCorners.call(void 0, subpath, radius, kind);
|
|
3338
3338
|
const names = { rect: "Rectangle", ellipse: "Ellipse", polygon: "Polygon", star: "Star", line: "Line" };
|
|
3339
3339
|
const style = this.styleFor(input.kind === "line");
|
|
3340
3340
|
const own = {};
|
|
@@ -3350,7 +3350,7 @@ var VectorEditorController = (_class3 = class {
|
|
|
3350
3350
|
}
|
|
3351
3351
|
/** Adds a path from SVG path data. Returns its id. */
|
|
3352
3352
|
addPath(d, style = {}, options = {}) {
|
|
3353
|
-
const subpaths =
|
|
3353
|
+
const subpaths = _chunkW3GXSUSQcjs.bezierToSubpaths.call(void 0, d);
|
|
3354
3354
|
const { name, ...own } = style;
|
|
3355
3355
|
const node = withStyle({ id: this.newId(), type: "path", name: _nullishCoalesce(name, () => ( "Path")), ...this.styleFor(false), subpaths }, own);
|
|
3356
3356
|
return this.addNode(node, { label: "Add Path", ...options });
|
|
@@ -3366,8 +3366,8 @@ var VectorEditorController = (_class3 = class {
|
|
|
3366
3366
|
for (const key of ["startArrow", "endArrow", "arrowAlign", "startArrowScale", "endArrowScale"]) if (d[key]) out[key] = d[key];
|
|
3367
3367
|
if (_optionalChain([d, 'access', _113 => _113.strokeWidthProfile, 'optionalAccess', _114 => _114.length])) out.strokeWidthProfile = d.strokeWidthProfile.map((p) => ({ ...p }));
|
|
3368
3368
|
let styled = out;
|
|
3369
|
-
if (Array.isArray(d.fills)) styled =
|
|
3370
|
-
if (Array.isArray(d.strokes)) styled =
|
|
3369
|
+
if (Array.isArray(d.fills)) styled = _chunkW3GXSUSQcjs.withVectorFills.call(void 0, styled, open ? [] : d.fills);
|
|
3370
|
+
if (Array.isArray(d.strokes)) styled = _chunkW3GXSUSQcjs.withVectorStrokes.call(void 0, styled, d.strokes);
|
|
3371
3371
|
return styled;
|
|
3372
3372
|
}
|
|
3373
3373
|
/** Merges `patch` into a node (paths take style and geometry; groups name / visibility / opacity). */
|
|
@@ -3384,7 +3384,7 @@ var VectorEditorController = (_class3 = class {
|
|
|
3384
3384
|
for (const id of ids) {
|
|
3385
3385
|
const node = this.getNode(id);
|
|
3386
3386
|
if (!node) return { ok: false, message: `There is no node "${id}".` };
|
|
3387
|
-
for (const p of
|
|
3387
|
+
for (const p of _chunkW3GXSUSQcjs.collectPathNodes.call(void 0, node)) targets.add(p.id);
|
|
3388
3388
|
}
|
|
3389
3389
|
if (!targets.size) return { ok: false, message: "Nothing is selected." };
|
|
3390
3390
|
this.change(_nullishCoalesce(options.label, () => ( "Change Style")), () => {
|
|
@@ -3401,13 +3401,13 @@ var VectorEditorController = (_class3 = class {
|
|
|
3401
3401
|
let points;
|
|
3402
3402
|
if (profile === null) points = [];
|
|
3403
3403
|
else if (typeof profile === "string") {
|
|
3404
|
-
const preset =
|
|
3404
|
+
const preset = _chunkW3GXSUSQcjs.widthProfilePreset.call(void 0, profile);
|
|
3405
3405
|
if (!preset) return { ok: false, message: `There is no width profile "${profile}".` };
|
|
3406
3406
|
points = preset;
|
|
3407
|
-
} else if (Array.isArray(profile)) points =
|
|
3407
|
+
} else if (Array.isArray(profile)) points = _chunkW3GXSUSQcjs.sanitizeWidthProfile.call(void 0, profile);
|
|
3408
3408
|
else {
|
|
3409
3409
|
const p = profile;
|
|
3410
|
-
points = p.taper || p.wave ?
|
|
3410
|
+
points = p.taper || p.wave ? _chunkW3GXSUSQcjs.generateWidthProfile.call(void 0, p) : [];
|
|
3411
3411
|
}
|
|
3412
3412
|
this.widthPoints = [];
|
|
3413
3413
|
this.widthEdit = null;
|
|
@@ -3438,7 +3438,7 @@ var VectorEditorController = (_class3 = class {
|
|
|
3438
3438
|
for (const id of ids) {
|
|
3439
3439
|
const node = this.getNode(id);
|
|
3440
3440
|
if (node && !node.locked) {
|
|
3441
|
-
for (const p of
|
|
3441
|
+
for (const p of _chunkW3GXSUSQcjs.collectPathNodes.call(void 0, node)) if (!p.locked) out.set(p.id, p);
|
|
3442
3442
|
}
|
|
3443
3443
|
}
|
|
3444
3444
|
return [...out.values()];
|
|
@@ -3456,12 +3456,12 @@ var VectorEditorController = (_class3 = class {
|
|
|
3456
3456
|
const next = /* @__PURE__ */ new Map();
|
|
3457
3457
|
let first = null;
|
|
3458
3458
|
for (const path of paths) {
|
|
3459
|
-
const paint =
|
|
3460
|
-
const base =
|
|
3461
|
-
const g =
|
|
3459
|
+
const paint = _chunkW3GXSUSQcjs.vectorTargetPaint.call(void 0, path, target, layer);
|
|
3460
|
+
const base = _chunkW3GXSUSQcjs.isVectorGradient.call(void 0, paint) ? paint : _chunkW3GXSUSQcjs.defaultVectorGradient.call(void 0, _nullishCoalesce(patch.type, () => ( "linear")), paint);
|
|
3461
|
+
const g = _chunkW3GXSUSQcjs.applyVectorGradientPatch.call(void 0, base, patch);
|
|
3462
3462
|
if (!g) return { ok: false, message: "That is not a valid gradient: it needs at least one stop with an offset and a colour." };
|
|
3463
3463
|
first ??= g;
|
|
3464
|
-
next.set(path.id,
|
|
3464
|
+
next.set(path.id, _chunkW3GXSUSQcjs.withVectorTargetPaint.call(void 0, path, target, layer, g));
|
|
3465
3465
|
}
|
|
3466
3466
|
this.change(_nullishCoalesce(options.label, () => ( "Gradient")), () => this.setDoc(mapTree(this.doc.nodes, (n) => _nullishCoalesce(next.get(n.id), () => ( n)))), options.merge);
|
|
3467
3467
|
const stops = _nullishCoalesce(_optionalChain([first, 'optionalAccess', _115 => _115.stops, 'access', _116 => _116.length]), () => ( 0));
|
|
@@ -3471,14 +3471,14 @@ var VectorEditorController = (_class3 = class {
|
|
|
3471
3471
|
/** Applies `fn` to every target gradient of the selection (paths whose paint is not a gradient are skipped). */
|
|
3472
3472
|
editGradients(label, fn, merge) {
|
|
3473
3473
|
const { target, layer } = this.gradientEdit;
|
|
3474
|
-
const paths = this.gradientPaths().filter((p) =>
|
|
3474
|
+
const paths = this.gradientPaths().filter((p) => _chunkW3GXSUSQcjs.isVectorGradient.call(void 0, _chunkW3GXSUSQcjs.vectorTargetPaint.call(void 0, p, target, layer)));
|
|
3475
3475
|
if (!paths.length) return { ok: false, message: "The selection has no gradient." };
|
|
3476
3476
|
const next = /* @__PURE__ */ new Map();
|
|
3477
3477
|
for (const path of paths) {
|
|
3478
|
-
const g =
|
|
3479
|
-
const stops = fn(
|
|
3478
|
+
const g = _chunkW3GXSUSQcjs.vectorTargetPaint.call(void 0, path, target, layer);
|
|
3479
|
+
const stops = fn(_chunkW3GXSUSQcjs.sortedVectorGradientStops.call(void 0, g));
|
|
3480
3480
|
if (!stops) return { ok: false, message: "A gradient keeps at least two stops." };
|
|
3481
|
-
next.set(path.id,
|
|
3481
|
+
next.set(path.id, _chunkW3GXSUSQcjs.withVectorTargetPaint.call(void 0, path, target, layer, { ...g, stops }));
|
|
3482
3482
|
}
|
|
3483
3483
|
this.change(label, () => this.setDoc(mapTree(this.doc.nodes, (n) => _nullishCoalesce(next.get(n.id), () => ( n)))), merge);
|
|
3484
3484
|
return { ok: true };
|
|
@@ -3506,7 +3506,7 @@ var VectorEditorController = (_class3 = class {
|
|
|
3506
3506
|
}
|
|
3507
3507
|
return out;
|
|
3508
3508
|
});
|
|
3509
|
-
if (patch.offset !== void 0 && Number.isFinite(patch.offset)) ({ stops: next, index: moved } =
|
|
3509
|
+
if (patch.offset !== void 0 && Number.isFinite(patch.offset)) ({ stops: next, index: moved } = _chunkW3GXSUSQcjs.moveVectorGradientStop.call(void 0, next, index, patch.offset));
|
|
3510
3510
|
return next;
|
|
3511
3511
|
},
|
|
3512
3512
|
options.merge
|
|
@@ -3519,8 +3519,8 @@ var VectorEditorController = (_class3 = class {
|
|
|
3519
3519
|
let index = 0;
|
|
3520
3520
|
const { target, layer } = this.gradientEdit;
|
|
3521
3521
|
const result = this.editGradients("Add Gradient Stop", (stops) => {
|
|
3522
|
-
const path = this.gradientPaths().find((p) =>
|
|
3523
|
-
const r =
|
|
3522
|
+
const path = this.gradientPaths().find((p) => _chunkW3GXSUSQcjs.isVectorGradient.call(void 0, _chunkW3GXSUSQcjs.vectorTargetPaint.call(void 0, p, target, layer)));
|
|
3523
|
+
const r = _chunkW3GXSUSQcjs.insertVectorGradientStop.call(void 0, { ..._chunkW3GXSUSQcjs.vectorTargetPaint.call(void 0, path, target, layer), stops }, offset);
|
|
3524
3524
|
index = r.index;
|
|
3525
3525
|
return r.stops;
|
|
3526
3526
|
});
|
|
@@ -3529,7 +3529,7 @@ var VectorEditorController = (_class3 = class {
|
|
|
3529
3529
|
}
|
|
3530
3530
|
/** Removes stop `index` of the selection's gradients (never below two stops). */
|
|
3531
3531
|
removeGradientStop(index) {
|
|
3532
|
-
const result = this.editGradients("Delete Gradient Stop", (stops) =>
|
|
3532
|
+
const result = this.editGradients("Delete Gradient Stop", (stops) => _chunkW3GXSUSQcjs.removeVectorGradientStop.call(void 0, stops, index));
|
|
3533
3533
|
if (result.ok) this.selectGradientStop(null);
|
|
3534
3534
|
return result;
|
|
3535
3535
|
}
|
|
@@ -3540,7 +3540,7 @@ var VectorEditorController = (_class3 = class {
|
|
|
3540
3540
|
/** `doc` with path `id`'s `target` paint replaced. */
|
|
3541
3541
|
withGradient(doc, id, target, g) {
|
|
3542
3542
|
const layer = this.gradientEdit.layer;
|
|
3543
|
-
return { ...doc, nodes: mapTree(doc.nodes, (n) => n.id === id && n.type === "path" ?
|
|
3543
|
+
return { ...doc, nodes: mapTree(doc.nodes, (n) => n.id === id && n.type === "path" ? _chunkW3GXSUSQcjs.withVectorTargetPaint.call(void 0, n, target, layer, g) : n) };
|
|
3544
3544
|
}
|
|
3545
3545
|
downGradient(screen, p, input) {
|
|
3546
3546
|
const before = this.snapshot();
|
|
@@ -3583,48 +3583,48 @@ var VectorEditorController = (_class3 = class {
|
|
|
3583
3583
|
const end = constrained(drag.startDoc, p);
|
|
3584
3584
|
let doc = base;
|
|
3585
3585
|
for (const id2 of drag.targets) {
|
|
3586
|
-
const node2 =
|
|
3586
|
+
const node2 = _chunkW3GXSUSQcjs.findVectorNode.call(void 0, base.nodes, id2);
|
|
3587
3587
|
if (!node2) continue;
|
|
3588
|
-
const paint =
|
|
3589
|
-
const g2 =
|
|
3590
|
-
doc = this.withGradient(doc, id2, target,
|
|
3588
|
+
const paint = _chunkW3GXSUSQcjs.vectorTargetPaint.call(void 0, node2, target, this.gradientEdit.layer);
|
|
3589
|
+
const g2 = _chunkW3GXSUSQcjs.isVectorGradient.call(void 0, paint) ? paint : _chunkW3GXSUSQcjs.defaultVectorGradient.call(void 0, "linear", paint);
|
|
3590
|
+
doc = this.withGradient(doc, id2, target, _chunkW3GXSUSQcjs.setVectorGradientVector.call(void 0, g2, _chunkJLYX4V57cjs.vectorPathLocalBounds.call(void 0, node2), this.toLocal(id2, drag.startDoc, base), this.toLocal(id2, end, base)));
|
|
3591
3591
|
}
|
|
3592
3592
|
this.doc = doc;
|
|
3593
3593
|
this.notify(true);
|
|
3594
3594
|
return;
|
|
3595
3595
|
}
|
|
3596
3596
|
const id = drag.nodeId;
|
|
3597
|
-
const node =
|
|
3598
|
-
const g =
|
|
3599
|
-
const bounds =
|
|
3597
|
+
const node = _chunkW3GXSUSQcjs.findVectorNode.call(void 0, base.nodes, id);
|
|
3598
|
+
const g = _chunkW3GXSUSQcjs.vectorTargetPaint.call(void 0, node, target, this.gradientEdit.layer);
|
|
3599
|
+
const bounds = _chunkJLYX4V57cjs.vectorPathLocalBounds.call(void 0, node);
|
|
3600
3600
|
const local = (q) => this.toLocal(id, q, base);
|
|
3601
3601
|
const part = drag.part;
|
|
3602
3602
|
let next = g;
|
|
3603
3603
|
if (part.kind === "handle") {
|
|
3604
3604
|
let to = p;
|
|
3605
3605
|
if (part.handle === "end" || part.handle === "radius") to = constrained(this.screenToDocument(drag.annotator.start), p);
|
|
3606
|
-
next =
|
|
3606
|
+
next = _chunkW3GXSUSQcjs.moveVectorGradientHandle.call(void 0, g, bounds, part.handle, local(to), local(drag.startDoc));
|
|
3607
3607
|
} else if (part.kind === "bar") {
|
|
3608
|
-
next =
|
|
3608
|
+
next = _chunkW3GXSUSQcjs.moveVectorGradientHandle.call(void 0, g, bounds, "start", local(p), local(drag.startDoc));
|
|
3609
3609
|
} else {
|
|
3610
3610
|
const a = drag.annotator;
|
|
3611
3611
|
const pos = vectorGradientBarPosition(a, screen);
|
|
3612
|
-
const stops =
|
|
3612
|
+
const stops = _chunkW3GXSUSQcjs.sortedVectorGradientStops.call(void 0, g);
|
|
3613
3613
|
if (part.kind === "stop") {
|
|
3614
3614
|
const off = Math.abs(pos.across - VECTOR_GRADIENT_STOP_GAP) > VECTOR_GRADIENT_OFF_BAR;
|
|
3615
|
-
const removed = off ?
|
|
3615
|
+
const removed = off ? _chunkW3GXSUSQcjs.removeVectorGradientStop.call(void 0, stops, part.index) : null;
|
|
3616
3616
|
if (removed) {
|
|
3617
3617
|
next = { ...g, stops: removed };
|
|
3618
3618
|
drag.stop = null;
|
|
3619
3619
|
} else {
|
|
3620
|
-
const r =
|
|
3620
|
+
const r = _chunkW3GXSUSQcjs.moveVectorGradientStop.call(void 0, stops, part.index, Math.min(1, Math.max(0, pos.offset)));
|
|
3621
3621
|
next = { ...g, stops: r.stops };
|
|
3622
3622
|
drag.stop = r.index;
|
|
3623
3623
|
}
|
|
3624
3624
|
this.interaction = { type: "gradient", part: "stop", ...removed ? { removing: true } : {} };
|
|
3625
3625
|
this.gradientEdit = { ...this.gradientEdit, stop: drag.stop };
|
|
3626
3626
|
} else {
|
|
3627
|
-
const m =
|
|
3627
|
+
const m = _chunkW3GXSUSQcjs.vectorGradientMidpointFromPosition.call(void 0, stops, part.index, pos.offset);
|
|
3628
3628
|
if (m !== null) next = { ...g, stops: stops.map((s, i) => i !== part.index ? s : Math.abs(m - 0.5) < 1e-3 ? (({ midpoint: _m, ...rest }) => rest)(s) : { ...s, midpoint: m }) };
|
|
3629
3629
|
}
|
|
3630
3630
|
}
|
|
@@ -3663,7 +3663,7 @@ var VectorEditorController = (_class3 = class {
|
|
|
3663
3663
|
this.change(count > 1 ? "Delete Width Points" : "Delete Width Point", () => {
|
|
3664
3664
|
for (const [id, indices] of byNode) {
|
|
3665
3665
|
const node = this.getNode(id);
|
|
3666
|
-
const rest =
|
|
3666
|
+
const rest = _chunkW3GXSUSQcjs.removeWidthPoints.call(void 0, _chunkW3GXSUSQcjs.sanitizeWidthProfile.call(void 0, node.strokeWidthProfile), indices);
|
|
3667
3667
|
this.replaceNode(id, withStyle(node, { strokeWidthProfile: rest.length ? rest : null }));
|
|
3668
3668
|
}
|
|
3669
3669
|
});
|
|
@@ -3699,25 +3699,25 @@ var VectorEditorController = (_class3 = class {
|
|
|
3699
3699
|
const left = num(values.left);
|
|
3700
3700
|
const right = num(values.right);
|
|
3701
3701
|
const scale = (w) => w === void 0 ? void 0 : Math.max(0, w) / g.unit;
|
|
3702
|
-
const profile =
|
|
3702
|
+
const profile = _chunkW3GXSUSQcjs.sanitizeWidthProfile.call(void 0, node.strokeWidthProfile);
|
|
3703
3703
|
let points;
|
|
3704
3704
|
let index;
|
|
3705
3705
|
const existing = _nullishCoalesce(target.index, () => ( null));
|
|
3706
3706
|
if (existing === null) {
|
|
3707
3707
|
if (t === void 0) return { ok: false, message: "A new width point needs a position t." };
|
|
3708
|
-
if (profile.length >=
|
|
3709
|
-
({ points, index } =
|
|
3708
|
+
if (profile.length >= _chunkW3GXSUSQcjs.VECTOR_WIDTH_PROFILE_MAX_POINTS) return { ok: false, message: "The profile has too many width points." };
|
|
3709
|
+
({ points, index } = _chunkW3GXSUSQcjs.insertWidthPoint.call(void 0, profile.length ? profile : null, t, { left: scale(left), right: scale(right) }, { step: true }));
|
|
3710
3710
|
} else {
|
|
3711
3711
|
const p = profile[existing];
|
|
3712
3712
|
if (!p) return { ok: false, message: "There is no such width point." };
|
|
3713
3713
|
const sides2 = { left: _nullishCoalesce(scale(left), () => ( p.left)), right: _nullishCoalesce(scale(right), () => ( p.right)) };
|
|
3714
3714
|
const tt = t === void 0 ? p.t : Math.min(Math.max(t, 0), 1);
|
|
3715
|
-
if (Math.abs(tt - p.t) <=
|
|
3716
|
-
points =
|
|
3715
|
+
if (Math.abs(tt - p.t) <= _chunkW3GXSUSQcjs.VECTOR_WIDTH_SAME_T) {
|
|
3716
|
+
points = _chunkW3GXSUSQcjs.setWidthPoint.call(void 0, profile, existing, sides2);
|
|
3717
3717
|
index = existing;
|
|
3718
3718
|
} else {
|
|
3719
|
-
const rest =
|
|
3720
|
-
if (rest.length) ({ points, index } =
|
|
3719
|
+
const rest = _chunkW3GXSUSQcjs.removeWidthPoints.call(void 0, profile, [existing]);
|
|
3720
|
+
if (rest.length) ({ points, index } = _chunkW3GXSUSQcjs.insertWidthPoint.call(void 0, rest, tt, sides2, { step: true }));
|
|
3721
3721
|
else {
|
|
3722
3722
|
points = [{ t: tt, ...sides2 }];
|
|
3723
3723
|
index = 0;
|
|
@@ -3765,15 +3765,15 @@ var VectorEditorController = (_class3 = class {
|
|
|
3765
3765
|
if (_optionalChain([node, 'optionalAccess', _134 => _134.type]) !== "path") return null;
|
|
3766
3766
|
const g = vectorStrokeWidthGeometry(node);
|
|
3767
3767
|
if (!g) return null;
|
|
3768
|
-
const profile =
|
|
3768
|
+
const profile = _chunkW3GXSUSQcjs.sanitizeWidthProfile.call(void 0, node.strokeWidthProfile);
|
|
3769
3769
|
const p = index === null ? null : profile[index];
|
|
3770
3770
|
if (index !== null && !p) return null;
|
|
3771
3771
|
const tt = p ? p.t : Math.min(Math.max(_nullishCoalesce(t, () => ( 0)), 0), 1);
|
|
3772
|
-
const sides2 = _nullishCoalesce(p, () => (
|
|
3772
|
+
const sides2 = _nullishCoalesce(p, () => ( _chunkW3GXSUSQcjs.widthProfileAt.call(void 0, profile.length ? profile : null, tt)));
|
|
3773
3773
|
const sp = Math.min(Math.max(0, subpath), Math.max(0, node.subpaths.length - 1));
|
|
3774
|
-
const at =
|
|
3774
|
+
const at = _chunkW3GXSUSQcjs.strokePositionPoint.call(void 0, g.line, sp, tt);
|
|
3775
3775
|
const round = (v) => Math.round(v * 1e6) / 1e6;
|
|
3776
|
-
const q = at ?
|
|
3776
|
+
const q = at ? _chunkW3GXSUSQcjs.applyMatrix.call(void 0, this.worldOf(nodeId), { x: at.point[0], y: at.point[1] }) : { x: 0, y: 0 };
|
|
3777
3777
|
const point = { x: round(q.x), y: round(q.y) };
|
|
3778
3778
|
return { nodeId, subpath: sp, index, t: round(tt), left: round(sides2.left * g.unit), right: round(sides2.right * g.unit), point };
|
|
3779
3779
|
}
|
|
@@ -3787,7 +3787,7 @@ var VectorEditorController = (_class3 = class {
|
|
|
3787
3787
|
const refs = this.cornerTargets(options);
|
|
3788
3788
|
if (!refs.length) return { ok: false, message: "Nothing is selected." };
|
|
3789
3789
|
this.change(radius > 0 ? "Corner Radius" : "Sharpen Corners", () => {
|
|
3790
|
-
this.doc = this.updateAnchors(this.doc, refs, (a) =>
|
|
3790
|
+
this.doc = this.updateAnchors(this.doc, refs, (a) => _chunkW3GXSUSQcjs.setAnchorCorner.call(void 0, a, radius, options.kind));
|
|
3791
3791
|
});
|
|
3792
3792
|
return { ok: true };
|
|
3793
3793
|
}
|
|
@@ -3796,7 +3796,7 @@ var VectorEditorController = (_class3 = class {
|
|
|
3796
3796
|
const refs = this.cornerTargets(options);
|
|
3797
3797
|
if (!refs.length) return { ok: false, message: "Nothing is selected." };
|
|
3798
3798
|
this.change("Corner Kind", () => {
|
|
3799
|
-
this.doc = this.updateAnchors(this.doc, refs, (a) =>
|
|
3799
|
+
this.doc = this.updateAnchors(this.doc, refs, (a) => _chunkW3GXSUSQcjs.setAnchorCorner.call(void 0, a, _nullishCoalesce(_optionalChain([a, 'access', _135 => _135.corner, 'optionalAccess', _136 => _136.radius]), () => ( 0)), kind));
|
|
3800
3800
|
});
|
|
3801
3801
|
return { ok: true };
|
|
3802
3802
|
}
|
|
@@ -3808,7 +3808,7 @@ var VectorEditorController = (_class3 = class {
|
|
|
3808
3808
|
for (const id of _nullishCoalesce(options.ids, () => ( this.selection))) {
|
|
3809
3809
|
const node = this.getNode(id);
|
|
3810
3810
|
if (!node) continue;
|
|
3811
|
-
for (const p of
|
|
3811
|
+
for (const p of _chunkW3GXSUSQcjs.collectPathNodes.call(void 0, node)) {
|
|
3812
3812
|
if (p.locked) continue;
|
|
3813
3813
|
p.subpaths.forEach((sp, s) => sp.anchors.forEach((_, i) => out.push({ nodeId: p.id, subpath: s, index: i })));
|
|
3814
3814
|
}
|
|
@@ -3822,25 +3822,25 @@ var VectorEditorController = (_class3 = class {
|
|
|
3822
3822
|
*/
|
|
3823
3823
|
outlineStroke(options = {}) {
|
|
3824
3824
|
const roots = _nullishCoalesce(options.ids, () => ( this.selectedRoots()));
|
|
3825
|
-
const strokesOf = (p) =>
|
|
3825
|
+
const strokesOf = (p) => _chunkW3GXSUSQcjs.vectorPaintLayerNodes.call(void 0, p).filter((l) => l.kind === "stroke" && l.drawn && (_nullishCoalesce(l.node.strokeWidth, () => ( 1))) > 0);
|
|
3826
3826
|
const paths = [];
|
|
3827
3827
|
for (const id of roots) {
|
|
3828
3828
|
const node = this.getNode(id);
|
|
3829
3829
|
if (node) {
|
|
3830
|
-
for (const p of
|
|
3830
|
+
for (const p of _chunkW3GXSUSQcjs.collectPathNodes.call(void 0, node)) if (!p.locked && strokesOf(p).length) paths.push(p);
|
|
3831
3831
|
}
|
|
3832
3832
|
}
|
|
3833
3833
|
if (!paths.length) return [];
|
|
3834
3834
|
const created = [];
|
|
3835
3835
|
const replace = /* @__PURE__ */ new Map();
|
|
3836
3836
|
for (const p of paths) {
|
|
3837
|
-
const { effects, ...rest } =
|
|
3838
|
-
const unstroked =
|
|
3839
|
-
for (const key of
|
|
3840
|
-
const list =
|
|
3837
|
+
const { effects, ...rest } = _chunkW3GXSUSQcjs.cloneVectorNode.call(void 0, p);
|
|
3838
|
+
const unstroked = _chunkW3GXSUSQcjs.withVectorStrokes.call(void 0, rest, []);
|
|
3839
|
+
for (const key of _chunkW3GXSUSQcjs.VECTOR_STROKE_SETTING_KEYS) delete unstroked[key];
|
|
3840
|
+
const list = _chunkW3GXSUSQcjs.vectorFills.call(void 0, p).length ? [{ ...unstroked, ...effects ? { effects } : {} }] : [];
|
|
3841
3841
|
const layers = strokesOf(p);
|
|
3842
3842
|
for (const l of layers) {
|
|
3843
|
-
const outline =
|
|
3843
|
+
const outline = _chunkW3GXSUSQcjs.bezierToSubpaths.call(void 0, _chunkW3GXSUSQcjs.vectorStrokeOutlinePath.call(void 0, _chunkW3GXSUSQcjs.vectorAppearanceOutline.call(void 0, p), l.node));
|
|
3844
3844
|
if (!outline.length) continue;
|
|
3845
3845
|
const id = this.newId();
|
|
3846
3846
|
const { strokes: _s, fills: _f, ...plain2 } = unstroked;
|
|
@@ -3848,7 +3848,7 @@ var VectorEditorController = (_class3 = class {
|
|
|
3848
3848
|
const fill = { paint: l.layer.paint };
|
|
3849
3849
|
if (l.layer.opacity !== void 0) fill.opacity = l.layer.opacity;
|
|
3850
3850
|
if (l.layer.blendMode) fill.blendMode = l.layer.blendMode;
|
|
3851
|
-
list.push(
|
|
3851
|
+
list.push(_chunkW3GXSUSQcjs.withVectorFills.call(void 0, { ...plain2, id, name, subpaths: outline, stroke: null, fillRule: "nonzero" }, [fill]));
|
|
3852
3852
|
created.push(id);
|
|
3853
3853
|
}
|
|
3854
3854
|
replace.set(p.id, list);
|
|
@@ -3875,7 +3875,7 @@ var VectorEditorController = (_class3 = class {
|
|
|
3875
3875
|
for (const id of list) {
|
|
3876
3876
|
const node = this.getNode(id);
|
|
3877
3877
|
if (!node) return `There is no node "${id}".`;
|
|
3878
|
-
for (const p of
|
|
3878
|
+
for (const p of _chunkW3GXSUSQcjs.collectPathNodes.call(void 0, node)) if (!p.blendStep) out.set(p.id, p);
|
|
3879
3879
|
}
|
|
3880
3880
|
if (!out.size) return "The selection has no paths (fills and strokes belong to paths).";
|
|
3881
3881
|
return [...out.values()];
|
|
@@ -3886,10 +3886,10 @@ var VectorEditorController = (_class3 = class {
|
|
|
3886
3886
|
if (typeof targets === "string") return { ok: false, message: targets };
|
|
3887
3887
|
const next = /* @__PURE__ */ new Map();
|
|
3888
3888
|
for (const path of targets) {
|
|
3889
|
-
const stack = kind === "fill" ?
|
|
3889
|
+
const stack = kind === "fill" ? _chunkW3GXSUSQcjs.vectorFills.call(void 0, path) : _chunkW3GXSUSQcjs.vectorStrokes.call(void 0, path);
|
|
3890
3890
|
const result = fn(stack.map((l) => ({ ...l })), path);
|
|
3891
3891
|
if (typeof result === "string") return { ok: false, message: result };
|
|
3892
|
-
next.set(path.id, kind === "fill" ?
|
|
3892
|
+
next.set(path.id, kind === "fill" ? _chunkW3GXSUSQcjs.withVectorFills.call(void 0, path, result) : _chunkW3GXSUSQcjs.withVectorStrokes.call(void 0, path, result));
|
|
3893
3893
|
}
|
|
3894
3894
|
this.change(label, () => this.setDoc(mapTree(this.doc.nodes, (n) => _nullishCoalesce(next.get(n.id), () => ( n)))), merge);
|
|
3895
3895
|
return { ok: true };
|
|
@@ -3905,7 +3905,7 @@ var VectorEditorController = (_class3 = class {
|
|
|
3905
3905
|
const paint = patch.paint;
|
|
3906
3906
|
if (paint === null || typeof paint === "string" && paint.trim()) set.paint = paint === null ? null : paint.trim();
|
|
3907
3907
|
else {
|
|
3908
|
-
const g =
|
|
3908
|
+
const g = _chunkW3GXSUSQcjs.sanitizeVectorGradient.call(void 0, paint);
|
|
3909
3909
|
if (!g) return "paint must be a CSS colour, a gradient { type, stops: [{ offset, color }] } or null.";
|
|
3910
3910
|
set.paint = g;
|
|
3911
3911
|
}
|
|
@@ -3917,7 +3917,7 @@ var VectorEditorController = (_class3 = class {
|
|
|
3917
3917
|
else unset.push("opacity");
|
|
3918
3918
|
}
|
|
3919
3919
|
if (patch.blendMode !== void 0) {
|
|
3920
|
-
if (!
|
|
3920
|
+
if (!_chunkW3GXSUSQcjs.isVectorBlendMode.call(void 0, patch.blendMode)) return `Unknown blend mode "${String(patch.blendMode)}". Use one of: ${_chunkW3GXSUSQcjs.VECTOR_BLEND_MODES.join(", ")}.`;
|
|
3921
3921
|
if (patch.blendMode !== "normal") set.blendMode = patch.blendMode;
|
|
3922
3922
|
else unset.push("blendMode");
|
|
3923
3923
|
}
|
|
@@ -3927,8 +3927,8 @@ var VectorEditorController = (_class3 = class {
|
|
|
3927
3927
|
else set.visible = false;
|
|
3928
3928
|
}
|
|
3929
3929
|
if (kind === "stroke") {
|
|
3930
|
-
const settings =
|
|
3931
|
-
for (const key of
|
|
3930
|
+
const settings = _chunkW3GXSUSQcjs.sanitizeVectorStrokeSettings.call(void 0, patch);
|
|
3931
|
+
for (const key of _chunkW3GXSUSQcjs.VECTOR_STROKE_SETTING_KEYS) {
|
|
3932
3932
|
if (!(key in patch) || patch[key] === void 0) continue;
|
|
3933
3933
|
if (patch[key] === null || key === "strokeDasharray" && Array.isArray(patch[key]) && !patch[key].length) unset.push(key);
|
|
3934
3934
|
else if (settings[key] === void 0) return `Invalid ${key}: ${JSON.stringify(patch[key])}.`;
|
|
@@ -3946,7 +3946,7 @@ var VectorEditorController = (_class3 = class {
|
|
|
3946
3946
|
const patch = this.layerPatch(kind, layer);
|
|
3947
3947
|
if (typeof patch === "string") return { ok: false, message: patch };
|
|
3948
3948
|
return this.editStacks(kind, options.ids, kind === "fill" ? "Add Fill" : "Add Stroke", (stack, path) => {
|
|
3949
|
-
const base = kind === "fill" ? { paint: "#808080" } :
|
|
3949
|
+
const base = kind === "fill" ? { paint: "#808080" } : _chunkW3GXSUSQcjs.newVectorStrokeLayer.call(void 0, path, {});
|
|
3950
3950
|
const added = { ...base, ...patch.set };
|
|
3951
3951
|
for (const key of patch.unset) delete added[key];
|
|
3952
3952
|
const at = options.index === void 0 ? stack.length : Math.min(stack.length, Math.max(0, Math.round(options.index)));
|
|
@@ -3997,12 +3997,12 @@ var VectorEditorController = (_class3 = class {
|
|
|
3997
3997
|
}
|
|
3998
3998
|
/** Replaces the whole fill or stroke stack of the selected (or given) paths (malformed layers are dropped). */
|
|
3999
3999
|
setPaintLayers(kind, layers, options = {}) {
|
|
4000
|
-
const clean = kind === "fill" ?
|
|
4000
|
+
const clean = kind === "fill" ? _chunkW3GXSUSQcjs.sanitizeVectorFills.call(void 0, layers) : _chunkW3GXSUSQcjs.sanitizeVectorStrokes.call(void 0, layers);
|
|
4001
4001
|
return this.editStacks(kind, options.ids, kind === "fill" ? "Set Fills" : "Set Strokes", () => clean);
|
|
4002
4002
|
}
|
|
4003
4003
|
/** Sets the blend mode of the selected (or given) nodes (paths or groups); `normal` removes it. */
|
|
4004
4004
|
setBlendMode(mode, options = {}) {
|
|
4005
|
-
if (!
|
|
4005
|
+
if (!_chunkW3GXSUSQcjs.isVectorBlendMode.call(void 0, mode)) return { ok: false, message: `Unknown blend mode "${String(mode)}". Use one of: ${_chunkW3GXSUSQcjs.VECTOR_BLEND_MODES.join(", ")}.` };
|
|
4006
4006
|
const ids = _nullishCoalesce(options.ids, () => ( this.selectedRoots()));
|
|
4007
4007
|
if (!ids.length) return { ok: false, message: "Nothing is selected." };
|
|
4008
4008
|
for (const id of ids) if (!this.getNode(id)) return { ok: false, message: `There is no node "${id}".` };
|
|
@@ -4025,7 +4025,7 @@ var VectorEditorController = (_class3 = class {
|
|
|
4025
4025
|
* ids (one per node, in order), empty for an unknown type or nothing selected.
|
|
4026
4026
|
*/
|
|
4027
4027
|
addFilter(type, options = {}) {
|
|
4028
|
-
if (!
|
|
4028
|
+
if (!_chunkW3GXSUSQcjs.isVectorFilterType.call(void 0, type)) return [];
|
|
4029
4029
|
const targets = this.effectTargets(options.ids);
|
|
4030
4030
|
if (!targets.length) return [];
|
|
4031
4031
|
const created = [];
|
|
@@ -4034,12 +4034,12 @@ var VectorEditorController = (_class3 = class {
|
|
|
4034
4034
|
const list = _nullishCoalesce(node.filters, () => ( []));
|
|
4035
4035
|
let k = list.length + 1;
|
|
4036
4036
|
while (list.some((f) => f.id === `filter${k}`)) k++;
|
|
4037
|
-
const filter =
|
|
4037
|
+
const filter = _chunkW3GXSUSQcjs.createVectorFilter.call(void 0, type, `filter${k}`, options.params);
|
|
4038
4038
|
const at = options.index === void 0 ? list.length : Math.min(list.length, Math.max(0, Math.round(options.index)));
|
|
4039
4039
|
next.set(node.id, { ...node, filters: [...list.slice(0, at), filter, ...list.slice(at)] });
|
|
4040
4040
|
created.push(filter.id);
|
|
4041
4041
|
}
|
|
4042
|
-
this.change(`Add ${
|
|
4042
|
+
this.change(`Add ${_chunkW3GXSUSQcjs.VECTOR_FILTER_LABELS[type]}`, () => this.setDoc(mapTree(this.doc.nodes, (n) => _nullishCoalesce(next.get(n.id), () => ( n)))));
|
|
4043
4043
|
return created;
|
|
4044
4044
|
}
|
|
4045
4045
|
editFilters(nodeId, label, fn, merge) {
|
|
@@ -4059,12 +4059,12 @@ var VectorEditorController = (_class3 = class {
|
|
|
4059
4059
|
const current = _optionalChain([this, 'access', _137 => _137.getNode, 'call', _138 => _138(nodeId), 'optionalAccess', _139 => _139.filters, 'optionalAccess', _140 => _140.find, 'call', _141 => _141((f) => f.id === filterId)]);
|
|
4060
4060
|
return this.editFilters(
|
|
4061
4061
|
nodeId,
|
|
4062
|
-
`Edit ${current ?
|
|
4062
|
+
`Edit ${current ? _chunkW3GXSUSQcjs.VECTOR_FILTER_LABELS[current.type] : "Filter"}`,
|
|
4063
4063
|
(list) => {
|
|
4064
4064
|
const i = list.findIndex((f2) => f2.id === filterId);
|
|
4065
4065
|
if (i < 0) return `Node "${nodeId}" has no filter "${filterId}".`;
|
|
4066
4066
|
const f = list[i];
|
|
4067
|
-
const params = patch.params ?
|
|
4067
|
+
const params = patch.params ? _chunkW3GXSUSQcjs.normalizeVectorFilterParams.call(void 0, f.type, patch.params, f.params) : f.params;
|
|
4068
4068
|
const next = { ...f, params, ...patch.enabled !== void 0 ? { enabled: patch.enabled } : {} };
|
|
4069
4069
|
if (next.enabled !== false) delete next.enabled;
|
|
4070
4070
|
return list.map((x, j) => j === i ? next : x);
|
|
@@ -4101,7 +4101,7 @@ var VectorEditorController = (_class3 = class {
|
|
|
4101
4101
|
*/
|
|
4102
4102
|
addEffect(type, options = {}) {
|
|
4103
4103
|
const targets = this.effectTargets(options.ids);
|
|
4104
|
-
if (!targets.length || !
|
|
4104
|
+
if (!targets.length || !_chunkW3GXSUSQcjs.createVectorEffect.call(void 0, type, "")) return [];
|
|
4105
4105
|
const created = [];
|
|
4106
4106
|
const next = /* @__PURE__ */ new Map();
|
|
4107
4107
|
for (const node of targets) {
|
|
@@ -4110,15 +4110,15 @@ var VectorEditorController = (_class3 = class {
|
|
|
4110
4110
|
while (list.some((e) => e.id === `fx${k}`)) k++;
|
|
4111
4111
|
const params = { ..._nullishCoalesce(options.params, () => ( {})) };
|
|
4112
4112
|
if (type === "repeater" && params.position === void 0) {
|
|
4113
|
-
const b = _chunkXGD3FSNCcjs.bezierPathBounds.call(void 0,
|
|
4113
|
+
const b = _chunkXGD3FSNCcjs.bezierPathBounds.call(void 0, _chunkW3GXSUSQcjs.vectorAppearanceOutline.call(void 0, node));
|
|
4114
4114
|
if (b && b.maxX - b.minX > 0) params.position = { x: Math.round((b.maxX - b.minX) * 1.25 * 100) / 100, y: 0 };
|
|
4115
4115
|
}
|
|
4116
|
-
const effect =
|
|
4116
|
+
const effect = _chunkW3GXSUSQcjs.createVectorEffect.call(void 0, type, `fx${k}`, params);
|
|
4117
4117
|
const at = options.index === void 0 ? list.length : Math.min(list.length, Math.max(0, Math.round(options.index)));
|
|
4118
4118
|
next.set(node.id, { ...node, effects: [...list.slice(0, at), effect, ...list.slice(at)] });
|
|
4119
4119
|
created.push(effect.id);
|
|
4120
4120
|
}
|
|
4121
|
-
this.change(`Add ${
|
|
4121
|
+
this.change(`Add ${_chunkW3GXSUSQcjs.VECTOR_EFFECT_LABELS[type]}`, () => this.setDoc(mapTree(this.doc.nodes, (n) => _nullishCoalesce(next.get(n.id), () => ( n)))));
|
|
4122
4122
|
return created;
|
|
4123
4123
|
}
|
|
4124
4124
|
editEffects(nodeId, label, fn, merge) {
|
|
@@ -4138,7 +4138,7 @@ var VectorEditorController = (_class3 = class {
|
|
|
4138
4138
|
const merge = options.merge === true ? `effect:${nodeId}:${effectId}` : options.merge || void 0;
|
|
4139
4139
|
const node = this.getNode(nodeId);
|
|
4140
4140
|
const current = _optionalChain([node, 'optionalAccess', _142 => _142.effects, 'optionalAccess', _143 => _143.find, 'call', _144 => _144((e) => e.id === effectId)]);
|
|
4141
|
-
const label = current ? _nullishCoalesce(
|
|
4141
|
+
const label = current ? _nullishCoalesce(_chunkW3GXSUSQcjs.VECTOR_EFFECT_LABELS[current.type], () => ( "Effect")) : "Effect";
|
|
4142
4142
|
return this.editEffects(
|
|
4143
4143
|
nodeId,
|
|
4144
4144
|
`Edit ${label}`,
|
|
@@ -4147,7 +4147,7 @@ var VectorEditorController = (_class3 = class {
|
|
|
4147
4147
|
if (i < 0) return `Node "${nodeId}" has no effect "${effectId}".`;
|
|
4148
4148
|
const e = list[i];
|
|
4149
4149
|
const raw = patch.params && e.type === "envelope" && node ? this.envelopeParams(node, e, patch.params) : patch.params;
|
|
4150
|
-
const params = raw ?
|
|
4150
|
+
const params = raw ? _chunkW3GXSUSQcjs.normalizeVectorEffectParams.call(void 0, e.type, raw, e.params) : e.params;
|
|
4151
4151
|
const next = { ...e, params, ...patch.enabled !== void 0 ? { enabled: patch.enabled } : {} };
|
|
4152
4152
|
if (next.enabled !== false) delete next.enabled;
|
|
4153
4153
|
return list.map((x, j) => j === i ? next : x);
|
|
@@ -4178,16 +4178,16 @@ var VectorEditorController = (_class3 = class {
|
|
|
4178
4178
|
* nodes (empty when none was live).
|
|
4179
4179
|
*/
|
|
4180
4180
|
expandAppearance(options = {}) {
|
|
4181
|
-
const roots = (_nullishCoalesce(options.ids, () => ( this.selectedRoots()))).map((id) => this.getNode(id)).filter((n) => !!n &&
|
|
4181
|
+
const roots = (_nullishCoalesce(options.ids, () => ( this.selectedRoots()))).map((id) => this.getNode(id)).filter((n) => !!n && _chunkW3GXSUSQcjs.hasVectorAppearance.call(void 0, n));
|
|
4182
4182
|
if (!roots.length) return [];
|
|
4183
4183
|
const fresh = (n) => {
|
|
4184
4184
|
const id = n.id.includes("~fx") ? this.newId() : n.id;
|
|
4185
4185
|
return n.type === "group" ? { ...n, id, children: n.children.map(fresh) } : { ...n, id };
|
|
4186
4186
|
};
|
|
4187
4187
|
const bake = (n) => {
|
|
4188
|
-
if (!
|
|
4189
|
-
if (!
|
|
4190
|
-
let e =
|
|
4188
|
+
if (!_chunkW3GXSUSQcjs.hasVectorAppearance.call(void 0, n)) return n;
|
|
4189
|
+
if (!_chunkW3GXSUSQcjs.hasOwnVectorAppearance.call(void 0, n)) return { ...n, children: n.children.map(bake) };
|
|
4190
|
+
let e = _chunkW3GXSUSQcjs.expandVectorAppearance.call(void 0, n);
|
|
4191
4191
|
if (e.type === "group" && e.children.length === 1 && e.children[0].type === "path") {
|
|
4192
4192
|
const { id: _id, opacity, name, ...child } = e.children[0];
|
|
4193
4193
|
const k = (_nullishCoalesce(e.opacity, () => ( 1))) * (_nullishCoalesce(opacity, () => ( 1)));
|
|
@@ -4222,7 +4222,7 @@ var VectorEditorController = (_class3 = class {
|
|
|
4222
4222
|
const drop = new Set(ids.filter((id) => this.getNode(id)));
|
|
4223
4223
|
if (!drop.size) return { ok: false, message: "Nothing to delete." };
|
|
4224
4224
|
this.change(_nullishCoalesce(options.label, () => ( "Delete")), () => {
|
|
4225
|
-
this.setDoc(mapTree(this.doc.nodes, (n) => drop.has(n.id) ? null :
|
|
4225
|
+
this.setDoc(mapTree(this.doc.nodes, (n) => drop.has(n.id) ? null : _chunkW3GXSUSQcjs.isVectorMaskGroup.call(void 0, n) && drop.has(n.children[0].id) ? { ...n, mask: null } : n));
|
|
4226
4226
|
this.selection = this.selection.filter((id) => !drop.has(id) && this.getNode(id));
|
|
4227
4227
|
this.anchors = this.anchors.filter((r) => getAnchor(this.doc, r));
|
|
4228
4228
|
if (this.editingId && !this.getNode(this.editingId)) this.editingId = null;
|
|
@@ -4270,11 +4270,11 @@ var VectorEditorController = (_class3 = class {
|
|
|
4270
4270
|
selectedRoots() {
|
|
4271
4271
|
return this.selection.filter((id) => {
|
|
4272
4272
|
let covered = false;
|
|
4273
|
-
const loc =
|
|
4273
|
+
const loc = _chunkW3GXSUSQcjs.locateVectorNode.call(void 0, this.doc.nodes, id);
|
|
4274
4274
|
let parent = _nullishCoalesce(_optionalChain([loc, 'optionalAccess', _145 => _145.parent]), () => ( null));
|
|
4275
4275
|
while (parent) {
|
|
4276
4276
|
if (this.selection.includes(parent.id)) covered = true;
|
|
4277
|
-
parent = _nullishCoalesce(_optionalChain([
|
|
4277
|
+
parent = _nullishCoalesce(_optionalChain([_chunkW3GXSUSQcjs.locateVectorNode.call(void 0, this.doc.nodes, parent.id), 'optionalAccess', _146 => _146.parent]), () => ( null));
|
|
4278
4278
|
}
|
|
4279
4279
|
return !covered;
|
|
4280
4280
|
});
|
|
@@ -4285,12 +4285,12 @@ var VectorEditorController = (_class3 = class {
|
|
|
4285
4285
|
/** `m`, given in a frame rotated by `angle`, as a document-space matrix. */
|
|
4286
4286
|
inFrame(angle, m) {
|
|
4287
4287
|
if (!angle) return m;
|
|
4288
|
-
return
|
|
4288
|
+
return _chunkW3GXSUSQcjs.multiplyMatrices.call(void 0, _chunkW3GXSUSQcjs.multiplyMatrices.call(void 0, _chunkW3GXSUSQcjs.rotateMatrix.call(void 0, -angle), m), _chunkW3GXSUSQcjs.rotateMatrix.call(void 0, angle));
|
|
4289
4289
|
}
|
|
4290
4290
|
/** The selection frame's corners in document space, clockwise from the top left. */
|
|
4291
4291
|
frameCorners(frame) {
|
|
4292
|
-
const rot =
|
|
4293
|
-
return vectorBoxCorners(frame).map((c) => frame.angle ?
|
|
4292
|
+
const rot = _chunkW3GXSUSQcjs.rotateMatrix.call(void 0, frame.angle);
|
|
4293
|
+
return vectorBoxCorners(frame).map((c) => frame.angle ? _chunkW3GXSUSQcjs.applyMatrix.call(void 0, rot, c) : c);
|
|
4294
4294
|
}
|
|
4295
4295
|
/** `doc` with nodes `ids` sent through `f` (a map of document space), each in its own space (see `distortVectorNode`). */
|
|
4296
4296
|
distorted(doc, ids, f, tolerance = VECTOR_DISTORT_TOLERANCE) {
|
|
@@ -4300,7 +4300,7 @@ var VectorEditorController = (_class3 = class {
|
|
|
4300
4300
|
let next = n;
|
|
4301
4301
|
if (ids.has(n.id) && !n.locked) next = distortVectorNode(n, parent, f, tolerance);
|
|
4302
4302
|
else if (n.type === "group") {
|
|
4303
|
-
const children = visit(n.children,
|
|
4303
|
+
const children = visit(n.children, _chunkW3GXSUSQcjs.multiplyMatrices.call(void 0, _chunkW3GXSUSQcjs.nodeMatrix.call(void 0, n), parent));
|
|
4304
4304
|
if (children !== n.children) next = { ...n, children };
|
|
4305
4305
|
}
|
|
4306
4306
|
if (next !== n) changed = true;
|
|
@@ -4308,7 +4308,7 @@ var VectorEditorController = (_class3 = class {
|
|
|
4308
4308
|
});
|
|
4309
4309
|
return changed ? out : list;
|
|
4310
4310
|
};
|
|
4311
|
-
const nodes = visit(doc.nodes,
|
|
4311
|
+
const nodes = visit(doc.nodes, _chunkW3GXSUSQcjs.IDENTITY_MATRIX);
|
|
4312
4312
|
return nodes === doc.nodes ? doc : { ...doc, nodes };
|
|
4313
4313
|
}
|
|
4314
4314
|
/**
|
|
@@ -4350,13 +4350,13 @@ var VectorEditorController = (_class3 = class {
|
|
|
4350
4350
|
const frame = this.frameOf(_nullishCoalesce(options.ids, () => ( this.selectedRoots())));
|
|
4351
4351
|
if (!frame) return { ok: false, message: "Nothing is selected." };
|
|
4352
4352
|
if (![ax, ay].every((v) => Number.isFinite(v) && Math.abs(v) < 89.9)) return { ok: false, message: "Skew angles must be between \u221289.9\xB0 and 89.9\xB0." };
|
|
4353
|
-
const origin =
|
|
4353
|
+
const origin = _chunkW3GXSUSQcjs.applyMatrix.call(void 0, _chunkW3GXSUSQcjs.rotateMatrix.call(void 0, -frame.angle), _nullishCoalesce(options.origin, () => ( this.frameCenter(frame))));
|
|
4354
4354
|
return this.transform(this.inFrame(frame.angle, vectorSkewMatrix(ax, ay, origin)), { ids: options.ids, label: "Skew" });
|
|
4355
4355
|
}
|
|
4356
4356
|
/** A selection box handle dragged in Free Distort mode. */
|
|
4357
4357
|
moveDistort(drag, p, input) {
|
|
4358
4358
|
const angle = drag.frame.angle;
|
|
4359
|
-
const unrotate = (v) => angle ?
|
|
4359
|
+
const unrotate = (v) => angle ? _chunkW3GXSUSQcjs.applyMatrix.call(void 0, _chunkW3GXSUSQcjs.rotateMatrix.call(void 0, -angle), v) : v;
|
|
4360
4360
|
const q = unrotate(p);
|
|
4361
4361
|
const q0 = unrotate(drag.start);
|
|
4362
4362
|
const d = { x: q.x - q0.x, y: q.y - q0.y };
|
|
@@ -4368,13 +4368,13 @@ var VectorEditorController = (_class3 = class {
|
|
|
4368
4368
|
const m = this.inFrame(angle, vectorShearForSide(drag.frame, drag.handle, d, !!input.alt));
|
|
4369
4369
|
drag.op = "Skew";
|
|
4370
4370
|
this.doc = this.transformed(drag.base, ids, m);
|
|
4371
|
-
this.interaction = { type: "distort", mode: "skew", corners: from.map((c) =>
|
|
4371
|
+
this.interaction = { type: "distort", mode: "skew", corners: from.map((c) => _chunkW3GXSUSQcjs.applyMatrix.call(void 0, m, c)) };
|
|
4372
4372
|
this.notify(true);
|
|
4373
4373
|
return;
|
|
4374
4374
|
}
|
|
4375
4375
|
const mode = corner && input.mod && input.alt && input.shift ? "perspective" : "distort";
|
|
4376
|
-
const rot =
|
|
4377
|
-
const quad = vectorDistortQuad(drag.frame, drag.handle, d, mode).map((c) => angle ?
|
|
4376
|
+
const rot = _chunkW3GXSUSQcjs.rotateMatrix.call(void 0, angle);
|
|
4377
|
+
const quad = vectorDistortQuad(drag.frame, drag.handle, d, mode).map((c) => angle ? _chunkW3GXSUSQcjs.applyMatrix.call(void 0, rot, c) : c);
|
|
4378
4378
|
const h = _chunkMUUXNRU4cjs.homographyFromPoints.call(void 0, from, quad);
|
|
4379
4379
|
if (!h || !_chunkMUUXNRU4cjs.homographyKeepsQuad.call(void 0, h, from)) return;
|
|
4380
4380
|
drag.op = mode === "perspective" ? "Perspective" : "Distort";
|
|
@@ -4392,11 +4392,11 @@ var VectorEditorController = (_class3 = class {
|
|
|
4392
4392
|
/** Envelope parameters for `node` after `patch`: a preset switched to a mesh becomes the mesh it stood for. */
|
|
4393
4393
|
envelopeParams(node, current, patch) {
|
|
4394
4394
|
if (patch.style !== "mesh" || patch.mesh !== void 0 || !current || current.params.style === "mesh") return patch;
|
|
4395
|
-
const frame =
|
|
4395
|
+
const frame = _chunkW3GXSUSQcjs.vectorEnvelopeFrame.call(void 0, node, current.id);
|
|
4396
4396
|
if (!frame) return patch;
|
|
4397
4397
|
const rows = typeof patch.rows === "number" ? patch.rows : current.params.rows;
|
|
4398
4398
|
const columns = typeof patch.columns === "number" ? patch.columns : current.params.columns;
|
|
4399
|
-
return { ...patch, mesh:
|
|
4399
|
+
return { ...patch, mesh: _chunkW3GXSUSQcjs.resizeWarpMesh.call(void 0, frame.mesh, columns, rows) };
|
|
4400
4400
|
}
|
|
4401
4401
|
/**
|
|
4402
4402
|
* Gives the selected (or given) nodes an envelope distortion, or changes the one they have: a
|
|
@@ -4416,14 +4416,14 @@ var VectorEditorController = (_class3 = class {
|
|
|
4416
4416
|
const list = _nullishCoalesce(node.effects, () => ( []));
|
|
4417
4417
|
const current = _nullishCoalesce(list.find((e) => e.type === "envelope"), () => ( null));
|
|
4418
4418
|
if (current) {
|
|
4419
|
-
const p =
|
|
4419
|
+
const p = _chunkW3GXSUSQcjs.normalizeVectorEffectParams.call(void 0, "envelope", this.envelopeParams(node, current, raw), current.params);
|
|
4420
4420
|
const { enabled: _e, ...rest } = current;
|
|
4421
4421
|
next.set(node.id, { ...node, effects: list.map((e) => e === current ? { ...rest, params: p } : e) });
|
|
4422
4422
|
out.push({ nodeId: node.id, effectId: current.id });
|
|
4423
4423
|
} else {
|
|
4424
4424
|
let k = list.length + 1;
|
|
4425
4425
|
while (list.some((e) => e.id === `fx${k}`)) k++;
|
|
4426
|
-
const effect =
|
|
4426
|
+
const effect = _chunkW3GXSUSQcjs.createVectorEffect.call(void 0, "envelope", `fx${k}`, raw);
|
|
4427
4427
|
next.set(node.id, { ...node, effects: [...list, effect] });
|
|
4428
4428
|
out.push({ nodeId: node.id, effectId: effect.id });
|
|
4429
4429
|
}
|
|
@@ -4443,7 +4443,7 @@ var VectorEditorController = (_class3 = class {
|
|
|
4443
4443
|
const ids = _nullishCoalesce(options.ids, () => ( this.selectedRoots()));
|
|
4444
4444
|
if (ids.length < 2) return { ok: false, message: "Select the objects and, on top of them, the shape to use as the envelope." };
|
|
4445
4445
|
const order = /* @__PURE__ */ new Map();
|
|
4446
|
-
|
|
4446
|
+
_chunkW3GXSUSQcjs.walkVectorNodes.call(void 0, this.doc.nodes, (n) => order.set(n.id, order.size));
|
|
4447
4447
|
const sorted = ids.filter((id) => order.has(id)).sort((a, b) => order.get(a) - order.get(b));
|
|
4448
4448
|
const topId = sorted[sorted.length - 1];
|
|
4449
4449
|
const top = this.getNode(topId);
|
|
@@ -4451,26 +4451,26 @@ var VectorEditorController = (_class3 = class {
|
|
|
4451
4451
|
if (!top || !outline) return { ok: false, message: "The top object must be a path with a closed outline." };
|
|
4452
4452
|
const contents = sorted.slice(0, -1).map((id) => this.getNode(id));
|
|
4453
4453
|
if (contents.some((n) => n.locked)) return { ok: false, message: "Locked objects cannot be enveloped." };
|
|
4454
|
-
const parents = contents.map((n) => _nullishCoalesce(_optionalChain([
|
|
4454
|
+
const parents = contents.map((n) => _nullishCoalesce(_optionalChain([_chunkW3GXSUSQcjs.locateVectorNode.call(void 0, this.doc.nodes, n.id), 'optionalAccess', _153 => _153.parent, 'optionalAccess', _154 => _154.id]), () => ( null)));
|
|
4455
4455
|
if (parents.some((p) => p !== parents[0])) return { ok: false, message: "The objects to envelope must be in the same group." };
|
|
4456
4456
|
const target = contents.length === 1 ? contents[0] : { id: this.newId(), type: "group", name: "Envelope", children: contents.map((n) => n) };
|
|
4457
|
-
const parentToDoc = parents[0] ? this.worldOf(parents[0]) :
|
|
4458
|
-
const targetToDoc =
|
|
4459
|
-
const toLocal =
|
|
4457
|
+
const parentToDoc = parents[0] ? this.worldOf(parents[0]) : _chunkW3GXSUSQcjs.IDENTITY_MATRIX;
|
|
4458
|
+
const targetToDoc = _chunkW3GXSUSQcjs.multiplyMatrices.call(void 0, _chunkW3GXSUSQcjs.nodeMatrix.call(void 0, target), parentToDoc);
|
|
4459
|
+
const toLocal = _chunkW3GXSUSQcjs.multiplyMatrices.call(void 0, this.worldOf(topId), _chunkW3GXSUSQcjs.invertMatrix.call(void 0, targetToDoc));
|
|
4460
4460
|
const local = {
|
|
4461
4461
|
closed: true,
|
|
4462
4462
|
anchors: outline.anchors.map((a) => ({
|
|
4463
|
-
...
|
|
4464
|
-
...a.in ? { in:
|
|
4465
|
-
...a.out ? { out:
|
|
4463
|
+
..._chunkW3GXSUSQcjs.applyMatrix.call(void 0, toLocal, a),
|
|
4464
|
+
...a.in ? { in: _chunkW3GXSUSQcjs.applyMatrix.call(void 0, toLocal, a.in) } : {},
|
|
4465
|
+
...a.out ? { out: _chunkW3GXSUSQcjs.applyMatrix.call(void 0, toLocal, a.out) } : {}
|
|
4466
4466
|
}))
|
|
4467
4467
|
};
|
|
4468
|
-
const mesh =
|
|
4468
|
+
const mesh = _chunkW3GXSUSQcjs.vectorMeshFromOutline.call(void 0, local, _nullishCoalesce(options.columns, () => ( 4)), _nullishCoalesce(options.rows, () => ( 4)));
|
|
4469
4469
|
if (!mesh) return { ok: false, message: "The top object\u2019s outline is too small to use as an envelope." };
|
|
4470
4470
|
const list = _nullishCoalesce(target.effects, () => ( []));
|
|
4471
4471
|
let k = list.length + 1;
|
|
4472
4472
|
while (list.some((e) => e.id === `fx${k}`)) k++;
|
|
4473
|
-
const effect =
|
|
4473
|
+
const effect = _chunkW3GXSUSQcjs.createVectorEffect.call(void 0, "envelope", `fx${k}`, { style: "mesh", mesh });
|
|
4474
4474
|
const enveloped = { ...target, effects: [...list, effect] };
|
|
4475
4475
|
this.change("Make Envelope with Top Object", () => {
|
|
4476
4476
|
let nodes = spliceTree(this.doc.nodes, topId, []);
|
|
@@ -4498,7 +4498,7 @@ var VectorEditorController = (_class3 = class {
|
|
|
4498
4498
|
const replace = /* @__PURE__ */ new Map();
|
|
4499
4499
|
for (const node of targets) {
|
|
4500
4500
|
const effect = node.effects.find((e) => e.type === "envelope");
|
|
4501
|
-
const frame =
|
|
4501
|
+
const frame = _chunkW3GXSUSQcjs.vectorEnvelopeFrame.call(void 0, node, effect.id);
|
|
4502
4502
|
const rest = node.effects.filter((e) => e !== effect);
|
|
4503
4503
|
const { effects: _e, ...plain2 } = node;
|
|
4504
4504
|
const kept = rest.length ? { ...plain2, effects: rest } : plain2;
|
|
@@ -4513,7 +4513,7 @@ var VectorEditorController = (_class3 = class {
|
|
|
4513
4513
|
type: "path",
|
|
4514
4514
|
name: "Envelope",
|
|
4515
4515
|
...node.transform ? { transform: node.transform } : {},
|
|
4516
|
-
subpaths: [
|
|
4516
|
+
subpaths: [_chunkW3GXSUSQcjs.vectorMeshOutline.call(void 0, frame.mesh)],
|
|
4517
4517
|
fill: null,
|
|
4518
4518
|
stroke: "#808080",
|
|
4519
4519
|
strokeWidth: 1
|
|
@@ -4539,11 +4539,11 @@ var VectorEditorController = (_class3 = class {
|
|
|
4539
4539
|
const target = this.envelopeTarget();
|
|
4540
4540
|
if (!target) return null;
|
|
4541
4541
|
const { mesh } = target.frame;
|
|
4542
|
-
const pts =
|
|
4542
|
+
const pts = _chunkW3GXSUSQcjs.warpMeshEditPoints.call(void 0, mesh);
|
|
4543
4543
|
let best = null;
|
|
4544
4544
|
let bestD = Infinity;
|
|
4545
4545
|
for (const index of [...pts.handles.map((h) => h.index), ...pts.anchors]) {
|
|
4546
|
-
const s = this.documentToScreen(
|
|
4546
|
+
const s = this.documentToScreen(_chunkW3GXSUSQcjs.applyMatrix.call(void 0, target.world, mesh.points[index]));
|
|
4547
4547
|
const d = Math.hypot(s.x - screen.x, s.y - screen.y);
|
|
4548
4548
|
if (d <= this.hitRadius && d < bestD - 0.5) {
|
|
4549
4549
|
best = index;
|
|
@@ -4551,8 +4551,8 @@ var VectorEditorController = (_class3 = class {
|
|
|
4551
4551
|
}
|
|
4552
4552
|
}
|
|
4553
4553
|
if (best !== null) return { target, index: best, s: 0, t: 0 };
|
|
4554
|
-
const local =
|
|
4555
|
-
const at =
|
|
4554
|
+
const local = _chunkW3GXSUSQcjs.applyMatrix.call(void 0, _chunkW3GXSUSQcjs.invertMatrix.call(void 0, target.world), p);
|
|
4555
|
+
const at = _chunkW3GXSUSQcjs.warpMeshParamAt.call(void 0, mesh, local);
|
|
4556
4556
|
if (at.distance > this.tolerance()) return null;
|
|
4557
4557
|
return { target, index: null, s: at.s, t: at.t };
|
|
4558
4558
|
}
|
|
@@ -4577,7 +4577,7 @@ var VectorEditorController = (_class3 = class {
|
|
|
4577
4577
|
this.notify();
|
|
4578
4578
|
return;
|
|
4579
4579
|
}
|
|
4580
|
-
const node =
|
|
4580
|
+
const node = _chunkW3GXSUSQcjs.hitTestVectorNodes.call(void 0, this.doc.nodes, p, this.tolerance(), { entered: this.enteredGroups() });
|
|
4581
4581
|
if (node) this.selection = input.shift ? this.selection.includes(node.id) ? this.selection.filter((id) => id !== node.id) : [...this.selection, node.id] : [node.id];
|
|
4582
4582
|
else if (!input.shift) this.selection = [];
|
|
4583
4583
|
this.anchors = [];
|
|
@@ -4588,7 +4588,7 @@ var VectorEditorController = (_class3 = class {
|
|
|
4588
4588
|
const d = { x: local.x - drag.start.x, y: local.y - drag.start.y };
|
|
4589
4589
|
if (!drag.moved && Math.hypot(d.x, d.y) * this.viewport.zoom < 1) return;
|
|
4590
4590
|
drag.moved = true;
|
|
4591
|
-
const mesh = drag.index !== null ?
|
|
4591
|
+
const mesh = drag.index !== null ? _chunkW3GXSUSQcjs.dragWarpMeshPoint.call(void 0, drag.base, drag.index, d) : _chunkW3GXSUSQcjs.pullWarpMesh.call(void 0, drag.base, drag.s, drag.t, d);
|
|
4592
4592
|
const nodes = mapTree(drag.baseDoc.nodes, (n) => {
|
|
4593
4593
|
if (n.id !== drag.nodeId) return n;
|
|
4594
4594
|
const effects = (_nullishCoalesce(n.effects, () => ( []))).map(
|
|
@@ -4615,10 +4615,10 @@ var VectorEditorController = (_class3 = class {
|
|
|
4615
4615
|
const out = list.map((n) => {
|
|
4616
4616
|
let next = n;
|
|
4617
4617
|
if (ids.has(n.id) && !n.locked) {
|
|
4618
|
-
const local = isRoot(parent) ? m :
|
|
4619
|
-
next =
|
|
4618
|
+
const local = isRoot(parent) ? m : _chunkW3GXSUSQcjs.multiplyMatrices.call(void 0, _chunkW3GXSUSQcjs.multiplyMatrices.call(void 0, parent, m), _chunkW3GXSUSQcjs.invertMatrix.call(void 0, parent));
|
|
4619
|
+
next = _chunkW3GXSUSQcjs.transformVectorNode.call(void 0, n, local);
|
|
4620
4620
|
} else if (n.type === "group") {
|
|
4621
|
-
const children = visit(n.children,
|
|
4621
|
+
const children = visit(n.children, _chunkW3GXSUSQcjs.multiplyMatrices.call(void 0, _chunkW3GXSUSQcjs.nodeMatrix.call(void 0, n), parent));
|
|
4622
4622
|
if (children !== n.children) next = { ...n, children };
|
|
4623
4623
|
}
|
|
4624
4624
|
if (next !== n) changed = true;
|
|
@@ -4626,7 +4626,7 @@ var VectorEditorController = (_class3 = class {
|
|
|
4626
4626
|
});
|
|
4627
4627
|
return changed ? out : list;
|
|
4628
4628
|
};
|
|
4629
|
-
const nodes = visit(doc.nodes,
|
|
4629
|
+
const nodes = visit(doc.nodes, _chunkW3GXSUSQcjs.IDENTITY_MATRIX);
|
|
4630
4630
|
return nodes === doc.nodes ? doc : { ...doc, nodes };
|
|
4631
4631
|
}
|
|
4632
4632
|
translate(dx, dy, options = {}) {
|
|
@@ -4636,11 +4636,11 @@ var VectorEditorController = (_class3 = class {
|
|
|
4636
4636
|
});
|
|
4637
4637
|
return { ok: true };
|
|
4638
4638
|
}
|
|
4639
|
-
return this.transform(
|
|
4639
|
+
return this.transform(_chunkW3GXSUSQcjs.translateMatrix.call(void 0, dx, dy), { ids: options.ids, label: "Move" });
|
|
4640
4640
|
}
|
|
4641
4641
|
/** The selection frame's centre in document space. */
|
|
4642
4642
|
frameCenter(frame) {
|
|
4643
|
-
return
|
|
4643
|
+
return _chunkW3GXSUSQcjs.applyMatrix.call(void 0, _chunkW3GXSUSQcjs.rotateMatrix.call(void 0, frame.angle), { x: frame.x + frame.width / 2, y: frame.y + frame.height / 2 });
|
|
4644
4644
|
}
|
|
4645
4645
|
/**
|
|
4646
4646
|
* Scales along the selection box's own axes (rotated with the selection when its nodes
|
|
@@ -4649,15 +4649,15 @@ var VectorEditorController = (_class3 = class {
|
|
|
4649
4649
|
scale(sx, sy = sx, options = {}) {
|
|
4650
4650
|
const frame = this.frameOf(_nullishCoalesce(options.ids, () => ( this.selectedRoots())));
|
|
4651
4651
|
if (!frame) return { ok: false, message: "Nothing is selected." };
|
|
4652
|
-
const origin =
|
|
4653
|
-
return this.transform(this.inFrame(frame.angle,
|
|
4652
|
+
const origin = _chunkW3GXSUSQcjs.applyMatrix.call(void 0, _chunkW3GXSUSQcjs.rotateMatrix.call(void 0, -frame.angle), _nullishCoalesce(options.origin, () => ( this.frameCenter(frame))));
|
|
4653
|
+
return this.transform(this.inFrame(frame.angle, _chunkW3GXSUSQcjs.scaleMatrix.call(void 0, sx, sy, origin)), { ids: options.ids, label: "Scale" });
|
|
4654
4654
|
}
|
|
4655
4655
|
/** Rotates clockwise by `degrees` around `origin` (default: the selection centre). */
|
|
4656
4656
|
rotate(degrees, options = {}) {
|
|
4657
4657
|
const frame = this.frameOf(_nullishCoalesce(options.ids, () => ( this.selectedRoots())));
|
|
4658
4658
|
if (!frame) return { ok: false, message: "Nothing is selected." };
|
|
4659
4659
|
const origin = _nullishCoalesce(options.origin, () => ( this.frameCenter(frame)));
|
|
4660
|
-
return this.transform(
|
|
4660
|
+
return this.transform(_chunkW3GXSUSQcjs.rotateMatrix.call(void 0, degrees, origin), { ids: options.ids, label: "Rotate" });
|
|
4661
4661
|
}
|
|
4662
4662
|
/** Sets each selected (or given) node's rotation to `degrees`, turning it around its own centre. */
|
|
4663
4663
|
setRotation(degrees, options = {}) {
|
|
@@ -4668,7 +4668,7 @@ var VectorEditorController = (_class3 = class {
|
|
|
4668
4668
|
const frame = this.frameOf([id]);
|
|
4669
4669
|
if (!frame) continue;
|
|
4670
4670
|
const delta = normalizeAngle(degrees - frame.angle);
|
|
4671
|
-
if (Math.abs(delta) > 1e-9) this.doc = this.transformed(this.doc, /* @__PURE__ */ new Set([id]),
|
|
4671
|
+
if (Math.abs(delta) > 1e-9) this.doc = this.transformed(this.doc, /* @__PURE__ */ new Set([id]), _chunkW3GXSUSQcjs.rotateMatrix.call(void 0, delta, this.frameCenter(frame)));
|
|
4672
4672
|
}
|
|
4673
4673
|
});
|
|
4674
4674
|
return { ok: true };
|
|
@@ -4678,7 +4678,7 @@ var VectorEditorController = (_class3 = class {
|
|
|
4678
4678
|
const frame = this.frameOf(_nullishCoalesce(options.ids, () => ( this.selectedRoots())));
|
|
4679
4679
|
if (!frame) return { ok: false, message: "Nothing is selected." };
|
|
4680
4680
|
const c = { x: frame.x + frame.width / 2, y: frame.y + frame.height / 2 };
|
|
4681
|
-
const m = axis === "horizontal" ?
|
|
4681
|
+
const m = axis === "horizontal" ? _chunkW3GXSUSQcjs.scaleMatrix.call(void 0, -1, 1, c) : _chunkW3GXSUSQcjs.scaleMatrix.call(void 0, 1, -1, c);
|
|
4682
4682
|
return this.transform(this.inFrame(frame.angle, m), { ids: options.ids, label: axis === "horizontal" ? "Flip Horizontal" : "Flip Vertical" });
|
|
4683
4683
|
}
|
|
4684
4684
|
/**
|
|
@@ -4701,7 +4701,7 @@ var VectorEditorController = (_class3 = class {
|
|
|
4701
4701
|
if (edge === "top") dy = target.y - b.y;
|
|
4702
4702
|
if (edge === "middle") dy = target.y + target.height / 2 - (b.y + b.height / 2);
|
|
4703
4703
|
if (edge === "bottom") dy = target.y + target.height - (b.y + b.height);
|
|
4704
|
-
if (dx || dy) this.doc = this.transformed(this.doc, /* @__PURE__ */ new Set([id]),
|
|
4704
|
+
if (dx || dy) this.doc = this.transformed(this.doc, /* @__PURE__ */ new Set([id]), _chunkW3GXSUSQcjs.translateMatrix.call(void 0, dx, dy));
|
|
4705
4705
|
}
|
|
4706
4706
|
});
|
|
4707
4707
|
return { ok: true };
|
|
@@ -4723,7 +4723,7 @@ var VectorEditorController = (_class3 = class {
|
|
|
4723
4723
|
let cursor = pos(first);
|
|
4724
4724
|
for (const item of items) {
|
|
4725
4725
|
const d = cursor - pos(item.b);
|
|
4726
|
-
if (Math.abs(d) > 1e-9) this.doc = this.transformed(this.doc, /* @__PURE__ */ new Set([item.id]), horizontal ?
|
|
4726
|
+
if (Math.abs(d) > 1e-9) this.doc = this.transformed(this.doc, /* @__PURE__ */ new Set([item.id]), horizontal ? _chunkW3GXSUSQcjs.translateMatrix.call(void 0, d, 0) : _chunkW3GXSUSQcjs.translateMatrix.call(void 0, 0, d));
|
|
4727
4727
|
cursor += size(item.b) + gap;
|
|
4728
4728
|
}
|
|
4729
4729
|
});
|
|
@@ -4747,14 +4747,14 @@ var VectorEditorController = (_class3 = class {
|
|
|
4747
4747
|
}
|
|
4748
4748
|
withDuplicates(doc, ids, offset, created) {
|
|
4749
4749
|
const set = new Set(ids);
|
|
4750
|
-
const m =
|
|
4750
|
+
const m = _chunkW3GXSUSQcjs.translateMatrix.call(void 0, offset.x, offset.y);
|
|
4751
4751
|
const insert = (list) => {
|
|
4752
4752
|
const out = [];
|
|
4753
4753
|
for (const node of list) {
|
|
4754
4754
|
const n = node.type === "group" ? { ...node, children: insert(node.children) } : node;
|
|
4755
4755
|
out.push(n);
|
|
4756
4756
|
if (set.has(node.id)) {
|
|
4757
|
-
const copy =
|
|
4757
|
+
const copy = _chunkW3GXSUSQcjs.transformVectorNode.call(void 0, this.freshIds(node), m);
|
|
4758
4758
|
created.push(copy.id);
|
|
4759
4759
|
out.push(copy);
|
|
4760
4760
|
}
|
|
@@ -4767,7 +4767,7 @@ var VectorEditorController = (_class3 = class {
|
|
|
4767
4767
|
group(options = {}) {
|
|
4768
4768
|
const ids = _nullishCoalesce(options.ids, () => ( this.selectedRoots()));
|
|
4769
4769
|
if (!ids.length) return null;
|
|
4770
|
-
const locs = ids.map((id2) =>
|
|
4770
|
+
const locs = ids.map((id2) => _chunkW3GXSUSQcjs.locateVectorNode.call(void 0, this.doc.nodes, id2));
|
|
4771
4771
|
if (locs.some((l) => !l)) return null;
|
|
4772
4772
|
const parent = _nullishCoalesce(_optionalChain([locs, 'access', _158 => _158[0], 'access', _159 => _159.parent, 'optionalAccess', _160 => _160.id]), () => ( null));
|
|
4773
4773
|
if (locs.some((l) => (_nullishCoalesce(_optionalChain([l, 'access', _161 => _161.parent, 'optionalAccess', _162 => _162.id]), () => ( null))) !== parent)) return null;
|
|
@@ -4804,9 +4804,9 @@ var VectorEditorController = (_class3 = class {
|
|
|
4804
4804
|
if (set.has(n.id) && n.type === "group") {
|
|
4805
4805
|
changed = true;
|
|
4806
4806
|
const opacity = n.opacity;
|
|
4807
|
-
const m =
|
|
4807
|
+
const m = _chunkW3GXSUSQcjs.nodeMatrix.call(void 0, n);
|
|
4808
4808
|
out.push(
|
|
4809
|
-
...n.children.map((c) => c.blendStep ? (({ blendStep: _s, locked: _l, ...rest }) => rest)(c) : c).map((c) => c.booleanOperation ? (({ booleanOperation: _b, ...rest }) => rest)(c) : c).map((c) => n.transform ?
|
|
4809
|
+
...n.children.map((c) => c.blendStep ? (({ blendStep: _s, locked: _l, ...rest }) => rest)(c) : c).map((c) => c.booleanOperation ? (({ booleanOperation: _b, ...rest }) => rest)(c) : c).map((c) => n.transform ? _chunkW3GXSUSQcjs.transformVectorNode.call(void 0, c, m) : c).map((c) => opacity !== void 0 && opacity < 1 ? { ...c, opacity: (_nullishCoalesce(c.opacity, () => ( 1))) * opacity } : c)
|
|
4810
4810
|
);
|
|
4811
4811
|
} else if (n.type === "group") {
|
|
4812
4812
|
const children = flatten(n.children);
|
|
@@ -4858,16 +4858,16 @@ var VectorEditorController = (_class3 = class {
|
|
|
4858
4858
|
const result = _chunkXGD3FSNCcjs.pathBoolean.call(void 0,
|
|
4859
4859
|
BOOLEAN_OPS[op],
|
|
4860
4860
|
entries.map((e) => ({
|
|
4861
|
-
path:
|
|
4861
|
+
path: _chunkW3GXSUSQcjs.vectorPathWorldBezier.call(void 0, { ...e.node, subpaths: e.node.subpaths.filter((s) => s.anchors.length > 1).map((s) => ({ ...s, closed: true })) }, e.parent),
|
|
4862
4862
|
fillRule: _nullishCoalesce(e.node.fillRule, () => ( "nonzero"))
|
|
4863
4863
|
}))
|
|
4864
4864
|
);
|
|
4865
4865
|
const base = entries[0].node;
|
|
4866
4866
|
const anchorRoot = _nullishCoalesce(roots.find((r) => this.holds(r, base.id)), () => ( base.id));
|
|
4867
|
-
const subpaths =
|
|
4867
|
+
const subpaths = _chunkW3GXSUSQcjs.bezierToSubpaths.call(void 0, this.intoParentSpace(anchorRoot, result.path));
|
|
4868
4868
|
if (result.error || !subpaths.length) return null;
|
|
4869
4869
|
const id = this.newId();
|
|
4870
|
-
const { transform: _t, effects: _e, booleanOperation: _b, ...baseRest } =
|
|
4870
|
+
const { transform: _t, effects: _e, booleanOperation: _b, ...baseRest } = _chunkW3GXSUSQcjs.cloneVectorNode.call(void 0, base);
|
|
4871
4871
|
const node = { ...baseRest, id, name: BOOLEAN_LABELS[op], subpaths };
|
|
4872
4872
|
const drop = /* @__PURE__ */ new Set([...entries.map((e) => e.node.id), ...roots]);
|
|
4873
4873
|
this.change(BOOLEAN_LABELS[op], () => {
|
|
@@ -4881,20 +4881,20 @@ var VectorEditorController = (_class3 = class {
|
|
|
4881
4881
|
/** Whether stored node `rootId` holds `id` as drawn (`id` may be an expanded path inside it). */
|
|
4882
4882
|
holds(rootId, id) {
|
|
4883
4883
|
const n = this.getNode(rootId);
|
|
4884
|
-
return !!n && (!!
|
|
4884
|
+
return !!n && (!!_chunkW3GXSUSQcjs.findVectorNode.call(void 0, [n], id) || !!_chunkW3GXSUSQcjs.findVectorNode.call(void 0, [_chunkW3GXSUSQcjs.expandVectorAppearance.call(void 0, n)], id) || !!_chunkW3GXSUSQcjs.findVectorNode.call(void 0, [_chunkW3GXSUSQcjs.vectorMaskedGeometry.call(void 0, n)], id));
|
|
4885
4885
|
}
|
|
4886
4886
|
liveBooleanOp(op, roots) {
|
|
4887
4887
|
const nodes = roots.map((id2) => this.getNode(id2));
|
|
4888
4888
|
if (!nodes.length || nodes.some((n) => !n)) return null;
|
|
4889
4889
|
const label = `Live ${BOOLEAN_LABELS[op]}`;
|
|
4890
4890
|
const lone = nodes.length === 1 ? nodes[0] : null;
|
|
4891
|
-
if (
|
|
4891
|
+
if (_chunkW3GXSUSQcjs.isVectorLiveBoolean.call(void 0, lone)) {
|
|
4892
4892
|
const children = lone.children.map((c) => c.booleanOperation ? (({ booleanOperation: _b, ...rest }) => rest)(c) : c);
|
|
4893
4893
|
this.change(label, () => this.replaceNode(lone.id, { ...lone, liveBoolean: op, children }));
|
|
4894
4894
|
return lone.id;
|
|
4895
4895
|
}
|
|
4896
|
-
const parents = roots.map((id2) => _nullishCoalesce(_optionalChain([
|
|
4897
|
-
if (parents.every((g) =>
|
|
4896
|
+
const parents = roots.map((id2) => _nullishCoalesce(_optionalChain([_chunkW3GXSUSQcjs.locateVectorNode.call(void 0, this.doc.nodes, id2), 'optionalAccess', _164 => _164.parent]), () => ( null)));
|
|
4897
|
+
if (parents.every((g) => _chunkW3GXSUSQcjs.isVectorLiveBoolean.call(void 0, g))) {
|
|
4898
4898
|
const set = new Set(roots);
|
|
4899
4899
|
this.change(
|
|
4900
4900
|
label,
|
|
@@ -4945,8 +4945,8 @@ var VectorEditorController = (_class3 = class {
|
|
|
4945
4945
|
const paths = entries.map((e) => e.node);
|
|
4946
4946
|
const id = this.newId();
|
|
4947
4947
|
const first = _nullishCoalesce(roots.find((r) => this.holds(r, paths[0].id)), () => ( paths[0].id));
|
|
4948
|
-
const subpaths = entries.flatMap((e) =>
|
|
4949
|
-
const { transform: _t, effects: _e, booleanOperation: _b, ...baseRest } =
|
|
4948
|
+
const subpaths = entries.flatMap((e) => _chunkW3GXSUSQcjs.bezierToSubpaths.call(void 0, this.intoParentSpace(first, _chunkW3GXSUSQcjs.vectorPathWorldBezier.call(void 0, e.node, e.parent))));
|
|
4949
|
+
const { transform: _t, effects: _e, booleanOperation: _b, ...baseRest } = _chunkW3GXSUSQcjs.cloneVectorNode.call(void 0, paths[0]);
|
|
4950
4950
|
const node = { ...baseRest, id, name: "Compound Path", subpaths };
|
|
4951
4951
|
const drop = /* @__PURE__ */ new Set([...paths.map((p) => p.id), ...roots]);
|
|
4952
4952
|
this.change("Combine", () => {
|
|
@@ -4958,8 +4958,8 @@ var VectorEditorController = (_class3 = class {
|
|
|
4958
4958
|
}
|
|
4959
4959
|
/** A document-space path mapped into the parent space of node `id`. */
|
|
4960
4960
|
intoParentSpace(id, path) {
|
|
4961
|
-
const parent = _nullishCoalesce(
|
|
4962
|
-
return isRoot(parent) ? path : _chunkXGD3FSNCcjs.transformBezierPath.call(void 0, path,
|
|
4961
|
+
const parent = _nullishCoalesce(_chunkW3GXSUSQcjs.vectorParentMatrix.call(void 0, this.doc.nodes, id), () => ( _chunkW3GXSUSQcjs.IDENTITY_MATRIX));
|
|
4962
|
+
return isRoot(parent) ? path : _chunkXGD3FSNCcjs.transformBezierPath.call(void 0, path, _chunkW3GXSUSQcjs.invertMatrix.call(void 0, parent));
|
|
4963
4963
|
}
|
|
4964
4964
|
/** Splits selected compound paths into one path per subpath. */
|
|
4965
4965
|
breakApart(options = {}) {
|
|
@@ -5004,7 +5004,7 @@ var VectorEditorController = (_class3 = class {
|
|
|
5004
5004
|
const topRoot = _nullishCoalesce([...roots].reverse().find((r) => this.holds(r, last)), () => ( last));
|
|
5005
5005
|
const nodes = [];
|
|
5006
5006
|
for (const piece of result.pieces) {
|
|
5007
|
-
const subpaths =
|
|
5007
|
+
const subpaths = _chunkW3GXSUSQcjs.bezierToSubpaths.call(void 0, this.intoParentSpace(topRoot, piece.path)).map((sp) => piece.open ? { ...sp, closed: false } : sp);
|
|
5008
5008
|
if (!subpaths.length) continue;
|
|
5009
5009
|
const source = entries[piece.source].node;
|
|
5010
5010
|
const style = vectorResultStyle(source, shapes[piece.source].paint, op === "outline");
|
|
@@ -5031,7 +5031,7 @@ var VectorEditorController = (_class3 = class {
|
|
|
5031
5031
|
const out = /* @__PURE__ */ new Map();
|
|
5032
5032
|
for (const id of _nullishCoalesce(ids, () => ( this.selection))) {
|
|
5033
5033
|
const node = this.getNode(id);
|
|
5034
|
-
const group = isVectorBlendGroup(node) ? node : _optionalChain([
|
|
5034
|
+
const group = isVectorBlendGroup(node) ? node : _optionalChain([_chunkW3GXSUSQcjs.locateVectorNode.call(void 0, this.doc.nodes, id), 'optionalAccess', _169 => _169.parent]);
|
|
5035
5035
|
if (isVectorBlendGroup(group)) out.set(group.id, group);
|
|
5036
5036
|
}
|
|
5037
5037
|
return [...out.values()];
|
|
@@ -5048,7 +5048,7 @@ var VectorEditorController = (_class3 = class {
|
|
|
5048
5048
|
return !!n && !n.blendStep && !n.locked;
|
|
5049
5049
|
});
|
|
5050
5050
|
if (ids.length < 2) return null;
|
|
5051
|
-
const locs = ids.map((id2) =>
|
|
5051
|
+
const locs = ids.map((id2) => _chunkW3GXSUSQcjs.locateVectorNode.call(void 0, this.doc.nodes, id2));
|
|
5052
5052
|
const parent = _nullishCoalesce(_optionalChain([locs, 'access', _170 => _170[0], 'access', _171 => _171.parent, 'optionalAccess', _172 => _172.id]), () => ( null));
|
|
5053
5053
|
if (locs.some((l) => (_nullishCoalesce(_optionalChain([l, 'access', _173 => _173.parent, 'optionalAccess', _174 => _174.id]), () => ( null))) !== parent)) return null;
|
|
5054
5054
|
const order = input.keepOrder ? ids : ids.slice().sort((a, b) => locs[ids.indexOf(a)].index - locs[ids.indexOf(b)].index);
|
|
@@ -5088,7 +5088,7 @@ var VectorEditorController = (_class3 = class {
|
|
|
5088
5088
|
* Returns the group's id, or why it could not.
|
|
5089
5089
|
*/
|
|
5090
5090
|
makeMask(type, options = {}) {
|
|
5091
|
-
if (!
|
|
5091
|
+
if (!_chunkW3GXSUSQcjs.isVectorMaskType.call(void 0, type)) return { ok: false, message: `Unknown mask type "${type}": use clip, alpha or luminance.` };
|
|
5092
5092
|
const ids = [...new Set(_nullishCoalesce(options.ids, () => ( this.selectedRoots())))];
|
|
5093
5093
|
if (ids.length < 2) return { ok: false, message: "Select at least two objects: the topmost becomes the mask, the ones below show through it." };
|
|
5094
5094
|
for (const id2 of ids) {
|
|
@@ -5097,7 +5097,7 @@ var VectorEditorController = (_class3 = class {
|
|
|
5097
5097
|
if (n.locked) return { ok: false, message: `"${id2}" is locked; unlock it first.` };
|
|
5098
5098
|
if (n.blendStep) return { ok: false, message: `"${id2}" is a blend step; select its blend instead.` };
|
|
5099
5099
|
}
|
|
5100
|
-
const locs = ids.map((id2) =>
|
|
5100
|
+
const locs = ids.map((id2) => _chunkW3GXSUSQcjs.locateVectorNode.call(void 0, this.doc.nodes, id2));
|
|
5101
5101
|
const parent = _nullishCoalesce(_optionalChain([locs, 'access', _175 => _175[0], 'access', _176 => _176.parent, 'optionalAccess', _177 => _177.id]), () => ( null));
|
|
5102
5102
|
if (locs.some((l) => (_nullishCoalesce(_optionalChain([l, 'access', _178 => _178.parent, 'optionalAccess', _179 => _179.id]), () => ( null))) !== parent)) return { ok: false, message: "The objects must share a parent (group them, or pick objects at one level)." };
|
|
5103
5103
|
const order = ids.slice().sort((a, b) => locs[ids.indexOf(a)].index - locs[ids.indexOf(b)].index);
|
|
@@ -5131,10 +5131,10 @@ var VectorEditorController = (_class3 = class {
|
|
|
5131
5131
|
const out = /* @__PURE__ */ new Map();
|
|
5132
5132
|
for (const id of _nullishCoalesce(ids, () => ( this.selection))) {
|
|
5133
5133
|
const n = this.getNode(id);
|
|
5134
|
-
if (
|
|
5134
|
+
if (_chunkW3GXSUSQcjs.isVectorMaskGroup.call(void 0, n)) out.set(n.id, n);
|
|
5135
5135
|
else {
|
|
5136
|
-
const parent = _optionalChain([
|
|
5137
|
-
if (
|
|
5136
|
+
const parent = _optionalChain([_chunkW3GXSUSQcjs.locateVectorNode.call(void 0, this.doc.nodes, id), 'optionalAccess', _180 => _180.parent]);
|
|
5137
|
+
if (_chunkW3GXSUSQcjs.isVectorMaskGroup.call(void 0, parent)) out.set(parent.id, parent);
|
|
5138
5138
|
}
|
|
5139
5139
|
}
|
|
5140
5140
|
return [...out.values()];
|
|
@@ -5160,9 +5160,9 @@ var VectorEditorController = (_class3 = class {
|
|
|
5160
5160
|
this.replaceNode(g.id, { ...rest, children });
|
|
5161
5161
|
continue;
|
|
5162
5162
|
}
|
|
5163
|
-
const m =
|
|
5163
|
+
const m = _chunkW3GXSUSQcjs.nodeMatrix.call(void 0, g);
|
|
5164
5164
|
const opacity = g.opacity;
|
|
5165
|
-
const flat = children.map((c) => g.transform ?
|
|
5165
|
+
const flat = children.map((c) => g.transform ? _chunkW3GXSUSQcjs.transformVectorNode.call(void 0, c, m) : c).map((c) => opacity !== void 0 && opacity < 1 ? { ...c, opacity: (_nullishCoalesce(c.opacity, () => ( 1))) * opacity } : c);
|
|
5166
5166
|
this.setDoc(spliceTree(this.doc.nodes, g.id, flat));
|
|
5167
5167
|
}
|
|
5168
5168
|
this.selection = released;
|
|
@@ -5176,7 +5176,7 @@ var VectorEditorController = (_class3 = class {
|
|
|
5176
5176
|
* (`enabled: false` hides the mask, so the contents draw whole) and on. One undo step.
|
|
5177
5177
|
*/
|
|
5178
5178
|
setMaskOptions(patch, options = {}) {
|
|
5179
|
-
if (patch.type !== void 0 && !
|
|
5179
|
+
if (patch.type !== void 0 && !_chunkW3GXSUSQcjs.isVectorMaskType.call(void 0, patch.type)) return { ok: false, message: `Unknown mask type "${patch.type}": use clip, alpha or luminance.` };
|
|
5180
5180
|
if (patch.invert !== void 0 && typeof patch.invert !== "boolean") return { ok: false, message: "invert must be true or false." };
|
|
5181
5181
|
if (patch.enabled !== void 0 && typeof patch.enabled !== "boolean") return { ok: false, message: "enabled must be true or false." };
|
|
5182
5182
|
const groups = this.maskTargets(options.ids);
|
|
@@ -5185,7 +5185,7 @@ var VectorEditorController = (_class3 = class {
|
|
|
5185
5185
|
this.change("Mask Options", () => {
|
|
5186
5186
|
this.setDoc(
|
|
5187
5187
|
mapTree(this.doc.nodes, (n) => {
|
|
5188
|
-
if (!set.has(n.id) || !
|
|
5188
|
+
if (!set.has(n.id) || !_chunkW3GXSUSQcjs.isVectorMaskGroup.call(void 0, n)) return n;
|
|
5189
5189
|
const type = _nullishCoalesce(patch.type, () => ( n.mask.type));
|
|
5190
5190
|
const invert = _nullishCoalesce(patch.invert, () => ( !!n.mask.invert));
|
|
5191
5191
|
const [source, ...rest] = n.children;
|
|
@@ -5239,13 +5239,13 @@ var VectorEditorController = (_class3 = class {
|
|
|
5239
5239
|
const node = this.getNode(nodeId);
|
|
5240
5240
|
if (!isVectorBlendGroup(group)) return { ok: false, message: `"${blendId}" is not a blend.` };
|
|
5241
5241
|
if (!node || node.blendStep || node.locked || node.id === blendId) return { ok: false, message: `"${nodeId}" cannot be a key.` };
|
|
5242
|
-
const parentOf = (id) => _nullishCoalesce(_optionalChain([
|
|
5242
|
+
const parentOf = (id) => _nullishCoalesce(_optionalChain([_chunkW3GXSUSQcjs.locateVectorNode.call(void 0, this.doc.nodes, id), 'optionalAccess', _185 => _185.parent, 'optionalAccess', _186 => _186.id]), () => ( null));
|
|
5243
5243
|
if (parentOf(blendId) !== parentOf(nodeId)) return { ok: false, message: "The new key must sit beside the blend (same parent)." };
|
|
5244
5244
|
const start = options.start;
|
|
5245
5245
|
this.change("Blend", () => {
|
|
5246
5246
|
const blend = start !== null && start !== void 0 ? { ...group.blend, starts: { ...group.blend.starts, [nodeId]: start } } : group.blend;
|
|
5247
|
-
const m =
|
|
5248
|
-
const key = group.transform ?
|
|
5247
|
+
const m = _chunkW3GXSUSQcjs.invertMatrix.call(void 0, _chunkW3GXSUSQcjs.nodeMatrix.call(void 0, group));
|
|
5248
|
+
const key = group.transform ? _chunkW3GXSUSQcjs.transformVectorNode.call(void 0, node, m) : node;
|
|
5249
5249
|
const without = mapTree(this.doc.nodes, (n) => n.id === nodeId ? null : n);
|
|
5250
5250
|
this.setDoc(spliceTree(without, blendId, [{ ...group, blend, children: [...group.children, key] }]));
|
|
5251
5251
|
this.selection = [blendId];
|
|
@@ -5271,7 +5271,7 @@ var VectorEditorController = (_class3 = class {
|
|
|
5271
5271
|
if (!groups.length) return [];
|
|
5272
5272
|
const set = new Set(groups.map((g) => g.id));
|
|
5273
5273
|
const used = /* @__PURE__ */ new Set();
|
|
5274
|
-
|
|
5274
|
+
_chunkW3GXSUSQcjs.walkVectorNodes.call(void 0, this.doc.nodes, (n) => used.add(n.id));
|
|
5275
5275
|
const fresh = () => {
|
|
5276
5276
|
let id = this.createId();
|
|
5277
5277
|
while (used.has(id)) id = this.createId();
|
|
@@ -5309,14 +5309,14 @@ var VectorEditorController = (_class3 = class {
|
|
|
5309
5309
|
replaceBlendSpine(options = {}) {
|
|
5310
5310
|
const roots = _nullishCoalesce(options.ids, () => ( this.selectedRoots()));
|
|
5311
5311
|
const groups = this.blendTargets(roots);
|
|
5312
|
-
const paths = roots.map((id) => this.getNode(id)).filter((n) => _optionalChain([n, 'optionalAccess', _187 => _187.type]) === "path" && !n.blendStep && !isVectorBlendGroup(_optionalChain([
|
|
5312
|
+
const paths = roots.map((id) => this.getNode(id)).filter((n) => _optionalChain([n, 'optionalAccess', _187 => _187.type]) === "path" && !n.blendStep && !isVectorBlendGroup(_optionalChain([_chunkW3GXSUSQcjs.locateVectorNode.call(void 0, this.doc.nodes, n.id), 'optionalAccess', _188 => _188.parent])));
|
|
5313
5313
|
if (groups.length !== 1 || paths.length !== 1) return { ok: false, message: "Select one blend and one path to be its spine." };
|
|
5314
5314
|
const group = groups[0];
|
|
5315
5315
|
const path = paths[0];
|
|
5316
5316
|
const first = path.subpaths.find((sp) => sp.anchors.length >= 2);
|
|
5317
5317
|
if (!first) return { ok: false, message: "The spine needs a path with at least two points." };
|
|
5318
|
-
const m =
|
|
5319
|
-
const spine =
|
|
5318
|
+
const m = _chunkW3GXSUSQcjs.multiplyMatrices.call(void 0, this.worldOf(path.id), _chunkW3GXSUSQcjs.invertMatrix.call(void 0, this.worldOf(group.id)));
|
|
5319
|
+
const spine = _chunkW3GXSUSQcjs.transformVectorNode.call(void 0, { id: "", type: "path", subpaths: [first] }, m).subpaths[0];
|
|
5320
5320
|
this.change("Replace Spine", () => {
|
|
5321
5321
|
const withSpine = { ...group, blend: { ...group.blend, spine } };
|
|
5322
5322
|
const targets = vectorBlendKeyTargets(withSpine);
|
|
@@ -5324,11 +5324,11 @@ var VectorEditorController = (_class3 = class {
|
|
|
5324
5324
|
const children = withSpine.children.map((c) => {
|
|
5325
5325
|
if (c.blendStep) return c;
|
|
5326
5326
|
const target = targets[k++];
|
|
5327
|
-
const b =
|
|
5327
|
+
const b = _chunkW3GXSUSQcjs.vectorNodeBounds.call(void 0, c);
|
|
5328
5328
|
if (!target || !b) return c;
|
|
5329
5329
|
const dx = target[0] - (b.x + b.width / 2);
|
|
5330
5330
|
const dy = target[1] - (b.y + b.height / 2);
|
|
5331
|
-
return Math.hypot(dx, dy) > 1e-9 ?
|
|
5331
|
+
return Math.hypot(dx, dy) > 1e-9 ? _chunkW3GXSUSQcjs.transformVectorNode.call(void 0, c, _chunkW3GXSUSQcjs.translateMatrix.call(void 0, dx, dy)) : c;
|
|
5332
5332
|
});
|
|
5333
5333
|
this.setDoc(mapTree(this.doc.nodes, (n) => n.id === path.id ? null : n.id === group.id ? { ...withSpine, children } : n));
|
|
5334
5334
|
this.selection = [group.id];
|
|
@@ -5396,15 +5396,15 @@ var VectorEditorController = (_class3 = class {
|
|
|
5396
5396
|
let nodes = this.doc.nodes;
|
|
5397
5397
|
m.entries.forEach((entry, i) => {
|
|
5398
5398
|
const node = entry.node;
|
|
5399
|
-
const toLocal = (path) => _chunkXGD3FSNCcjs.transformBezierPath.call(void 0, path,
|
|
5399
|
+
const toLocal = (path) => _chunkXGD3FSNCcjs.transformBezierPath.call(void 0, path, _chunkW3GXSUSQcjs.invertMatrix.call(void 0, _chunkW3GXSUSQcjs.multiplyMatrices.call(void 0, _chunkW3GXSUSQcjs.nodeMatrix.call(void 0, node), entry.parent)));
|
|
5400
5400
|
const list = [];
|
|
5401
5401
|
const r = plan.replace.get(i);
|
|
5402
5402
|
if (r === void 0) list.push(node);
|
|
5403
|
-
else if (_optionalChain([r, 'optionalAccess', _191 => _191.kind]) === "fill") list.push({ ...node, fillRule: "nonzero", subpaths:
|
|
5404
|
-
else if (_optionalChain([r, 'optionalAccess', _192 => _192.kind]) === "outline") list.push({ ...node, subpaths:
|
|
5403
|
+
else if (_optionalChain([r, 'optionalAccess', _191 => _191.kind]) === "fill") list.push({ ...node, fillRule: "nonzero", subpaths: _chunkW3GXSUSQcjs.bezierToSubpaths.call(void 0, toLocal(r.path)) });
|
|
5404
|
+
else if (_optionalChain([r, 'optionalAccess', _192 => _192.kind]) === "outline") list.push({ ...node, subpaths: _chunkW3GXSUSQcjs.bezierToSubpaths.call(void 0, toLocal(r.path)) });
|
|
5405
5405
|
else if (_optionalChain([r, 'optionalAccess', _193 => _193.kind]) === "pieces") {
|
|
5406
5406
|
r.paths.forEach(
|
|
5407
|
-
(path, k) => list.push({ ...node, id: k === 0 ? node.id : this.newId(), subpaths:
|
|
5407
|
+
(path, k) => list.push({ ...node, id: k === 0 ? node.id : this.newId(), subpaths: _chunkW3GXSUSQcjs.bezierToSubpaths.call(void 0, toLocal(path)).map((sp) => ({ ...sp, closed: false })) })
|
|
5408
5408
|
);
|
|
5409
5409
|
}
|
|
5410
5410
|
if (plan.merged && plan.merged.style === i) {
|
|
@@ -5415,9 +5415,9 @@ var VectorEditorController = (_class3 = class {
|
|
|
5415
5415
|
id: mergedId,
|
|
5416
5416
|
name: "Shape",
|
|
5417
5417
|
...node.transform ? { transform: node.transform } : {},
|
|
5418
|
-
subpaths:
|
|
5418
|
+
subpaths: _chunkW3GXSUSQcjs.bezierToSubpaths.call(void 0, toLocal(plan.merged.path))
|
|
5419
5419
|
};
|
|
5420
|
-
if (plan.merged.currentFill || !
|
|
5420
|
+
if (plan.merged.currentFill || !_chunkW3GXSUSQcjs.hasPaint.call(void 0, merged.fill)) merged.fill = _chunkW3GXSUSQcjs.hasPaint.call(void 0, this.defaults.fill) ? this.defaults.fill : "#808080";
|
|
5421
5421
|
list.push(merged);
|
|
5422
5422
|
}
|
|
5423
5423
|
if (r === void 0 && list.length === 1) return;
|
|
@@ -5454,14 +5454,14 @@ var VectorEditorController = (_class3 = class {
|
|
|
5454
5454
|
if (!_optionalChain([region, 'optionalAccess', _200 => _200.length])) return null;
|
|
5455
5455
|
let below = null;
|
|
5456
5456
|
const roots = new Set(this.selectedRoots());
|
|
5457
|
-
|
|
5457
|
+
_chunkW3GXSUSQcjs.walkVectorNodes.call(void 0, this.doc.nodes, (n) => {
|
|
5458
5458
|
if (!below && roots.has(n.id)) below = n.id;
|
|
5459
5459
|
});
|
|
5460
|
-
const subpaths =
|
|
5460
|
+
const subpaths = _chunkW3GXSUSQcjs.bezierToSubpaths.call(void 0, below ? this.intoParentSpace(below, region) : region);
|
|
5461
5461
|
if (!subpaths.length) return null;
|
|
5462
5462
|
const id = this.newId();
|
|
5463
5463
|
const node = { id, type: "path", name: "Fill", ...this.styleFor(false), stroke: null, fillRule: "nonzero", subpaths };
|
|
5464
|
-
if (!
|
|
5464
|
+
if (!_chunkW3GXSUSQcjs.hasPaint.call(void 0, node.fill)) node.fill = "#808080";
|
|
5465
5465
|
const target = below;
|
|
5466
5466
|
this.change("Fill Region", () => {
|
|
5467
5467
|
if (target) {
|
|
@@ -5563,10 +5563,10 @@ var VectorEditorController = (_class3 = class {
|
|
|
5563
5563
|
/** Moves anchors by a document-space offset (converted into each node's own space). */
|
|
5564
5564
|
movedAnchors(doc, refs, dx, dy) {
|
|
5565
5565
|
const local = /* @__PURE__ */ new Map();
|
|
5566
|
-
for (const r of refs) if (!local.has(r.nodeId)) local.set(r.nodeId,
|
|
5566
|
+
for (const r of refs) if (!local.has(r.nodeId)) local.set(r.nodeId, _chunkW3GXSUSQcjs.applyMatrixLinear.call(void 0, _chunkW3GXSUSQcjs.invertMatrix.call(void 0, this.worldOf(r.nodeId, doc)), { x: dx, y: dy }));
|
|
5567
5567
|
return this.updateAnchors(doc, refs, (a, ref) => {
|
|
5568
5568
|
const d = local.get(ref.nodeId);
|
|
5569
|
-
return
|
|
5569
|
+
return _chunkW3GXSUSQcjs.translateAnchor.call(void 0, a, d.x, d.y);
|
|
5570
5570
|
});
|
|
5571
5571
|
}
|
|
5572
5572
|
/**
|
|
@@ -5584,7 +5584,7 @@ var VectorEditorController = (_class3 = class {
|
|
|
5584
5584
|
}
|
|
5585
5585
|
/** `doc` with anchor `ref` moved to document point `to` by a Curvature-tool move. */
|
|
5586
5586
|
curvatureMoved(doc, ref, to) {
|
|
5587
|
-
const node =
|
|
5587
|
+
const node = _chunkW3GXSUSQcjs.findVectorNode.call(void 0, doc.nodes, ref.nodeId);
|
|
5588
5588
|
if (_optionalChain([node, 'optionalAccess', _205 => _205.type]) !== "path" || node.locked || !node.subpaths[ref.subpath]) return doc;
|
|
5589
5589
|
const q = this.toLocal(ref.nodeId, to, doc);
|
|
5590
5590
|
const subpaths = node.subpaths.map((sp, i) => i === ref.subpath ? curvatureMoveAnchor(sp, ref.index, q) : sp);
|
|
@@ -5593,7 +5593,7 @@ var VectorEditorController = (_class3 = class {
|
|
|
5593
5593
|
}
|
|
5594
5594
|
/** `doc` with segment `ref` bent through document point `p` at parameter `t`. */
|
|
5595
5595
|
bent(doc, ref, t, p) {
|
|
5596
|
-
const node =
|
|
5596
|
+
const node = _chunkW3GXSUSQcjs.findVectorNode.call(void 0, doc.nodes, ref.nodeId);
|
|
5597
5597
|
if (_optionalChain([node, 'optionalAccess', _206 => _206.type]) !== "path" || node.locked || !node.subpaths[ref.subpath]) return doc;
|
|
5598
5598
|
const q = this.toLocal(ref.nodeId, p, doc);
|
|
5599
5599
|
const subpaths = node.subpaths.map((sp, i) => i === ref.subpath ? bendSegment(sp, ref.segment, t, q) : sp);
|
|
@@ -5618,7 +5618,7 @@ var VectorEditorController = (_class3 = class {
|
|
|
5618
5618
|
if (!getAnchor(this.doc, ref)) return { ok: false, message: "There is no such anchor." };
|
|
5619
5619
|
const local = this.toLocal(ref.nodeId, to);
|
|
5620
5620
|
this.change("Move Handle", () => {
|
|
5621
|
-
this.doc = this.updateAnchors(this.doc, [ref], (a) =>
|
|
5621
|
+
this.doc = this.updateAnchors(this.doc, [ref], (a) => _chunkW3GXSUSQcjs.moveAnchorHandle.call(void 0, a, ref.handle, local, options.breakHandles));
|
|
5622
5622
|
});
|
|
5623
5623
|
return { ok: true };
|
|
5624
5624
|
}
|
|
@@ -5630,7 +5630,7 @@ var VectorEditorController = (_class3 = class {
|
|
|
5630
5630
|
if (n.type !== "path") return n;
|
|
5631
5631
|
const mine = refs.filter((r) => r.nodeId === n.id);
|
|
5632
5632
|
if (!mine.length) return n;
|
|
5633
|
-
const subpaths = n.subpaths.map((sp, s) => mine.filter((r) => r.subpath === s).reduce((acc, r) =>
|
|
5633
|
+
const subpaths = n.subpaths.map((sp, s) => mine.filter((r) => r.subpath === s).reduce((acc, r) => _chunkW3GXSUSQcjs.convertAnchor.call(void 0, acc, r.index, type), sp));
|
|
5634
5634
|
return { ...n, subpaths };
|
|
5635
5635
|
});
|
|
5636
5636
|
this.setDoc(nodes);
|
|
@@ -5641,9 +5641,9 @@ var VectorEditorController = (_class3 = class {
|
|
|
5641
5641
|
insertAnchorAt(nodeId, point) {
|
|
5642
5642
|
const node = this.getNode(nodeId);
|
|
5643
5643
|
if (_optionalChain([node, 'optionalAccess', _208 => _208.type]) !== "path") return null;
|
|
5644
|
-
const hit =
|
|
5644
|
+
const hit = _chunkW3GXSUSQcjs.nearestSegment.call(void 0, node, this.toLocal(nodeId, point));
|
|
5645
5645
|
if (!hit) return null;
|
|
5646
|
-
const { subpath, index } =
|
|
5646
|
+
const { subpath, index } = _chunkW3GXSUSQcjs.insertAnchor.call(void 0, node.subpaths[hit.subpath], hit.segment, hit.t);
|
|
5647
5647
|
const ref = { nodeId, subpath: hit.subpath, index };
|
|
5648
5648
|
this.change("Add Point", () => {
|
|
5649
5649
|
this.replaceNode(nodeId, { ...node, subpaths: node.subpaths.map((sp, i) => i === hit.subpath ? subpath : sp) });
|
|
@@ -5668,7 +5668,7 @@ var VectorEditorController = (_class3 = class {
|
|
|
5668
5668
|
const subpaths = n.subpaths.map((sp, s) => {
|
|
5669
5669
|
const indices = mine.filter((r) => r.subpath === s).map((r) => r.index);
|
|
5670
5670
|
if (!indices.length) return sp;
|
|
5671
|
-
return keepShape ? removeAnchorsKeepingShape(sp, indices) :
|
|
5671
|
+
return keepShape ? removeAnchorsKeepingShape(sp, indices) : _chunkW3GXSUSQcjs.removeAnchors.call(void 0, sp, indices);
|
|
5672
5672
|
}).filter((sp) => sp.anchors.length > 1);
|
|
5673
5673
|
return subpaths.length ? { ...n, subpaths } : null;
|
|
5674
5674
|
});
|
|
@@ -5699,13 +5699,13 @@ var VectorEditorController = (_class3 = class {
|
|
|
5699
5699
|
}
|
|
5700
5700
|
/** Reverses the direction of every subpath of the selected paths. */
|
|
5701
5701
|
reversePaths(ids = this.selection) {
|
|
5702
|
-
const set = new Set(ids.flatMap((id) => this.getNode(id) ?
|
|
5702
|
+
const set = new Set(ids.flatMap((id) => this.getNode(id) ? _chunkW3GXSUSQcjs.collectPathNodes.call(void 0, this.getNode(id)) : []).map((p) => p.id));
|
|
5703
5703
|
if (!set.size) return { ok: false, message: "Select a path." };
|
|
5704
5704
|
this.change("Reverse Path", () => {
|
|
5705
5705
|
this.setDoc(
|
|
5706
5706
|
mapTree(
|
|
5707
5707
|
this.doc.nodes,
|
|
5708
|
-
(n) => n.type === "path" && set.has(n.id) ? { ...n, subpaths: n.subpaths.map(
|
|
5708
|
+
(n) => n.type === "path" && set.has(n.id) ? { ...n, subpaths: n.subpaths.map(_chunkW3GXSUSQcjs.reverseSubpath), ..._optionalChain([n, 'access', _210 => _210.strokeWidthProfile, 'optionalAccess', _211 => _211.length]) ? { strokeWidthProfile: _chunkW3GXSUSQcjs.reverseWidthProfile.call(void 0, n.strokeWidthProfile) } : {} } : n
|
|
5709
5709
|
)
|
|
5710
5710
|
);
|
|
5711
5711
|
this.anchors = [];
|
|
@@ -5722,20 +5722,20 @@ var VectorEditorController = (_class3 = class {
|
|
|
5722
5722
|
for (const id of roots) {
|
|
5723
5723
|
const node = this.getNode(id);
|
|
5724
5724
|
if (node && !node.locked) {
|
|
5725
|
-
for (const p of
|
|
5725
|
+
for (const p of _chunkW3GXSUSQcjs.collectPathNodes.call(void 0, node)) if (!p.locked) out.set(p.id, p);
|
|
5726
5726
|
}
|
|
5727
5727
|
}
|
|
5728
5728
|
const order = [];
|
|
5729
|
-
|
|
5729
|
+
_chunkW3GXSUSQcjs.walkVectorNodes.call(void 0, this.doc.nodes, (n) => {
|
|
5730
5730
|
if (out.has(n.id)) order.push(n.id);
|
|
5731
5731
|
});
|
|
5732
5732
|
return order.map((id) => out.get(id));
|
|
5733
5733
|
}
|
|
5734
5734
|
/** Subpaths of node `from` mapped into node `to`'s own space. */
|
|
5735
5735
|
subpathsIn(from, to) {
|
|
5736
|
-
const m =
|
|
5736
|
+
const m = _chunkW3GXSUSQcjs.multiplyMatrices.call(void 0, this.worldOf(from.id), _chunkW3GXSUSQcjs.invertMatrix.call(void 0, this.worldOf(to)));
|
|
5737
5737
|
if (isRoot(m)) return from.subpaths;
|
|
5738
|
-
const map = (p) =>
|
|
5738
|
+
const map = (p) => _chunkW3GXSUSQcjs.applyMatrix.call(void 0, m, p);
|
|
5739
5739
|
return from.subpaths.map((sp) => ({
|
|
5740
5740
|
closed: sp.closed,
|
|
5741
5741
|
anchors: sp.anchors.map((a) => ({ ...map(a), ...a.in ? { in: map(a.in) } : {}, ...a.out ? { out: map(a.out) } : {}, ...a.type ? { type: a.type } : {}, ...a.corner ? { corner: { ...a.corner } } : {} }))
|
|
@@ -5845,7 +5845,7 @@ var VectorEditorController = (_class3 = class {
|
|
|
5845
5845
|
const node = this.getNode(nodeId);
|
|
5846
5846
|
if (_optionalChain([node, 'optionalAccess', _212 => _212.type]) !== "path" || node.locked) return null;
|
|
5847
5847
|
const local = this.toLocal(nodeId, point);
|
|
5848
|
-
const hit =
|
|
5848
|
+
const hit = _chunkW3GXSUSQcjs.nearestSegment.call(void 0, node, local);
|
|
5849
5849
|
if (!hit) return null;
|
|
5850
5850
|
const sp = node.subpaths[hit.subpath];
|
|
5851
5851
|
const n = sp.anchors.length;
|
|
@@ -5889,25 +5889,25 @@ var VectorEditorController = (_class3 = class {
|
|
|
5889
5889
|
/** Visible, unlocked paths a stroke over `points` can reach: in `ids`, the selection, or (with neither) any whose bounds it crosses. */
|
|
5890
5890
|
strokeTargets(points, ids, pad) {
|
|
5891
5891
|
const blocked = /* @__PURE__ */ new Set();
|
|
5892
|
-
|
|
5892
|
+
_chunkW3GXSUSQcjs.walkVectorNodes.call(void 0, this.doc.nodes, (n, parent) => {
|
|
5893
5893
|
if (n.visible === false || n.locked || parent && blocked.has(parent.id)) blocked.add(n.id);
|
|
5894
5894
|
});
|
|
5895
5895
|
const visible = (p) => !blocked.has(p.id);
|
|
5896
5896
|
if (_optionalChain([ids, 'optionalAccess', _213 => _213.length]) || this.selection.length) return this.pathTargets(_nullishCoalesce(ids, () => ( this.selection))).filter(visible);
|
|
5897
|
-
const box =
|
|
5897
|
+
const box = _chunkW3GXSUSQcjs.polylineBounds.call(void 0, points.map(toPoint2), pad);
|
|
5898
5898
|
if (!box) return [];
|
|
5899
5899
|
const out = [];
|
|
5900
|
-
|
|
5900
|
+
_chunkW3GXSUSQcjs.walkVectorNodes.call(void 0, this.doc.nodes, (n) => {
|
|
5901
5901
|
if (n.type !== "path" || !visible(n)) return;
|
|
5902
|
-
const b =
|
|
5903
|
-
if (b &&
|
|
5902
|
+
const b = _chunkW3GXSUSQcjs.vectorNodeBounds.call(void 0, n, _nullishCoalesce(_chunkW3GXSUSQcjs.vectorParentMatrix.call(void 0, this.doc.nodes, n.id), () => ( _chunkW3GXSUSQcjs.IDENTITY_MATRIX)));
|
|
5903
|
+
if (b && _chunkW3GXSUSQcjs.boundsIntersect.call(void 0, b, box)) out.push(n);
|
|
5904
5904
|
});
|
|
5905
5905
|
return out;
|
|
5906
5906
|
}
|
|
5907
5907
|
/** A stroke's points in node `id`'s own space. */
|
|
5908
5908
|
localPoints(id, points) {
|
|
5909
|
-
const inv =
|
|
5910
|
-
return points.map((p) => toPoint2(
|
|
5909
|
+
const inv = _chunkW3GXSUSQcjs.invertMatrix.call(void 0, this.worldOf(id));
|
|
5910
|
+
return points.map((p) => toPoint2(_chunkW3GXSUSQcjs.applyMatrix.call(void 0, inv, p)));
|
|
5911
5911
|
}
|
|
5912
5912
|
/**
|
|
5913
5913
|
* Knife: cuts closed paths along the polyline `points` (document space) wherever it crosses
|
|
@@ -5916,14 +5916,14 @@ var VectorEditorController = (_class3 = class {
|
|
|
5916
5916
|
* when nothing was cut).
|
|
5917
5917
|
*/
|
|
5918
5918
|
knife(points, options = {}) {
|
|
5919
|
-
const pts =
|
|
5919
|
+
const pts = _chunkW3GXSUSQcjs.simplifyPolyline.call(void 0, points.map(toPoint2), 0.25 / this.viewport.zoom).map(([x, y]) => ({ x, y }));
|
|
5920
5920
|
if (pts.length < 2) return [];
|
|
5921
5921
|
const plan = [];
|
|
5922
5922
|
for (const node of this.strokeTargets(pts, options.ids, 0)) {
|
|
5923
5923
|
const closed = node.subpaths.filter((sp) => sp.anchors.length > 1);
|
|
5924
5924
|
if (!closed.length || closed.some((sp) => !sp.closed)) continue;
|
|
5925
|
-
const result =
|
|
5926
|
-
if (result) plan.push({ node, pieces: result.map((path) =>
|
|
5925
|
+
const result = _chunkW3GXSUSQcjs.knifePath.call(void 0, _chunkW3GXSUSQcjs.subpathsToBezier.call(void 0, closed), _nullishCoalesce(node.fillRule, () => ( "nonzero")), this.localPoints(node.id, pts));
|
|
5926
|
+
if (result) plan.push({ node, pieces: result.map((path) => _chunkW3GXSUSQcjs.bezierToSubpaths.call(void 0, path)) });
|
|
5927
5927
|
}
|
|
5928
5928
|
if (!plan.length) return [];
|
|
5929
5929
|
const created = [];
|
|
@@ -5945,22 +5945,22 @@ var VectorEditorController = (_class3 = class {
|
|
|
5945
5945
|
erase(points, options = {}) {
|
|
5946
5946
|
const width = _nullishCoalesce(options.size, () => ( this.editing.eraserSize));
|
|
5947
5947
|
if (!(width > 0) || !points.length) return [];
|
|
5948
|
-
const pts =
|
|
5949
|
-
const region =
|
|
5948
|
+
const pts = _chunkW3GXSUSQcjs.simplifyPolyline.call(void 0, points.map(toPoint2), Math.min(width * 0.05, 0.25 / this.viewport.zoom));
|
|
5949
|
+
const region = _chunkW3GXSUSQcjs.eraserRegion.call(void 0, pts, width);
|
|
5950
5950
|
if (!region.length) return [];
|
|
5951
5951
|
const plan = [];
|
|
5952
5952
|
const rb = _chunkXGD3FSNCcjs.bezierPathBounds.call(void 0, region);
|
|
5953
5953
|
const reach = rb ? [{ x: rb.minX, y: rb.minY }, { x: rb.maxX, y: rb.maxY }] : points;
|
|
5954
5954
|
for (const node of this.strokeTargets(reach, options.ids, 0)) {
|
|
5955
|
-
const local = _chunkXGD3FSNCcjs.transformBezierPath.call(void 0, region,
|
|
5955
|
+
const local = _chunkXGD3FSNCcjs.transformBezierPath.call(void 0, region, _chunkW3GXSUSQcjs.invertMatrix.call(void 0, this.worldOf(node.id)));
|
|
5956
5956
|
const live = node.subpaths.filter((sp) => sp.anchors.length > 1);
|
|
5957
5957
|
if (!live.length) continue;
|
|
5958
|
-
if (
|
|
5959
|
-
const faces =
|
|
5960
|
-
if (faces) plan.push({ node, pieces: faces.map((f) =>
|
|
5958
|
+
if (_chunkW3GXSUSQcjs.hasPaint.call(void 0, node.fill) && live.every((sp) => sp.closed)) {
|
|
5959
|
+
const faces = _chunkW3GXSUSQcjs.eraseFromFill.call(void 0, _chunkW3GXSUSQcjs.subpathsToBezier.call(void 0, live), _nullishCoalesce(node.fillRule, () => ( "nonzero")), local);
|
|
5960
|
+
if (faces) plan.push({ node, pieces: faces.map((f) => _chunkW3GXSUSQcjs.bezierToSubpaths.call(void 0, f)) });
|
|
5961
5961
|
continue;
|
|
5962
5962
|
}
|
|
5963
|
-
const results = live.map((sp) =>
|
|
5963
|
+
const results = live.map((sp) => _chunkW3GXSUSQcjs.eraseFromOutline.call(void 0, sp, local));
|
|
5964
5964
|
if (results.every((r) => !r)) continue;
|
|
5965
5965
|
const subpaths = live.flatMap((sp, i) => _nullishCoalesce(results[i], () => ( [sp])));
|
|
5966
5966
|
plan.push({ node, pieces: live.length === 1 ? subpaths.map((sp) => [sp]) : [subpaths] });
|
|
@@ -6002,7 +6002,7 @@ var VectorEditorController = (_class3 = class {
|
|
|
6002
6002
|
// -------------------------------------------------------------------------
|
|
6003
6003
|
/** Copies the selection. Returns JSON text for the system clipboard (or null). */
|
|
6004
6004
|
copy() {
|
|
6005
|
-
const nodes = this.selectedRoots().map((id) => this.getNode(id)).filter((n) => !!n).map((n) =>
|
|
6005
|
+
const nodes = this.selectedRoots().map((id) => this.getNode(id)).filter((n) => !!n).map((n) => _chunkW3GXSUSQcjs.cloneVectorNode.call(void 0, n));
|
|
6006
6006
|
if (!nodes.length) return null;
|
|
6007
6007
|
this.clipboard = nodes;
|
|
6008
6008
|
return JSON.stringify({ type: VECTOR_CLIPBOARD_TYPE, nodes });
|
|
@@ -6029,7 +6029,7 @@ var VectorEditorController = (_class3 = class {
|
|
|
6029
6029
|
}
|
|
6030
6030
|
} else if (/<svg[\s>]/i.test(trimmed)) {
|
|
6031
6031
|
try {
|
|
6032
|
-
nodes =
|
|
6032
|
+
nodes = _chunkJLYX4V57cjs.parseVectorSvg.call(void 0, trimmed).nodes;
|
|
6033
6033
|
} catch (e4) {
|
|
6034
6034
|
nodes = null;
|
|
6035
6035
|
}
|
|
@@ -6037,13 +6037,13 @@ var VectorEditorController = (_class3 = class {
|
|
|
6037
6037
|
} else nodes = this.clipboard;
|
|
6038
6038
|
if (!_optionalChain([nodes, 'optionalAccess', _217 => _217.length])) return [];
|
|
6039
6039
|
const offset = _nullishCoalesce(options.offset, () => ( (text && !text.trim().startsWith("{") ? { x: 0, y: 0 } : { x: 10, y: 10 })));
|
|
6040
|
-
const copies = nodes.map((n) =>
|
|
6040
|
+
const copies = nodes.map((n) => _chunkW3GXSUSQcjs.transformVectorNode.call(void 0, this.freshIds(n), _chunkW3GXSUSQcjs.translateMatrix.call(void 0, offset.x, offset.y)));
|
|
6041
6041
|
this.change("Paste", () => {
|
|
6042
6042
|
this.setDoc([...this.doc.nodes, ...copies]);
|
|
6043
6043
|
this.selection = copies.map((n) => n.id);
|
|
6044
6044
|
this.anchors = [];
|
|
6045
6045
|
});
|
|
6046
|
-
if (!text) this.clipboard = copies.map((n) =>
|
|
6046
|
+
if (!text) this.clipboard = copies.map((n) => _chunkW3GXSUSQcjs.cloneVectorNode.call(void 0, n));
|
|
6047
6047
|
return copies.map((n) => n.id);
|
|
6048
6048
|
}
|
|
6049
6049
|
// -------------------------------------------------------------------------
|
|
@@ -6127,7 +6127,7 @@ var VectorEditorController = (_class3 = class {
|
|
|
6127
6127
|
/** Deepest unlocked visible path under `p`. */
|
|
6128
6128
|
/** Live groups being edited (selected, or holding the selection or the edited path): their children are hit as stored. */
|
|
6129
6129
|
enteredGroups() {
|
|
6130
|
-
return
|
|
6130
|
+
return _chunkW3GXSUSQcjs.vectorEnteredGroups.call(void 0, this.doc.nodes, this.editingId ? [...this.selection, this.editingId] : this.selection);
|
|
6131
6131
|
}
|
|
6132
6132
|
hitPath(p) {
|
|
6133
6133
|
const tol = this.tolerance();
|
|
@@ -6137,19 +6137,19 @@ var VectorEditorController = (_class3 = class {
|
|
|
6137
6137
|
const n = list[i];
|
|
6138
6138
|
if (n.visible === false || n.locked) continue;
|
|
6139
6139
|
if (n.type === "group") {
|
|
6140
|
-
if ((
|
|
6141
|
-
const found = search(n.children,
|
|
6140
|
+
if ((_chunkW3GXSUSQcjs.hasOwnVectorAppearance.call(void 0, n) || _chunkW3GXSUSQcjs.isVectorMaskActive.call(void 0, n)) && !entered.has(n.id) && !_chunkW3GXSUSQcjs.hitTestVectorNode.call(void 0, n, p, tol, parent, { entered })) continue;
|
|
6141
|
+
const found = search(n.children, _chunkW3GXSUSQcjs.multiplyMatrices.call(void 0, _chunkW3GXSUSQcjs.nodeMatrix.call(void 0, n), parent));
|
|
6142
6142
|
if (found) return found;
|
|
6143
|
-
} else if (
|
|
6143
|
+
} else if (_chunkW3GXSUSQcjs.hitTestVectorNode.call(void 0, n, p, tol, parent, { entered })) return n;
|
|
6144
6144
|
}
|
|
6145
6145
|
return null;
|
|
6146
6146
|
};
|
|
6147
|
-
return search(this.doc.nodes,
|
|
6147
|
+
return search(this.doc.nodes, _chunkW3GXSUSQcjs.IDENTITY_MATRIX);
|
|
6148
6148
|
}
|
|
6149
6149
|
/** Endpoints of open subpaths of unlocked visible paths (pen tool resumes from them). */
|
|
6150
6150
|
openEndpoints() {
|
|
6151
6151
|
const out = [];
|
|
6152
|
-
|
|
6152
|
+
_chunkW3GXSUSQcjs.walkVectorNodes.call(void 0, this.doc.nodes, (n) => {
|
|
6153
6153
|
if (n.type !== "path" || n.locked || n.visible === false) return;
|
|
6154
6154
|
n.subpaths.forEach((sp, s) => {
|
|
6155
6155
|
if (sp.closed || sp.anchors.length < 1) return;
|
|
@@ -6165,7 +6165,7 @@ var VectorEditorController = (_class3 = class {
|
|
|
6165
6165
|
case "select": {
|
|
6166
6166
|
const handle = this.hitTransformHandle(screen);
|
|
6167
6167
|
if (handle) return { nodeId: null, transformHandle: handle };
|
|
6168
|
-
const node =
|
|
6168
|
+
const node = _chunkW3GXSUSQcjs.hitTestVectorNodes.call(void 0, this.doc.nodes, p, this.tolerance(), { entered: this.enteredGroups() });
|
|
6169
6169
|
return node ? { nodeId: node.id } : null;
|
|
6170
6170
|
}
|
|
6171
6171
|
case "direct": {
|
|
@@ -6177,9 +6177,9 @@ var VectorEditorController = (_class3 = class {
|
|
|
6177
6177
|
if (widget) return { nodeId: widget.ref.nodeId, corner: widget.ref };
|
|
6178
6178
|
for (const id of getEditablePathIds(this.view())) {
|
|
6179
6179
|
const node = this.getNode(id);
|
|
6180
|
-
const seg =
|
|
6180
|
+
const seg = _chunkW3GXSUSQcjs.nearestSegment.call(void 0, node, this.toLocal(id, p));
|
|
6181
6181
|
if (seg && seg.distance <= this.tolerance()) {
|
|
6182
|
-
const point =
|
|
6182
|
+
const point = _chunkW3GXSUSQcjs.applyMatrix.call(void 0, this.worldOf(id), seg.point);
|
|
6183
6183
|
return { nodeId: id, segment: { nodeId: id, subpath: seg.subpath, segment: seg.segment, t: seg.t, point } };
|
|
6184
6184
|
}
|
|
6185
6185
|
}
|
|
@@ -6216,7 +6216,7 @@ var VectorEditorController = (_class3 = class {
|
|
|
6216
6216
|
case "envelope": {
|
|
6217
6217
|
const hit = this.hitEnvelope(screen, p);
|
|
6218
6218
|
if (hit) return { nodeId: hit.target.node.id, envelope: { nodeId: hit.target.node.id, index: hit.index } };
|
|
6219
|
-
const node =
|
|
6219
|
+
const node = _chunkW3GXSUSQcjs.hitTestVectorNodes.call(void 0, this.doc.nodes, p, this.tolerance(), { entered: this.enteredGroups() });
|
|
6220
6220
|
return node ? { nodeId: node.id } : null;
|
|
6221
6221
|
}
|
|
6222
6222
|
default:
|
|
@@ -6252,19 +6252,19 @@ var VectorEditorController = (_class3 = class {
|
|
|
6252
6252
|
strokeSpotAt(p) {
|
|
6253
6253
|
let best = null;
|
|
6254
6254
|
const tol = this.tolerance();
|
|
6255
|
-
|
|
6255
|
+
_chunkW3GXSUSQcjs.walkVectorNodes.call(void 0, this.doc.nodes, (n) => {
|
|
6256
6256
|
if (n.type !== "path" || n.visible === false || n.locked) return;
|
|
6257
6257
|
if (hiddenOrLocked(this.doc.nodes, n.id)) return;
|
|
6258
6258
|
const g = vectorStrokeWidthGeometry(n);
|
|
6259
6259
|
if (!g) return;
|
|
6260
6260
|
const m = this.worldOf(n.id);
|
|
6261
|
-
const local =
|
|
6262
|
-
const near =
|
|
6261
|
+
const local = _chunkW3GXSUSQcjs.applyMatrix.call(void 0, _chunkW3GXSUSQcjs.invertMatrix.call(void 0, m), p);
|
|
6262
|
+
const near = _chunkW3GXSUSQcjs.nearestStrokePosition.call(void 0, g.line, [local.x, local.y]);
|
|
6263
6263
|
if (!near) return;
|
|
6264
|
-
const profile =
|
|
6265
|
-
const w =
|
|
6264
|
+
const profile = _chunkW3GXSUSQcjs.strokeWidthProfileOf.call(void 0, n);
|
|
6265
|
+
const w = _chunkW3GXSUSQcjs.widthProfileAt.call(void 0, profile, near.t);
|
|
6266
6266
|
const reach = Math.max(near.side === "left" ? w.left : w.right, 0) * g.unit + tol;
|
|
6267
|
-
if (near.distance > reach || near.distance >
|
|
6267
|
+
if (near.distance > reach || near.distance > _chunkW3GXSUSQcjs.widthProfileMaxScale.call(void 0, profile) * g.unit + tol) return;
|
|
6268
6268
|
if (best && near.distance >= best.distance) return;
|
|
6269
6269
|
const nx = near.tangent[1];
|
|
6270
6270
|
const ny = -near.tangent[0];
|
|
@@ -6273,9 +6273,9 @@ var VectorEditorController = (_class3 = class {
|
|
|
6273
6273
|
nodeId: n.id,
|
|
6274
6274
|
subpath: near.contour,
|
|
6275
6275
|
t: near.t,
|
|
6276
|
-
point:
|
|
6277
|
-
left:
|
|
6278
|
-
right:
|
|
6276
|
+
point: _chunkW3GXSUSQcjs.applyMatrix.call(void 0, m, { x: cx, y: cy }),
|
|
6277
|
+
left: _chunkW3GXSUSQcjs.applyMatrix.call(void 0, m, { x: cx + nx * w.left * g.unit, y: cy + ny * w.left * g.unit }),
|
|
6278
|
+
right: _chunkW3GXSUSQcjs.applyMatrix.call(void 0, m, { x: cx - nx * w.right * g.unit, y: cy - ny * w.right * g.unit }),
|
|
6279
6279
|
distance: near.distance
|
|
6280
6280
|
};
|
|
6281
6281
|
});
|
|
@@ -6306,11 +6306,11 @@ var VectorEditorController = (_class3 = class {
|
|
|
6306
6306
|
let t;
|
|
6307
6307
|
let subpath;
|
|
6308
6308
|
if (hit) {
|
|
6309
|
-
profile =
|
|
6309
|
+
profile = _chunkW3GXSUSQcjs.sanitizeWidthProfile.call(void 0, node.strokeWidthProfile);
|
|
6310
6310
|
ref = { nodeId: node.id, index: hit.ref.index, subpath: hit.ref.subpath };
|
|
6311
6311
|
t = _nullishCoalesce(_optionalChain([profile, 'access', _225 => _225[ref.index], 'optionalAccess', _226 => _226.t]), () => ( 0));
|
|
6312
6312
|
subpath = hit.ref.subpath;
|
|
6313
|
-
if (hit.ref.part === "center") mode = input.alt && profile.length <
|
|
6313
|
+
if (hit.ref.part === "center") mode = input.alt && profile.length < _chunkW3GXSUSQcjs.VECTOR_WIDTH_PROFILE_MAX_POINTS ? "copy" : "move";
|
|
6314
6314
|
else if (input.alt) side = hit.ref.part;
|
|
6315
6315
|
const same = this.widthPoints.length > 0 && this.widthPoints[0].nodeId === node.id;
|
|
6316
6316
|
const selected = same && this.widthPoints.some((r) => r.index === ref.index);
|
|
@@ -6325,8 +6325,8 @@ var VectorEditorController = (_class3 = class {
|
|
|
6325
6325
|
} else if (mode === "copy" || !selected) this.widthPoints = [ref];
|
|
6326
6326
|
if (mode !== "copy") group = this.widthPoints.filter((r) => r.index !== ref.index).map((r) => r.index);
|
|
6327
6327
|
} else {
|
|
6328
|
-
const near =
|
|
6329
|
-
const inserted =
|
|
6328
|
+
const near = _chunkW3GXSUSQcjs.nearestStrokePosition.call(void 0, g.line, [local.x, local.y]);
|
|
6329
|
+
const inserted = _chunkW3GXSUSQcjs.insertWidthPoint.call(void 0, _chunkW3GXSUSQcjs.strokeWidthProfileOf.call(void 0, node), near.t);
|
|
6330
6330
|
profile = inserted.points;
|
|
6331
6331
|
subpath = near.contour;
|
|
6332
6332
|
t = near.t;
|
|
@@ -6334,7 +6334,7 @@ var VectorEditorController = (_class3 = class {
|
|
|
6334
6334
|
if (input.alt) side = near.side;
|
|
6335
6335
|
this.widthPoints = [ref];
|
|
6336
6336
|
}
|
|
6337
|
-
const at =
|
|
6337
|
+
const at = _chunkW3GXSUSQcjs.strokePositionPoint.call(void 0, g.line, subpath, t);
|
|
6338
6338
|
if (!at) return;
|
|
6339
6339
|
const base = { ...this.doc, nodes: mapTree(this.doc.nodes, (n) => n.id === node.id ? { ...n, strokeWidthProfile: profile } : n) };
|
|
6340
6340
|
this.doc = base;
|
|
@@ -6368,16 +6368,16 @@ var VectorEditorController = (_class3 = class {
|
|
|
6368
6368
|
*/
|
|
6369
6369
|
snapWidthT(drag, node, line2, t, skip) {
|
|
6370
6370
|
const m = this.worldOf(node.id, drag.base);
|
|
6371
|
-
const at =
|
|
6371
|
+
const at = _chunkW3GXSUSQcjs.strokePositionPoint.call(void 0, line2, drag.ref.subpath, t);
|
|
6372
6372
|
if (!at) return t;
|
|
6373
|
-
const here = this.documentToScreen(
|
|
6373
|
+
const here = this.documentToScreen(_chunkW3GXSUSQcjs.applyMatrix.call(void 0, m, { x: at.point[0], y: at.point[1] }));
|
|
6374
6374
|
let best = t;
|
|
6375
6375
|
let bestD = this.hitRadius;
|
|
6376
6376
|
drag.profile.forEach((w, i) => {
|
|
6377
6377
|
if (i === skip || drag.group.includes(i)) return;
|
|
6378
|
-
const q =
|
|
6378
|
+
const q = _chunkW3GXSUSQcjs.strokePositionPoint.call(void 0, line2, drag.ref.subpath, w.t);
|
|
6379
6379
|
if (!q) return;
|
|
6380
|
-
const s = this.documentToScreen(
|
|
6380
|
+
const s = this.documentToScreen(_chunkW3GXSUSQcjs.applyMatrix.call(void 0, m, { x: q.point[0], y: q.point[1] }));
|
|
6381
6381
|
const d = Math.hypot(s.x - here.x, s.y - here.y);
|
|
6382
6382
|
if (d <= bestD) {
|
|
6383
6383
|
best = w.t;
|
|
@@ -6394,18 +6394,18 @@ var VectorEditorController = (_class3 = class {
|
|
|
6394
6394
|
for (let i = list.length - 1; i >= 0; i--) {
|
|
6395
6395
|
const n = list[i];
|
|
6396
6396
|
if (n.visible === false || n.locked) continue;
|
|
6397
|
-
const m =
|
|
6397
|
+
const m = _chunkW3GXSUSQcjs.multiplyMatrices.call(void 0, _chunkW3GXSUSQcjs.nodeMatrix.call(void 0, n), parent);
|
|
6398
6398
|
if (n.type === "group") {
|
|
6399
6399
|
visit(n.children, m);
|
|
6400
6400
|
continue;
|
|
6401
6401
|
}
|
|
6402
|
-
const hit =
|
|
6402
|
+
const hit = _chunkW3GXSUSQcjs.nearestSegment.call(void 0, n, _chunkW3GXSUSQcjs.applyMatrix.call(void 0, _chunkW3GXSUSQcjs.invertMatrix.call(void 0, m), p));
|
|
6403
6403
|
if (hit && hit.distance <= tol && (!best || hit.distance < best.distance - 1e-9)) {
|
|
6404
|
-
best = { nodeId: n.id, subpath: hit.subpath, segment: hit.segment, t: hit.t, point:
|
|
6404
|
+
best = { nodeId: n.id, subpath: hit.subpath, segment: hit.segment, t: hit.t, point: _chunkW3GXSUSQcjs.applyMatrix.call(void 0, m, hit.point), distance: hit.distance };
|
|
6405
6405
|
}
|
|
6406
6406
|
}
|
|
6407
6407
|
};
|
|
6408
|
-
visit(this.doc.nodes,
|
|
6408
|
+
visit(this.doc.nodes, _chunkW3GXSUSQcjs.IDENTITY_MATRIX);
|
|
6409
6409
|
if (!best) return null;
|
|
6410
6410
|
const { distance: _d, ...seg } = best;
|
|
6411
6411
|
return seg;
|
|
@@ -6462,7 +6462,7 @@ var VectorEditorController = (_class3 = class {
|
|
|
6462
6462
|
}
|
|
6463
6463
|
/** The shape under the pointer for the Blend tool, and the anchor of its first subpath under it. */
|
|
6464
6464
|
blendHit(screen, p) {
|
|
6465
|
-
const node =
|
|
6465
|
+
const node = _chunkW3GXSUSQcjs.hitTestVectorNodes.call(void 0, this.doc.nodes, p, this.tolerance());
|
|
6466
6466
|
if (!node) return null;
|
|
6467
6467
|
let anchor = null;
|
|
6468
6468
|
if (node.type === "path" && node.subpaths[0]) {
|
|
@@ -6505,13 +6505,13 @@ var VectorEditorController = (_class3 = class {
|
|
|
6505
6505
|
if (handle) {
|
|
6506
6506
|
const frame = this.frameOf(this.selectedRoots());
|
|
6507
6507
|
const before = this.snapshot();
|
|
6508
|
-
const center =
|
|
6508
|
+
const center = _chunkW3GXSUSQcjs.applyMatrix.call(void 0, _chunkW3GXSUSQcjs.rotateMatrix.call(void 0, frame.angle), { x: frame.x + frame.width / 2, y: frame.y + frame.height / 2 });
|
|
6509
6509
|
this.drag = handle === "rotate" ? { kind: "rotate", start: p, center, before, base: this.doc } : { kind: "scale", handle, start: p, frame, before, base: this.doc };
|
|
6510
6510
|
this.interaction = handle === "rotate" ? { type: "rotate", angle: 0 } : { type: "scale", handle, sx: 1, sy: 1 };
|
|
6511
6511
|
this.notify();
|
|
6512
6512
|
return;
|
|
6513
6513
|
}
|
|
6514
|
-
const node =
|
|
6514
|
+
const node = _chunkW3GXSUSQcjs.hitTestVectorNodes.call(void 0, this.doc.nodes, p, this.tolerance(), { entered: this.enteredGroups() });
|
|
6515
6515
|
if (node) {
|
|
6516
6516
|
const selected = this.selection.includes(node.id);
|
|
6517
6517
|
if (input.shift) {
|
|
@@ -6579,12 +6579,12 @@ var VectorEditorController = (_class3 = class {
|
|
|
6579
6579
|
}
|
|
6580
6580
|
for (const id of getEditablePathIds(this.view())) {
|
|
6581
6581
|
const node = this.getNode(id);
|
|
6582
|
-
const seg =
|
|
6582
|
+
const seg = _chunkW3GXSUSQcjs.nearestSegment.call(void 0, node, this.toLocal(id, p));
|
|
6583
6583
|
if (!seg || seg.distance > this.tolerance()) continue;
|
|
6584
6584
|
const sp = node.subpaths[seg.subpath];
|
|
6585
6585
|
if (input.alt) {
|
|
6586
6586
|
const before = this.snapshot();
|
|
6587
|
-
const { subpath, index } =
|
|
6587
|
+
const { subpath, index } = _chunkW3GXSUSQcjs.insertAnchor.call(void 0, sp, seg.segment, seg.t);
|
|
6588
6588
|
this.replaceNode(id, { ...node, subpaths: node.subpaths.map((s, i) => i === seg.subpath ? subpath : s) });
|
|
6589
6589
|
const ref = { nodeId: id, subpath: seg.subpath, index };
|
|
6590
6590
|
this.anchors = [ref];
|
|
@@ -6651,7 +6651,7 @@ var VectorEditorController = (_class3 = class {
|
|
|
6651
6651
|
let node2 = this.getNode(endpoint.nodeId);
|
|
6652
6652
|
let index = endpoint.index;
|
|
6653
6653
|
if (index === 0 && node2.subpaths[endpoint.subpath].anchors.length > 1) {
|
|
6654
|
-
node2 = { ...node2, subpaths: node2.subpaths.map((s, i) => i === endpoint.subpath ?
|
|
6654
|
+
node2 = { ...node2, subpaths: node2.subpaths.map((s, i) => i === endpoint.subpath ? _chunkW3GXSUSQcjs.reverseSubpath.call(void 0, s) : s) };
|
|
6655
6655
|
this.replaceNode(node2.id, node2);
|
|
6656
6656
|
index = node2.subpaths[endpoint.subpath].anchors.length - 1;
|
|
6657
6657
|
}
|
|
@@ -6754,7 +6754,7 @@ var VectorEditorController = (_class3 = class {
|
|
|
6754
6754
|
drag.targets = void 0;
|
|
6755
6755
|
}
|
|
6756
6756
|
({ dx, dy } = this.snapMove(drag, dx, dy, input));
|
|
6757
|
-
this.doc = this.transformed(drag.base, new Set(this.selectedRoots()),
|
|
6757
|
+
this.doc = this.transformed(drag.base, new Set(this.selectedRoots()), _chunkW3GXSUSQcjs.translateMatrix.call(void 0, dx, dy));
|
|
6758
6758
|
this.interaction = { type: "move", dx, dy };
|
|
6759
6759
|
this.notify(true);
|
|
6760
6760
|
return;
|
|
@@ -6762,7 +6762,7 @@ var VectorEditorController = (_class3 = class {
|
|
|
6762
6762
|
case "scale": {
|
|
6763
6763
|
if (this.freeDistort && drag.handle !== "rotate") return this.moveDistort(drag, p, input);
|
|
6764
6764
|
const angle = drag.frame.angle;
|
|
6765
|
-
const q = angle ?
|
|
6765
|
+
const q = angle ? _chunkW3GXSUSQcjs.applyMatrix.call(void 0, _chunkW3GXSUSQcjs.rotateMatrix.call(void 0, -angle), p) : p;
|
|
6766
6766
|
let { sx, sy, origin } = scaleFor(drag.handle, drag.frame, q, input);
|
|
6767
6767
|
if (this.snap.objects && !input.mod && drag.handle !== "rotate") {
|
|
6768
6768
|
drag.targets ??= VectorSnapTargets.forResize(drag.base, this.selectedRoots());
|
|
@@ -6771,7 +6771,7 @@ var VectorEditorController = (_class3 = class {
|
|
|
6771
6771
|
this.setGuides(res);
|
|
6772
6772
|
} else this.setGuides(null);
|
|
6773
6773
|
const ids = new Set(this.selectedRoots());
|
|
6774
|
-
this.doc = this.transformed(drag.base, ids, this.inFrame(angle,
|
|
6774
|
+
this.doc = this.transformed(drag.base, ids, this.inFrame(angle, _chunkW3GXSUSQcjs.scaleMatrix.call(void 0, sx, sy, origin)));
|
|
6775
6775
|
this.interaction = { type: "scale", handle: drag.handle, sx, sy };
|
|
6776
6776
|
this.notify(true);
|
|
6777
6777
|
return;
|
|
@@ -6781,13 +6781,13 @@ var VectorEditorController = (_class3 = class {
|
|
|
6781
6781
|
const a1 = Math.atan2(p.y - drag.center.y, p.x - drag.center.x);
|
|
6782
6782
|
let angle = (a1 - a0) * 180 / Math.PI;
|
|
6783
6783
|
if (input.shift) angle = Math.round(angle / 15) * 15;
|
|
6784
|
-
this.doc = this.transformed(drag.base, new Set(this.selectedRoots()),
|
|
6784
|
+
this.doc = this.transformed(drag.base, new Set(this.selectedRoots()), _chunkW3GXSUSQcjs.rotateMatrix.call(void 0, angle, drag.center));
|
|
6785
6785
|
this.interaction = { type: "rotate", angle };
|
|
6786
6786
|
this.notify(true);
|
|
6787
6787
|
return;
|
|
6788
6788
|
}
|
|
6789
6789
|
case "marquee": {
|
|
6790
|
-
const bounds =
|
|
6790
|
+
const bounds = _chunkW3GXSUSQcjs.boundsFromPoints.call(void 0, drag.start, p);
|
|
6791
6791
|
this.interaction = { type: "marquee", bounds };
|
|
6792
6792
|
if (drag.anchorsMode) {
|
|
6793
6793
|
const inside = getVisibleAnchors(this.view()).filter((r) => {
|
|
@@ -6797,8 +6797,8 @@ var VectorEditorController = (_class3 = class {
|
|
|
6797
6797
|
this.anchors = [...drag.baseAnchors, ...inside.filter((r) => !drag.baseAnchors.some((b) => sameRef(b, r)))];
|
|
6798
6798
|
} else {
|
|
6799
6799
|
const hits = this.doc.nodes.filter((n) => !n.locked && n.visible !== false).filter((n) => {
|
|
6800
|
-
const b =
|
|
6801
|
-
return b &&
|
|
6800
|
+
const b = _chunkW3GXSUSQcjs.vectorNodeBounds.call(void 0, n);
|
|
6801
|
+
return b && _chunkW3GXSUSQcjs.boundsIntersect.call(void 0, b, bounds);
|
|
6802
6802
|
}).map((n) => n.id);
|
|
6803
6803
|
this.selection = [.../* @__PURE__ */ new Set([...drag.base, ...hits])];
|
|
6804
6804
|
}
|
|
@@ -6830,7 +6830,7 @@ var VectorEditorController = (_class3 = class {
|
|
|
6830
6830
|
const leave = anchor ? { at: { x: anchor.x, y: anchor.y }, constrain: input.shift ? "angle" : null } : null;
|
|
6831
6831
|
const pt = this.snapDrawn(p, leave, input, () => drag.targets ??= VectorSnapTargets.forHandle(drag.base, drag.ref.nodeId));
|
|
6832
6832
|
const local = this.toLocal(drag.ref.nodeId, pt, drag.base);
|
|
6833
|
-
this.doc = this.updateAnchors(drag.base, [drag.ref], (a) =>
|
|
6833
|
+
this.doc = this.updateAnchors(drag.base, [drag.ref], (a) => _chunkW3GXSUSQcjs.moveAnchorHandle.call(void 0, a, drag.ref.handle, local, input.alt));
|
|
6834
6834
|
this.interaction = { type: "handle", ref: drag.ref };
|
|
6835
6835
|
this.notify(true);
|
|
6836
6836
|
return;
|
|
@@ -6839,10 +6839,10 @@ var VectorEditorController = (_class3 = class {
|
|
|
6839
6839
|
if (!drag.moved && Math.hypot(p.x - drag.start.x, p.y - drag.start.y) * this.viewport.zoom < 3) return;
|
|
6840
6840
|
drag.moved = true;
|
|
6841
6841
|
const c = drag.widget.corner;
|
|
6842
|
-
const inv =
|
|
6843
|
-
const d =
|
|
6844
|
-
const radius = Math.max(0, Math.min(c.maxRadius, drag.widget.drawnRadius +
|
|
6845
|
-
this.doc = this.updateAnchors(drag.base, drag.refs, (a) =>
|
|
6842
|
+
const inv = _chunkW3GXSUSQcjs.invertMatrix.call(void 0, this.worldOf(drag.widget.ref.nodeId, drag.base));
|
|
6843
|
+
const d = _chunkW3GXSUSQcjs.applyMatrixLinear.call(void 0, inv, { x: p.x - drag.start.x, y: p.y - drag.start.y });
|
|
6844
|
+
const radius = Math.max(0, Math.min(c.maxRadius, drag.widget.drawnRadius + _chunkW3GXSUSQcjs.cornerRadiusChange.call(void 0, c, d)));
|
|
6845
|
+
this.doc = this.updateAnchors(drag.base, drag.refs, (a) => _chunkW3GXSUSQcjs.setAnchorCorner.call(void 0, a, radius));
|
|
6846
6846
|
this.interaction = { type: "corner", ref: drag.widget.ref, radius };
|
|
6847
6847
|
this.notify(true);
|
|
6848
6848
|
return;
|
|
@@ -6879,8 +6879,8 @@ var VectorEditorController = (_class3 = class {
|
|
|
6879
6879
|
const side = drag.closing ? "in" : "out";
|
|
6880
6880
|
const pos = this.toLocal(drag.ref.nodeId, drag.closing ? { x: 2 * anchor.x - pt.x, y: 2 * anchor.y - pt.y } : pt, drag.base);
|
|
6881
6881
|
this.doc = this.updateAnchors(drag.base, [drag.ref], (a) => {
|
|
6882
|
-
if (drag.outOnly || drag.altBreaks && input.alt) return
|
|
6883
|
-
return
|
|
6882
|
+
if (drag.outOnly || drag.altBreaks && input.alt) return _chunkW3GXSUSQcjs.moveAnchorHandle.call(void 0, a, side, pos, true);
|
|
6883
|
+
return _chunkW3GXSUSQcjs.moveAnchorHandle.call(void 0, { ...a, type: "symmetric" }, side, pos);
|
|
6884
6884
|
});
|
|
6885
6885
|
this.notify(true);
|
|
6886
6886
|
return;
|
|
@@ -6908,7 +6908,7 @@ var VectorEditorController = (_class3 = class {
|
|
|
6908
6908
|
if (input.alt) start = { x: start.x - w, y: start.y - h };
|
|
6909
6909
|
const x2 = drag.start.x + w;
|
|
6910
6910
|
const y2 = drag.start.y + h;
|
|
6911
|
-
bounds =
|
|
6911
|
+
bounds = _chunkW3GXSUSQcjs.boundsFromPoints.call(void 0, start, { x: x2, y: y2 });
|
|
6912
6912
|
}
|
|
6913
6913
|
const shaped = this.createShapeNode({ kind: drag.tool, ...bounds });
|
|
6914
6914
|
this.replaceNode(drag.nodeId, { ...node, subpaths: shaped.subpaths });
|
|
@@ -6919,32 +6919,32 @@ var VectorEditorController = (_class3 = class {
|
|
|
6919
6919
|
case "width": {
|
|
6920
6920
|
if (!drag.moved && Math.hypot(p.x - drag.start.x, p.y - drag.start.y) * this.viewport.zoom < 2) return;
|
|
6921
6921
|
drag.moved = true;
|
|
6922
|
-
const node =
|
|
6922
|
+
const node = _chunkW3GXSUSQcjs.findVectorNode.call(void 0, drag.base.nodes, drag.ref.nodeId);
|
|
6923
6923
|
const local = this.toLocal(node.id, p, drag.base);
|
|
6924
6924
|
const src = drag.profile[drag.source];
|
|
6925
6925
|
let profile;
|
|
6926
6926
|
let index = drag.source;
|
|
6927
6927
|
if (drag.mode !== "width") {
|
|
6928
6928
|
const g = vectorStrokeWidthGeometry(node);
|
|
6929
|
-
const near = g ?
|
|
6929
|
+
const near = g ? _chunkW3GXSUSQcjs.nearestStrokePosition.call(void 0, g.line, [local.x, local.y], drag.ref.subpath) : null;
|
|
6930
6930
|
if (!g || !near) return;
|
|
6931
6931
|
const t = drag.group.length ? near.t : this.snapWidthT(drag, node, g.line, near.t, drag.source);
|
|
6932
6932
|
if (drag.mode === "copy") {
|
|
6933
|
-
({ points: profile, index } =
|
|
6933
|
+
({ points: profile, index } = _chunkW3GXSUSQcjs.insertWidthPoint.call(void 0, drag.profile, t, { left: src.left, right: src.right }, { step: true }));
|
|
6934
6934
|
} else if (drag.group.length) {
|
|
6935
6935
|
const shifted = shiftWidthPoints(drag.profile, [drag.source, ...drag.group], t - src.t);
|
|
6936
6936
|
profile = shifted.points;
|
|
6937
6937
|
drag.renumber = shifted.renumber;
|
|
6938
6938
|
index = _nullishCoalesce(shifted.renumber.get(drag.source), () => ( drag.source));
|
|
6939
|
-
} else profile =
|
|
6939
|
+
} else profile = _chunkW3GXSUSQcjs.setWidthPoint.call(void 0, drag.profile, drag.source, { t });
|
|
6940
6940
|
} else {
|
|
6941
6941
|
const off = ((local.x - drag.origin.x) * drag.normal.x + (local.y - drag.origin.y) * drag.normal.y) / drag.unit;
|
|
6942
6942
|
const patch = drag.side === "both" ? { left: Math.abs(off), right: Math.abs(off) } : drag.side === "left" ? { left: Math.max(0, off) } : { right: Math.max(0, -off) };
|
|
6943
|
-
profile =
|
|
6943
|
+
profile = _chunkW3GXSUSQcjs.setWidthPoint.call(void 0, drag.profile, drag.source, patch);
|
|
6944
6944
|
if (drag.group.length) {
|
|
6945
6945
|
const dl = profile[drag.source].left - src.left;
|
|
6946
6946
|
const dr = profile[drag.source].right - src.right;
|
|
6947
|
-
for (const i of drag.group) profile =
|
|
6947
|
+
for (const i of drag.group) profile = _chunkW3GXSUSQcjs.setWidthPoint.call(void 0, profile, i, { left: Math.max(0, drag.profile[i].left + dl), right: Math.max(0, drag.profile[i].right + dr) });
|
|
6948
6948
|
}
|
|
6949
6949
|
}
|
|
6950
6950
|
this.doc = { ...drag.base, nodes: mapTree(drag.base.nodes, (n) => n.id === node.id ? { ...n, strokeWidthProfile: profile } : n) };
|
|
@@ -7089,8 +7089,8 @@ var VectorEditorController = (_class3 = class {
|
|
|
7089
7089
|
case "corner": {
|
|
7090
7090
|
if (drag.moved) return this.commit("Corner Radius", drag.before);
|
|
7091
7091
|
if (drag.alt) {
|
|
7092
|
-
const kind =
|
|
7093
|
-
this.doc = this.updateAnchors(drag.base, drag.refs, (a) =>
|
|
7092
|
+
const kind = _chunkW3GXSUSQcjs.nextVectorCornerKind.call(void 0, drag.widget.kind);
|
|
7093
|
+
this.doc = this.updateAnchors(drag.base, drag.refs, (a) => _chunkW3GXSUSQcjs.setAnchorCorner.call(void 0, a, _nullishCoalesce(_optionalChain([a, 'access', _243 => _243.corner, 'optionalAccess', _244 => _244.radius]), () => ( 0)), kind));
|
|
7094
7094
|
return this.commit("Corner Kind", drag.before);
|
|
7095
7095
|
}
|
|
7096
7096
|
const ref = drag.widget.ref;
|
|
@@ -7135,7 +7135,7 @@ var VectorEditorController = (_class3 = class {
|
|
|
7135
7135
|
return this.commit(drag.label, drag.before);
|
|
7136
7136
|
case "shape": {
|
|
7137
7137
|
const node = this.getNode(drag.nodeId);
|
|
7138
|
-
const b = node ?
|
|
7138
|
+
const b = node ? _chunkW3GXSUSQcjs.vectorNodeBounds.call(void 0, node) : null;
|
|
7139
7139
|
const min = 2 / this.viewport.zoom;
|
|
7140
7140
|
if (!b || b.width < min && b.height < min) {
|
|
7141
7141
|
this.doc = drag.before.doc;
|
|
@@ -7171,7 +7171,7 @@ var VectorEditorController = (_class3 = class {
|
|
|
7171
7171
|
anchors[anchors.length - 1].out = { x: c.p1[0], y: c.p1[1] };
|
|
7172
7172
|
anchors.push({ x: c.p3[0], y: c.p3[1], in: { x: c.p2[0], y: c.p2[1] } });
|
|
7173
7173
|
}
|
|
7174
|
-
const subpaths = anchors.length > 1 ?
|
|
7174
|
+
const subpaths = anchors.length > 1 ? _chunkW3GXSUSQcjs.bezierToSubpaths.call(void 0, _chunkW3GXSUSQcjs.subpathsToBezier.call(void 0, [{ anchors, closed: false }])) : node.subpaths;
|
|
7175
7175
|
const profile = drag.pressures ? pencilPressureProfile(drag.points, drag.pressures) : [];
|
|
7176
7176
|
this.replaceNode(drag.nodeId, { ...node, subpaths, ...profile.length ? { strokeWidthProfile: profile } : {} });
|
|
7177
7177
|
this.selection = [drag.nodeId];
|
|
@@ -7234,7 +7234,7 @@ var VectorEditorController = (_class3 = class {
|
|
|
7234
7234
|
const id = _nullishCoalesce(_optionalChain([this, 'access', _252 => _252.hover, 'optionalAccess', _253 => _253.segment, 'optionalAccess', _254 => _254.nodeId]), () => ( this.editingId));
|
|
7235
7235
|
if (id) {
|
|
7236
7236
|
const node = this.getNode(id);
|
|
7237
|
-
const seg = node ?
|
|
7237
|
+
const seg = node ? _chunkW3GXSUSQcjs.nearestSegment.call(void 0, node, this.toLocal(id, p)) : null;
|
|
7238
7238
|
if (seg && seg.distance <= this.tolerance()) this.insertAnchorAt(id, p);
|
|
7239
7239
|
}
|
|
7240
7240
|
return;
|
|
@@ -7387,11 +7387,11 @@ function inkShapeLabel(shape) {
|
|
|
7387
7387
|
function inkShapeSubpath(shape) {
|
|
7388
7388
|
switch (shape.kind) {
|
|
7389
7389
|
case "line":
|
|
7390
|
-
return
|
|
7390
|
+
return _chunkW3GXSUSQcjs.lineSubpath.call(void 0, { x: shape.a[0], y: shape.a[1] }, { x: shape.b[0], y: shape.b[1] });
|
|
7391
7391
|
case "rect":
|
|
7392
|
-
return
|
|
7392
|
+
return _chunkW3GXSUSQcjs.rectSubpath.call(void 0, shape);
|
|
7393
7393
|
case "ellipse":
|
|
7394
|
-
return
|
|
7394
|
+
return _chunkW3GXSUSQcjs.ellipseSubpath.call(void 0, shape);
|
|
7395
7395
|
case "polygon":
|
|
7396
7396
|
return { anchors: shape.points.map(([x, y]) => ({ x, y })), closed: true };
|
|
7397
7397
|
}
|
|
@@ -7428,17 +7428,17 @@ function withStyle(node, style) {
|
|
|
7428
7428
|
const { fills, strokes, ...shorthand } = style;
|
|
7429
7429
|
let next = { ...node, ...shorthand };
|
|
7430
7430
|
if ("strokeWidthProfile" in style) {
|
|
7431
|
-
const p = style.strokeWidthProfile ?
|
|
7431
|
+
const p = style.strokeWidthProfile ? _chunkW3GXSUSQcjs.sanitizeWidthProfile.call(void 0, style.strokeWidthProfile) : [];
|
|
7432
7432
|
if (p.length) next.strokeWidthProfile = p;
|
|
7433
7433
|
else delete next.strokeWidthProfile;
|
|
7434
7434
|
}
|
|
7435
|
-
next =
|
|
7436
|
-
if (fills !== void 0) next =
|
|
7437
|
-
if (strokes !== void 0) next =
|
|
7435
|
+
next = _chunkW3GXSUSQcjs.normalizeVectorPaintStacks.call(void 0, next, "shorthand");
|
|
7436
|
+
if (fills !== void 0) next = _chunkW3GXSUSQcjs.withVectorFills.call(void 0, next, _chunkW3GXSUSQcjs.sanitizeVectorFills.call(void 0, _nullishCoalesce(fills, () => ( []))));
|
|
7437
|
+
if (strokes !== void 0) next = _chunkW3GXSUSQcjs.withVectorStrokes.call(void 0, next, _chunkW3GXSUSQcjs.sanitizeVectorStrokes.call(void 0, _nullishCoalesce(strokes, () => ( []))));
|
|
7438
7438
|
return next;
|
|
7439
7439
|
}
|
|
7440
7440
|
function hiddenOrLocked(nodes, id) {
|
|
7441
|
-
const loc =
|
|
7441
|
+
const loc = _chunkW3GXSUSQcjs.locateVectorNode.call(void 0, nodes, id);
|
|
7442
7442
|
if (!loc) return false;
|
|
7443
7443
|
const n = loc.list[loc.index];
|
|
7444
7444
|
if (n.locked || n.visible === false) return true;
|
|
@@ -7451,7 +7451,7 @@ function pencilPressureProfile(points, pressures) {
|
|
|
7451
7451
|
for (let i = 1; i < n; i++) s.push(s[i - 1] + Math.hypot(points[i][0] - points[i - 1][0], points[i][1] - points[i - 1][1]));
|
|
7452
7452
|
const total = s[n - 1];
|
|
7453
7453
|
if (!(total > 0)) return [];
|
|
7454
|
-
return
|
|
7454
|
+
return _chunkW3GXSUSQcjs.pressureWidthProfile.call(void 0, s.map((d, i) => ({ t: d / total, pressure: pressures[i] })));
|
|
7455
7455
|
}
|
|
7456
7456
|
|
|
7457
7457
|
// src/vector/render.ts
|
|
@@ -7460,9 +7460,9 @@ var fmtMatrix = (m) => `matrix(${m.map((n) => Math.round(n * 1e6) / 1e6).join("
|
|
|
7460
7460
|
var VECTOR_BUILDER_HATCH_GAP = 6;
|
|
7461
7461
|
function nodeFinish(node, filters, idPrefix) {
|
|
7462
7462
|
const out = {};
|
|
7463
|
-
const blend =
|
|
7463
|
+
const blend = _chunkW3GXSUSQcjs.vectorBlendModeCss.call(void 0, node.blendMode);
|
|
7464
7464
|
if (blend) out.blendMode = blend;
|
|
7465
|
-
const filter =
|
|
7465
|
+
const filter = _chunkJLYX4V57cjs.vectorNodeFilterSvg.call(void 0, node, `${idPrefix}filter-${node.id}`);
|
|
7466
7466
|
if (filter) {
|
|
7467
7467
|
filters.push(filter);
|
|
7468
7468
|
out.filter = `url(#${filter.id})`;
|
|
@@ -7479,16 +7479,16 @@ function lineStyle(node) {
|
|
|
7479
7479
|
}
|
|
7480
7480
|
function renderLayers(node, defs, idPrefix) {
|
|
7481
7481
|
const out = [];
|
|
7482
|
-
for (const l of
|
|
7482
|
+
for (const l of _chunkW3GXSUSQcjs.vectorPaintLayerNodes.call(void 0, node)) {
|
|
7483
7483
|
if (!l.drawn) continue;
|
|
7484
7484
|
const role = l.kind;
|
|
7485
|
-
const paint =
|
|
7485
|
+
const paint = _chunkJLYX4V57cjs.vectorPaintToSvg.call(void 0, l.layer.paint, `${idPrefix}${role}-${node.id}-${l.index}`, { node: l.node, ...role === "stroke" ? { role } : {} });
|
|
7486
7486
|
defs.push(...paint.defs);
|
|
7487
|
-
const blend =
|
|
7487
|
+
const blend = _chunkW3GXSUSQcjs.vectorBlendModeCss.call(void 0, l.layer.blendMode);
|
|
7488
7488
|
const base = { kind: role, index: l.index, opacity: _nullishCoalesce(l.layer.opacity, () => ( 1)), ...blend ? { blendMode: blend } : {} };
|
|
7489
7489
|
if (role === "fill") out.push({ ...base, fill: paint.value, stroke: "none", strokeWidth: 0 });
|
|
7490
7490
|
else {
|
|
7491
|
-
const strokeParts =
|
|
7491
|
+
const strokeParts = _chunkJLYX4V57cjs.vectorStrokeSvgParts.call(void 0, l.node, `${idPrefix}clip-${node.id}-${l.index}`);
|
|
7492
7492
|
out.push({ ...base, fill: "none", stroke: paint.value, ...lineStyle(l.node), ...strokeParts ? { strokeParts } : {} });
|
|
7493
7493
|
}
|
|
7494
7494
|
}
|
|
@@ -7496,11 +7496,11 @@ function renderLayers(node, defs, idPrefix) {
|
|
|
7496
7496
|
}
|
|
7497
7497
|
function renderNode(stored, defs, filters, idPrefix) {
|
|
7498
7498
|
if (stored.visible === false) return null;
|
|
7499
|
-
const node =
|
|
7499
|
+
const node = _chunkW3GXSUSQcjs.expandVectorAppearance.call(void 0, stored);
|
|
7500
7500
|
if (node.type === "group") {
|
|
7501
7501
|
const finish2 = nodeFinish(node, filters, idPrefix);
|
|
7502
|
-
const masked =
|
|
7503
|
-
const list =
|
|
7502
|
+
const masked = _chunkW3GXSUSQcjs.isVectorMaskGroup.call(void 0, node) ? renderMask(node, defs, filters, idPrefix) : null;
|
|
7503
|
+
const list = _chunkW3GXSUSQcjs.isVectorMaskGroup.call(void 0, node) ? node.children.slice(1) : node.children;
|
|
7504
7504
|
const children = list.map((c) => renderNode(c, defs, filters, idPrefix)).filter((c) => !!c);
|
|
7505
7505
|
return {
|
|
7506
7506
|
kind: "group",
|
|
@@ -7517,12 +7517,12 @@ function renderNode(stored, defs, filters, idPrefix) {
|
|
|
7517
7517
|
kind: "path",
|
|
7518
7518
|
id: node.id,
|
|
7519
7519
|
...node.transform ? { transform: fmtMatrix(node.transform) } : {},
|
|
7520
|
-
d:
|
|
7520
|
+
d: _chunkW3GXSUSQcjs.vectorPathData.call(void 0, node),
|
|
7521
7521
|
fillRule: _nullishCoalesce(node.fillRule, () => ( "nonzero")),
|
|
7522
7522
|
opacity: _nullishCoalesce(node.opacity, () => ( 1)),
|
|
7523
7523
|
...finish
|
|
7524
7524
|
};
|
|
7525
|
-
if (
|
|
7525
|
+
if (_chunkW3GXSUSQcjs.needsVectorPaintLayers.call(void 0, node)) {
|
|
7526
7526
|
const layers = renderLayers(node, defs, idPrefix);
|
|
7527
7527
|
const fill2 = layers.filter((l) => l.kind === "fill").at(-1);
|
|
7528
7528
|
const stroke2 = layers.filter((l) => l.kind === "stroke").at(-1);
|
|
@@ -7538,10 +7538,10 @@ function renderNode(stored, defs, filters, idPrefix) {
|
|
|
7538
7538
|
layers
|
|
7539
7539
|
};
|
|
7540
7540
|
}
|
|
7541
|
-
const fill =
|
|
7542
|
-
const stroke =
|
|
7541
|
+
const fill = _chunkJLYX4V57cjs.vectorPaintToSvg.call(void 0, node.fill, `${idPrefix}fill-${node.id}`, { node });
|
|
7542
|
+
const stroke = _chunkJLYX4V57cjs.vectorPaintToSvg.call(void 0, node.stroke, `${idPrefix}stroke-${node.id}`, { node, role: "stroke" });
|
|
7543
7543
|
defs.push(...fill.defs, ...stroke.defs);
|
|
7544
|
-
const strokeParts = stroke.value !== "none" ?
|
|
7544
|
+
const strokeParts = stroke.value !== "none" ? _chunkJLYX4V57cjs.vectorStrokeSvgParts.call(void 0, node, `${idPrefix}clip-${node.id}`) : void 0;
|
|
7545
7545
|
return {
|
|
7546
7546
|
...common,
|
|
7547
7547
|
...strokeParts ? { strokeParts } : {},
|
|
@@ -7551,8 +7551,8 @@ function renderNode(stored, defs, filters, idPrefix) {
|
|
|
7551
7551
|
};
|
|
7552
7552
|
}
|
|
7553
7553
|
function renderMask(group, defs, filters, idPrefix) {
|
|
7554
|
-
if (!
|
|
7555
|
-
const data =
|
|
7554
|
+
if (!_chunkW3GXSUSQcjs.isVectorMaskActive.call(void 0, group)) return null;
|
|
7555
|
+
const data = _chunkW3GXSUSQcjs.vectorMaskRenderData.call(void 0, group, `${idPrefix}mask-${group.id}`, `${idPrefix}mask-filter-${group.id}`);
|
|
7556
7556
|
if (!data) return null;
|
|
7557
7557
|
const { invertFilter, ...mask } = data;
|
|
7558
7558
|
if (invertFilter) filters.push(invertFilter);
|
|
@@ -7580,17 +7580,17 @@ var toScreen = (state, p) => ({ x: p.x * state.viewport.zoom + state.viewport.x,
|
|
|
7580
7580
|
function screenOutline(state, node, entered) {
|
|
7581
7581
|
const v = state.viewport;
|
|
7582
7582
|
const view = [v.zoom, 0, 0, v.zoom, v.x, v.y];
|
|
7583
|
-
const parent = _nullishCoalesce(
|
|
7583
|
+
const parent = _nullishCoalesce(_chunkW3GXSUSQcjs.vectorParentMatrix.call(void 0, state.document.nodes, node.id), () => ( _chunkW3GXSUSQcjs.IDENTITY_MATRIX));
|
|
7584
7584
|
return outlinePaths(node, parent, entered).map((path) => _chunkXGD3FSNCcjs.bezierPathToSvg.call(void 0, _chunkXGD3FSNCcjs.transformBezierPath.call(void 0, path, view), { precision: 2 })).join(" ");
|
|
7585
7585
|
}
|
|
7586
7586
|
function outlinePaths(node, parent, entered) {
|
|
7587
|
-
if (node.type === "path") return [
|
|
7588
|
-
const m =
|
|
7589
|
-
if ((
|
|
7587
|
+
if (node.type === "path") return [_chunkW3GXSUSQcjs.vectorPathWorldBezier.call(void 0, node, parent, { effects: false })];
|
|
7588
|
+
const m = _chunkW3GXSUSQcjs.multiplyMatrices.call(void 0, _chunkW3GXSUSQcjs.nodeMatrix.call(void 0, node), parent);
|
|
7589
|
+
if ((_chunkW3GXSUSQcjs.hasOwnVectorAppearance.call(void 0, node) || _chunkW3GXSUSQcjs.isVectorMaskActive.call(void 0, node)) && !entered.has(node.id)) return [_chunkXGD3FSNCcjs.transformBezierPath.call(void 0, _chunkW3GXSUSQcjs.vectorAppearanceOutline.call(void 0, node), m)];
|
|
7590
7590
|
return node.children.filter((c) => c.visible !== false).flatMap((c) => outlinePaths(c, m, entered));
|
|
7591
7591
|
}
|
|
7592
7592
|
function getVectorEnteredGroups(state) {
|
|
7593
|
-
return
|
|
7593
|
+
return _chunkW3GXSUSQcjs.vectorEnteredGroups.call(void 0, state.document.nodes, state.editingId ? [...state.selection, state.editingId] : state.selection);
|
|
7594
7594
|
}
|
|
7595
7595
|
function collect(node) {
|
|
7596
7596
|
if (node.type === "path") return [node];
|
|
@@ -7604,7 +7604,7 @@ function getVectorOverlayRenderData(state) {
|
|
|
7604
7604
|
const seen = /* @__PURE__ */ new Set();
|
|
7605
7605
|
const outline = (id, selected2) => {
|
|
7606
7606
|
if (seen.has(id)) return;
|
|
7607
|
-
const node =
|
|
7607
|
+
const node = _chunkW3GXSUSQcjs.findVectorNode.call(void 0, doc.nodes, id);
|
|
7608
7608
|
if (!node || node.visible === false) return;
|
|
7609
7609
|
seen.add(id);
|
|
7610
7610
|
outlines.push({ id, d: screenOutline(state, node, entered), selected: selected2 });
|
|
@@ -7623,7 +7623,7 @@ function getVectorOverlayRenderData(state) {
|
|
|
7623
7623
|
const a = getAnchorWorld(doc, ref);
|
|
7624
7624
|
const s = toScreen(state, a);
|
|
7625
7625
|
const closes = !!state.pen && state.pen.nodeId === ref.nodeId && state.pen.subpath === ref.subpath && ref.index === 0;
|
|
7626
|
-
return { ref, x: s.x, y: s.y, type: _nullishCoalesce(a.type, () => (
|
|
7626
|
+
return { ref, x: s.x, y: s.y, type: _nullishCoalesce(a.type, () => ( _chunkW3GXSUSQcjs.inferAnchorType.call(void 0, a))), selected: selected(ref), hovered: sameAnchor(_optionalChain([state, 'access', _273 => _273.hover, 'optionalAccess', _274 => _274.anchor]), ref), closes };
|
|
7627
7627
|
});
|
|
7628
7628
|
if (state.tool === "pen" && !state.pen && _optionalChain([state, 'access', _275 => _275.hover, 'optionalAccess', _276 => _276.anchor])) {
|
|
7629
7629
|
const a = getAnchorWorld(doc, state.hover.anchor);
|
|
@@ -7649,7 +7649,7 @@ function getVectorOverlayRenderData(state) {
|
|
|
7649
7649
|
}
|
|
7650
7650
|
let penPreview = null;
|
|
7651
7651
|
if (state.tool === "pen" && state.pen && state.pointer && !state.interaction) {
|
|
7652
|
-
const node =
|
|
7652
|
+
const node = _chunkW3GXSUSQcjs.findVectorNode.call(void 0, doc.nodes, state.pen.nodeId);
|
|
7653
7653
|
const sp = _optionalChain([node, 'optionalAccess', _282 => _282.type]) === "path" ? node.subpaths[state.pen.subpath] : void 0;
|
|
7654
7654
|
const last = sp ? getAnchorWorld(doc, { nodeId: state.pen.nodeId, subpath: state.pen.subpath, index: sp.anchors.length - 1 }) : void 0;
|
|
7655
7655
|
if (last) {
|
|
@@ -7666,7 +7666,7 @@ function getVectorOverlayRenderData(state) {
|
|
|
7666
7666
|
if (_optionalChain([it, 'optionalAccess', _283 => _283.type]) === "rotate") status = `${Math.round(it.angle)}\xB0`;
|
|
7667
7667
|
else if (_optionalChain([it, 'optionalAccess', _284 => _284.type]) === "move" || _optionalChain([it, 'optionalAccess', _285 => _285.type]) === "anchors") status = `\u0394 ${fmt2(it.dx)}, ${fmt2(it.dy)}`;
|
|
7668
7668
|
else if (_optionalChain([it, 'optionalAccess', _286 => _286.type]) === "scale" || _optionalChain([it, 'optionalAccess', _287 => _287.type]) === "draw") {
|
|
7669
|
-
const b = it.type === "draw" ?
|
|
7669
|
+
const b = it.type === "draw" ? _chunkW3GXSUSQcjs.findVectorNode.call(void 0, doc.nodes, it.nodeId) ? _chunkW3GXSUSQcjs.vectorNodeBounds.call(void 0, _chunkW3GXSUSQcjs.findVectorNode.call(void 0, doc.nodes, it.nodeId)) : null : state.selectionFrame;
|
|
7670
7670
|
if (b) status = `W ${fmt2(b.width)} \xD7 H ${fmt2(b.height)}`;
|
|
7671
7671
|
}
|
|
7672
7672
|
const guides = { lines: [], labels: [] };
|
|
@@ -7766,35 +7766,35 @@ function maskOverlay(state) {
|
|
|
7766
7766
|
if (want.has(n.id)) any = true;
|
|
7767
7767
|
continue;
|
|
7768
7768
|
}
|
|
7769
|
-
const m =
|
|
7769
|
+
const m = _chunkW3GXSUSQcjs.multiplyMatrices.call(void 0, _chunkW3GXSUSQcjs.nodeMatrix.call(void 0, n), parent);
|
|
7770
7770
|
const inside = visit(n.children, m);
|
|
7771
7771
|
const hit = want.has(n.id) || inside;
|
|
7772
7772
|
if (hit) any = true;
|
|
7773
|
-
if (!hit || !
|
|
7774
|
-
const summary =
|
|
7773
|
+
if (!hit || !_chunkW3GXSUSQcjs.isVectorMaskGroup.call(void 0, n)) continue;
|
|
7774
|
+
const summary = _chunkW3GXSUSQcjs.vectorMaskSummary.call(void 0, n);
|
|
7775
7775
|
const d = outlinePaths(n.children[0], m, /* @__PURE__ */ new Set()).map((path) => _chunkXGD3FSNCcjs.bezierPathToSvg.call(void 0, _chunkXGD3FSNCcjs.transformBezierPath.call(void 0, path, view), { precision: 2 })).join(" ");
|
|
7776
7776
|
out.push({ id: n.id, maskId: summary.maskId, d, type: summary.type, invert: summary.invert, enabled: summary.enabled, editing: want.has(summary.maskId) });
|
|
7777
7777
|
}
|
|
7778
7778
|
return any;
|
|
7779
7779
|
};
|
|
7780
|
-
visit(state.document.nodes,
|
|
7780
|
+
visit(state.document.nodes, _chunkW3GXSUSQcjs.IDENTITY_MATRIX);
|
|
7781
7781
|
return out;
|
|
7782
7782
|
}
|
|
7783
7783
|
function envelopeOverlay(state) {
|
|
7784
7784
|
const target = getVectorEnvelopeTarget(state.document, state.selection);
|
|
7785
7785
|
if (!target) return null;
|
|
7786
7786
|
const v = state.viewport;
|
|
7787
|
-
const m =
|
|
7787
|
+
const m = _chunkW3GXSUSQcjs.multiplyMatrices.call(void 0, target.world, [v.zoom, 0, 0, v.zoom, v.x, v.y]);
|
|
7788
7788
|
const sc = (p) => ({ x: fmt2(m[0] * p.x + m[2] * p.y + m[4]), y: fmt2(m[1] * p.x + m[3] * p.y + m[5]) });
|
|
7789
7789
|
const { mesh } = target.frame;
|
|
7790
|
-
const grid =
|
|
7790
|
+
const grid = _chunkW3GXSUSQcjs.warpMeshGridCurves.call(void 0, mesh).map((c) => {
|
|
7791
7791
|
const [a, b, cc, d] = c.map(sc);
|
|
7792
7792
|
return `M${a.x} ${a.y}C${b.x} ${b.y} ${cc.x} ${cc.y} ${d.x} ${d.y}`;
|
|
7793
7793
|
}).join("");
|
|
7794
7794
|
const hover = _optionalChain([state, 'access', _305 => _305.hover, 'optionalAccess', _306 => _306.envelope, 'optionalAccess', _307 => _307.nodeId]) === target.node.id ? state.hover.envelope.index : void 0;
|
|
7795
7795
|
const it = state.interaction;
|
|
7796
7796
|
const active = _optionalChain([it, 'optionalAccess', _308 => _308.type]) === "envelope" && it.nodeId === target.node.id ? it.index : void 0;
|
|
7797
|
-
const pts =
|
|
7797
|
+
const pts = _chunkW3GXSUSQcjs.warpMeshEditPoints.call(void 0, mesh);
|
|
7798
7798
|
return {
|
|
7799
7799
|
nodeId: target.node.id,
|
|
7800
7800
|
grid,
|
|
@@ -7806,16 +7806,16 @@ function envelopeOverlay(state) {
|
|
|
7806
7806
|
};
|
|
7807
7807
|
}
|
|
7808
7808
|
var VECTOR_ENVELOPE_STYLE_OPTIONS = [
|
|
7809
|
-
...
|
|
7809
|
+
..._chunkW3GXSUSQcjs.WARP_STYLES.map((value) => ({ value, label: _chunkW3GXSUSQcjs.WARP_STYLE_LABELS[value] })),
|
|
7810
7810
|
{ value: "mesh", label: "Mesh" }
|
|
7811
7811
|
];
|
|
7812
7812
|
function getVectorEnvelopePanel(state) {
|
|
7813
|
-
const nodes = state.selection.map((id) =>
|
|
7813
|
+
const nodes = state.selection.map((id) => _chunkW3GXSUSQcjs.findVectorNode.call(void 0, state.document.nodes, id)).filter((n) => !!n && !n.blendStep);
|
|
7814
7814
|
if (!nodes.length) return null;
|
|
7815
7815
|
const one = nodes.length === 1 ? nodes[0] : null;
|
|
7816
7816
|
const first = _optionalChain([one, 'optionalAccess', _309 => _309.effects, 'optionalAccess', _310 => _310.find, 'call', _311 => _311((e) => e.type === "envelope")]);
|
|
7817
7817
|
const order = /* @__PURE__ */ new Map();
|
|
7818
|
-
|
|
7818
|
+
_chunkW3GXSUSQcjs.walkVectorNodes.call(void 0, state.document.nodes, (n) => order.set(n.id, order.size));
|
|
7819
7819
|
const top = nodes.length > 1 ? nodes.slice().sort((a, b) => (_nullishCoalesce(order.get(a.id), () => ( 0))) - (_nullishCoalesce(order.get(b.id), () => ( 0))))[nodes.length - 1] : null;
|
|
7820
7820
|
return {
|
|
7821
7821
|
nodeId: _nullishCoalesce(_optionalChain([one, 'optionalAccess', _312 => _312.id]), () => ( null)),
|
|
@@ -7832,7 +7832,7 @@ function gradientOverlay(state) {
|
|
|
7832
7832
|
const hover = state.interaction ? null : _optionalChain([state, 'access', _318 => _318.hover, 'optionalAccess', _319 => _319.gradient]);
|
|
7833
7833
|
const handleHovered = (h) => _optionalChain([hover, 'optionalAccess', _320 => _320.kind]) === "handle" && hover.handle === h;
|
|
7834
7834
|
const pt = (p) => ({ x: fmt2(p.x), y: fmt2(p.y) });
|
|
7835
|
-
const centred =
|
|
7835
|
+
const centred = _chunkW3GXSUSQcjs.isCentredVectorGradient.call(void 0, a.gradient.type);
|
|
7836
7836
|
const removing = _optionalChain([state, 'access', _321 => _321.interaction, 'optionalAccess', _322 => _322.type]) === "gradient" && !!state.interaction.removing;
|
|
7837
7837
|
return {
|
|
7838
7838
|
nodeId: a.nodeId,
|
|
@@ -7859,8 +7859,8 @@ function gradientOverlay(state) {
|
|
|
7859
7859
|
function selectedBlends(state) {
|
|
7860
7860
|
const out = /* @__PURE__ */ new Map();
|
|
7861
7861
|
for (const id of state.selection) {
|
|
7862
|
-
const node =
|
|
7863
|
-
const group = isVectorBlendGroup(node) ? node : _optionalChain([
|
|
7862
|
+
const node = _chunkW3GXSUSQcjs.findVectorNode.call(void 0, state.document.nodes, id);
|
|
7863
|
+
const group = isVectorBlendGroup(node) ? node : _optionalChain([_chunkW3GXSUSQcjs.locateVectorNode.call(void 0, state.document.nodes, id), 'optionalAccess', _325 => _325.parent]);
|
|
7864
7864
|
if (isVectorBlendGroup(group)) out.set(group.id, group);
|
|
7865
7865
|
}
|
|
7866
7866
|
return [...out.values()];
|
|
@@ -7876,8 +7876,8 @@ function blendOverlay(state) {
|
|
|
7876
7876
|
const spines = selectedBlends(state).flatMap((g) => {
|
|
7877
7877
|
const s = vectorBlendSpine(g);
|
|
7878
7878
|
if (!s) return [];
|
|
7879
|
-
const m =
|
|
7880
|
-
const d = _chunkXGD3FSNCcjs.bezierPathToSvg.call(void 0, _chunkXGD3FSNCcjs.transformBezierPath.call(void 0,
|
|
7879
|
+
const m = _chunkW3GXSUSQcjs.multiplyMatrices.call(void 0, _nullishCoalesce(_chunkW3GXSUSQcjs.vectorWorldMatrix.call(void 0, doc.nodes, g.id), () => ( _chunkW3GXSUSQcjs.IDENTITY_MATRIX)), view);
|
|
7880
|
+
const d = _chunkXGD3FSNCcjs.bezierPathToSvg.call(void 0, _chunkXGD3FSNCcjs.transformBezierPath.call(void 0, _chunkW3GXSUSQcjs.subpathsToBezier.call(void 0, [s.spine], { corners: false }), m), { precision: 2 });
|
|
7881
7881
|
const keys = s.stops.map((stop) => {
|
|
7882
7882
|
const p = vectorBlendRailAt(s.rail, stop).point;
|
|
7883
7883
|
return sc({ x: p[0], y: p[1] }, m);
|
|
@@ -7887,12 +7887,12 @@ function blendOverlay(state) {
|
|
|
7887
7887
|
let start = null;
|
|
7888
7888
|
const anchors = [];
|
|
7889
7889
|
if (state.tool === "blend") {
|
|
7890
|
-
const from = state.blendStart ?
|
|
7890
|
+
const from = state.blendStart ? _chunkW3GXSUSQcjs.findVectorNode.call(void 0, doc.nodes, state.blendStart.nodeId) : void 0;
|
|
7891
7891
|
if (from && state.blendStart) {
|
|
7892
7892
|
const a = state.blendStart.anchor === null ? void 0 : getAnchorWorld(doc, { nodeId: from.id, subpath: 0, index: state.blendStart.anchor });
|
|
7893
7893
|
start = { d: screenOutline(state, from, /* @__PURE__ */ new Set()), anchor: a ? sc(a, view) : null };
|
|
7894
7894
|
}
|
|
7895
|
-
const hovered = _optionalChain([state, 'access', _326 => _326.hover, 'optionalAccess', _327 => _327.nodeId]) ?
|
|
7895
|
+
const hovered = _optionalChain([state, 'access', _326 => _326.hover, 'optionalAccess', _327 => _327.nodeId]) ? _chunkW3GXSUSQcjs.findVectorNode.call(void 0, doc.nodes, state.hover.nodeId) : void 0;
|
|
7896
7896
|
if (_optionalChain([hovered, 'optionalAccess', _328 => _328.type]) === "path" && hovered.subpaths[0]) {
|
|
7897
7897
|
hovered.subpaths[0].anchors.forEach((_, index) => {
|
|
7898
7898
|
const a = getAnchorWorld(doc, { nodeId: hovered.id, subpath: 0, index });
|
|
@@ -7906,11 +7906,11 @@ function getVectorBlendControls(state) {
|
|
|
7906
7906
|
const blends = selectedBlends(state);
|
|
7907
7907
|
const doc = state.document;
|
|
7908
7908
|
const roots = state.selection.filter((id) => {
|
|
7909
|
-
const node =
|
|
7910
|
-
return !!node && !node.blendStep && !node.locked && !state.selection.includes(_nullishCoalesce(_optionalChain([
|
|
7909
|
+
const node = _chunkW3GXSUSQcjs.findVectorNode.call(void 0, doc.nodes, id);
|
|
7910
|
+
return !!node && !node.blendStep && !node.locked && !state.selection.includes(_nullishCoalesce(_optionalChain([_chunkW3GXSUSQcjs.locateVectorNode.call(void 0, doc.nodes, id), 'optionalAccess', _332 => _332.parent, 'optionalAccess', _333 => _333.id]), () => ( "")));
|
|
7911
7911
|
});
|
|
7912
|
-
const parents = new Set(roots.map((id) => _nullishCoalesce(_optionalChain([
|
|
7913
|
-
const paths = roots.filter((id) => _optionalChain([
|
|
7912
|
+
const parents = new Set(roots.map((id) => _nullishCoalesce(_optionalChain([_chunkW3GXSUSQcjs.locateVectorNode.call(void 0, doc.nodes, id), 'optionalAccess', _334 => _334.parent, 'optionalAccess', _335 => _335.id]), () => ( null))));
|
|
7913
|
+
const paths = roots.filter((id) => _optionalChain([_chunkW3GXSUSQcjs.findVectorNode.call(void 0, doc.nodes, id), 'optionalAccess', _336 => _336.type]) === "path" && !isVectorBlendGroup(_optionalChain([_chunkW3GXSUSQcjs.locateVectorNode.call(void 0, doc.nodes, id), 'optionalAccess', _337 => _337.parent])));
|
|
7914
7914
|
const first = blends[0];
|
|
7915
7915
|
return {
|
|
7916
7916
|
ids: blends.map((g) => g.id),
|
|
@@ -7978,14 +7978,14 @@ function isVectorTextTarget(target) {
|
|
|
7978
7978
|
function getVectorSelectionStyle(state) {
|
|
7979
7979
|
const paths = [];
|
|
7980
7980
|
for (const id of state.selection) {
|
|
7981
|
-
const node =
|
|
7981
|
+
const node = _chunkW3GXSUSQcjs.findVectorNode.call(void 0, state.document.nodes, id);
|
|
7982
7982
|
if (node) paths.push(...collect(node));
|
|
7983
7983
|
}
|
|
7984
7984
|
const anchorMode = state.tool === "direct" && !!_optionalChain([state, 'access', _342 => _342.selectedAnchors, 'optionalAccess', _343 => _343.length]);
|
|
7985
7985
|
if (anchorMode) {
|
|
7986
7986
|
for (const r of state.selectedAnchors) {
|
|
7987
7987
|
if (paths.some((p) => p.id === r.nodeId)) continue;
|
|
7988
|
-
const node =
|
|
7988
|
+
const node = _chunkW3GXSUSQcjs.findVectorNode.call(void 0, state.document.nodes, r.nodeId);
|
|
7989
7989
|
if (_optionalChain([node, 'optionalAccess', _344 => _344.type]) === "path") paths.push(node);
|
|
7990
7990
|
}
|
|
7991
7991
|
}
|
|
@@ -7994,7 +7994,7 @@ function getVectorSelectionStyle(state) {
|
|
|
7994
7994
|
const same = (get) => paths.every((p) => JSON.stringify(_nullishCoalesce(get(p), () => ( null))) === JSON.stringify(_nullishCoalesce(get(first), () => ( null))));
|
|
7995
7995
|
const corners2 = [];
|
|
7996
7996
|
for (const p of paths) {
|
|
7997
|
-
for (const c of
|
|
7997
|
+
for (const c of _chunkW3GXSUSQcjs.vectorCorners.call(void 0, p.subpaths)) {
|
|
7998
7998
|
if (anchorMode && !state.selectedAnchors.some((r) => r.nodeId === p.id && r.subpath === c.subpath && r.index === c.index)) continue;
|
|
7999
7999
|
const corner = p.subpaths[c.subpath].anchors[c.index].corner;
|
|
8000
8000
|
corners2.push({ radius: _nullishCoalesce(_optionalChain([corner, 'optionalAccess', _345 => _345.radius]), () => ( 0)), kind: _nullishCoalesce(_optionalChain([corner, 'optionalAccess', _346 => _346.kind]), () => ( "round")) });
|
|
@@ -8013,7 +8013,7 @@ function getVectorSelectionStyle(state) {
|
|
|
8013
8013
|
startArrowScale: _nullishCoalesce(first.startArrowScale, () => ( 1)),
|
|
8014
8014
|
endArrowScale: _nullishCoalesce(first.endArrowScale, () => ( 1)),
|
|
8015
8015
|
strokeWidthProfile: profileOf(first),
|
|
8016
|
-
widthProfile:
|
|
8016
|
+
widthProfile: _chunkW3GXSUSQcjs.widthProfilePresetId.call(void 0, profileOf(first)),
|
|
8017
8017
|
cornerRadius: c0.radius,
|
|
8018
8018
|
cornerKind: c0.kind,
|
|
8019
8019
|
corners: corners2.length,
|
|
@@ -8037,8 +8037,8 @@ function getVectorSelectionStyle(state) {
|
|
|
8037
8037
|
};
|
|
8038
8038
|
}
|
|
8039
8039
|
function profileOf(p) {
|
|
8040
|
-
const points =
|
|
8041
|
-
return points.length &&
|
|
8040
|
+
const points = _chunkW3GXSUSQcjs.sanitizeWidthProfile.call(void 0, p.strokeWidthProfile);
|
|
8041
|
+
return points.length && _chunkW3GXSUSQcjs.widthProfilePresetId.call(void 0, points) !== "uniform" ? points : null;
|
|
8042
8042
|
}
|
|
8043
8043
|
var VECTOR_STROKE_ALIGN_LABELS = { center: "Center", inside: "Inside", outside: "Outside" };
|
|
8044
8044
|
var VECTOR_CORNER_KIND_LABELS = { round: "Round", inverted: "Inverted", chamfer: "Chamfer" };
|
|
@@ -8064,19 +8064,19 @@ var VECTOR_STROKE_GRADIENT_MODE_LABELS = { within: "Within stroke", along: "Alon
|
|
|
8064
8064
|
function getVectorGradientEditor(state) {
|
|
8065
8065
|
const paths = [];
|
|
8066
8066
|
for (const id of state.selection) {
|
|
8067
|
-
const node =
|
|
8067
|
+
const node = _chunkW3GXSUSQcjs.findVectorNode.call(void 0, state.document.nodes, id);
|
|
8068
8068
|
if (node) paths.push(...collect(node));
|
|
8069
8069
|
}
|
|
8070
8070
|
if (!paths.length) return null;
|
|
8071
8071
|
const { target, layer } = state.gradientEdit;
|
|
8072
|
-
const paint =
|
|
8073
|
-
const gradient =
|
|
8074
|
-
const sorted = gradient ?
|
|
8072
|
+
const paint = _chunkW3GXSUSQcjs.vectorTargetPaint.call(void 0, paths[0], target, _nullishCoalesce(layer, () => ( null)));
|
|
8073
|
+
const gradient = _chunkW3GXSUSQcjs.isVectorGradient.call(void 0, paint) ? paint : null;
|
|
8074
|
+
const sorted = gradient ? _chunkW3GXSUSQcjs.sortedVectorGradientStops.call(void 0, gradient) : [];
|
|
8075
8075
|
const stopIndex = state.gradientEdit.stop;
|
|
8076
8076
|
const stops = sorted.map((s, index) => ({ ...s, index, selected: index === stopIndex }));
|
|
8077
8077
|
const sel = stopIndex !== null && sorted[stopIndex] ? { ...sorted[stopIndex], index: stopIndex, last: stopIndex === sorted.length - 1 } : null;
|
|
8078
|
-
const preview = gradient ? `linear-gradient(to right, ${
|
|
8079
|
-
const c =
|
|
8078
|
+
const preview = gradient ? `linear-gradient(to right, ${_chunkW3GXSUSQcjs.expandVectorGradientStops.call(void 0, gradient).map((s) => {
|
|
8079
|
+
const c = _chunkW3GXSUSQcjs.parseVectorColor.call(void 0, s.color);
|
|
8080
8080
|
const a = (_nullishCoalesce(_optionalChain([c, 'optionalAccess', _347 => _347[3]]), () => ( 1))) * (_nullishCoalesce(s.opacity, () => ( 1)));
|
|
8081
8081
|
const color = c ? `rgba(${Math.round(c[0] * 255)}, ${Math.round(c[1] * 255)}, ${Math.round(c[2] * 255)}, ${Math.round(a * 1e3) / 1e3})` : s.color;
|
|
8082
8082
|
return `${color} ${Math.round(s.offset * 1e4) / 100}%`;
|
|
@@ -8094,7 +8094,7 @@ function getVectorGradientEditor(state) {
|
|
|
8094
8094
|
interpolation: _nullishCoalesce(_optionalChain([gradient, 'optionalAccess', _350 => _350.interpolation]), () => ( "srgb")),
|
|
8095
8095
|
smoothness: _nullishCoalesce(_optionalChain([gradient, 'optionalAccess', _351 => _351.smoothness]), () => ( 0)),
|
|
8096
8096
|
strokeMode: _nullishCoalesce(_optionalChain([gradient, 'optionalAccess', _352 => _352.strokeMode]), () => ( "within")),
|
|
8097
|
-
mixed: paths.some((p) => JSON.stringify(_nullishCoalesce(
|
|
8097
|
+
mixed: paths.some((p) => JSON.stringify(_nullishCoalesce(_chunkW3GXSUSQcjs.vectorTargetPaint.call(void 0, p, target, _nullishCoalesce(layer, () => ( null))), () => ( null))) !== JSON.stringify(_nullishCoalesce(paint, () => ( null))))
|
|
8098
8098
|
};
|
|
8099
8099
|
}
|
|
8100
8100
|
var VECTOR_PATH_ACTIONS = [
|
|
@@ -8118,9 +8118,9 @@ var VECTOR_EDIT_TOGGLES = [
|
|
|
8118
8118
|
{ key: "curvatureMoves", label: "Curv", title: "Curvature point moves (Alt flips while dragging)" },
|
|
8119
8119
|
{ key: "recognizeShapes", label: "Shapes", title: "Turn pencil scribbles into shapes" }
|
|
8120
8120
|
];
|
|
8121
|
-
var VECTOR_EFFECT_MENU =
|
|
8121
|
+
var VECTOR_EFFECT_MENU = _chunkW3GXSUSQcjs.VECTOR_EFFECT_TYPES.map((type) => ({ type, label: _chunkW3GXSUSQcjs.VECTOR_EFFECT_LABELS[type] }));
|
|
8122
8122
|
function getVectorEffectsPanel(state) {
|
|
8123
|
-
const nodes = state.selection.map((id) =>
|
|
8123
|
+
const nodes = state.selection.map((id) => _chunkW3GXSUSQcjs.findVectorNode.call(void 0, state.document.nodes, id)).filter((n) => !!n && !n.blendStep);
|
|
8124
8124
|
if (!nodes.length) return null;
|
|
8125
8125
|
const one = nodes.length === 1 ? nodes[0] : null;
|
|
8126
8126
|
return {
|
|
@@ -8129,20 +8129,20 @@ function getVectorEffectsPanel(state) {
|
|
|
8129
8129
|
effects: (_nullishCoalesce(_optionalChain([one, 'optionalAccess', _354 => _354.effects]), () => ( []))).map((e) => ({
|
|
8130
8130
|
id: e.id,
|
|
8131
8131
|
type: e.type,
|
|
8132
|
-
label: _nullishCoalesce(
|
|
8132
|
+
label: _nullishCoalesce(_chunkW3GXSUSQcjs.VECTOR_EFFECT_LABELS[e.type], () => ( e.type)),
|
|
8133
8133
|
enabled: e.enabled !== false,
|
|
8134
8134
|
params: e.params,
|
|
8135
8135
|
// The Envelope panel (`getVectorEnvelopePanel`) edits an envelope's warp and mesh.
|
|
8136
|
-
specs: e.type === "envelope" ? [] : _nullishCoalesce(
|
|
8136
|
+
specs: e.type === "envelope" ? [] : _nullishCoalesce(_chunkW3GXSUSQcjs.VECTOR_EFFECT_PARAM_SPECS[e.type], () => ( []))
|
|
8137
8137
|
})),
|
|
8138
|
-
expandable: nodes.some(
|
|
8138
|
+
expandable: nodes.some(_chunkW3GXSUSQcjs.hasVectorAppearance)
|
|
8139
8139
|
};
|
|
8140
8140
|
}
|
|
8141
8141
|
function vectorPaintSwatch(paint) {
|
|
8142
8142
|
if (typeof paint === "string") return paint;
|
|
8143
|
-
if (
|
|
8144
|
-
return `linear-gradient(to right, ${
|
|
8145
|
-
const c =
|
|
8143
|
+
if (_chunkW3GXSUSQcjs.isVectorGradient.call(void 0, paint)) {
|
|
8144
|
+
return `linear-gradient(to right, ${_chunkW3GXSUSQcjs.expandVectorGradientStops.call(void 0, paint).map((s) => {
|
|
8145
|
+
const c = _chunkW3GXSUSQcjs.parseVectorColor.call(void 0, s.color);
|
|
8146
8146
|
const a = (_nullishCoalesce(_optionalChain([c, 'optionalAccess', _355 => _355[3]]), () => ( 1))) * (_nullishCoalesce(s.opacity, () => ( 1)));
|
|
8147
8147
|
const color = c ? `rgba(${Math.round(c[0] * 255)}, ${Math.round(c[1] * 255)}, ${Math.round(c[2] * 255)}, ${Math.round(a * 1e3) / 1e3})` : s.color;
|
|
8148
8148
|
return `${color} ${Math.round(s.offset * 1e4) / 100}%`;
|
|
@@ -8151,7 +8151,7 @@ function vectorPaintSwatch(paint) {
|
|
|
8151
8151
|
return "transparent";
|
|
8152
8152
|
}
|
|
8153
8153
|
function getVectorAppearancePanel(state) {
|
|
8154
|
-
const nodes = state.selection.map((id) =>
|
|
8154
|
+
const nodes = state.selection.map((id) => _chunkW3GXSUSQcjs.findVectorNode.call(void 0, state.document.nodes, id)).filter((n) => !!n && !n.blendStep);
|
|
8155
8155
|
if (!nodes.length) return null;
|
|
8156
8156
|
const paths = [];
|
|
8157
8157
|
for (const n of nodes) for (const p of collect(n)) if (!p.blendStep && !paths.some((q) => q.id === p.id)) paths.push(p);
|
|
@@ -8163,7 +8163,7 @@ function getVectorAppearancePanel(state) {
|
|
|
8163
8163
|
paint: l.paint,
|
|
8164
8164
|
color: vectorPaintToHex(l.paint),
|
|
8165
8165
|
swatch: vectorPaintSwatch(l.paint),
|
|
8166
|
-
gradient:
|
|
8166
|
+
gradient: _chunkW3GXSUSQcjs.isVectorGradient.call(void 0, l.paint),
|
|
8167
8167
|
opacity: _nullishCoalesce(l.opacity, () => ( 1)),
|
|
8168
8168
|
blendMode: _nullishCoalesce(l.blendMode, () => ( "normal")),
|
|
8169
8169
|
visible: l.visible !== false,
|
|
@@ -8171,8 +8171,8 @@ function getVectorAppearancePanel(state) {
|
|
|
8171
8171
|
...(_nullishCoalesce(l.kind, () => ( "paint"))) !== "paint" ? { unknownKind: String(l.kind) } : {},
|
|
8172
8172
|
editing: edit.target === kind && (edit.layer === null ? index === count - 1 : edit.layer === index)
|
|
8173
8173
|
});
|
|
8174
|
-
const fills = first ?
|
|
8175
|
-
const strokes = first ?
|
|
8174
|
+
const fills = first ? _chunkW3GXSUSQcjs.vectorFills.call(void 0, first) : [];
|
|
8175
|
+
const strokes = first ? _chunkW3GXSUSQcjs.vectorStrokes.call(void 0, first) : [];
|
|
8176
8176
|
const same = (get) => paths.every((p) => JSON.stringify(get(p)) === JSON.stringify(get(first)));
|
|
8177
8177
|
const one = nodes.length === 1 ? nodes[0] : null;
|
|
8178
8178
|
return {
|
|
@@ -8182,22 +8182,22 @@ function getVectorAppearancePanel(state) {
|
|
|
8182
8182
|
strokes: strokes.map((l, i) => layer("stroke", l, i, strokes.length)),
|
|
8183
8183
|
blendMode: _nullishCoalesce(nodes[0].blendMode, () => ( "normal")),
|
|
8184
8184
|
mixed: {
|
|
8185
|
-
fills: !!first && !same(
|
|
8186
|
-
strokes: !!first && !same(
|
|
8185
|
+
fills: !!first && !same(_chunkW3GXSUSQcjs.vectorFills),
|
|
8186
|
+
strokes: !!first && !same(_chunkW3GXSUSQcjs.vectorStrokes),
|
|
8187
8187
|
blendMode: nodes.some((n) => (_nullishCoalesce(n.blendMode, () => ( "normal"))) !== (_nullishCoalesce(nodes[0].blendMode, () => ( "normal"))))
|
|
8188
8188
|
},
|
|
8189
8189
|
filterNodeId: _nullishCoalesce(_optionalChain([one, 'optionalAccess', _356 => _356.id]), () => ( null)),
|
|
8190
8190
|
filters: (_nullishCoalesce(_optionalChain([one, 'optionalAccess', _357 => _357.filters]), () => ( []))).map((f) => ({
|
|
8191
8191
|
id: f.id,
|
|
8192
8192
|
type: f.type,
|
|
8193
|
-
label: _nullishCoalesce(
|
|
8193
|
+
label: _nullishCoalesce(_chunkW3GXSUSQcjs.VECTOR_FILTER_LABELS[f.type], () => ( f.type)),
|
|
8194
8194
|
enabled: f.enabled !== false,
|
|
8195
8195
|
params: f.params,
|
|
8196
|
-
specs: _nullishCoalesce(
|
|
8196
|
+
specs: _nullishCoalesce(_chunkW3GXSUSQcjs.VECTOR_FILTER_PARAM_SPECS[f.type], () => ( []))
|
|
8197
8197
|
}))
|
|
8198
8198
|
};
|
|
8199
8199
|
}
|
|
8200
|
-
var VECTOR_BLEND_MODE_MENU =
|
|
8200
|
+
var VECTOR_BLEND_MODE_MENU = _chunkW3GXSUSQcjs.VECTOR_BLEND_MODES.map((mode) => ({ mode, label: _chunkW3GXSUSQcjs.VECTOR_BLEND_MODE_LABELS[mode] }));
|
|
8201
8201
|
var VECTOR_MASK_TYPE_LABELS = { clip: "Clip", alpha: "Alpha", luminance: "Luminance" };
|
|
8202
8202
|
var VECTOR_MASK_TYPE_OPTIONS = [
|
|
8203
8203
|
{ value: "clip", label: "Clip", title: "Clipping mask: the contents show inside the mask's outline" },
|
|
@@ -8207,7 +8207,7 @@ var VECTOR_MASK_TYPE_OPTIONS = [
|
|
|
8207
8207
|
function getVectorMaskPanel(state) {
|
|
8208
8208
|
const doc = state.document;
|
|
8209
8209
|
if (!state.selection.length) return null;
|
|
8210
|
-
const locs = state.selection.map((id) =>
|
|
8210
|
+
const locs = state.selection.map((id) => _chunkW3GXSUSQcjs.locateVectorNode.call(void 0, doc.nodes, id));
|
|
8211
8211
|
let makeHint = null;
|
|
8212
8212
|
if (state.selection.length < 2) makeHint = "Select two or more objects: the topmost becomes the mask.";
|
|
8213
8213
|
else if (locs.some((l) => !l)) makeHint = "Select objects in the document.";
|
|
@@ -8216,9 +8216,9 @@ function getVectorMaskPanel(state) {
|
|
|
8216
8216
|
let group = null;
|
|
8217
8217
|
const first = locs[0];
|
|
8218
8218
|
const node = first ? first.list[first.index] : null;
|
|
8219
|
-
const owner =
|
|
8219
|
+
const owner = _chunkW3GXSUSQcjs.isVectorMaskGroup.call(void 0, node) ? node : _chunkW3GXSUSQcjs.isVectorMaskGroup.call(void 0, _optionalChain([first, 'optionalAccess', _363 => _363.parent])) ? first.parent : null;
|
|
8220
8220
|
if (owner && state.selection.every((id) => id === owner.id || owner.children.some((c) => c.id === id))) {
|
|
8221
|
-
const summary =
|
|
8221
|
+
const summary = _chunkW3GXSUSQcjs.vectorMaskSummary.call(void 0, owner);
|
|
8222
8222
|
const editing = state.selection.includes(owner.id) ? "group" : state.selection.includes(summary.maskId) ? "mask" : "contents";
|
|
8223
8223
|
group = { ...summary, id: owner.id, ...owner.name ? { name: owner.name } : {}, editing };
|
|
8224
8224
|
}
|
|
@@ -8267,13 +8267,13 @@ var BLEND_PROPS = {
|
|
|
8267
8267
|
linear: { type: "boolean", description: "Move anchors in straight lines instead of the rotation-aware morph." }
|
|
8268
8268
|
};
|
|
8269
8269
|
var checkBlendOptions = (params) => {
|
|
8270
|
-
if (_optionalChain([params, 'optionalAccess', _364 => _364.spacing]) !== void 0 && !
|
|
8270
|
+
if (_optionalChain([params, 'optionalAccess', _364 => _364.spacing]) !== void 0 && !_chunkW3GXSUSQcjs.VECTOR_BLEND_SPACINGS.includes(params.spacing)) fail(`Unknown blend spacing "${params.spacing}".`);
|
|
8271
8271
|
if (_optionalChain([params, 'optionalAccess', _365 => _365.steps]) !== void 0 && !(Number.isFinite(params.steps) && params.steps >= 1)) fail("steps must be at least 1.");
|
|
8272
8272
|
if (_optionalChain([params, 'optionalAccess', _366 => _366.distance]) !== void 0 && !(Number.isFinite(params.distance) && params.distance > 0)) fail("distance must be positive.");
|
|
8273
8273
|
};
|
|
8274
8274
|
var POINT = { type: "object", properties: { x: { type: "number" }, y: { type: "number" } }, required: ["x", "y"] };
|
|
8275
8275
|
var GRADIENT_PROPS = {
|
|
8276
|
-
type: { type: "string", enum:
|
|
8276
|
+
type: { type: "string", enum: _chunkW3GXSUSQcjs.VECTOR_GRADIENT_TYPES, description: "linear, radial, conic (an angle sweep), reflected (linear mirrored about the start) or diamond." },
|
|
8277
8277
|
stops: {
|
|
8278
8278
|
type: "array",
|
|
8279
8279
|
minItems: 1,
|
|
@@ -8298,10 +8298,10 @@ var GRADIENT_PROPS = {
|
|
|
8298
8298
|
focal: { ...POINT, description: "Radial focal point (where t = 0), in `units`." },
|
|
8299
8299
|
focalRadius: { type: "number", minimum: 0, maximum: 0.99, description: "Radial focal circle radius as a fraction of the radius (SVG fr)." },
|
|
8300
8300
|
units: { type: "string", enum: ["objectBoundingBox", "userSpaceOnUse"], description: "Space of start / end / width / focal: fractions of the shape box (default) or the node's own coordinates." },
|
|
8301
|
-
spread: { type: "string", enum:
|
|
8302
|
-
interpolation: { type: "string", enum:
|
|
8301
|
+
spread: { type: "string", enum: _chunkW3GXSUSQcjs.VECTOR_GRADIENT_SPREADS, description: "What paints past the ends: pad (default), reflect or repeat." },
|
|
8302
|
+
interpolation: { type: "string", enum: _chunkW3GXSUSQcjs.VECTOR_GRADIENT_INTERPOLATIONS, description: "Colour mixing space: srgb (default), linear (light) or oklab." },
|
|
8303
8303
|
smoothness: { type: "number", minimum: 0, maximum: 1, description: "Bends the ramp along a smooth spline through the stops (0 = straight)." },
|
|
8304
|
-
strokeMode: { type: "string", enum:
|
|
8304
|
+
strokeMode: { type: "string", enum: _chunkW3GXSUSQcjs.VECTOR_STROKE_GRADIENT_MODES, description: "On strokes: within (default, like a fill), along the path or across it." }
|
|
8305
8305
|
};
|
|
8306
8306
|
var PAINT = {
|
|
8307
8307
|
description: 'A CSS colour, `null` for none, or a gradient object: `{ type: "linear" | "radial" | "conic" | "reflected" | "diamond", stops: [{ offset, color, opacity?, midpoint? }] }` plus the shorthand `angle` / `cx, cy, r` or explicit `start`, `end`, `width`, `focal`, `focalRadius`, `units`, and `spread`, `interpolation`, `smoothness`, `strokeMode` (see vector.setGradient).',
|
|
@@ -8309,7 +8309,7 @@ var PAINT = {
|
|
|
8309
8309
|
};
|
|
8310
8310
|
var BLEND_MODE = {
|
|
8311
8311
|
type: "string",
|
|
8312
|
-
enum:
|
|
8312
|
+
enum: _chunkW3GXSUSQcjs.VECTOR_BLEND_MODES,
|
|
8313
8313
|
description: "How it mixes with what is under it (CSS mix-blend-mode names; linear-dodge draws as plus-lighter). Default normal."
|
|
8314
8314
|
};
|
|
8315
8315
|
var FILL_LAYER_PROPS = {
|
|
@@ -8324,8 +8324,8 @@ var STROKE_SETTING_PROPS = {
|
|
|
8324
8324
|
strokeLinejoin: { type: "string", enum: ["miter", "round", "bevel"], description: "Line join (default miter)." },
|
|
8325
8325
|
strokeDasharray: { type: ["array", "null"], items: { type: "number", minimum: 0 }, description: "Dash and gap lengths in document units; null or [] for a solid line." },
|
|
8326
8326
|
strokeAlign: { type: "string", enum: ["center", "inside", "outside"], description: "Where the stroke sits on the outline (closed shapes only; open paths stroke centred). Default center." },
|
|
8327
|
-
startArrow: { type: ["string", "null"], enum: [...
|
|
8328
|
-
endArrow: { type: ["string", "null"], enum: [...
|
|
8327
|
+
startArrow: { type: ["string", "null"], enum: [..._chunkW3GXSUSQcjs.VECTOR_ARROWHEADS, null], description: "Head at the start of an open path, or null for none." },
|
|
8328
|
+
endArrow: { type: ["string", "null"], enum: [..._chunkW3GXSUSQcjs.VECTOR_ARROWHEADS, null], description: "Head at the end of an open path, or null for none." },
|
|
8329
8329
|
arrowAlign: { type: "string", enum: ["extend", "tip"], description: "`extend`: the tip sits past the end point; `tip`: on it, the stroke shortened under the head." },
|
|
8330
8330
|
startArrowScale: { type: "number", exclusiveMinimum: 0, description: "Start head size as a multiple of the stroke width (default 1)." },
|
|
8331
8331
|
endArrowScale: { type: "number", exclusiveMinimum: 0, description: "End head size as a multiple of the stroke width (default 1)." },
|
|
@@ -8342,7 +8342,7 @@ var STYLE_PROPS = {
|
|
|
8342
8342
|
fillRule: { type: "string", enum: ["nonzero", "evenodd"], description: "Which areas count as inside (default nonzero)." }
|
|
8343
8343
|
};
|
|
8344
8344
|
var checkPaint = (paint, where) => {
|
|
8345
|
-
if (paint && typeof paint === "object") return _nullishCoalesce(
|
|
8345
|
+
if (paint && typeof paint === "object") return _nullishCoalesce(_chunkW3GXSUSQcjs.sanitizeVectorGradient.call(void 0, paint), () => ( fail(`${where} is not a valid gradient: give a type and at least one stop { offset, color }.`)));
|
|
8346
8346
|
return paint;
|
|
8347
8347
|
};
|
|
8348
8348
|
var pickStyle = (params) => {
|
|
@@ -8356,7 +8356,7 @@ var pickStyle = (params) => {
|
|
|
8356
8356
|
if (!l || typeof l !== "object") fail(`${key}[${i}] must be a layer object { paint, \u2026 }.`);
|
|
8357
8357
|
const layer = l;
|
|
8358
8358
|
checkPaint(layer.paint, `${key}[${i}].paint`);
|
|
8359
|
-
if (layer.blendMode !== void 0 && !
|
|
8359
|
+
if (layer.blendMode !== void 0 && !_chunkW3GXSUSQcjs.isVectorBlendMode.call(void 0, layer.blendMode)) fail(`${key}[${i}].blendMode "${String(layer.blendMode)}" is not one of: ${_chunkW3GXSUSQcjs.VECTOR_BLEND_MODES.join(", ")}.`);
|
|
8360
8360
|
});
|
|
8361
8361
|
}
|
|
8362
8362
|
return out;
|
|
@@ -8389,19 +8389,19 @@ function createVectorCommands(controller, options = {}) {
|
|
|
8389
8389
|
const out = [];
|
|
8390
8390
|
const visit = (nodes, depth) => {
|
|
8391
8391
|
for (const n of nodes) {
|
|
8392
|
-
const parent = _nullishCoalesce(
|
|
8393
|
-
const b =
|
|
8392
|
+
const parent = _nullishCoalesce(_chunkW3GXSUSQcjs.vectorParentMatrix.call(void 0, state.document.nodes, n.id), () => ( _chunkW3GXSUSQcjs.IDENTITY_MATRIX));
|
|
8393
|
+
const b = _chunkW3GXSUSQcjs.vectorNodeBounds.call(void 0, n, parent);
|
|
8394
8394
|
out.push({
|
|
8395
8395
|
id: n.id,
|
|
8396
8396
|
type: n.type,
|
|
8397
8397
|
...n.name ? { name: n.name } : {},
|
|
8398
8398
|
depth,
|
|
8399
|
-
rotation: Math.round(
|
|
8399
|
+
rotation: Math.round(_chunkW3GXSUSQcjs.vectorNodeRotation.call(void 0, n, parent) * 100) / 100,
|
|
8400
8400
|
bounds: b && { x: Math.round(b.x * 100) / 100, y: Math.round(b.y * 100) / 100, width: Math.round(b.width * 100) / 100, height: Math.round(b.height * 100) / 100 },
|
|
8401
8401
|
visible: n.visible !== false,
|
|
8402
8402
|
locked: !!n.locked,
|
|
8403
8403
|
selected: state.selection.includes(n.id),
|
|
8404
|
-
...n.type === "path" ? { fill: _nullishCoalesce(n.fill, () => ( null)), stroke: _nullishCoalesce(n.stroke, () => ( null)), strokeWidth: _nullishCoalesce(n.strokeWidth, () => ( 1)), d:
|
|
8404
|
+
...n.type === "path" ? { fill: _nullishCoalesce(n.fill, () => ( null)), stroke: _nullishCoalesce(n.stroke, () => ( null)), strokeWidth: _nullishCoalesce(n.strokeWidth, () => ( 1)), d: _chunkW3GXSUSQcjs.vectorPathData.call(void 0, n, 2) } : { children: n.children.length },
|
|
8405
8405
|
...n.type === "group" && n.blend ? { blend: { ...resolveVectorBlendOptions(n.blend), spine: !!n.blend.spine, keys: vectorBlendKeys(n).map((k) => k.id) } } : {},
|
|
8406
8406
|
...n.blendStep ? { blendStep: true } : {},
|
|
8407
8407
|
..._optionalChain([n, 'access', _375 => _375.effects, 'optionalAccess', _376 => _376.length]) ? { effects: n.effects } : {},
|
|
@@ -8411,7 +8411,7 @@ function createVectorCommands(controller, options = {}) {
|
|
|
8411
8411
|
...n.type === "path" && Array.isArray(n.strokes) ? { strokes: n.strokes } : {},
|
|
8412
8412
|
...n.blendMode && n.blendMode !== "normal" ? { blendMode: n.blendMode } : {},
|
|
8413
8413
|
..._optionalChain([n, 'access', _377 => _377.filters, 'optionalAccess', _378 => _378.length]) ? { filters: n.filters } : {},
|
|
8414
|
-
...
|
|
8414
|
+
..._chunkW3GXSUSQcjs.isVectorMaskGroup.call(void 0, n) ? { mask: _chunkW3GXSUSQcjs.vectorMaskSummary.call(void 0, n) } : {}
|
|
8415
8415
|
});
|
|
8416
8416
|
if (n.type === "group") visit(n.children, depth + 1);
|
|
8417
8417
|
}
|
|
@@ -8424,7 +8424,7 @@ function createVectorCommands(controller, options = {}) {
|
|
|
8424
8424
|
return {
|
|
8425
8425
|
id: n.id,
|
|
8426
8426
|
type: n.type,
|
|
8427
|
-
...n.type === "path" ? { fills:
|
|
8427
|
+
...n.type === "path" ? { fills: _chunkW3GXSUSQcjs.vectorFills.call(void 0, n), strokes: _chunkW3GXSUSQcjs.vectorStrokes.call(void 0, n), fillRule: _nullishCoalesce(n.fillRule, () => ( "nonzero")) } : {},
|
|
8428
8428
|
blendMode: _nullishCoalesce(n.blendMode, () => ( "normal")),
|
|
8429
8429
|
opacity: _nullishCoalesce(n.opacity, () => ( 1)),
|
|
8430
8430
|
filters: _nullishCoalesce(n.filters, () => ( []))
|
|
@@ -8436,10 +8436,10 @@ function createVectorCommands(controller, options = {}) {
|
|
|
8436
8436
|
return n;
|
|
8437
8437
|
};
|
|
8438
8438
|
const layerIndex = (id, kind, index, key = "index") => {
|
|
8439
|
-
const stack = kind === "fill" ?
|
|
8439
|
+
const stack = kind === "fill" ? _chunkW3GXSUSQcjs.vectorFills.call(void 0, pathOf(id)) : _chunkW3GXSUSQcjs.vectorStrokes.call(void 0, pathOf(id));
|
|
8440
8440
|
if (!Number.isInteger(index) || !stack[index]) fail(`${key} ${index} is out of range: "${id}" has ${stack.length} ${kind}${stack.length === 1 ? "" : "s"} (0 is the bottom). Read them with vector.getAppearance.`);
|
|
8441
8441
|
};
|
|
8442
|
-
const stackResult = (id, kind) => kind === "fill" ? { id, fills:
|
|
8442
|
+
const stackResult = (id, kind) => kind === "fill" ? { id, fills: _chunkW3GXSUSQcjs.vectorFills.call(void 0, pathOf(id)) } : { id, strokes: _chunkW3GXSUSQcjs.vectorStrokes.call(void 0, pathOf(id)) };
|
|
8443
8443
|
const layerPatchOf = (params, keys) => {
|
|
8444
8444
|
const out = {};
|
|
8445
8445
|
for (const key of keys) if (params[key] !== void 0) out[key] = key === "paint" ? checkPaint(params[key], "paint") : params[key];
|
|
@@ -8551,7 +8551,7 @@ function createVectorCommands(controller, options = {}) {
|
|
|
8551
8551
|
additionalProperties: false
|
|
8552
8552
|
};
|
|
8553
8553
|
const checkFilterParams = (type, params) => {
|
|
8554
|
-
const allowed =
|
|
8554
|
+
const allowed = _chunkW3GXSUSQcjs.vectorFilterParamKeys.call(void 0, type);
|
|
8555
8555
|
for (const key of Object.keys(_nullishCoalesce(params, () => ( {})))) if (!allowed.includes(key)) fail(`${type} has no parameter "${key}"; it takes ${allowed.join(", ")}.`);
|
|
8556
8556
|
};
|
|
8557
8557
|
const filtersResult = (id) => ({ id, filters: _nullishCoalesce(_optionalChain([controller, 'access', _380 => _380.getNode, 'call', _381 => _381(id), 'optionalAccess', _382 => _382.filters]), () => ( [])) });
|
|
@@ -8559,7 +8559,7 @@ function createVectorCommands(controller, options = {}) {
|
|
|
8559
8559
|
const node = _nullishCoalesce(controller.getNode(nodeId), () => ( fail(`There is no node "${nodeId}".`)));
|
|
8560
8560
|
return _nullishCoalesce(_optionalChain([node, 'access', _383 => _383.filters, 'optionalAccess', _384 => _384.find, 'call', _385 => _385((f) => f.id === filterId)]), () => ( fail(`Node "${nodeId}" has no filter "${filterId}"; it has ${(_nullishCoalesce(node.filters, () => ( []))).map((f) => `"${f.id}" (${f.type})`).join(", ") || "none"}.`)));
|
|
8561
8561
|
};
|
|
8562
|
-
const maskResult = (id) => ({ id, mask: _nullishCoalesce(
|
|
8562
|
+
const maskResult = (id) => ({ id, mask: _nullishCoalesce(_chunkW3GXSUSQcjs.vectorMaskSummary.call(void 0, controller.getNode(id)), () => ( fail(`"${id}" is not a mask group.`))) });
|
|
8563
8563
|
const maskInputs = (params) => {
|
|
8564
8564
|
const list2 = [...new Set(ids(params))];
|
|
8565
8565
|
if (list2.length < 2) fail(`Masking needs at least two objects (the mask and what it masks); got ${list2.length}. Pass ids, or select more.`);
|
|
@@ -8569,7 +8569,7 @@ function createVectorCommands(controller, options = {}) {
|
|
|
8569
8569
|
};
|
|
8570
8570
|
const maskTargets = (params) => {
|
|
8571
8571
|
const list2 = ids(params);
|
|
8572
|
-
const groups = list2.map((id) => controller.getNode(id)).filter((n) =>
|
|
8572
|
+
const groups = list2.map((id) => controller.getNode(id)).filter((n) => _chunkW3GXSUSQcjs.isVectorMaskGroup.call(void 0, n));
|
|
8573
8573
|
if (!groups.length) fail(`None of ${list2.map((id) => `"${id}"`).join(", ")} is a mask group. Mask groups have a \`mask\` in vector.list; make one with vector.makeClippingMask or vector.makeOpacityMask.`);
|
|
8574
8574
|
return groups.map((g) => g.id);
|
|
8575
8575
|
};
|
|
@@ -8700,7 +8700,7 @@ function createVectorCommands(controller, options = {}) {
|
|
|
8700
8700
|
params: {
|
|
8701
8701
|
type: "object",
|
|
8702
8702
|
properties: {
|
|
8703
|
-
type: { type: "string", enum:
|
|
8703
|
+
type: { type: "string", enum: _chunkW3GXSUSQcjs.VECTOR_FILTER_TYPES, description: "The filter type." },
|
|
8704
8704
|
params: FILTER_PARAMS,
|
|
8705
8705
|
index: { type: "integer", minimum: 0, description: "Position in the stack (default: last)." },
|
|
8706
8706
|
ids: IDS
|
|
@@ -8711,7 +8711,7 @@ function createVectorCommands(controller, options = {}) {
|
|
|
8711
8711
|
undoable: true,
|
|
8712
8712
|
enabled: enabledFor,
|
|
8713
8713
|
run: (_ctx, params) => {
|
|
8714
|
-
if (!
|
|
8714
|
+
if (!_chunkW3GXSUSQcjs.VECTOR_FILTER_TYPES.includes(params.type)) fail(`Unknown filter type "${params.type}"; use one of ${_chunkW3GXSUSQcjs.VECTOR_FILTER_TYPES.join(", ")}.`);
|
|
8715
8715
|
checkFilterParams(params.type, params.params);
|
|
8716
8716
|
const targets = ids(params);
|
|
8717
8717
|
const created = controller.addFilter(params.type, { ids: targets, params: params.params, index: params.index });
|
|
@@ -8827,7 +8827,7 @@ function createVectorCommands(controller, options = {}) {
|
|
|
8827
8827
|
width: { type: "number", description: "For a line: the x offset of its end." },
|
|
8828
8828
|
height: { type: "number", description: "For a line: the y offset of its end." },
|
|
8829
8829
|
cornerRadius: { type: "number", minimum: 0, description: "Live corner radius of a rect, polygon or star." },
|
|
8830
|
-
cornerKind: { type: "string", enum:
|
|
8830
|
+
cornerKind: { type: "string", enum: _chunkW3GXSUSQcjs.VECTOR_CORNER_KINDS },
|
|
8831
8831
|
sides: { type: "integer", minimum: 3 },
|
|
8832
8832
|
points: { type: "integer", minimum: 3 },
|
|
8833
8833
|
innerRatio: { type: "number", minimum: 0, maximum: 1 },
|
|
@@ -8884,7 +8884,7 @@ function createVectorCommands(controller, options = {}) {
|
|
|
8884
8884
|
undoable: true,
|
|
8885
8885
|
run: (_ctx, params) => {
|
|
8886
8886
|
const { ids: _i, target, ...patch } = _nullishCoalesce(params, () => ( {}));
|
|
8887
|
-
if (patch.type !== void 0 && !
|
|
8887
|
+
if (patch.type !== void 0 && !_chunkW3GXSUSQcjs.VECTOR_GRADIENT_TYPES.includes(patch.type)) fail(`Unknown gradient type "${patch.type}".`);
|
|
8888
8888
|
if (patch.stops !== void 0 && !(Array.isArray(patch.stops) && patch.stops.length)) fail("stops needs at least one { offset, color }.");
|
|
8889
8889
|
check(controller.setGradient(patch, { ids: ids(params), target: _nullishCoalesce(target, () => ( "fill")) }));
|
|
8890
8890
|
const id = ids(params)[0];
|
|
@@ -8901,7 +8901,7 @@ function createVectorCommands(controller, options = {}) {
|
|
|
8901
8901
|
label: "Corner Radius\u2026",
|
|
8902
8902
|
keywords: ["round", "rounded", "corners", "radius", "fillet", "chamfer", "live corners"],
|
|
8903
8903
|
description: "Sets the live corner radius (and optionally `kind`: round, inverted or chamfer) of `anchors`, else the selected points (direct tool), else every corner of `ids` / the selection. Radius 0 makes corners sharp; radii shrink to fit short sides. The anchors stay editable.",
|
|
8904
|
-
params: { type: "object", properties: { radius: { type: "number", minimum: 0 }, kind: { type: "string", enum:
|
|
8904
|
+
params: { type: "object", properties: { radius: { type: "number", minimum: 0 }, kind: { type: "string", enum: _chunkW3GXSUSQcjs.VECTOR_CORNER_KINDS }, ids: IDS, anchors: ANCHORS } },
|
|
8905
8905
|
undoable: true,
|
|
8906
8906
|
run: (_ctx, params) => {
|
|
8907
8907
|
const refs = _optionalChain([params, 'optionalAccess', _403 => _403.anchors]) ? anchorsOf(params.anchors) : void 0;
|
|
@@ -8922,7 +8922,7 @@ function createVectorCommands(controller, options = {}) {
|
|
|
8922
8922
|
type: "object",
|
|
8923
8923
|
properties: {
|
|
8924
8924
|
ids: IDS,
|
|
8925
|
-
preset: { type: "string", enum:
|
|
8925
|
+
preset: { type: "string", enum: _chunkW3GXSUSQcjs.VECTOR_WIDTH_PRESET_IDS },
|
|
8926
8926
|
points: WIDTH_POINTS,
|
|
8927
8927
|
taper: {
|
|
8928
8928
|
type: "object",
|
|
@@ -9045,7 +9045,7 @@ function createVectorCommands(controller, options = {}) {
|
|
|
9045
9045
|
type: "object",
|
|
9046
9046
|
properties: {
|
|
9047
9047
|
ids: IDS,
|
|
9048
|
-
preset: { type: "string", enum:
|
|
9048
|
+
preset: { type: "string", enum: _chunkW3GXSUSQcjs.WARP_STYLES },
|
|
9049
9049
|
bend: { type: "number", minimum: -100, maximum: 100 },
|
|
9050
9050
|
horizontal: { type: "number", minimum: -100, maximum: 100 },
|
|
9051
9051
|
vertical: { type: "number", minimum: -100, maximum: 100 },
|
|
@@ -9074,7 +9074,7 @@ function createVectorCommands(controller, options = {}) {
|
|
|
9074
9074
|
check(r);
|
|
9075
9075
|
return { nodeId: r.nodeId };
|
|
9076
9076
|
}
|
|
9077
|
-
if (params.preset !== void 0 && !
|
|
9077
|
+
if (params.preset !== void 0 && !_chunkW3GXSUSQcjs.WARP_STYLES.includes(params.preset)) fail(`Unknown warp preset "${params.preset}".`);
|
|
9078
9078
|
const patch = {};
|
|
9079
9079
|
if (params.preset) patch.style = params.preset;
|
|
9080
9080
|
for (const k of ["bend", "horizontal", "vertical"]) if (params[k] !== void 0) patch[k] = params[k];
|
|
@@ -9089,7 +9089,7 @@ function createVectorCommands(controller, options = {}) {
|
|
|
9089
9089
|
if (params.mesh.points) {
|
|
9090
9090
|
const even = (n) => Array.from({ length: n + 1 }, (_, i) => i / n);
|
|
9091
9091
|
const mesh = { us: even(columns), vs: even(rows), points: params.mesh.points.map((p) => ({ x: p.x, y: p.y })) };
|
|
9092
|
-
if (!
|
|
9092
|
+
if (!_chunkW3GXSUSQcjs.isValidWarpMesh.call(void 0, mesh)) fail(`A ${columns} \xD7 ${rows} mesh needs ${(3 * columns + 1) * (3 * rows + 1)} finite points.`);
|
|
9093
9093
|
patch.mesh = mesh;
|
|
9094
9094
|
}
|
|
9095
9095
|
}
|
|
@@ -9172,7 +9172,7 @@ function createVectorCommands(controller, options = {}) {
|
|
|
9172
9172
|
params: {
|
|
9173
9173
|
type: "object",
|
|
9174
9174
|
properties: {
|
|
9175
|
-
type: { type: "string", enum:
|
|
9175
|
+
type: { type: "string", enum: _chunkW3GXSUSQcjs.VECTOR_EFFECT_TYPES },
|
|
9176
9176
|
params: { type: "object", description: EFFECT_PARAMS_DESCRIPTION },
|
|
9177
9177
|
index: { type: "integer", minimum: 0, description: "Position in the stack (default: last)." },
|
|
9178
9178
|
ids: IDS
|
|
@@ -9182,7 +9182,7 @@ function createVectorCommands(controller, options = {}) {
|
|
|
9182
9182
|
undoable: true,
|
|
9183
9183
|
enabled: enabledFor,
|
|
9184
9184
|
run: (_ctx, params) => {
|
|
9185
|
-
if (!
|
|
9185
|
+
if (!_chunkW3GXSUSQcjs.VECTOR_EFFECT_TYPES.includes(params.type)) fail(`Unknown effect type "${params.type}".`);
|
|
9186
9186
|
const targets = ids(params);
|
|
9187
9187
|
const created = controller.addEffect(params.type, { ids: targets, params: params.params, index: params.index });
|
|
9188
9188
|
if (!created.length) fail("Nothing to add the effect to.");
|
|
@@ -9327,10 +9327,10 @@ function createVectorCommands(controller, options = {}) {
|
|
|
9327
9327
|
label: "Pathfinder\u2026",
|
|
9328
9328
|
keywords: ["divide", "trim", "merge", "crop", "outline", "minus back", "split", "faces"],
|
|
9329
9329
|
description: "Pathfinder over the given paths (bottom to top): divide (every face its own shape, painted like the top-most shape over it; open unfilled paths cut), trim (hidden parts removed), merge (trim, then touching parts of one fill joined), crop (the top shape crops the others), outline (outlines cut into open strokes where they meet) or minusBack (the top shape minus everything below). Results replace the paths, grouped when there are several.",
|
|
9330
|
-
params: { type: "object", properties: { operation: { type: "string", enum: [...
|
|
9330
|
+
params: { type: "object", properties: { operation: { type: "string", enum: [..._chunkW3GXSUSQcjs.VECTOR_PATHFINDER_OPERATIONS] }, ids: IDS }, required: ["operation"] },
|
|
9331
9331
|
undoable: true,
|
|
9332
9332
|
run: (_ctx, params) => {
|
|
9333
|
-
if (!
|
|
9333
|
+
if (!_chunkW3GXSUSQcjs.VECTOR_PATHFINDER_OPERATIONS.includes(params.operation)) fail(`Unknown Pathfinder operation "${params.operation}".`);
|
|
9334
9334
|
const created = controller.pathfinder(params.operation, { ids: ids(params) });
|
|
9335
9335
|
if (!created.length) fail("Nothing came out: select paths that overlap (two or more, except for divide and outline).");
|
|
9336
9336
|
return { ids: created, selection: [...controller.getState().selection] };
|
|
@@ -9636,7 +9636,7 @@ function createVectorCommands(controller, options = {}) {
|
|
|
9636
9636
|
label: "Choose Tool\u2026",
|
|
9637
9637
|
keywords: ["pen", "pencil", "select", "rectangle", "ellipse"],
|
|
9638
9638
|
description: "Switches the canvas tool.",
|
|
9639
|
-
params: { type: "object", properties: { tool: { type: "string", enum: [...
|
|
9639
|
+
params: { type: "object", properties: { tool: { type: "string", enum: [..._chunkW3GXSUSQcjs.VECTOR_TOOLS] } }, required: ["tool"] },
|
|
9640
9640
|
run: (_ctx, params) => {
|
|
9641
9641
|
controller.setTool(params.tool);
|
|
9642
9642
|
return { tool: params.tool };
|
|
@@ -10126,5 +10126,5 @@ function createVectorCommands(controller, options = {}) {
|
|
|
10126
10126
|
|
|
10127
10127
|
|
|
10128
10128
|
|
|
10129
|
-
exports.DEFAULT_VECTOR_BLEND_DISTANCE = DEFAULT_VECTOR_BLEND_DISTANCE; exports.DEFAULT_VECTOR_BLEND_STEPS = DEFAULT_VECTOR_BLEND_STEPS; exports.DEFAULT_VECTOR_PATH_EDIT = DEFAULT_VECTOR_PATH_EDIT; exports.DEFAULT_VECTOR_SNAP = DEFAULT_VECTOR_SNAP; exports.IDENTITY_MATRIX = _chunkDWGZUSEScjs.IDENTITY_MATRIX; exports.KAPPA = _chunkUTEVPQTScjs.KAPPA; exports.LazyMouse = LazyMouse; exports.VECTOR_ARROWHEADS = _chunkUTEVPQTScjs.VECTOR_ARROWHEADS; exports.VECTOR_ARROWHEAD_LABELS = VECTOR_ARROWHEAD_LABELS; exports.VECTOR_BLEND_MAX_SMOOTH_STEPS = VECTOR_BLEND_MAX_SMOOTH_STEPS; exports.VECTOR_BLEND_MAX_STEPS = VECTOR_BLEND_MAX_STEPS; exports.VECTOR_BLEND_MODES = _chunkUTEVPQTScjs.VECTOR_BLEND_MODES; exports.VECTOR_BLEND_MODE_LABELS = _chunkUTEVPQTScjs.VECTOR_BLEND_MODE_LABELS; exports.VECTOR_BLEND_MODE_MENU = VECTOR_BLEND_MODE_MENU; exports.VECTOR_BLEND_SPACINGS = _chunkUTEVPQTScjs.VECTOR_BLEND_SPACINGS; exports.VECTOR_BLEND_SPACING_LABELS = VECTOR_BLEND_SPACING_LABELS; exports.VECTOR_BUILDER_HATCH_GAP = VECTOR_BUILDER_HATCH_GAP; exports.VECTOR_CLIPBOARD_TYPE = VECTOR_CLIPBOARD_TYPE; exports.VECTOR_CONSTRUCTION_ANGLES = VECTOR_CONSTRUCTION_ANGLES; exports.VECTOR_CORNER_KINDS = _chunkUTEVPQTScjs.VECTOR_CORNER_KINDS; exports.VECTOR_CORNER_KIND_LABELS = VECTOR_CORNER_KIND_LABELS; exports.VECTOR_CORNER_WIDGET_INSET = VECTOR_CORNER_WIDGET_INSET; exports.VECTOR_DISTORT_TOLERANCE = VECTOR_DISTORT_TOLERANCE; exports.VECTOR_EDIT_TOGGLES = VECTOR_EDIT_TOGGLES; exports.VECTOR_EFFECT_DEFAULTS = _chunkUTEVPQTScjs.VECTOR_EFFECT_DEFAULTS; exports.VECTOR_EFFECT_LABELS = _chunkUTEVPQTScjs.VECTOR_EFFECT_LABELS; exports.VECTOR_EFFECT_MENU = VECTOR_EFFECT_MENU; exports.VECTOR_EFFECT_PARAM_SPECS = _chunkUTEVPQTScjs.VECTOR_EFFECT_PARAM_SPECS; exports.VECTOR_EFFECT_TYPES = _chunkUTEVPQTScjs.VECTOR_EFFECT_TYPES; exports.VECTOR_ENVELOPE_STYLE_OPTIONS = VECTOR_ENVELOPE_STYLE_OPTIONS; exports.VECTOR_FILL_GAP = VECTOR_FILL_GAP; exports.VECTOR_FILTER_DEFAULTS = _chunkUTEVPQTScjs.VECTOR_FILTER_DEFAULTS; exports.VECTOR_FILTER_LABELS = _chunkUTEVPQTScjs.VECTOR_FILTER_LABELS; exports.VECTOR_FILTER_MENU = _chunkUTEVPQTScjs.VECTOR_FILTER_MENU; exports.VECTOR_FILTER_PARAM_SPECS = _chunkUTEVPQTScjs.VECTOR_FILTER_PARAM_SPECS; exports.VECTOR_FILTER_TYPES = _chunkUTEVPQTScjs.VECTOR_FILTER_TYPES; exports.VECTOR_GRADIENT_INTERPOLATIONS = _chunkUTEVPQTScjs.VECTOR_GRADIENT_INTERPOLATIONS; exports.VECTOR_GRADIENT_INTERPOLATION_LABELS = VECTOR_GRADIENT_INTERPOLATION_LABELS; exports.VECTOR_GRADIENT_MAX_PERIODS = _chunkUTEVPQTScjs.VECTOR_GRADIENT_MAX_PERIODS; exports.VECTOR_GRADIENT_MIDPOINT_GAP = VECTOR_GRADIENT_MIDPOINT_GAP; exports.VECTOR_GRADIENT_MIN_STOPS = _chunkUTEVPQTScjs.VECTOR_GRADIENT_MIN_STOPS; exports.VECTOR_GRADIENT_OFF_BAR = VECTOR_GRADIENT_OFF_BAR; exports.VECTOR_GRADIENT_SPREADS = _chunkUTEVPQTScjs.VECTOR_GRADIENT_SPREADS; exports.VECTOR_GRADIENT_SPREAD_LABELS = VECTOR_GRADIENT_SPREAD_LABELS; exports.VECTOR_GRADIENT_STOP_GAP = VECTOR_GRADIENT_STOP_GAP; exports.VECTOR_GRADIENT_TYPES = _chunkUTEVPQTScjs.VECTOR_GRADIENT_TYPES; exports.VECTOR_GRADIENT_TYPE_LABELS = VECTOR_GRADIENT_TYPE_LABELS; exports.VECTOR_INK_MAX_CORNERS = VECTOR_INK_MAX_CORNERS; exports.VECTOR_MASK_TYPES = _chunkUTEVPQTScjs.VECTOR_MASK_TYPES; exports.VECTOR_MASK_TYPE_LABELS = VECTOR_MASK_TYPE_LABELS; exports.VECTOR_MASK_TYPE_OPTIONS = VECTOR_MASK_TYPE_OPTIONS; exports.VECTOR_MERGE_MODES = _chunkUTEVPQTScjs.VECTOR_MERGE_MODES; exports.VECTOR_OVERLAY_THEME = VECTOR_OVERLAY_THEME; exports.VECTOR_PATHFINDER_ACTIONS = VECTOR_PATHFINDER_ACTIONS; exports.VECTOR_PATHFINDER_LABELS = VECTOR_PATHFINDER_LABELS; exports.VECTOR_PATHFINDER_OPERATIONS = _chunkUTEVPQTScjs.VECTOR_PATHFINDER_OPERATIONS; exports.VECTOR_PATH_ACTIONS = VECTOR_PATH_ACTIONS; exports.VECTOR_PENCIL_STRING_PX = VECTOR_PENCIL_STRING_PX; exports.VECTOR_PRESSURE_NOMINAL = _chunkUTEVPQTScjs.VECTOR_PRESSURE_NOMINAL; exports.VECTOR_ROTATE_HANDLE_OFFSET = VECTOR_ROTATE_HANDLE_OFFSET; exports.VECTOR_STROKE_ALIGN_LABELS = VECTOR_STROKE_ALIGN_LABELS; exports.VECTOR_STROKE_GRADIENT_MODES = _chunkUTEVPQTScjs.VECTOR_STROKE_GRADIENT_MODES; exports.VECTOR_STROKE_GRADIENT_MODE_LABELS = VECTOR_STROKE_GRADIENT_MODE_LABELS; exports.VECTOR_STROKE_SETTING_KEYS = _chunkUTEVPQTScjs.VECTOR_STROKE_SETTING_KEYS; exports.VECTOR_STYLE_KEYS = VECTOR_STYLE_KEYS; exports.VECTOR_TOOLS = _chunkUTEVPQTScjs.VECTOR_TOOLS; exports.VECTOR_TOOL_GLYPHS = VECTOR_TOOL_GLYPHS; exports.VECTOR_TOOL_SHORTCUTS = VECTOR_TOOL_SHORTCUTS; exports.VECTOR_TRANSFORM_HANDLES = _chunkUTEVPQTScjs.VECTOR_TRANSFORM_HANDLES; exports.VECTOR_WARP_STYLES = _chunkDWGZUSEScjs.WARP_STYLES; exports.VECTOR_WARP_STYLE_LABELS = _chunkDWGZUSEScjs.WARP_STYLE_LABELS; exports.VECTOR_WIDTH_PRESETS = _chunkUTEVPQTScjs.VECTOR_WIDTH_PRESETS; exports.VECTOR_WIDTH_PRESET_IDS = _chunkUTEVPQTScjs.VECTOR_WIDTH_PRESET_IDS; exports.VECTOR_WIDTH_PROFILE_MAX_POINTS = _chunkUTEVPQTScjs.VECTOR_WIDTH_PROFILE_MAX_POINTS; exports.VECTOR_WIDTH_PROFILE_MAX_SCALE = _chunkUTEVPQTScjs.VECTOR_WIDTH_PROFILE_MAX_SCALE; exports.VECTOR_WIDTH_SAME_T = _chunkUTEVPQTScjs.VECTOR_WIDTH_SAME_T; exports.VectorEditorController = VectorEditorController; exports.VectorSnapTargets = VectorSnapTargets; exports.activeVectorEffects = _chunkUTEVPQTScjs.activeVectorEffects; exports.activeVectorFilters = _chunkUTEVPQTScjs.activeVectorFilters; exports.addBuilderHit = addBuilderHit; exports.applyMatrix = _chunkDWGZUSEScjs.applyMatrix; exports.applyMatrixLinear = _chunkDWGZUSEScjs.applyMatrixLinear; exports.applyVectorBlendOptions = applyVectorBlendOptions; exports.applyVectorCornersAttribute = _chunkUTEVPQTScjs.applyVectorCornersAttribute; exports.applyVectorEffects = _chunkUTEVPQTScjs.applyVectorEffects; exports.applyVectorGradientPatch = _chunkUTEVPQTScjs.applyVectorGradientPatch; exports.applyVectorGradientSpread = _chunkUTEVPQTScjs.applyVectorGradientSpread; exports.applyVectorHomography = _chunkMUUXNRU4cjs.applyHomography; exports.arrowheadInset = _chunkUTEVPQTScjs.arrowheadInset; exports.arrowheadPath = _chunkUTEVPQTScjs.arrowheadPath; exports.arrowheadWeight = _chunkUTEVPQTScjs.arrowheadWeight; exports.bendSegment = bendSegment; exports.bezierToSubpaths = _chunkUTEVPQTScjs.bezierToSubpaths; exports.boundsFromPoints = _chunkUTEVPQTScjs.boundsFromPoints; exports.boundsIntersect = _chunkUTEVPQTScjs.boundsIntersect; exports.clearVectorLiveBooleanCache = _chunkUTEVPQTScjs.clearVectorLiveBooleanCache; exports.cloneAnchor = _chunkUTEVPQTScjs.cloneAnchor; exports.cloneSubpath = _chunkUTEVPQTScjs.cloneSubpath; exports.cloneVectorDocument = _chunkUTEVPQTScjs.cloneVectorDocument; exports.cloneVectorNode = _chunkUTEVPQTScjs.cloneVectorNode; exports.collectPathNodes = _chunkUTEVPQTScjs.collectPathNodes; exports.constrainToLeave = constrainToLeave; exports.convertAnchor = _chunkUTEVPQTScjs.convertAnchor; exports.convertVectorGradient = _chunkUTEVPQTScjs.convertVectorGradient; exports.cornerBisectorPoint = _chunkUTEVPQTScjs.cornerBisectorPoint; exports.cornerRadiusChange = _chunkUTEVPQTScjs.cornerRadiusChange; exports.cornerSetback = _chunkUTEVPQTScjs.cornerSetback; exports.correspondMorphContours = _chunkUTEVPQTScjs.correspondMorphContours; exports.createVectorCommands = createVectorCommands; exports.createVectorEffect = _chunkUTEVPQTScjs.createVectorEffect; exports.createVectorFilter = _chunkUTEVPQTScjs.createVectorFilter; exports.createVectorMorph = _chunkUTEVPQTScjs.createVectorMorph; exports.curvatureMoveAnchor = curvatureMoveAnchor; exports.cutSubpathAt = cutSubpathAt; exports.dashIntervals = _chunkUTEVPQTScjs.dashIntervals; exports.decomposeRigid = _chunkDWGZUSEScjs.decomposeRigid; exports.defaultVectorGradient = _chunkUTEVPQTScjs.defaultVectorGradient; exports.distortVectorNode = distortVectorNode; exports.dragVectorMeshPoint = _chunkDWGZUSEScjs.dragWarpMeshPoint; exports.effectPathLength = _chunkUTEVPQTScjs.effectPathLength; exports.effectPathVertexCount = _chunkUTEVPQTScjs.effectPathVertexCount; exports.effectiveStrokeAlign = _chunkUTEVPQTScjs.effectiveStrokeAlign; exports.ellipseSubpath = _chunkUTEVPQTScjs.ellipseSubpath; exports.eraseFromFill = _chunkUTEVPQTScjs.eraseFromFill; exports.eraseFromOutline = _chunkUTEVPQTScjs.eraseFromOutline; exports.eraserRegion = _chunkUTEVPQTScjs.eraserRegion; exports.evalVectorMesh = _chunkDWGZUSEScjs.evalWarpMesh; exports.evaluateVectorPathKeyframes = _chunkUTEVPQTScjs.evaluateVectorPathKeyframes; exports.expandVectorAppearance = _chunkUTEVPQTScjs.expandVectorAppearance; exports.expandVectorAppearances = _chunkUTEVPQTScjs.expandVectorAppearances; exports.expandVectorBlend = expandVectorBlend; exports.expandVectorCorners = _chunkUTEVPQTScjs.expandVectorCorners; exports.expandVectorCornersOf = _chunkUTEVPQTScjs.expandVectorCornersOf; exports.expandVectorGradientSpread = _chunkUTEVPQTScjs.expandVectorGradientSpread; exports.expandVectorGradientStops = _chunkUTEVPQTScjs.expandVectorGradientStops; exports.explicitVectorGradient = _chunkUTEVPQTScjs.explicitVectorGradient; exports.findVectorNode = _chunkUTEVPQTScjs.findVectorNode; exports.fitCornerRadius = _chunkUTEVPQTScjs.fitCornerRadius; exports.fitVectorMesh = _chunkDWGZUSEScjs.fitWarpMesh; exports.foldVectorBooleanOperands = _chunkUTEVPQTScjs.foldVectorBooleanOperands; exports.generateVectorBlendChildren = generateVectorBlendChildren; exports.generateWidthProfile = _chunkUTEVPQTScjs.generateWidthProfile; exports.getAnchor = getAnchor; exports.getAnchorWorld = getAnchorWorld; exports.getEditablePathIds = getEditablePathIds; exports.getTransformHandlePositions = getTransformHandlePositions; exports.getVectorAppearancePanel = getVectorAppearancePanel; exports.getVectorBlendControls = getVectorBlendControls; exports.getVectorCornerWidgets = getVectorCornerWidgets; exports.getVectorEffectsPanel = getVectorEffectsPanel; exports.getVectorEnteredGroups = getVectorEnteredGroups; exports.getVectorEnvelopePanel = getVectorEnvelopePanel; exports.getVectorEnvelopeTarget = getVectorEnvelopeTarget; exports.getVectorGradientAnnotator = getVectorGradientAnnotator; exports.getVectorGradientEditor = getVectorGradientEditor; exports.getVectorMaskPanel = getVectorMaskPanel; exports.getVectorOverlayRenderData = getVectorOverlayRenderData; exports.getVectorSceneRenderData = getVectorSceneRenderData; exports.getVectorSelectionBoxGeometry = getVectorSelectionBoxGeometry; exports.getVectorSelectionFrame = getVectorSelectionFrame; exports.getVectorSelectionStyle = getVectorSelectionStyle; exports.getVectorWidthHandles = getVectorWidthHandles; exports.getVisibleAnchors = getVisibleAnchors; exports.getVisibleHandles = getVisibleHandles; exports.gradientMidpointRemap = _chunkUTEVPQTScjs.gradientMidpointRemap; exports.hasExplicitGradientGeometry = _chunkUTEVPQTScjs.hasExplicitGradientGeometry; exports.hasOwnVectorAppearance = _chunkUTEVPQTScjs.hasOwnVectorAppearance; exports.hasPaint = _chunkUTEVPQTScjs.hasPaint; exports.hasStrokeExtras = _chunkUTEVPQTScjs.hasStrokeExtras; exports.hasVectorAppearance = _chunkUTEVPQTScjs.hasVectorAppearance; exports.hasVectorCorners = _chunkUTEVPQTScjs.hasVectorCorners; exports.hasVectorPaintStacks = _chunkUTEVPQTScjs.hasVectorPaintStacks; exports.hitTestVectorNode = _chunkUTEVPQTScjs.hitTestVectorNode; exports.hitTestVectorNodes = _chunkUTEVPQTScjs.hitTestVectorNodes; exports.hitTestVectorPaintLayer = _chunkUTEVPQTScjs.hitTestVectorPaintLayer; exports.hitTestVectorPaintStack = _chunkUTEVPQTScjs.hitTestVectorPaintStack; exports.hitTestVectorStroke = _chunkUTEVPQTScjs.hitTestVectorStroke; exports.hitVectorGradientAnnotator = hitVectorGradientAnnotator; exports.inferAnchorType = _chunkUTEVPQTScjs.inferAnchorType; exports.insertAnchor = _chunkUTEVPQTScjs.insertAnchor; exports.insertVectorGradientStop = _chunkUTEVPQTScjs.insertVectorGradientStop; exports.insertWidthPoint = _chunkUTEVPQTScjs.insertWidthPoint; exports.interpolateMorphContours = _chunkUTEVPQTScjs.interpolateMorphContours; exports.interpolateRigidMatrix = _chunkUTEVPQTScjs.interpolateRigidMatrix; exports.interpolateVectorColor = _chunkUTEVPQTScjs.interpolateVectorColor; exports.interpolateVectorPaint = _chunkUTEVPQTScjs.interpolateVectorPaint; exports.interpolateVectorPaths = _chunkUTEVPQTScjs.interpolateVectorPaths; exports.interpolateVectorStyle = _chunkUTEVPQTScjs.interpolateVectorStyle; exports.interpolateWidthProfiles = _chunkUTEVPQTScjs.interpolateWidthProfiles; exports.invertMatrix = _chunkDWGZUSEScjs.invertMatrix; exports.isCentredVectorGradient = _chunkUTEVPQTScjs.isCentredVectorGradient; exports.isClosedBezierShape = _chunkUTEVPQTScjs.isClosedBezierShape; exports.isDrawnVectorPaintLayer = _chunkUTEVPQTScjs.isDrawnVectorPaintLayer; exports.isIdentityMatrix = _chunkDWGZUSEScjs.isIdentityMatrix; exports.isPlainVectorPaintLayer = _chunkUTEVPQTScjs.isPlainVectorPaintLayer; exports.isUniformWidthProfile = _chunkUTEVPQTScjs.isUniformWidthProfile; exports.isValidVectorMesh = _chunkDWGZUSEScjs.isValidWarpMesh; exports.isVectorBlendGroup = isVectorBlendGroup; exports.isVectorBlendMode = _chunkUTEVPQTScjs.isVectorBlendMode; exports.isVectorFilterType = _chunkUTEVPQTScjs.isVectorFilterType; exports.isVectorGradient = _chunkUTEVPQTScjs.isVectorGradient; exports.isVectorLiveBoolean = _chunkUTEVPQTScjs.isVectorLiveBoolean; exports.isVectorMaskActive = _chunkUTEVPQTScjs.isVectorMaskActive; exports.isVectorMaskGroup = _chunkUTEVPQTScjs.isVectorMaskGroup; exports.isVectorMaskType = _chunkUTEVPQTScjs.isVectorMaskType; exports.isVectorTextTarget = isVectorTextTarget; exports.joinSubpaths = joinSubpaths; exports.knifePath = _chunkUTEVPQTScjs.knifePath; exports.lineSubpath = _chunkUTEVPQTScjs.lineSubpath; exports.locateVectorNode = _chunkUTEVPQTScjs.locateVectorNode; exports.mapBezierPath = _chunkUTEVPQTScjs.mapBezierPath; exports.mapVectorGradient = _chunkUTEVPQTScjs.mapVectorGradient; exports.mapVectorMeshPoints = _chunkDWGZUSEScjs.mapWarpMeshPoints; exports.mapVectorPaint = _chunkUTEVPQTScjs.mapVectorPaint; exports.mapVectorPoints = _chunkUTEVPQTScjs.mapVectorPoints; exports.mapVectorSubpaths = _chunkUTEVPQTScjs.mapVectorSubpaths; exports.matrixRotation = _chunkDWGZUSEScjs.matrixRotation; exports.mergePaths = _chunkUTEVPQTScjs.mergePaths; exports.mirrorWidthProfile = _chunkUTEVPQTScjs.mirrorWidthProfile; exports.morphContourToSubpath = _chunkUTEVPQTScjs.morphContourToSubpath; exports.morphPathsCross = _chunkUTEVPQTScjs.morphPathsCross; exports.moveAnchorHandle = _chunkUTEVPQTScjs.moveAnchorHandle; exports.moveVectorGradientHandle = _chunkUTEVPQTScjs.moveVectorGradientHandle; exports.moveVectorGradientStop = _chunkUTEVPQTScjs.moveVectorGradientStop; exports.multiplyMatrices = _chunkDWGZUSEScjs.multiplyMatrices; exports.nearestSegment = _chunkUTEVPQTScjs.nearestSegment; exports.nearestStrokePosition = _chunkUTEVPQTScjs.nearestStrokePosition; exports.needsVectorPaintLayers = _chunkUTEVPQTScjs.needsVectorPaintLayers; exports.newVectorStrokeLayer = _chunkUTEVPQTScjs.newVectorStrokeLayer; exports.nextVectorCornerKind = _chunkUTEVPQTScjs.nextVectorCornerKind; exports.nodeMatrix = _chunkUTEVPQTScjs.nodeMatrix; exports.normalizeVectorEffectParams = _chunkUTEVPQTScjs.normalizeVectorEffectParams; exports.normalizeVectorFilterParams = _chunkUTEVPQTScjs.normalizeVectorFilterParams; exports.normalizeVectorPaintStacks = _chunkUTEVPQTScjs.normalizeVectorPaintStacks; exports.offsetPaths = _chunkUTEVPQTScjs.offsetPaths; exports.orderVectorQuad = _chunkMUUXNRU4cjs.orderQuad; exports.parseSvgTransform = _chunkUTEVPQTScjs.parseSvgTransform; exports.parseVectorColor = _chunkUTEVPQTScjs.parseVectorColor; exports.parseVectorSvg = _chunkUTEVPQTScjs.parseVectorSvg; exports.pathsCenter = _chunkUTEVPQTScjs.pathsCenter; exports.patternAttrs = _chunkUTEVPQTScjs.patternAttrs; exports.periodicVectorGradientStops = _chunkUTEVPQTScjs.periodicVectorGradientStops; exports.pinVectorGradient = _chunkUTEVPQTScjs.pinVectorGradient; exports.planShapeBuilder = planShapeBuilder; exports.polygonSubpath = _chunkUTEVPQTScjs.polygonSubpath; exports.polylineBounds = _chunkUTEVPQTScjs.polylineBounds; exports.pressureWidthProfile = _chunkUTEVPQTScjs.pressureWidthProfile; exports.puckerBloatPaths = _chunkUTEVPQTScjs.puckerBloatPaths; exports.pullVectorMesh = _chunkDWGZUSEScjs.pullWarpMesh; exports.recognizeInkShape = recognizeInkShape; exports.rectSubpath = _chunkUTEVPQTScjs.rectSubpath; exports.refineMorphContour = _chunkUTEVPQTScjs.refineMorphContour; exports.refreshVectorBlends = refreshVectorBlends; exports.releaseVectorBlend = releaseVectorBlend; exports.removeAnchorKeepingShape = removeAnchorKeepingShape; exports.removeAnchors = _chunkUTEVPQTScjs.removeAnchors; exports.removeAnchorsKeepingShape = removeAnchorsKeepingShape; exports.removeRedundantPoints = removeRedundantPoints; exports.removeVectorGradientStop = _chunkUTEVPQTScjs.removeVectorGradientStop; exports.removeVectorMeshSplitU = _chunkDWGZUSEScjs.removeWarpMeshSplitU; exports.removeVectorMeshSplitV = _chunkDWGZUSEScjs.removeWarpMeshSplitV; exports.removeWidthPoints = _chunkUTEVPQTScjs.removeWidthPoints; exports.repeatPaths = _chunkUTEVPQTScjs.repeatPaths; exports.resampleGradientStops = _chunkUTEVPQTScjs.resampleGradientStops; exports.resizeVectorMesh = _chunkDWGZUSEScjs.resizeWarpMesh; exports.resolveVectorBlendOptions = resolveVectorBlendOptions; exports.reverseMorphContour = _chunkUTEVPQTScjs.reverseMorphContour; exports.reverseSubpath = _chunkUTEVPQTScjs.reverseSubpath; exports.reverseVectorGradient = _chunkUTEVPQTScjs.reverseVectorGradient; exports.reverseWidthProfile = _chunkUTEVPQTScjs.reverseWidthProfile; exports.rotateMatrix = _chunkDWGZUSEScjs.rotateMatrix; exports.roundCornerPaths = _chunkUTEVPQTScjs.roundCornerPaths; exports.roundSubpaths = _chunkUTEVPQTScjs.roundSubpaths; exports.samplePlainStops = _chunkUTEVPQTScjs.samplePlainStops; exports.samplePolyline = samplePolyline; exports.sampleVectorGradient = _chunkUTEVPQTScjs.sampleVectorGradient; exports.sampleVectorGradientAt = _chunkUTEVPQTScjs.sampleVectorGradientAt; exports.sampleVectorPaintDefAt = _chunkUTEVPQTScjs.sampleVectorPaintDefAt; exports.sanitizeVectorEffects = _chunkUTEVPQTScjs.sanitizeVectorEffects; exports.sanitizeVectorFills = _chunkUTEVPQTScjs.sanitizeVectorFills; exports.sanitizeVectorFilters = _chunkUTEVPQTScjs.sanitizeVectorFilters; exports.sanitizeVectorGradient = _chunkUTEVPQTScjs.sanitizeVectorGradient; exports.sanitizeVectorMask = _chunkUTEVPQTScjs.sanitizeVectorMask; exports.sanitizeVectorStrokeSettings = _chunkUTEVPQTScjs.sanitizeVectorStrokeSettings; exports.sanitizeVectorStrokes = _chunkUTEVPQTScjs.sanitizeVectorStrokes; exports.sanitizeWidthProfile = _chunkUTEVPQTScjs.sanitizeWidthProfile; exports.scaleFor = scaleFor; exports.scaleMatrix = _chunkDWGZUSEScjs.scaleMatrix; exports.setAnchorCorner = _chunkUTEVPQTScjs.setAnchorCorner; exports.setSubpathCorners = _chunkUTEVPQTScjs.setSubpathCorners; exports.setVectorGradientVector = _chunkUTEVPQTScjs.setVectorGradientVector; exports.setWidthPoint = _chunkUTEVPQTScjs.setWidthPoint; exports.simplifyPolyline = _chunkUTEVPQTScjs.simplifyPolyline; exports.smoothSubpath = smoothSubpath; exports.solve8 = _chunkMUUXNRU4cjs.solve8; exports.sortedVectorGradientStops = _chunkUTEVPQTScjs.sortedVectorGradientStops; exports.spanVectorGradientStops = _chunkUTEVPQTScjs.spanVectorGradientStops; exports.splitIntoFaces = _chunkUTEVPQTScjs.splitIntoFaces; exports.splitSubpathAt = splitSubpathAt; exports.splitVectorMeshU = _chunkDWGZUSEScjs.splitWarpMeshU; exports.splitVectorMeshV = _chunkDWGZUSEScjs.splitWarpMeshV; exports.starSubpath = _chunkUTEVPQTScjs.starSubpath; exports.strokePositionPoint = _chunkUTEVPQTScjs.strokePositionPoint; exports.strokeWidthProfileOf = _chunkUTEVPQTScjs.strokeWidthProfileOf; exports.subpathEnclosesArea = subpathEnclosesArea; exports.subpathPointAt = subpathPointAt; exports.subpathSegment = _chunkUTEVPQTScjs.subpathSegment; exports.subpathSegmentCount = _chunkUTEVPQTScjs.subpathSegmentCount; exports.subpathToMorphContour = _chunkUTEVPQTScjs.subpathToMorphContour; exports.subpathsToBezier = _chunkUTEVPQTScjs.subpathsToBezier; exports.taperWaveFactor = _chunkUTEVPQTScjs.taperWaveFactor; exports.toVectorKeyInput = toVectorKeyInput; exports.toVectorModifiers = toVectorModifiers; exports.toVectorPointerInput = toVectorPointerInput; exports.transformVectorEffects = _chunkUTEVPQTScjs.transformVectorEffects; exports.transformVectorGradient = _chunkUTEVPQTScjs.transformVectorGradient; exports.transformVectorNode = _chunkUTEVPQTScjs.transformVectorNode; exports.transformVectorPaint = _chunkUTEVPQTScjs.transformVectorPaint; exports.translateAnchor = _chunkUTEVPQTScjs.translateAnchor; exports.translateMatrix = _chunkDWGZUSEScjs.translateMatrix; exports.trimIntervals = _chunkUTEVPQTScjs.trimIntervals; exports.trimPaths = _chunkUTEVPQTScjs.trimPaths; exports.trimPathsIndividually = _chunkUTEVPQTScjs.trimPathsIndividually; exports.turnMorphContour = _chunkUTEVPQTScjs.turnMorphContour; exports.twistPaths = _chunkUTEVPQTScjs.twistPaths; exports.unionBounds = _chunkUTEVPQTScjs.unionBounds; exports.variableStrokeOutline = _chunkUTEVPQTScjs.variableStrokeOutline; exports.variableStrokeRings = _chunkUTEVPQTScjs.variableStrokeRings; exports.vectorAppearanceNodes = _chunkUTEVPQTScjs.vectorAppearanceNodes; exports.vectorAppearanceOutline = _chunkUTEVPQTScjs.vectorAppearanceOutline; exports.vectorAppearanceShapes = _chunkUTEVPQTScjs.vectorAppearanceShapes; exports.vectorBlendColorDistance = vectorBlendColorDistance; exports.vectorBlendKeyTargets = vectorBlendKeyTargets; exports.vectorBlendKeys = vectorBlendKeys; exports.vectorBlendModeCss = _chunkUTEVPQTScjs.vectorBlendModeCss; exports.vectorBlendModeFromCss = _chunkUTEVPQTScjs.vectorBlendModeFromCss; exports.vectorBlendRail = vectorBlendRail; exports.vectorBlendRailAt = vectorBlendRailAt; exports.vectorBlendSpine = vectorBlendSpine; exports.vectorBlendStepCount = vectorBlendStepCount; exports.vectorBoxCorners = vectorBoxCorners; exports.vectorBoxMatrix = _chunkUTEVPQTScjs.vectorBoxMatrix; exports.vectorBuilderErasedEdges = vectorBuilderErasedEdges; exports.vectorChildAppearanceShapes = _chunkUTEVPQTScjs.vectorChildAppearanceShapes; exports.vectorCornerAt = _chunkUTEVPQTScjs.vectorCornerAt; exports.vectorCorners = _chunkUTEVPQTScjs.vectorCorners; exports.vectorCornersAttribute = _chunkUTEVPQTScjs.vectorCornersAttribute; exports.vectorDiamondPath = vectorDiamondPath; exports.vectorDistortQuad = vectorDistortQuad; exports.vectorDocumentToSvg = _chunkUTEVPQTScjs.vectorDocumentToSvg; exports.vectorEffectInputBounds = _chunkUTEVPQTScjs.vectorEffectInputBounds; exports.vectorEffectInputPaths = _chunkUTEVPQTScjs.vectorEffectInputPaths; exports.vectorEnteredGroups = _chunkUTEVPQTScjs.vectorEnteredGroups; exports.vectorEnvelopeFrame = _chunkUTEVPQTScjs.vectorEnvelopeFrame; exports.vectorEnvelopeMap = _chunkUTEVPQTScjs.vectorEnvelopeMap; exports.vectorEnvelopeMesh = _chunkUTEVPQTScjs.vectorEnvelopeMesh; exports.vectorFillMap = vectorFillMap; exports.vectorFills = _chunkUTEVPQTScjs.vectorFills; exports.vectorFilterMarkup = _chunkUTEVPQTScjs.vectorFilterMarkup; exports.vectorFilterParamKeys = _chunkUTEVPQTScjs.vectorFilterParamKeys; exports.vectorFilterReach = _chunkUTEVPQTScjs.vectorFilterReach; exports.vectorFilterSvg = _chunkUTEVPQTScjs.vectorFilterSvg; exports.vectorGradientArea = _chunkUTEVPQTScjs.vectorGradientArea; exports.vectorGradientAspect = _chunkUTEVPQTScjs.vectorGradientAspect; exports.vectorGradientBarPosition = vectorGradientBarPosition; exports.vectorGradientFocalParam = _chunkUTEVPQTScjs.vectorGradientFocalParam; exports.vectorGradientHandles = _chunkUTEVPQTScjs.vectorGradientHandles; exports.vectorGradientMatrix = _chunkUTEVPQTScjs.vectorGradientMatrix; exports.vectorGradientMidpointFromPosition = _chunkUTEVPQTScjs.vectorGradientMidpointFromPosition; exports.vectorGradientMidpointPosition = _chunkUTEVPQTScjs.vectorGradientMidpointPosition; exports.vectorGradientNeedsExpansion = _chunkUTEVPQTScjs.vectorGradientNeedsExpansion; exports.vectorGradientParam = _chunkUTEVPQTScjs.vectorGradientParam; exports.vectorGradientPoints = _chunkUTEVPQTScjs.vectorGradientPoints; exports.vectorGradientRamp = _chunkUTEVPQTScjs.vectorGradientRamp; exports.vectorGradientSvgDefs = _chunkUTEVPQTScjs.vectorGradientSvgDefs; exports.vectorGradientTAt = _chunkUTEVPQTScjs.vectorGradientTAt; exports.vectorGradientTargetPath = vectorGradientTargetPath; exports.vectorGradientUnitsMatrix = _chunkUTEVPQTScjs.vectorGradientUnitsMatrix; exports.vectorHomography = _chunkMUUXNRU4cjs.homographyFromPoints; exports.vectorHomographyKeepsQuad = _chunkMUUXNRU4cjs.homographyKeepsQuad; exports.vectorIdentityMesh = _chunkDWGZUSEScjs.identityWarpMesh; exports.vectorInkShapeName = vectorInkShapeName; exports.vectorLiveBooleanSteps = _chunkUTEVPQTScjs.vectorLiveBooleanSteps; exports.vectorMaskContains = _chunkUTEVPQTScjs.vectorMaskContains; exports.vectorMaskContentBounds = _chunkUTEVPQTScjs.vectorMaskContentBounds; exports.vectorMaskContents = _chunkUTEVPQTScjs.vectorMaskContents; exports.vectorMaskOwner = _chunkUTEVPQTScjs.vectorMaskOwner; exports.vectorMaskRegion = _chunkUTEVPQTScjs.vectorMaskRegion; exports.vectorMaskRegionPath = _chunkUTEVPQTScjs.vectorMaskRegionPath; exports.vectorMaskRegionShapes = _chunkUTEVPQTScjs.vectorMaskRegionShapes; exports.vectorMaskRenderData = _chunkUTEVPQTScjs.vectorMaskRenderData; exports.vectorMaskSource = _chunkUTEVPQTScjs.vectorMaskSource; exports.vectorMaskSummary = _chunkUTEVPQTScjs.vectorMaskSummary; exports.vectorMaskedGeometry = _chunkUTEVPQTScjs.vectorMaskedGeometry; exports.vectorMaskedLocalBounds = _chunkUTEVPQTScjs.vectorMaskedLocalBounds; exports.vectorMaskedShapes = _chunkUTEVPQTScjs.vectorMaskedShapes; exports.vectorMeshColumns = _chunkDWGZUSEScjs.warpMeshColumns; exports.vectorMeshControlBounds = _chunkDWGZUSEScjs.warpMeshControlBounds; exports.vectorMeshEditPoints = _chunkDWGZUSEScjs.warpMeshEditPoints; exports.vectorMeshFromOutline = _chunkUTEVPQTScjs.vectorMeshFromOutline; exports.vectorMeshGridCurves = _chunkDWGZUSEScjs.warpMeshGridCurves; exports.vectorMeshOutline = _chunkUTEVPQTScjs.vectorMeshOutline; exports.vectorMeshParamAt = _chunkDWGZUSEScjs.warpMeshParamAt; exports.vectorMeshRows = _chunkDWGZUSEScjs.warpMeshRows; exports.vectorNodeBounds = _chunkUTEVPQTScjs.vectorNodeBounds; exports.vectorNodeEnvelope = _chunkUTEVPQTScjs.vectorNodeEnvelope; exports.vectorNodeFilterSvg = _chunkUTEVPQTScjs.vectorNodeFilterSvg; exports.vectorNodeLocalPaintBounds = _chunkUTEVPQTScjs.vectorNodeLocalPaintBounds; exports.vectorNodeRotation = _chunkUTEVPQTScjs.vectorNodeRotation; exports.vectorNodeToBezier = _chunkUTEVPQTScjs.vectorNodeToBezier; exports.vectorOperandOperation = _chunkUTEVPQTScjs.vectorOperandOperation; exports.vectorPaintLayerNodes = _chunkUTEVPQTScjs.vectorPaintLayerNodes; exports.vectorPaintSwatch = vectorPaintSwatch; exports.vectorPaintToHex = vectorPaintToHex; exports.vectorPaintToSvg = _chunkUTEVPQTScjs.vectorPaintToSvg; exports.vectorParentMatrix = _chunkUTEVPQTScjs.vectorParentMatrix; exports.vectorPathData = _chunkUTEVPQTScjs.vectorPathData; exports.vectorPathEntries = vectorPathEntries; exports.vectorPathLocalBounds = _chunkUTEVPQTScjs.vectorPathLocalBounds; exports.vectorPathWorldBezier = _chunkUTEVPQTScjs.vectorPathWorldBezier; exports.vectorPathfinderShape = vectorPathfinderShape; exports.vectorRepeaterCopies = _chunkUTEVPQTScjs.vectorRepeaterCopies; exports.vectorResizeCursor = vectorResizeCursor; exports.vectorResultStyle = vectorResultStyle; exports.vectorShapeBuilderHit = vectorShapeBuilderHit; exports.vectorShapeBuilderMap = vectorShapeBuilderMap; exports.vectorShearForSide = vectorShearForSide; exports.vectorSkewMatrix = vectorSkewMatrix; exports.vectorStacksHaveGradient = _chunkUTEVPQTScjs.vectorStacksHaveGradient; exports.vectorStrokeGradientDefs = _chunkUTEVPQTScjs.vectorStrokeGradientDefs; exports.vectorStrokeLineArea = _chunkUTEVPQTScjs.vectorStrokeLineArea; exports.vectorStrokeOutline = _chunkUTEVPQTScjs.vectorStrokeOutline; exports.vectorStrokeOutlinePath = _chunkUTEVPQTScjs.vectorStrokeOutlinePath; exports.vectorStrokeParts = _chunkUTEVPQTScjs.vectorStrokeParts; exports.vectorStrokeReach = _chunkUTEVPQTScjs.vectorStrokeReach; exports.vectorStrokeSettings = _chunkUTEVPQTScjs.vectorStrokeSettings; exports.vectorStrokeStackReach = _chunkUTEVPQTScjs.vectorStrokeStackReach; exports.vectorStrokeSvgParts = _chunkUTEVPQTScjs.vectorStrokeSvgParts; exports.vectorStrokeWidthGeometry = vectorStrokeWidthGeometry; exports.vectorStrokes = _chunkUTEVPQTScjs.vectorStrokes; exports.vectorTargetPaint = _chunkUTEVPQTScjs.vectorTargetPaint; exports.vectorToolLabel = vectorToolLabel; exports.vectorWarpPresetGrid = _chunkDWGZUSEScjs.warpPresetGrid; exports.vectorWarpPresetMesh = _chunkDWGZUSEScjs.warpPresetMesh; exports.vectorWorldMatrix = _chunkUTEVPQTScjs.vectorWorldMatrix; exports.walkVectorNodes = _chunkUTEVPQTScjs.walkVectorNodes; exports.widthProfileAt = _chunkUTEVPQTScjs.widthProfileAt; exports.widthProfileFromAttribute = _chunkUTEVPQTScjs.widthProfileFromAttribute; exports.widthProfileMaxScale = _chunkUTEVPQTScjs.widthProfileMaxScale; exports.widthProfilePreset = _chunkUTEVPQTScjs.widthProfilePreset; exports.widthProfilePresetId = _chunkUTEVPQTScjs.widthProfilePresetId; exports.widthProfileToAttribute = _chunkUTEVPQTScjs.widthProfileToAttribute; exports.wigglePaths = _chunkUTEVPQTScjs.wigglePaths; exports.withVectorFills = _chunkUTEVPQTScjs.withVectorFills; exports.withVectorStrokes = _chunkUTEVPQTScjs.withVectorStrokes; exports.withVectorTargetPaint = _chunkUTEVPQTScjs.withVectorTargetPaint; exports.zigzagPaths = _chunkUTEVPQTScjs.zigzagPaths;
|
|
10129
|
+
exports.DEFAULT_VECTOR_BLEND_DISTANCE = DEFAULT_VECTOR_BLEND_DISTANCE; exports.DEFAULT_VECTOR_BLEND_STEPS = DEFAULT_VECTOR_BLEND_STEPS; exports.DEFAULT_VECTOR_PATH_EDIT = DEFAULT_VECTOR_PATH_EDIT; exports.DEFAULT_VECTOR_SNAP = DEFAULT_VECTOR_SNAP; exports.IDENTITY_MATRIX = _chunkW3GXSUSQcjs.IDENTITY_MATRIX; exports.KAPPA = _chunkW3GXSUSQcjs.KAPPA; exports.LazyMouse = LazyMouse; exports.VECTOR_ARROWHEADS = _chunkW3GXSUSQcjs.VECTOR_ARROWHEADS; exports.VECTOR_ARROWHEAD_LABELS = VECTOR_ARROWHEAD_LABELS; exports.VECTOR_BLEND_MAX_SMOOTH_STEPS = VECTOR_BLEND_MAX_SMOOTH_STEPS; exports.VECTOR_BLEND_MAX_STEPS = VECTOR_BLEND_MAX_STEPS; exports.VECTOR_BLEND_MODES = _chunkW3GXSUSQcjs.VECTOR_BLEND_MODES; exports.VECTOR_BLEND_MODE_LABELS = _chunkW3GXSUSQcjs.VECTOR_BLEND_MODE_LABELS; exports.VECTOR_BLEND_MODE_MENU = VECTOR_BLEND_MODE_MENU; exports.VECTOR_BLEND_SPACINGS = _chunkW3GXSUSQcjs.VECTOR_BLEND_SPACINGS; exports.VECTOR_BLEND_SPACING_LABELS = VECTOR_BLEND_SPACING_LABELS; exports.VECTOR_BUILDER_HATCH_GAP = VECTOR_BUILDER_HATCH_GAP; exports.VECTOR_CLIPBOARD_TYPE = VECTOR_CLIPBOARD_TYPE; exports.VECTOR_CONSTRUCTION_ANGLES = VECTOR_CONSTRUCTION_ANGLES; exports.VECTOR_CORNER_KINDS = _chunkW3GXSUSQcjs.VECTOR_CORNER_KINDS; exports.VECTOR_CORNER_KIND_LABELS = VECTOR_CORNER_KIND_LABELS; exports.VECTOR_CORNER_WIDGET_INSET = VECTOR_CORNER_WIDGET_INSET; exports.VECTOR_DISTORT_TOLERANCE = VECTOR_DISTORT_TOLERANCE; exports.VECTOR_EDIT_TOGGLES = VECTOR_EDIT_TOGGLES; exports.VECTOR_EFFECT_DEFAULTS = _chunkW3GXSUSQcjs.VECTOR_EFFECT_DEFAULTS; exports.VECTOR_EFFECT_LABELS = _chunkW3GXSUSQcjs.VECTOR_EFFECT_LABELS; exports.VECTOR_EFFECT_MENU = VECTOR_EFFECT_MENU; exports.VECTOR_EFFECT_PARAM_SPECS = _chunkW3GXSUSQcjs.VECTOR_EFFECT_PARAM_SPECS; exports.VECTOR_EFFECT_TYPES = _chunkW3GXSUSQcjs.VECTOR_EFFECT_TYPES; exports.VECTOR_ENVELOPE_STYLE_OPTIONS = VECTOR_ENVELOPE_STYLE_OPTIONS; exports.VECTOR_FILL_GAP = VECTOR_FILL_GAP; exports.VECTOR_FILTER_DEFAULTS = _chunkW3GXSUSQcjs.VECTOR_FILTER_DEFAULTS; exports.VECTOR_FILTER_LABELS = _chunkW3GXSUSQcjs.VECTOR_FILTER_LABELS; exports.VECTOR_FILTER_MENU = _chunkW3GXSUSQcjs.VECTOR_FILTER_MENU; exports.VECTOR_FILTER_PARAM_SPECS = _chunkW3GXSUSQcjs.VECTOR_FILTER_PARAM_SPECS; exports.VECTOR_FILTER_TYPES = _chunkW3GXSUSQcjs.VECTOR_FILTER_TYPES; exports.VECTOR_GRADIENT_INTERPOLATIONS = _chunkW3GXSUSQcjs.VECTOR_GRADIENT_INTERPOLATIONS; exports.VECTOR_GRADIENT_INTERPOLATION_LABELS = VECTOR_GRADIENT_INTERPOLATION_LABELS; exports.VECTOR_GRADIENT_MAX_PERIODS = _chunkW3GXSUSQcjs.VECTOR_GRADIENT_MAX_PERIODS; exports.VECTOR_GRADIENT_MIDPOINT_GAP = VECTOR_GRADIENT_MIDPOINT_GAP; exports.VECTOR_GRADIENT_MIN_STOPS = _chunkW3GXSUSQcjs.VECTOR_GRADIENT_MIN_STOPS; exports.VECTOR_GRADIENT_OFF_BAR = VECTOR_GRADIENT_OFF_BAR; exports.VECTOR_GRADIENT_SPREADS = _chunkW3GXSUSQcjs.VECTOR_GRADIENT_SPREADS; exports.VECTOR_GRADIENT_SPREAD_LABELS = VECTOR_GRADIENT_SPREAD_LABELS; exports.VECTOR_GRADIENT_STOP_GAP = VECTOR_GRADIENT_STOP_GAP; exports.VECTOR_GRADIENT_TYPES = _chunkW3GXSUSQcjs.VECTOR_GRADIENT_TYPES; exports.VECTOR_GRADIENT_TYPE_LABELS = VECTOR_GRADIENT_TYPE_LABELS; exports.VECTOR_INK_MAX_CORNERS = VECTOR_INK_MAX_CORNERS; exports.VECTOR_MASK_TYPES = _chunkW3GXSUSQcjs.VECTOR_MASK_TYPES; exports.VECTOR_MASK_TYPE_LABELS = VECTOR_MASK_TYPE_LABELS; exports.VECTOR_MASK_TYPE_OPTIONS = VECTOR_MASK_TYPE_OPTIONS; exports.VECTOR_MERGE_MODES = _chunkW3GXSUSQcjs.VECTOR_MERGE_MODES; exports.VECTOR_OVERLAY_THEME = VECTOR_OVERLAY_THEME; exports.VECTOR_PATHFINDER_ACTIONS = VECTOR_PATHFINDER_ACTIONS; exports.VECTOR_PATHFINDER_LABELS = VECTOR_PATHFINDER_LABELS; exports.VECTOR_PATHFINDER_OPERATIONS = _chunkW3GXSUSQcjs.VECTOR_PATHFINDER_OPERATIONS; exports.VECTOR_PATH_ACTIONS = VECTOR_PATH_ACTIONS; exports.VECTOR_PENCIL_STRING_PX = VECTOR_PENCIL_STRING_PX; exports.VECTOR_PRESSURE_NOMINAL = _chunkW3GXSUSQcjs.VECTOR_PRESSURE_NOMINAL; exports.VECTOR_ROTATE_HANDLE_OFFSET = VECTOR_ROTATE_HANDLE_OFFSET; exports.VECTOR_STROKE_ALIGN_LABELS = VECTOR_STROKE_ALIGN_LABELS; exports.VECTOR_STROKE_GRADIENT_MODES = _chunkW3GXSUSQcjs.VECTOR_STROKE_GRADIENT_MODES; exports.VECTOR_STROKE_GRADIENT_MODE_LABELS = VECTOR_STROKE_GRADIENT_MODE_LABELS; exports.VECTOR_STROKE_SETTING_KEYS = _chunkW3GXSUSQcjs.VECTOR_STROKE_SETTING_KEYS; exports.VECTOR_STYLE_KEYS = VECTOR_STYLE_KEYS; exports.VECTOR_TOOLS = _chunkW3GXSUSQcjs.VECTOR_TOOLS; exports.VECTOR_TOOL_GLYPHS = VECTOR_TOOL_GLYPHS; exports.VECTOR_TOOL_SHORTCUTS = VECTOR_TOOL_SHORTCUTS; exports.VECTOR_TRANSFORM_HANDLES = _chunkW3GXSUSQcjs.VECTOR_TRANSFORM_HANDLES; exports.VECTOR_WARP_STYLES = _chunkW3GXSUSQcjs.WARP_STYLES; exports.VECTOR_WARP_STYLE_LABELS = _chunkW3GXSUSQcjs.WARP_STYLE_LABELS; exports.VECTOR_WIDTH_PRESETS = _chunkW3GXSUSQcjs.VECTOR_WIDTH_PRESETS; exports.VECTOR_WIDTH_PRESET_IDS = _chunkW3GXSUSQcjs.VECTOR_WIDTH_PRESET_IDS; exports.VECTOR_WIDTH_PROFILE_MAX_POINTS = _chunkW3GXSUSQcjs.VECTOR_WIDTH_PROFILE_MAX_POINTS; exports.VECTOR_WIDTH_PROFILE_MAX_SCALE = _chunkW3GXSUSQcjs.VECTOR_WIDTH_PROFILE_MAX_SCALE; exports.VECTOR_WIDTH_SAME_T = _chunkW3GXSUSQcjs.VECTOR_WIDTH_SAME_T; exports.VectorEditorController = VectorEditorController; exports.VectorSnapTargets = VectorSnapTargets; exports.activeVectorEffects = _chunkW3GXSUSQcjs.activeVectorEffects; exports.activeVectorFilters = _chunkW3GXSUSQcjs.activeVectorFilters; exports.addBuilderHit = addBuilderHit; exports.applyMatrix = _chunkW3GXSUSQcjs.applyMatrix; exports.applyMatrixLinear = _chunkW3GXSUSQcjs.applyMatrixLinear; exports.applyVectorBlendOptions = applyVectorBlendOptions; exports.applyVectorCornersAttribute = _chunkJLYX4V57cjs.applyVectorCornersAttribute; exports.applyVectorEffects = _chunkW3GXSUSQcjs.applyVectorEffects; exports.applyVectorGradientPatch = _chunkW3GXSUSQcjs.applyVectorGradientPatch; exports.applyVectorGradientSpread = _chunkW3GXSUSQcjs.applyVectorGradientSpread; exports.applyVectorHomography = _chunkMUUXNRU4cjs.applyHomography; exports.arrowheadInset = _chunkW3GXSUSQcjs.arrowheadInset; exports.arrowheadPath = _chunkW3GXSUSQcjs.arrowheadPath; exports.arrowheadWeight = _chunkW3GXSUSQcjs.arrowheadWeight; exports.bendSegment = bendSegment; exports.bezierToSubpaths = _chunkW3GXSUSQcjs.bezierToSubpaths; exports.boundsFromPoints = _chunkW3GXSUSQcjs.boundsFromPoints; exports.boundsIntersect = _chunkW3GXSUSQcjs.boundsIntersect; exports.clearVectorLiveBooleanCache = _chunkW3GXSUSQcjs.clearVectorLiveBooleanCache; exports.cloneAnchor = _chunkW3GXSUSQcjs.cloneAnchor; exports.cloneSubpath = _chunkW3GXSUSQcjs.cloneSubpath; exports.cloneVectorDocument = _chunkW3GXSUSQcjs.cloneVectorDocument; exports.cloneVectorNode = _chunkW3GXSUSQcjs.cloneVectorNode; exports.collectPathNodes = _chunkW3GXSUSQcjs.collectPathNodes; exports.constrainToLeave = constrainToLeave; exports.convertAnchor = _chunkW3GXSUSQcjs.convertAnchor; exports.convertVectorGradient = _chunkW3GXSUSQcjs.convertVectorGradient; exports.cornerBisectorPoint = _chunkW3GXSUSQcjs.cornerBisectorPoint; exports.cornerRadiusChange = _chunkW3GXSUSQcjs.cornerRadiusChange; exports.cornerSetback = _chunkW3GXSUSQcjs.cornerSetback; exports.correspondMorphContours = _chunkJLYX4V57cjs.correspondMorphContours; exports.createVectorCommands = createVectorCommands; exports.createVectorEffect = _chunkW3GXSUSQcjs.createVectorEffect; exports.createVectorFilter = _chunkW3GXSUSQcjs.createVectorFilter; exports.createVectorMorph = _chunkJLYX4V57cjs.createVectorMorph; exports.curvatureMoveAnchor = curvatureMoveAnchor; exports.cutSubpathAt = cutSubpathAt; exports.dashIntervals = _chunkW3GXSUSQcjs.dashIntervals; exports.decomposeRigid = _chunkW3GXSUSQcjs.decomposeRigid; exports.defaultVectorGradient = _chunkW3GXSUSQcjs.defaultVectorGradient; exports.distortVectorNode = distortVectorNode; exports.dragVectorMeshPoint = _chunkW3GXSUSQcjs.dragWarpMeshPoint; exports.effectPathLength = _chunkW3GXSUSQcjs.effectPathLength; exports.effectPathVertexCount = _chunkW3GXSUSQcjs.effectPathVertexCount; exports.effectiveStrokeAlign = _chunkW3GXSUSQcjs.effectiveStrokeAlign; exports.ellipseSubpath = _chunkW3GXSUSQcjs.ellipseSubpath; exports.eraseFromFill = _chunkW3GXSUSQcjs.eraseFromFill; exports.eraseFromOutline = _chunkW3GXSUSQcjs.eraseFromOutline; exports.eraserRegion = _chunkW3GXSUSQcjs.eraserRegion; exports.evalVectorMesh = _chunkW3GXSUSQcjs.evalWarpMesh; exports.evaluateVectorPathKeyframes = _chunkJLYX4V57cjs.evaluateVectorPathKeyframes; exports.expandVectorAppearance = _chunkW3GXSUSQcjs.expandVectorAppearance; exports.expandVectorAppearances = _chunkW3GXSUSQcjs.expandVectorAppearances; exports.expandVectorBlend = expandVectorBlend; exports.expandVectorCorners = _chunkW3GXSUSQcjs.expandVectorCorners; exports.expandVectorCornersOf = _chunkW3GXSUSQcjs.expandVectorCornersOf; exports.expandVectorGradientSpread = _chunkW3GXSUSQcjs.expandVectorGradientSpread; exports.expandVectorGradientStops = _chunkW3GXSUSQcjs.expandVectorGradientStops; exports.explicitVectorGradient = _chunkW3GXSUSQcjs.explicitVectorGradient; exports.findVectorNode = _chunkW3GXSUSQcjs.findVectorNode; exports.fitCornerRadius = _chunkW3GXSUSQcjs.fitCornerRadius; exports.fitVectorMesh = _chunkW3GXSUSQcjs.fitWarpMesh; exports.foldVectorBooleanOperands = _chunkW3GXSUSQcjs.foldVectorBooleanOperands; exports.generateVectorBlendChildren = generateVectorBlendChildren; exports.generateWidthProfile = _chunkW3GXSUSQcjs.generateWidthProfile; exports.getAnchor = getAnchor; exports.getAnchorWorld = getAnchorWorld; exports.getEditablePathIds = getEditablePathIds; exports.getTransformHandlePositions = getTransformHandlePositions; exports.getVectorAppearancePanel = getVectorAppearancePanel; exports.getVectorBlendControls = getVectorBlendControls; exports.getVectorCornerWidgets = getVectorCornerWidgets; exports.getVectorEffectsPanel = getVectorEffectsPanel; exports.getVectorEnteredGroups = getVectorEnteredGroups; exports.getVectorEnvelopePanel = getVectorEnvelopePanel; exports.getVectorEnvelopeTarget = getVectorEnvelopeTarget; exports.getVectorGradientAnnotator = getVectorGradientAnnotator; exports.getVectorGradientEditor = getVectorGradientEditor; exports.getVectorMaskPanel = getVectorMaskPanel; exports.getVectorOverlayRenderData = getVectorOverlayRenderData; exports.getVectorSceneRenderData = getVectorSceneRenderData; exports.getVectorSelectionBoxGeometry = getVectorSelectionBoxGeometry; exports.getVectorSelectionFrame = getVectorSelectionFrame; exports.getVectorSelectionStyle = getVectorSelectionStyle; exports.getVectorWidthHandles = getVectorWidthHandles; exports.getVisibleAnchors = getVisibleAnchors; exports.getVisibleHandles = getVisibleHandles; exports.gradientMidpointRemap = _chunkW3GXSUSQcjs.gradientMidpointRemap; exports.hasExplicitGradientGeometry = _chunkW3GXSUSQcjs.hasExplicitGradientGeometry; exports.hasOwnVectorAppearance = _chunkW3GXSUSQcjs.hasOwnVectorAppearance; exports.hasPaint = _chunkW3GXSUSQcjs.hasPaint; exports.hasStrokeExtras = _chunkW3GXSUSQcjs.hasStrokeExtras; exports.hasVectorAppearance = _chunkW3GXSUSQcjs.hasVectorAppearance; exports.hasVectorCorners = _chunkW3GXSUSQcjs.hasVectorCorners; exports.hasVectorPaintStacks = _chunkW3GXSUSQcjs.hasVectorPaintStacks; exports.hitTestVectorNode = _chunkW3GXSUSQcjs.hitTestVectorNode; exports.hitTestVectorNodes = _chunkW3GXSUSQcjs.hitTestVectorNodes; exports.hitTestVectorPaintLayer = _chunkW3GXSUSQcjs.hitTestVectorPaintLayer; exports.hitTestVectorPaintStack = _chunkW3GXSUSQcjs.hitTestVectorPaintStack; exports.hitTestVectorStroke = _chunkW3GXSUSQcjs.hitTestVectorStroke; exports.hitVectorGradientAnnotator = hitVectorGradientAnnotator; exports.inferAnchorType = _chunkW3GXSUSQcjs.inferAnchorType; exports.insertAnchor = _chunkW3GXSUSQcjs.insertAnchor; exports.insertVectorGradientStop = _chunkW3GXSUSQcjs.insertVectorGradientStop; exports.insertWidthPoint = _chunkW3GXSUSQcjs.insertWidthPoint; exports.interpolateMorphContours = _chunkJLYX4V57cjs.interpolateMorphContours; exports.interpolateRigidMatrix = _chunkJLYX4V57cjs.interpolateRigidMatrix; exports.interpolateVectorColor = _chunkJLYX4V57cjs.interpolateVectorColor; exports.interpolateVectorPaint = _chunkJLYX4V57cjs.interpolateVectorPaint; exports.interpolateVectorPaths = _chunkJLYX4V57cjs.interpolateVectorPaths; exports.interpolateVectorStyle = _chunkJLYX4V57cjs.interpolateVectorStyle; exports.interpolateWidthProfiles = _chunkJLYX4V57cjs.interpolateWidthProfiles; exports.invertMatrix = _chunkW3GXSUSQcjs.invertMatrix; exports.isCentredVectorGradient = _chunkW3GXSUSQcjs.isCentredVectorGradient; exports.isClosedBezierShape = _chunkW3GXSUSQcjs.isClosedBezierShape; exports.isDrawnVectorPaintLayer = _chunkW3GXSUSQcjs.isDrawnVectorPaintLayer; exports.isIdentityMatrix = _chunkW3GXSUSQcjs.isIdentityMatrix; exports.isPlainVectorPaintLayer = _chunkW3GXSUSQcjs.isPlainVectorPaintLayer; exports.isUniformWidthProfile = _chunkW3GXSUSQcjs.isUniformWidthProfile; exports.isValidVectorMesh = _chunkW3GXSUSQcjs.isValidWarpMesh; exports.isVectorBlendGroup = isVectorBlendGroup; exports.isVectorBlendMode = _chunkW3GXSUSQcjs.isVectorBlendMode; exports.isVectorFilterType = _chunkW3GXSUSQcjs.isVectorFilterType; exports.isVectorGradient = _chunkW3GXSUSQcjs.isVectorGradient; exports.isVectorLiveBoolean = _chunkW3GXSUSQcjs.isVectorLiveBoolean; exports.isVectorMaskActive = _chunkW3GXSUSQcjs.isVectorMaskActive; exports.isVectorMaskGroup = _chunkW3GXSUSQcjs.isVectorMaskGroup; exports.isVectorMaskType = _chunkW3GXSUSQcjs.isVectorMaskType; exports.isVectorTextTarget = isVectorTextTarget; exports.joinSubpaths = joinSubpaths; exports.knifePath = _chunkW3GXSUSQcjs.knifePath; exports.lineSubpath = _chunkW3GXSUSQcjs.lineSubpath; exports.locateVectorNode = _chunkW3GXSUSQcjs.locateVectorNode; exports.mapBezierPath = _chunkW3GXSUSQcjs.mapBezierPath; exports.mapVectorGradient = _chunkW3GXSUSQcjs.mapVectorGradient; exports.mapVectorMeshPoints = _chunkW3GXSUSQcjs.mapWarpMeshPoints; exports.mapVectorPaint = _chunkW3GXSUSQcjs.mapVectorPaint; exports.mapVectorPoints = _chunkW3GXSUSQcjs.mapVectorPoints; exports.mapVectorSubpaths = _chunkW3GXSUSQcjs.mapVectorSubpaths; exports.matrixRotation = _chunkW3GXSUSQcjs.matrixRotation; exports.mergePaths = _chunkW3GXSUSQcjs.mergePaths; exports.mirrorWidthProfile = _chunkW3GXSUSQcjs.mirrorWidthProfile; exports.morphContourToSubpath = _chunkJLYX4V57cjs.morphContourToSubpath; exports.morphPathsCross = _chunkJLYX4V57cjs.morphPathsCross; exports.moveAnchorHandle = _chunkW3GXSUSQcjs.moveAnchorHandle; exports.moveVectorGradientHandle = _chunkW3GXSUSQcjs.moveVectorGradientHandle; exports.moveVectorGradientStop = _chunkW3GXSUSQcjs.moveVectorGradientStop; exports.multiplyMatrices = _chunkW3GXSUSQcjs.multiplyMatrices; exports.nearestSegment = _chunkW3GXSUSQcjs.nearestSegment; exports.nearestStrokePosition = _chunkW3GXSUSQcjs.nearestStrokePosition; exports.needsVectorPaintLayers = _chunkW3GXSUSQcjs.needsVectorPaintLayers; exports.newVectorStrokeLayer = _chunkW3GXSUSQcjs.newVectorStrokeLayer; exports.nextVectorCornerKind = _chunkW3GXSUSQcjs.nextVectorCornerKind; exports.nodeMatrix = _chunkW3GXSUSQcjs.nodeMatrix; exports.normalizeVectorEffectParams = _chunkW3GXSUSQcjs.normalizeVectorEffectParams; exports.normalizeVectorFilterParams = _chunkW3GXSUSQcjs.normalizeVectorFilterParams; exports.normalizeVectorPaintStacks = _chunkW3GXSUSQcjs.normalizeVectorPaintStacks; exports.offsetPaths = _chunkW3GXSUSQcjs.offsetPaths; exports.orderVectorQuad = _chunkMUUXNRU4cjs.orderQuad; exports.parseSvgTransform = _chunkJLYX4V57cjs.parseSvgTransform; exports.parseVectorColor = _chunkW3GXSUSQcjs.parseVectorColor; exports.parseVectorSvg = _chunkJLYX4V57cjs.parseVectorSvg; exports.pathsCenter = _chunkW3GXSUSQcjs.pathsCenter; exports.patternAttrs = _chunkW3GXSUSQcjs.patternAttrs; exports.periodicVectorGradientStops = _chunkW3GXSUSQcjs.periodicVectorGradientStops; exports.pinVectorGradient = _chunkW3GXSUSQcjs.pinVectorGradient; exports.planShapeBuilder = planShapeBuilder; exports.polygonSubpath = _chunkW3GXSUSQcjs.polygonSubpath; exports.polylineBounds = _chunkW3GXSUSQcjs.polylineBounds; exports.pressureWidthProfile = _chunkW3GXSUSQcjs.pressureWidthProfile; exports.puckerBloatPaths = _chunkW3GXSUSQcjs.puckerBloatPaths; exports.pullVectorMesh = _chunkW3GXSUSQcjs.pullWarpMesh; exports.recognizeInkShape = recognizeInkShape; exports.rectSubpath = _chunkW3GXSUSQcjs.rectSubpath; exports.refineMorphContour = _chunkJLYX4V57cjs.refineMorphContour; exports.refreshVectorBlends = refreshVectorBlends; exports.releaseVectorBlend = releaseVectorBlend; exports.removeAnchorKeepingShape = removeAnchorKeepingShape; exports.removeAnchors = _chunkW3GXSUSQcjs.removeAnchors; exports.removeAnchorsKeepingShape = removeAnchorsKeepingShape; exports.removeRedundantPoints = removeRedundantPoints; exports.removeVectorGradientStop = _chunkW3GXSUSQcjs.removeVectorGradientStop; exports.removeVectorMeshSplitU = _chunkW3GXSUSQcjs.removeWarpMeshSplitU; exports.removeVectorMeshSplitV = _chunkW3GXSUSQcjs.removeWarpMeshSplitV; exports.removeWidthPoints = _chunkW3GXSUSQcjs.removeWidthPoints; exports.repeatPaths = _chunkW3GXSUSQcjs.repeatPaths; exports.resampleGradientStops = _chunkJLYX4V57cjs.resampleGradientStops; exports.resizeVectorMesh = _chunkW3GXSUSQcjs.resizeWarpMesh; exports.resolveVectorBlendOptions = resolveVectorBlendOptions; exports.reverseMorphContour = _chunkJLYX4V57cjs.reverseMorphContour; exports.reverseSubpath = _chunkW3GXSUSQcjs.reverseSubpath; exports.reverseVectorGradient = _chunkW3GXSUSQcjs.reverseVectorGradient; exports.reverseWidthProfile = _chunkW3GXSUSQcjs.reverseWidthProfile; exports.rotateMatrix = _chunkW3GXSUSQcjs.rotateMatrix; exports.roundCornerPaths = _chunkW3GXSUSQcjs.roundCornerPaths; exports.roundSubpaths = _chunkW3GXSUSQcjs.roundSubpaths; exports.samplePlainStops = _chunkW3GXSUSQcjs.samplePlainStops; exports.samplePolyline = samplePolyline; exports.sampleVectorGradient = _chunkW3GXSUSQcjs.sampleVectorGradient; exports.sampleVectorGradientAt = _chunkW3GXSUSQcjs.sampleVectorGradientAt; exports.sampleVectorPaintDefAt = _chunkW3GXSUSQcjs.sampleVectorPaintDefAt; exports.sanitizeVectorEffects = _chunkW3GXSUSQcjs.sanitizeVectorEffects; exports.sanitizeVectorFills = _chunkW3GXSUSQcjs.sanitizeVectorFills; exports.sanitizeVectorFilters = _chunkW3GXSUSQcjs.sanitizeVectorFilters; exports.sanitizeVectorGradient = _chunkW3GXSUSQcjs.sanitizeVectorGradient; exports.sanitizeVectorMask = _chunkW3GXSUSQcjs.sanitizeVectorMask; exports.sanitizeVectorStrokeSettings = _chunkW3GXSUSQcjs.sanitizeVectorStrokeSettings; exports.sanitizeVectorStrokes = _chunkW3GXSUSQcjs.sanitizeVectorStrokes; exports.sanitizeWidthProfile = _chunkW3GXSUSQcjs.sanitizeWidthProfile; exports.scaleFor = scaleFor; exports.scaleMatrix = _chunkW3GXSUSQcjs.scaleMatrix; exports.setAnchorCorner = _chunkW3GXSUSQcjs.setAnchorCorner; exports.setSubpathCorners = _chunkW3GXSUSQcjs.setSubpathCorners; exports.setVectorGradientVector = _chunkW3GXSUSQcjs.setVectorGradientVector; exports.setWidthPoint = _chunkW3GXSUSQcjs.setWidthPoint; exports.simplifyPolyline = _chunkW3GXSUSQcjs.simplifyPolyline; exports.smoothSubpath = smoothSubpath; exports.solve8 = _chunkMUUXNRU4cjs.solve8; exports.sortedVectorGradientStops = _chunkW3GXSUSQcjs.sortedVectorGradientStops; exports.spanVectorGradientStops = _chunkW3GXSUSQcjs.spanVectorGradientStops; exports.splitIntoFaces = _chunkW3GXSUSQcjs.splitIntoFaces; exports.splitSubpathAt = splitSubpathAt; exports.splitVectorMeshU = _chunkW3GXSUSQcjs.splitWarpMeshU; exports.splitVectorMeshV = _chunkW3GXSUSQcjs.splitWarpMeshV; exports.starSubpath = _chunkW3GXSUSQcjs.starSubpath; exports.strokePositionPoint = _chunkW3GXSUSQcjs.strokePositionPoint; exports.strokeWidthProfileOf = _chunkW3GXSUSQcjs.strokeWidthProfileOf; exports.subpathEnclosesArea = subpathEnclosesArea; exports.subpathPointAt = subpathPointAt; exports.subpathSegment = _chunkW3GXSUSQcjs.subpathSegment; exports.subpathSegmentCount = _chunkW3GXSUSQcjs.subpathSegmentCount; exports.subpathToMorphContour = _chunkJLYX4V57cjs.subpathToMorphContour; exports.subpathsToBezier = _chunkW3GXSUSQcjs.subpathsToBezier; exports.taperWaveFactor = _chunkW3GXSUSQcjs.taperWaveFactor; exports.toVectorKeyInput = toVectorKeyInput; exports.toVectorModifiers = toVectorModifiers; exports.toVectorPointerInput = toVectorPointerInput; exports.transformVectorEffects = _chunkW3GXSUSQcjs.transformVectorEffects; exports.transformVectorGradient = _chunkW3GXSUSQcjs.transformVectorGradient; exports.transformVectorNode = _chunkW3GXSUSQcjs.transformVectorNode; exports.transformVectorPaint = _chunkW3GXSUSQcjs.transformVectorPaint; exports.translateAnchor = _chunkW3GXSUSQcjs.translateAnchor; exports.translateMatrix = _chunkW3GXSUSQcjs.translateMatrix; exports.trimIntervals = _chunkW3GXSUSQcjs.trimIntervals; exports.trimPaths = _chunkW3GXSUSQcjs.trimPaths; exports.trimPathsIndividually = _chunkW3GXSUSQcjs.trimPathsIndividually; exports.turnMorphContour = _chunkJLYX4V57cjs.turnMorphContour; exports.twistPaths = _chunkW3GXSUSQcjs.twistPaths; exports.unionBounds = _chunkW3GXSUSQcjs.unionBounds; exports.variableStrokeOutline = _chunkW3GXSUSQcjs.variableStrokeOutline; exports.variableStrokeRings = _chunkW3GXSUSQcjs.variableStrokeRings; exports.vectorAppearanceNodes = _chunkW3GXSUSQcjs.vectorAppearanceNodes; exports.vectorAppearanceOutline = _chunkW3GXSUSQcjs.vectorAppearanceOutline; exports.vectorAppearanceShapes = _chunkW3GXSUSQcjs.vectorAppearanceShapes; exports.vectorBlendColorDistance = vectorBlendColorDistance; exports.vectorBlendKeyTargets = vectorBlendKeyTargets; exports.vectorBlendKeys = vectorBlendKeys; exports.vectorBlendModeCss = _chunkW3GXSUSQcjs.vectorBlendModeCss; exports.vectorBlendModeFromCss = _chunkW3GXSUSQcjs.vectorBlendModeFromCss; exports.vectorBlendRail = vectorBlendRail; exports.vectorBlendRailAt = vectorBlendRailAt; exports.vectorBlendSpine = vectorBlendSpine; exports.vectorBlendStepCount = vectorBlendStepCount; exports.vectorBoxCorners = vectorBoxCorners; exports.vectorBoxMatrix = _chunkW3GXSUSQcjs.vectorBoxMatrix; exports.vectorBuilderErasedEdges = vectorBuilderErasedEdges; exports.vectorChildAppearanceShapes = _chunkW3GXSUSQcjs.vectorChildAppearanceShapes; exports.vectorCornerAt = _chunkW3GXSUSQcjs.vectorCornerAt; exports.vectorCorners = _chunkW3GXSUSQcjs.vectorCorners; exports.vectorCornersAttribute = _chunkJLYX4V57cjs.vectorCornersAttribute; exports.vectorDiamondPath = vectorDiamondPath; exports.vectorDistortQuad = vectorDistortQuad; exports.vectorDocumentToSvg = _chunkJLYX4V57cjs.vectorDocumentToSvg; exports.vectorEffectInputBounds = _chunkW3GXSUSQcjs.vectorEffectInputBounds; exports.vectorEffectInputPaths = _chunkW3GXSUSQcjs.vectorEffectInputPaths; exports.vectorEnteredGroups = _chunkW3GXSUSQcjs.vectorEnteredGroups; exports.vectorEnvelopeFrame = _chunkW3GXSUSQcjs.vectorEnvelopeFrame; exports.vectorEnvelopeMap = _chunkW3GXSUSQcjs.vectorEnvelopeMap; exports.vectorEnvelopeMesh = _chunkW3GXSUSQcjs.vectorEnvelopeMesh; exports.vectorFillMap = vectorFillMap; exports.vectorFills = _chunkW3GXSUSQcjs.vectorFills; exports.vectorFilterMarkup = _chunkW3GXSUSQcjs.vectorFilterMarkup; exports.vectorFilterParamKeys = _chunkW3GXSUSQcjs.vectorFilterParamKeys; exports.vectorFilterReach = _chunkW3GXSUSQcjs.vectorFilterReach; exports.vectorFilterSvg = _chunkW3GXSUSQcjs.vectorFilterSvg; exports.vectorGradientArea = _chunkW3GXSUSQcjs.vectorGradientArea; exports.vectorGradientAspect = _chunkW3GXSUSQcjs.vectorGradientAspect; exports.vectorGradientBarPosition = vectorGradientBarPosition; exports.vectorGradientFocalParam = _chunkW3GXSUSQcjs.vectorGradientFocalParam; exports.vectorGradientHandles = _chunkW3GXSUSQcjs.vectorGradientHandles; exports.vectorGradientMatrix = _chunkW3GXSUSQcjs.vectorGradientMatrix; exports.vectorGradientMidpointFromPosition = _chunkW3GXSUSQcjs.vectorGradientMidpointFromPosition; exports.vectorGradientMidpointPosition = _chunkW3GXSUSQcjs.vectorGradientMidpointPosition; exports.vectorGradientNeedsExpansion = _chunkW3GXSUSQcjs.vectorGradientNeedsExpansion; exports.vectorGradientParam = _chunkW3GXSUSQcjs.vectorGradientParam; exports.vectorGradientPoints = _chunkW3GXSUSQcjs.vectorGradientPoints; exports.vectorGradientRamp = _chunkW3GXSUSQcjs.vectorGradientRamp; exports.vectorGradientSvgDefs = _chunkW3GXSUSQcjs.vectorGradientSvgDefs; exports.vectorGradientTAt = _chunkW3GXSUSQcjs.vectorGradientTAt; exports.vectorGradientTargetPath = vectorGradientTargetPath; exports.vectorGradientUnitsMatrix = _chunkW3GXSUSQcjs.vectorGradientUnitsMatrix; exports.vectorHomography = _chunkMUUXNRU4cjs.homographyFromPoints; exports.vectorHomographyKeepsQuad = _chunkMUUXNRU4cjs.homographyKeepsQuad; exports.vectorIdentityMesh = _chunkW3GXSUSQcjs.identityWarpMesh; exports.vectorInkShapeName = vectorInkShapeName; exports.vectorLiveBooleanSteps = _chunkW3GXSUSQcjs.vectorLiveBooleanSteps; exports.vectorMaskContains = _chunkW3GXSUSQcjs.vectorMaskContains; exports.vectorMaskContentBounds = _chunkW3GXSUSQcjs.vectorMaskContentBounds; exports.vectorMaskContents = _chunkW3GXSUSQcjs.vectorMaskContents; exports.vectorMaskOwner = _chunkW3GXSUSQcjs.vectorMaskOwner; exports.vectorMaskRegion = _chunkW3GXSUSQcjs.vectorMaskRegion; exports.vectorMaskRegionPath = _chunkW3GXSUSQcjs.vectorMaskRegionPath; exports.vectorMaskRegionShapes = _chunkW3GXSUSQcjs.vectorMaskRegionShapes; exports.vectorMaskRenderData = _chunkW3GXSUSQcjs.vectorMaskRenderData; exports.vectorMaskSource = _chunkW3GXSUSQcjs.vectorMaskSource; exports.vectorMaskSummary = _chunkW3GXSUSQcjs.vectorMaskSummary; exports.vectorMaskedGeometry = _chunkW3GXSUSQcjs.vectorMaskedGeometry; exports.vectorMaskedLocalBounds = _chunkW3GXSUSQcjs.vectorMaskedLocalBounds; exports.vectorMaskedShapes = _chunkW3GXSUSQcjs.vectorMaskedShapes; exports.vectorMeshColumns = _chunkW3GXSUSQcjs.warpMeshColumns; exports.vectorMeshControlBounds = _chunkW3GXSUSQcjs.warpMeshControlBounds; exports.vectorMeshEditPoints = _chunkW3GXSUSQcjs.warpMeshEditPoints; exports.vectorMeshFromOutline = _chunkW3GXSUSQcjs.vectorMeshFromOutline; exports.vectorMeshGridCurves = _chunkW3GXSUSQcjs.warpMeshGridCurves; exports.vectorMeshOutline = _chunkW3GXSUSQcjs.vectorMeshOutline; exports.vectorMeshParamAt = _chunkW3GXSUSQcjs.warpMeshParamAt; exports.vectorMeshRows = _chunkW3GXSUSQcjs.warpMeshRows; exports.vectorNodeBounds = _chunkW3GXSUSQcjs.vectorNodeBounds; exports.vectorNodeEnvelope = _chunkW3GXSUSQcjs.vectorNodeEnvelope; exports.vectorNodeFilterSvg = _chunkJLYX4V57cjs.vectorNodeFilterSvg; exports.vectorNodeLocalPaintBounds = _chunkJLYX4V57cjs.vectorNodeLocalPaintBounds; exports.vectorNodeRotation = _chunkW3GXSUSQcjs.vectorNodeRotation; exports.vectorNodeToBezier = _chunkW3GXSUSQcjs.vectorNodeToBezier; exports.vectorOperandOperation = _chunkW3GXSUSQcjs.vectorOperandOperation; exports.vectorPaintLayerNodes = _chunkW3GXSUSQcjs.vectorPaintLayerNodes; exports.vectorPaintSwatch = vectorPaintSwatch; exports.vectorPaintToHex = vectorPaintToHex; exports.vectorPaintToSvg = _chunkJLYX4V57cjs.vectorPaintToSvg; exports.vectorParentMatrix = _chunkW3GXSUSQcjs.vectorParentMatrix; exports.vectorPathData = _chunkW3GXSUSQcjs.vectorPathData; exports.vectorPathEntries = vectorPathEntries; exports.vectorPathLocalBounds = _chunkJLYX4V57cjs.vectorPathLocalBounds; exports.vectorPathWorldBezier = _chunkW3GXSUSQcjs.vectorPathWorldBezier; exports.vectorPathfinderShape = vectorPathfinderShape; exports.vectorRepeaterCopies = _chunkW3GXSUSQcjs.vectorRepeaterCopies; exports.vectorResizeCursor = vectorResizeCursor; exports.vectorResultStyle = vectorResultStyle; exports.vectorShapeBuilderHit = vectorShapeBuilderHit; exports.vectorShapeBuilderMap = vectorShapeBuilderMap; exports.vectorShearForSide = vectorShearForSide; exports.vectorSkewMatrix = vectorSkewMatrix; exports.vectorStacksHaveGradient = _chunkW3GXSUSQcjs.vectorStacksHaveGradient; exports.vectorStrokeGradientDefs = _chunkJLYX4V57cjs.vectorStrokeGradientDefs; exports.vectorStrokeLineArea = _chunkW3GXSUSQcjs.vectorStrokeLineArea; exports.vectorStrokeOutline = _chunkW3GXSUSQcjs.vectorStrokeOutline; exports.vectorStrokeOutlinePath = _chunkW3GXSUSQcjs.vectorStrokeOutlinePath; exports.vectorStrokeParts = _chunkW3GXSUSQcjs.vectorStrokeParts; exports.vectorStrokeReach = _chunkW3GXSUSQcjs.vectorStrokeReach; exports.vectorStrokeSettings = _chunkW3GXSUSQcjs.vectorStrokeSettings; exports.vectorStrokeStackReach = _chunkW3GXSUSQcjs.vectorStrokeStackReach; exports.vectorStrokeSvgParts = _chunkJLYX4V57cjs.vectorStrokeSvgParts; exports.vectorStrokeWidthGeometry = vectorStrokeWidthGeometry; exports.vectorStrokes = _chunkW3GXSUSQcjs.vectorStrokes; exports.vectorTargetPaint = _chunkW3GXSUSQcjs.vectorTargetPaint; exports.vectorToolLabel = vectorToolLabel; exports.vectorWarpPresetGrid = _chunkW3GXSUSQcjs.warpPresetGrid; exports.vectorWarpPresetMesh = _chunkW3GXSUSQcjs.warpPresetMesh; exports.vectorWorldMatrix = _chunkW3GXSUSQcjs.vectorWorldMatrix; exports.walkVectorNodes = _chunkW3GXSUSQcjs.walkVectorNodes; exports.widthProfileAt = _chunkW3GXSUSQcjs.widthProfileAt; exports.widthProfileFromAttribute = _chunkJLYX4V57cjs.widthProfileFromAttribute; exports.widthProfileMaxScale = _chunkW3GXSUSQcjs.widthProfileMaxScale; exports.widthProfilePreset = _chunkW3GXSUSQcjs.widthProfilePreset; exports.widthProfilePresetId = _chunkW3GXSUSQcjs.widthProfilePresetId; exports.widthProfileToAttribute = _chunkJLYX4V57cjs.widthProfileToAttribute; exports.wigglePaths = _chunkW3GXSUSQcjs.wigglePaths; exports.withVectorFills = _chunkW3GXSUSQcjs.withVectorFills; exports.withVectorStrokes = _chunkW3GXSUSQcjs.withVectorStrokes; exports.withVectorTargetPaint = _chunkW3GXSUSQcjs.withVectorTargetPaint; exports.zigzagPaths = _chunkW3GXSUSQcjs.zigzagPaths;
|
|
10130
10130
|
//# sourceMappingURL=index.cjs.map
|