remotion 4.0.451 → 4.0.453

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 (43) hide show
  1. package/dist/cjs/HtmlInCanvas.d.ts +32 -0
  2. package/dist/cjs/HtmlInCanvas.js +172 -0
  3. package/dist/cjs/PremountContext.d.ts +0 -1
  4. package/dist/cjs/PremountContext.js +0 -1
  5. package/dist/cjs/RemotionRoot.js +1 -1
  6. package/dist/cjs/Sequence.js +1 -9
  7. package/dist/cjs/audio/Audio.js +2 -2
  8. package/dist/cjs/audio/shared-audio-tags.d.ts +33 -12
  9. package/dist/cjs/audio/shared-audio-tags.js +152 -75
  10. package/dist/cjs/audio/use-audio-context.d.ts +4 -1
  11. package/dist/cjs/audio/use-audio-context.js +8 -3
  12. package/dist/cjs/audio/wait-until-actually-resumed.d.ts +2 -0
  13. package/dist/cjs/audio/wait-until-actually-resumed.js +30 -0
  14. package/dist/cjs/canvas-effects/Solid.d.ts +12 -0
  15. package/dist/cjs/canvas-effects/Solid.js +74 -0
  16. package/dist/cjs/canvas-effects/canvas-pool.d.ts +13 -0
  17. package/dist/cjs/canvas-effects/canvas-pool.js +85 -0
  18. package/dist/cjs/canvas-effects/define-effect.d.ts +3 -0
  19. package/dist/cjs/canvas-effects/define-effect.js +24 -0
  20. package/dist/cjs/canvas-effects/effect-internals.d.ts +7 -0
  21. package/dist/cjs/canvas-effects/effect-internals.js +42 -0
  22. package/dist/cjs/canvas-effects/effect-types.d.ts +32 -0
  23. package/dist/cjs/canvas-effects/effect-types.js +13 -0
  24. package/dist/cjs/canvas-effects/gpu-device.d.ts +2 -0
  25. package/dist/cjs/canvas-effects/gpu-device.js +36 -0
  26. package/dist/cjs/canvas-effects/index.d.ts +4 -0
  27. package/dist/cjs/canvas-effects/index.js +8 -0
  28. package/dist/cjs/canvas-effects/run-effect-chain.d.ts +24 -0
  29. package/dist/cjs/canvas-effects/run-effect-chain.js +123 -0
  30. package/dist/cjs/canvas-effects/use-effect-chain-state.d.ts +2 -0
  31. package/dist/cjs/canvas-effects/use-effect-chain-state.js +27 -0
  32. package/dist/cjs/canvas-effects/use-memoized-effects.d.ts +2 -0
  33. package/dist/cjs/canvas-effects/use-memoized-effects.js +21 -0
  34. package/dist/cjs/enable-effects.d.ts +1 -0
  35. package/dist/cjs/enable-effects.js +4 -0
  36. package/dist/cjs/internals.d.ts +19 -8
  37. package/dist/cjs/internals.js +2 -0
  38. package/dist/cjs/use-amplification.js +13 -3
  39. package/dist/cjs/version.d.ts +1 -1
  40. package/dist/cjs/version.js +1 -1
  41. package/dist/esm/index.mjs +212 -106
  42. package/dist/esm/version.mjs +1 -1
  43. package/package.json +2 -2
