@hyperframes/core 0.8.58 → 0.8.60

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/dist/audioFade.d.ts +24 -0
  2. package/dist/audioFade.d.ts.map +1 -0
  3. package/dist/audioFade.js +56 -0
  4. package/dist/audioFade.js.map +1 -0
  5. package/dist/audioGain.d.ts +4 -0
  6. package/dist/audioGain.d.ts.map +1 -1
  7. package/dist/audioGain.js +12 -4
  8. package/dist/audioGain.js.map +1 -1
  9. package/dist/compositionReadiness.d.ts +12 -3
  10. package/dist/compositionReadiness.d.ts.map +1 -1
  11. package/dist/compositionReadiness.js +49 -5
  12. package/dist/compositionReadiness.js.map +1 -1
  13. package/dist/generated/audio-fx-runtime-inline.js +1 -1
  14. package/dist/generated/audio-fx-runtime-inline.js.map +1 -1
  15. package/dist/generated/runtime-inline.js +1 -1
  16. package/dist/generated/runtime-inline.js.map +1 -1
  17. package/dist/hyperframe.runtime.iife.js +25 -25
  18. package/dist/runtime/authoredTiming.d.ts +2 -0
  19. package/dist/runtime/authoredTiming.d.ts.map +1 -1
  20. package/dist/runtime/authoredTiming.js +2 -0
  21. package/dist/runtime/authoredTiming.js.map +1 -1
  22. package/dist/runtime/levelTap.d.ts +12 -0
  23. package/dist/runtime/levelTap.d.ts.map +1 -0
  24. package/dist/runtime/levelTap.js +38 -0
  25. package/dist/runtime/levelTap.js.map +1 -0
  26. package/dist/runtime/media.d.ts +115 -0
  27. package/dist/runtime/media.d.ts.map +1 -0
  28. package/dist/runtime/media.js +450 -0
  29. package/dist/runtime/media.js.map +1 -0
  30. package/dist/runtime/timeline.d.ts +14 -0
  31. package/dist/runtime/timeline.d.ts.map +1 -0
  32. package/dist/runtime/timeline.js +650 -0
  33. package/dist/runtime/timeline.js.map +1 -0
  34. package/docs/core.md +1 -0
  35. package/package.json +12 -4
@@ -1,4 +1,6 @@
1
1
  export type AuthoredTimingValue = string | number | null | undefined;
