@vosjs/studio-core 0.24.1 → 0.26.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/README.md CHANGED
@@ -35,7 +35,7 @@ The shared layers lower as one engine `stack` entry, `STUDIO_ENTRY_ID` (`'vosso.
35
35
 
36
36
  - **Seconds everywhere.** Zoom, speed, tilt and cam-motion spans and the cursor samples are anchored in source time, so they follow footage through trims. Overlays, audio clips and click effects are anchored in output time, so a title keeps its perceived length through a speed change. `ratedSegments`, `effectiveSegments`, `docOutputDuration` and `outputRangeToSource` are the remaps.
37
37
  - **Normalized coordinates.** A zoom's `cx`/`cy` and an overlay's `transform.x`/`y` are fractions of the frame in `[0, 1]`, never pixels, so a document survives an aspect-ratio switch. `focusBounds` and `clampFocus` keep a focus inside the card at a given `level`.
38
- - **Camera styles.** `ZOOM_STYLES` names eight camera personalities (`glide`, the default, then `focus`, `cinema`, `snappy`, `cut`, `keynote`, `drift`, `none`); a style parametrizes both the planner and the camera motion, and `doc.zoomParams` layers per-document overrides.
38
+ - **Camera styles.** `ZOOM_STYLES` names six camera personalities (`glide`, the default, then `focus`, `cinema`, `snappy`, `cut`, `none`); a style parametrizes the planner, the camera motion and the tilt track's tempo, and `doc.zoomParams` layers per-document overrides. `keynote` and `drift` are retired names (`RETIRED_ZOOM_STYLES`) that resolve to `glide` + medium tilt and `cinema` + subtle tilt, and `migrateHostedDoc` rewrites them on read. Every style's chain gap sits above its pump-free floor (`pumpFreeChainGap`), and the lowering fits a ramp longer than its span to the room it has, never below `RAMP_FLOOR`.
39
39
  - **The stage.** `CARD_FOV`, `CARD_Z`, `OVERLAY_Z`, `BACKGROUND_Z` and `planeSizeAtDepth` define the frustum-filling planes the program draws (background, the tiltable card, the overlay); `cardVisibleExtent` and `cardOverscanFor` are how far a posed card is seen past the frame, which is what the card layer's canvas and plane grow by (so a lean over zoomed footage never shows the texture's edge); `computeCardLayout` and `docCardLayout` are the host-side mirror of the program's card math, pinned to it by tests.
40
40
  - **Backdrops.** `withBackdrop(frame, backdrop)` and `backdropMedia` put a looping video or a still behind the card, output-anchored modulo its duration. The package carries the mechanism and `BASE_FRAME_STYLE`; which loop a host opens on is the host's choice.
41
41
 
@@ -54,7 +54,7 @@ The shared layers lower as one engine `stack` entry, `STUDIO_ENTRY_ID` (`'vosso.
54
54
  | Ingest | `projectFromArtifact`, `normalizeCaptureSpace`, `deriveViewportCrop`, `docToCropSpace`, `docToFullSpace`, `CAPTURE_COVERAGE_MIN`, `WINDOW_FOCUS_MIN` |
55
55
  | Document | `StudioDoc`, `ProjectDoc`, `ProgramAnchorDoc`, `anchorKindOf`, `isRecordingDoc`, `isProgramDoc`, `DOC_SCHEMA_VERSION`, `migrateHostedDoc`, `DEFAULT_FRAME_STYLE`, `BASE_FRAME_STYLE`, the constants (`ZOOM_LEVELS`, `TILT_DEG_MAX`, …) |
56
56
  | Planners | `planAutoZoom`, `planAutoSpeed`, `planAutoTilt`, `smoothCursor`, `idleGaps`, `scrollRuns`, `rejectSpan`, `isRejected`, `withoutRejected` |
57
- | Camera styles | `ZOOM_STYLES`, `ZOOM_STYLE_OPTIONS`, `DEFAULT_ZOOM_STYLE`, `resolveZoomStyle` |
57
+ | Camera styles | `ZOOM_STYLES`, `ZOOM_STYLE_OPTIONS`, `DEFAULT_ZOOM_STYLE`, `resolveZoomStyle`, `RETIRED_ZOOM_STYLES`, `pumpFreeChainGap` |
58
58
  | Lowering | `lowerStudioDoc`, `lowerProgramDoc`, `lowerToComposition`, `zoomTrackFromDoc`, `tiltTrackFromDoc`, `camTrackFromDoc`, `motionTrack`, `followFocusEvents`, `extractClicks`, `cursorIdleFade`, `ratedSegments`, `STUDIO_ENTRY_ID`, `studioEntry`, `studioLayerData` |
59
59
  | Layout | `computeCardLayout`, `docCardLayout`, `focusBounds`, `clampFocus`, `camBubbleRectAt`, `overlayRect`, `overlayHit`, `CARD_FOV`, `CARD_Z`, `planeSizeAtDepth`, `recommendedExportResolution` |
60
60
  | Text | `TEXT_PRESETS`, `OVERLAY_FONT_FACES`, `resolveOverlayStyle`, `resolveOverlayBox`, `resolveText3dAsset` |
package/dist/index.d.ts CHANGED
@@ -8,42 +8,66 @@ import { LaneAdapter } from '@vosjs/editor';
8
8
  * presets covering the whole auto-zoom pipeline: how the planner turns clicks
9
9
  * into spans (cluster vs session merging, level clamps, follow default) AND
10
10
  * how the lowering animates the camera (ramp durations, eases, connected-pan
11
- * gap, dead-zone follow tuning). One name → one coherent feel.
11
+ * gap, dead-zone follow tuning, and the tilt track's tempo). One name → one
12
+ * coherent feel.
12
13
  *
13
- * The presets are grounded in a measured comparison of the four shipping
14
- * strategies (frame-by-frame optical-flow tracking of real exports + source
15
- * audits of Recordly/OpenScreen + Cursorful bundle/behavior research):
14
+ * The presets were grounded (2026-07) in a measured comparison of the four
15
+ * shipping strategies (frame-by-frame optical-flow tracking of real exports +
16
+ * source audits of Recordly/OpenScreen + Cursorful bundle/behavior research),
17
+ * and re-founded (2026-09) on the stage camera at 60 fps, where every style
18
+ * is timed against the default's traced arrival and obeys two structural
19
+ * rules (see `pumpFreeChainGap` and the lowering's ramp fitting):
16
20
  *
17
21
  * - Cursorful ("glide"): ONE modest zoom (~1.5×) per activity session —
18
- * 2+ clicks within a rolling window keep the zoom alive — and the camera
19
- * TRAVELS by panning between focus points while zoomed. Measured zoom ramp
20
- * fits css-bezier(0.26, 0, 0.16, 1): near-zero initial velocity, soft
21
- * landing, zero overshoot. Pan durations scale with distance.
22
+ * clicks within a rolling window keep the zoom alive — and the camera
23
+ * TRAVELS by panning between focus points while zoomed. Its arrival was
24
+ * traced at 60 fps and fitted by sum of differences (see the entry).
22
25
  * - Screen Studio "Focused" / Recordly ("focus"): a zoom block per click
23
- * cluster at ~1.8×, spring-settled ramps (~1.5 s in / ~1 s out), direct
24
- * pans across gaps ≤ ~1.35 s, dead-zone cursor follow. The measured
25
- * OpenScreen/Recordly ramp (their bezier filtered through the spring) fits
26
- * css-bezier(0.28, 0.03, 0.09, 1) — that curve IS the family feel.
27
- * - Screen Studio "Smooth" ("cinema"): the same block model, slower and
28
- * more fluid — for content that is watched, not read.
29
- * - "snappy": the studio's original fast cycles, with the defect fixed — the raw
30
- * css-bezier(0.16, 1, 0.3, 1) arrival had an initial velocity 6.25× the
31
- * ramp average (the "jump cut" complaint); competitors always filter that
32
- * curve through a spring. This preset keeps the pace but caps the onset.
26
+ * cluster, spring-settled ramps, direct pans across short gaps, no cursor
27
+ * follow. The measured OpenScreen/Recordly ramp (their bezier filtered
28
+ * through the spring) fits css-bezier(0.28, 0.03, 0.09, 1) — that curve IS
29
+ * the family feel; it now runs at the default's tempo instead of 1.4 s.
30
+ * - Screen Studio "Smooth" ("cinema"): the long-HOLD style, slower and more
31
+ * fluid — for content that is watched, not read.
32
+ * - "snappy": the studio's original fast cycles, with the defect fixed — the
33
+ * raw css-bezier(0.16, 1, 0.3, 1) arrival had an initial velocity 6.25×
34
+ * the ramp average (the "jump cut" complaint); competitors always filter
35
+ * that curve through a spring. This preset keeps the pace but caps the
36
+ * onset.
33
37
  * - "cut": Screen Studio's "instant zoom" option — hard cut-in, no glide.
34
38
  *
39
+ * `keynote` and `drift` (2026-08) were another row plus a tilt intensity the
40
+ * panel already exposes as its own control; they are retired names that
41
+ * resolve to `glide` + medium and `cinema` + subtle (RETIRED_ZOOM_STYLES;
42
+ * migrated on read by docVersion). What they had right survives in every
43
+ * style: the tilt track moves at the style's own zoom tempo, so a chosen
44
+ * lean lands WITH its zoom.
45
+ *
35
46
  * Style changes are live SET_DATA (the zoom track is data); regenerating
36
47
  * auto spans on a style switch re-plans with the style's planner params while
37
48
  * preserving user-touched ('manual') spans, per the wand contract.
38
49
  */
39
50
 
40
- type ZoomStyleName = 'glide' | 'focus' | 'cinema' | 'snappy' | 'cut' | 'none' | 'keynote' | 'drift';
51
+ type ZoomStyleName = 'glide' | 'focus' | 'cinema' | 'snappy' | 'cut' | 'none';
52
+ /**
53
+ * Retired style names and what they meant: a live style plus the tilt
54
+ * intensity the name carried. `resolveZoomStyle` honours the name at runtime
55
+ * (a hand-edited doc.json never falls silently to the default) and
56
+ * `migrateHostedDoc` rewrites a stored document onto the pair.
57
+ */
58
+ declare const RETIRED_ZOOM_STYLES: Record<string, {
59
+ style: ZoomStyleName;
60
+ tilt: TiltStyleName;
61
+ }>;
62
+ /** The live style a name resolves to, retired names included; null = unknown. */
63
+ declare function liveZoomStyleName(name: string | undefined): ZoomStyleName | null;
41
64
  /**
42
- * The tilt half of a camera style: the Dynamic-tilt
43
- * intensity the style ships with, plus optional overrides on the tilt track's
44
- * motion constants. A style pick stamps `doc.tiltStyle` with `intensity` and
45
- * re-plans auto tilt spans alongside the auto zooms — one name, one coherent
46
- * camera sentence (zoom AND lean).
65
+ * The tilt half of a camera style: the Dynamic-tilt intensity the style
66
+ * ships with (every live style ships 'off' — intensity is the Dynamic tilt
67
+ * dial's, never a name's) plus the tilt track's motion, which is the
68
+ * style's OWN zoom tempo so a lean lands with its zoom. A style pick stamps
69
+ * `doc.tiltStyle` with `intensity` and re-plans auto tilt spans alongside
70
+ * the auto zooms — one name, one coherent camera sentence (zoom AND lean).
47
71
  */
48
72
  interface TiltPersonality {
49
73
  /** Dynamic-tilt intensity this style ships with ('off' = flat card). */
@@ -63,10 +87,10 @@ interface ZoomStyleParams {
63
87
  clusterGap: number;
64
88
  /**
65
89
  * Minimum clicks for a cluster to earn a zoom. Every style is 1: the
66
- * Cursorful ≥2 rule glide and keynote carried was never in effect on a
67
- * recorded take (the recorder counted each press twice, so a lone click
68
- * was a pair on most pages and a stray on the rest), and the lone click on
69
- * a button is the zoom people miss when it goes.
90
+ * Cursorful ≥2 rule glide once carried was never in effect on a recorded
91
+ * take (the recorder counted each press twice, so a lone click was a pair
92
+ * on most pages and a stray on the rest), and the lone click on a button
93
+ * is the zoom people miss when it goes.
70
94
  */
71
95
  minClusterClicks: number;
72
96
  /** zoom so the clicked element fills ~this fraction of the frame. */
@@ -78,7 +102,7 @@ interface ZoomStyleParams {
78
102
  * release: a slider thumb, a scrubber, a thing moved across a canvas).
79
103
  * The camera pans WITH the pointer for the whole press (a path follow,
80
104
  * not a dead zone), so the level stays mild: the thumb and what it drives
81
- * both stay in the window.
105
+ * both stay in the window. By rule minLevel + 0.2.
82
106
  */
83
107
  dragLevel: number;
84
108
  /** span lead-in before the first click / hold after the last (seconds). */
@@ -96,13 +120,18 @@ interface ZoomStyleParams {
96
120
  * Level FLOOR for typing spans, above the style's minLevel: a wide field
97
121
  * (URL bar, dialog search input) fit-clamps to this instead — typing is the
98
122
  * moment being narrated, so it reads a notch punchier than a wide click.
123
+ * By rule minLevel + 0.1.
99
124
  */
100
125
  typingMinLevel: number;
101
126
  /** zoom-in ramp duration; arrival lands rampInOverlap into the span. */
102
127
  rampIn: number;
103
128
  rampInOverlap: number;
104
129
  rampOut: number;
105
- /** output-time gap ≤ this → pan straight to the next span (no zoom-out). */
130
+ /**
131
+ * output-time gap ≤ this → pan straight to the next span (no zoom-out).
132
+ * Never below `pumpFreeChainGap`: a gap just past it would zoom out and
133
+ * straight back in (the pump), which is arithmetic, not taste.
134
+ */
106
135
  chainGap: number;
107
136
  /** connected-pan duration. */
108
137
  pan: number;
@@ -123,6 +152,19 @@ interface ZoomStyleParams {
123
152
  /** The style's tilt personality — see TiltPersonality. */
124
153
  tilt: TiltPersonality;
125
154
  }
155
+ /**
156
+ * The shortest rest between a zoom-out and the next zoom-in that reads as
157
+ * a rest rather than a pump (seconds).
158
+ */
159
+ declare const PUMP_REST = 1;
160
+ /**
161
+ * The chain gap below which a style PUMPS: two spans whose gap lies in
162
+ * (chainGap, chainGap + rampOut + rampIn − overlap + PUMP_REST] zoom out and
163
+ * straight back in with no rest between. Every ZOOM_STYLES entry clears
164
+ * this floor by construction (a test pins it) and `resolveZoomStyle`
165
+ * raises a `zoomParams` override that does not.
166
+ */
167
+ declare function pumpFreeChainGap(p: Pick<ZoomStyleParams, 'rampIn' | 'rampInOverlap' | 'rampOut'>): number;
126
168
  declare const ZOOM_STYLES: Record<ZoomStyleName, ZoomStyleParams>;
127
169
  /** The default camera style for new projects (the Cursorful-family strategy). */
128
170
  declare const DEFAULT_ZOOM_STYLE: ZoomStyleName;
@@ -130,10 +172,12 @@ declare const DEFAULT_ZOOM_STYLE: ZoomStyleName;
130
172
  * Resolve a style name (+ optional per-doc overrides, `doc.zoomParams`) into a
131
173
  * full parameter bundle. Overrides are the "Custom" seam: agents/doc.json can
132
174
  * tune individual params on top of a named preset; the studio shows Custom
133
- * while any override is present. Unknown names from hand-edited doc.json fall
134
- * back to the default style.
175
+ * while any override is present. A retired name resolves to its live style;
176
+ * an unknown name from a hand-edited doc.json falls back to the default.
177
+ * The chain gap never rests below its pump-free floor, whatever an override
178
+ * asked for.
135
179
  */
136
- declare function resolveZoomStyle(name?: ZoomStyleName, overrides?: Partial<ZoomStyleParams>): ZoomStyleParams;
180
+ declare function resolveZoomStyle(name?: string, overrides?: Partial<ZoomStyleParams>): ZoomStyleParams;
137
181
  /** Picker order + copy for the studio's Camera style control. */
138
182
  declare const ZOOM_STYLE_OPTIONS: {
139
183
  name: ZoomStyleName;
@@ -1894,6 +1938,126 @@ type Media = ProjectDoc['source'] & {
1894
1938
  frame?: MediaFrame;
1895
1939
  };
1896
1940
 
1941
+ /**
1942
+ * The callout grammar — three shapes a viewer learns once, composed from the
1943
+ * product's own register so the card is unmistakably the video's and still
1944
+ * the product's.
1945
+ *
1946
+ * The rule set (the distinguishability principle: share the product's hue
1947
+ * and type, contrast in value, elevation, scale and place):
1948
+ * - VALUE INVERSION: a light app gets a dark card in the product's hue, a
1949
+ * dark app a light one; the accent is kept for the kicker and the dot.
1950
+ * - ELEVATION: a real shadow plus a hairline of light on the edge.
1951
+ * - SCALE: the title is set for the render, CALLOUT_TYPE_RATIO times the
1952
+ * app's body as it appears on screen at the layer's start (the camera
1953
+ * scales the app, so the caller passes that scale), never the app's own
1954
+ * size.
1955
+ * - MOTION: a rise in, a fade out.
1956
+ * - PLACE is the pin's (lower/pin.ts), not the card's.
1957
+ *
1958
+ * Pure: hex in, markup and CSS out. The starters are this grammar in the
1959
+ * house register; `vos callout` is it in the take's BRAND.md.
1960
+ */
1961
+
1962
+ type CalloutShape = 'tag' | 'note' | 'code';
1963
+ declare const CALLOUT_SHAPES: readonly CalloutShape[];
1964
+ /** The title's size over the app's body size as seen on screen. */
1965
+ declare const CALLOUT_TYPE_RATIO = 1.35;
1966
+ /** The app's body size when nothing says otherwise (CSS px at the viewport). */
1967
+ declare const CALLOUT_DEFAULT_BODY_PX = 14;
1968
+ /** The product's register: what a card shares with the app. */
1969
+ interface CalloutRegister {
1970
+ /** The app's ground (its page background), a hex. Decides the inversion. */
1971
+ ground: string;
1972
+ /** The product's accent, a hex: the kicker, the dot, the bar. */
1973
+ accent: string;
1974
+ /** The words face: a hosted catalog family or a system stack. */
1975
+ face?: string;
1976
+ /** The code face. */
1977
+ mono?: string;
1978
+ /** The app's body type size in CSS px at the recorded viewport. */
1979
+ body?: number;
1980
+ }
1981
+ interface CalloutWords {
1982
+ /** A short label above the title, set in the accent (a tag is only this). */
1983
+ kicker?: string;
1984
+ title?: string;
1985
+ /** One or two lines under the title. */
1986
+ body?: string;
1987
+ /** The payload, kept as typed (lines break on \n). */
1988
+ code?: string;
1989
+ }
1990
+ /** The resolved look: colours and sizes in design px. */
1991
+ interface CalloutLook {
1992
+ light: boolean;
1993
+ cardGround: string;
1994
+ cardInk: string;
1995
+ cardMuted: string;
1996
+ hairline: string;
1997
+ accent: string;
1998
+ shadow: string;
1999
+ face: string;
2000
+ mono: string;
2001
+ kickerPx: number;
2002
+ titlePx: number;
2003
+ bodyPx: number;
2004
+ codePx: number;
2005
+ radius: number;
2006
+ padX: number;
2007
+ padY: number;
2008
+ }
2009
+ declare const HOUSE_REGISTER: CalloutRegister;
2010
+ /**
2011
+ * Resolve a register into a look. `scale` is design px per CSS px of the
2012
+ * app as it appears at the layer's start (the card's footage scale times
2013
+ * the camera's level); 1 when unknown.
2014
+ */
2015
+ declare function calloutLook(register: CalloutRegister, scale?: number): CalloutLook;
2016
+ interface CalloutBox {
2017
+ width: number;
2018
+ height: number;
2019
+ }
2020
+ /**
2021
+ * The design box a shape needs for its words: one line for a tag, the
2022
+ * kicker, title and wrapped body for a note, the lines for code. Widths
2023
+ * estimate glyphs at 0.56 em for words and 0.62 em for mono.
2024
+ */
2025
+ declare function calloutBox(shape: CalloutShape, look: CalloutLook, words: CalloutWords): CalloutBox;
2026
+ /** The markup and CSS for a shape in a look, sized to a box. */
2027
+ declare function calloutSource(shape: CalloutShape, look: CalloutLook, words: CalloutWords, box: CalloutBox): {
2028
+ html: string;
2029
+ css: string;
2030
+ };
2031
+ interface CalloutClipOptions {
2032
+ id: string;
2033
+ /** OUTPUT seconds. */
2034
+ start: number;
2035
+ duration: number;
2036
+ /** Design px per CSS px of the app on screen at `start` (1 = unknown). */
2037
+ scale?: number;
2038
+ pin?: OverlayPin;
2039
+ /** The fallback place when the pin cannot resolve (frame fractions). */
2040
+ at?: {
2041
+ x: number;
2042
+ y: number;
2043
+ };
2044
+ }
2045
+ /** A callout as an html overlay clip: the grammar applied to a register. */
2046
+ declare function calloutClip(shape: CalloutShape, register: CalloutRegister, words: CalloutWords, opts: CalloutClipOptions): HtmlOverlayClip;
2047
+ /**
2048
+ * The card's ground as its CSS declares it (the root rule's background),
2049
+ * for the picture check that compares it with the footage it covers. Null
2050
+ * when the CSS names none in a form a hex can be read from.
2051
+ */
2052
+ declare function calloutGroundOf(css: string): string | null;
2053
+ type Rgb = [number, number, number];
2054
+ declare function hexToRgb(hex: string): Rgb | null;
2055
+ declare function rgbToHex([r, g, b]: Rgb): string;
2056
+ declare function parseCssColour(s: string): Rgb | null;
2057
+ declare function relativeLuminance([r, g, b]: Rgb): number;
2058
+ /** CIE76 colour difference between two sRGB colours. */
2059
+ declare function deltaE(a: Rgb, b: Rgb): number;
2060
+
1897
2061
  /**
1898
2062
  * Capture-space normalization — the single seam that makes window/monitor
1899
2063
  * recordings look like tab recordings to everything downstream.
@@ -1998,6 +2162,10 @@ declare function projectFromArtifact(artifact: RecordingArtifact, videoUrl: stri
1998
2162
  };
1999
2163
 
2000
2164
  /**
2165
+ * 5 = the six-style era: the retired camera styles `keynote` and `drift`
2166
+ * are read into their live style plus the tilt intensity the name carried
2167
+ * (`glide` + medium, `cinema` + subtle; an explicit `tiltStyle` wins). The
2168
+ * spans are untouched: a migration never re-plans.
2001
2169
  * 4 = the freeze era: a segment's `hold` is read into `doc.freeze` (a
2002
2170
  * freeze at that segment's end), the retime primitive beside speed spans.
2003
2171
  * 3 = the one-vocabulary era: a recording document's `frame.entrance`,
@@ -2007,17 +2175,24 @@ declare function projectFromArtifact(artifact: RecordingArtifact, videoUrl: stri
2007
2175
  * document); a v1 doc IS a recording document, so 1 → 2 was a stamp, and
2008
2176
  * 0 → 1 was a stamp too.
2009
2177
  */
2010
- declare const DOC_SCHEMA_VERSION = 4;
2178
+ declare const DOC_SCHEMA_VERSION = 5;
2011
2179
  /**
2012
2180
  * Upgrade a hosted doc.json payload to the current schema version.
2013
2181
  * Unstamped docs are v0 — the pre-stamp era. v0 → v2 were stamps; v2 → v3
2014
2182
  * rewrites a recording document's motion spellings into the vocabulary,
2015
2183
  * and v3 → v4 its segment holds into freezes (one rewrite, `migrateMotion`,
2016
- * idempotent, so both steps are one call); a program document is left as
2184
+ * idempotent, so both steps are one call); v4 → v5 rewrites a retired
2185
+ * camera style name (`migrateZoomStyle`); a program document is left as
2017
2186
  * it was (its layers migrate the same way when they carry the old
2018
2187
  * spellings). A real shape change chains its step here.
2019
2188
  */
2020
2189
  declare function migrateHostedDoc(raw: Record<string, unknown>): Record<string, unknown>;
2190
+ /**
2191
+ * A retired camera style name becomes its live style plus the tilt
2192
+ * intensity the name carried, unless the document already says how far it
2193
+ * leans. Idempotent; a document on a live name is returned as it was.
2194
+ */
2195
+ declare function migrateZoomStyle(doc: Record<string, unknown>): Record<string, unknown>;
2021
2196
 
2022
2197
  /**
2023
2198
  * The studio document family.
@@ -2992,6 +3167,19 @@ interface PinReferent {
2992
3167
  * second. A `rect` is taken as written. Null when nothing names a rect.
2993
3168
  */
2994
3169
  declare function pinReferent(doc: ProjectDoc, pin: OverlayPin): PinReferent | null;
3170
+ /** A step a layer could be pinned to: it has an element, and its window overlaps the layer's. */
3171
+ interface PinCandidate {
3172
+ step: string | number;
3173
+ do: string;
3174
+ selector?: string;
3175
+ /** The step's OUTPUT window. */
3176
+ output: {
3177
+ start: number;
3178
+ end: number;
3179
+ };
3180
+ /** Seconds of the layer's window the step's covers. */
3181
+ overlap: number;
3182
+ }
2995
3183
  /** The step a pin names: its id first, then its record-time index. */
2996
3184
  declare function findStep(steps: readonly StepSpan[], ref: string | number): StepSpan | undefined;
2997
3185
  /**
@@ -3106,12 +3294,13 @@ declare const ZOOM_PAN: number;
3106
3294
  declare const ZOOM_EASE: string;
3107
3295
  declare const ZOOM_PAN_EASE: string;
3108
3296
  /**
3109
- * Tilt transition shape (tilt spans). Fixed constants, deliberately NOT the
3110
- * zoom style's (switching
3111
- * "Camera style" must not silently change tilt feel; a tiltParams override
3112
- * layer can arrive later if real use demands it). The eases are the same
3113
- * measured css-bezier family the default zoom style uses. Unlike zoom, the
3114
- * pose is SETTLED at span.in (the ramp starts TILT_RAMP_IN before, with no
3297
+ * Tilt transition shape (tilt spans): the FALLBACK for a bare
3298
+ * tiltTrackFromDoc call. The lowering hands the track the camera style's
3299
+ * own tilt motion (`ZoomStyleParams.tilt`, the style's zoom tempo), so a
3300
+ * lean lands WITH its zoom in every style — the one thing the retired
3301
+ * keynote style had right, generalized. The eases are the same measured
3302
+ * css-bezier family the default zoom style uses. Unlike zoom, the pose is
3303
+ * SETTLED at span.in (the ramp starts TILT_RAMP_IN before, with no
3115
3304
  * overlap-into-span): tilt frames a moment, it doesn't chase content.
3116
3305
  */
3117
3306
  declare const TILT_RAMP_IN = 0.9;
@@ -3299,6 +3488,16 @@ declare function docZoomTrack(input: ProjectDoc): KeyframeTrack<number[]> | unde
3299
3488
  * and the layer keeps its `transform` — the lint says why.
3300
3489
  */
3301
3490
  declare function resolvePins(doc: ProjectDoc, layout: CardLayout, camera: CameraModel, zoomTrack: KeyframeTrack<number[]> | undefined): Map<string, PinPlacement>;
3491
+ /**
3492
+ * The steps an unpinned layer could name: every step with an element (a
3493
+ * rect, or presses inside its window) whose output window overlaps the
3494
+ * layer's, most overlap first. The studio's Pin-to select and the lint's
3495
+ * advice read this.
3496
+ */
3497
+ declare function pinCandidates(doc: ProjectDoc, clip: {
3498
+ start: number;
3499
+ duration: number;
3500
+ }): PinCandidate[];
3302
3501
  /**
3303
3502
  * A pinned layer's effective [x, y, scale, rotation, opacity] at CLIP-LOCAL
3304
3503
  * time t — the host-side mirror the picking layer substitutes into the
@@ -3645,22 +3844,8 @@ declare function htmlLayerPayload(clip: HtmlOverlayClip): {
3645
3844
  html: HtmlLayerPayload;
3646
3845
  };
3647
3846
 
3648
- /**
3649
- * The house starters for an HTML layer: what one press of the studio's HTML
3650
- * verb puts on the canvas, and what its panel's Starter select swaps in.
3651
- * Product defaults the way the three text presets are (code, not shelf
3652
- * data), five and not fifty: a LIBRARY of components is an official project
3653
- * on the shelf that an agent applies as a template.
3654
- *
3655
- * Each is real, readable markup and CSS a person can retune, in the house
3656
- * look (a dark card, Inter for words, JetBrains Mono for code, both hosted so
3657
- * the faces resolve from the CSS alone), with a `box-shadow` so the derived
3658
- * bleed is exercised. `htmlStarters.test.ts` proves every one passes the
3659
- * gate with no problem and no warning.
3660
- */
3661
-
3662
3847
  interface HtmlStarter {
3663
- id: 'callout' | 'code' | 'terminal' | 'keys' | 'badge';
3848
+ id: 'note' | 'tag' | 'code' | 'terminal' | 'keys' | 'badge';
3664
3849
  name: string;
3665
3850
  html: string;
3666
3851
  css: string;
@@ -4694,4 +4879,4 @@ declare function rejectSpan(rejected: RejectedSpan[] | undefined, lane: Rejected
4694
4879
  anchor?: StepAnchor;
4695
4880
  }, note?: string): RejectedSpan;
4696
4881
 
4697
- 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_CENTRE_RAMP, CAMERA_COVER_MIN, 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 CameraModel, 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, DRAG_MIN_S, DRAG_MIN_TRAVEL_FRAC, type Destination, type Digest, type DigestImageRef, type DigestPlan, type DigestTakeFacts, type DocSegment, type Drag, 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 OverlayPin, type OverlayPresetStyle, type OverlayRect, type OverlayTransform, type OverlayTransition, PIN_GAP, PIN_MARGIN, PLATE_GROUND, PLAYBACK_ACTIVITY, PRIMARY_MEDIA, PROGRAM_RETIME, type PinCarry, type PinMark, type PinPlacement, type PinPlacementInput, type PinReferent, type PinSide, type PinSideResolved, 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 ZoomView, type ZoomWindow, anchorKindOf, anchorSourceDuration, animStep, applyLook, applyTemplate, aspectRatioValue, audioLane, backdropMedia, buildDigest, camBubbleRect, camBubbleRectAt, camLane, camMoveLane, camRectFromPose, camRestPose, camTrackFromDoc, cameraCentring, cameraModel, 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, docZoomTrack, dragsFromTrack, dropTemplate, duckCurve, effectiveSegments, endCardClips, enterKey, enterOf, entranceSeconds, envelopeAt, envelopeValueAt, exitKey, exitOf, exitSeconds, expandEndCard, expectedFrameSize, exportSizeFor, extractClicks, findStep, focusBounds, focusForViewportCentre, 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, overlayPinPoseAt, overlayRect, overlaysLane, ownFreezes, pageDisplayUrl, parsePoseId, pickStyle, pinBox, pinPlacement, pinRectOnScreen, pinReferent, pinReferentAt, placeFreezes, planAutoSpeed, planAutoTilt, planAutoZoom, planForDigest, planeSizeAtDepth, platformBarKind, programDuration, projectFromArtifact, ratedSegments, recommendedExportResolution, refillAudioBeds, rejectSpan, removeSourceRange, removeSpeedInRange, resolveExportSize, resolveOverlayBox, resolveOverlayStyle, resolvePins, 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, zoomView, zoomViewport, zoomWindow };
4882
+ 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, CALLOUT_DEFAULT_BODY_PX, CALLOUT_SHAPES, CALLOUT_TYPE_RATIO, CAMERA_CENTRE_RAMP, CAMERA_COVER_MIN, 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 CalloutBox, type CalloutClipOptions, type CalloutLook, type CalloutRegister, type CalloutShape, type CalloutWords, type CamBubbleRect, type CamPoseSpan, type CamStyle, type CameraModel, 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, DRAG_MIN_S, DRAG_MIN_TRAVEL_FRAC, type Destination, type Digest, type DigestImageRef, type DigestPlan, type DigestTakeFacts, type DocSegment, type Drag, 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, HOUSE_REGISTER, 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 OverlayPin, type OverlayPresetStyle, type OverlayRect, type OverlayTransform, type OverlayTransition, PIN_GAP, PIN_MARGIN, PLATE_GROUND, PLAYBACK_ACTIVITY, PRIMARY_MEDIA, PROGRAM_RETIME, PUMP_REST, type PinCandidate, type PinCarry, type PinMark, type PinPlacement, type PinPlacementInput, type PinReferent, type PinSide, type PinSideResolved, type PlanOptions, type PlanTiltOptions, type PlaneSize, type ProgramAnchorDoc, type ProgramTweenEdit, type ProjectDoc, type PxRect, REJECT_OVERLAP, REST_TILT_ID, RETIRED_ZOOM_STYLES, type RecordingArtifact, type RecordingMeta, type Rect, type RejectedLane, type RejectedSpan, type ResolvedOverlayBox, type ResolvedOverlayStyle, type Rgb, 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 ZoomView, type ZoomWindow, anchorKindOf, anchorSourceDuration, animStep, applyLook, applyTemplate, aspectRatioValue, audioLane, backdropMedia, buildDigest, calloutBox, calloutClip, calloutGroundOf, calloutLook, calloutSource, camBubbleRect, camBubbleRectAt, camLane, camMoveLane, camRectFromPose, camRestPose, camTrackFromDoc, cameraCentring, cameraModel, 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, deltaE, deriveViewportCrop, destinationById, destinationsForChannel, docCardLayout, docFreezes, docMediaList, docOutputDuration, docRestTime, docStillTime, docToCropSpace, docToFullSpace, docTransitions, docZoomTrack, dragsFromTrack, dropTemplate, duckCurve, effectiveSegments, endCardClips, enterKey, enterOf, entranceSeconds, envelopeAt, envelopeValueAt, exitKey, exitOf, exitSeconds, expandEndCard, expectedFrameSize, exportSizeFor, extractClicks, findStep, focusBounds, focusForViewportCentre, followFocusEvents, frameGeometry, freezeLane, freezeOutputExtents, hexToRgb, 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, liveZoomStyleName, lookFromBrand, lookKindForGround, lowerProgramDoc, lowerStudioDoc, lowerToComposition, mediaAtOutput, mediaDuration, mediaFrame, mediaKey, mediaRef, mediaRefId, mediaSource, micLane, migrateHostedDoc, migrateMotion, migrateZoomStyle, momentsFromDoc, motionTrack, musicBedClip, nextMediaId, normalizeCaptureSpace, objectMotionBase, objectMotionPoseAt, objectsLane, outputDurationOf, outputEnd, outputRangeToSource, overlapFraction, overlayFaceFor, overlayFontFaces, overlayFontString, overlayFxSpec, overlayHit, overlayLines, overlayMotionBase, overlayMotionPoseAt, overlayPinPoseAt, overlayRect, overlaysLane, ownFreezes, pageDisplayUrl, parseCssColour, parsePoseId, pickStyle, pinBox, pinCandidates, pinPlacement, pinRectOnScreen, pinReferent, pinReferentAt, placeFreezes, planAutoSpeed, planAutoTilt, planAutoZoom, planForDigest, planeSizeAtDepth, platformBarKind, programDuration, projectFromArtifact, pumpFreeChainGap, ratedSegments, recommendedExportResolution, refillAudioBeds, rejectSpan, relativeLuminance, removeSourceRange, removeSpeedInRange, resolveExportSize, resolveOverlayBox, resolveOverlayStyle, resolvePins, resolveText3dAsset, resolveZoomStyle, restLeanOf, restSpansThroughTransitions, rgbToHex, 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, zoomView, zoomViewport, zoomWindow };