@pixerate/editor 0.250.0 → 0.252.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 (137) hide show
  1. package/dist/agent/index.cjs +40 -41
  2. package/dist/agent/index.js +9 -10
  3. package/dist/animation/index.cjs +6 -7
  4. package/dist/animation/index.js +5 -6
  5. package/dist/animation-editor/index.cjs +70 -70
  6. package/dist/animation-editor/index.js +12 -12
  7. package/dist/brushes/index.cjs +2087 -0
  8. package/dist/brushes/index.d.cts +17 -0
  9. package/dist/brushes/index.d.ts +17 -0
  10. package/dist/brushes/index.js +2087 -0
  11. package/dist/brushes/library.d.cts +104 -0
  12. package/dist/brushes/library.d.ts +104 -0
  13. package/dist/brushes/migrate.d.cts +17 -0
  14. package/dist/brushes/migrate.d.ts +17 -0
  15. package/dist/brushes/normalize.d.cts +15 -0
  16. package/dist/brushes/normalize.d.ts +15 -0
  17. package/dist/brushes/presets.d.cts +12 -0
  18. package/dist/brushes/presets.d.ts +12 -0
  19. package/dist/brushes/profiles.d.cts +85 -0
  20. package/dist/brushes/profiles.d.ts +85 -0
  21. package/dist/brushes/resolve.d.cts +56 -0
  22. package/dist/brushes/resolve.d.ts +56 -0
  23. package/dist/brushes/schema.d.cts +29 -0
  24. package/dist/brushes/schema.d.ts +29 -0
  25. package/dist/brushes/tools.d.cts +37 -0
  26. package/dist/brushes/tools.d.ts +37 -0
  27. package/dist/brushes/types.d.cts +323 -0
  28. package/dist/brushes/types.d.ts +323 -0
  29. package/dist/{brushstrokeRender-2FHFLSEG.js → brushstrokeRender-5PYSKZIJ.js} +8 -8
  30. package/dist/{brushstrokeRender-QGRXOKDA.cjs → brushstrokeRender-7FLLSQEC.cjs} +14 -14
  31. package/dist/canvas/index.cjs +57 -58
  32. package/dist/canvas/index.js +31 -32
  33. package/dist/chart/index.cjs +159 -160
  34. package/dist/chart/index.js +9 -10
  35. package/dist/{chunk-NOHJP5TK.js → chunk-2ZJ4DT3M.js} +1 -1
  36. package/dist/{chunk-XZNU4DUX.cjs → chunk-3NS5C7FB.cjs} +76 -76
  37. package/dist/{chunk-UTI5IITZ.cjs → chunk-4ZC5QJE2.cjs} +3 -3
  38. package/dist/{chunk-SMSGP2HQ.js → chunk-5JNA6LLY.js} +1 -1
  39. package/dist/{chunk-RD7RX52G.cjs → chunk-5UEFBM2M.cjs} +207 -18
  40. package/dist/{chunk-WA44NKPF.js → chunk-62Z5WLRA.js} +1 -1
  41. package/dist/{chunk-BVRRIW7F.js → chunk-6GRUVGKU.js} +3 -3
  42. package/dist/{chunk-QARCM66V.js → chunk-6ZZKRH7R.js} +3 -3
  43. package/dist/{chunk-BP6KSGVD.js → chunk-7272D3K2.js} +4 -6
  44. package/dist/{chunk-NTRAVM2I.js → chunk-7P6VF3FG.js} +2 -2
  45. package/dist/chunk-APX63ILU.js +173 -0
  46. package/dist/{chunk-W7L4HUT2.cjs → chunk-CJ6TBL2N.cjs} +16 -16
  47. package/dist/{chunk-7PT4RJL5.cjs → chunk-EUIDTZNQ.cjs} +111 -113
  48. package/dist/{chunk-CXXXAZ7H.js → chunk-F6R67I3A.js} +1 -1
  49. package/dist/{chunk-I7NJPHWV.cjs → chunk-FQPUF2W2.cjs} +35 -606
  50. package/dist/{chunk-D5KGAO4Z.js → chunk-GCVFEPJG.js} +2 -573
  51. package/dist/{chunk-LEQKZGQI.js → chunk-GOBOCZZI.js} +1 -1
  52. package/dist/{chunk-KDLBJ6QR.js → chunk-GYMMNCFT.js} +3 -3
  53. package/dist/{chunk-NUTMINJZ.cjs → chunk-H7ET2ISK.cjs} +52 -52
  54. package/dist/chunk-HS6QDWDF.cjs +1029 -0
  55. package/dist/{chunk-T7KQEMAE.cjs → chunk-HUAISCUX.cjs} +18 -18
  56. package/dist/{chunk-YGQVCQTG.js → chunk-ILP77UD6.js} +1 -1
  57. package/dist/{chunk-S6OT6CTS.cjs → chunk-IWEVV63O.cjs} +31 -33
  58. package/dist/{chunk-M2VKFE5L.cjs → chunk-JFHBXNR2.cjs} +88 -88
  59. package/dist/{chunk-WPUXGDH4.cjs → chunk-JPEHXIB5.cjs} +10 -10
  60. package/dist/chunk-JSDND7DF.cjs +173 -0
  61. package/dist/{chunk-36ZTV7WO.js → chunk-L6Y7TSQ4.js} +1 -1
  62. package/dist/{chunk-YW43M56C.cjs → chunk-LFMKWGFL.cjs} +1 -1
  63. package/dist/{chunk-V6DT2CDH.js → chunk-M2TPMYJE.js} +1 -1
  64. package/dist/{chunk-LJZRHVZV.cjs → chunk-M5GLQQWG.cjs} +2 -2
  65. package/dist/{chunk-JEGJP4OW.js → chunk-MHLU6GRJ.js} +196 -7
  66. package/dist/{chunk-KMPM5JM5.js → chunk-MONXNVZK.js} +4 -6
  67. package/dist/chunk-MTKY6K3Q.js +1029 -0
  68. package/dist/{chunk-MOW3JMNG.cjs → chunk-N76AMOKE.cjs} +42 -42
  69. package/dist/{chunk-75K3W4D6.cjs → chunk-NKGB64CW.cjs} +16 -16
  70. package/dist/{chunk-SGPIVHJB.js → chunk-P3K2JCJA.js} +3 -3
  71. package/dist/chunk-PXDIAYB6.cjs +594 -0
  72. package/dist/{chunk-3TWOCSCY.js → chunk-QC3OXRE4.js} +9 -9
  73. package/dist/{chunk-YM6ZBTXG.cjs → chunk-QLSGTCYT.cjs} +23 -23
  74. package/dist/{chunk-7YW7T5TJ.js → chunk-RHPSE2YR.js} +2 -2
  75. package/dist/{chunk-44BMJJVA.cjs → chunk-RUONPPMC.cjs} +8 -8
  76. package/dist/{chunk-ATK6ABN3.cjs → chunk-SABJMH6M.cjs} +145 -12
  77. package/dist/{chunk-XWOLPNBW.cjs → chunk-SOSBOS5T.cjs} +22 -22
  78. package/dist/{chunk-PPFJHTW5.cjs → chunk-TFF2GTGN.cjs} +22 -24
  79. package/dist/{chunk-X7WRL5ZZ.cjs → chunk-TLOGFIIV.cjs} +37 -37
  80. package/dist/chunk-TXFWZ5ZJ.js +594 -0
  81. package/dist/{chunk-GXAK6Q5J.js → chunk-UFEDHACQ.js} +2 -2
  82. package/dist/{chunk-GA4EU4P3.cjs → chunk-UXETV2NC.cjs} +4 -4
  83. package/dist/{chunk-N4DFDI73.js → chunk-WKMUBATU.js} +1 -1
  84. package/dist/{chunk-3R5P3DVY.cjs → chunk-WRZ6C4TU.cjs} +6 -6
  85. package/dist/{chunk-U4NUOKBT.js → chunk-WZOGDKCQ.js} +134 -1
  86. package/dist/{chunk-6ADHGQ73.js → chunk-YBAPT7NL.js} +2 -4
  87. package/dist/color/index.cjs +4 -6
  88. package/dist/color/index.js +7 -9
  89. package/dist/export/index.cjs +7 -8
  90. package/dist/export/index.js +6 -7
  91. package/dist/extensions/index.cjs +10 -11
  92. package/dist/extensions/index.js +9 -10
  93. package/dist/gradient/index.cjs +33 -34
  94. package/dist/gradient/index.js +4 -5
  95. package/dist/image-editor/index.cjs +845 -844
  96. package/dist/image-editor/index.js +39 -38
  97. package/dist/index.cjs +16 -17
  98. package/dist/index.js +10 -11
  99. package/dist/paint/index.cjs +6 -4
  100. package/dist/paint/index.js +21 -19
  101. package/dist/paint-editor/brushes.d.cts +1 -2
  102. package/dist/paint-editor/brushes.d.ts +1 -2
  103. package/dist/paint-editor/index.cjs +2193 -694
  104. package/dist/paint-editor/index.js +1575 -76
  105. package/dist/paint-editor/mark-settings.d.cts +104 -0
  106. package/dist/paint-editor/mark-settings.d.ts +104 -0
  107. package/dist/paint-editor/procedural.d.cts +2 -75
  108. package/dist/paint-editor/procedural.d.ts +2 -75
  109. package/dist/paint-editor/stickers.d.cts +1 -22
  110. package/dist/paint-editor/stickers.d.ts +1 -22
  111. package/dist/raster/index.cjs +2 -2
  112. package/dist/raster/index.js +9 -9
  113. package/dist/stickers/index.cjs +10 -10
  114. package/dist/stickers/index.js +9 -9
  115. package/dist/tokens/index.cjs +3 -4
  116. package/dist/tokens/index.js +2 -3
  117. package/dist/tools/skill-evals.d.cts +8 -1
  118. package/dist/tools/skill-evals.d.ts +8 -1
  119. package/dist/typography/index.cjs +7 -8
  120. package/dist/typography/index.js +2 -3
  121. package/dist/vector/index.cjs +974 -974
  122. package/dist/vector/index.js +12 -12
  123. package/dist/video-editor/index.cjs +6 -7
  124. package/dist/video-editor/index.js +5 -6
  125. package/package.json +11 -1
  126. package/skills/README.md +2 -0
  127. package/skills/pixerate-brushes/SKILL.md +104 -0
  128. package/skills/pixerate-brushes-design/SKILL.md +88 -0
  129. package/skills/pixerate-brushes-design/evals/canvas-chalk.json +15 -0
  130. package/skills/pixerate-brushes-design/evals/pink-highlighter.json +15 -0
  131. package/skills/pixerate-brushes-design/evals/port-to-vector.json +17 -0
  132. package/dist/chunk-4JNWA3VT.cjs +0 -302
  133. package/dist/chunk-7AHBW2CQ.cjs +0 -200
  134. package/dist/chunk-F67XMVDI.js +0 -200
  135. package/dist/chunk-GT77U7QG.cjs +0 -2637
  136. package/dist/chunk-OTEPAQJX.js +0 -2637
  137. package/dist/chunk-WKH5ZAUA.js +0 -302
