@pixerate/editor 0.161.0 → 0.162.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (109) hide show
  1. package/dist/agent/index.cjs +36 -35
  2. package/dist/agent/index.js +7 -6
  3. package/dist/animation/index.cjs +5 -4
  4. package/dist/animation/index.js +4 -3
  5. package/dist/animation-editor/index.cjs +63 -62
  6. package/dist/animation-editor/index.js +7 -6
  7. package/dist/{brushstrokeRender-Q4LI22QV.js → brushstrokeRender-7LXCU7PD.js} +2 -2
  8. package/dist/{brushstrokeRender-5WANQIG4.cjs → brushstrokeRender-VO4ZTWVA.cjs} +5 -5
  9. package/dist/canvas/index.cjs +40 -39
  10. package/dist/canvas/index.js +7 -6
  11. package/dist/chart/index.cjs +88 -87
  12. package/dist/chart/index.js +7 -6
  13. package/dist/{chunk-LQLZHP6F.js → chunk-36OKQDCF.js} +7 -4
  14. package/dist/{chunk-AKDWAWSY.cjs → chunk-3IHNXRUV.cjs} +45 -45
  15. package/dist/{chunk-72BGL3I2.js → chunk-3VLOOO3G.js} +1 -1
  16. package/dist/{chunk-TVO6W2Q6.cjs → chunk-4NGVHHJB.cjs} +17 -17
  17. package/dist/chunk-4VU4CP7R.js +769 -0
  18. package/dist/{chunk-MHEXLG3M.cjs → chunk-5AARIS3R.cjs} +37 -37
  19. package/dist/{chunk-DBIVICAO.js → chunk-7CKPUUN4.js} +1 -1
  20. package/dist/{chunk-57JLBGJ5.cjs → chunk-7YBDRJXT.cjs} +8 -8
  21. package/dist/{chunk-KY3FYKP3.js → chunk-BQWGN5WH.js} +1 -1
  22. package/dist/{chunk-LEUZ4FRC.cjs → chunk-CIPIESX4.cjs} +3 -3
  23. package/dist/chunk-CJE5MOIS.js +347 -0
  24. package/dist/{chunk-5QBRAIVK.js → chunk-CX6JLDFC.js} +3 -3
  25. package/dist/{chunk-R3QY7PPL.js → chunk-DTSTNRPH.js} +1 -1
  26. package/dist/{chunk-6LUYFHHN.cjs → chunk-EQ46F75O.cjs} +51 -51
  27. package/dist/{chunk-UKCJ43YL.cjs → chunk-ES3UEVUT.cjs} +130 -898
  28. package/dist/{chunk-UM3RPYC5.js → chunk-EVPZ5IKN.js} +1 -1
  29. package/dist/{chunk-XNQ5EFB4.cjs → chunk-EY22AY6R.cjs} +16 -16
  30. package/dist/chunk-FKUKJ3XA.cjs +347 -0
  31. package/dist/{chunk-YABNLNY7.js → chunk-GLMP22FT.js} +3 -3
  32. package/dist/{chunk-SUF6WRXR.cjs → chunk-GTELFJRE.cjs} +2 -2
  33. package/dist/{chunk-AY65VQSU.js → chunk-H3OEM3Q2.js} +1 -1
  34. package/dist/{chunk-4YWAEV4W.cjs → chunk-HDGBM7EA.cjs} +26 -26
  35. package/dist/{chunk-H5XX4KHB.js → chunk-HLOKB7WW.js} +5 -3
  36. package/dist/{chunk-QMI5HZWA.cjs → chunk-JCXMJUQO.cjs} +5 -5
  37. package/dist/{chunk-WPPJH6X4.cjs → chunk-LL3H5XUH.cjs} +6 -4
  38. package/dist/{chunk-4T44CJ5K.cjs → chunk-NA4UVVJ4.cjs} +15 -15
  39. package/dist/{chunk-Q6PA362P.js → chunk-NO5QQDHZ.js} +2 -2
  40. package/dist/{chunk-3YDQLQH2.cjs → chunk-PA3IMPPS.cjs} +81 -81
  41. package/dist/{chunk-WNAAWLZ5.js → chunk-QY4KUDMY.js} +2 -2
  42. package/dist/{chunk-AA34BA7G.js → chunk-QYZGBVNC.js} +30 -798
  43. package/dist/chunk-S6X2QRVU.cjs +769 -0
  44. package/dist/{chunk-6UPGM3JB.js → chunk-SET6KJOP.js} +2 -2
  45. package/dist/{chunk-GNK7SESQ.cjs → chunk-V7GWZIZK.cjs} +7 -4
  46. package/dist/{chunk-EYVVIZJ3.cjs → chunk-WTW7QRTS.cjs} +1 -1
  47. package/dist/{chunk-SSCL7QQ4.js → chunk-XDCFJEU7.js} +2 -2
  48. package/dist/{chunk-JGKCC5OF.cjs → chunk-YQ5C5BVK.cjs} +10 -9
  49. package/dist/{chunk-A5UCR2TO.js → chunk-YXKLVD56.js} +10 -9
  50. package/dist/{chunk-45XXVHVG.js → chunk-ZZGPYNS2.js} +1 -1
  51. package/dist/color/index.cjs +6 -2
  52. package/dist/color/index.d.cts +1 -0
  53. package/dist/color/index.d.ts +1 -0
  54. package/dist/color/index.js +28 -24
  55. package/dist/color/suggest.d.cts +12 -0
  56. package/dist/color/suggest.d.ts +12 -0
  57. package/dist/effects/index.cjs +37 -13
  58. package/dist/effects/index.js +29 -5
  59. package/dist/effects/ui.d.cts +20 -3
  60. package/dist/effects/ui.d.ts +20 -3
  61. package/dist/export/index.cjs +6 -5
  62. package/dist/export/index.js +5 -4
  63. package/dist/extensions/index.cjs +9 -8
  64. package/dist/extensions/index.js +8 -7
  65. package/dist/gradient/index.cjs +28 -26
  66. package/dist/gradient/index.js +7 -5
  67. package/dist/image-editor/index.cjs +641 -640
  68. package/dist/image-editor/index.js +7 -6
  69. package/dist/index.cjs +15 -14
  70. package/dist/index.js +9 -8
  71. package/dist/paint/index.cjs +2 -2
  72. package/dist/paint/index.js +1 -1
  73. package/dist/paint-editor/index.cjs +136 -135
  74. package/dist/paint-editor/index.js +8 -7
  75. package/dist/typography/accessibility.d.cts +44 -0
  76. package/dist/typography/accessibility.d.ts +44 -0
  77. package/dist/typography/catalog.d.cts +98 -0
  78. package/dist/typography/catalog.d.ts +98 -0
  79. package/dist/typography/index.cjs +1099 -0
  80. package/dist/typography/index.d.cts +16 -0
  81. package/dist/typography/index.d.ts +16 -0
  82. package/dist/typography/index.js +1099 -0
  83. package/dist/typography/metrics.d.cts +31 -0
  84. package/dist/typography/metrics.d.ts +31 -0
  85. package/dist/typography/picker.d.cts +132 -0
  86. package/dist/typography/picker.d.ts +132 -0
  87. package/dist/typography/registry.d.cts +66 -0
  88. package/dist/typography/registry.d.ts +66 -0
  89. package/dist/typography/scale.d.cts +62 -0
  90. package/dist/typography/scale.d.ts +62 -0
  91. package/dist/typography/segment.d.cts +26 -0
  92. package/dist/typography/segment.d.ts +26 -0
  93. package/dist/typography/stack.d.cts +26 -0
  94. package/dist/typography/stack.d.ts +26 -0
  95. package/dist/typography/tools.d.cts +34 -0
  96. package/dist/typography/tools.d.ts +34 -0
  97. package/dist/typography/types.d.cts +96 -0
  98. package/dist/typography/types.d.ts +96 -0
  99. package/dist/typography/weight.d.cts +13 -0
  100. package/dist/typography/weight.d.ts +13 -0
  101. package/dist/vector/index.cjs +951 -950
  102. package/dist/vector/index.js +6 -5
  103. package/dist/video-editor/index.cjs +5 -4
  104. package/dist/video-editor/index.js +4 -3
  105. package/package.json +13 -3
  106. package/skills/README.md +1 -0
  107. package/skills/pixerate-chart/SKILL.md +92 -9
  108. package/skills/pixerate-paint-editor/SKILL.md +0 -2
  109. package/skills/pixerate-typography/SKILL.md +91 -0