@@ -0,0 +1,32 @@
1
+ import React from 'react';
2
+ import type { EffectsProp } from './canvas-effects/effect-types.js';
3
+ import type { AbsoluteFillLayout, LayoutAndStyle, SequenceProps } from './Sequence.js';
4
+ export type HtmlInCanvasComposeParams = {
5
+ readonly source: CanvasImageSource;
6
+ readonly target: HTMLCanvasElement;
7
+ readonly frame: number;
8
+ readonly width: number;
9
+ readonly height: number;
10
+ readonly pixelRatio: number;
11
+ };
12
+ export declare const isHtmlInCanvasSupported: () => boolean;
13
+ export type HtmlInCanvasProps = Omit<SequenceProps, 'children' | 'durationInFrames' | keyof LayoutAndStyle> & Omit<AbsoluteFillLayout, 'layout'> & {
14
+ readonly durationInFrames?: number;
15
+ readonly width: number;
16
+ readonly height: number;
17
+ readonly effects?: EffectsProp;
18
+ readonly children: React.ReactNode;
19
+ readonly pixelRatio?: number;
20
+ readonly onCompose?: (params: HtmlInCanvasComposeParams) => void | Promise<void>;
21
+ };
22
+ export declare const HtmlInCanvas: React.ComponentType<Omit<SequenceProps, "children" | "durationInFrames" | "layout"> & Omit<AbsoluteFillLayout, "layout"> & {
23
+ readonly durationInFrames?: number | undefined;
24
+ readonly width: number;
25
+ readonly height: number;
26
+ readonly effects?: EffectsProp | undefined;
27
+ readonly children: React.ReactNode;
28
+ readonly pixelRatio?: number | undefined;
29
+ readonly onCompose?: ((params: HtmlInCanvasComposeParams) => void | Promise<void>) | undefined;
30
+ }> & {
31
+ readonly isHtmlInCanvasSupported: () => boolean;
32
+ };
@@ -0,0 +1,172 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HtmlInCanvas = exports.isHtmlInCanvasSupported = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_1 = require("react");
6
+ const run_effect_chain_js_1 = require("./canvas-effects/run-effect-chain.js");
7
+ const use_effect_chain_state_js_1 = require("./canvas-effects/use-effect-chain-state.js");
8
+ const enable_sequence_stack_traces_js_1 = require("./enable-sequence-stack-traces.js");
9
+ const Sequence_js_1 = require("./Sequence.js");
10
+ const use_current_frame_js_1 = require("./use-current-frame.js");
11
+ const use_delay_render_js_1 = require("./use-delay-render.js");
12
+ const use_video_config_js_1 = require("./use-video-config.js");
13
+ const wrap_in_schema_js_1 = require("./wrap-in-schema.js");
14
+ const isHtmlInCanvasSupported = () => {
15
+ if (typeof document === 'undefined') {
16
+ return false;
17
+ }
18
+ const canvas = document.createElement('canvas');
19
+ const ctx = canvas.getContext('2d');
20
+ return (typeof (ctx === null || ctx === void 0 ? void 0 : ctx.drawElementImage) === 'function' &&
21
+ typeof canvas.requestPaint === 'function');
22
+ };
23
+ exports.isHtmlInCanvasSupported = isHtmlInCanvasSupported;
24
+ const htmlInCanvasSchema = {
25
+ 'style.translate': {
26
+ type: 'translate',
27
+ step: 1,
28
+ default: '0px 0px',
29
+ description: 'Position',
30
+ },
31
+ 'style.scale': {
32
+ type: 'number',
33
+ min: 0.05,
34
+ max: 100,
35
+ step: 0.01,
36
+ default: 1,
37
+ description: 'Scale',
38
+ },
39
+ 'style.rotate': {
40
+ type: 'rotation',
41
+ step: 1,
42
+ default: '0deg',
43
+ description: 'Rotation',
44
+ },
45
+ 'style.opacity': {
46
+ type: 'number',
47
+ min: 0,
48
+ max: 1,
49
+ step: 0.01,
50
+ default: 1,
51
+ description: 'Opacity',
52
+ },
53
+ };
54
+ const HtmlInCanvasInner = ({ width, height, effects = [], children, style, pixelRatio = 1, onCompose, controls, durationInFrames, ...sequenceProps }) => {
55
+ const { durationInFrames: videoDuration } = (0, use_video_config_js_1.useVideoConfig)();
56
+ const resolvedDuration = durationInFrames !== null && durationInFrames !== void 0 ? durationInFrames : videoDuration;
57
+ const frame = (0, use_current_frame_js_1.useCurrentFrame)();
58
+ const { delayRender, continueRender, cancelRender } = (0, use_delay_render_js_1.useDelayRender)();
59
+ const canvasRef = (0, react_1.useRef)(null);
60
+ const sceneRef = (0, react_1.useRef)(null);
61
+ const chainState = (0, use_effect_chain_state_js_1.useEffectChainState)(width, height);
62
+ // Refs so the paint handler always reads fresh values.
63
+ const effectsRef = (0, react_1.useRef)(effects);
64
+ effectsRef.current = effects;
65
+ const frameRef = (0, react_1.useRef)(frame);
66
+ frameRef.current = frame;
67
+ const pixelRatioRef = (0, react_1.useRef)(pixelRatio);
68
+ pixelRatioRef.current = pixelRatio;
69
+ const widthRef = (0, react_1.useRef)(width);
70
+ widthRef.current = width;
71
+ const heightRef = (0, react_1.useRef)(height);
72
+ heightRef.current = height;
73
+ // Track the current delayRender handle so the paint handler can settle it.
74
+ const pendingHandleRef = (0, react_1.useRef)(null);
75
+ const onPaint = (0, react_1.useCallback)(() => {
76
+ const canvas = canvasRef.current;
77
+ const sceneEl = sceneRef.current;
78
+ const handle = pendingHandleRef.current;
79
+ if (!canvas || !sceneEl || !chainState || handle === null) {
80
+ return;
81
+ }
82
+ try {
83
+ const ctx = canvas.getContext('2d');
84
+ if (!ctx) {
85
+ throw new Error('Failed to acquire 2D context for <HtmlInCanvas> canvas');
86
+ }
87
+ const w = widthRef.current;
88
+ const h = heightRef.current;
89
+ // Layout-subtree children are not shown on-screen until rasterized here;
90
+ // effects then read from and write back to this same surface (via pool).
91
+ ctx.reset();
92
+ ctx.drawElementImage(sceneEl, 0, 0, w, h);
93
+ const capturedHandle = handle;
94
+ pendingHandleRef.current = null;
95
+ (0, run_effect_chain_js_1.runEffectChain)({
96
+ state: chainState,
97
+ source: canvas,
98
+ effects: effectsRef.current,
99
+ output: canvas,
100
+ frame: frameRef.current,
101
+ width: w,
102
+ height: h,
103
+ pixelRatio: pixelRatioRef.current,
104
+ })
105
+ .then((completed) => {
106
+ if (completed) {
107
+ continueRender(capturedHandle);
108
+ }
109
+ })
110
+ .catch((err) => {
111
+ cancelRender(err);
112
+ });
113
+ }
114
+ catch (error) {
115
+ cancelRender(error);
116
+ }
117
+ }, [chainState, continueRender, cancelRender]);
118
+ // Set up layoutSubtree and persistent paint listener.
119
+ (0, react_1.useEffect)(() => {
120
+ if (!(0, exports.isHtmlInCanvasSupported)()) {
121
+ cancelRender(new Error('HTML in Canvas is not supported. Open this page in Chrome Canary with chrome://flags/#canvas-draw-element enabled.'));
122
+ return;
123
+ }
124
+ const canvas = canvasRef.current;
125
+ if (!canvas) {
126
+ return;
127
+ }
128
+ canvas.layoutSubtree = true;
129
+ canvas.addEventListener('paint', onPaint);
130
+ return () => {
131
+ canvas.removeEventListener('paint', onPaint);
132
+ };
133
+ }, [onPaint, cancelRender]);
134
+ // On each frame change: block the renderer and request a paint.
135
+ (0, react_1.useEffect)(() => {
136
+ const handle = delayRender(`HtmlInCanvas (frame ${frame})`);
137
+ // Continue a stale handle from a previous frame that never got a paint.
138
+ if (pendingHandleRef.current !== null) {
139
+ continueRender(pendingHandleRef.current);
140
+ }
141
+ pendingHandleRef.current = handle;
142
+ const canvas = canvasRef.current;
143
+ canvas === null || canvas === void 0 ? void 0 : canvas.requestPaint();
144
+ return () => {
145
+ if (pendingHandleRef.current === handle) {
146
+ continueRender(handle);
147
+ pendingHandleRef.current = null;
148
+ }
149
+ };
150
+ }, [frame, delayRender, continueRender]);
151
+ const outerStyle = (0, react_1.useMemo)(() => {
152
+ return {
153
+ position: 'absolute',
154
+ inset: 0,
155
+ width: width + 'px',
156
+ height: height + 'px',
157
+ };
158
+ }, [width, height]);
159
+ const innerStyle = (0, react_1.useMemo)(() => {
160
+ return {
161
+ width,
162
+ height,
163
+ };
164
+ }, [width, height]);
165
+ return (jsx_runtime_1.jsx(Sequence_js_1.Sequence, { durationInFrames: resolvedDuration, name: "<HtmlInCanvas>", controls: controls, ...sequenceProps, style: style, children: jsx_runtime_1.jsx("canvas", { ref: canvasRef, width: width, height: height, style: outerStyle, children: jsx_runtime_1.jsx("div", { ref: sceneRef, style: innerStyle, children: children }) }) }));
166
+ };
167
+ const HtmlInCanvasWrapped = (0, wrap_in_schema_js_1.wrapInSchema)(HtmlInCanvasInner, htmlInCanvasSchema);
168
+ exports.HtmlInCanvas = Object.assign(HtmlInCanvasWrapped, {
169
+ isHtmlInCanvasSupported: exports.isHtmlInCanvasSupported,
170
+ });
171
+ exports.HtmlInCanvas.displayName = 'HtmlInCanvas';
172
+ (0, enable_sequence_stack_traces_js_1.addSequenceStackTraces)(exports.HtmlInCanvas);
@@ -1,6 +1,5 @@
1
1
  export type PremountContextValue = {
2
2
  premountFramesRemaining: number;
3
- playing: boolean;
4
3
  };