@@ -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; var _class2;
2
2
 
3
- var _chunkX7WRL5ZZcjs = require('../chunk-X7WRL5ZZ.cjs');
3
+ var _chunkTLOGFIIVcjs = require('../chunk-TLOGFIIV.cjs');
4
4
 
5
5
 
6
6
 
@@ -39,9 +39,9 @@ var _chunkZ3BRH4JKcjs = require('../chunk-Z3BRH4JK.cjs');
39
39
 
40
40
 
41
41
 
42
- var _chunkWPUXGDH4cjs = require('../chunk-WPUXGDH4.cjs');
43
- require('../chunk-GT77U7QG.cjs');
44
- require('../chunk-4JNWA3VT.cjs');
42
+ var _chunkJPEHXIB5cjs = require('../chunk-JPEHXIB5.cjs');
43
+ require('../chunk-HS6QDWDF.cjs');
44
+ require('../chunk-JSDND7DF.cjs');
45
45
  require('../chunk-CVFAAZXE.cjs');
46
46
 
47
47
 
@@ -73,11 +73,12 @@ var _chunkPY4GWSE2cjs = require('../chunk-PY4GWSE2.cjs');
73
73
 
74
74
  var _chunkISIO63Q5cjs = require('../chunk-ISIO63Q5.cjs');
75
75
  require('../chunk-WOFXZ3XU.cjs');
76
- require('../chunk-I7NJPHWV.cjs');
76
+ require('../chunk-PXDIAYB6.cjs');
77
+ require('../chunk-FQPUF2W2.cjs');
77
78
  require('../chunk-3K6HWEXZ.cjs');
78
79
  require('../chunk-YQGCPL5X.cjs');
79
- require('../chunk-2VX55NFM.cjs');
80
80
  require('../chunk-W5M3J7PV.cjs');
81
+ require('../chunk-2VX55NFM.cjs');
81
82
  require('../chunk-474IQG74.cjs');
82
83
  require('../chunk-XFM3OCHU.cjs');
83
84
  require('../chunk-NIBFDFYW.cjs');
@@ -98,7 +99,7 @@ var _chunkWKPXOGZZcjs = require('../chunk-WKPXOGZZ.cjs');
98
99
  var _chunk7B5GTJXBcjs = require('../chunk-7B5GTJXB.cjs');
99
100
 
100
101
 
101
- var _chunkLJZRHVZVcjs = require('../chunk-LJZRHVZV.cjs');
102
+ var _chunkM5GLQQWGcjs = require('../chunk-M5GLQQWG.cjs');
102
103
 
103
104
 
104
105
 
@@ -110,16 +111,15 @@ var _chunkLJZRHVZVcjs = require('../chunk-LJZRHVZV.cjs');
110
111
  var _chunkDWJJI6RTcjs = require('../chunk-DWJJI6RT.cjs');
111
112
 
112
113
 
113
- var _chunkUTI5IITZcjs = require('../chunk-UTI5IITZ.cjs');
114
+ var _chunk4ZC5QJE2cjs = require('../chunk-4ZC5QJE2.cjs');
114
115
 
115
116
 
116
117
 
117
118
 
118
119
  var _chunkA6QWKBJPcjs = require('../chunk-A6QWKBJP.cjs');
119
- require('../chunk-7PT4RJL5.cjs');
120
- require('../chunk-PPFJHTW5.cjs');
121
- require('../chunk-RD7RX52G.cjs');
122
- require('../chunk-7AHBW2CQ.cjs');
120
+ require('../chunk-EUIDTZNQ.cjs');
121
+ require('../chunk-TFF2GTGN.cjs');
122
+ require('../chunk-5UEFBM2M.cjs');
123
123
  require('../chunk-IPJ3TEYR.cjs');
124
124
 
125
125
  // src/animation-editor/types.ts
