@pixerate/editor 0.123.0 → 0.124.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 (116) hide show
  1. package/dist/agent/index.cjs +2 -2
  2. package/dist/agent/index.cjs.map +1 -1
  3. package/dist/agent/index.js +3 -3
  4. package/dist/animation/index.d.cts +2 -1
  5. package/dist/animation/index.d.ts +2 -1
  6. package/dist/animation-editor/index.cjs.map +1 -1
  7. package/dist/animation-editor/index.d.cts +11 -733
  8. package/dist/animation-editor/index.d.ts +11 -733
  9. package/dist/animation-editor/index.js.map +1 -1
  10. package/dist/{bezier-C-W9LFyD.d.cts → bezier-CBzKKDjl.d.cts} +2 -66
  11. package/dist/{bezier-DQZE5dxA.d.ts → bezier-CWv6LQal.d.ts} +2 -66
  12. package/dist/{brushstrokeRender-M4S65DHT.cjs → brushstrokeRender-EELTV7U4.cjs} +8 -8
  13. package/dist/{brushstrokeRender-M4S65DHT.cjs.map → brushstrokeRender-EELTV7U4.cjs.map} +1 -1
  14. package/dist/{brushstrokeRender-CDDRSV2W.js → brushstrokeRender-LRV7GXGD.js} +3 -3
  15. package/dist/canvas/index.cjs +6 -6
  16. package/dist/canvas/index.d.cts +10 -6
  17. package/dist/canvas/index.d.ts +10 -6
  18. package/dist/canvas/index.js +1 -1
  19. package/dist/{chunk-TVXFHE4T.js → chunk-64PYNEHJ.js} +45 -12
  20. package/dist/chunk-64PYNEHJ.js.map +1 -0
  21. package/dist/{chunk-2IW3BWRT.cjs → chunk-7LQO6OHH.cjs} +2 -2
  22. package/dist/{chunk-2IW3BWRT.cjs.map → chunk-7LQO6OHH.cjs.map} +1 -1
  23. package/dist/chunk-IOXKXQNW.cjs +178 -0
  24. package/dist/chunk-IOXKXQNW.cjs.map +1 -0
  25. package/dist/{chunk-SMJGE7HM.cjs → chunk-IWSMDQE5.cjs} +523 -39
  26. package/dist/chunk-IWSMDQE5.cjs.map +1 -0
  27. package/dist/{chunk-KMBC4HNV.js → chunk-J67OLQUQ.js} +2 -2
  28. package/dist/{chunk-6CJRDJCU.cjs → chunk-PEHYWUVV.cjs} +176 -111
  29. package/dist/chunk-PEHYWUVV.cjs.map +1 -0
  30. package/dist/chunk-TGKT5QAB.js +178 -0
  31. package/dist/chunk-TGKT5QAB.js.map +1 -0
  32. package/dist/chunk-TK53AB4Q.cjs +215 -0
  33. package/dist/chunk-TK53AB4Q.cjs.map +1 -0
  34. package/dist/chunk-VFAKN46Z.js +215 -0
  35. package/dist/chunk-VFAKN46Z.js.map +1 -0
  36. package/dist/{chunk-6ZBR4J62.js → chunk-WATAQ2Z2.js} +79 -14
  37. package/dist/chunk-WATAQ2Z2.js.map +1 -0
  38. package/dist/{chunk-IPFRWILU.js → chunk-YVVSTD3B.js} +499 -15
  39. package/dist/chunk-YVVSTD3B.js.map +1 -0
  40. package/dist/{chunk-RLRUAPBJ.cjs → chunk-Z6OUCS2K.cjs} +47 -14
  41. package/dist/chunk-Z6OUCS2K.cjs.map +1 -0
  42. package/dist/effects/index.cjs +588 -0
  43. package/dist/effects/index.cjs.map +1 -0
  44. package/dist/effects/index.d.cts +131 -0
  45. package/dist/effects/index.d.ts +131 -0
  46. package/dist/effects/index.js +588 -0
  47. package/dist/effects/index.js.map +1 -0
  48. package/dist/evaluate-2S3vSPLy.d.cts +55 -0
  49. package/dist/evaluate-CfmT6xA3.d.ts +55 -0
  50. package/dist/{export-DfjzHAJI.d.ts → export-8RnlngAv.d.ts} +534 -128
  51. package/dist/{export-Dv0-ZVrV.d.ts → export-BzSRXyH6.d.cts} +390 -5
  52. package/dist/{export-Dv0-ZVrV.d.cts → export-DM3h7QEI.d.ts} +390 -5
  53. package/dist/{export-lU5qSpHE.d.cts → export-TqXMOlDt.d.cts} +534 -128
  54. package/dist/flair-CxB3fOcU.d.ts +739 -0
  55. package/dist/flair-D7BxyBwL.d.cts +739 -0
  56. package/dist/gradient-KDfCvhuj.d.cts +66 -0
  57. package/dist/gradient-KDfCvhuj.d.ts +66 -0
  58. package/dist/helpers-777mC6dc.d.cts +253 -0
  59. package/dist/helpers-DX2_7L5t.d.ts +253 -0
  60. package/dist/image-editor/index.cjs +1307 -805
  61. package/dist/image-editor/index.cjs.map +1 -1
  62. package/dist/image-editor/index.d.cts +39 -182
  63. package/dist/image-editor/index.d.ts +39 -182
  64. package/dist/image-editor/index.js +508 -6
  65. package/dist/image-editor/index.js.map +1 -1
  66. package/dist/{opentype-p8Xxf-Wh.d.ts → opentype-14PDI5D2.d.ts} +1 -1
  67. package/dist/{opentype-BV7wWatY.d.cts → opentype-D80AVmMu.d.cts} +1 -1
  68. package/dist/paint/index.cjs +2 -2
  69. package/dist/paint/index.d.cts +32 -10
  70. package/dist/paint/index.d.ts +32 -10
  71. package/dist/paint/index.js +1 -1
  72. package/dist/paint-editor/index.cjs +10 -8
  73. package/dist/paint-editor/index.cjs.map +1 -1
  74. package/dist/paint-editor/index.d.cts +11 -5
  75. package/dist/paint-editor/index.d.ts +11 -5
  76. package/dist/paint-editor/index.js +4 -2
  77. package/dist/paint-editor/index.js.map +1 -1
  78. package/dist/parameters/index.d.cts +4 -184
  79. package/dist/parameters/index.d.ts +4 -184
  80. package/dist/{pathfinder-IxcyhO00.d.cts → pathfinder-C0UoFypx.d.cts} +1 -1
  81. package/dist/{pathfinder-StVChJOT.d.ts → pathfinder-DjISxkUv.d.ts} +1 -1
  82. package/dist/{player-DrcP2xqj.d.cts → player-CBtEoU2x.d.cts} +2 -54
  83. package/dist/{player-DV4Jujdq.d.ts → player-cGLrngL_.d.ts} +2 -54
  84. package/dist/{svg-BtND4TJu.d.cts → svg-BDrjRnL1.d.cts} +3 -2
  85. package/dist/{svg-BfVXG7hL.d.ts → svg-C-vZ3q50.d.ts} +3 -2
  86. package/dist/tools/index.cjs +2 -2
  87. package/dist/tools/index.cjs.map +1 -1
  88. package/dist/tools/index.js +3 -3
  89. package/dist/tools-C7JtLYzo.d.ts +126 -0
  90. package/dist/tools-DHKGHiSK.d.cts +126 -0
  91. package/dist/{types-fuXEme9j.d.ts → types-BcX7sCsn.d.ts} +2 -2
  92. package/dist/{types-DJF3Ghn5.d.cts → types-CznabG7m.d.cts} +2 -2
  93. package/dist/types-D3-J3TFf.d.ts +185 -0
  94. package/dist/types-DMcf_z4J.d.cts +185 -0
  95. package/dist/vector/index.d.cts +10 -10
  96. package/dist/vector/index.d.ts +10 -10
  97. package/dist/video-editor/index.cjs +749 -277
  98. package/dist/video-editor/index.cjs.map +1 -1
  99. package/dist/video-editor/index.d.cts +265 -138
  100. package/dist/video-editor/index.d.ts +265 -138
  101. package/dist/video-editor/index.js +490 -18
  102. package/dist/video-editor/index.js.map +1 -1
  103. package/dist/{warp-BjmAgQwq.d.cts → warp-CH9MM435.d.cts} +1 -1
  104. package/dist/{warp-Ca5fedzS.d.ts → warp-k_PdtXOG.d.ts} +1 -1
  105. package/package.json +6 -1
  106. package/skills/pixerate-image-editor/SKILL.md +7 -0
  107. package/skills/pixerate-image-editor/references/provider-effects.md +35 -0
  108. package/skills/pixerate-video-editor/SKILL.md +39 -1
  109. package/dist/chunk-6CJRDJCU.cjs.map +0 -1
  110. package/dist/chunk-6ZBR4J62.js.map +0 -1
  111. package/dist/chunk-IPFRWILU.js.map +0 -1
  112. package/dist/chunk-RLRUAPBJ.cjs.map +0 -1
  113. package/dist/chunk-SMJGE7HM.cjs.map +0 -1
  114. package/dist/chunk-TVXFHE4T.js.map +0 -1
  115. /package/dist/{brushstrokeRender-CDDRSV2W.js.map → brushstrokeRender-LRV7GXGD.js.map} +0 -0
  116. /package/dist/{chunk-KMBC4HNV.js.map → chunk-J67OLQUQ.js.map} +0 -0
