@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.
Files changed (74) hide show
  1. package/dist/animation/index.cjs +5 -5
  2. package/dist/animation/index.cjs.map +1 -1
  3. package/dist/animation/index.js +9 -9
  4. package/dist/animation-editor/index.cjs +59 -59
  5. package/dist/animation-editor/index.cjs.map +1 -1
  6. package/dist/animation-editor/index.d.cts +2 -1
  7. package/dist/animation-editor/index.d.ts +2 -1
  8. package/dist/animation-editor/index.js +29 -29
  9. package/dist/canvas/index.cjs +27 -27
  10. package/dist/canvas/index.cjs.map +1 -1
  11. package/dist/canvas/index.js +11 -11
  12. package/dist/{chunk-2FGRTYJN.cjs → chunk-477UVMNR.cjs} +3 -3
  13. package/dist/{chunk-2FGRTYJN.cjs.map → chunk-477UVMNR.cjs.map} +1 -1
  14. package/dist/{chunk-T3QZ6S47.cjs → chunk-AZTZRLDI.cjs} +40 -2
  15. package/dist/chunk-AZTZRLDI.cjs.map +1 -0
  16. package/dist/{chunk-HUQ7EHVI.js → chunk-BLWCAQCW.js} +723 -1975
  17. package/dist/chunk-BLWCAQCW.js.map +1 -0
  18. package/dist/{chunk-G4BIYE6R.js → chunk-CFMWALBM.js} +39 -1
  19. package/dist/chunk-CFMWALBM.js.map +1 -0
  20. package/dist/{chunk-FRD3FUXI.cjs → chunk-D37BX2ZA.cjs} +2081 -460
  21. package/dist/chunk-D37BX2ZA.cjs.map +1 -0
  22. package/dist/chunk-JLYX4V57.cjs +2001 -0
  23. package/dist/chunk-JLYX4V57.cjs.map +1 -0
  24. package/dist/chunk-KB2YBCVS.js +2001 -0
  25. package/dist/chunk-KB2YBCVS.js.map +1 -0
  26. package/dist/{chunk-SOROZ2BF.js → chunk-RE77QYUF.js} +1938 -317
  27. package/dist/chunk-RE77QYUF.js.map +1 -0
  28. package/dist/{chunk-UTEVPQTS.cjs → chunk-W3GXSUSQ.cjs} +746 -1998
  29. package/dist/chunk-W3GXSUSQ.cjs.map +1 -0
  30. package/dist/{chunk-JK6M6V7G.js → chunk-Z3YWVUWT.js} +4 -4
  31. package/dist/{export-a9bnF7Cl.d.ts → export-BLPLaE6Z.d.ts} +417 -16
  32. package/dist/{export-JGWQEPJn.d.cts → export-DSUc4fQD.d.cts} +417 -16
  33. package/dist/image-editor/index.cjs +1527 -1001
  34. package/dist/image-editor/index.cjs.map +1 -1
  35. package/dist/image-editor/index.d.cts +73 -9
  36. package/dist/image-editor/index.d.ts +73 -9
  37. package/dist/image-editor/index.js +814 -288
  38. package/dist/image-editor/index.js.map +1 -1
  39. package/dist/paint-editor/index.cjs +56 -53
  40. package/dist/paint-editor/index.cjs.map +1 -1
  41. package/dist/paint-editor/index.d.cts +5 -2
  42. package/dist/paint-editor/index.d.ts +5 -2
  43. package/dist/paint-editor/index.js +6 -3
  44. package/dist/paint-editor/index.js.map +1 -1
  45. package/dist/raster/index.cjs +4 -2
  46. package/dist/raster/index.cjs.map +1 -1
  47. package/dist/raster/index.d.cts +3 -129
  48. package/dist/raster/index.d.ts +3 -129
  49. package/dist/raster/index.js +3 -1
  50. package/dist/{compositor-D92URMlm.d.cts → render-C-fO_mes.d.cts} +135 -1
  51. package/dist/{compositor-Kt_M4ruo.d.ts → render-OLIMk_v0.d.ts} +135 -1
  52. package/dist/{svg-SseJTIrA.d.ts → svg-D_cfkhlB.d.cts} +3 -629
  53. package/dist/{svg-ClVIG4T7.d.cts → svg-wIaKLrU0.d.ts} +3 -629
  54. package/dist/types-DtL_qLFz.d.ts +630 -0
  55. package/dist/types-DyQq-WPY.d.cts +630 -0
  56. package/dist/vector/index.cjs +563 -563
  57. package/dist/vector/index.cjs.map +1 -1
  58. package/dist/vector/index.d.cts +4 -2
  59. package/dist/vector/index.d.ts +4 -2
  60. package/dist/vector/index.js +69 -69
  61. package/dist/video-editor/index.cjs +3 -3
  62. package/dist/video-editor/index.js +2 -2
  63. package/package.json +1 -1
  64. package/dist/chunk-DWGZUSES.cjs +0 -694
  65. package/dist/chunk-DWGZUSES.cjs.map +0 -1
  66. package/dist/chunk-FRD3FUXI.cjs.map +0 -1
  67. package/dist/chunk-G4BIYE6R.js.map +0 -1
  68. package/dist/chunk-HUQ7EHVI.js.map +0 -1
  69. package/dist/chunk-KKREERP2.js +0 -694
  70. package/dist/chunk-KKREERP2.js.map +0 -1
  71. package/dist/chunk-SOROZ2BF.js.map +0 -1
  72. package/dist/chunk-T3QZ6S47.cjs.map +0 -1
  73. package/dist/chunk-UTEVPQTS.cjs.map +0 -1
  74. /package/dist/{chunk-JK6M6V7G.js.map → chunk-Z3YWVUWT.js.map} +0 -0
@@ -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 _chunkDWGZUSEScjs = require('../chunk-DWGZUSES.cjs');
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 = _chunkUTEVPQTScjs.findVectorNode.call(void 0, doc.nodes, id);
390
+ const node = _chunkW3GXSUSQcjs.findVectorNode.call(void 0, doc.nodes, id);
391
391
  if (!node) continue;
392
- const path = _chunkUTEVPQTScjs.collectPathNodes.call(void 0, node).find((p) => _chunkUTEVPQTScjs.isVectorGradient.call(void 0, _chunkUTEVPQTScjs.vectorTargetPaint.call(void 0, p, target, layer)));
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 = _chunkUTEVPQTScjs.vectorTargetPaint.call(void 0, path, target, layer);
401
- const world = _nullishCoalesce(_chunkUTEVPQTScjs.vectorWorldMatrix.call(void 0, doc.nodes, path.id), () => ( _chunkDWGZUSEScjs.IDENTITY_MATRIX));
402
- const screen = _chunkDWGZUSEScjs.multiplyMatrices.call(void 0, world, [viewport.zoom, 0, 0, viewport.zoom, viewport.x, viewport.y]);
403
- const bounds = _chunkUTEVPQTScjs.vectorPathLocalBounds.call(void 0, path);
404
- const h = _chunkUTEVPQTScjs.vectorGradientHandles.call(void 0, gradient, bounds, screen);
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 = _chunkUTEVPQTScjs.sortedVectorGradientStops.call(void 0, gradient);
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 = _chunkUTEVPQTScjs.vectorGradientMidpointPosition.call(void 0, sorted, index);
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 (_chunkUTEVPQTScjs.isCentredVectorGradient.call(void 0, gradient.type)) {
417
- const frame = _chunkDWGZUSEScjs.multiplyMatrices.call(void 0, _chunkUTEVPQTScjs.vectorGradientMatrix.call(void 0, gradient, bounds), screen);
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 = _chunkUTEVPQTScjs.isCentredVectorGradient.call(void 0, a.gradient.type);
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 = _chunkUTEVPQTScjs.collectPathNodes.call(void 0, a)[0];
471
- const pb = _chunkUTEVPQTScjs.collectPathNodes.call(void 0, b)[0];
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 = _chunkUTEVPQTScjs.vectorNodeBounds.call(void 0, n);
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 = _chunkUTEVPQTScjs.vectorNodeBounds.call(void 0, a);
502
- const bb = _chunkUTEVPQTScjs.vectorNodeBounds.call(void 0, b);
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 = _chunkUTEVPQTScjs.subpathSegmentCount.call(void 0, sp);
517
+ const count = _chunkW3GXSUSQcjs.subpathSegmentCount.call(void 0, sp);
518
518
  for (let i = 0; i < count; i++) {
519
- const seg = _chunkUTEVPQTScjs.subpathSegment.call(void 0, sp, i);
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 = _chunkUTEVPQTScjs.createVectorMorph.call(void 0, a, b, { linear: blend.linear, starts }));
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 ? _chunkDWGZUSEScjs.translateMatrix.call(void 0, dx, dy) : _chunkDWGZUSEScjs.IDENTITY_MATRIX;
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 = _chunkDWGZUSEScjs.multiplyMatrices.call(void 0, m, _chunkDWGZUSEScjs.rotateMatrix.call(void 0, turn * 180 / Math.PI, origin));
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 !== _chunkDWGZUSEScjs.IDENTITY_MATRIX) step = _chunkUTEVPQTScjs.transformVectorNode.call(void 0, step, 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 = _chunkUTEVPQTScjs.nodeMatrix.call(void 0, group);
666
+ const m = _chunkW3GXSUSQcjs.nodeMatrix.call(void 0, group);
667
667
  const opacity = group.opacity;
668
- const keys = vectorBlendKeys(group).map((c) => group.transform ? _chunkUTEVPQTScjs.transformVectorNode.call(void 0, c, m) : c).map((c) => opacity !== void 0 && opacity < 1 ? { ...c, opacity: (_nullishCoalesce(c.opacity, () => ( 1))) * opacity } : c);
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 ? _chunkUTEVPQTScjs.transformVectorNode.call(void 0, path, m) : path];
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) => _chunkDWGZUSEScjs.matrixAbout.call(void 0, m, o);
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 _chunkDWGZUSEScjs.skewMatrix.call(void 0, ax, ay, origin);
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: _chunkDWGZUSEScjs.mapWarpMeshPoints.call(void 0, e.params.mesh, f) } } : e;
732
- const bounds = _chunkUTEVPQTScjs.vectorEffectInputBounds.call(void 0, node, e.id);
733
- if (!bounds || !_chunkUTEVPQTScjs.vectorEnvelopeMap.call(void 0, e.params, bounds)) return e;
734
- return { ...e, params: { ...e.params, style: "mesh", mesh: _chunkDWGZUSEScjs.mapWarpMeshPoints.call(void 0, _chunkUTEVPQTScjs.vectorEnvelopeMesh.call(void 0, e.params, bounds), f) } };
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 = _chunkDWGZUSEScjs.multiplyMatrices.call(void 0, _chunkUTEVPQTScjs.nodeMatrix.call(void 0, node), parentToDoc);
739
- const inv = _chunkDWGZUSEScjs.invertMatrix.call(void 0, toDoc);
740
- const local = (p) => _chunkDWGZUSEScjs.applyMatrix.call(void 0, inv, f(_chunkDWGZUSEScjs.applyMatrix.call(void 0, toDoc, 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: _chunkUTEVPQTScjs.mapVectorSubpaths.call(void 0, [spine], local, tolerance)[0] } } : {}
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: _chunkUTEVPQTScjs.mapVectorPaint.call(void 0, path.fill, local) } : {},
758
- ...path.stroke !== void 0 ? { stroke: _chunkUTEVPQTScjs.mapVectorPaint.call(void 0, path.stroke, local) } : {},
759
- subpaths: _chunkUTEVPQTScjs.mapVectorSubpaths.call(void 0, path.subpaths, local, tolerance)
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 = _chunkDWGZUSEScjs.matrixRotation.call(void 0, _chunkDWGZUSEScjs.multiplyMatrices.call(void 0, _chunkUTEVPQTScjs.nodeMatrix.call(void 0, node), parent));
821
- const b = angle ? _chunkUTEVPQTScjs.vectorNodeBounds.call(void 0, node, _chunkDWGZUSEScjs.multiplyMatrices.call(void 0, parent, _chunkDWGZUSEScjs.rotateMatrix.call(void 0, -angle))) : aabb !== void 0 ? aabb : _chunkUTEVPQTScjs.vectorNodeBounds.call(void 0, node, parent);
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 ? _chunkDWGZUSEScjs.applyMatrix.call(void 0, _chunkDWGZUSEScjs.rotateMatrix.call(void 0, angle), c) : c };
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 = _chunkDWGZUSEScjs.multiplyMatrices.call(void 0, _chunkUTEVPQTScjs.nodeMatrix.call(void 0, n), parent);
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(_chunkDWGZUSEScjs.applyMatrix.call(void 0, m, a));
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, _chunkDWGZUSEScjs.IDENTITY_MATRIX);
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 = _chunkUTEVPQTScjs.subpathSegmentCount.call(void 0, sp);
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 = _chunkUTEVPQTScjs.subpathSegment.call(void 0, sp, i).map((q) => toPoint(_chunkDWGZUSEScjs.applyMatrix.call(void 0, m, toVec(q))));
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 (_chunkUTEVPQTScjs.isVectorMaskActive.call(void 0, stored) && !contains(stored, exclude)) {
979
- visit(_chunkUTEVPQTScjs.vectorAppearanceNodes.call(void 0, stored), _chunkDWGZUSEScjs.multiplyMatrices.call(void 0, _chunkUTEVPQTScjs.nodeMatrix.call(void 0, stored), parent));
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 : _chunkUTEVPQTScjs.expandVectorAppearance.call(void 0, stored);
983
- const m = _chunkDWGZUSEScjs.multiplyMatrices.call(void 0, _chunkUTEVPQTScjs.nodeMatrix.call(void 0, n), parent);
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 = _chunkDWGZUSEScjs.applyMatrix.call(void 0, m, a);
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 = _chunkUTEVPQTScjs.vectorNodeBounds.call(void 0, n, parent);
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, _chunkDWGZUSEScjs.IDENTITY_MATRIX);
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, _chunkDWGZUSEScjs.multiplyMatrices.call(void 0, _chunkUTEVPQTScjs.nodeMatrix.call(void 0, n), parent));
1008
+ objects(n.children, _chunkW3GXSUSQcjs.multiplyMatrices.call(void 0, _chunkW3GXSUSQcjs.nodeMatrix.call(void 0, n), parent));
1009
1009
  continue;