@@ -1,6 +1,6 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; } var _class;
2
2
 
3
- var _chunkMHEXLG3Mcjs = require('../chunk-MHEXLG3M.cjs');
3
+ var _chunk5AARIS3Rcjs = require('../chunk-5AARIS3R.cjs');
4
4
 
5
5
 
6
6
 
@@ -31,8 +31,8 @@ var _chunkEBDZWIOPcjs = require('../chunk-EBDZWIOP.cjs');
31
31
 
32
32
 
33
33
 
34
- var _chunkQMI5HZWAcjs = require('../chunk-QMI5HZWA.cjs');
35
- require('../chunk-JGKCC5OF.cjs');
34
+ var _chunkJCXMJUQOcjs = require('../chunk-JCXMJUQO.cjs');
35
+ require('../chunk-YQ5C5BVK.cjs');
36
36
  require('../chunk-CVFAAZXE.cjs');
37
37
 
38
38
 
@@ -72,7 +72,7 @@ var _chunkFJ2MSI43cjs = require('../chunk-FJ2MSI43.cjs');
72
72
  var _chunk7B5GTJXBcjs = require('../chunk-7B5GTJXB.cjs');
73
73
 
74
74
 
75
- var _chunkSUF6WRXRcjs = require('../chunk-SUF6WRXR.cjs');
75
+ var _chunkGTELFJREcjs = require('../chunk-GTELFJRE.cjs');
76
76
 
77
77
 
78
78
 
@@ -84,13 +84,14 @@ var _chunkSUF6WRXRcjs = require('../chunk-SUF6WRXR.cjs');
84
84
  var _chunkDWJJI6RTcjs = require('../chunk-DWJJI6RT.cjs');
85
85
 
86
86
 
87
- var _chunkLEUZ4FRCcjs = require('../chunk-LEUZ4FRC.cjs');
87
+ var _chunkCIPIESX4cjs = require('../chunk-CIPIESX4.cjs');
88
88
 
89
89
 
90
90
 
91
91
 
92
92
  var _chunkA6QWKBJPcjs = require('../chunk-A6QWKBJP.cjs');
93
- require('../chunk-UKCJ43YL.cjs');
93
+ require('../chunk-ES3UEVUT.cjs');
94
+ require('../chunk-S6X2QRVU.cjs');
94
95
  require('../chunk-IPJ3TEYR.cjs');
95
96
 
96
97
  // src/animation-editor/types.ts
