@pixerate/editor 0.59.0 → 0.60.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 (38) hide show
  1. package/dist/agent/index.cjs +111 -38
  2. package/dist/agent/index.cjs.map +1 -1
  3. package/dist/agent/index.d.cts +30 -2
  4. package/dist/agent/index.d.ts +30 -2
  5. package/dist/agent/index.js +96 -23
  6. package/dist/agent/index.js.map +1 -1
  7. package/dist/agent-caret-BmYhQF7L.d.cts +106 -0
  8. package/dist/agent-caret-BmYhQF7L.d.ts +106 -0
  9. package/dist/animation-editor/index.cjs +85 -47
  10. package/dist/animation-editor/index.cjs.map +1 -1
  11. package/dist/animation-editor/index.d.cts +82 -2
  12. package/dist/animation-editor/index.d.ts +82 -2
  13. package/dist/animation-editor/index.js +84 -46
  14. package/dist/animation-editor/index.js.map +1 -1
  15. package/dist/{chunk-LMUDHBWR.js → chunk-4YFMSPBU.js} +2 -2
  16. package/dist/{chunk-3I6V7PI4.cjs → chunk-7ZSU4MQZ.cjs} +45 -45
  17. package/dist/{chunk-3I6V7PI4.cjs.map → chunk-7ZSU4MQZ.cjs.map} +1 -1
  18. package/dist/{chunk-WLVZ235X.js → chunk-OK7T2LHK.js} +229 -2
  19. package/dist/chunk-OK7T2LHK.js.map +1 -0
  20. package/dist/{chunk-AHCENCU4.cjs → chunk-T4XWVPJK.cjs} +253 -26
  21. package/dist/chunk-T4XWVPJK.cjs.map +1 -0
  22. package/dist/extensions/index.cjs +27 -3
  23. package/dist/extensions/index.cjs.map +1 -1
  24. package/dist/extensions/index.d.cts +2 -1
  25. package/dist/extensions/index.d.ts +2 -1
  26. package/dist/extensions/index.js +26 -2
  27. package/dist/{index-CTCc3m3C.d.ts → index-B16wbOn_.d.ts} +1 -0
  28. package/dist/{index-BcHyG0Wq.d.cts → index-BAt14aIU.d.cts} +1 -0
  29. package/dist/index.cjs +32 -8
  30. package/dist/index.cjs.map +1 -1
  31. package/dist/index.d.cts +3 -2
  32. package/dist/index.d.ts +3 -2
  33. package/dist/index.js +26 -2
  34. package/dist/index.js.map +1 -1
  35. package/package.json +1 -1
  36. package/dist/chunk-AHCENCU4.cjs.map +0 -1
  37. package/dist/chunk-WLVZ235X.js.map +0 -1
  38. /package/dist/{chunk-LMUDHBWR.js.map → chunk-4YFMSPBU.js.map} +0 -0
@@ -159,6 +159,13 @@ interface MotionDrawCommand extends MotionCommandBase {
159
159
  }
160
160
  /** Moves targets by an offset, or to a point (their centre lands there). */
