remotion 3.3.45 → 3.3.52
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/Sequence.js +1 -1
- package/dist/Still.d.ts +0 -1
- package/dist/audio/Audio.d.ts +2 -2
- package/dist/audio/AudioForDevelopment.d.ts +1 -1
- package/dist/audio/AudioForRendering.d.ts +1 -1
- package/dist/cjs/AbsoluteFill.d.ts +6 -0
- package/dist/cjs/AbsoluteFill.js +28 -0
- package/dist/cjs/CanUseRemotionHooks.d.ts +5 -0
- package/dist/cjs/CanUseRemotionHooks.js +10 -0
- package/dist/cjs/Clipper.d.ts +7 -0
- package/dist/cjs/Clipper.js +24 -0
- package/dist/cjs/Composition.d.ts +23 -0
- package/dist/cjs/Composition.js +113 -0
- package/dist/cjs/CompositionManager.d.ts +82 -0
- package/dist/cjs/CompositionManager.js +164 -0
- package/dist/cjs/Folder.d.ts +15 -0
- package/dist/cjs/Folder.js +33 -0
- package/dist/cjs/IFrame.d.ts +2 -0
- package/dist/cjs/IFrame.js +24 -0
- package/dist/cjs/Img.d.ts +2 -0
- package/dist/cjs/Img.js +52 -0
- package/dist/cjs/NativeLayers.d.ts +13 -0
- package/dist/cjs/NativeLayers.js +29 -0
- package/dist/cjs/Null.d.ts +2 -0
- package/dist/cjs/Null.js +25 -0
- package/dist/cjs/RemotionRoot.d.ts +5 -0
- package/dist/cjs/RemotionRoot.js +73 -0
- package/dist/cjs/Sequence.d.ts +29 -0
- package/dist/cjs/Sequence.js +131 -0
- package/dist/cjs/Still.d.ts +3 -0
- package/dist/cjs/Still.js +9 -0
- package/dist/cjs/absolute-src.d.ts +1 -0
- package/dist/cjs/absolute-src.js +7 -0
- package/dist/cjs/asset-types.d.ts +50 -0
- package/dist/cjs/asset-types.js +1 -0
- package/dist/cjs/audio/Audio.d.ts +8 -0
- package/dist/cjs/audio/Audio.js +52 -0
- package/dist/cjs/audio/AudioForDevelopment.d.ts +11 -0
- package/dist/cjs/audio/AudioForDevelopment.js +94 -0
- package/dist/cjs/audio/AudioForRendering.d.ts +10 -0
- package/dist/cjs/audio/AudioForRendering.js +111 -0
- package/dist/cjs/audio/index.d.ts +2 -0
- package/dist/cjs/audio/index.js +18 -0
- package/dist/cjs/audio/props.d.ts +12 -0
- package/dist/cjs/audio/props.js +2 -0
- package/dist/cjs/audio/shared-audio-tags.d.ts +37 -0
- package/dist/cjs/audio/shared-audio-tags.js +222 -0
- package/dist/cjs/audio/use-audio-frame.d.ts +6 -0
- package/dist/cjs/audio/use-audio-frame.js +23 -0
- package/dist/cjs/bezier.d.ts +1 -0
- package/dist/cjs/bezier.js +114 -0
- package/dist/cjs/cancel-render.d.ts +1 -0
- package/dist/cjs/cancel-render.js +43 -0
- package/dist/cjs/config/input-props.d.ts +1 -0
- package/dist/cjs/config/input-props.js +31 -0
- package/dist/cjs/config.d.ts +285 -0
- package/dist/cjs/config.js +21 -0
- package/dist/cjs/default-css.d.ts +3 -0
- package/dist/cjs/default-css.js +49 -0
- package/dist/cjs/delay-render.d.ts +14 -0
- package/dist/cjs/delay-render.js +77 -0
- package/dist/cjs/easing.d.ts +19 -0
- package/dist/cjs/easing.js +77 -0
- package/dist/cjs/freeze.d.ts +7 -0
- package/dist/cjs/freeze.js +34 -0
- package/dist/cjs/get-asset-file-name.d.ts +1 -0
- package/dist/cjs/get-asset-file-name.js +14 -0
- package/dist/cjs/get-environment.d.ts +3 -0
- package/dist/cjs/get-environment.js +34 -0
- package/dist/cjs/get-preview-dom-element.d.ts +1 -0
- package/dist/cjs/get-preview-dom-element.js +7 -0
- package/dist/cjs/get-static-files.d.ts +17 -0
- package/dist/cjs/get-static-files.js +31 -0
- package/dist/cjs/get-timeline-clip-name.d.ts +1 -0
- package/dist/cjs/get-timeline-clip-name.js +25 -0
- package/dist/cjs/index.d.ts +92 -0
- package/dist/cjs/index.js +73 -0
- package/dist/cjs/internals.d.ts +99 -0
- package/dist/cjs/internals.js +101 -0
- package/dist/cjs/interpolate-colors.d.ts +5 -0
- package/dist/cjs/interpolate-colors.js +401 -0
- package/dist/cjs/interpolate.d.ts +18 -0
- package/dist/cjs/interpolate.js +123 -0
- package/dist/cjs/is-approximately-the-same.d.ts +1 -0
- package/dist/cjs/is-approximately-the-same.js +8 -0
- package/dist/cjs/is-player.d.ts +3 -0
- package/dist/cjs/is-player.js +14 -0
- package/dist/cjs/loading-indicator.d.ts +2 -0
- package/dist/cjs/loading-indicator.js +35 -0
- package/dist/cjs/loop/index.d.ts +9 -0
- package/dist/cjs/loop/index.js +29 -0
- package/dist/cjs/multiple-versions-warning.d.ts +1 -0
- package/dist/cjs/multiple-versions-warning.js +32 -0
- package/dist/cjs/nonce.d.ts +7 -0
- package/dist/cjs/nonce.js +17 -0
- package/dist/cjs/play-and-handle-not-allowed-error.d.ts +2 -0
- package/dist/cjs/play-and-handle-not-allowed-error.js +44 -0
- package/dist/cjs/portal-node.d.ts +1 -0
- package/dist/cjs/portal-node.js +23 -0
- package/dist/cjs/prefetch-state.d.ts +8 -0
- package/dist/cjs/prefetch-state.js +27 -0
- package/dist/cjs/prefetch.d.ts +9 -0
- package/dist/cjs/prefetch.js +108 -0
- package/dist/cjs/random.d.ts +7 -0
- package/dist/cjs/random.js +42 -0
- package/dist/cjs/register-root.d.ts +4 -0
- package/dist/cjs/register-root.js +33 -0
- package/dist/cjs/series/flatten-children.d.ts +2 -0
- package/dist/cjs/series/flatten-children.js +19 -0
- package/dist/cjs/series/index.d.ts +13 -0
- package/dist/cjs/series/index.js +60 -0
- package/dist/cjs/setup-env-variables.d.ts +2 -0
- package/dist/cjs/setup-env-variables.js +36 -0
- package/dist/cjs/spring/index.d.ts +27 -0
- package/dist/cjs/spring/index.js +55 -0
- package/dist/cjs/spring/measure-spring.d.ts +8 -0
- package/dist/cjs/spring/measure-spring.js +64 -0
- package/dist/cjs/spring/spring-utils.d.ts +21 -0
- package/dist/cjs/spring/spring-utils.js +103 -0
- package/dist/cjs/static-file.d.ts +5 -0
- package/dist/cjs/static-file.js +33 -0
- package/dist/cjs/test/Img.test.d.ts +1 -0
- package/dist/cjs/test/Img.test.js +25 -0
- package/dist/cjs/test/absolute-src.test.d.ts +1 -0
- package/dist/cjs/test/absolute-src.test.js +18 -0
- package/dist/cjs/test/audio-for-rendering.test.d.ts +1 -0
- package/dist/cjs/test/audio-for-rendering.test.js +88 -0
- package/dist/cjs/test/audio.test.d.ts +1 -0
- package/dist/cjs/test/audio.test.js +76 -0
- package/dist/cjs/test/bezier.test.d.ts +1 -0
- package/dist/cjs/test/bezier.test.js +52 -0
- package/dist/cjs/test/composition-rules.test.d.ts +1 -0
- package/dist/cjs/test/composition-rules.test.js +30 -0
- package/dist/cjs/test/composition-validation.test.d.ts +1 -0
- package/dist/cjs/test/composition-validation.test.js +99 -0
- package/dist/cjs/test/easing.test.d.ts +1 -0
- package/dist/cjs/test/easing.test.js +191 -0
- package/dist/cjs/test/expect-to-throw.d.ts +1 -0
- package/dist/cjs/test/expect-to-throw.js +15 -0
- package/dist/cjs/test/freeze.test.d.ts +1 -0
- package/dist/cjs/test/freeze.test.js +65 -0
- package/dist/cjs/test/get-asset-file-name.test.d.ts +1 -0
- package/dist/cjs/test/get-asset-file-name.test.js +14 -0
- package/dist/cjs/test/get-current-time.test.d.ts +1 -0
- package/dist/cjs/test/get-current-time.test.js +74 -0
- package/dist/cjs/test/input-props.test.d.ts +1 -0
- package/dist/cjs/test/input-props.test.js +31 -0
- package/dist/cjs/test/interpolate.test.d.ts +1 -0
- package/dist/cjs/test/interpolate.test.js +138 -0
- package/dist/cjs/test/interpolateColors.test.d.ts +1 -0
- package/dist/cjs/test/interpolateColors.test.js +63 -0
- package/dist/cjs/test/loop-validation.test.d.ts +1 -0
- package/dist/cjs/test/loop-validation.test.js +93 -0
- package/dist/cjs/test/measure-spring.test.d.ts +1 -0
- package/dist/cjs/test/measure-spring.test.js +45 -0
- package/dist/cjs/test/media-validation.test.d.ts +1 -0
- package/dist/cjs/test/media-validation.test.js +47 -0
- package/dist/cjs/test/nested-sequences.test.d.ts +1 -0
- package/dist/cjs/test/nested-sequences.test.js +132 -0
- package/dist/cjs/test/not-all-props-in-media-tags.test.d.ts +1 -0
- package/dist/cjs/test/not-all-props-in-media-tags.test.js +33 -0
- package/dist/cjs/test/random.test.d.ts +1 -0
- package/dist/cjs/test/random.test.js +60 -0
- package/dist/cjs/test/ready-manager.test.d.ts +1 -0
- package/dist/cjs/test/ready-manager.test.js +29 -0
- package/dist/cjs/test/render-hook.d.ts +23 -0
- package/dist/cjs/test/render-hook.js +27 -0
- package/dist/cjs/test/sequence-from-initial-offset.test.d.ts +4 -0
- package/dist/cjs/test/sequence-from-initial-offset.test.js +35 -0
- package/dist/cjs/test/sequence-validation.test.d.ts +1 -0
- package/dist/cjs/test/sequence-validation.test.js +47 -0
- package/dist/cjs/test/series.test.d.ts +1 -0
- package/dist/cjs/test/series.test.js +115 -0
- package/dist/cjs/test/spring.test.d.ts +1 -0
- package/dist/cjs/test/spring.test.js +38 -0
- package/dist/cjs/test/truthy.test.d.ts +1 -0
- package/dist/cjs/test/truthy.test.js +24 -0
- package/dist/cjs/test/use-audio-frame.test.d.ts +1 -0
- package/dist/cjs/test/use-audio-frame.test.js +78 -0
- package/dist/cjs/test/use-media-in-timeline.test.d.ts +1 -0
- package/dist/cjs/test/use-media-in-timeline.test.js +74 -0
- package/dist/cjs/test/use-media-tag-volume.test.d.ts +1 -0
- package/dist/cjs/test/use-media-tag-volume.test.js +49 -0
- package/dist/cjs/test/use-sync-volume-with-media-tag.test.d.ts +1 -0
- package/dist/cjs/test/use-sync-volume-with-media-tag.test.js +55 -0
- package/dist/cjs/test/validate-start-from-props.test.d.ts +1 -0
- package/dist/cjs/test/validate-start-from-props.test.js +39 -0
- package/dist/cjs/test/video.test.d.ts +1 -0
- package/dist/cjs/test/video.test.js +80 -0
- package/dist/cjs/test/volume-prop.test.d.ts +1 -0
- package/dist/cjs/test/volume-prop.test.js +95 -0
- package/dist/cjs/test/wrap-sequence-context.d.ts +6 -0
- package/dist/cjs/test/wrap-sequence-context.js +41 -0
- package/dist/cjs/timeline-position-state.d.ts +29 -0
- package/dist/cjs/timeline-position-state.js +41 -0
- package/dist/cjs/truthy.d.ts +3 -0
- package/dist/cjs/truthy.js +7 -0
- package/dist/cjs/use-current-frame.d.ts +6 -0
- package/dist/cjs/use-current-frame.js +28 -0
- package/dist/cjs/use-lazy-component.d.ts +7 -0
- package/dist/cjs/use-lazy-component.js +49 -0
- package/dist/cjs/use-media-in-timeline.d.ts +10 -0
- package/dist/cjs/use-media-in-timeline.js +129 -0
- package/dist/cjs/use-media-playback.d.ts +10 -0
- package/dist/cjs/use-media-playback.js +77 -0
- package/dist/cjs/use-media-tag-volume.d.ts +2 -0
- package/dist/cjs/use-media-tag-volume.js +31 -0
- package/dist/cjs/use-sync-volume-with-media-tag.d.ts +10 -0
- package/dist/cjs/use-sync-volume-with-media-tag.js +21 -0
- package/dist/cjs/use-unsafe-video-config.d.ts +2 -0
- package/dist/cjs/use-unsafe-video-config.js +27 -0
- package/dist/cjs/use-video-config.d.ts +7 -0
- package/dist/cjs/use-video-config.js +29 -0
- package/dist/cjs/use-video.d.ts +13 -0
- package/dist/cjs/use-video.js +28 -0
- package/dist/cjs/validate-frame.d.ts +1 -0
- package/dist/cjs/validate-frame.js +24 -0
- package/dist/cjs/validate-media-props.d.ts +4 -0
- package/dist/cjs/validate-media-props.js +24 -0
- package/dist/cjs/validate-start-from-props.d.ts +1 -0
- package/dist/cjs/validate-start-from-props.js +31 -0
- package/dist/cjs/validation/validate-composition-id.d.ts +3 -0
- package/dist/cjs/validation/validate-composition-id.js +13 -0
- package/dist/cjs/validation/validate-dimensions.d.ts +1 -0
- package/dist/cjs/validation/validate-dimensions.js +21 -0
- package/dist/cjs/validation/validate-duration-in-frames.d.ts +1 -0
- package/dist/cjs/validation/validate-duration-in-frames.js +15 -0
- package/dist/cjs/validation/validate-folder-name.d.ts +3 -0
- package/dist/cjs/validation/validate-folder-name.js +19 -0
- package/dist/cjs/validation/validate-fps.d.ts +1 -0
- package/dist/cjs/validation/validate-fps.js +21 -0
- package/dist/cjs/validation/validate-offthreadvideo-image-format.d.ts +1 -0
- package/dist/cjs/validation/validate-offthreadvideo-image-format.js +15 -0
- package/dist/cjs/validation/validation-spring-duration.d.ts +1 -0
- package/dist/cjs/validation/validation-spring-duration.js +21 -0
- package/dist/cjs/version.d.ts +1 -0
- package/dist/cjs/version.js +5 -0
- package/dist/cjs/video/OffthreadVideo.d.ts +3 -0
- package/dist/cjs/video/OffthreadVideo.js +33 -0
- package/dist/cjs/video/OffthreadVideoForRendering.d.ts +3 -0
- package/dist/cjs/video/OffthreadVideoForRendering.js +104 -0
- package/dist/cjs/video/Video.d.ts +8 -0
- package/dist/cjs/video/Video.js +50 -0
- package/dist/cjs/video/VideoForDevelopment.d.ts +11 -0
- package/dist/cjs/video/VideoForDevelopment.js +113 -0
- package/dist/cjs/video/VideoForRendering.d.ts +10 -0
- package/dist/cjs/video/VideoForRendering.js +203 -0
- package/dist/cjs/video/duration-state.d.ts +17 -0
- package/dist/cjs/video/duration-state.js +34 -0
- package/dist/cjs/video/get-current-time.d.ts +13 -0
- package/dist/cjs/video/get-current-time.js +31 -0
- package/dist/cjs/video/index.d.ts +3 -0
- package/dist/cjs/video/index.js +7 -0
- package/dist/cjs/video/props.d.ts +25 -0
- package/dist/cjs/video/props.js +2 -0
- package/dist/cjs/video/video-fragment.d.ts +12 -0
- package/dist/cjs/video/video-fragment.js +60 -0
- package/dist/cjs/video-config.d.ts +8 -0
- package/dist/cjs/video-config.js +2 -0
- package/dist/cjs/volume-position-state.d.ts +19 -0
- package/dist/cjs/volume-position-state.js +32 -0
- package/dist/cjs/volume-prop.d.ts +7 -0
- package/dist/cjs/volume-prop.js +24 -0
- package/dist/cjs/warn-about-non-seekable-media.d.ts +1 -0
- package/dist/cjs/warn-about-non-seekable-media.js +34 -0
- package/dist/cjs/wrap-remotion-context.d.ts +18 -0
- package/dist/cjs/wrap-remotion-context.js +73 -0
- package/dist/esm/AbsoluteFill.d.ts +6 -0
- package/dist/esm/AbsoluteFill.js +25 -0
- package/dist/esm/CanUseRemotionHooks.d.ts +5 -0
- package/dist/esm/CanUseRemotionHooks.js +6 -0
- package/dist/esm/Clipper.d.ts +7 -0
- package/dist/esm/Clipper.js +20 -0
- package/dist/esm/Composition.d.ts +23 -0
- package/dist/esm/Composition.js +108 -0
- package/dist/esm/CompositionManager.d.ts +82 -0
- package/dist/esm/CompositionManager.js +137 -0
- package/dist/esm/Folder.d.ts +15 -0
- package/dist/esm/Folder.js +29 -0
- package/dist/esm/IFrame.d.ts +2 -0
- package/dist/esm/IFrame.js +21 -0
- package/dist/esm/Img.d.ts +2 -0
- package/dist/esm/Img.js +49 -0
- package/dist/esm/NativeLayers.d.ts +13 -0
- package/dist/esm/NativeLayers.js +25 -0
- package/dist/esm/Null.d.ts +2 -0
- package/dist/esm/Null.js +21 -0
- package/dist/esm/RemotionRoot.d.ts +5 -0
- package/dist/esm/RemotionRoot.js +69 -0
- package/dist/esm/Sequence.d.ts +29 -0
- package/dist/esm/Sequence.js +128 -0
- package/dist/esm/Still.d.ts +3 -0
- package/dist/esm/Still.js +5 -0
- package/dist/esm/absolute-src.d.ts +1 -0
- package/dist/esm/absolute-src.js +3 -0
- package/dist/esm/asset-types.d.ts +50 -0
- package/dist/esm/asset-types.js +1 -0
- package/dist/esm/audio/Audio.d.ts +8 -0
- package/dist/esm/audio/Audio.js +49 -0
- package/dist/esm/audio/AudioForDevelopment.d.ts +11 -0
- package/dist/esm/audio/AudioForDevelopment.js +91 -0
- package/dist/esm/audio/AudioForRendering.d.ts +10 -0
- package/dist/esm/audio/AudioForRendering.js +108 -0
- package/dist/esm/audio/index.d.ts +2 -0
- package/dist/esm/audio/index.js +2 -0
- package/dist/esm/audio/props.d.ts +12 -0
- package/dist/esm/audio/props.js +1 -0
- package/dist/esm/audio/shared-audio-tags.d.ts +37 -0
- package/dist/esm/audio/shared-audio-tags.js +194 -0
- package/dist/esm/audio/use-audio-frame.d.ts +6 -0
- package/dist/esm/audio/use-audio-frame.js +18 -0
- package/dist/esm/bezier.d.ts +1 -0
- package/dist/esm/bezier.js +110 -0
- package/dist/esm/cancel-render.d.ts +1 -0
- package/dist/esm/cancel-render.js +39 -0
- package/dist/esm/config/input-props.d.ts +1 -0
- package/dist/esm/config/input-props.js +27 -0
- package/dist/esm/config.d.ts +285 -0
- package/dist/esm/config.js +17 -0
- package/dist/esm/default-css.d.ts +3 -0
- package/dist/esm/default-css.js +44 -0
- package/dist/esm/delay-render.d.ts +14 -0
- package/dist/esm/delay-render.js +72 -0
- package/dist/esm/easing.d.ts +19 -0
- package/dist/esm/easing.js +73 -0
- package/dist/esm/freeze.d.ts +7 -0
- package/dist/esm/freeze.js +30 -0
- package/dist/esm/get-asset-file-name.d.ts +1 -0
- package/dist/esm/get-asset-file-name.js +10 -0
- package/dist/esm/get-environment.d.ts +3 -0
- package/dist/esm/get-environment.js +29 -0
- package/dist/esm/get-preview-dom-element.d.ts +1 -0
- package/dist/esm/get-preview-dom-element.js +3 -0
- package/dist/esm/get-static-files.d.ts +17 -0
- package/dist/esm/get-static-files.js +27 -0
- package/dist/esm/get-timeline-clip-name.d.ts +1 -0
- package/dist/esm/get-timeline-clip-name.js +21 -0
- package/dist/esm/index.d.ts +92 -0
- package/dist/esm/index.js +41 -0
- package/dist/esm/internals.d.ts +99 -0
- package/dist/esm/internals.js +75 -0
- package/dist/esm/interpolate-colors.d.ts +5 -0
- package/dist/esm/interpolate-colors.js +397 -0
- package/dist/esm/interpolate.d.ts +18 -0
- package/dist/esm/interpolate.js +119 -0
- package/dist/esm/is-approximately-the-same.d.ts +1 -0
- package/dist/esm/is-approximately-the-same.js +4 -0
- package/dist/esm/is-player.d.ts +3 -0
- package/dist/esm/is-player.js +9 -0
- package/dist/esm/loading-indicator.d.ts +2 -0
- package/dist/esm/loading-indicator.js +31 -0
- package/dist/esm/loop/index.d.ts +9 -0
- package/dist/esm/loop/index.js +25 -0
- package/dist/esm/multiple-versions-warning.d.ts +1 -0
- package/dist/esm/multiple-versions-warning.js +28 -0
- package/dist/esm/nonce.d.ts +7 -0
- package/dist/esm/nonce.js +13 -0
- package/dist/esm/play-and-handle-not-allowed-error.d.ts +2 -0
- package/dist/esm/play-and-handle-not-allowed-error.js +40 -0
- package/dist/esm/portal-node.d.ts +1 -0
- package/dist/esm/portal-node.js +19 -0
- package/dist/esm/prefetch-state.d.ts +8 -0
- package/dist/esm/prefetch-state.js +22 -0
- package/dist/esm/prefetch.d.ts +9 -0
- package/dist/esm/prefetch.js +103 -0
- package/dist/esm/random.d.ts +7 -0
- package/dist/esm/random.js +38 -0
- package/dist/esm/register-root.d.ts +4 -0
- package/dist/esm/register-root.js +27 -0
- package/dist/esm/series/flatten-children.d.ts +2 -0
- package/dist/esm/series/flatten-children.js +12 -0
- package/dist/esm/series/index.d.ts +13 -0
- package/dist/esm/series/index.js +57 -0
- package/dist/esm/setup-env-variables.d.ts +2 -0
- package/dist/esm/setup-env-variables.js +32 -0
- package/dist/esm/spring/index.d.ts +27 -0
- package/dist/esm/spring/index.js +50 -0
- package/dist/esm/spring/measure-spring.d.ts +8 -0
- package/dist/esm/spring/measure-spring.js +60 -0
- package/dist/esm/spring/spring-utils.d.ts +21 -0
- package/dist/esm/spring/spring-utils.js +99 -0
- package/dist/esm/static-file.d.ts +5 -0
- package/dist/esm/static-file.js +29 -0
- package/dist/esm/test/Img.test.d.ts +1 -0
- package/dist/esm/test/Img.test.js +20 -0
- package/dist/esm/test/absolute-src.test.d.ts +1 -0
- package/dist/esm/test/absolute-src.test.js +16 -0
- package/dist/esm/test/audio-for-rendering.test.d.ts +1 -0
- package/dist/esm/test/audio-for-rendering.test.js +83 -0
- package/dist/esm/test/audio.test.d.ts +1 -0
- package/dist/esm/test/audio.test.js +51 -0
- package/dist/esm/test/bezier.test.d.ts +1 -0
- package/dist/esm/test/bezier.test.js +50 -0
- package/dist/esm/test/composition-rules.test.d.ts +1 -0
- package/dist/esm/test/composition-rules.test.js +28 -0
- package/dist/esm/test/composition-validation.test.d.ts +1 -0
- package/dist/esm/test/composition-validation.test.js +97 -0
- package/dist/esm/test/easing.test.d.ts +1 -0
- package/dist/esm/test/easing.test.js +189 -0
- package/dist/esm/test/expect-to-throw.d.ts +1 -0
- package/dist/esm/test/expect-to-throw.js +11 -0
- package/dist/esm/test/freeze.test.d.ts +1 -0
- package/dist/esm/test/freeze.test.js +63 -0
- package/dist/esm/test/get-asset-file-name.test.d.ts +1 -0
- package/dist/esm/test/get-asset-file-name.test.js +12 -0
- package/dist/esm/test/get-current-time.test.d.ts +1 -0
- package/dist/esm/test/get-current-time.test.js +72 -0
- package/dist/esm/test/input-props.test.d.ts +1 -0
- package/dist/esm/test/input-props.test.js +29 -0
- package/dist/esm/test/interpolate.test.d.ts +1 -0
- package/dist/esm/test/interpolate.test.js +136 -0
- package/dist/esm/test/interpolateColors.test.d.ts +1 -0
- package/dist/esm/test/interpolateColors.test.js +61 -0
- package/dist/esm/test/loop-validation.test.d.ts +1 -0
- package/dist/esm/test/loop-validation.test.js +68 -0
- package/dist/esm/test/measure-spring.test.d.ts +1 -0
- package/dist/esm/test/measure-spring.test.js +43 -0
- package/dist/esm/test/media-validation.test.d.ts +1 -0
- package/dist/esm/test/media-validation.test.js +45 -0
- package/dist/esm/test/nested-sequences.test.d.ts +1 -0
- package/dist/esm/test/nested-sequences.test.js +130 -0
- package/dist/esm/test/not-all-props-in-media-tags.test.d.ts +1 -0
- package/dist/esm/test/not-all-props-in-media-tags.test.js +28 -0
- package/dist/esm/test/random.test.d.ts +1 -0
- package/dist/esm/test/random.test.js +58 -0
- package/dist/esm/test/ready-manager.test.d.ts +1 -0
- package/dist/esm/test/ready-manager.test.js +27 -0
- package/dist/esm/test/render-hook.d.ts +23 -0
- package/dist/esm/test/render-hook.js +20 -0
- package/dist/esm/test/sequence-from-initial-offset.test.d.ts +4 -0
- package/dist/esm/test/sequence-from-initial-offset.test.js +33 -0
- package/dist/esm/test/sequence-validation.test.d.ts +1 -0
- package/dist/esm/test/sequence-validation.test.js +45 -0
- package/dist/esm/test/series.test.d.ts +1 -0
- package/dist/esm/test/series.test.js +113 -0
- package/dist/esm/test/spring.test.d.ts +1 -0
- package/dist/esm/test/spring.test.js +36 -0
- package/dist/esm/test/truthy.test.d.ts +1 -0
- package/dist/esm/test/truthy.test.js +22 -0
- package/dist/esm/test/use-audio-frame.test.d.ts +1 -0
- package/dist/esm/test/use-audio-frame.test.js +53 -0
- package/dist/esm/test/use-media-in-timeline.test.d.ts +1 -0
- package/dist/esm/test/use-media-in-timeline.test.js +49 -0
- package/dist/esm/test/use-media-tag-volume.test.d.ts +1 -0
- package/dist/esm/test/use-media-tag-volume.test.js +44 -0
- package/dist/esm/test/use-sync-volume-with-media-tag.test.d.ts +1 -0
- package/dist/esm/test/use-sync-volume-with-media-tag.test.js +53 -0
- package/dist/esm/test/validate-start-from-props.test.d.ts +1 -0
- package/dist/esm/test/validate-start-from-props.test.js +37 -0
- package/dist/esm/test/video.test.d.ts +1 -0
- package/dist/esm/test/video.test.js +55 -0
- package/dist/esm/test/volume-prop.test.d.ts +1 -0
- package/dist/esm/test/volume-prop.test.js +93 -0
- package/dist/esm/test/wrap-sequence-context.d.ts +6 -0
- package/dist/esm/test/wrap-sequence-context.js +37 -0
- package/dist/esm/timeline-position-state.d.ts +29 -0
- package/dist/esm/timeline-position-state.js +35 -0
- package/dist/esm/truthy.d.ts +3 -0
- package/dist/esm/truthy.js +3 -0
- package/dist/esm/use-current-frame.d.ts +6 -0
- package/dist/esm/use-current-frame.js +24 -0
- package/dist/esm/use-lazy-component.d.ts +7 -0
- package/dist/esm/use-lazy-component.js +22 -0
- package/dist/esm/use-media-in-timeline.d.ts +10 -0
- package/dist/esm/use-media-in-timeline.js +125 -0
- package/dist/esm/use-media-playback.d.ts +10 -0
- package/dist/esm/use-media-playback.js +73 -0
- package/dist/esm/use-media-tag-volume.d.ts +2 -0
- package/dist/esm/use-media-tag-volume.js +27 -0
- package/dist/esm/use-sync-volume-with-media-tag.d.ts +10 -0
- package/dist/esm/use-sync-volume-with-media-tag.js +17 -0
- package/dist/esm/use-unsafe-video-config.d.ts +2 -0
- package/dist/esm/use-unsafe-video-config.js +23 -0
- package/dist/esm/use-video-config.d.ts +7 -0
- package/dist/esm/use-video-config.js +25 -0
- package/dist/esm/use-video.d.ts +13 -0
- package/dist/esm/use-video.js +24 -0
- package/dist/esm/validate-frame.d.ts +1 -0
- package/dist/esm/validate-frame.js +20 -0
- package/dist/esm/validate-media-props.d.ts +4 -0
- package/dist/esm/validate-media-props.js +20 -0
- package/dist/esm/validate-start-from-props.d.ts +1 -0
- package/dist/esm/validate-start-from-props.js +27 -0
- package/dist/esm/validation/validate-composition-id.d.ts +3 -0
- package/dist/esm/validation/validate-composition-id.js +8 -0
- package/dist/esm/validation/validate-dimensions.d.ts +1 -0
- package/dist/esm/validation/validate-dimensions.js +17 -0
- package/dist/esm/validation/validate-duration-in-frames.d.ts +1 -0
- package/dist/esm/validation/validate-duration-in-frames.js +11 -0
- package/dist/esm/validation/validate-folder-name.d.ts +3 -0
- package/dist/esm/validation/validate-folder-name.js +14 -0
- package/dist/esm/validation/validate-fps.d.ts +1 -0
- package/dist/esm/validation/validate-fps.js +17 -0
- package/dist/esm/validation/validate-offthreadvideo-image-format.d.ts +1 -0
- package/dist/esm/validation/validate-offthreadvideo-image-format.js +11 -0
- package/dist/esm/validation/validation-spring-duration.d.ts +1 -0
- package/dist/esm/validation/validation-spring-duration.js +17 -0
- package/dist/esm/version.d.ts +1 -0
- package/dist/esm/version.js +2 -0
- package/dist/esm/video/OffthreadVideo.d.ts +3 -0
- package/dist/esm/video/OffthreadVideo.js +29 -0
- package/dist/esm/video/OffthreadVideoForRendering.d.ts +3 -0
- package/dist/esm/video/OffthreadVideoForRendering.js +100 -0
- package/dist/esm/video/Video.d.ts +8 -0
- package/dist/esm/video/Video.js +47 -0
- package/dist/esm/video/VideoForDevelopment.d.ts +11 -0
- package/dist/esm/video/VideoForDevelopment.js +110 -0
- package/dist/esm/video/VideoForRendering.d.ts +10 -0
- package/dist/esm/video/VideoForRendering.js +200 -0
- package/dist/esm/video/duration-state.d.ts +17 -0
- package/dist/esm/video/duration-state.js +29 -0
- package/dist/esm/video/get-current-time.d.ts +13 -0
- package/dist/esm/video/get-current-time.js +26 -0
- package/dist/esm/video/index.d.ts +3 -0
- package/dist/esm/video/index.js +2 -0
- package/dist/esm/video/props.d.ts +25 -0
- package/dist/esm/video/props.js +1 -0
- package/dist/esm/video/video-fragment.d.ts +12 -0
- package/dist/esm/video/video-fragment.js +55 -0
- package/dist/esm/video-config.d.ts +8 -0
- package/dist/esm/video-config.js +1 -0
- package/dist/esm/volume-position-state.d.ts +19 -0
- package/dist/esm/volume-position-state.js +27 -0
- package/dist/esm/volume-prop.d.ts +7 -0
- package/dist/esm/volume-prop.js +20 -0
- package/dist/esm/warn-about-non-seekable-media.d.ts +1 -0
- package/dist/esm/warn-about-non-seekable-media.js +30 -0
- package/dist/esm/wrap-remotion-context.d.ts +18 -0
- package/dist/esm/wrap-remotion-context.js +45 -0
- package/dist/internals.d.ts +0 -1
- package/dist/series/index.js +5 -2
- package/dist/tsconfig-cjs.tsbuildinfo +1 -0
- package/dist/use-video.d.ts +0 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/video/Video.d.ts +1 -1
- package/dist/video/VideoForDevelopment.d.ts +1 -1
- package/dist/video/VideoForRendering.d.ts +1 -1
- package/package.json +23 -12
- package/tsconfig-cjs.json +11 -0
- package/tsconfig.json +3 -3
- package/dist/LayerMaster.d.ts +0 -8
- package/dist/LayerMaster.js +0 -39
- package/dist/Satori.d.ts +0 -5
- package/dist/Satori.js +0 -92
- package/dist/get-compositions-from-markup.d.ts +0 -3
- package/dist/get-compositions-from-markup.js +0 -19
- package/dist/layers.d.ts +0 -24
- package/dist/layers.js +0 -149
- package/dist/video/NativeVideo.d.ts +0 -5
- package/dist/video/NativeVideo.js +0 -33
- package/dist/video/NativeVideoForRendering.d.ts +0 -8
- package/dist/video/NativeVideoForRendering.js +0 -14
|
@@ -0,0 +1,108 @@
|
|
|
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 '../Sequence.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);
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import type { VolumeProp } from '../volume-prop.js';
|
|
3
|
+
export declare type RemotionMainAudioProps = {
|
|
4
|
+
startFrom?: number;
|
|
5
|
+
endAt?: number;
|
|
6
|
+
};
|
|
7
|
+
export declare type RemotionAudioProps = Omit<React.DetailedHTMLProps<React.AudioHTMLAttributes<HTMLAudioElement>, HTMLAudioElement>, 'autoPlay' | 'controls' | 'onEnded' | 'nonce' | 'onResize' | 'onResizeCapture'> & {
|
|
8
|
+
volume?: VolumeProp;
|
|
9
|
+
playbackRate?: number;
|
|
10
|
+
acceptableTimeShiftInSeconds?: number;
|
|
11
|
+
allowAmplificationDuringRender?: boolean;
|
|
12
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { RemotionAudioProps } from './props.js';
|
|
3
|
+
/**
|
|
4
|
+
* This functionality of Remotion will keep a certain amount
|
|
5
|
+
* of <audio> tags pre-mounted and by default filled with an empty audio track.
|
|
6
|
+
* If the user interacts, the empty audio will be played.
|
|
7
|
+
* If one of Remotions <Audio /> tags get mounted, the audio will not be rendered at this location, but into one of the prerendered audio tags.
|
|
8
|
+
*
|
|
9
|
+
* This helps with autoplay issues on iOS Safari and soon other browsers,
|
|
10
|
+
* which only allow audio playback upon user interaction.
|
|
11
|
+
*
|
|
12
|
+
* The behavior can be disabled by passing `0` as the number of shared audio tracks.
|
|
13
|
+
*/
|
|
14
|
+
declare type AudioElem = {
|
|
15
|
+
id: number;
|
|
16
|
+
props: RemotionAudioProps;
|
|
17
|
+
el: React.RefObject<HTMLAudioElement>;
|
|
18
|
+
audioId: string;
|
|
19
|
+
};
|
|
20
|
+
declare type SharedContext = {
|
|
21
|
+
registerAudio: (aud: RemotionAudioProps, audioId: string) => AudioElem;
|
|
22
|
+
unregisterAudio: (id: number) => void;
|
|
23
|
+
updateAudio: (options: {
|
|
24
|
+
id: number;
|
|
25
|
+
aud: RemotionAudioProps;
|
|
26
|
+
audioId: string;
|
|
27
|
+
}) => void;
|
|
28
|
+
playAllAudios: () => void;
|
|
29
|
+
numberOfAudioTags: number;
|
|
30
|
+
};
|
|
31
|
+
export declare const SharedAudioContext: React.Context<SharedContext | null>;
|
|
32
|
+
export declare const SharedAudioContextProvider: React.FC<{
|
|
33
|
+
numberOfAudioTags: number;
|
|
34
|
+
children: React.ReactNode;
|
|
35
|
+
}>;
|
|
36
|
+
export declare const useSharedAudio: (aud: RemotionAudioProps, audioId: string) => AudioElem;
|
|
37
|
+
export {};
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import React, { createContext, createRef, useCallback, useContext, useInsertionEffect, useLayoutEffect, useMemo, useRef, useState, } from 'react';
|
|
3
|
+
const EMPTY_AUDIO = 'data:audio/mp3;base64,/+MYxAAJcAV8AAgAABn//////+/gQ5BAMA+D4Pg+BAQBAEAwD4Pg+D4EBAEAQDAPg++hYBH///hUFQVBUFREDQNHmf///////+MYxBUGkAGIMAAAAP/29Xt6lUxBTUUzLjEwMFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV/+MYxDUAAANIAAAAAFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV';
|
|
4
|
+
const compareProps = (obj1, obj2) => {
|
|
5
|
+
const keysA = Object.keys(obj1).sort();
|
|
6
|
+
const keysB = Object.keys(obj2).sort();
|
|
7
|
+
if (keysA.length !== keysB.length) {
|
|
8
|
+
return false;
|
|
9
|
+
}
|
|
10
|
+
for (let i = 0; i < keysA.length; i++) {
|
|
11
|
+
// Not the same keys
|
|
12
|
+
if (keysA[i] !== keysB[i]) {
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
// Not the same values
|
|
16
|
+
if (obj1[keysA[i]] !== obj2[keysB[i]]) {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
return true;
|
|
21
|
+
};
|
|
22
|
+
const didPropChange = (key, newProp, prevProp) => {
|
|
23
|
+
// /music.mp3 and http://localhost:3000/music.mp3 are the same
|
|
24
|
+
if (key === 'src' &&
|
|
25
|
+
!prevProp.startsWith('data:') &&
|
|
26
|
+
!newProp.startsWith('data:')) {
|
|
27
|
+
return (new URL(prevProp, window.location.origin).toString() !==
|
|
28
|
+
new URL(newProp, window.location.origin).toString());
|
|
29
|
+
}
|
|
30
|
+
if (prevProp === newProp) {
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
return true;
|
|
34
|
+
};
|
|
35
|
+
export const SharedAudioContext = createContext(null);
|
|
36
|
+
export const SharedAudioContextProvider = ({ children, numberOfAudioTags }) => {
|
|
37
|
+
const audios = useRef([]);
|
|
38
|
+
const [initialNumberOfAudioTags] = useState(numberOfAudioTags);
|
|
39
|
+
if (numberOfAudioTags !== initialNumberOfAudioTags) {
|
|
40
|
+
throw new Error('The number of shared audio tags has changed dynamically. Once you have set this property, you cannot change it afterwards.');
|
|
41
|
+
}
|
|
42
|
+
const refs = useMemo(() => {
|
|
43
|
+
return new Array(numberOfAudioTags).fill(true).map(() => {
|
|
44
|
+
return { id: Math.random(), ref: createRef() };
|
|
45
|
+
});
|
|
46
|
+
}, [numberOfAudioTags]);
|
|
47
|
+
const takenAudios = useRef(new Array(numberOfAudioTags).fill(false));
|
|
48
|
+
const rerenderAudios = useCallback(() => {
|
|
49
|
+
refs.forEach(({ ref, id }) => {
|
|
50
|
+
var _a;
|
|
51
|
+
const data = (_a = audios.current) === null || _a === void 0 ? void 0 : _a.find((a) => a.id === id);
|
|
52
|
+
const { current } = ref;
|
|
53
|
+
if (!current) {
|
|
54
|
+
// Whole player has been unmounted, the refs don't exist anymore.
|
|
55
|
+
// It is not an error anymore though
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
if (data === undefined) {
|
|
59
|
+
current.src = EMPTY_AUDIO;
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
if (!data) {
|
|
63
|
+
throw new TypeError('Expected audio data to be there');
|
|
64
|
+
}
|
|
65
|
+
Object.keys(data.props).forEach((key) => {
|
|
66
|
+
// @ts-expect-error
|
|
67
|
+
if (didPropChange(key, data.props[key], current[key])) {
|
|
68
|
+
// @ts-expect-error
|
|
69
|
+
current[key] = data.props[key];
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
}, [refs]);
|
|
74
|
+
const registerAudio = useCallback((aud, audioId) => {
|
|
75
|
+
var _a, _b;
|
|
76
|
+
const found = (_a = audios.current) === null || _a === void 0 ? void 0 : _a.find((a) => a.audioId === audioId);
|
|
77
|
+
if (found) {
|
|
78
|
+
return found;
|
|
79
|
+
}
|
|
80
|
+
const firstFreeAudio = takenAudios.current.findIndex((a) => a === false);
|
|
81
|
+
if (firstFreeAudio === -1) {
|
|
82
|
+
throw new Error(`Tried to simultaneously mount ${numberOfAudioTags + 1} <Audio /> tags at the same time. With the current settings, the maximum amount of <Audio /> tags is limited to ${numberOfAudioTags} at the same time. Remotion pre-mounts silent audio tags to help avoid browser autoplay restrictions. See https://remotion.dev/docs/player/autoplay#use-the-numberofsharedaudiotags-property for more information on how to increase this limit.`);
|
|
83
|
+
}
|
|
84
|
+
const { id, ref } = refs[firstFreeAudio];
|
|
85
|
+
const cloned = [...takenAudios.current];
|
|
86
|
+
cloned[firstFreeAudio] = id;
|
|
87
|
+
takenAudios.current = cloned;
|
|
88
|
+
const newElem = {
|
|
89
|
+
props: aud,
|
|
90
|
+
id,
|
|
91
|
+
el: ref,
|
|
92
|
+
audioId,
|
|
93
|
+
};
|
|
94
|
+
(_b = audios.current) === null || _b === void 0 ? void 0 : _b.push(newElem);
|
|
95
|
+
rerenderAudios();
|
|
96
|
+
return newElem;
|
|
97
|
+
}, [numberOfAudioTags, refs, rerenderAudios]);
|
|
98
|
+
const unregisterAudio = useCallback((id) => {
|
|
99
|
+
var _a;
|
|
100
|
+
const cloned = [...takenAudios.current];
|
|
101
|
+
const index = refs.findIndex((r) => r.id === id);
|
|
102
|
+
if (index === -1) {
|
|
103
|
+
throw new TypeError('Error occured in ');
|
|
104
|
+
}
|
|
105
|
+
cloned[index] = false;
|
|
106
|
+
takenAudios.current = cloned;
|
|
107
|
+
audios.current = (_a = audios.current) === null || _a === void 0 ? void 0 : _a.filter((a) => a.id !== id);
|
|
108
|
+
rerenderAudios();
|
|
109
|
+
}, [refs, rerenderAudios]);
|
|
110
|
+
const updateAudio = useCallback(({ aud, audioId, id, }) => {
|
|
111
|
+
var _a;
|
|
112
|
+
let changed = false;
|
|
113
|
+
audios.current = (_a = audios.current) === null || _a === void 0 ? void 0 : _a.map((prevA) => {
|
|
114
|
+
if (prevA.id === id) {
|
|
115
|
+
const isTheSame = compareProps(aud, prevA.props);
|
|
116
|
+
if (isTheSame) {
|
|
117
|
+
return prevA;
|
|
118
|
+
}
|
|
119
|
+
changed = true;
|
|
120
|
+
return {
|
|
121
|
+
...prevA,
|
|
122
|
+
props: aud,
|
|
123
|
+
audioId,
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
return prevA;
|
|
127
|
+
});
|
|
128
|
+
if (changed) {
|
|
129
|
+
rerenderAudios();
|
|
130
|
+
}
|
|
131
|
+
}, [rerenderAudios]);
|
|
132
|
+
const playAllAudios = useCallback(() => {
|
|
133
|
+
refs.forEach((ref) => {
|
|
134
|
+
var _a;
|
|
135
|
+
(_a = ref.ref.current) === null || _a === void 0 ? void 0 : _a.play();
|
|
136
|
+
});
|
|
137
|
+
}, [refs]);
|
|
138
|
+
const value = useMemo(() => {
|
|
139
|
+
return {
|
|
140
|
+
registerAudio,
|
|
141
|
+
unregisterAudio,
|
|
142
|
+
updateAudio,
|
|
143
|
+
playAllAudios,
|
|
144
|
+
numberOfAudioTags,
|
|
145
|
+
};
|
|
146
|
+
}, [
|
|
147
|
+
numberOfAudioTags,
|
|
148
|
+
playAllAudios,
|
|
149
|
+
registerAudio,
|
|
150
|
+
unregisterAudio,
|
|
151
|
+
updateAudio,
|
|
152
|
+
]);
|
|
153
|
+
return (_jsxs(SharedAudioContext.Provider, { value: value, children: [refs.map(({ id, ref }) => {
|
|
154
|
+
return _jsx("audio", { ref: ref, src: EMPTY_AUDIO }, id);
|
|
155
|
+
}), children] }));
|
|
156
|
+
};
|
|
157
|
+
export const useSharedAudio = (aud, audioId) => {
|
|
158
|
+
const ctx = useContext(SharedAudioContext);
|
|
159
|
+
/**
|
|
160
|
+
* We work around this in React 18 so an audio tag will only register itself once
|
|
161
|
+
*/
|
|
162
|
+
const [elem] = useState(() => {
|
|
163
|
+
if (ctx && ctx.numberOfAudioTags > 0) {
|
|
164
|
+
return ctx.registerAudio(aud, audioId);
|
|
165
|
+
}
|
|
166
|
+
return {
|
|
167
|
+
el: React.createRef(),
|
|
168
|
+
id: Math.random(),
|
|
169
|
+
props: aud,
|
|
170
|
+
audioId,
|
|
171
|
+
};
|
|
172
|
+
});
|
|
173
|
+
/**
|
|
174
|
+
* Effects in React 18 fire twice, and we are looking for a way to only fire it once.
|
|
175
|
+
* - useInsertionEffect only fires once. If it's available we are in React 18.
|
|
176
|
+
* - useLayoutEffect only fires once in React 17.
|
|
177
|
+
*/
|
|
178
|
+
const effectToUse = useInsertionEffect !== null && useInsertionEffect !== void 0 ? useInsertionEffect : useLayoutEffect;
|
|
179
|
+
if (typeof document !== 'undefined') {
|
|
180
|
+
effectToUse(() => {
|
|
181
|
+
if (ctx && ctx.numberOfAudioTags > 0) {
|
|
182
|
+
ctx.updateAudio({ id: elem.id, aud, audioId });
|
|
183
|
+
}
|
|
184
|
+
}, [aud, ctx, elem.id, audioId]);
|
|
185
|
+
effectToUse(() => {
|
|
186
|
+
return () => {
|
|
187
|
+
if (ctx && ctx.numberOfAudioTags > 0) {
|
|
188
|
+
ctx.unregisterAudio(elem.id);
|
|
189
|
+
}
|
|
190
|
+
};
|
|
191
|
+
}, [ctx, elem.id]);
|
|
192
|
+
}
|
|
193
|
+
return elem;
|
|
194
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { useContext } from 'react';
|
|
2
|
+
import { SequenceContext } from '../Sequence.js';
|
|
3
|
+
import { useCurrentFrame } from '../use-current-frame.js';
|
|
4
|
+
export const useMediaStartsAt = () => {
|
|
5
|
+
var _a;
|
|
6
|
+
const parentSequence = useContext(SequenceContext);
|
|
7
|
+
const startsAt = Math.min(0, (_a = parentSequence === null || parentSequence === void 0 ? void 0 : parentSequence.relativeFrom) !== null && _a !== void 0 ? _a : 0);
|
|
8
|
+
return startsAt;
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* When passing a function as the prop for `volume`,
|
|
12
|
+
* we calculate the way more intuitive value for currentFrame
|
|
13
|
+
*/
|
|
14
|
+
export const useFrameForVolumeProp = () => {
|
|
15
|
+
const frame = useCurrentFrame();
|
|
16
|
+
const startsAt = useMediaStartsAt();
|
|
17
|
+
return frame + startsAt;
|
|
18
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function bezier(mX1: number, mY1: number, mX2: number, mY2: number): (x: number) => number;
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
// Taken from https://github.com/facebook/react-native/blob/0b9ea60b4fee8cacc36e7160e31b91fc114dbc0d/Libraries/Animated/src/bezier.js
|
|
2
|
+
const NEWTON_ITERATIONS = 4;
|
|
3
|
+
const NEWTON_MIN_SLOPE = 0.001;
|
|
4
|
+
const SUBDIVISION_PRECISION = 0.0000001;
|
|
5
|
+
const SUBDIVISION_MAX_ITERATIONS = 10;
|
|
6
|
+
const kSplineTableSize = 11;
|
|
7
|
+
const kSampleStepSize = 1.0 / (kSplineTableSize - 1.0);
|
|
8
|
+
const float32ArraySupported = typeof Float32Array === 'function';
|
|
9
|
+
function a(aA1, aA2) {
|
|
10
|
+
return 1.0 - 3.0 * aA2 + 3.0 * aA1;
|
|
11
|
+
}
|
|
12
|
+
function b(aA1, aA2) {
|
|
13
|
+
return 3.0 * aA2 - 6.0 * aA1;
|
|
14
|
+
}
|
|
15
|
+
function c(aA1) {
|
|
16
|
+
return 3.0 * aA1;
|
|
17
|
+
}
|
|
18
|
+
// Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.
|
|
19
|
+
function calcBezier(aT, aA1, aA2) {
|
|
20
|
+
return ((a(aA1, aA2) * aT + b(aA1, aA2)) * aT + c(aA1)) * aT;
|
|
21
|
+
}
|
|
22
|
+
// Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2.
|
|
23
|
+
function getSlope(aT, aA1, aA2) {
|
|
24
|
+
return 3.0 * a(aA1, aA2) * aT * aT + 2.0 * b(aA1, aA2) * aT + c(aA1);
|
|
25
|
+
}
|
|
26
|
+
function binarySubdivide({ aX, _aA, _aB, mX1, mX2, }) {
|
|
27
|
+
let currentX;
|
|
28
|
+
let currentT;
|
|
29
|
+
let i = 0;
|
|
30
|
+
let aA = _aA;
|
|
31
|
+
let aB = _aB;
|
|
32
|
+
do {
|
|
33
|
+
currentT = aA + (aB - aA) / 2.0;
|
|
34
|
+
currentX = calcBezier(currentT, mX1, mX2) - aX;
|
|
35
|
+
if (currentX > 0.0) {
|
|
36
|
+
aB = currentT;
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
aA = currentT;
|
|
40
|
+
}
|
|
41
|
+
} while (Math.abs(currentX) > SUBDIVISION_PRECISION &&
|
|
42
|
+
++i < SUBDIVISION_MAX_ITERATIONS);
|
|
43
|
+
return currentT;
|
|
44
|
+
}
|
|
45
|
+
function newtonRaphsonIterate(aX, _aGuessT, mX1, mX2) {
|
|
46
|
+
let aGuessT = _aGuessT;
|
|
47
|
+
for (let i = 0; i < NEWTON_ITERATIONS; ++i) {
|
|
48
|
+
const currentSlope = getSlope(aGuessT, mX1, mX2);
|
|
49
|
+
if (currentSlope === 0.0) {
|
|
50
|
+
return aGuessT;
|
|
51
|
+
}
|
|
52
|
+
const currentX = calcBezier(aGuessT, mX1, mX2) - aX;
|
|
53
|
+
aGuessT -= currentX / currentSlope;
|
|
54
|
+
}
|
|
55
|
+
return aGuessT;
|
|
56
|
+
}
|
|
57
|
+
export function bezier(mX1, mY1, mX2, mY2) {
|
|
58
|
+
if (!(mX1 >= 0 && mX1 <= 1 && mX2 >= 0 && mX2 <= 1)) {
|
|
59
|
+
throw new Error('bezier x values must be in [0, 1] range');
|
|
60
|
+
}
|
|
61
|
+
// Precompute samples table
|
|
62
|
+
const sampleValues = float32ArraySupported
|
|
63
|
+
? new Float32Array(kSplineTableSize)
|
|
64
|
+
: new Array(kSplineTableSize);
|
|
65
|
+
if (mX1 !== mY1 || mX2 !== mY2) {
|
|
66
|
+
for (let i = 0; i < kSplineTableSize; ++i) {
|
|
67
|
+
sampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
function getTForX(aX) {
|
|
71
|
+
let intervalStart = 0.0;
|
|
72
|
+
let currentSample = 1;
|
|
73
|
+
const lastSample = kSplineTableSize - 1;
|
|
74
|
+
for (; currentSample !== lastSample && sampleValues[currentSample] <= aX; ++currentSample) {
|
|
75
|
+
intervalStart += kSampleStepSize;
|
|
76
|
+
}
|
|
77
|
+
--currentSample;
|
|
78
|
+
// Interpolate to provide an initial guess for t
|
|
79
|
+
const dist = (aX - sampleValues[currentSample]) /
|
|
80
|
+
(sampleValues[currentSample + 1] - sampleValues[currentSample]);
|
|
81
|
+
const guessForT = intervalStart + dist * kSampleStepSize;
|
|
82
|
+
const initialSlope = getSlope(guessForT, mX1, mX2);
|
|
83
|
+
if (initialSlope >= NEWTON_MIN_SLOPE) {
|
|
84
|
+
return newtonRaphsonIterate(aX, guessForT, mX1, mX2);
|
|
85
|
+
}
|
|
86
|
+
if (initialSlope === 0.0) {
|
|
87
|
+
return guessForT;
|
|
88
|
+
}
|
|
89
|
+
return binarySubdivide({
|
|
90
|
+
aX,
|
|
91
|
+
_aA: intervalStart,
|
|
92
|
+
_aB: intervalStart + kSampleStepSize,
|
|
93
|
+
mX1,
|
|
94
|
+
mX2,
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
return function (x) {
|
|
98
|
+
if (mX1 === mY1 && mX2 === mY2) {
|
|
99
|
+
return x; // linear
|
|
100
|
+
}
|
|
101
|
+
// Because JavaScript number are imprecise, we should guarantee the extremes are right.
|
|
102
|
+
if (x === 0) {
|
|
103
|
+
return 0;
|
|
104
|
+
}
|
|
105
|
+
if (x === 1) {
|
|
106
|
+
return 1;
|
|
107
|
+
}
|
|
108
|
+
return calcBezier(getTForX(x), mY1, mY2);
|
|
109
|
+
};
|
|
110
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function cancelRender(err: unknown): never;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
const isErrorLike = (err) => {
|
|
2
|
+
if (err === null) {
|
|
3
|
+
return false;
|
|
4
|
+
}
|
|
5
|
+
if (typeof err !== 'object') {
|
|
6
|
+
return false;
|
|
7
|
+
}
|
|
8
|
+
if (!('stack' in err)) {
|
|
9
|
+
return false;
|
|
10
|
+
}
|
|
11
|
+
// eslint-disable-next-line @typescript-eslint/prefer-ts-expect-error
|
|
12
|
+
// @ts-ignore we just asserted
|
|
13
|
+
if (typeof err.stack !== 'string') {
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
if (!('message' in err)) {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
// eslint-disable-next-line @typescript-eslint/prefer-ts-expect-error
|
|
20
|
+
// @ts-ignore we just asserted
|
|
21
|
+
if (typeof err.message !== 'string') {
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
return true;
|
|
25
|
+
};
|
|
26
|
+
export function cancelRender(err) {
|
|
27
|
+
let error;
|
|
28
|
+
if (isErrorLike(err)) {
|
|
29
|
+
error = err;
|
|
30
|
+
}
|
|
31
|
+
else if (typeof err === 'string') {
|
|
32
|
+
error = Error(err);
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
error = Error('Rendering was cancelled');
|
|
36
|
+
}
|
|
37
|
+
window.remotion_cancelledError = error.stack;
|
|
38
|
+
throw error;
|
|
39
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const getInputProps: () => any;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { getRemotionEnvironment } from '../get-environment.js';
|
|
2
|
+
let didWarnSSRImport = false;
|
|
3
|
+
const warnOnceSSRImport = () => {
|
|
4
|
+
if (didWarnSSRImport) {
|
|
5
|
+
return;
|
|
6
|
+
}
|
|
7
|
+
didWarnSSRImport = true;
|
|
8
|
+
console.warn('Called `getInputProps()` on the server. This function is not available server-side and has returned an empty object.');
|
|
9
|
+
console.warn("To hide this warning, don't call this function on the server:");
|
|
10
|
+
console.warn(" typeof window === 'undefined' ? {} : getInputProps()");
|
|
11
|
+
};
|
|
12
|
+
export const getInputProps = () => {
|
|
13
|
+
if (typeof window === 'undefined') {
|
|
14
|
+
warnOnceSSRImport();
|
|
15
|
+
return {};
|
|
16
|
+
}
|
|
17
|
+
if (getRemotionEnvironment() === 'player-development' ||
|
|
18
|
+
getRemotionEnvironment() === 'player-production') {
|
|
19
|
+
throw new Error('You cannot call `getInputProps()` from a <Player>. Instead, the props are available as React props from component that you passed as `component` prop.');
|
|
20
|
+
}
|
|
21
|
+
const param = window.remotion_inputProps;
|
|
22
|
+
if (!param) {
|
|
23
|
+
return {};
|
|
24
|
+
}
|
|
25
|
+
const parsed = JSON.parse(param);
|
|
26
|
+
return parsed;
|
|
27
|
+
};
|