@cutcraft/kit 0.0.0-stage → 0.1.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.
- package/LICENSE +21 -0
- package/README.md +89 -2
- package/dist/index-CLhXqOpF.d.mts +1281 -0
- package/dist/index.d.mts +48103 -0
- package/dist/index.mjs +1 -0
- package/dist/source/index-public.d.mts +236 -0
- package/dist/source/index-public.mjs +1768 -0
- package/dist/src-BsBU2JLf.mjs +5101 -0
- package/package.json +60 -3
|
@@ -0,0 +1,1281 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
declare const TRACK_LAYOUTS: readonly ["sequence", "free"];
|
|
3
|
+
declare const TRACK_ROLES: readonly ["general", "captions", "dialogue", "music", "effects", "ambience"];
|
|
4
|
+
declare const FIT_MODES: readonly ["contain", "cover", "stretch", "none"];
|
|
5
|
+
declare const BLEND_MODES: readonly ["normal", "multiply", "screen", "overlay", "darken", "lighten", "color-dodge", "color-burn", "hard-light", "soft-light", "difference", "exclusion", "hue", "saturation", "color", "luminosity", "add", "linear-dodge"];
|
|
6
|
+
declare const EASINGS: readonly ["linear", "ease", "ease-in", "ease-out", "ease-in-out", "hold", "bezier", "smoothstep", "smootherstep", "snappy", "smooth", "spring", "easeInQuad", "easeOutQuad", "easeInOutQuad", "easeInCubic", "easeOutCubic", "easeInOutCubic", "easeInQuart", "easeOutQuart", "easeInOutQuart", "easeInQuint", "easeOutQuint", "easeInOutQuint", "easeInSine", "easeOutSine", "easeInOutSine", "easeInExpo", "easeOutExpo", "easeInOutExpo", "easeInCirc", "easeOutCirc", "easeInOutCirc", "easeInBack", "easeOutBack", "easeInOutBack", "easeInBackStrong", "easeOutBackStrong", "easeInOutBackStrong", "easeInElastic", "easeOutElastic", "easeInOutElastic", "easeInElasticSoft", "easeOutElasticSoft", "easeInOutElasticSoft", "easeInBounce", "easeOutBounce", "easeInOutBounce", "easeInBounceSmall", "easeOutBounceSmall", "easeInOutBounceSmall"];
|
|
7
|
+
declare const MASK_EASINGS: readonly ["linear", "ease-in", "ease-out", "ease-in-out"];
|
|
8
|
+
declare const TRANSITION_TYPES: readonly ["crossfade", "dipToBlack", "dipToWhite", "wipe", "slide", "zoom", "push", "circleReveal", "blur", "whipPan", "radialWipe", "pixelate", "glitch", "blinds", "diamondReveal", "spin", "flip", "splitReveal", "flash", "filmBurn", "mosaic", "ripple", "pageTurn", "colorSplit"];
|
|
9
|
+
declare const VIDEO_EFFECT_TYPES: readonly ["brightness", "contrast", "saturation", "hue", "temperature", "tint", "blur", "sharpen", "vignette", "grain", "shadow", "glow", "motion-blur", "radial-blur", "chromatic-aberration", "grayscale", "sepia", "invert", "levels", "hue-saturation"];
|
|
10
|
+
declare const AUDIO_EFFECT_TYPES: readonly ["gain", "pan", "eq", "compressor", "reverb", "delay", "noiseReduction", "fadeIn", "fadeOut"];
|
|
11
|
+
declare const TEXT_ANIMATION_PRESETS: readonly ["none", "typewriter", "fade", "slide-up", "slide-down", "slide-left", "slide-right", "scale", "blur", "bounce", "rotate", "pop", "flip", "split", "word-by-word", "rise", "drop", "elastic", "swing", "zoom-blur", "cascade", "wave", "shake", "rainbow", "glitch"];
|
|
12
|
+
declare const CAPTION_ANIMATIONS: readonly ["none", "word-highlight", "word-by-word", "karaoke", "bounce", "typewriter"];
|
|
13
|
+
declare const GRAPHIC_ANIMATIONS: readonly ["none", "fade", "slide-left", "slide-right", "slide-up", "slide-down", "scale", "rotate", "bounce", "pop", "draw", "wipe-left", "wipe-right", "wipe-up", "wipe-down", "reveal-center", "reveal-edges", "elastic", "flip-horizontal", "flip-vertical"];
|
|
14
|
+
declare const EMPHASIS_ANIMATIONS: readonly ["none", "pulse", "shake", "bounce", "float", "spin", "flash", "heartbeat", "swing", "wobble", "jello", "rubber-band", "tada", "vibrate", "flicker", "glow", "breathe", "wave", "tilt", "zoom-pulse", "focus-zoom", "pan-left", "pan-right", "pan-up", "pan-down", "ken-burns"];
|
|
15
|
+
declare const SHAPE_TYPES: readonly ["rectangle", "circle", "ellipse", "triangle", "arrow", "line", "polygon", "path", "star"];
|
|
16
|
+
declare const KEYFRAME_PROPERTIES: readonly ["transform.position.x", "transform.position.y", "transform.position.z", "transform.scale.x", "transform.scale.y", "transform.rotation", "transform.rotation.x", "transform.rotation.y", "transform.perspective", "transform.opacity", "transform.anchor.x", "transform.anchor.y", "transform.borderRadius", "transform.crop.x", "transform.crop.y", "transform.crop.width", "transform.crop.height", "audio.volume", "audio.pan", "colorGrade.temperature", "colorGrade.tint", "path"];
|
|
17
|
+
/** `effect.<effectId>.<param>` is also a valid keyframe property; see `isKeyframeProperty`. */
|
|
18
|
+
declare const KEYFRAME_PROPERTY_PATTERN: RegExp;
|
|
19
|
+
declare function isKeyframeProperty(value: string): boolean;
|
|
20
|
+
declare const CAPTION_POSITIONS: readonly ["top", "center", "bottom"];
|
|
21
|
+
declare const TEXT_ALIGNS: readonly ["left", "center", "right", "justify"];
|
|
22
|
+
declare const TEXT_VALIGNS: readonly ["top", "middle", "bottom"];
|
|
23
|
+
declare const TEXT_DECORATIONS: readonly ["none", "underline", "line-through", "overline"];
|
|
24
|
+
declare const ANIMATION_UNITS: readonly ["character", "word", "line"];
|
|
25
|
+
declare const MASK_TYPES: readonly ["shape", "drawn", "matte"];
|
|
26
|
+
declare const MATTE_CHANNELS: readonly ["alpha", "luminance", "bounds"];
|
|
27
|
+
declare const INTERPOLATION_QUALITIES: readonly ["low", "medium", "high"];
|
|
28
|
+
declare const STABILIZE_CROP_MODES: readonly ["auto", "none"];
|
|
29
|
+
declare const SVG_COLOR_MODES: readonly ["none", "tint", "replace"];
|
|
30
|
+
declare const AUTOMATION_LANES: readonly ["volume", "pan"];
|
|
31
|
+
declare const TRACK_FLAGS: readonly ["locked", "hidden", "muted", "solo"];
|
|
32
|
+
declare const zTrackLayout: z.ZodEnum<{
|
|
33
|
+
sequence: "sequence";
|
|
34
|
+
free: "free";
|
|
35
|
+
}>;
|
|
36
|
+
declare const zTrackRole: z.ZodEnum<{
|
|
37
|
+
general: "general";
|
|
38
|
+
captions: "captions";
|
|
39
|
+
dialogue: "dialogue";
|
|
40
|
+
music: "music";
|
|
41
|
+
effects: "effects";
|
|
42
|
+
ambience: "ambience";
|
|
43
|
+
}>;
|
|
44
|
+
declare const zFitMode: z.ZodEnum<{
|
|
45
|
+
contain: "contain";
|
|
46
|
+
cover: "cover";
|
|
47
|
+
stretch: "stretch";
|
|
48
|
+
none: "none";
|
|
49
|
+
}>;
|
|
50
|
+
declare const zBlendMode: z.ZodEnum<{
|
|
51
|
+
normal: "normal";
|
|
52
|
+
multiply: "multiply";
|
|
53
|
+
screen: "screen";
|
|
54
|
+
overlay: "overlay";
|
|
55
|
+
darken: "darken";
|
|
56
|
+
lighten: "lighten";
|
|
57
|
+
"color-dodge": "color-dodge";
|
|
58
|
+
"color-burn": "color-burn";
|
|
59
|
+
"hard-light": "hard-light";
|
|
60
|
+
"soft-light": "soft-light";
|
|
61
|
+
difference: "difference";
|
|
62
|
+
exclusion: "exclusion";
|
|
63
|
+
hue: "hue";
|
|
64
|
+
saturation: "saturation";
|
|
65
|
+
color: "color";
|
|
66
|
+
luminosity: "luminosity";
|
|
67
|
+
add: "add";
|
|
68
|
+
"linear-dodge": "linear-dodge";
|
|
69
|
+
}>;
|
|
70
|
+
declare const zEasing: z.ZodEnum<{
|
|
71
|
+
linear: "linear";
|
|
72
|
+
ease: "ease";
|
|
73
|
+
"ease-in": "ease-in";
|
|
74
|
+
"ease-out": "ease-out";
|
|
75
|
+
"ease-in-out": "ease-in-out";
|
|
76
|
+
hold: "hold";
|
|
77
|
+
bezier: "bezier";
|
|
78
|
+
smoothstep: "smoothstep";
|
|
79
|
+
smootherstep: "smootherstep";
|
|
80
|
+
snappy: "snappy";
|
|
81
|
+
smooth: "smooth";
|
|
82
|
+
spring: "spring";
|
|
83
|
+
easeInQuad: "easeInQuad";
|
|
84
|
+
easeOutQuad: "easeOutQuad";
|
|
85
|
+
easeInOutQuad: "easeInOutQuad";
|
|
86
|
+
easeInCubic: "easeInCubic";
|
|
87
|
+
easeOutCubic: "easeOutCubic";
|
|
88
|
+
easeInOutCubic: "easeInOutCubic";
|
|
89
|
+
easeInQuart: "easeInQuart";
|
|
90
|
+
easeOutQuart: "easeOutQuart";
|
|
91
|
+
easeInOutQuart: "easeInOutQuart";
|
|
92
|
+
easeInQuint: "easeInQuint";
|
|
93
|
+
easeOutQuint: "easeOutQuint";
|
|
94
|
+
easeInOutQuint: "easeInOutQuint";
|
|
95
|
+
easeInSine: "easeInSine";
|
|
96
|
+
easeOutSine: "easeOutSine";
|
|
97
|
+
easeInOutSine: "easeInOutSine";
|
|
98
|
+
easeInExpo: "easeInExpo";
|
|
99
|
+
easeOutExpo: "easeOutExpo";
|
|
100
|
+
easeInOutExpo: "easeInOutExpo";
|
|
101
|
+
easeInCirc: "easeInCirc";
|
|
102
|
+
easeOutCirc: "easeOutCirc";
|
|
103
|
+
easeInOutCirc: "easeInOutCirc";
|
|
104
|
+
easeInBack: "easeInBack";
|
|
105
|
+
easeOutBack: "easeOutBack";
|
|
106
|
+
easeInOutBack: "easeInOutBack";
|
|
107
|
+
easeInBackStrong: "easeInBackStrong";
|
|
108
|
+
easeOutBackStrong: "easeOutBackStrong";
|
|
109
|
+
easeInOutBackStrong: "easeInOutBackStrong";
|
|
110
|
+
easeInElastic: "easeInElastic";
|
|
111
|
+
easeOutElastic: "easeOutElastic";
|
|
112
|
+
easeInOutElastic: "easeInOutElastic";
|
|
113
|
+
easeInElasticSoft: "easeInElasticSoft";
|
|
114
|
+
easeOutElasticSoft: "easeOutElasticSoft";
|
|
115
|
+
easeInOutElasticSoft: "easeInOutElasticSoft";
|
|
116
|
+
easeInBounce: "easeInBounce";
|
|
117
|
+
easeOutBounce: "easeOutBounce";
|
|
118
|
+
easeInOutBounce: "easeInOutBounce";
|
|
119
|
+
easeInBounceSmall: "easeInBounceSmall";
|
|
120
|
+
easeOutBounceSmall: "easeOutBounceSmall";
|
|
121
|
+
easeInOutBounceSmall: "easeInOutBounceSmall";
|
|
122
|
+
}>;
|
|
123
|
+
declare const zMaskEasing: z.ZodEnum<{
|
|
124
|
+
linear: "linear";
|
|
125
|
+
"ease-in": "ease-in";
|
|
126
|
+
"ease-out": "ease-out";
|
|
127
|
+
"ease-in-out": "ease-in-out";
|
|
128
|
+
}>;
|
|
129
|
+
declare const zTransitionType: z.ZodEnum<{
|
|
130
|
+
crossfade: "crossfade";
|
|
131
|
+
dipToBlack: "dipToBlack";
|
|
132
|
+
dipToWhite: "dipToWhite";
|
|
133
|
+
wipe: "wipe";
|
|
134
|
+
slide: "slide";
|
|
135
|
+
zoom: "zoom";
|
|
136
|
+
push: "push";
|
|
137
|
+
circleReveal: "circleReveal";
|
|
138
|
+
blur: "blur";
|
|
139
|
+
whipPan: "whipPan";
|
|
140
|
+
radialWipe: "radialWipe";
|
|
141
|
+
pixelate: "pixelate";
|
|
142
|
+
glitch: "glitch";
|
|
143
|
+
blinds: "blinds";
|
|
144
|
+
diamondReveal: "diamondReveal";
|
|
145
|
+
spin: "spin";
|
|
146
|
+
flip: "flip";
|
|
147
|
+
splitReveal: "splitReveal";
|
|
148
|
+
flash: "flash";
|
|
149
|
+
filmBurn: "filmBurn";
|
|
150
|
+
mosaic: "mosaic";
|
|
151
|
+
ripple: "ripple";
|
|
152
|
+
pageTurn: "pageTurn";
|
|
153
|
+
colorSplit: "colorSplit";
|
|
154
|
+
}>;
|
|
155
|
+
declare const zVideoEffectType: z.ZodEnum<{
|
|
156
|
+
hue: "hue";
|
|
157
|
+
saturation: "saturation";
|
|
158
|
+
blur: "blur";
|
|
159
|
+
brightness: "brightness";
|
|
160
|
+
contrast: "contrast";
|
|
161
|
+
temperature: "temperature";
|
|
162
|
+
tint: "tint";
|
|
163
|
+
sharpen: "sharpen";
|
|
164
|
+
vignette: "vignette";
|
|
165
|
+
grain: "grain";
|
|
166
|
+
shadow: "shadow";
|
|
167
|
+
glow: "glow";
|
|
168
|
+
"motion-blur": "motion-blur";
|
|
169
|
+
"radial-blur": "radial-blur";
|
|
170
|
+
"chromatic-aberration": "chromatic-aberration";
|
|
171
|
+
grayscale: "grayscale";
|
|
172
|
+
sepia: "sepia";
|
|
173
|
+
invert: "invert";
|
|
174
|
+
levels: "levels";
|
|
175
|
+
"hue-saturation": "hue-saturation";
|
|
176
|
+
}>;
|
|
177
|
+
declare const zAudioEffectType: z.ZodEnum<{
|
|
178
|
+
gain: "gain";
|
|
179
|
+
pan: "pan";
|
|
180
|
+
eq: "eq";
|
|
181
|
+
compressor: "compressor";
|
|
182
|
+
reverb: "reverb";
|
|
183
|
+
delay: "delay";
|
|
184
|
+
noiseReduction: "noiseReduction";
|
|
185
|
+
fadeIn: "fadeIn";
|
|
186
|
+
fadeOut: "fadeOut";
|
|
187
|
+
}>;
|
|
188
|
+
declare const zTextAnimationPreset: z.ZodEnum<{
|
|
189
|
+
none: "none";
|
|
190
|
+
blur: "blur";
|
|
191
|
+
glitch: "glitch";
|
|
192
|
+
flip: "flip";
|
|
193
|
+
typewriter: "typewriter";
|
|
194
|
+
fade: "fade";
|
|
195
|
+
"slide-up": "slide-up";
|
|
196
|
+
"slide-down": "slide-down";
|
|
197
|
+
"slide-left": "slide-left";
|
|
198
|
+
"slide-right": "slide-right";
|
|
199
|
+
scale: "scale";
|
|
200
|
+
bounce: "bounce";
|
|
201
|
+
rotate: "rotate";
|
|
202
|
+
pop: "pop";
|
|
203
|
+
split: "split";
|
|
204
|
+
"word-by-word": "word-by-word";
|
|
205
|
+
rise: "rise";
|
|
206
|
+
drop: "drop";
|
|
207
|
+
elastic: "elastic";
|
|
208
|
+
swing: "swing";
|
|
209
|
+
"zoom-blur": "zoom-blur";
|
|
210
|
+
cascade: "cascade";
|
|
211
|
+
wave: "wave";
|
|
212
|
+
shake: "shake";
|
|
213
|
+
rainbow: "rainbow";
|
|
214
|
+
}>;
|
|
215
|
+
declare const zCaptionAnimation: z.ZodEnum<{
|
|
216
|
+
none: "none";
|
|
217
|
+
typewriter: "typewriter";
|
|
218
|
+
bounce: "bounce";
|
|
219
|
+
"word-by-word": "word-by-word";
|
|
220
|
+
"word-highlight": "word-highlight";
|
|
221
|
+
karaoke: "karaoke";
|
|
222
|
+
}>;
|
|
223
|
+
declare const zGraphicAnimation: z.ZodEnum<{
|
|
224
|
+
none: "none";
|
|
225
|
+
fade: "fade";
|
|
226
|
+
"slide-up": "slide-up";
|
|
227
|
+
"slide-down": "slide-down";
|
|
228
|
+
"slide-left": "slide-left";
|
|
229
|
+
"slide-right": "slide-right";
|
|
230
|
+
scale: "scale";
|
|
231
|
+
bounce: "bounce";
|
|
232
|
+
rotate: "rotate";
|
|
233
|
+
pop: "pop";
|
|
234
|
+
elastic: "elastic";
|
|
235
|
+
draw: "draw";
|
|
236
|
+
"wipe-left": "wipe-left";
|
|
237
|
+
"wipe-right": "wipe-right";
|
|
238
|
+
"wipe-up": "wipe-up";
|
|
239
|
+
"wipe-down": "wipe-down";
|
|
240
|
+
"reveal-center": "reveal-center";
|
|
241
|
+
"reveal-edges": "reveal-edges";
|
|
242
|
+
"flip-horizontal": "flip-horizontal";
|
|
243
|
+
"flip-vertical": "flip-vertical";
|
|
244
|
+
}>;
|
|
245
|
+
declare const zEmphasisAnimation: z.ZodEnum<{
|
|
246
|
+
none: "none";
|
|
247
|
+
spin: "spin";
|
|
248
|
+
flash: "flash";
|
|
249
|
+
glow: "glow";
|
|
250
|
+
bounce: "bounce";
|
|
251
|
+
swing: "swing";
|
|
252
|
+
wave: "wave";
|
|
253
|
+
shake: "shake";
|
|
254
|
+
pulse: "pulse";
|
|
255
|
+
float: "float";
|
|
256
|
+
heartbeat: "heartbeat";
|
|
257
|
+
wobble: "wobble";
|
|
258
|
+
jello: "jello";
|
|
259
|
+
"rubber-band": "rubber-band";
|
|
260
|
+
tada: "tada";
|
|
261
|
+
vibrate: "vibrate";
|
|
262
|
+
flicker: "flicker";
|
|
263
|
+
breathe: "breathe";
|
|
264
|
+
tilt: "tilt";
|
|
265
|
+
"zoom-pulse": "zoom-pulse";
|
|
266
|
+
"focus-zoom": "focus-zoom";
|
|
267
|
+
"pan-left": "pan-left";
|
|
268
|
+
"pan-right": "pan-right";
|
|
269
|
+
"pan-up": "pan-up";
|
|
270
|
+
"pan-down": "pan-down";
|
|
271
|
+
"ken-burns": "ken-burns";
|
|
272
|
+
}>;
|
|
273
|
+
declare const zShapeType: z.ZodEnum<{
|
|
274
|
+
rectangle: "rectangle";
|
|
275
|
+
circle: "circle";
|
|
276
|
+
ellipse: "ellipse";
|
|
277
|
+
triangle: "triangle";
|
|
278
|
+
arrow: "arrow";
|
|
279
|
+
line: "line";
|
|
280
|
+
polygon: "polygon";
|
|
281
|
+
path: "path";
|
|
282
|
+
star: "star";
|
|
283
|
+
}>;
|
|
284
|
+
declare const zKeyframeProperty: z.ZodString;
|
|
285
|
+
type TrackLayout = (typeof TRACK_LAYOUTS)[number];
|
|
286
|
+
type TrackRole = (typeof TRACK_ROLES)[number];
|
|
287
|
+
type FitMode = (typeof FIT_MODES)[number];
|
|
288
|
+
type BlendMode = (typeof BLEND_MODES)[number];
|
|
289
|
+
type Easing = (typeof EASINGS)[number];
|
|
290
|
+
type TransitionType = (typeof TRANSITION_TYPES)[number];
|
|
291
|
+
type VideoEffectType = (typeof VIDEO_EFFECT_TYPES)[number];
|
|
292
|
+
type AudioEffectType = (typeof AUDIO_EFFECT_TYPES)[number];
|
|
293
|
+
type TrackFlag = (typeof TRACK_FLAGS)[number];
|
|
294
|
+
/**
|
|
295
|
+
* What the ingest service knows about an asset. The model never sees pixels;
|
|
296
|
+
* it edits against this, and the resolver turns `word:`/`shot:` references
|
|
297
|
+
* into seconds with it.
|
|
298
|
+
*/
|
|
299
|
+
interface AssetManifest {
|
|
300
|
+
readonly assets: Readonly<Record<string, AssetEntry>>;
|
|
301
|
+
}
|
|
302
|
+
interface AssetEntry {
|
|
303
|
+
readonly id: string;
|
|
304
|
+
readonly kind: "video" | "audio" | "image";
|
|
305
|
+
/** Seconds. Images report 0 and may be held for any duration. */
|
|
306
|
+
readonly duration: number;
|
|
307
|
+
readonly fps?: number;
|
|
308
|
+
readonly width?: number;
|
|
309
|
+
readonly height?: number;
|
|
310
|
+
readonly audio?: {
|
|
311
|
+
readonly sampleRate: number;
|
|
312
|
+
readonly channels: number;
|
|
313
|
+
readonly streams: number;
|
|
314
|
+
};
|
|
315
|
+
readonly transcript?: {
|
|
316
|
+
readonly words: readonly TranscriptWord[];
|
|
317
|
+
};
|
|
318
|
+
readonly shots?: readonly Shot[];
|
|
319
|
+
readonly silences?: readonly Silence[];
|
|
320
|
+
readonly waveform?: WaveformSummary;
|
|
321
|
+
/** Where the subject (a face, a person) sits in the picture, sampled over time; several boxes may share a `t`. */
|
|
322
|
+
readonly subjects?: readonly SubjectBox[];
|
|
323
|
+
}
|
|
324
|
+
/** A subject's box at source second `t`, as fractions of the source picture (0..1 from its top left). */
|
|
325
|
+
interface SubjectBox {
|
|
326
|
+
readonly t: number;
|
|
327
|
+
readonly x: number;
|
|
328
|
+
readonly y: number;
|
|
329
|
+
readonly w: number;
|
|
330
|
+
readonly h: number;
|
|
331
|
+
}
|
|
332
|
+
interface TranscriptWord {
|
|
333
|
+
readonly i: number;
|
|
334
|
+
readonly text: string;
|
|
335
|
+
readonly start: number;
|
|
336
|
+
readonly end: number;
|
|
337
|
+
readonly speaker?: string;
|
|
338
|
+
}
|
|
339
|
+
interface Shot {
|
|
340
|
+
readonly i: number;
|
|
341
|
+
readonly start: number;
|
|
342
|
+
readonly end: number;
|
|
343
|
+
}
|
|
344
|
+
interface Silence {
|
|
345
|
+
readonly i: number;
|
|
346
|
+
readonly start: number;
|
|
347
|
+
readonly end: number;
|
|
348
|
+
}
|
|
349
|
+
interface WaveformSummary {
|
|
350
|
+
readonly binSeconds: number;
|
|
351
|
+
readonly peaks: readonly number[];
|
|
352
|
+
readonly rms: readonly number[];
|
|
353
|
+
}
|
|
354
|
+
declare const EMPTY_MANIFEST: AssetManifest;
|
|
355
|
+
declare function assetIdOf(ref: string): string;
|
|
356
|
+
declare function lookupAsset(manifest: AssetManifest, ref: string): AssetEntry | null;
|
|
357
|
+
type ResolveErrorCode = "DANGLING_ANCHOR" |
|
|
358
|
+
/** `at` names a moment the anchor does not play: trimmed out, or the anchor is not footage. */
|
|
359
|
+
"INVALID_ANCHOR" |
|
|
360
|
+
/** `at` on an anchor the first version cannot map: reversed, or with speed keys or freezes. */
|
|
361
|
+
"UNSUPPORTED_ANCHOR" | "CYCLE" | "TRIM_PAST_SOURCE" | "UNKNOWN_REF" | "NOT_ADJACENT" | "INSUFFICIENT_HANDLES" | "NO_VISUAL_PARENT" | "DUPLICATE_ID" | "MISSING_ASSET" | "START_ON_SEQUENCE" | "MISSING_START" | "AMBIGUOUS_DURATION" | "INVALID_CHILD" | "INVALID_TIME_RANGE" | "UNKNOWN_TOKEN" | "UNKNOWN_STYLE" | "SCHEMA";
|
|
362
|
+
interface ResolveError {
|
|
363
|
+
readonly code: ResolveErrorCode;
|
|
364
|
+
readonly id: string;
|
|
365
|
+
readonly prop?: string;
|
|
366
|
+
readonly message: string;
|
|
367
|
+
}
|
|
368
|
+
declare function isResolveError(value: unknown): value is ResolveError;
|
|
369
|
+
type TimeRef = number | `word:${number}` | `word:${number}.end` | `shot:${number}` | `shot:${number}.end` | `silence:${number}` | `silence:${number}.end` | `marker:${string}`;
|
|
370
|
+
type ParsedTimeRef = {
|
|
371
|
+
readonly kind: "seconds";
|
|
372
|
+
readonly value: number;
|
|
373
|
+
} | {
|
|
374
|
+
readonly kind: "word" | "shot" | "silence";
|
|
375
|
+
readonly index: number;
|
|
376
|
+
readonly edge: "start" | "end";
|
|
377
|
+
} | {
|
|
378
|
+
readonly kind: "marker";
|
|
379
|
+
readonly id: string;
|
|
380
|
+
} | {
|
|
381
|
+
readonly kind: "invalid";
|
|
382
|
+
readonly reason: string;
|
|
383
|
+
};
|
|
384
|
+
declare function isTimeRefString(value: unknown): value is string;
|
|
385
|
+
declare function parseTimeRef(ref: unknown): ParsedTimeRef;
|
|
386
|
+
/**
|
|
387
|
+
* Turn a reference into seconds. Word, shot and silence references are source
|
|
388
|
+
* times on the asset; marker references are composition times.
|
|
389
|
+
*/
|
|
390
|
+
declare function resolveTimeRef(ref: unknown, asset: AssetEntry | null, markers: ReadonlyMap<string, number>, ctx: {
|
|
391
|
+
readonly id: string;
|
|
392
|
+
readonly prop: string;
|
|
393
|
+
}): number | ResolveError;
|
|
394
|
+
type Editable = "literal" | "generated" | "opaque";
|
|
395
|
+
/** Prop keys under this prefix address a Layer's handles rather than the Layer's own props. */
|
|
396
|
+
declare const INTERIOR_PREFIX = "interior.";
|
|
397
|
+
/**
|
|
398
|
+
* One vocabulary element as collected from the React element tree, before
|
|
399
|
+
* schema parsing and before placement. `props` are the raw JSX props minus
|
|
400
|
+
* `children`.
|
|
401
|
+
*/
|
|
402
|
+
interface CollectedNode {
|
|
403
|
+
readonly id: string;
|
|
404
|
+
readonly kind: string;
|
|
405
|
+
readonly props: Readonly<Record<string, unknown>>;
|
|
406
|
+
readonly children: readonly CollectedNode[];
|
|
407
|
+
/** Text content for elements whose children are text (Title). */
|
|
408
|
+
readonly text?: string;
|
|
409
|
+
readonly parent: string | null;
|
|
410
|
+
readonly editable: Editable;
|
|
411
|
+
/** Props whose source value is an expression the editor cannot write (known only when a SourceIndex was supplied). */
|
|
412
|
+
readonly lockedProps: readonly string[];
|
|
413
|
+
/** Prop → `schema` key for props that read the file's props; a write to one rewrites `defaults`. */
|
|
414
|
+
readonly boundProps: Readonly<Record<string, string>>;
|
|
415
|
+
/** For helper output: which helper produced the node, under which parent, and the helper's nth use in the file. */
|
|
416
|
+
readonly origin?: {
|
|
417
|
+
readonly helper: string;
|
|
418
|
+
readonly callerId: string | null;
|
|
419
|
+
readonly callIndex: number;
|
|
420
|
+
};
|
|
421
|
+
/** A Layer's handles: the one component inside it and its props. The component's body stays opaque. */
|
|
422
|
+
readonly interior?: LayerInterior;
|
|
423
|
+
}
|
|
424
|
+
interface LayerInterior {
|
|
425
|
+
readonly component: string;
|
|
426
|
+
readonly props: Readonly<Record<string, unknown>>;
|
|
427
|
+
}
|
|
428
|
+
interface CollectedTree {
|
|
429
|
+
readonly root: CollectedNode;
|
|
430
|
+
readonly byId: ReadonlyMap<string, CollectedNode>;
|
|
431
|
+
readonly errors: readonly ResolveError[];
|
|
432
|
+
}
|
|
433
|
+
declare function walk(node: CollectedNode, visit: (node: CollectedNode, depth: number) => void, depth?: number): void;
|
|
434
|
+
declare function findParentOf(tree: CollectedTree, id: string): CollectedNode | null;
|
|
435
|
+
type Json = null | boolean | number | string | Json[] | {
|
|
436
|
+
[key: string]: Json;
|
|
437
|
+
};
|
|
438
|
+
/** One change recorded by an action. Patches address elements by id, never by position in the file. */
|
|
439
|
+
type Patch = {
|
|
440
|
+
readonly op: "set";
|
|
441
|
+
readonly id: string;
|
|
442
|
+
readonly prop: string;
|
|
443
|
+
readonly value: Json | undefined;
|
|
444
|
+
} | {
|
|
445
|
+
readonly op: "text";
|
|
446
|
+
readonly id: string;
|
|
447
|
+
readonly text: string;
|
|
448
|
+
} | {
|
|
449
|
+
readonly op: "insert";
|
|
450
|
+
readonly id: string;
|
|
451
|
+
readonly parent: string;
|
|
452
|
+
readonly after: string | null;
|
|
453
|
+
readonly node: CollectedNode;
|
|
454
|
+
} | {
|
|
455
|
+
readonly op: "remove";
|
|
456
|
+
readonly id: string;
|
|
457
|
+
} | {
|
|
458
|
+
readonly op: "move";
|
|
459
|
+
readonly id: string;
|
|
460
|
+
readonly parent: string;
|
|
461
|
+
readonly after: string | null;
|
|
462
|
+
} | {
|
|
463
|
+
readonly op: "bake";
|
|
464
|
+
readonly id: string;
|
|
465
|
+
};
|
|
466
|
+
type Presence = "present" | "inserted" | "removed";
|
|
467
|
+
/** The reduced effect of every patch on one element. */
|
|
468
|
+
interface NetPatch {
|
|
469
|
+
readonly id: string;
|
|
470
|
+
presence: Presence;
|
|
471
|
+
readonly props: Map<string, Json | undefined>;
|
|
472
|
+
text?: string;
|
|
473
|
+
place?: {
|
|
474
|
+
parent: string;
|
|
475
|
+
after: string | null;
|
|
476
|
+
};
|
|
477
|
+
node?: CollectedNode;
|
|
478
|
+
bake: boolean;
|
|
479
|
+
}
|
|
480
|
+
interface PatchLog {
|
|
481
|
+
readonly entries: readonly Patch[];
|
|
482
|
+
readonly net: ReadonlyMap<string, NetPatch>;
|
|
483
|
+
/** Increments on every append or truncate; resolve() memoises on it. */
|
|
484
|
+
readonly version: number;
|
|
485
|
+
append(patch: Patch): void;
|
|
486
|
+
/** Current length, for history entries to remember what they appended. */
|
|
487
|
+
mark(): number;
|
|
488
|
+
/** Drop every entry at or after `mark` and rebuild `net`. */
|
|
489
|
+
truncate(mark: number): void;
|
|
490
|
+
clear(): void;
|
|
491
|
+
}
|
|
492
|
+
/**
|
|
493
|
+
* The built-in themes and motion styles a file can name. A theme is a palette,
|
|
494
|
+
* fonts, a corner radius, a motion style and named presets per element kind;
|
|
495
|
+
* presets refer to the palette and fonts through tokens, so one set of presets
|
|
496
|
+
* serves every theme.
|
|
497
|
+
*/
|
|
498
|
+
declare const THEME_NAMES: readonly ["midnight", "paper", "neon", "pastel", "mono", "bold"];
|
|
499
|
+
type ThemeName = (typeof THEME_NAMES)[number];
|
|
500
|
+
declare const MOTION_NAMES: readonly ["none", "calm", "snappy", "bouncy", "editorial"];
|
|
501
|
+
type MotionName = (typeof MOTION_NAMES)[number];
|
|
502
|
+
/** The palette names every built-in theme fills. `onPrimary` is text drawn on a `primary` fill. */
|
|
503
|
+
declare const PALETTE_KEYS: readonly ["primary", "secondary", "accent", "background", "surface", "text", "muted", "onPrimary"];
|
|
504
|
+
declare const FONT_KEYS: readonly ["heading", "body", "mono"];
|
|
505
|
+
interface MotionAnimation {
|
|
506
|
+
readonly type: string;
|
|
507
|
+
readonly duration: number;
|
|
508
|
+
readonly easing: string;
|
|
509
|
+
}
|
|
510
|
+
/** What a motion style fills where an element says nothing: its entrance, its exit, and a transition's type and length. */
|
|
511
|
+
interface MotionStyle {
|
|
512
|
+
readonly enter?: MotionAnimation | undefined;
|
|
513
|
+
readonly exit?: MotionAnimation | undefined;
|
|
514
|
+
readonly transition?: {
|
|
515
|
+
readonly type?: string | undefined;
|
|
516
|
+
readonly duration?: number | undefined;
|
|
517
|
+
} | undefined;
|
|
518
|
+
}
|
|
519
|
+
type Presets = Readonly<Record<string, Readonly<Record<string, Readonly<Record<string, unknown>>>>>>;
|
|
520
|
+
interface ThemeDefinition {
|
|
521
|
+
readonly palette: Readonly<Record<(typeof PALETTE_KEYS)[number], string>>;
|
|
522
|
+
readonly fonts: Readonly<Record<(typeof FONT_KEYS)[number], string>>;
|
|
523
|
+
readonly radius: number;
|
|
524
|
+
readonly motion: MotionName;
|
|
525
|
+
readonly styles: Presets;
|
|
526
|
+
}
|
|
527
|
+
declare const MOTIONS: Readonly<Record<MotionName, MotionStyle>>;
|
|
528
|
+
declare const THEMES: Readonly<Record<ThemeName, ThemeDefinition>>;
|
|
529
|
+
/** The theme tokens resolve against when a file declares none. Its motion and default presets apply only when declared. */
|
|
530
|
+
declare const DEFAULT_THEME: ThemeName;
|
|
531
|
+
/** A file's theme with its base theme merged in: what tokens, presets and motion defaults resolve against. */
|
|
532
|
+
interface ResolvedTheme {
|
|
533
|
+
/** Whether the file declares a theme. Without one, tokens and named presets still resolve against the default theme; motion and `default` presets do not apply. */
|
|
534
|
+
readonly declared: boolean;
|
|
535
|
+
readonly base: string;
|
|
536
|
+
readonly palette: Readonly<Record<string, string>>;
|
|
537
|
+
readonly fonts: Readonly<Record<string, string>>;
|
|
538
|
+
readonly radius: number;
|
|
539
|
+
/** Null when the motion style fills nothing. */
|
|
540
|
+
readonly motion: MotionStyle | null;
|
|
541
|
+
readonly styles: Presets;
|
|
542
|
+
/** Every token by name, without the `$`. */
|
|
543
|
+
readonly tokens: Readonly<Record<string, string | number>>;
|
|
544
|
+
}
|
|
545
|
+
/** Where a themed prop's value came from: `$primary`, `style:h1`, `motion` or `theme`. */
|
|
546
|
+
type ThemeOrigin = string;
|
|
547
|
+
interface ThemeIssue {
|
|
548
|
+
readonly code: "UNKNOWN_TOKEN" | "UNKNOWN_STYLE";
|
|
549
|
+
readonly prop: string;
|
|
550
|
+
readonly message: string;
|
|
551
|
+
}
|
|
552
|
+
interface Themed {
|
|
553
|
+
readonly props: Record<string, unknown>;
|
|
554
|
+
/** Prop path (dot-separated) → where its value came from. Empty when nothing was themed. */
|
|
555
|
+
readonly from: Readonly<Record<string, ThemeOrigin>>;
|
|
556
|
+
readonly issues: readonly ThemeIssue[];
|
|
557
|
+
}
|
|
558
|
+
/** The theme a composition's raw `theme` prop describes. Memoised per object; an invalid theme falls back to its base (the schema reports why). */
|
|
559
|
+
declare function resolveTheme(raw: unknown): ResolvedTheme;
|
|
560
|
+
/** The value of `$name`, or undefined. */
|
|
561
|
+
declare function themeToken(theme: ResolvedTheme, name: string): string | number | undefined;
|
|
562
|
+
/**
|
|
563
|
+
* An element's raw props with its theme applied, before the schema parses them:
|
|
564
|
+
* the preset its `style` names (or the kind's `default` preset) fills the props
|
|
565
|
+
* the element leaves out, the motion style fills `enter`/`exit` (a transition's
|
|
566
|
+
* type and duration), and whole-string `$token` values become theme values. The
|
|
567
|
+
* element's own props always win. Returns the input object when nothing was themed.
|
|
568
|
+
*/
|
|
569
|
+
declare function applyTheme(kind: string, raw: Readonly<Record<string, unknown>>, theme: ResolvedTheme): Themed;
|
|
570
|
+
interface Placement {
|
|
571
|
+
readonly id: string;
|
|
572
|
+
readonly kind: string;
|
|
573
|
+
readonly track: string | null;
|
|
574
|
+
readonly parent: string | null;
|
|
575
|
+
readonly children: readonly string[];
|
|
576
|
+
readonly start: number;
|
|
577
|
+
readonly end: number;
|
|
578
|
+
readonly duration: number;
|
|
579
|
+
readonly source?: {
|
|
580
|
+
readonly in: number;
|
|
581
|
+
readonly out: number;
|
|
582
|
+
readonly speed: number;
|
|
583
|
+
readonly asset: string;
|
|
584
|
+
};
|
|
585
|
+
/** Schema-parsed props with defaults applied, after patches. Raw props when the schema rejected them. */
|
|
586
|
+
readonly props: Readonly<Record<string, unknown>>;
|
|
587
|
+
readonly editable: Editable;
|
|
588
|
+
readonly lockedProps: readonly string[];
|
|
589
|
+
/** Prop → `schema` key; editable, but the fold writes the value into `defaults` rather than the element. */
|
|
590
|
+
readonly boundProps: Readonly<Record<string, string>>;
|
|
591
|
+
readonly errors: readonly ResolveError[];
|
|
592
|
+
/** For transitions between siblings: the two clips. */
|
|
593
|
+
readonly between?: readonly [string, string];
|
|
594
|
+
/** A Layer's handles: the component inside it and its current props. */
|
|
595
|
+
readonly interior?: LayerInterior;
|
|
596
|
+
/** Props the theme supplied, by dot path: `$primary`, `style:h1`, `motion` or `theme`. Absent when none did. */
|
|
597
|
+
readonly themed?: Readonly<Record<string, ThemeOrigin>>;
|
|
598
|
+
}
|
|
599
|
+
interface ResolvedTrack {
|
|
600
|
+
readonly id: string;
|
|
601
|
+
readonly layout: TrackLayout;
|
|
602
|
+
readonly order: number;
|
|
603
|
+
readonly locked: boolean;
|
|
604
|
+
readonly hidden: boolean;
|
|
605
|
+
readonly muted: boolean;
|
|
606
|
+
readonly solo: boolean;
|
|
607
|
+
readonly role?: TrackRole;
|
|
608
|
+
readonly group?: string;
|
|
609
|
+
readonly items: readonly string[];
|
|
610
|
+
}
|
|
611
|
+
interface ResolvedState {
|
|
612
|
+
readonly composition: {
|
|
613
|
+
readonly id: string;
|
|
614
|
+
readonly fps: number;
|
|
615
|
+
readonly width: number;
|
|
616
|
+
readonly height: number;
|
|
617
|
+
readonly duration: number;
|
|
618
|
+
};
|
|
619
|
+
readonly tracks: readonly ResolvedTrack[];
|
|
620
|
+
readonly items: ReadonlyMap<string, Placement>;
|
|
621
|
+
readonly errors: readonly ResolveError[];
|
|
622
|
+
readonly tree: CollectedTree;
|
|
623
|
+
readonly manifest: AssetManifest;
|
|
624
|
+
readonly log: PatchLog | undefined;
|
|
625
|
+
/** The composition's theme, its base merged in; the default theme when the file declares none. */
|
|
626
|
+
readonly theme: ResolvedTheme;
|
|
627
|
+
}
|
|
628
|
+
/** Absolute placements for every element, computed from the tree, the manifests and the patch log. Memoised per log on its version. */
|
|
629
|
+
declare function resolve(tree: CollectedTree, manifest: AssetManifest, log?: PatchLog): ResolvedState;
|
|
630
|
+
/** Whether two placements would render and edit the same; used to hand back the previous object. */
|
|
631
|
+
declare function samePlacement(a: Placement, b: Placement): boolean;
|
|
632
|
+
type ActionErrorCode = "ELEMENT_NOT_FOUND" | "TRACK_LOCKED" | "LOCKED_PROP" | "OPAQUE_TARGET" | "INVALID_PARAMS" | "INVALID_TIME_RANGE" | "OUT_OF_BOUNDS" | "NOT_ADJACENT" | "INSUFFICIENT_HANDLES" | "CYCLE" | "DUPLICATE_ID" | "UNSUPPORTED_ON_LAYOUT" | "UNKNOWN_ACTION" | "NOT_IMPLEMENTED";
|
|
633
|
+
interface ActionError {
|
|
634
|
+
readonly code: ActionErrorCode;
|
|
635
|
+
readonly message: string;
|
|
636
|
+
readonly path?: string;
|
|
637
|
+
}
|
|
638
|
+
interface ValidationResult {
|
|
639
|
+
readonly valid: boolean;
|
|
640
|
+
readonly errors: readonly ActionError[];
|
|
641
|
+
}
|
|
642
|
+
declare const ok: ValidationResult;
|
|
643
|
+
declare function invalid(...errors: ActionError[]): ValidationResult;
|
|
644
|
+
/** Where a new element goes. Sequence tracks take `after`; free tracks take `start`; overlays may anchor. */
|
|
645
|
+
type PlacementSpec = {
|
|
646
|
+
readonly after: string | null;
|
|
647
|
+
} | {
|
|
648
|
+
readonly start: number;
|
|
649
|
+
} | {
|
|
650
|
+
readonly anchor: string;
|
|
651
|
+
readonly offset?: number;
|
|
652
|
+
};
|
|
653
|
+
/** A serialisable element to insert: raw JSX props, optional text, optional children. */
|
|
654
|
+
interface NodeSpec {
|
|
655
|
+
readonly id: string;
|
|
656
|
+
readonly kind: string;
|
|
657
|
+
readonly props: Readonly<Record<string, Json | undefined>>;
|
|
658
|
+
readonly text?: string;
|
|
659
|
+
readonly children?: readonly NodeSpec[];
|
|
660
|
+
}
|
|
661
|
+
declare function nodeSpecOf(node: CollectedNode): NodeSpec;
|
|
662
|
+
declare function nodeOfSpec(spec: NodeSpec, parent: string | null): CollectedNode;
|
|
663
|
+
type Id = string;
|
|
664
|
+
type Props = Readonly<Record<string, Json | undefined>>;
|
|
665
|
+
interface CompositionActions {
|
|
666
|
+
"composition/updateSettings": {
|
|
667
|
+
fps?: number;
|
|
668
|
+
width?: number;
|
|
669
|
+
height?: number;
|
|
670
|
+
sampleRate?: number;
|
|
671
|
+
channels?: number;
|
|
672
|
+
};
|
|
673
|
+
"composition/setBackground": {
|
|
674
|
+
mode?: "color" | "blur";
|
|
675
|
+
color?: string;
|
|
676
|
+
};
|
|
677
|
+
/** The tweaks panel: rewrites the file's `defaults` literal. */
|
|
678
|
+
"composition/setProps": {
|
|
679
|
+
defaults: Readonly<Record<string, Json>>;
|
|
680
|
+
};
|
|
681
|
+
/** Swap the theme (or remove it with null); with `merge`, lay the given parts over the current theme instead. */
|
|
682
|
+
"composition/setTheme": {
|
|
683
|
+
theme: Readonly<Record<string, Json>> | null;
|
|
684
|
+
merge?: boolean;
|
|
685
|
+
};
|
|
686
|
+
/** One theme value: a palette colour, a font role or `radius`, by token name without the `$`. */
|
|
687
|
+
"theme/setToken": {
|
|
688
|
+
token: string;
|
|
689
|
+
value: string | number;
|
|
690
|
+
};
|
|
691
|
+
"batch/apply": {
|
|
692
|
+
actions: readonly ActionInput[];
|
|
693
|
+
};
|
|
694
|
+
}
|
|
695
|
+
interface TrackActions {
|
|
696
|
+
"track/add": {
|
|
697
|
+
trackId: Id;
|
|
698
|
+
position?: number;
|
|
699
|
+
layout?: TrackLayout;
|
|
700
|
+
role?: TrackRole;
|
|
701
|
+
name?: string;
|
|
702
|
+
};
|
|
703
|
+
"track/remove": {
|
|
704
|
+
trackId: Id;
|
|
705
|
+
};
|
|
706
|
+
"track/restore": {
|
|
707
|
+
trackId: Id;
|
|
708
|
+
node: NodeSpec;
|
|
709
|
+
position: number;
|
|
710
|
+
};
|
|
711
|
+
"track/duplicate": {
|
|
712
|
+
sourceTrackId: Id;
|
|
713
|
+
trackId: Id;
|
|
714
|
+
idMap: Readonly<Record<Id, Id>>;
|
|
715
|
+
position?: number;
|
|
716
|
+
};
|
|
717
|
+
"track/rename": {
|
|
718
|
+
trackId: Id;
|
|
719
|
+
name: string;
|
|
720
|
+
};
|
|
721
|
+
"track/reorder": {
|
|
722
|
+
trackId: Id;
|
|
723
|
+
position: number;
|
|
724
|
+
};
|
|
725
|
+
"track/setFlag": {
|
|
726
|
+
trackId: Id;
|
|
727
|
+
flag: TrackFlag;
|
|
728
|
+
value: boolean;
|
|
729
|
+
};
|
|
730
|
+
"track/setLayout": {
|
|
731
|
+
trackId: Id;
|
|
732
|
+
layout: TrackLayout;
|
|
733
|
+
};
|
|
734
|
+
"track/setGroup": {
|
|
735
|
+
trackId: Id;
|
|
736
|
+
group?: Id;
|
|
737
|
+
};
|
|
738
|
+
"track/consolidate": {
|
|
739
|
+
trackId: Id;
|
|
740
|
+
};
|
|
741
|
+
"track/restorePositions": {
|
|
742
|
+
trackId: Id;
|
|
743
|
+
positions: readonly {
|
|
744
|
+
id: Id;
|
|
745
|
+
start: number;
|
|
746
|
+
}[];
|
|
747
|
+
};
|
|
748
|
+
}
|
|
749
|
+
interface ClipActions {
|
|
750
|
+
"clip/add": {
|
|
751
|
+
id: Id;
|
|
752
|
+
trackId: Id;
|
|
753
|
+
src: string;
|
|
754
|
+
place: PlacementSpec;
|
|
755
|
+
in?: TimeRef;
|
|
756
|
+
out?: TimeRef;
|
|
757
|
+
duration?: number;
|
|
758
|
+
};
|
|
759
|
+
/** An <Audio> (sound only: music, a voice-over), placed like a clip; `duration: "fill"` runs to the composition's end. */
|
|
760
|
+
"audio/add": {
|
|
761
|
+
id: Id;
|
|
762
|
+
trackId: Id;
|
|
763
|
+
src: string;
|
|
764
|
+
place: PlacementSpec;
|
|
765
|
+
in?: TimeRef;
|
|
766
|
+
out?: TimeRef;
|
|
767
|
+
duration?: number | "fill";
|
|
768
|
+
};
|
|
769
|
+
"clip/remove": {
|
|
770
|
+
id: Id;
|
|
771
|
+
};
|
|
772
|
+
"clip/restore": {
|
|
773
|
+
id: Id;
|
|
774
|
+
node: NodeSpec;
|
|
775
|
+
trackId: Id;
|
|
776
|
+
place: PlacementSpec;
|
|
777
|
+
};
|
|
778
|
+
"clip/rippleDelete": {
|
|
779
|
+
id: Id;
|
|
780
|
+
};
|
|
781
|
+
"clip/rippleRestore": {
|
|
782
|
+
id: Id;
|
|
783
|
+
node: NodeSpec;
|
|
784
|
+
trackId: Id;
|
|
785
|
+
place: PlacementSpec;
|
|
786
|
+
affected: readonly {
|
|
787
|
+
id: Id;
|
|
788
|
+
start: number;
|
|
789
|
+
}[];
|
|
790
|
+
};
|
|
791
|
+
"clip/move": {
|
|
792
|
+
id: Id;
|
|
793
|
+
trackId?: Id;
|
|
794
|
+
place: PlacementSpec;
|
|
795
|
+
};
|
|
796
|
+
"clip/trim": {
|
|
797
|
+
id: Id;
|
|
798
|
+
edge: "in" | "out";
|
|
799
|
+
value: TimeRef;
|
|
800
|
+
};
|
|
801
|
+
"clip/split": {
|
|
802
|
+
id: Id;
|
|
803
|
+
at: number;
|
|
804
|
+
newId: Id;
|
|
805
|
+
};
|
|
806
|
+
"clip/merge": {
|
|
807
|
+
id: Id;
|
|
808
|
+
rightId: Id;
|
|
809
|
+
original: NodeSpec;
|
|
810
|
+
};
|
|
811
|
+
"clip/slip": {
|
|
812
|
+
id: Id;
|
|
813
|
+
delta: number;
|
|
814
|
+
};
|
|
815
|
+
"clip/slide": {
|
|
816
|
+
id: Id;
|
|
817
|
+
delta: number;
|
|
818
|
+
};
|
|
819
|
+
"clip/roll": {
|
|
820
|
+
leftId: Id;
|
|
821
|
+
rightId: Id;
|
|
822
|
+
delta: number;
|
|
823
|
+
};
|
|
824
|
+
"clip/trimToPlayhead": {
|
|
825
|
+
id: Id;
|
|
826
|
+
at: number;
|
|
827
|
+
edge: "in" | "out";
|
|
828
|
+
};
|
|
829
|
+
"clip/restoreTiming": {
|
|
830
|
+
id: Id;
|
|
831
|
+
in?: TimeRef;
|
|
832
|
+
out?: TimeRef;
|
|
833
|
+
duration?: Json;
|
|
834
|
+
start?: number;
|
|
835
|
+
};
|
|
836
|
+
"clip/closeGapBefore": {
|
|
837
|
+
id: Id;
|
|
838
|
+
};
|
|
839
|
+
"clip/setSpeed": {
|
|
840
|
+
id: Id;
|
|
841
|
+
speed: number;
|
|
842
|
+
};
|
|
843
|
+
"clip/setReverse": {
|
|
844
|
+
id: Id;
|
|
845
|
+
value: boolean;
|
|
846
|
+
};
|
|
847
|
+
"clip/setPitchCorrection": {
|
|
848
|
+
id: Id;
|
|
849
|
+
value: boolean;
|
|
850
|
+
};
|
|
851
|
+
"clip/setSmoothSlowMo": {
|
|
852
|
+
id: Id;
|
|
853
|
+
value: boolean;
|
|
854
|
+
};
|
|
855
|
+
"clip/setStabilization": {
|
|
856
|
+
id: Id;
|
|
857
|
+
value?: Json;
|
|
858
|
+
};
|
|
859
|
+
"clip/setChromaKey": {
|
|
860
|
+
id: Id;
|
|
861
|
+
value?: Json;
|
|
862
|
+
};
|
|
863
|
+
"clip/setBlend": {
|
|
864
|
+
id: Id;
|
|
865
|
+
mode?: string;
|
|
866
|
+
opacity?: number;
|
|
867
|
+
};
|
|
868
|
+
"clip/setEmphasis": {
|
|
869
|
+
id: Id;
|
|
870
|
+
value?: Json;
|
|
871
|
+
};
|
|
872
|
+
"clip/setFit": {
|
|
873
|
+
id: Id;
|
|
874
|
+
value?: string;
|
|
875
|
+
};
|
|
876
|
+
"clip/setSource": {
|
|
877
|
+
id: Id;
|
|
878
|
+
src: string;
|
|
879
|
+
};
|
|
880
|
+
"clip/setAnchor": {
|
|
881
|
+
id: Id;
|
|
882
|
+
anchor?: Id | "start";
|
|
883
|
+
offset?: number;
|
|
884
|
+
};
|
|
885
|
+
}
|
|
886
|
+
interface SpeedActions {
|
|
887
|
+
"speed/setKeys": {
|
|
888
|
+
id: Id;
|
|
889
|
+
keys: readonly NodeSpec[];
|
|
890
|
+
after?: Id | null;
|
|
891
|
+
};
|
|
892
|
+
"speed/setFreezes": {
|
|
893
|
+
id: Id;
|
|
894
|
+
freezes: readonly NodeSpec[];
|
|
895
|
+
after?: Id | null;
|
|
896
|
+
};
|
|
897
|
+
}
|
|
898
|
+
interface TransformActions {
|
|
899
|
+
"transform/update": {
|
|
900
|
+
id: Id;
|
|
901
|
+
transform: Readonly<Record<string, Json>>;
|
|
902
|
+
};
|
|
903
|
+
}
|
|
904
|
+
interface ChildStack<K extends string> {
|
|
905
|
+
add: {
|
|
906
|
+
id: Id;
|
|
907
|
+
childId: Id;
|
|
908
|
+
type: K;
|
|
909
|
+
params?: Readonly<Record<string, Json>>;
|
|
910
|
+
index?: number;
|
|
911
|
+
};
|
|
912
|
+
remove: {
|
|
913
|
+
id: Id;
|
|
914
|
+
childId: Id;
|
|
915
|
+
};
|
|
916
|
+
restore: {
|
|
917
|
+
id: Id;
|
|
918
|
+
node: NodeSpec;
|
|
919
|
+
after: Id | null;
|
|
920
|
+
};
|
|
921
|
+
update: {
|
|
922
|
+
id: Id;
|
|
923
|
+
childId: Id;
|
|
924
|
+
params: Readonly<Record<string, Json>>;
|
|
925
|
+
};
|
|
926
|
+
toggle: {
|
|
927
|
+
id: Id;
|
|
928
|
+
childId: Id;
|
|
929
|
+
enabled: boolean;
|
|
930
|
+
};
|
|
931
|
+
setOrder: {
|
|
932
|
+
id: Id;
|
|
933
|
+
childIds: readonly Id[];
|
|
934
|
+
};
|
|
935
|
+
setStack: {
|
|
936
|
+
id: Id;
|
|
937
|
+
nodes: readonly NodeSpec[];
|
|
938
|
+
after?: Id | null;
|
|
939
|
+
};
|
|
940
|
+
}
|
|
941
|
+
interface EffectActions {
|
|
942
|
+
"effect/add": ChildStack<string>["add"];
|
|
943
|
+
"effect/remove": ChildStack<string>["remove"];
|
|
944
|
+
"effect/restore": ChildStack<string>["restore"];
|
|
945
|
+
"effect/update": ChildStack<string>["update"];
|
|
946
|
+
"effect/toggle": ChildStack<string>["toggle"];
|
|
947
|
+
"effect/setOrder": ChildStack<string>["setOrder"];
|
|
948
|
+
"effect/setStack": ChildStack<string>["setStack"];
|
|
949
|
+
"audioEffect/add": ChildStack<string>["add"];
|
|
950
|
+
"audioEffect/remove": ChildStack<string>["remove"];
|
|
951
|
+
"audioEffect/restore": ChildStack<string>["restore"];
|
|
952
|
+
"audioEffect/update": ChildStack<string>["update"];
|
|
953
|
+
"audioEffect/toggle": ChildStack<string>["toggle"];
|
|
954
|
+
"audioEffect/setOrder": ChildStack<string>["setOrder"];
|
|
955
|
+
"audioEffect/setStack": ChildStack<string>["setStack"];
|
|
956
|
+
"colorGrade/set": {
|
|
957
|
+
id: Id;
|
|
958
|
+
grading?: Readonly<Record<string, Json>>;
|
|
959
|
+
};
|
|
960
|
+
}
|
|
961
|
+
interface KeyframeActions {
|
|
962
|
+
"keyframe/add": {
|
|
963
|
+
id: Id;
|
|
964
|
+
keyId: Id;
|
|
965
|
+
property: string;
|
|
966
|
+
at: number;
|
|
967
|
+
value: Json;
|
|
968
|
+
easing?: string;
|
|
969
|
+
handles?: Json;
|
|
970
|
+
};
|
|
971
|
+
"keyframe/remove": {
|
|
972
|
+
id: Id;
|
|
973
|
+
keyId: Id;
|
|
974
|
+
};
|
|
975
|
+
"keyframe/restore": {
|
|
976
|
+
id: Id;
|
|
977
|
+
node: NodeSpec;
|
|
978
|
+
after: Id | null;
|
|
979
|
+
};
|
|
980
|
+
"keyframe/update": {
|
|
981
|
+
id: Id;
|
|
982
|
+
keyId: Id;
|
|
983
|
+
value?: Json;
|
|
984
|
+
easing?: string;
|
|
985
|
+
handles?: Json;
|
|
986
|
+
roving?: boolean;
|
|
987
|
+
};
|
|
988
|
+
"keyframe/move": {
|
|
989
|
+
id: Id;
|
|
990
|
+
keyId: Id;
|
|
991
|
+
at: number;
|
|
992
|
+
};
|
|
993
|
+
"keyframe/setAll": {
|
|
994
|
+
id: Id;
|
|
995
|
+
nodes: readonly NodeSpec[];
|
|
996
|
+
after?: Id | null;
|
|
997
|
+
};
|
|
998
|
+
}
|
|
999
|
+
interface TransitionActions {
|
|
1000
|
+
"transition/add": {
|
|
1001
|
+
transitionId: Id;
|
|
1002
|
+
between: readonly [Id, Id] | {
|
|
1003
|
+
on: Id;
|
|
1004
|
+
edge: "in" | "out";
|
|
1005
|
+
};
|
|
1006
|
+
type: TransitionType;
|
|
1007
|
+
duration: number;
|
|
1008
|
+
params?: Readonly<Record<string, Json>>;
|
|
1009
|
+
};
|
|
1010
|
+
"transition/remove": {
|
|
1011
|
+
transitionId: Id;
|
|
1012
|
+
};
|
|
1013
|
+
"transition/restore": {
|
|
1014
|
+
transitionId: Id;
|
|
1015
|
+
node: NodeSpec;
|
|
1016
|
+
trackId: Id;
|
|
1017
|
+
after: Id | null;
|
|
1018
|
+
};
|
|
1019
|
+
"transition/update": {
|
|
1020
|
+
transitionId: Id;
|
|
1021
|
+
type?: TransitionType;
|
|
1022
|
+
duration?: number;
|
|
1023
|
+
params?: Readonly<Record<string, Json>>;
|
|
1024
|
+
};
|
|
1025
|
+
}
|
|
1026
|
+
interface AudioActions {
|
|
1027
|
+
"audio/setVolume": {
|
|
1028
|
+
id: Id;
|
|
1029
|
+
volume: number;
|
|
1030
|
+
};
|
|
1031
|
+
"audio/setFade": {
|
|
1032
|
+
id: Id;
|
|
1033
|
+
in?: number;
|
|
1034
|
+
out?: number;
|
|
1035
|
+
};
|
|
1036
|
+
"audio/setAutomation": {
|
|
1037
|
+
id: Id;
|
|
1038
|
+
lane: "volume" | "pan";
|
|
1039
|
+
points: readonly (readonly [number, number])[];
|
|
1040
|
+
};
|
|
1041
|
+
"audio/setDuck": {
|
|
1042
|
+
id: Id;
|
|
1043
|
+
duck?: {
|
|
1044
|
+
under: Id;
|
|
1045
|
+
to: number;
|
|
1046
|
+
attack?: number;
|
|
1047
|
+
release?: number;
|
|
1048
|
+
};
|
|
1049
|
+
};
|
|
1050
|
+
}
|
|
1051
|
+
interface Overlay {
|
|
1052
|
+
create: {
|
|
1053
|
+
id: Id;
|
|
1054
|
+
kind: string;
|
|
1055
|
+
trackId: Id;
|
|
1056
|
+
place: PlacementSpec;
|
|
1057
|
+
props: Props;
|
|
1058
|
+
text?: string;
|
|
1059
|
+
children?: readonly NodeSpec[];
|
|
1060
|
+
after?: Id | null;
|
|
1061
|
+
};
|
|
1062
|
+
update: {
|
|
1063
|
+
id: Id;
|
|
1064
|
+
props: Props;
|
|
1065
|
+
};
|
|
1066
|
+
remove: {
|
|
1067
|
+
id: Id;
|
|
1068
|
+
};
|
|
1069
|
+
}
|
|
1070
|
+
interface OverlayActions {
|
|
1071
|
+
"text/create": Overlay["create"];
|
|
1072
|
+
"text/update": Overlay["update"];
|
|
1073
|
+
"text/remove": Overlay["remove"];
|
|
1074
|
+
"text/setContent": {
|
|
1075
|
+
id: Id;
|
|
1076
|
+
text: string;
|
|
1077
|
+
};
|
|
1078
|
+
"shape/create": Overlay["create"];
|
|
1079
|
+
"shape/update": Overlay["update"];
|
|
1080
|
+
"shape/remove": Overlay["remove"];
|
|
1081
|
+
"svg/create": Overlay["create"];
|
|
1082
|
+
"svg/update": Overlay["update"];
|
|
1083
|
+
"svg/remove": Overlay["remove"];
|
|
1084
|
+
"sticker/create": Overlay["create"];
|
|
1085
|
+
"sticker/update": Overlay["update"];
|
|
1086
|
+
"sticker/remove": Overlay["remove"];
|
|
1087
|
+
"graphic/create": Overlay["create"];
|
|
1088
|
+
"graphic/update": Overlay["update"];
|
|
1089
|
+
"graphic/remove": Overlay["remove"];
|
|
1090
|
+
"adjustment/create": Overlay["create"];
|
|
1091
|
+
"adjustment/update": Overlay["update"];
|
|
1092
|
+
"adjustment/remove": Overlay["remove"];
|
|
1093
|
+
"nested/create": Overlay["create"];
|
|
1094
|
+
"nested/update": Overlay["update"];
|
|
1095
|
+
"nested/remove": Overlay["remove"];
|
|
1096
|
+
"nested/extract": {
|
|
1097
|
+
id: Id;
|
|
1098
|
+
};
|
|
1099
|
+
}
|
|
1100
|
+
interface CaptionActions {
|
|
1101
|
+
"caption/import": {
|
|
1102
|
+
captionsId: Id;
|
|
1103
|
+
src?: string;
|
|
1104
|
+
items?: readonly NodeSpec[];
|
|
1105
|
+
};
|
|
1106
|
+
"caption/add": {
|
|
1107
|
+
captionsId: Id;
|
|
1108
|
+
captionId: Id;
|
|
1109
|
+
start: TimeRef;
|
|
1110
|
+
end: TimeRef;
|
|
1111
|
+
text: string;
|
|
1112
|
+
words?: Json;
|
|
1113
|
+
};
|
|
1114
|
+
"caption/update": {
|
|
1115
|
+
captionId: Id;
|
|
1116
|
+
text?: string;
|
|
1117
|
+
start?: TimeRef;
|
|
1118
|
+
end?: TimeRef;
|
|
1119
|
+
words?: Json;
|
|
1120
|
+
};
|
|
1121
|
+
"caption/remove": {
|
|
1122
|
+
captionId: Id;
|
|
1123
|
+
};
|
|
1124
|
+
"caption/restore": {
|
|
1125
|
+
captionsId: Id;
|
|
1126
|
+
node: NodeSpec;
|
|
1127
|
+
after: Id | null;
|
|
1128
|
+
};
|
|
1129
|
+
"caption/setStyle": {
|
|
1130
|
+
captionsId: Id;
|
|
1131
|
+
style?: Readonly<Record<string, Json>>;
|
|
1132
|
+
};
|
|
1133
|
+
"caption/setAnimation": {
|
|
1134
|
+
captionsId: Id;
|
|
1135
|
+
animation: string;
|
|
1136
|
+
};
|
|
1137
|
+
"caption/setAll": {
|
|
1138
|
+
captionsId: Id;
|
|
1139
|
+
nodes: readonly NodeSpec[];
|
|
1140
|
+
after?: Id | null;
|
|
1141
|
+
};
|
|
1142
|
+
}
|
|
1143
|
+
interface MarkerActions {
|
|
1144
|
+
"marker/add": {
|
|
1145
|
+
markerId: Id;
|
|
1146
|
+
at: number;
|
|
1147
|
+
label?: string;
|
|
1148
|
+
color?: string;
|
|
1149
|
+
};
|
|
1150
|
+
"marker/update": {
|
|
1151
|
+
markerId: Id;
|
|
1152
|
+
at?: number;
|
|
1153
|
+
label?: string;
|
|
1154
|
+
color?: string;
|
|
1155
|
+
};
|
|
1156
|
+
"marker/remove": {
|
|
1157
|
+
markerId: Id;
|
|
1158
|
+
};
|
|
1159
|
+
"marker/restore": {
|
|
1160
|
+
node: NodeSpec;
|
|
1161
|
+
after: Id | null;
|
|
1162
|
+
};
|
|
1163
|
+
}
|
|
1164
|
+
interface MaskActions {
|
|
1165
|
+
"mask/create": {
|
|
1166
|
+
id: Id;
|
|
1167
|
+
parentId: Id;
|
|
1168
|
+
props: Props;
|
|
1169
|
+
};
|
|
1170
|
+
"mask/update": {
|
|
1171
|
+
id: Id;
|
|
1172
|
+
props: Props;
|
|
1173
|
+
};
|
|
1174
|
+
"mask/remove": {
|
|
1175
|
+
id: Id;
|
|
1176
|
+
};
|
|
1177
|
+
"mask/restore": {
|
|
1178
|
+
id: Id;
|
|
1179
|
+
parentId: Id;
|
|
1180
|
+
node: NodeSpec;
|
|
1181
|
+
after: Id | null;
|
|
1182
|
+
};
|
|
1183
|
+
"mask/setPath": {
|
|
1184
|
+
id: Id;
|
|
1185
|
+
path: Json;
|
|
1186
|
+
};
|
|
1187
|
+
}
|
|
1188
|
+
interface MulticamActions {
|
|
1189
|
+
"multicam/create": {
|
|
1190
|
+
id: Id;
|
|
1191
|
+
trackId: Id;
|
|
1192
|
+
place: PlacementSpec;
|
|
1193
|
+
angles: readonly NodeSpec[];
|
|
1194
|
+
sync?: number;
|
|
1195
|
+
};
|
|
1196
|
+
"multicam/remove": {
|
|
1197
|
+
id: Id;
|
|
1198
|
+
};
|
|
1199
|
+
"multicam/restore": {
|
|
1200
|
+
id: Id;
|
|
1201
|
+
node: NodeSpec;
|
|
1202
|
+
trackId: Id;
|
|
1203
|
+
place: PlacementSpec;
|
|
1204
|
+
};
|
|
1205
|
+
"multicam/setActiveAngle": {
|
|
1206
|
+
id: Id;
|
|
1207
|
+
angle: Id;
|
|
1208
|
+
};
|
|
1209
|
+
"multicam/addCut": {
|
|
1210
|
+
id: Id;
|
|
1211
|
+
cutId: Id;
|
|
1212
|
+
at: number;
|
|
1213
|
+
angle: Id;
|
|
1214
|
+
};
|
|
1215
|
+
"multicam/moveCut": {
|
|
1216
|
+
cutId: Id;
|
|
1217
|
+
at: number;
|
|
1218
|
+
};
|
|
1219
|
+
"multicam/removeCut": {
|
|
1220
|
+
cutId: Id;
|
|
1221
|
+
};
|
|
1222
|
+
"multicam/restoreCut": {
|
|
1223
|
+
id: Id;
|
|
1224
|
+
node: NodeSpec;
|
|
1225
|
+
after: Id | null;
|
|
1226
|
+
};
|
|
1227
|
+
"multicam/flatten": {
|
|
1228
|
+
id: Id;
|
|
1229
|
+
};
|
|
1230
|
+
}
|
|
1231
|
+
interface LayerActions {
|
|
1232
|
+
"layer/setTiming": {
|
|
1233
|
+
id: Id;
|
|
1234
|
+
duration?: Json;
|
|
1235
|
+
anchor?: Id | "start";
|
|
1236
|
+
offset?: number;
|
|
1237
|
+
start?: number;
|
|
1238
|
+
};
|
|
1239
|
+
"layer/setProps": {
|
|
1240
|
+
id: Id;
|
|
1241
|
+
props: Readonly<Record<string, Json | undefined>>;
|
|
1242
|
+
};
|
|
1243
|
+
"layer/setTransform": {
|
|
1244
|
+
id: Id;
|
|
1245
|
+
transform: Readonly<Record<string, Json>>;
|
|
1246
|
+
};
|
|
1247
|
+
}
|
|
1248
|
+
interface SourceActions {
|
|
1249
|
+
"source/bake": {
|
|
1250
|
+
id: Id;
|
|
1251
|
+
};
|
|
1252
|
+
"source/setProp": {
|
|
1253
|
+
id: Id;
|
|
1254
|
+
prop: string;
|
|
1255
|
+
value: Json | undefined;
|
|
1256
|
+
};
|
|
1257
|
+
/** Several literal props at once; the inverse of every prop-writing action. */
|
|
1258
|
+
"source/setProps": {
|
|
1259
|
+
id: Id;
|
|
1260
|
+
props: Readonly<Record<string, Json | undefined>>;
|
|
1261
|
+
};
|
|
1262
|
+
}
|
|
1263
|
+
type ActionMap = CompositionActions & TrackActions & ClipActions & SpeedActions & TransformActions & EffectActions & KeyframeActions & TransitionActions & AudioActions & OverlayActions & CaptionActions & MarkerActions & MaskActions & MulticamActions & LayerActions & SourceActions;
|
|
1264
|
+
type ActionType = keyof ActionMap;
|
|
1265
|
+
interface Action<T extends ActionType = ActionType> {
|
|
1266
|
+
readonly type: T;
|
|
1267
|
+
readonly actionId: string;
|
|
1268
|
+
readonly ts: number;
|
|
1269
|
+
readonly params: ActionMap[T];
|
|
1270
|
+
}
|
|
1271
|
+
type ActionInput<T extends ActionType = ActionType> = {
|
|
1272
|
+
readonly type: T;
|
|
1273
|
+
readonly params: ActionMap[T];
|
|
1274
|
+
};
|
|
1275
|
+
type Namespace = ActionType extends `${infer N}/${string}` ? N : never;
|
|
1276
|
+
/** Rapid repeats of these on the same target collapse into one undo step (OpenReel's rule). */
|
|
1277
|
+
declare const AUTO_GROUP_TYPES: ReadonlySet<ActionType>;
|
|
1278
|
+
declare const TARGET_PARAM_KEYS: readonly ["id", "leftId", "trackId", "transitionId", "childId", "keyId", "captionId", "captionsId", "cutId", "markerId"];
|
|
1279
|
+
declare function targetIdOf(action: ActionInput): string | null;
|
|
1280
|
+
declare function describeAction(action: ActionInput): string;
|
|
1281
|
+
export { MotionStyle as $, MASK_EASINGS as $t, ValidationResult as A, zTextAnimationPreset as An, Silence as At, ResolvedTheme as B, BLEND_MODES as Bt, TransitionActions as C, zEasing as Cn, ResolveError as Ct, ActionErrorCode as D, zKeyframeProperty as Dn, AssetManifest as Dt, ActionError as E, zGraphicAnimation as En, AssetEntry as Et, Placement as F, lookupAsset as Ft, resolveTheme as G, EMPHASIS_ANIMATIONS as Gt, ThemeOrigin as H, CAPTION_ANIMATIONS as Ht, ResolvedState as I, ANIMATION_UNITS as It, FONT_KEYS as J, FitMode as Jt, themeToken as K, Easing as Kt, ResolvedTrack as L, AUDIO_EFFECT_TYPES as Lt, nodeOfSpec as M, zTrackRole as Mn, TranscriptWord as Mt, nodeSpecOf as N, zTransitionType as Nn, WaveformSummary as Nt, NodeSpec as O, zMaskEasing as On, EMPTY_MANIFEST as Ot, ok as P, zVideoEffectType as Pn, assetIdOf as Pt, MotionName as Q, KEYFRAME_PROPERTY_PATTERN as Qt, resolve as R, AUTOMATION_LANES as Rt, TransformActions as S, zCaptionAnimation as Sn, resolveTimeRef as St, targetIdOf as T, zFitMode as Tn, isResolveError as Tt, Themed as U, CAPTION_POSITIONS as Ut, ThemeIssue as V, BlendMode as Vt, applyTheme as W, EASINGS as Wt, MOTION_NAMES as X, INTERPOLATION_QUALITIES as Xt, MOTIONS as Y, GRAPHIC_ANIMATIONS as Yt, MotionAnimation as Z, KEYFRAME_PROPERTIES as Zt, OverlayActions as _, VIDEO_EFFECT_TYPES as _n, walk as _t, ActionType as a, TEXT_ALIGNS as an, ThemeName as at, TARGET_PARAM_KEYS as b, zAudioEffectType as bn, isTimeRefString as bt, ClipActions as c, TEXT_VALIGNS as cn, Patch as ct, KeyframeActions as d, TRACK_ROLES as dn, CollectedNode as dt, MASK_TYPES as en, PALETTE_KEYS as et, LayerActions as f, TRANSITION_TYPES as fn, CollectedTree as ft, Namespace as g, TransitionType as gn, findParentOf as gt, MulticamActions as h, TrackRole as hn, LayerInterior as ht, ActionMap as i, SVG_COLOR_MODES as in, ThemeDefinition as it, invalid as j, zTrackLayout as jn, SubjectBox as jt, PlacementSpec as k, zShapeType as kn, Shot as kt, CompositionActions as l, TRACK_FLAGS as ln, PatchLog as lt, MaskActions as m, TrackLayout as mn, INTERIOR_PREFIX as mt, Action as n, SHAPE_TYPES as nn, THEMES as nt, AudioActions as o, TEXT_ANIMATION_PRESETS as on, Json as ot, MarkerActions as p, TrackFlag as pn, Editable as pt, DEFAULT_THEME as q, FIT_MODES as qt, ActionInput as r, STABILIZE_CROP_MODES as rn, THEME_NAMES as rt, CaptionActions as s, TEXT_DECORATIONS as sn, NetPatch as st, AUTO_GROUP_TYPES as t, MATTE_CHANNELS as tn, Presets as tt, EffectActions as u, TRACK_LAYOUTS as un, Presence as ut, SourceActions as v, VideoEffectType as vn, ParsedTimeRef as vt, describeAction as w, zEmphasisAnimation as wn, ResolveErrorCode as wt, TrackActions as x, zBlendMode as xn, parseTimeRef as xt, SpeedActions as y, isKeyframeProperty as yn, TimeRef as yt, samePlacement as z, AudioEffectType as zt };
|