1010
1010
  }
1011
- const b = _chunkUTEVPQTScjs.vectorNodeBounds.call(void 0, n, parent);
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, _chunkDWGZUSEScjs.IDENTITY_MATRIX);
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 ? _chunkDWGZUSEScjs.rotateMatrix.call(void 0, frame.angle) : _chunkDWGZUSEScjs.IDENTITY_MATRIX;
1299
- const toLocal = frame.angle ? _chunkDWGZUSEScjs.rotateMatrix.call(void 0, -frame.angle) : _chunkDWGZUSEScjs.IDENTITY_MATRIX;
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 = _chunkDWGZUSEScjs.applyMatrix.call(void 0, toDoc, { x: origin.x + d0.x * sx, y: origin.y + d0.y * sy });
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 = _chunkDWGZUSEScjs.applyMatrix.call(void 0, toLocal, { x: _nullishCoalesce(tx, () => ( p.x)), y: _nullishCoalesce(ty, () => ( p.y)) });
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 = _chunkDWGZUSEScjs.applyMatrix.call(void 0, toDoc, { x: origin.x + c.x * v.x, y: origin.y + c.y * v.y });
1362
- const dir = _chunkDWGZUSEScjs.applyMatrix.call(void 0, toDoc, { x: e.x * v.x, y: e.y * v.y });
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 = () => _chunkDWGZUSEScjs.applyMatrix.call(void 0, toDoc, { x: origin.x + d0.x * out.sx, y: origin.y + d0.y * out.sy });
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) => _chunkDWGZUSEScjs.applyMatrix.call(void 0, toDoc, 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 = _chunkDWGZUSEScjs.applyMatrix.call(void 0, toDoc, a);
1435
- const pb = _chunkDWGZUSEScjs.applyMatrix.call(void 0, toDoc, b);
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 = _chunkUTEVPQTScjs.subpathSegment.call(void 0, sp, i);
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) => _chunkUTEVPQTScjs.subpathSegment.call(void 0, sp, i).length === 2;
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 = _chunkUTEVPQTScjs.cloneAnchor.call(void 0, a);
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 = _chunkUTEVPQTScjs.inferAnchorType.call(void 0, next);
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(_chunkUTEVPQTScjs.cloneAnchor);
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(_chunkUTEVPQTScjs.cloneAnchor), closed: sp.closed });
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(_chunkUTEVPQTScjs.cloneAnchor);
1635
+ const anchors = sp.anchors.map(_chunkW3GXSUSQcjs.cloneAnchor);
1636
1636
  const n = anchors.length;
