remotion 3.3.55 → 3.3.58
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/cjs/audio/Audio.d.ts +1 -1
- package/dist/cjs/index.d.ts +1 -0
- package/dist/cjs/internals.d.ts +1 -1
- package/dist/cjs/multiple-versions-warning.js +1 -1
- package/dist/cjs/use-video.d.ts +1 -1
- package/dist/cjs/version.d.ts +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/esm/index.mjs +2 -2
- package/dist/esm/version.mjs +1 -1
- package/dist/tsconfig-esm.tsbuildinfo +1 -0
- package/package.json +3 -3
- package/tsconfig-esm.json +12 -0
- package/dist/esm/AbsoluteFill.js +0 -25
- package/dist/esm/CanUseRemotionHooks.js +0 -6
- package/dist/esm/Clipper.js +0 -20
- package/dist/esm/Composition.js +0 -112
- package/dist/esm/CompositionManager.js +0 -137
- package/dist/esm/Folder.js +0 -33
- package/dist/esm/IFrame.js +0 -25
- package/dist/esm/Img.js +0 -53
- package/dist/esm/NativeLayers.js +0 -25
- package/dist/esm/Null.js +0 -21
- package/dist/esm/RemotionRoot.js +0 -69
- package/dist/esm/Sequence.js +0 -128
- package/dist/esm/SequenceContext.js +0 -2
- package/dist/esm/Still.js +0 -9
- package/dist/esm/absolute-src.js +0 -3
- package/dist/esm/asset-types.js +0 -1
- package/dist/esm/audio/Audio.js +0 -53
- package/dist/esm/audio/AudioForDevelopment.js +0 -91
- package/dist/esm/audio/AudioForRendering.js +0 -108
- package/dist/esm/audio/index.js +0 -2
- package/dist/esm/audio/props.js +0 -1
- package/dist/esm/audio/shared-audio-tags.js +0 -194
- package/dist/esm/audio/use-audio-frame.js +0 -18
- package/dist/esm/bezier.js +0 -110
- package/dist/esm/cancel-render.js +0 -43
- package/dist/esm/config/input-props.js +0 -27
- package/dist/esm/config.js +0 -17
- package/dist/esm/default-css.js +0 -44
- package/dist/esm/delay-render.js +0 -72
- package/dist/esm/easing.js +0 -77
- package/dist/esm/freeze.js +0 -34
- package/dist/esm/get-asset-file-name.js +0 -10
- package/dist/esm/get-environment.js +0 -29
- package/dist/esm/get-preview-dom-element.js +0 -3
- package/dist/esm/get-static-files.js +0 -31
- package/dist/esm/get-timeline-clip-name.js +0 -21
- package/dist/esm/index.js +0 -49
- package/dist/esm/internals.js +0 -75
- package/dist/esm/interpolate-colors.js +0 -401
- package/dist/esm/interpolate.js +0 -123
- package/dist/esm/is-approximately-the-same.js +0 -4
- package/dist/esm/is-player.js +0 -9
- package/dist/esm/loading-indicator.js +0 -31
- package/dist/esm/loop/index.js +0 -29
- package/dist/esm/multiple-versions-warning.js +0 -28
- package/dist/esm/nonce.js +0 -13
- package/dist/esm/play-and-handle-not-allowed-error.js +0 -40
- package/dist/esm/portal-node.js +0 -19
- package/dist/esm/prefetch-state.js +0 -22
- package/dist/esm/prefetch.js +0 -107
- package/dist/esm/random.js +0 -37
- package/dist/esm/register-root.js +0 -31
- package/dist/esm/series/flatten-children.js +0 -12
- package/dist/esm/series/index.js +0 -61
- package/dist/esm/setup-env-variables.js +0 -32
- package/dist/esm/spring/index.js +0 -50
- package/dist/esm/spring/measure-spring.js +0 -64
- package/dist/esm/spring/spring-utils.js +0 -99
- package/dist/esm/static-file.js +0 -29
- package/dist/esm/test/Img.test.js +0 -20
- package/dist/esm/test/absolute-src.test.js +0 -16
- package/dist/esm/test/audio-for-rendering.test.js +0 -83
- package/dist/esm/test/audio.test.js +0 -51
- package/dist/esm/test/bezier.test.js +0 -50
- package/dist/esm/test/composition-rules.test.js +0 -28
- package/dist/esm/test/composition-validation.test.js +0 -97
- package/dist/esm/test/easing.test.js +0 -189
- package/dist/esm/test/expect-to-throw.js +0 -11
- package/dist/esm/test/freeze.test.js +0 -63
- package/dist/esm/test/get-asset-file-name.test.js +0 -12
- package/dist/esm/test/get-current-time.test.js +0 -72
- package/dist/esm/test/input-props.test.js +0 -29
- package/dist/esm/test/interpolate.test.js +0 -136
- package/dist/esm/test/interpolateColors.test.js +0 -61
- package/dist/esm/test/loop-validation.test.js +0 -68
- package/dist/esm/test/measure-spring.test.js +0 -43
- package/dist/esm/test/media-validation.test.js +0 -45
- package/dist/esm/test/nested-sequences.test.js +0 -130
- package/dist/esm/test/not-all-props-in-media-tags.test.js +0 -28
- package/dist/esm/test/random.test.js +0 -58
- package/dist/esm/test/ready-manager.test.js +0 -27
- package/dist/esm/test/render-hook.js +0 -20
- package/dist/esm/test/sequence-from-initial-offset.test.js +0 -33
- package/dist/esm/test/sequence-validation.test.js +0 -45
- package/dist/esm/test/series.test.js +0 -113
- package/dist/esm/test/spring.test.js +0 -36
- package/dist/esm/test/truthy.test.js +0 -22
- package/dist/esm/test/use-audio-frame.test.js +0 -53
- package/dist/esm/test/use-media-in-timeline.test.js +0 -49
- package/dist/esm/test/use-media-tag-volume.test.js +0 -44
- package/dist/esm/test/use-sync-volume-with-media-tag.test.js +0 -53
- package/dist/esm/test/validate-start-from-props.test.js +0 -37
- package/dist/esm/test/video.test.js +0 -55
- package/dist/esm/test/volume-prop.test.js +0 -93
- package/dist/esm/test/wrap-sequence-context.js +0 -37
- package/dist/esm/timeline-position-state.js +0 -35
- package/dist/esm/truthy.js +0 -3
- package/dist/esm/use-current-frame.js +0 -23
- package/dist/esm/use-lazy-component.js +0 -22
- package/dist/esm/use-media-in-timeline.js +0 -125
- package/dist/esm/use-media-playback.js +0 -73
- package/dist/esm/use-media-tag-volume.js +0 -27
- package/dist/esm/use-sync-volume-with-media-tag.js +0 -17
- package/dist/esm/use-unsafe-video-config.js +0 -23
- package/dist/esm/use-video-config.js +0 -26
- package/dist/esm/use-video.js +0 -24
- package/dist/esm/validate-frame.js +0 -20
- package/dist/esm/validate-media-props.js +0 -20
- package/dist/esm/validate-start-from-props.js +0 -27
- package/dist/esm/validation/validate-composition-id.js +0 -8
- package/dist/esm/validation/validate-dimensions.js +0 -17
- package/dist/esm/validation/validate-duration-in-frames.js +0 -11
- package/dist/esm/validation/validate-folder-name.js +0 -14
- package/dist/esm/validation/validate-fps.js +0 -17
- package/dist/esm/validation/validate-offthreadvideo-image-format.js +0 -11
- package/dist/esm/validation/validation-spring-duration.js +0 -17
- package/dist/esm/version.js +0 -2
- package/dist/esm/video/OffthreadVideo.js +0 -33
- package/dist/esm/video/OffthreadVideoForRendering.js +0 -100
- package/dist/esm/video/Video.js +0 -51
- package/dist/esm/video/VideoForDevelopment.js +0 -110
- package/dist/esm/video/VideoForRendering.js +0 -200
- package/dist/esm/video/duration-state.js +0 -29
- package/dist/esm/video/get-current-time.js +0 -26
- package/dist/esm/video/index.js +0 -2
- package/dist/esm/video/props.js +0 -1
- package/dist/esm/video/video-fragment.js +0 -55
- package/dist/esm/video-config.js +0 -1
- package/dist/esm/volume-position-state.js +0 -27
- package/dist/esm/volume-prop.js +0 -20
- package/dist/esm/warn-about-non-seekable-media.js +0 -30
- package/dist/esm/wrap-remotion-context.js +0 -45
package/dist/esm/Folder.js
DELETED
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { createContext, useContext, useEffect, useMemo } from 'react';
|
|
3
|
-
import { CompositionManager } from './CompositionManager.js';
|
|
4
|
-
import { truthy } from './truthy.js';
|
|
5
|
-
import { validateFolderName } from './validation/validate-folder-name.js';
|
|
6
|
-
export const FolderContext = createContext({
|
|
7
|
-
folderName: null,
|
|
8
|
-
parentName: null,
|
|
9
|
-
});
|
|
10
|
-
/**
|
|
11
|
-
* @description By wrapping a <Composition /> inside a <Folder />, you can visually categorize it in your sidebar, should you have many compositions.
|
|
12
|
-
* @see [Documentation](https://www.remotion.dev/docs/folder)
|
|
13
|
-
*/
|
|
14
|
-
export const Folder = ({ name, children, }) => {
|
|
15
|
-
const parent = useContext(FolderContext);
|
|
16
|
-
const { registerFolder, unregisterFolder } = useContext(CompositionManager);
|
|
17
|
-
validateFolderName(name);
|
|
18
|
-
const parentNameArr = [parent.parentName, parent.folderName].filter(truthy);
|
|
19
|
-
const parentName = parentNameArr.length === 0 ? null : parentNameArr.join('/');
|
|
20
|
-
const value = useMemo(() => {
|
|
21
|
-
return {
|
|
22
|
-
folderName: name,
|
|
23
|
-
parentName,
|
|
24
|
-
};
|
|
25
|
-
}, [name, parentName]);
|
|
26
|
-
useEffect(() => {
|
|
27
|
-
registerFolder(name, parentName);
|
|
28
|
-
return () => {
|
|
29
|
-
unregisterFolder(name, parentName);
|
|
30
|
-
};
|
|
31
|
-
}, [name, parent.folderName, parentName, registerFolder, unregisterFolder]);
|
|
32
|
-
return (_jsx(FolderContext.Provider, { value: value, children: children }));
|
|
33
|
-
};
|
package/dist/esm/IFrame.js
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { forwardRef, useCallback, useState } from 'react';
|
|
3
|
-
import { continueRender, delayRender } from './delay-render.js';
|
|
4
|
-
const IFrameRefForwarding = ({ onLoad, onError, ...props }, ref) => {
|
|
5
|
-
const [handle] = useState(() => delayRender(`Loading <IFrame> with source ${props.src}`));
|
|
6
|
-
const didLoad = useCallback((e) => {
|
|
7
|
-
continueRender(handle);
|
|
8
|
-
onLoad === null || onLoad === void 0 ? void 0 : onLoad(e);
|
|
9
|
-
}, [handle, onLoad]);
|
|
10
|
-
const didGetError = useCallback((e) => {
|
|
11
|
-
continueRender(handle);
|
|
12
|
-
if (onError) {
|
|
13
|
-
onError(e);
|
|
14
|
-
}
|
|
15
|
-
else {
|
|
16
|
-
console.error('Error loading iframe:', e, 'Handle the event using the onError() prop to make this message disappear.');
|
|
17
|
-
}
|
|
18
|
-
}, [handle, onError]);
|
|
19
|
-
return _jsx("iframe", { ...props, ref: ref, onError: didGetError, onLoad: didLoad });
|
|
20
|
-
};
|
|
21
|
-
/**
|
|
22
|
-
* @description The <IFrame /> can be used like a regular <iframe> HTML tag.
|
|
23
|
-
* @see [Documentation](https://www.remotion.dev/docs/iframe)
|
|
24
|
-
*/
|
|
25
|
-
export const IFrame = forwardRef(IFrameRefForwarding);
|
package/dist/esm/Img.js
DELETED
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { forwardRef, useCallback, useImperativeHandle, useLayoutEffect, useRef, } from 'react';
|
|
3
|
-
import { continueRender, delayRender } from './delay-render.js';
|
|
4
|
-
import { useRemotionEnvironment } from './get-environment.js';
|
|
5
|
-
import { usePreload } from './prefetch.js';
|
|
6
|
-
const ImgRefForwarding = ({ onError, src, ...props }, ref) => {
|
|
7
|
-
const imageRef = useRef(null);
|
|
8
|
-
const environment = useRemotionEnvironment();
|
|
9
|
-
useImperativeHandle(ref, () => {
|
|
10
|
-
return imageRef.current;
|
|
11
|
-
}, []);
|
|
12
|
-
const actualSrc = usePreload(src);
|
|
13
|
-
const didGetError = useCallback((e) => {
|
|
14
|
-
var _a;
|
|
15
|
-
if (onError) {
|
|
16
|
-
onError(e);
|
|
17
|
-
}
|
|
18
|
-
else {
|
|
19
|
-
console.error('Error loading image with src:', (_a = imageRef.current) === null || _a === void 0 ? void 0 : _a.src, e, 'Handle the event using the onError() prop to make this message disappear.');
|
|
20
|
-
}
|
|
21
|
-
}, [onError]);
|
|
22
|
-
// If image source switches, make new handle
|
|
23
|
-
if (environment === 'rendering') {
|
|
24
|
-
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
25
|
-
useLayoutEffect(() => {
|
|
26
|
-
if (process.env.NODE_ENV === 'test') {
|
|
27
|
-
return;
|
|
28
|
-
}
|
|
29
|
-
const newHandle = delayRender('Loading <Img> with src=' + src);
|
|
30
|
-
const { current } = imageRef;
|
|
31
|
-
const didLoad = () => {
|
|
32
|
-
continueRender(newHandle);
|
|
33
|
-
};
|
|
34
|
-
if (current === null || current === void 0 ? void 0 : current.complete) {
|
|
35
|
-
continueRender(newHandle);
|
|
36
|
-
}
|
|
37
|
-
else {
|
|
38
|
-
current === null || current === void 0 ? void 0 : current.addEventListener('load', didLoad, { once: true });
|
|
39
|
-
}
|
|
40
|
-
// If tag gets unmounted, clear pending handles because image is not going to load
|
|
41
|
-
return () => {
|
|
42
|
-
current === null || current === void 0 ? void 0 : current.removeEventListener('load', didLoad);
|
|
43
|
-
continueRender(newHandle);
|
|
44
|
-
};
|
|
45
|
-
}, [src]);
|
|
46
|
-
}
|
|
47
|
-
return (_jsx("img", { ...props, ref: imageRef, src: actualSrc, onError: didGetError }));
|
|
48
|
-
};
|
|
49
|
-
/**
|
|
50
|
-
* @description Works just like a regular HTML img tag. When you use the <Img> tag, Remotion will ensure that the image is loaded before rendering the frame.
|
|
51
|
-
* @see [Documentation](https://www.remotion.dev/docs/img)
|
|
52
|
-
*/
|
|
53
|
-
export const Img = forwardRef(ImgRefForwarding);
|
package/dist/esm/NativeLayers.js
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { createContext, useLayoutEffect, useMemo, useState } from 'react';
|
|
3
|
-
export const NativeLayersContext = createContext({
|
|
4
|
-
setClipRegion: () => {
|
|
5
|
-
throw new Error('NativeLayers not set');
|
|
6
|
-
},
|
|
7
|
-
clipRegion: null,
|
|
8
|
-
});
|
|
9
|
-
export const NativeLayersProvider = ({ children, }) => {
|
|
10
|
-
const [clipRegion, setClipRegion] = useState(null);
|
|
11
|
-
const context = useMemo(() => {
|
|
12
|
-
return {
|
|
13
|
-
setClipRegion,
|
|
14
|
-
clipRegion,
|
|
15
|
-
};
|
|
16
|
-
}, [clipRegion, setClipRegion]);
|
|
17
|
-
useLayoutEffect(() => {
|
|
18
|
-
if (typeof window !== 'undefined') {
|
|
19
|
-
window.remotion_getClipRegion = () => {
|
|
20
|
-
return clipRegion;
|
|
21
|
-
};
|
|
22
|
-
}
|
|
23
|
-
}, [clipRegion, setClipRegion]);
|
|
24
|
-
return (_jsx(NativeLayersContext.Provider, { value: context, children: children }));
|
|
25
|
-
};
|
package/dist/esm/Null.js
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { useContext, useEffect } from 'react';
|
|
2
|
-
import { NativeLayersContext } from './NativeLayers.js';
|
|
3
|
-
export const Null = () => {
|
|
4
|
-
const { setClipRegion } = useContext(NativeLayersContext);
|
|
5
|
-
useEffect(() => {
|
|
6
|
-
setClipRegion((c) => {
|
|
7
|
-
if (c === null) {
|
|
8
|
-
return 'hide';
|
|
9
|
-
}
|
|
10
|
-
// Rendering multiple <Null> is fine, because they are all hidden
|
|
11
|
-
if (c === 'hide') {
|
|
12
|
-
return 'hide';
|
|
13
|
-
}
|
|
14
|
-
throw new Error('Cannot render <Null>, because another component clipping the region was already rendered (most likely <Clipper>)');
|
|
15
|
-
});
|
|
16
|
-
return () => {
|
|
17
|
-
setClipRegion(null);
|
|
18
|
-
};
|
|
19
|
-
}, [setClipRegion]);
|
|
20
|
-
return null;
|
|
21
|
-
};
|
package/dist/esm/RemotionRoot.js
DELETED
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { useEffect, useLayoutEffect, useMemo, useRef, useState, } from 'react';
|
|
3
|
-
import { SharedAudioContextProvider } from './audio/shared-audio-tags.js';
|
|
4
|
-
import { CompositionManagerProvider } from './CompositionManager.js';
|
|
5
|
-
import { continueRender, delayRender } from './delay-render.js';
|
|
6
|
-
import { NativeLayersProvider } from './NativeLayers.js';
|
|
7
|
-
import { NonceContext } from './nonce.js';
|
|
8
|
-
import { PrefetchProvider } from './prefetch-state.js';
|
|
9
|
-
import { random } from './random.js';
|
|
10
|
-
import { SetTimelineContext, TimelineContext } from './timeline-position-state.js';
|
|
11
|
-
import { DurationsContextProvider } from './video/duration-state.js';
|
|
12
|
-
export const RemotionRoot = ({ children, numberOfAudioTags }) => {
|
|
13
|
-
var _a;
|
|
14
|
-
const [remotionRootId] = useState(() => String(random(null)));
|
|
15
|
-
const [frame, setFrame] = useState((_a = window.remotion_initialFrame) !== null && _a !== void 0 ? _a : 0);
|
|
16
|
-
const [playing, setPlaying] = useState(false);
|
|
17
|
-
const imperativePlaying = useRef(false);
|
|
18
|
-
const [fastRefreshes, setFastRefreshes] = useState(0);
|
|
19
|
-
const [playbackRate, setPlaybackRate] = useState(1);
|
|
20
|
-
const audioAndVideoTags = useRef([]);
|
|
21
|
-
useLayoutEffect(() => {
|
|
22
|
-
if (typeof window !== 'undefined') {
|
|
23
|
-
window.remotion_setFrame = (f) => {
|
|
24
|
-
const id = delayRender(`Setting the current frame to ${f}`);
|
|
25
|
-
setFrame(f);
|
|
26
|
-
requestAnimationFrame(() => continueRender(id));
|
|
27
|
-
};
|
|
28
|
-
window.remotion_isPlayer = false;
|
|
29
|
-
}
|
|
30
|
-
}, []);
|
|
31
|
-
const timelineContextValue = useMemo(() => {
|
|
32
|
-
return {
|
|
33
|
-
frame,
|
|
34
|
-
playing,
|
|
35
|
-
imperativePlaying,
|
|
36
|
-
rootId: remotionRootId,
|
|
37
|
-
playbackRate,
|
|
38
|
-
setPlaybackRate,
|
|
39
|
-
audioAndVideoTags,
|
|
40
|
-
};
|
|
41
|
-
}, [frame, playbackRate, playing, remotionRootId]);
|
|
42
|
-
const setTimelineContextValue = useMemo(() => {
|
|
43
|
-
return {
|
|
44
|
-
setFrame,
|
|
45
|
-
setPlaying,
|
|
46
|
-
};
|
|
47
|
-
}, []);
|
|
48
|
-
const nonceContext = useMemo(() => {
|
|
49
|
-
let counter = 0;
|
|
50
|
-
return {
|
|
51
|
-
getNonce: () => counter++,
|
|
52
|
-
fastRefreshes,
|
|
53
|
-
};
|
|
54
|
-
}, [fastRefreshes]);
|
|
55
|
-
useEffect(() => {
|
|
56
|
-
if (module.hot) {
|
|
57
|
-
module.hot.addStatusHandler((status) => {
|
|
58
|
-
if (status === 'idle') {
|
|
59
|
-
setFastRefreshes((i) => i + 1);
|
|
60
|
-
}
|
|
61
|
-
});
|
|
62
|
-
}
|
|
63
|
-
}, []);
|
|
64
|
-
return (_jsx(NonceContext.Provider, { value: nonceContext, children: _jsx(TimelineContext.Provider, { value: timelineContextValue, children: _jsx(SetTimelineContext.Provider, { value: setTimelineContextValue, children: _jsx(PrefetchProvider, { children: _jsx(NativeLayersProvider, { children: _jsx(CompositionManagerProvider, { children: _jsx(DurationsContextProvider, { children: _jsx(SharedAudioContextProvider
|
|
65
|
-
// In the preview, which is mostly played on Desktop, we opt out of the autoplay policy fix as described in https://github.com/remotion-dev/remotion/pull/554, as it mostly applies to mobile.
|
|
66
|
-
, {
|
|
67
|
-
// In the preview, which is mostly played on Desktop, we opt out of the autoplay policy fix as described in https://github.com/remotion-dev/remotion/pull/554, as it mostly applies to mobile.
|
|
68
|
-
numberOfAudioTags: numberOfAudioTags, children: children }) }) }) }) }) }) }) }));
|
|
69
|
-
};
|
package/dist/esm/Sequence.js
DELETED
|
@@ -1,128 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { forwardRef, useContext, useEffect, useMemo, useState, } from 'react';
|
|
3
|
-
import { AbsoluteFill } from './AbsoluteFill.js';
|
|
4
|
-
import { CompositionManager } from './CompositionManager.js';
|
|
5
|
-
import { useRemotionEnvironment } from './get-environment.js';
|
|
6
|
-
import { getTimelineClipName } from './get-timeline-clip-name.js';
|
|
7
|
-
import { useNonce } from './nonce.js';
|
|
8
|
-
import { SequenceContext } from './SequenceContext.js';
|
|
9
|
-
import { TimelineContext, useTimelinePosition, } from './timeline-position-state.js';
|
|
10
|
-
import { useVideoConfig } from './use-video-config.js';
|
|
11
|
-
const SequenceRefForwardingFunction = ({ from = 0, durationInFrames = Infinity, children, name, showInTimeline = true, showLoopTimesInTimeline, ...other }, ref) => {
|
|
12
|
-
const { layout = 'absolute-fill' } = other;
|
|
13
|
-
const [id] = useState(() => String(Math.random()));
|
|
14
|
-
const parentSequence = useContext(SequenceContext);
|
|
15
|
-
const { rootId } = useContext(TimelineContext);
|
|
16
|
-
const cumulatedFrom = parentSequence
|
|
17
|
-
? parentSequence.cumulatedFrom + parentSequence.relativeFrom
|
|
18
|
-
: 0;
|
|
19
|
-
const nonce = useNonce();
|
|
20
|
-
const environment = useRemotionEnvironment();
|
|
21
|
-
if (layout !== 'absolute-fill' && layout !== 'none') {
|
|
22
|
-
throw new TypeError(`The layout prop of <Sequence /> expects either "absolute-fill" or "none", but you passed: ${layout}`);
|
|
23
|
-
}
|
|
24
|
-
// @ts-expect-error
|
|
25
|
-
if (layout === 'none' && typeof other.style !== 'undefined') {
|
|
26
|
-
throw new TypeError('If layout="none", you may not pass a style.');
|
|
27
|
-
}
|
|
28
|
-
if (typeof durationInFrames !== 'number') {
|
|
29
|
-
throw new TypeError(`You passed to durationInFrames an argument of type ${typeof durationInFrames}, but it must be a number.`);
|
|
30
|
-
}
|
|
31
|
-
if (durationInFrames <= 0) {
|
|
32
|
-
throw new TypeError(`durationInFrames must be positive, but got ${durationInFrames}`);
|
|
33
|
-
}
|
|
34
|
-
// Infinity is non-integer but allowed!
|
|
35
|
-
if (durationInFrames % 1 !== 0 && Number.isFinite(durationInFrames)) {
|
|
36
|
-
throw new TypeError(`The "durationInFrames" of a sequence must be an integer, but got ${durationInFrames}.`);
|
|
37
|
-
}
|
|
38
|
-
if (typeof from !== 'number') {
|
|
39
|
-
throw new TypeError(`You passed to the "from" props of your <Sequence> an argument of type ${typeof from}, but it must be a number.`);
|
|
40
|
-
}
|
|
41
|
-
if (from % 1 !== 0) {
|
|
42
|
-
throw new TypeError(`The "from" prop of a sequence must be an integer, but got ${from}.`);
|
|
43
|
-
}
|
|
44
|
-
const absoluteFrame = useTimelinePosition();
|
|
45
|
-
const videoConfig = useVideoConfig();
|
|
46
|
-
const parentSequenceDuration = parentSequence
|
|
47
|
-
? Math.min(parentSequence.durationInFrames - from, durationInFrames)
|
|
48
|
-
: durationInFrames;
|
|
49
|
-
const actualDurationInFrames = Math.max(0, Math.min(videoConfig.durationInFrames - from, parentSequenceDuration));
|
|
50
|
-
const { registerSequence, unregisterSequence } = useContext(CompositionManager);
|
|
51
|
-
const contextValue = useMemo(() => {
|
|
52
|
-
var _a;
|
|
53
|
-
return {
|
|
54
|
-
cumulatedFrom,
|
|
55
|
-
relativeFrom: from,
|
|
56
|
-
durationInFrames: actualDurationInFrames,
|
|
57
|
-
parentFrom: (_a = parentSequence === null || parentSequence === void 0 ? void 0 : parentSequence.relativeFrom) !== null && _a !== void 0 ? _a : 0,
|
|
58
|
-
id,
|
|
59
|
-
};
|
|
60
|
-
}, [
|
|
61
|
-
cumulatedFrom,
|
|
62
|
-
from,
|
|
63
|
-
actualDurationInFrames,
|
|
64
|
-
parentSequence === null || parentSequence === void 0 ? void 0 : parentSequence.relativeFrom,
|
|
65
|
-
id,
|
|
66
|
-
]);
|
|
67
|
-
const timelineClipName = useMemo(() => {
|
|
68
|
-
return name !== null && name !== void 0 ? name : getTimelineClipName(children);
|
|
69
|
-
}, [children, name]);
|
|
70
|
-
useEffect(() => {
|
|
71
|
-
var _a;
|
|
72
|
-
if (environment !== 'preview') {
|
|
73
|
-
return;
|
|
74
|
-
}
|
|
75
|
-
registerSequence({
|
|
76
|
-
from,
|
|
77
|
-
duration: actualDurationInFrames,
|
|
78
|
-
id,
|
|
79
|
-
displayName: timelineClipName,
|
|
80
|
-
parent: (_a = parentSequence === null || parentSequence === void 0 ? void 0 : parentSequence.id) !== null && _a !== void 0 ? _a : null,
|
|
81
|
-
type: 'sequence',
|
|
82
|
-
rootId,
|
|
83
|
-
showInTimeline,
|
|
84
|
-
nonce,
|
|
85
|
-
showLoopTimesInTimeline,
|
|
86
|
-
});
|
|
87
|
-
return () => {
|
|
88
|
-
unregisterSequence(id);
|
|
89
|
-
};
|
|
90
|
-
}, [
|
|
91
|
-
durationInFrames,
|
|
92
|
-
id,
|
|
93
|
-
name,
|
|
94
|
-
registerSequence,
|
|
95
|
-
timelineClipName,
|
|
96
|
-
unregisterSequence,
|
|
97
|
-
parentSequence === null || parentSequence === void 0 ? void 0 : parentSequence.id,
|
|
98
|
-
actualDurationInFrames,
|
|
99
|
-
rootId,
|
|
100
|
-
from,
|
|
101
|
-
showInTimeline,
|
|
102
|
-
nonce,
|
|
103
|
-
showLoopTimesInTimeline,
|
|
104
|
-
environment,
|
|
105
|
-
]);
|
|
106
|
-
const endThreshold = cumulatedFrom + from + durationInFrames - 1;
|
|
107
|
-
const content = absoluteFrame < cumulatedFrom + from
|
|
108
|
-
? null
|
|
109
|
-
: absoluteFrame > endThreshold
|
|
110
|
-
? null
|
|
111
|
-
: children;
|
|
112
|
-
const styleIfThere = other.layout === 'none' ? undefined : other.style;
|
|
113
|
-
const defaultStyle = useMemo(() => {
|
|
114
|
-
return {
|
|
115
|
-
flexDirection: undefined,
|
|
116
|
-
...(styleIfThere !== null && styleIfThere !== void 0 ? styleIfThere : {}),
|
|
117
|
-
};
|
|
118
|
-
}, [styleIfThere]);
|
|
119
|
-
if (ref !== null && layout === 'none') {
|
|
120
|
-
throw new TypeError('It is not supported to pass both a `ref` and `layout="none"` to <Sequence />.');
|
|
121
|
-
}
|
|
122
|
-
return (_jsx(SequenceContext.Provider, { value: contextValue, children: content === null ? null : other.layout === 'none' ? (content) : (_jsx(AbsoluteFill, { ref: ref, style: defaultStyle, className: other.className, children: content })) }));
|
|
123
|
-
};
|
|
124
|
-
/**
|
|
125
|
-
* @description A component that time-shifts its children and wraps them in an absolutely positioned <div>.
|
|
126
|
-
* @see [Documentation](https://www.remotion.dev/docs/sequence]
|
|
127
|
-
*/
|
|
128
|
-
export const Sequence = forwardRef(SequenceRefForwardingFunction);
|
package/dist/esm/Still.js
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { Composition } from './Composition.js';
|
|
3
|
-
/**
|
|
4
|
-
* @description A <Still /> is a <Composition /> that is only 1 frame long.
|
|
5
|
-
* @see [Documentation](https://www.remotion.dev/docs/still)
|
|
6
|
-
*/
|
|
7
|
-
export const Still = (props) => {
|
|
8
|
-
return _jsx(Composition, { fps: 1, durationInFrames: 1, ...props });
|
|
9
|
-
};
|
package/dist/esm/absolute-src.js
DELETED
package/dist/esm/asset-types.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";
|
package/dist/esm/audio/Audio.js
DELETED
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { forwardRef, useCallback, useContext } from 'react';
|
|
3
|
-
import { useRemotionEnvironment } from '../get-environment.js';
|
|
4
|
-
import { Loop } from '../loop/index.js';
|
|
5
|
-
import { Sequence } from '../Sequence.js';
|
|
6
|
-
import { useVideoConfig } from '../use-video-config.js';
|
|
7
|
-
import { validateMediaProps } from '../validate-media-props.js';
|
|
8
|
-
import { validateStartFromProps } from '../validate-start-from-props.js';
|
|
9
|
-
import { DurationsContext } from '../video/duration-state.js';
|
|
10
|
-
import { AudioForDevelopment } from './AudioForDevelopment.js';
|
|
11
|
-
import { AudioForRendering } from './AudioForRendering.js';
|
|
12
|
-
import { SharedAudioContext } from './shared-audio-tags.js';
|
|
13
|
-
const AudioRefForwardingFunction = (props, ref) => {
|
|
14
|
-
var _a;
|
|
15
|
-
const audioContext = useContext(SharedAudioContext);
|
|
16
|
-
const { startFrom, endAt, ...otherProps } = props;
|
|
17
|
-
const { loop, ...propsOtherThanLoop } = props;
|
|
18
|
-
const { fps } = useVideoConfig();
|
|
19
|
-
const environment = useRemotionEnvironment();
|
|
20
|
-
const { durations, setDurations } = useContext(DurationsContext);
|
|
21
|
-
if (typeof props.src !== 'string') {
|
|
22
|
-
throw new TypeError(`The \`<Audio>\` tag requires a string for \`src\`, but got ${JSON.stringify(props.src)} instead.`);
|
|
23
|
-
}
|
|
24
|
-
const onError = useCallback((e) => {
|
|
25
|
-
console.log(e.currentTarget.error);
|
|
26
|
-
throw new Error(`Could not play audio with src ${otherProps.src}: ${e.currentTarget.error}. See https://remotion.dev/docs/media-playback-error for help.`);
|
|
27
|
-
}, [otherProps.src]);
|
|
28
|
-
const onDuration = useCallback((src, durationInSeconds) => {
|
|
29
|
-
setDurations({ type: 'got-duration', durationInSeconds, src });
|
|
30
|
-
}, [setDurations]);
|
|
31
|
-
if (loop && props.src && durations[props.src] !== undefined) {
|
|
32
|
-
const duration = Math.floor(durations[props.src] * fps);
|
|
33
|
-
const playbackRate = (_a = props.playbackRate) !== null && _a !== void 0 ? _a : 1;
|
|
34
|
-
const actualDuration = duration / playbackRate;
|
|
35
|
-
return (_jsx(Loop, { layout: "none", durationInFrames: Math.floor(actualDuration), children: _jsx(Audio, { ...propsOtherThanLoop, ref: ref }) }));
|
|
36
|
-
}
|
|
37
|
-
if (typeof startFrom !== 'undefined' || typeof endAt !== 'undefined') {
|
|
38
|
-
validateStartFromProps(startFrom, endAt);
|
|
39
|
-
const startFromFrameNo = startFrom !== null && startFrom !== void 0 ? startFrom : 0;
|
|
40
|
-
const endAtFrameNo = endAt !== null && endAt !== void 0 ? endAt : Infinity;
|
|
41
|
-
return (_jsx(Sequence, { layout: "none", from: 0 - startFromFrameNo, showInTimeline: false, durationInFrames: endAtFrameNo, children: _jsx(Audio, { ...otherProps, ref: ref }) }));
|
|
42
|
-
}
|
|
43
|
-
validateMediaProps(props, 'Audio');
|
|
44
|
-
if (environment === 'rendering') {
|
|
45
|
-
return (_jsx(AudioForRendering, { onDuration: onDuration, ...props, ref: ref, onError: onError }));
|
|
46
|
-
}
|
|
47
|
-
return (_jsx(AudioForDevelopment, { shouldPreMountAudioTags: audioContext !== null && audioContext.numberOfAudioTags > 0, ...props, ref: ref, onError: onError, onDuration: onDuration }));
|
|
48
|
-
};
|
|
49
|
-
/**
|
|
50
|
-
* @description With this component, you can add audio to your video. All audio formats which are supported by Chromium are supported by the component.
|
|
51
|
-
* @see [Documentation](https://www.remotion.dev/docs/audio)
|
|
52
|
-
*/
|
|
53
|
-
export const Audio = forwardRef(AudioRefForwardingFunction);
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { forwardRef, useContext, useEffect, useImperativeHandle, useMemo, useRef, useState, } from 'react';
|
|
3
|
-
import { usePreload } from '../prefetch.js';
|
|
4
|
-
import { random } from '../random.js';
|
|
5
|
-
import { SequenceContext } from '../SequenceContext.js';
|
|
6
|
-
import { useMediaInTimeline } from '../use-media-in-timeline.js';
|
|
7
|
-
import { DEFAULT_ACCEPTABLE_TIMESHIFT, useMediaPlayback, } from '../use-media-playback.js';
|
|
8
|
-
import { useMediaTagVolume } from '../use-media-tag-volume.js';
|
|
9
|
-
import { useSyncVolumeWithMediaTag } from '../use-sync-volume-with-media-tag.js';
|
|
10
|
-
import { useMediaMutedState, useMediaVolumeState, } from '../volume-position-state.js';
|
|
11
|
-
import { useSharedAudio } from './shared-audio-tags.js';
|
|
12
|
-
import { useFrameForVolumeProp } from './use-audio-frame.js';
|
|
13
|
-
const AudioForDevelopmentForwardRefFunction = (props, ref) => {
|
|
14
|
-
const [initialShouldPreMountAudioElements] = useState(props.shouldPreMountAudioTags);
|
|
15
|
-
if (props.shouldPreMountAudioTags !== initialShouldPreMountAudioElements) {
|
|
16
|
-
throw new Error('Cannot change the behavior for pre-mounting audio tags dynamically.');
|
|
17
|
-
}
|
|
18
|
-
const [mediaVolume] = useMediaVolumeState();
|
|
19
|
-
const [mediaMuted] = useMediaMutedState();
|
|
20
|
-
const volumePropFrame = useFrameForVolumeProp();
|
|
21
|
-
const { volume, muted, playbackRate, shouldPreMountAudioTags, src, onDuration, acceptableTimeShiftInSeconds, ...nativeProps } = props;
|
|
22
|
-
if (!src) {
|
|
23
|
-
throw new TypeError("No 'src' was passed to <Audio>.");
|
|
24
|
-
}
|
|
25
|
-
const preloadedSrc = usePreload(src);
|
|
26
|
-
const propsToPass = useMemo(() => {
|
|
27
|
-
return {
|
|
28
|
-
muted: muted || mediaMuted,
|
|
29
|
-
src: preloadedSrc,
|
|
30
|
-
...nativeProps,
|
|
31
|
-
};
|
|
32
|
-
}, [mediaMuted, muted, nativeProps, preloadedSrc]);
|
|
33
|
-
const sequenceContext = useContext(SequenceContext);
|
|
34
|
-
// Generate a string that's as unique as possible for this asset
|
|
35
|
-
// but at the same time deterministic. We use it to combat strict mode issues.
|
|
36
|
-
const id = useMemo(() => `audio-${random(src !== null && src !== void 0 ? src : '')}-${sequenceContext === null || sequenceContext === void 0 ? void 0 : sequenceContext.relativeFrom}-${sequenceContext === null || sequenceContext === void 0 ? void 0 : sequenceContext.cumulatedFrom}-${sequenceContext === null || sequenceContext === void 0 ? void 0 : sequenceContext.durationInFrames}-muted:${props.muted}`, [props.muted, src, sequenceContext]);
|
|
37
|
-
const audioRef = useSharedAudio(propsToPass, id).el;
|
|
38
|
-
const actualVolume = useMediaTagVolume(audioRef);
|
|
39
|
-
useSyncVolumeWithMediaTag({
|
|
40
|
-
volumePropFrame,
|
|
41
|
-
actualVolume,
|
|
42
|
-
volume,
|
|
43
|
-
mediaVolume,
|
|
44
|
-
mediaRef: audioRef,
|
|
45
|
-
});
|
|
46
|
-
useMediaInTimeline({
|
|
47
|
-
volume,
|
|
48
|
-
mediaVolume,
|
|
49
|
-
mediaRef: audioRef,
|
|
50
|
-
src,
|
|
51
|
-
mediaType: 'audio',
|
|
52
|
-
playbackRate: playbackRate !== null && playbackRate !== void 0 ? playbackRate : 1,
|
|
53
|
-
});
|
|
54
|
-
useMediaPlayback({
|
|
55
|
-
mediaRef: audioRef,
|
|
56
|
-
src,
|
|
57
|
-
mediaType: 'audio',
|
|
58
|
-
playbackRate: playbackRate !== null && playbackRate !== void 0 ? playbackRate : 1,
|
|
59
|
-
onlyWarnForMediaSeekingError: false,
|
|
60
|
-
acceptableTimeshift: acceptableTimeShiftInSeconds !== null && acceptableTimeShiftInSeconds !== void 0 ? acceptableTimeShiftInSeconds : DEFAULT_ACCEPTABLE_TIMESHIFT,
|
|
61
|
-
});
|
|
62
|
-
useImperativeHandle(ref, () => {
|
|
63
|
-
return audioRef.current;
|
|
64
|
-
}, [audioRef]);
|
|
65
|
-
const currentOnDurationCallback = useRef();
|
|
66
|
-
currentOnDurationCallback.current = onDuration;
|
|
67
|
-
useEffect(() => {
|
|
68
|
-
var _a;
|
|
69
|
-
const { current } = audioRef;
|
|
70
|
-
if (!current) {
|
|
71
|
-
return;
|
|
72
|
-
}
|
|
73
|
-
if (current.duration) {
|
|
74
|
-
(_a = currentOnDurationCallback.current) === null || _a === void 0 ? void 0 : _a.call(currentOnDurationCallback, src, current.duration);
|
|
75
|
-
return;
|
|
76
|
-
}
|
|
77
|
-
const onLoadedMetadata = () => {
|
|
78
|
-
var _a;
|
|
79
|
-
(_a = currentOnDurationCallback.current) === null || _a === void 0 ? void 0 : _a.call(currentOnDurationCallback, src, current.duration);
|
|
80
|
-
};
|
|
81
|
-
current.addEventListener('loadedmetadata', onLoadedMetadata);
|
|
82
|
-
return () => {
|
|
83
|
-
current.removeEventListener('loadedmetadata', onLoadedMetadata);
|
|
84
|
-
};
|
|
85
|
-
}, [audioRef, src]);
|
|
86
|
-
if (initialShouldPreMountAudioElements) {
|
|
87
|
-
return null;
|
|
88
|
-
}
|
|
89
|
-
return _jsx("audio", { ref: audioRef, ...propsToPass });
|
|
90
|
-
};
|
|
91
|
-
export const AudioForDevelopment = forwardRef(AudioForDevelopmentForwardRefFunction);
|
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { forwardRef, useContext, useEffect, useImperativeHandle, useLayoutEffect, useMemo, useRef, } from 'react';
|
|
3
|
-
import { getAbsoluteSrc } from '../absolute-src.js';
|
|
4
|
-
import { CompositionManager } from '../CompositionManager.js';
|
|
5
|
-
import { continueRender, delayRender } from '../delay-render.js';
|
|
6
|
-
import { useRemotionEnvironment } from '../get-environment.js';
|
|
7
|
-
import { random } from '../random.js';
|
|
8
|
-
import { SequenceContext } from '../SequenceContext.js';
|
|
9
|
-
import { useTimelinePosition } from '../timeline-position-state.js';
|
|
10
|
-
import { useCurrentFrame } from '../use-current-frame.js';
|
|
11
|
-
import { evaluateVolume } from '../volume-prop.js';
|
|
12
|
-
import { useFrameForVolumeProp } from './use-audio-frame.js';
|
|
13
|
-
const AudioForRenderingRefForwardingFunction = (props, ref) => {
|
|
14
|
-
const audioRef = useRef(null);
|
|
15
|
-
const absoluteFrame = useTimelinePosition();
|
|
16
|
-
const volumePropFrame = useFrameForVolumeProp();
|
|
17
|
-
const frame = useCurrentFrame();
|
|
18
|
-
const sequenceContext = useContext(SequenceContext);
|
|
19
|
-
const { registerAsset, unregisterAsset } = useContext(CompositionManager);
|
|
20
|
-
const environment = useRemotionEnvironment();
|
|
21
|
-
// Generate a string that's as unique as possible for this asset
|
|
22
|
-
// but at the same time the same on all threads
|
|
23
|
-
const id = useMemo(() => {
|
|
24
|
-
var _a;
|
|
25
|
-
return `audio-${random((_a = props.src) !== null && _a !== void 0 ? _a : '')}-${sequenceContext === null || sequenceContext === void 0 ? void 0 : sequenceContext.relativeFrom}-${sequenceContext === null || sequenceContext === void 0 ? void 0 : sequenceContext.cumulatedFrom}-${sequenceContext === null || sequenceContext === void 0 ? void 0 : sequenceContext.durationInFrames}`;
|
|
26
|
-
}, [props.src, sequenceContext]);
|
|
27
|
-
const { volume: volumeProp, playbackRate, allowAmplificationDuringRender, onDuration, ...nativeProps } = props;
|
|
28
|
-
const volume = evaluateVolume({
|
|
29
|
-
volume: volumeProp,
|
|
30
|
-
frame: volumePropFrame,
|
|
31
|
-
mediaVolume: 1,
|
|
32
|
-
allowAmplificationDuringRender: allowAmplificationDuringRender !== null && allowAmplificationDuringRender !== void 0 ? allowAmplificationDuringRender : false,
|
|
33
|
-
});
|
|
34
|
-
useImperativeHandle(ref, () => {
|
|
35
|
-
return audioRef.current;
|
|
36
|
-
}, []);
|
|
37
|
-
useEffect(() => {
|
|
38
|
-
var _a;
|
|
39
|
-
if (!props.src) {
|
|
40
|
-
throw new Error('No src passed');
|
|
41
|
-
}
|
|
42
|
-
if (!window.remotion_audioEnabled) {
|
|
43
|
-
return;
|
|
44
|
-
}
|
|
45
|
-
if (props.muted) {
|
|
46
|
-
return;
|
|
47
|
-
}
|
|
48
|
-
if (volume <= 0) {
|
|
49
|
-
return;
|
|
50
|
-
}
|
|
51
|
-
registerAsset({
|
|
52
|
-
type: 'audio',
|
|
53
|
-
src: getAbsoluteSrc(props.src),
|
|
54
|
-
id,
|
|
55
|
-
frame: absoluteFrame,
|
|
56
|
-
volume,
|
|
57
|
-
mediaFrame: frame,
|
|
58
|
-
playbackRate: (_a = props.playbackRate) !== null && _a !== void 0 ? _a : 1,
|
|
59
|
-
allowAmplificationDuringRender: allowAmplificationDuringRender !== null && allowAmplificationDuringRender !== void 0 ? allowAmplificationDuringRender : false,
|
|
60
|
-
});
|
|
61
|
-
return () => unregisterAsset(id);
|
|
62
|
-
}, [
|
|
63
|
-
props.muted,
|
|
64
|
-
props.src,
|
|
65
|
-
registerAsset,
|
|
66
|
-
absoluteFrame,
|
|
67
|
-
id,
|
|
68
|
-
unregisterAsset,
|
|
69
|
-
volume,
|
|
70
|
-
volumePropFrame,
|
|
71
|
-
frame,
|
|
72
|
-
playbackRate,
|
|
73
|
-
props.playbackRate,
|
|
74
|
-
allowAmplificationDuringRender,
|
|
75
|
-
]);
|
|
76
|
-
const { src } = props;
|
|
77
|
-
// If audio source switches, make new handle
|
|
78
|
-
if (environment === 'rendering') {
|
|
79
|
-
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
80
|
-
useLayoutEffect(() => {
|
|
81
|
-
if (process.env.NODE_ENV === 'test') {
|
|
82
|
-
return;
|
|
83
|
-
}
|
|
84
|
-
const newHandle = delayRender('Loading <Audio> duration with src=' + src);
|
|
85
|
-
const { current } = audioRef;
|
|
86
|
-
const didLoad = () => {
|
|
87
|
-
if (current === null || current === void 0 ? void 0 : current.duration) {
|
|
88
|
-
onDuration(src, current.duration);
|
|
89
|
-
}
|
|
90
|
-
continueRender(newHandle);
|
|
91
|
-
};
|
|
92
|
-
if (current === null || current === void 0 ? void 0 : current.duration) {
|
|
93
|
-
onDuration(src, current.duration);
|
|
94
|
-
continueRender(newHandle);
|
|
95
|
-
}
|
|
96
|
-
else {
|
|
97
|
-
current === null || current === void 0 ? void 0 : current.addEventListener('loadedmetadata', didLoad, { once: true });
|
|
98
|
-
}
|
|
99
|
-
// If tag gets unmounted, clear pending handles because video metadata is not going to load
|
|
100
|
-
return () => {
|
|
101
|
-
current === null || current === void 0 ? void 0 : current.removeEventListener('loadedmetadata', didLoad);
|
|
102
|
-
continueRender(newHandle);
|
|
103
|
-
};
|
|
104
|
-
}, [src, onDuration]);
|
|
105
|
-
}
|
|
106
|
-
return _jsx("audio", { ref: audioRef, ...nativeProps });
|
|
107
|
-
};
|
|
108
|
-
export const AudioForRendering = forwardRef(AudioForRenderingRefForwardingFunction);
|
package/dist/esm/audio/index.js
DELETED
package/dist/esm/audio/props.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|