@cutcraft/kit 0.1.0 → 0.2.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.
@@ -1,19 +1,325 @@
1
- import { z } from "zod";
1
+ import { ZodObject, z } from "zod";
2
+ /**
3
+ * What the ingest service knows about an asset. The model never sees pixels;
4
+ * it edits against this, and the resolver turns `word:`/`shot:` references
5
+ * into seconds with it.
6
+ */
7
+ interface AssetManifest {
8
+ readonly assets: Readonly<Record<string, AssetEntry>>;
9
+ }
10
+ interface AssetEntry {
11
+ readonly id: string;
12
+ readonly kind: "video" | "audio" | "image";
13
+ /** Seconds. Images report 0 and may be held for any duration. */
14
+ readonly duration: number;
15
+ readonly fps?: number;
16
+ readonly width?: number;
17
+ readonly height?: number;
18
+ readonly audio?: {
19
+ readonly sampleRate: number;
20
+ readonly channels: number;
21
+ readonly streams: number;
22
+ };
23
+ readonly transcript?: {
24
+ readonly words: readonly TranscriptWord[];
25
+ };
26
+ readonly shots?: readonly Shot[];
27
+ readonly silences?: readonly Silence[];
28
+ readonly waveform?: WaveformSummary;
29
+ /** Where the subject (a face, a person) sits in the picture, sampled over time; several boxes may share a `t`. */
30
+ readonly subjects?: readonly SubjectBox[];
31
+ }
32
+ /** A subject's box at source second `t`, as fractions of the source picture (0..1 from its top left). */
33
+ interface SubjectBox {
34
+ readonly t: number;
35
+ readonly x: number;
36
+ readonly y: number;
37
+ readonly w: number;
38
+ readonly h: number;
39
+ }
40
+ interface TranscriptWord {
41
+ readonly i: number;
42
+ readonly text: string;
43
+ readonly start: number;
44
+ readonly end: number;
45
+ readonly speaker?: string;
46
+ /**
47
+ * The times are shared out from a longer span (an SRT or VTT cue, a segment without word times), not measured per
48
+ * word: a cut on this word lands near it, not exactly on it.
49
+ */
50
+ readonly estimated?: boolean;
51
+ }
52
+ interface Shot {
53
+ readonly i: number;
54
+ readonly start: number;
55
+ readonly end: number;
56
+ }
57
+ interface Silence {
58
+ readonly i: number;
59
+ readonly start: number;
60
+ readonly end: number;
61
+ }
62
+ interface WaveformSummary {
63
+ readonly binSeconds: number;
64
+ readonly peaks: readonly number[];
65
+ readonly rms: readonly number[];
66
+ }
67
+ declare const EMPTY_MANIFEST: AssetManifest;
68
+ declare function assetIdOf(ref: string): string;
69
+ declare function lookupAsset(manifest: AssetManifest, ref: string): AssetEntry | null;
70
+ interface ShaderDefinition {
71
+ readonly kind: "effect" | "transition";
72
+ readonly name: string;
73
+ /** The params `<Effect params>` or `<Transition params>` takes, validated and given defaults by this schema. */
74
+ readonly params: ZodObject;
75
+ /**
76
+ * GLSL ES 3.00 that defines `vec4 effect(vec2 uv)` (an effect) or `vec4 transition(vec2 uv)` (a transition). It may
77
+ * read `image` (an effect's picture) or `from` and `to` (a transition's two pictures) as `sampler2D`, `resolution`
78
+ * (vec2, pixels), `time` (seconds into the element), `progress` (0..1 through a transition), and each param by its
79
+ * name: a number as a float, a boolean as a bool, an array of 2 to 4 numbers as a vec, a colour string as a vec3.
80
+ */
81
+ readonly shader: string;
82
+ }
83
+ /** The shaders a module loaded by `loadModule` declared, stored on its exports under this key. */
84
+ declare const MODULE_SHADERS: unique symbol;
85
+ interface DefineOptions {
86
+ readonly name: string;
87
+ readonly params?: ZodObject;
88
+ readonly shader: string;
89
+ }
90
+ /**
91
+ * Declares an effect drawn by a GLSL function, and returns its name for `<Effect type>`. Call it at the top of the file.
92
+ *
93
+ * const glitch = defineEffect({
94
+ * name: "glitch",
95
+ * params: z.object({ amount: z.number().min(0).max(1).default(0.3) }),
96
+ * shader: `vec4 effect(vec2 uv) {
97
+ * float shift = amount * 0.02 * sin(time * 40.0 + uv.y * 80.0);
98
+ * return vec4(texture(image, uv + vec2(shift, 0)).r, texture(image, uv).g, texture(image, uv - vec2(shift, 0)).b,
99
+ * texture(image, uv).a);
100
+ * }`,
101
+ * });
102
+ * <Clip id="city" src="asset:city"><Effect id="g" type={glitch} params={{ amount: 0.5 }} /></Clip>
103
+ */
104
+ declare function defineEffect(options: DefineOptions): string;
105
+ /**
106
+ * Declares a transition drawn by a GLSL function of the two pictures, and returns its name for `<Transition type>`.
107
+ *
108
+ * const sweep = defineTransition({
109
+ * name: "sweep",
110
+ * shader: `vec4 transition(vec2 uv) { return uv.x < progress ? texture(to, uv) : texture(from, uv); }`,
111
+ * });
112
+ */
113
+ declare function defineTransition(options: DefineOptions): string;
114
+ /** Runs `load` and returns the shaders declared while it ran: how `loadModule` keeps each file's apart. */
115
+ declare function collectShaders(load: () => void): ShaderDefinition[];
116
+ /** The shaders a module declared: those `loadModule` recorded for it, or else every one declared outside a load. */
117
+ declare function shadersOf(mod: object): readonly ShaderDefinition[];
118
+ /** The shader a file declares under this name for an `<Effect>` or `<Transition>`, if any. */
119
+ declare function shaderFor(shaders: readonly ShaderDefinition[], kind: ShaderDefinition["kind"], type: unknown): ShaderDefinition | undefined;
120
+ /** Whether a file draws anything with a shader it declares: what only a renderer with WebGL draws. */
121
+ declare function usesShaders(state: {
122
+ readonly shaders: readonly ShaderDefinition[];
123
+ readonly items: ReadonlyMap<string, {
124
+ readonly kind: string;
125
+ readonly props: Readonly<Record<string, unknown>>;
126
+ }>;
127
+ }): boolean;
128
+ /**
129
+ * The font families the player ships: the preview and the export load them
130
+ * from `@cutcraft/player/fonts.css`. All are under the SIL
131
+ * Open Font License, from the `@fontsource` packages named here. Each comes in
132
+ * regular and bold, and italic where the family has one.
133
+ */
134
+ interface BundledFont {
135
+ readonly family: string;
136
+ /** The `@fontsource` package, and the file prefix inside its `files/` directory. */
137
+ readonly id: string;
138
+ readonly italic: boolean;
139
+ }
140
+ declare const BUNDLED_FONTS: readonly BundledFont[];
141
+ declare const BUNDLED_FONT_WEIGHTS: readonly [400, 700];
142
+ declare function isBundledFont(family: string): boolean;
143
+ type FontStyle = "normal" | "italic";
144
+ /** Where a declared face's file comes from. */
145
+ type FontSource =
146
+ /** A file found the way an asset is: `<id>.ttf` (`.otf`, `.woff`, `.woff2`) in the media folder, or the player's `media`. */
147
+ {
148
+ readonly kind: "asset";
149
+ readonly id: string;
150
+ } |
151
+ /** Google Fonts: the export downloads it once into a local cache; the player loads it from Google. */
152
+ {
153
+ readonly kind: "google";
154
+ };
155
+ /** One face a file declares with `font()` or `googleFont()`. */
156
+ interface DeclaredFont {
157
+ readonly family: string;
158
+ readonly weight: number;
159
+ readonly style: FontStyle;
160
+ readonly source: FontSource;
161
+ }
162
+ /** The faces a module loaded by `loadModule` declared, stored on its exports under this key. */
163
+ declare const MODULE_FONTS: unique symbol;
164
+ /**
165
+ * Declares a face from a font file and returns its family, to pass as a `font` prop, a theme font or a CSS
166
+ * `fontFamily`. Call it at the top of the file with literal arguments, as the editor and lint read them from the source.
167
+ *
168
+ * const brand = font({ family: "Brand Sans", src: "asset:brand", weight: 700 });
169
+ * <Title id="hello" font={brand}>Hello</Title>
170
+ *
171
+ * `src: "asset:brand"` finds `brand.ttf` (or `.otf`, `.woff`, `.woff2`) where the export finds media, and asks the
172
+ * player's `media` for `brand`.
173
+ */
174
+ declare function font(options: {
175
+ readonly family: string;
176
+ readonly src: string;
177
+ readonly weight?: number;
178
+ readonly style?: FontStyle;
179
+ }): string;
180
+ /**
181
+ * Declares a Google Fonts family, in each weight and style given (default 400, normal), and returns the family. The
182
+ * export downloads the files once into `~/.cache/cutcraft/fonts` (`CUTCRAFT_FONT_CACHE` moves it) and reads them from
183
+ * there; the player loads them from Google.
184
+ *
185
+ * const titan = googleFont("Titan One");
186
+ * const inter = googleFont("Inter Tight", { weights: [400, 700], styles: ["normal", "italic"] });
187
+ */
188
+ declare function googleFont(family: string, options?: {
189
+ readonly weights?: readonly number[];
190
+ readonly styles?: readonly FontStyle[];
191
+ }): string;
192
+ /** Runs `load` and returns the faces declared while it ran: how `loadModule` keeps each file's faces apart. */
193
+ declare function collectFonts(load: () => void): DeclaredFont[];
194
+ /** The faces a module declared: those `loadModule` recorded for it, or else every face declared outside a load. */
195
+ declare function fontsOf(mod: object): readonly DeclaredFont[];
196
+ type ResolveErrorCode = "DANGLING_ANCHOR" |
197
+ /** `at` names a moment the anchor does not play: trimmed out, or the anchor is not footage. */
198
+ "INVALID_ANCHOR" |
199
+ /** `at` on an anchor the first version cannot map: reversed, or with speed keys or freezes. */
200
+ "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";
201
+ interface ResolveError {
202
+ readonly code: ResolveErrorCode;
203
+ readonly id: string;
204
+ readonly prop?: string;
205
+ readonly message: string;
206
+ }
207
+ declare function isResolveError(value: unknown): value is ResolveError;
208
+ type Editable = "literal" | "generated" | "opaque";
209
+ /** Prop keys under this prefix address a Layer's handles rather than the Layer's own props. */
210
+ declare const INTERIOR_PREFIX = "interior.";
211
+ /**
212
+ * One vocabulary element as collected from the React element tree, before
213
+ * schema parsing and before placement. `props` are the raw JSX props minus
214
+ * `children`.
215
+ */
216
+ interface CollectedNode {
217
+ readonly id: string;
218
+ readonly kind: string;
219
+ readonly props: Readonly<Record<string, unknown>>;
220
+ readonly children: readonly CollectedNode[];
221
+ /** Text content for elements whose children are text (Title). */
222
+ readonly text?: string;
223
+ readonly parent: string | null;
224
+ readonly editable: Editable;
225
+ /** Props whose source value is an expression the editor cannot write (known only when a SourceIndex was supplied). */
226
+ readonly lockedProps: readonly string[];
227
+ /** Prop → `schema` key for props that read the file's props; a write to one rewrites `defaults`. */
228
+ readonly boundProps: Readonly<Record<string, string>>;
229
+ /** For helper output: which helper produced the node, under which parent, and the helper's nth use in the file. */
230
+ readonly origin?: {
231
+ readonly helper: string;
232
+ readonly callerId: string | null;
233
+ readonly callIndex: number;
234
+ };
235
+ /** A Layer's handles: the one component inside it and its props. The component's body stays opaque. */
236
+ readonly interior?: LayerInterior;
237
+ }
238
+ interface LayerInterior {
239
+ readonly component: string;
240
+ readonly props: Readonly<Record<string, unknown>>;
241
+ }
242
+ interface CollectedTree {
243
+ readonly root: CollectedNode;
244
+ readonly byId: ReadonlyMap<string, CollectedNode>;
245
+ readonly errors: readonly ResolveError[];
246
+ /** The faces the file declares (`font()`, `googleFont()`); set by `collectModule`. */
247
+ readonly fonts?: readonly DeclaredFont[];
248
+ /** The effects and transitions the file declares (`defineEffect()`, `defineTransition()`); set by `collectModule`. */
249
+ readonly shaders?: readonly ShaderDefinition[];
250
+ }
251
+ declare function walk(node: CollectedNode, visit: (node: CollectedNode, depth: number) => void, depth?: number): void;
252
+ declare function findParentOf(tree: CollectedTree, id: string): CollectedNode | null;
253
+ type Json = null | boolean | number | string | Json[] | {
254
+ [key: string]: Json;
255
+ };
256
+ /** One change recorded by an action. Patches address elements by id, never by position in the file. */
257
+ type Patch = {
258
+ readonly op: "set";
259
+ readonly id: string;
260
+ readonly prop: string;
261
+ readonly value: Json | undefined;
262
+ } | {
263
+ readonly op: "text";
264
+ readonly id: string;
265
+ readonly text: string;
266
+ } | {
267
+ readonly op: "insert";
268
+ readonly id: string;
269
+ readonly parent: string;
270
+ readonly after: string | null;
271
+ readonly node: CollectedNode;
272
+ } | {
273
+ readonly op: "remove";
274
+ readonly id: string;
275
+ } | {
276
+ readonly op: "move";
277
+ readonly id: string;
278
+ readonly parent: string;
279
+ readonly after: string | null;
280
+ } | {
281
+ readonly op: "bake";
282
+ readonly id: string;
283
+ };
284
+ type Presence = "present" | "inserted" | "removed";
285
+ /** The reduced effect of every patch on one element. */
286
+ interface NetPatch {
287
+ readonly id: string;
288
+ presence: Presence;
289
+ readonly props: Map<string, Json | undefined>;
290
+ text?: string;
291
+ place?: {
292
+ parent: string;
293
+ after: string | null;
294
+ };
295
+ node?: CollectedNode;
296
+ bake: boolean;
297
+ }
298
+ interface PatchLog {
299
+ readonly entries: readonly Patch[];
300
+ readonly net: ReadonlyMap<string, NetPatch>;
301
+ /** Increments on every append or truncate; resolve() memoises on it. */
302
+ readonly version: number;
303
+ append(patch: Patch): void;
304
+ /** Current length, for history entries to remember what they appended. */
305
+ mark(): number;
306
+ /** Drop every entry at or after `mark` and rebuild `net`. */
307
+ truncate(mark: number): void;
308
+ clear(): void;
309
+ }
2
310
  declare const TRACK_LAYOUTS: readonly ["sequence", "free"];