1637
- if (segment < 0 || segment >= _chunkUTEVPQTScjs.subpathSegmentCount.call(void 0, sp) || !Number.isFinite(t) || !Number.isFinite(p.x) || !Number.isFinite(p.y)) return { anchors, closed: sp.closed };
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] = _chunkUTEVPQTScjs.moveAnchorHandle.call(void 0, a, "out", c1);
1649
- anchors[ib] = _chunkUTEVPQTScjs.moveAnchorHandle.call(void 0, b, "in", c2);
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, _chunkUTEVPQTScjs.subpathSegment.call(void 0, sp, segment), t);
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(_chunkUTEVPQTScjs.cloneAnchor);
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(_chunkUTEVPQTScjs.cloneAnchor), closed: sp.closed }];
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(_chunkUTEVPQTScjs.cloneAnchor.call(void 0, a));
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 >= _chunkUTEVPQTScjs.subpathSegmentCount.call(void 0, sp)) return [{ anchors: sp.anchors.map(_chunkUTEVPQTScjs.cloneAnchor), closed: sp.closed }];
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 } = _chunkUTEVPQTScjs.insertAnchor.call(void 0, sp, segment, t);
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(_chunkUTEVPQTScjs.cloneAnchor), closed: sp.closed };
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(_chunkUTEVPQTScjs.cloneAnchor);
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 < _chunkUTEVPQTScjs.subpathSegmentCount.call(void 0, sp); i++) {
1835
- const s = _chunkUTEVPQTScjs.subpathSegment.call(void 0, sp, i);
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(_chunkUTEVPQTScjs.cloneAnchor), closed: sp.closed };
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(_chunkUTEVPQTScjs.cloneAnchor), closed: sp.closed }));
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 : _chunkUTEVPQTScjs.expandVectorAppearance.call(void 0, _chunkUTEVPQTScjs.vectorMaskedGeometry.call(void 0, 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 = _chunkDWGZUSEScjs.multiplyMatrices.call(void 0, _chunkUTEVPQTScjs.nodeMatrix.call(void 0, node), parent);
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, _chunkDWGZUSEScjs.IDENTITY_MATRIX, false);
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 _chunkUTEVPQTScjs.vectorPathWorldBezier.call(void 0, { ...entry.node, subpaths }, entry.parent);
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, _chunkUTEVPQTScjs.subpathsToBezier.call(void 0, [{ ...sp, closed: true }]))[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 (_chunkUTEVPQTScjs.hasPaint.call(void 0, node.fill)) return { path: worldOf(entry, closed), fillRule, key: `fill:${paintKey(node.fill)}`, paint: "fill" };
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 (_chunkUTEVPQTScjs.hasPaint.call(void 0, node.stroke) && (_nullishCoalesce(node.strokeWidth, () => ( 1))) > 0) {
2178
- const path = _chunkUTEVPQTScjs.vectorStrokeOutline.call(void 0, { ...node, subpaths }, entry.parent);
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" || !_chunkUTEVPQTScjs.hasPaint.call(void 0, node.fill) ? node.stroke : node.fill;
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 = _chunkUTEVPQTScjs.hasPaint.call(void 0, entry.node.fill);
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 = _chunkUTEVPQTScjs.hasPaint.call(void 0, entry.node.fill);
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 = _chunkUTEVPQTScjs.findVectorNode.call(void 0, state.document.nodes, id);
2410
+ const node = _chunkW3GXSUSQcjs.findVectorNode.call(void 0, state.document.nodes, id);
2411
2411
  if (node && !node.locked) {
2412
- for (const p of _chunkUTEVPQTScjs.collectPathNodes.call(void 0, node)) if (!p.locked) ids.add(p.id);
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([_chunkUTEVPQTScjs.findVectorNode.call(void 0, state.document.nodes, id), 'optionalAccess', _38 => _38.type]) === "path");
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 = _chunkUTEVPQTScjs.findVectorNode.call(void 0, state.document.nodes, id);
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 = _chunkUTEVPQTScjs.findVectorNode.call(void 0, state.document.nodes, state.pen.nodeId);
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 = _chunkUTEVPQTScjs.findVectorNode.call(void 0, state.document.nodes, ref.nodeId);
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 = _chunkUTEVPQTScjs.findVectorNode.call(void 0, state.document.nodes, id);
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(_chunkUTEVPQTScjs.vectorWorldMatrix.call(void 0, state.document.nodes, id), () => ( _chunkDWGZUSEScjs.IDENTITY_MATRIX));
2474
- for (const c of _chunkUTEVPQTScjs.vectorCorners.call(void 0, node.subpaths)) {
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 = _chunkUTEVPQTScjs.fitCornerRadius.call(void 0, c, radius);
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 = _chunkDWGZUSEScjs.applyMatrix.call(void 0, m, _chunkUTEVPQTScjs.cornerBisectorPoint.call(void 0, c, k));
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 (!_chunkUTEVPQTScjs.hasPaint.call(void 0, node.stroke) || !((_nullishCoalesce(node.strokeWidth, () => ( 1))) > 0)) return null;
2490
- const parts = _chunkUTEVPQTScjs.vectorStrokeParts.call(void 0, _chunkUTEVPQTScjs.subpathsToBezier.call(void 0, node.subpaths), node);
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 = _chunkUTEVPQTScjs.findVectorNode.call(void 0, state.document.nodes, id);
2504
- if (n) for (const p of _chunkUTEVPQTScjs.collectPathNodes.call(void 0, n)) ids.add(p.id);
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 = _chunkUTEVPQTScjs.findVectorNode.call(void 0, state.document.nodes, id);
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 = _chunkUTEVPQTScjs.sanitizeWidthProfile.call(void 0, node.strokeWidthProfile);
2516
- const m = _nullishCoalesce(_chunkUTEVPQTScjs.vectorWorldMatrix.call(void 0, state.document.nodes, id), () => ( _chunkDWGZUSEScjs.IDENTITY_MATRIX));
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 = _chunkUTEVPQTScjs.strokePositionPoint.call(void 0, g.line, sp, w.t);
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 = _chunkDWGZUSEScjs.applyMatrix.call(void 0, m, c);
2525
- const l = _chunkDWGZUSEScjs.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 = _chunkDWGZUSEScjs.applyMatrix.call(void 0, m, { x: c.x - n.x * w.right * g.unit, y: c.y - n.y * w.right * g.unit });
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 = _chunkUTEVPQTScjs.findVectorNode.call(void 0, doc.nodes, ref.nodeId);
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(_chunkUTEVPQTScjs.vectorWorldMatrix.call(void 0, doc.nodes, ref.nodeId), () => ( _chunkDWGZUSEScjs.IDENTITY_MATRIX));
2551
- const p = _chunkDWGZUSEScjs.applyMatrix.call(void 0, m, a);
2552
- return { x: p.x, y: p.y, ...a.in ? { in: _chunkDWGZUSEScjs.applyMatrix.call(void 0, m, a.in) } : {}, ...a.out ? { out: _chunkDWGZUSEScjs.applyMatrix.call(void 0, m, a.out) } : {}, ...a.type ? { type: a.type } : {} };
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: _chunkUTEVPQTScjs.findVectorNode.call(void 0, doc.nodes, id), parent: _nullishCoalesce(_chunkUTEVPQTScjs.vectorParentMatrix.call(void 0, doc.nodes, id), () => ( _chunkDWGZUSEScjs.IDENTITY_MATRIX)) })).filter((n) => n.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) => _chunkDWGZUSEScjs.matrixRotation.call(void 0, _chunkDWGZUSEScjs.multiplyMatrices.call(void 0, _chunkUTEVPQTScjs.nodeMatrix.call(void 0, n.node), n.parent)));
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 = _chunkDWGZUSEScjs.rotateMatrix.call(void 0, -angle);
2561
- const b = _chunkUTEVPQTScjs.unionBounds.call(void 0, nodes.map((n) => _chunkUTEVPQTScjs.vectorNodeBounds.call(void 0, n.node, _chunkDWGZUSEScjs.multiplyMatrices.call(void 0, n.parent, unrotate))));
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 = _chunkDWGZUSEScjs.rotateMatrix.call(void 0, frame.angle, { x: viewport.x, y: viewport.y });
2583
- const toScreen2 = (p) => frame.angle ? _chunkDWGZUSEScjs.applyMatrix.call(void 0, rot, p) : { x: p.x, y: p.y };
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 = _chunkUTEVPQTScjs.findVectorNode.call(void 0, doc.nodes, selection[0]);
2597
- if (!node || !_chunkUTEVPQTScjs.vectorNodeEnvelope.call(void 0, node)) return null;
2598
- const frame = _chunkUTEVPQTScjs.vectorEnvelopeFrame.call(void 0, node);
2599
- return frame ? { node, frame, world: _nullishCoalesce(_chunkUTEVPQTScjs.vectorWorldMatrix.call(void 0, doc.nodes, node.id), () => ( _chunkDWGZUSEScjs.IDENTITY_MATRIX)) } : null;
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" ? _chunkUTEVPQTScjs.normalizeVectorPaintStacks.call(void 0, n, prefer) : n;
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 = _chunkUTEVPQTScjs.cloneVectorDocument.call(void 0, doc);
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 === _chunkDWGZUSEScjs.IDENTITY_MATRIX || m[0] === 1 && m[1] === 0 && m[2] === 0 && m[3] === 1 && m[4] === 0 && m[5] === 0;
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 _chunkUTEVPQTScjs.findVectorNode.call(void 0, this.doc.nodes, id);
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 _chunkUTEVPQTScjs.unionBounds.call(void 0,
2931
+ return _chunkW3GXSUSQcjs.unionBounds.call(void 0,
2932
2932
  ids.map((id) => {
2933
2933
  const n = this.getNode(id);
2934
- return n ? _chunkUTEVPQTScjs.vectorNodeBounds.call(void 0, n, _nullishCoalesce(_chunkUTEVPQTScjs.vectorParentMatrix.call(void 0, this.doc.nodes, id), () => ( _chunkDWGZUSEScjs.IDENTITY_MATRIX))) : null;
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(_chunkUTEVPQTScjs.vectorWorldMatrix.call(void 0, doc.nodes, id), () => ( _chunkDWGZUSEScjs.IDENTITY_MATRIX));
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 _chunkDWGZUSEScjs.applyMatrix.call(void 0, _chunkDWGZUSEScjs.invertMatrix.call(void 0, this.worldOf(id, doc)), p);
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 = _chunkUTEVPQTScjs.cloneVectorNode.call(void 0, node);
3060
+ const copy = _chunkW3GXSUSQcjs.cloneVectorNode.call(void 0, node);
3061
3061
  const used = /* @__PURE__ */ new Set();
3062
- _chunkUTEVPQTScjs.walkVectorNodes.call(void 0, this.doc.nodes, (n) => used.add(n.id));
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 = _chunkUTEVPQTScjs.parseVectorSvg.call(void 0, svg, { createId: () => this.createId() });
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 = _chunkUTEVPQTScjs.parseVectorSvg.call(void 0, svg);
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 _chunkUTEVPQTScjs.vectorDocumentToSvg.call(void 0, this.doc, options);
3282
+ return _chunkJLYX4V57cjs.vectorDocumentToSvg.call(void 0, this.doc, options);
3283
3283
  }
3284
3284
  toJSON() {
3285
- return _chunkUTEVPQTScjs.cloneVectorDocument.call(void 0, this.doc);
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
- _chunkUTEVPQTScjs.walkVectorNodes.call(void 0, [node], (n) => {
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) : _chunkUTEVPQTScjs.cloneVectorNode.call(void 0, 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 = _chunkUTEVPQTScjs.rectSubpath.call(void 0, b);
3320
+ subpath = _chunkW3GXSUSQcjs.rectSubpath.call(void 0, b);
3321
3321
  break;
3322
3322
  case "ellipse":
3323
- subpath = _chunkUTEVPQTScjs.ellipseSubpath.call(void 0, b);
3323
+ subpath = _chunkW3GXSUSQcjs.ellipseSubpath.call(void 0, b);
3324
3324
  break;
3325
3325
  case "polygon":
3326
- subpath = _chunkUTEVPQTScjs.polygonSubpath.call(void 0, b, _nullishCoalesce(input.sides, () => ( d.polygonSides)));
3326
+ subpath = _chunkW3GXSUSQcjs.polygonSubpath.call(void 0, b, _nullishCoalesce(input.sides, () => ( d.polygonSides)));
3327
3327
  break;
3328
3328
  case "star":
3329
- subpath = _chunkUTEVPQTScjs.starSubpath.call(void 0, b, _nullishCoalesce(input.points, () => ( d.starPoints)), _nullishCoalesce(input.innerRatio, () => ( d.starInnerRatio)));
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 = _chunkUTEVPQTScjs.lineSubpath.call(void 0, { x: b.x, y: b.y }, { x: b.x + b.width, y: b.y + b.height });
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 = _chunkUTEVPQTScjs.setSubpathCorners.call(void 0, subpath, radius, kind);
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 = _chunkUTEVPQTScjs.bezierToSubpaths.call(void 0, d);
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 = _chunkUTEVPQTScjs.withVectorFills.call(void 0, styled, open ? [] : d.fills);
3370
- if (Array.isArray(d.strokes)) styled = _chunkUTEVPQTScjs.withVectorStrokes.call(void 0, styled, d.strokes);
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 _chunkUTEVPQTScjs.collectPathNodes.call(void 0, node)) targets.add(p.id);
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 = _chunkUTEVPQTScjs.widthProfilePreset.call(void 0, profile);
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 = _chunkUTEVPQTScjs.sanitizeWidthProfile.call(void 0, profile);
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 ? _chunkUTEVPQTScjs.generateWidthProfile.call(void 0, p) : [];
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 _chunkUTEVPQTScjs.collectPathNodes.call(void 0, node)) if (!p.locked) out.set(p.id, p);
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 = _chunkUTEVPQTScjs.vectorTargetPaint.call(void 0, path, target, layer);
3460
- const base = _chunkUTEVPQTScjs.isVectorGradient.call(void 0, paint) ? paint : _chunkUTEVPQTScjs.defaultVectorGradient.call(void 0, _nullishCoalesce(patch.type, () => ( "linear")), paint);
3461
- const g = _chunkUTEVPQTScjs.applyVectorGradientPatch.call(void 0, base, patch);
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, _chunkUTEVPQTScjs.withVectorTargetPaint.call(void 0, path, target, layer, g));
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) => _chunkUTEVPQTScjs.isVectorGradient.call(void 0, _chunkUTEVPQTScjs.vectorTargetPaint.call(void 0, p, target, layer)));
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 = _chunkUTEVPQTScjs.vectorTargetPaint.call(void 0, path, target, layer);
3479
- const stops = fn(_chunkUTEVPQTScjs.sortedVectorGradientStops.call(void 0, g));
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, _chunkUTEVPQTScjs.withVectorTargetPaint.call(void 0, path, target, layer, { ...g, stops }));
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 } = _chunkUTEVPQTScjs.moveVectorGradientStop.call(void 0, next, index, patch.offset));
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) => _chunkUTEVPQTScjs.isVectorGradient.call(void 0, _chunkUTEVPQTScjs.vectorTargetPaint.call(void 0, p, target, layer)));
3523
- const r = _chunkUTEVPQTScjs.insertVectorGradientStop.call(void 0, { ..._chunkUTEVPQTScjs.vectorTargetPaint.call(void 0, path, target, layer), stops }, offset);
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) => _chunkUTEVPQTScjs.removeVectorGradientStop.call(void 0, stops, index));
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" ? _chunkUTEVPQTScjs.withVectorTargetPaint.call(void 0, n, target, layer, g) : n) };
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 = _chunkUTEVPQTScjs.findVectorNode.call(void 0, base.nodes, id2);
3586
+ const node2 = _chunkW3GXSUSQcjs.findVectorNode.call(void 0, base.nodes, id2);
3587
3587
  if (!node2) continue;