@@ -1,569 +1,21 @@
1
- import { b as AnimationEasing } from '../easing-lM0Xo9Ni.js';
2
- import { b as AnimationLoopMode, c as AnimationPlayer, C as Clock } from '../player-DV4Jujdq.js';
3
- import { x as VectorDocument, e as VectorNode, h as VectorBounds } from '../types-fuXEme9j.js';
1
+ import { M as MotionCommand, a as MotionShot, b as MotionScene, c as MotionDirection, d as MotionIrisShape, e as MotionSplitOrientation, f as MotionDriver, g as MotionDrivenProperty, h as MotionRect, i as MotionBeatGrid, j as MotionCue, k as MotionCamera, l as MotionTextUnit, m as MotionCascade, n as MotionBlur, o as MotionControl, p as MotionPreset, q as MotionClip, r as FlairSvgMotion, s as FlairVectorEffect, t as FlairExportOptions, u as FlairMotionExport, v as FlairEffectOptions, w as FlairEffectDocument, x as MotionEnterStyle, y as MotionExitStyle, z as MotionCommandType, A as MotionNarration } from '../flair-CxB3fOcU.js';
2
+ export { B as FLAIR_EASES, C as FLAIR_EXPORT_VERSION, D as FlairEase, E as FlairEaseName, G as FlairSpringEase, F as FlairSvgAnimation, H as MOTION_BLENDS, I as MOTION_CAMERA_MS, J as MOTION_CASCADES, K as MOTION_CLIP_TARGET, L as MOTION_COMMAND_TYPES, N as MOTION_DEFAULT_DURATIONS, O as MOTION_DEFAULT_HOLD, P as MOTION_DIRECTIONS, Q as MOTION_DRAW_MS_PER_UNIT, R as MOTION_DRAW_RANGE, S as MOTION_DRIVEN_PROPERTIES, T as MOTION_ENTER_STYLES, U as MOTION_EXIT_STYLES, V as MOTION_IRIS_SHAPES, W as MOTION_REPEAT_MODES, X as MOTION_SPLIT_ORIENTATIONS, Y as MOTION_TEXT_UNITS, Z as MOTION_TRIGGERS, _ as MotionColorPulseCommand, $ as MotionCommandBase, a0 as MotionDrawCommand, a1 as MotionDrawOrder, a2 as MotionEffectCommand, a3 as MotionEnterCommand, a4 as MotionExitCommand, a5 as MotionFadeCommand, a6 as MotionFollowCommand, a7 as MotionMatchCommand, a8 as MotionMorphCommand, a9 as MotionMoveCommand, aa as MotionPlayCommand, ab as MotionPulseCommand, ac as MotionRotateCommand, ad as MotionScaleCommand, ae as MotionShakeCommand, af as MotionStyleCommand, ag as MotionTeeterCommand, ah as MotionTrigger, ai as MotionWaitCommand, aj as MotionWaveCommand, ak as MotionWiggleCommand, al as flairAtLeast, am as flairCurveFor, an as flairEaseFor, ao as motionFlairPrimitive, ap as toFlairEffectDocument, aq as toFlairSvgMotion, ar as toFlairVectorEffect } from '../flair-CxB3fOcU.js';
4
3
  import { a as MotionBehavior } from '../behavior-Ymbld6jL.js';
5
- import { A as AffineMatrix, B as BezierPath } from '../bezier-DQZE5dxA.js';
6
- import { V as VectorSvgExportOptions } from '../svg-BfVXG7hL.js';
4
+ import { b as AnimationEasing } from '../easing-lM0Xo9Ni.js';
5
+ import { A as AffineMatrix, B as BezierPath } from '../bezier-CWv6LQal.js';
6
+ import { f as VectorNode, i as VectorBounds, V as VectorDocument } from '../types-BcX7sCsn.js';
7
+ import { V as VectorSvgExportOptions } from '../svg-C-vZ3q50.js';
7
8
  import { Z as ZipReadOptions } from '../zip-4nG0YAH7.js';
9
+ import { A as AnimationPlayer, C as Clock } from '../player-cGLrngL_.js';
10
+ import { b as AnimationLoopMode } from '../evaluate-CfmT6xA3.js';
8
11
  import { H as HistoryManager } from '../HistoryManager-DWSLd6Tf.js';
9
12
  import { a as AgentToolProvider } from '../registry-D-4fit9C.js';
10
13
  import { J as JsonSchema } from '../schema-Di0CS6Pe.js';
11
- import '../types-CwMPoRMU.js';
12
14
  import '../brushTypes-IG7ZZjIN.js';
15
+ import '../gradient-KDfCvhuj.js';
16
+ import '../types-CwMPoRMU.js';
13
17
  import '../types-DsiXGmjo.js';
14
18
 
