@vosjs/studio-core 0.18.0 → 0.19.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/dist/index.d.ts CHANGED
@@ -1022,7 +1022,7 @@ interface EndCard {
1022
1022
  * The first slice ships `kind: 'text'`; image/video kinds are the next slice and extend this
1023
1023
  * union without changing the anchoring or transform model.
1024
1024
  */
1025
- type OverlayKind = 'text' | 'image' | 'video';
1025
+ type OverlayKind = 'text' | 'image' | 'video' | 'html';
1026
1026
  /** Named house text styles — resolved to concrete font/size/color at lowering. */
1027
1027
  type TextOverlayPreset = 'title' | 'caption' | 'label';
1028
1028
  /** Enter/exit transition presets — pure f(t), evaluated in ON_FRAME. */
@@ -1291,7 +1291,82 @@ interface MediaOverlayClip extends OverlayClipBase {
1291
1291
  /** Video only: loop while the clip is active. Absent = hold the last frame. */
1292
1292
  loop?: boolean;
1293
1293
  }
1294
- type OverlayClip = TextOverlayClip | MediaOverlayClip;
1294
+ /**
1295
+ * A face an HTML layer sets type in that the CATALOG does not host, named by
1296
+ * URL. A catalog family needs no entry here: the lowering finds it from the
1297
+ * family the CSS names (`htmlLayerFaces`). The bytes are never stored: an SVG
1298
+ * loaded through `<img>` may fetch nothing, so the page fetches the face by
1299
+ * ordinary `fetch` at setup and inlines it into the picture.
1300
+ */
1301
+ interface HtmlOverlayFont {
1302
+ family: string;
1303
+ url: string;
1304
+ weight?: number;
1305
+ style?: 'normal' | 'italic';
1306
+ }
1307
+ /**
1308
+ * A layer authored as DOM: markup and CSS, laid out and painted by the
1309
+ * browser itself, composited over the footage like any other picture.
1310
+ *
1311
+ * WHY IT IS SOURCE AND NOT A PICTURE. A product video points at a piece of
1312
+ * UI, and the camera is the only pointing device a recording has: a zoom
1313
+ * magnifies recorded pixels, so the thing the video is about becomes the
1314
+ * blurriest thing on screen. A layer rasterized FROM SOURCE at the size each
1315
+ * frame asks for has no such ceiling.
1316
+ *
1317
+ * WHY THE SOURCE CANNOT BE BAKED INTO A KEY. An SVG carrying a
1318
+ * `<foreignObject>` is origin-clean ONLY as a `data:` URI (served from a URL
1319
+ * it taints the canvas even same-origin, and a tainted frame cannot be
1320
+ * uploaded as a WebGL texture, so every layer disappears), and a `data:` URI
1321
+ * in the document costs tens of kilobytes per face per layer. Keeping the
1322
+ * SOURCE here and building the picture in the page is small in the
1323
+ * document, inline at draw time, and vector at any export size.
1324
+ *
1325
+ * It draws its OWN chrome: shadow, radius, border and any bar are the CSS's,
1326
+ * so the compositor adds none (`shadow`, `radius`, `border`, `frame` are
1327
+ * refused by the lint). It rides every other layer gesture unchanged: the
1328
+ * timing, the fractional transform, `anim`, `motion`, z-order.
1329
+ */
1330
+ interface HtmlOverlayClip extends OverlayClipBase {
1331
+ kind: 'html';
1332
+ /** The markup. Well-formed XML: `foreignObject` is XML, not HTML. */
1333
+ html: string;
1334
+ /** The CSS. Scoped by the layer's own wrapper, so plain selectors are fine. */
1335
+ css?: string;
1336
+ /** The design box the markup is laid out in, in 1080p design px. */
1337
+ box: {
1338
+ width: number;
1339
+ height: number;
1340
+ };
1341
+ /**
1342
+ * Design px of room around the box for what paints OUTSIDE it: a shadow,
1343
+ * a glow, a blur. The SVG viewport clips hard, so without room a shadow is
1344
+ * sliced square at the edge. Absent = derived from the CSS at lowering
1345
+ * (`htmlLayerBleedFor`); stated, it wins.
1346
+ */
1347
+ bleed?: number;
1348
+ /** Faces the CSS names that the catalog does not host, by URL. */
1349
+ fonts?: HtmlOverlayFont[];
1350
+ /**
1351
+ * Base width as a fraction of the FRAME width. Absent = the design size,
1352
+ * the picture box (the design box plus its bleed) over 1920, so a
1353
+ * component designed at 452 px lands at 452 px in a 1080p frame.
1354
+ */
1355
+ width?: number;
1356
+ /** Opacity 0..1. Absent = 1. */
1357
+ opacity?: number;
1358
+ }
1359
+ type OverlayClip = TextOverlayClip | MediaOverlayClip | HtmlOverlayClip;
1360
+ /**
1361
+ * Does this layer's picture come from a KEY? True for an asset, a take-dir
1362
+ * file or a document media; false for words and for an HTML layer, which
1363
+ * carry their own content.
1364
+ *
1365
+ * A predicate rather than `kind !== 'text'`, because that test silently
1366
+ * became wrong the moment a second contentful kind existed, and the way it
1367
+ * goes wrong is that a re-host tries to re-host something that has no key.
1368
+ */
1369
+ declare function isKeyedOverlay(c: OverlayClip): c is MediaOverlayClip;
1295
1370
  /**
1296
1371
  * A layer's own card. The bar is ALLOWED on any card and opens off; its
1297
1372
  * address defaults to the media's recorded page when the layer shows a
@@ -3009,6 +3084,204 @@ interface StudioEntry {
3009
3084
  onFrame: string;
3010
3085
  }
3011
3086
  declare function studioEntry(data: Record<string, unknown>): StudioEntry;
3087
+ /**
3088
+ * The HTML layer's SVG document, as page JS. This is the MIRROR of
3089
+ * `htmlLayerSvg` in `../htmlLayer.ts`: SETUP is a function string and cannot
3090
+ * import, so the composer is carried twice and `htmlOverlay.test.ts` pins
3091
+ * the two byte-for-byte. Change them together.
3092
+ */
3093
+ declare const HTML_LAYER_SVG_CODE = "(src, faces) => {\n const bleed = Math.max(0, Math.round(src.bleed || 0))\n const boxW = src.box.width + bleed * 2\n const boxH = src.box.height + bleed * 2\n let fontCss = ''\n for (const f of faces || []) fontCss += \"@font-face{font-family:'\" + f.family + \"';src:url(\" + f.dataUri + \") format('woff2');font-weight:\" + f.weight + \";font-style:\" + f.style + \";font-display:block}\"\n const wrapper = '.vos-html-layer{width:' + boxW + 'px;height:' + boxH + 'px;box-sizing:border-box;margin:0;padding:' + bleed + 'px;font-family:-apple-system,system-ui,sans-serif;-webkit-font-smoothing:antialiased;text-rendering:geometricPrecision}'\n return '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"' + boxW + '\" height=\"' + boxH + '\" viewBox=\"0 0 ' + boxW + ' ' + boxH + '\">' +\n '<foreignObject x=\"0\" y=\"0\" width=\"' + boxW + '\" height=\"' + boxH + '\">' +\n '<div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"vos-html-layer\">' +\n '<style>' + fontCss + wrapper + (src.css || '') + '</style>' + src.html +\n '</div></foreignObject></svg>'\n}";
3094
+
3095
+ /** The design frame an HTML layer's `box` is measured against (1080p). */
3096
+ declare const DESIGN_FRAME_WIDTH = 1920;
3097
+ /** Past this many bytes of markup plus CSS the lint warns, and past the max it refuses. */
3098
+ declare const HTML_LAYER_WARN_BYTES = 32000;
3099
+ declare const HTML_LAYER_MAX_BYTES = 128000;
3100
+ /** A face the page inlines: a URL the builder fetches, or already bytes. */
3101
+ interface HtmlLayerFace {
3102
+ family: string;
3103
+ url: string;
3104
+ weight: number;
3105
+ style: 'normal' | 'italic';
3106
+ }
3107
+ /** What the composer takes: the source and the faces AS BYTES. */
3108
+ interface HtmlLayerSource {
3109
+ html: string;
3110
+ css?: string;
3111
+ box: {
3112
+ width: number;
3113
+ height: number;
3114
+ };
3115
+ bleed?: number;
3116
+ }
3117
+ interface HtmlLayerInlineFace {
3118
+ family: string;
3119
+ weight: number;
3120
+ style: 'normal' | 'italic';
3121
+ dataUri: string;
3122
+ }
3123
+ declare function cssFamilies(css: string | undefined): string[];
3124
+ /**
3125
+ * The weights the CSS and the markup ask for: `font-weight` numbers and
3126
+ * keywords (`bold` is 700, `normal` 400), plus 700 when the markup carries a
3127
+ * `<b>`, `<strong>` or a heading, because the browser sets those bold. 400
3128
+ * is always in the list: it is what an unweighted run sets.
3129
+ */
3130
+ declare function cssWeights(css: string | undefined, html?: string): number[];
3131
+ /**
3132
+ * The faces the page inlines for a layer: every family the CSS names that
3133
+ * the CATALOG hosts, at every weight the source asks for (snapped to the
3134
+ * steps the catalog hosts, deduped), then the clip's explicit `fonts` for a
3135
+ * face outside the catalog. Nobody types a catalog URL: the CSS names the
3136
+ * family and this finds it, the same way a text clip's `family` resolves.
3137
+ * A family the catalog does not host resolves to nothing here and falls back
3138
+ * to the wrapper's system stack in the page, which is what `vos validate`
3139
+ * warns about.
3140
+ */
3141
+ declare function htmlLayerFaces(clip: Pick<HtmlOverlayClip, 'html' | 'css' | 'fonts'>): HtmlLayerFace[];
3142
+ /** The families the CSS names that the catalog does NOT host and no explicit font covers. */
3143
+ declare function htmlLayerUnhostedFamilies(clip: Pick<HtmlOverlayClip, 'css' | 'fonts'>): string[];
3144
+ /**
3145
+ * How much room the CSS's shadows need outside the component's box, in
3146
+ * design px: the furthest any shadow reaches (offset plus blur plus spread),
3147
+ * rounded up with a margin.
3148
+ *
3149
+ * The SVG viewport clips hard. A card that fills its box exactly gets its
3150
+ * shadow sliced off at the edge, and because a shadow is usually offset
3151
+ * downward it pools in the lower corners, so the layer's rounded corners
3152
+ * come out as a grey square instead of transparency (measured: corner alpha
3153
+ * 6, 6 and 32 with no bleed, 0 everywhere with it). A rough upper bound read
3154
+ * off the declarations, not a CSS parser: over-reserving costs a few
3155
+ * transparent pixels, under-reserving is the clipped-corner bug.
3156
+ */
3157
+ declare function htmlLayerBleedFor(css: string | undefined): number;
3158
+ /** The bleed a layer renders with: the stated one, else what its CSS needs. */
3159
+ declare function htmlLayerBleed(clip: Pick<HtmlOverlayClip, 'css' | 'bleed'>): number;
3160
+ /**
3161
+ * The picture's box: the component plus its bleed on every side. This is
3162
+ * what `width` sizes and what the hit rect measures, because the bleed is
3163
+ * part of the rasterized picture (transparent, but there).
3164
+ */
3165
+ declare function htmlLayerPictureBox(clip: Pick<HtmlOverlayClip, 'box' | 'css' | 'bleed'>): {
3166
+ width: number;
3167
+ height: number;
3168
+ bleed: number;
3169
+ };
3170
+ /**
3171
+ * The layer's width as a fraction of the FRAME width (the media overlay
3172
+ * convention; ON_FRAME paints `w · W`). Absent, the DESIGN SIZE: the picture
3173
+ * box over 1920, so a component designed at 452 px lands at 452 px in a
3174
+ * 1080p frame and scales with the export. The bleed is in the picture, so it
3175
+ * is in the default too, or a shadowed component would land narrower than
3176
+ * it was designed.
3177
+ */
3178
+ declare function htmlLayerWidth(clip: Pick<HtmlOverlayClip, 'width' | 'box' | 'css' | 'bleed'>): number;
3179
+ /** The words the markup carries, for a lane label: tags stripped, entities read. */
3180
+ declare function htmlLayerText(html: string): string;
3181
+ /** The timeline item's label: the first words, else the kind. */
3182
+ declare function htmlLayerLabel(clip: Pick<HtmlOverlayClip, 'html'>): string;
3183
+ type HtmlLayerProblemCode = 'empty' | 'unclosed-void' | 'bare-ampersand' | 'unquoted-attr' | 'too-large' | 'foreign-field' | 'shadow-clipped' | 'external-resource' | 'wall-clock' | 'unhosted-family';
3184
+ interface HtmlLayerProblem {
3185
+ code: HtmlLayerProblemCode;
3186
+ /** A problem stops the layer painting; a warning is a layer that paints wrong. */
3187
+ level: 'problem' | 'warning';
3188
+ message: string;
3189
+ }
3190
+ /** Media-clip fields an HTML layer refuses: its CSS is its chrome. */
3191
+ declare const HTML_LAYER_FOREIGN_FIELDS: readonly ["key", "radius", "shadow", "border", "loop", "frame", "fx", "text", "preset"];
3192
+ /**
3193
+ * Everything wrong with a layer that can be seen in its source, in words. A
3194
+ * malformed document does not warn in the page: the `<img>` fails to decode,
3195
+ * the layer never paints, and nothing anywhere says why. Checked here so an
3196
+ * author is told instead, the same answer in the studio, in `vos validate`
3197
+ * and in a test.
3198
+ */
3199
+ declare function htmlLayerProblems(clip: Pick<HtmlOverlayClip, 'html' | 'css' | 'bleed' | 'fonts'>): HtmlLayerProblem[];
3200
+ /**
3201
+ * The real XML question, asked of a real parser: the studio hands in
3202
+ * `DOMParser`, a test hands in a stub. The CLI does not call this (Node
3203
+ * ships no parser) and relies on the heuristics above plus the page's own
3204
+ * decode report.
3205
+ */
3206
+ declare function wellFormedXml(svg: string, parseXml: (text: string) => {
3207
+ getElementsByTagName: (name: string) => ArrayLike<{
3208
+ textContent: string | null;
3209
+ }>;
3210
+ }): {
3211
+ ok: true;
3212
+ } | {
3213
+ ok: false;
3214
+ error: string;
3215
+ };
3216
+ /**
3217
+ * The SVG document for a layer: self-contained, laid out in DESIGN units
3218
+ * (the viewBox), so the browser rasterizes it at whatever size a frame asks
3219
+ * for. The wrapper fixes the box, insets the component by its bleed and
3220
+ * resets the two properties an SVG document does not inherit sensibly;
3221
+ * everything else is the author's.
3222
+ *
3223
+ * MIRRORED by `HTML_LAYER_SVG_CODE` in `lower/studioEntry.ts`. Change both.
3224
+ */
3225
+ declare function htmlLayerSvg(src: HtmlLayerSource, faces?: readonly HtmlLayerInlineFace[]): string;
3226
+ /**
3227
+ * The layer's CACHE KEY: content-addressed over everything the picture is
3228
+ * made of (markup, CSS, box, bleed, the resolved faces), so an edit to the
3229
+ * source lands on a new key and invalidates the picture cache, the build
3230
+ * guard and the overlay canvas's dirty signature at once. Moving, retiming,
3231
+ * scaling or animating the clip does not re-key it: none of those repaint.
3232
+ * The key is a handle, never a URL: nothing may fetch it.
3233
+ */
3234
+ declare function htmlLayerKey(clip: Pick<HtmlOverlayClip, 'id' | 'html' | 'css' | 'box'>, faces: readonly HtmlLayerFace[], bleed: number): string;
3235
+ /** The shape the page is handed for a layer: the source plus resolved faces. */
3236
+ interface HtmlLayerPayload {
3237
+ markup: string;
3238
+ css: string;
3239
+ box: {
3240
+ width: number;
3241
+ height: number;
3242
+ };
3243
+ bleed: number;
3244
+ faces: HtmlLayerFace[];
3245
+ }
3246
+ /** Everything the lowering emits for a layer, from the clip alone. */
3247
+ declare function htmlLayerPayload(clip: HtmlOverlayClip): {
3248
+ key: string;
3249
+ width: number;
3250
+ html: HtmlLayerPayload;
3251
+ };
3252
+
3253
+ /**
3254
+ * The house starters for an HTML layer: what one press of the studio's HTML
3255
+ * verb puts on the canvas, and what its panel's Starter select swaps in.
3256
+ * Product defaults the way the three text presets are (code, not shelf
3257
+ * data), five and not fifty: a LIBRARY of components is an official project
3258
+ * on the shelf that an agent applies as a template.
3259
+ *
3260
+ * Each is real, readable markup and CSS a person can retune, in the house
3261
+ * look (a dark card, Inter for words, JetBrains Mono for code, both hosted so
3262
+ * the faces resolve from the CSS alone), with a `box-shadow` so the derived
3263
+ * bleed is exercised. `htmlStarters.test.ts` proves every one passes the
3264
+ * gate with no problem and no warning.
3265
+ */
3266
+
3267
+ interface HtmlStarter {
3268
+ id: 'callout' | 'code' | 'terminal' | 'keys' | 'badge';
3269
+ name: string;
3270
+ html: string;
3271
+ css: string;
3272
+ box: {
3273
+ width: number;
3274
+ height: number;
3275
+ };
3276
+ }
3277
+ declare const HTML_STARTERS: readonly HtmlStarter[];
3278
+ /**
3279
+ * A starter as a clip at a moment: the studio's verb and the panel's Starter
3280
+ * select both call this, so what a press creates and what a swap replaces
3281
+ * are one shape. `bleed` is left absent (derived), `width` absent (the
3282
+ * design size), the transform centred.
3283
+ */
3284
+ declare function htmlStarterClip(starter: HtmlStarter, id: string, start: number, duration: number): HtmlOverlayClip;
3012
3285
 
3013
3286
  interface EnvelopePoint {
3014
3287
  /** output-timeline seconds. */
@@ -4026,4 +4299,4 @@ declare function rejectSpan(rejected: RejectedSpan[] | undefined, lane: Rejected
4026
4299
  anchor?: StepAnchor;
4027
4300
  }, note?: string): RejectedSpan;
4028
4301
 
4029
- export { ASPECT_RATIOS, AUDIO_PLAN_STEP, type AnchorKind, type Anim, type AnimKind, type AnimSide, type AnimStep, type AppliedTemplate, type ApplyTemplateOptions, type AspectRatioOption, type AudioClip, type AudioPlanPoint, type AudioPlanTrack, BACKGROUND_Z, BASE_FRAME_STYLE, type Backdrop, type BackgroundMedia, type BakedText3dAsset, type BakedText3dMaterial, type BrowserBarStyle, type BuildDigestInput, CAMERA_FAR, CAMERA_NEAR, CAM_CHAIN_GAP, CAM_EASE, CAM_PAN, CAM_PAN_EASE, CAM_RAMP_IN, CAM_RAMP_OUT, CAM_SIZE_MAX, CAM_SIZE_MIN, CAM_SPAN_MIN, CAPTURE_COVERAGE_MIN, CARD_EDGE_OVERDRAW, CARD_ENTER_KINDS, CARD_EXIT_KINDS, CARD_FADE_SECONDS, CARD_FOV, CARD_Z, CHANNEL_SPECS_HASH, CHANNEL_SPECS_VERIFIED, CLICK_FX_INTENSITY, CLICK_FX_PRE, CLICK_HIGHLIGHT_FADE, CLICK_PAIR_MAX, CLICK_PULSE_DUR, CLICK_RECT_MAX_FRAC, CLICK_RIPPLE_DUR, CLICK_SYNTH_RELEASE, CROP_MAX_PX, CROP_MIN_FRAC, CROP_MIN_PX, CROP_PAD, CURSOR_IDLE_EPS_FRAC, CURSOR_IDLE_FADE_IN, CURSOR_IDLE_FADE_OUT, CURSOR_IDLE_HOLD, type CamBubbleRect, type CamPoseSpan, type CamStyle, type CaptureNormalization, type CardLayout, type ClickFxStyle, type CopiedLayout, type CopyLayoutOptions, type CopyStyleOptions, type CursorEvent, type CursorFadeKey, type CursorIdleOptions, type CursorStyle, type CursorTrack, DARK_GROUND, DEFAULT_BROWSER_BAR, DEFAULT_CAM_POSE, DEFAULT_CAM_STYLE, DEFAULT_CLICK_FX, DEFAULT_CURSOR_STYLE, DEFAULT_DUCK, DEFAULT_FRAME_STYLE, DEFAULT_SPEED_PARAMS, DEFAULT_TILT_POSE, DEFAULT_ZOOM_LEVEL, DEFAULT_ZOOM_STYLE, DESTINATIONS, DIGEST_CROP_MAX, DIGEST_FULL_MAX, DIGEST_VERSION, DOC_SCHEMA_VERSION, DRAG_FIT_LEVEL, type Destination, type Digest, type DigestImageRef, type DigestPlan, type DigestTakeFacts, type DocSegment, type DuckOptions, END_CARD_FROM, END_CARD_RECEDE, END_CARD_SECONDS, ENTRANCE_SECONDS, EXPORT_RESOLUTION_OPTIONS, EXPORT_SHORT_EDGE, type EndCard, type EnvelopePoint, type ExportResolution, type ExtractClickOptions, FOLLOW_RECENTER, FOLLOW_SAFE_RATIO, FRAME_BORDER_COLOR_DEFAULT, FRAME_BORDER_DEFAULT, FRAME_BORDER_WIDTH_DEFAULT, FREEZE_DEFAULT_SECONDS, FREEZE_SECONDS_MAX, FREEZE_SECONDS_MIN, type FocusBounds, type FollowEvent, type FollowOptions, type FrameEntrance, type FrameGeometry, type FrameStyle, type FreezeExtent, type FreezeSpan, HOUSE_GRADIENT, IDLE_KINDS, type IdleKind, type IngestOptions, LAYER_CARD_SHADOW, LAYOUT_FRAME_FIELDS, LOOK_KINDS, type LayerCard, type LayoutParts, type Look, type LookBrand, type LookKind, type LookPlacement, type LowerProgramOptions, type LoweredAudioClip, type LoweredClick, type LoweredComposition, type LoweredZoomSpan, MEDIA_ENTER_KINDS, MEDIA_EXIT_KINDS, MEDIA_FRAME_KEYS, MEDIA_KEY_PREFIX, MINIMAL_BAR_THEMES, MOTION_DELTA, MOTION_EASE, type Media, type MediaFrame, type MediaFrameKey, type MediaOverlayClip, type MediaSegment, type MicRms, type MinimalBarTheme, type Moment, type MomentKind, type MomentsOptions, type MotionKey, type MotionPose, type MotionPose3D, type MusicBedInput, type NormRect, OBJECT_DEFAULT_SCALE, OVERLAY_FONT_FACES, OVERLAY_LINE_HEIGHT, OVERLAY_MEDIA_DEFAULT_RADIUS, OVERLAY_MEDIA_DEFAULT_WIDTH, OVERLAY_MIN_DURATION, OVERLAY_SCALE_MAX, OVERLAY_SIZE_MAX, OVERLAY_SIZE_MIN, OVERLAY_TRANSITION_DUR, OVERLAY_Z, type ObjectAnimation, type ObjectAsset, type ObjectClip, type ObjectPrimitiveShape, type OverlayClip, type OverlayFontFace, type OverlayKind, type OverlayPresetStyle, type OverlayRect, type OverlayTransform, type OverlayTransition, PLATE_GROUND, PLAYBACK_ACTIVITY, PRIMARY_MEDIA, PROGRAM_RETIME, type PlanOptions, type PlanTiltOptions, type PlaneSize, type ProgramAnchorDoc, type ProgramTweenEdit, type ProjectDoc, type PxRect, REJECT_OVERLAP, REST_TILT_ID, type RecordingArtifact, type RecordingMeta, type Rect, type RejectedLane, type RejectedSpan, type ResolvedOverlayBox, type ResolvedOverlayStyle, SCENE_MOTION, SCENE_QUIET, SEGMENT_ENTER_KINDS, SEGMENT_EXIT_KINDS, SPEED_RATE_MAX, SPEED_RATE_MIN, SPEED_SPAN_MIN, STAGE_CLIP_PREFIX, STILL_DEFAULT, STUDIO_ENTRY_ID, STYLE_FIELDS, type SegmentExtent, type SmoothOptions, type SmoothPoint, type SpeedParams, type SpeedSpan, type StepAnchor, type StepSpan, type StudioAudioPlan, type StudioDoc, type StudioEntry, type StyleField, TEXT3D_DEPTH_DEFAULT, TEXT3D_DEPTH_MAX, TEXT3D_DEPTH_MIN, TEXT_ENTER_KINDS, TEXT_EXIT_KINDS, TEXT_PRESETS, TILT_AUTO_DEAD_ZONE, TILT_AUTO_MIN, TILT_CHAIN_GAP, TILT_DEG_MAX, TILT_EASE, TILT_INTENSITY_MAX, TILT_PAN, TILT_PAN_EASE, TILT_RAMP_IN, TILT_RAMP_OUT, TILT_SPAN_MIN, TILT_UI_DEG_MAX, TRANSITION_SECONDS, TRANSITION_SECONDS_MAX, TRANSITION_SECONDS_MIN, TRANSITION_SPEED_MULT, type TemplateAnchor, type Text3dMaterial, type TextFxDirection, type TextFxKind, type TextFxSpec, type TextFxUnit, type TextOverlayBox, type TextOverlayClip, type TextOverlayPreset, type TextOverlayStroke, type TiltPersonality, type TiltSpan, type TiltStyleName, type TranscriptSegment, type Transition, type TransitionKind, type TransitionMove, type TransitionOut, type TransitionSpeed, WINDOW_FOCUS_MIN, ZOOM_CHAIN_GAP, ZOOM_EASE, ZOOM_LEVELS, ZOOM_LEVEL_MAX, ZOOM_LEVEL_MIN, ZOOM_PAN, ZOOM_PAN_EASE, ZOOM_RAMP_IN, ZOOM_RAMP_IN_OVERLAP, ZOOM_RAMP_OUT, ZOOM_SPAN_MIN, ZOOM_STYLES, ZOOM_STYLE_OPTIONS, type ZoomSpan, type ZoomStyleName, type ZoomStyleParams, type ZoomWindow, anchorKindOf, anchorSourceDuration, animStep, applyLook, applyTemplate, aspectRatioValue, audioLane, backdropMedia, buildDigest, camBubbleRect, camBubbleRectAt, camLane, camMoveLane, camRectFromPose, camRestPose, camTrackFromDoc, cardEnter, cardExit, cardFields, cardInset, cardPointToScreen, cardPoseTrack, clampCamFrac, clampCamSize, clampFocus, clampFreezeSeconds, clampSpeedRate, clampTiltDeg, clampZoomLevel, clipEnvelope, clipLength, clipsFrom, computeCardLayout, computeMicRms, computePeaks, copyLayout, copyStyle, cropBox, cursorIdleFade, deriveViewportCrop, destinationById, destinationsForChannel, docCardLayout, docFreezes, docMediaList, docOutputDuration, docRestTime, docStillTime, docToCropSpace, docToFullSpace, docTransitions, dropTemplate, duckCurve, effectiveSegments, endCardClips, enterKey, enterOf, entranceSeconds, envelopeAt, envelopeValueAt, exitKey, exitOf, exitSeconds, expandEndCard, expectedFrameSize, exportSizeFor, extractClicks, focusBounds, followFocusEvents, frameGeometry, freezeLane, freezeOutputExtents, hexToRgbTriplet, houseLook, idleGaps, idleKey, isLookKind, isMusicBed, isPlayback, isProgramDoc, isRecordingDoc, isRejected, isStageClip, isUnitStep, lastLayerEnd, layerMedia, layoutOf, levelForFocusFraction, lookFromBrand, lookKindForGround, lowerProgramDoc, lowerStudioDoc, lowerToComposition, mediaAtOutput, mediaDuration, mediaFrame, mediaKey, mediaRef, mediaRefId, mediaSource, micLane, migrateHostedDoc, migrateMotion, momentsFromDoc, motionTrack, musicBedClip, nextMediaId, normalizeCaptureSpace, objectMotionBase, objectMotionPoseAt, objectsLane, outputDurationOf, outputEnd, outputRangeToSource, overlapFraction, overlayFaceFor, overlayFontFaces, overlayFontString, overlayFxSpec, overlayHit, overlayLines, overlayMotionBase, overlayMotionPoseAt, overlayRect, overlaysLane, ownFreezes, pageDisplayUrl, parsePoseId, pickStyle, placeFreezes, planAutoSpeed, planAutoTilt, planAutoZoom, planForDigest, planeSizeAtDepth, platformBarKind, programDuration, projectFromArtifact, ratedSegments, recommendedExportResolution, refillAudioBeds, rejectSpan, removeSourceRange, removeSpeedInRange, resolveExportSize, resolveOverlayBox, resolveOverlayStyle, resolveText3dAsset, resolveZoomStyle, restLeanOf, restSpansThroughTransitions, sameMedia, sceneChanges, scrollRuns, segmentOutputExtents, outputLen as segmentOutputLen, segmentStarts, setSpeedInRange, slideSide, smoothCursor, spanOutputExtent, speedLane, studioAudioPlan, studioEntry, studioLayerData, tiltLane, tiltTrackFromDoc, transitionMult, transitionSeconds, videoLane, voiceKey, withBackdrop, withFreezes, withHolds, withoutRejected, wrapProgramLength, zoomCoversRect, zoomLane, zoomSpanForRange, zoomTrackFromDoc, zoomWindow };
4302
+ export { ASPECT_RATIOS, AUDIO_PLAN_STEP, type AnchorKind, type Anim, type AnimKind, type AnimSide, type AnimStep, type AppliedTemplate, type ApplyTemplateOptions, type AspectRatioOption, type AudioClip, type AudioPlanPoint, type AudioPlanTrack, BACKGROUND_Z, BASE_FRAME_STYLE, type Backdrop, type BackgroundMedia, type BakedText3dAsset, type BakedText3dMaterial, type BrowserBarStyle, type BuildDigestInput, CAMERA_FAR, CAMERA_NEAR, CAM_CHAIN_GAP, CAM_EASE, CAM_PAN, CAM_PAN_EASE, CAM_RAMP_IN, CAM_RAMP_OUT, CAM_SIZE_MAX, CAM_SIZE_MIN, CAM_SPAN_MIN, CAPTURE_COVERAGE_MIN, CARD_EDGE_OVERDRAW, CARD_ENTER_KINDS, CARD_EXIT_KINDS, CARD_FADE_SECONDS, CARD_FOV, CARD_Z, CHANNEL_SPECS_HASH, CHANNEL_SPECS_VERIFIED, CLICK_FX_INTENSITY, CLICK_FX_PRE, CLICK_HIGHLIGHT_FADE, CLICK_PAIR_MAX, CLICK_PULSE_DUR, CLICK_RECT_MAX_FRAC, CLICK_RIPPLE_DUR, CLICK_SYNTH_RELEASE, CROP_MAX_PX, CROP_MIN_FRAC, CROP_MIN_PX, CROP_PAD, CURSOR_IDLE_EPS_FRAC, CURSOR_IDLE_FADE_IN, CURSOR_IDLE_FADE_OUT, CURSOR_IDLE_HOLD, type CamBubbleRect, type CamPoseSpan, type CamStyle, type CaptureNormalization, type CardLayout, type ClickFxStyle, type CopiedLayout, type CopyLayoutOptions, type CopyStyleOptions, type CursorEvent, type CursorFadeKey, type CursorIdleOptions, type CursorStyle, type CursorTrack, DARK_GROUND, DEFAULT_BROWSER_BAR, DEFAULT_CAM_POSE, DEFAULT_CAM_STYLE, DEFAULT_CLICK_FX, DEFAULT_CURSOR_STYLE, DEFAULT_DUCK, DEFAULT_FRAME_STYLE, DEFAULT_SPEED_PARAMS, DEFAULT_TILT_POSE, DEFAULT_ZOOM_LEVEL, DEFAULT_ZOOM_STYLE, DESIGN_FRAME_WIDTH, DESTINATIONS, DIGEST_CROP_MAX, DIGEST_FULL_MAX, DIGEST_VERSION, DOC_SCHEMA_VERSION, DRAG_FIT_LEVEL, type Destination, type Digest, type DigestImageRef, type DigestPlan, type DigestTakeFacts, type DocSegment, type DuckOptions, END_CARD_FROM, END_CARD_RECEDE, END_CARD_SECONDS, ENTRANCE_SECONDS, EXPORT_RESOLUTION_OPTIONS, EXPORT_SHORT_EDGE, type EndCard, type EnvelopePoint, type ExportResolution, type ExtractClickOptions, FOLLOW_RECENTER, FOLLOW_SAFE_RATIO, FRAME_BORDER_COLOR_DEFAULT, FRAME_BORDER_DEFAULT, FRAME_BORDER_WIDTH_DEFAULT, FREEZE_DEFAULT_SECONDS, FREEZE_SECONDS_MAX, FREEZE_SECONDS_MIN, type FocusBounds, type FollowEvent, type FollowOptions, type FrameEntrance, type FrameGeometry, type FrameStyle, type FreezeExtent, type FreezeSpan, HOUSE_GRADIENT, HTML_LAYER_FOREIGN_FIELDS, HTML_LAYER_MAX_BYTES, HTML_LAYER_SVG_CODE, HTML_LAYER_WARN_BYTES, HTML_STARTERS, type HtmlLayerFace, type HtmlLayerInlineFace, type HtmlLayerPayload, type HtmlLayerProblem, type HtmlLayerProblemCode, type HtmlLayerSource, type HtmlOverlayClip, type HtmlOverlayFont, type HtmlStarter, IDLE_KINDS, type IdleKind, type IngestOptions, LAYER_CARD_SHADOW, LAYOUT_FRAME_FIELDS, LOOK_KINDS, type LayerCard, type LayoutParts, type Look, type LookBrand, type LookKind, type LookPlacement, type LowerProgramOptions, type LoweredAudioClip, type LoweredClick, type LoweredComposition, type LoweredZoomSpan, MEDIA_ENTER_KINDS, MEDIA_EXIT_KINDS, MEDIA_FRAME_KEYS, MEDIA_KEY_PREFIX, MINIMAL_BAR_THEMES, MOTION_DELTA, MOTION_EASE, type Media, type MediaFrame, type MediaFrameKey, type MediaOverlayClip, type MediaSegment, type MicRms, type MinimalBarTheme, type Moment, type MomentKind, type MomentsOptions, type MotionKey, type MotionPose, type MotionPose3D, type MusicBedInput, type NormRect, OBJECT_DEFAULT_SCALE, OVERLAY_FONT_FACES, OVERLAY_LINE_HEIGHT, OVERLAY_MEDIA_DEFAULT_RADIUS, OVERLAY_MEDIA_DEFAULT_WIDTH, OVERLAY_MIN_DURATION, OVERLAY_SCALE_MAX, OVERLAY_SIZE_MAX, OVERLAY_SIZE_MIN, OVERLAY_TRANSITION_DUR, OVERLAY_Z, type ObjectAnimation, type ObjectAsset, type ObjectClip, type ObjectPrimitiveShape, type OverlayClip, type OverlayFontFace, type OverlayKind, type OverlayPresetStyle, type OverlayRect, type OverlayTransform, type OverlayTransition, PLATE_GROUND, PLAYBACK_ACTIVITY, PRIMARY_MEDIA, PROGRAM_RETIME, type PlanOptions, type PlanTiltOptions, type PlaneSize, type ProgramAnchorDoc, type ProgramTweenEdit, type ProjectDoc, type PxRect, REJECT_OVERLAP, REST_TILT_ID, type RecordingArtifact, type RecordingMeta, type Rect, type RejectedLane, type RejectedSpan, type ResolvedOverlayBox, type ResolvedOverlayStyle, SCENE_MOTION, SCENE_QUIET, SEGMENT_ENTER_KINDS, SEGMENT_EXIT_KINDS, SPEED_RATE_MAX, SPEED_RATE_MIN, SPEED_SPAN_MIN, STAGE_CLIP_PREFIX, STILL_DEFAULT, STUDIO_ENTRY_ID, STYLE_FIELDS, type SegmentExtent, type SmoothOptions, type SmoothPoint, type SpeedParams, type SpeedSpan, type StepAnchor, type StepSpan, type StudioAudioPlan, type StudioDoc, type StudioEntry, type StyleField, TEXT3D_DEPTH_DEFAULT, TEXT3D_DEPTH_MAX, TEXT3D_DEPTH_MIN, TEXT_ENTER_KINDS, TEXT_EXIT_KINDS, TEXT_PRESETS, TILT_AUTO_DEAD_ZONE, TILT_AUTO_MIN, TILT_CHAIN_GAP, TILT_DEG_MAX, TILT_EASE, TILT_INTENSITY_MAX, TILT_PAN, TILT_PAN_EASE, TILT_RAMP_IN, TILT_RAMP_OUT, TILT_SPAN_MIN, TILT_UI_DEG_MAX, TRANSITION_SECONDS, TRANSITION_SECONDS_MAX, TRANSITION_SECONDS_MIN, TRANSITION_SPEED_MULT, type TemplateAnchor, type Text3dMaterial, type TextFxDirection, type TextFxKind, type TextFxSpec, type TextFxUnit, type TextOverlayBox, type TextOverlayClip, type TextOverlayPreset, type TextOverlayStroke, type TiltPersonality, type TiltSpan, type TiltStyleName, type TranscriptSegment, type Transition, type TransitionKind, type TransitionMove, type TransitionOut, type TransitionSpeed, WINDOW_FOCUS_MIN, ZOOM_CHAIN_GAP, ZOOM_EASE, ZOOM_LEVELS, ZOOM_LEVEL_MAX, ZOOM_LEVEL_MIN, ZOOM_PAN, ZOOM_PAN_EASE, ZOOM_RAMP_IN, ZOOM_RAMP_IN_OVERLAP, ZOOM_RAMP_OUT, ZOOM_SPAN_MIN, ZOOM_STYLES, ZOOM_STYLE_OPTIONS, type ZoomSpan, type ZoomStyleName, type ZoomStyleParams, type ZoomWindow, anchorKindOf, anchorSourceDuration, animStep, applyLook, applyTemplate, aspectRatioValue, audioLane, backdropMedia, buildDigest, camBubbleRect, camBubbleRectAt, camLane, camMoveLane, camRectFromPose, camRestPose, camTrackFromDoc, cardEnter, cardExit, cardFields, cardInset, cardPointToScreen, cardPoseTrack, clampCamFrac, clampCamSize, clampFocus, clampFreezeSeconds, clampSpeedRate, clampTiltDeg, clampZoomLevel, clipEnvelope, clipLength, clipsFrom, computeCardLayout, computeMicRms, computePeaks, copyLayout, copyStyle, cropBox, cssFamilies, cssWeights, cursorIdleFade, deriveViewportCrop, destinationById, destinationsForChannel, docCardLayout, docFreezes, docMediaList, docOutputDuration, docRestTime, docStillTime, docToCropSpace, docToFullSpace, docTransitions, dropTemplate, duckCurve, effectiveSegments, endCardClips, enterKey, enterOf, entranceSeconds, envelopeAt, envelopeValueAt, exitKey, exitOf, exitSeconds, expandEndCard, expectedFrameSize, exportSizeFor, extractClicks, focusBounds, followFocusEvents, frameGeometry, freezeLane, freezeOutputExtents, hexToRgbTriplet, houseLook, htmlLayerBleed, htmlLayerBleedFor, htmlLayerFaces, htmlLayerKey, htmlLayerLabel, htmlLayerPayload, htmlLayerPictureBox, htmlLayerProblems, htmlLayerSvg, htmlLayerText, htmlLayerUnhostedFamilies, htmlLayerWidth, htmlStarterClip, idleGaps, idleKey, isKeyedOverlay, isLookKind, isMusicBed, isPlayback, isProgramDoc, isRecordingDoc, isRejected, isStageClip, isUnitStep, lastLayerEnd, layerMedia, layoutOf, levelForFocusFraction, lookFromBrand, lookKindForGround, lowerProgramDoc, lowerStudioDoc, lowerToComposition, mediaAtOutput, mediaDuration, mediaFrame, mediaKey, mediaRef, mediaRefId, mediaSource, micLane, migrateHostedDoc, migrateMotion, momentsFromDoc, motionTrack, musicBedClip, nextMediaId, normalizeCaptureSpace, objectMotionBase, objectMotionPoseAt, objectsLane, outputDurationOf, outputEnd, outputRangeToSource, overlapFraction, overlayFaceFor, overlayFontFaces, overlayFontString, overlayFxSpec, overlayHit, overlayLines, overlayMotionBase, overlayMotionPoseAt, overlayRect, overlaysLane, ownFreezes, pageDisplayUrl, parsePoseId, pickStyle, placeFreezes, planAutoSpeed, planAutoTilt, planAutoZoom, planForDigest, planeSizeAtDepth, platformBarKind, programDuration, projectFromArtifact, ratedSegments, recommendedExportResolution, refillAudioBeds, rejectSpan, removeSourceRange, removeSpeedInRange, resolveExportSize, resolveOverlayBox, resolveOverlayStyle, resolveText3dAsset, resolveZoomStyle, restLeanOf, restSpansThroughTransitions, sameMedia, sceneChanges, scrollRuns, segmentOutputExtents, outputLen as segmentOutputLen, segmentStarts, setSpeedInRange, slideSide, smoothCursor, spanOutputExtent, speedLane, studioAudioPlan, studioEntry, studioLayerData, tiltLane, tiltTrackFromDoc, transitionMult, transitionSeconds, videoLane, voiceKey, wellFormedXml, withBackdrop, withFreezes, withHolds, withoutRejected, wrapProgramLength, zoomCoversRect, zoomLane, zoomSpanForRange, zoomTrackFromDoc, zoomWindow };