3588
- const paint = _chunkUTEVPQTScjs.vectorTargetPaint.call(void 0, node2, target, this.gradientEdit.layer);
3589
- const g2 = _chunkUTEVPQTScjs.isVectorGradient.call(void 0, paint) ? paint : _chunkUTEVPQTScjs.defaultVectorGradient.call(void 0, "linear", paint);
3590
- doc = this.withGradient(doc, id2, target, _chunkUTEVPQTScjs.setVectorGradientVector.call(void 0, g2, _chunkUTEVPQTScjs.vectorPathLocalBounds.call(void 0, node2), this.toLocal(id2, drag.startDoc, base), this.toLocal(id2, end, base)));
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 = _chunkUTEVPQTScjs.findVectorNode.call(void 0, base.nodes, id);
3598
- const g = _chunkUTEVPQTScjs.vectorTargetPaint.call(void 0, node, target, this.gradientEdit.layer);
3599
- const bounds = _chunkUTEVPQTScjs.vectorPathLocalBounds.call(void 0, node);
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 = _chunkUTEVPQTScjs.moveVectorGradientHandle.call(void 0, g, bounds, part.handle, local(to), local(drag.startDoc));
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 = _chunkUTEVPQTScjs.moveVectorGradientHandle.call(void 0, g, bounds, "start", local(p), local(drag.startDoc));
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 = _chunkUTEVPQTScjs.sortedVectorGradientStops.call(void 0, g);
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 ? _chunkUTEVPQTScjs.removeVectorGradientStop.call(void 0, stops, part.index) : null;
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 = _chunkUTEVPQTScjs.moveVectorGradientStop.call(void 0, stops, part.index, Math.min(1, Math.max(0, pos.offset)));
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 = _chunkUTEVPQTScjs.vectorGradientMidpointFromPosition.call(void 0, stops, part.index, pos.offset);
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 = _chunkUTEVPQTScjs.removeWidthPoints.call(void 0, _chunkUTEVPQTScjs.sanitizeWidthProfile.call(void 0, node.strokeWidthProfile), indices);
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 = _chunkUTEVPQTScjs.sanitizeWidthProfile.call(void 0, node.strokeWidthProfile);
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 >= _chunkUTEVPQTScjs.VECTOR_WIDTH_PROFILE_MAX_POINTS) return { ok: false, message: "The profile has too many width points." };
3709
- ({ points, index } = _chunkUTEVPQTScjs.insertWidthPoint.call(void 0, profile.length ? profile : null, t, { left: scale(left), right: scale(right) }, { step: true }));
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) <= _chunkUTEVPQTScjs.VECTOR_WIDTH_SAME_T) {
3716
- points = _chunkUTEVPQTScjs.setWidthPoint.call(void 0, profile, existing, sides2);
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 = _chunkUTEVPQTScjs.removeWidthPoints.call(void 0, profile, [existing]);
3720
- if (rest.length) ({ points, index } = _chunkUTEVPQTScjs.insertWidthPoint.call(void 0, rest, tt, sides2, { step: true }));
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 = _chunkUTEVPQTScjs.sanitizeWidthProfile.call(void 0, node.strokeWidthProfile);
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, () => ( _chunkUTEVPQTScjs.widthProfileAt.call(void 0, profile.length ? profile : null, tt)));
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 = _chunkUTEVPQTScjs.strokePositionPoint.call(void 0, g.line, sp, tt);
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 ? _chunkDWGZUSEScjs.applyMatrix.call(void 0, this.worldOf(nodeId), { x: at.point[0], y: at.point[1] }) : { x: 0, y: 0 };
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) => _chunkUTEVPQTScjs.setAnchorCorner.call(void 0, a, radius, options.kind));
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) => _chunkUTEVPQTScjs.setAnchorCorner.call(void 0, a, _nullishCoalesce(_optionalChain([a, 'access', _135 => _135.corner, 'optionalAccess', _136 => _136.radius]), () => ( 0)), kind));
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 _chunkUTEVPQTScjs.collectPathNodes.call(void 0, node)) {
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) => _chunkUTEVPQTScjs.vectorPaintLayerNodes.call(void 0, p).filter((l) => l.kind === "stroke" && l.drawn && (_nullishCoalesce(l.node.strokeWidth, () => ( 1))) > 0);
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 _chunkUTEVPQTScjs.collectPathNodes.call(void 0, node)) if (!p.locked && strokesOf(p).length) paths.push(p);
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 } = _chunkUTEVPQTScjs.cloneVectorNode.call(void 0, p);
3838
- const unstroked = _chunkUTEVPQTScjs.withVectorStrokes.call(void 0, rest, []);
3839
- for (const key of _chunkUTEVPQTScjs.VECTOR_STROKE_SETTING_KEYS) delete unstroked[key];
3840
- const list = _chunkUTEVPQTScjs.vectorFills.call(void 0, p).length ? [{ ...unstroked, ...effects ? { effects } : {} }] : [];
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 = _chunkUTEVPQTScjs.bezierToSubpaths.call(void 0, _chunkUTEVPQTScjs.vectorStrokeOutlinePath.call(void 0, _chunkUTEVPQTScjs.vectorAppearanceOutline.call(void 0, p), l.node));
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(_chunkUTEVPQTScjs.withVectorFills.call(void 0, { ...plain2, id, name, subpaths: outline, stroke: null, fillRule: "nonzero" }, [fill]));
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 _chunkUTEVPQTScjs.collectPathNodes.call(void 0, node)) if (!p.blendStep) out.set(p.id, p);
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" ? _chunkUTEVPQTScjs.vectorFills.call(void 0, path) : _chunkUTEVPQTScjs.vectorStrokes.call(void 0, path);
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" ? _chunkUTEVPQTScjs.withVectorFills.call(void 0, path, result) : _chunkUTEVPQTScjs.withVectorStrokes.call(void 0, path, result));
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 = _chunkUTEVPQTScjs.sanitizeVectorGradient.call(void 0, paint);
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 (!_chunkUTEVPQTScjs.isVectorBlendMode.call(void 0, patch.blendMode)) return `Unknown blend mode "${String(patch.blendMode)}". Use one of: ${_chunkUTEVPQTScjs.VECTOR_BLEND_MODES.join(", ")}.`;
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 = _chunkUTEVPQTScjs.sanitizeVectorStrokeSettings.call(void 0, patch);
3931
- for (const key of _chunkUTEVPQTScjs.VECTOR_STROKE_SETTING_KEYS) {
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" } : _chunkUTEVPQTScjs.newVectorStrokeLayer.call(void 0, path, {});
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" ? _chunkUTEVPQTScjs.sanitizeVectorFills.call(void 0, layers) : _chunkUTEVPQTScjs.sanitizeVectorStrokes.call(void 0, layers);
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 (!_chunkUTEVPQTScjs.isVectorBlendMode.call(void 0, mode)) return { ok: false, message: `Unknown blend mode "${String(mode)}". Use one of: ${_chunkUTEVPQTScjs.VECTOR_BLEND_MODES.join(", ")}.` };
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 (!_chunkUTEVPQTScjs.isVectorFilterType.call(void 0, type)) return [];
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 = _chunkUTEVPQTScjs.createVectorFilter.call(void 0, type, `filter${k}`, options.params);
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 ${_chunkUTEVPQTScjs.VECTOR_FILTER_LABELS[type]}`, () => this.setDoc(mapTree(this.doc.nodes, (n) => _nullishCoalesce(next.get(n.id), () => ( n)))));
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 ? _chunkUTEVPQTScjs.VECTOR_FILTER_LABELS[current.type] : "Filter"}`,
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 ? _chunkUTEVPQTScjs.normalizeVectorFilterParams.call(void 0, f.type, patch.params, f.params) : f.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 || !_chunkUTEVPQTScjs.createVectorEffect.call(void 0, type, "")) return [];
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, _chunkUTEVPQTScjs.vectorAppearanceOutline.call(void 0, node));
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 = _chunkUTEVPQTScjs.createVectorEffect.call(void 0, type, `fx${k}`, params);
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 ${_chunkUTEVPQTScjs.VECTOR_EFFECT_LABELS[type]}`, () => this.setDoc(mapTree(this.doc.nodes, (n) => _nullishCoalesce(next.get(n.id), () => ( n)))));
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(_chunkUTEVPQTScjs.VECTOR_EFFECT_LABELS[current.type], () => ( "Effect")) : "Effect";
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 ? _chunkUTEVPQTScjs.normalizeVectorEffectParams.call(void 0, e.type, raw, e.params) : e.params;
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 && _chunkUTEVPQTScjs.hasVectorAppearance.call(void 0, 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 (!_chunkUTEVPQTScjs.hasVectorAppearance.call(void 0, n)) return n;
4189
- if (!_chunkUTEVPQTScjs.hasOwnVectorAppearance.call(void 0, n)) return { ...n, children: n.children.map(bake) };
4190
- let e = _chunkUTEVPQTScjs.expandVectorAppearance.call(void 0, n);
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 : _chunkUTEVPQTScjs.isVectorMaskGroup.call(void 0, n) && drop.has(n.children[0].id) ? { ...n, mask: null } : n));
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 = _chunkUTEVPQTScjs.locateVectorNode.call(void 0, this.doc.nodes, id);
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([_chunkUTEVPQTScjs.locateVectorNode.call(void 0, this.doc.nodes, parent.id), 'optionalAccess', _146 => _146.parent]), () => ( null));
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 _chunkDWGZUSEScjs.multiplyMatrices.call(void 0, _chunkDWGZUSEScjs.multiplyMatrices.call(void 0, _chunkDWGZUSEScjs.rotateMatrix.call(void 0, -angle), m), _chunkDWGZUSEScjs.rotateMatrix.call(void 0, angle));
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 = _chunkDWGZUSEScjs.rotateMatrix.call(void 0, frame.angle);
4293
- return vectorBoxCorners(frame).map((c) => frame.angle ? _chunkDWGZUSEScjs.applyMatrix.call(void 0, rot, c) : c);
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, _chunkDWGZUSEScjs.multiplyMatrices.call(void 0, _chunkUTEVPQTScjs.nodeMatrix.call(void 0, n), parent));
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, _chunkDWGZUSEScjs.IDENTITY_MATRIX);
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 = _chunkDWGZUSEScjs.applyMatrix.call(void 0, _chunkDWGZUSEScjs.rotateMatrix.call(void 0, -frame.angle), _nullishCoalesce(options.origin, () => ( this.frameCenter(frame))));
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 ? _chunkDWGZUSEScjs.applyMatrix.call(void 0, _chunkDWGZUSEScjs.rotateMatrix.call(void 0, -angle), v) : v;
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) => _chunkDWGZUSEScjs.applyMatrix.call(void 0, m, 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 = _chunkDWGZUSEScjs.rotateMatrix.call(void 0, angle);
4377
- const quad = vectorDistortQuad(drag.frame, drag.handle, d, mode).map((c) => angle ? _chunkDWGZUSEScjs.applyMatrix.call(void 0, rot, c) : c);
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 = _chunkUTEVPQTScjs.vectorEnvelopeFrame.call(void 0, node, current.id);
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: _chunkDWGZUSEScjs.resizeWarpMesh.call(void 0, frame.mesh, columns, rows) };
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 = _chunkUTEVPQTScjs.normalizeVectorEffectParams.call(void 0, "envelope", this.envelopeParams(node, current, raw), current.params);
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 = _chunkUTEVPQTScjs.createVectorEffect.call(void 0, "envelope", `fx${k}`, raw);
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
- _chunkUTEVPQTScjs.walkVectorNodes.call(void 0, this.doc.nodes, (n) => order.set(n.id, order.size));
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([_chunkUTEVPQTScjs.locateVectorNode.call(void 0, this.doc.nodes, n.id), 'optionalAccess', _153 => _153.parent, 'optionalAccess', _154 => _154.id]), () => ( null)));
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]) : _chunkDWGZUSEScjs.IDENTITY_MATRIX;
4458
- const targetToDoc = _chunkDWGZUSEScjs.multiplyMatrices.call(void 0, _chunkUTEVPQTScjs.nodeMatrix.call(void 0, target), parentToDoc);
4459
- const toLocal = _chunkDWGZUSEScjs.multiplyMatrices.call(void 0, this.worldOf(topId), _chunkDWGZUSEScjs.invertMatrix.call(void 0, targetToDoc));
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
- ..._chunkDWGZUSEScjs.applyMatrix.call(void 0, toLocal, a),
4464
- ...a.in ? { in: _chunkDWGZUSEScjs.applyMatrix.call(void 0, toLocal, a.in) } : {},
4465
- ...a.out ? { out: _chunkDWGZUSEScjs.applyMatrix.call(void 0, toLocal, a.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 = _chunkUTEVPQTScjs.vectorMeshFromOutline.call(void 0, local, _nullishCoalesce(options.columns, () => ( 4)), _nullishCoalesce(options.rows, () => ( 4)));
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 = _chunkUTEVPQTScjs.createVectorEffect.call(void 0, "envelope", `fx${k}`, { style: "mesh", mesh });
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 = _chunkUTEVPQTScjs.vectorEnvelopeFrame.call(void 0, node, effect.id);
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: [_chunkUTEVPQTScjs.vectorMeshOutline.call(void 0, frame.mesh)],
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 = _chunkDWGZUSEScjs.warpMeshEditPoints.call(void 0, mesh);
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(_chunkDWGZUSEScjs.applyMatrix.call(void 0, target.world, mesh.points[index]));
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 = _chunkDWGZUSEScjs.applyMatrix.call(void 0, _chunkDWGZUSEScjs.invertMatrix.call(void 0, target.world), p);
4555
- const at = _chunkDWGZUSEScjs.warpMeshParamAt.call(void 0, mesh, local);
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 = _chunkUTEVPQTScjs.hitTestVectorNodes.call(void 0, this.doc.nodes, p, this.tolerance(), { entered: this.enteredGroups() });
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 ? _chunkDWGZUSEScjs.dragWarpMeshPoint.call(void 0, drag.base, drag.index, d) : _chunkDWGZUSEScjs.pullWarpMesh.call(void 0, drag.base, drag.s, drag.t, d);
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 : _chunkDWGZUSEScjs.multiplyMatrices.call(void 0, _chunkDWGZUSEScjs.multiplyMatrices.call(void 0, parent, m), _chunkDWGZUSEScjs.invertMatrix.call(void 0, parent));
4619
- next = _chunkUTEVPQTScjs.transformVectorNode.call(void 0, n, local);
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, _chunkDWGZUSEScjs.multiplyMatrices.call(void 0, _chunkUTEVPQTScjs.nodeMatrix.call(void 0, n), parent));
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, _chunkDWGZUSEScjs.IDENTITY_MATRIX);
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(_chunkDWGZUSEScjs.translateMatrix.call(void 0, dx, dy), { ids: options.ids, label: "Move" });
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 _chunkDWGZUSEScjs.applyMatrix.call(void 0, _chunkDWGZUSEScjs.rotateMatrix.call(void 0, frame.angle), { x: frame.x + frame.width / 2, y: frame.y + frame.height / 2 });
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 = _chunkDWGZUSEScjs.applyMatrix.call(void 0, _chunkDWGZUSEScjs.rotateMatrix.call(void 0, -frame.angle), _nullishCoalesce(options.origin, () => ( this.frameCenter(frame))));
4653
- return this.transform(this.inFrame(frame.angle, _chunkDWGZUSEScjs.scaleMatrix.call(void 0, sx, sy, origin)), { ids: options.ids, label: "Scale" });
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(_chunkDWGZUSEScjs.rotateMatrix.call(void 0, degrees, origin), { ids: options.ids, label: "Rotate" });
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]), _chunkDWGZUSEScjs.rotateMatrix.call(void 0, delta, this.frameCenter(frame)));
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" ? _chunkDWGZUSEScjs.scaleMatrix.call(void 0, -1, 1, c) : _chunkDWGZUSEScjs.scaleMatrix.call(void 0, 1, -1, c);
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]), _chunkDWGZUSEScjs.translateMatrix.call(void 0, dx, dy));
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 ? _chunkDWGZUSEScjs.translateMatrix.call(void 0, d, 0) : _chunkDWGZUSEScjs.translateMatrix.call(void 0, 0, d));
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 = _chunkDWGZUSEScjs.translateMatrix.call(void 0, offset.x, offset.y);
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 = _chunkUTEVPQTScjs.transformVectorNode.call(void 0, this.freshIds(node), m);
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) => _chunkUTEVPQTScjs.locateVectorNode.call(void 0, this.doc.nodes, 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 = _chunkUTEVPQTScjs.nodeMatrix.call(void 0, n);
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 ? _chunkUTEVPQTScjs.transformVectorNode.call(void 0, c, m) : c).map((c) => opacity !== void 0 && opacity < 1 ? { ...c, opacity: (_nullishCoalesce(c.opacity, () => ( 1))) * opacity } : c)
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: _chunkUTEVPQTScjs.vectorPathWorldBezier.call(void 0, { ...e.node, subpaths: e.node.subpaths.filter((s) => s.anchors.length > 1).map((s) => ({ ...s, closed: true })) }, e.parent),
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 = _chunkUTEVPQTScjs.bezierToSubpaths.call(void 0, this.intoParentSpace(anchorRoot, result.path));
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 } = _chunkUTEVPQTScjs.cloneVectorNode.call(void 0, base);
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 && (!!_chunkUTEVPQTScjs.findVectorNode.call(void 0, [n], id) || !!_chunkUTEVPQTScjs.findVectorNode.call(void 0, [_chunkUTEVPQTScjs.expandVectorAppearance.call(void 0, n)], id) || !!_chunkUTEVPQTScjs.findVectorNode.call(void 0, [_chunkUTEVPQTScjs.vectorMaskedGeometry.call(void 0, n)], id));
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 (_chunkUTEVPQTScjs.isVectorLiveBoolean.call(void 0, lone)) {
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([_chunkUTEVPQTScjs.locateVectorNode.call(void 0, this.doc.nodes, id2), 'optionalAccess', _164 => _164.parent]), () => ( null)));
4897
- if (parents.every((g) => _chunkUTEVPQTScjs.isVectorLiveBoolean.call(void 0, 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) => _chunkUTEVPQTScjs.bezierToSubpaths.call(void 0, this.intoParentSpace(first, _chunkUTEVPQTScjs.vectorPathWorldBezier.call(void 0, e.node, e.parent))));
4949
- const { transform: _t, effects: _e, booleanOperation: _b, ...baseRest } = _chunkUTEVPQTScjs.cloneVectorNode.call(void 0, paths[0]);
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(_chunkUTEVPQTScjs.vectorParentMatrix.call(void 0, this.doc.nodes, id), () => ( _chunkDWGZUSEScjs.IDENTITY_MATRIX));
4962
- return isRoot(parent) ? path : _chunkXGD3FSNCcjs.transformBezierPath.call(void 0, path, _chunkDWGZUSEScjs.invertMatrix.call(void 0, parent));
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 = _chunkUTEVPQTScjs.bezierToSubpaths.call(void 0, this.intoParentSpace(topRoot, piece.path)).map((sp) => piece.open ? { ...sp, closed: false } : sp);
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([_chunkUTEVPQTScjs.locateVectorNode.call(void 0, this.doc.nodes, id), 'optionalAccess', _169 => _169.parent]);
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) => _chunkUTEVPQTScjs.locateVectorNode.call(void 0, this.doc.nodes, 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 (!_chunkUTEVPQTScjs.isVectorMaskType.call(void 0, type)) return { ok: false, message: `Unknown mask type "${type}": use clip, alpha or luminance.` };
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) => _chunkUTEVPQTScjs.locateVectorNode.call(void 0, this.doc.nodes, 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 (_chunkUTEVPQTScjs.isVectorMaskGroup.call(void 0, n)) out.set(n.id, n);
5134
+ if (_chunkW3GXSUSQcjs.isVectorMaskGroup.call(void 0, n)) out.set(n.id, n);
5135
5135
  else {
5136
- const parent = _optionalChain([_chunkUTEVPQTScjs.locateVectorNode.call(void 0, this.doc.nodes, id), 'optionalAccess', _180 => _180.parent]);
5137
- if (_chunkUTEVPQTScjs.isVectorMaskGroup.call(void 0, parent)) out.set(parent.id, parent);
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 = _chunkUTEVPQTScjs.nodeMatrix.call(void 0, g);
5163
+ const m = _chunkW3GXSUSQcjs.nodeMatrix.call(void 0, g);
5164
5164
  const opacity = g.opacity;
5165
- const flat = children.map((c) => g.transform ? _chunkUTEVPQTScjs.transformVectorNode.call(void 0, c, m) : c).map((c) => opacity !== void 0 && opacity < 1 ? { ...c, opacity: (_nullishCoalesce(c.opacity, () => ( 1))) * opacity } : c);
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 && !_chunkUTEVPQTScjs.isVectorMaskType.call(void 0, patch.type)) return { ok: false, message: `Unknown mask type "${patch.type}": use clip, alpha or luminance.` };
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) || !_chunkUTEVPQTScjs.isVectorMaskGroup.call(void 0, n)) return n;
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([_chunkUTEVPQTScjs.locateVectorNode.call(void 0, this.doc.nodes, id), 'optionalAccess', _185 => _185.parent, 'optionalAccess', _186 => _186.id]), () => ( null));
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 = _chunkDWGZUSEScjs.invertMatrix.call(void 0, _chunkUTEVPQTScjs.nodeMatrix.call(void 0, group));
5248
- const key = group.transform ? _chunkUTEVPQTScjs.transformVectorNode.call(void 0, node, m) : node;
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
- _chunkUTEVPQTScjs.walkVectorNodes.call(void 0, this.doc.nodes, (n) => used.add(n.id));
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([_chunkUTEVPQTScjs.locateVectorNode.call(void 0, this.doc.nodes, n.id), 'optionalAccess', _188 => _188.parent])));
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 = _chunkDWGZUSEScjs.multiplyMatrices.call(void 0, this.worldOf(path.id), _chunkDWGZUSEScjs.invertMatrix.call(void 0, this.worldOf(group.id)));
5319
- const spine = _chunkUTEVPQTScjs.transformVectorNode.call(void 0, { id: "", type: "path", subpaths: [first] }, m).subpaths[0];
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 = _chunkUTEVPQTScjs.vectorNodeBounds.call(void 0, c);
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 ? _chunkUTEVPQTScjs.transformVectorNode.call(void 0, c, _chunkDWGZUSEScjs.translateMatrix.call(void 0, dx, dy)) : c;
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, _chunkDWGZUSEScjs.invertMatrix.call(void 0, _chunkDWGZUSEScjs.multiplyMatrices.call(void 0, _chunkUTEVPQTScjs.nodeMatrix.call(void 0, node), entry.parent)));
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: _chunkUTEVPQTScjs.bezierToSubpaths.call(void 0, toLocal(r.path)) });
5404
- else if (_optionalChain([r, 'optionalAccess', _192 => _192.kind]) === "outline") list.push({ ...node, subpaths: _chunkUTEVPQTScjs.bezierToSubpaths.call(void 0, toLocal(r.path)) });
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: _chunkUTEVPQTScjs.bezierToSubpaths.call(void 0, toLocal(path)).map((sp) => ({ ...sp, closed: false })) })
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: _chunkUTEVPQTScjs.bezierToSubpaths.call(void 0, toLocal(plan.merged.path))
5418
+ subpaths: _chunkW3GXSUSQcjs.bezierToSubpaths.call(void 0, toLocal(plan.merged.path))
5419
5419
  };
5420
- if (plan.merged.currentFill || !_chunkUTEVPQTScjs.hasPaint.call(void 0, merged.fill)) merged.fill = _chunkUTEVPQTScjs.hasPaint.call(void 0, this.defaults.fill) ? this.defaults.fill : "#808080";
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
- _chunkUTEVPQTScjs.walkVectorNodes.call(void 0, this.doc.nodes, (n) => {
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 = _chunkUTEVPQTScjs.bezierToSubpaths.call(void 0, below ? this.intoParentSpace(below, region) : region);
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 (!_chunkUTEVPQTScjs.hasPaint.call(void 0, node.fill)) node.fill = "#808080";
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, _chunkDWGZUSEScjs.applyMatrixLinear.call(void 0, _chunkDWGZUSEScjs.invertMatrix.call(void 0, this.worldOf(r.nodeId, doc)), { x: dx, y: dy }));
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 _chunkUTEVPQTScjs.translateAnchor.call(void 0, a, d.x, d.y);
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 = _chunkUTEVPQTScjs.findVectorNode.call(void 0, doc.nodes, ref.nodeId);
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 = _chunkUTEVPQTScjs.findVectorNode.call(void 0, doc.nodes, ref.nodeId);
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) => _chunkUTEVPQTScjs.moveAnchorHandle.call(void 0, a, ref.handle, local, options.breakHandles));
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) => _chunkUTEVPQTScjs.convertAnchor.call(void 0, acc, r.index, type), sp));
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 = _chunkUTEVPQTScjs.nearestSegment.call(void 0, node, this.toLocal(nodeId, point));
5644
+ const hit = _chunkW3GXSUSQcjs.nearestSegment.call(void 0, node, this.toLocal(nodeId, point));
5645
5645
  if (!hit) return null;
5646
- const { subpath, index } = _chunkUTEVPQTScjs.insertAnchor.call(void 0, node.subpaths[hit.subpath], hit.segment, hit.t);
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) : _chunkUTEVPQTScjs.removeAnchors.call(void 0, 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) ? _chunkUTEVPQTScjs.collectPathNodes.call(void 0, this.getNode(id)) : []).map((p) => p.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(_chunkUTEVPQTScjs.reverseSubpath), ..._optionalChain([n, 'access', _210 => _210.strokeWidthProfile, 'optionalAccess', _211 => _211.length]) ? { strokeWidthProfile: _chunkUTEVPQTScjs.reverseWidthProfile.call(void 0, n.strokeWidthProfile) } : {} } : n
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 _chunkUTEVPQTScjs.collectPathNodes.call(void 0, node)) if (!p.locked) out.set(p.id, p);
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
- _chunkUTEVPQTScjs.walkVectorNodes.call(void 0, this.doc.nodes, (n) => {
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 = _chunkDWGZUSEScjs.multiplyMatrices.call(void 0, this.worldOf(from.id), _chunkDWGZUSEScjs.invertMatrix.call(void 0, this.worldOf(to)));
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) => _chunkDWGZUSEScjs.applyMatrix.call(void 0, m, 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 = _chunkUTEVPQTScjs.nearestSegment.call(void 0, node, local);
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
- _chunkUTEVPQTScjs.walkVectorNodes.call(void 0, this.doc.nodes, (n, parent) => {
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 = _chunkUTEVPQTScjs.polylineBounds.call(void 0, points.map(toPoint2), pad);
5897
+ const box = _chunkW3GXSUSQcjs.polylineBounds.call(void 0, points.map(toPoint2), pad);
5898
5898
  if (!box) return [];
5899
5899
  const out = [];
5900
- _chunkUTEVPQTScjs.walkVectorNodes.call(void 0, this.doc.nodes, (n) => {
5900
+ _chunkW3GXSUSQcjs.walkVectorNodes.call(void 0, this.doc.nodes, (n) => {
5901
5901
  if (n.type !== "path" || !visible(n)) return;
5902
- const b = _chunkUTEVPQTScjs.vectorNodeBounds.call(void 0, n, _nullishCoalesce(_chunkUTEVPQTScjs.vectorParentMatrix.call(void 0, this.doc.nodes, n.id), () => ( _chunkDWGZUSEScjs.IDENTITY_MATRIX)));
5903
- if (b && _chunkUTEVPQTScjs.boundsIntersect.call(void 0, b, box)) out.push(n);
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 = _chunkDWGZUSEScjs.invertMatrix.call(void 0, this.worldOf(id));
5910
- return points.map((p) => toPoint2(_chunkDWGZUSEScjs.applyMatrix.call(void 0, inv, p)));
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 = _chunkUTEVPQTScjs.simplifyPolyline.call(void 0, points.map(toPoint2), 0.25 / this.viewport.zoom).map(([x, y]) => ({ x, y }));
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 = _chunkUTEVPQTScjs.knifePath.call(void 0, _chunkUTEVPQTScjs.subpathsToBezier.call(void 0, closed), _nullishCoalesce(node.fillRule, () => ( "nonzero")), this.localPoints(node.id, pts));
5926
- if (result) plan.push({ node, pieces: result.map((path) => _chunkUTEVPQTScjs.bezierToSubpaths.call(void 0, 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 = _chunkUTEVPQTScjs.simplifyPolyline.call(void 0, points.map(toPoint2), Math.min(width * 0.05, 0.25 / this.viewport.zoom));
5949
- const region = _chunkUTEVPQTScjs.eraserRegion.call(void 0, pts, width);
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, _chunkDWGZUSEScjs.invertMatrix.call(void 0, this.worldOf(node.id)));
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 (_chunkUTEVPQTScjs.hasPaint.call(void 0, node.fill) && live.every((sp) => sp.closed)) {
5959
- const faces = _chunkUTEVPQTScjs.eraseFromFill.call(void 0, _chunkUTEVPQTScjs.subpathsToBezier.call(void 0, live), _nullishCoalesce(node.fillRule, () => ( "nonzero")), local);
5960
- if (faces) plan.push({ node, pieces: faces.map((f) => _chunkUTEVPQTScjs.bezierToSubpaths.call(void 0, 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) => _chunkUTEVPQTScjs.eraseFromOutline.call(void 0, sp, local));
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) => _chunkUTEVPQTScjs.cloneVectorNode.call(void 0, 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 = _chunkUTEVPQTScjs.parseVectorSvg.call(void 0, trimmed).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) => _chunkUTEVPQTScjs.transformVectorNode.call(void 0, this.freshIds(n), _chunkDWGZUSEScjs.translateMatrix.call(void 0, offset.x, offset.y)));
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) => _chunkUTEVPQTScjs.cloneVectorNode.call(void 0, 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 _chunkUTEVPQTScjs.vectorEnteredGroups.call(void 0, this.doc.nodes, this.editingId ? [...this.selection, this.editingId] : this.selection);
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 ((_chunkUTEVPQTScjs.hasOwnVectorAppearance.call(void 0, n) || _chunkUTEVPQTScjs.isVectorMaskActive.call(void 0, n)) && !entered.has(n.id) && !_chunkUTEVPQTScjs.hitTestVectorNode.call(void 0, n, p, tol, parent, { entered })) continue;
6141
- const found = search(n.children, _chunkDWGZUSEScjs.multiplyMatrices.call(void 0, _chunkUTEVPQTScjs.nodeMatrix.call(void 0, n), parent));
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 (_chunkUTEVPQTScjs.hitTestVectorNode.call(void 0, n, p, tol, parent, { entered })) return n;
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, _chunkDWGZUSEScjs.IDENTITY_MATRIX);
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
- _chunkUTEVPQTScjs.walkVectorNodes.call(void 0, this.doc.nodes, (n) => {
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 = _chunkUTEVPQTScjs.hitTestVectorNodes.call(void 0, this.doc.nodes, p, this.tolerance(), { entered: this.enteredGroups() });
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 = _chunkUTEVPQTScjs.nearestSegment.call(void 0, node, this.toLocal(id, p));
6180
+ const seg = _chunkW3GXSUSQcjs.nearestSegment.call(void 0, node, this.toLocal(id, p));
6181
6181
  if (seg && seg.distance <= this.tolerance()) {
6182
- const point = _chunkDWGZUSEScjs.applyMatrix.call(void 0, this.worldOf(id), seg.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 = _chunkUTEVPQTScjs.hitTestVectorNodes.call(void 0, this.doc.nodes, p, this.tolerance(), { entered: this.enteredGroups() });
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
- _chunkUTEVPQTScjs.walkVectorNodes.call(void 0, this.doc.nodes, (n) => {
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 = _chunkDWGZUSEScjs.applyMatrix.call(void 0, _chunkDWGZUSEScjs.invertMatrix.call(void 0, m), p);
6262
- const near = _chunkUTEVPQTScjs.nearestStrokePosition.call(void 0, g.line, [local.x, local.y]);
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 = _chunkUTEVPQTScjs.strokeWidthProfileOf.call(void 0, n);
6265
- const w = _chunkUTEVPQTScjs.widthProfileAt.call(void 0, profile, near.t);
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 > _chunkUTEVPQTScjs.widthProfileMaxScale.call(void 0, profile) * g.unit + tol) return;
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: _chunkDWGZUSEScjs.applyMatrix.call(void 0, m, { x: cx, y: cy }),
6277
- left: _chunkDWGZUSEScjs.applyMatrix.call(void 0, m, { x: cx + nx * w.left * g.unit, y: cy + ny * w.left * g.unit }),
6278
- right: _chunkDWGZUSEScjs.applyMatrix.call(void 0, m, { x: cx - nx * w.right * g.unit, y: cy - ny * w.right * g.unit }),
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 = _chunkUTEVPQTScjs.sanitizeWidthProfile.call(void 0, node.strokeWidthProfile);
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 < _chunkUTEVPQTScjs.VECTOR_WIDTH_PROFILE_MAX_POINTS ? "copy" : "move";
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 = _chunkUTEVPQTScjs.nearestStrokePosition.call(void 0, g.line, [local.x, local.y]);
6329
- const inserted = _chunkUTEVPQTScjs.insertWidthPoint.call(void 0, _chunkUTEVPQTScjs.strokeWidthProfileOf.call(void 0, node), near.t);
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 = _chunkUTEVPQTScjs.strokePositionPoint.call(void 0, g.line, subpath, t);
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 = _chunkUTEVPQTScjs.strokePositionPoint.call(void 0, line2, drag.ref.subpath, t);
6371
+ const at = _chunkW3GXSUSQcjs.strokePositionPoint.call(void 0, line2, drag.ref.subpath, t);
6372
6372
  if (!at) return t;
6373
- const here = this.documentToScreen(_chunkDWGZUSEScjs.applyMatrix.call(void 0, m, { x: at.point[0], y: at.point[1] }));
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 = _chunkUTEVPQTScjs.strokePositionPoint.call(void 0, line2, drag.ref.subpath, w.t);
6378
+ const q = _chunkW3GXSUSQcjs.strokePositionPoint.call(void 0, line2, drag.ref.subpath, w.t);
6379
6379
  if (!q) return;
6380
- const s = this.documentToScreen(_chunkDWGZUSEScjs.applyMatrix.call(void 0, m, { x: q.point[0], y: q.point[1] }));
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 = _chunkDWGZUSEScjs.multiplyMatrices.call(void 0, _chunkUTEVPQTScjs.nodeMatrix.call(void 0, n), parent);
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 = _chunkUTEVPQTScjs.nearestSegment.call(void 0, n, _chunkDWGZUSEScjs.applyMatrix.call(void 0, _chunkDWGZUSEScjs.invertMatrix.call(void 0, m), p));
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: _chunkDWGZUSEScjs.applyMatrix.call(void 0, m, hit.point), distance: hit.distance };
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, _chunkDWGZUSEScjs.IDENTITY_MATRIX);
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 = _chunkUTEVPQTScjs.hitTestVectorNodes.call(void 0, this.doc.nodes, p, this.tolerance());
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 = _chunkDWGZUSEScjs.applyMatrix.call(void 0, _chunkDWGZUSEScjs.rotateMatrix.call(void 0, frame.angle), { x: frame.x + frame.width / 2, y: frame.y + frame.height / 2 });
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 = _chunkUTEVPQTScjs.hitTestVectorNodes.call(void 0, this.doc.nodes, p, this.tolerance(), { entered: this.enteredGroups() });
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 = _chunkUTEVPQTScjs.nearestSegment.call(void 0, node, this.toLocal(id, p));
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 } = _chunkUTEVPQTScjs.insertAnchor.call(void 0, sp, seg.segment, seg.t);
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 ? _chunkUTEVPQTScjs.reverseSubpath.call(void 0, s) : s) };
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()), _chunkDWGZUSEScjs.translateMatrix.call(void 0, dx, dy));
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 ? _chunkDWGZUSEScjs.applyMatrix.call(void 0, _chunkDWGZUSEScjs.rotateMatrix.call(void 0, -angle), p) : p;
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, _chunkDWGZUSEScjs.scaleMatrix.call(void 0, sx, sy, origin)));
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()), _chunkDWGZUSEScjs.rotateMatrix.call(void 0, angle, drag.center));
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 = _chunkUTEVPQTScjs.boundsFromPoints.call(void 0, drag.start, p);
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 = _chunkUTEVPQTScjs.vectorNodeBounds.call(void 0, n);
6801
- return b && _chunkUTEVPQTScjs.boundsIntersect.call(void 0, b, bounds);
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) => _chunkUTEVPQTScjs.moveAnchorHandle.call(void 0, a, drag.ref.handle, local, input.alt));
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 = _chunkDWGZUSEScjs.invertMatrix.call(void 0, this.worldOf(drag.widget.ref.nodeId, drag.base));
6843
- const d = _chunkDWGZUSEScjs.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 + _chunkUTEVPQTScjs.cornerRadiusChange.call(void 0, c, d)));
6845
- this.doc = this.updateAnchors(drag.base, drag.refs, (a) => _chunkUTEVPQTScjs.setAnchorCorner.call(void 0, a, radius));
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 _chunkUTEVPQTScjs.moveAnchorHandle.call(void 0, a, side, pos, true);
6883
- return _chunkUTEVPQTScjs.moveAnchorHandle.call(void 0, { ...a, type: "symmetric" }, side, pos);
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 = _chunkUTEVPQTScjs.boundsFromPoints.call(void 0, start, { x: x2, y: y2 });
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 = _chunkUTEVPQTScjs.findVectorNode.call(void 0, drag.base.nodes, drag.ref.nodeId);
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 ? _chunkUTEVPQTScjs.nearestStrokePosition.call(void 0, g.line, [local.x, local.y], drag.ref.subpath) : null;
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 } = _chunkUTEVPQTScjs.insertWidthPoint.call(void 0, drag.profile, t, { left: src.left, right: src.right }, { step: true }));
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 = _chunkUTEVPQTScjs.setWidthPoint.call(void 0, drag.profile, drag.source, { t });
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 = _chunkUTEVPQTScjs.setWidthPoint.call(void 0, drag.profile, drag.source, patch);
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 = _chunkUTEVPQTScjs.setWidthPoint.call(void 0, profile, i, { left: Math.max(0, drag.profile[i].left + dl), right: Math.max(0, drag.profile[i].right + dr) });
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 = _chunkUTEVPQTScjs.nextVectorCornerKind.call(void 0, drag.widget.kind);
7093
- this.doc = this.updateAnchors(drag.base, drag.refs, (a) => _chunkUTEVPQTScjs.setAnchorCorner.call(void 0, a, _nullishCoalesce(_optionalChain([a, 'access', _243 => _243.corner, 'optionalAccess', _244 => _244.radius]), () => ( 0)), kind));
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 ? _chunkUTEVPQTScjs.vectorNodeBounds.call(void 0, node) : null;
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 ? _chunkUTEVPQTScjs.bezierToSubpaths.call(void 0, _chunkUTEVPQTScjs.subpathsToBezier.call(void 0, [{ anchors, closed: false }])) : node.subpaths;
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 ? _chunkUTEVPQTScjs.nearestSegment.call(void 0, node, this.toLocal(id, p)) : null;
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 _chunkUTEVPQTScjs.lineSubpath.call(void 0, { x: shape.a[0], y: shape.a[1] }, { x: shape.b[0], y: shape.b[1] });
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 _chunkUTEVPQTScjs.rectSubpath.call(void 0, shape);
7392
+ return _chunkW3GXSUSQcjs.rectSubpath.call(void 0, shape);
7393
7393
  case "ellipse":
7394
- return _chunkUTEVPQTScjs.ellipseSubpath.call(void 0, shape);
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 ? _chunkUTEVPQTScjs.sanitizeWidthProfile.call(void 0, 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 = _chunkUTEVPQTScjs.normalizeVectorPaintStacks.call(void 0, next, "shorthand");
7436
- if (fills !== void 0) next = _chunkUTEVPQTScjs.withVectorFills.call(void 0, next, _chunkUTEVPQTScjs.sanitizeVectorFills.call(void 0, _nullishCoalesce(fills, () => ( []))));
7437
- if (strokes !== void 0) next = _chunkUTEVPQTScjs.withVectorStrokes.call(void 0, next, _chunkUTEVPQTScjs.sanitizeVectorStrokes.call(void 0, _nullishCoalesce(strokes, () => ( []))));
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 = _chunkUTEVPQTScjs.locateVectorNode.call(void 0, nodes, id);
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 _chunkUTEVPQTScjs.pressureWidthProfile.call(void 0, s.map((d, i) => ({ t: d / total, pressure: pressures[i] })));
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 = _chunkUTEVPQTScjs.vectorBlendModeCss.call(void 0, node.blendMode);
7463
+ const blend = _chunkW3GXSUSQcjs.vectorBlendModeCss.call(void 0, node.blendMode);
7464
7464
  if (blend) out.blendMode = blend;
7465
- const filter = _chunkUTEVPQTScjs.vectorNodeFilterSvg.call(void 0, node, `${idPrefix}filter-${node.id}`);
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 _chunkUTEVPQTScjs.vectorPaintLayerNodes.call(void 0, node)) {
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 = _chunkUTEVPQTScjs.vectorPaintToSvg.call(void 0, l.layer.paint, `${idPrefix}${role}-${node.id}-${l.index}`, { node: l.node, ...role === "stroke" ? { role } : {} });
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 = _chunkUTEVPQTScjs.vectorBlendModeCss.call(void 0, l.layer.blendMode);
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 = _chunkUTEVPQTScjs.vectorStrokeSvgParts.call(void 0, l.node, `${idPrefix}clip-${node.id}-${l.index}`);
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 = _chunkUTEVPQTScjs.expandVectorAppearance.call(void 0, stored);
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 = _chunkUTEVPQTScjs.isVectorMaskGroup.call(void 0, node) ? renderMask(node, defs, filters, idPrefix) : null;
7503
- const list = _chunkUTEVPQTScjs.isVectorMaskGroup.call(void 0, node) ? node.children.slice(1) : node.children;
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: _chunkUTEVPQTScjs.vectorPathData.call(void 0, node),
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 (_chunkUTEVPQTScjs.needsVectorPaintLayers.call(void 0, node)) {
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 = _chunkUTEVPQTScjs.vectorPaintToSvg.call(void 0, node.fill, `${idPrefix}fill-${node.id}`, { node });
7542
- const stroke = _chunkUTEVPQTScjs.vectorPaintToSvg.call(void 0, node.stroke, `${idPrefix}stroke-${node.id}`, { node, role: "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" ? _chunkUTEVPQTScjs.vectorStrokeSvgParts.call(void 0, node, `${idPrefix}clip-${node.id}`) : void 0;
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 (!_chunkUTEVPQTScjs.isVectorMaskActive.call(void 0, group)) return null;
7555
- const data = _chunkUTEVPQTScjs.vectorMaskRenderData.call(void 0, group, `${idPrefix}mask-${group.id}`, `${idPrefix}mask-filter-${group.id}`);
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(_chunkUTEVPQTScjs.vectorParentMatrix.call(void 0, state.document.nodes, node.id), () => ( _chunkDWGZUSEScjs.IDENTITY_MATRIX));
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 [_chunkUTEVPQTScjs.vectorPathWorldBezier.call(void 0, node, parent, { effects: false })];
7588
- const m = _chunkDWGZUSEScjs.multiplyMatrices.call(void 0, _chunkUTEVPQTScjs.nodeMatrix.call(void 0, node), parent);
7589
- if ((_chunkUTEVPQTScjs.hasOwnVectorAppearance.call(void 0, node) || _chunkUTEVPQTScjs.isVectorMaskActive.call(void 0, node)) && !entered.has(node.id)) return [_chunkXGD3FSNCcjs.transformBezierPath.call(void 0, _chunkUTEVPQTScjs.vectorAppearanceOutline.call(void 0, node), m)];
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 _chunkUTEVPQTScjs.vectorEnteredGroups.call(void 0, state.document.nodes, state.editingId ? [...state.selection, state.editingId] : state.selection);
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 = _chunkUTEVPQTScjs.findVectorNode.call(void 0, doc.nodes, id);
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, () => ( _chunkUTEVPQTScjs.inferAnchorType.call(void 0, a))), selected: selected(ref), hovered: sameAnchor(_optionalChain([state, 'access', _273 => _273.hover, 'optionalAccess', _274 => _274.anchor]), ref), closes };
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 = _chunkUTEVPQTScjs.findVectorNode.call(void 0, doc.nodes, state.pen.nodeId);
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" ? _chunkUTEVPQTScjs.findVectorNode.call(void 0, doc.nodes, it.nodeId) ? _chunkUTEVPQTScjs.vectorNodeBounds.call(void 0, _chunkUTEVPQTScjs.findVectorNode.call(void 0, doc.nodes, it.nodeId)) : null : state.selectionFrame;
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 = _chunkDWGZUSEScjs.multiplyMatrices.call(void 0, _chunkUTEVPQTScjs.nodeMatrix.call(void 0, n), parent);
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 || !_chunkUTEVPQTScjs.isVectorMaskGroup.call(void 0, n)) continue;
7774
- const summary = _chunkUTEVPQTScjs.vectorMaskSummary.call(void 0, n);
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, _chunkDWGZUSEScjs.IDENTITY_MATRIX);
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 = _chunkDWGZUSEScjs.multiplyMatrices.call(void 0, target.world, [v.zoom, 0, 0, v.zoom, v.x, v.y]);
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 = _chunkDWGZUSEScjs.warpMeshGridCurves.call(void 0, mesh).map((c) => {
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 = _chunkDWGZUSEScjs.warpMeshEditPoints.call(void 0, mesh);
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
- ..._chunkDWGZUSEScjs.WARP_STYLES.map((value) => ({ value, label: _chunkDWGZUSEScjs.WARP_STYLE_LABELS[value] })),
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) => _chunkUTEVPQTScjs.findVectorNode.call(void 0, state.document.nodes, id)).filter((n) => !!n && !n.blendStep);
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
- _chunkUTEVPQTScjs.walkVectorNodes.call(void 0, state.document.nodes, (n) => order.set(n.id, order.size));
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 = _chunkUTEVPQTScjs.isCentredVectorGradient.call(void 0, a.gradient.type);
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 = _chunkUTEVPQTScjs.findVectorNode.call(void 0, state.document.nodes, id);
7863
- const group = isVectorBlendGroup(node) ? node : _optionalChain([_chunkUTEVPQTScjs.locateVectorNode.call(void 0, state.document.nodes, id), 'optionalAccess', _325 => _325.parent]);
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 = _chunkDWGZUSEScjs.multiplyMatrices.call(void 0, _nullishCoalesce(_chunkUTEVPQTScjs.vectorWorldMatrix.call(void 0, doc.nodes, g.id), () => ( _chunkDWGZUSEScjs.IDENTITY_MATRIX)), view);
7880
- const d = _chunkXGD3FSNCcjs.bezierPathToSvg.call(void 0, _chunkXGD3FSNCcjs.transformBezierPath.call(void 0, _chunkUTEVPQTScjs.subpathsToBezier.call(void 0, [s.spine], { corners: false }), m), { precision: 2 });
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 ? _chunkUTEVPQTScjs.findVectorNode.call(void 0, doc.nodes, state.blendStart.nodeId) : void 0;
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]) ? _chunkUTEVPQTScjs.findVectorNode.call(void 0, doc.nodes, state.hover.nodeId) : void 0;
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 = _chunkUTEVPQTScjs.findVectorNode.call(void 0, doc.nodes, id);
7910
- return !!node && !node.blendStep && !node.locked && !state.selection.includes(_nullishCoalesce(_optionalChain([_chunkUTEVPQTScjs.locateVectorNode.call(void 0, doc.nodes, id), 'optionalAccess', _332 => _332.parent, 'optionalAccess', _333 => _333.id]), () => ( "")));
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([_chunkUTEVPQTScjs.locateVectorNode.call(void 0, doc.nodes, id), 'optionalAccess', _334 => _334.parent, 'optionalAccess', _335 => _335.id]), () => ( null))));
7913
- const paths = roots.filter((id) => _optionalChain([_chunkUTEVPQTScjs.findVectorNode.call(void 0, doc.nodes, id), 'optionalAccess', _336 => _336.type]) === "path" && !isVectorBlendGroup(_optionalChain([_chunkUTEVPQTScjs.locateVectorNode.call(void 0, doc.nodes, id), 'optionalAccess', _337 => _337.parent])));
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 = _chunkUTEVPQTScjs.findVectorNode.call(void 0, state.document.nodes, id);
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 = _chunkUTEVPQTScjs.findVectorNode.call(void 0, state.document.nodes, r.nodeId);
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 _chunkUTEVPQTScjs.vectorCorners.call(void 0, p.subpaths)) {
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: _chunkUTEVPQTScjs.widthProfilePresetId.call(void 0, profileOf(first)),
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 = _chunkUTEVPQTScjs.sanitizeWidthProfile.call(void 0, p.strokeWidthProfile);
8041
- return points.length && _chunkUTEVPQTScjs.widthProfilePresetId.call(void 0, points) !== "uniform" ? points : null;
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 = _chunkUTEVPQTScjs.findVectorNode.call(void 0, state.document.nodes, id);
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 = _chunkUTEVPQTScjs.vectorTargetPaint.call(void 0, paths[0], target, _nullishCoalesce(layer, () => ( null)));
8073
- const gradient = _chunkUTEVPQTScjs.isVectorGradient.call(void 0, paint) ? paint : null;
8074
- const sorted = gradient ? _chunkUTEVPQTScjs.sortedVectorGradientStops.call(void 0, 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, ${_chunkUTEVPQTScjs.expandVectorGradientStops.call(void 0, gradient).map((s) => {
8079
- const c = _chunkUTEVPQTScjs.parseVectorColor.call(void 0, s.color);
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(_chunkUTEVPQTScjs.vectorTargetPaint.call(void 0, p, target, _nullishCoalesce(layer, () => ( null))), () => ( null))) !== JSON.stringify(_nullishCoalesce(paint, () => ( null))))
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 = _chunkUTEVPQTScjs.VECTOR_EFFECT_TYPES.map((type) => ({ type, label: _chunkUTEVPQTScjs.VECTOR_EFFECT_LABELS[type] }));
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) => _chunkUTEVPQTScjs.findVectorNode.call(void 0, state.document.nodes, id)).filter((n) => !!n && !n.blendStep);
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(_chunkUTEVPQTScjs.VECTOR_EFFECT_LABELS[e.type], () => ( e.type)),
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(_chunkUTEVPQTScjs.VECTOR_EFFECT_PARAM_SPECS[e.type], () => ( []))
8136
+ specs: e.type === "envelope" ? [] : _nullishCoalesce(_chunkW3GXSUSQcjs.VECTOR_EFFECT_PARAM_SPECS[e.type], () => ( []))
8137
8137
  })),
8138
- expandable: nodes.some(_chunkUTEVPQTScjs.hasVectorAppearance)
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 (_chunkUTEVPQTScjs.isVectorGradient.call(void 0, paint)) {
8144
- return `linear-gradient(to right, ${_chunkUTEVPQTScjs.expandVectorGradientStops.call(void 0, paint).map((s) => {
8145
- const c = _chunkUTEVPQTScjs.parseVectorColor.call(void 0, s.color);
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) => _chunkUTEVPQTScjs.findVectorNode.call(void 0, state.document.nodes, id)).filter((n) => !!n && !n.blendStep);
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: _chunkUTEVPQTScjs.isVectorGradient.call(void 0, l.paint),
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 ? _chunkUTEVPQTScjs.vectorFills.call(void 0, first) : [];
8175
- const strokes = first ? _chunkUTEVPQTScjs.vectorStrokes.call(void 0, 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(_chunkUTEVPQTScjs.vectorFills),
8186
- strokes: !!first && !same(_chunkUTEVPQTScjs.vectorStrokes),
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(_chunkUTEVPQTScjs.VECTOR_FILTER_LABELS[f.type], () => ( f.type)),
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(_chunkUTEVPQTScjs.VECTOR_FILTER_PARAM_SPECS[f.type], () => ( []))
8196
+ specs: _nullishCoalesce(_chunkW3GXSUSQcjs.VECTOR_FILTER_PARAM_SPECS[f.type], () => ( []))
8197
8197
  }))