2
+ export declare const AUTHORED_DURATION_ATTR = "data-hf-authored-duration";
3
+ export declare const AUTHORED_END_ATTR = "data-hf-authored-end";
2
4
  export interface RawAuthoredTiming {
3
5
  start?: AuthoredTimingValue;
4
6
  duration?: AuthoredTimingValue;
@@ -1 +1 @@
1
- {"version":3,"file":"authoredTiming.d.ts","sourceRoot":"","sources":["../../src/runtime/authoredTiming.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;AAErE,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,mBAAmB,CAAC;IAC5B,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IAC/B,gBAAgB,CAAC,EAAE,mBAAmB,CAAC;IACvC,GAAG,CAAC,EAAE,mBAAmB,CAAC;IAC1B,WAAW,CAAC,EAAE,mBAAmB,CAAC;CACnC;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CACpB;AASD,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,iBAAiB,GACxB,oBAAoB,GAAG,IAAI,CAwB7B"}
1
+ {"version":3,"file":"authoredTiming.d.ts","sourceRoot":"","sources":["../../src/runtime/authoredTiming.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;AAErE,eAAO,MAAM,sBAAsB,8BAA8B,CAAC;AAClE,eAAO,MAAM,iBAAiB,yBAAyB,CAAC;AAExD,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,mBAAmB,CAAC;IAC5B,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IAC/B,gBAAgB,CAAC,EAAE,mBAAmB,CAAC;IACvC,GAAG,CAAC,EAAE,mBAAmB,CAAC;IAC1B,WAAW,CAAC,EAAE,mBAAmB,CAAC;CACnC;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CACpB;AASD,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,iBAAiB,GACxB,oBAAoB,GAAG,IAAI,CAwB7B"}
@@ -1,3 +1,5 @@
1
+ export const AUTHORED_DURATION_ATTR = "data-hf-authored-duration";
2
+ export const AUTHORED_END_ATTR = "data-hf-authored-end";
1
3
  function finiteNumber(value) {
2
4
  if (value == null)
3
5
  return null;
@@ -1 +1 @@
1
- {"version":3,"file":"authoredTiming.js","sourceRoot":"","sources":["../../src/runtime/authoredTiming.ts"],"names":[],"mappings":"AAgBA,SAAS,YAAY,CAAC,KAA0B;IAC9C,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC;IAC/B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO,IAAI,CAAC;IAClE,MAAM,MAAM,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACjE,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,2BAA2B,CACzC,MAAyB;IAEzB,MAAM,WAAW,GAAG,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC/C,IAAI,WAAW,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC;IACrC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;IAEvC,MAAM,cAAc,GAAG,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACrD,MAAM,iBAAiB,GAAG,YAAY,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAChE,MAAM,QAAQ,GACZ,cAAc,IAAI,IAAI,IAAI,cAAc,GAAG,CAAC;QAC1C,CAAC,CAAC,cAAc;QAChB,CAAC,CAAC,iBAAiB,IAAI,IAAI,IAAI,iBAAiB,GAAG,CAAC;YAClD,CAAC,CAAC,iBAAiB;YACnB,CAAC,CAAC,IAAI,CAAC;IACb,IAAI,QAAQ,IAAI,IAAI;QAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,GAAG,QAAQ,EAAE,CAAC;IAExE,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,YAAY,GAAG,YAAY,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IACtD,MAAM,GAAG,GACP,SAAS,IAAI,IAAI,IAAI,SAAS,GAAG,KAAK;QACpC,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,YAAY,IAAI,IAAI,IAAI,YAAY,GAAG,KAAK;YAC5C,CAAC,CAAC,YAAY;YACd,CAAC,CAAC,IAAI,CAAC;IACb,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,EAAE,GAAG,EAAE,CAAC;AACpE,CAAC"}
1
+ {"version":3,"file":"authoredTiming.js","sourceRoot":"","sources":["../../src/runtime/authoredTiming.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,sBAAsB,GAAG,2BAA2B,CAAC;AAClE,MAAM,CAAC,MAAM,iBAAiB,GAAG,sBAAsB,CAAC;AAgBxD,SAAS,YAAY,CAAC,KAA0B;IAC9C,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC;IAC/B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO,IAAI,CAAC;IAClE,MAAM,MAAM,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACjE,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,2BAA2B,CACzC,MAAyB;IAEzB,MAAM,WAAW,GAAG,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC/C,IAAI,WAAW,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC;IACrC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;IAEvC,MAAM,cAAc,GAAG,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACrD,MAAM,iBAAiB,GAAG,YAAY,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAChE,MAAM,QAAQ,GACZ,cAAc,IAAI,IAAI,IAAI,cAAc,GAAG,CAAC;QAC1C,CAAC,CAAC,cAAc;QAChB,CAAC,CAAC,iBAAiB,IAAI,IAAI,IAAI,iBAAiB,GAAG,CAAC;YAClD,CAAC,CAAC,iBAAiB;YACnB,CAAC,CAAC,IAAI,CAAC;IACb,IAAI,QAAQ,IAAI,IAAI;QAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,GAAG,QAAQ,EAAE,CAAC;IAExE,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,YAAY,GAAG,YAAY,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IACtD,MAAM,GAAG,GACP,SAAS,IAAI,IAAI,IAAI,SAAS,GAAG,KAAK;QACpC,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,YAAY,IAAI,IAAI,IAAI,YAAY,GAAG,KAAK;YAC5C,CAAC,CAAC,YAAY;YACd,CAAC,CAAC,IAAI,CAAC;IACb,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,EAAE,GAAG,EAAE,CAAC;AACpE,CAAC"}
@@ -0,0 +1,12 @@
1
+ export interface StereoLevel {
2
+ l: number;
3
+ r: number;
4
+ }
5
+ export interface LevelTap {
6
+ /** Peak of the last analyser window per channel, linear 0..1+. */
7
+ read(): StereoLevel;
8
+ dispose(): void;
9
+ }
10
+ /** A side branch off `source`; the explicit-stereo gain up-mixes mono to both channels. */
11
+ export declare function createLevelTap(ctx: BaseAudioContext, source: AudioNode): LevelTap;
12
+ //# sourceMappingURL=levelTap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"levelTap.d.ts","sourceRoot":"","sources":["../../src/runtime/levelTap.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,MAAM,WAAW,QAAQ;IACvB,kEAAkE;IAClE,IAAI,IAAI,WAAW,CAAC;IACpB,OAAO,IAAI,IAAI,CAAC;CACjB;AAWD,2FAA2F;AAC3F,wBAAgB,cAAc,CAAC,GAAG,EAAE,gBAAgB,EAAE,MAAM,EAAE,SAAS,GAAG,QAAQ,CA0BjF"}
@@ -0,0 +1,38 @@
1
+ const WINDOW = 2048;
2
+ function peak(analyser, buf) {
3
+ analyser.getFloatTimeDomainData(buf);
4
+ let max = 0;
5
+ for (let i = 0; i < buf.length; i++)
6
+ max = Math.max(max, Math.abs(buf[i] ?? 0));
7
+ return max;
8
+ }
9
+ /** A side branch off `source`; the explicit-stereo gain up-mixes mono to both channels. */
10
+ export function createLevelTap(ctx, source) {
11
+ const mix = ctx.createGain();
12
+ mix.channelCount = 2;
13
+ mix.channelCountMode = "explicit";
14
+ const splitter = ctx.createChannelSplitter(2);
15
+ const left = ctx.createAnalyser();
16
+ const right = ctx.createAnalyser();
17
+ left.fftSize = right.fftSize = WINDOW;
18
+ source.connect(mix);
19
+ mix.connect(splitter);
20
+ splitter.connect(left, 0);
21
+ splitter.connect(right, 1);
22
+ const bufL = new Float32Array(new ArrayBuffer(WINDOW * 4));
23
+ const bufR = new Float32Array(new ArrayBuffer(WINDOW * 4));
24
+ return {
25
+ read: () => ({ l: peak(left, bufL), r: peak(right, bufR) }),
26
+ dispose: () => {
27
+ try {
28
+ source.disconnect(mix);
29
+ mix.disconnect();
30
+ splitter.disconnect();
31
+ }
32
+ catch {
33
+ // Source already torn down.
34
+ }
35
+ },
36
+ };
37
+ }
38
+ //# sourceMappingURL=levelTap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"levelTap.js","sourceRoot":"","sources":["../../src/runtime/levelTap.ts"],"names":[],"mappings":"AAWA,MAAM,MAAM,GAAG,IAAI,CAAC;AAEpB,SAAS,IAAI,CAAC,QAAsB,EAAE,GAA8B;IAClE,QAAQ,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC;IACrC,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE;QAAE,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAChF,OAAO,GAAG,CAAC;AACb,CAAC;AAED,2FAA2F;AAC3F,MAAM,UAAU,cAAc,CAAC,GAAqB,EAAE,MAAiB;IACrE,MAAM,GAAG,GAAG,GAAG,CAAC,UAAU,EAAE,CAAC;IAC7B,GAAG,CAAC,YAAY,GAAG,CAAC,CAAC;IACrB,GAAG,CAAC,gBAAgB,GAAG,UAAU,CAAC;IAClC,MAAM,QAAQ,GAAG,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IAC9C,MAAM,IAAI,GAAG,GAAG,CAAC,cAAc,EAAE,CAAC;IAClC,MAAM,KAAK,GAAG,GAAG,CAAC,cAAc,EAAE,CAAC;IACnC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;IACtC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACpB,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACtB,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAC3B,MAAM,IAAI,GAAG,IAAI,YAAY,CAAC,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IAC3D,MAAM,IAAI,GAAG,IAAI,YAAY,CAAC,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IAC3D,OAAO;QACL,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC;QAC3D,OAAO,EAAE,GAAG,EAAE;YACZ,IAAI,CAAC;gBACH,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;gBACvB,GAAG,CAAC,UAAU,EAAE,CAAC;gBACjB,QAAQ,CAAC,UAAU,EAAE,CAAC;YACxB,CAAC;YAAC,MAAM,CAAC;gBACP,4BAA4B;YAC9B,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,115 @@
1
+ import { type VolumeKeyframe } from "./mediaVolumeEnvelope.js";
2
+ import { type AudioFades } from "../audioFade.js";
3
+ import { type RateSpec } from "../speedRamp.js";
4
+ export { readElementPlaybackRate, readElementRateSpec, resolveNaturalMediaTimelineDuration, } from "./playbackRate.js";
5
+ export declare function readElementPlaybackStart(el: Element): number;
6
+ /**
7
+ * Resolve a media element's timeline window without conflating a video's
8
+ * authored display slot with the amount of source left to decode.
9
+ *
10
+ * An explicit video slot may outlive its source and holds the final frame.
11
+ * Audio remains source-bounded because it has no visual hold state.
12
+ */
13
+ export declare function resolveRuntimeMediaClipDuration(params: {
14
+ isVideo: boolean;
15
+ sourceDuration: number | null;
16
+ hostRemaining: number | null;
17
+ explicitDuration: number | null;
18
+ }): number | null;
19
+ export type RuntimeMediaClip = {
20
+ el: HTMLVideoElement | HTMLAudioElement;
21
+ start: number;
22
+ mediaStart: number;
23
+ duration: number;
24
+ end: number;
25
+ volume: number | null;
26
+ playbackRate: number;
27
+ /** The rate lane when the clip has one; otherwise `playbackRate`. */
28
+ rate?: RateSpec;
29
+ loop: boolean;
30
+ /** Source media duration in seconds (from el.duration). Used for loop wrapping. */
31
+ sourceDuration: number | null;
32
+ /**
33
+ * Probed volume keyframes from the GSAP timeline (same probe the renderer
34
+ * uses). When present, `syncRuntimeMedia` drives volume from the envelope
35
+ * rather than from `data-volume` + GSAP-change tracking, eliminating the
36
+ * race between the 60 Hz transport tick and GSAP's own seek.
37
+ */
38
+ volumeKeyframes?: VolumeKeyframe[];
39
+ /** Clip-edge fades from `data-fade-in` / `data-fade-out`; see audioFade.ts. */
40
+ fades?: AudioFades;
41
+ };
42
+ export declare function refreshRuntimeMediaCache(params?: {
43
+ resolveStartSeconds?: (element: Element) => number;
44
+ resolveDurationSeconds?: (element: HTMLVideoElement | HTMLAudioElement) => number | null;
45
+ shouldIncludeElement?: (element: HTMLVideoElement | HTMLAudioElement) => boolean;
46
+ /**
47
+ * Build clips for exactly these elements instead of scanning the document for
48
+ * them. For a caller that already knows which media it needs this pass — the
49
+ * per-seek sync only touches the clips whose active state can change — and so
50
+ * should not pay to re-derive the window of every clip in the composition.
51
+ *
52
+ * Every field is still read FRESH from the element. This narrows which
53
+ * elements are visited, never how current the answer is: `el.duration` can be
54
+ * reset under the caller by an `el.load()` it did not make.
55
+ */
56
+ elements?: Array<HTMLVideoElement | HTMLAudioElement>;
57
+ }): {
58
+ timedMediaEls: Array<HTMLVideoElement | HTMLAudioElement>;
59
+ mediaClips: RuntimeMediaClip[];
60
+ videoClips: RuntimeMediaClip[];
61
+ maxMediaEnd: number;
62
+ };
63
+ /**
64
+ * Drop every per-source sync baseline tracked for `el` — offset drift
65
+ * samples, the seek-past-buffered-range retry latch, and the last
66
+ * runtime-applied volume — so the next `syncRuntimeMedia` tick treats it as
67
+ * a first tick (hard resync, fresh drift baseline) instead of comparing
68
+ * against state computed for a different file. Used both when a clip leaves
69
+ * its active window (below) and by the runtime's proxy-swap helper
70
+ * (mediaProxy.ts) right after an in-place `src` swap, which points the same
71
+ * element at a different file without ever leaving its active window.
72
+ */
73
+ export declare function evictMediaSyncState(el: HTMLMediaElement): void;
74
+ /** Test-only seam: whether any per-source sync state is still tracked for `el`. */
75
+ export declare function hasMediaSyncStateForTest(el: HTMLMediaElement): boolean;
76
+ export declare function syncRuntimeMedia(params: {
77
+ clips: RuntimeMediaClip[];
78
+ timeSeconds: number;
79
+ playing: boolean;
80
+ playbackRate: number;
81
+ /** Force-mute every element (parent-frame proxy owns all audio). Asserted per
82
+ * tick so sub-composition media added mid-playback inherits the silence. */
83
+ outputMuted?: boolean;
84
+ /**
85
+ * User's explicit mute preference (set via `onSetMuted`). Symmetric to
86
+ * `outputMuted` — also asserted per tick — so a sub-composition that
87
+ * activates after the user mutes doesn't briefly play at author volume
88
+ * before the next bridge message lands.
89
+ */
90
+ userMuted?: boolean;
91
+ /**
92
+ * User's volume preference (0–1, set via `onSetVolume`). Multiplied with the
93
+ * per-clip author volume so `data-volume="0.5"` at user volume 0.8 yields 0.4.
94
+ */
95
+ userVolume?: number;
96
+ /**
97
+ * Invoked at most once when a media element's `play()` promise rejects with
98
+ * `NotAllowedError`. The caller is expected to latch and post a single
99
+ * outbound message; further invocations are suppressed by the caller.
100
+ */
101
+ onAutoplayBlocked?: () => void;
102
+ onElementVolume?: (el: HTMLMediaElement, effectiveVolume: number, authorVolume: number) => void;
103
+ /** Is THIS element owned by the Web Audio transport? Owned → mute it (transport
104
+ * plays it); not owned → leave audible (HTMLMedia fallback). Per-element, not a
105
+ * global flag, so a not-yet-claimed track isn't muted by other tracks. */
106
+ isWebAudioOwned?: (el: HTMLMediaElement) => boolean;
107
+ /** Native media routed through WebAudio keeps its upstream element volume at
108
+ * unity; do not mistake that transport write for an authored volume edit. */
109
+ isWebAudioRouted?: (el: HTMLMediaElement) => boolean;
110
+ forceSync?: boolean;
111
+ /** Lets a video clip that runs to the composition end hold its last frame at the terminal time.
112
+ * A thunk, because deriving the duration is only worth it for a clip past its own end. */
113
+ getCompositionDuration: () => number;
114
+ }): void;
115
+ //# sourceMappingURL=media.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../../src/runtime/media.ts"],"names":[],"mappings":"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"}