3
311
  declare const TRACK_ROLES: readonly ["general", "captions", "dialogue", "music", "effects", "ambience"];
4
312
  declare const FIT_MODES: readonly ["contain", "cover", "stretch", "none"];
5
313
  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
314
  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
315
  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"];
316
+ declare const TRANSITION_TYPES: readonly ["crossfade", "dipToBlack", "dipToWhite", "wipe", "slide", "push"];
317
+ declare const VIDEO_EFFECT_TYPES: readonly ["brightness", "contrast", "saturation", "hue", "temperature", "tint", "blur", "vignette", "grain", "shadow", "grayscale", "sepia", "invert", "levels"];
318
+ declare const TEXT_ANIMATION_PRESETS: readonly ["none", "typewriter", "fade", "slide-up", "slide-down", "slide-left", "slide-right", "scale", "word-by-word"];
319
+ declare const CAPTION_ANIMATIONS: readonly ["none", "word-highlight", "word-by-word", "karaoke", "typewriter"];
13
320
  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
321
  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"];
322
+ declare const KEYFRAME_PROPERTIES: readonly ["transform.position.x", "transform.position.y", "transform.scale.x", "transform.scale.y", "transform.rotation", "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"];
17
323
  /** `effect.<effectId>.<param>` is also a valid keyframe property; see `isKeyframeProperty`. */