161
161
  interface MotionMoveCommand extends MotionCommandBase {
162
+ /**
163
+ * `add` makes the change a layer over the pose instead of a change to it: it stacks on
164
+ * whatever else moves the target (a shake on a slide), and what it adds stays once it ends.
165
+ * Default `replace` for move, rotate and scale (the later change takes over), `add` for
166
+ * pulse, shake, teeter, wave and wiggle.
167
+ */
168
+ blend?: 'replace' | 'add';
162
169
  type: 'move';
163
170
  by?: {
164
171
  x: number;
@@ -171,12 +178,26 @@ interface MotionMoveCommand extends MotionCommandBase {
171
178
  }
172
179
  /** Turns targets about their centre, by or to an angle in degrees (clockwise). */
173
180
  interface MotionRotateCommand extends MotionCommandBase {
181
+ /**
182
+ * `add` makes the change a layer over the pose instead of a change to it: it stacks on
183
+ * whatever else moves the target (a shake on a slide), and what it adds stays once it ends.
184
+ * Default `replace` for move, rotate and scale (the later change takes over), `add` for
185
+ * pulse, shake, teeter, wave and wiggle.
186
+ */
187
+ blend?: 'replace' | 'add';
174
188
  type: 'rotate';
175
189
  by?: number;
176
190
  to?: number;
177
191
  }
178
192
  /** Scales targets about their centre (1 = rest size). */
179
193
  interface MotionScaleCommand extends MotionCommandBase {
194
+ /**
195
+ * `add` makes the change a layer over the pose instead of a change to it: it stacks on
196
+ * whatever else moves the target (a shake on a slide), and what it adds stays once it ends.
197
+ * Default `replace` for move, rotate and scale (the later change takes over), `add` for
198
+ * pulse, shake, teeter, wave and wiggle.
199
+ */
200
+ blend?: 'replace' | 'add';
180
201
  type: 'scale';
181
202
  to: number | {
182
203
  x: number;
@@ -218,6 +239,13 @@ interface MotionFollowCommand extends MotionCommandBase {
218
239
  }
219
240
  /** Scales up and back, `count` times (draws the eye). */
220
241
  interface MotionPulseCommand extends MotionCommandBase {
242
+ /**
243
+ * `add` makes the change a layer over the pose instead of a change to it: it stacks on
244
+ * whatever else moves the target (a shake on a slide), and what it adds stays once it ends.
245
+ * Default `replace` for move, rotate and scale (the later change takes over), `add` for
246
+ * pulse, shake, teeter, wave and wiggle.
247
+ */
248
+ blend?: 'replace' | 'add';
221
249
  type: 'pulse';
222
250
  /** Extra scale at the peak (default 0.15). */
223
251
  amount?: number;
@@ -225,6 +253,13 @@ interface MotionPulseCommand extends MotionCommandBase {
225
253
  }
226
254
  /** Shakes side to side (or up and down), settling. */
227
255
  interface MotionShakeCommand extends MotionCommandBase {
256
+ /**
257
+ * `add` makes the change a layer over the pose instead of a change to it: it stacks on
258
+ * whatever else moves the target (a shake on a slide), and what it adds stays once it ends.
259
+ * Default `replace` for move, rotate and scale (the later change takes over), `add` for
260
+ * pulse, shake, teeter, wave and wiggle.
261
+ */
262
+ blend?: 'replace' | 'add';
228
263
  type: 'shake';
229
264
  /** Distance in document units (default 8). */
230
265
  amount?: number;
@@ -234,6 +269,13 @@ interface MotionShakeCommand extends MotionCommandBase {
234
269
  }
235
270
  /** Rocks about the centre by `angle` either way, settling (Flair's `emphasis.teeter`). */
236
271
  interface MotionTeeterCommand extends MotionCommandBase {
272
+ /**
273
+ * `add` makes the change a layer over the pose instead of a change to it: it stacks on
274
+ * whatever else moves the target (a shake on a slide), and what it adds stays once it ends.
275
+ * Default `replace` for move, rotate and scale (the later change takes over), `add` for
276
+ * pulse, shake, teeter, wave and wiggle.
277
+ */
278
+ blend?: 'replace' | 'add';
237
279
  type: 'teeter';
238
280
  /** Degrees either way (default 8). */
239
281
  angle?: number;
@@ -242,6 +284,13 @@ interface MotionTeeterCommand extends MotionCommandBase {
242
284
  }
243
285
  /** Bobs up and down without settling, like something floating (Flair's `emphasis.wave`). */
244
286
  interface MotionWaveCommand extends MotionCommandBase {
287
+ /**
288
+ * `add` makes the change a layer over the pose instead of a change to it: it stacks on
289
+ * whatever else moves the target (a shake on a slide), and what it adds stays once it ends.
290
+ * Default `replace` for move, rotate and scale (the later change takes over), `add` for
291
+ * pulse, shake, teeter, wave and wiggle.
292
+ */
293
+ blend?: 'replace' | 'add';
245
294
  type: 'wave';
246
295
  /** Height in document units (default 6). */
247
296
  amount?: number;
@@ -253,6 +302,13 @@ interface MotionWaveCommand extends MotionCommandBase {
253
302
  * `emphasis.wiggle`). The same seed always wanders the same way.
254
303
  */
255
304
  interface MotionWiggleCommand extends MotionCommandBase {
305
+ /**
306
+ * `add` makes the change a layer over the pose instead of a change to it: it stacks on
307
+ * whatever else moves the target (a shake on a slide), and what it adds stays once it ends.
308
+ * Default `replace` for move, rotate and scale (the later change takes over), `add` for
309
+ * pulse, shake, teeter, wave and wiggle.
310
+ */
311
+ blend?: 'replace' | 'add';
256
312
  type: 'wiggle';
257
313
  /** Up to about this far, in document units (default 6). */
258
314
  amount?: number;
@@ -294,6 +350,7 @@ type MotionCommand = MotionEnterCommand | MotionExitCommand | MotionDrawCommand
294
350
  type MotionCommandType = MotionCommand['type'];
295
351
  declare const MOTION_COMMAND_TYPES: readonly MotionCommandType[];
296
352
  declare const MOTION_ENTER_STYLES: readonly MotionEnterStyle[];
353
+ declare const MOTION_BLENDS: readonly ["replace", "add"];
297
354
  declare const MOTION_REPEAT_MODES: readonly ["loop", "mirror", "offset"];
298
355
  declare const MOTION_EXIT_STYLES: readonly MotionExitStyle[];
299
356
  declare const MOTION_IRIS_SHAPES: readonly MotionIrisShape[];
@@ -530,6 +587,12 @@ interface MotionSegment {
530
587
  steps?: number;
531
588
  /** Numbers change by a steady factor (`from·(to/from)^u`); a camera zooms at a steady rate. */
532
589
  geometric?: boolean;
590
+ /**
591
+ * `add`: the segment is a layer over the node's pose rather than a change to it. It lives on
592
+ * its own track (`motionAddTrackKey`), runs from 0 (offsets, turns) or 1 (scales), and what
593
+ * it adds stays once it ends, on top of whatever the pose does.
594
+ */
595
+ blend?: 'add';
533
596
  /** For `follow`: the path node id, and whether to turn with it. */
534
597
  path?: string;
535
598
  rotate?: boolean;
@@ -633,6 +696,15 @@ declare function activeSegment(track: readonly MotionSegment[] | undefined, time
633
696
  /** A track's value at `time`, or `undefined` when nothing animates it. `raw` ignores behaviours (see `segmentValue`). */
634
697
  declare function trackValue(track: readonly MotionSegment[] | undefined, time: number, raw?: boolean): MotionValue | undefined;
635
698
  declare const motionTrackKey: (node: string, property: MotionProperty) => string;
699
+ /** The track of a node property's additive layers (segments with `blend: 'add'`). */
700
+ declare const motionAddTrackKey: (node: string, property: MotionProperty) => string;
701
+ /** Properties that take additive layers: offsets and turns add, scales multiply. */
702
+ declare const MOTION_ADDITIVE_PROPERTIES: readonly MotionProperty[];
703
+ /**
704
+ * A property's value with its additive layers on top of `base` (its pose): every layer that has
705
+ * started adds its value (offsets, turns) or multiplies by it (scales). `raw` ignores behaviours.
706
+ */
707
+ declare function withMotionLayers(timeline: Pick<MotionTimeline, 'tracks'>, node: string, property: MotionProperty, base: number, time: number, raw?: boolean): number;
636
708
  /** Grows a rectangle to the artwork's aspect ratio (about its centre). */
637
709
  declare function fitMotionRect(rect: MotionRect, aspect: number): MotionRect;
638
710
  /** The rectangle a camera looks at, or `null` when it frames an unknown node. */
@@ -1248,6 +1320,7 @@ declare function describeMotionShots(scene: MotionScene): {
1248
1320
  flairPrimitive?: string | undefined;
1249
1321
  start: number;
1250
1322
  end: number;
1323
+ blend?: "replace" | "add";
1251
1324
  type: "move";
1252
1325
  by?: {
1253
1326
  x: number;
@@ -1272,6 +1345,7 @@ declare function describeMotionShots(scene: MotionScene): {
1272
1345
  flairPrimitive?: string | undefined;
1273
1346
  start: number;
1274
1347
  end: number;
1348
+ blend?: "replace" | "add";
1275
1349
  type: "rotate";
1276
1350
  by?: number;
1277
1351
  to?: number;
@@ -1290,6 +1364,7 @@ declare function describeMotionShots(scene: MotionScene): {
1290
1364
  flairPrimitive?: string | undefined;
1291
1365
  start: number;
1292
1366
  end: number;
1367
+ blend?: "replace" | "add";
1293
1368
  type: "scale";
1294
1369
  to: number | {
1295
1370
  x: number;
@@ -1384,6 +1459,7 @@ declare function describeMotionShots(scene: MotionScene): {
1384
1459
  flairPrimitive?: string | undefined;
1385
1460
  start: number;
1386
1461
  end: number;
1462
+ blend?: "replace" | "add";
1387
1463
  type: "pulse";
1388
1464
  amount?: number;
1389
1465
  count?: number;
@@ -1402,6 +1478,7 @@ declare function describeMotionShots(scene: MotionScene): {
1402
1478
  flairPrimitive?: string | undefined;
1403
1479
  start: number;
1404
1480
  end: number;
1481
+ blend?: "replace" | "add";
1405
1482
  type: "shake";
1406
1483
  amount?: number;
1407
1484
  count?: number;
@@ -1421,6 +1498,7 @@ declare function describeMotionShots(scene: MotionScene): {
1421
1498
  flairPrimitive?: string | undefined;
1422
1499
  start: number;
1423
1500
  end: number;
1501
+ blend?: "replace" | "add";
1424
1502
  type: "teeter";
1425
1503
  angle?: number;
1426
1504
  count?: number;
@@ -1439,6 +1517,7 @@ declare function describeMotionShots(scene: MotionScene): {
1439
1517
  flairPrimitive?: string | undefined;
1440
1518
  start: number;
1441
1519
  end: number;
1520
+ blend?: "replace" | "add";
1442
1521
  type: "wave";
1443
1522
  amount?: number;
1444
1523
  count?: number;
@@ -1457,6 +1536,7 @@ declare function describeMotionShots(scene: MotionScene): {
1457
1536
  flairPrimitive?: string | undefined;
1458
1537
  start: number;
1459
1538
  end: number;
1539
+ blend?: "replace" | "add";
1460
1540
  type: "wiggle";
1461
1541
  amount?: number;
1462
1542
  frequency?: number;
@@ -1542,6 +1622,6 @@ declare function createAnimationEditorToolProvider(controller: AnimationEditorCo
1542
1622
  * A short authoring guide for a model writing vector animations with the animation editor's
1543
1623
  * tools. Static, so it caches well as part of a system prompt.
1544
1624
  */
1545
- declare const ANIMATION_EDITOR_AGENT_INSTRUCTIONS = "You animate vector artwork. A scene is artwork (vector paths and groups, each with an id) plus shots.\n\nHow it plays\n- Shots play in order. A shot optionally moves the camera, plays its commands, then holds (default 600 ms).\n- Commands in a shot play one after another; give \"with\": \"previous\" to start one together with the command before, \"delay\" to wait, \"stagger\" to offset several targets.\n- Timing comes from the content: each command has a default length (enter 600 ms, move 700 ms, draw follows the path length). Only set \"duration\" to change the pace.\n- Anything that enters later is hidden until it enters. Things that never enter are visible from the start.\n- Every frame is a pure function of time: the same scene always plays the same frames.\n\nCommands\n- enter (fade, pop, grow, slide, draw) and exit (fade, shrink, slide, undraw) bring things in and out.\n- enter also reveals through a clip over the target's box: wipe (behind an edge travelling \"direction\", default right), iris (from the centre; \"shape\": circle or box) and split (from a line through the middle; \"orientation\": horizontal or vertical). exit wipe hides the same way. Reveals need a width and a height: use draw / undraw for a straight line.\n- draw draws strokes on to a fraction; move, rotate, scale and fade change the pose (about the centre); style blends solid colours and stroke width.\n- enter also has zoom (settles from larger) and rise (rises a short way, overshooting a touch); pop and zoom take a starting \"scale\".\n- morph turns a shape into another node's shape (keep the target hidden); follow moves along a path node (with \"rotate\", moves made meanwhile turn with the path).\n- Emphasis draws the eye and returns to rest: pulse (swell), shake (side to side, or \"axis\": \"vertical\"), teeter (rock), wave (bob, no settling), wiggle (seeded wander; the same seed wanders the same way) and color-pulse (tint and back).\n- Any command but enter and exit can \"repeat\" (loop, mirror back and forth, or offset to carry on: rotate by 90, repeat 4 is a full turn); \"duration\" is one cycle.\n- Springs (\"spring-gentle\", \"spring-quick\", \"spring-bouncy\", \"spring-slow\" or { \"type\": \"spring\", \u2026 }) feel physical; leave \"duration\" out and the spring sets it.\n- \"steps\": 12 (on a command, or for the whole scene with set_animation_settings) holds poses \"on twos\" for a hand-drawn look. \"geometric\": true on scale or a camera zooms at an even rate.\n- Commands share their names and defaults with Flair's motion primitives (get_animation shows each one's \"flairPrimitive\"), and emphasis, reveals and follows export to Flair exactly.\n- effect tweens a numeric parameter of a live path effect already on the node (twist angle, wiggle time, zig zag size).\n\nWorking method\n1. get_animation to learn the element ids (set_animation_artwork_svg first if there is no artwork: give every element you will animate an id; or import_flair_effect to start from a Flair effect and edit it).\n2. Plan a few shots, each one idea. Add them with insert_shots, or edit_animation to make several edits as one step (dry_run first when unsure).\n3. check_animation and fix every error and warning; render_animation_frame (shot + \"end\") to look at the result.\n4. To make a reusable Flair effect, set_animation_controls (colour controls stand for every use of their default colour) and export_flair_effect.\n\nKeep motion purposeful: one thing moving at a time reads best, ease-out for arrivals, ease-in for exits, and hold long enough to see each result.";
1625
+ declare const ANIMATION_EDITOR_AGENT_INSTRUCTIONS = "You animate vector artwork. A scene is artwork (vector paths and groups, each with an id) plus shots.\n\nHow it plays\n- Shots play in order. A shot optionally moves the camera, plays its commands, then holds (default 600 ms).\n- Commands in a shot play one after another; give \"with\": \"previous\" to start one together with the command before, \"delay\" to wait, \"stagger\" to offset several targets.\n- Timing comes from the content: each command has a default length (enter 600 ms, move 700 ms, draw follows the path length). Only set \"duration\" to change the pace.\n- Anything that enters later is hidden until it enters. Things that never enter are visible from the start.\n- Every frame is a pure function of time: the same scene always plays the same frames.\n\nCommands\n- enter (fade, pop, grow, slide, draw) and exit (fade, shrink, slide, undraw) bring things in and out.\n- enter also reveals through a clip over the target's box: wipe (behind an edge travelling \"direction\", default right), iris (from the centre; \"shape\": circle or box) and split (from a line through the middle; \"orientation\": horizontal or vertical). exit wipe hides the same way. Reveals need a width and a height: use draw / undraw for a straight line.\n- draw draws strokes on to a fraction; move, rotate, scale and fade change the pose (about the centre); style blends solid colours and stroke width.\n- enter also has zoom (settles from larger) and rise (rises a short way, overshooting a touch); pop and zoom take a starting \"scale\".\n- morph turns a shape into another node's shape (keep the target hidden); follow moves along a path node (with \"rotate\", moves made meanwhile turn with the path).\n- Emphasis draws the eye and returns to rest: pulse (swell), shake (side to side, or \"axis\": \"vertical\"), teeter (rock), wave (bob, no settling), wiggle (seeded wander; the same seed wanders the same way) and color-pulse (tint and back).\n- Emphasis stacks on other motion: a shake during a slide shakes as it slides. Give move, rotate or scale \"blend\": \"add\" to stack them too (what they add stays); \"blend\": \"replace\" makes a change take over instead.\n- Any command but enter and exit can \"repeat\" (loop, mirror back and forth, or offset to carry on: rotate by 90, repeat 4 is a full turn); \"duration\" is one cycle.\n- Springs (\"spring-gentle\", \"spring-quick\", \"spring-bouncy\", \"spring-slow\" or { \"type\": \"spring\", \u2026 }) feel physical; leave \"duration\" out and the spring sets it.\n- \"steps\": 12 (on a command, or for the whole scene with set_animation_settings) holds poses \"on twos\" for a hand-drawn look. \"geometric\": true on scale or a camera zooms at an even rate.\n- Commands share their names and defaults with Flair's motion primitives (get_animation shows each one's \"flairPrimitive\"), and emphasis, reveals and follows export to Flair exactly.\n- effect tweens a numeric parameter of a live path effect already on the node (twist angle, wiggle time, zig zag size).\n\nWorking method\n1. get_animation to learn the element ids (set_animation_artwork_svg first if there is no artwork: give every element you will animate an id; or import_flair_effect to start from a Flair effect and edit it).\n2. Plan a few shots, each one idea. Add them with insert_shots, or edit_animation to make several edits as one step (dry_run first when unsure).\n3. check_animation and fix every error and warning; render_animation_frame (shot + \"end\") to look at the result.\n4. To make a reusable Flair effect, set_animation_controls (colour controls stand for every use of their default colour) and export_flair_effect.\n\nKeep motion purposeful: one thing moving at a time reads best, ease-out for arrivals, ease-in for exits, and hold long enough to see each result.";
1546
1626
 
1547
- export { ANIMATION_EDITOR_AGENT_INSTRUCTIONS, AnimationEditorController, type AnimationEditorOptions, type AnimationEditorSelection, type AnimationEditorState, type AnimationEditorToolProviderOptions, FLAIR_EASES, FLAIR_EXPORT_VERSION, type FlairEase, type FlairEaseName, type FlairEffectDocument, type FlairEffectOptions, type FlairExportOptions, type FlairImportOptions, type FlairImportResult, type FlairMotionExport, type FlairSpringEase, type FlairSvgAnimation, type FlairSvgMotion, type FlairVectorEffect, MOTION_CAMERA_MS, MOTION_COMMAND_SCHEMA, MOTION_COMMAND_TYPES, MOTION_DEFAULT_DURATIONS, MOTION_DEFAULT_HOLD, MOTION_DIRECTIONS, MOTION_DRAW_EFFECT_ID, MOTION_DRAW_MS_PER_UNIT, MOTION_DRAW_RANGE, MOTION_EASE_IN_OUT, MOTION_EASE_OUT, MOTION_EDIT_OPS, MOTION_ENTER_STYLES, MOTION_EXIT_STYLES, MOTION_IRIS_SHAPES, MOTION_ISSUE_CODES, MOTION_MIN_CHANGE_MS, MOTION_REPEAT_MODES, MOTION_SPLIT_ORIENTATIONS, type MotionCamera, type MotionClipShape, type MotionColorPulseCommand, type MotionCommand, type MotionCommandBase, type MotionCommandTiming, type MotionCommandType, type MotionControl, type MotionDirection, type MotionDrawCommand, type MotionEdit, type MotionEditOp, type MotionEditResult, type MotionEffectCommand, type MotionEnterCommand, type MotionEnterStyle, type MotionExitCommand, type MotionExitStyle, type MotionFadeCommand, type MotionFollowCommand, type MotionFrame, type MotionFrameOptions, type MotionIrisShape, type MotionIssue, type MotionIssueCode, type MotionIssueSeverity, type MotionMorphCommand, type MotionMoveCommand, type MotionNodeEntry, type MotionPreset, type MotionProperty, type MotionPulseCommand, type MotionRect, type MotionReveal, type MotionRotateCommand, type MotionScaleCommand, type MotionScene, MotionSceneFormatError, type MotionSegment, type MotionShakeCommand, type MotionShot, type MotionShotTiming, type MotionSplitOrientation, type MotionStyleCommand, type MotionSvgOptions, type MotionTeeterCommand, type MotionTimeline, type MotionValue, type MotionWaitCommand, type MotionWaveCommand, type MotionWiggleCommand, activeSegment, applyMotionControlValues, applyMotionEdits, checkMotionScene, commandShapeProblems, compileMotionScene, createAnimationEditorToolProvider, createMotionScene, describeMotionElements, describeMotionShots, fitMotionRect, flairAtLeast, flairCurveFor, flairEaseFor, freshShotId, fromFlairSvgMotion, fromFlairVectorEffect, indexMotionNodes, interpolateMotionValue, isMotionCommand, isMotionShot, motionClipAttrs, motionCommandDuration, motionCommandRepeat, motionCycleDuration, motionFlairPrimitive, motionFollowRoute, motionFrameAt, motionFrameToSvg, motionIssue, motionIssueKey, motionIssueLine, motionNodeClips, motionNodeOffset, motionPathLength, motionRestValue, motionRevealClip, motionRevealPadding, motionSceneShapeProblems, motionSceneToJson, motionShotAt, motionTrackKey, namedWithSuggestion, parseMotionScene, resolveMotionCamera, segmentProgress, segmentValue, shotShapeProblems, suggestName, toFlairEffectDocument, toFlairSvgMotion, toFlairVectorEffect, trackValue, withViewBox };
1627
+ export { ANIMATION_EDITOR_AGENT_INSTRUCTIONS, AnimationEditorController, type AnimationEditorOptions, type AnimationEditorSelection, type AnimationEditorState, type AnimationEditorToolProviderOptions, FLAIR_EASES, FLAIR_EXPORT_VERSION, type FlairEase, type FlairEaseName, type FlairEffectDocument, type FlairEffectOptions, type FlairExportOptions, type FlairImportOptions, type FlairImportResult, type FlairMotionExport, type FlairSpringEase, type FlairSvgAnimation, type FlairSvgMotion, type FlairVectorEffect, MOTION_ADDITIVE_PROPERTIES, MOTION_BLENDS, MOTION_CAMERA_MS, MOTION_COMMAND_SCHEMA, MOTION_COMMAND_TYPES, MOTION_DEFAULT_DURATIONS, MOTION_DEFAULT_HOLD, MOTION_DIRECTIONS, MOTION_DRAW_EFFECT_ID, MOTION_DRAW_MS_PER_UNIT, MOTION_DRAW_RANGE, MOTION_EASE_IN_OUT, MOTION_EASE_OUT, MOTION_EDIT_OPS, MOTION_ENTER_STYLES, MOTION_EXIT_STYLES, MOTION_IRIS_SHAPES, MOTION_ISSUE_CODES, MOTION_MIN_CHANGE_MS, MOTION_REPEAT_MODES, MOTION_SPLIT_ORIENTATIONS, type MotionCamera, type MotionClipShape, type MotionColorPulseCommand, type MotionCommand, type MotionCommandBase, type MotionCommandTiming, type MotionCommandType, type MotionControl, type MotionDirection, type MotionDrawCommand, type MotionEdit, type MotionEditOp, type MotionEditResult, type MotionEffectCommand, type MotionEnterCommand, type MotionEnterStyle, type MotionExitCommand, type MotionExitStyle, type MotionFadeCommand, type MotionFollowCommand, type MotionFrame, type MotionFrameOptions, type MotionIrisShape, type MotionIssue, type MotionIssueCode, type MotionIssueSeverity, type MotionMorphCommand, type MotionMoveCommand, type MotionNodeEntry, type MotionPreset, type MotionProperty, type MotionPulseCommand, type MotionRect, type MotionReveal, type MotionRotateCommand, type MotionScaleCommand, type MotionScene, MotionSceneFormatError, type MotionSegment, type MotionShakeCommand, type MotionShot, type MotionShotTiming, type MotionSplitOrientation, type MotionStyleCommand, type MotionSvgOptions, type MotionTeeterCommand, type MotionTimeline, type MotionValue, type MotionWaitCommand, type MotionWaveCommand, type MotionWiggleCommand, activeSegment, applyMotionControlValues, applyMotionEdits, checkMotionScene, commandShapeProblems, compileMotionScene, createAnimationEditorToolProvider, createMotionScene, describeMotionElements, describeMotionShots, fitMotionRect, flairAtLeast, flairCurveFor, flairEaseFor, freshShotId, fromFlairSvgMotion, fromFlairVectorEffect, indexMotionNodes, interpolateMotionValue, isMotionCommand, isMotionShot, motionAddTrackKey, motionClipAttrs, motionCommandDuration, motionCommandRepeat, motionCycleDuration, motionFlairPrimitive, motionFollowRoute, motionFrameAt, motionFrameToSvg, motionIssue, motionIssueKey, motionIssueLine, motionNodeClips, motionNodeOffset, motionPathLength, motionRestValue, motionRevealClip, motionRevealPadding, motionSceneShapeProblems, motionSceneToJson, motionShotAt, motionTrackKey, namedWithSuggestion, parseMotionScene, resolveMotionCamera, segmentProgress, segmentValue, shotShapeProblems, suggestName, toFlairEffectDocument, toFlairSvgMotion, toFlairVectorEffect, trackValue, withMotionLayers, withViewBox };
@@ -159,6 +159,13 @@ interface MotionDrawCommand extends MotionCommandBase {
159
159
  }
160
160
  /** Moves targets by an offset, or to a point (their centre lands there). */
161
161
  interface MotionMoveCommand extends MotionCommandBase {
162
+ /**
163
+ * `add` makes the change a layer over the pose instead of a change to it: it stacks on
164
+ * whatever else moves the target (a shake on a slide), and what it adds stays once it ends.
165
+ * Default `replace` for move, rotate and scale (the later change takes over), `add` for
166
+ * pulse, shake, teeter, wave and wiggle.
167
+ */
168
+ blend?: 'replace' | 'add';
162
169
  type: 'move';
163
170
  by?: {
164
171
  x: number;
@@ -171,12 +178,26 @@ interface MotionMoveCommand extends MotionCommandBase {
171
178
  }
172
179
  /** Turns targets about their centre, by or to an angle in degrees (clockwise). */
173
180
  interface MotionRotateCommand extends MotionCommandBase {
181
+ /**
182
+ * `add` makes the change a layer over the pose instead of a change to it: it stacks on
183
+ * whatever else moves the target (a shake on a slide), and what it adds stays once it ends.
184
+ * Default `replace` for move, rotate and scale (the later change takes over), `add` for
185
+ * pulse, shake, teeter, wave and wiggle.
186
+ */
187
+ blend?: 'replace' | 'add';
174
188
  type: 'rotate';
175
189
  by?: number;
176
190
  to?: number;
177
191
  }
178
192
  /** Scales targets about their centre (1 = rest size). */
179
193
  interface MotionScaleCommand extends MotionCommandBase {
194
+ /**
195
+ * `add` makes the change a layer over the pose instead of a change to it: it stacks on
196
+ * whatever else moves the target (a shake on a slide), and what it adds stays once it ends.
197
+ * Default `replace` for move, rotate and scale (the later change takes over), `add` for
198
+ * pulse, shake, teeter, wave and wiggle.
199
+ */
200
+ blend?: 'replace' | 'add';
180
201
  type: 'scale';
181
202
  to: number | {
182
203
  x: number;
@@ -218,6 +239,13 @@ interface MotionFollowCommand extends MotionCommandBase {
218
239
  }
219
240
  /** Scales up and back, `count` times (draws the eye). */
220
241
  interface MotionPulseCommand extends MotionCommandBase {
242
+ /**
243
+ * `add` makes the change a layer over the pose instead of a change to it: it stacks on
244
+ * whatever else moves the target (a shake on a slide), and what it adds stays once it ends.
245
+ * Default `replace` for move, rotate and scale (the later change takes over), `add` for
246
+ * pulse, shake, teeter, wave and wiggle.
247
+ */
248
+ blend?: 'replace' | 'add';
221
249
  type: 'pulse';
222
250
  /** Extra scale at the peak (default 0.15). */
223
251
  amount?: number;
@@ -225,6 +253,13 @@ interface MotionPulseCommand extends MotionCommandBase {
225
253
  }
226
254
  /** Shakes side to side (or up and down), settling. */
227
255
  interface MotionShakeCommand extends MotionCommandBase {
256
+ /**
257
+ * `add` makes the change a layer over the pose instead of a change to it: it stacks on
258
+ * whatever else moves the target (a shake on a slide), and what it adds stays once it ends.
259
+ * Default `replace` for move, rotate and scale (the later change takes over), `add` for
260
+ * pulse, shake, teeter, wave and wiggle.
261
+ */
262
+ blend?: 'replace' | 'add';
228
263
  type: 'shake';
229
264
  /** Distance in document units (default 8). */
230
265
  amount?: number;
@@ -234,6 +269,13 @@ interface MotionShakeCommand extends MotionCommandBase {
234
269
  }
235
270
  /** Rocks about the centre by `angle` either way, settling (Flair's `emphasis.teeter`). */
236
271
  interface MotionTeeterCommand extends MotionCommandBase {
272
+ /**
273
+ * `add` makes the change a layer over the pose instead of a change to it: it stacks on
274
+ * whatever else moves the target (a shake on a slide), and what it adds stays once it ends.
275
+ * Default `replace` for move, rotate and scale (the later change takes over), `add` for
276
+ * pulse, shake, teeter, wave and wiggle.
277
+ */
278
+ blend?: 'replace' | 'add';
237
279
  type: 'teeter';
238
280
  /** Degrees either way (default 8). */
239
281
  angle?: number;
@@ -242,6 +284,13 @@ interface MotionTeeterCommand extends MotionCommandBase {
242
284
  }
243
285
  /** Bobs up and down without settling, like something floating (Flair's `emphasis.wave`). */
244
286
  interface MotionWaveCommand extends MotionCommandBase {
287
+ /**
288
+ * `add` makes the change a layer over the pose instead of a change to it: it stacks on
289
+ * whatever else moves the target (a shake on a slide), and what it adds stays once it ends.
290
+ * Default `replace` for move, rotate and scale (the later change takes over), `add` for
291
+ * pulse, shake, teeter, wave and wiggle.
292
+ */
293
+ blend?: 'replace' | 'add';
245
294
  type: 'wave';
246
295
  /** Height in document units (default 6). */
247
296
  amount?: number;
@@ -253,6 +302,13 @@ interface MotionWaveCommand extends MotionCommandBase {
253
302
  * `emphasis.wiggle`). The same seed always wanders the same way.
254
303
  */
255
304
  interface MotionWiggleCommand extends MotionCommandBase {
305
+ /**
306
+ * `add` makes the change a layer over the pose instead of a change to it: it stacks on
307
+ * whatever else moves the target (a shake on a slide), and what it adds stays once it ends.
308
+ * Default `replace` for move, rotate and scale (the later change takes over), `add` for
309
+ * pulse, shake, teeter, wave and wiggle.
310
+ */
311
+ blend?: 'replace' | 'add';
256
312
  type: 'wiggle';
257
313
  /** Up to about this far, in document units (default 6). */
258
314
  amount?: number;
@@ -294,6 +350,7 @@ type MotionCommand = MotionEnterCommand | MotionExitCommand | MotionDrawCommand
294
350
  type MotionCommandType = MotionCommand['type'];
295
351
  declare const MOTION_COMMAND_TYPES: readonly MotionCommandType[];
296
352
  declare const MOTION_ENTER_STYLES: readonly MotionEnterStyle[];
353
+ declare const MOTION_BLENDS: readonly ["replace", "add"];
297
354
  declare const MOTION_REPEAT_MODES: readonly ["loop", "mirror", "offset"];
298
355
  declare const MOTION_EXIT_STYLES: readonly MotionExitStyle[];
299
356
  declare const MOTION_IRIS_SHAPES: readonly MotionIrisShape[];
@@ -530,6 +587,12 @@ interface MotionSegment {
530
587
  steps?: number;
531
588
  /** Numbers change by a steady factor (`from·(to/from)^u`); a camera zooms at a steady rate. */
532
589
  geometric?: boolean;
590
+ /**
591
+ * `add`: the segment is a layer over the node's pose rather than a change to it. It lives on
592
+ * its own track (`motionAddTrackKey`), runs from 0 (offsets, turns) or 1 (scales), and what
593
+ * it adds stays once it ends, on top of whatever the pose does.
594
+ */
595
+ blend?: 'add';
533
596
  /** For `follow`: the path node id, and whether to turn with it. */
534
597
  path?: string;
535
598
  rotate?: boolean;
@@ -633,6 +696,15 @@ declare function activeSegment(track: readonly MotionSegment[] | undefined, time
633
696
  /** A track's value at `time`, or `undefined` when nothing animates it. `raw` ignores behaviours (see `segmentValue`). */
634
697
  declare function trackValue(track: readonly MotionSegment[] | undefined, time: number, raw?: boolean): MotionValue | undefined;
635
698
  declare const motionTrackKey: (node: string, property: MotionProperty) => string;
699
+ /** The track of a node property's additive layers (segments with `blend: 'add'`). */
700
+ declare const motionAddTrackKey: (node: string, property: MotionProperty) => string;
701
+ /** Properties that take additive layers: offsets and turns add, scales multiply. */
702
+ declare const MOTION_ADDITIVE_PROPERTIES: readonly MotionProperty[];
703
+ /**
704
+ * A property's value with its additive layers on top of `base` (its pose): every layer that has
705
+ * started adds its value (offsets, turns) or multiplies by it (scales). `raw` ignores behaviours.
706
+ */
707
+ declare function withMotionLayers(timeline: Pick<MotionTimeline, 'tracks'>, node: string, property: MotionProperty, base: number, time: number, raw?: boolean): number;
636
708
  /** Grows a rectangle to the artwork's aspect ratio (about its centre). */
637
709
  declare function fitMotionRect(rect: MotionRect, aspect: number): MotionRect;
638
710
  /** The rectangle a camera looks at, or `null` when it frames an unknown node. */
@@ -1248,6 +1320,7 @@ declare function describeMotionShots(scene: MotionScene): {
1248
1320
  flairPrimitive?: string | undefined;
1249
1321
  start: number;
1250
1322
  end: number;
1323
+ blend?: "replace" | "add";
1251
1324
  type: "move";
1252
1325
  by?: {
1253
1326
  x: number;
@@ -1272,6 +1345,7 @@ declare function describeMotionShots(scene: MotionScene): {
1272
1345
  flairPrimitive?: string | undefined;
1273
1346
  start: number;
1274
1347
  end: number;
1348
+ blend?: "replace" | "add";
1275
1349
  type: "rotate";
1276
1350
  by?: number;
1277
1351
  to?: number;
@@ -1290,6 +1364,7 @@ declare function describeMotionShots(scene: MotionScene): {
1290
1364
  flairPrimitive?: string | undefined;
1291
1365
  start: number;
1292
1366
  end: number;
1367
+ blend?: "replace" | "add";
1293
1368
  type: "scale";
1294
1369
  to: number | {
1295
1370
  x: number;
@@ -1384,6 +1459,7 @@ declare function describeMotionShots(scene: MotionScene): {
1384
1459
  flairPrimitive?: string | undefined;
1385
1460
  start: number;
1386
1461
  end: number;
1462
+ blend?: "replace" | "add";
1387
1463
  type: "pulse";
1388
1464
  amount?: number;
1389
1465
  count?: number;
@@ -1402,6 +1478,7 @@ declare function describeMotionShots(scene: MotionScene): {
1402
1478
  flairPrimitive?: string | undefined;
1403
1479
  start: number;
1404
1480
  end: number;
1481
+ blend?: "replace" | "add";
1405
1482
  type: "shake";
1406
1483
  amount?: number;
1407
1484
  count?: number;
@@ -1421,6 +1498,7 @@ declare function describeMotionShots(scene: MotionScene): {
1421
1498
  flairPrimitive?: string | undefined;
1422
1499
  start: number;
1423
1500
  end: number;
1501
+ blend?: "replace" | "add";
1424
1502
  type: "teeter";
1425
1503
  angle?: number;
1426
1504
  count?: number;
@@ -1439,6 +1517,7 @@ declare function describeMotionShots(scene: MotionScene): {
1439
1517
  flairPrimitive?: string | undefined;
1440
1518
  start: number;
1441
1519
  end: number;
1520
+ blend?: "replace" | "add";
1442
1521
  type: "wave";
1443
1522
  amount?: number;
1444
1523
  count?: number;
@@ -1457,6 +1536,7 @@ declare function describeMotionShots(scene: MotionScene): {
1457
1536
  flairPrimitive?: string | undefined;
1458
1537
  start: number;
1459
1538
  end: number;
1539
+ blend?: "replace" | "add";
1460
1540
  type: "wiggle";
1461
1541
  amount?: number;
1462
1542
  frequency?: number;
@@ -1542,6 +1622,6 @@ declare function createAnimationEditorToolProvider(controller: AnimationEditorCo
1542
1622
  * A short authoring guide for a model writing vector animations with the animation editor's
1543
1623
  * tools. Static, so it caches well as part of a system prompt.
1544
1624
  */
1545
- declare const ANIMATION_EDITOR_AGENT_INSTRUCTIONS = "You animate vector artwork. A scene is artwork (vector paths and groups, each with an id) plus shots.\n\nHow it plays\n- Shots play in order. A shot optionally moves the camera, plays its commands, then holds (default 600 ms).\n- Commands in a shot play one after another; give \"with\": \"previous\" to start one together with the command before, \"delay\" to wait, \"stagger\" to offset several targets.\n- Timing comes from the content: each command has a default length (enter 600 ms, move 700 ms, draw follows the path length). Only set \"duration\" to change the pace.\n- Anything that enters later is hidden until it enters. Things that never enter are visible from the start.\n- Every frame is a pure function of time: the same scene always plays the same frames.\n\nCommands\n- enter (fade, pop, grow, slide, draw) and exit (fade, shrink, slide, undraw) bring things in and out.\n- enter also reveals through a clip over the target's box: wipe (behind an edge travelling \"direction\", default right), iris (from the centre; \"shape\": circle or box) and split (from a line through the middle; \"orientation\": horizontal or vertical). exit wipe hides the same way. Reveals need a width and a height: use draw / undraw for a straight line.\n- draw draws strokes on to a fraction; move, rotate, scale and fade change the pose (about the centre); style blends solid colours and stroke width.\n- enter also has zoom (settles from larger) and rise (rises a short way, overshooting a touch); pop and zoom take a starting \"scale\".\n- morph turns a shape into another node's shape (keep the target hidden); follow moves along a path node (with \"rotate\", moves made meanwhile turn with the path).\n- Emphasis draws the eye and returns to rest: pulse (swell), shake (side to side, or \"axis\": \"vertical\"), teeter (rock), wave (bob, no settling), wiggle (seeded wander; the same seed wanders the same way) and color-pulse (tint and back).\n- Any command but enter and exit can \"repeat\" (loop, mirror back and forth, or offset to carry on: rotate by 90, repeat 4 is a full turn); \"duration\" is one cycle.\n- Springs (\"spring-gentle\", \"spring-quick\", \"spring-bouncy\", \"spring-slow\" or { \"type\": \"spring\", \u2026 }) feel physical; leave \"duration\" out and the spring sets it.\n- \"steps\": 12 (on a command, or for the whole scene with set_animation_settings) holds poses \"on twos\" for a hand-drawn look. \"geometric\": true on scale or a camera zooms at an even rate.\n- Commands share their names and defaults with Flair's motion primitives (get_animation shows each one's \"flairPrimitive\"), and emphasis, reveals and follows export to Flair exactly.\n- effect tweens a numeric parameter of a live path effect already on the node (twist angle, wiggle time, zig zag size).\n\nWorking method\n1. get_animation to learn the element ids (set_animation_artwork_svg first if there is no artwork: give every element you will animate an id; or import_flair_effect to start from a Flair effect and edit it).\n2. Plan a few shots, each one idea. Add them with insert_shots, or edit_animation to make several edits as one step (dry_run first when unsure).\n3. check_animation and fix every error and warning; render_animation_frame (shot + \"end\") to look at the result.\n4. To make a reusable Flair effect, set_animation_controls (colour controls stand for every use of their default colour) and export_flair_effect.\n\nKeep motion purposeful: one thing moving at a time reads best, ease-out for arrivals, ease-in for exits, and hold long enough to see each result.";
1625
+ declare const ANIMATION_EDITOR_AGENT_INSTRUCTIONS = "You animate vector artwork. A scene is artwork (vector paths and groups, each with an id) plus shots.\n\nHow it plays\n- Shots play in order. A shot optionally moves the camera, plays its commands, then holds (default 600 ms).\n- Commands in a shot play one after another; give \"with\": \"previous\" to start one together with the command before, \"delay\" to wait, \"stagger\" to offset several targets.\n- Timing comes from the content: each command has a default length (enter 600 ms, move 700 ms, draw follows the path length). Only set \"duration\" to change the pace.\n- Anything that enters later is hidden until it enters. Things that never enter are visible from the start.\n- Every frame is a pure function of time: the same scene always plays the same frames.\n\nCommands\n- enter (fade, pop, grow, slide, draw) and exit (fade, shrink, slide, undraw) bring things in and out.\n- enter also reveals through a clip over the target's box: wipe (behind an edge travelling \"direction\", default right), iris (from the centre; \"shape\": circle or box) and split (from a line through the middle; \"orientation\": horizontal or vertical). exit wipe hides the same way. Reveals need a width and a height: use draw / undraw for a straight line.\n- draw draws strokes on to a fraction; move, rotate, scale and fade change the pose (about the centre); style blends solid colours and stroke width.\n- enter also has zoom (settles from larger) and rise (rises a short way, overshooting a touch); pop and zoom take a starting \"scale\".\n- morph turns a shape into another node's shape (keep the target hidden); follow moves along a path node (with \"rotate\", moves made meanwhile turn with the path).\n- Emphasis draws the eye and returns to rest: pulse (swell), shake (side to side, or \"axis\": \"vertical\"), teeter (rock), wave (bob, no settling), wiggle (seeded wander; the same seed wanders the same way) and color-pulse (tint and back).\n- Emphasis stacks on other motion: a shake during a slide shakes as it slides. Give move, rotate or scale \"blend\": \"add\" to stack them too (what they add stays); \"blend\": \"replace\" makes a change take over instead.\n- Any command but enter and exit can \"repeat\" (loop, mirror back and forth, or offset to carry on: rotate by 90, repeat 4 is a full turn); \"duration\" is one cycle.\n- Springs (\"spring-gentle\", \"spring-quick\", \"spring-bouncy\", \"spring-slow\" or { \"type\": \"spring\", \u2026 }) feel physical; leave \"duration\" out and the spring sets it.\n- \"steps\": 12 (on a command, or for the whole scene with set_animation_settings) holds poses \"on twos\" for a hand-drawn look. \"geometric\": true on scale or a camera zooms at an even rate.\n- Commands share their names and defaults with Flair's motion primitives (get_animation shows each one's \"flairPrimitive\"), and emphasis, reveals and follows export to Flair exactly.\n- effect tweens a numeric parameter of a live path effect already on the node (twist angle, wiggle time, zig zag size).\n\nWorking method\n1. get_animation to learn the element ids (set_animation_artwork_svg first if there is no artwork: give every element you will animate an id; or import_flair_effect to start from a Flair effect and edit it).\n2. Plan a few shots, each one idea. Add them with insert_shots, or edit_animation to make several edits as one step (dry_run first when unsure).\n3. check_animation and fix every error and warning; render_animation_frame (shot + \"end\") to look at the result.\n4. To make a reusable Flair effect, set_animation_controls (colour controls stand for every use of their default colour) and export_flair_effect.\n\nKeep motion purposeful: one thing moving at a time reads best, ease-out for arrivals, ease-in for exits, and hold long enough to see each result.";
1546
1626
 
1547
- export { ANIMATION_EDITOR_AGENT_INSTRUCTIONS, AnimationEditorController, type AnimationEditorOptions, type AnimationEditorSelection, type AnimationEditorState, type AnimationEditorToolProviderOptions, FLAIR_EASES, FLAIR_EXPORT_VERSION, type FlairEase, type FlairEaseName, type FlairEffectDocument, type FlairEffectOptions, type FlairExportOptions, type FlairImportOptions, type FlairImportResult, type FlairMotionExport, type FlairSpringEase, type FlairSvgAnimation, type FlairSvgMotion, type FlairVectorEffect, MOTION_CAMERA_MS, MOTION_COMMAND_SCHEMA, MOTION_COMMAND_TYPES, MOTION_DEFAULT_DURATIONS, MOTION_DEFAULT_HOLD, MOTION_DIRECTIONS, MOTION_DRAW_EFFECT_ID, MOTION_DRAW_MS_PER_UNIT, MOTION_DRAW_RANGE, MOTION_EASE_IN_OUT, MOTION_EASE_OUT, MOTION_EDIT_OPS, MOTION_ENTER_STYLES, MOTION_EXIT_STYLES, MOTION_IRIS_SHAPES, MOTION_ISSUE_CODES, MOTION_MIN_CHANGE_MS, MOTION_REPEAT_MODES, MOTION_SPLIT_ORIENTATIONS, type MotionCamera, type MotionClipShape, type MotionColorPulseCommand, type MotionCommand, type MotionCommandBase, type MotionCommandTiming, type MotionCommandType, type MotionControl, type MotionDirection, type MotionDrawCommand, type MotionEdit, type MotionEditOp, type MotionEditResult, type MotionEffectCommand, type MotionEnterCommand, type MotionEnterStyle, type MotionExitCommand, type MotionExitStyle, type MotionFadeCommand, type MotionFollowCommand, type MotionFrame, type MotionFrameOptions, type MotionIrisShape, type MotionIssue, type MotionIssueCode, type MotionIssueSeverity, type MotionMorphCommand, type MotionMoveCommand, type MotionNodeEntry, type MotionPreset, type MotionProperty, type MotionPulseCommand, type MotionRect, type MotionReveal, type MotionRotateCommand, type MotionScaleCommand, type MotionScene, MotionSceneFormatError, type MotionSegment, type MotionShakeCommand, type MotionShot, type MotionShotTiming, type MotionSplitOrientation, type MotionStyleCommand, type MotionSvgOptions, type MotionTeeterCommand, type MotionTimeline, type MotionValue, type MotionWaitCommand, type MotionWaveCommand, type MotionWiggleCommand, activeSegment, applyMotionControlValues, applyMotionEdits, checkMotionScene, commandShapeProblems, compileMotionScene, createAnimationEditorToolProvider, createMotionScene, describeMotionElements, describeMotionShots, fitMotionRect, flairAtLeast, flairCurveFor, flairEaseFor, freshShotId, fromFlairSvgMotion, fromFlairVectorEffect, indexMotionNodes, interpolateMotionValue, isMotionCommand, isMotionShot, motionClipAttrs, motionCommandDuration, motionCommandRepeat, motionCycleDuration, motionFlairPrimitive, motionFollowRoute, motionFrameAt, motionFrameToSvg, motionIssue, motionIssueKey, motionIssueLine, motionNodeClips, motionNodeOffset, motionPathLength, motionRestValue, motionRevealClip, motionRevealPadding, motionSceneShapeProblems, motionSceneToJson, motionShotAt, motionTrackKey, namedWithSuggestion, parseMotionScene, resolveMotionCamera, segmentProgress, segmentValue, shotShapeProblems, suggestName, toFlairEffectDocument, toFlairSvgMotion, toFlairVectorEffect, trackValue, withViewBox };
1627
+ export { ANIMATION_EDITOR_AGENT_INSTRUCTIONS, AnimationEditorController, type AnimationEditorOptions, type AnimationEditorSelection, type AnimationEditorState, type AnimationEditorToolProviderOptions, FLAIR_EASES, FLAIR_EXPORT_VERSION, type FlairEase, type FlairEaseName, type FlairEffectDocument, type FlairEffectOptions, type FlairExportOptions, type FlairImportOptions, type FlairImportResult, type FlairMotionExport, type FlairSpringEase, type FlairSvgAnimation, type FlairSvgMotion, type FlairVectorEffect, MOTION_ADDITIVE_PROPERTIES, MOTION_BLENDS, MOTION_CAMERA_MS, MOTION_COMMAND_SCHEMA, MOTION_COMMAND_TYPES, MOTION_DEFAULT_DURATIONS, MOTION_DEFAULT_HOLD, MOTION_DIRECTIONS, MOTION_DRAW_EFFECT_ID, MOTION_DRAW_MS_PER_UNIT, MOTION_DRAW_RANGE, MOTION_EASE_IN_OUT, MOTION_EASE_OUT, MOTION_EDIT_OPS, MOTION_ENTER_STYLES, MOTION_EXIT_STYLES, MOTION_IRIS_SHAPES, MOTION_ISSUE_CODES, MOTION_MIN_CHANGE_MS, MOTION_REPEAT_MODES, MOTION_SPLIT_ORIENTATIONS, type MotionCamera, type MotionClipShape, type MotionColorPulseCommand, type MotionCommand, type MotionCommandBase, type MotionCommandTiming, type MotionCommandType, type MotionControl, type MotionDirection, type MotionDrawCommand, type MotionEdit, type MotionEditOp, type MotionEditResult, type MotionEffectCommand, type MotionEnterCommand, type MotionEnterStyle, type MotionExitCommand, type MotionExitStyle, type MotionFadeCommand, type MotionFollowCommand, type MotionFrame, type MotionFrameOptions, type MotionIrisShape, type MotionIssue, type MotionIssueCode, type MotionIssueSeverity, type MotionMorphCommand, type MotionMoveCommand, type MotionNodeEntry, type MotionPreset, type MotionProperty, type MotionPulseCommand, type MotionRect, type MotionReveal, type MotionRotateCommand, type MotionScaleCommand, type MotionScene, MotionSceneFormatError, type MotionSegment, type MotionShakeCommand, type MotionShot, type MotionShotTiming, type MotionSplitOrientation, type MotionStyleCommand, type MotionSvgOptions, type MotionTeeterCommand, type MotionTimeline, type MotionValue, type MotionWaitCommand, type MotionWaveCommand, type MotionWiggleCommand, activeSegment, applyMotionControlValues, applyMotionEdits, checkMotionScene, commandShapeProblems, compileMotionScene, createAnimationEditorToolProvider, createMotionScene, describeMotionElements, describeMotionShots, fitMotionRect, flairAtLeast, flairCurveFor, flairEaseFor, freshShotId, fromFlairSvgMotion, fromFlairVectorEffect, indexMotionNodes, interpolateMotionValue, isMotionCommand, isMotionShot, motionAddTrackKey, motionClipAttrs, motionCommandDuration, motionCommandRepeat, motionCycleDuration, motionFlairPrimitive, motionFollowRoute, motionFrameAt, motionFrameToSvg, motionIssue, motionIssueKey, motionIssueLine, motionNodeClips, motionNodeOffset, motionPathLength, motionRestValue, motionRevealClip, motionRevealPadding, motionSceneShapeProblems, motionSceneToJson, motionShotAt, motionTrackKey, namedWithSuggestion, parseMotionScene, resolveMotionCamera, segmentProgress, segmentValue, shotShapeProblems, suggestName, toFlairEffectDocument, toFlairSvgMotion, toFlairVectorEffect, trackValue, withMotionLayers, withViewBox };