8198
8198
  };
8199
8199
  }
8200
- var VECTOR_BLEND_MODE_MENU = _chunkUTEVPQTScjs.VECTOR_BLEND_MODES.map((mode) => ({ mode, label: _chunkUTEVPQTScjs.VECTOR_BLEND_MODE_LABELS[mode] }));
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) => _chunkUTEVPQTScjs.locateVectorNode.call(void 0, doc.nodes, 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 = _chunkUTEVPQTScjs.isVectorMaskGroup.call(void 0, node) ? node : _chunkUTEVPQTScjs.isVectorMaskGroup.call(void 0, _optionalChain([first, 'optionalAccess', _363 => _363.parent])) ? first.parent : null;
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 = _chunkUTEVPQTScjs.vectorMaskSummary.call(void 0, owner);
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 && !_chunkUTEVPQTScjs.VECTOR_BLEND_SPACINGS.includes(params.spacing)) fail(`Unknown blend spacing "${params.spacing}".`);
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: _chunkUTEVPQTScjs.VECTOR_GRADIENT_TYPES, description: "linear, radial, conic (an angle sweep), reflected (linear mirrored about the start) or diamond." },
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: _chunkUTEVPQTScjs.VECTOR_GRADIENT_SPREADS, description: "What paints past the ends: pad (default), reflect or repeat." },
8302
- interpolation: { type: "string", enum: _chunkUTEVPQTScjs.VECTOR_GRADIENT_INTERPOLATIONS, description: "Colour mixing space: srgb (default), linear (light) or oklab." },
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: _chunkUTEVPQTScjs.VECTOR_STROKE_GRADIENT_MODES, description: "On strokes: within (default, like a fill), along the path or across it." }
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: _chunkUTEVPQTScjs.VECTOR_BLEND_MODES,
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: [..._chunkUTEVPQTScjs.VECTOR_ARROWHEADS, null], description: "Head at the start of an open path, or null for none." },
8328
- endArrow: { type: ["string", "null"], enum: [..._chunkUTEVPQTScjs.VECTOR_ARROWHEADS, null], description: "Head at the end of an open path, or null for none." },
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(_chunkUTEVPQTScjs.sanitizeVectorGradient.call(void 0, paint), () => ( fail(`${where} is not a valid gradient: give a type and at least one stop { offset, color }.`)));
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 && !_chunkUTEVPQTScjs.isVectorBlendMode.call(void 0, layer.blendMode)) fail(`${key}[${i}].blendMode "${String(layer.blendMode)}" is not one of: ${_chunkUTEVPQTScjs.VECTOR_BLEND_MODES.join(", ")}.`);
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(_chunkUTEVPQTScjs.vectorParentMatrix.call(void 0, state.document.nodes, n.id), () => ( _chunkDWGZUSEScjs.IDENTITY_MATRIX));
8393
- const b = _chunkUTEVPQTScjs.vectorNodeBounds.call(void 0, n, parent);
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(_chunkUTEVPQTScjs.vectorNodeRotation.call(void 0, n, parent) * 100) / 100,
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: _chunkUTEVPQTScjs.vectorPathData.call(void 0, n, 2) } : { children: n.children.length },
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
- ..._chunkUTEVPQTScjs.isVectorMaskGroup.call(void 0, n) ? { mask: _chunkUTEVPQTScjs.vectorMaskSummary.call(void 0, n) } : {}
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: _chunkUTEVPQTScjs.vectorFills.call(void 0, n), strokes: _chunkUTEVPQTScjs.vectorStrokes.call(void 0, n), fillRule: _nullishCoalesce(n.fillRule, () => ( "nonzero")) } : {},
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" ? _chunkUTEVPQTScjs.vectorFills.call(void 0, pathOf(id)) : _chunkUTEVPQTScjs.vectorStrokes.call(void 0, pathOf(id));
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: _chunkUTEVPQTScjs.vectorFills.call(void 0, pathOf(id)) } : { id, strokes: _chunkUTEVPQTScjs.vectorStrokes.call(void 0, pathOf(id)) };
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 = _chunkUTEVPQTScjs.vectorFilterParamKeys.call(void 0, type);
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(_chunkUTEVPQTScjs.vectorMaskSummary.call(void 0, controller.getNode(id)), () => ( fail(`"${id}" is not a mask group.`))) });
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) => _chunkUTEVPQTScjs.isVectorMaskGroup.call(void 0, 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: _chunkUTEVPQTScjs.VECTOR_FILTER_TYPES, description: "The filter type." },
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 (!_chunkUTEVPQTScjs.VECTOR_FILTER_TYPES.includes(params.type)) fail(`Unknown filter type "${params.type}"; use one of ${_chunkUTEVPQTScjs.VECTOR_FILTER_TYPES.join(", ")}.`);
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: _chunkUTEVPQTScjs.VECTOR_CORNER_KINDS },
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 && !_chunkUTEVPQTScjs.VECTOR_GRADIENT_TYPES.includes(patch.type)) fail(`Unknown gradient type "${patch.type}".`);
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: _chunkUTEVPQTScjs.VECTOR_CORNER_KINDS }, ids: IDS, anchors: ANCHORS } },
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: _chunkUTEVPQTScjs.VECTOR_WIDTH_PRESET_IDS },
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: _chunkDWGZUSEScjs.WARP_STYLES },
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 && !_chunkDWGZUSEScjs.WARP_STYLES.includes(params.preset)) fail(`Unknown warp preset "${params.preset}".`);
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 (!_chunkDWGZUSEScjs.isValidWarpMesh.call(void 0, mesh)) fail(`A ${columns} \xD7 ${rows} mesh needs ${(3 * columns + 1) * (3 * rows + 1)} finite points.`);
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: _chunkUTEVPQTScjs.VECTOR_EFFECT_TYPES },
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 (!_chunkUTEVPQTScjs.VECTOR_EFFECT_TYPES.includes(params.type)) fail(`Unknown effect type "${params.type}".`);
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: [..._chunkUTEVPQTScjs.VECTOR_PATHFINDER_OPERATIONS] }, ids: IDS }, required: ["operation"] },
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 (!_chunkUTEVPQTScjs.VECTOR_PATHFINDER_OPERATIONS.includes(params.operation)) fail(`Unknown Pathfinder operation "${params.operation}".`);
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: [..._chunkUTEVPQTScjs.VECTOR_TOOLS] } }, required: ["tool"] },
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