@@ -702,7 +702,7 @@ function smoothMotionTimes(points, start, duration, pacing = "even") {
702
702
  function motionTextLayout(nodes, id) {
703
703
  const group = _optionalChain([nodes, 'access', _5 => _5.get, 'call', _6 => _6(id), 'optionalAccess', _7 => _7.node]);
704
704
  if (!group || group.type !== "group") return null;
705
- const letters = _chunkWPUXGDH4cjs.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);
705
+ const letters = _chunkJPEHXIB5cjs.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);
706
706
  if (!letters.length) return null;
707
707
  const lines = [];
708
708
  for (const l of [...letters].sort((a, c) => a.b.y + a.b.height / 2 - (c.b.y + c.b.height / 2))) {
@@ -787,21 +787,21 @@ function indexMotionNodes(nodes) {
787
787
  const out = /* @__PURE__ */ new Map();
788
788
  const walk = (list, parentWorld, ancestors) => {
789
789
  for (const node of list) {
790
- const local = _chunkWPUXGDH4cjs.vectorNodeBounds.call(void 0, node);
791
- const bounds = _chunkWPUXGDH4cjs.vectorNodeBounds.call(void 0, node, parentWorld);
790
+ const local = _chunkJPEHXIB5cjs.vectorNodeBounds.call(void 0, node);
791
+ const bounds = _chunkJPEHXIB5cjs.vectorNodeBounds.call(void 0, node, parentWorld);
792
792
  const center = local ? { x: local.x + local.width / 2, y: local.y + local.height / 2 } : { x: 0, y: 0 };
793
793
  if (!out.has(node.id)) out.set(node.id, { node, ancestors, parentWorld, center, bounds, box: local });
794
- if (node.type === "group") walk(node.children, _chunkWPUXGDH4cjs.multiplyMatrices.call(void 0, _chunkWPUXGDH4cjs.nodeMatrix.call(void 0, node), parentWorld), [...ancestors, node.id]);
794
+ if (node.type === "group") walk(node.children, _chunkJPEHXIB5cjs.multiplyMatrices.call(void 0, _chunkJPEHXIB5cjs.nodeMatrix.call(void 0, node), parentWorld), [...ancestors, node.id]);
795
795
  }
796
796
  };
797
- walk(nodes, _chunkWPUXGDH4cjs.IDENTITY_MATRIX, []);
797
+ walk(nodes, _chunkJPEHXIB5cjs.IDENTITY_MATRIX, []);
798
798
  indexCache.set(nodes, out);
799
799
  return out;
800
800
  }
801
801
  var solid = (paint) => typeof paint === "string" && paint !== "none" ? paint : void 0;
802
802
  function firstPaint(node, key) {
803
803
  if (node.type === "path") return solid(node[key]);
804
- for (const p of _chunkWPUXGDH4cjs.collectPathNodes.call(void 0, node)) {
804
+ for (const p of _chunkJPEHXIB5cjs.collectPathNodes.call(void 0, node)) {
805
805
  const s = solid(p[key]);
806
806
  if (s) return s;
807
807
  }
@@ -809,7 +809,7 @@ function firstPaint(node, key) {
809
809
  }
810
810
  function strokeReach(node) {
811
811
  let reach = 0;
812
- for (const p of node.type === "path" ? [node] : _chunkWPUXGDH4cjs.collectPathNodes.call(void 0, node)) {
812
+ for (const p of node.type === "path" ? [node] : _chunkJPEHXIB5cjs.collectPathNodes.call(void 0, node)) {
813
813
  if (p.stroke == null || p.stroke === "none") continue;
814
814
  const width = _nullishCoalesce(p.strokeWidth, () => ( 1));
815
815
  reach = Math.max(reach, p.strokeAlign === "outside" ? width : p.strokeAlign === "inside" ? 0 : width / 2);
@@ -879,7 +879,7 @@ function motionRestValue(entry, property, artwork) {
879
879
  case "stroke":
880
880
  return _nullishCoalesce((node && firstPaint(node, property)), () => ( "transparent"));
881
881
  case "strokeWidth": {
882
- const path = _optionalChain([node, 'optionalAccess', _13 => _13.type]) === "path" ? node : node ? _chunkWPUXGDH4cjs.collectPathNodes.call(void 0, node)[0] : void 0;
882
+ const path = _optionalChain([node, 'optionalAccess', _13 => _13.type]) === "path" ? node : node ? _chunkJPEHXIB5cjs.collectPathNodes.call(void 0, node)[0] : void 0;
883
883
  return _nullishCoalesce(_optionalChain([path, 'optionalAccess', _14 => _14.strokeWidth]), () => ( 1));
884
884
  }
885
885
  case "shape":
@@ -903,7 +903,7 @@ function interpolateMotionValue(from, to, u) {
903
903
  if (u <= 0) return from;
904
904
  if (u >= 1) return to;
905
905
  if (typeof from === "string" && typeof to === "string") {
906
- const mixed = _chunkUTI5IITZcjs.mixColorsOklab.call(void 0, from, to, u);
906
+ const mixed = _chunk4ZC5QJE2cjs.mixColorsOklab.call(void 0, from, to, u);
907
907
  if (mixed !== null) return mixed;
908
908
  }
909
909
  return u < 1 ? from : to;
@@ -990,12 +990,12 @@ function resolveMotionCamera(camera, scene) {
990
990
  const r = camera;
991
991
  return { x: r.x, y: r.y, width: r.width, height: r.height };
992
992
  }
993
- function motionPathLength(node, parentWorld = _chunkWPUXGDH4cjs.IDENTITY_MATRIX) {
993
+ function motionPathLength(node, parentWorld = _chunkJPEHXIB5cjs.IDENTITY_MATRIX) {
994
994
  let longest = 0;
995
- const paths = node.type === "path" ? [node] : _chunkWPUXGDH4cjs.collectPathNodes.call(void 0, node);
995
+ const paths = node.type === "path" ? [node] : _chunkJPEHXIB5cjs.collectPathNodes.call(void 0, node);
996
996
  for (const p of paths) {
997
997
  try {
998
- longest = Math.max(longest, _chunkGF2RBSDMcjs.bezierPathLength.call(void 0, _chunkWPUXGDH4cjs.vectorPathWorldBezier.call(void 0, p, parentWorld, { effects: false })));
998
+ longest = Math.max(longest, _chunkGF2RBSDMcjs.bezierPathLength.call(void 0, _chunkJPEHXIB5cjs.vectorPathWorldBezier.call(void 0, p, parentWorld, { effects: false })));
999
999
  } catch (e2) {
1000
1000
  }
1001
1001
  }
@@ -1271,12 +1271,12 @@ function compileMotionScene(scene) {
1271
1271
  const order2 = _nullishCoalesce(o.order, () => ( "together"));
1272
1272
  const pace = _nullishCoalesce(o.pace, () => ( "time"));
1273
1273
  if (order2 === "together" && pace === "time") return null;
1274
- const paths = entry.node.type === "path" ? [entry.node] : _chunkWPUXGDH4cjs.collectPathNodes.call(void 0, entry.node);
1274
+ const paths = entry.node.type === "path" ? [entry.node] : _chunkJPEHXIB5cjs.collectPathNodes.call(void 0, entry.node);
1275
1275
  let list = paths.map((p) => {
1276
1276
  const at = nodes.get(p.id);
1277
1277
  let first = { x: 0, y: 0 };
1278
1278
  try {
1279
- const m = _chunkWPUXGDH4cjs.vectorPathWorldBezier.call(void 0, p, _nullishCoalesce(_optionalChain([at, 'optionalAccess', _42 => _42.parentWorld]), () => ( _chunkWPUXGDH4cjs.IDENTITY_MATRIX)), { effects: false })[0];
1279
+ const m = _chunkJPEHXIB5cjs.vectorPathWorldBezier.call(void 0, p, _nullishCoalesce(_optionalChain([at, 'optionalAccess', _42 => _42.parentWorld]), () => ( _chunkJPEHXIB5cjs.IDENTITY_MATRIX)), { effects: false })[0];
1280
1280
  if (m && m.type === "M") first = { x: m.x, y: m.y };
1281
1281
  } catch (e3) {
1282
1282
  }
@@ -1388,17 +1388,17 @@ function compileMotionScene(scene) {
1388
1388
  let dx = _nullishCoalesce(_optionalChain([command3, 'access', _45 => _45.by, 'optionalAccess', _46 => _46.x]), () => ( 0));
1389
1389
  let dy = _nullishCoalesce(_optionalChain([command3, 'access', _47 => _47.by, 'optionalAccess', _48 => _48.y]), () => ( 0));
1390
1390
  if (command3.to) {
1391
- const inv = _chunkWPUXGDH4cjs.invertMatrix.call(void 0, entry.parentWorld);
1392
- const target = _chunkWPUXGDH4cjs.applyMatrix.call(void 0, inv, command3.to);
1391
+ const inv = _chunkJPEHXIB5cjs.invertMatrix.call(void 0, entry.parentWorld);
1392
+ const target = _chunkJPEHXIB5cjs.applyMatrix.call(void 0, inv, command3.to);
1393
1393
  dx = target.x - (entry.center.x + num2("x"));
1394
1394
  dy = target.y - (entry.center.y + num2("y"));
1395
1395
  }
1396
1396
  if (_optionalChain([command3, 'access', _49 => _49.via, 'optionalAccess', _50 => _50.length])) {
1397
- const inv = _chunkWPUXGDH4cjs.invertMatrix.call(void 0, entry.parentWorld);
1397
+ const inv = _chunkJPEHXIB5cjs.invertMatrix.call(void 0, entry.parentWorld);
1398
1398
  const x0 = num2("x");
1399
1399
  const y0 = num2("y");
1400
1400
  const add = command3.blend === "add";
1401
- const offsets = [{ x: 0, y: 0 }, ...command3.via.map((p) => _chunkWPUXGDH4cjs.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 }];
1401
+ const offsets = [{ x: 0, y: 0 }, ...command3.via.map((p) => _chunkJPEHXIB5cjs.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 }];
1402
1402
  const times = _optionalChain([command3, 'access', _51 => _51.times, 'optionalAccess', _52 => _52.length]) === command3.via.length ? [start, ...command3.times.map((f) => start + f * (end - start)), end] : smoothMotionTimes(offsets, start, end - start, _nullishCoalesce(command3.pacing, () => ( "even")));
1403
1403
  for (const axis of ["x", "y"]) {
1404
1404
  const base = add ? 0 : axis === "x" ? x0 : y0;
@@ -2021,13 +2021,13 @@ function morphBetween(a, b) {
2021
2021
  let inner = morphCache.get(a);
2022
2022
  if (!inner) morphCache.set(a, inner = /* @__PURE__ */ new WeakMap());
2023
2023
  let morph = inner.get(b);
2024
- if (!morph) inner.set(b, morph = _chunkX7WRL5ZZcjs.createVectorMorph.call(void 0, a, b, { id: a.id }));
2024
+ if (!morph) inner.set(b, morph = _chunkTLOGFIIVcjs.createVectorMorph.call(void 0, a, b, { id: a.id }));
2025
2025
  return morph;
2026
2026
  }
2027
2027
  function shapeIn(entry, shape) {
2028
2028
  if (shape === entry) return entry.node;
2029
- const m = _chunkWPUXGDH4cjs.multiplyMatrices.call(void 0, _chunkWPUXGDH4cjs.multiplyMatrices.call(void 0, _chunkWPUXGDH4cjs.nodeMatrix.call(void 0, shape.node), shape.parentWorld), _chunkWPUXGDH4cjs.invertMatrix.call(void 0, entry.parentWorld));
2030
- return { ...shape.node, ..._chunkWPUXGDH4cjs.isIdentityMatrix.call(void 0, m) ? { transform: void 0 } : { transform: m } };
2029
+ const m = _chunkJPEHXIB5cjs.multiplyMatrices.call(void 0, _chunkJPEHXIB5cjs.multiplyMatrices.call(void 0, _chunkJPEHXIB5cjs.nodeMatrix.call(void 0, shape.node), shape.parentWorld), _chunkJPEHXIB5cjs.invertMatrix.call(void 0, entry.parentWorld));
2030
+ return { ...shape.node, ..._chunkJPEHXIB5cjs.isIdentityMatrix.call(void 0, m) ? { transform: void 0 } : { transform: m } };
2031
2031
  }
2032
2032
  function shapeAt(entry, timeline, nodes, time) {
2033
2033
  const track = timeline.tracks.get(motionTrackKey(entry.node.id, "shape"));
@@ -2047,7 +2047,7 @@ function shapeAt(entry, timeline, nodes, time) {
2047
2047
  function motionFollowRoute(entry, path) {
2048
2048
  if (!path || path.node.type !== "path") return null;
2049
2049
  try {
2050
- return _chunkGF2RBSDMcjs.transformBezierPath.call(void 0, _chunkWPUXGDH4cjs.vectorPathWorldBezier.call(void 0, path.node, path.parentWorld, { effects: false }), _chunkWPUXGDH4cjs.invertMatrix.call(void 0, entry.parentWorld));
2050
+ return _chunkGF2RBSDMcjs.transformBezierPath.call(void 0, _chunkJPEHXIB5cjs.vectorPathWorldBezier.call(void 0, path.node, path.parentWorld, { effects: false }), _chunkJPEHXIB5cjs.invertMatrix.call(void 0, entry.parentWorld));
2051
2051
  } catch (e6) {
2052
2052
  return null;
2053
2053
  }
@@ -2081,9 +2081,9 @@ function motionNodeOffset(entry, timeline, time, nodes = indexMotionNodes([entry
2081
2081
  const scaleX = read("scaleX", 1);
2082
2082
  const scaleY = read("scaleY", 1);
2083
2083
  const c = entry.center;
2084
- let matrix = _chunkWPUXGDH4cjs.multiplyMatrices.call(void 0, _chunkWPUXGDH4cjs.multiplyMatrices.call(void 0, _chunkWPUXGDH4cjs.scaleMatrix.call(void 0, scaleX, scaleY, c), _chunkWPUXGDH4cjs.rotateMatrix.call(void 0, rotation, c)), _chunkWPUXGDH4cjs.translateMatrix.call(void 0, dx, dy));
2084
+ let matrix = _chunkJPEHXIB5cjs.multiplyMatrices.call(void 0, _chunkJPEHXIB5cjs.multiplyMatrices.call(void 0, _chunkJPEHXIB5cjs.scaleMatrix.call(void 0, scaleX, scaleY, c), _chunkJPEHXIB5cjs.rotateMatrix.call(void 0, rotation, c)), _chunkJPEHXIB5cjs.translateMatrix.call(void 0, dx, dy));
2085
2085
  const along = follow ? followAt(entry, timeline, nodes, time) : null;
2086
- if (along) matrix = _chunkWPUXGDH4cjs.multiplyMatrices.call(void 0, matrix, _chunkWPUXGDH4cjs.multiplyMatrices.call(void 0, _chunkWPUXGDH4cjs.multiplyMatrices.call(void 0, _chunkWPUXGDH4cjs.translateMatrix.call(void 0, -c.x, -c.y), _chunkWPUXGDH4cjs.rotateMatrix.call(void 0, along.angle)), _chunkWPUXGDH4cjs.translateMatrix.call(void 0, along.x, along.y)));
2086
+ if (along) matrix = _chunkJPEHXIB5cjs.multiplyMatrices.call(void 0, matrix, _chunkJPEHXIB5cjs.multiplyMatrices.call(void 0, _chunkJPEHXIB5cjs.multiplyMatrices.call(void 0, _chunkJPEHXIB5cjs.translateMatrix.call(void 0, -c.x, -c.y), _chunkJPEHXIB5cjs.rotateMatrix.call(void 0, along.angle)), _chunkJPEHXIB5cjs.translateMatrix.call(void 0, along.x, along.y)));
2087
2087
  return { matrix, dx, dy, rotation, scaleX, scaleY, follow: along };
2088
2088
  }
2089
2089
  function motionNodeClips(id, timeline, time) {
@@ -2150,7 +2150,7 @@ function motionFrameAt(scene, time, options = {}) {
2150
2150
  const start = Math.min(1, Math.max(0, typeof drawStart === "number" ? drawStart : 0));
2151
2151
  const end = Math.min(1, Math.max(0, typeof drawEnd === "number" ? drawEnd : 1));
2152
2152
  if (start > 0 || end < 1) {
2153
- const trim = _chunkWPUXGDH4cjs.createVectorEffect.call(void 0, "trim", MOTION_DRAW_EFFECT_ID, { start: tidy(start * 100), end: tidy(end * 100) });
2153
+ const trim = _chunkJPEHXIB5cjs.createVectorEffect.call(void 0, "trim", MOTION_DRAW_EFFECT_ID, { start: tidy(start * 100), end: tidy(end * 100) });
2154
2154
  p = { ...p, effects: [trim, ...(_nullishCoalesce(p.effects, () => ( []))).filter((e) => e.id !== MOTION_DRAW_EFFECT_ID)] };
2155
2155
  }
2156
2156
  }
@@ -2164,8 +2164,8 @@ function motionFrameAt(scene, time, options = {}) {
2164
2164
  if (o >= 1) delete out.opacity;
2165
2165
  }
2166
2166
  const offset = options.offsets === false ? null : motionNodeOffset(entry, timeline, time, nodes);
2167
- if (offset && !_chunkWPUXGDH4cjs.isIdentityMatrix.call(void 0, offset.matrix)) {
2168
- const m = _chunkWPUXGDH4cjs.multiplyMatrices.call(void 0, _chunkWPUXGDH4cjs.nodeMatrix.call(void 0, out), offset.matrix).map(tidy);
2167
+ if (offset && !_chunkJPEHXIB5cjs.isIdentityMatrix.call(void 0, offset.matrix)) {
2168
+ const m = _chunkJPEHXIB5cjs.multiplyMatrices.call(void 0, _chunkJPEHXIB5cjs.nodeMatrix.call(void 0, out), offset.matrix).map(tidy);
2169
2169
  out = { ...out, transform: m };
2170
2170
  }
2171
2171
  return out;
@@ -2186,8 +2186,8 @@ function motionFrameToSvg(scene, time, options = {}) {
2186
2186
  const wrap = { ...options.wrap };
2187
2187
  for (const [id, clips] of Object.entries(frame.clips))
2188
2188
  wrap[id] = [..._nullishCoalesce(wrap[id], () => ( [])), ...clips.map((clip, i) => ({ clip: { id: `${prefix}reveal-${id}-${i}`, shape: clip.shape, attrs: motionClipAttrs(clip) } }))];
2189
- if (!motionSceneHasLayers(scene)) return withCameraViewEffects(withViewBox(_chunkWPUXGDH4cjs.vectorDocumentToSvg.call(void 0, frame.document, { ...options, wrap }), frame.camera), frame.view, frame.camera, prefix);
2190
- const art = _chunkWPUXGDH4cjs.vectorDocumentToSvg.call(void 0, frame.document, { ...options, wrap, background: false });
2189
+ if (!motionSceneHasLayers(scene)) return withCameraViewEffects(withViewBox(_chunkJPEHXIB5cjs.vectorDocumentToSvg.call(void 0, frame.document, { ...options, wrap }), frame.camera), frame.view, frame.camera, prefix);
2190
+ const art = _chunkJPEHXIB5cjs.vectorDocumentToSvg.call(void 0, frame.document, { ...options, wrap, background: false });
2191
2191
  let svg = withViewBox(withMotionShotLayers(art, scene, time, frame.camera, options.layers, options.background !== false), frame.camera);
2192
2192
  const transition = options.transitions === false ? null : motionTransitionAt(scene, time);
2193
2193
  if (transition) {
@@ -2378,8 +2378,8 @@ function visibleAt(timeline, id, time, node) {
2378
2378
  if (Array.isArray(rect) && (rect[2] <= 1e-4 || rect[3] <= 1e-4)) return false;
2379
2379
  const circle = clip("clipCircle");
2380
2380
  if (Array.isArray(circle) && circle[2] <= 1e-4) return false;
2381
- const hasFill = node.type === "path" ? !!node.fill && node.fill !== "none" : _chunkWPUXGDH4cjs.collectPathNodes.call(void 0, node).some((p) => p.fill && p.fill !== "none");
2382
- const drawn = num2("drawEnd", 1) > 0.01 && (node.type === "path" || _chunkWPUXGDH4cjs.collectPathNodes.call(void 0, node).length === 0 || _chunkWPUXGDH4cjs.collectPathNodes.call(void 0, node).some((p) => {
2381
+ const hasFill = node.type === "path" ? !!node.fill && node.fill !== "none" : _chunkJPEHXIB5cjs.collectPathNodes.call(void 0, node).some((p) => p.fill && p.fill !== "none");
2382
+ const drawn = num2("drawEnd", 1) > 0.01 && (node.type === "path" || _chunkJPEHXIB5cjs.collectPathNodes.call(void 0, node).length === 0 || _chunkJPEHXIB5cjs.collectPathNodes.call(void 0, node).some((p) => {
2383
2383
  const v = trackValue(timeline.tracks.get(motionTrackKey(p.id, "drawEnd")), time);
2384
2384
  return typeof v !== "number" || v > 0.01;
2385
2385
  }));
@@ -2466,7 +2466,7 @@ function checkMotionScene(scene) {
2466
2466
  }
2467
2467
  for (const id of targets) {
2468
2468
  const node = nodes.get(id).node;
2469
- const paths = node.type === "path" ? [node] : _chunkWPUXGDH4cjs.collectPathNodes.call(void 0, node);
2469
+ const paths = node.type === "path" ? [node] : _chunkJPEHXIB5cjs.collectPathNodes.call(void 0, node);
2470
2470
  if (paths.some((p) => p[key] !== void 0 && p[key] !== null && typeof p[key] !== "string"))
2471
2471
  issues.push(_chunkDGWOGQJ5cjs.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] }));
2472
2472
  }
@@ -2479,7 +2479,7 @@ function checkMotionScene(scene) {
2479
2479
  else
2480
2480
  for (const id of targets) {
2481
2481
  const node = nodes.get(id).node;
2482
- const paths = node.type === "path" ? [node] : _chunkWPUXGDH4cjs.collectPathNodes.call(void 0, node);
2482
+ const paths = node.type === "path" ? [node] : _chunkJPEHXIB5cjs.collectPathNodes.call(void 0, node);
2483
2483
  if (paths.some((p) => typeof p[key] !== "string"))
2484
2484
  issues.push(_chunkDGWOGQJ5cjs.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] }));
2485
2485
  }
@@ -2924,7 +2924,7 @@ function motionNodePose(scene, id, time) {
2924
2924
  if (!entry) throw new Error(`There is no element ${_chunkDGWOGQJ5cjs.namedWithSuggestion.call(void 0, id, [...indexMotionNodes(scene.artwork.nodes).keys()])} in the artwork.`);
2925
2925
  const timeline = compileMotionScene(scene);
2926
2926
  const drawn = indexMotionNodes(motionFrameAt(scene, time).document.nodes).get(id);
2927
- const centre = _chunkWPUXGDH4cjs.applyMatrix.call(void 0, entry.parentWorld, { x: entry.center.x + motionPropertyValue(timeline, id, "x", time), y: entry.center.y + motionPropertyValue(timeline, id, "y", time) });
2927
+ const centre = _chunkJPEHXIB5cjs.applyMatrix.call(void 0, entry.parentWorld, { x: entry.center.x + motionPropertyValue(timeline, id, "x", time), y: entry.center.y + motionPropertyValue(timeline, id, "y", time) });
2928
2928
  const paint = (property) => _nullishCoalesce(trackValue(timeline.tracks.get(motionTrackKey(id, property)), time), () => ( motionRestValue(entry, property, scene.artwork)));
2929
2929
  const fill = paint("fill");
2930
2930
  const stroke = paint("stroke");
@@ -3271,7 +3271,7 @@ function toFlairSvgMotion(scene, options = {}) {
3271
3271
  raw: (t) => transformAt(t, true)
3272
3272
  });
3273
3273
  }
3274
- const paths = node.type === "path" ? [node] : _chunkWPUXGDH4cjs.collectPathNodes.call(void 0, node);
3274
+ const paths = node.type === "path" ? [node] : _chunkJPEHXIB5cjs.collectPathNodes.call(void 0, node);
3275
3275
  for (const path of paths) {
3276
3276
  if (pathsSeen.has(path.id)) continue;
3277
3277
  pathsSeen.add(path.id);
@@ -3293,7 +3293,7 @@ function toFlairSvgMotion(scene, options = {}) {
3293
3293
  if (shapeSegments.length) {
3294
3294
  if (node.type !== "path") notes.push(`"${id}" is a group: its morph or effect animation is not exported (Flair tweens one path's "d").`);
3295
3295
  else {
3296
- const inverse = _chunkWPUXGDH4cjs.invertMatrix.call(void 0, _chunkWPUXGDH4cjs.nodeMatrix.call(void 0, node));
3296
+ const inverse = _chunkJPEHXIB5cjs.invertMatrix.call(void 0, _chunkJPEHXIB5cjs.nodeMatrix.call(void 0, node));
3297
3297
  channels.push({
3298
3298
  id,
3299
3299
  kind: "attr",
@@ -3302,9 +3302,9 @@ function toFlairSvgMotion(scene, options = {}) {
3302
3302
  exact: () => false,
3303
3303
  value: (t) => {
3304
3304
  const frame = motionFrameAt(scene, t, { draw: false, offsets: false });
3305
- const now = _chunkWPUXGDH4cjs.expandVectorAppearance.call(void 0, _optionalChain([indexMotionNodes, 'call', _151 => _151(frame.document.nodes), 'access', _152 => _152.get, 'call', _153 => _153(id), 'optionalAccess', _154 => _154.node]));
3305
+ const now = _chunkJPEHXIB5cjs.expandVectorAppearance.call(void 0, _optionalChain([indexMotionNodes, 'call', _151 => _151(frame.document.nodes), 'access', _152 => _152.get, 'call', _153 => _153(id), 'optionalAccess', _154 => _154.node]));
3306
3306
  if (!now || now.type !== "path") return "";
3307
- const bezier = _chunkGF2RBSDMcjs.transformBezierPath.call(void 0, _chunkWPUXGDH4cjs.vectorPathWorldBezier.call(void 0, now, _chunkWPUXGDH4cjs.IDENTITY_MATRIX, { effects: false }), inverse);
3307
+ const bezier = _chunkGF2RBSDMcjs.transformBezierPath.call(void 0, _chunkJPEHXIB5cjs.vectorPathWorldBezier.call(void 0, now, _chunkJPEHXIB5cjs.IDENTITY_MATRIX, { effects: false }), inverse);
3308
3308
  return _chunkGF2RBSDMcjs.bezierPathToSvg.call(void 0, bezier, { precision: Math.min(precision, 2) });
3309
3309
  }
3310
3310
  });
@@ -3444,7 +3444,7 @@ function toFlairSvgMotion(scene, options = {}) {
3444
3444
  }
3445
3445
  if (scene.motionBlur) notes.push("Motion blur is drawn on the stage only; Flair plays the scene sharp.");
3446
3446
  if (trigger && (_nullishCoalesce(scene.loop, () => ( "none"))) !== "none") notes.push(`The scene plays on ${trigger}, so its loop does not apply in Flair.`);
3447
- let svg = _chunkWPUXGDH4cjs.vectorDocumentToSvg.call(void 0, { ...scene.artwork, nodes: _chunkWPUXGDH4cjs.expandVectorAppearances.call(void 0, scene.artwork.nodes) }, { pretty: false, precision, wrap });
3447
+ let svg = _chunkJPEHXIB5cjs.vectorDocumentToSvg.call(void 0, { ...scene.artwork, nodes: _chunkJPEHXIB5cjs.expandVectorAppearances.call(void 0, scene.artwork.nodes) }, { pretty: false, precision, wrap });
3448
3448
  if (routes.length) svg = svg.replace(/^(<svg[^>]*>)/, `$1<defs>${routes.join("")}</defs>`);
3449
3449
  let motion = { svg, animate };
3450
3450
  if (_optionalChain([scene, 'access', _160 => _160.controls, 'optionalAccess', _161 => _161.length])) {
@@ -3542,14 +3542,14 @@ function easingOf(ease, fallback) {
3542
3542
  return fallback;
3543
3543
  }
3544
3544
  function poseOf(value, entry) {
3545
- const t = _chunkWPUXGDH4cjs.parseSvgTransform.call(void 0, String(value));
3546
- const o = _chunkWPUXGDH4cjs.multiplyMatrices.call(void 0, _nullishCoalesce(_chunkWPUXGDH4cjs.invertMatrix.call(void 0, _chunkWPUXGDH4cjs.nodeMatrix.call(void 0, entry.node)), () => ( [1, 0, 0, 1, 0, 0])), t);
3545
+ const t = _chunkJPEHXIB5cjs.parseSvgTransform.call(void 0, String(value));
3546
+ const o = _chunkJPEHXIB5cjs.multiplyMatrices.call(void 0, _nullishCoalesce(_chunkJPEHXIB5cjs.invertMatrix.call(void 0, _chunkJPEHXIB5cjs.nodeMatrix.call(void 0, entry.node)), () => ( [1, 0, 0, 1, 0, 0])), t);
3547
3547
  const sx = Math.hypot(o[0], o[1]);
3548
3548
  if (!(sx > 1e-9)) return null;
3549
3549
  const sy = (o[0] * o[3] - o[1] * o[2]) / sx;
3550
3550
  if (Math.abs(o[2] + o[1] / sx * sy) > 1e-6 || Math.abs(o[3] - o[0] / sx * sy) > 1e-6) return null;
3551
3551
  const c = entry.center;
3552
- const moved = _chunkWPUXGDH4cjs.applyMatrix.call(void 0, o, c);
3552
+ const moved = _chunkJPEHXIB5cjs.applyMatrix.call(void 0, o, c);
3553
3553
  return { dx: moved.x - c.x, dy: moved.y - c.y, rotation: Math.atan2(o[1], o[0]) * 180 / Math.PI, sx, sy };
3554
3554
  }
3555
3555
  var near = (a, b, eps = 1e-6) => Math.abs(a - b) < eps;
@@ -3634,7 +3634,7 @@ function fromFlairSvgMotion(input, options = {}) {
3634
3634
  const notes = [];
3635
3635
  if (!input || typeof input.svg !== "string") throw new Error('Give a Flair SvgMotion: { svg: "<svg \u2026>", animate: [ \u2026 ] }.');
3636
3636
  const { motion, controls } = resolvePlaceholders(input, notes);
3637
- const artwork = _chunkWPUXGDH4cjs.parseVectorSvg.call(void 0, motion.svg);
3637
+ const artwork = _chunkJPEHXIB5cjs.parseVectorSvg.call(void 0, motion.svg);
3638
3638
  const nodes = indexMotionNodes(artwork.nodes);
3639
3639
  const byStep = /* @__PURE__ */ new Map();
3640
3640
  for (const anim of _nullishCoalesce(motion.animate, () => ( []))) {
@@ -3881,9 +3881,9 @@ function toLottie(scene, options = {}) {
3881
3881
  const items = [];
3882
3882
  const shapeSegments = [...timeline.tracks.entries()].filter(([k]) => k.startsWith(`${path.id}\0`) && (k.endsWith("\0shape") || k.includes("\0effect:"))).flatMap(([, v]) => v);
3883
3883
  const geometryAt = (t) => {
3884
- if (!shapeSegments.length) return _chunkWPUXGDH4cjs.vectorPathWorldBezier.call(void 0, path);
3884
+ if (!shapeSegments.length) return _chunkJPEHXIB5cjs.vectorPathWorldBezier.call(void 0, path);
3885
3885
  const now = _optionalChain([indexMotionNodes, 'call', _170 => _170(motionFrameAt(scene, t, { draw: false, offsets: false }).document.nodes), 'access', _171 => _171.get, 'call', _172 => _172(path.id), 'optionalAccess', _173 => _173.node]);
3886
- return now && now.type === "path" ? _chunkWPUXGDH4cjs.vectorPathWorldBezier.call(void 0, _chunkWPUXGDH4cjs.expandVectorAppearances.call(void 0, [now])[0]) : _chunkWPUXGDH4cjs.vectorPathWorldBezier.call(void 0, path);
3886
+ return now && now.type === "path" ? _chunkJPEHXIB5cjs.vectorPathWorldBezier.call(void 0, _chunkJPEHXIB5cjs.expandVectorAppearances.call(void 0, [now])[0]) : _chunkJPEHXIB5cjs.vectorPathWorldBezier.call(void 0, path);
3887
3887
  };
3888
3888
  const rest = lottieContours(_chunkGF2RBSDMcjs.toBezierPath.call(void 0, geometryAt(0)), round4);
3889
3889
  rest.forEach((contour, n2) => {
@@ -3956,13 +3956,13 @@ function toLottie(scene, options = {}) {
3956
3956
  const innerTr = STATIC_TR();
3957
3957
  if (node.type === "path") inner = [...pathShapes(node)];
3958
3958
  else if (node.type === "text" || node.type === "instance") {
3959
- const drawn = _chunkWPUXGDH4cjs.expandVectorAppearance.call(void 0, node);
3959
+ const drawn = _chunkJPEHXIB5cjs.expandVectorAppearance.call(void 0, node);
3960
3960
  inner = drawn.type === "path" ? [...pathShapes(drawn)] : drawn.children.filter((c) => c.type === "path").reverse().flatMap((c) => [...pathShapes(c)]);
3961
- notes.push(`"${node.id}": text is exported as its outlines${_chunkWPUXGDH4cjs.vectorTextHasOutlines.call(void 0, ) ? "" : " (glyph boxes: set an outline text shaper for real glyphs)"}.`);
3961
+ notes.push(`"${node.id}": text is exported as its outlines${_chunkJPEHXIB5cjs.vectorTextHasOutlines.call(void 0, ) ? "" : " (glyph boxes: set an outline text shaper for real glyphs)"}.`);
3962
3962
  } else {
3963
3963
  inner = shown(node.children).reverse().map(nodeGroup);
3964
- const m = _chunkWPUXGDH4cjs.nodeMatrix.call(void 0, node);
3965
- if (m !== _chunkWPUXGDH4cjs.IDENTITY_MATRIX) {
3964
+ const m = _chunkJPEHXIB5cjs.nodeMatrix.call(void 0, node);
3965
+ if (m !== _chunkJPEHXIB5cjs.IDENTITY_MATRIX) {
3966
3966
  const parts = staticParts(m);
3967
3967
  if (!parts) notes.push(`"${node.id}": its transform skews, which is not exported; it is drawn without the skew.`);
3968
3968
  else {
@@ -3975,7 +3975,7 @@ function toLottie(scene, options = {}) {
3975
3975
  const body = { ty: "gr", nm: `${node.id} (own)`, it: [...inner, innerTr] };
3976
3976
  return { ty: "gr", nm: _nullishCoalesce(node.name, () => ( node.id)), it: [body, poseTransform(entry)] };
3977
3977
  };
3978
- const artwork = { ...scene.artwork, nodes: _chunkWPUXGDH4cjs.expandVectorAppearances.call(void 0, scene.artwork.nodes) };
3978
+ const artwork = { ...scene.artwork, nodes: _chunkJPEHXIB5cjs.expandVectorAppearances.call(void 0, scene.artwork.nodes) };
3979
3979
  const content = shown(artwork.nodes).reverse().map(nodeGroup);
3980
3980
  if (artwork.background && rgba(artwork.background))
3981
3981
  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(round4) }, o: { a: 0, k: 100 }, r: 1 }, STATIC_TR()] });
@@ -4074,11 +4074,11 @@ function preset(prst, w, h) {
4074
4074
  const poly = (pts) => [{ closed: true, anchors: pts.map(([x, y]) => ({ x, y })) }];
4075
4075
  switch (prst) {
4076
4076
  case "rect":
4077
- return [_chunkWPUXGDH4cjs.rectSubpath.call(void 0, { x: 0, y: 0, width: w, height: h })];
4077
+ return [_chunkJPEHXIB5cjs.rectSubpath.call(void 0, { x: 0, y: 0, width: w, height: h })];
4078
4078
  case "roundRect":
4079
- return [_chunkWPUXGDH4cjs.rectSubpath.call(void 0, { x: 0, y: 0, width: w, height: h }, Math.min(w, h) * 0.16667)];
4079
+ return [_chunkJPEHXIB5cjs.rectSubpath.call(void 0, { x: 0, y: 0, width: w, height: h }, Math.min(w, h) * 0.16667)];
4080
4080
  case "ellipse":
4081
- return [_chunkWPUXGDH4cjs.ellipseSubpath.call(void 0, { x: 0, y: 0, width: w, height: h })];
4081
+ return [_chunkJPEHXIB5cjs.ellipseSubpath.call(void 0, { x: 0, y: 0, width: w, height: h })];
4082
4082
  case "triangle":
4083
4083
  return poly([[w / 2, 0], [w, h], [0, h]]);
4084
4084
  case "rtTriangle":
@@ -4186,7 +4186,7 @@ function shapes(ctx, tree, map) {
4186
4186
  let subpaths = cust ? custom(cust, w, h) : prst ? preset(prst, w, h) : null;
4187
4187
  if (!subpaths) {
4188
4188
  if (prst) ctx.notes.push(`"${name}" is a ${prst}, drawn as its bounding rectangle.`);
4189
- subpaths = [_chunkWPUXGDH4cjs.rectSubpath.call(void 0, { x: 0, y: 0, width: w, height: h })];
4189
+ subpaths = [_chunkJPEHXIB5cjs.rectSubpath.call(void 0, { x: 0, y: 0, width: w, height: h })];
4190
4190
  }
4191
4191
  const style = kid(el, "style");
4192
4192
  const fill = kid(spPr, "noFill") ? null : _nullishCoalesce(colour(ctx, kid(spPr, "solidFill")), () => ( (el.localName === "cxnSp" ? null : colour(ctx, kid(style, "fillRef")))));
@@ -4575,7 +4575,7 @@ function nextMotionEffectInstance(scene) {
4575
4575
  walk(scene.artwork.nodes);
4576
4576
  for (let i = 1; ; i++) if (!used.has(`fx${i}`)) return `fx${i}`;
4577
4577
  }
4578
- var motionArtworkSvg = (artwork) => _chunkWPUXGDH4cjs.vectorDocumentToSvg.call(void 0, artwork);
4578
+ var motionArtworkSvg = (artwork) => _chunkJPEHXIB5cjs.vectorDocumentToSvg.call(void 0, artwork);
4579
4579
  var tag = (commands, source) => commands.map((c) => c.type === "wait" ? c : { ...c, source });
4580
4580
  function motionCommandsFromEffect(artwork, motion, source) {
4581
4581
  const imported = fromFlairSvgMotion({ svg: motionArtworkSvg(artwork), animate: [..._nullishCoalesce(motion.animate, () => ( []))] });
@@ -4681,7 +4681,7 @@ var AnimationEditorController = (_class2 = class {
4681
4681
  host: options.layerHost === void 0 ? browserMotionLayerHost() : options.layerHost,
4682
4682
  frameSvg: (scene, time) => motionFrameToSvg(scene, time, { effects: this.effects.provider, layers: this.layers, transitions: false, pretty: false })
4683
4683
  });
4684
- this.player = new (0, _chunkLJZRHVZVcjs.AnimationPlayer)({ clock: options.clock, duration: () => compileMotionScene(this.scene).duration, loop: _nullishCoalesce(this.scene.loop, () => ( "none")) });
4684
+ this.player = new (0, _chunkM5GLQQWGcjs.AnimationPlayer)({ clock: options.clock, duration: () => compileMotionScene(this.scene).duration, loop: _nullishCoalesce(this.scene.loop, () => ( "none")) });
4685
4685
  this.state = this.computeState();
4686
4686
  this.connect();
4687
4687
  }
@@ -4919,7 +4919,7 @@ var AnimationEditorController = (_class2 = class {
4919
4919
  const entry = indexMotionNodes(this.scene.artwork.nodes).get(options.path.node);
4920
4920
  if (!entry) throw new Error(`There is no node "${options.path.node}"; find_animation_elements lists the artwork's nodes.`);
4921
4921
  if (entry.node.type !== "path") throw new Error(`Node "${options.path.node}" is a ${entry.node.type}, not a path; pass a path node (find_animation_elements shows each node's type).`);
4922
- value = _chunkGF2RBSDMcjs.bezierPathToSvg.call(void 0, _chunkWPUXGDH4cjs.vectorPathWorldBezier.call(void 0, entry.node, entry.parentWorld, { effects: false }));
4922
+ value = _chunkGF2RBSDMcjs.bezierPathToSvg.call(void 0, _chunkJPEHXIB5cjs.vectorPathWorldBezier.call(void 0, entry.node, entry.parentWorld, { effects: false }));
4923
4923
  place ??= "viewBox";
4924
4924
  } else {
4925
4925
  const provider = this.effects.require();
@@ -6180,7 +6180,7 @@ function createAnimationEditorToolProvider(controller, options = {}) {
6180
6180
  handler: ({ svg }) => {
6181
6181
  let artwork;
6182
6182
  try {
6183
- artwork = _chunkWPUXGDH4cjs.parseVectorSvg.call(void 0, svg);
6183
+ artwork = _chunkJPEHXIB5cjs.parseVectorSvg.call(void 0, svg);
6184
6184
  } catch (error) {
6185
6185
  throw new Error(`The SVG could not be read: ${error.message}. Nothing was changed.`);
6186
6186
  }
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  createVectorMorph
3
- } from "../chunk-NTRAVM2I.js";
3
+ } from "../chunk-7P6VF3FG.js";
4
4
  import {
5
5
  MOTION_ISSUE_CODES,
6
6
  motionIssue,
@@ -39,9 +39,9 @@ import {
39
39
  vectorNodeBounds,
40
40
  vectorPathWorldBezier,
41
41
  vectorTextHasOutlines
42
- } from "../chunk-KDLBJ6QR.js";
43
- import "../chunk-OTEPAQJX.js";
44
- import "../chunk-WKH5ZAUA.js";
42
+ } from "../chunk-GYMMNCFT.js";
43
+ import "../chunk-MTKY6K3Q.js";
44
+ import "../chunk-APX63ILU.js";
45
45
  import "../chunk-M6DNZNVY.js";
46
46
  import {
47
47
  bezierPathLength,
@@ -73,11 +73,12 @@ import {
73
73
  resolveEffectValues
74
74
  } from "../chunk-JA57JIT5.js";
75
75
  import "../chunk-V2ZCJRDM.js";
76
- import "../chunk-D5KGAO4Z.js";
76
+ import "../chunk-TXFWZ5ZJ.js";
77
+ import "../chunk-GCVFEPJG.js";
77
78
  import "../chunk-4D6KP5BV.js";
78
79
  import "../chunk-ODBT55Q7.js";
79
- import "../chunk-IRSTHLQQ.js";
80
80
  import "../chunk-OTTT5N3K.js";
81
+ import "../chunk-IRSTHLQQ.js";
81
82
  import "../chunk-HVVR5PZW.js";
82
83
  import "../chunk-QGHEDC7B.js";
83
84
  import "../chunk-SIFAIGB3.js";
@@ -98,7 +99,7 @@ import {
98
99
  } from "../chunk-DS4WGCLJ.js";
99
100
  import {
100
101
  AnimationPlayer
101
- } from "../chunk-CXXXAZ7H.js";
102
+ } from "../chunk-F6R67I3A.js";
102
103
  import {
103
104
  ANIMATION_EASING_LABELS,
104
105
  ANIMATION_EASING_PRESETS,
@@ -110,16 +111,15 @@ import {
110
111
  } from "../chunk-5UJHB3BW.js";
111
112
  import {
112
113
  mixColorsOklab
113
- } from "../chunk-V6DT2CDH.js";
114
+ } from "../chunk-M2TPMYJE.js";
114
115
  import {
115
116
  hexToRgba,
116
117
  normalizeTokenColor,
117
118
  rgbaToHex
118
119
  } from "../chunk-2WPNAGHI.js";
119
- import "../chunk-BP6KSGVD.js";
120
- import "../chunk-6ADHGQ73.js";
121
- import "../chunk-JEGJP4OW.js";
122
- import "../chunk-F67XMVDI.js";
120
+ import "../chunk-7272D3K2.js";
121
+ import "../chunk-YBAPT7NL.js";
122
+ import "../chunk-MHLU6GRJ.js";
123
123
  import "../chunk-6ONMQ6WF.js";
124
124
 
125
125
  // src/animation-editor/types.ts