18
324
  declare const KEYFRAME_PROPERTY_PATTERN: RegExp;
19
325
  declare function isKeyframeProperty(value: string): boolean;
@@ -22,10 +328,7 @@ declare const TEXT_ALIGNS: readonly ["left", "center", "right", "justify"];
22
328
  declare const TEXT_VALIGNS: readonly ["top", "middle", "bottom"];
23
329
  declare const TEXT_DECORATIONS: readonly ["none", "underline", "line-through", "overline"];
24
330
  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"];
331
+ declare const MASK_TYPES: readonly ["shape", "drawn"];
29
332
  declare const SVG_COLOR_MODES: readonly ["none", "tint", "replace"];
30
333
  declare const AUTOMATION_LANES: readonly ["volume", "pan"];
31
334
  declare const TRACK_FLAGS: readonly ["locked", "hidden", "muted", "solo"];
@@ -132,64 +435,26 @@ declare const zTransitionType: z.ZodEnum<{
132
435
  dipToWhite: "dipToWhite";
133
436
  wipe: "wipe";
134
437
  slide: "slide";
135
- zoom: "zoom";
136
438
  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
439
  }>;
155
440
  declare const zVideoEffectType: z.ZodEnum<{
156
441
  hue: "hue";
157
442
  saturation: "saturation";
158
- blur: "blur";
159
443
  brightness: "brightness";
160
444
  contrast: "contrast";
161
445
  temperature: "temperature";
162
446
  tint: "tint";
163
- sharpen: "sharpen";
447
+ blur: "blur";
164
448
  vignette: "vignette";
165
449
  grain: "grain";
166
450
  shadow: "shadow";
167
- glow: "glow";
168
- "motion-blur": "motion-blur";
169
- "radial-blur": "radial-blur";
170
- "chromatic-aberration": "chromatic-aberration";
171
451
  grayscale: "grayscale";
172
452
  sepia: "sepia";
173
453
  invert: "invert";
174
454
  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
455
  }>;