5
4
  /**
6
5
  * @internal
@@ -10,5 +10,4 @@ const react_1 = require("react");
10
10
  */
11
11
  exports.PremountContext = (0, react_1.createContext)({
12
12
  premountFramesRemaining: 0,
13
- playing: false,
14
13
  });
@@ -23,6 +23,6 @@ const RemotionRootContexts = ({ children, numberOfAudioTags, logLevel, audioLate
23
23
  const logging = (0, react_1.useMemo)(() => {
24
24
  return { logLevel, mountTime: Date.now() };
25
25
  }, [logLevel]);
26
- return ((0, jsx_runtime_1.jsx)(log_level_context_js_1.LogLevelContext.Provider, { value: logging, children: (0, jsx_runtime_1.jsx)(nonce_js_1.NonceContext.Provider, { value: nonceContext, children: (0, jsx_runtime_1.jsx)(TimelineContext_js_1.TimelineContextProvider, { frameState: frameState, children: (0, jsx_runtime_1.jsx)(use_media_enabled_js_1.MediaEnabledProvider, { videoEnabled: videoEnabled, audioEnabled: audioEnabled, children: (0, jsx_runtime_1.jsx)(EditorProps_js_1.EditorPropsProvider, { children: (0, jsx_runtime_1.jsx)(prefetch_state_js_1.PrefetchProvider, { children: (0, jsx_runtime_1.jsx)(SequenceManager_js_1.SequenceManagerProvider, { visualModeEnabled: visualModeEnabled, children: (0, jsx_runtime_1.jsx)(shared_audio_tags_js_1.SharedAudioContextProvider, { numberOfAudioTags: numberOfAudioTags, audioLatencyHint: audioLatencyHint, audioEnabled: audioEnabled, children: (0, jsx_runtime_1.jsx)(duration_state_js_1.DurationsContextProvider, { children: (0, jsx_runtime_1.jsx)(buffering_js_1.BufferingProvider, { children: children }) }) }) }) }) }) }) }) }) }));
26
+ return ((0, jsx_runtime_1.jsx)(log_level_context_js_1.LogLevelContext.Provider, { value: logging, children: (0, jsx_runtime_1.jsx)(nonce_js_1.NonceContext.Provider, { value: nonceContext, children: (0, jsx_runtime_1.jsx)(TimelineContext_js_1.TimelineContextProvider, { frameState: frameState, children: (0, jsx_runtime_1.jsx)(use_media_enabled_js_1.MediaEnabledProvider, { videoEnabled: videoEnabled, audioEnabled: audioEnabled, children: (0, jsx_runtime_1.jsx)(EditorProps_js_1.EditorPropsProvider, { children: (0, jsx_runtime_1.jsx)(prefetch_state_js_1.PrefetchProvider, { children: (0, jsx_runtime_1.jsx)(SequenceManager_js_1.SequenceManagerProvider, { visualModeEnabled: visualModeEnabled, children: (0, jsx_runtime_1.jsx)(duration_state_js_1.DurationsContextProvider, { children: (0, jsx_runtime_1.jsx)(buffering_js_1.BufferingProvider, { children: (0, jsx_runtime_1.jsx)(shared_audio_tags_js_1.SharedAudioContextProvider, { audioLatencyHint: audioLatencyHint, audioEnabled: audioEnabled, children: (0, jsx_runtime_1.jsx)(shared_audio_tags_js_1.SharedAudioTagsContextProvider, { numberOfAudioTags: numberOfAudioTags, children: children }) }) }) }) }) }) }) }) }) }) }));
27
27
  };
28
28
  exports.RemotionRootContexts = RemotionRootContexts;
@@ -202,15 +202,7 @@ const PremountedPostmountedSequenceRefForwardingFunction = (props, ref) => {
202
202
  styleWhilePremounted,
203
203
  styleWhilePostmounted,
204
204
  ]);