15
- /**
16
- * A vector animation as plain JSON: a piece of vector artwork (the editor's `VectorDocument`,
17
- * as the vector editor draws it) and the shots that bring it to life.
18
- *
19
- * Shots, not timelines: a shot frames the camera, plays its commands and holds. Timing comes
20
- * from the content (each command has a sensible default length, and drawing a line takes as
21
- * long as the line is long), so there are no keyframes to manage. The same scene plays the
22
- * same frames every time: every frame is a pure function of time.
23
- */
24
- interface MotionScene {
25
- /** Format version (always 1). */
26
- version: 1;
27
- /** A short name, e.g. `logo-reveal`. */
28
- name: string;
29
- description?: string;
30
- /** The artwork in its resting state. Commands target its node ids. */
31
- artwork: VectorDocument;
32
- shots: MotionShot[];
33
- /** Playback past the end: stop (`none`, default), `loop` or `ping-pong`. */
34
- loop?: AnimationLoopMode;
35
- /**
36
- * Plays in answer to the viewer instead of on its own (exported to Flair's player):
37
- * - `click`: nothing plays until the viewer clicks; each click plays the next shot, and after the
38
- * last one a click plays the first again, so a last shot that puts things back makes a toggle.
39
- * - `hover` / `press`: plays forward while the pointer is over (or down on) it, and back when it leaves.
40
- * - `scroll`: scrubs through the scene as it scrolls through the viewport.
41
- * The editor previews it played through; `loop` does not apply.
42
- */
43
- trigger?: MotionTrigger;
44
- /** Frame rate used to sample motion that a target format cannot express exactly (default 30). */
45
- fps?: number;
46
- /**
47
- * Stepped time for every command that gives none: changes hold on a grid of this many frames
48
- * per second ("on twos" at 12), for a hand-drawn look. Default: smooth.
49
- */
50
- steps?: number;
51
- /** A beat grid to cue shots to (`MotionShot.at.beat`): music or a voiceover's rhythm. */
52
- beat?: MotionBeatGrid;
53
- /** A voiceover's words with their times, to cue shots to (`MotionShot.at.word`). */
54
- narration?: MotionNarration;
55
- /** Wanted length in seconds `[min, max]`; `check` warns outside it. */
56
- target?: [number, number];
57
- /**
58
- * Reusable motion: named command lists written against the target `"$"`, played on any
59
- * node with a `play` command (a "pop and settle" or "attention" you use many times).
60
- */
61
- clips?: Record<string, MotionClip>;
62
- /**
63
- * Properties that follow other properties: a background moving at half the speed of the
64
- * foreground (parallax), a wheel turning as it rolls. Each adds to what its target's commands do.
65
- */
66
- drivers?: MotionDriver[];
67
- /**
68
- * Motion blur on the stage and in rendered frames (not in exports): each frame averages a few
69
- * moments across the shutter, more for faster motion.
70
- */
71
- motionBlur?: MotionBlur;
72
- /** Parameters a Flair effect made from this scene exposes (see `toFlairVectorEffect`). */
73
- controls?: MotionControl[];
74
- /** Named sets of control values. */
75
- presets?: MotionPreset[];
76
- }
77
- /** What the viewer does to play a triggered scene (see `MotionScene.trigger`). */
78
- type MotionTrigger = 'click' | 'hover' | 'press' | 'scroll';
79
- declare const MOTION_TRIGGERS: readonly MotionTrigger[];
80
- /** A rectangle of the artwork, in document units. */
81
- interface MotionRect {
82
- x: number;
83
- y: number;
84
- width: number;
85
- height: number;
86
- }
87
- /**
88
- * Where the camera looks: a rectangle, or the id of a node to frame (with `padding` around
89
- * its bounds, default 24). The camera eases there over `ms` (default 1000; the first shot cuts).
90
- */
91
- type MotionCamera = (MotionRect | {
92
- frame: string;
93
- padding?: number;
94
- }) & {
95
- ease?: AnimationEasing;
96
- ms?: number;
97
- /** Zoom at a steady rate (the size changes by the same factor each moment) instead of linearly. */
98
- geometric?: boolean;
99
- };
100
- /** A steady beat: `bpm` beats a minute, the first at `offset` ms, `meter` beats a bar. */
101
- interface MotionBeatGrid {
102
- bpm: number;
103
- /** When beat 0 falls, ms (default 0). */
104
- offset?: number;
105
- /** Beats in a bar (default 4), for reading beats as bar and beat. */
106
- meter?: number;
107
- }
108
- /** A voiceover: its words in order, each with when it is said (ms), from a TTS or speech-to-text word timing. */
109
- interface MotionNarration {
110
- words: {
111
- text: string;
112
- start: number;
113
- end?: number;
114
- }[];
115
- }
116
- /** When a shot is cued to start: on a beat, on a narration word, or at a time. */
117
- interface MotionCue {
118
- /** Beat number on the scene's beat grid, from 0 (fractions for off-beats: 2.5 is the "and" of beat 3). */
119
- beat?: number;
120
- /** Index of a word in the scene's narration, from 0. */
121
- word?: number;
122
- /** A time in ms. */
123
- ms?: number;
124
- }
125
- /** One beat of the animation. */
126
- interface MotionShot {
127
- /** Stable id (unique in the scene), e.g. `intro`. */
128
- id: string;
129
- /** What happens in this shot, in a few words (shown on the timeline). */
130
- label?: string;
131
- /** Omit to keep the current framing. */
132
- camera?: MotionCamera;
133
- /**
134
- * Start on a cue: a beat, a narration word or a time. The shot before holds until then; a
135
- * cue that comes before the shot before has ended is missed (`check` says by how much).
136
- * Give one of `beat`, `word` or `ms`.
137
- */
138
- at?: MotionCue;
139
- /** Commands, played one after another (unless a command says `with: "previous"`). */
140
- run: MotionCommand[];
141
- /** Milliseconds to hold after the commands finish (default 600). */
142
- hold?: number;
143
- /**
144
- * Plays the whole shot this many times as fast (default 1): its camera move, delays,
145
- * durations, staggers and hold all scale by 1 / speed. `fit_animation` sets it to fit a length.
146
- */
147
- speed?: number;
148
- }
149
- /** How `split` splits outlined text. */
150
- type MotionTextUnit = 'letter' | 'word' | 'line';
151
- declare const MOTION_TEXT_UNITS: readonly MotionTextUnit[];
152
- /** The order `split` units animate in. */
153
- type MotionCascade = 'forward' | 'backward' | 'center' | 'edges' | 'random';
154
- declare const MOTION_CASCADES: readonly MotionCascade[];
155
- /** Fields every command takes. */
156
- interface MotionCommandBase {
157
- /** Node ids from the artwork (groups animate as one, unless `split` splits their text). */
158
- targets: string[];
159
- /**
160
- * For outlined text (a group of letter paths): animate it a letter, word or line at a time,
161
- * staggered in reading order (default stagger 40 ms a letter, 120 a word, 300 a line).
162
- */
163
- split?: MotionTextUnit;
164
- /** With `split`: the order units go in (default `forward`). `random` is the same every time. */
165
- cascade?: MotionCascade;
166
- /** Length in ms for each target, one cycle when repeating (each type has a default; `draw` follows the path length; a spring `ease` lasts until it settles). */
167
- duration?: number;
168
- /** Wait this many ms before starting (default 0). */
169
- delay?: number;
170
- /** Start each further target this many ms after the one before (default 0). */
171
- stagger?: number;
172
- /** `after` (default) starts when the commands before it finish; `previous` starts with the command before. */
173
- with?: 'after' | 'previous';
174
- /** An easing; a spring with no `duration` lasts until it settles. */
175
- ease?: AnimationEasing;
176
- /** Why this command is here (for people and agents reading the scene). */
177
- note?: string;
178
- /**
179
- * Play the change this many times (a whole number, default 1); `duration` is one cycle. Not
180
- * for `enter`, `exit` or `wait`.
181
- */
182
- repeat?: number;
183
- /**
184
- * How repeats follow each other: `loop` (default) starts each cycle afresh, `mirror` plays
185
- * every other one backwards, `offset` carries on from where the last ended (rotate by 90,
186
- * repeat 4: a full turn). Colours and shapes offset like `loop`.
187
- */
188
- repeatMode?: 'loop' | 'mirror' | 'offset';
189
- /** Stepped time: hold the change on a grid of this many frames per second (default: the scene's `steps`, else smooth). */
190
- steps?: number;
191
- }
192
- type MotionEnterStyle = 'fade' | 'pop' | 'grow' | 'slide' | 'draw' | 'zoom' | 'rise' | 'wipe' | 'iris' | 'split';
193
- type MotionExitStyle = 'fade' | 'shrink' | 'slide' | 'undraw' | 'wipe';
194
- type MotionDirection = 'up' | 'down' | 'left' | 'right';
195
- /** The opening an `iris` reveals through. */
196
- type MotionIrisShape = 'circle' | 'box';
197
- /** The line a `split` opens from. */
198
- type MotionSplitOrientation = 'horizontal' | 'vertical';
199
- /**
200
- * Brings hidden targets in. Targets entered in a shot are hidden before it. Each style is a
201
- * Flair motion primitive (`entrance.<style>`) with the same defaults.
202
- */
203
- interface MotionEnterCommand extends MotionCommandBase, MotionDrawOrder {
204
- type: 'enter';
205
- /**
206
- * Default `fade`. `draw` draws the outline on, then fades the fill in. `pop` scales up past
207
- * full size and settles; `zoom` settles from larger; `rise` rises a short way with a little
208
- * overshoot. `wipe`, `iris` and `split` reveal the target through a clip over its box (see
209
- * `MotionFrame.clips`), reaching past it far enough to show its whole stroke.
210
- */
211
- style?: MotionEnterStyle;
212
- /**
213
- * For `slide`: the direction of travel (default `up`). For `wipe`: the way the edge travels
214
- * (default `right`, which reveals from the left).
215
- */
216
- direction?: MotionDirection;
217
- /** For `slide` (default 40) and `rise` (default 20): how far in document units. */
218
- distance?: number;
219
- /** For `pop` (default 0.5) and `zoom` (default 1.6): the starting scale. */
220
- scale?: number;
221
- /** For `iris`: open through a `circle` (default; an ellipse on a box that is not square) or a `box`. */
222
- shape?: MotionIrisShape;
223
- /** For `split`: open up and down from a `horizontal` line through the middle (default), or left and right from a `vertical` one. */
224
- orientation?: MotionSplitOrientation;
225
- }
226
- /** Takes targets out. */
227
- interface MotionExitCommand extends MotionCommandBase, MotionDrawOrder {
228
- type: 'exit';
229
- /** Default `fade`. `wipe` hides the target behind an edge travelling `direction` (a wipe in, reversed). */
230
- style?: MotionExitStyle;
231
- /** For `slide`: the direction of travel (default `down`). For `wipe`: the way the edge travels (default `right`, which hides from the left). */
232
- direction?: MotionDirection;
233
- distance?: number;
234
- }
235
- /**
236
- * How the strokes of a group (or several paths) draw on or off together. Default: all at once,
237
- * each over the whole time.
238
- */
239
- interface MotionDrawOrder {
240
- /** `together` (default) or `sequence`: one stroke after another, each for a time in proportion to its length. */
241
- order?: 'together' | 'sequence';
242
- /** With `together`: `time` (default) gives every stroke the whole time; `speed` draws them all at one speed, so short ones take less. */
243
- pace?: 'time' | 'speed';
244
- /** With `pace: "speed"`: `start` (default) starts them together, `end` finishes them together. */
245
- align?: 'start' | 'end';
246
- /** With `sequence`: `document` (default, stacking order) or `distance` from `origin` (a radial reveal). */
247
- sortBy?: 'document' | 'distance';
248
- /** With `sortBy: "distance"`: the point (document units) strokes are drawn out from (default the target's centre). */
249
- origin?: {
250
- x: number;
251
- y: number;
252
- };
253
- }
254
- /** Draws a stroke on (or off) between two fractions of its length. */
255
- interface MotionDrawCommand extends MotionCommandBase, MotionDrawOrder {
256
- type: 'draw';
257
- /**
258
- * A travelling stroke this fraction of the length long (0–1): it runs along the path and off
259
- * the end, instead of drawing it on and leaving it.
260
- */
261
- comet?: number;
262
- /** Fraction drawn at the end (default 1). */
263
- to?: number;
264
- /** Fraction drawn at the start (default: what is drawn now). */
265
- from?: number;
266
- }
267
- /** Moves targets by an offset, or to a point (their centre lands there). */
268
- interface MotionMoveCommand extends MotionCommandBase {
269
- /**
270
- * `add` makes the change a layer over the pose instead of a change to it: it stacks on
271
- * whatever else moves the target (a shake on a slide), and what it adds stays once it ends.
272
- * Default `replace` for move, rotate and scale (the later change takes over), `add` for
273
- * pulse, shake, teeter, wave and wiggle.
274
- */
275
- blend?: 'replace' | 'add';
276
- type: 'move';
277
- by?: {
278
- x: number;
279
- y: number;
280
- };
281
- to?: {
282
- x: number;
283
- y: number;
284
- };
285
- /**
286
- * Points (document units) the centre passes through on the way, in order. The path is
287
- * smooth (velocity carries through each point) and never overshoots a point.
288
- */
289
- via?: {
290
- x: number;
291
- y: number;
292
- }[];
293
- /** With `via`: `even` (default) keeps the speed steady along the path, `equal` gives each leg the same time. */
294
- pacing?: 'even' | 'equal';
295
- }
296
- /** Turns targets about their centre, by or to an angle in degrees (clockwise). */
297
- interface MotionRotateCommand extends MotionCommandBase {
298
- /**
299
- * `add` makes the change a layer over the pose instead of a change to it: it stacks on
300
- * whatever else moves the target (a shake on a slide), and what it adds stays once it ends.
301
- * Default `replace` for move, rotate and scale (the later change takes over), `add` for
302
- * pulse, shake, teeter, wave and wiggle.
303
- */
304
- blend?: 'replace' | 'add';
305
- type: 'rotate';
306
- by?: number;
307
- to?: number;
308
- }
309
- /** Scales targets about their centre (1 = rest size). */
310
- interface MotionScaleCommand extends MotionCommandBase {
311
- /**
312
- * `add` makes the change a layer over the pose instead of a change to it: it stacks on
313
- * whatever else moves the target (a shake on a slide), and what it adds stays once it ends.
314
- * Default `replace` for move, rotate and scale (the later change takes over), `add` for
315
- * pulse, shake, teeter, wave and wiggle.
316
- */
317
- blend?: 'replace' | 'add';
318
- type: 'scale';
319
- to: number | {
320
- x: number;
321
- y: number;
322
- };
323
- /** Grow at a steady rate (the same factor each moment), which reads as an even zoom. */
324
- geometric?: boolean;
325
- }
326
- /** Changes opacity (0–1). */
327
- interface MotionFadeCommand extends MotionCommandBase {
328
- type: 'fade';
329
- to: number;
330
- }
331
- /** Changes solid paints and stroke width. Colours mix in OKLab. */
332
- interface MotionStyleCommand extends MotionCommandBase {
333
- type: 'style';
334
- fill?: string;
335
- stroke?: string;
336
- strokeWidth?: number;
337
- }
338
- /** Morphs each target into the shape of another node (`into`), which usually stays hidden. */
339
- interface MotionMorphCommand extends MotionCommandBase {
340
- type: 'morph';
341
- into: string;
342
- }
343
- /**
344
- * Smart Animate: tweens a group into another group (`into`, usually hidden), part by part. Each
345
- * part of the target takes the shape, paint and place of its partner in `into`, paired by name,
346
- * then by id (`card-a-title` ↔ `card-b-title`), then by kind in order. Parts with no partner fade
347
- * out; parts of `into` with no partner do not appear (`check` lists them).
348
- */
349
- interface MotionMatchCommand extends MotionCommandBase {
350
- type: 'match';
351
- /** Id of the group (or node) to become. */
352
- into: string;
353
- }
354
- /** A reusable piece of motion: commands that target `"$"` (whatever `play` names), timed as in a shot. */
355
- interface MotionClip {
356
- description?: string;
357
- /** Commands, timed as in a shot; `"$"` in `targets` stands for the node played on. Clips cannot play clips. */
358
- run: MotionCommand[];
359
- }
360
- /** Motion blur: how long the shutter is open and how many moments a frame averages at most. */
361
- interface MotionBlur {
362
- /** Shutter angle in degrees of a frame at the scene's fps (default 180: half a frame; 360 is a whole frame). */
363
- shutter?: number;
364
- /** Most moments a frame averages (default 8, at most 32); fewer for slower motion. */
365
- samples?: number;
366
- }
367
- /** Properties a driver reads and drives: offsets (document units), turn (degrees), scales and opacity. */
368
- type MotionDrivenProperty = 'x' | 'y' | 'rotation' | 'scaleX' | 'scaleY' | 'opacity';
369
- declare const MOTION_DRIVEN_PROPERTIES: readonly MotionDrivenProperty[];
370
- /**
371
- * One property following another. Both are read as a change from rest (offsets and turns from
372
- * 0, scales and opacity from 1): the target's property changes by `source change · factor + offset`,
373
- * clamped to `clamp`, on top of its own commands (added to offsets and turns, multiplied into
374
- * scales and opacity as 1 + change).
375
- */
376
- interface MotionDriver {
377
- /** The node that follows. */
378
- target: string;
379
- property: MotionDrivenProperty;
380
- /** The node and property it follows. */
381
- source: {
382
- node: string;
383
- property: MotionDrivenProperty;
384
- };
385
- /** Default 1 (0.5 moves at half the speed; 360 / (2π·radius) turns a wheel by how far it rolls). */
386
- factor?: number;
387
- /** Added to the change (default 0). */
388
- offset?: number;
389
- /** Limits the change to `[min, max]`. */
390
- clamp?: [number, number];
391
- }
392
- /** The placeholder target in a clip's commands. */
393
- declare const MOTION_CLIP_TARGET = "$";
394
- /** Plays a clip (`scene.clips`) on the targets: its commands, with `"$"` standing for each target. */
395
- interface MotionPlayCommand extends MotionCommandBase {
396
- type: 'play';
397
- /** The clip's name. */
398
- clip: string;
399
- /** Play it this many times as fast (default 1). */
400
- speed?: number;
401
- }
402
- /** Moves targets along a path node, centre on the path. */
403
- interface MotionFollowCommand extends MotionCommandBase {
404
- type: 'follow';
405
- /** Id of a path node in the artwork (it can be hidden). */
406
- path: string;
407
- /**
408
- * Turn with the path's direction (default false). Moves, shakes and wiggles made during the
409
- * follow then turn with it too: they are offsets from the target's place on the path.
410
- */
411
- rotate?: boolean;
412
- /** Fractions of the path's length to travel between (default 0 → 1). */
413
- from?: number;
414
- to?: number;
415
- }
416
- /** Scales up and back, `count` times (draws the eye). */
417
- interface MotionPulseCommand extends MotionCommandBase {
418
- /**
419
- * `add` makes the change a layer over the pose instead of a change to it: it stacks on
420
- * whatever else moves the target (a shake on a slide), and what it adds stays once it ends.
421
- * Default `replace` for move, rotate and scale (the later change takes over), `add` for
422
- * pulse, shake, teeter, wave and wiggle.
423
- */
424
- blend?: 'replace' | 'add';
425
- type: 'pulse';
426
- /** Extra scale at the peak (default 0.15). */
427
- amount?: number;
428
- count?: number;
429
- }
430
- /** Shakes side to side (or up and down), settling. */
431
- interface MotionShakeCommand extends MotionCommandBase {
432
- /**
433
- * `add` makes the change a layer over the pose instead of a change to it: it stacks on
434
- * whatever else moves the target (a shake on a slide), and what it adds stays once it ends.
435
- * Default `replace` for move, rotate and scale (the later change takes over), `add` for
436
- * pulse, shake, teeter, wave and wiggle.
437
- */
438
- blend?: 'replace' | 'add';
439
- type: 'shake';
440
- /** Distance in document units (default 8). */
441
- amount?: number;
442
- count?: number;
443
- /** Default `horizontal`. */
444
- axis?: 'horizontal' | 'vertical';
445
- }
446
- /** Rocks about the centre by `angle` either way, settling (Flair's `emphasis.teeter`). */
447
- interface MotionTeeterCommand extends MotionCommandBase {
448
- /**
449
- * `add` makes the change a layer over the pose instead of a change to it: it stacks on
450
- * whatever else moves the target (a shake on a slide), and what it adds stays once it ends.
451
- * Default `replace` for move, rotate and scale (the later change takes over), `add` for
452
- * pulse, shake, teeter, wave and wiggle.
453
- */
454
- blend?: 'replace' | 'add';
455
- type: 'teeter';
456
- /** Degrees either way (default 8). */
457
- angle?: number;
458
- /** Rocks (default 3). */
459
- count?: number;
460
- }
461
- /** Bobs up and down without settling, like something floating (Flair's `emphasis.wave`). */
462
- interface MotionWaveCommand extends MotionCommandBase {
463
- /**
464
- * `add` makes the change a layer over the pose instead of a change to it: it stacks on
465
- * whatever else moves the target (a shake on a slide), and what it adds stays once it ends.
466
- * Default `replace` for move, rotate and scale (the later change takes over), `add` for
467
- * pulse, shake, teeter, wave and wiggle.
468
- */
469
- blend?: 'replace' | 'add';
470
- type: 'wave';
471
- /** Height in document units (default 6). */
472
- amount?: number;
473
- /** Bobs (default 2). */
474
- count?: number;
475
- }
476
- /**
477
- * Wanders about its place as smooth seeded noise, easing out of and back to rest (Flair's
478
- * `emphasis.wiggle`). The same seed always wanders the same way.
479
- */
480
- interface MotionWiggleCommand extends MotionCommandBase {
481
- /**
482
- * `add` makes the change a layer over the pose instead of a change to it: it stacks on
483
- * whatever else moves the target (a shake on a slide), and what it adds stays once it ends.
484
- * Default `replace` for move, rotate and scale (the later change takes over), `add` for
485
- * pulse, shake, teeter, wave and wiggle.
486
- */
487
- blend?: 'replace' | 'add';
488
- type: 'wiggle';
489
- /** Up to about this far, in document units (default 6). */
490
- amount?: number;
491
- /** Wanders per second, in Hz (default 3). */
492
- frequency?: number;
493
- /** Layers of finer detail (default 2). */
494
- octaves?: number;
495
- /** Also turns about the centre by up to about this many degrees (default 0). */
496
- rotate?: number;
497
- /** A whole number; default: one picked from the target's id, so each target wanders its own way. */
498
- seed?: number;
499
- }
500
- /** Tints solid paint toward a colour and back, `count` times (Flair's `emphasis.color-pulse`). */
501
- interface MotionColorPulseCommand extends MotionCommandBase {
502
- type: 'color-pulse';
503
- /** The tint (default `#f59e0b`). Mixes in OKLab. */
504
- color?: string;
505
- /** Which paint (default `fill`). On a group it tints every path in it. */
506
- paint?: 'fill' | 'stroke';
507
- count?: number;
508
- }
509
- /** Tweens a numeric parameter of a live path effect on the target (twist angle, wiggle time, zig zag size…). */
510
- interface MotionEffectCommand extends MotionCommandBase {
511
- type: 'effect';
512
- /** Id of an effect in the target node's `effects`. */
513
- effect: string;
514
- /** A numeric parameter of that effect, e.g. `angle`. */
515
- param: string;
516
- to: number;
517
- }
518
- /** Does nothing for `duration` ms. */
519
- interface MotionWaitCommand {
520
- type: 'wait';
521
- duration: number;
522
- with?: 'after' | 'previous';
523
- note?: string;
524
- }
525
- type MotionCommand = MotionEnterCommand | MotionExitCommand | MotionDrawCommand | MotionMoveCommand | MotionRotateCommand | MotionScaleCommand | MotionFadeCommand | MotionStyleCommand | MotionMorphCommand | MotionMatchCommand | MotionPlayCommand | MotionFollowCommand | MotionPulseCommand | MotionShakeCommand | MotionTeeterCommand | MotionWaveCommand | MotionWiggleCommand | MotionColorPulseCommand | MotionEffectCommand | MotionWaitCommand;
526
- type MotionCommandType = MotionCommand['type'];
527
- declare const MOTION_COMMAND_TYPES: readonly MotionCommandType[];
528
- declare const MOTION_ENTER_STYLES: readonly MotionEnterStyle[];
529
- declare const MOTION_BLENDS: readonly ["replace", "add"];
530
- declare const MOTION_REPEAT_MODES: readonly ["loop", "mirror", "offset"];
531
- declare const MOTION_EXIT_STYLES: readonly MotionExitStyle[];
532
- declare const MOTION_IRIS_SHAPES: readonly MotionIrisShape[];
533
- declare const MOTION_SPLIT_ORIENTATIONS: readonly MotionSplitOrientation[];
534
- declare const MOTION_DIRECTIONS: readonly MotionDirection[];
535
- /**
536
- * A colour parameter of the effect made from the scene: it stands for every use of its
537
- * `default` colour in the artwork and the commands, so recolouring it recolours them all.
538
- */
539
- interface MotionControl {
540
- /** Identifier, e.g. `accent`. */
541
- name: string;
542
- type: 'color';
543
- /** A `#rrggbb` colour used in the scene. */
544
- default: string;
545
- label?: string;
546
- }
547
- interface MotionPreset {
548
- name: string;
549
- values: Record<string, string>;
550
- }
551
- /** Default lengths (ms) of commands that give none. */
552
- declare const MOTION_DEFAULT_DURATIONS: Readonly<Record<Exclude<MotionCommandType, 'wait' | 'draw'>, number>>;
553
- /** Default hold after a shot's commands (ms). */
554
- declare const MOTION_DEFAULT_HOLD = 600;
555
- /** Default camera move (ms). */
556
- declare const MOTION_CAMERA_MS = 1000;
557
- /** `draw` lasts `length × MOTION_DRAW_MS_PER_UNIT`, clamped to `MOTION_DRAW_RANGE`. */
558
- declare const MOTION_DRAW_MS_PER_UNIT = 1.5;
559
- declare const MOTION_DRAW_RANGE: readonly [number, number];
560
- /**
561
- * The Flair motion primitive (`@pixerate/flair/motion`) a command plays, or undefined when
562
- * Flair has none (`move`, `scale`, `fade`, `style`, `morph`, `effect`, `wait` are the editor's
563
- * own). Commands and primitives of the same name take the same parameters and defaults.
564
- */
565
- declare function motionFlairPrimitive(command: MotionCommand): string | undefined;
566
-
567
19
  /**
568
20
  * Problems with a scene, as data: every issue has a stable `code`, a severity, the shot and
569
21
  * command it is in and the ids it is about, beside its prose `message`, so an agent (or a UI)
@@ -1392,180 +844,6 @@ declare const MOTION_SPEED_RANGE: readonly [number, number];
1392
844
  */