@@ -595,7 +596,7 @@ function smoothMotionTimes(points, start, duration, pacing = "even") {
595
596
  function motionTextLayout(nodes, id) {
596
597
  const group = _optionalChain([nodes, 'access', _5 => _5.get, 'call', _6 => _6(id), 'optionalAccess', _7 => _7.node]);
597
598
  if (!group || group.type !== "group") return null;
598
- const letters = _chunkQMI5HZWAcjs.collectPathNodes.call(void 0, group).map((p) => ({ id: p.id, b: _optionalChain([nodes, 'access', _8 => _8.get, 'call', _9 => _9(p.id), 'optionalAccess', _10 => _10.bounds]) })).filter((l) => !!l.b && l.b.width + l.b.height > 0);
599
+ const letters = _chunkJCXMJUQOcjs.collectPathNodes.call(void 0, group).map((p) => ({ id: p.id, b: _optionalChain([nodes, 'access', _8 => _8.get, 'call', _9 => _9(p.id), 'optionalAccess', _10 => _10.bounds]) })).filter((l) => !!l.b && l.b.width + l.b.height > 0);
599
600
  if (!letters.length) return null;
600
601
  const lines = [];
601
602
  for (const l of [...letters].sort((a, c) => a.b.y + a.b.height / 2 - (c.b.y + c.b.height / 2))) {
@@ -680,21 +681,21 @@ function indexMotionNodes(nodes) {
680
681
  const out = /* @__PURE__ */ new Map();
681
682
  const walk = (list, parentWorld, ancestors) => {
682
683
  for (const node of list) {
683
- const local = _chunkQMI5HZWAcjs.vectorNodeBounds.call(void 0, node);
684
- const bounds = _chunkQMI5HZWAcjs.vectorNodeBounds.call(void 0, node, parentWorld);
684
+ const local = _chunkJCXMJUQOcjs.vectorNodeBounds.call(void 0, node);
685
+ const bounds = _chunkJCXMJUQOcjs.vectorNodeBounds.call(void 0, node, parentWorld);
685
686
  const center = local ? { x: local.x + local.width / 2, y: local.y + local.height / 2 } : { x: 0, y: 0 };
686
687
  if (!out.has(node.id)) out.set(node.id, { node, ancestors, parentWorld, center, bounds, box: local });
687
- if (node.type === "group") walk(node.children, _chunkQMI5HZWAcjs.multiplyMatrices.call(void 0, _chunkQMI5HZWAcjs.nodeMatrix.call(void 0, node), parentWorld), [...ancestors, node.id]);
688
+ if (node.type === "group") walk(node.children, _chunkJCXMJUQOcjs.multiplyMatrices.call(void 0, _chunkJCXMJUQOcjs.nodeMatrix.call(void 0, node), parentWorld), [...ancestors, node.id]);
688
689
  }
689
690
  };
690
- walk(nodes, _chunkQMI5HZWAcjs.IDENTITY_MATRIX, []);
691
+ walk(nodes, _chunkJCXMJUQOcjs.IDENTITY_MATRIX, []);
691
692
  indexCache.set(nodes, out);
692
693
  return out;
693
694
  }
694
695
  var solid = (paint) => typeof paint === "string" && paint !== "none" ? paint : void 0;
695
696
  function firstPaint(node, key) {
696
697
  if (node.type === "path") return solid(node[key]);
697
- for (const p of _chunkQMI5HZWAcjs.collectPathNodes.call(void 0, node)) {
698
+ for (const p of _chunkJCXMJUQOcjs.collectPathNodes.call(void 0, node)) {
698
699
  const s = solid(p[key]);
699
700
  if (s) return s;
700
701
  }
@@ -702,7 +703,7 @@ function firstPaint(node, key) {
702
703
  }
703
704
  function strokeReach(node) {
704
705
  let reach = 0;
705
- for (const p of node.type === "path" ? [node] : _chunkQMI5HZWAcjs.collectPathNodes.call(void 0, node)) {
706
+ for (const p of node.type === "path" ? [node] : _chunkJCXMJUQOcjs.collectPathNodes.call(void 0, node)) {
706
707
  if (p.stroke == null || p.stroke === "none") continue;
707
708
  const width = _nullishCoalesce(p.strokeWidth, () => ( 1));
708
709
  reach = Math.max(reach, p.strokeAlign === "outside" ? width : p.strokeAlign === "inside" ? 0 : width / 2);
@@ -772,7 +773,7 @@ function motionRestValue(entry, property, artwork) {
772
773
  case "stroke":
773
774
  return _nullishCoalesce((node && firstPaint(node, property)), () => ( "transparent"));
774
775
  case "strokeWidth": {
775
- const path = _optionalChain([node, 'optionalAccess', _13 => _13.type]) === "path" ? node : node ? _chunkQMI5HZWAcjs.collectPathNodes.call(void 0, node)[0] : void 0;
776
+ const path = _optionalChain([node, 'optionalAccess', _13 => _13.type]) === "path" ? node : node ? _chunkJCXMJUQOcjs.collectPathNodes.call(void 0, node)[0] : void 0;
776
777
  return _nullishCoalesce(_optionalChain([path, 'optionalAccess', _14 => _14.strokeWidth]), () => ( 1));
777
778
  }
778
779
  case "shape":
@@ -796,7 +797,7 @@ function interpolateMotionValue(from, to, u) {
796
797
  if (u <= 0) return from;
797
798
  if (u >= 1) return to;
798
799
  if (typeof from === "string" && typeof to === "string") {
799
- const mixed = _chunkLEUZ4FRCcjs.mixColorsOklab.call(void 0, from, to, u);
800
+ const mixed = _chunkCIPIESX4cjs.mixColorsOklab.call(void 0, from, to, u);
800
801
  if (mixed !== null) return mixed;
801
802
  }
802
803
  return u < 1 ? from : to;
@@ -883,12 +884,12 @@ function resolveMotionCamera(camera, scene) {
883
884
  const r = camera;
884
885
  return { x: r.x, y: r.y, width: r.width, height: r.height };
885
886
  }
886
- function motionPathLength(node, parentWorld = _chunkQMI5HZWAcjs.IDENTITY_MATRIX) {
887
+ function motionPathLength(node, parentWorld = _chunkJCXMJUQOcjs.IDENTITY_MATRIX) {
887
888
  let longest = 0;
888
- const paths = node.type === "path" ? [node] : _chunkQMI5HZWAcjs.collectPathNodes.call(void 0, node);
889
+ const paths = node.type === "path" ? [node] : _chunkJCXMJUQOcjs.collectPathNodes.call(void 0, node);
889
890
  for (const p of paths) {
890
891
  try {
891
- longest = Math.max(longest, _chunkGF2RBSDMcjs.bezierPathLength.call(void 0, _chunkQMI5HZWAcjs.vectorPathWorldBezier.call(void 0, p, parentWorld, { effects: false })));
892
+ longest = Math.max(longest, _chunkGF2RBSDMcjs.bezierPathLength.call(void 0, _chunkJCXMJUQOcjs.vectorPathWorldBezier.call(void 0, p, parentWorld, { effects: false })));
892
893
  } catch (e2) {
893
894
  }
894
895
  }
@@ -1141,12 +1142,12 @@ function compileMotionScene(scene) {
1141
1142
  const order2 = _nullishCoalesce(o.order, () => ( "together"));
1142
1143
  const pace = _nullishCoalesce(o.pace, () => ( "time"));
1143
1144
  if (order2 === "together" && pace === "time") return null;
1144
- const paths = entry.node.type === "path" ? [entry.node] : _chunkQMI5HZWAcjs.collectPathNodes.call(void 0, entry.node);
1145
+ const paths = entry.node.type === "path" ? [entry.node] : _chunkJCXMJUQOcjs.collectPathNodes.call(void 0, entry.node);
1145
1146
  let list = paths.map((p) => {
1146
1147
  const at = nodes.get(p.id);
1147
1148
  let first = { x: 0, y: 0 };
1148
1149
  try {
1149
- const m = _chunkQMI5HZWAcjs.vectorPathWorldBezier.call(void 0, p, _nullishCoalesce(_optionalChain([at, 'optionalAccess', _41 => _41.parentWorld]), () => ( _chunkQMI5HZWAcjs.IDENTITY_MATRIX)), { effects: false })[0];
1150
+ const m = _chunkJCXMJUQOcjs.vectorPathWorldBezier.call(void 0, p, _nullishCoalesce(_optionalChain([at, 'optionalAccess', _41 => _41.parentWorld]), () => ( _chunkJCXMJUQOcjs.IDENTITY_MATRIX)), { effects: false })[0];
1150
1151
  if (m && m.type === "M") first = { x: m.x, y: m.y };
1151
1152
  } catch (e3) {
1152
1153
  }
@@ -1258,17 +1259,17 @@ function compileMotionScene(scene) {
1258
1259
  let dx = _nullishCoalesce(_optionalChain([command3, 'access', _44 => _44.by, 'optionalAccess', _45 => _45.x]), () => ( 0));
1259
1260
  let dy = _nullishCoalesce(_optionalChain([command3, 'access', _46 => _46.by, 'optionalAccess', _47 => _47.y]), () => ( 0));
1260
1261
  if (command3.to) {
1261
- const inv = _chunkQMI5HZWAcjs.invertMatrix.call(void 0, entry.parentWorld);
1262
- const target = _chunkQMI5HZWAcjs.applyMatrix.call(void 0, inv, command3.to);
1262
+ const inv = _chunkJCXMJUQOcjs.invertMatrix.call(void 0, entry.parentWorld);
1263
+ const target = _chunkJCXMJUQOcjs.applyMatrix.call(void 0, inv, command3.to);
1263
1264
  dx = target.x - (entry.center.x + num2("x"));
1264
1265
  dy = target.y - (entry.center.y + num2("y"));
1265
1266
  }
1266
1267
  if (_optionalChain([command3, 'access', _48 => _48.via, 'optionalAccess', _49 => _49.length])) {
1267
- const inv = _chunkQMI5HZWAcjs.invertMatrix.call(void 0, entry.parentWorld);
1268
+ const inv = _chunkJCXMJUQOcjs.invertMatrix.call(void 0, entry.parentWorld);
1268
1269
  const x0 = num2("x");
1269
1270
  const y0 = num2("y");
1270
1271
  const add = command3.blend === "add";
1271
- const offsets = [{ x: 0, y: 0 }, ...command3.via.map((p) => _chunkQMI5HZWAcjs.applyMatrix.call(void 0, inv, p)).map((p) => ({ x: p.x - entry.center.x - x0, y: p.y - entry.center.y - y0 })), { x: dx, y: dy }];
1272
+ const offsets = [{ x: 0, y: 0 }, ...command3.via.map((p) => _chunkJCXMJUQOcjs.applyMatrix.call(void 0, inv, p)).map((p) => ({ x: p.x - entry.center.x - x0, y: p.y - entry.center.y - y0 })), { x: dx, y: dy }];
1272
1273
  const times = _optionalChain([command3, 'access', _50 => _50.times, 'optionalAccess', _51 => _51.length]) === command3.via.length ? [start, ...command3.times.map((f) => start + f * (end - start)), end] : smoothMotionTimes(offsets, start, end - start, _nullishCoalesce(command3.pacing, () => ( "even")));
1273
1274
  for (const axis of ["x", "y"]) {
1274
1275
  const base = add ? 0 : axis === "x" ? x0 : y0;
@@ -1411,13 +1412,13 @@ function morphBetween(a, b) {
1411
1412
  let inner = morphCache.get(a);
1412
1413
  if (!inner) morphCache.set(a, inner = /* @__PURE__ */ new WeakMap());
1413
1414
  let morph = inner.get(b);
1414
- if (!morph) inner.set(b, morph = _chunkMHEXLG3Mcjs.createVectorMorph.call(void 0, a, b, { id: a.id }));
1415
+ if (!morph) inner.set(b, morph = _chunk5AARIS3Rcjs.createVectorMorph.call(void 0, a, b, { id: a.id }));
1415
1416
  return morph;
1416
1417
  }
1417
1418
  function shapeIn(entry, shape) {
1418
1419
  if (shape === entry) return entry.node;
1419
- const m = _chunkQMI5HZWAcjs.multiplyMatrices.call(void 0, _chunkQMI5HZWAcjs.multiplyMatrices.call(void 0, _chunkQMI5HZWAcjs.nodeMatrix.call(void 0, shape.node), shape.parentWorld), _chunkQMI5HZWAcjs.invertMatrix.call(void 0, entry.parentWorld));
1420
- return { ...shape.node, ..._chunkQMI5HZWAcjs.isIdentityMatrix.call(void 0, m) ? { transform: void 0 } : { transform: m } };
1420
+ const m = _chunkJCXMJUQOcjs.multiplyMatrices.call(void 0, _chunkJCXMJUQOcjs.multiplyMatrices.call(void 0, _chunkJCXMJUQOcjs.nodeMatrix.call(void 0, shape.node), shape.parentWorld), _chunkJCXMJUQOcjs.invertMatrix.call(void 0, entry.parentWorld));
1421
+ return { ...shape.node, ..._chunkJCXMJUQOcjs.isIdentityMatrix.call(void 0, m) ? { transform: void 0 } : { transform: m } };
1421
1422
  }
1422
1423
  function shapeAt(entry, timeline, nodes, time) {
1423
1424
  const track = timeline.tracks.get(motionTrackKey(entry.node.id, "shape"));
@@ -1437,7 +1438,7 @@ function shapeAt(entry, timeline, nodes, time) {
1437
1438
  function motionFollowRoute(entry, path) {
1438
1439
  if (!path || path.node.type !== "path") return null;
1439
1440
  try {
1440
- return _chunkGF2RBSDMcjs.transformBezierPath.call(void 0, _chunkQMI5HZWAcjs.vectorPathWorldBezier.call(void 0, path.node, path.parentWorld, { effects: false }), _chunkQMI5HZWAcjs.invertMatrix.call(void 0, entry.parentWorld));
1441
+ return _chunkGF2RBSDMcjs.transformBezierPath.call(void 0, _chunkJCXMJUQOcjs.vectorPathWorldBezier.call(void 0, path.node, path.parentWorld, { effects: false }), _chunkJCXMJUQOcjs.invertMatrix.call(void 0, entry.parentWorld));
1441
1442
  } catch (e4) {
1442
1443
  return null;
1443
1444
  }
@@ -1471,9 +1472,9 @@ function motionNodeOffset(entry, timeline, time, nodes = indexMotionNodes([entry
1471
1472
  const scaleX = read("scaleX", 1);
1472
1473
  const scaleY = read("scaleY", 1);
1473
1474
  const c = entry.center;
1474
- let matrix = _chunkQMI5HZWAcjs.multiplyMatrices.call(void 0, _chunkQMI5HZWAcjs.multiplyMatrices.call(void 0, _chunkQMI5HZWAcjs.scaleMatrix.call(void 0, scaleX, scaleY, c), _chunkQMI5HZWAcjs.rotateMatrix.call(void 0, rotation, c)), _chunkQMI5HZWAcjs.translateMatrix.call(void 0, dx, dy));
1475
+ let matrix = _chunkJCXMJUQOcjs.multiplyMatrices.call(void 0, _chunkJCXMJUQOcjs.multiplyMatrices.call(void 0, _chunkJCXMJUQOcjs.scaleMatrix.call(void 0, scaleX, scaleY, c), _chunkJCXMJUQOcjs.rotateMatrix.call(void 0, rotation, c)), _chunkJCXMJUQOcjs.translateMatrix.call(void 0, dx, dy));
1475
1476
  const along = follow ? followAt(entry, timeline, nodes, time) : null;
1476
- if (along) matrix = _chunkQMI5HZWAcjs.multiplyMatrices.call(void 0, matrix, _chunkQMI5HZWAcjs.multiplyMatrices.call(void 0, _chunkQMI5HZWAcjs.multiplyMatrices.call(void 0, _chunkQMI5HZWAcjs.translateMatrix.call(void 0, -c.x, -c.y), _chunkQMI5HZWAcjs.rotateMatrix.call(void 0, along.angle)), _chunkQMI5HZWAcjs.translateMatrix.call(void 0, along.x, along.y)));
1477
+ if (along) matrix = _chunkJCXMJUQOcjs.multiplyMatrices.call(void 0, matrix, _chunkJCXMJUQOcjs.multiplyMatrices.call(void 0, _chunkJCXMJUQOcjs.multiplyMatrices.call(void 0, _chunkJCXMJUQOcjs.translateMatrix.call(void 0, -c.x, -c.y), _chunkJCXMJUQOcjs.rotateMatrix.call(void 0, along.angle)), _chunkJCXMJUQOcjs.translateMatrix.call(void 0, along.x, along.y)));
1477
1478
  return { matrix, dx, dy, rotation, scaleX, scaleY, follow: along };
1478
1479
  }
1479
1480
  function motionNodeClips(id, timeline, time) {
@@ -1540,7 +1541,7 @@ function motionFrameAt(scene, time, options = {}) {
1540
1541
  const start = Math.min(1, Math.max(0, typeof drawStart === "number" ? drawStart : 0));
1541
1542
  const end = Math.min(1, Math.max(0, typeof drawEnd === "number" ? drawEnd : 1));
1542
1543
  if (start > 0 || end < 1) {
1543
- const trim = _chunkQMI5HZWAcjs.createVectorEffect.call(void 0, "trim", MOTION_DRAW_EFFECT_ID, { start: tidy(start * 100), end: tidy(end * 100) });
1544
+ const trim = _chunkJCXMJUQOcjs.createVectorEffect.call(void 0, "trim", MOTION_DRAW_EFFECT_ID, { start: tidy(start * 100), end: tidy(end * 100) });
1544
1545
  p = { ...p, effects: [trim, ...(_nullishCoalesce(p.effects, () => ( []))).filter((e) => e.id !== MOTION_DRAW_EFFECT_ID)] };
1545
1546
  }
1546
1547
  }
@@ -1554,8 +1555,8 @@ function motionFrameAt(scene, time, options = {}) {
1554
1555
  if (o >= 1) delete out.opacity;
1555
1556
  }
1556
1557
  const offset = options.offsets === false ? null : motionNodeOffset(entry, timeline, time, nodes);
1557
- if (offset && !_chunkQMI5HZWAcjs.isIdentityMatrix.call(void 0, offset.matrix)) {
1558
- const m = _chunkQMI5HZWAcjs.multiplyMatrices.call(void 0, _chunkQMI5HZWAcjs.nodeMatrix.call(void 0, out), offset.matrix).map(tidy);
1558
+ if (offset && !_chunkJCXMJUQOcjs.isIdentityMatrix.call(void 0, offset.matrix)) {
1559
+ const m = _chunkJCXMJUQOcjs.multiplyMatrices.call(void 0, _chunkJCXMJUQOcjs.nodeMatrix.call(void 0, out), offset.matrix).map(tidy);
1559
1560
  out = { ...out, transform: m };
1560
1561
  }
1561
1562
  return out;
@@ -1575,7 +1576,7 @@ function motionFrameToSvg(scene, time, options = {}) {
1575
1576
  const wrap = { ...options.wrap };
1576
1577
  for (const [id, clips] of Object.entries(frame.clips))
1577
1578
  wrap[id] = [..._nullishCoalesce(wrap[id], () => ( [])), ...clips.map((clip, i) => ({ clip: { id: `${prefix}reveal-${id}-${i}`, shape: clip.shape, attrs: motionClipAttrs(clip) } }))];
1578
- return withViewBox(_chunkQMI5HZWAcjs.vectorDocumentToSvg.call(void 0, frame.document, { ...options, wrap }), frame.camera);
1579
+ return withViewBox(_chunkJCXMJUQOcjs.vectorDocumentToSvg.call(void 0, frame.document, { ...options, wrap }), frame.camera);
1579
1580
  }
1580
1581
  function withViewBox(svg, box) {
1581
1582
  const f = (n) => String(Math.round(n * 1e3) / 1e3);
@@ -1758,8 +1759,8 @@ function visibleAt(timeline, id, time, node) {
1758
1759
  if (Array.isArray(rect) && (rect[2] <= 1e-4 || rect[3] <= 1e-4)) return false;
1759
1760
  const circle = clip("clipCircle");
1760
1761
  if (Array.isArray(circle) && circle[2] <= 1e-4) return false;
1761
- const hasFill = node.type === "path" ? !!node.fill && node.fill !== "none" : _chunkQMI5HZWAcjs.collectPathNodes.call(void 0, node).some((p) => p.fill && p.fill !== "none");
1762
- const drawn = num2("drawEnd", 1) > 0.01 && (node.type === "path" || _chunkQMI5HZWAcjs.collectPathNodes.call(void 0, node).length === 0 || _chunkQMI5HZWAcjs.collectPathNodes.call(void 0, node).some((p) => {
1762
+ const hasFill = node.type === "path" ? !!node.fill && node.fill !== "none" : _chunkJCXMJUQOcjs.collectPathNodes.call(void 0, node).some((p) => p.fill && p.fill !== "none");
1763
+ const drawn = num2("drawEnd", 1) > 0.01 && (node.type === "path" || _chunkJCXMJUQOcjs.collectPathNodes.call(void 0, node).length === 0 || _chunkJCXMJUQOcjs.collectPathNodes.call(void 0, node).some((p) => {
1763
1764
  const v = trackValue(timeline.tracks.get(motionTrackKey(p.id, "drawEnd")), time);
1764
1765
  return typeof v !== "number" || v > 0.01;
1765
1766
  }));
@@ -1845,7 +1846,7 @@ function checkMotionScene(scene) {
1845
1846
  }
1846
1847
  for (const id of targets) {
1847
1848
  const node = nodes.get(id).node;
1848
- const paths = node.type === "path" ? [node] : _chunkQMI5HZWAcjs.collectPathNodes.call(void 0, node);
1849
+ const paths = node.type === "path" ? [node] : _chunkJCXMJUQOcjs.collectPathNodes.call(void 0, node);
1849
1850
  if (paths.some((p) => p[key] !== void 0 && p[key] !== null && typeof p[key] !== "string"))
1850
1851
  issues.push(_chunkEBDZWIOPcjs.motionIssue.call(void 0, "paint-not-color", `"${id}" has a gradient ${key}; it switches to ${color} at the end instead of blending.`, { ...where, ids: [id] }));
1851
1852
  }
@@ -1858,7 +1859,7 @@ function checkMotionScene(scene) {
1858
1859
  else
1859
1860
  for (const id of targets) {
1860
1861
  const node = nodes.get(id).node;
1861
- const paths = node.type === "path" ? [node] : _chunkQMI5HZWAcjs.collectPathNodes.call(void 0, node);
1862
+ const paths = node.type === "path" ? [node] : _chunkJCXMJUQOcjs.collectPathNodes.call(void 0, node);
1862
1863
  if (paths.some((p) => typeof p[key] !== "string"))
1863
1864
  issues.push(_chunkEBDZWIOPcjs.motionIssue.call(void 0, "paint-not-color", `"${id}" has a gradient or no ${key}, so a colour pulse cannot tint it; give it a solid ${key} or pulse the ${key === "fill" ? "stroke" : "fill"}.`, { ...where, ids: [id] }));
1864
1865
  }
@@ -2303,7 +2304,7 @@ function motionNodePose(scene, id, time) {
2303
2304
  if (!entry) throw new Error(`There is no element ${_chunkEBDZWIOPcjs.namedWithSuggestion.call(void 0, id, [...indexMotionNodes(scene.artwork.nodes).keys()])} in the artwork.`);
2304
2305
  const timeline = compileMotionScene(scene);
2305
2306
  const drawn = indexMotionNodes(motionFrameAt(scene, time).document.nodes).get(id);
2306
- const centre = _chunkQMI5HZWAcjs.applyMatrix.call(void 0, entry.parentWorld, { x: entry.center.x + motionPropertyValue(timeline, id, "x", time), y: entry.center.y + motionPropertyValue(timeline, id, "y", time) });
2307
+ const centre = _chunkJCXMJUQOcjs.applyMatrix.call(void 0, entry.parentWorld, { x: entry.center.x + motionPropertyValue(timeline, id, "x", time), y: entry.center.y + motionPropertyValue(timeline, id, "y", time) });
2307
2308
  const paint = (property) => _nullishCoalesce(trackValue(timeline.tracks.get(motionTrackKey(id, property)), time), () => ( motionRestValue(entry, property, scene.artwork)));
2308
2309
  const fill = paint("fill");
2309
2310
  const stroke = paint("stroke");
@@ -2650,7 +2651,7 @@ function toFlairSvgMotion(scene, options = {}) {
2650
2651
  raw: (t) => transformAt(t, true)
2651
2652
  });
2652
2653
  }
2653
- const paths = node.type === "path" ? [node] : _chunkQMI5HZWAcjs.collectPathNodes.call(void 0, node);
2654
+ const paths = node.type === "path" ? [node] : _chunkJCXMJUQOcjs.collectPathNodes.call(void 0, node);
2654
2655
  for (const path of paths) {
2655
2656
  if (pathsSeen.has(path.id)) continue;
2656
2657
  pathsSeen.add(path.id);
@@ -2672,7 +2673,7 @@ function toFlairSvgMotion(scene, options = {}) {
2672
2673
  if (shapeSegments.length) {
2673
2674
  if (node.type !== "path") notes.push(`"${id}" is a group: its morph or effect animation is not exported (Flair tweens one path's "d").`);
2674
2675
  else {
2675
- const inverse = _chunkQMI5HZWAcjs.invertMatrix.call(void 0, _chunkQMI5HZWAcjs.nodeMatrix.call(void 0, node));
2676
+ const inverse = _chunkJCXMJUQOcjs.invertMatrix.call(void 0, _chunkJCXMJUQOcjs.nodeMatrix.call(void 0, node));
2676
2677
  channels.push({
2677
2678
  id,
2678
2679
  kind: "attr",
@@ -2681,9 +2682,9 @@ function toFlairSvgMotion(scene, options = {}) {
2681
2682
  exact: () => false,
2682
2683
  value: (t) => {
2683
2684
  const frame = motionFrameAt(scene, t, { draw: false, offsets: false });
2684
- const now = _chunkQMI5HZWAcjs.expandVectorAppearance.call(void 0, _optionalChain([indexMotionNodes, 'call', _114 => _114(frame.document.nodes), 'access', _115 => _115.get, 'call', _116 => _116(id), 'optionalAccess', _117 => _117.node]));
2685
+ const now = _chunkJCXMJUQOcjs.expandVectorAppearance.call(void 0, _optionalChain([indexMotionNodes, 'call', _114 => _114(frame.document.nodes), 'access', _115 => _115.get, 'call', _116 => _116(id), 'optionalAccess', _117 => _117.node]));
2685
2686
  if (!now || now.type !== "path") return "";
2686
- const bezier = _chunkGF2RBSDMcjs.transformBezierPath.call(void 0, _chunkQMI5HZWAcjs.vectorPathWorldBezier.call(void 0, now, _chunkQMI5HZWAcjs.IDENTITY_MATRIX, { effects: false }), inverse);
2687
+ const bezier = _chunkGF2RBSDMcjs.transformBezierPath.call(void 0, _chunkJCXMJUQOcjs.vectorPathWorldBezier.call(void 0, now, _chunkJCXMJUQOcjs.IDENTITY_MATRIX, { effects: false }), inverse);
2687
2688
  return _chunkGF2RBSDMcjs.bezierPathToSvg.call(void 0, bezier, { precision: Math.min(precision, 2) });
2688
2689
  }
2689
2690
  });
@@ -2790,7 +2791,7 @@ function toFlairSvgMotion(scene, options = {}) {
2790
2791
  }
2791
2792
  if (scene.motionBlur) notes.push("Motion blur is drawn on the stage only; Flair plays the scene sharp.");
2792
2793
  if (trigger && (_nullishCoalesce(scene.loop, () => ( "none"))) !== "none") notes.push(`The scene plays on ${trigger}, so its loop does not apply in Flair.`);
2793
- let svg = _chunkQMI5HZWAcjs.vectorDocumentToSvg.call(void 0, { ...scene.artwork, nodes: _chunkQMI5HZWAcjs.expandVectorAppearances.call(void 0, scene.artwork.nodes) }, { pretty: false, precision, wrap });
2794
+ let svg = _chunkJCXMJUQOcjs.vectorDocumentToSvg.call(void 0, { ...scene.artwork, nodes: _chunkJCXMJUQOcjs.expandVectorAppearances.call(void 0, scene.artwork.nodes) }, { pretty: false, precision, wrap });
2794
2795
  if (routes.length) svg = svg.replace(/^(<svg[^>]*>)/, `$1<defs>${routes.join("")}</defs>`);
2795
2796
  let motion = { svg, animate };
2796
2797
  if (_optionalChain([scene, 'access', _120 => _120.controls, 'optionalAccess', _121 => _121.length])) {
@@ -2874,14 +2875,14 @@ function easingOf(ease, fallback) {
2874
2875
  return fallback;
2875
2876
  }
2876
2877
  function poseOf(value, entry) {
2877
- const t = _chunkQMI5HZWAcjs.parseSvgTransform.call(void 0, String(value));
2878
- const o = _chunkQMI5HZWAcjs.multiplyMatrices.call(void 0, _nullishCoalesce(_chunkQMI5HZWAcjs.invertMatrix.call(void 0, _chunkQMI5HZWAcjs.nodeMatrix.call(void 0, entry.node)), () => ( [1, 0, 0, 1, 0, 0])), t);
2878
+ const t = _chunkJCXMJUQOcjs.parseSvgTransform.call(void 0, String(value));
2879
+ const o = _chunkJCXMJUQOcjs.multiplyMatrices.call(void 0, _nullishCoalesce(_chunkJCXMJUQOcjs.invertMatrix.call(void 0, _chunkJCXMJUQOcjs.nodeMatrix.call(void 0, entry.node)), () => ( [1, 0, 0, 1, 0, 0])), t);
2879
2880
  const sx = Math.hypot(o[0], o[1]);
2880
2881
  if (!(sx > 1e-9)) return null;
2881
2882
  const sy = (o[0] * o[3] - o[1] * o[2]) / sx;
2882
2883
  if (Math.abs(o[2] + o[1] / sx * sy) > 1e-6 || Math.abs(o[3] - o[0] / sx * sy) > 1e-6) return null;
2883
2884
  const c = entry.center;
2884
- const moved = _chunkQMI5HZWAcjs.applyMatrix.call(void 0, o, c);
2885
+ const moved = _chunkJCXMJUQOcjs.applyMatrix.call(void 0, o, c);
2885
2886
  return { dx: moved.x - c.x, dy: moved.y - c.y, rotation: Math.atan2(o[1], o[0]) * 180 / Math.PI, sx, sy };
2886
2887
  }
2887
2888
  var near = (a, b, eps = 1e-6) => Math.abs(a - b) < eps;
@@ -2966,7 +2967,7 @@ function fromFlairSvgMotion(input, options = {}) {
2966
2967
  const notes = [];
2967
2968
  if (!input || typeof input.svg !== "string") throw new Error('Give a Flair SvgMotion: { svg: "<svg \u2026>", animate: [ \u2026 ] }.');
2968
2969
  const { motion, controls } = resolvePlaceholders(input, notes);
2969
- const artwork = _chunkQMI5HZWAcjs.parseVectorSvg.call(void 0, motion.svg);
2970
+ const artwork = _chunkJCXMJUQOcjs.parseVectorSvg.call(void 0, motion.svg);
2970
2971
  const nodes = indexMotionNodes(artwork.nodes);
2971
2972
  const byStep = /* @__PURE__ */ new Map();
2972
2973
  for (const anim of _nullishCoalesce(motion.animate, () => ( []))) {
@@ -3213,9 +3214,9 @@ function toLottie(scene, options = {}) {
3213
3214
  const items = [];
3214
3215
  const shapeSegments = [...timeline.tracks.entries()].filter(([k]) => k.startsWith(`${path.id}\0`) && (k.endsWith("\0shape") || k.includes("\0effect:"))).flatMap(([, v]) => v);
3215
3216
  const geometryAt = (t) => {
3216
- if (!shapeSegments.length) return _chunkQMI5HZWAcjs.vectorPathWorldBezier.call(void 0, path);
3217
+ if (!shapeSegments.length) return _chunkJCXMJUQOcjs.vectorPathWorldBezier.call(void 0, path);
3217
3218
  const now = _optionalChain([indexMotionNodes, 'call', _130 => _130(motionFrameAt(scene, t, { draw: false, offsets: false }).document.nodes), 'access', _131 => _131.get, 'call', _132 => _132(path.id), 'optionalAccess', _133 => _133.node]);
3218
- return now && now.type === "path" ? _chunkQMI5HZWAcjs.vectorPathWorldBezier.call(void 0, _chunkQMI5HZWAcjs.expandVectorAppearances.call(void 0, [now])[0]) : _chunkQMI5HZWAcjs.vectorPathWorldBezier.call(void 0, path);
3219
+ return now && now.type === "path" ? _chunkJCXMJUQOcjs.vectorPathWorldBezier.call(void 0, _chunkJCXMJUQOcjs.expandVectorAppearances.call(void 0, [now])[0]) : _chunkJCXMJUQOcjs.vectorPathWorldBezier.call(void 0, path);
3219
3220
  };
3220
3221
  const rest = lottieContours(_chunkGF2RBSDMcjs.toBezierPath.call(void 0, geometryAt(0)), round3);
3221
3222
  rest.forEach((contour, n) => {
@@ -3288,13 +3289,13 @@ function toLottie(scene, options = {}) {
3288
3289
  const innerTr = STATIC_TR();
3289
3290
  if (node.type === "path") inner = [...pathShapes(node)];
3290
3291
  else if (node.type === "text" || node.type === "instance") {
3291
- const drawn = _chunkQMI5HZWAcjs.expandVectorAppearance.call(void 0, node);
3292
+ const drawn = _chunkJCXMJUQOcjs.expandVectorAppearance.call(void 0, node);
3292
3293
  inner = drawn.type === "path" ? [...pathShapes(drawn)] : drawn.children.filter((c) => c.type === "path").reverse().flatMap((c) => [...pathShapes(c)]);
3293
- notes.push(`"${node.id}": text is exported as its outlines${_chunkQMI5HZWAcjs.vectorTextHasOutlines.call(void 0, ) ? "" : " (glyph boxes: set an outline text shaper for real glyphs)"}.`);
3294
+ notes.push(`"${node.id}": text is exported as its outlines${_chunkJCXMJUQOcjs.vectorTextHasOutlines.call(void 0, ) ? "" : " (glyph boxes: set an outline text shaper for real glyphs)"}.`);
3294
3295
  } else {
3295
3296
  inner = shown(node.children).reverse().map(nodeGroup);
3296
- const m = _chunkQMI5HZWAcjs.nodeMatrix.call(void 0, node);
3297
- if (m !== _chunkQMI5HZWAcjs.IDENTITY_MATRIX) {
3297
+ const m = _chunkJCXMJUQOcjs.nodeMatrix.call(void 0, node);
3298
+ if (m !== _chunkJCXMJUQOcjs.IDENTITY_MATRIX) {
3298
3299
  const parts = staticParts(m);
3299
3300
  if (!parts) notes.push(`"${node.id}": its transform skews, which is not exported; it is drawn without the skew.`);
3300
3301
  else {
@@ -3307,7 +3308,7 @@ function toLottie(scene, options = {}) {
3307
3308
  const body = { ty: "gr", nm: `${node.id} (own)`, it: [...inner, innerTr] };
3308
3309
  return { ty: "gr", nm: _nullishCoalesce(node.name, () => ( node.id)), it: [body, poseTransform(entry)] };
3309
3310
  };
3310
- const artwork = { ...scene.artwork, nodes: _chunkQMI5HZWAcjs.expandVectorAppearances.call(void 0, scene.artwork.nodes) };
3311
+ const artwork = { ...scene.artwork, nodes: _chunkJCXMJUQOcjs.expandVectorAppearances.call(void 0, scene.artwork.nodes) };
3311
3312
  const content = shown(artwork.nodes).reverse().map(nodeGroup);
3312
3313
  if (artwork.background && rgba(artwork.background))
3313
3314
  content.push({ ty: "gr", nm: "Background", it: [{ ty: "rc", nm: "Background", p: { a: 0, k: [artwork.width / 2, artwork.height / 2] }, s: { a: 0, k: [artwork.width, artwork.height] }, r: { a: 0, k: 0 } }, { ty: "fl", c: { a: 0, k: rgba(artwork.background).map(round3) }, o: { a: 0, k: 100 }, r: 1 }, STATIC_TR()] });
@@ -3406,11 +3407,11 @@ function preset(prst, w, h) {
3406
3407
  const poly = (pts) => [{ closed: true, anchors: pts.map(([x, y]) => ({ x, y })) }];
3407
3408
  switch (prst) {
3408
3409
  case "rect":
3409
- return [_chunkQMI5HZWAcjs.rectSubpath.call(void 0, { x: 0, y: 0, width: w, height: h })];
3410
+ return [_chunkJCXMJUQOcjs.rectSubpath.call(void 0, { x: 0, y: 0, width: w, height: h })];
3410
3411
  case "roundRect":
3411
- return [_chunkQMI5HZWAcjs.rectSubpath.call(void 0, { x: 0, y: 0, width: w, height: h }, Math.min(w, h) * 0.16667)];
3412
+ return [_chunkJCXMJUQOcjs.rectSubpath.call(void 0, { x: 0, y: 0, width: w, height: h }, Math.min(w, h) * 0.16667)];
3412
3413
  case "ellipse":
3413
- return [_chunkQMI5HZWAcjs.ellipseSubpath.call(void 0, { x: 0, y: 0, width: w, height: h })];
3414
+ return [_chunkJCXMJUQOcjs.ellipseSubpath.call(void 0, { x: 0, y: 0, width: w, height: h })];
3414
3415
  case "triangle":
3415
3416
  return poly([[w / 2, 0], [w, h], [0, h]]);
3416
3417
  case "rtTriangle":
@@ -3518,7 +3519,7 @@ function shapes(ctx, tree, map) {
3518
3519
  let subpaths = cust ? custom(cust, w, h) : prst ? preset(prst, w, h) : null;
3519
3520
  if (!subpaths) {
3520
3521
  if (prst) ctx.notes.push(`"${name}" is a ${prst}, drawn as its bounding rectangle.`);
3521
- subpaths = [_chunkQMI5HZWAcjs.rectSubpath.call(void 0, { x: 0, y: 0, width: w, height: h })];
3522
+ subpaths = [_chunkJCXMJUQOcjs.rectSubpath.call(void 0, { x: 0, y: 0, width: w, height: h })];
3522
3523
  }
3523
3524
  const style = kid(el, "style");
3524
3525
  const fill = kid(spPr, "noFill") ? null : _nullishCoalesce(colour(ctx, kid(spPr, "solidFill")), () => ( (el.localName === "cxnSp" ? null : colour(ctx, kid(style, "fillRef")))));
@@ -3756,7 +3757,7 @@ function nextMotionEffectInstance(scene) {
3756
3757
  walk(scene.artwork.nodes);
3757
3758
  for (let i = 1; ; i++) if (!used.has(`fx${i}`)) return `fx${i}`;
3758
3759
  }
3759
- var motionArtworkSvg = (artwork) => _chunkQMI5HZWAcjs.vectorDocumentToSvg.call(void 0, artwork);
3760
+ var motionArtworkSvg = (artwork) => _chunkJCXMJUQOcjs.vectorDocumentToSvg.call(void 0, artwork);
3760
3761
  var tag = (commands, source) => commands.map((c) => c.type === "wait" ? c : { ...c, source });
3761
3762
  function motionCommandsFromEffect(artwork, motion, source) {
3762
3763
  const imported = fromFlairSvgMotion({ svg: motionArtworkSvg(artwork), animate: [..._nullishCoalesce(motion.animate, () => ( []))] });
@@ -3845,7 +3846,7 @@ var AnimationEditorController = (_class = class {
3845
3846
  this.readOnly = _nullishCoalesce(options.readOnly, () => ( false));
3846
3847
  this.onChange = options.onChange;
3847
3848
  if (options.effects) this.effects.set(options.effects);
3848
- this.player = new (0, _chunkSUF6WRXRcjs.AnimationPlayer)({ clock: options.clock, duration: () => compileMotionScene(this.scene).duration, loop: _nullishCoalesce(this.scene.loop, () => ( "none")) });
3849
+ this.player = new (0, _chunkGTELFJREcjs.AnimationPlayer)({ clock: options.clock, duration: () => compileMotionScene(this.scene).duration, loop: _nullishCoalesce(this.scene.loop, () => ( "none")) });
3849
3850
  this.state = this.computeState();
3850
3851
  this.connect();
3851
3852
  }
@@ -5083,7 +5084,7 @@ function createAnimationEditorToolProvider(controller, options = {}) {
5083
5084
  handler: ({ svg }) => {
5084
5085
  let artwork;
5085
5086
  try {
5086
- artwork = _chunkQMI5HZWAcjs.parseVectorSvg.call(void 0, svg);
5087
+ artwork = _chunkJCXMJUQOcjs.parseVectorSvg.call(void 0, svg);
5087
5088
  } catch (error) {
5088
5089
  throw new Error(`The SVG could not be read: ${error.message}. Nothing was changed.`);
5089
5090
  }
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  createVectorMorph
3
- } from "../chunk-WNAAWLZ5.js";
3
+ } from "../chunk-QY4KUDMY.js";
4
4
  import {
5
5
  MOTION_ISSUE_CODES,
6
6
  motionIssue,
@@ -31,8 +31,8 @@ import {
31
31
  vectorNodeBounds,
32
32
  vectorPathWorldBezier,
33
33
  vectorTextHasOutlines
34
- } from "../chunk-6UPGM3JB.js";
35
- import "../chunk-A5UCR2TO.js";
34
+ } from "../chunk-SET6KJOP.js";
35
+ import "../chunk-YXKLVD56.js";
36
36
  import "../chunk-M6DNZNVY.js";
37
37
  import {
38
38
  bezierPathLength,
@@ -72,7 +72,7 @@ import {
72
72
  } from "../chunk-DS4WGCLJ.js";
73
73
  import {
74
74
  AnimationPlayer
75
- } from "../chunk-AY65VQSU.js";
75
+ } from "../chunk-H3OEM3Q2.js";
76
76
  import {
77
77
  ANIMATION_EASING_LABELS,
78
78
  ANIMATION_EASING_PRESETS,
@@ -84,13 +84,14 @@ import {
84
84
  } from "../chunk-5UJHB3BW.js";
85
85
  import {
86
86
  mixColorsOklab
87
- } from "../chunk-KY3FYKP3.js";
87
+ } from "../chunk-BQWGN5WH.js";
88
88
  import {
89
89
  hexToRgba,
90
90
  normalizeTokenColor,
91
91
  rgbaToHex
92
92
  } from "../chunk-2WPNAGHI.js";
93
- import "../chunk-AA34BA7G.js";
93
+ import "../chunk-QYZGBVNC.js";
94
+ import "../chunk-4VU4CP7R.js";
94
95
  import "../chunk-6ONMQ6WF.js";
95
96
 
96
97
  // src/animation-editor/types.ts
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  pathDataToPolyline
3
- } from "./chunk-45XXVHVG.js";
3
+ } from "./chunk-ZZGPYNS2.js";
4
4
  import {
5
5
  parseCssColor
6
6
  } from "./chunk-3CI7FRMK.js";
7
7
  import {
8
8
  BUILTIN_BRUSHES
9
- } from "./chunk-A5UCR2TO.js";
9
+ } from "./chunk-YXKLVD56.js";
10
10
  import {
11
11
  formatNumber,
12
12
  getShapeSvg,
@@ -1,12 +1,12 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
2
2
 
3
- var _chunkEYVVIZJ3cjs = require('./chunk-EYVVIZJ3.cjs');
3
+ var _chunkWTW7QRTScjs = require('./chunk-WTW7QRTS.cjs');
4
4
 
5
5
 
6
6
  var _chunkA2IS7EHEcjs = require('./chunk-A2IS7EHE.cjs');
7
7
 
8
8
 
9
- var _chunkJGKCC5OFcjs = require('./chunk-JGKCC5OF.cjs');
9
+ var _chunkYQ5C5BVKcjs = require('./chunk-YQ5C5BVK.cjs');
10
10
 
11
11
 
12
12
 
@@ -23,14 +23,14 @@ require('./chunk-CWM3CUUX.cjs');
23
23
  require('./chunk-XFM3OCHU.cjs');
24
24
 
25
25
  // src/canvas/brushstrokeRender.ts
26
- var DRY = _chunkJGKCC5OFcjs.BUILTIN_BRUSHES.filter((b) => _chunkEBDCRTZIcjs.isBrushstrokeBrush.call(void 0, b));
26
+ var DRY = _chunkYQ5C5BVKcjs.BUILTIN_BRUSHES.filter((b) => _chunkEBDCRTZIcjs.isBrushstrokeBrush.call(void 0, b));
27
27
  function listCanvasBrushes() {
28
28
  return DRY.map((b) => ({ id: b.id, name: b.name, category: b.category, size: b.tip.size }));
29
29
  }
30
30
  function resolveCanvasBrush(brush, width) {
31
31
  const given = width !== void 0 && Number.isFinite(width) ? Math.max(1, width) : void 0;
32
32
  if (typeof brush === "string") {
33
- const preset = _chunkJGKCC5OFcjs.BUILTIN_BRUSHES.find((b) => b.id === brush);
33
+ const preset = _chunkYQ5C5BVKcjs.BUILTIN_BRUSHES.find((b) => b.id === brush);
34
34
  const ids = DRY.map((b) => b.id).join(", ");
35
35
  if (!preset) throw new Error(`Unknown brush '${brush}'. Use one of the dry paint presets (${ids}) or tip settings ({ hardness, spacing, flow, \u2026 }).`);
36
36
  if (!_chunkEBDCRTZIcjs.isBrushstrokeBrush.call(void 0, preset)) {
@@ -72,7 +72,7 @@ function renderShapeBrushstrokeNow(shape, scale, place = {}) {
72
72
  const textured = typeof seed === "number" && Number.isFinite(seed);
73
73
  const size = _nullishCoalesce(shape.brush.size, () => ( (textured ? void 0 : _nullishCoalesce(shape.strokeWidth, () => ( 3)))));
74
74
  const brush = resolveCanvasBrush(shape.brush.brush, size);
75
- const points = _chunkEYVVIZJ3cjs.pathDataToPolyline.call(void 0, shape.d);
75
+ const points = _chunkWTW7QRTScjs.pathDataToPolyline.call(void 0, shape.d);
76
76
  if (!points.length) return null;
77
77
  const { pressure, tiltX, tiltY } = shape.brush;
78
78
  const input = {