205
- const { playing } = (0, timeline_position_state_js_1.useTimelineContext)();
206
- const premountFramesRemaining = premountingActive ? from - frame : 0;
207
- const premountContextValue = (0, react_1.useMemo)(() => {
208
- return {
209
- premountFramesRemaining,
210
- playing: parentPremountContext.playing || playing,
211
- };
212
- }, [premountFramesRemaining, parentPremountContext.playing, playing]);
213
- return ((0, jsx_runtime_1.jsx)(PremountContext_js_1.PremountContext.Provider, { value: premountContextValue, children: (0, jsx_runtime_1.jsx)(freeze_js_1.Freeze, { frame: freezeFrame, active: isFreezingActive, children: (0, jsx_runtime_1.jsx)(exports.Sequence, { ref: ref, from: from, durationInFrames: durationInFrames, style: style, _remotionInternalPremountDisplay: premountFor, _remotionInternalPostmountDisplay: postmountFor, _remotionInternalIsPremounting: premountingActive, _remotionInternalIsPostmounting: postmountingActive, ...otherProps }) }) }));
205
+ return ((0, jsx_runtime_1.jsx)(freeze_js_1.Freeze, { frame: freezeFrame, active: isFreezingActive, children: (0, jsx_runtime_1.jsx)(exports.Sequence, { ref: ref, from: from, durationInFrames: durationInFrames, style: style, _remotionInternalPremountDisplay: premountFor, _remotionInternalPostmountDisplay: postmountFor, _remotionInternalIsPremounting: premountingActive, _remotionInternalIsPostmounting: postmountingActive, ...otherProps }) }));
214
206
  };