1393
845
  declare function fitMotionScene(scene: MotionScene, ms: number, options?: MotionFitOptions): MotionFit;
1394
846
 
1395
- /**
1396
- * Export to Flair (`@pixerate/flair`): a scene becomes an `SvgMotion` (one SVG plus a list of
1397
- * from → to changes on its elements), a catalog `VectorEffect`, or an `EffectDocument` for
1398
- * Flair's effect editor. The types are mirrored here so this package does not depend on Flair.
1399
- *
1400
- * Changes are exact where Flair can express them: a change with a linear, cubic-out or
1401
- * cubic-in-out curve (the editor's defaults) is one change, and so (Flair 0.36 and later) is
1402
- * one with any cubic-bezier curve, written as `[x1, y1, x2, y2]`. Anything else (springs,
1403
- * elastic, `hold`, morphs and live-effect tweens) is sampled at the
1404
- * scene's `fps` into short linear changes, which Flair plays the same way. Pulses, shakes,
1405
- * teeters, waves, wiggles and colour pulses are one change with a `behavior` (Flair 0.38).
1406
- *
1407
- * Reveals (`wipe`, `iris`, `split`) wrap their node in a group clipped through a rect or circle
1408
- * in the group's own box units (`clipPathUnits="objectBoundingBox"`), as Flair's
1409
- * `entrance.wipe` does, and animate the shape's attributes. A follow wraps its node in a group
1410
- * that Flair's `along` carries along a copy of the path in the node's parent's units (written
1411
- * in `<defs>`, so the path may be hidden or anywhere), turning with it for `orient`, as
1412
- * Flair's `path.follow` does.
1413
- */
1414
- /** Flair's easing names. */
1415
- type FlairEaseName = 'linear' | 'in-out' | 'out';
1416
- /** Flair's spring ease (Flair 0.39 and later): the editor's spring, number for number. */
1417
- interface FlairSpringEase {
1418
- spring: {
1419
- mass?: number;
1420
- stiffness?: number;
1421
- damping?: number;
1422
- velocity?: number;
1423
- };
1424
- }
1425
- /** A Flair easing: a name, (Flair 0.36 and later) a CSS cubic-bezier `[x1, y1, x2, y2]`, or (0.39) a spring. */
1426
- type FlairEase = FlairEaseName | readonly [number, number, number, number] | FlairSpringEase;
1427
- /** Flair's curves, for matching. */
1428
- declare const FLAIR_EASES: Readonly<Record<FlairEaseName, (t: number) => number>>;
1429
- /** One change of a Flair `SvgMotion` (mirrors `SvgAnimation` in `@pixerate/flair/vector`). */
1430
- interface FlairSvgAnimation {
1431
- id?: string;
1432
- step?: number;
1433
- delay?: number;
1434
- ms?: number;
1435
- ease?: FlairEase;
1436
- attrs?: Record<string, readonly [string | number, string | number]>;
1437
- draw?: boolean | readonly [number, number];
1438
- /** Moves the element along a path (by id), from and to the fractions of its length in `at`. */
1439
- along?: string;
1440
- at?: readonly [number, number];
1441
- /** With `along`: turns the element with the path's direction. */
1442
- orient?: boolean;
1443
- /** Flair 0.38 and later: how the change swings from → to (see `MotionBehavior`). */
1444
- behavior?: MotionBehavior;
1445
- /** Flair 0.39 and later: stepped time, held on a grid of this many frames per second. */
1446
- strobe?: number;
1447
- /** Flair 0.39 and later: whole cycles to play (default 1); with `alternate`, every other one backwards. */
1448
- repeat?: number;
1449
- alternate?: boolean;
1450
- /** Flair features scenes do not have (imports skip them with a note). */
1451
- count?: readonly [number, number];
1452
- write?: string;
1453
- scramble?: string;
1454
- solo?: number;
1455
- view?: readonly [number, number, number, number] | string;
1456
- }
1457
- /** Mirrors `SvgMotion` in `@pixerate/flair/vector`. */
1458
- interface FlairSvgMotion {
1459
- svg: string;
1460
- animate?: FlairSvgAnimation[];
1461
- }
1462
- /** Mirrors Flair's catalog `VectorEffect` (`@pixerate/flair/catalog`). */
1463
- interface FlairVectorEffect {
1464
- kind: 'vector';
1465
- id: string;
1466
- name: string;
1467
- description: string;
1468
- category: string;
1469
- tags: string[];
1470
- motion: FlairSvgMotion;
1471
- /** Values are `#rrggbb` strings, or `[r, g, b]` channels from 0 to 1 (Flair's catalog writes both); imports turn them into hex. */
1472
- presets?: {
1473
- name: string;
1474
- values: Record<string, string | readonly number[]>;
1475
- }[];
1476
- /** Ms on the last frame before looping. */
1477
- hold?: number;
1478
- trigger?: 'hover' | 'press' | 'click' | 'scroll';
1479
- }
1480
- /** Mirrors Flair's `EffectDocument` (`@pixerate/flair/editor`) for a vector effect. */
1481
- interface FlairEffectDocument {
1482
- version: 1;
1483
- name: string;
1484
- effect: {
1485
- kind: 'vector';
1486
- motion: FlairSvgMotion;
1487
- hold?: number;
1488
- };
1489
- values: Record<string, string>;
1490
- tracks: Record<string, never>;
1491
- duration: number;
1492
- loop: boolean;
1493
- presets: {
1494
- name: string;
1495
- values: Record<string, string>;
1496
- }[];
1497
- }
1498
- interface FlairMotionExport {
1499
- motion: FlairSvgMotion;
1500
- /** The scene's length (ms). */
1501
- duration: number;
1502
- /** Ms after the last change (Flair's `hold`). */
1503
- hold: number;
1504
- /** Changes sampled into linear steps. */
1505
- sampled: number;
1506
- /** What could not be carried over, in sentences. */
1507
- notes: string[];
1508
- /** How the viewer plays it: pass to Flair's `SvgPlayer` as `{ trigger }` (from the scene's `trigger`). */
1509
- trigger?: MotionTrigger;
1510
- }
1511
- interface FlairExportOptions {
1512
- /**
1513
- * Play in answer to the viewer (default: the scene's `trigger`; null for none). With `click`
1514
- * shot n is Flair step n + 1: nothing plays until the first click, and each click plays the next shot.
1515
- */
1516
- trigger?: MotionTrigger | null;
1517
- /** Sampling rate for changes Flair cannot express exactly (default: the scene's `fps`, else 30). */
1518
- fps?: number;
1519
- /** Decimal places (default 3). */
1520
- precision?: number;
1521
- /**
1522
- * Write cubic-bezier easings (the `ease`, `ease-in`, `ease-out`, `ease-in-out`, `ease-in-back`
1523
- * and `ease-out-back` presets, and `{ type: 'cubic-bezier' }` curves) as one change with
1524
- * `ease: [x1, y1, x2, y2]` (default true). Needs Flair 0.36 or later; set false for older
1525
- * Flair, and they are sampled into linear steps.
1526
- */
1527
- curves?: boolean;
1528
- /**
1529
- * Write pulses, shakes, teeters, waves, wiggles and colour pulses as one change with a Flair
1530
- * `behavior` (default true), so they play exactly. Needs Flair 0.38 or later; set false for
1531
- * older Flair, and they are sampled into linear steps.
1532
- */
1533
- behaviors?: boolean;
1534
- /**
1535
- * The Flair version the export is for (default `0.39`): it decides what is written exactly
1536
- * and what is sampled. 0.36 adds cubic-bezier curves, 0.38 behaviours, 0.39 springs and
1537
- * stepped time (`strobe`). `curves` and `behaviors` override it.
1538
- */
1539
- flair?: string;
1540
- }
1541
- /** The Flair version exports target by default. */
1542
- declare const FLAIR_EXPORT_VERSION = "0.39";
1543
- /** Whether Flair `version` is at least `min` (dotted numbers). */
1544
- declare function flairAtLeast(version: string, min: string): boolean;
1545
- /** The Flair easing that matches `ease` (within 1% everywhere), if any. */
1546
- declare function flairEaseFor(ease: AnimationEasing): FlairEaseName | undefined;
1547
- /**
1548
- * The Flair easing for `ease`: a Flair name when one matches within 1%, else (with `curves`,
1549
- * the default) the curve's `[x1, y1, x2, y2]` when it is a cubic-bezier. Undefined for curves
1550
- * Flair cannot play (springs, elastic, `hold`), which are sampled.
1551
- */
1552
- declare function flairCurveFor(ease: AnimationEasing, curves?: boolean): FlairEase | undefined;
1553
- /** A scene as a Flair `SvgMotion`. */
1554
- declare function toFlairSvgMotion(scene: MotionScene, options?: FlairExportOptions): FlairMotionExport;
1555
- interface FlairEffectOptions extends FlairExportOptions {
1556
- /** Kebab-case id (default: the scene's name). */
1557
- id?: string;
1558
- name?: string;
1559
- description?: string;
1560
- /** Flair catalog category (default `icon`). */
1561
- category?: string;
1562
- tags?: string[];
1563
- }
1564
- /** A scene as a Flair catalog vector effect, with its colour controls and presets. */
1565
- declare function toFlairVectorEffect(scene: MotionScene, options?: FlairEffectOptions): FlairVectorEffect;
1566
- /** A scene as a document for Flair's `EffectEditor` (`replaceDocument`). */
1567
- declare function toFlairEffectDocument(scene: MotionScene, options?: FlairExportOptions): FlairEffectDocument;
1568
-
1569
847
  /**
1570
848
  * Import from Flair: a Flair `SvgMotion` (or a catalog `VectorEffect`) becomes a scene, so an
1571
849
  * effect made in Flair, or taken from its catalog, can be opened and edited here. The reverse
@@ -2508,4 +1786,4 @@ declare function parseMotionDrivers(text: string): {
2508
1786
  error: string;
2509
1787
  };
2510
1788
 
2511
- 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, type LottieAnimation, type LottieExport, type LottieExportOptions, type LottieKeyframe, type LottieShape, type LottieValue, MOTION_ADDITIVE_PROPERTIES, MOTION_BLENDS, MOTION_CAMERA_MS, MOTION_CASCADES, MOTION_CLIP_TARGET, 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_DRIVEN_PROPERTIES, MOTION_EASE_CHOICES, 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_SPEED_RANGE, MOTION_SPLIT_ORIENTATIONS, MOTION_TEXT_STAGGER, MOTION_TEXT_UNITS, MOTION_TRIGGERS, type MotionBeatGrid, type MotionBlur, type MotionCamera, type MotionCascade, type MotionClip, type MotionClipItem, type MotionClipShape, type MotionColorPulseCommand, type MotionCommand, type MotionCommandBase, type MotionCommandTiming, type MotionCommandType, type MotionContactSheetOptions, type MotionControl, type MotionCue, type MotionDirection, type MotionDrawCommand, type MotionDrawOrder, type MotionDrivenProperty, type MotionDriver, type MotionEasingCurve, type MotionEdit, type MotionEditOp, type MotionEditOutcome, type MotionEditResult, type MotionEffectCommand, type MotionEnterCommand, type MotionEnterStyle, type MotionExitCommand, type MotionExitStyle, type MotionFadeCommand, type MotionFieldInput, type MotionFieldKind, type MotionFieldSpec, type MotionFit, type MotionFitOptions, type MotionFollowCommand, type MotionFrame, type MotionFrameOptions, type MotionGhost, type MotionIrisShape, type MotionIssue, type MotionIssueCode, type MotionIssueSeverity, type MotionMatch, type MotionMatchCommand, type MotionMorphCommand, type MotionMoveCommand, type MotionNarration, type MotionNodeEntry, type MotionOnionSkin, type MotionOverlayOptions, type MotionPath, type MotionPathOptions, type MotionPlayCommand, 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 MotionSmoothLeg, type MotionSplitOrientation, type MotionStyleCommand, type MotionSvgOptions, type MotionTeeterCommand, type MotionTextLayout, type MotionTextUnit, type MotionTimeline, type MotionTrigger, type MotionValue, type MotionWaitCommand, type MotionWaveCommand, type MotionWiggleCommand, type PptxAnimationImport, type PptxAnimationImportOptions, activeSegment, applyMotionControlValues, applyMotionDrivers, applyMotionEdits, checkMotionScene, clipsShapeProblems, commandShapeProblems, compileMotionScene, createAnimationEditorToolProvider, createMotionScene, defaultMotionCommand, describeMotionElements, describeMotionShots, driversShapeProblems, duplicateMotionCommandEdit, fitMotionRect, fitMotionScene, fitMotionSceneEdits, flairAtLeast, flairCurveFor, flairEaseFor, formatMotionDrivers, formatMotionNarration, freshShotId, fromFlairSvgMotion, fromFlairVectorEffect, fromPptxAnimation, highlightMotionSvg, indexMotionNodes, interpolateMotionValue, isMotionCommand, isMotionShot, matchMotionNodes, motionAddTrackKey, motionBeatAt, motionBeatTime, motionBlurTimes, motionCascade, motionClipAttrs, motionClipLayout, motionCommandDuration, motionCommandFields, motionCommandRepeat, motionCommandRows, motionCommandSlots, motionCommandSummary, motionContactSheetSvg, motionCueChoices, motionCueFromKey, motionCueKey, motionCueTime, motionCycleDuration, motionDrivenNodes, motionDriverSources, motionEaseKey, motionEasingCurve, motionEasingGuides, motionEasingPath, motionFieldEdit, motionFieldLabel, motionFlairPrimitive, motionFollowRoute, motionFrameAt, motionFrameToSvg, motionGhosts, motionIssue, motionIssueKey, motionIssueLine, motionMovingIds, motionNodeAtElement, motionNodeClips, motionNodeOffset, motionPath, motionPathLength, motionPathsSvg, motionPropertyValue, motionRestValue, motionRevealClip, motionRevealPadding, motionRulerTicks, motionSceneShapeProblems, motionSceneToJson, motionShotAt, motionShotCueTime, motionShotTimeScale, motionStageSvg, motionTextLayout, motionTextUnits, motionTrackKey, namedWithSuggestion, parseMotionDrivers, parseMotionFieldInput, parseMotionNarration, parseMotionScene, resolveMotionCamera, resolveMotionEditRefs, segmentProgress, segmentValue, shotShapeProblems, smoothMotionLegs, smoothMotionTimes, suggestName, toFlairEffectDocument, toFlairSvgMotion, toFlairVectorEffect, toLottie, trackValue, withMotionLayers, withViewBox };
1789
+ export { ANIMATION_EDITOR_AGENT_INSTRUCTIONS, AnimationEditorController, type AnimationEditorOptions, type AnimationEditorSelection, type AnimationEditorState, type AnimationEditorToolProviderOptions, FlairEffectDocument, FlairEffectOptions, FlairExportOptions, type FlairImportOptions, type FlairImportResult, FlairMotionExport, FlairSvgMotion, FlairVectorEffect, type LottieAnimation, type LottieExport, type LottieExportOptions, type LottieKeyframe, type LottieShape, type LottieValue, MOTION_ADDITIVE_PROPERTIES, MOTION_COMMAND_SCHEMA, MOTION_DRAW_EFFECT_ID, MOTION_EASE_CHOICES, MOTION_EASE_IN_OUT, MOTION_EASE_OUT, MOTION_EDIT_OPS, MOTION_ISSUE_CODES, MOTION_MIN_CHANGE_MS, MOTION_SPEED_RANGE, MOTION_TEXT_STAGGER, MotionBeatGrid, MotionBlur, MotionCamera, MotionCascade, MotionClip, type MotionClipItem, type MotionClipShape, MotionCommand, type MotionCommandTiming, MotionCommandType, type MotionContactSheetOptions, MotionControl, MotionCue, MotionDirection, MotionDrivenProperty, MotionDriver, type MotionEasingCurve, type MotionEdit, type MotionEditOp, type MotionEditOutcome, type MotionEditResult, MotionEnterStyle, MotionExitStyle, type MotionFieldInput, type MotionFieldKind, type MotionFieldSpec, type MotionFit, type MotionFitOptions, type MotionFrame, type MotionFrameOptions, type MotionGhost, MotionIrisShape, type MotionIssue, type MotionIssueCode, type MotionIssueSeverity, type MotionMatch, MotionNarration, type MotionNodeEntry, type MotionOnionSkin, type MotionOverlayOptions, type MotionPath, type MotionPathOptions, MotionPreset, type MotionProperty, MotionRect, type MotionReveal, MotionScene, MotionSceneFormatError, type MotionSegment, MotionShot, type MotionShotTiming, type MotionSmoothLeg, MotionSplitOrientation, type MotionSvgOptions, type MotionTextLayout, MotionTextUnit, type MotionTimeline, type MotionValue, type PptxAnimationImport, type PptxAnimationImportOptions, activeSegment, applyMotionControlValues, applyMotionDrivers, applyMotionEdits, checkMotionScene, clipsShapeProblems, commandShapeProblems, compileMotionScene, createAnimationEditorToolProvider, createMotionScene, defaultMotionCommand, describeMotionElements, describeMotionShots, driversShapeProblems, duplicateMotionCommandEdit, fitMotionRect, fitMotionScene, fitMotionSceneEdits, formatMotionDrivers, formatMotionNarration, freshShotId, fromFlairSvgMotion, fromFlairVectorEffect, fromPptxAnimation, highlightMotionSvg, indexMotionNodes, interpolateMotionValue, isMotionCommand, isMotionShot, matchMotionNodes, motionAddTrackKey, motionBeatAt, motionBeatTime, motionBlurTimes, motionCascade, motionClipAttrs, motionClipLayout, motionCommandDuration, motionCommandFields, motionCommandRepeat, motionCommandRows, motionCommandSlots, motionCommandSummary, motionContactSheetSvg, motionCueChoices, motionCueFromKey, motionCueKey, motionCueTime, motionCycleDuration, motionDrivenNodes, motionDriverSources, motionEaseKey, motionEasingCurve, motionEasingGuides, motionEasingPath, motionFieldEdit, motionFieldLabel, motionFollowRoute, motionFrameAt, motionFrameToSvg, motionGhosts, motionIssue, motionIssueKey, motionIssueLine, motionMovingIds, motionNodeAtElement, motionNodeClips, motionNodeOffset, motionPath, motionPathLength, motionPathsSvg, motionPropertyValue, motionRestValue, motionRevealClip, motionRevealPadding, motionRulerTicks, motionSceneShapeProblems, motionSceneToJson, motionShotAt, motionShotCueTime, motionShotTimeScale, motionStageSvg, motionTextLayout, motionTextUnits, motionTrackKey, namedWithSuggestion, parseMotionDrivers, parseMotionFieldInput, parseMotionNarration, parseMotionScene, resolveMotionCamera, resolveMotionEditRefs, segmentProgress, segmentValue, shotShapeProblems, smoothMotionLegs, smoothMotionTimes, suggestName, toLottie, trackValue, withMotionLayers, withViewBox };