188
456
  declare const zTextAnimationPreset: z.ZodEnum<{
189
457
  none: "none";
190
- blur: "blur";
191
- glitch: "glitch";
192
- flip: "flip";
193
458
  typewriter: "typewriter";
194
459
  fade: "fade";
195
460
  "slide-up": "slide-up";
@@ -197,25 +462,11 @@ declare const zTextAnimationPreset: z.ZodEnum<{
197
462
  "slide-left": "slide-left";
198
463
  "slide-right": "slide-right";
199
464
  scale: "scale";
200
- bounce: "bounce";
201
- rotate: "rotate";
202
- pop: "pop";
203
- split: "split";
204
465
  "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
466
  }>;
215
467
  declare const zCaptionAnimation: z.ZodEnum<{
216
468
  none: "none";
217
469
  typewriter: "typewriter";
218
- bounce: "bounce";
219
470
  "word-by-word": "word-by-word";
220
471
  "word-highlight": "word-highlight";
221
472
  karaoke: "karaoke";
@@ -228,10 +479,9 @@ declare const zGraphicAnimation: z.ZodEnum<{
228
479
  "slide-left": "slide-left";
229
480
  "slide-right": "slide-right";
230
481
  scale: "scale";
231
- bounce: "bounce";
232
482
  rotate: "rotate";
483
+ bounce: "bounce";
233
484
  pop: "pop";
234
- elastic: "elastic";
235
485
  draw: "draw";
236
486
  "wipe-left": "wipe-left";
237
487
  "wipe-right": "wipe-right";
@@ -239,37 +489,10 @@ declare const zGraphicAnimation: z.ZodEnum<{
239
489
  "wipe-down": "wipe-down";
240
490
  "reveal-center": "reveal-center";
241
491
  "reveal-edges": "reveal-edges";
492
+ elastic: "elastic";
242
493
  "flip-horizontal": "flip-horizontal";
243
494
  "flip-vertical": "flip-vertical";
244
495
  }>;
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
496
  declare const zShapeType: z.ZodEnum<{
274
497
  rectangle: "rectangle";
275
498
  circle: "circle";
@@ -289,206 +512,7 @@ type BlendMode = (typeof BLEND_MODES)[number];
289
512
  type Easing = (typeof EASINGS)[number];
290
513
  type TransitionType = (typeof TRANSITION_TYPES)[number];
291
514
  type VideoEffectType = (typeof VIDEO_EFFECT_TYPES)[number];
292
- type AudioEffectType = (typeof AUDIO_EFFECT_TYPES)[number];
293
515
  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
516
  /**
493
517
  * The built-in themes and motion styles a file can name. A theme is a palette,
494
518
  * fonts, a corner radius, a motion style and named presets per element kind;
@@ -624,11 +648,40 @@ interface ResolvedState {
624
648
  readonly log: PatchLog | undefined;
625
649
  /** The composition's theme, its base merged in; the default theme when the file declares none. */
626
650
  readonly theme: ResolvedTheme;
651
+ /** The faces the file declares (`font()`, `googleFont()`), which every renderer loads. */
652
+ readonly fonts: readonly DeclaredFont[];
653
+ /** The effects and transitions the file declares (`defineEffect()`, `defineTransition()`). */
654
+ readonly shaders: readonly ShaderDefinition[];
627
655
  }
628
656
  /** Absolute placements for every element, computed from the tree, the manifests and the patch log. Memoised per log on its version. */
629
657
  declare function resolve(tree: CollectedTree, manifest: AssetManifest, log?: PatchLog): ResolvedState;
630
658
  /** Whether two placements would render and edit the same; used to hand back the previous object. */
631
659
  declare function samePlacement(a: Placement, b: Placement): boolean;
660
+ type TimeRef = number | `word:${number}` | `word:${number}.end` | `shot:${number}` | `shot:${number}.end` | `silence:${number}` | `silence:${number}.end` | `marker:${string}`;
661
+ type ParsedTimeRef = {
662
+ readonly kind: "seconds";
663
+ readonly value: number;
664
+ } | {
665
+ readonly kind: "word" | "shot" | "silence";
666
+ readonly index: number;
667
+ readonly edge: "start" | "end";
668
+ } | {
669
+ readonly kind: "marker";
670
+ readonly id: string;
671
+ } | {
672
+ readonly kind: "invalid";
673
+ readonly reason: string;
674
+ };
675
+ declare function isTimeRefString(value: unknown): value is string;
676
+ declare function parseTimeRef(ref: unknown): ParsedTimeRef;
677
+ /**
678
+ * Turn a reference into seconds. Word, shot and silence references are source
679
+ * times on the asset; marker references are composition times.
680
+ */
681
+ declare function resolveTimeRef(ref: unknown, asset: AssetEntry | null, markers: ReadonlyMap<string, number>, ctx: {
682
+ readonly id: string;
683
+ readonly prop: string;
684
+ }): number | ResolveError;
632
685
  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
686
  interface ActionError {
634
687
  readonly code: ActionErrorCode;
@@ -844,31 +897,11 @@ interface ClipActions {
844
897
  id: Id;
845
898
  value: boolean;
846
899
  };
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
900
  "clip/setBlend": {
864
901
  id: Id;
865
902
  mode?: string;
866
903
  opacity?: number;
867
904
  };
868
- "clip/setEmphasis": {
869
- id: Id;
870
- value?: Json;
871
- };
872
905
  "clip/setFit": {
873
906
  id: Id;
874
907
  value?: string;
@@ -946,13 +979,6 @@ interface EffectActions {
946
979
  "effect/toggle": ChildStack<string>["toggle"];
947
980
  "effect/setOrder": ChildStack<string>["setOrder"];
948
981
  "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
982
  "colorGrade/set": {
957
983
  id: Id;
958
984
  grading?: Readonly<Record<string, Json>>;
@@ -966,7 +992,6 @@ interface KeyframeActions {
966
992
  at: number;
967
993
  value: Json;
968
994
  easing?: string;
969
- handles?: Json;
970
995
  };
971
996
  "keyframe/remove": {
972
997
  id: Id;
@@ -982,8 +1007,6 @@ interface KeyframeActions {
982
1007
  keyId: Id;
983
1008
  value?: Json;
984
1009
  easing?: string;
985
- handles?: Json;
986
- roving?: boolean;
987
1010
  };
988
1011
  "keyframe/move": {
989
1012
  id: Id;
@@ -1003,7 +1026,8 @@ interface TransitionActions {
1003
1026
  on: Id;
1004
1027
  edge: "in" | "out";
1005
1028
  };
1006
- type: TransitionType;
1029
+ /** A built-in transition, or one the file declares with `defineTransition()`. */
1030
+ type: TransitionType | (string & {});
1007
1031
  duration: number;
1008
1032
  params?: Readonly<Record<string, Json>>;
1009
1033
  };
@@ -1018,7 +1042,7 @@ interface TransitionActions {
1018
1042
  };
1019
1043
  "transition/update": {
1020
1044
  transitionId: Id;
1021
- type?: TransitionType;
1045
+ type?: TransitionType | (string & {});
1022
1046
  duration?: number;
1023
1047
  params?: Readonly<Record<string, Json>>;
1024
1048
  };
@@ -1278,4 +1302,4 @@ declare const AUTO_GROUP_TYPES: ReadonlySet<ActionType>;
1278
1302
  declare const TARGET_PARAM_KEYS: readonly ["id", "leftId", "trackId", "transitionId", "childId", "keyId", "captionId", "captionsId", "cutId", "markerId"];
1279
1303
  declare function targetIdOf(action: ActionInput): string | null;
1280
1304
  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 };
1305
+ export { FONT_KEYS as $, zTrackRole as $t, ValidationResult as A, ShaderDefinition as An, TEXT_DECORATIONS as At, Placement as B, Shot as Bn, VIDEO_EFFECT_TYPES as Bt, TransitionActions as C, MODULE_FONTS as Cn, KEYFRAME_PROPERTY_PATTERN as Ct, ActionErrorCode as D, googleFont as Dn, SVG_COLOR_MODES as Dt, ActionError as E, fontsOf as En, SHAPE_TYPES as Et, ParsedTimeRef as F, shadersOf as Fn, TRANSITION_TYPES as Ft, ResolvedTheme as G, assetIdOf as Gn, zEasing as Gt, ResolvedTrack as H, SubjectBox as Hn, isKeyframeProperty as Ht, TimeRef as I, usesShaders as In, TrackFlag as It, Themed as J, zKeyframeProperty as Jt, ThemeIssue as K, lookupAsset as Kn, zFitMode as Kt, isTimeRefString as L, AssetEntry as Ln, TrackLayout as Lt, nodeOfSpec as M, defineEffect as Mn, TRACK_FLAGS as Mt, nodeSpecOf as N, defineTransition as Nn, TRACK_LAYOUTS as Nt, NodeSpec as O, isBundledFont as On, TEXT_ALIGNS as Ot, ok as P, shaderFor as Pn, TRACK_ROLES as Pt, DEFAULT_THEME as Q, zTrackLayout as Qt, parseTimeRef as R, AssetManifest as Rn, TrackRole as Rt, TransformActions as S, FontStyle as Sn, KEYFRAME_PROPERTIES as St, targetIdOf as T, font as Tn, MASK_TYPES as Tt, resolve as U, TranscriptWord as Un, zBlendMode as Ut, ResolvedState as V, Silence as Vn, VideoEffectType as Vt, samePlacement as W, WaveformSummary as Wn, zCaptionAnimation as Wt, resolveTheme as X, zShapeType as Xt, applyTheme as Y, zMaskEasing as Yt, themeToken as Z, zTextAnimationPreset as Zt, OverlayActions as _, BUNDLED_FONTS as _n, EASINGS as _t, ActionType as a, PatchLog as an, PALETTE_KEYS as at, TARGET_PARAM_KEYS as b, DeclaredFont as bn, FitMode as bt, ClipActions as c, CollectedTree as cn, THEME_NAMES as ct, KeyframeActions as d, LayerInterior as dn, ANIMATION_UNITS as dt, zTransitionType as en, MOTIONS as et, LayerActions as f, findParentOf as fn, AUTOMATION_LANES as ft, Namespace as g, isResolveError as gn, CAPTION_POSITIONS as gt, MulticamActions as h, ResolveErrorCode as hn, CAPTION_ANIMATIONS as ht, ActionMap as i, Patch as in, MotionStyle as it, invalid as j, collectShaders as jn, TEXT_VALIGNS as jt, PlacementSpec as k, MODULE_SHADERS as kn, TEXT_ANIMATION_PRESETS as kt, CompositionActions as l, Editable as ln, ThemeDefinition as lt, MaskActions as m, ResolveError as mn, BlendMode as mt, Action as n, Json as nn, MotionAnimation as nt, AudioActions as o, Presence as on, Presets as ot, MarkerActions as p, walk as pn, BLEND_MODES as pt, ThemeOrigin as q, zGraphicAnimation as qt, ActionInput as r, NetPatch as rn, MotionName as rt, CaptionActions as s, CollectedNode as sn, THEMES as st, AUTO_GROUP_TYPES as t, zVideoEffectType as tn, MOTION_NAMES as tt, EffectActions as u, INTERIOR_PREFIX as un, ThemeName as ut, SourceActions as v, BUNDLED_FONT_WEIGHTS as vn, Easing as vt, describeAction as w, collectFonts as wn, MASK_EASINGS as wt, TrackActions as x, FontSource as xn, GRAPHIC_ANIMATIONS as xt, SpeedActions as y, BundledFont as yn, FIT_MODES as yt, resolveTimeRef as z, EMPTY_MANIFEST as zn, TransitionType as zt };