215
207
  const PremountedPostmountedSequence = (0, react_1.forwardRef)(PremountedPostmountedSequenceRefForwardingFunction);
216
208
  const SequenceRefForwardingFunction = (props, ref) => {
@@ -21,7 +21,7 @@ const AudioForRendering_js_1 = require("./AudioForRendering.js");
21
21
  const shared_audio_tags_js_1 = require("./shared-audio-tags.js");
22
22
  const AudioRefForwardingFunction = (props, ref) => {
23
23
  var _a, _b, _c;
24
- const audioContext = (0, react_1.useContext)(shared_audio_tags_js_1.SharedAudioContext);
24
+ const audioTagsContext = (0, react_1.useContext)(shared_audio_tags_js_1.SharedAudioTagsContext);
25
25
  const { startFrom, endAt, trimBefore, trimAfter, name, stack, pauseWhenBuffering, showInTimeline, onError: onRemotionError, ...otherProps } = props;
26
26
  const { loop, ...propsOtherThanLoop } = props;
27
27
  const { fps } = (0, use_video_config_js_1.useVideoConfig)();
@@ -84,7 +84,7 @@ const AudioRefForwardingFunction = (props, ref) => {
84
84
  if (environment.isRendering) {
85
85
  return ((0, jsx_runtime_1.jsx)(AudioForRendering_js_1.AudioForRendering, { onDuration: onDuration, ...props, ref: ref, onNativeError: onError, _remotionInternalNeedsDurationCalculation: Boolean(loop) }));
86
86
  }
87
- return ((0, jsx_runtime_1.jsx)(AudioForPreview_js_1.AudioForPreview, { _remotionInternalNativeLoopPassed: (_c = props._remotionInternalNativeLoopPassed) !== null && _c !== void 0 ? _c : false, _remotionInternalStack: stack !== null && stack !== void 0 ? stack : null, shouldPreMountAudioTags: audioContext !== null && audioContext.numberOfAudioTags > 0, ...props, ref: ref, onNativeError: onError, onDuration: onDuration,
87
+ return ((0, jsx_runtime_1.jsx)(AudioForPreview_js_1.AudioForPreview, { _remotionInternalNativeLoopPassed: (_c = props._remotionInternalNativeLoopPassed) !== null && _c !== void 0 ? _c : false, _remotionInternalStack: stack !== null && stack !== void 0 ? stack : null, shouldPreMountAudioTags: audioTagsContext !== null && audioTagsContext.numberOfAudioTags > 0, ...props, ref: ref, onNativeError: onError, onDuration: onDuration,
88
88
  // Proposal: Make this default to true in v5
89
89
  pauseWhenBuffering: pauseWhenBuffering !== null && pauseWhenBuffering !== void 0 ? pauseWhenBuffering : false, _remotionInternalNeedsDurationCalculation: Boolean(loop), showInTimeline: showInTimeline !== null && showInTimeline !== void 0 ? showInTimeline : true }));
90
90
  };
@@ -28,17 +28,39 @@ export type ScheduleAudioNodeResult = {
28
28
  scheduledTime: number;
29
29
  } | {
30
30
  type: 'not-started';
31
+ reason: string;
31
32
  };
32
33
  export type ScheduleAudioNodeOptions = {
33
34
  readonly node: AudioBufferSourceNode;
34
- readonly targetTime: number;
35
35
  readonly mediaTimestamp: number;
36
36
  readonly currentTime: number;
37
- readonly sequenceEndTime: number;
38
- readonly sequenceStartTime: number;
39
- readonly debugAudioScheduling: boolean;
37
+ readonly scheduledTime: number;
38
+ readonly originalUnloopedMediaTimestamp: number;
39
+ readonly duration: number;
40
+ readonly offset: number;
40
41
  };
41
- type SharedContext = {
42
+ export type AudioSyncAnchorEvent = 'changed';
43
+ export type AudioSyncAnchorListener = (event: AudioSyncAnchorEvent) => void;
44
+ export type AudioSyncAnchorEmitter = {
45
+ dispatch: (event: AudioSyncAnchorEvent) => void;
46
+ subscribe: (listener: AudioSyncAnchorListener) => {
47
+ remove: () => void;
48
+ };
49
+ };
50
+ type SharedAudioContextValue = {
51
+ audioContext: AudioContext | null;
52
+ gainNode: GainNode | null;
53
+ audioSyncAnchor: {
54
+ value: number;
55
+ };
56
+ audioSyncAnchorEmitter: AudioSyncAnchorEmitter;
57
+ scheduleAudioNode: (options: ScheduleAudioNodeOptions) => ScheduleAudioNodeResult;
58
+ resume: () => Promise<void>;
59
+ suspend: () => void;
60
+ getIsResumingAudioContext: () => Promise<void> | null;
61
+ unscheduleAudioNode: (node: AudioBufferSourceNode) => void;
62
+ };
63
+ type SharedAudioTagsContextValue = {
42
64
  registerAudio: (options: {
43
65
  aud: AudioHTMLAttributes<HTMLAudioElement>;
44
66
  audioId: string;
@@ -55,19 +77,18 @@ type SharedContext = {
55
77
  }) => void;
56
78
  playAllAudios: () => void;
57
79
  numberOfAudioTags: number;
58
- audioContext: AudioContext | null;
59
- audioSyncAnchor: {
60
- value: number;
61
- };
62
- scheduleAudioNode: (options: ScheduleAudioNodeOptions) => ScheduleAudioNodeResult;
63
80
  };
64
- export declare const SharedAudioContext: React.Context<SharedContext | null>;
81
+ export declare const SharedAudioContext: React.Context<SharedAudioContextValue | null>;
82
+ export declare const SharedAudioTagsContext: React.Context<SharedAudioTagsContextValue | null>;
65
83
  export declare const SharedAudioContextProvider: React.FC<{
66
- readonly numberOfAudioTags: number;
67
84
  readonly children: React.ReactNode;
68
85
  readonly audioLatencyHint: AudioContextLatencyCategory;
69
86
  readonly audioEnabled: boolean;
70
87
  }>;
88
+ export declare const SharedAudioTagsContextProvider: React.FC<{
89
+ readonly numberOfAudioTags: number;
90
+ readonly children: React.ReactNode;
91
+ }>;
71
92
  export declare const useSharedAudio: ({ aud, audioId, premounting, postmounting, }: {
72
93
  aud: AudioHTMLAttributes<HTMLAudioElement>;
73
94
  audioId: string;