remotion 4.0.397 → 4.0.399
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/Img.d.ts +1 -1
- package/dist/cjs/audio/Audio.js +3 -0
- package/dist/cjs/version.d.ts +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/cjs/video/OffthreadVideo.js +3 -0
- package/dist/cjs/video/Video.js +3 -0
- package/dist/esm/index.mjs +10 -1
- package/dist/esm/version.mjs +1 -1
- package/package.json +2 -2
- package/dist/cjs/calculate-loop.d.ts +0 -6
- package/dist/cjs/calculate-loop.js +0 -17
- package/dist/cjs/video/use-audio-channel-index.d.ts +0 -4
- package/dist/cjs/video/use-audio-channel-index.js +0 -13
- package/dist/esm/index.mjs.map +0 -137
package/dist/esm/index.mjs.map
DELETED
|
@@ -1,137 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["src/_check-rsc.ts", "src/Clipper.tsx", "src/enable-sequence-stack-traces.ts", "src/get-remotion-environment.ts", "src/is-player.tsx", "src/truthy.ts", "src/version.ts", "src/multiple-versions-warning.ts", "src/Null.tsx", "src/Sequence.tsx", "src/AbsoluteFill.tsx", "src/SequenceContext.tsx", "src/SequenceManager.tsx", "src/nonce.ts", "src/timeline-position-state.ts", "src/use-remotion-environment.ts", "src/remotion-environment-context.ts", "src/use-video.ts", "src/CompositionManagerContext.tsx", "src/ResolveCompositionConfig.tsx", "src/EditorProps.tsx", "src/input-props-serialization.ts", "src/config/input-props.ts", "src/codec.ts", "src/validation/validate-default-codec.ts", "src/validation/validate-dimensions.ts", "src/validation/validate-duration-in-frames.ts", "src/validation/validate-fps.ts", "src/resolve-video-config.ts", "src/use-video-config.ts", "src/CanUseRemotionHooks.tsx", "src/use-unsafe-video-config.ts", "src/freeze.tsx", "src/use-current-frame.ts", "src/animated-image/AnimatedImage.tsx", "src/cancel-render.ts", "src/use-delay-render.ts", "src/log.ts", "src/delay-render.ts", "src/animated-image/canvas.tsx", "src/animated-image/decode-image.ts", "src/animated-image/resolve-image-source.tsx", "src/Artifact.tsx", "src/RenderAssetManager.tsx", "src/validation/validate-artifact.ts", "src/audio/Audio.tsx", "src/absolute-src.ts", "src/calculate-loop.ts", "src/loop/index.tsx", "src/prefetch.ts", "src/playback-logging.ts", "src/prefetch-state.tsx", "src/validate-media-props.ts", "src/validate-start-from-props.ts", "src/video/duration-state.tsx", "src/audio/AudioForPreview.tsx", "src/get-cross-origin-value.ts", "src/log-level-context.tsx", "src/random.ts", "src/use-amplification.ts", "src/audio/shared-audio-tags.tsx", "src/play-and-handle-not-allowed-error.ts", "src/audio/shared-element-source-node.ts", "src/audio/use-audio-context.ts", "src/is-approximately-the-same.ts", "src/video/video-fragment.ts", "src/use-media-in-timeline.ts", "src/audio/use-audio-frame.ts", "src/get-asset-file-name.ts", "src/volume-prop.ts", "src/use-media-playback.ts", "src/buffer-until-first-frame.ts", "src/use-buffer-state.ts", "src/buffering.tsx", "src/media-tag-current-time-timestamp.ts", "src/seek.ts", "src/use-media-buffering.ts", "src/use-request-video-callback-time.ts", "src/interpolate.ts", "src/video/get-current-time.ts", "src/warn-about-non-seekable-media.ts", "src/volume-position-state.ts", "src/volume-safeguard.ts", "src/audio/AudioForRendering.tsx", "src/Composition.tsx", "src/Folder.tsx", "src/validation/validate-folder-name.ts", "src/loading-indicator.tsx", "src/portal-node.ts", "src/use-lazy-component.ts", "src/validation/validate-composition-id.ts", "src/validation/validate-default-props.ts", "src/bezier.ts", "src/easing.ts", "src/v5-flag.ts", "src/get-static-files.ts", "src/IFrame.tsx", "src/Img.tsx", "src/internals.ts", "src/CompositionManager.tsx", "src/default-css.ts", "src/get-preview-dom-element.ts", "src/register-root.ts", "src/RemotionRoot.tsx", "src/setup-env-variables.ts", "src/use-current-scale.ts", "src/video/VideoForPreview.tsx", "src/video/emit-video-frame.ts", "src/watch-static-file.ts", "src/wrap-remotion-context.tsx", "src/interpolate-colors.ts", "src/validate-frame.ts", "src/video/offthread-video-source.ts", "src/series/index.tsx", "src/series/flatten-children.tsx", "src/series/is-inside-series.tsx", "src/validation/validation-spring-duration.ts", "src/spring/spring-utils.ts", "src/spring/measure-spring.ts", "src/spring/index.ts", "src/static-file.ts", "src/Still.tsx", "src/video/OffthreadVideo.tsx", "src/video/OffthreadVideoForRendering.tsx", "src/video/Video.tsx", "src/video/VideoForRendering.tsx", "src/video/seek-until-right.ts", "src/index.ts"],
|
|
4
|
-
"sourcesContent": [
|
|
5
|
-
"import {createContext} from 'react';\n\nif (typeof createContext !== 'function') {\n\tconst err = [\n\t\t'Remotion requires React.createContext, but it is \"undefined\".',\n\t\t'If you are in a React Server Component, turn it into a client component by adding \"use client\" at the top of the file.',\n\t\t'',\n\t\t'Before:',\n\t\t' import {useCurrentFrame} from \"remotion\";',\n\t\t'',\n\t\t'After:',\n\t\t' \"use client\";',\n\t\t' import {useCurrentFrame} from \"remotion\";',\n\t];\n\n\tthrow new Error(err.join('\\n'));\n}\n",
|
|
6
|
-
"import type React from 'react';\n\n/**\n * @deprecated <Clipper> has been removed as of Remotion v4.0.228. The native clipping APIs were experimental and subject to removal at any time. We removed them because they were sparingly used and made rendering often slower rather than faster.\n */\nexport const Clipper: React.FC<{}> = () => {\n\tthrow new Error(\n\t\t'<Clipper> has been removed as of Remotion v4.0.228. The native clipping APIs were experimental and subject to removal at any time. We removed them because they were sparingly used and made rendering often slower rather than faster.',\n\t);\n};\n",
|
|
7
|
-
"import React from 'react';\nimport {getRemotionEnvironment} from './get-remotion-environment';\n\nconst originalCreateElement = React.createElement;\nconst componentsToAddStacksTo: unknown[] = [];\n\n// Gets called when a new component is added,\n// also when the Studio is mounted\nexport const enableSequenceStackTraces = () => {\n\tif (!getRemotionEnvironment().isStudio) {\n\t\treturn;\n\t}\n\n\tconst proxy = new Proxy(originalCreateElement, {\n\t\tapply(target, thisArg, argArray) {\n\t\t\tif (componentsToAddStacksTo.includes(argArray[0])) {\n\t\t\t\tconst [first, props, ...rest] = argArray;\n\t\t\t\tconst newProps = {\n\t\t\t\t\t...(props ?? {}),\n\t\t\t\t\tstack: new Error().stack,\n\t\t\t\t};\n\n\t\t\t\treturn Reflect.apply(target, thisArg, [first, newProps, ...rest]);\n\t\t\t}\n\n\t\t\treturn Reflect.apply(target, thisArg, argArray);\n\t\t},\n\t});\n\n\tReact.createElement = proxy;\n};\n\nexport const addSequenceStackTraces = (component: unknown) => {\n\tcomponentsToAddStacksTo.push(component);\n\tenableSequenceStackTraces();\n};\n",
|
|
8
|
-
"import type {RemotionEnvironment} from './remotion-environment-context';\n\n// Avoid VITE obfuscation\nfunction getNodeEnvString() {\n\treturn ['NOD', 'E_EN', 'V'].join('');\n}\n\nconst getEnvString = (): 'env' => {\n\treturn ['e', 'nv'].join('') as 'env';\n};\n\n/*\n * @description Provides information about the Remotion Environment.\n * @note Prefer using the `useRemotionEnvironment()` hook as it will support future scoped contexts for browser rendering scenarios.\n * @see [Documentation](https://remotion.dev/docs/get-remotion-environment)\n */\nexport const getRemotionEnvironment = (): RemotionEnvironment => {\n\tconst isPlayer = typeof window !== 'undefined' && window.remotion_isPlayer;\n\tconst isRendering =\n\t\ttypeof window !== 'undefined' &&\n\t\ttypeof window.process !== 'undefined' &&\n\t\ttypeof window.process.env !== 'undefined' &&\n\t\t(window.process[getEnvString()][getNodeEnvString()] === 'test' ||\n\t\t\t(window.process[getEnvString()][getNodeEnvString()] === 'production' &&\n\t\t\t\ttypeof window !== 'undefined' &&\n\t\t\t\ttypeof window.remotion_puppeteerTimeout !== 'undefined'));\n\tconst isStudio = typeof window !== 'undefined' && window.remotion_isStudio;\n\tconst isReadOnlyStudio =\n\t\ttypeof window !== 'undefined' && window.remotion_isReadOnlyStudio;\n\n\treturn {\n\t\tisStudio,\n\t\tisRendering,\n\t\tisPlayer,\n\t\tisReadOnlyStudio,\n\t\tisClientSideRendering: false,\n\t};\n};\n",
|
|
9
|
-
"import type {PropsWithChildren} from 'react';\nimport {createContext, useContext} from 'react';\n\nconst IsPlayerContext = createContext(false);\n\nexport const IsPlayerContextProvider: React.FC<PropsWithChildren> = ({\n\tchildren,\n}) => {\n\treturn <IsPlayerContext.Provider value>{children}</IsPlayerContext.Provider>;\n};\n\nexport const useIsPlayer = (): boolean => {\n\treturn useContext(IsPlayerContext);\n};\n",
|
|
10
|
-
"type Truthy<T> = T extends false | '' | 0 | null | undefined ? never : T; // from lodash\n\nexport function truthy<T>(value: T): value is Truthy<T> {\n\treturn Boolean(value);\n}\n",
|
|
11
|
-
"// Automatically generated on publish\n\n/**\n * @description Provides the current version number of the Remotion library.\n * @see [Documentation](https://remotion.dev/docs/version)\n * @returns {string} The current version of the remotion package\n */\nexport const VERSION = '4.0.352';\n",
|
|
12
|
-
"import {truthy} from './truthy.js';\nimport {VERSION} from './version.js';\n\nexport const checkMultipleRemotionVersions = () => {\n\tif (typeof globalThis === 'undefined') {\n\t\treturn;\n\t}\n\n\tconst set = () => {\n\t\t(globalThis as unknown as Window).remotion_imported = VERSION;\n\t\tif (typeof window !== 'undefined') {\n\t\t\twindow.remotion_imported = VERSION;\n\t\t}\n\t};\n\n\tconst alreadyImported =\n\t\t(globalThis as unknown as Window).remotion_imported ||\n\t\t(typeof window !== 'undefined' && window.remotion_imported);\n\n\tif (alreadyImported) {\n\t\tif (alreadyImported === VERSION) {\n\t\t\t// Next.JS will reload the package and cause a server-side warning.\n\t\t\t// It's okay if this happens during SSR in developement\n\t\t\treturn;\n\t\t}\n\n\t\t// @remotion/webcodecs will also set this variable for the purpose of\n\t\t// being picked up by Wappalyzer.\n\t\t// If so, we can just override it because it is not the same as Remotion\n\t\tif (\n\t\t\ttypeof alreadyImported === 'string' &&\n\t\t\talreadyImported.includes('webcodecs')\n\t\t) {\n\t\t\tset();\n\t\t\treturn;\n\t\t}\n\n\t\tthrow new TypeError(\n\t\t\t`🚨 Multiple versions of Remotion detected: ${[\n\t\t\t\tVERSION,\n\t\t\t\ttypeof alreadyImported === 'string'\n\t\t\t\t\t? alreadyImported\n\t\t\t\t\t: 'an older version',\n\t\t\t]\n\t\t\t\t.filter(truthy)\n\t\t\t\t.join(\n\t\t\t\t\t' and ',\n\t\t\t\t)}. This will cause things to break in an unexpected way.\\nCheck that all your Remotion packages are on the same version. If your dependencies depend on Remotion, make them peer dependencies. You can also run \\`npx remotion versions\\` from your terminal to see which versions are mismatching.`,\n\t\t);\n\t}\n\n\tset();\n};\n",
|
|
13
|
-
"/**\n * @deprecated <Null /> has been removed as of Remotion v4.0.228. The native clipping APIs were experimental and subject to removal at any time. We removed them because they were sparingly used and made rendering often slower rather than faster.\n */\nexport const Null: React.FC = () => {\n\tthrow new Error(\n\t\t'<Null> has been removed as of Remotion v4.0.228. The native clipping APIs were experimental and subject to removal at any time. We removed them because they were sparingly used and made rendering often slower rather than faster.',\n\t);\n};\n",
|
|
14
|
-
"/* eslint-disable @typescript-eslint/no-use-before-define */\nimport React, {\n\tforwardRef,\n\tuseContext,\n\tuseEffect,\n\tuseMemo,\n\tuseState,\n} from 'react';\nimport {AbsoluteFill} from './AbsoluteFill.js';\nimport type {LoopDisplay} from './CompositionManager.js';\nimport type {SequenceContextType} from './SequenceContext.js';\nimport {SequenceContext} from './SequenceContext.js';\nimport {\n\tSequenceManager,\n\tSequenceVisibilityToggleContext,\n} from './SequenceManager.js';\nimport {useNonce} from './nonce.js';\nimport {\n\tTimelineContext,\n\tuseTimelinePosition,\n} from './timeline-position-state.js';\nimport {useVideoConfig} from './use-video-config.js';\n\nimport {Freeze} from './freeze.js';\nimport {useCurrentFrame} from './use-current-frame';\nimport {useRemotionEnvironment} from './use-remotion-environment.js';\n\nexport type AbsoluteFillLayout = {\n\tlayout?: 'absolute-fill';\n\tpremountFor?: number;\n\tpostmountFor?: number;\n\tstyle?: React.CSSProperties;\n\tstyleWhilePremounted?: React.CSSProperties;\n\tstyleWhilePostmounted?: React.CSSProperties;\n\tclassName?: string;\n};\n\nexport type LayoutAndStyle =\n\t| AbsoluteFillLayout\n\t| {\n\t\t\tlayout: 'none';\n\t };\n\nexport type SequencePropsWithoutDuration = {\n\treadonly children: React.ReactNode;\n\treadonly width?: number;\n\treadonly height?: number;\n\treadonly from?: number;\n\treadonly name?: string;\n\treadonly showInTimeline?: boolean;\n\t/**\n\t * @deprecated For internal use only.\n\t */\n\treadonly _remotionInternalLoopDisplay?: LoopDisplay;\n\t/**\n\t * @deprecated For internal use only.\n\t */\n\treadonly _remotionInternalPremountDisplay?: number | null;\n\t/**\n\t * @deprecated For internal use only.\n\t */\n\treadonly _remotionInternalPostmountDisplay?: number | null;\n\t/**\n\t * @deprecated For internal use only.\n\t */\n\treadonly _remotionInternalStack?: string;\n\t/**\n\t * @deprecated For internal use only.\n\t */\n\treadonly _remotionInternalIsPremounting?: boolean;\n\t/**\n\t * @deprecated For internal use only.\n\t */\n\treadonly _remotionInternalIsPostmounting?: boolean;\n} & LayoutAndStyle;\n\nexport type SequenceProps = {\n\treadonly durationInFrames?: number;\n} & SequencePropsWithoutDuration;\n\nconst RegularSequenceRefForwardingFunction: React.ForwardRefRenderFunction<\n\tHTMLDivElement,\n\tSequenceProps\n> = (\n\t{\n\t\tfrom = 0,\n\t\tdurationInFrames = Infinity,\n\t\tchildren,\n\t\tname,\n\t\theight,\n\t\twidth,\n\t\tshowInTimeline = true,\n\t\t_remotionInternalLoopDisplay: loopDisplay,\n\t\t_remotionInternalStack: stack,\n\t\t_remotionInternalPremountDisplay: premountDisplay,\n\t\t_remotionInternalPostmountDisplay: postmountDisplay,\n\t\t...other\n\t},\n\tref,\n) => {\n\tconst {layout = 'absolute-fill'} = other;\n\n\tconst [id] = useState(() => String(Math.random()));\n\tconst parentSequence = useContext(SequenceContext);\n\tconst {rootId} = useContext(TimelineContext);\n\tconst cumulatedFrom = parentSequence\n\t\t? parentSequence.cumulatedFrom + parentSequence.relativeFrom\n\t\t: 0;\n\tconst nonce = useNonce();\n\n\tif (layout !== 'absolute-fill' && layout !== 'none') {\n\t\tthrow new TypeError(\n\t\t\t`The layout prop of <Sequence /> expects either \"absolute-fill\" or \"none\", but you passed: ${layout}`,\n\t\t);\n\t}\n\n\t// @ts-expect-error\n\tif (layout === 'none' && typeof other.style !== 'undefined') {\n\t\tthrow new TypeError('If layout=\"none\", you may not pass a style.');\n\t}\n\n\tif (typeof durationInFrames !== 'number') {\n\t\tthrow new TypeError(\n\t\t\t`You passed to durationInFrames an argument of type ${typeof durationInFrames}, but it must be a number.`,\n\t\t);\n\t}\n\n\tif (durationInFrames <= 0) {\n\t\tthrow new TypeError(\n\t\t\t`durationInFrames must be positive, but got ${durationInFrames}`,\n\t\t);\n\t}\n\n\tif (typeof from !== 'number') {\n\t\tthrow new TypeError(\n\t\t\t`You passed to the \"from\" props of your <Sequence> an argument of type ${typeof from}, but it must be a number.`,\n\t\t);\n\t}\n\n\tif (!Number.isFinite(from)) {\n\t\tthrow new TypeError(\n\t\t\t`The \"from\" prop of a sequence must be finite, but got ${from}.`,\n\t\t);\n\t}\n\n\tconst absoluteFrame = useTimelinePosition();\n\tconst videoConfig = useVideoConfig();\n\n\tconst parentSequenceDuration = parentSequence\n\t\t? Math.min(parentSequence.durationInFrames - from, durationInFrames)\n\t\t: durationInFrames;\n\tconst actualDurationInFrames = Math.max(\n\t\t0,\n\t\tMath.min(videoConfig.durationInFrames - from, parentSequenceDuration),\n\t);\n\tconst {registerSequence, unregisterSequence} = useContext(SequenceManager);\n\tconst {hidden} = useContext(SequenceVisibilityToggleContext);\n\n\tconst premounting = useMemo(() => {\n\t\t// || is intentional, ?? would not trigger on `false`\n\t\treturn (\n\t\t\tparentSequence?.premounting ||\n\t\t\tBoolean(other._remotionInternalIsPremounting)\n\t\t);\n\t}, [other._remotionInternalIsPremounting, parentSequence?.premounting]);\n\n\tconst postmounting = useMemo(() => {\n\t\t// || is intentional, ?? would not trigger on `false`\n\t\treturn (\n\t\t\tparentSequence?.postmounting ||\n\t\t\tBoolean(other._remotionInternalIsPostmounting)\n\t\t);\n\t}, [other._remotionInternalIsPostmounting, parentSequence?.postmounting]);\n\n\tconst contextValue = useMemo((): SequenceContextType => {\n\t\treturn {\n\t\t\tcumulatedFrom,\n\t\t\trelativeFrom: from,\n\t\t\tdurationInFrames: actualDurationInFrames,\n\t\t\tparentFrom: parentSequence?.relativeFrom ?? 0,\n\t\t\tid,\n\t\t\theight: height ?? parentSequence?.height ?? null,\n\t\t\twidth: width ?? parentSequence?.width ?? null,\n\t\t\tpremounting,\n\t\t\tpostmounting,\n\t\t};\n\t}, [\n\t\tcumulatedFrom,\n\t\tfrom,\n\t\tactualDurationInFrames,\n\t\tparentSequence,\n\t\tid,\n\t\theight,\n\t\twidth,\n\t\tpremounting,\n\t\tpostmounting,\n\t]);\n\n\tconst timelineClipName = useMemo(() => {\n\t\treturn name ?? '';\n\t}, [name]);\n\n\tconst env = useRemotionEnvironment();\n\n\tuseEffect(() => {\n\t\tif (!env.isStudio) {\n\t\t\treturn;\n\t\t}\n\n\t\tregisterSequence({\n\t\t\tfrom,\n\t\t\tduration: actualDurationInFrames,\n\t\t\tid,\n\t\t\tdisplayName: timelineClipName,\n\t\t\tparent: parentSequence?.id ?? null,\n\t\t\ttype: 'sequence',\n\t\t\trootId,\n\t\t\tshowInTimeline,\n\t\t\tnonce,\n\t\t\tloopDisplay,\n\t\t\tstack: stack ?? null,\n\t\t\tpremountDisplay: premountDisplay ?? null,\n\t\t\tpostmountDisplay: postmountDisplay ?? null,\n\t\t});\n\t\treturn () => {\n\t\t\tunregisterSequence(id);\n\t\t};\n\t}, [\n\t\tdurationInFrames,\n\t\tid,\n\t\tname,\n\t\tregisterSequence,\n\t\ttimelineClipName,\n\t\tunregisterSequence,\n\t\tparentSequence?.id,\n\t\tactualDurationInFrames,\n\t\trootId,\n\t\tfrom,\n\t\tshowInTimeline,\n\t\tnonce,\n\t\tloopDisplay,\n\t\tstack,\n\t\tpremountDisplay,\n\t\tpostmountDisplay,\n\t\tenv.isStudio,\n\t]);\n\n\t// Ceil to support floats\n\t// https://github.com/remotion-dev/remotion/issues/2958\n\tconst endThreshold = Math.ceil(cumulatedFrom + from + durationInFrames - 1);\n\tconst content =\n\t\tabsoluteFrame < cumulatedFrom + from\n\t\t\t? null\n\t\t\t: absoluteFrame > endThreshold\n\t\t\t\t? null\n\t\t\t\t: children;\n\n\tconst styleIfThere = other.layout === 'none' ? undefined : other.style;\n\n\tconst defaultStyle: React.CSSProperties = useMemo(() => {\n\t\treturn {\n\t\t\tflexDirection: undefined,\n\t\t\t...(width ? {width} : {}),\n\t\t\t...(height ? {height} : {}),\n\t\t\t...(styleIfThere ?? {}),\n\t\t};\n\t}, [height, styleIfThere, width]);\n\n\tif (ref !== null && layout === 'none') {\n\t\tthrow new TypeError(\n\t\t\t'It is not supported to pass both a `ref` and `layout=\"none\"` to <Sequence />.',\n\t\t);\n\t}\n\n\tconst isSequenceHidden = hidden[id] ?? false;\n\n\tif (isSequenceHidden) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<SequenceContext.Provider value={contextValue}>\n\t\t\t{content === null ? null : other.layout === 'none' ? (\n\t\t\t\tcontent\n\t\t\t) : (\n\t\t\t\t<AbsoluteFill\n\t\t\t\t\tref={ref}\n\t\t\t\t\tstyle={defaultStyle}\n\t\t\t\t\tclassName={other.className}\n\t\t\t\t>\n\t\t\t\t\t{content}\n\t\t\t\t</AbsoluteFill>\n\t\t\t)}\n\t\t</SequenceContext.Provider>\n\t);\n};\n\nconst RegularSequence = forwardRef(RegularSequenceRefForwardingFunction);\n\nconst PremountedPostmountedSequenceRefForwardingFunction: React.ForwardRefRenderFunction<\n\tHTMLDivElement,\n\tSequenceProps\n> = (props, ref) => {\n\tconst frame = useCurrentFrame();\n\n\tif (props.layout === 'none') {\n\t\tthrow new Error(\n\t\t\t'`<Sequence>` with `premountFor` and `postmountFor` props does not support layout=\"none\"',\n\t\t);\n\t}\n\n\tconst {\n\t\tstyle: passedStyle,\n\t\tfrom = 0,\n\t\tdurationInFrames = Infinity,\n\t\tpremountFor = 0,\n\t\tpostmountFor = 0,\n\t\tstyleWhilePremounted,\n\t\tstyleWhilePostmounted,\n\t\t...otherProps\n\t} = props;\n\n\tconst endThreshold = Math.ceil(from + durationInFrames - 1);\n\tconst premountingActive = frame < from && frame >= from - premountFor;\n\tconst postmountingActive =\n\t\tframe > endThreshold && frame <= endThreshold + postmountFor;\n\n\t// Determine which freeze frame to use\n\tconst freezeFrame = premountingActive\n\t\t? from\n\t\t: postmountingActive\n\t\t\t? from + durationInFrames - 1\n\t\t\t: 0;\n\tconst isFreezingActive = premountingActive || postmountingActive;\n\n\tconst style = useMemo(() => {\n\t\treturn {\n\t\t\t...passedStyle,\n\t\t\topacity: premountingActive || postmountingActive ? 0 : 1,\n\t\t\tpointerEvents:\n\t\t\t\tpremountingActive || postmountingActive\n\t\t\t\t\t? 'none'\n\t\t\t\t\t: (passedStyle?.pointerEvents ?? undefined),\n\t\t\t...(premountingActive ? styleWhilePremounted : {}),\n\t\t\t...(postmountingActive ? styleWhilePostmounted : {}),\n\t\t};\n\t}, [\n\t\tpassedStyle,\n\t\tpremountingActive,\n\t\tpostmountingActive,\n\t\tstyleWhilePremounted,\n\t\tstyleWhilePostmounted,\n\t]);\n\n\treturn (\n\t\t<Freeze frame={freezeFrame} active={isFreezingActive}>\n\t\t\t<Sequence\n\t\t\t\tref={ref}\n\t\t\t\tfrom={from}\n\t\t\t\tdurationInFrames={durationInFrames}\n\t\t\t\tstyle={style}\n\t\t\t\t_remotionInternalPremountDisplay={premountFor}\n\t\t\t\t_remotionInternalPostmountDisplay={postmountFor}\n\t\t\t\t_remotionInternalIsPremounting={premountingActive}\n\t\t\t\t_remotionInternalIsPostmounting={postmountingActive}\n\t\t\t\t{...otherProps}\n\t\t\t/>\n\t\t</Freeze>\n\t);\n};\n\nconst PremountedPostmountedSequence = forwardRef(\n\tPremountedPostmountedSequenceRefForwardingFunction,\n);\n\nconst SequenceRefForwardingFunction: React.ForwardRefRenderFunction<\n\tHTMLDivElement,\n\tSequenceProps\n> = (props, ref) => {\n\tconst env = useRemotionEnvironment();\n\tif (props.layout !== 'none' && !env.isRendering) {\n\t\tif (props.premountFor || props.postmountFor) {\n\t\t\treturn <PremountedPostmountedSequence {...props} ref={ref} />;\n\t\t}\n\t}\n\n\treturn <RegularSequence {...props} ref={ref} />;\n};\n\n/*\n * @description A component that time-shifts its children and wraps them in an absolutely positioned <div>.\n * @see [Documentation](https://www.remotion.dev/docs/sequence)\n */\nexport const Sequence = forwardRef(SequenceRefForwardingFunction);\n",
|
|
15
|
-
"import React, {forwardRef, useMemo} from 'react';\n\nconst hasTailwindClassName = ({\n\tclassName,\n\tclassPrefix,\n\ttype,\n}: {\n\tclassName: string | undefined;\n\tclassPrefix: string[];\n\ttype: 'prefix' | 'exact';\n}) => {\n\tif (!className) {\n\t\treturn false;\n\t}\n\n\tif (type === 'exact') {\n\t\tconst split = className.split(' ');\n\t\treturn classPrefix.some((token) => {\n\t\t\treturn split.some((part) => {\n\t\t\t\treturn (\n\t\t\t\t\tpart.trim() === token ||\n\t\t\t\t\tpart.trim().endsWith(`:${token}`) ||\n\t\t\t\t\tpart.trim().endsWith(`!${token}`)\n\t\t\t\t);\n\t\t\t});\n\t\t});\n\t}\n\n\treturn classPrefix.some((prefix) => {\n\t\treturn (\n\t\t\tclassName.startsWith(prefix) ||\n\t\t\tclassName.includes(` ${prefix}`) ||\n\t\t\tclassName.includes(`!${prefix}`) ||\n\t\t\tclassName.includes(`:${prefix}`)\n\t\t);\n\t});\n};\n\nconst AbsoluteFillRefForwarding: React.ForwardRefRenderFunction<\n\tHTMLDivElement,\n\tReact.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>\n> = (props, ref) => {\n\tconst {style, ...other} = props;\n\n\tconst actualStyle = useMemo((): React.CSSProperties => {\n\t\t// Make TailwindCSS classes get accepted\n\t\treturn {\n\t\t\tposition: 'absolute',\n\t\t\ttop: hasTailwindClassName({\n\t\t\t\tclassName: other.className,\n\t\t\t\tclassPrefix: ['top-', 'inset-'],\n\t\t\t\ttype: 'prefix',\n\t\t\t})\n\t\t\t\t? undefined\n\t\t\t\t: 0,\n\t\t\tleft: hasTailwindClassName({\n\t\t\t\tclassName: other.className,\n\t\t\t\tclassPrefix: ['left-', 'inset-'],\n\t\t\t\ttype: 'prefix',\n\t\t\t})\n\t\t\t\t? undefined\n\t\t\t\t: 0,\n\t\t\tright: hasTailwindClassName({\n\t\t\t\tclassName: other.className,\n\t\t\t\tclassPrefix: ['right-', 'inset-'],\n\t\t\t\ttype: 'prefix',\n\t\t\t})\n\t\t\t\t? undefined\n\t\t\t\t: 0,\n\t\t\tbottom: hasTailwindClassName({\n\t\t\t\tclassName: other.className,\n\t\t\t\tclassPrefix: ['bottom-', 'inset-'],\n\t\t\t\ttype: 'prefix',\n\t\t\t})\n\t\t\t\t? undefined\n\t\t\t\t: 0,\n\t\t\twidth: hasTailwindClassName({\n\t\t\t\tclassName: other.className,\n\t\t\t\tclassPrefix: ['w-'],\n\t\t\t\ttype: 'prefix',\n\t\t\t})\n\t\t\t\t? undefined\n\t\t\t\t: '100%',\n\t\t\theight: hasTailwindClassName({\n\t\t\t\tclassName: other.className,\n\t\t\t\tclassPrefix: ['h-'],\n\t\t\t\ttype: 'prefix',\n\t\t\t})\n\t\t\t\t? undefined\n\t\t\t\t: '100%',\n\t\t\tdisplay: hasTailwindClassName({\n\t\t\t\tclassName: other.className,\n\t\t\t\tclassPrefix: [\n\t\t\t\t\t'block',\n\t\t\t\t\t'inline-block',\n\t\t\t\t\t'inline',\n\t\t\t\t\t'flex',\n\t\t\t\t\t'inline-flex',\n\t\t\t\t\t'flow-root',\n\t\t\t\t\t'grid',\n\t\t\t\t\t'inline-grid',\n\t\t\t\t\t'contents',\n\t\t\t\t\t'list-item',\n\t\t\t\t\t'hidden',\n\t\t\t\t],\n\t\t\t\ttype: 'exact',\n\t\t\t})\n\t\t\t\t? undefined\n\t\t\t\t: 'flex',\n\t\t\tflexDirection: hasTailwindClassName({\n\t\t\t\tclassName: other.className,\n\t\t\t\tclassPrefix: [\n\t\t\t\t\t'flex-row',\n\t\t\t\t\t'flex-col',\n\t\t\t\t\t'flex-row-reverse',\n\t\t\t\t\t'flex-col-reverse',\n\t\t\t\t],\n\t\t\t\ttype: 'exact',\n\t\t\t})\n\t\t\t\t? undefined\n\t\t\t\t: 'column',\n\t\t\t...style,\n\t\t};\n\t}, [other.className, style]);\n\n\treturn <div ref={ref} style={actualStyle} {...other} />;\n};\n\n/*\n * @description A helper component which renders an absolutely positioned <div> element with full width, height, and flex display suited for content layering.\n * @see [Documentation](https://remotion.dev/docs/absolute-fill)\n */\n\nexport const AbsoluteFill = forwardRef(AbsoluteFillRefForwarding);\n",
|
|
16
|
-
"import {createContext} from 'react';\n\nexport const SequenceContext = createContext<SequenceContextType | null>(null);\n\nexport type SequenceContextType = {\n\tcumulatedFrom: number;\n\trelativeFrom: number;\n\tparentFrom: number;\n\tdurationInFrames: number;\n\tid: string;\n\twidth: number | null;\n\theight: number | null;\n\tpremounting: boolean;\n\tpostmounting: boolean;\n};\n",
|
|
17
|
-
"import React, {useCallback, useMemo, useState} from 'react';\nimport type {TSequence} from './CompositionManager.js';\n\nexport type SequenceManagerContext = {\n\tregisterSequence: (seq: TSequence) => void;\n\tunregisterSequence: (id: string) => void;\n\tsequences: TSequence[];\n};\n\nexport const SequenceManager = React.createContext<SequenceManagerContext>({\n\tregisterSequence: () => {\n\t\tthrow new Error('SequenceManagerContext not initialized');\n\t},\n\tunregisterSequence: () => {\n\t\tthrow new Error('SequenceManagerContext not initialized');\n\t},\n\tsequences: [],\n});\n\nexport type SequenceVisibilityToggleState = {\n\thidden: Record<string, boolean>;\n\tsetHidden: React.Dispatch<React.SetStateAction<Record<string, boolean>>>;\n};\n\nexport const SequenceVisibilityToggleContext =\n\tReact.createContext<SequenceVisibilityToggleState>({\n\t\thidden: {},\n\t\tsetHidden: () => {\n\t\t\tthrow new Error('SequenceVisibilityToggle not initialized');\n\t\t},\n\t});\n\nexport const SequenceManagerProvider: React.FC<{\n\treadonly children: React.ReactNode;\n}> = ({children}) => {\n\tconst [sequences, setSequences] = useState<TSequence[]>([]);\n\tconst [hidden, setHidden] = useState<Record<string, boolean>>({});\n\n\tconst registerSequence = useCallback((seq: TSequence) => {\n\t\tsetSequences((seqs) => {\n\t\t\treturn [...seqs, seq];\n\t\t});\n\t}, []);\n\n\tconst unregisterSequence = useCallback((seq: string) => {\n\t\tsetSequences((seqs) => seqs.filter((s) => s.id !== seq));\n\t}, []);\n\n\tconst sequenceContext: SequenceManagerContext = useMemo(() => {\n\t\treturn {\n\t\t\tregisterSequence,\n\t\t\tsequences,\n\t\t\tunregisterSequence,\n\t\t};\n\t}, [registerSequence, sequences, unregisterSequence]);\n\n\tconst hiddenContext: SequenceVisibilityToggleState = useMemo(() => {\n\t\treturn {\n\t\t\thidden,\n\t\t\tsetHidden,\n\t\t};\n\t}, [hidden]);\n\n\treturn (\n\t\t<SequenceManager.Provider value={sequenceContext}>\n\t\t\t<SequenceVisibilityToggleContext.Provider value={hiddenContext}>\n\t\t\t\t{children}\n\t\t\t</SequenceVisibilityToggleContext.Provider>\n\t\t</SequenceManager.Provider>\n\t);\n};\n",
|
|
18
|
-
"import {createContext, useContext, useEffect, useRef, useState} from 'react';\n\n// Nonces keep track of the order of compositions.\n// It's a counter that goes up and sequences and compositions get a nonce\n// to keep track of the orders.\n\n// On fast refresh, we reset the counter and all compositions and\n// sequences have to re-register.\n\nexport type TNonceContext = {\n\tgetNonce: () => number;\n\tfastRefreshes: number;\n\tmanualRefreshes: number;\n};\n\nexport type TSetNonceContext = {\n\tincreaseManualRefreshes: () => void;\n};\n\nexport const NonceContext = createContext<TNonceContext>({\n\tgetNonce: () => 0,\n\tfastRefreshes: 0,\n\tmanualRefreshes: 0,\n});\n\nexport const SetNonceContext = createContext<TSetNonceContext>({\n\tincreaseManualRefreshes: () => {},\n});\n\nexport const useNonce = (): number => {\n\tconst context = useContext(NonceContext);\n\tconst [nonce, setNonce] = useState(() => context.getNonce());\n\tconst lastContext = useRef<TNonceContext | null>(context);\n\n\t// Only if context changes, but not initially\n\tuseEffect(() => {\n\t\tif (lastContext.current === context) {\n\t\t\treturn;\n\t\t}\n\n\t\tlastContext.current = context;\n\n\t\tsetNonce(context.getNonce);\n\t}, [context]);\n\n\treturn nonce;\n};\n",
|
|
19
|
-
"import type {MutableRefObject} from 'react';\nimport {createContext, useContext, useMemo} from 'react';\nimport {useRemotionEnvironment} from './use-remotion-environment.js';\nimport {useVideo} from './use-video.js';\n\nexport type PlayableMediaTag = {\n\tplay: (reason: string) => void;\n\tid: string;\n};\n\nexport type TimelineContextValue = {\n\tframe: Record<string, number>;\n\tplaying: boolean;\n\trootId: string;\n\tplaybackRate: number;\n\timperativePlaying: MutableRefObject<boolean>;\n\tsetPlaybackRate: (u: React.SetStateAction<number>) => void;\n\taudioAndVideoTags: MutableRefObject<PlayableMediaTag[]>;\n};\n\nexport type SetTimelineContextValue = {\n\tsetFrame: (u: React.SetStateAction<Record<string, number>>) => void;\n\tsetPlaying: (u: React.SetStateAction<boolean>) => void;\n};\n\nexport const TimelineContext = createContext<TimelineContextValue>({\n\tframe: {},\n\tplaying: false,\n\tplaybackRate: 1,\n\trootId: '',\n\timperativePlaying: {\n\t\tcurrent: false,\n\t},\n\tsetPlaybackRate: () => {\n\t\tthrow new Error('default');\n\t},\n\taudioAndVideoTags: {current: []},\n});\n\nexport const SetTimelineContext = createContext<SetTimelineContextValue>({\n\tsetFrame: () => {\n\t\tthrow new Error('default');\n\t},\n\tsetPlaying: () => {\n\t\tthrow new Error('default');\n\t},\n});\n\ntype CurrentTimePerComposition = Record<string, number>;\n\nconst makeKey = () => {\n\treturn `remotion.time-all`;\n};\n\nexport const persistCurrentFrame = (time: CurrentTimePerComposition) => {\n\tlocalStorage.setItem(makeKey(), JSON.stringify(time));\n};\n\nexport const getInitialFrameState = () => {\n\tconst item = localStorage.getItem(makeKey()) ?? '{}';\n\tconst obj: CurrentTimePerComposition = JSON.parse(item);\n\treturn obj;\n};\n\nexport const getFrameForComposition = (composition: string) => {\n\tconst item = localStorage.getItem(makeKey()) ?? '{}';\n\tconst obj: CurrentTimePerComposition = JSON.parse(item);\n\n\tif (obj[composition] !== undefined) {\n\t\treturn Number(obj[composition]);\n\t}\n\n\tif (typeof window === 'undefined') {\n\t\treturn 0;\n\t}\n\n\treturn window.remotion_initialFrame ?? 0;\n};\n\nexport const useTimelinePosition = (): number => {\n\tconst videoConfig = useVideo();\n\tconst state = useContext(TimelineContext);\n\tconst env = useRemotionEnvironment();\n\n\tif (!videoConfig) {\n\t\treturn typeof window === 'undefined'\n\t\t\t? 0\n\t\t\t: (window.remotion_initialFrame ?? 0);\n\t}\n\n\tconst unclamped =\n\t\tstate.frame[videoConfig.id] ??\n\t\t(env.isPlayer ? 0 : getFrameForComposition(videoConfig.id));\n\n\treturn Math.min(videoConfig.durationInFrames - 1, unclamped);\n};\n\nexport const useTimelineSetFrame = (): ((\n\tu: React.SetStateAction<Record<string, number>>,\n) => void) => {\n\tconst {setFrame} = useContext(SetTimelineContext);\n\treturn setFrame;\n};\n\ntype PlayingReturnType = readonly [\n\tboolean,\n\t(u: React.SetStateAction<boolean>) => void,\n\tMutableRefObject<boolean>,\n];\n\nexport const usePlayingState = (): PlayingReturnType => {\n\tconst {playing, imperativePlaying} = useContext(TimelineContext);\n\tconst {setPlaying} = useContext(SetTimelineContext);\n\n\treturn useMemo(\n\t\t() => [playing, setPlaying, imperativePlaying],\n\t\t[imperativePlaying, playing, setPlaying],\n\t);\n};\n",
|
|
20
|
-
"import {useContext, useState} from 'react';\nimport {getRemotionEnvironment} from './get-remotion-environment';\nimport type {RemotionEnvironment} from './remotion-environment-context';\nimport {RemotionEnvironmentContext} from './remotion-environment-context';\n\n/**\n * @description A React hook that provides information about the current Remotion Environment. This is the preferred way to access environment information in React components as it will support future scoped contexts.\n * @see [Documentation](https://remotion.dev/docs/use-remotion-environment)\n */\nexport const useRemotionEnvironment = (): RemotionEnvironment => {\n\tconst context = useContext(RemotionEnvironmentContext);\n\tconst [env] = useState(() => getRemotionEnvironment());\n\n\treturn context ?? env;\n};\n",
|
|
21
|
-
"import React from 'react';\n\nexport type RemotionEnvironment = {\n\tisStudio: boolean;\n\tisRendering: boolean;\n\tisClientSideRendering: boolean;\n\tisPlayer: boolean;\n\tisReadOnlyStudio: boolean;\n};\n\nexport const RemotionEnvironmentContext =\n\tReact.createContext<RemotionEnvironment | null>(null);\n",
|
|
22
|
-
"import type {ComponentType, LazyExoticComponent} from 'react';\nimport {useContext, useMemo} from 'react';\nimport {CompositionManager} from './CompositionManagerContext.js';\nimport {useResolvedVideoConfig} from './ResolveCompositionConfig.js';\nimport type {VideoConfig} from './video-config.js';\n\ntype ReturnType =\n\t| (VideoConfig & {\n\t\t\tcomponent: LazyExoticComponent<ComponentType<Record<string, unknown>>>;\n\t })\n\t| null;\n\nexport const useVideo = (): ReturnType => {\n\tconst {canvasContent, compositions, currentCompositionMetadata} =\n\t\tuseContext(CompositionManager);\n\n\tconst selected = compositions.find((c) => {\n\t\treturn (\n\t\t\tcanvasContent?.type === 'composition' &&\n\t\t\tc.id === canvasContent.compositionId\n\t\t);\n\t});\n\tconst resolved = useResolvedVideoConfig(selected?.id ?? null);\n\n\treturn useMemo((): ReturnType => {\n\t\tif (!resolved) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (resolved.type === 'error') {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (resolved.type === 'loading') {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (!selected) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn {\n\t\t\t...resolved.result,\n\t\t\tdefaultProps: selected.defaultProps ?? {},\n\t\t\tid: selected.id,\n\t\t\t// We override the selected metadata with the metadata that was passed to renderMedia(),\n\t\t\t// and don't allow it to be changed during render anymore\n\t\t\t...(currentCompositionMetadata ?? {}),\n\t\t\tcomponent: selected.component,\n\t\t};\n\t}, [currentCompositionMetadata, resolved, selected]);\n};\n",
|
|
23
|
-
"import type React from 'react';\nimport {createContext} from 'react';\nimport type {AnyZodObject} from 'zod';\nimport type {AnyComposition, TComposition} from './CompositionManager.js';\nimport type {TFolder} from './Folder.js';\nimport type {VideoConfig} from './video-config.js';\n\nexport type BaseMetadata = Pick<\n\tVideoConfig,\n\t| 'durationInFrames'\n\t| 'fps'\n\t| 'props'\n\t| 'height'\n\t| 'width'\n\t| 'defaultCodec'\n\t| 'defaultOutName'\n\t| 'defaultVideoImageFormat'\n\t| 'defaultPixelFormat'\n>;\n\nexport type CanvasContent =\n\t| {\n\t\t\ttype: 'composition';\n\t\t\tcompositionId: string;\n\t }\n\t| {\n\t\t\ttype: 'asset';\n\t\t\tasset: string;\n\t }\n\t| {\n\t\t\ttype: 'output';\n\t\t\tpath: string;\n\t };\n\nexport type CompositionManagerSetters = {\n\tregisterComposition: <\n\t\tSchema extends AnyZodObject,\n\t\tProps extends Record<string, unknown>,\n\t>(\n\t\tcomp: TComposition<Schema, Props>,\n\t) => void;\n\tunregisterComposition: (name: string) => void;\n\tregisterFolder: (name: string, parent: string | null) => void;\n\tunregisterFolder: (name: string, parent: string | null) => void;\n\tsetCanvasContent: React.Dispatch<React.SetStateAction<CanvasContent | null>>;\n\tupdateCompositionDefaultProps: (\n\t\tid: string,\n\t\tnewDefaultProps: Record<string, unknown>,\n\t) => void;\n\t// This is not a setter but also a value that does not change\n\tonlyRenderComposition: string | null;\n};\n\nexport type CompositionManagerContext = {\n\tcompositions: AnyComposition[];\n\tcurrentCompositionMetadata: BaseMetadata | null;\n\tfolders: TFolder[];\n\tcanvasContent: CanvasContent | null;\n};\n\nexport const CompositionManager = createContext<CompositionManagerContext>({\n\tcompositions: [],\n\tfolders: [],\n\tcurrentCompositionMetadata: null,\n\tcanvasContent: null,\n});\n\nexport const CompositionSetters = createContext<CompositionManagerSetters>({\n\tregisterComposition: () => undefined,\n\tunregisterComposition: () => undefined,\n\tregisterFolder: () => undefined,\n\tunregisterFolder: () => undefined,\n\tsetCanvasContent: () => undefined,\n\tupdateCompositionDefaultProps: () => undefined,\n\tonlyRenderComposition: null,\n});\n",
|
|
24
|
-
"import type {PropsWithChildren} from 'react';\nimport {\n\tcreateContext,\n\tcreateRef,\n\tuseCallback,\n\tuseContext,\n\tuseEffect,\n\tuseImperativeHandle,\n\tuseMemo,\n\tuseState,\n} from 'react';\nimport type {AnyZodObject} from 'zod';\nimport type {CalculateMetadataFunction} from './Composition.js';\nimport type {AnyComposition} from './CompositionManager.js';\nimport {CompositionManager} from './CompositionManagerContext.js';\nimport {EditorPropsContext} from './EditorProps.js';\nimport {getInputProps} from './config/input-props.js';\nimport {NonceContext} from './nonce.js';\nimport type {InferProps} from './props-if-has-props.js';\nimport {resolveVideoConfigOrCatch} from './resolve-video-config.js';\nimport {useRemotionEnvironment} from './use-remotion-environment.js';\nimport {validateDimension} from './validation/validate-dimensions.js';\nimport {validateDurationInFrames} from './validation/validate-duration-in-frames.js';\nimport {validateFps} from './validation/validate-fps.js';\nimport type {VideoConfig} from './video-config.js';\n\ntype ResolveCompositionConfigContect = Record<\n\tstring,\n\tVideoConfigState | undefined\n>;\n\nexport const ResolveCompositionContext =\n\tcreateContext<ResolveCompositionConfigContect | null>(null);\n\nexport const resolveCompositionsRef = createRef<{\n\tsetCurrentRenderModalComposition: (compositionId: string | null) => void;\n\treloadCurrentlySelectedComposition: () => void;\n}>();\n\ntype VideoConfigState =\n\t| {\n\t\t\ttype: 'loading';\n\t }\n\t| {\n\t\t\ttype: 'success';\n\t\t\tresult: VideoConfig;\n\t }\n\t| {\n\t\t\ttype: 'success-and-refreshing';\n\t\t\tresult: VideoConfig;\n\t }\n\t| {\n\t\t\ttype: 'error';\n\t\t\terror: Error;\n\t };\n\nexport const needsResolution = (composition: AnyComposition) => {\n\treturn Boolean(composition.calculateMetadata);\n};\n\nexport const PROPS_UPDATED_EXTERNALLY = 'remotion.propsUpdatedExternally';\n\nexport const ResolveCompositionConfig: React.FC<\n\tPropsWithChildren<{\n\t\tchildren: React.ReactNode;\n\t}>\n> = ({children}) => {\n\tconst [currentRenderModalComposition, setCurrentRenderModalComposition] =\n\t\tuseState<string | null>(null);\n\tconst {compositions, canvasContent, currentCompositionMetadata} =\n\t\tuseContext(CompositionManager);\n\tconst {fastRefreshes, manualRefreshes} = useContext(NonceContext);\n\n\t// don't do anything, this component should should re-render if the value changes\n\tif (manualRefreshes) {\n\t\t/** */\n\t}\n\n\tconst selectedComposition = useMemo(() => {\n\t\treturn compositions.find(\n\t\t\t(c) =>\n\t\t\t\tcanvasContent &&\n\t\t\t\tcanvasContent.type === 'composition' &&\n\t\t\t\tcanvasContent.compositionId === c.id,\n\t\t);\n\t}, [canvasContent, compositions]);\n\n\tconst renderModalComposition = compositions.find(\n\t\t(c) => c.id === currentRenderModalComposition,\n\t);\n\tconst {props: allEditorProps} = useContext(EditorPropsContext);\n\tconst env = useRemotionEnvironment();\n\n\tconst inputProps = useMemo(() => {\n\t\treturn typeof window === 'undefined' || env.isPlayer\n\t\t\t? {}\n\t\t\t: (getInputProps() ?? {});\n\t}, [env.isPlayer]);\n\n\tconst [resolvedConfigs, setResolvedConfigs] = useState<\n\t\tRecord<string, VideoConfigState | undefined>\n\t>({});\n\n\tconst selectedEditorProps = useMemo(() => {\n\t\treturn selectedComposition\n\t\t\t? (allEditorProps[selectedComposition.id] ?? {})\n\t\t\t: {};\n\t}, [allEditorProps, selectedComposition]);\n\n\tconst renderModalProps = useMemo(() => {\n\t\treturn renderModalComposition\n\t\t\t? (allEditorProps[renderModalComposition.id] ?? {})\n\t\t\t: {};\n\t}, [allEditorProps, renderModalComposition]);\n\n\tconst hasResolution = Boolean(currentCompositionMetadata);\n\n\tconst doResolution = useCallback(\n\t\t({\n\t\t\tcalculateMetadata,\n\t\t\tcombinedProps,\n\t\t\tcompositionDurationInFrames,\n\t\t\tcompositionFps,\n\t\t\tcompositionHeight,\n\t\t\tcompositionId,\n\t\t\tcompositionWidth,\n\t\t\tdefaultProps,\n\t\t}: {\n\t\t\tcompositionId: string;\n\t\t\tcalculateMetadata: CalculateMetadataFunction<\n\t\t\t\tInferProps<AnyZodObject, Record<string, unknown>>\n\t\t\t> | null;\n\t\t\tcompositionWidth: number | null;\n\t\t\tcompositionHeight: number | null;\n\t\t\tcompositionFps: number | null;\n\t\t\tcompositionDurationInFrames: number | null;\n\t\t\tdefaultProps: Record<string, unknown>;\n\t\t\tcombinedProps: Record<string, unknown>;\n\t\t}) => {\n\t\t\tconst controller = new AbortController();\n\t\t\tif (hasResolution) {\n\t\t\t\treturn controller;\n\t\t\t}\n\n\t\t\tconst {signal} = controller;\n\n\t\t\tconst result = resolveVideoConfigOrCatch({\n\t\t\t\tcompositionId,\n\t\t\t\tcalculateMetadata,\n\t\t\t\toriginalProps: combinedProps,\n\t\t\t\tsignal,\n\t\t\t\tdefaultProps,\n\t\t\t\tcompositionDurationInFrames,\n\t\t\t\tcompositionFps,\n\t\t\t\tcompositionHeight,\n\t\t\t\tcompositionWidth,\n\t\t\t});\n\t\t\tif (result.type === 'error') {\n\t\t\t\tsetResolvedConfigs((r) => ({\n\t\t\t\t\t...r,\n\t\t\t\t\t[compositionId]: {\n\t\t\t\t\t\ttype: 'error',\n\t\t\t\t\t\terror: result.error,\n\t\t\t\t\t},\n\t\t\t\t}));\n\n\t\t\t\treturn controller;\n\t\t\t}\n\n\t\t\tconst promOrNot = result.result;\n\n\t\t\tif (typeof promOrNot === 'object' && 'then' in promOrNot) {\n\t\t\t\tsetResolvedConfigs((r) => {\n\t\t\t\t\tconst prev = r[compositionId];\n\t\t\t\t\tif (\n\t\t\t\t\t\tprev?.type === 'success' ||\n\t\t\t\t\t\tprev?.type === 'success-and-refreshing'\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...r,\n\t\t\t\t\t\t\t[compositionId]: {\n\t\t\t\t\t\t\t\ttype: 'success-and-refreshing',\n\t\t\t\t\t\t\t\tresult: prev.result,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...r,\n\t\t\t\t\t\t[compositionId]: {\n\t\t\t\t\t\t\ttype: 'loading',\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t\tpromOrNot\n\t\t\t\t\t.then((c) => {\n\t\t\t\t\t\tif (controller.signal.aborted) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tsetResolvedConfigs((r) => ({\n\t\t\t\t\t\t\t...r,\n\t\t\t\t\t\t\t[compositionId]: {\n\t\t\t\t\t\t\t\ttype: 'success',\n\t\t\t\t\t\t\t\tresult: c,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}));\n\t\t\t\t\t})\n\t\t\t\t\t.catch((err) => {\n\t\t\t\t\t\tif (controller.signal.aborted) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tsetResolvedConfigs((r) => ({\n\t\t\t\t\t\t\t...r,\n\t\t\t\t\t\t\t[compositionId]: {\n\t\t\t\t\t\t\t\ttype: 'error',\n\t\t\t\t\t\t\t\terror: err,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}));\n\t\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tsetResolvedConfigs((r) => ({\n\t\t\t\t\t...r,\n\t\t\t\t\t[compositionId]: {\n\t\t\t\t\t\ttype: 'success',\n\t\t\t\t\t\tresult: promOrNot,\n\t\t\t\t\t},\n\t\t\t\t}));\n\t\t\t}\n\n\t\t\treturn controller;\n\t\t},\n\t\t[hasResolution],\n\t);\n\n\tconst currentComposition =\n\t\tcanvasContent?.type === 'composition' ? canvasContent.compositionId : null;\n\n\tuseImperativeHandle(resolveCompositionsRef, () => {\n\t\treturn {\n\t\t\tsetCurrentRenderModalComposition: (id: string | null) => {\n\t\t\t\tsetCurrentRenderModalComposition(id);\n\t\t\t},\n\t\t\treloadCurrentlySelectedComposition: () => {\n\t\t\t\tif (!currentComposition) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst composition = compositions.find(\n\t\t\t\t\t(c) => c.id === currentComposition,\n\t\t\t\t);\n\n\t\t\t\tif (!composition) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`Could not find composition with id ${currentComposition}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tconst editorProps = allEditorProps[currentComposition] ?? {};\n\n\t\t\t\tconst defaultProps = {\n\t\t\t\t\t...(composition.defaultProps ?? {}),\n\t\t\t\t\t...(editorProps ?? {}),\n\t\t\t\t};\n\n\t\t\t\tconst props = {\n\t\t\t\t\t...defaultProps,\n\t\t\t\t\t...(inputProps ?? {}),\n\t\t\t\t};\n\n\t\t\t\tdoResolution({\n\t\t\t\t\tdefaultProps,\n\t\t\t\t\tcalculateMetadata: composition.calculateMetadata,\n\t\t\t\t\tcombinedProps: props,\n\t\t\t\t\tcompositionDurationInFrames: composition.durationInFrames ?? null,\n\t\t\t\t\tcompositionFps: composition.fps ?? null,\n\t\t\t\t\tcompositionHeight: composition.height ?? null,\n\t\t\t\t\tcompositionWidth: composition.width ?? null,\n\t\t\t\t\tcompositionId: composition.id,\n\t\t\t\t});\n\t\t\t},\n\t\t};\n\t}, [\n\t\tallEditorProps,\n\t\tcompositions,\n\t\tcurrentComposition,\n\t\tdoResolution,\n\t\tinputProps,\n\t]);\n\n\tconst isTheSame = selectedComposition?.id === renderModalComposition?.id;\n\n\tconst currentDefaultProps = useMemo(() => {\n\t\treturn {\n\t\t\t...(selectedComposition?.defaultProps ?? {}),\n\t\t\t...(selectedEditorProps ?? {}),\n\t\t};\n\t}, [selectedComposition?.defaultProps, selectedEditorProps]);\n\n\tconst originalProps = useMemo(() => {\n\t\treturn {\n\t\t\t...currentDefaultProps,\n\t\t\t...(inputProps ?? {}),\n\t\t};\n\t}, [currentDefaultProps, inputProps]);\n\n\tconst canResolve =\n\t\tselectedComposition && needsResolution(selectedComposition);\n\n\tconst shouldIgnoreUpdate =\n\t\ttypeof window !== 'undefined' &&\n\t\twindow.remotion_ignoreFastRefreshUpdate &&\n\t\tfastRefreshes <= window.remotion_ignoreFastRefreshUpdate;\n\n\tuseEffect(() => {\n\t\tif (shouldIgnoreUpdate) {\n\t\t\t// We already have the current state, we just saved it back\n\t\t\t// to the file\n\t\t\treturn;\n\t\t}\n\n\t\tif (canResolve) {\n\t\t\tconst controller = doResolution({\n\t\t\t\tcalculateMetadata: selectedComposition.calculateMetadata,\n\t\t\t\tcombinedProps: originalProps,\n\t\t\t\tcompositionDurationInFrames:\n\t\t\t\t\tselectedComposition.durationInFrames ?? null,\n\t\t\t\tcompositionFps: selectedComposition.fps ?? null,\n\t\t\t\tcompositionHeight: selectedComposition.height ?? null,\n\t\t\t\tcompositionWidth: selectedComposition.width ?? null,\n\t\t\t\tdefaultProps: currentDefaultProps,\n\t\t\t\tcompositionId: selectedComposition.id,\n\t\t\t});\n\n\t\t\treturn () => {\n\t\t\t\tcontroller.abort();\n\t\t\t};\n\t\t}\n\t}, [\n\t\tcanResolve,\n\t\tcurrentDefaultProps,\n\t\tdoResolution,\n\t\toriginalProps,\n\t\tselectedComposition?.calculateMetadata,\n\t\tselectedComposition?.durationInFrames,\n\t\tselectedComposition?.fps,\n\t\tselectedComposition?.height,\n\t\tselectedComposition?.id,\n\t\tselectedComposition?.width,\n\t\tshouldIgnoreUpdate,\n\t]);\n\n\tuseEffect(() => {\n\t\tif (renderModalComposition && !isTheSame) {\n\t\t\tconst combinedProps = {\n\t\t\t\t...(renderModalComposition.defaultProps ?? {}),\n\t\t\t\t...(renderModalProps ?? {}),\n\t\t\t\t...(inputProps ?? {}),\n\t\t\t};\n\n\t\t\tconst controller = doResolution({\n\t\t\t\tcalculateMetadata: renderModalComposition.calculateMetadata,\n\t\t\t\tcompositionDurationInFrames:\n\t\t\t\t\trenderModalComposition.durationInFrames ?? null,\n\t\t\t\tcompositionFps: renderModalComposition.fps ?? null,\n\t\t\t\tcompositionHeight: renderModalComposition.height ?? null,\n\t\t\t\tcompositionId: renderModalComposition.id,\n\t\t\t\tcompositionWidth: renderModalComposition.width ?? null,\n\t\t\t\tdefaultProps: currentDefaultProps,\n\t\t\t\tcombinedProps,\n\t\t\t});\n\n\t\t\treturn () => {\n\t\t\t\tcontroller.abort();\n\t\t\t};\n\t\t}\n\t}, [\n\t\tcurrentDefaultProps,\n\t\tdoResolution,\n\t\tinputProps,\n\t\tisTheSame,\n\t\trenderModalComposition,\n\t\trenderModalProps,\n\t]);\n\n\tconst resolvedConfigsIncludingStaticOnes = useMemo(() => {\n\t\tconst staticComps = compositions.filter((c) => {\n\t\t\treturn c.calculateMetadata === null;\n\t\t});\n\t\treturn {\n\t\t\t...resolvedConfigs,\n\t\t\t...staticComps.reduce((acc, curr) => {\n\t\t\t\treturn {\n\t\t\t\t\t...acc,\n\t\t\t\t\t[curr.id]: {\n\t\t\t\t\t\ttype: 'success',\n\t\t\t\t\t\tresult: {...curr, defaultProps: curr.defaultProps ?? {}},\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}, {}),\n\t\t};\n\t}, [compositions, resolvedConfigs]);\n\n\treturn (\n\t\t<ResolveCompositionContext.Provider\n\t\t\tvalue={resolvedConfigsIncludingStaticOnes}\n\t\t>\n\t\t\t{children}\n\t\t</ResolveCompositionContext.Provider>\n\t);\n};\n\nexport const useResolvedVideoConfig = (\n\tpreferredCompositionId: string | null,\n): VideoConfigState | null => {\n\tconst context = useContext(\n\t\tResolveCompositionContext,\n\t) as ResolveCompositionConfigContect;\n\tconst {props: allEditorProps} = useContext(EditorPropsContext);\n\n\tconst {compositions, canvasContent, currentCompositionMetadata} =\n\t\tuseContext(CompositionManager);\n\tconst currentComposition =\n\t\tcanvasContent?.type === 'composition' ? canvasContent.compositionId : null;\n\tconst compositionId = preferredCompositionId ?? currentComposition;\n\tconst composition = compositions.find((c) => c.id === compositionId);\n\n\tconst selectedEditorProps = useMemo(() => {\n\t\treturn composition ? (allEditorProps[composition.id] ?? {}) : {};\n\t}, [allEditorProps, composition]);\n\n\tconst env = useRemotionEnvironment();\n\n\treturn useMemo(() => {\n\t\tif (!composition) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (currentCompositionMetadata) {\n\t\t\treturn {\n\t\t\t\ttype: 'success',\n\t\t\t\tresult: {\n\t\t\t\t\t...currentCompositionMetadata,\n\t\t\t\t\tid: composition.id,\n\t\t\t\t\tdefaultProps: composition.defaultProps ?? {},\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\n\t\tif (!needsResolution(composition)) {\n\t\t\tvalidateDurationInFrames(composition.durationInFrames, {\n\t\t\t\tallowFloats: false,\n\t\t\t\tcomponent: `in <Composition id=\"${composition.id}\">`,\n\t\t\t});\n\t\t\tvalidateFps(\n\t\t\t\tcomposition.fps,\n\t\t\t\t`in <Composition id=\"${composition.id}\">`,\n\t\t\t\tfalse,\n\t\t\t);\n\t\t\tvalidateDimension(\n\t\t\t\tcomposition.width,\n\t\t\t\t'width',\n\t\t\t\t`in <Composition id=\"${composition.id}\">`,\n\t\t\t);\n\t\t\tvalidateDimension(\n\t\t\t\tcomposition.height,\n\t\t\t\t'height',\n\t\t\t\t`in <Composition id=\"${composition.id}\">`,\n\t\t\t);\n\n\t\t\treturn {\n\t\t\t\ttype: 'success',\n\t\t\t\tresult: {\n\t\t\t\t\twidth: composition.width as number,\n\t\t\t\t\theight: composition.height as number,\n\t\t\t\t\tfps: composition.fps as number,\n\t\t\t\t\tid: composition.id,\n\t\t\t\t\tdurationInFrames: composition.durationInFrames as number,\n\t\t\t\t\tdefaultProps: composition.defaultProps ?? {},\n\t\t\t\t\tprops: {\n\t\t\t\t\t\t...(composition.defaultProps ?? {}),\n\t\t\t\t\t\t...(selectedEditorProps ?? {}),\n\t\t\t\t\t\t...(typeof window === 'undefined' || env.isPlayer\n\t\t\t\t\t\t\t? {}\n\t\t\t\t\t\t\t: (getInputProps() ?? {})),\n\t\t\t\t\t},\n\t\t\t\t\tdefaultCodec: null,\n\t\t\t\t\tdefaultOutName: null,\n\t\t\t\t\tdefaultVideoImageFormat: null,\n\t\t\t\t\tdefaultPixelFormat: null,\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\n\t\tif (!context[composition.id]) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn context[composition.id] as VideoConfigState;\n\t}, [\n\t\tcomposition,\n\t\tcontext,\n\t\tcurrentCompositionMetadata,\n\t\tselectedEditorProps,\n\t\tenv.isPlayer,\n\t]);\n};\n",
|
|
25
|
-
"import type {SyntheticEvent} from 'react';\nimport React, {\n\tcreateContext,\n\tuseCallback,\n\tuseImperativeHandle,\n\tuseMemo,\n} from 'react';\n\n// Key: Composition ID, Value: initialized defaultProps\ntype Props = Record<string, Record<string, unknown>>;\n\nexport type EditorPropsContextType = {\n\tprops: Props;\n\tupdateProps: (options: {\n\t\tid: string;\n\t\tdefaultProps: Record<string, unknown>;\n\t\tnewProps:\n\t\t\t| Record<string, unknown>\n\t\t\t| ((oldProps: Record<string, unknown>) => Record<string, unknown>);\n\t}) => void;\n\tresetUnsaved: (compositionId: string) => void;\n};\n\nexport const EditorPropsContext = createContext<EditorPropsContextType>({\n\tprops: {},\n\tupdateProps: () => {\n\t\tthrow new Error('Not implemented');\n\t},\n\tresetUnsaved: () => {\n\t\tthrow new Error('Not implemented');\n\t},\n});\n\nexport const editorPropsProviderRef = React.createRef<{\n\tgetProps: () => Props;\n\tsetProps: React.Dispatch<React.SetStateAction<Props>>;\n}>();\n\nexport const timeValueRef = React.createRef<{\n\tgoToFrame: () => void;\n\tseek: (newFrame: number) => void;\n\tplay: (e?: SyntheticEvent | PointerEvent) => void;\n\tpause: () => void;\n\ttoggle: (e?: SyntheticEvent | PointerEvent) => void;\n}>();\n\nexport const EditorPropsProvider: React.FC<{\n\treadonly children: React.ReactNode;\n}> = ({children}) => {\n\tconst [props, setProps] = React.useState<Props>({});\n\n\tconst updateProps = useCallback(\n\t\t({\n\t\t\tdefaultProps,\n\t\t\tid,\n\t\t\tnewProps,\n\t\t}: {\n\t\t\tid: string;\n\t\t\tdefaultProps: unknown;\n\t\t\tnewProps: unknown | ((oldProps: unknown) => unknown);\n\t\t}) => {\n\t\t\tsetProps((prev) => {\n\t\t\t\treturn {\n\t\t\t\t\t...prev,\n\t\t\t\t\t[id]:\n\t\t\t\t\t\ttypeof newProps === 'function'\n\t\t\t\t\t\t\t? newProps(prev[id] ?? defaultProps)\n\t\t\t\t\t\t\t: newProps,\n\t\t\t\t};\n\t\t\t});\n\t\t},\n\t\t[],\n\t);\n\n\tconst resetUnsaved = useCallback((compositionId: string) => {\n\t\tsetProps((prev) => {\n\t\t\tif (prev[compositionId]) {\n\t\t\t\tconst newProps = {...prev};\n\t\t\t\tdelete newProps[compositionId];\n\t\t\t\treturn newProps;\n\t\t\t}\n\n\t\t\treturn prev;\n\t\t});\n\t}, []);\n\n\tuseImperativeHandle(editorPropsProviderRef, () => {\n\t\treturn {\n\t\t\tgetProps: () => props,\n\t\t\tsetProps,\n\t\t};\n\t}, [props]);\n\n\tconst ctx = useMemo((): EditorPropsContextType => {\n\t\treturn {props, updateProps, resetUnsaved};\n\t}, [props, resetUnsaved, updateProps]);\n\n\treturn (\n\t\t<EditorPropsContext.Provider value={ctx}>\n\t\t\t{children}\n\t\t</EditorPropsContext.Provider>\n\t);\n};\n",
|
|
26
|
-
"// Must keep this file in sync with the one in packages/lambda/src/shared/serialize-props.ts!\n\nimport {getRemotionEnvironment} from './get-remotion-environment.js';\n\nexport type SerializedJSONWithCustomFields = {\n\tserializedString: string;\n\tcustomDateUsed: boolean;\n\tcustomFileUsed: boolean;\n\tmapUsed: boolean;\n\tsetUsed: boolean;\n};\n\nexport const DATE_TOKEN = 'remotion-date:';\nexport const FILE_TOKEN = 'remotion-file:';\n\nexport const serializeJSONWithSpecialTypes = ({\n\tdata,\n\tindent,\n\tstaticBase,\n}: {\n\tdata: Record<string, unknown>;\n\tindent: number | undefined;\n\tstaticBase: string | null;\n}): SerializedJSONWithCustomFields => {\n\tlet customDateUsed = false;\n\tlet customFileUsed = false;\n\tlet mapUsed = false;\n\tlet setUsed = false;\n\n\ttry {\n\t\tconst serializedString = JSON.stringify(\n\t\t\tdata,\n\t\t\tfunction (key, value) {\n\t\t\t\tconst item = (this as Record<string, unknown>)[key];\n\t\t\t\tif (item instanceof Date) {\n\t\t\t\t\tcustomDateUsed = true;\n\t\t\t\t\treturn `${DATE_TOKEN}${item.toISOString()}`;\n\t\t\t\t}\n\n\t\t\t\tif (item instanceof Map) {\n\t\t\t\t\tmapUsed = true;\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\n\t\t\t\tif (item instanceof Set) {\n\t\t\t\t\tsetUsed = true;\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\ttypeof item === 'string' &&\n\t\t\t\t\tstaticBase !== null &&\n\t\t\t\t\titem.startsWith(staticBase)\n\t\t\t\t) {\n\t\t\t\t\tcustomFileUsed = true;\n\t\t\t\t\treturn `${FILE_TOKEN}${item.replace(staticBase + '/', '')}`;\n\t\t\t\t}\n\n\t\t\t\treturn value;\n\t\t\t},\n\t\t\tindent,\n\t\t);\n\t\treturn {serializedString, customDateUsed, customFileUsed, mapUsed, setUsed};\n\t} catch (err) {\n\t\tthrow new Error(\n\t\t\t'Could not serialize the passed input props to JSON: ' +\n\t\t\t\t(err as Error).message,\n\t\t);\n\t}\n};\n\nexport const deserializeJSONWithSpecialTypes = <T = Record<string, unknown>>(\n\tdata: string,\n): T => {\n\treturn JSON.parse(data, (_, value) => {\n\t\tif (typeof value === 'string' && value.startsWith(DATE_TOKEN)) {\n\t\t\treturn new Date(value.replace(DATE_TOKEN, ''));\n\t\t}\n\n\t\tif (typeof value === 'string' && value.startsWith(FILE_TOKEN)) {\n\t\t\treturn `${window.remotion_staticBase}/${value.replace(FILE_TOKEN, '')}`;\n\t\t}\n\n\t\treturn value;\n\t});\n};\n\nexport const serializeThenDeserialize = (props: Record<string, unknown>) => {\n\treturn deserializeJSONWithSpecialTypes(\n\t\tserializeJSONWithSpecialTypes({\n\t\t\tdata: props,\n\t\t\tindent: 2,\n\t\t\tstaticBase: window.remotion_staticBase,\n\t\t}).serializedString,\n\t);\n};\n\nexport const serializeThenDeserializeInStudio = (\n\tprops: Record<string, unknown>,\n) => {\n\t// Serializing once in the Studio, to catch potential serialization errors before\n\t// you only get them during rendering\n\tif (getRemotionEnvironment().isStudio) {\n\t\treturn serializeThenDeserialize(props);\n\t}\n\n\treturn props;\n};\n",
|
|
27
|
-
"import {getRemotionEnvironment} from '../get-remotion-environment.js';\nimport {deserializeJSONWithSpecialTypes} from '../input-props-serialization.js';\n\nlet didWarnSSRImport = false;\n\nconst warnOnceSSRImport = () => {\n\tif (didWarnSSRImport) {\n\t\treturn;\n\t}\n\n\tdidWarnSSRImport = true;\n\t// eslint-disable-next-line no-console\n\tconsole.warn(\n\t\t'Called `getInputProps()` on the server. This function is not available server-side and has returned an empty object.',\n\t);\n\t// eslint-disable-next-line no-console\n\tconsole.warn(\"To hide this warning, don't call this function on the server:\");\n\t// eslint-disable-next-line no-console\n\tconsole.warn(\" typeof window === 'undefined' ? {} : getInputProps()\");\n};\n\nexport const getInputProps = <\n\tT extends Record<string, unknown> = Record<string, unknown>,\n>(): T => {\n\tif (typeof window === 'undefined') {\n\t\twarnOnceSSRImport();\n\t\treturn {} as T;\n\t}\n\n\tif (getRemotionEnvironment().isPlayer) {\n\t\tthrow new Error(\n\t\t\t'You cannot call `getInputProps()` from a <Player>. Instead, the props are available as React props from component that you passed as `component` prop.',\n\t\t);\n\t}\n\n\tconst param = window.remotion_inputProps;\n\tif (!param) {\n\t\treturn {} as T;\n\t}\n\n\tconst parsed = deserializeJSONWithSpecialTypes<T>(param);\n\treturn parsed;\n};\n",
|
|
28
|
-
"export const validCodecs = [\n\t'h264',\n\t'h265',\n\t'vp8',\n\t'vp9',\n\t'mp3',\n\t'aac',\n\t'wav',\n\t'prores',\n\t'h264-mkv',\n\t'h264-ts',\n\t'gif',\n] as const;\n\nexport type Codec = (typeof validCodecs)[number];\nexport type CodecOrUndefined = Codec | undefined;\n\nexport const DEFAULT_CODEC: Codec = 'h264';\n",
|
|
29
|
-
"import type {Codec, CodecOrUndefined} from '../codec';\nimport {validCodecs} from '../codec';\n\nexport function validateCodec(\n\tdefaultCodec: unknown,\n\tlocation: string,\n\tname: string,\n): asserts defaultCodec is CodecOrUndefined {\n\tif (typeof defaultCodec === 'undefined') {\n\t\treturn;\n\t}\n\n\tif (typeof defaultCodec !== 'string') {\n\t\tthrow new TypeError(\n\t\t\t`The \"${name}\" prop ${location} must be a string, but you passed a value of type ${typeof defaultCodec}.`,\n\t\t);\n\t}\n\n\tif (!validCodecs.includes(defaultCodec as Codec)) {\n\t\tthrow new Error(\n\t\t\t`The \"${name}\" prop ${location} must be one of ${validCodecs.join(\n\t\t\t\t', ',\n\t\t\t)}, but you passed ${defaultCodec}.`,\n\t\t);\n\t}\n}\n",
|
|
30
|
-
"export function validateDimension(\n\tamount: unknown,\n\tnameOfProp: string,\n\tlocation: string,\n): asserts amount is number {\n\tif (typeof amount !== 'number') {\n\t\tthrow new Error(\n\t\t\t`The \"${nameOfProp}\" prop ${location} must be a number, but you passed a value of type ${typeof amount}`,\n\t\t);\n\t}\n\n\tif (isNaN(amount)) {\n\t\tthrow new TypeError(\n\t\t\t`The \"${nameOfProp}\" prop ${location} must not be NaN, but is NaN.`,\n\t\t);\n\t}\n\n\tif (!Number.isFinite(amount)) {\n\t\tthrow new TypeError(\n\t\t\t`The \"${nameOfProp}\" prop ${location} must be finite, but is ${amount}.`,\n\t\t);\n\t}\n\n\tif (amount % 1 !== 0) {\n\t\tthrow new TypeError(\n\t\t\t`The \"${nameOfProp}\" prop ${location} must be an integer, but is ${amount}.`,\n\t\t);\n\t}\n\n\tif (amount <= 0) {\n\t\tthrow new TypeError(\n\t\t\t`The \"${nameOfProp}\" prop ${location} must be positive, but got ${amount}.`,\n\t\t);\n\t}\n}\n",
|
|
31
|
-
"export function validateDurationInFrames(\n\tdurationInFrames: unknown,\n\toptions: {\n\t\tcomponent: string;\n\t\tallowFloats: boolean;\n\t},\n): asserts durationInFrames is number {\n\tconst {allowFloats, component} = options;\n\tif (typeof durationInFrames === 'undefined') {\n\t\tthrow new Error(`The \"durationInFrames\" prop ${component} is missing.`);\n\t}\n\n\tif (typeof durationInFrames !== 'number') {\n\t\tthrow new Error(\n\t\t\t`The \"durationInFrames\" prop ${component} must be a number, but you passed a value of type ${typeof durationInFrames}`,\n\t\t);\n\t}\n\n\tif (durationInFrames <= 0) {\n\t\tthrow new TypeError(\n\t\t\t`The \"durationInFrames\" prop ${component} must be positive, but got ${durationInFrames}.`,\n\t\t);\n\t}\n\n\tif (!allowFloats && durationInFrames % 1 !== 0) {\n\t\tthrow new TypeError(\n\t\t\t`The \"durationInFrames\" prop ${component} must be an integer, but got ${durationInFrames}.`,\n\t\t);\n\t}\n\n\tif (!Number.isFinite(durationInFrames)) {\n\t\tthrow new TypeError(\n\t\t\t`The \"durationInFrames\" prop ${component} must be finite, but got ${durationInFrames}.`,\n\t\t);\n\t}\n}\n",
|
|
32
|
-
"export function validateFps(\n\tfps: unknown,\n\tlocation: string,\n\tisGif: boolean,\n): asserts fps is number {\n\tif (typeof fps !== 'number') {\n\t\tthrow new Error(\n\t\t\t`\"fps\" must be a number, but you passed a value of type ${typeof fps} ${location}`,\n\t\t);\n\t}\n\n\tif (!Number.isFinite(fps)) {\n\t\tthrow new Error(\n\t\t\t`\"fps\" must be a finite, but you passed ${fps} ${location}`,\n\t\t);\n\t}\n\n\tif (isNaN(fps)) {\n\t\tthrow new Error(`\"fps\" must not be NaN, but got ${fps} ${location}`);\n\t}\n\n\tif (fps <= 0) {\n\t\tthrow new TypeError(`\"fps\" must be positive, but got ${fps} ${location}`);\n\t}\n\n\tif (isGif && fps > 50) {\n\t\tthrow new TypeError(\n\t\t\t`The FPS for a GIF cannot be higher than 50. Use the --every-nth-frame option to lower the FPS: https://remotion.dev/docs/render-as-gif`,\n\t\t);\n\t}\n}\n",
|
|
33
|
-
"import type {AnyZodObject} from 'zod';\nimport type {\n\tCalcMetadataReturnType,\n\tCalculateMetadataFunction,\n} from './Composition.js';\nimport {getRemotionEnvironment} from './get-remotion-environment.js';\nimport {serializeThenDeserializeInStudio} from './input-props-serialization.js';\nimport type {InferProps} from './props-if-has-props.js';\nimport {validateCodec} from './validation/validate-default-codec.js';\nimport {validateDimension} from './validation/validate-dimensions.js';\nimport {validateDurationInFrames} from './validation/validate-duration-in-frames.js';\nimport {validateFps} from './validation/validate-fps.js';\nimport type {VideoConfig} from './video-config.js';\n\nconst validateCalculated = ({\n\tcalculated,\n\tcompositionId,\n\tcompositionFps,\n\tcompositionHeight,\n\tcompositionWidth,\n\tcompositionDurationInFrames,\n}: {\n\tcalculated: CalcMetadataReturnType<Record<string, unknown>> | null;\n\tcompositionId: string;\n\tcompositionWidth: number | null;\n\tcompositionHeight: number | null;\n\tcompositionFps: number | null;\n\tcompositionDurationInFrames: number | null;\n}) => {\n\tconst calculateMetadataErrorLocation = `calculated by calculateMetadata() for the composition \"${compositionId}\"`;\n\tconst defaultErrorLocation = `of the \"<Composition />\" component with the id \"${compositionId}\"`;\n\n\tconst width = calculated?.width ?? compositionWidth ?? undefined;\n\n\tvalidateDimension(\n\t\twidth,\n\t\t'width',\n\t\tcalculated?.width ? calculateMetadataErrorLocation : defaultErrorLocation,\n\t);\n\n\tconst height = calculated?.height ?? compositionHeight ?? undefined;\n\n\tvalidateDimension(\n\t\theight,\n\t\t'height',\n\t\tcalculated?.height ? calculateMetadataErrorLocation : defaultErrorLocation,\n\t);\n\n\tconst fps = calculated?.fps ?? compositionFps ?? null;\n\n\tvalidateFps(\n\t\tfps,\n\t\tcalculated?.fps ? calculateMetadataErrorLocation : defaultErrorLocation,\n\t\tfalse,\n\t);\n\n\tconst durationInFrames =\n\t\tcalculated?.durationInFrames ?? compositionDurationInFrames ?? null;\n\n\tvalidateDurationInFrames(durationInFrames, {\n\t\tallowFloats: false,\n\t\tcomponent: `of the \"<Composition />\" component with the id \"${compositionId}\"`,\n\t});\n\n\tconst defaultCodec = calculated?.defaultCodec;\n\tvalidateCodec(defaultCodec, calculateMetadataErrorLocation, 'defaultCodec');\n\n\tconst defaultOutName = calculated?.defaultOutName;\n\tconst defaultVideoImageFormat = calculated?.defaultVideoImageFormat;\n\tconst defaultPixelFormat = calculated?.defaultPixelFormat;\n\n\treturn {\n\t\twidth,\n\t\theight,\n\t\tfps,\n\t\tdurationInFrames,\n\t\tdefaultCodec,\n\t\tdefaultOutName,\n\t\tdefaultVideoImageFormat,\n\t\tdefaultPixelFormat,\n\t};\n};\n\ntype ResolveVideoConfigParams = {\n\tcompositionId: string;\n\tcompositionWidth: number | null;\n\tcompositionHeight: number | null;\n\tcompositionFps: number | null;\n\tcompositionDurationInFrames: number | null;\n\tcalculateMetadata: CalculateMetadataFunction<\n\t\tInferProps<AnyZodObject, Record<string, unknown>>\n\t> | null;\n\tsignal: AbortSignal;\n\tdefaultProps: Record<string, unknown>;\n\toriginalProps: Record<string, unknown>;\n};\n\nexport const resolveVideoConfig = ({\n\tcalculateMetadata,\n\tsignal,\n\tdefaultProps,\n\toriginalProps,\n\tcompositionId,\n\tcompositionDurationInFrames,\n\tcompositionFps,\n\tcompositionHeight,\n\tcompositionWidth,\n}: ResolveVideoConfigParams): VideoConfig | Promise<VideoConfig> => {\n\tconst calculatedProm = calculateMetadata\n\t\t? calculateMetadata({\n\t\t\t\tdefaultProps,\n\t\t\t\tprops: originalProps,\n\t\t\t\tabortSignal: signal,\n\t\t\t\tcompositionId,\n\t\t\t\tisRendering: getRemotionEnvironment().isRendering,\n\t\t\t})\n\t\t: null;\n\n\tif (\n\t\tcalculatedProm !== null &&\n\t\ttypeof calculatedProm === 'object' &&\n\t\t'then' in calculatedProm\n\t) {\n\t\treturn calculatedProm.then((c) => {\n\t\t\tconst {\n\t\t\t\theight,\n\t\t\t\twidth,\n\t\t\t\tdurationInFrames,\n\t\t\t\tfps,\n\t\t\t\tdefaultCodec,\n\t\t\t\tdefaultOutName,\n\t\t\t\tdefaultVideoImageFormat,\n\t\t\t\tdefaultPixelFormat,\n\t\t\t} = validateCalculated({\n\t\t\t\tcalculated: c,\n\t\t\t\tcompositionDurationInFrames,\n\t\t\t\tcompositionFps,\n\t\t\t\tcompositionHeight,\n\t\t\t\tcompositionWidth,\n\t\t\t\tcompositionId,\n\t\t\t});\n\t\t\treturn {\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t\tfps,\n\t\t\t\tdurationInFrames,\n\t\t\t\tid: compositionId,\n\t\t\t\tdefaultProps: serializeThenDeserializeInStudio(defaultProps),\n\t\t\t\tprops: serializeThenDeserializeInStudio(c.props ?? originalProps),\n\t\t\t\tdefaultCodec: defaultCodec ?? null,\n\t\t\t\tdefaultOutName: defaultOutName ?? null,\n\t\t\t\tdefaultVideoImageFormat: defaultVideoImageFormat ?? null,\n\t\t\t\tdefaultPixelFormat: defaultPixelFormat ?? null,\n\t\t\t};\n\t\t});\n\t}\n\n\tconst data = validateCalculated({\n\t\tcalculated: calculatedProm,\n\t\tcompositionDurationInFrames,\n\t\tcompositionFps,\n\t\tcompositionHeight,\n\t\tcompositionWidth,\n\t\tcompositionId,\n\t});\n\n\tif (calculatedProm === null) {\n\t\treturn {\n\t\t\t...data,\n\t\t\tid: compositionId,\n\t\t\tdefaultProps: serializeThenDeserializeInStudio(defaultProps ?? {}),\n\t\t\tprops: serializeThenDeserializeInStudio(originalProps),\n\t\t\tdefaultCodec: null,\n\t\t\tdefaultOutName: null,\n\t\t\tdefaultVideoImageFormat: null,\n\t\t\tdefaultPixelFormat: null,\n\t\t};\n\t}\n\n\treturn {\n\t\t...data,\n\t\tid: compositionId,\n\t\tdefaultProps: serializeThenDeserializeInStudio(defaultProps ?? {}),\n\t\tprops: serializeThenDeserializeInStudio(\n\t\t\tcalculatedProm.props ?? originalProps,\n\t\t),\n\t\tdefaultCodec: calculatedProm.defaultCodec ?? null,\n\t\tdefaultOutName: calculatedProm.defaultOutName ?? null,\n\t\tdefaultVideoImageFormat: calculatedProm.defaultVideoImageFormat ?? null,\n\t\tdefaultPixelFormat: calculatedProm.defaultPixelFormat ?? null,\n\t};\n};\n\nexport const resolveVideoConfigOrCatch = (\n\tparams: ResolveVideoConfigParams,\n):\n\t| {\n\t\t\ttype: 'success';\n\t\t\tresult: VideoConfig | Promise<VideoConfig>;\n\t }\n\t| {\n\t\t\ttype: 'error';\n\t\t\terror: Error;\n\t } => {\n\ttry {\n\t\tconst promiseOrReturnValue = resolveVideoConfig(params);\n\t\treturn {\n\t\t\ttype: 'success',\n\t\t\tresult: promiseOrReturnValue,\n\t\t};\n\t} catch (err) {\n\t\treturn {\n\t\t\ttype: 'error',\n\t\t\terror: err as Error,\n\t\t};\n\t}\n};\n",
|
|
34
|
-
"import {useContext} from 'react';\nimport {CanUseRemotionHooks} from './CanUseRemotionHooks.js';\nimport {useIsPlayer} from './is-player.js';\nimport {useUnsafeVideoConfig} from './use-unsafe-video-config.js';\nimport type {VideoConfig} from './video-config.js';\n\n/*\n * @description Retrieves information about the composition context in which it is used, including dimensions, frame rate, duration, and more.\n * @see [Documentation](https://www.remotion.dev/docs/use-video-config)\n */\nexport const useVideoConfig = (): VideoConfig => {\n\tconst videoConfig = useUnsafeVideoConfig();\n\tconst context = useContext(CanUseRemotionHooks);\n\tconst isPlayer = useIsPlayer();\n\n\tif (!videoConfig) {\n\t\tif (\n\t\t\t(typeof window !== 'undefined' && window.remotion_isPlayer) ||\n\t\t\tisPlayer\n\t\t) {\n\t\t\tthrow new Error(\n\t\t\t\t[\n\t\t\t\t\t'No video config found. Likely reasons:',\n\t\t\t\t\t'- You are probably calling useVideoConfig() from outside the component passed to <Player />. See https://www.remotion.dev/docs/player/examples for how to set up the Player correctly.',\n\t\t\t\t\t'- You have multiple versions of Remotion installed which causes the React context to get lost.',\n\t\t\t\t].join('-'),\n\t\t\t);\n\t\t}\n\n\t\tthrow new Error(\n\t\t\t'No video config found. You are probably calling useVideoConfig() from a component which has not been registered as a <Composition />. See https://www.remotion.dev/docs/the-fundamentals#defining-compositions for more information.',\n\t\t);\n\t}\n\n\tif (!context) {\n\t\tthrow new Error('Called useVideoConfig() outside a Remotion composition.');\n\t}\n\n\treturn videoConfig;\n};\n",
|
|
35
|
-
"import React, {createContext} from 'react';\n\nexport const CanUseRemotionHooks = createContext<boolean>(false);\n\nexport const CanUseRemotionHooksProvider: React.FC<{\n\treadonly children: React.ReactNode;\n}> = ({children}) => {\n\treturn (\n\t\t<CanUseRemotionHooks.Provider value>\n\t\t\t{children}\n\t\t</CanUseRemotionHooks.Provider>\n\t);\n};\n",
|
|
36
|
-
"import {useContext, useMemo} from 'react';\nimport {SequenceContext} from './SequenceContext.js';\nimport {useVideo} from './use-video.js';\nimport type {VideoConfig} from './video-config.js';\n\nexport const useUnsafeVideoConfig = (): VideoConfig | null => {\n\tconst context = useContext(SequenceContext);\n\tconst ctxWidth = context?.width ?? null;\n\tconst ctxHeight = context?.height ?? null;\n\tconst ctxDuration = context?.durationInFrames ?? null;\n\tconst video = useVideo();\n\n\treturn useMemo(() => {\n\t\tif (!video) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst {\n\t\t\tid,\n\t\t\tdurationInFrames,\n\t\t\tfps,\n\t\t\theight,\n\t\t\twidth,\n\t\t\tdefaultProps,\n\t\t\tprops,\n\t\t\tdefaultCodec,\n\t\t\tdefaultOutName,\n\t\t\tdefaultVideoImageFormat,\n\t\t\tdefaultPixelFormat,\n\t\t} = video;\n\n\t\treturn {\n\t\t\tid,\n\t\t\twidth: ctxWidth ?? width,\n\t\t\theight: ctxHeight ?? height,\n\t\t\tfps,\n\t\t\tdurationInFrames: ctxDuration ?? durationInFrames,\n\t\t\tdefaultProps,\n\t\t\tprops,\n\t\t\tdefaultCodec,\n\t\t\tdefaultOutName,\n\t\t\tdefaultVideoImageFormat,\n\t\t\tdefaultPixelFormat,\n\t\t};\n\t}, [ctxDuration, ctxHeight, ctxWidth, video]);\n};\n",
|
|
37
|
-
"import React, {useContext, useMemo} from 'react';\nimport type {SequenceContextType} from './SequenceContext.js';\nimport {SequenceContext} from './SequenceContext.js';\nimport type {TimelineContextValue} from './timeline-position-state.js';\nimport {TimelineContext} from './timeline-position-state.js';\nimport {useCurrentFrame} from './use-current-frame.js';\nimport {useVideoConfig} from './use-video-config.js';\n\ntype FreezeProps = {\n\treadonly frame: number;\n\treadonly children: React.ReactNode;\n\treadonly active?: boolean | ((f: number) => boolean);\n};\n\n/*\n * @description Freezes its children at the specified frame when rendering videos.\n * @see [Documentation](https://remotion.dev/docs/freeze)\n */\nexport const Freeze: React.FC<FreezeProps> = ({\n\tframe: frameToFreeze,\n\tchildren,\n\tactive = true,\n}) => {\n\tconst frame = useCurrentFrame();\n\tconst videoConfig = useVideoConfig();\n\n\tif (typeof frameToFreeze === 'undefined') {\n\t\tthrow new Error(\n\t\t\t`The <Freeze /> component requires a 'frame' prop, but none was passed.`,\n\t\t);\n\t}\n\n\tif (typeof frameToFreeze !== 'number') {\n\t\tthrow new Error(\n\t\t\t`The 'frame' prop of <Freeze /> must be a number, but is of type ${typeof frameToFreeze}`,\n\t\t);\n\t}\n\n\tif (Number.isNaN(frameToFreeze)) {\n\t\tthrow new Error(\n\t\t\t`The 'frame' prop of <Freeze /> must be a real number, but it is NaN.`,\n\t\t);\n\t}\n\n\tif (!Number.isFinite(frameToFreeze)) {\n\t\tthrow new Error(\n\t\t\t`The 'frame' prop of <Freeze /> must be a finite number, but it is ${frameToFreeze}.`,\n\t\t);\n\t}\n\n\tconst isActive = useMemo(() => {\n\t\tif (typeof active === 'boolean') {\n\t\t\treturn active;\n\t\t}\n\n\t\tif (typeof active === 'function') {\n\t\t\treturn active(frame);\n\t\t}\n\t}, [active, frame]);\n\n\tconst timelineContext = useContext(TimelineContext);\n\tconst sequenceContext = useContext(SequenceContext);\n\n\tconst relativeFrom = sequenceContext?.relativeFrom ?? 0;\n\n\tconst timelineValue: TimelineContextValue = useMemo(() => {\n\t\tif (!isActive) {\n\t\t\treturn timelineContext;\n\t\t}\n\n\t\treturn {\n\t\t\t...timelineContext,\n\t\t\tplaying: false,\n\t\t\timperativePlaying: {\n\t\t\t\tcurrent: false,\n\t\t\t},\n\t\t\tframe: {\n\t\t\t\t[videoConfig.id]: frameToFreeze + relativeFrom,\n\t\t\t},\n\t\t};\n\t}, [isActive, timelineContext, videoConfig.id, frameToFreeze, relativeFrom]);\n\n\tconst newSequenceContext: SequenceContextType | null = useMemo(() => {\n\t\tif (!sequenceContext) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn {\n\t\t\t...sequenceContext,\n\t\t\trelativeFrom: 0,\n\t\t\tcumulatedFrom: 0,\n\t\t};\n\t}, [sequenceContext]);\n\n\treturn (\n\t\t<TimelineContext.Provider value={timelineValue}>\n\t\t\t<SequenceContext.Provider value={newSequenceContext}>\n\t\t\t\t{children}\n\t\t\t</SequenceContext.Provider>\n\t\t</TimelineContext.Provider>\n\t);\n};\n",
|
|
38
|
-
"import {useContext} from 'react';\nimport {CanUseRemotionHooks} from './CanUseRemotionHooks.js';\nimport {SequenceContext} from './SequenceContext.js';\nimport {useTimelinePosition} from './timeline-position-state.js';\nimport {useRemotionEnvironment} from './use-remotion-environment.js';\n\n/*\n * @description Retrieves the current frame of the video within a component. Frames are 0-indexed, and if the component is wrapped in a `<Sequence>`, it returns the frame relative to when the Sequence starts.\n * @see [Documentation](https://www.remotion.dev/docs/use-current-frame)\n */\nexport const useCurrentFrame = (): number => {\n\tconst canUseRemotionHooks = useContext(CanUseRemotionHooks);\n\tconst env = useRemotionEnvironment();\n\n\tif (!canUseRemotionHooks) {\n\t\tif (env.isPlayer) {\n\t\t\tthrow new Error(\n\t\t\t\t`useCurrentFrame can only be called inside a component that was passed to <Player>. See: https://www.remotion.dev/docs/player/examples`,\n\t\t\t);\n\t\t}\n\n\t\tthrow new Error(\n\t\t\t`useCurrentFrame() can only be called inside a component that was registered as a composition. See https://www.remotion.dev/docs/the-fundamentals#defining-compositions`,\n\t\t);\n\t}\n\n\tconst frame = useTimelinePosition();\n\tconst context = useContext(SequenceContext);\n\n\tconst contextOffset = context\n\t\t? context.cumulatedFrom + context.relativeFrom\n\t\t: 0;\n\n\treturn frame - contextOffset;\n};\n",
|
|
39
|
-
"import {\n\tforwardRef,\n\tuseEffect,\n\tuseImperativeHandle,\n\tuseLayoutEffect,\n\tuseRef,\n\tuseState,\n} from 'react';\nimport {cancelRender} from '../cancel-render.js';\nimport {useCurrentFrame} from '../use-current-frame.js';\nimport {useDelayRender} from '../use-delay-render.js';\nimport {useVideoConfig} from '../use-video-config.js';\nimport type {AnimatedImageCanvasRef} from './canvas';\nimport {Canvas} from './canvas';\nimport type {RemotionImageDecoder} from './decode-image.js';\nimport {decodeImage} from './decode-image.js';\nimport type {RemotionAnimatedImageProps} from './props';\nimport {resolveAnimatedImageSource} from './resolve-image-source';\n\nexport const AnimatedImage = forwardRef<\n\tHTMLCanvasElement,\n\tRemotionAnimatedImageProps\n>(\n\t(\n\t\t{\n\t\t\tsrc,\n\t\t\twidth,\n\t\t\theight,\n\t\t\tonError,\n\t\t\tloopBehavior = 'loop',\n\t\t\tplaybackRate = 1,\n\t\t\tfit = 'fill',\n\t\t\t...props\n\t\t},\n\t\tcanvasRef,\n\t) => {\n\t\tconst mountState = useRef({isMounted: true});\n\n\t\tuseEffect(() => {\n\t\t\tconst {current} = mountState;\n\t\t\tcurrent.isMounted = true;\n\t\t\treturn () => {\n\t\t\t\tcurrent.isMounted = false;\n\t\t\t};\n\t\t}, []);\n\n\t\tconst resolvedSrc = resolveAnimatedImageSource(src);\n\t\tconst [imageDecoder, setImageDecoder] =\n\t\t\tuseState<RemotionImageDecoder | null>(null);\n\t\tconst {delayRender, continueRender} = useDelayRender();\n\n\t\tconst [decodeHandle] = useState(() =>\n\t\t\tdelayRender(`Rendering <AnimatedImage/> with src=\"${resolvedSrc}\"`),\n\t\t);\n\n\t\tconst frame = useCurrentFrame();\n\t\tconst {fps} = useVideoConfig();\n\t\tconst currentTime = frame / playbackRate / fps;\n\t\tconst currentTimeRef = useRef<number>(currentTime);\n\t\tcurrentTimeRef.current = currentTime;\n\n\t\tconst ref = useRef<AnimatedImageCanvasRef>(null);\n\n\t\tuseImperativeHandle(canvasRef, () => {\n\t\t\tconst c = ref.current?.getCanvas();\n\t\t\tif (!c) {\n\t\t\t\tthrow new Error('Canvas ref is not set');\n\t\t\t}\n\n\t\t\treturn c;\n\t\t}, []);\n\n\t\tconst [initialLoopBehavior] = useState(() => loopBehavior);\n\n\t\tuseEffect(() => {\n\t\t\tconst controller = new AbortController();\n\t\t\tdecodeImage({\n\t\t\t\tresolvedSrc,\n\t\t\t\tsignal: controller.signal,\n\t\t\t\tcurrentTime: currentTimeRef.current,\n\t\t\t\tinitialLoopBehavior,\n\t\t\t})\n\t\t\t\t.then((d) => {\n\t\t\t\t\tsetImageDecoder(d);\n\t\t\t\t\tcontinueRender(decodeHandle);\n\t\t\t\t})\n\t\t\t\t.catch((err) => {\n\t\t\t\t\tif ((err as Error).name === 'AbortError') {\n\t\t\t\t\t\tcontinueRender(decodeHandle);\n\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (onError) {\n\t\t\t\t\t\tonError?.(err as Error);\n\t\t\t\t\t\tcontinueRender(decodeHandle);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcancelRender(err);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\treturn () => {\n\t\t\t\tcontroller.abort();\n\t\t\t};\n\t\t}, [\n\t\t\tresolvedSrc,\n\t\t\tdecodeHandle,\n\t\t\tonError,\n\t\t\tinitialLoopBehavior,\n\t\t\tcontinueRender,\n\t\t]);\n\n\t\tuseLayoutEffect(() => {\n\t\t\tif (!imageDecoder) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst delay = delayRender(\n\t\t\t\t`Rendering frame at ${currentTime} of <AnimatedImage src=\"${src}\"/>`,\n\t\t\t);\n\n\t\t\timageDecoder\n\t\t\t\t.getFrame(currentTime, loopBehavior)\n\t\t\t\t.then((videoFrame) => {\n\t\t\t\t\tif (mountState.current.isMounted) {\n\t\t\t\t\t\tif (videoFrame === null) {\n\t\t\t\t\t\t\tref.current?.clear();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tref.current?.draw(videoFrame.frame!);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tcontinueRender(delay);\n\t\t\t\t})\n\t\t\t\t.catch((err) => {\n\t\t\t\t\tif (onError) {\n\t\t\t\t\t\tonError(err as Error);\n\t\t\t\t\t\tcontinueRender(delay);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcancelRender(err);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t}, [\n\t\t\tcurrentTime,\n\t\t\timageDecoder,\n\t\t\tloopBehavior,\n\t\t\tonError,\n\t\t\tsrc,\n\t\t\tcontinueRender,\n\t\t\tdelayRender,\n\t\t]);\n\n\t\treturn (\n\t\t\t<Canvas ref={ref} width={width} height={height} fit={fit} {...props} />\n\t\t);\n\t},\n);\n",
|
|
40
|
-
"const isErrorLike = (err: unknown): boolean => {\n\tif (err instanceof Error) {\n\t\treturn true;\n\t}\n\n\tif (err === null) {\n\t\treturn false;\n\t}\n\n\tif (typeof err !== 'object') {\n\t\treturn false;\n\t}\n\n\tif (!('stack' in err)) {\n\t\treturn false;\n\t}\n\n\t// eslint-disable-next-line @typescript-eslint/prefer-ts-expect-error\n\t// @ts-ignore we just asserted\n\tif (typeof err.stack !== 'string') {\n\t\treturn false;\n\t}\n\n\tif (!('message' in err)) {\n\t\treturn false;\n\t}\n\n\t// eslint-disable-next-line @typescript-eslint/prefer-ts-expect-error\n\t// @ts-ignore we just asserted\n\tif (typeof err.message !== 'string') {\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n\n/*\n * @description When you invoke this function, Remotion will stop rendering all the frames without any retries.\n * @see [Documentation](https://remotion.dev/docs/cancel-render)\n */\nexport function cancelRender(err: unknown): never {\n\tlet error: Error;\n\n\tif (isErrorLike(err)) {\n\t\terror = err as Error;\n\t\tif (!error.stack) {\n\t\t\terror.stack = new Error(error.message).stack;\n\t\t}\n\t} else if (typeof err === 'string') {\n\t\terror = Error(err);\n\t} else {\n\t\terror = Error('Rendering was cancelled');\n\t}\n\n\twindow.remotion_cancelledError = error.stack;\n\tthrow error;\n}\n",
|
|
41
|
-
"import {useCallback} from 'react';\nimport type {DelayRenderOptions} from './delay-render.js';\nimport {continueRenderInternal, delayRenderInternal} from './delay-render.js';\nimport {useRemotionEnvironment} from './use-remotion-environment.js';\n\ntype DelayRenderFn = (label?: string, options?: DelayRenderOptions) => number;\ntype ContinueRenderFn = (handle: number) => void;\n\nexport const useDelayRender = (): {\n\tdelayRender: DelayRenderFn;\n\tcontinueRender: ContinueRenderFn;\n} => {\n\tconst environment = useRemotionEnvironment();\n\n\tconst delayRender = useCallback<DelayRenderFn>(\n\t\t(label?: string, options?: DelayRenderOptions) => {\n\t\t\treturn delayRenderInternal(environment, label, options);\n\t\t},\n\t\t[environment],\n\t);\n\n\tconst continueRender = useCallback<ContinueRenderFn>(\n\t\t(handle: number) => {\n\t\t\tcontinueRenderInternal(handle, environment);\n\t\t},\n\t\t[environment],\n\t);\n\n\treturn {delayRender, continueRender};\n};\n",
|
|
42
|
-
"/* eslint-disable no-console */\nexport const logLevels = ['trace', 'verbose', 'info', 'warn', 'error'] as const;\n\nexport type LogLevel = (typeof logLevels)[number];\n\nconst getNumberForLogLevel = (level: LogLevel) => {\n\treturn logLevels.indexOf(level);\n};\n\nexport const isEqualOrBelowLogLevel = (\n\tcurrentLevel: LogLevel,\n\tlevel: LogLevel,\n) => {\n\treturn getNumberForLogLevel(currentLevel) <= getNumberForLogLevel(level);\n};\n\nconst verbose = (\n\tlogLevel: LogLevel,\n\t...args: Parameters<typeof console.log>\n) => {\n\tif (isEqualOrBelowLogLevel(logLevel, 'verbose')) {\n\t\treturn console.log(...args);\n\t}\n};\n\nexport const Log = {\n\ttrace: (logLevel: LogLevel, ...args: Parameters<typeof console.log>) => {\n\t\tif (isEqualOrBelowLogLevel(logLevel, 'trace')) {\n\t\t\treturn console.log(...args);\n\t\t}\n\t},\n\tverbose,\n\tinfo: (logLevel: LogLevel, ...args: Parameters<typeof console.log>) => {\n\t\tif (isEqualOrBelowLogLevel(logLevel, 'info')) {\n\t\t\treturn console.log(...args);\n\t\t}\n\t},\n\twarn: (logLevel: LogLevel, ...args: Parameters<typeof console.log>) => {\n\t\tif (isEqualOrBelowLogLevel(logLevel, 'warn')) {\n\t\t\treturn console.warn(...args);\n\t\t}\n\t},\n\terror: (...args: Parameters<typeof console.log>) => {\n\t\treturn console.error(...args);\n\t},\n};\n",
|
|
43
|
-
"import {cancelRender} from './cancel-render.js';\nimport {getRemotionEnvironment} from './get-remotion-environment.js';\nimport {Log} from './log.js';\nimport type {RemotionEnvironment} from './remotion-environment-context.js';\nimport {truthy} from './truthy.js';\n\nif (typeof window !== 'undefined') {\n\twindow.remotion_renderReady = false;\n}\n\nlet handles: number[] = [];\nif (typeof window !== 'undefined') {\n\twindow.remotion_delayRenderTimeouts = {};\n}\n\nexport const DELAY_RENDER_CALLSTACK_TOKEN = 'The delayRender was called:';\nexport const DELAY_RENDER_RETRIES_LEFT = 'Retries left: ';\nexport const DELAY_RENDER_RETRY_TOKEN =\n\t'- Rendering the frame will be retried.';\nexport const DELAY_RENDER_CLEAR_TOKEN = 'handle was cleared after';\n\nconst defaultTimeout = 30000;\n\nexport type DelayRenderOptions = {\n\ttimeoutInMilliseconds?: number;\n\tretries?: number;\n};\n\n/**\n * Internal function that accepts environment as parameter.\n * This allows useDelayRender to control its own environment source.\n * @private\n */\nexport const delayRenderInternal = (\n\tenvironment: RemotionEnvironment,\n\tlabel?: string,\n\toptions?: DelayRenderOptions,\n): number => {\n\tif (typeof label !== 'string' && typeof label !== 'undefined') {\n\t\tthrow new Error(\n\t\t\t'The label parameter of delayRender() must be a string or undefined, got: ' +\n\t\t\t\tJSON.stringify(label),\n\t\t);\n\t}\n\n\tconst handle = Math.random();\n\thandles.push(handle);\n\tconst called = Error().stack?.replace(/^Error/g, '') ?? '';\n\n\tif (environment.isRendering) {\n\t\tconst timeoutToUse =\n\t\t\t(options?.timeoutInMilliseconds ??\n\t\t\t\t(typeof window === 'undefined'\n\t\t\t\t\t? defaultTimeout\n\t\t\t\t\t: (window.remotion_puppeteerTimeout ?? defaultTimeout))) - 2000;\n\t\tif (typeof window !== 'undefined') {\n\t\t\tconst retriesLeft =\n\t\t\t\t(options?.retries ?? 0) - (window.remotion_attempt - 1);\n\t\t\twindow.remotion_delayRenderTimeouts[handle] = {\n\t\t\t\tlabel: label ?? null,\n\t\t\t\tstartTime: Date.now(),\n\t\t\t\ttimeout: setTimeout(() => {\n\t\t\t\t\tconst message = [\n\t\t\t\t\t\t`A delayRender()`,\n\t\t\t\t\t\tlabel ? `\"${label}\"` : null,\n\t\t\t\t\t\t`was called but not cleared after ${timeoutToUse}ms. See https://remotion.dev/docs/timeout for help.`,\n\t\t\t\t\t\tretriesLeft > 0 ? DELAY_RENDER_RETRIES_LEFT + retriesLeft : null,\n\t\t\t\t\t\tretriesLeft > 0 ? DELAY_RENDER_RETRY_TOKEN : null,\n\t\t\t\t\t\tDELAY_RENDER_CALLSTACK_TOKEN,\n\t\t\t\t\t\tcalled,\n\t\t\t\t\t]\n\t\t\t\t\t\t.filter(truthy)\n\t\t\t\t\t\t.join(' ');\n\n\t\t\t\t\tcancelRender(Error(message));\n\t\t\t\t}, timeoutToUse),\n\t\t\t};\n\t\t}\n\t}\n\n\tif (typeof window !== 'undefined') {\n\t\twindow.remotion_renderReady = false;\n\t}\n\n\treturn handle;\n};\n\n/*\n * @description Call this function to signal that a frame should not be rendered until an asynchronous task (such as data fetching) is complete. Use continueRender(handle) to proceed with rendering once the task is complete.\n * @see [Documentation](https://remotion.dev/docs/delay-render)\n */\nexport const delayRender = (\n\tlabel?: string,\n\toptions?: DelayRenderOptions,\n): number => {\n\treturn delayRenderInternal(getRemotionEnvironment(), label, options);\n};\n\n/**\n * Internal function that accepts environment as parameter.\n * @private\n */\nexport const continueRenderInternal = (\n\thandle: number,\n\tenvironment: RemotionEnvironment,\n): void => {\n\tif (typeof handle === 'undefined') {\n\t\tthrow new TypeError(\n\t\t\t'The continueRender() method must be called with a parameter that is the return value of delayRender(). No value was passed.',\n\t\t);\n\t}\n\n\tif (typeof handle !== 'number') {\n\t\tthrow new TypeError(\n\t\t\t'The parameter passed into continueRender() must be the return value of delayRender() which is a number. Got: ' +\n\t\t\t\tJSON.stringify(handle),\n\t\t);\n\t}\n\n\thandles = handles.filter((h) => {\n\t\tif (h === handle) {\n\t\t\tif (environment.isRendering) {\n\t\t\t\tif (!window.remotion_delayRenderTimeouts[handle]) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tconst {label, startTime, timeout} =\n\t\t\t\t\twindow.remotion_delayRenderTimeouts[handle];\n\t\t\t\tclearTimeout(timeout);\n\t\t\t\tconst message = [\n\t\t\t\t\tlabel ? `delayRender() \"${label}\"` : 'A delayRender()',\n\t\t\t\t\tDELAY_RENDER_CLEAR_TOKEN,\n\t\t\t\t\t`${Date.now() - startTime}ms`,\n\t\t\t\t]\n\t\t\t\t\t.filter(truthy)\n\t\t\t\t\t.join(' ');\n\t\t\t\tLog.verbose(window.remotion_logLevel, message);\n\t\t\t\tdelete window.remotion_delayRenderTimeouts[handle];\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t});\n\tif (handles.length === 0 && typeof window !== 'undefined') {\n\t\twindow.remotion_renderReady = true;\n\t}\n};\n\n/*\n * @description Unblock a render that has been blocked by delayRender().\n * @see [Documentation](https://remotion.dev/docs/continue-render)\n */\nexport const continueRender = (handle: number): void => {\n\tcontinueRenderInternal(handle, getRemotionEnvironment());\n};\n",
|
|
44
|
-
"import React, {useCallback, useImperativeHandle, useRef} from 'react';\nimport type {AnimatedImageFillMode} from './props';\n\nconst calcArgs = (\n\tfit: AnimatedImageFillMode,\n\tframeSize: {\n\t\twidth: number;\n\t\theight: number;\n\t},\n\tcanvasSize: {\n\t\twidth: number;\n\t\theight: number;\n\t},\n): [number, number, number, number, number, number, number, number] => {\n\tswitch (fit) {\n\t\tcase 'fill': {\n\t\t\treturn [\n\t\t\t\t0,\n\t\t\t\t0,\n\t\t\t\tframeSize.width,\n\t\t\t\tframeSize.height,\n\t\t\t\t0,\n\t\t\t\t0,\n\t\t\t\tcanvasSize.width,\n\t\t\t\tcanvasSize.height,\n\t\t\t];\n\t\t}\n\n\t\tcase 'contain': {\n\t\t\tconst ratio = Math.min(\n\t\t\t\tcanvasSize.width / frameSize.width,\n\t\t\t\tcanvasSize.height / frameSize.height,\n\t\t\t);\n\n\t\t\tconst centerX = (canvasSize.width - frameSize.width * ratio) / 2;\n\t\t\tconst centerY = (canvasSize.height - frameSize.height * ratio) / 2;\n\n\t\t\treturn [\n\t\t\t\t0,\n\t\t\t\t0,\n\t\t\t\tframeSize.width,\n\t\t\t\tframeSize.height,\n\t\t\t\tcenterX,\n\t\t\t\tcenterY,\n\t\t\t\tframeSize.width * ratio,\n\t\t\t\tframeSize.height * ratio,\n\t\t\t];\n\t\t}\n\n\t\tcase 'cover': {\n\t\t\tconst ratio = Math.max(\n\t\t\t\tcanvasSize.width / frameSize.width,\n\t\t\t\tcanvasSize.height / frameSize.height,\n\t\t\t);\n\t\t\tconst centerX = (canvasSize.width - frameSize.width * ratio) / 2;\n\t\t\tconst centerY = (canvasSize.height - frameSize.height * ratio) / 2;\n\n\t\t\treturn [\n\t\t\t\t0,\n\t\t\t\t0,\n\t\t\t\tframeSize.width,\n\t\t\t\tframeSize.height,\n\t\t\t\tcenterX,\n\t\t\t\tcenterY,\n\t\t\t\tframeSize.width * ratio,\n\t\t\t\tframeSize.height * ratio,\n\t\t\t];\n\t\t}\n\n\t\tdefault:\n\t\t\tthrow new Error('Unknown fit: ' + fit);\n\t}\n};\n\ntype Props = {\n\treadonly width?: number;\n\n\treadonly height?: number;\n\treadonly fit: AnimatedImageFillMode;\n\n\treadonly className?: string;\n\n\treadonly style?: React.CSSProperties;\n};\n\nexport type AnimatedImageCanvasRef = {\n\treadonly draw: (imageData: VideoFrame) => void;\n\treadonly getCanvas: () => HTMLCanvasElement | null;\n\tclear: () => void;\n};\n\nconst CanvasRefForwardingFunction: React.ForwardRefRenderFunction<\n\tAnimatedImageCanvasRef,\n\tProps\n> = ({width, height, fit, className, style}, ref) => {\n\tconst canvasRef = useRef<HTMLCanvasElement>(null);\n\n\tconst draw = useCallback(\n\t\t(imageData: VideoFrame) => {\n\t\t\tconst canvas = canvasRef.current;\n\t\t\tconst canvasWidth = width ?? imageData.displayWidth;\n\t\t\tconst canvasHeight = height ?? imageData.displayHeight;\n\n\t\t\tif (!canvas) {\n\t\t\t\tthrow new Error('Canvas ref is not set');\n\t\t\t}\n\n\t\t\tconst ctx = canvasRef.current?.getContext('2d');\n\t\t\tif (!ctx) {\n\t\t\t\tthrow new Error('Could not get 2d context');\n\t\t\t}\n\n\t\t\tcanvas.width = canvasWidth;\n\t\t\tcanvas.height = canvasHeight;\n\n\t\t\tctx.drawImage(\n\t\t\t\timageData,\n\t\t\t\t...calcArgs(\n\t\t\t\t\tfit,\n\t\t\t\t\t{\n\t\t\t\t\t\theight: imageData.displayHeight,\n\t\t\t\t\t\twidth: imageData.displayWidth,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\twidth: canvasWidth,\n\t\t\t\t\t\theight: canvasHeight,\n\t\t\t\t\t},\n\t\t\t\t),\n\t\t\t);\n\t\t},\n\t\t[fit, height, width],\n\t);\n\n\tuseImperativeHandle(ref, () => {\n\t\treturn {\n\t\t\tdraw,\n\t\t\tgetCanvas: () => {\n\t\t\t\tif (!canvasRef.current) {\n\t\t\t\t\tthrow new Error('Canvas ref is not set');\n\t\t\t\t}\n\n\t\t\t\treturn canvasRef.current;\n\t\t\t},\n\t\t\tclear: () => {\n\t\t\t\tconst ctx = canvasRef.current?.getContext('2d');\n\t\t\t\tif (!ctx) {\n\t\t\t\t\tthrow new Error('Could not get 2d context');\n\t\t\t\t}\n\n\t\t\t\tctx.clearRect(\n\t\t\t\t\t0,\n\t\t\t\t\t0,\n\t\t\t\t\tcanvasRef.current!.width,\n\t\t\t\t\tcanvasRef.current!.height,\n\t\t\t\t);\n\t\t\t},\n\t\t};\n\t}, [draw]);\n\n\treturn <canvas ref={canvasRef} className={className} style={style} />;\n};\n\nexport const Canvas = React.forwardRef(CanvasRefForwardingFunction);\n",
|
|
45
|
-
"import type {RemotionAnimatedImageLoopBehavior} from './props';\n\nexport type AnimatedImageCacheItem = {\n\ttimeInSeconds: number;\n\tframeIndex: number;\n\tframe: VideoFrame | null;\n};\n\nexport type RemotionImageDecoder = {\n\tgetFrame: (\n\t\ti: number,\n\t\tloopBehavior: RemotionAnimatedImageLoopBehavior,\n\t) => Promise<AnimatedImageCacheItem | null>;\n\tframeCount: number;\n};\n\nconst CACHE_SIZE = 5;\n\nconst getActualTime = ({\n\tloopBehavior,\n\tdurationFound,\n\ttimeInSec,\n}: {\n\tloopBehavior: RemotionAnimatedImageLoopBehavior;\n\tdurationFound: number | null;\n\ttimeInSec: number;\n}) => {\n\treturn loopBehavior === 'loop'\n\t\t? durationFound\n\t\t\t? timeInSec % durationFound\n\t\t\t: timeInSec\n\t\t: Math.min(timeInSec, durationFound || Infinity);\n};\n\nexport const decodeImage = async ({\n\tresolvedSrc,\n\tsignal,\n\tcurrentTime,\n\tinitialLoopBehavior,\n}: {\n\tresolvedSrc: string;\n\tsignal: AbortSignal;\n\tcurrentTime: number;\n\tinitialLoopBehavior: RemotionAnimatedImageLoopBehavior;\n}): Promise<RemotionImageDecoder> => {\n\tif (typeof ImageDecoder === 'undefined') {\n\t\tthrow new Error(\n\t\t\t'Your browser does not support the WebCodecs ImageDecoder API.',\n\t\t);\n\t}\n\n\tconst res = await fetch(resolvedSrc, {signal});\n\tconst {body} = res;\n\n\tif (!body) {\n\t\tthrow new Error('Got no body');\n\t}\n\n\tconst decoder = new ImageDecoder({\n\t\tdata: body,\n\t\ttype: res.headers.get('Content-Type') || 'image/gif',\n\t});\n\tawait decoder.completed;\n\tconst {selectedTrack} = decoder.tracks;\n\tif (!selectedTrack) {\n\t\tthrow new Error('No selected track');\n\t}\n\n\tconst cache: AnimatedImageCacheItem[] = [];\n\n\tlet durationFound: number | null = null;\n\n\tconst getFrameByIndex = async (\n\t\tframeIndex: number,\n\t): Promise<AnimatedImageCacheItem> => {\n\t\tconst foundInCache = cache.find((c) => c.frameIndex === frameIndex);\n\t\tif (foundInCache && foundInCache.frame) {\n\t\t\treturn foundInCache;\n\t\t}\n\n\t\tconst frame = await decoder.decode({\n\t\t\tframeIndex,\n\t\t\tcompleteFramesOnly: true,\n\t\t});\n\n\t\tif (foundInCache) {\n\t\t\tfoundInCache.frame = frame.image;\n\t\t} else {\n\t\t\tcache.push({\n\t\t\t\tframe: frame.image,\n\t\t\t\tframeIndex,\n\t\t\t\ttimeInSeconds: frame.image.timestamp / 1_000_000,\n\t\t\t});\n\t\t}\n\n\t\treturn {\n\t\t\tframe: frame.image,\n\t\t\tframeIndex,\n\t\t\ttimeInSeconds: frame.image.timestamp / 1_000_000,\n\t\t};\n\t};\n\n\tconst clearCache = (closeToTimeInSec: number) => {\n\t\tconst itemsInCache = cache.filter((c) => c.frame);\n\t\tconst sortByClosestToCurrentTime = itemsInCache.sort((a, b) => {\n\t\t\tconst aDiff = Math.abs(a.timeInSeconds - closeToTimeInSec);\n\t\t\tconst bDiff = Math.abs(b.timeInSeconds - closeToTimeInSec);\n\t\t\treturn aDiff - bDiff;\n\t\t});\n\t\tfor (let i = 0; i < sortByClosestToCurrentTime.length; i++) {\n\t\t\tif (i < CACHE_SIZE) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst item = sortByClosestToCurrentTime[i];\n\t\t\titem.frame = null;\n\t\t}\n\t};\n\n\tconst ensureFrameBeforeAndAfter = async ({\n\t\ttimeInSec,\n\t\tloopBehavior,\n\t}: {\n\t\ttimeInSec: number;\n\t\tloopBehavior: RemotionAnimatedImageLoopBehavior;\n\t}) => {\n\t\tconst actualTimeInSec = getActualTime({\n\t\t\tdurationFound,\n\t\t\tloopBehavior,\n\t\t\ttimeInSec,\n\t\t});\n\t\tconst framesBefore = cache.filter(\n\t\t\t(c) => c.timeInSeconds <= actualTimeInSec,\n\t\t);\n\t\tconst biggestIndex = framesBefore\n\t\t\t.map((c) => c.frameIndex)\n\t\t\t.reduce((a, b) => Math.max(a, b), 0);\n\n\t\tlet i = biggestIndex;\n\t\twhile (true) {\n\t\t\tconst f = await getFrameByIndex(i);\n\t\t\ti++;\n\t\t\tif (!f.frame) {\n\t\t\t\tthrow new Error('No frame found');\n\t\t\t}\n\n\t\t\tif (!f.frame.duration) {\n\t\t\t\t// non-animated, or AVIF in firefox\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (i === selectedTrack.frameCount && durationFound === null) {\n\t\t\t\tconst duration = (f.frame.timestamp + f.frame.duration) / 1_000_000;\n\t\t\t\tdurationFound = duration;\n\t\t\t}\n\n\t\t\tif (f.timeInSeconds > actualTimeInSec || i === selectedTrack.frameCount) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// If close to end, also cache first frame for smooth wrap around\n\t\tif (\n\t\t\tselectedTrack.frameCount - biggestIndex < 3 &&\n\t\t\tloopBehavior === 'loop'\n\t\t) {\n\t\t\tawait getFrameByIndex(0);\n\t\t}\n\n\t\tclearCache(actualTimeInSec);\n\t};\n\n\t// Twice because might be over total duration\n\tawait ensureFrameBeforeAndAfter({\n\t\ttimeInSec: currentTime,\n\t\tloopBehavior: initialLoopBehavior,\n\t});\n\tawait ensureFrameBeforeAndAfter({\n\t\ttimeInSec: currentTime,\n\t\tloopBehavior: initialLoopBehavior,\n\t});\n\n\tconst getFrame = async (\n\t\ttimeInSec: number,\n\t\tloopBehavior: RemotionAnimatedImageLoopBehavior,\n\t) => {\n\t\tif (\n\t\t\tdurationFound !== null &&\n\t\t\ttimeInSec > durationFound &&\n\t\t\tloopBehavior === 'clear-after-finish'\n\t\t) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst actualTimeInSec = getActualTime({\n\t\t\tloopBehavior,\n\t\t\tdurationFound,\n\t\t\ttimeInSec,\n\t\t});\n\t\tawait ensureFrameBeforeAndAfter({timeInSec: actualTimeInSec, loopBehavior});\n\t\tconst itemsInCache = cache.filter((c) => c.frame);\n\n\t\tconst closest = itemsInCache.reduce((a, b) => {\n\t\t\tconst aDiff = Math.abs(a.timeInSeconds - actualTimeInSec);\n\t\t\tconst bDiff = Math.abs(b.timeInSeconds - actualTimeInSec);\n\t\t\treturn aDiff < bDiff ? a : b;\n\t\t});\n\n\t\tif (!closest.frame) {\n\t\t\tthrow new Error('No frame found');\n\t\t}\n\n\t\treturn closest;\n\t};\n\n\treturn {\n\t\tgetFrame,\n\t\tframeCount: selectedTrack.frameCount,\n\t};\n};\n",
|
|
46
|
-
"export const resolveAnimatedImageSource = (src: string): string => {\n\tif (typeof window === 'undefined') {\n\t\treturn src;\n\t}\n\n\treturn new URL(src, window.origin).href;\n};\n",
|
|
47
|
-
"import type React from 'react';\nimport {useContext, useEffect, useState} from 'react';\nimport {RenderAssetManager} from './RenderAssetManager';\nimport type {DownloadBehavior} from './download-behavior';\nimport {useCurrentFrame} from './use-current-frame';\nimport {useRemotionEnvironment} from './use-remotion-environment';\n\nconst ArtifactThumbnail = Symbol('Thumbnail');\n\nexport const Artifact: React.FC<{\n\treadonly filename: string;\n\treadonly content: string | Uint8Array | typeof ArtifactThumbnail;\n\treadonly downloadBehavior?: DownloadBehavior | null;\n}> & {\n\tThumbnail: typeof ArtifactThumbnail;\n} = ({filename, content, downloadBehavior}) => {\n\tconst {registerRenderAsset, unregisterRenderAsset} =\n\t\tuseContext(RenderAssetManager);\n\n\tconst env = useRemotionEnvironment();\n\n\tconst frame = useCurrentFrame();\n\n\tconst [id] = useState(() => {\n\t\treturn String(Math.random());\n\t});\n\n\tuseEffect(() => {\n\t\tif (!env.isRendering) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (content instanceof Uint8Array) {\n\t\t\tregisterRenderAsset({\n\t\t\t\ttype: 'artifact',\n\t\t\t\tid,\n\t\t\t\tcontent: btoa(new TextDecoder('utf8').decode(content)),\n\t\t\t\tfilename,\n\t\t\t\tframe,\n\t\t\t\tcontentType: 'binary',\n\t\t\t\tdownloadBehavior: downloadBehavior ?? null,\n\t\t\t});\n\t\t} else if (content === ArtifactThumbnail) {\n\t\t\tregisterRenderAsset({\n\t\t\t\ttype: 'artifact',\n\t\t\t\tid,\n\t\t\t\tfilename,\n\t\t\t\tframe,\n\t\t\t\tcontentType: 'thumbnail',\n\t\t\t\tdownloadBehavior: downloadBehavior ?? null,\n\t\t\t});\n\t\t} else {\n\t\t\tregisterRenderAsset({\n\t\t\t\ttype: 'artifact',\n\t\t\t\tid,\n\t\t\t\tcontent,\n\t\t\t\tfilename,\n\t\t\t\tframe,\n\t\t\t\tcontentType: 'text',\n\t\t\t\tdownloadBehavior: downloadBehavior ?? null,\n\t\t\t});\n\t\t}\n\n\t\treturn () => {\n\t\t\treturn unregisterRenderAsset(id);\n\t\t};\n\t}, [\n\t\tcontent,\n\t\tenv.isRendering,\n\t\tfilename,\n\t\tframe,\n\t\tid,\n\t\tregisterRenderAsset,\n\t\tunregisterRenderAsset,\n\t\tdownloadBehavior,\n\t]);\n\n\treturn null;\n};\n\nArtifact.Thumbnail = ArtifactThumbnail;\n",
|
|
48
|
-
"import {\n\tcreateContext,\n\tuseCallback,\n\tuseLayoutEffect,\n\tuseMemo,\n\tuseState,\n} from 'react';\nimport type {TRenderAsset} from './CompositionManager.js';\nimport {validateRenderAsset} from './validation/validate-artifact.js';\n\nexport type RenderAssetManagerContext = {\n\tregisterRenderAsset: (renderAsset: TRenderAsset) => void;\n\tunregisterRenderAsset: (id: string) => void;\n\trenderAssets: TRenderAsset[];\n};\n\nexport const RenderAssetManager = createContext<RenderAssetManagerContext>({\n\t// Must be undefined, otherwise error in Player\n\tregisterRenderAsset: () => undefined,\n\tunregisterRenderAsset: () => undefined,\n\trenderAssets: [],\n});\n\nexport const RenderAssetManagerProvider: React.FC<{\n\tchildren: React.ReactNode;\n}> = ({children}) => {\n\tconst [renderAssets, setRenderAssets] = useState<TRenderAsset[]>([]);\n\n\tconst registerRenderAsset = useCallback((renderAsset: TRenderAsset) => {\n\t\tvalidateRenderAsset(renderAsset);\n\t\tsetRenderAssets((assets) => {\n\t\t\treturn [...assets, renderAsset];\n\t\t});\n\t}, []);\n\n\tconst unregisterRenderAsset = useCallback((id: string) => {\n\t\tsetRenderAssets((assts) => {\n\t\t\treturn assts.filter((a) => a.id !== id);\n\t\t});\n\t}, []);\n\n\tuseLayoutEffect(() => {\n\t\tif (typeof window !== 'undefined') {\n\t\t\twindow.remotion_collectAssets = () => {\n\t\t\t\tsetRenderAssets([]); // clear assets at next render\n\t\t\t\treturn renderAssets;\n\t\t\t};\n\t\t}\n\t}, [renderAssets]);\n\n\tconst contextValue: RenderAssetManagerContext = useMemo(() => {\n\t\treturn {\n\t\t\tregisterRenderAsset,\n\t\t\tunregisterRenderAsset,\n\t\t\trenderAssets,\n\t\t};\n\t}, [renderAssets, registerRenderAsset, unregisterRenderAsset]);\n\n\treturn (\n\t\t<RenderAssetManager.Provider value={contextValue}>\n\t\t\t{children}\n\t\t</RenderAssetManager.Provider>\n\t);\n};\n",
|
|
49
|
-
"import type {TRenderAsset} from '../CompositionManager';\n\nexport const validateArtifactFilename = (filename: unknown) => {\n\tif (typeof filename !== 'string') {\n\t\tthrow new TypeError(\n\t\t\t`The \"filename\" must be a string, but you passed a value of type ${typeof filename}`,\n\t\t);\n\t}\n\n\tif (filename.trim() === '') {\n\t\tthrow new Error('The `filename` must not be empty');\n\t}\n\n\tif (!filename.match(/^([0-9a-zA-Z-!_.*'()/:&$@=;+,?]+)/g)) {\n\t\tthrow new Error(\n\t\t\t'The `filename` must match \"/^([0-9a-zA-Z-!_.*\\'()/:&$@=;+,?]+)/g\". Use forward slashes only, even on Windows.',\n\t\t);\n\t}\n};\n\nconst validateContent = (content: unknown) => {\n\tif (typeof content !== 'string' && !(content instanceof Uint8Array)) {\n\t\tthrow new TypeError(\n\t\t\t`The \"content\" must be a string or Uint8Array, but you passed a value of type ${typeof content}`,\n\t\t);\n\t}\n\n\tif (typeof content === 'string' && content.trim() === '') {\n\t\tthrow new Error('The `content` must not be empty');\n\t}\n};\n\nexport const validateRenderAsset = (artifact: TRenderAsset) => {\n\t// We don't have validation for it yet\n\tif (artifact.type !== 'artifact') {\n\t\treturn;\n\t}\n\n\tvalidateArtifactFilename(artifact.filename);\n\n\tif (artifact.contentType === 'thumbnail') {\n\t\treturn;\n\t}\n\n\tvalidateContent(artifact.content);\n};\n",
|
|
50
|
-
"/* eslint-disable @typescript-eslint/no-use-before-define */\nimport React, {forwardRef, useCallback, useContext} from 'react';\nimport {Sequence} from '../Sequence.js';\nimport {getAbsoluteSrc} from '../absolute-src.js';\nimport {calculateLoopDuration} from '../calculate-loop.js';\nimport {cancelRender} from '../cancel-render.js';\nimport {addSequenceStackTraces} from '../enable-sequence-stack-traces.js';\nimport {Loop} from '../loop/index.js';\nimport {usePreload} from '../prefetch.js';\nimport {useRemotionEnvironment} from '../use-remotion-environment.js';\nimport {useVideoConfig} from '../use-video-config.js';\nimport {validateMediaProps} from '../validate-media-props.js';\nimport {\n\tresolveTrimProps,\n\tvalidateMediaTrimProps,\n} from '../validate-start-from-props.js';\nimport {DurationsContext} from '../video/duration-state.js';\nimport {AudioForPreview} from './AudioForPreview.js';\nimport {AudioForRendering} from './AudioForRendering.js';\nimport type {RemotionAudioProps, RemotionMainAudioProps} from './props.js';\nimport {SharedAudioContext} from './shared-audio-tags.js';\n\nconst AudioRefForwardingFunction: React.ForwardRefRenderFunction<\n\tHTMLAudioElement,\n\tRemotionAudioProps &\n\t\tRemotionMainAudioProps & {\n\t\t\t/**\n\t\t\t * @deprecated For internal use only\n\t\t\t */\n\t\t\treadonly stack?: string;\n\t\t}\n> = (props, ref) => {\n\tconst audioContext = useContext(SharedAudioContext);\n\tconst {\n\t\tstartFrom,\n\t\tendAt,\n\t\ttrimBefore,\n\t\ttrimAfter,\n\t\tname,\n\t\tstack,\n\t\tpauseWhenBuffering,\n\t\tshowInTimeline,\n\t\tonError: onRemotionError,\n\t\t...otherProps\n\t} = props;\n\tconst {loop, ...propsOtherThanLoop} = props;\n\tconst {fps} = useVideoConfig();\n\tconst environment = useRemotionEnvironment();\n\n\tconst {durations, setDurations} = useContext(DurationsContext);\n\tif (typeof props.src !== 'string') {\n\t\tthrow new TypeError(\n\t\t\t`The \\`<Audio>\\` tag requires a string for \\`src\\`, but got ${JSON.stringify(\n\t\t\t\tprops.src,\n\t\t\t)} instead.`,\n\t\t);\n\t}\n\n\tconst preloadedSrc = usePreload(props.src);\n\n\tconst onError: React.ReactEventHandler<HTMLAudioElement> = useCallback(\n\t\t(e) => {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.log(e.currentTarget.error);\n\n\t\t\t// If there is no `loop` property, we don't need to get the duration\n\t\t\t// and this does not need to be a fatal error\n\t\t\tconst errMessage = `Could not play audio with src ${preloadedSrc}: ${e.currentTarget.error}. See https://remotion.dev/docs/media-playback-error for help.`;\n\n\t\t\tif (loop) {\n\t\t\t\tif (onRemotionError) {\n\t\t\t\t\tonRemotionError(new Error(errMessage));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tcancelRender(new Error(errMessage));\n\t\t\t} else {\n\t\t\t\tonRemotionError?.(new Error(errMessage));\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.warn(errMessage);\n\t\t\t}\n\t\t},\n\t\t[loop, onRemotionError, preloadedSrc],\n\t);\n\n\tconst onDuration = useCallback(\n\t\t(src: string, durationInSeconds: number) => {\n\t\t\tsetDurations({type: 'got-duration', durationInSeconds, src});\n\t\t},\n\t\t[setDurations],\n\t);\n\n\tconst durationFetched =\n\t\tdurations[getAbsoluteSrc(preloadedSrc)] ??\n\t\tdurations[getAbsoluteSrc(props.src)];\n\n\tvalidateMediaTrimProps({startFrom, endAt, trimBefore, trimAfter});\n\n\tconst {trimBeforeValue, trimAfterValue} = resolveTrimProps({\n\t\tstartFrom,\n\t\tendAt,\n\t\ttrimBefore,\n\t\ttrimAfter,\n\t});\n\n\tif (loop && durationFetched !== undefined) {\n\t\tif (!Number.isFinite(durationFetched)) {\n\t\t\treturn (\n\t\t\t\t<Audio\n\t\t\t\t\t{...propsOtherThanLoop}\n\t\t\t\t\tref={ref}\n\t\t\t\t\t_remotionInternalNativeLoopPassed\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\n\t\tconst duration = durationFetched * fps;\n\n\t\treturn (\n\t\t\t<Loop\n\t\t\t\tlayout=\"none\"\n\t\t\t\tdurationInFrames={calculateLoopDuration({\n\t\t\t\t\tendAt: trimAfterValue ?? endAt,\n\t\t\t\t\tmediaDuration: duration,\n\t\t\t\t\tplaybackRate: props.playbackRate ?? 1,\n\t\t\t\t\tstartFrom: trimBeforeValue ?? startFrom,\n\t\t\t\t})}\n\t\t\t>\n\t\t\t\t<Audio\n\t\t\t\t\t{...propsOtherThanLoop}\n\t\t\t\t\tref={ref}\n\t\t\t\t\t_remotionInternalNativeLoopPassed\n\t\t\t\t/>\n\t\t\t</Loop>\n\t\t);\n\t}\n\n\tif (\n\t\ttypeof trimBeforeValue !== 'undefined' ||\n\t\ttypeof trimAfterValue !== 'undefined'\n\t) {\n\t\treturn (\n\t\t\t<Sequence\n\t\t\t\tlayout=\"none\"\n\t\t\t\tfrom={0 - (trimBeforeValue ?? 0)}\n\t\t\t\tshowInTimeline={false}\n\t\t\t\tdurationInFrames={trimAfterValue}\n\t\t\t\tname={name}\n\t\t\t>\n\t\t\t\t<Audio\n\t\t\t\t\t_remotionInternalNeedsDurationCalculation={Boolean(loop)}\n\t\t\t\t\tpauseWhenBuffering={pauseWhenBuffering ?? false}\n\t\t\t\t\t{...otherProps}\n\t\t\t\t\tref={ref}\n\t\t\t\t/>\n\t\t\t</Sequence>\n\t\t);\n\t}\n\n\tvalidateMediaProps(props, 'Audio');\n\n\tif (environment.isRendering) {\n\t\treturn (\n\t\t\t<AudioForRendering\n\t\t\t\tonDuration={onDuration}\n\t\t\t\t{...props}\n\t\t\t\tref={ref}\n\t\t\t\tonNativeError={onError}\n\t\t\t\t_remotionInternalNeedsDurationCalculation={Boolean(loop)}\n\t\t\t/>\n\t\t);\n\t}\n\n\treturn (\n\t\t<AudioForPreview\n\t\t\t_remotionInternalNativeLoopPassed={\n\t\t\t\tprops._remotionInternalNativeLoopPassed ?? false\n\t\t\t}\n\t\t\t_remotionInternalStack={stack ?? null}\n\t\t\tshouldPreMountAudioTags={\n\t\t\t\taudioContext !== null && audioContext.numberOfAudioTags > 0\n\t\t\t}\n\t\t\t{...props}\n\t\t\tref={ref}\n\t\t\tonNativeError={onError}\n\t\t\tonDuration={onDuration}\n\t\t\t// Proposal: Make this default to true in v5\n\t\t\tpauseWhenBuffering={pauseWhenBuffering ?? false}\n\t\t\t_remotionInternalNeedsDurationCalculation={Boolean(loop)}\n\t\t\tshowInTimeline={showInTimeline ?? true}\n\t\t/>\n\t);\n};\n\n/*\n * @description With this component, you can add audio to your video. All audio formats which are supported by Chromium are supported by the component.\n * @see [Documentation](https://remotion.dev/docs/audio)\n */\nexport const Audio = forwardRef(AudioRefForwardingFunction);\n\naddSequenceStackTraces(Audio);\n",
|
|
51
|
-
"export const getAbsoluteSrc = (relativeSrc: string) => {\n\tif (typeof window === 'undefined') {\n\t\treturn relativeSrc;\n\t}\n\n\t// https://github.com/remotion-dev/remotion/issues/5359\n\tif (\n\t\trelativeSrc.startsWith('http://') ||\n\t\trelativeSrc.startsWith('https://') ||\n\t\trelativeSrc.startsWith('file://') ||\n\t\trelativeSrc.startsWith('blob:') ||\n\t\trelativeSrc.startsWith('data:')\n\t) {\n\t\treturn relativeSrc;\n\t}\n\n\treturn new URL(relativeSrc, window.origin).href;\n};\n",
|
|
52
|
-
"export const calculateLoopDuration = ({\n\tendAt,\n\tmediaDuration,\n\tplaybackRate,\n\tstartFrom,\n}: {\n\tmediaDuration: number;\n\tplaybackRate: number;\n\tstartFrom: number | undefined;\n\tendAt: number | undefined;\n}) => {\n\tlet duration = mediaDuration;\n\n\t// Account for endAt\n\tif (typeof endAt !== 'undefined') {\n\t\tduration = endAt;\n\t}\n\n\t// Account for startFrom\n\tif (typeof startFrom !== 'undefined') {\n\t\tduration -= startFrom;\n\t}\n\n\tconst actualDuration = duration / playbackRate;\n\n\treturn Math.floor(actualDuration);\n};\n",
|
|
53
|
-
"import React, {createContext, useMemo} from 'react';\nimport type {LoopDisplay} from '../CompositionManager.js';\nimport type {LayoutAndStyle} from '../Sequence.js';\nimport {Sequence} from '../Sequence.js';\nimport {useCurrentFrame} from '../use-current-frame.js';\nimport {useVideoConfig} from '../use-video-config.js';\nimport {validateDurationInFrames} from '../validation/validate-duration-in-frames.js';\n\nexport type LoopProps = {\n\t// The duration of the content to be looped\n\treadonly durationInFrames: number;\n\t// How many times to loop (optional, default Infinity)\n\treadonly times?: number;\n\treadonly name?: string;\n\treadonly children: React.ReactNode;\n} & LayoutAndStyle;\n\ntype LoopContextType = {\n\titeration: number;\n\tdurationInFrames: number;\n};\n\nconst LoopContext = createContext<LoopContextType | null>(null);\n\nconst useLoop = () => {\n\treturn React.useContext(LoopContext);\n};\n\n/*\n * @description This component allows you to quickly lay out an animation so it repeats itself.\n * @see [Documentation](https://remotion.dev/docs/loop)\n */\nexport const Loop: React.FC<LoopProps> & {\n\tuseLoop: typeof useLoop;\n} = ({durationInFrames, times = Infinity, children, name, ...props}) => {\n\tconst currentFrame = useCurrentFrame();\n\tconst {durationInFrames: compDuration} = useVideoConfig();\n\n\tvalidateDurationInFrames(durationInFrames, {\n\t\tcomponent: 'of the <Loop /> component',\n\t\tallowFloats: true,\n\t});\n\n\tif (typeof times !== 'number') {\n\t\tthrow new TypeError(\n\t\t\t`You passed to \"times\" an argument of type ${typeof times}, but it must be a number.`,\n\t\t);\n\t}\n\n\tif (times !== Infinity && times % 1 !== 0) {\n\t\tthrow new TypeError(\n\t\t\t`The \"times\" prop of a loop must be an integer, but got ${times}.`,\n\t\t);\n\t}\n\n\tif (times < 0) {\n\t\tthrow new TypeError(\n\t\t\t`The \"times\" prop of a loop must be at least 0, but got ${times}`,\n\t\t);\n\t}\n\n\tconst maxTimes = Math.ceil(compDuration / durationInFrames);\n\tconst actualTimes = Math.min(maxTimes, times);\n\tconst style = props.layout === 'none' ? undefined : props.style;\n\tconst maxFrame = durationInFrames * (actualTimes - 1);\n\tconst iteration = Math.floor(currentFrame / durationInFrames);\n\tconst start = iteration * durationInFrames;\n\tconst from = Math.min(start, maxFrame);\n\n\tconst loopDisplay: LoopDisplay = useMemo(() => {\n\t\treturn {\n\t\t\tnumberOfTimes: actualTimes,\n\t\t\tstartOffset: -from,\n\t\t\tdurationInFrames,\n\t\t};\n\t}, [actualTimes, durationInFrames, from]);\n\n\tconst loopContext: LoopContextType = useMemo(() => {\n\t\treturn {\n\t\t\titeration: Math.floor(currentFrame / durationInFrames),\n\t\t\tdurationInFrames,\n\t\t};\n\t}, [currentFrame, durationInFrames]);\n\n\treturn (\n\t\t<LoopContext.Provider value={loopContext}>\n\t\t\t<Sequence\n\t\t\t\tdurationInFrames={durationInFrames}\n\t\t\t\tfrom={from}\n\t\t\t\tname={name ?? '<Loop>'}\n\t\t\t\t_remotionInternalLoopDisplay={loopDisplay}\n\t\t\t\tlayout={props.layout}\n\t\t\t\tstyle={style}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</Sequence>\n\t\t</LoopContext.Provider>\n\t);\n};\n\nLoop.useLoop = useLoop;\n",
|
|
54
|
-
"import {useContext} from 'react';\nimport {getRemotionEnvironment} from './get-remotion-environment.js';\nimport type {LogLevel} from './log.js';\nimport {Log} from './log.js';\nimport {playbackLogging} from './playback-logging.js';\nimport {PreloadContext, setPreloads} from './prefetch-state.js';\n\nexport const removeAndGetHashFragment = (src: string) => {\n\tconst hashIndex = src.indexOf('#');\n\tif (hashIndex === -1) {\n\t\treturn null;\n\t}\n\n\treturn hashIndex;\n};\n\nexport const getSrcWithoutHash = (src: string) => {\n\tconst hashIndex = removeAndGetHashFragment(src);\n\tif (hashIndex === null) {\n\t\treturn src;\n\t}\n\n\treturn src.slice(0, hashIndex);\n};\n\nexport const usePreload = (src: string): string => {\n\tconst preloads = useContext(PreloadContext);\n\tconst hashFragmentIndex = removeAndGetHashFragment(src);\n\tconst withoutHashFragment = getSrcWithoutHash(src);\n\n\tif (!preloads[withoutHashFragment]) {\n\t\treturn src;\n\t}\n\n\tif (hashFragmentIndex !== null) {\n\t\treturn preloads[withoutHashFragment] + src.slice(hashFragmentIndex);\n\t}\n\n\treturn preloads[withoutHashFragment];\n};\n\ntype FetchAndPreload = {\n\tfree: () => void;\n\twaitUntilDone: () => Promise<string>;\n};\n\nconst blobToBase64 = function (blob: Blob): Promise<string> {\n\tconst reader = new FileReader();\n\n\treturn new Promise((resolve, reject) => {\n\t\treader.onload = function () {\n\t\t\tconst dataUrl = reader.result as string;\n\t\t\tresolve(dataUrl);\n\t\t};\n\n\t\treader.onerror = (err) => {\n\t\t\treturn reject(err);\n\t\t};\n\n\t\treader.readAsDataURL(blob);\n\t});\n};\n\nexport type PrefetchOnProgress = (options: {\n\ttotalBytes: number | null;\n\tloadedBytes: number;\n}) => void;\n\nconst getBlobFromReader = async ({\n\treader,\n\tcontentType,\n\tcontentLength,\n\tonProgress,\n}: {\n\treader: ReadableStreamDefaultReader<Uint8Array>;\n\tcontentType: string | null;\n\tcontentLength: number | null;\n\tonProgress: PrefetchOnProgress | undefined;\n}): Promise<Blob> => {\n\tlet receivedLength = 0;\n\tconst chunks = [];\n\twhile (true) {\n\t\tconst {done, value} = await reader.read();\n\n\t\tif (done) {\n\t\t\tbreak;\n\t\t}\n\n\t\tchunks.push(value);\n\t\treceivedLength += value.length;\n\t\tif (onProgress) {\n\t\t\tonProgress({loadedBytes: receivedLength, totalBytes: contentLength});\n\t\t}\n\t}\n\n\tconst chunksAll = new Uint8Array(receivedLength);\n\tlet position = 0;\n\n\tfor (const chunk of chunks) {\n\t\tchunksAll.set(chunk, position);\n\t\tposition += chunk.length;\n\t}\n\n\treturn new Blob([chunksAll], {\n\t\ttype: contentType ?? undefined,\n\t});\n};\n\n/*\n * @description When you call the prefetch() function, an asset will be fetched and kept in memory so it is ready when you want to play it in a <Player>.\n * @see [Documentation](https://www.remotion.dev/docs/prefetch)\n */\nexport const prefetch = (\n\tsrc: string,\n\toptions?: {\n\t\tmethod?: 'blob-url' | 'base64';\n\t\tcontentType?: string;\n\t\tonProgress?: PrefetchOnProgress;\n\t\tcredentials?: RequestCredentials;\n\t\tlogLevel?: LogLevel;\n\t},\n): FetchAndPreload => {\n\tconst method = options?.method ?? 'blob-url';\n\tconst logLevel = options?.logLevel ?? 'info';\n\tconst srcWithoutHash = getSrcWithoutHash(src);\n\n\tif (getRemotionEnvironment().isRendering) {\n\t\treturn {\n\t\t\tfree: () => undefined,\n\t\t\twaitUntilDone: () => Promise.resolve(srcWithoutHash),\n\t\t};\n\t}\n\n\tLog.verbose(logLevel, `[prefetch] Starting prefetch ${srcWithoutHash}`);\n\n\tlet canceled = false;\n\tlet objectUrl: string | null = null;\n\tlet resolve: (src: string) => void = () => undefined;\n\tlet reject: (err: Error) => void = () => undefined;\n\n\tconst waitUntilDone = new Promise<string>((res, rej) => {\n\t\tresolve = res;\n\t\treject = rej;\n\t});\n\n\tconst controller = new AbortController();\n\tlet canBeAborted = true;\n\n\tfetch(srcWithoutHash, {\n\t\tsignal: controller.signal,\n\t\tcredentials: options?.credentials ?? undefined,\n\t})\n\t\t.then((res) => {\n\t\t\tcanBeAborted = false;\n\t\t\tif (canceled) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif (!res.ok) {\n\t\t\t\tthrow new Error(`HTTP error, status = ${res.status}`);\n\t\t\t}\n\n\t\t\tconst headerContentType = res.headers.get('Content-Type');\n\n\t\t\tconst contentType = options?.contentType ?? headerContentType;\n\t\t\tconst hasProperContentType =\n\t\t\t\tcontentType &&\n\t\t\t\t(contentType.startsWith('video/') ||\n\t\t\t\t\tcontentType.startsWith('audio/') ||\n\t\t\t\t\tcontentType.startsWith('image/'));\n\n\t\t\tif (!hasProperContentType) {\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.warn(\n\t\t\t\t\t`Called prefetch() on ${srcWithoutHash} which returned a \"Content-Type\" of ${headerContentType}. Prefetched content should have a proper content type (video/... or audio/...) or a contentType passed the options of prefetch(). Otherwise, prefetching will not work properly in all browsers.`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (!res.body) {\n\t\t\t\tthrow new Error(`HTTP response of ${srcWithoutHash} has no body`);\n\t\t\t}\n\n\t\t\tconst reader = res.body.getReader();\n\n\t\t\treturn getBlobFromReader({\n\t\t\t\treader,\n\t\t\t\tcontentType: options?.contentType ?? headerContentType ?? null,\n\t\t\t\tcontentLength: res.headers.get('Content-Length')\n\t\t\t\t\t? parseInt(res.headers.get('Content-Length')!, 10)\n\t\t\t\t\t: null,\n\t\t\t\tonProgress: options?.onProgress,\n\t\t\t});\n\t\t})\n\t\t.then((buf) => {\n\t\t\tif (!buf) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst actualBlob = options?.contentType\n\t\t\t\t? new Blob([buf], {type: options.contentType})\n\t\t\t\t: buf;\n\n\t\t\tif (method === 'base64') {\n\t\t\t\treturn blobToBase64(actualBlob);\n\t\t\t}\n\n\t\t\treturn URL.createObjectURL(actualBlob);\n\t\t})\n\t\t.then((url) => {\n\t\t\tif (canceled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tplaybackLogging({\n\t\t\t\tlogLevel,\n\t\t\t\ttag: 'prefetch',\n\t\t\t\tmessage: `Finished prefetch ${srcWithoutHash} with method ${method}`,\n\t\t\t\tmountTime: null,\n\t\t\t});\n\n\t\t\tobjectUrl = url as string;\n\n\t\t\tsetPreloads((p) => ({\n\t\t\t\t...p,\n\t\t\t\t[srcWithoutHash]: objectUrl as string,\n\t\t\t}));\n\t\t\tresolve(objectUrl);\n\t\t})\n\t\t.catch((err) => {\n\t\t\tif (err?.message.includes('free() called')) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\treject(err);\n\t\t});\n\n\treturn {\n\t\tfree: () => {\n\t\t\tplaybackLogging({\n\t\t\t\tlogLevel,\n\t\t\t\ttag: 'prefetch',\n\t\t\t\tmessage: `Freeing ${srcWithoutHash}`,\n\t\t\t\tmountTime: null,\n\t\t\t});\n\t\t\tif (objectUrl) {\n\t\t\t\tif (method === 'blob-url') {\n\t\t\t\t\tURL.revokeObjectURL(objectUrl);\n\t\t\t\t}\n\n\t\t\t\tsetPreloads((p) => {\n\t\t\t\t\tconst copy = {...p};\n\t\t\t\t\tdelete copy[srcWithoutHash];\n\t\t\t\t\treturn copy;\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tcanceled = true;\n\t\t\t\tif (canBeAborted) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tcontroller.abort(new Error('free() called'));\n\t\t\t\t\t} catch {}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\twaitUntilDone: () => {\n\t\t\treturn waitUntilDone;\n\t\t},\n\t};\n};\n",
|
|
55
|
-
"import {Log, type LogLevel} from './log';\n\nexport const playbackLogging = ({\n\tlogLevel,\n\ttag,\n\tmessage,\n\tmountTime,\n}: {\n\tlogLevel: LogLevel;\n\ttag: string;\n\tmessage: string;\n\tmountTime: number | null;\n}) => {\n\tconst tags = [mountTime ? Date.now() - mountTime + 'ms ' : null, tag]\n\t\t.filter(Boolean)\n\t\t.join(' ');\n\n\tLog.trace(logLevel, `[${tags}]`, message);\n};\n",
|
|
56
|
-
"import React, {createContext, useEffect, useState} from 'react';\n\ntype Value = Record<string, string>;\n\nexport const PreloadContext = createContext<Value>({});\n\nlet preloads: Value = {};\nlet updaters: (() => void)[] = [];\n\nexport const setPreloads = (updater: (p: Value) => Value) => {\n\tpreloads = updater(preloads);\n\tupdaters.forEach((u) => u());\n};\n\nexport const PrefetchProvider: React.FC<{\n\treadonly children: React.ReactNode;\n}> = ({children}) => {\n\tconst [_preloads, _setPreloads] = useState<Value>(() => preloads);\n\n\tuseEffect(() => {\n\t\tconst updaterFunction = () => {\n\t\t\t_setPreloads(preloads);\n\t\t};\n\n\t\tupdaters.push(updaterFunction);\n\n\t\treturn () => {\n\t\t\tupdaters = updaters.filter((u) => u !== updaterFunction);\n\t\t};\n\t}, []);\n\n\treturn (\n\t\t<PreloadContext.Provider value={_preloads}>\n\t\t\t{children}\n\t\t</PreloadContext.Provider>\n\t);\n};\n",
|
|
57
|
-
"import type {RemotionAudioProps} from './audio/index.js';\nimport type {RemotionVideoProps} from './video/index.js';\nimport type {RemotionOffthreadVideoProps} from './video/props.js';\n\nexport const validateMediaProps = (\n\tprops: RemotionVideoProps | RemotionAudioProps | RemotionOffthreadVideoProps,\n\tcomponent: 'Video' | 'Audio',\n) => {\n\tif (\n\t\ttypeof props.volume !== 'number' &&\n\t\ttypeof props.volume !== 'function' &&\n\t\ttypeof props.volume !== 'undefined'\n\t) {\n\t\tthrow new TypeError(\n\t\t\t`You have passed a volume of type ${typeof props.volume} to your <${component} /> component. Volume must be a number or a function with the signature '(frame: number) => number' undefined.`,\n\t\t);\n\t}\n\n\tif (typeof props.volume === 'number' && props.volume < 0) {\n\t\tthrow new TypeError(\n\t\t\t`You have passed a volume below 0 to your <${component} /> component. Volume must be between 0 and 1`,\n\t\t);\n\t}\n\n\tif (\n\t\ttypeof props.playbackRate !== 'number' &&\n\t\ttypeof props.playbackRate !== 'undefined'\n\t) {\n\t\tthrow new TypeError(\n\t\t\t`You have passed a playbackRate of type ${typeof props.playbackRate} to your <${component} /> component. Playback rate must a real number or undefined.`,\n\t\t);\n\t}\n\n\tif (\n\t\ttypeof props.playbackRate === 'number' &&\n\t\t(isNaN(props.playbackRate) ||\n\t\t\t!Number.isFinite(props.playbackRate) ||\n\t\t\tprops.playbackRate <= 0)\n\t) {\n\t\tthrow new TypeError(\n\t\t\t`You have passed a playbackRate of ${props.playbackRate} to your <${component} /> component. Playback rate must be a real number above 0.`,\n\t\t);\n\t}\n};\n",
|
|
58
|
-
"export const validateStartFromProps = (\n\tstartFrom: number | undefined,\n\tendAt: number | undefined,\n) => {\n\tif (typeof startFrom !== 'undefined') {\n\t\tif (typeof startFrom !== 'number') {\n\t\t\tthrow new TypeError(\n\t\t\t\t`type of startFrom prop must be a number, instead got type ${typeof startFrom}.`,\n\t\t\t);\n\t\t}\n\n\t\tif (isNaN(startFrom) || startFrom === Infinity) {\n\t\t\tthrow new TypeError('startFrom prop can not be NaN or Infinity.');\n\t\t}\n\n\t\tif (startFrom < 0) {\n\t\t\tthrow new TypeError(\n\t\t\t\t`startFrom must be greater than equal to 0 instead got ${startFrom}.`,\n\t\t\t);\n\t\t}\n\t}\n\n\tif (typeof endAt !== 'undefined') {\n\t\tif (typeof endAt !== 'number') {\n\t\t\tthrow new TypeError(\n\t\t\t\t`type of endAt prop must be a number, instead got type ${typeof endAt}.`,\n\t\t\t);\n\t\t}\n\n\t\tif (isNaN(endAt)) {\n\t\t\tthrow new TypeError('endAt prop can not be NaN.');\n\t\t}\n\n\t\tif (endAt <= 0) {\n\t\t\tthrow new TypeError(\n\t\t\t\t`endAt must be a positive number, instead got ${endAt}.`,\n\t\t\t);\n\t\t}\n\t}\n\n\tif ((endAt as number) < (startFrom as number)) {\n\t\tthrow new TypeError('endAt prop must be greater than startFrom prop.');\n\t}\n};\n\nexport const validateTrimProps = (\n\ttrimBefore: number | undefined,\n\ttrimAfter: number | undefined,\n) => {\n\tif (typeof trimBefore !== 'undefined') {\n\t\tif (typeof trimBefore !== 'number') {\n\t\t\tthrow new TypeError(\n\t\t\t\t`type of trimBefore prop must be a number, instead got type ${typeof trimBefore}.`,\n\t\t\t);\n\t\t}\n\n\t\tif (isNaN(trimBefore) || trimBefore === Infinity) {\n\t\t\tthrow new TypeError('trimBefore prop can not be NaN or Infinity.');\n\t\t}\n\n\t\tif (trimBefore < 0) {\n\t\t\tthrow new TypeError(\n\t\t\t\t`trimBefore must be greater than equal to 0 instead got ${trimBefore}.`,\n\t\t\t);\n\t\t}\n\t}\n\n\tif (typeof trimAfter !== 'undefined') {\n\t\tif (typeof trimAfter !== 'number') {\n\t\t\tthrow new TypeError(\n\t\t\t\t`type of trimAfter prop must be a number, instead got type ${typeof trimAfter}.`,\n\t\t\t);\n\t\t}\n\n\t\tif (isNaN(trimAfter)) {\n\t\t\tthrow new TypeError('trimAfter prop can not be NaN.');\n\t\t}\n\n\t\tif (trimAfter <= 0) {\n\t\t\tthrow new TypeError(\n\t\t\t\t`trimAfter must be a positive number, instead got ${trimAfter}.`,\n\t\t\t);\n\t\t}\n\t}\n\n\tif ((trimAfter as number) < (trimBefore as number)) {\n\t\tthrow new TypeError('trimAfter prop must be greater than trimBefore prop.');\n\t}\n};\n\nexport const validateMediaTrimProps = ({\n\tstartFrom,\n\tendAt,\n\ttrimBefore,\n\ttrimAfter,\n}: {\n\tstartFrom: number | undefined;\n\tendAt: number | undefined;\n\ttrimBefore: number | undefined;\n\ttrimAfter: number | undefined;\n}) => {\n\t// Check for conflicting props\n\tif (typeof startFrom !== 'undefined' && typeof trimBefore !== 'undefined') {\n\t\tthrow new TypeError(\n\t\t\t'Cannot use both startFrom and trimBefore props. Use trimBefore instead as startFrom is deprecated.',\n\t\t);\n\t}\n\n\tif (typeof endAt !== 'undefined' && typeof trimAfter !== 'undefined') {\n\t\tthrow new TypeError(\n\t\t\t'Cannot use both endAt and trimAfter props. Use trimAfter instead as endAt is deprecated.',\n\t\t);\n\t}\n\n\t// Validate using the appropriate validation function\n\tconst hasNewProps =\n\t\ttypeof trimBefore !== 'undefined' || typeof trimAfter !== 'undefined';\n\tconst hasOldProps =\n\t\ttypeof startFrom !== 'undefined' || typeof endAt !== 'undefined';\n\n\tif (hasNewProps) {\n\t\tvalidateTrimProps(trimBefore, trimAfter);\n\t} else if (hasOldProps) {\n\t\tvalidateStartFromProps(startFrom, endAt);\n\t}\n};\n\nexport const resolveTrimProps = ({\n\tstartFrom,\n\tendAt,\n\ttrimBefore,\n\ttrimAfter,\n}: {\n\tstartFrom: number | undefined;\n\tendAt: number | undefined;\n\ttrimBefore: number | undefined;\n\ttrimAfter: number | undefined;\n}): {\n\ttrimBeforeValue: number | undefined;\n\ttrimAfterValue: number | undefined;\n} => {\n\t// Use new props if available, otherwise fall back to old props\n\tconst trimBeforeValue = trimBefore ?? startFrom ?? undefined;\n\tconst trimAfterValue = trimAfter ?? endAt ?? undefined;\n\n\treturn {trimBeforeValue, trimAfterValue};\n};\n",
|
|
59
|
-
"import React, {createContext, useMemo, useReducer} from 'react';\nimport {getAbsoluteSrc} from '../absolute-src.js';\ntype DurationState = Record<string, number>;\n\ntype DurationAction = {\n\ttype: 'got-duration';\n\tsrc: string;\n\tdurationInSeconds: number;\n};\n\nexport const durationReducer = (\n\tstate: DurationState,\n\taction: DurationAction,\n) => {\n\tswitch (action.type) {\n\t\tcase 'got-duration': {\n\t\t\tconst absoluteSrc = getAbsoluteSrc(action.src);\n\t\t\tif (state[absoluteSrc] === action.durationInSeconds) {\n\t\t\t\treturn state;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[absoluteSrc]: action.durationInSeconds,\n\t\t\t};\n\t\t}\n\n\t\tdefault:\n\t\t\treturn state;\n\t}\n};\n\ntype TDurationsContext = {\n\tdurations: DurationState;\n\tsetDurations: React.Dispatch<DurationAction>;\n};\n\nexport const DurationsContext = createContext<TDurationsContext>({\n\tdurations: {},\n\tsetDurations: () => {\n\t\tthrow new Error('context missing');\n\t},\n});\n\nexport const DurationsContextProvider: React.FC<{\n\treadonly children: React.ReactNode;\n}> = ({children}) => {\n\tconst [durations, setDurations] = useReducer(durationReducer, {});\n\n\tconst value = useMemo(() => {\n\t\treturn {\n\t\t\tdurations,\n\t\t\tsetDurations,\n\t\t};\n\t}, [durations]);\n\n\treturn (\n\t\t<DurationsContext.Provider value={value}>\n\t\t\t{children}\n\t\t</DurationsContext.Provider>\n\t);\n};\n",
|
|
60
|
-
"import type {AudioHTMLAttributes} from 'react';\nimport React, {\n\tforwardRef,\n\tuseContext,\n\tuseEffect,\n\tuseImperativeHandle,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n} from 'react';\nimport {SequenceContext} from '../SequenceContext.js';\nimport {SequenceVisibilityToggleContext} from '../SequenceManager.js';\nimport {getCrossOriginValue} from '../get-cross-origin-value.js';\nimport {useLogLevel} from '../log-level-context.js';\nimport {usePreload} from '../prefetch.js';\nimport {random} from '../random.js';\nimport {useVolume} from '../use-amplification.js';\nimport {useMediaInTimeline} from '../use-media-in-timeline.js';\nimport {useMediaPlayback} from '../use-media-playback.js';\nimport {\n\tuseMediaMutedState,\n\tuseMediaVolumeState,\n} from '../volume-position-state.js';\nimport {evaluateVolume} from '../volume-prop.js';\nimport {warnAboutTooHighVolume} from '../volume-safeguard.js';\nimport type {IsExact, NativeAudioProps, RemotionAudioProps} from './props.js';\nimport {SharedAudioContext, useSharedAudio} from './shared-audio-tags.js';\nimport {useFrameForVolumeProp} from './use-audio-frame.js';\n\ntype AudioForPreviewProps = RemotionAudioProps & {\n\treadonly shouldPreMountAudioTags: boolean;\n\treadonly onDuration: (src: string, durationInSeconds: number) => void;\n\treadonly pauseWhenBuffering: boolean;\n\treadonly _remotionInternalNativeLoopPassed: boolean;\n\treadonly _remotionInternalStack: string | null;\n\treadonly showInTimeline: boolean;\n\treadonly stack?: string | undefined;\n\treadonly onNativeError: React.ReactEventHandler<HTMLAudioElement>;\n};\n\nconst AudioForDevelopmentForwardRefFunction: React.ForwardRefRenderFunction<\n\tHTMLAudioElement,\n\tAudioForPreviewProps\n> = (props, ref) => {\n\tconst [initialShouldPreMountAudioElements] = useState(\n\t\tprops.shouldPreMountAudioTags,\n\t);\n\tif (props.shouldPreMountAudioTags !== initialShouldPreMountAudioElements) {\n\t\tthrow new Error(\n\t\t\t'Cannot change the behavior for pre-mounting audio tags dynamically.',\n\t\t);\n\t}\n\n\tconst logLevel = useLogLevel();\n\n\tconst {\n\t\tvolume,\n\t\tmuted,\n\t\tplaybackRate,\n\t\tshouldPreMountAudioTags,\n\t\tsrc,\n\t\tonDuration,\n\t\tacceptableTimeShiftInSeconds,\n\t\t_remotionInternalNeedsDurationCalculation,\n\t\t_remotionInternalNativeLoopPassed,\n\t\t_remotionInternalStack,\n\t\tallowAmplificationDuringRender,\n\t\tname,\n\t\tpauseWhenBuffering,\n\t\tshowInTimeline,\n\t\tloopVolumeCurveBehavior,\n\t\tstack,\n\t\tcrossOrigin,\n\t\tdelayRenderRetries,\n\t\tdelayRenderTimeoutInMilliseconds,\n\t\ttoneFrequency,\n\t\tuseWebAudioApi,\n\t\tonError,\n\t\tonNativeError,\n\t\taudioStreamIndex,\n\t\t...nativeProps\n\t} = props;\n\n\t// Typecheck that we are not accidentially passing unrecognized props\n\t// to the DOM\n\tconst _propsValid: IsExact<\n\t\ttypeof nativeProps,\n\t\tOmit<NativeAudioProps, 'crossOrigin' | 'src' | 'name' | 'muted'>\n\t> = true;\n\tif (!_propsValid) {\n\t\tthrow new Error('typecheck error');\n\t}\n\n\tconst [mediaVolume] = useMediaVolumeState();\n\tconst [mediaMuted] = useMediaMutedState();\n\n\tconst volumePropFrame = useFrameForVolumeProp(\n\t\tloopVolumeCurveBehavior ?? 'repeat',\n\t);\n\n\tconst {hidden} = useContext(SequenceVisibilityToggleContext);\n\n\tif (!src) {\n\t\tthrow new TypeError(\"No 'src' was passed to <Audio>.\");\n\t}\n\n\tconst preloadedSrc = usePreload(src);\n\n\tconst sequenceContext = useContext(SequenceContext);\n\n\tconst [timelineId] = useState(() => String(Math.random()));\n\n\tconst isSequenceHidden = hidden[timelineId] ?? false;\n\n\tconst userPreferredVolume = evaluateVolume({\n\t\tframe: volumePropFrame,\n\t\tvolume,\n\t\tmediaVolume,\n\t});\n\n\twarnAboutTooHighVolume(userPreferredVolume);\n\n\tconst crossOriginValue = getCrossOriginValue({\n\t\tcrossOrigin,\n\t\trequestsVideoFrame: false,\n\t});\n\n\tconst propsToPass = useMemo((): AudioHTMLAttributes<HTMLAudioElement> => {\n\t\treturn {\n\t\t\tmuted:\n\t\t\t\tmuted || mediaMuted || isSequenceHidden || userPreferredVolume <= 0,\n\t\t\tsrc: preloadedSrc,\n\t\t\tloop: _remotionInternalNativeLoopPassed,\n\t\t\tcrossOrigin: crossOriginValue,\n\t\t\t...nativeProps,\n\t\t};\n\t}, [\n\t\t_remotionInternalNativeLoopPassed,\n\t\tisSequenceHidden,\n\t\tmediaMuted,\n\t\tmuted,\n\t\tnativeProps,\n\t\tpreloadedSrc,\n\t\tuserPreferredVolume,\n\t\tcrossOriginValue,\n\t]);\n\t// Generate a string that's as unique as possible for this asset\n\t// but at the same time deterministic. We use it to combat strict mode issues.\n\tconst id = useMemo(\n\t\t() =>\n\t\t\t`audio-${random(\n\t\t\t\tsrc ?? '',\n\t\t\t)}-${sequenceContext?.relativeFrom}-${sequenceContext?.cumulatedFrom}-${sequenceContext?.durationInFrames}-muted:${\n\t\t\t\tprops.muted\n\t\t\t}-loop:${props.loop}`,\n\t\t[\n\t\t\tsrc,\n\t\t\tsequenceContext?.relativeFrom,\n\t\t\tsequenceContext?.cumulatedFrom,\n\t\t\tsequenceContext?.durationInFrames,\n\t\t\tprops.muted,\n\t\t\tprops.loop,\n\t\t],\n\t);\n\n\tconst context = useContext(SharedAudioContext);\n\tif (!context) {\n\t\tthrow new Error('SharedAudioContext not found');\n\t}\n\n\tconst {el: audioRef, mediaElementSourceNode} = useSharedAudio({\n\t\taud: propsToPass,\n\t\taudioId: id,\n\t\tpremounting: Boolean(sequenceContext?.premounting),\n\t});\n\n\tuseMediaInTimeline({\n\t\tvolume,\n\t\tmediaVolume,\n\t\tmediaRef: audioRef,\n\t\tsrc,\n\t\tmediaType: 'audio',\n\t\tplaybackRate: playbackRate ?? 1,\n\t\tdisplayName: name ?? null,\n\t\tid: timelineId,\n\t\tstack: _remotionInternalStack,\n\t\tshowInTimeline,\n\t\tpremountDisplay: null,\n\t\tpostmountDisplay: null,\n\t\tonAutoPlayError: null,\n\t\tisPremounting: Boolean(sequenceContext?.premounting),\n\t\tisPostmounting: Boolean(sequenceContext?.postmounting),\n\t});\n\n\t// putting playback before useVolume\n\t// because volume looks at playbackrate\n\tuseMediaPlayback({\n\t\tmediaRef: audioRef,\n\t\tsrc,\n\t\tmediaType: 'audio',\n\t\tplaybackRate: playbackRate ?? 1,\n\t\tonlyWarnForMediaSeekingError: false,\n\t\tacceptableTimeshift: acceptableTimeShiftInSeconds ?? null,\n\t\tisPremounting: Boolean(sequenceContext?.premounting),\n\t\tisPostmounting: Boolean(sequenceContext?.postmounting),\n\t\tpauseWhenBuffering,\n\t\tonAutoPlayError: null,\n\t});\n\n\tuseVolume({\n\t\tlogLevel,\n\t\tmediaRef: audioRef,\n\t\tsource: mediaElementSourceNode,\n\t\tvolume: userPreferredVolume,\n\t\tshouldUseWebAudioApi: useWebAudioApi ?? false,\n\t});\n\n\tuseImperativeHandle(ref, () => {\n\t\treturn audioRef.current as HTMLAudioElement;\n\t}, [audioRef]);\n\n\tconst currentOnDurationCallback =\n\t\tuseRef<AudioForPreviewProps['onDuration']>(onDuration);\n\tcurrentOnDurationCallback.current = onDuration;\n\n\tuseEffect(() => {\n\t\tconst {current} = audioRef;\n\t\tif (!current) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (current.duration) {\n\t\t\tcurrentOnDurationCallback.current?.(current.src, current.duration);\n\t\t\treturn;\n\t\t}\n\n\t\tconst onLoadedMetadata = () => {\n\t\t\tcurrentOnDurationCallback.current?.(current.src, current.duration);\n\t\t};\n\n\t\tcurrent.addEventListener('loadedmetadata', onLoadedMetadata);\n\t\treturn () => {\n\t\t\tcurrent.removeEventListener('loadedmetadata', onLoadedMetadata);\n\t\t};\n\t}, [audioRef, src]);\n\n\tif (initialShouldPreMountAudioElements) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<audio\n\t\t\tref={audioRef}\n\t\t\tpreload=\"metadata\"\n\t\t\tcrossOrigin={crossOriginValue}\n\t\t\t{...propsToPass}\n\t\t/>\n\t);\n};\n\nexport const AudioForPreview = forwardRef(\n\tAudioForDevelopmentForwardRefFunction,\n);\n",
|
|
61
|
-
"export const getCrossOriginValue = ({\n\tcrossOrigin,\n\trequestsVideoFrame,\n}: {\n\tcrossOrigin: '' | 'anonymous' | 'use-credentials' | undefined;\n\trequestsVideoFrame: boolean;\n}) => {\n\t// If user specifies a value explicitly, use that\n\tif (crossOrigin !== undefined && crossOrigin !== null) {\n\t\treturn crossOrigin;\n\t}\n\n\t// We need to set anonymous because otherwise we are not allowed\n\t// to get frames\n\tif (requestsVideoFrame) {\n\t\treturn 'anonymous';\n\t}\n\n\t// If we are in preview mode, we could set\n\t// \"anonymous\" to prevent Web Audio API from\n\t// zeroing out the volume.\n\t// But this requires CORS, so we cannot default to that.\n\n\t// DONT DO THIS:\n\t// if (!useRemotionEnvironment().isRendering) {\n\t// \treturn 'anonymous';\n\t// }\n\n\t// During rendering, we opt out of the crossOrigin value\n\t// because it may lead to flickering\n\n\t// https://discord.com/channels/809501355504959528/1275726814790025271/1278375651153547264\n\treturn undefined;\n};\n",
|
|
62
|
-
"import {createContext} from 'react';\nimport type {LogLevel} from './log';\nimport React = require('react');\n\nexport type LoggingContextValue = {\n\tlogLevel: LogLevel | null;\n\tmountTime: number;\n};\n\nexport const LogLevelContext = createContext<LoggingContextValue>({\n\tlogLevel: 'info',\n\tmountTime: 0,\n});\n\nexport const useLogLevel = (): LogLevel => {\n\tconst {logLevel} = React.useContext(LogLevelContext);\n\tif (logLevel === null) {\n\t\tthrow new Error('useLogLevel must be used within a LogLevelProvider');\n\t}\n\n\treturn logLevel;\n};\n\nexport const useMountTime = (): number => {\n\tconst {mountTime} = React.useContext(LogLevelContext);\n\tif (mountTime === null) {\n\t\tthrow new Error('useMountTime must be used within a LogLevelProvider');\n\t}\n\n\treturn mountTime;\n};\n",
|
|
63
|
-
"function mulberry32(a: number) {\n\tlet t = a + 0x6d2b79f5;\n\tt = Math.imul(t ^ (t >>> 15), t | 1);\n\tt ^= t + Math.imul(t ^ (t >>> 7), t | 61);\n\treturn ((t ^ (t >>> 14)) >>> 0) / 4294967296;\n}\n\nfunction hashCode(str: string) {\n\tlet i = 0;\n\tlet chr = 0;\n\tlet hash = 0;\n\n\tfor (i = 0; i < str.length; i++) {\n\t\tchr = str.charCodeAt(i);\n\t\thash = (hash << 5) - hash + chr;\n\t\thash |= 0; // Convert to 32bit integer\n\t}\n\n\treturn hash;\n}\n\nexport type RandomSeed = number | string | null;\n\n/*\n * @description A deterministic pseudo-random number generator. Pass in the same seed and get the same pseudorandom number.\n * @see [Documentation](https://www.remotion.dev/docs/random)\n */\nexport const random = (seed: RandomSeed, dummy?: unknown) => {\n\tif (dummy !== undefined) {\n\t\tthrow new TypeError('random() takes only one argument');\n\t}\n\n\tif (seed === null) {\n\t\treturn Math.random();\n\t}\n\n\tif (typeof seed === 'string') {\n\t\treturn mulberry32(hashCode(seed));\n\t}\n\n\tif (typeof seed === 'number') {\n\t\treturn mulberry32(seed * 10000000000);\n\t}\n\n\tthrow new Error('random() argument must be a number or a string');\n};\n",
|
|
64
|
-
"import {useContext, useLayoutEffect, useRef, type RefObject} from 'react';\nimport {SharedAudioContext} from './audio/shared-audio-tags';\nimport type {SharedElementSourceNode} from './audio/shared-element-source-node';\nimport {isApproximatelyTheSame} from './is-approximately-the-same';\nimport type {LogLevel} from './log';\nimport {Log} from './log';\nimport {isSafari} from './video/video-fragment';\n\ntype AudioItems = {\n\tgainNode: GainNode;\n};\n\nlet warned = false;\n\nconst warnSafariOnce = (logLevel: LogLevel) => {\n\tif (warned) {\n\t\treturn;\n\t}\n\n\twarned = true;\n\tLog.warn(\n\t\tlogLevel,\n\t\t'In Safari, setting a volume and a playback rate at the same time is buggy.',\n\t);\n\tLog.warn(logLevel, 'In Desktop Safari, only volumes <= 1 will be applied.');\n\tLog.warn(\n\t\tlogLevel,\n\t\t'In Mobile Safari, the volume will be ignored and set to 1 if a playbackRate is set.',\n\t);\n};\n\n/**\n * [1] Bug case: In Safari, you cannot combine playbackRate and volume !== 1.\n * If that is the case, volume will not be applied.\n */\n\nexport const useVolume = ({\n\tmediaRef,\n\tvolume,\n\tlogLevel,\n\tsource,\n\tshouldUseWebAudioApi,\n}: {\n\tmediaRef: RefObject<HTMLAudioElement | HTMLVideoElement | null>;\n\tsource: SharedElementSourceNode | null;\n\tvolume: number;\n\tlogLevel: LogLevel;\n\tshouldUseWebAudioApi: boolean;\n}) => {\n\tconst audioStuffRef = useRef<AudioItems | null>(null);\n\tconst currentVolumeRef = useRef(volume);\n\tcurrentVolumeRef.current = volume;\n\n\tconst sharedAudioContext = useContext(SharedAudioContext);\n\tif (!sharedAudioContext) {\n\t\tthrow new Error(\n\t\t\t'useAmplification must be used within a SharedAudioContext',\n\t\t);\n\t}\n\n\tconst {audioContext} = sharedAudioContext;\n\n\tif (typeof window !== 'undefined') {\n\t\t// eslint-disable-next-line react-hooks/rules-of-hooks\n\t\tuseLayoutEffect(() => {\n\t\t\tif (!audioContext) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!mediaRef.current) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!shouldUseWebAudioApi) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// [1]\n\t\t\tif (mediaRef.current.playbackRate !== 1 && isSafari()) {\n\t\t\t\twarnSafariOnce(logLevel);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!source) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst gainNode = new GainNode(audioContext, {\n\t\t\t\tgain: currentVolumeRef.current,\n\t\t\t});\n\n\t\t\tsource.attemptToConnect();\n\t\t\tsource.get().connect(gainNode);\n\t\t\tgainNode.connect(audioContext.destination);\n\t\t\taudioStuffRef.current = {\n\t\t\t\tgainNode,\n\t\t\t};\n\n\t\t\tLog.trace(\n\t\t\t\tlogLevel,\n\t\t\t\t`Starting to amplify ${mediaRef.current?.src}. Gain = ${currentVolumeRef.current}, playbackRate = ${mediaRef.current?.playbackRate}`,\n\t\t\t);\n\n\t\t\treturn () => {\n\t\t\t\taudioStuffRef.current = null;\n\t\t\t\tgainNode.disconnect();\n\t\t\t\tsource.get().disconnect();\n\t\t\t};\n\t\t}, [logLevel, mediaRef, audioContext, source, shouldUseWebAudioApi]);\n\t}\n\n\tif (audioStuffRef.current) {\n\t\tconst valueToSet = volume;\n\t\tif (\n\t\t\t!isApproximatelyTheSame(\n\t\t\t\taudioStuffRef.current.gainNode.gain.value,\n\t\t\t\tvalueToSet,\n\t\t\t)\n\t\t) {\n\t\t\taudioStuffRef.current.gainNode.gain.value = valueToSet;\n\t\t\tLog.trace(\n\t\t\t\tlogLevel,\n\t\t\t\t`Setting gain to ${valueToSet} for ${mediaRef.current?.src}`,\n\t\t\t);\n\t\t}\n\t}\n\n\tconst safariCase =\n\t\tisSafari() && mediaRef.current && mediaRef.current?.playbackRate !== 1;\n\n\tconst shouldUseTraditionalVolume = safariCase || !shouldUseWebAudioApi;\n\n\t// [1]\n\tif (\n\t\tshouldUseTraditionalVolume &&\n\t\tmediaRef.current &&\n\t\t!isApproximatelyTheSame(volume, mediaRef.current?.volume)\n\t) {\n\t\tmediaRef.current.volume = Math.min(volume, 1);\n\t}\n\n\treturn audioStuffRef;\n};\n",
|
|
65
|
-
"import type {\n\tAudioHTMLAttributes,\n\tComponentType,\n\tLazyExoticComponent,\n} from 'react';\nimport React, {\n\tcreateContext,\n\tcreateRef,\n\tuseCallback,\n\tuseContext,\n\tuseEffect,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n} from 'react';\nimport {useLogLevel, useMountTime} from '../log-level-context.js';\nimport {playAndHandleNotAllowedError} from '../play-and-handle-not-allowed-error.js';\nimport {useRemotionEnvironment} from '../use-remotion-environment.js';\nimport type {SharedElementSourceNode} from './shared-element-source-node.js';\nimport {makeSharedElementSourceNode} from './shared-element-source-node.js';\nimport {useSingletonAudioContext} from './use-audio-context.js';\n\n/**\n * This functionality of Remotion will keep a certain amount\n * of <audio> tags pre-mounted and by default filled with an empty audio track.\n * If the user interacts, the empty audio will be played.\n * 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.\n *\n * This helps with autoplay issues on iOS Safari and soon other browsers,\n * which only allow audio playback upon user interaction.\n *\n * The behavior can be disabled by passing `0` as the number of shared audio tracks.\n */\n\ntype AudioElem = {\n\tid: number;\n\tprops: AudioHTMLAttributes<HTMLAudioElement>;\n\tel: React.RefObject<HTMLAudioElement | null>;\n\taudioId: string;\n\tmediaElementSourceNode: SharedElementSourceNode | null;\n\tpremounting: boolean;\n};\n\nconst EMPTY_AUDIO =\n\t'data:audio/mp3;base64,/+MYxAAJcAV8AAgAABn//////+/gQ5BAMA+D4Pg+BAQBAEAwD4Pg+D4EBAEAQDAPg++hYBH///hUFQVBUFREDQNHmf///////+MYxBUGkAGIMAAAAP/29Xt6lUxBTUUzLjEwMFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV/+MYxDUAAANIAAAAAFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV';\n\ntype SharedContext = {\n\tregisterAudio: (options: {\n\t\taud: AudioHTMLAttributes<HTMLAudioElement>;\n\t\taudioId: string;\n\t\tpremounting: boolean;\n\t}) => AudioElem;\n\tunregisterAudio: (id: number) => void;\n\tupdateAudio: (options: {\n\t\tid: number;\n\t\taud: AudioHTMLAttributes<HTMLAudioElement>;\n\t\taudioId: string;\n\t\tpremounting: boolean;\n\t}) => void;\n\tplayAllAudios: () => void;\n\tnumberOfAudioTags: number;\n\taudioContext: AudioContext | null;\n};\n\nconst compareProps = (\n\tobj1: Record<string, unknown>,\n\tobj2: Record<string, unknown>,\n) => {\n\tconst keysA = Object.keys(obj1).sort();\n\tconst keysB = Object.keys(obj2).sort();\n\tif (keysA.length !== keysB.length) {\n\t\treturn false;\n\t}\n\n\tfor (let i = 0; i < keysA.length; i++) {\n\t\t// Not the same keys\n\t\tif (keysA[i] !== keysB[i]) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Not the same values\n\t\tif (obj1[keysA[i]] !== obj2[keysB[i]]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n};\n\nconst didPropChange = (key: string, newProp: unknown, prevProp: unknown) => {\n\t// /music.mp3 and http://localhost:3000/music.mp3 are the same\n\tif (\n\t\tkey === 'src' &&\n\t\t!(prevProp as string).startsWith('data:') &&\n\t\t!(newProp as string).startsWith('data:')\n\t) {\n\t\treturn (\n\t\t\tnew URL(prevProp as string, window.origin).toString() !==\n\t\t\tnew URL(newProp as string, window.origin).toString()\n\t\t);\n\t}\n\n\tif (prevProp === newProp) {\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n\ntype Ref = {\n\tid: number;\n\tref: React.RefObject<HTMLAudioElement | null>;\n\tmediaElementSourceNode: SharedElementSourceNode | null;\n};\n\nexport const SharedAudioContext = createContext<SharedContext | null>(null);\n\nexport const SharedAudioContextProvider: React.FC<{\n\treadonly numberOfAudioTags: number;\n\treadonly children: React.ReactNode;\n\treadonly component: LazyExoticComponent<\n\t\tComponentType<Record<string, unknown>>\n\t> | null;\n\treadonly audioLatencyHint: AudioContextLatencyCategory;\n}> = ({children, numberOfAudioTags, component, audioLatencyHint}) => {\n\tconst audios = useRef<AudioElem[]>([]);\n\tconst [initialNumberOfAudioTags] = useState(numberOfAudioTags);\n\n\tif (numberOfAudioTags !== initialNumberOfAudioTags) {\n\t\tthrow new Error(\n\t\t\t'The number of shared audio tags has changed dynamically. Once you have set this property, you cannot change it afterwards.',\n\t\t);\n\t}\n\n\tconst logLevel = useLogLevel();\n\tconst audioContext = useSingletonAudioContext(logLevel, audioLatencyHint);\n\tconst refs = useMemo(() => {\n\t\treturn new Array(numberOfAudioTags).fill(true).map((): Ref => {\n\t\t\tconst ref = createRef<HTMLAudioElement>();\n\t\t\treturn {\n\t\t\t\tid: Math.random(),\n\t\t\t\tref,\n\t\t\t\tmediaElementSourceNode: audioContext\n\t\t\t\t\t? makeSharedElementSourceNode({\n\t\t\t\t\t\t\taudioContext,\n\t\t\t\t\t\t\tref,\n\t\t\t\t\t\t})\n\t\t\t\t\t: null,\n\t\t\t};\n\t\t});\n\t}, [audioContext, numberOfAudioTags]);\n\n\tconst takenAudios = useRef<(false | number)[]>(\n\t\tnew Array(numberOfAudioTags).fill(false),\n\t);\n\n\tconst rerenderAudios = useCallback(() => {\n\t\trefs.forEach(({ref, id}) => {\n\t\t\tconst data = audios.current?.find((a) => a.id === id);\n\t\t\tconst {current} = ref;\n\t\t\tif (!current) {\n\t\t\t\t// Whole player has been unmounted, the refs don't exist anymore.\n\t\t\t\t// It is not an error anymore though\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (data === undefined) {\n\t\t\t\tcurrent.src = EMPTY_AUDIO;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!data) {\n\t\t\t\tthrow new TypeError('Expected audio data to be there');\n\t\t\t}\n\n\t\t\tObject.keys(data.props).forEach((key) => {\n\t\t\t\t// @ts-expect-error\n\t\t\t\tif (didPropChange(key, data.props[key], current[key])) {\n\t\t\t\t\t// @ts-expect-error\n\t\t\t\t\tcurrent[key] = data.props[key];\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}, [refs]);\n\n\tconst registerAudio = useCallback(\n\t\t(options: {\n\t\t\taud: AudioHTMLAttributes<HTMLAudioElement>;\n\t\t\taudioId: string;\n\t\t\tpremounting: boolean;\n\t\t}) => {\n\t\t\tconst {aud, audioId, premounting} = options;\n\t\t\tconst found = audios.current?.find((a) => a.audioId === audioId);\n\t\t\tif (found) {\n\t\t\t\treturn found;\n\t\t\t}\n\n\t\t\tconst firstFreeAudio = takenAudios.current.findIndex((a) => a === false);\n\t\t\tif (firstFreeAudio === -1) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Tried to simultaneously mount ${\n\t\t\t\t\t\tnumberOfAudioTags + 1\n\t\t\t\t\t} <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#using-the-numberofsharedaudiotags-prop for more information on how to increase this limit.`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst {id, ref, mediaElementSourceNode} = refs[firstFreeAudio];\n\t\t\tconst cloned = [...takenAudios.current];\n\t\t\tcloned[firstFreeAudio] = id;\n\t\t\ttakenAudios.current = cloned;\n\n\t\t\tconst newElem: AudioElem = {\n\t\t\t\tprops: aud,\n\t\t\t\tid,\n\t\t\t\tel: ref,\n\t\t\t\taudioId,\n\t\t\t\tmediaElementSourceNode,\n\t\t\t\tpremounting,\n\t\t\t};\n\t\t\taudios.current?.push(newElem);\n\t\t\trerenderAudios();\n\t\t\treturn newElem;\n\t\t},\n\t\t[numberOfAudioTags, refs, rerenderAudios],\n\t);\n\n\tconst unregisterAudio = useCallback(\n\t\t(id: number) => {\n\t\t\tconst cloned = [...takenAudios.current];\n\t\t\tconst index = refs.findIndex((r) => r.id === id);\n\t\t\tif (index === -1) {\n\t\t\t\tthrow new TypeError('Error occured in ');\n\t\t\t}\n\n\t\t\tcloned[index] = false;\n\n\t\t\ttakenAudios.current = cloned;\n\t\t\taudios.current = audios.current?.filter((a) => a.id !== id);\n\n\t\t\trerenderAudios();\n\t\t},\n\t\t[refs, rerenderAudios],\n\t);\n\n\tconst updateAudio = useCallback(\n\t\t({\n\t\t\taud,\n\t\t\taudioId,\n\t\t\tid,\n\t\t\tpremounting,\n\t\t}: {\n\t\t\tid: number;\n\t\t\taud: AudioHTMLAttributes<HTMLAudioElement>;\n\t\t\taudioId: string;\n\t\t\tpremounting: boolean;\n\t\t}) => {\n\t\t\tlet changed = false;\n\n\t\t\taudios.current = audios.current?.map((prevA): AudioElem => {\n\t\t\t\tif (prevA.id === id) {\n\t\t\t\t\tconst isTheSame =\n\t\t\t\t\t\tcompareProps(\n\t\t\t\t\t\t\taud as Record<string, unknown>,\n\t\t\t\t\t\t\tprevA.props as Record<string, unknown>,\n\t\t\t\t\t\t) && prevA.premounting === premounting;\n\t\t\t\t\tif (isTheSame) {\n\t\t\t\t\t\treturn prevA;\n\t\t\t\t\t}\n\n\t\t\t\t\tchanged = true;\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...prevA,\n\t\t\t\t\t\tprops: aud,\n\t\t\t\t\t\tpremounting,\n\t\t\t\t\t\taudioId,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\treturn prevA;\n\t\t\t});\n\n\t\t\tif (changed) {\n\t\t\t\trerenderAudios();\n\t\t\t}\n\t\t},\n\t\t[rerenderAudios],\n\t);\n\n\tconst mountTime = useMountTime();\n\n\tconst env = useRemotionEnvironment();\n\n\tconst playAllAudios = useCallback(() => {\n\t\trefs.forEach((ref) => {\n\t\t\tconst audio = audios.current.find((a) => a.el === ref.ref);\n\t\t\tif (audio?.premounting) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tplayAndHandleNotAllowedError({\n\t\t\t\tmediaRef: ref.ref,\n\t\t\t\tmediaType: 'audio',\n\t\t\t\tonAutoPlayError: null,\n\t\t\t\tlogLevel,\n\t\t\t\tmountTime,\n\t\t\t\treason: 'playing all audios',\n\t\t\t\tisPlayer: env.isPlayer,\n\t\t\t});\n\t\t});\n\t\taudioContext?.resume();\n\t}, [audioContext, logLevel, mountTime, refs, env.isPlayer]);\n\n\tconst value: SharedContext = useMemo(() => {\n\t\treturn {\n\t\t\tregisterAudio,\n\t\t\tunregisterAudio,\n\t\t\tupdateAudio,\n\t\t\tplayAllAudios,\n\t\t\tnumberOfAudioTags,\n\t\t\taudioContext,\n\t\t};\n\t}, [\n\t\tnumberOfAudioTags,\n\t\tplayAllAudios,\n\t\tregisterAudio,\n\t\tunregisterAudio,\n\t\tupdateAudio,\n\t\taudioContext,\n\t]);\n\n\t// Fixing a bug: In React, if a component is unmounted using useInsertionEffect, then\n\t// the cleanup function does sometimes not work properly. That is why when we\n\t// are changing the composition, we reset the audio state.\n\n\t// TODO: Possibly this does not save the problem completely, since the\n\t// if an audio tag that is inside a sequence will also not be removed\n\t// from the shared audios.\n\n\tconst resetAudio = useCallback(() => {\n\t\ttakenAudios.current = new Array(numberOfAudioTags).fill(false);\n\t\taudios.current = [];\n\t\trerenderAudios();\n\t}, [numberOfAudioTags, rerenderAudios]);\n\n\tuseEffect(() => {\n\t\treturn () => {\n\t\t\tresetAudio();\n\t\t};\n\t}, [component, resetAudio]);\n\n\treturn (\n\t\t<SharedAudioContext.Provider value={value}>\n\t\t\t{refs.map(({id, ref}) => {\n\t\t\t\treturn (\n\t\t\t\t\t// Without preload=\"metadata\", iOS will seek the time internally\n\t\t\t\t\t// but not actually with sound. Adding `preload=\"metadata\"` helps here.\n\t\t\t\t\t// https://discord.com/channels/809501355504959528/817306414069710848/1130519583367888906\n\t\t\t\t\t<audio key={id} ref={ref} preload=\"metadata\" src={EMPTY_AUDIO} />\n\t\t\t\t);\n\t\t\t})}\n\t\t\t{children}\n\t\t</SharedAudioContext.Provider>\n\t);\n};\n\nexport const useSharedAudio = ({\n\taud,\n\taudioId,\n\tpremounting,\n}: {\n\taud: AudioHTMLAttributes<HTMLAudioElement>;\n\taudioId: string;\n\tpremounting: boolean;\n}) => {\n\tconst ctx = useContext(SharedAudioContext);\n\n\t/**\n\t * We work around this in React 18 so an audio tag will only register itself once\n\t */\n\tconst [elem] = useState((): AudioElem => {\n\t\tif (ctx && ctx.numberOfAudioTags > 0) {\n\t\t\treturn ctx.registerAudio({aud, audioId, premounting});\n\t\t}\n\n\t\tconst el = React.createRef<HTMLAudioElement>();\n\t\tconst mediaElementSourceNode = ctx?.audioContext\n\t\t\t? makeSharedElementSourceNode({\n\t\t\t\t\taudioContext: ctx.audioContext,\n\t\t\t\t\tref: el,\n\t\t\t\t})\n\t\t\t: null;\n\n\t\treturn {\n\t\t\tel,\n\t\t\tid: Math.random(),\n\t\t\tprops: aud,\n\t\t\taudioId,\n\t\t\tmediaElementSourceNode,\n\t\t\tpremounting,\n\t\t};\n\t});\n\n\t/**\n\t * Effects in React 18 fire twice, and we are looking for a way to only fire it once.\n\t * - useInsertionEffect only fires once. If it's available we are in React 18.\n\t * - useLayoutEffect only fires once in React 17.\n\t *\n\t * Need to import it from React to fix React 17 ESM support.\n\t */\n\tconst effectToUse = React.useInsertionEffect ?? React.useLayoutEffect;\n\n\tif (typeof document !== 'undefined') {\n\t\teffectToUse(() => {\n\t\t\tif (ctx && ctx.numberOfAudioTags > 0) {\n\t\t\t\tctx.updateAudio({id: elem.id, aud, audioId, premounting});\n\t\t\t}\n\t\t}, [aud, ctx, elem.id, audioId, premounting]);\n\n\t\teffectToUse(() => {\n\t\t\treturn () => {\n\t\t\t\tif (ctx && ctx.numberOfAudioTags > 0) {\n\t\t\t\t\tctx.unregisterAudio(elem.id);\n\t\t\t\t}\n\t\t\t};\n\t\t}, [ctx, elem.id]);\n\t}\n\n\treturn elem;\n};\n",
|
|
66
|
-
"import type {RefObject} from 'react';\nimport type {LogLevel} from './log';\nimport {playbackLogging} from './playback-logging';\n\nexport const playAndHandleNotAllowedError = ({\n\tmediaRef,\n\tmediaType,\n\tonAutoPlayError,\n\tlogLevel,\n\tmountTime,\n\treason,\n\tisPlayer,\n}: {\n\tmediaRef: RefObject<HTMLVideoElement | HTMLAudioElement | null>;\n\tmediaType: 'audio' | 'video';\n\tonAutoPlayError: null | (() => void);\n\tlogLevel: LogLevel;\n\tmountTime: number;\n\treason: string;\n\tisPlayer: boolean;\n}) => {\n\tconst {current} = mediaRef;\n\tif (!current) {\n\t\treturn;\n\t}\n\n\tplaybackLogging({\n\t\tlogLevel,\n\t\ttag: 'play',\n\t\tmessage: `Attempting to play ${current.src}. Reason: ${reason}`,\n\t\tmountTime,\n\t});\n\tconst prom = current.play();\n\tif (!prom.catch) {\n\t\treturn;\n\t}\n\n\tprom.catch((err: Error) => {\n\t\tif (!current) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Pause was called after play in Chrome\n\t\tif (err.message.includes('request was interrupted by a call to pause')) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Pause was called after play in Safari\n\t\tif (err.message.includes('The operation was aborted.')) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Pause was called after play in Firefox\n\t\tif (\n\t\t\terr.message.includes(\n\t\t\t\t'The fetching process for the media resource was aborted by the user agent',\n\t\t\t)\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Got replaced by a different audio source in Chromium\n\t\tif (err.message.includes('request was interrupted by a new load request')) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Audio tag got unmounted\n\t\tif (\n\t\t\terr.message.includes('because the media was removed from the document')\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Audio tag got unmounted\n\t\tif (\n\t\t\terr.message.includes(\"user didn't interact with the document\") &&\n\t\t\tcurrent.muted\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.log(`Could not play ${mediaType} due to following error: `, err);\n\t\tif (!current.muted) {\n\t\t\tif (onAutoPlayError) {\n\t\t\t\tonAutoPlayError();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.log(`The video will be muted and we'll retry playing it.`);\n\t\t\tif (mediaType === 'video' && isPlayer) {\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.log('Use onAutoPlayError() to handle this error yourself.');\n\t\t\t}\n\n\t\t\tcurrent.muted = true;\n\t\t\tcurrent.play();\n\t\t}\n\t});\n};\n",
|
|
67
|
-
"export const makeSharedElementSourceNode = ({\n\taudioContext,\n\tref,\n}: {\n\taudioContext: AudioContext;\n\tref: React.RefObject<HTMLAudioElement | null>;\n}) => {\n\tlet connected: MediaElementAudioSourceNode | null = null;\n\n\treturn {\n\t\tattemptToConnect: () => {\n\t\t\tif (!connected && ref.current) {\n\t\t\t\tconst mediaElementSourceNode = audioContext.createMediaElementSource(\n\t\t\t\t\tref.current,\n\t\t\t\t);\n\n\t\t\t\tconnected = mediaElementSourceNode;\n\t\t\t}\n\t\t},\n\t\tget: () => {\n\t\t\tif (!connected) {\n\t\t\t\tthrow new Error('Audio element not connected');\n\t\t\t}\n\n\t\t\treturn connected;\n\t\t},\n\t};\n};\n\nexport type SharedElementSourceNode = ReturnType<\n\ttypeof makeSharedElementSourceNode\n>;\n",
|
|
68
|
-
"import {useMemo} from 'react';\nimport type {LogLevel} from '../log';\nimport {Log} from '../log';\n\nlet warned = false;\n\nconst warnOnce = (logLevel: LogLevel) => {\n\tif (warned) {\n\t\treturn;\n\t}\n\n\twarned = true;\n\n\t// Don't pullute logs if in SSR\n\tif (typeof window !== 'undefined') {\n\t\tLog.warn(logLevel, 'AudioContext is not supported in this browser');\n\t}\n};\n\nexport const useSingletonAudioContext = (\n\tlogLevel: LogLevel,\n\tlatencyHint: AudioContextLatencyCategory,\n) => {\n\tconst audioContext = useMemo(() => {\n\t\tif (typeof AudioContext === 'undefined') {\n\t\t\twarnOnce(logLevel);\n\t\t\treturn null;\n\t\t}\n\n\t\treturn new AudioContext({\n\t\t\tlatencyHint,\n\t\t});\n\t}, [logLevel, latencyHint]);\n\n\treturn audioContext;\n};\n",
|
|
69
|
-
"const FLOATING_POINT_ERROR_THRESHOLD = 0.00001;\n\nexport const isApproximatelyTheSame = (num1: number, num2: number) => {\n\treturn Math.abs(num1 - num2) < FLOATING_POINT_ERROR_THRESHOLD;\n};\n",
|
|
70
|
-
"import {useRef} from 'react';\n\nconst toSeconds = (time: number, fps: number) => {\n\treturn Math.round((time / fps) * 100) / 100;\n};\n\nexport const isSafari = () => {\n\tif (typeof window === 'undefined') {\n\t\treturn false;\n\t}\n\n\tconst isAppleWebKit = /AppleWebKit/.test(window.navigator.userAgent);\n\n\tif (!isAppleWebKit) {\n\t\treturn false;\n\t}\n\n\tconst isNotChrome = !window.navigator.userAgent.includes('Chrome/');\n\n\treturn isNotChrome;\n};\n\nexport const isIosSafari = () => {\n\tif (typeof window === 'undefined') {\n\t\treturn false;\n\t}\n\n\tconst isIpadIPodIPhone = /iP(ad|od|hone)/i.test(window.navigator.userAgent);\n\n\treturn isIpadIPodIPhone && isSafari();\n};\n\n// https://github.com/remotion-dev/remotion/issues/1655\nconst isIOSSafariAndBlob = (actualSrc: string) => {\n\treturn isIosSafari() && actualSrc.startsWith('blob:');\n};\n\nconst getVideoFragmentStart = ({\n\tactualFrom,\n\tfps,\n}: {\n\tactualFrom: number;\n\tfps: number;\n}) => {\n\treturn toSeconds(Math.max(0, -actualFrom), fps);\n};\n\nconst getVideoFragmentEnd = ({\n\tduration,\n\tfps,\n}: {\n\tduration: number;\n\tfps: number;\n}) => {\n\treturn toSeconds(duration, fps);\n};\n\nexport const appendVideoFragment = ({\n\tactualSrc,\n\tactualFrom,\n\tduration,\n\tfps,\n}: {\n\tactualSrc: string;\n\tactualFrom: number;\n\tduration: number;\n\tfps: number;\n}): string => {\n\tif (isIOSSafariAndBlob(actualSrc)) {\n\t\treturn actualSrc;\n\t}\n\n\tif (actualSrc.startsWith('data:')) {\n\t\treturn actualSrc;\n\t}\n\n\tconst existingHash = Boolean(\n\t\tnew URL(\n\t\t\tactualSrc,\n\t\t\t(typeof window === 'undefined' ? null : window.location.href) ??\n\t\t\t\t'http://localhost:3000',\n\t\t).hash,\n\t);\n\n\tif (existingHash) {\n\t\treturn actualSrc;\n\t}\n\n\tif (!Number.isFinite(actualFrom)) {\n\t\treturn actualSrc;\n\t}\n\n\tconst withStartHash = `${actualSrc}#t=${getVideoFragmentStart({actualFrom, fps})}`;\n\n\tif (!Number.isFinite(duration)) {\n\t\treturn withStartHash;\n\t}\n\n\treturn `${withStartHash},${getVideoFragmentEnd({duration, fps})}`;\n};\n\nconst isSubsetOfDuration = ({\n\tprevStartFrom,\n\tnewStartFrom,\n\tprevDuration,\n\tnewDuration,\n\tfps,\n}: {\n\tprevStartFrom: number;\n\tnewStartFrom: number;\n\tprevDuration: number;\n\tnewDuration: number;\n\tfps: number;\n}) => {\n\tconst previousFrom = getVideoFragmentStart({actualFrom: prevStartFrom, fps});\n\tconst newFrom = getVideoFragmentStart({actualFrom: newStartFrom, fps});\n\tconst previousEnd = getVideoFragmentEnd({duration: prevDuration, fps});\n\tconst newEnd = getVideoFragmentEnd({duration: newDuration, fps});\n\n\tif (newFrom < previousFrom) {\n\t\treturn false;\n\t}\n\n\tif (newEnd > previousEnd) {\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n\nexport const useAppendVideoFragment = ({\n\tactualSrc: initialActualSrc,\n\tactualFrom: initialActualFrom,\n\tduration: initialDuration,\n\tfps,\n}: {\n\tactualSrc: string;\n\tactualFrom: number;\n\tduration: number;\n\tfps: number;\n}) => {\n\tconst actualFromRef = useRef(initialActualFrom);\n\tconst actualDuration = useRef(initialDuration);\n\tconst actualSrc = useRef(initialActualSrc);\n\n\tif (\n\t\t!isSubsetOfDuration({\n\t\t\tprevStartFrom: actualFromRef.current,\n\t\t\tnewStartFrom: initialActualFrom,\n\t\t\tprevDuration: actualDuration.current,\n\t\t\tnewDuration: initialDuration,\n\t\t\tfps,\n\t\t}) ||\n\t\tinitialActualSrc !== actualSrc.current\n\t) {\n\t\tactualFromRef.current = initialActualFrom;\n\t\tactualDuration.current = initialDuration;\n\t\tactualSrc.current = initialActualSrc;\n\t}\n\n\tconst appended = appendVideoFragment({\n\t\tactualSrc: actualSrc.current,\n\t\tactualFrom: actualFromRef.current,\n\t\tduration: actualDuration.current,\n\t\tfps,\n\t});\n\n\treturn appended;\n};\n",
|
|
71
|
-
"import type {RefObject} from 'react';\nimport {useContext, useEffect, useMemo, useState} from 'react';\nimport {SequenceContext} from './SequenceContext.js';\nimport {SequenceManager} from './SequenceManager.js';\nimport {useMediaStartsAt} from './audio/use-audio-frame.js';\nimport {getAssetDisplayName} from './get-asset-file-name.js';\nimport {useLogLevel, useMountTime} from './log-level-context.js';\nimport {useNonce} from './nonce.js';\nimport {playAndHandleNotAllowedError} from './play-and-handle-not-allowed-error.js';\nimport type {PlayableMediaTag} from './timeline-position-state.js';\nimport {TimelineContext} from './timeline-position-state.js';\nimport {useRemotionEnvironment} from './use-remotion-environment.js';\nimport {useVideoConfig} from './use-video-config.js';\nimport type {VolumeProp} from './volume-prop.js';\nimport {evaluateVolume} from './volume-prop.js';\n\nconst didWarn: {[key: string]: boolean} = {};\nconst warnOnce = (message: string) => {\n\tif (didWarn[message]) {\n\t\treturn;\n\t}\n\n\t// eslint-disable-next-line no-console\n\tconsole.warn(message);\n\tdidWarn[message] = true;\n};\n\nexport const useMediaInTimeline = ({\n\tvolume,\n\tmediaVolume,\n\tmediaRef,\n\tsrc,\n\tmediaType,\n\tplaybackRate,\n\tdisplayName,\n\tid,\n\tstack,\n\tshowInTimeline,\n\tpremountDisplay,\n\tpostmountDisplay,\n\tonAutoPlayError,\n\tisPremounting,\n\tisPostmounting,\n}: {\n\tvolume: VolumeProp | undefined;\n\tmediaVolume: number;\n\tmediaRef: RefObject<HTMLAudioElement | HTMLVideoElement | null>;\n\tsrc: string | undefined;\n\tmediaType: 'audio' | 'video';\n\tplaybackRate: number;\n\tdisplayName: string | null;\n\tid: string;\n\tstack: string | null;\n\tshowInTimeline: boolean;\n\tpremountDisplay: number | null;\n\tpostmountDisplay: number | null;\n\tonAutoPlayError: null | (() => void);\n\tisPremounting: boolean;\n\tisPostmounting: boolean;\n}) => {\n\tconst videoConfig = useVideoConfig();\n\tconst {rootId, audioAndVideoTags} = useContext(TimelineContext);\n\tconst parentSequence = useContext(SequenceContext);\n\tconst actualFrom = parentSequence\n\t\t? parentSequence.relativeFrom + parentSequence.cumulatedFrom\n\t\t: 0;\n\tconst {imperativePlaying} = useContext(TimelineContext);\n\tconst startsAt = useMediaStartsAt();\n\tconst {registerSequence, unregisterSequence} = useContext(SequenceManager);\n\tconst [initialVolume] = useState<VolumeProp | undefined>(() => volume);\n\tconst logLevel = useLogLevel();\n\tconst mountTime = useMountTime();\n\n\tconst nonce = useNonce();\n\n\tconst duration = parentSequence\n\t\t? Math.min(parentSequence.durationInFrames, videoConfig.durationInFrames)\n\t\t: videoConfig.durationInFrames;\n\tconst doesVolumeChange = typeof volume === 'function';\n\n\tconst volumes: string | number = useMemo(() => {\n\t\tif (typeof volume === 'number') {\n\t\t\treturn volume;\n\t\t}\n\n\t\treturn new Array(Math.floor(Math.max(0, duration + startsAt)))\n\t\t\t.fill(true)\n\t\t\t.map((_, i) => {\n\t\t\t\treturn evaluateVolume({\n\t\t\t\t\tframe: i + startsAt,\n\t\t\t\t\tvolume,\n\t\t\t\t\tmediaVolume,\n\t\t\t\t});\n\t\t\t})\n\t\t\t.join(',');\n\t}, [duration, startsAt, volume, mediaVolume]);\n\n\tuseEffect(() => {\n\t\tif (typeof volume === 'number' && volume !== initialVolume) {\n\t\t\twarnOnce(\n\t\t\t\t`Remotion: The ${mediaType} with src ${src} has changed it's volume. Prefer the callback syntax for setting volume to get better timeline display: https://www.remotion.dev/docs/audio/volume`,\n\t\t\t);\n\t\t}\n\t}, [initialVolume, mediaType, src, volume]);\n\n\tconst env = useRemotionEnvironment();\n\n\tuseEffect(() => {\n\t\tif (!mediaRef.current) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!src) {\n\t\t\tthrow new Error('No src passed');\n\t\t}\n\n\t\tif (!env.isStudio && window.process?.env?.NODE_ENV !== 'test') {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!showInTimeline) {\n\t\t\treturn;\n\t\t}\n\n\t\tregisterSequence({\n\t\t\ttype: mediaType,\n\t\t\tsrc,\n\t\t\tid,\n\t\t\tduration,\n\t\t\tfrom: 0,\n\t\t\tparent: parentSequence?.id ?? null,\n\t\t\tdisplayName: displayName ?? getAssetDisplayName(src),\n\t\t\trootId,\n\t\t\tvolume: volumes,\n\t\t\tshowInTimeline: true,\n\t\t\tnonce,\n\t\t\tstartMediaFrom: 0 - startsAt,\n\t\t\tdoesVolumeChange,\n\t\t\tloopDisplay: undefined,\n\t\t\tplaybackRate,\n\t\t\tstack,\n\t\t\tpremountDisplay,\n\t\t\tpostmountDisplay,\n\t\t});\n\t\treturn () => {\n\t\t\tunregisterSequence(id);\n\t\t};\n\t}, [\n\t\tactualFrom,\n\t\tduration,\n\t\tid,\n\t\tparentSequence,\n\t\tsrc,\n\t\tregisterSequence,\n\t\trootId,\n\t\tunregisterSequence,\n\t\tvideoConfig,\n\t\tvolumes,\n\t\tdoesVolumeChange,\n\t\tnonce,\n\t\tmediaRef,\n\t\tmediaType,\n\t\tstartsAt,\n\t\tplaybackRate,\n\t\tdisplayName,\n\t\tstack,\n\t\tshowInTimeline,\n\t\tpremountDisplay,\n\t\tpostmountDisplay,\n\t\tenv.isStudio,\n\t]);\n\n\tuseEffect(() => {\n\t\tconst tag: PlayableMediaTag = {\n\t\t\tid,\n\t\t\tplay: (reason) => {\n\t\t\t\tif (!imperativePlaying.current) {\n\t\t\t\t\t// Don't play if for example in a <Freeze> state.\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (isPremounting || isPostmounting) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\treturn playAndHandleNotAllowedError({\n\t\t\t\t\tmediaRef,\n\t\t\t\t\tmediaType,\n\t\t\t\t\tonAutoPlayError,\n\t\t\t\t\tlogLevel,\n\t\t\t\t\tmountTime,\n\t\t\t\t\treason,\n\t\t\t\t\tisPlayer: env.isPlayer,\n\t\t\t\t});\n\t\t\t},\n\t\t};\n\t\taudioAndVideoTags.current.push(tag);\n\n\t\treturn () => {\n\t\t\taudioAndVideoTags.current = audioAndVideoTags.current.filter(\n\t\t\t\t(a) => a.id !== id,\n\t\t\t);\n\t\t};\n\t}, [\n\t\taudioAndVideoTags,\n\t\tid,\n\t\tmediaRef,\n\t\tmediaType,\n\t\tonAutoPlayError,\n\t\timperativePlaying,\n\t\tisPremounting,\n\t\tisPostmounting,\n\t\tlogLevel,\n\t\tmountTime,\n\t\tenv.isPlayer,\n\t]);\n};\n",
|
|
72
|
-
"import {useContext} from 'react';\nimport {SequenceContext} from '../SequenceContext.js';\nimport {Loop} from '../loop/index.js';\nimport {useCurrentFrame} from '../use-current-frame.js';\n\nexport const useMediaStartsAt = () => {\n\tconst parentSequence = useContext(SequenceContext);\n\tconst startsAt = Math.min(0, parentSequence?.relativeFrom ?? 0);\n\treturn startsAt;\n};\n\nexport type LoopVolumeCurveBehavior = 'repeat' | 'extend';\n\n/**\n * When passing a function as the prop for `volume`,\n * we calculate the way more intuitive value for currentFrame\n */\nexport const useFrameForVolumeProp = (behavior: LoopVolumeCurveBehavior) => {\n\tconst loop = Loop.useLoop();\n\tconst frame = useCurrentFrame();\n\tconst startsAt = useMediaStartsAt();\n\tif (behavior === 'repeat' || loop === null) {\n\t\treturn frame + startsAt;\n\t}\n\n\treturn frame + startsAt + loop.durationInFrames * loop.iteration;\n};\n",
|
|
73
|
-
"export const getAssetDisplayName = (filename: string): string => {\n\tif (/data:|blob:/.test(filename.substring(0, 5))) {\n\t\treturn 'Data URL';\n\t}\n\n\tconst splitted = filename\n\t\t.split('/')\n\t\t.map((s) => s.split('\\\\'))\n\t\t.flat(1);\n\treturn splitted[splitted.length - 1];\n};\n",
|
|
74
|
-
"export type VolumeProp = number | ((frame: number) => number);\n\nexport const evaluateVolume = ({\n\tframe,\n\tvolume,\n\tmediaVolume = 1,\n}: {\n\tframe: number;\n\tvolume: VolumeProp | undefined;\n\tmediaVolume: number;\n}): number => {\n\tif (typeof volume === 'number') {\n\t\treturn volume * mediaVolume;\n\t}\n\n\tif (typeof volume === 'undefined') {\n\t\treturn Number(mediaVolume);\n\t}\n\n\tconst evaluated = volume(frame) * mediaVolume;\n\tif (typeof evaluated !== 'number') {\n\t\tthrow new TypeError(\n\t\t\t`You passed in a a function to the volume prop but it did not return a number but a value of type ${typeof evaluated} for frame ${frame}`,\n\t\t);\n\t}\n\n\tif (Number.isNaN(evaluated)) {\n\t\tthrow new TypeError(\n\t\t\t`You passed in a function to the volume prop but it returned NaN for frame ${frame}.`,\n\t\t);\n\t}\n\n\tif (!Number.isFinite(evaluated)) {\n\t\tthrow new TypeError(\n\t\t\t`You passed in a function to the volume prop but it returned a non-finite number for frame ${frame}.`,\n\t\t);\n\t}\n\n\treturn Math.max(0, evaluated);\n};\n",
|
|
75
|
-
"import type {RefObject} from 'react';\nimport {\n\tuseCallback,\n\tuseContext,\n\tuseEffect,\n\tuseLayoutEffect,\n\tuseRef,\n} from 'react';\nimport {useMediaStartsAt} from './audio/use-audio-frame.js';\nimport {useBufferUntilFirstFrame} from './buffer-until-first-frame.js';\nimport {BufferingContextReact, useIsPlayerBuffering} from './buffering.js';\nimport {useLogLevel, useMountTime} from './log-level-context.js';\nimport {Log} from './log.js';\nimport {useCurrentTimeOfMediaTagWithUpdateTimeStamp} from './media-tag-current-time-timestamp.js';\nimport {playAndHandleNotAllowedError} from './play-and-handle-not-allowed-error.js';\nimport {playbackLogging} from './playback-logging.js';\nimport {seek} from './seek.js';\nimport {\n\tTimelineContext,\n\tusePlayingState,\n\tuseTimelinePosition,\n} from './timeline-position-state.js';\nimport {useCurrentFrame} from './use-current-frame.js';\nimport {useMediaBuffering} from './use-media-buffering.js';\nimport {useRemotionEnvironment} from './use-remotion-environment.js';\nimport {useRequestVideoCallbackTime} from './use-request-video-callback-time.js';\nimport {useVideoConfig} from './use-video-config.js';\nimport {getMediaTime} from './video/get-current-time.js';\nimport {warnAboutNonSeekableMedia} from './warn-about-non-seekable-media.js';\n\nexport const useMediaPlayback = ({\n\tmediaRef,\n\tsrc,\n\tmediaType,\n\tplaybackRate: localPlaybackRate,\n\tonlyWarnForMediaSeekingError,\n\tacceptableTimeshift,\n\tpauseWhenBuffering,\n\tisPremounting,\n\tisPostmounting,\n\tonAutoPlayError,\n}: {\n\tmediaRef: RefObject<HTMLVideoElement | HTMLAudioElement | null>;\n\tsrc: string | undefined;\n\tmediaType: 'audio' | 'video';\n\tplaybackRate: number;\n\tonlyWarnForMediaSeekingError: boolean;\n\tacceptableTimeshift: number | null;\n\tpauseWhenBuffering: boolean;\n\tisPremounting: boolean;\n\tisPostmounting: boolean;\n\tonAutoPlayError: null | (() => void);\n}) => {\n\tconst {playbackRate: globalPlaybackRate} = useContext(TimelineContext);\n\tconst frame = useCurrentFrame();\n\tconst absoluteFrame = useTimelinePosition();\n\tconst [playing] = usePlayingState();\n\tconst buffering = useContext(BufferingContextReact);\n\tconst {fps} = useVideoConfig();\n\tconst mediaStartsAt = useMediaStartsAt();\n\tconst lastSeekDueToShift = useRef<number | null>(null);\n\tconst lastSeek = useRef<number | null>(null);\n\tconst logLevel = useLogLevel();\n\tconst mountTime = useMountTime();\n\n\tif (!buffering) {\n\t\tthrow new Error(\n\t\t\t'useMediaPlayback must be used inside a <BufferingContext>',\n\t\t);\n\t}\n\n\tconst isVariableFpsVideoMap = useRef<Record<string, boolean>>({});\n\n\tconst onVariableFpsVideoDetected = useCallback(() => {\n\t\tif (!src) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (isVariableFpsVideoMap.current[src]) {\n\t\t\treturn;\n\t\t}\n\n\t\tLog.verbose(\n\t\t\tlogLevel,\n\t\t\t`Detected ${src} as a variable FPS video. Disabling buffering while seeking.`,\n\t\t);\n\n\t\tisVariableFpsVideoMap.current[src] = true;\n\t}, [logLevel, src]);\n\n\tconst rvcCurrentTime = useRequestVideoCallbackTime({\n\t\tmediaRef,\n\t\tmediaType,\n\t\tlastSeek,\n\t\tonVariableFpsVideoDetected,\n\t});\n\n\tconst mediaTagCurrentTime =\n\t\tuseCurrentTimeOfMediaTagWithUpdateTimeStamp(mediaRef);\n\n\tconst desiredUnclampedTime = getMediaTime({\n\t\tframe,\n\t\tplaybackRate: localPlaybackRate,\n\t\tstartFrom: -mediaStartsAt,\n\t\tfps,\n\t});\n\n\tconst isMediaTagBuffering = useMediaBuffering({\n\t\telement: mediaRef,\n\t\tshouldBuffer: pauseWhenBuffering,\n\t\tisPremounting,\n\t\tisPostmounting,\n\t\tlogLevel,\n\t\tmountTime,\n\t\tsrc: src ?? null,\n\t});\n\n\tconst {bufferUntilFirstFrame, isBuffering} = useBufferUntilFirstFrame({\n\t\tmediaRef,\n\t\tmediaType,\n\t\tonVariableFpsVideoDetected,\n\t\tpauseWhenBuffering,\n\t\tlogLevel,\n\t\tmountTime,\n\t});\n\n\tconst playbackRate = localPlaybackRate * globalPlaybackRate;\n\n\tconst acceptableTimeShiftButLessThanDuration = (() => {\n\t\t// In Safari, it seems to lag behind mostly around ~0.4 seconds\n\t\tconst DEFAULT_ACCEPTABLE_TIMESHIFT_WITH_NORMAL_PLAYBACK = 0.45;\n\n\t\t// If there is amplification, the acceptable timeshift is higher\n\t\tconst DEFAULT_ACCEPTABLE_TIMESHIFT_WITH_AMPLIFICATION =\n\t\t\tDEFAULT_ACCEPTABLE_TIMESHIFT_WITH_NORMAL_PLAYBACK + 0.2;\n\n\t\tconst defaultAcceptableTimeshift =\n\t\t\tDEFAULT_ACCEPTABLE_TIMESHIFT_WITH_AMPLIFICATION;\n\t\t// For short audio, a lower acceptable time shift is used\n\t\tif (mediaRef.current?.duration) {\n\t\t\treturn Math.min(\n\t\t\t\tmediaRef.current.duration,\n\t\t\t\tacceptableTimeshift ?? defaultAcceptableTimeshift,\n\t\t\t);\n\t\t}\n\n\t\treturn acceptableTimeshift ?? defaultAcceptableTimeshift;\n\t})();\n\n\tconst isPlayerBuffering = useIsPlayerBuffering(buffering);\n\n\tuseEffect(() => {\n\t\tif (mediaRef.current?.paused) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!playing) {\n\t\t\tplaybackLogging({\n\t\t\t\tlogLevel,\n\t\t\t\ttag: 'pause',\n\t\t\t\tmessage: `Pausing ${mediaRef.current?.src} because ${isPremounting ? 'media is premounting' : isPostmounting ? 'media is postmounting' : 'Player is not playing'}`,\n\t\t\t\tmountTime,\n\t\t\t});\n\t\t\tmediaRef.current?.pause();\n\t\t\treturn;\n\t\t}\n\n\t\tconst isMediaTagBufferingOrStalled = isMediaTagBuffering || isBuffering();\n\n\t\tconst playerBufferingNotStateButLive = buffering.buffering.current;\n\t\tif (playerBufferingNotStateButLive && !isMediaTagBufferingOrStalled) {\n\t\t\tplaybackLogging({\n\t\t\t\tlogLevel,\n\t\t\t\ttag: 'pause',\n\t\t\t\tmessage: `Pausing ${mediaRef.current?.src} because player is buffering but media tag is not`,\n\t\t\t\tmountTime,\n\t\t\t});\n\t\t\tmediaRef.current?.pause();\n\t\t}\n\t}, [\n\t\tisBuffering,\n\t\tisMediaTagBuffering,\n\t\tbuffering,\n\t\tisPlayerBuffering,\n\t\tisPremounting,\n\t\tlogLevel,\n\t\tmediaRef,\n\t\tmediaType,\n\t\tmountTime,\n\t\tplaying,\n\t\tisPostmounting,\n\t]);\n\n\tconst env = useRemotionEnvironment();\n\n\t// This must be a useLayoutEffect, because afterwards, useVolume() looks at the playbackRate\n\t// and it is also in a useLayoutEffect.\n\tuseLayoutEffect(() => {\n\t\tconst playbackRateToSet = Math.max(0, playbackRate);\n\t\tif (\n\t\t\tmediaRef.current &&\n\t\t\tmediaRef.current.playbackRate !== playbackRateToSet\n\t\t) {\n\t\t\tmediaRef.current.playbackRate = playbackRateToSet;\n\t\t}\n\t}, [mediaRef, playbackRate]);\n\n\tuseEffect(() => {\n\t\tconst tagName = mediaType === 'audio' ? '<Audio>' : '<Video>';\n\t\tif (!mediaRef.current) {\n\t\t\tthrow new Error(`No ${mediaType} ref found`);\n\t\t}\n\n\t\tif (!src) {\n\t\t\tthrow new Error(\n\t\t\t\t`No 'src' attribute was passed to the ${tagName} element.`,\n\t\t\t);\n\t\t}\n\n\t\tconst {duration} = mediaRef.current;\n\t\tconst shouldBeTime =\n\t\t\t!Number.isNaN(duration) && Number.isFinite(duration)\n\t\t\t\t? Math.min(duration, desiredUnclampedTime)\n\t\t\t\t: desiredUnclampedTime;\n\n\t\tconst mediaTagTime = mediaTagCurrentTime.current.time;\n\t\tconst rvcTime = rvcCurrentTime.current?.time ?? null;\n\n\t\tconst isVariableFpsVideo = isVariableFpsVideoMap.current[src];\n\n\t\tconst timeShiftMediaTag = Math.abs(shouldBeTime - mediaTagTime);\n\t\tconst timeShiftRvcTag = rvcTime ? Math.abs(shouldBeTime - rvcTime) : null;\n\n\t\tconst mostRecentTimeshift =\n\t\t\trvcCurrentTime.current?.lastUpdate &&\n\t\t\trvcCurrentTime.current.time > mediaTagCurrentTime.current.lastUpdate\n\t\t\t\t? (timeShiftRvcTag as number)\n\t\t\t\t: timeShiftMediaTag;\n\n\t\tconst timeShift =\n\t\t\ttimeShiftRvcTag && !isVariableFpsVideo\n\t\t\t\t? mostRecentTimeshift\n\t\t\t\t: timeShiftMediaTag;\n\n\t\tif (\n\t\t\ttimeShift > acceptableTimeShiftButLessThanDuration &&\n\t\t\tlastSeekDueToShift.current !== shouldBeTime\n\t\t) {\n\t\t\t// If scrubbing around, adjust timing\n\t\t\t// or if time shift is bigger than 0.45sec\n\n\t\t\tlastSeek.current = seek({\n\t\t\t\tmediaRef: mediaRef.current,\n\t\t\t\ttime: shouldBeTime,\n\t\t\t\tlogLevel,\n\t\t\t\twhy: `because time shift is too big. shouldBeTime = ${shouldBeTime}, isTime = ${mediaTagTime}, requestVideoCallbackTime = ${rvcTime}, timeShift = ${timeShift}${isVariableFpsVideo ? ', isVariableFpsVideo = true' : ''}, isPremounting = ${isPremounting}, isPostmounting = ${isPostmounting}, pauseWhenBuffering = ${pauseWhenBuffering}`,\n\t\t\t\tmountTime,\n\t\t\t});\n\t\t\tlastSeekDueToShift.current = lastSeek.current;\n\t\t\tif (playing) {\n\t\t\t\tif (playbackRate > 0) {\n\t\t\t\t\tbufferUntilFirstFrame(shouldBeTime);\n\t\t\t\t}\n\n\t\t\t\tif (mediaRef.current.paused) {\n\t\t\t\t\tplayAndHandleNotAllowedError({\n\t\t\t\t\t\tmediaRef,\n\t\t\t\t\t\tmediaType,\n\t\t\t\t\t\tonAutoPlayError,\n\t\t\t\t\t\tlogLevel,\n\t\t\t\t\t\tmountTime,\n\t\t\t\t\t\treason:\n\t\t\t\t\t\t\t'player is playing but media tag is paused, and just seeked',\n\t\t\t\t\t\tisPlayer: env.isPlayer,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!onlyWarnForMediaSeekingError) {\n\t\t\t\twarnAboutNonSeekableMedia(\n\t\t\t\t\tmediaRef.current,\n\t\t\t\t\tonlyWarnForMediaSeekingError ? 'console-warning' : 'console-error',\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tconst seekThreshold = playing ? 0.15 : 0.01;\n\n\t\t// Only perform a seek if the time is not already the same.\n\t\t// Chrome rounds to 6 digits, so 0.033333333 -> 0.033333,\n\t\t// therefore a threshold is allowed.\n\t\t// Refer to the https://github.com/remotion-dev/video-buffering-example\n\t\t// which is fixed by only seeking conditionally.\n\t\tconst makesSenseToSeek =\n\t\t\tMath.abs(mediaRef.current.currentTime - shouldBeTime) > seekThreshold;\n\n\t\tconst isMediaTagBufferingOrStalled = isMediaTagBuffering || isBuffering();\n\t\tconst isSomethingElseBuffering =\n\t\t\tbuffering.buffering.current && !isMediaTagBufferingOrStalled;\n\n\t\tif (!playing || isSomethingElseBuffering) {\n\t\t\tif (makesSenseToSeek) {\n\t\t\t\tlastSeek.current = seek({\n\t\t\t\t\tmediaRef: mediaRef.current,\n\t\t\t\t\ttime: shouldBeTime,\n\t\t\t\t\tlogLevel,\n\t\t\t\t\twhy: `not playing or something else is buffering. time offset is over seek threshold (${seekThreshold})`,\n\t\t\t\t\tmountTime,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tif (!playing || buffering.buffering.current) {\n\t\t\treturn;\n\t\t}\n\n\t\t// We now assured we are in playing state and not buffering\n\t\tconst pausedCondition = mediaRef.current.paused && !mediaRef.current.ended;\n\t\tconst firstFrameCondition = absoluteFrame === 0;\n\t\tif (pausedCondition || firstFrameCondition) {\n\t\t\tconst reason = pausedCondition\n\t\t\t\t? 'media tag is paused'\n\t\t\t\t: 'absolute frame is 0';\n\t\t\tif (makesSenseToSeek) {\n\t\t\t\tlastSeek.current = seek({\n\t\t\t\t\tmediaRef: mediaRef.current,\n\t\t\t\t\ttime: shouldBeTime,\n\t\t\t\t\tlogLevel,\n\t\t\t\t\twhy: `is over timeshift threshold (threshold = ${seekThreshold}) and ${reason}`,\n\t\t\t\t\tmountTime,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tplayAndHandleNotAllowedError({\n\t\t\t\tmediaRef,\n\t\t\t\tmediaType,\n\t\t\t\tonAutoPlayError,\n\t\t\t\tlogLevel,\n\t\t\t\tmountTime,\n\t\t\t\treason: `player is playing and ${reason}`,\n\t\t\t\tisPlayer: env.isPlayer,\n\t\t\t});\n\t\t\tif (!isVariableFpsVideo && playbackRate > 0) {\n\t\t\t\tbufferUntilFirstFrame(shouldBeTime);\n\t\t\t}\n\t\t}\n\t}, [\n\t\tabsoluteFrame,\n\t\tacceptableTimeShiftButLessThanDuration,\n\t\tbufferUntilFirstFrame,\n\t\tbuffering.buffering,\n\t\trvcCurrentTime,\n\t\tlogLevel,\n\t\tdesiredUnclampedTime,\n\t\tisBuffering,\n\t\tisMediaTagBuffering,\n\t\tmediaRef,\n\t\tmediaType,\n\t\tonlyWarnForMediaSeekingError,\n\t\tplaybackRate,\n\t\tplaying,\n\t\tsrc,\n\t\tonAutoPlayError,\n\t\tisPremounting,\n\t\tisPostmounting,\n\t\tpauseWhenBuffering,\n\t\tmountTime,\n\t\tmediaTagCurrentTime,\n\t\tenv.isPlayer,\n\t]);\n};\n",
|
|
76
|
-
"import {useCallback, useMemo, useRef} from 'react';\nimport type {LogLevel} from './log';\nimport {playbackLogging} from './playback-logging';\nimport {useBufferState} from './use-buffer-state';\n\nconst isSafariWebkit = () => {\n\tconst isSafari = /^((?!chrome|android).)*safari/i.test(\n\t\twindow.navigator.userAgent,\n\t);\n\treturn isSafari;\n};\n\nexport const useBufferUntilFirstFrame = ({\n\tmediaRef,\n\tmediaType,\n\tonVariableFpsVideoDetected,\n\tpauseWhenBuffering,\n\tlogLevel,\n\tmountTime,\n}: {\n\tmediaRef: React.RefObject<HTMLVideoElement | HTMLAudioElement | null>;\n\tmediaType: 'video' | 'audio';\n\tonVariableFpsVideoDetected: () => void;\n\tpauseWhenBuffering: boolean;\n\tlogLevel: LogLevel;\n\tmountTime: number | null;\n}) => {\n\tconst bufferingRef = useRef<boolean>(false);\n\tconst {delayPlayback} = useBufferState();\n\n\tconst bufferUntilFirstFrame = useCallback(\n\t\t(requestedTime: number) => {\n\t\t\tif (mediaType !== 'video') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!pauseWhenBuffering) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst current = mediaRef.current as HTMLVideoElement | null;\n\n\t\t\tif (!current) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (current.readyState >= current.HAVE_FUTURE_DATA && !isSafariWebkit()) {\n\t\t\t\tplaybackLogging({\n\t\t\t\t\tlogLevel,\n\t\t\t\t\tmessage: `Not using buffer until first frame, because readyState is ${current.readyState} and is not Safari or Desktop Chrome`,\n\t\t\t\t\tmountTime,\n\t\t\t\t\ttag: 'buffer',\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!current.requestVideoFrameCallback) {\n\t\t\t\tplaybackLogging({\n\t\t\t\t\tlogLevel,\n\t\t\t\t\tmessage: `Not using buffer until first frame, because requestVideoFrameCallback is not supported`,\n\t\t\t\t\tmountTime,\n\t\t\t\t\ttag: 'buffer',\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tbufferingRef.current = true;\n\n\t\t\tplaybackLogging({\n\t\t\t\tlogLevel,\n\t\t\t\tmessage: `Buffering ${mediaRef.current?.src} until the first frame is received`,\n\t\t\t\tmountTime,\n\t\t\t\ttag: 'buffer',\n\t\t\t});\n\n\t\t\tconst playback = delayPlayback();\n\n\t\t\tconst unblock = () => {\n\t\t\t\tplayback.unblock();\n\t\t\t\tcurrent.removeEventListener('ended', unblock, {\n\t\t\t\t\t// @ts-expect-error\n\t\t\t\t\tonce: true,\n\t\t\t\t});\n\t\t\t\tcurrent.removeEventListener('pause', unblock, {\n\t\t\t\t\t// @ts-expect-error\n\t\t\t\t\tonce: true,\n\t\t\t\t});\n\t\t\t\tbufferingRef.current = false;\n\t\t\t};\n\n\t\t\tconst onEndedOrPauseOrCanPlay = () => {\n\t\t\t\tunblock();\n\t\t\t};\n\n\t\t\tcurrent.requestVideoFrameCallback((_, info) => {\n\t\t\t\tconst differenceFromRequested = Math.abs(\n\t\t\t\t\tinfo.mediaTime - requestedTime,\n\t\t\t\t);\n\t\t\t\tif (differenceFromRequested > 0.5) {\n\t\t\t\t\tonVariableFpsVideoDetected();\n\t\t\t\t}\n\n\t\t\t\tunblock();\n\t\t\t});\n\n\t\t\tcurrent.addEventListener('ended', onEndedOrPauseOrCanPlay, {once: true});\n\t\t\tcurrent.addEventListener('pause', onEndedOrPauseOrCanPlay, {once: true});\n\t\t\tcurrent.addEventListener('canplay', onEndedOrPauseOrCanPlay, {\n\t\t\t\tonce: true,\n\t\t\t});\n\t\t},\n\t\t[\n\t\t\tdelayPlayback,\n\t\t\tlogLevel,\n\t\t\tmediaRef,\n\t\t\tmediaType,\n\t\t\tmountTime,\n\t\t\tonVariableFpsVideoDetected,\n\t\t\tpauseWhenBuffering,\n\t\t],\n\t);\n\n\treturn useMemo(() => {\n\t\treturn {\n\t\t\tisBuffering: () => bufferingRef.current,\n\t\t\tbufferUntilFirstFrame,\n\t\t};\n\t}, [bufferUntilFirstFrame]);\n};\n",
|
|
77
|
-
"import {useContext, useMemo} from 'react';\nimport {BufferingContextReact} from './buffering';\n\nexport type DelayPlaybackHandle = {\n\tunblock: () => void;\n};\n\ntype UseBufferState = {\n\tdelayPlayback: () => DelayPlaybackHandle;\n};\n\nexport const useBufferState = (): UseBufferState => {\n\tconst buffer = useContext(BufferingContextReact);\n\n\t// Allows <Img> tag to be rendered without a context\n\t// https://github.com/remotion-dev/remotion/issues/4007\n\tconst addBlock = buffer ? buffer.addBlock : null;\n\n\treturn useMemo(\n\t\t() => ({\n\t\t\tdelayPlayback: () => {\n\t\t\t\tif (!addBlock) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t'Tried to enable the buffering state, but a Remotion context was not found. This API can only be called in a component that was passed to the Remotion Player or a <Composition>. Or you might have experienced a version mismatch - run `npx remotion versions` and ensure all packages have the same version. This error is thrown by the buffer state https://remotion.dev/docs/player/buffer-state',\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tconst {unblock} = addBlock({\n\t\t\t\t\tid: String(Math.random()),\n\t\t\t\t});\n\n\t\t\t\treturn {unblock};\n\t\t\t},\n\t\t}),\n\t\t[addBlock],\n\t);\n};\n",
|
|
78
|
-
"import React, {\n\tuseCallback,\n\tuseContext,\n\tuseEffect,\n\tuseLayoutEffect,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n} from 'react';\nimport type {LogLevel} from './log';\nimport {LogLevelContext} from './log-level-context';\nimport {playbackLogging} from './playback-logging';\n\ntype Block = {\n\tid: string;\n};\n\ntype OnBufferingCallback = () => void;\ntype OnResumeCallback = () => void;\n\ntype ListenForBuffering = (callback: OnBufferingCallback) => {\n\tremove: () => void;\n};\n\ntype ListenForResume = (callback: OnResumeCallback) => {\n\tremove: () => void;\n};\n\ntype AddBlock = (block: Block) => {\n\tunblock: () => void;\n};\n\ntype BufferManager = {\n\taddBlock: AddBlock;\n\tlistenForBuffering: ListenForBuffering;\n\tlistenForResume: ListenForResume;\n\tbuffering: React.MutableRefObject<boolean>;\n};\n\nconst useBufferManager = (\n\tlogLevel: LogLevel,\n\tmountTime: number | null,\n): BufferManager => {\n\tconst [blocks, setBlocks] = useState<Block[]>([]);\n\tconst [onBufferingCallbacks, setOnBufferingCallbacks] = useState<\n\t\tOnBufferingCallback[]\n\t>([]);\n\tconst [onResumeCallbacks, setOnResumeCallbacks] = useState<\n\t\tOnBufferingCallback[]\n\t>([]);\n\n\tconst buffering = useRef(false);\n\n\tconst addBlock: AddBlock = useCallback((block: Block) => {\n\t\tsetBlocks((b) => [...b, block]);\n\t\treturn {\n\t\t\tunblock: () => {\n\t\t\t\tsetBlocks((b) => {\n\t\t\t\t\tconst newArr = b.filter((bx) => bx !== block);\n\t\t\t\t\tif (newArr.length === b.length) {\n\t\t\t\t\t\treturn b;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn newArr;\n\t\t\t\t});\n\t\t\t},\n\t\t};\n\t}, []);\n\n\tconst listenForBuffering: ListenForBuffering = useCallback(\n\t\t(callback: OnBufferingCallback) => {\n\t\t\tsetOnBufferingCallbacks((c) => [...c, callback]);\n\n\t\t\treturn {\n\t\t\t\tremove: () => {\n\t\t\t\t\tsetOnBufferingCallbacks((c) => c.filter((cb) => cb !== callback));\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t\t[],\n\t);\n\n\tconst listenForResume: ListenForResume = useCallback(\n\t\t(callback: OnResumeCallback) => {\n\t\t\tsetOnResumeCallbacks((c) => [...c, callback]);\n\n\t\t\treturn {\n\t\t\t\tremove: () => {\n\t\t\t\t\tsetOnResumeCallbacks((c) => c.filter((cb) => cb !== callback));\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t\t[],\n\t);\n\n\tuseEffect(() => {\n\t\tif (blocks.length > 0) {\n\t\t\tonBufferingCallbacks.forEach((c) => c());\n\t\t\tplaybackLogging({\n\t\t\t\tlogLevel,\n\t\t\t\tmessage: 'Player is entering buffer state',\n\t\t\t\tmountTime,\n\t\t\t\ttag: 'player',\n\t\t\t});\n\t\t}\n\n\t\t// Intentionally only firing when blocks change, not the callbacks\n\t\t// otherwise a buffering callback might remove itself after being called\n\t\t// and trigger again\n\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [blocks]);\n\n\tif (typeof window !== 'undefined') {\n\t\t// eslint-disable-next-line react-hooks/rules-of-hooks\n\t\tuseLayoutEffect(() => {\n\t\t\tif (blocks.length === 0) {\n\t\t\t\tonResumeCallbacks.forEach((c) => c());\n\t\t\t\tplaybackLogging({\n\t\t\t\t\tlogLevel,\n\t\t\t\t\tmessage: 'Player is exiting buffer state',\n\t\t\t\t\tmountTime,\n\t\t\t\t\ttag: 'player',\n\t\t\t\t});\n\t\t\t}\n\t\t\t// Intentionally only firing when blocks change, not the callbacks\n\t\t\t// otherwise a resume callback might remove itself after being called\n\t\t\t// and trigger again\n\t\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t\t}, [blocks]);\n\t}\n\n\treturn useMemo(() => {\n\t\treturn {addBlock, listenForBuffering, listenForResume, buffering};\n\t}, [addBlock, buffering, listenForBuffering, listenForResume]);\n};\n\nexport const BufferingContextReact = React.createContext<BufferManager | null>(\n\tnull,\n);\n\nexport const BufferingProvider: React.FC<{\n\treadonly children: React.ReactNode;\n}> = ({children}) => {\n\tconst {logLevel, mountTime} = useContext(LogLevelContext);\n\tconst bufferManager = useBufferManager(logLevel ?? 'info', mountTime);\n\n\treturn (\n\t\t<BufferingContextReact.Provider value={bufferManager}>\n\t\t\t{children}\n\t\t</BufferingContextReact.Provider>\n\t);\n};\n\nexport const useIsPlayerBuffering = (bufferManager: BufferManager) => {\n\tconst [isBuffering, setIsBuffering] = useState(\n\t\tbufferManager.buffering.current,\n\t);\n\n\tuseEffect(() => {\n\t\tconst onBuffer = () => {\n\t\t\tsetIsBuffering(true);\n\t\t};\n\n\t\tconst onResume = () => {\n\t\t\tsetIsBuffering(false);\n\t\t};\n\n\t\tbufferManager.listenForBuffering(onBuffer);\n\t\tbufferManager.listenForResume(onResume);\n\n\t\treturn () => {\n\t\t\tbufferManager.listenForBuffering(() => undefined);\n\t\t\tbufferManager.listenForResume(() => undefined);\n\t\t};\n\t}, [bufferManager]);\n\n\treturn isBuffering;\n};\n",
|
|
79
|
-
"import React from 'react';\n\nexport const useCurrentTimeOfMediaTagWithUpdateTimeStamp = (\n\tmediaRef: React.RefObject<HTMLVideoElement | HTMLAudioElement | null>,\n) => {\n\tconst lastUpdate: React.RefObject<{\n\t\ttime: number;\n\t\tlastUpdate: number;\n\t}> = React.useRef({\n\t\ttime: mediaRef.current?.currentTime ?? 0,\n\t\tlastUpdate: performance.now(),\n\t});\n\n\tconst nowCurrentTime = mediaRef.current?.currentTime ?? null;\n\tif (nowCurrentTime !== null) {\n\t\tif (lastUpdate.current.time !== nowCurrentTime) {\n\t\t\tlastUpdate.current.time = nowCurrentTime;\n\t\t\tlastUpdate.current.lastUpdate = performance.now();\n\t\t}\n\t}\n\n\treturn lastUpdate;\n};\n",
|
|
80
|
-
"import type {LogLevel} from './log';\nimport {playbackLogging} from './playback-logging';\nimport {isIosSafari} from './video/video-fragment';\n\nexport const seek = ({\n\tmediaRef,\n\ttime,\n\tlogLevel,\n\twhy,\n\tmountTime,\n}: {\n\tmediaRef: HTMLVideoElement | HTMLAudioElement;\n\ttime: number;\n\tlogLevel: LogLevel;\n\twhy: string;\n\tmountTime: number;\n}): number => {\n\t// iOS seeking does not support multiple decimals\n\tconst timeToSet = isIosSafari() ? Number(time.toFixed(1)) : time;\n\n\tplaybackLogging({\n\t\tlogLevel,\n\t\ttag: 'seek',\n\t\tmessage: `Seeking from ${mediaRef.currentTime} to ${timeToSet}. src= ${mediaRef.src} Reason: ${why}`,\n\t\tmountTime,\n\t});\n\n\tmediaRef.currentTime = timeToSet;\n\treturn timeToSet;\n};\n",
|
|
81
|
-
"import type React from 'react';\nimport {useEffect, useState} from 'react';\nimport type {LogLevel} from './log';\nimport {playbackLogging} from './playback-logging';\nimport {useBufferState} from './use-buffer-state';\n\nexport const useMediaBuffering = ({\n\telement,\n\tshouldBuffer,\n\tisPremounting,\n\tisPostmounting,\n\tlogLevel,\n\tmountTime,\n\tsrc,\n}: {\n\telement: React.RefObject<HTMLVideoElement | HTMLAudioElement | null>;\n\tshouldBuffer: boolean;\n\tisPremounting: boolean;\n\tisPostmounting: boolean;\n\tlogLevel: LogLevel;\n\tmountTime: number;\n\tsrc: string | null;\n}) => {\n\tconst buffer = useBufferState();\n\tconst [isBuffering, setIsBuffering] = useState(false);\n\n\t// Buffer state based on `waiting` and `canplay`\n\tuseEffect(() => {\n\t\tlet cleanupFns: ((reason: string) => unknown)[] = [];\n\n\t\tconst {current} = element;\n\t\tif (!current) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!shouldBuffer) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (isPremounting || isPostmounting) {\n\t\t\t// Needed by iOS Safari which will not load by default\n\t\t\t// and therefore not fire the canplay event.\n\n\t\t\t// Be cautious about using `current.load()` as it will\n\t\t\t// reset if a video is already playing.\n\t\t\t// Therefore only calling it after checking if the video\n\t\t\t// has no future data.\n\n\t\t\t// Breaks on Firefox though: https://github.com/remotion-dev/remotion/issues/3915\n\t\t\tif (\n\t\t\t\t(isPremounting || isPostmounting) &&\n\t\t\t\tcurrent.readyState < current.HAVE_FUTURE_DATA\n\t\t\t) {\n\t\t\t\tif (!navigator.userAgent.includes('Firefox/')) {\n\t\t\t\t\tplaybackLogging({\n\t\t\t\t\t\tlogLevel,\n\t\t\t\t\t\tmessage: `Calling .load() on ${current.src} because readyState is ${current.readyState} and it is not Firefox. Element is premounted ${current.playbackRate}`,\n\t\t\t\t\t\ttag: 'load',\n\t\t\t\t\t\tmountTime,\n\t\t\t\t\t});\n\t\t\t\t\tconst previousPlaybackRate = current.playbackRate;\n\t\t\t\t\tcurrent.load();\n\t\t\t\t\tcurrent.playbackRate = previousPlaybackRate;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Don't trigger buffering during premount or postmount\n\t\t\treturn;\n\t\t}\n\n\t\tconst cleanup = (reason: string) => {\n\t\t\tlet didDoSomething = false;\n\t\t\tcleanupFns.forEach((fn) => {\n\t\t\t\tfn(reason);\n\t\t\t\tdidDoSomething = true;\n\t\t\t});\n\t\t\tcleanupFns = [];\n\t\t\tsetIsBuffering((previous) => {\n\t\t\t\tif (previous) {\n\t\t\t\t\tdidDoSomething = true;\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t});\n\t\t\tif (didDoSomething) {\n\t\t\t\tplaybackLogging({\n\t\t\t\t\tlogLevel,\n\t\t\t\t\tmessage: `Unmarking as buffering: ${current.src}. Reason: ${reason}`,\n\t\t\t\t\ttag: 'buffer',\n\t\t\t\t\tmountTime,\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\tconst blockMedia = (reason: string) => {\n\t\t\tsetIsBuffering(true);\n\t\t\tplaybackLogging({\n\t\t\t\tlogLevel,\n\t\t\t\tmessage: `Marking as buffering: ${current.src}. Reason: ${reason}`,\n\t\t\t\ttag: 'buffer',\n\t\t\t\tmountTime,\n\t\t\t});\n\t\t\tconst {unblock} = buffer.delayPlayback();\n\t\t\tconst onCanPlay = () => {\n\t\t\t\tcleanup('\"canplay\" was fired');\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-use-before-define\n\t\t\t\tinit();\n\t\t\t};\n\n\t\t\tconst onError = () => {\n\t\t\t\tcleanup('\"error\" event was occurred');\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-use-before-define\n\t\t\t\tinit();\n\t\t\t};\n\n\t\t\tcurrent.addEventListener('canplay', onCanPlay, {\n\t\t\t\tonce: true,\n\t\t\t});\n\t\t\tcleanupFns.push(() => {\n\t\t\t\tcurrent.removeEventListener('canplay', onCanPlay);\n\t\t\t});\n\n\t\t\tcurrent.addEventListener('error', onError, {\n\t\t\t\tonce: true,\n\t\t\t});\n\t\t\tcleanupFns.push(() => {\n\t\t\t\tcurrent.removeEventListener('error', onError);\n\t\t\t});\n\t\t\tcleanupFns.push((cleanupReason) => {\n\t\t\t\tplaybackLogging({\n\t\t\t\t\tlogLevel,\n\t\t\t\t\tmessage: `Unblocking ${current.src} from buffer. Reason: ${cleanupReason}`,\n\t\t\t\t\ttag: 'buffer',\n\t\t\t\t\tmountTime,\n\t\t\t\t});\n\t\t\t\tunblock();\n\t\t\t});\n\t\t};\n\n\t\tconst init = () => {\n\t\t\tif (current.readyState < current.HAVE_FUTURE_DATA) {\n\t\t\t\tblockMedia(\n\t\t\t\t\t`readyState is ${current.readyState}, which is less than HAVE_FUTURE_DATA`,\n\t\t\t\t);\n\n\t\t\t\t// Needed by iOS Safari which will not load by default\n\t\t\t\t// and therefore not fire the canplay event.\n\n\t\t\t\t// Be cautious about using `current.load()` as it will\n\t\t\t\t// reset if a video is already playing.\n\t\t\t\t// Therefore only calling it after checking if the video\n\t\t\t\t// has no future data.\n\n\t\t\t\t// Breaks on Firefox though: https://github.com/remotion-dev/remotion/issues/3915\n\t\t\t\tif (!navigator.userAgent.includes('Firefox/')) {\n\t\t\t\t\tplaybackLogging({\n\t\t\t\t\t\tlogLevel,\n\t\t\t\t\t\tmessage: `Calling .load() on ${src} because readyState is ${current.readyState} and it is not Firefox. ${current.playbackRate}`,\n\t\t\t\t\t\ttag: 'load',\n\t\t\t\t\t\tmountTime,\n\t\t\t\t\t});\n\n\t\t\t\t\tconst previousPlaybackRate = current.playbackRate;\n\t\t\t\t\tcurrent.load();\n\t\t\t\t\tcurrent.playbackRate = previousPlaybackRate;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst onWaiting = () => {\n\t\t\t\t\tblockMedia('\"waiting\" event was fired');\n\t\t\t\t};\n\n\t\t\t\tcurrent.addEventListener('waiting', onWaiting);\n\t\t\t\tcleanupFns.push(() => {\n\t\t\t\t\tcurrent.removeEventListener('waiting', onWaiting);\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\tinit();\n\n\t\treturn () => {\n\t\t\tcleanup('element was unmounted or prop changed');\n\t\t};\n\n\t\t// dependencies array:\n\t\t// `src` should be in it, because if changing the source and pausing at the same time,\n\t\t// it gives the chance to load the new source.\n\n\t\t// https://github.com/remotion-dev/remotion/issues/5218\n\t}, [\n\t\tbuffer,\n\t\tsrc,\n\t\telement,\n\t\tisPremounting,\n\t\tisPostmounting,\n\t\tlogLevel,\n\t\tshouldBuffer,\n\t\tmountTime,\n\t]);\n\n\treturn isBuffering;\n};\n",
|
|
82
|
-
"import type {RefObject} from 'react';\nimport {useEffect, useRef} from 'react';\n\nexport const useRequestVideoCallbackTime = ({\n\tmediaRef,\n\tmediaType,\n\tlastSeek,\n\tonVariableFpsVideoDetected,\n}: {\n\tmediaRef: RefObject<HTMLVideoElement | HTMLAudioElement | null>;\n\tmediaType: 'video' | 'audio';\n\tlastSeek: React.MutableRefObject<number | null>;\n\tonVariableFpsVideoDetected: () => void;\n}) => {\n\tconst currentTime = useRef<{\n\t\ttime: number;\n\t\tlastUpdate: number;\n\t} | null>(null);\n\n\tuseEffect(() => {\n\t\tconst {current} = mediaRef;\n\t\tif (current) {\n\t\t\tcurrentTime.current = {\n\t\t\t\ttime: current.currentTime,\n\t\t\t\tlastUpdate: performance.now(),\n\t\t\t};\n\t\t} else {\n\t\t\tcurrentTime.current = null;\n\t\t\treturn;\n\t\t}\n\n\t\tif (mediaType !== 'video') {\n\t\t\tcurrentTime.current = null;\n\t\t\treturn;\n\t\t}\n\n\t\tconst videoTag = current as HTMLVideoElement;\n\n\t\tif (!videoTag.requestVideoFrameCallback) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet cancel = () => undefined;\n\n\t\tconst request = () => {\n\t\t\tif (!videoTag) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst cb = videoTag.requestVideoFrameCallback((_, info) => {\n\t\t\t\tif (currentTime.current !== null) {\n\t\t\t\t\tconst difference = Math.abs(\n\t\t\t\t\t\tcurrentTime.current.time - info.mediaTime,\n\t\t\t\t\t);\n\t\t\t\t\tconst differenceToLastSeek = Math.abs(\n\t\t\t\t\t\tlastSeek.current === null\n\t\t\t\t\t\t\t? Infinity\n\t\t\t\t\t\t\t: info.mediaTime - lastSeek.current,\n\t\t\t\t\t);\n\t\t\t\t\t// If a video suddenly jumps to a position much further than previously\n\t\t\t\t\t// and there was no relevant seek\n\t\t\t\t\t// Case to be seen with 66a4a49b0862333a56c7d03c.mp4 and autoPlay and pauseWhenBuffering\n\n\t\t\t\t\tif (\n\t\t\t\t\t\tdifference > 0.5 &&\n\t\t\t\t\t\tdifferenceToLastSeek > 0.5 &&\n\t\t\t\t\t\tinfo.mediaTime > currentTime.current.time\n\t\t\t\t\t) {\n\t\t\t\t\t\tonVariableFpsVideoDetected();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcurrentTime.current = {\n\t\t\t\t\ttime: info.mediaTime,\n\t\t\t\t\tlastUpdate: performance.now(),\n\t\t\t\t};\n\t\t\t\trequest();\n\t\t\t});\n\n\t\t\tcancel = () => {\n\t\t\t\tvideoTag.cancelVideoFrameCallback(cb);\n\t\t\t\tcancel = () => undefined;\n\t\t\t};\n\t\t};\n\n\t\trequest();\n\n\t\treturn () => {\n\t\t\tcancel();\n\t\t};\n\t}, [lastSeek, mediaRef, mediaType, onVariableFpsVideoDetected]);\n\n\treturn currentTime;\n};\n",
|
|
83
|
-
"// Taken from https://github.com/facebook/react-native/blob/0b9ea60b4fee8cacc36e7160e31b91fc114dbc0d/Libraries/Animated/src/nodes/AnimatedInterpolation.js\n\nexport type ExtrapolateType = 'extend' | 'identity' | 'clamp' | 'wrap';\n\n/**\n * @description This function allows you to map a range of values to another with a concise syntax\n * @see [Documentation](https://www.remotion.dev/docs/interpolate)\n */\n\nexport type EasingFunction = (input: number) => number;\n\nexport type InterpolateOptions = Partial<{\n\teasing: EasingFunction;\n\textrapolateLeft: ExtrapolateType;\n\textrapolateRight: ExtrapolateType;\n}>;\n\nfunction interpolateFunction(\n\tinput: number,\n\tinputRange: [number, number],\n\toutputRange: [number, number],\n\toptions: Required<InterpolateOptions>,\n): number {\n\tconst {extrapolateLeft, extrapolateRight, easing} = options;\n\n\tlet result = input;\n\tconst [inputMin, inputMax] = inputRange;\n\tconst [outputMin, outputMax] = outputRange;\n\n\tif (result < inputMin) {\n\t\tif (extrapolateLeft === 'identity') {\n\t\t\treturn result;\n\t\t}\n\n\t\tif (extrapolateLeft === 'clamp') {\n\t\t\tresult = inputMin;\n\t\t} else if (extrapolateLeft === 'wrap') {\n\t\t\tconst range = inputMax - inputMin;\n\t\t\tresult = ((((result - inputMin) % range) + range) % range) + inputMin;\n\t\t} else if (extrapolateLeft === 'extend') {\n\t\t\t// Noop\n\t\t}\n\t}\n\n\tif (result > inputMax) {\n\t\tif (extrapolateRight === 'identity') {\n\t\t\treturn result;\n\t\t}\n\n\t\tif (extrapolateRight === 'clamp') {\n\t\t\tresult = inputMax;\n\t\t} else if (extrapolateRight === 'wrap') {\n\t\t\tconst range = inputMax - inputMin;\n\t\t\tresult = ((((result - inputMin) % range) + range) % range) + inputMin;\n\t\t} else if (extrapolateRight === 'extend') {\n\t\t\t// Noop\n\t\t}\n\t}\n\n\tif (outputMin === outputMax) {\n\t\treturn outputMin;\n\t}\n\n\t// Input Range\n\tresult = (result - inputMin) / (inputMax - inputMin);\n\n\t// Easing\n\tresult = easing(result);\n\n\t// Output Range\n\tresult = result * (outputMax - outputMin) + outputMin;\n\n\treturn result;\n}\n\nfunction findRange(input: number, inputRange: readonly number[]) {\n\tlet i;\n\tfor (i = 1; i < inputRange.length - 1; ++i) {\n\t\tif (inputRange[i] >= input) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn i - 1;\n}\n\nfunction checkValidInputRange(arr: readonly number[]) {\n\tfor (let i = 1; i < arr.length; ++i) {\n\t\tif (!(arr[i] > arr[i - 1])) {\n\t\t\tthrow new Error(\n\t\t\t\t`inputRange must be strictly monotonically increasing but got [${arr.join(\n\t\t\t\t\t',',\n\t\t\t\t)}]`,\n\t\t\t);\n\t\t}\n\t}\n}\n\nfunction checkInfiniteRange(name: string, arr: readonly number[]) {\n\tif (arr.length < 2) {\n\t\tthrow new Error(name + ' must have at least 2 elements');\n\t}\n\n\tfor (const element of arr) {\n\t\tif (typeof element !== 'number') {\n\t\t\tthrow new Error(`${name} must contain only numbers`);\n\t\t}\n\n\t\tif (!Number.isFinite(element)) {\n\t\t\tthrow new Error(\n\t\t\t\t`${name} must contain only finite numbers, but got [${arr.join(',')}]`,\n\t\t\t);\n\t\t}\n\t}\n}\n\n/*\n * @description Allows you to map a range of values to another using a concise syntax.\n * @see [Documentation](https://remotion.dev/docs/interpolate)\n */\nexport function interpolate(\n\tinput: number,\n\tinputRange: readonly number[],\n\toutputRange: readonly number[],\n\toptions?: InterpolateOptions,\n): number {\n\tif (typeof input === 'undefined') {\n\t\tthrow new Error('input can not be undefined');\n\t}\n\n\tif (typeof inputRange === 'undefined') {\n\t\tthrow new Error('inputRange can not be undefined');\n\t}\n\n\tif (typeof outputRange === 'undefined') {\n\t\tthrow new Error('outputRange can not be undefined');\n\t}\n\n\tif (inputRange.length !== outputRange.length) {\n\t\tthrow new Error(\n\t\t\t'inputRange (' +\n\t\t\t\tinputRange.length +\n\t\t\t\t') and outputRange (' +\n\t\t\t\toutputRange.length +\n\t\t\t\t') must have the same length',\n\t\t);\n\t}\n\n\tcheckInfiniteRange('inputRange', inputRange);\n\tcheckInfiniteRange('outputRange', outputRange);\n\n\tcheckValidInputRange(inputRange);\n\n\tconst easing = options?.easing ?? ((num: number): number => num);\n\n\tlet extrapolateLeft: ExtrapolateType = 'extend';\n\tif (options?.extrapolateLeft !== undefined) {\n\t\textrapolateLeft = options.extrapolateLeft;\n\t}\n\n\tlet extrapolateRight: ExtrapolateType = 'extend';\n\tif (options?.extrapolateRight !== undefined) {\n\t\textrapolateRight = options.extrapolateRight;\n\t}\n\n\tif (typeof input !== 'number') {\n\t\tthrow new TypeError('Cannot interpolate an input which is not a number');\n\t}\n\n\tconst range = findRange(input, inputRange);\n\treturn interpolateFunction(\n\t\tinput,\n\t\t[inputRange[range], inputRange[range + 1]],\n\t\t[outputRange[range], outputRange[range + 1]],\n\t\t{\n\t\t\teasing,\n\t\t\textrapolateLeft,\n\t\t\textrapolateRight,\n\t\t},\n\t);\n}\n",
|
|
84
|
-
"// Calculate the `.currentTime` of a video or audio element\n\nimport {interpolate} from '../interpolate.js';\n\nexport const getExpectedMediaFrameUncorrected = ({\n\tframe,\n\tplaybackRate,\n\tstartFrom,\n}: {\n\tframe: number;\n\tplaybackRate: number;\n\tstartFrom: number;\n}) => {\n\treturn interpolate(\n\t\tframe,\n\t\t[-1, startFrom, startFrom + 1],\n\t\t[-1, startFrom, startFrom + playbackRate],\n\t);\n};\n\nexport const getMediaTime = ({\n\tfps,\n\tframe,\n\tplaybackRate,\n\tstartFrom,\n}: {\n\tfps: number;\n\tframe: number;\n\tplaybackRate: number;\n\tstartFrom: number;\n}) => {\n\tconst expectedFrame = getExpectedMediaFrameUncorrected({\n\t\tframe,\n\t\tplaybackRate,\n\t\tstartFrom,\n\t});\n\n\tconst msPerFrame = 1000 / fps;\n\treturn (expectedFrame * msPerFrame) / 1000;\n};\n",
|
|
85
|
-
"const alreadyWarned: {[key: string]: boolean} = {};\n\nexport const warnAboutNonSeekableMedia = (\n\tref: HTMLMediaElement | null,\n\ttype: 'console-warning' | 'console-error' | 'exception',\n) => {\n\t// Media is not loaded yet, but this does not yet mean something is wrong with the media\n\n\tif (ref === null) {\n\t\treturn;\n\t}\n\n\tif (ref.seekable.length === 0) {\n\t\treturn;\n\t}\n\n\tif (ref.seekable.length > 1) {\n\t\treturn;\n\t}\n\n\tif (alreadyWarned[ref.src]) {\n\t\treturn;\n\t}\n\n\tconst range = {start: ref.seekable.start(0), end: ref.seekable.end(0)};\n\n\tif (range.start === 0 && range.end === 0) {\n\t\tconst msg = [\n\t\t\t`The media ${ref.src} cannot be seeked. This could be one of few reasons:`,\n\t\t\t'1) The media resource was replaced while the video is playing but it was not loaded yet.',\n\t\t\t'2) The media does not support seeking.',\n\t\t\t'3) The media was loaded with security headers prventing it from being included.',\n\t\t\t'Please see https://remotion.dev/docs/non-seekable-media for assistance.',\n\t\t].join('\\n');\n\n\t\tif (type === 'console-error') {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.error(msg);\n\t\t} else if (type === 'console-warning') {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.warn(\n\t\t\t\t`The media ${ref.src} does not support seeking. The video will render fine, but may not play correctly in the Remotion Studio and in the <Player>. See https://remotion.dev/docs/non-seekable-media for an explanation.`,\n\t\t\t);\n\t\t} else {\n\t\t\tthrow new Error(msg);\n\t\t}\n\n\t\talreadyWarned[ref.src] = true;\n\t}\n};\n",
|
|
86
|
-
"import {createContext, useContext, useMemo} from 'react';\n\nexport type MediaVolumeContextValue = {\n\tmediaMuted: boolean;\n\tmediaVolume: number;\n};\n\nexport type SetMediaVolumeContextValue = {\n\tsetMediaMuted: (u: React.SetStateAction<boolean>) => void;\n\tsetMediaVolume: (u: number) => void;\n};\n\nexport const MediaVolumeContext = createContext<MediaVolumeContextValue>({\n\tmediaMuted: false,\n\tmediaVolume: 1,\n});\n\nexport const SetMediaVolumeContext = createContext<SetMediaVolumeContextValue>({\n\tsetMediaMuted: () => {\n\t\tthrow new Error('default');\n\t},\n\tsetMediaVolume: () => {\n\t\tthrow new Error('default');\n\t},\n});\n\ntype MediaVolumeReturnType = readonly [number, (u: number) => void];\n\nexport const useMediaVolumeState = (): MediaVolumeReturnType => {\n\tconst {mediaVolume} = useContext(MediaVolumeContext);\n\tconst {setMediaVolume} = useContext(SetMediaVolumeContext);\n\treturn useMemo(() => {\n\t\treturn [mediaVolume, setMediaVolume];\n\t}, [mediaVolume, setMediaVolume]);\n};\n\ntype MediaMutedReturnType = readonly [\n\tboolean,\n\t(u: React.SetStateAction<boolean>) => void,\n];\n\nexport const useMediaMutedState = (): MediaMutedReturnType => {\n\tconst {mediaMuted} = useContext(MediaVolumeContext);\n\tconst {setMediaMuted} = useContext(SetMediaVolumeContext);\n\n\treturn useMemo(() => {\n\t\treturn [mediaMuted, setMediaMuted];\n\t}, [mediaMuted, setMediaMuted]);\n};\n",
|
|
87
|
-
"export const warnAboutTooHighVolume = (volume: number) => {\n\tif (volume >= 100) {\n\t\tthrow new Error(\n\t\t\t`Volume was set to ${volume}, but regular volume is 1, not 100. Did you forget to divide by 100? Set a volume of less than 100 to dismiss this error.`,\n\t\t);\n\t}\n};\n",
|
|
88
|
-
"import type {ForwardRefExoticComponent, RefAttributes} from 'react';\nimport React, {\n\tforwardRef,\n\tuseContext,\n\tuseEffect,\n\tuseImperativeHandle,\n\tuseLayoutEffect,\n\tuseMemo,\n\tuseRef,\n} from 'react';\nimport {RenderAssetManager} from '../RenderAssetManager.js';\nimport {SequenceContext} from '../SequenceContext.js';\nimport {getAbsoluteSrc} from '../absolute-src.js';\nimport {random} from '../random.js';\nimport {useTimelinePosition} from '../timeline-position-state.js';\nimport {useCurrentFrame} from '../use-current-frame.js';\nimport {useDelayRender} from '../use-delay-render.js';\nimport {evaluateVolume} from '../volume-prop.js';\nimport {warnAboutTooHighVolume} from '../volume-safeguard.js';\nimport type {RemotionAudioProps} from './props.js';\nimport {useFrameForVolumeProp} from './use-audio-frame.js';\n\ntype AudioForRenderingProps = RemotionAudioProps & {\n\treadonly onDuration: (src: string, durationInSeconds: number) => void;\n\treadonly onNativeError: React.ReactEventHandler<HTMLAudioElement>;\n};\n\nconst AudioForRenderingRefForwardingFunction: React.ForwardRefRenderFunction<\n\tHTMLAudioElement,\n\tAudioForRenderingProps\n> = (props, ref) => {\n\tconst audioRef = useRef<HTMLAudioElement>(null);\n\n\tconst {\n\t\tvolume: volumeProp,\n\t\tplaybackRate,\n\t\tallowAmplificationDuringRender,\n\t\tonDuration,\n\t\ttoneFrequency,\n\t\t_remotionInternalNeedsDurationCalculation,\n\t\t_remotionInternalNativeLoopPassed,\n\t\tacceptableTimeShiftInSeconds,\n\t\tname,\n\t\tonNativeError,\n\t\tdelayRenderRetries,\n\t\tdelayRenderTimeoutInMilliseconds,\n\t\tloopVolumeCurveBehavior,\n\t\tpauseWhenBuffering,\n\t\taudioStreamIndex,\n\t\t...nativeProps\n\t} = props;\n\n\tconst absoluteFrame = useTimelinePosition();\n\tconst volumePropFrame = useFrameForVolumeProp(\n\t\tloopVolumeCurveBehavior ?? 'repeat',\n\t);\n\tconst frame = useCurrentFrame();\n\tconst sequenceContext = useContext(SequenceContext);\n\tconst {registerRenderAsset, unregisterRenderAsset} =\n\t\tuseContext(RenderAssetManager);\n\n\tconst {delayRender, continueRender} = useDelayRender();\n\n\t// Generate a string that's as unique as possible for this asset\n\t// but at the same time the same on all threads\n\tconst id = useMemo(\n\t\t() =>\n\t\t\t`audio-${random(\n\t\t\t\tprops.src ?? '',\n\t\t\t)}-${sequenceContext?.relativeFrom}-${sequenceContext?.cumulatedFrom}-${sequenceContext?.durationInFrames}`,\n\t\t[\n\t\t\tprops.src,\n\t\t\tsequenceContext?.relativeFrom,\n\t\t\tsequenceContext?.cumulatedFrom,\n\t\t\tsequenceContext?.durationInFrames,\n\t\t],\n\t);\n\n\tconst volume = evaluateVolume({\n\t\tvolume: volumeProp,\n\t\tframe: volumePropFrame,\n\t\tmediaVolume: 1,\n\t});\n\twarnAboutTooHighVolume(volume);\n\n\tuseImperativeHandle(ref, () => {\n\t\treturn audioRef.current as HTMLVideoElement;\n\t}, []);\n\n\tuseEffect(() => {\n\t\tif (!props.src) {\n\t\t\tthrow new Error('No src passed');\n\t\t}\n\n\t\tif (!window.remotion_audioEnabled) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (props.muted) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (volume <= 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tregisterRenderAsset({\n\t\t\ttype: 'audio',\n\t\t\tsrc: getAbsoluteSrc(props.src),\n\t\t\tid,\n\t\t\tframe: absoluteFrame,\n\t\t\tvolume,\n\t\t\tmediaFrame: frame,\n\t\t\tplaybackRate: props.playbackRate ?? 1,\n\t\t\ttoneFrequency: toneFrequency ?? null,\n\t\t\taudioStartFrame: Math.max(0, -(sequenceContext?.relativeFrom ?? 0)),\n\t\t\taudioStreamIndex: audioStreamIndex ?? 0,\n\t\t});\n\t\treturn () => unregisterRenderAsset(id);\n\t}, [\n\t\tprops.muted,\n\t\tprops.src,\n\t\tregisterRenderAsset,\n\t\tabsoluteFrame,\n\t\tid,\n\t\tunregisterRenderAsset,\n\t\tvolume,\n\t\tvolumePropFrame,\n\t\tframe,\n\t\tplaybackRate,\n\t\tprops.playbackRate,\n\t\ttoneFrequency,\n\t\tsequenceContext?.relativeFrom,\n\t\taudioStreamIndex,\n\t]);\n\n\tconst {src} = props;\n\n\t// The <audio> tag is only rendered if the duration needs to be calculated for the `loop`\n\t// attribute to work, or if the user assigns a ref to it.\n\tconst needsToRenderAudioTag =\n\t\tref || _remotionInternalNeedsDurationCalculation;\n\n\t// If audio source switches, make new handle\n\tuseLayoutEffect(() => {\n\t\tif (window.process?.env?.NODE_ENV === 'test') {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!needsToRenderAudioTag) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst newHandle = delayRender('Loading <Audio> duration with src=' + src, {\n\t\t\tretries: delayRenderRetries ?? undefined,\n\t\t\ttimeoutInMilliseconds: delayRenderTimeoutInMilliseconds ?? undefined,\n\t\t});\n\t\tconst {current} = audioRef;\n\n\t\tconst didLoad = () => {\n\t\t\tif (current?.duration) {\n\t\t\t\tonDuration(current.src as string, current.duration);\n\t\t\t}\n\n\t\t\tcontinueRender(newHandle);\n\t\t};\n\n\t\tif (current?.duration) {\n\t\t\tonDuration(current.src as string, current.duration);\n\t\t\tcontinueRender(newHandle);\n\t\t} else {\n\t\t\tcurrent?.addEventListener('loadedmetadata', didLoad, {once: true});\n\t\t}\n\n\t\t// If tag gets unmounted, clear pending handles because video metadata is not going to load\n\t\treturn () => {\n\t\t\tcurrent?.removeEventListener('loadedmetadata', didLoad);\n\t\t\tcontinueRender(newHandle);\n\t\t};\n\t}, [\n\t\tsrc,\n\t\tonDuration,\n\t\tneedsToRenderAudioTag,\n\t\tdelayRenderRetries,\n\t\tdelayRenderTimeoutInMilliseconds,\n\t\tcontinueRender,\n\t\tdelayRender,\n\t]);\n\n\tif (!needsToRenderAudioTag) {\n\t\treturn null;\n\t}\n\n\treturn <audio ref={audioRef} {...nativeProps} onError={onNativeError} />;\n};\n\nexport const AudioForRendering = forwardRef(\n\tAudioForRenderingRefForwardingFunction,\n) as ForwardRefExoticComponent<\n\tAudioForRenderingProps & RefAttributes<HTMLAudioElement>\n>;\n",
|
|
89
|
-
"import type {ComponentType} from 'react';\nimport React, {Suspense, useContext, useEffect} from 'react';\nimport {createPortal} from 'react-dom';\nimport type {AnyZodObject, z} from 'zod';\nimport {\n\tCanUseRemotionHooks,\n\tCanUseRemotionHooksProvider,\n} from './CanUseRemotionHooks.js';\nimport {CompositionSetters} from './CompositionManagerContext.js';\nimport {FolderContext} from './Folder.js';\nimport {\n\tPROPS_UPDATED_EXTERNALLY,\n\tuseResolvedVideoConfig,\n} from './ResolveCompositionConfig.js';\nimport type {Codec} from './codec.js';\nimport {serializeThenDeserializeInStudio} from './input-props-serialization.js';\nimport {useIsPlayer} from './is-player.js';\nimport {Loading} from './loading-indicator.js';\nimport {useNonce} from './nonce.js';\nimport {portalNode} from './portal-node.js';\nimport type {InferProps, PropsIfHasProps} from './props-if-has-props.js';\nimport type {PixelFormat, VideoImageFormat} from './render-types.js';\nimport {useDelayRender} from './use-delay-render.js';\nimport {useLazyComponent} from './use-lazy-component.js';\nimport {useRemotionEnvironment} from './use-remotion-environment.js';\nimport {useVideo} from './use-video.js';\nimport {validateCompositionId} from './validation/validate-composition-id.js';\nimport {validateDefaultAndInputProps} from './validation/validate-default-props.js';\n\ntype LooseComponentType<T> = ComponentType<T> | ((props: T) => React.ReactNode);\n\nexport type CompProps<Props> =\n\t| {\n\t\t\tlazyComponent: () => Promise<{default: LooseComponentType<Props>}>;\n\t }\n\t| {\n\t\t\tcomponent: LooseComponentType<Props>;\n\t };\n\nexport type CalcMetadataReturnType<T extends Record<string, unknown>> = {\n\tdurationInFrames?: number;\n\tfps?: number;\n\twidth?: number;\n\theight?: number;\n\tprops?: T;\n\tdefaultCodec?: Codec;\n\tdefaultOutName?: string;\n\tdefaultVideoImageFormat?: VideoImageFormat;\n\tdefaultPixelFormat?: PixelFormat;\n};\n\nexport type CalculateMetadataFunction<T extends Record<string, unknown>> =\n\t(options: {\n\t\tdefaultProps: T;\n\t\tprops: T;\n\t\tabortSignal: AbortSignal;\n\t\tcompositionId: string;\n\t\tisRendering: boolean;\n\t}) => Promise<CalcMetadataReturnType<T>> | CalcMetadataReturnType<T>;\n\ntype OptionalDimensions<\n\tSchema extends AnyZodObject,\n\tProps extends Record<string, unknown>,\n> = {\n\twidth?: number;\n\theight?: number;\n\tcalculateMetadata: CalculateMetadataFunction<InferProps<Schema, Props>>;\n};\n\ntype MandatoryDimensions<\n\tSchema extends AnyZodObject,\n\tProps extends Record<string, unknown>,\n> = {\n\twidth: number;\n\theight: number;\n\tcalculateMetadata?: CalculateMetadataFunction<InferProps<Schema, Props>>;\n};\n\ntype StillCalculateMetadataOrExplicit<\n\tSchema extends AnyZodObject,\n\tProps extends Record<string, unknown>,\n> = OptionalDimensions<Schema, Props> | MandatoryDimensions<Schema, Props>;\n\ntype CompositionCalculateMetadataOrExplicit<\n\tSchema extends AnyZodObject,\n\tProps extends Record<string, unknown>,\n> =\n\t| (OptionalDimensions<Schema, Props> & {\n\t\t\tfps?: number;\n\t\t\tdurationInFrames?: number;\n\t })\n\t| (MandatoryDimensions<Schema, Props> & {\n\t\t\tfps: number;\n\t\t\tdurationInFrames: number;\n\t });\n\nexport type StillProps<\n\tSchema extends AnyZodObject,\n\tProps extends Record<string, unknown>,\n> = {\n\tid: string;\n\tschema?: Schema;\n} & StillCalculateMetadataOrExplicit<Schema, Props> &\n\tCompProps<Props> &\n\tPropsIfHasProps<Schema, Props>;\n\nexport type CompositionProps<\n\tSchema extends AnyZodObject,\n\tProps extends Record<string, unknown>,\n> = {\n\treadonly id: string;\n\treadonly schema?: Schema;\n} & CompositionCalculateMetadataOrExplicit<Schema, Props> &\n\tCompProps<Props> &\n\tPropsIfHasProps<Schema, Props>;\n\nconst Fallback: React.FC = () => {\n\tconst {continueRender, delayRender} = useDelayRender();\n\tuseEffect(() => {\n\t\tconst fallback = delayRender('Waiting for Root component to unsuspend');\n\t\treturn () => continueRender(fallback);\n\t}, [continueRender, delayRender]);\n\treturn null;\n};\n\nconst InnerComposition = <\n\tSchema extends AnyZodObject,\n\tProps extends Record<string, unknown>,\n>({\n\twidth,\n\theight,\n\tfps,\n\tdurationInFrames,\n\tid,\n\tdefaultProps,\n\tschema,\n\t...compProps\n}: CompositionProps<Schema, Props>) => {\n\tconst compManager = useContext(CompositionSetters);\n\n\tconst {registerComposition, unregisterComposition} = compManager;\n\n\tconst video = useVideo();\n\n\tconst lazy = useLazyComponent<Props>({\n\t\tcompProps: compProps as CompProps<Props>,\n\t\tcomponentName: 'Composition',\n\t\tnoSuspense: false,\n\t});\n\n\tconst nonce = useNonce();\n\n\tconst isPlayer = useIsPlayer();\n\tconst environment = useRemotionEnvironment();\n\n\tconst canUseComposition = useContext(CanUseRemotionHooks);\n\tif (canUseComposition) {\n\t\tif (isPlayer) {\n\t\t\tthrow new Error(\n\t\t\t\t'<Composition> was mounted inside the `component` that was passed to the <Player>. See https://remotion.dev/docs/wrong-composition-mount for help.',\n\t\t\t);\n\t\t}\n\n\t\tthrow new Error(\n\t\t\t'<Composition> mounted inside another composition. See https://remotion.dev/docs/wrong-composition-mount for help.',\n\t\t);\n\t}\n\n\tconst {folderName, parentName} = useContext(FolderContext);\n\n\tuseEffect(() => {\n\t\t// Ensure it's a URL safe id\n\t\tif (!id) {\n\t\t\tthrow new Error('No id for composition passed.');\n\t\t}\n\n\t\tvalidateCompositionId(id);\n\t\tvalidateDefaultAndInputProps(defaultProps, 'defaultProps', id);\n\n\t\tregisterComposition<Schema, Props>({\n\t\t\tdurationInFrames: durationInFrames ?? undefined,\n\t\t\tfps: fps ?? undefined,\n\t\t\theight: height ?? undefined,\n\t\t\twidth: width ?? undefined,\n\t\t\tid,\n\t\t\tfolderName,\n\t\t\tcomponent: lazy,\n\t\t\tdefaultProps: serializeThenDeserializeInStudio(\n\t\t\t\t(defaultProps ?? {}) as z.output<Schema> & Props,\n\t\t\t) as z.output<Schema> & Props,\n\t\t\tnonce,\n\t\t\tparentFolderName: parentName,\n\t\t\tschema: schema ?? null,\n\t\t\tcalculateMetadata: compProps.calculateMetadata ?? null,\n\t\t});\n\n\t\treturn () => {\n\t\t\tunregisterComposition(id);\n\t\t};\n\t}, [\n\t\tdurationInFrames,\n\t\tfps,\n\t\theight,\n\t\tlazy,\n\t\tid,\n\t\tfolderName,\n\t\tdefaultProps,\n\t\twidth,\n\t\tnonce,\n\t\tparentName,\n\t\tschema,\n\t\tcompProps.calculateMetadata,\n\t\tregisterComposition,\n\t\tunregisterComposition,\n\t]);\n\n\tuseEffect(() => {\n\t\twindow.dispatchEvent(\n\t\t\tnew CustomEvent<{resetUnsaved: string | null}>(PROPS_UPDATED_EXTERNALLY, {\n\t\t\t\tdetail: {\n\t\t\t\t\tresetUnsaved: id,\n\t\t\t\t},\n\t\t\t}),\n\t\t);\n\t}, [defaultProps, id]);\n\n\tconst resolved = useResolvedVideoConfig(id);\n\n\tif (environment.isStudio && video && video.component === lazy) {\n\t\tconst Comp = lazy;\n\t\tif (\n\t\t\tresolved === null ||\n\t\t\t(resolved.type !== 'success' &&\n\t\t\t\tresolved.type !== 'success-and-refreshing')\n\t\t) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn createPortal(\n\t\t\t<CanUseRemotionHooksProvider>\n\t\t\t\t<Suspense fallback={<Loading />}>\n\t\t\t\t\t<Comp\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\t\t\t\t\t...((resolved.result.props ?? {}) as any)\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t</Suspense>\n\t\t\t</CanUseRemotionHooksProvider>,\n\t\t\tportalNode(),\n\t\t);\n\t}\n\n\tif (environment.isRendering && video && video.component === lazy) {\n\t\tconst Comp = lazy;\n\t\tif (\n\t\t\tresolved === null ||\n\t\t\t(resolved.type !== 'success' &&\n\t\t\t\tresolved.type !== 'success-and-refreshing')\n\t\t) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn createPortal(\n\t\t\t<CanUseRemotionHooksProvider>\n\t\t\t\t<Suspense fallback={<Fallback />}>\n\t\t\t\t\t<Comp\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\t\t\t\t\t...((resolved.result.props ?? {}) as any)\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t</Suspense>\n\t\t\t</CanUseRemotionHooksProvider>,\n\t\t\tportalNode(),\n\t\t);\n\t}\n\n\treturn null;\n};\n\n/*\n * @description This component is used to register a video to make it renderable and make it show in the sidebar, in dev mode.\n * @see [Documentation](https://remotion.dev/docs/composition)\n */\nexport const Composition = <\n\tSchema extends AnyZodObject,\n\tProps extends Record<string, unknown>,\n>(\n\tprops: CompositionProps<Schema, Props>,\n) => {\n\tconst {onlyRenderComposition} = useContext(CompositionSetters);\n\n\tif (onlyRenderComposition && onlyRenderComposition !== props.id) {\n\t\treturn null;\n\t}\n\n\t// @ts-expect-error\n\treturn <InnerComposition {...props} />;\n};\n",
|
|
90
|
-
"import type {FC} from 'react';\nimport {createContext, useContext, useEffect, useMemo} from 'react';\nimport {CompositionSetters} from './CompositionManagerContext.js';\nimport {truthy} from './truthy.js';\nimport {validateFolderName} from './validation/validate-folder-name.js';\n\nexport type TFolder = {\n\tname: string;\n\tparent: string | null;\n};\n\ntype FolderContextType = {\n\tfolderName: string | null;\n\tparentName: string | null;\n};\n\nexport const FolderContext = createContext<FolderContextType>({\n\tfolderName: null,\n\tparentName: null,\n});\n\n/*\n * @description By wrapping a <Composition /> inside a <Folder />, you can visually categorize it in your sidebar, should you have many compositions.\n * @see [Documentation](https://remotion.dev/docs/folder)\n */\nexport const Folder: FC<{\n\treadonly name: string;\n\treadonly children: React.ReactNode;\n}> = ({name, children}) => {\n\tconst parent = useContext(FolderContext);\n\tconst {registerFolder, unregisterFolder} = useContext(CompositionSetters);\n\n\tvalidateFolderName(name);\n\n\tconst parentNameArr = [parent.parentName, parent.folderName].filter(truthy);\n\n\tconst parentName =\n\t\tparentNameArr.length === 0 ? null : parentNameArr.join('/');\n\n\tconst value = useMemo((): FolderContextType => {\n\t\treturn {\n\t\t\tfolderName: name,\n\t\t\tparentName,\n\t\t};\n\t}, [name, parentName]);\n\n\tuseEffect(() => {\n\t\tregisterFolder(name, parentName);\n\n\t\treturn () => {\n\t\t\tunregisterFolder(name, parentName);\n\t\t};\n\t}, [name, parent.folderName, parentName, registerFolder, unregisterFolder]);\n\n\treturn (\n\t\t<FolderContext.Provider value={value}>{children}</FolderContext.Provider>\n\t);\n};\n",
|
|
91
|
-
"const getRegex = () => /^([a-zA-Z0-9-\\u4E00-\\u9FFF])+$/g;\n\nexport const isFolderNameValid = (name: string) => name.match(getRegex());\n\nexport const validateFolderName = (name: string | null) => {\n\tif (name === undefined || name === null) {\n\t\tthrow new TypeError('You must pass a name to a <Folder />.');\n\t}\n\n\tif (typeof name !== 'string') {\n\t\tthrow new TypeError(\n\t\t\t`The \"name\" you pass into <Folder /> must be a string. Got: ${typeof name}`,\n\t\t);\n\t}\n\n\tif (!isFolderNameValid(name)) {\n\t\tthrow new Error(\n\t\t\t`Folder name can only contain a-z, A-Z, 0-9 and -. You passed ${name}`,\n\t\t);\n\t}\n};\n\nexport const invalidFolderNameErrorMessage = `Folder name must match ${String(\n\tgetRegex(),\n)}`;\n",
|
|
92
|
-
"import React from 'react';\nimport {AbsoluteFill} from './AbsoluteFill.js';\n\nconst rotate: React.CSSProperties = {\n\ttransform: `rotate(90deg)`,\n};\nconst ICON_SIZE = 40;\n\nconst label: React.CSSProperties = {\n\tcolor: 'white',\n\tfontSize: 14,\n\tfontFamily: 'sans-serif',\n};\n\nconst container: React.CSSProperties = {\n\tjustifyContent: 'center',\n\talignItems: 'center',\n};\n\nexport const Loading: React.FC = () => {\n\treturn (\n\t\t<AbsoluteFill style={container} id=\"remotion-comp-loading\">\n\t\t\t<style type=\"text/css\">{`\n\t\t\t\t@keyframes anim {\n\t\t\t\t\tfrom {\n\t\t\t\t\t\topacity: 0\n\t\t\t\t\t}\n\t\t\t\t\tto {\n\t\t\t\t\t\topacity: 1\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t#remotion-comp-loading {\n\t\t\t\t\tanimation: anim 2s;\n\t\t\t\t\tanimation-fill-mode: forwards;\n\t\t\t\t}\n\t\t\t`}</style>\n\t\t\t<svg\n\t\t\t\twidth={ICON_SIZE}\n\t\t\t\theight={ICON_SIZE}\n\t\t\t\tviewBox=\"-100 -100 400 400\"\n\t\t\t\tstyle={rotate}\n\t\t\t>\n\t\t\t\t<path\n\t\t\t\t\tfill=\"#555\"\n\t\t\t\t\tstroke=\"#555\"\n\t\t\t\t\tstrokeWidth=\"100\"\n\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\td=\"M 2 172 a 196 100 0 0 0 195 5 A 196 240 0 0 0 100 2.259 A 196 240 0 0 0 2 172 z\"\n\t\t\t\t/>\n\t\t\t</svg>\n\t\t\t<p style={label}>Resolving {'<Suspense>'}...</p>\n\t\t</AbsoluteFill>\n\t);\n};\n",
|
|
93
|
-
"let _portalNode: null | HTMLElement = null;\n\nexport const portalNode = () => {\n\tif (!_portalNode) {\n\t\tif (typeof document === 'undefined') {\n\t\t\tthrow new Error(\n\t\t\t\t'Tried to call an API that only works in the browser from outside the browser',\n\t\t\t);\n\t\t}\n\n\t\t_portalNode = document.createElement('div');\n\t\t_portalNode.style.position = 'absolute';\n\t\t_portalNode.style.top = '0px';\n\t\t_portalNode.style.left = '0px';\n\t\t_portalNode.style.right = '0px';\n\t\t_portalNode.style.bottom = '0px';\n\t\t_portalNode.style.width = '100%';\n\t\t_portalNode.style.height = '100%';\n\t\t_portalNode.style.display = 'flex';\n\t\t_portalNode.style.flexDirection = 'column';\n\n\t\tconst containerNode = document.createElement('div');\n\t\tcontainerNode.style.position = 'fixed';\n\t\tcontainerNode.style.top = -999999 + 'px';\n\t\tcontainerNode.appendChild(_portalNode);\n\n\t\tdocument.body.appendChild(containerNode);\n\t}\n\n\treturn _portalNode;\n};\n",
|
|
94
|
-
"import type {\n\tComponentPropsWithRef,\n\tComponentType,\n\tExoticComponent,\n} from 'react';\nimport React, {useMemo} from 'react';\nimport type {CompProps} from './Composition.js';\n\ntype LazyExoticComponent<T extends ComponentType<any>> = ExoticComponent<\n\tComponentPropsWithRef<T>\n> & {\n\treadonly _result: T;\n};\n\n// Expected, it can be any component props\nexport const useLazyComponent = <Props>({\n\tcompProps,\n\tcomponentName,\n\tnoSuspense,\n}: {\n\tcompProps: CompProps<Props>;\n\tcomponentName: string;\n\tnoSuspense: boolean;\n}): LazyExoticComponent<ComponentType<Props>> => {\n\tconst lazy = useMemo(() => {\n\t\tif ('component' in compProps) {\n\t\t\t// In SSR, suspense is not yet supported, we cannot use React.lazy\n\t\t\tif (typeof document === 'undefined' || noSuspense) {\n\t\t\t\treturn compProps.component as unknown as React.LazyExoticComponent<\n\t\t\t\t\tComponentType<Props>\n\t\t\t\t>;\n\t\t\t}\n\n\t\t\tif (typeof compProps.component === 'undefined') {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`A value of \\`undefined\\` was passed to the \\`component\\` prop. Check the value you are passing to the <${componentName}/> component.`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn React.lazy(() =>\n\t\t\t\tPromise.resolve({default: compProps.component as ComponentType<Props>}),\n\t\t\t);\n\t\t}\n\n\t\tif (\n\t\t\t'lazyComponent' in compProps &&\n\t\t\ttypeof compProps.lazyComponent !== 'undefined'\n\t\t) {\n\t\t\tif (typeof compProps.lazyComponent === 'undefined') {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`A value of \\`undefined\\` was passed to the \\`lazyComponent\\` prop. Check the value you are passing to the <${componentName}/> component.`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn React.lazy(\n\t\t\t\tcompProps.lazyComponent as () => Promise<{\n\t\t\t\t\tdefault: ComponentType<Props>;\n\t\t\t\t}>,\n\t\t\t);\n\t\t}\n\n\t\tthrow new Error(\"You must pass either 'component' or 'lazyComponent'\");\n\n\t\t// Very important to leave the dependencies as they are, or instead\n\t\t// the player will remount on every frame.\n\n\t\t// @ts-expect-error\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [compProps.component, compProps.lazyComponent]);\n\treturn lazy;\n};\n",
|
|
95
|
-
"const getRegex = () => /^([a-zA-Z0-9-\\u4E00-\\u9FFF])+$/g;\n\nexport const isCompositionIdValid = (id: string) => id.match(getRegex());\n\nexport const validateCompositionId = (id: string) => {\n\tif (!isCompositionIdValid(id)) {\n\t\tthrow new Error(\n\t\t\t`Composition id can only contain a-z, A-Z, 0-9, CJK characters and -. You passed ${id}`,\n\t\t);\n\t}\n};\n\nexport const invalidCompositionErrorMessage = `Composition ID must match ${String(\n\tgetRegex(),\n)}`;\n",
|
|
96
|
-
"export const validateDefaultAndInputProps = (\n\tdefaultProps: unknown,\n\tname: 'defaultProps' | 'inputProps',\n\tcompositionId: string | null,\n) => {\n\tif (!defaultProps) {\n\t\treturn;\n\t}\n\n\tif (typeof defaultProps !== 'object') {\n\t\tthrow new Error(\n\t\t\t`\"${name}\" must be an object, but you passed a value of type ${typeof defaultProps}`,\n\t\t);\n\t}\n\n\tif (Array.isArray(defaultProps)) {\n\t\tthrow new Error(\n\t\t\t`\"${name}\" must be an object, an array was passed ${\n\t\t\t\tcompositionId ? `for composition \"${compositionId}\"` : ''\n\t\t\t}`,\n\t\t);\n\t}\n};\n",
|
|
97
|
-
"// Taken from https://github.com/facebook/react-native/blob/0b9ea60b4fee8cacc36e7160e31b91fc114dbc0d/Libraries/Animated/src/bezier.js\n\nconst NEWTON_ITERATIONS = 4;\nconst NEWTON_MIN_SLOPE = 0.001;\nconst SUBDIVISION_PRECISION = 0.0000001;\nconst SUBDIVISION_MAX_ITERATIONS = 10;\n\nconst kSplineTableSize = 11;\nconst kSampleStepSize = 1.0 / (kSplineTableSize - 1.0);\n\nconst float32ArraySupported = typeof Float32Array === 'function';\n\nfunction a(aA1: number, aA2: number): number {\n\treturn 1.0 - 3.0 * aA2 + 3.0 * aA1;\n}\n\nfunction b(aA1: number, aA2: number): number {\n\treturn 3.0 * aA2 - 6.0 * aA1;\n}\n\nfunction c(aA1: number): number {\n\treturn 3.0 * aA1;\n}\n\n// Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.\nfunction calcBezier(aT: number, aA1: number, aA2: number): number {\n\treturn ((a(aA1, aA2) * aT + b(aA1, aA2)) * aT + c(aA1)) * aT;\n}\n\n// Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2.\nfunction getSlope(aT: number, aA1: number, aA2: number): number {\n\treturn 3.0 * a(aA1, aA2) * aT * aT + 2.0 * b(aA1, aA2) * aT + c(aA1);\n}\n\nfunction binarySubdivide({\n\taX,\n\t_aA,\n\t_aB,\n\tmX1,\n\tmX2,\n}: {\n\taX: number;\n\t_aA: number;\n\t_aB: number;\n\tmX1: number;\n\tmX2: number;\n}): number {\n\tlet currentX;\n\tlet currentT;\n\tlet i = 0;\n\tlet aA = _aA;\n\tlet aB = _aB;\n\tdo {\n\t\tcurrentT = aA + (aB - aA) / 2.0;\n\t\tcurrentX = calcBezier(currentT, mX1, mX2) - aX;\n\t\tif (currentX > 0.0) {\n\t\t\taB = currentT;\n\t\t} else {\n\t\t\taA = currentT;\n\t\t}\n\t} while (\n\t\tMath.abs(currentX) > SUBDIVISION_PRECISION &&\n\t\t++i < SUBDIVISION_MAX_ITERATIONS\n\t);\n\n\treturn currentT;\n}\n\nfunction newtonRaphsonIterate(\n\taX: number,\n\t_aGuessT: number,\n\tmX1: number,\n\tmX2: number,\n): number {\n\tlet aGuessT = _aGuessT;\n\tfor (let i = 0; i < NEWTON_ITERATIONS; ++i) {\n\t\tconst currentSlope = getSlope(aGuessT, mX1, mX2);\n\t\tif (currentSlope === 0.0) {\n\t\t\treturn aGuessT;\n\t\t}\n\n\t\tconst currentX = calcBezier(aGuessT, mX1, mX2) - aX;\n\t\taGuessT -= currentX / currentSlope;\n\t}\n\n\treturn aGuessT;\n}\n\nexport function bezier(\n\tmX1: number,\n\tmY1: number,\n\tmX2: number,\n\tmY2: number,\n): (x: number) => number {\n\tif (!(mX1 >= 0 && mX1 <= 1 && mX2 >= 0 && mX2 <= 1)) {\n\t\tthrow new Error('bezier x values must be in [0, 1] range');\n\t}\n\n\t// Precompute samples table\n\tconst sampleValues = float32ArraySupported\n\t\t? new Float32Array(kSplineTableSize)\n\t\t: new Array(kSplineTableSize);\n\tif (mX1 !== mY1 || mX2 !== mY2) {\n\t\tfor (let i = 0; i < kSplineTableSize; ++i) {\n\t\t\tsampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2);\n\t\t}\n\t}\n\n\tfunction getTForX(aX: number): number {\n\t\tlet intervalStart = 0.0;\n\t\tlet currentSample = 1;\n\t\tconst lastSample = kSplineTableSize - 1;\n\n\t\tfor (\n\t\t\t;\n\t\t\tcurrentSample !== lastSample && sampleValues[currentSample] <= aX;\n\t\t\t++currentSample\n\t\t) {\n\t\t\tintervalStart += kSampleStepSize;\n\t\t}\n\n\t\t--currentSample;\n\n\t\t// Interpolate to provide an initial guess for t\n\t\tconst dist =\n\t\t\t(aX - sampleValues[currentSample]) /\n\t\t\t(sampleValues[currentSample + 1] - sampleValues[currentSample]);\n\t\tconst guessForT = intervalStart + dist * kSampleStepSize;\n\n\t\tconst initialSlope = getSlope(guessForT, mX1, mX2);\n\t\tif (initialSlope >= NEWTON_MIN_SLOPE) {\n\t\t\treturn newtonRaphsonIterate(aX, guessForT, mX1, mX2);\n\t\t}\n\n\t\tif (initialSlope === 0.0) {\n\t\t\treturn guessForT;\n\t\t}\n\n\t\treturn binarySubdivide({\n\t\t\taX,\n\t\t\t_aA: intervalStart,\n\t\t\t_aB: intervalStart + kSampleStepSize,\n\t\t\tmX1,\n\t\t\tmX2,\n\t\t});\n\t}\n\n\treturn function (x: number): number {\n\t\tif (mX1 === mY1 && mX2 === mY2) {\n\t\t\treturn x; // linear\n\t\t}\n\n\t\t// Because JavaScript number are imprecise, we should guarantee the extremes are right.\n\t\tif (x === 0) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tif (x === 1) {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn calcBezier(getTForX(x), mY1, mY2);\n\t};\n}\n",
|
|
98
|
-
"// Taken from https://github.com/facebook/react-native/blob/0b9ea60b4fee8cacc36e7160e31b91fc114dbc0d/Libraries/Animated/src/Easing.js\n\nimport {bezier} from './bezier.js';\n\n/**\n * @description The Easing module implements common easing functions. You can use it with the interpolate() API.\n * @see [Documentation](https://www.remotion.dev/docs/easing)\n */\nexport class Easing {\n\tstatic step0(n: number): number {\n\t\treturn n > 0 ? 1 : 0;\n\t}\n\n\tstatic step1(n: number): number {\n\t\treturn n >= 1 ? 1 : 0;\n\t}\n\n\tstatic linear(t: number): number {\n\t\treturn t;\n\t}\n\n\tstatic ease(t: number): number {\n\t\treturn Easing.bezier(0.42, 0, 1, 1)(t);\n\t}\n\n\tstatic quad(t: number): number {\n\t\treturn t * t;\n\t}\n\n\tstatic cubic(t: number): number {\n\t\treturn t * t * t;\n\t}\n\n\tstatic poly(n: number): (t: number) => number {\n\t\treturn (t: number): number => t ** n;\n\t}\n\n\tstatic sin(t: number): number {\n\t\treturn 1 - Math.cos((t * Math.PI) / 2);\n\t}\n\n\tstatic circle(t: number): number {\n\t\treturn 1 - Math.sqrt(1 - t * t);\n\t}\n\n\tstatic exp(t: number): number {\n\t\treturn 2 ** (10 * (t - 1));\n\t}\n\n\tstatic elastic(bounciness = 1): (t: number) => number {\n\t\tconst p = bounciness * Math.PI;\n\t\treturn (t): number =>\n\t\t\t1 - Math.cos((t * Math.PI) / 2) ** 3 * Math.cos(t * p);\n\t}\n\n\tstatic back(s = 1.70158): (t: number) => number {\n\t\treturn (t): number => t * t * ((s + 1) * t - s);\n\t}\n\n\tstatic bounce(t: number): number {\n\t\tif (t < 1 / 2.75) {\n\t\t\treturn 7.5625 * t * t;\n\t\t}\n\n\t\tif (t < 2 / 2.75) {\n\t\t\tconst t2_ = t - 1.5 / 2.75;\n\t\t\treturn 7.5625 * t2_ * t2_ + 0.75;\n\t\t}\n\n\t\tif (t < 2.5 / 2.75) {\n\t\t\tconst t2_ = t - 2.25 / 2.75;\n\t\t\treturn 7.5625 * t2_ * t2_ + 0.9375;\n\t\t}\n\n\t\tconst t2 = t - 2.625 / 2.75;\n\t\treturn 7.5625 * t2 * t2 + 0.984375;\n\t}\n\n\tstatic bezier(\n\t\tx1: number,\n\t\ty1: number,\n\t\tx2: number,\n\t\ty2: number,\n\t): (t: number) => number {\n\t\treturn bezier(x1, y1, x2, y2);\n\t}\n\n\tstatic in(easing: (t: number) => number): (t: number) => number {\n\t\treturn easing;\n\t}\n\n\tstatic out(easing: (t: number) => number): (t: number) => number {\n\t\treturn (t): number => 1 - easing(1 - t);\n\t}\n\n\tstatic inOut(easing: (t: number) => number): (t: number) => number {\n\t\treturn (t): number => {\n\t\t\tif (t < 0.5) {\n\t\t\t\treturn easing(t * 2) / 2;\n\t\t\t}\n\n\t\t\treturn 1 - easing((1 - t) * 2) / 2;\n\t\t};\n\t}\n}\n",
|
|
99
|
-
"export const ENABLE_V5_BREAKING_CHANGES = false as const;\n",
|
|
100
|
-
"import {ENABLE_V5_BREAKING_CHANGES} from './v5-flag';\n\nlet warnedServer = false;\nlet warnedPlayer = false;\n\nconst warnServerOnce = () => {\n\tif (warnedServer) {\n\t\treturn;\n\t}\n\n\twarnedServer = true;\n\t// eslint-disable-next-line no-console\n\tconsole.warn(\n\t\t'Called getStaticFiles() on the server. The API is only available in the browser. An empty array was returned.',\n\t);\n};\n\nconst warnPlayerOnce = () => {\n\tif (warnedPlayer) {\n\t\treturn;\n\t}\n\n\twarnedPlayer = true;\n\t// eslint-disable-next-line no-console\n\tconsole.warn(\n\t\t'Called getStaticFiles() while using the Remotion Player. The API is only available while using the Remotion Studio. An empty array was returned.',\n\t);\n};\n\n/*\n * @description Gets an array containing all files in the `public/` folder. You can reference them by using `staticFile()`.\n * @see [Documentation](https://remotion.dev/docs/getstaticfiles)\n */\nexport const getStaticFiles = (): StaticFile[] => {\n\tif (ENABLE_V5_BREAKING_CHANGES) {\n\t\tthrow new Error(\n\t\t\t'getStaticFiles() has moved into the `@remotion/studio` package. Update your imports.',\n\t\t);\n\t}\n\n\tif (typeof document === 'undefined') {\n\t\twarnServerOnce();\n\t\treturn [];\n\t}\n\n\tif (window.remotion_isPlayer) {\n\t\twarnPlayerOnce();\n\t\treturn [];\n\t}\n\n\treturn window.remotion_staticFiles;\n};\n\nexport type StaticFile = {\n\t/**\n\t * A string that you can pass to the `src` attribute of an `<Audio>`, `<Img>` and `<Video>` element.\n\t */\n\tsrc: string;\n\t/**\n\t * The filepath of the file, relative to the public folder.\n\t * Example: `subfolder/image.png`\n\t */\n\tname: string;\n\tsizeInBytes: number;\n\t/**\n\t * UNIX timestamp in milliseconds\n\t */\n\tlastModified: number;\n};\n",
|
|
101
|
-
"import React, {forwardRef, useCallback, useState} from 'react';\nimport {useDelayRender} from './use-delay-render.js';\n\nconst IFrameRefForwarding: React.ForwardRefRenderFunction<\n\tHTMLIFrameElement,\n\tReact.DetailedHTMLProps<\n\t\tReact.IframeHTMLAttributes<HTMLIFrameElement>,\n\t\tHTMLIFrameElement\n\t> & {\n\t\treadonly delayRenderRetries?: number;\n\t\treadonly delayRenderTimeoutInMilliseconds?: number;\n\t}\n> = (\n\t{\n\t\tonLoad,\n\t\tonError,\n\t\tdelayRenderRetries,\n\t\tdelayRenderTimeoutInMilliseconds,\n\t\t...props\n\t},\n\tref,\n) => {\n\tconst {delayRender, continueRender} = useDelayRender();\n\tconst [handle] = useState(() =>\n\t\tdelayRender(`Loading <IFrame> with source ${props.src}`, {\n\t\t\tretries: delayRenderRetries ?? undefined,\n\t\t\ttimeoutInMilliseconds: delayRenderTimeoutInMilliseconds ?? undefined,\n\t\t}),\n\t);\n\n\tconst didLoad = useCallback(\n\t\t(e: React.SyntheticEvent<HTMLIFrameElement, Event>) => {\n\t\t\tcontinueRender(handle);\n\t\t\tonLoad?.(e);\n\t\t},\n\t\t[handle, onLoad, continueRender],\n\t);\n\n\tconst didGetError = useCallback(\n\t\t(e: React.SyntheticEvent<HTMLIFrameElement, Event>) => {\n\t\t\tcontinueRender(handle);\n\t\t\tif (onError) {\n\t\t\t\tonError(e);\n\t\t\t} else {\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.error(\n\t\t\t\t\t'Error loading iframe:',\n\t\t\t\t\te,\n\t\t\t\t\t'Handle the event using the onError() prop to make this message disappear.',\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t\t[handle, onError, continueRender],\n\t);\n\n\treturn <iframe {...props} ref={ref} onError={didGetError} onLoad={didLoad} />;\n};\n\n/*\n * @description The <IFrame /> can be used like a regular <iframe> HTML tag.\n * @see [Documentation](https://remotion.dev/docs/iframe)\n */\nexport const IFrame = forwardRef(IFrameRefForwarding);\n",
|
|
102
|
-
"import React, {\n\tforwardRef,\n\tuseCallback,\n\tuseContext,\n\tuseImperativeHandle,\n\tuseLayoutEffect,\n\tuseRef,\n} from 'react';\nimport {SequenceContext} from './SequenceContext.js';\nimport type {IsExact} from './audio/props.js';\nimport {cancelRender} from './cancel-render.js';\nimport {getCrossOriginValue} from './get-cross-origin-value.js';\nimport {usePreload} from './prefetch.js';\nimport {useBufferState} from './use-buffer-state.js';\nimport {useDelayRender} from './use-delay-render.js';\n\nfunction exponentialBackoff(errorCount: number): number {\n\treturn 1000 * 2 ** (errorCount - 1);\n}\n\ntype NativeImgProps = Omit<\n\tReact.DetailedHTMLProps<\n\t\tReact.ImgHTMLAttributes<HTMLImageElement>,\n\t\tHTMLImageElement\n\t>,\n\t'src'\n>;\n\nexport type ImgProps = NativeImgProps & {\n\treadonly maxRetries?: number;\n\treadonly pauseWhenLoading?: boolean;\n\treadonly delayRenderRetries?: number;\n\treadonly delayRenderTimeoutInMilliseconds?: number;\n\treadonly onImageFrame?: (imgelement: HTMLImageElement) => void;\n\treadonly src: string;\n};\n\ntype Expected = Omit<NativeImgProps, 'onError' | 'src' | 'crossOrigin'>;\n\nconst ImgRefForwarding: React.ForwardRefRenderFunction<\n\tHTMLImageElement,\n\tImgProps\n> = (\n\t{\n\t\tonError,\n\t\tmaxRetries = 2,\n\t\tsrc,\n\t\tpauseWhenLoading,\n\t\tdelayRenderRetries,\n\t\tdelayRenderTimeoutInMilliseconds,\n\t\tonImageFrame,\n\t\tcrossOrigin,\n\t\t...props\n\t},\n\tref,\n) => {\n\tconst imageRef = useRef<HTMLImageElement>(null);\n\tconst errors = useRef<Record<string, number>>({});\n\tconst {delayPlayback} = useBufferState();\n\tconst sequenceContext = useContext(SequenceContext);\n\n\tif (!src) {\n\t\tthrow new Error('No \"src\" prop was passed to <Img>.');\n\t}\n\n\tconst _propsValid: IsExact<typeof props, Expected> = true;\n\n\tif (!_propsValid) {\n\t\tthrow new Error('typecheck error');\n\t}\n\n\tuseImperativeHandle(ref, () => {\n\t\treturn imageRef.current as HTMLImageElement;\n\t}, []);\n\n\tconst actualSrc = usePreload(src as string);\n\n\tconst retryIn = useCallback((timeout: number) => {\n\t\tif (!imageRef.current) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst currentSrc = imageRef.current.src;\n\n\t\tsetTimeout(() => {\n\t\t\tif (!imageRef.current) {\n\t\t\t\t// Component has been unmounted, do not retry\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst newSrc = imageRef.current?.src;\n\t\t\tif (newSrc !== currentSrc) {\n\t\t\t\t// src has changed, do not retry\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\timageRef.current.removeAttribute('src');\n\t\t\timageRef.current.setAttribute('src', newSrc);\n\t\t}, timeout);\n\t}, []);\n\n\tconst didGetError = useCallback(\n\t\t(e: React.SyntheticEvent<HTMLImageElement, Event>) => {\n\t\t\tif (!errors.current) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\terrors.current[imageRef.current?.src as string] =\n\t\t\t\t(errors.current[imageRef.current?.src as string] ?? 0) + 1;\n\t\t\tif (\n\t\t\t\tonError &&\n\t\t\t\t(errors.current[imageRef.current?.src as string] ?? 0) > maxRetries\n\t\t\t) {\n\t\t\t\tonError(e);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\t(errors.current[imageRef.current?.src as string] ?? 0) <= maxRetries\n\t\t\t) {\n\t\t\t\tconst backoff = exponentialBackoff(\n\t\t\t\t\terrors.current[imageRef.current?.src as string] ?? 0,\n\t\t\t\t);\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.warn(\n\t\t\t\t\t`Could not load image with source ${\n\t\t\t\t\t\timageRef.current?.src as string\n\t\t\t\t\t}, retrying again in ${backoff}ms`,\n\t\t\t\t);\n\n\t\t\t\tretryIn(backoff);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcancelRender(\n\t\t\t\t'Error loading image with src: ' + (imageRef.current?.src as string),\n\t\t\t);\n\t\t},\n\t\t[maxRetries, onError, retryIn],\n\t);\n\n\tconst {delayRender, continueRender} = useDelayRender();\n\n\tif (typeof window !== 'undefined') {\n\t\tconst isPremounting = Boolean(sequenceContext?.premounting);\n\t\tconst isPostmounting = Boolean(sequenceContext?.postmounting);\n\t\t// eslint-disable-next-line react-hooks/rules-of-hooks\n\t\tuseLayoutEffect(() => {\n\t\t\tif (window.process?.env?.NODE_ENV === 'test') {\n\t\t\t\tif (imageRef.current) {\n\t\t\t\t\timageRef.current.src = actualSrc;\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst {current} = imageRef;\n\t\t\tif (!current) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst newHandle = delayRender('Loading <Img> with src=' + actualSrc, {\n\t\t\t\tretries: delayRenderRetries ?? undefined,\n\t\t\t\ttimeoutInMilliseconds: delayRenderTimeoutInMilliseconds ?? undefined,\n\t\t\t});\n\t\t\tconst unblock =\n\t\t\t\tpauseWhenLoading && !isPremounting && !isPostmounting\n\t\t\t\t\t? delayPlayback().unblock\n\t\t\t\t\t: () => undefined;\n\n\t\t\tlet unmounted = false;\n\n\t\t\tconst onComplete = () => {\n\t\t\t\t// the decode() promise isn't cancelable -- it may still resolve after unmounting\n\t\t\t\tif (unmounted) {\n\t\t\t\t\tcontinueRender(newHandle);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif ((errors.current[imageRef.current?.src as string] ?? 0) > 0) {\n\t\t\t\t\tdelete errors.current[imageRef.current?.src as string];\n\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\tconsole.info(\n\t\t\t\t\t\t`Retry successful - ${\n\t\t\t\t\t\t\timageRef.current?.src as string\n\t\t\t\t\t\t} is now loaded`,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif (current) {\n\t\t\t\t\tonImageFrame?.(current);\n\t\t\t\t}\n\n\t\t\t\tunblock();\n\t\t\t\tcontinueRender(newHandle);\n\t\t\t};\n\n\t\t\tif (!imageRef.current) {\n\t\t\t\tonComplete();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcurrent.src = actualSrc;\n\t\t\tif (current.complete) {\n\t\t\t\tonComplete();\n\t\t\t} else {\n\t\t\t\tcurrent\n\t\t\t\t\t.decode()\n\t\t\t\t\t.then(onComplete)\n\t\t\t\t\t.catch((err) => {\n\t\t\t\t\t\t// fall back to onload event if decode() fails\n\t\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\t\tconsole.warn(err);\n\n\t\t\t\t\t\tif (current.complete) {\n\t\t\t\t\t\t\tonComplete();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcurrent.addEventListener('load', onComplete);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t}\n\n\t\t\t// If tag gets unmounted, clear pending handles because image is not going to load\n\t\t\treturn () => {\n\t\t\t\tunmounted = true;\n\t\t\t\tcurrent.removeEventListener('load', onComplete);\n\t\t\t\tunblock();\n\t\t\t\tcontinueRender(newHandle);\n\t\t\t};\n\t\t}, [\n\t\t\tactualSrc,\n\t\t\tdelayPlayback,\n\t\t\tdelayRenderRetries,\n\t\t\tdelayRenderTimeoutInMilliseconds,\n\t\t\tpauseWhenLoading,\n\t\t\tisPremounting,\n\t\t\tisPostmounting,\n\t\t\tonImageFrame,\n\t\t\tcontinueRender,\n\t\t\tdelayRender,\n\t\t]);\n\t}\n\n\tconst crossOriginValue = getCrossOriginValue({\n\t\tcrossOrigin,\n\t\trequestsVideoFrame: false,\n\t});\n\n\t// src gets set once we've loaded and decoded the image.\n\treturn (\n\t\t<img\n\t\t\t{...props}\n\t\t\tref={imageRef}\n\t\t\tcrossOrigin={crossOriginValue}\n\t\t\tonError={didGetError}\n\t\t/>\n\t);\n};\n\n/*\n * @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.\n * @see [Documentation](https://remotion.dev/docs/img)\n */\nexport const Img = forwardRef(ImgRefForwarding);\n",
|
|
103
|
-
"import {createRef} from 'react';\nimport {getAbsoluteSrc} from './absolute-src.js';\nimport {AudioForPreview} from './audio/AudioForPreview.js';\nimport {\n\tSharedAudioContext,\n\tSharedAudioContextProvider,\n} from './audio/shared-audio-tags.js';\nimport {\n\tuseFrameForVolumeProp,\n\tuseMediaStartsAt,\n} from './audio/use-audio-frame.js';\nimport {BufferingContextReact, BufferingProvider} from './buffering.js';\nimport {\n\tCanUseRemotionHooks,\n\tCanUseRemotionHooksProvider,\n} from './CanUseRemotionHooks.js';\nimport {type CompProps} from './Composition.js';\nimport type {\n\tTCompMetadata,\n\tTComposition,\n\tTRenderAsset,\n\tTSequence,\n} from './CompositionManager.js';\nimport {compositionsRef} from './CompositionManager.js';\nimport type {CompositionManagerContext} from './CompositionManagerContext.js';\nimport {\n\tCompositionManager,\n\tCompositionSetters,\n} from './CompositionManagerContext.js';\nimport * as CSSUtils from './default-css.js';\nimport {OBJECTFIT_CONTAIN_CLASS_NAME} from './default-css.js';\nimport {\n\tEditorPropsContext,\n\tEditorPropsProvider,\n\teditorPropsProviderRef,\n\ttimeValueRef,\n} from './EditorProps.js';\nimport {\n\taddSequenceStackTraces,\n\tenableSequenceStackTraces,\n} from './enable-sequence-stack-traces.js';\nimport {\n\tgetPreviewDomElement,\n\tREMOTION_STUDIO_CONTAINER_ELEMENT,\n} from './get-preview-dom-element.js';\nimport {getRemotionEnvironment} from './get-remotion-environment.js';\nimport type {SerializedJSONWithCustomFields} from './input-props-serialization.js';\nimport {IsPlayerContextProvider, useIsPlayer} from './is-player.js';\nimport type {LoggingContextValue} from './log-level-context.js';\nimport {LogLevelContext, useLogLevel} from './log-level-context.js';\nimport {NonceContext, SetNonceContext} from './nonce.js';\nimport {playbackLogging} from './playback-logging.js';\nimport {portalNode} from './portal-node.js';\nimport {PrefetchProvider} from './prefetch-state.js';\nimport {usePreload} from './prefetch.js';\nimport {getRoot, waitForRoot} from './register-root.js';\nimport type {RemotionEnvironment} from './remotion-environment-context.js';\nimport {RemotionEnvironmentContext} from './remotion-environment-context.js';\nimport {RemotionRoot} from './RemotionRoot.js';\nimport {RenderAssetManager} from './RenderAssetManager.js';\nimport {resolveVideoConfig} from './resolve-video-config.js';\nimport {\n\tPROPS_UPDATED_EXTERNALLY,\n\tResolveCompositionConfig,\n\tresolveCompositionsRef,\n\tuseResolvedVideoConfig,\n} from './ResolveCompositionConfig.js';\nimport {SequenceContext} from './SequenceContext.js';\nimport {\n\tSequenceManager,\n\tSequenceVisibilityToggleContext,\n} from './SequenceManager.js';\nimport {setupEnvVariables} from './setup-env-variables.js';\nimport type {\n\tSetTimelineContextValue,\n\tTimelineContextValue,\n} from './timeline-position-state.js';\nimport * as TimelinePosition from './timeline-position-state.js';\nimport {\n\tpersistCurrentFrame,\n\tuseTimelineSetFrame,\n} from './timeline-position-state.js';\nimport {truthy} from './truthy.js';\nimport {\n\tcalculateScale,\n\tCurrentScaleContext,\n\tPreviewSizeContext,\n} from './use-current-scale.js';\nimport {useLazyComponent} from './use-lazy-component.js';\nimport {useUnsafeVideoConfig} from './use-unsafe-video-config.js';\nimport {useVideo} from './use-video.js';\nimport {validateMediaProps} from './validate-media-props.js';\nimport {\n\tresolveTrimProps,\n\tvalidateMediaTrimProps,\n} from './validate-start-from-props.js';\nimport {validateRenderAsset} from './validation/validate-artifact.js';\nimport {\n\tinvalidCompositionErrorMessage,\n\tisCompositionIdValid,\n} from './validation/validate-composition-id.js';\nimport {DurationsContextProvider} from './video/duration-state.js';\nimport {isIosSafari} from './video/video-fragment.js';\nimport {VideoForPreview} from './video/VideoForPreview.js';\nimport type {\n\tMediaVolumeContextValue,\n\tSetMediaVolumeContextValue,\n} from './volume-position-state.js';\nimport {\n\tMediaVolumeContext,\n\tSetMediaVolumeContext,\n\tuseMediaMutedState,\n\tuseMediaVolumeState,\n} from './volume-position-state.js';\nimport {evaluateVolume} from './volume-prop.js';\nimport {warnAboutTooHighVolume} from './volume-safeguard.js';\nimport type {WatchRemotionStaticFilesPayload} from './watch-static-file.js';\nimport {WATCH_REMOTION_STATIC_FILES} from './watch-static-file.js';\nimport {\n\tRemotionContextProvider,\n\tuseRemotionContexts,\n} from './wrap-remotion-context.js';\n\n// needs to be in core package so gets deduplicated in studio\nconst compositionSelectorRef = createRef<{\n\texpandComposition: (compName: string) => void;\n\tselectComposition: (compName: string) => void;\n\ttoggleFolder: (folderName: string, parentName: string | null) => void;\n}>();\n\n// Mark them as Internals so use don't assume this is public\n// API and are less likely to use it\nexport const Internals = {\n\tuseUnsafeVideoConfig,\n\tuseFrameForVolumeProp,\n\tuseTimelinePosition: TimelinePosition.useTimelinePosition,\n\tevaluateVolume,\n\tgetAbsoluteSrc,\n\tTimeline: TimelinePosition,\n\tvalidateMediaTrimProps,\n\tvalidateMediaProps,\n\tresolveTrimProps,\n\tVideoForPreview,\n\tCompositionManager,\n\tCompositionSetters,\n\tSequenceManager,\n\tSequenceVisibilityToggleContext,\n\tRemotionRoot,\n\tuseVideo,\n\tgetRoot,\n\tuseMediaVolumeState,\n\tuseMediaMutedState,\n\tuseLazyComponent,\n\ttruthy,\n\tSequenceContext,\n\tuseRemotionContexts,\n\tRemotionContextProvider,\n\tCSSUtils,\n\tsetupEnvVariables,\n\tMediaVolumeContext,\n\tSetMediaVolumeContext,\n\tgetRemotionEnvironment,\n\tSharedAudioContext,\n\tSharedAudioContextProvider,\n\tinvalidCompositionErrorMessage,\n\tisCompositionIdValid,\n\tgetPreviewDomElement,\n\tcompositionsRef,\n\tportalNode,\n\twaitForRoot,\n\tCanUseRemotionHooksProvider,\n\tCanUseRemotionHooks,\n\tPrefetchProvider,\n\tDurationsContextProvider,\n\tIsPlayerContextProvider,\n\tuseIsPlayer,\n\tEditorPropsProvider,\n\tEditorPropsContext,\n\tusePreload,\n\tNonceContext,\n\tSetNonceContext,\n\tresolveVideoConfig,\n\tuseResolvedVideoConfig,\n\tresolveCompositionsRef,\n\tResolveCompositionConfig,\n\tREMOTION_STUDIO_CONTAINER_ELEMENT,\n\tRenderAssetManager,\n\tpersistCurrentFrame,\n\tuseTimelineSetFrame,\n\tisIosSafari,\n\tWATCH_REMOTION_STATIC_FILES,\n\taddSequenceStackTraces,\n\tuseMediaStartsAt,\n\tBufferingProvider,\n\tBufferingContextReact,\n\tenableSequenceStackTraces,\n\tCurrentScaleContext,\n\tPreviewSizeContext,\n\tcalculateScale,\n\teditorPropsProviderRef,\n\tPROPS_UPDATED_EXTERNALLY,\n\tvalidateRenderAsset,\n\tLogLevelContext,\n\tuseLogLevel,\n\tplaybackLogging,\n\ttimeValueRef,\n\tcompositionSelectorRef,\n\tRemotionEnvironmentContext,\n\twarnAboutTooHighVolume,\n\tAudioForPreview,\n\tOBJECTFIT_CONTAIN_CLASS_NAME,\n} as const;\n\nexport type {\n\tCompositionManagerContext,\n\tCompProps,\n\tLoggingContextValue,\n\tMediaVolumeContextValue,\n\tRemotionEnvironment,\n\tSerializedJSONWithCustomFields,\n\tSetMediaVolumeContextValue,\n\tSetTimelineContextValue,\n\tTCompMetadata,\n\tTComposition,\n\tTimelineContextValue,\n\tTRenderAsset,\n\tTSequence,\n\tWatchRemotionStaticFilesPayload,\n};\n",
|
|
104
|
-
"import type {ComponentType, LazyExoticComponent} from 'react';\nimport React, {\n\tuseCallback,\n\tuseImperativeHandle,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n} from 'react';\nimport type {AnyZodObject} from 'zod';\nimport type {CalculateMetadataFunction} from './Composition.js';\nimport type {\n\tBaseMetadata,\n\tCanvasContent,\n\tCompositionManagerContext,\n\tCompositionManagerSetters,\n} from './CompositionManagerContext.js';\nimport {\n\tCompositionManager,\n\tCompositionSetters,\n} from './CompositionManagerContext.js';\nimport type {TFolder} from './Folder.js';\nimport {RenderAssetManagerProvider} from './RenderAssetManager.js';\nimport {ResolveCompositionConfig} from './ResolveCompositionConfig.js';\nimport {SequenceManagerProvider} from './SequenceManager.js';\nimport {SharedAudioContextProvider} from './audio/shared-audio-tags.js';\nimport type {DownloadBehavior} from './download-behavior.js';\nimport type {InferProps, PropsIfHasProps} from './props-if-has-props.js';\n\nexport type TComposition<\n\tSchema extends AnyZodObject,\n\tProps extends Record<string, unknown>,\n> = {\n\twidth: number | undefined;\n\theight: number | undefined;\n\tfps: number | undefined;\n\tdurationInFrames: number | undefined;\n\tid: string;\n\tfolderName: string | null;\n\tparentFolderName: string | null;\n\tcomponent: LazyExoticComponent<ComponentType<Props>>;\n\tnonce: number;\n\tschema: Schema | null;\n\tcalculateMetadata: CalculateMetadataFunction<\n\t\tInferProps<Schema, Props>\n\t> | null;\n} & PropsIfHasProps<Schema, Props>;\n\nexport type AnyComposition = TComposition<\n\tAnyZodObject,\n\tRecord<string, unknown>\n>;\n\nexport type TCompMetadataWithCalcFunction<\n\tSchema extends AnyZodObject,\n\tProps extends Record<string, unknown>,\n> = Pick<\n\tTComposition<Schema, Props>,\n\t| 'id'\n\t| 'height'\n\t| 'width'\n\t| 'fps'\n\t| 'durationInFrames'\n\t| 'defaultProps'\n\t| 'calculateMetadata'\n>;\n\nexport type TCompMetadata<\n\tSchema extends AnyZodObject,\n\tProps extends Record<string, unknown>,\n> = Pick<\n\tTComposition<Schema, Props>,\n\t'id' | 'height' | 'width' | 'fps' | 'durationInFrames' | 'defaultProps'\n>;\n\nexport type AnyCompMetadata = TCompMetadata<\n\tAnyZodObject,\n\tRecord<string, unknown>\n>;\n\ntype EnhancedTSequenceData =\n\t| {\n\t\t\ttype: 'sequence';\n\t }\n\t| {\n\t\t\ttype: 'audio';\n\t\t\tsrc: string;\n\t\t\t// Volume is represented as a comma separated list - if it's a string\n\t\t\t// React can more efficiently update and will not rerender if anonymous functions\n\t\t\t// are passed.\n\t\t\t// If not a function was passed, a number is being used\n\t\t\tvolume: string | number;\n\t\t\tdoesVolumeChange: boolean;\n\t\t\tstartMediaFrom: number;\n\t\t\tplaybackRate: number;\n\t }\n\t| {\n\t\t\ttype: 'video';\n\t\t\tsrc: string;\n\t\t\tvolume: string | number;\n\t\t\tdoesVolumeChange: boolean;\n\t\t\tstartMediaFrom: number;\n\t\t\tplaybackRate: number;\n\t };\n\nexport type LoopDisplay = {\n\tnumberOfTimes: number;\n\tstartOffset: number;\n\tdurationInFrames: number;\n};\n\nexport type TSequence = {\n\tfrom: number;\n\tduration: number;\n\tid: string;\n\tdisplayName: string;\n\tparent: string | null;\n\trootId: string;\n\tshowInTimeline: boolean;\n\tnonce: number;\n\tloopDisplay: LoopDisplay | undefined;\n\tstack: string | null;\n\tpremountDisplay: number | null;\n\tpostmountDisplay: number | null;\n} & EnhancedTSequenceData;\n\nexport type AudioOrVideoAsset = {\n\ttype: 'audio' | 'video';\n\tsrc: string;\n\tid: string;\n\tframe: number;\n\tvolume: number;\n\tmediaFrame: number;\n\tplaybackRate: number;\n\ttoneFrequency: number | null;\n\taudioStartFrame: number;\n\taudioStreamIndex: number;\n};\n\nexport type InlineAudioAsset = {\n\ttype: 'inline-audio';\n\tid: string;\n\taudio: number[];\n\tframe: number;\n\tsampleRate: number;\n\tnumberOfChannels: number;\n\ttimestamp: number;\n\tduration: number;\n};\n\ntype DiscriminatedArtifact =\n\t| {\n\t\t\tcontentType: 'binary';\n\t\t\tcontent: string;\n\t }\n\t| {\n\t\t\tcontentType: 'text';\n\t\t\tcontent: string;\n\t }\n\t| {\n\t\t\tcontentType: 'thumbnail';\n\t };\n\nexport type ArtifactAsset = {\n\ttype: 'artifact';\n\tid: string;\n\tfilename: string;\n\tframe: number;\n\tdownloadBehavior: DownloadBehavior | null;\n} & DiscriminatedArtifact;\n\nexport type TRenderAsset = AudioOrVideoAsset | ArtifactAsset | InlineAudioAsset;\n\nexport const compositionsRef = React.createRef<{\n\tgetCompositions: () => AnyComposition[];\n}>();\n\nexport const CompositionManagerProvider: React.FC<{\n\treadonly children: React.ReactNode;\n\treadonly numberOfAudioTags: number;\n\treadonly onlyRenderComposition: string | null;\n\treadonly currentCompositionMetadata: BaseMetadata | null;\n\treadonly audioLatencyHint: AudioContextLatencyCategory;\n}> = ({\n\tchildren,\n\tnumberOfAudioTags,\n\tonlyRenderComposition,\n\tcurrentCompositionMetadata,\n\taudioLatencyHint,\n}) => {\n\t// Wontfix, expected to have\n\tconst [compositions, setCompositions] = useState<AnyComposition[]>([]);\n\tconst currentcompositionsRef = useRef<AnyComposition[]>(compositions);\n\tconst [folders, setFolders] = useState<TFolder[]>([]);\n\tconst [canvasContent, setCanvasContent] = useState<CanvasContent | null>(\n\t\tnull,\n\t);\n\n\tconst updateCompositions = useCallback(\n\t\t(updateComps: (comp: AnyComposition[]) => AnyComposition[]) => {\n\t\t\tsetCompositions((comps) => {\n\t\t\t\tconst updated = updateComps(comps);\n\t\t\t\tcurrentcompositionsRef.current = updated;\n\t\t\t\treturn updated;\n\t\t\t});\n\t\t},\n\t\t[],\n\t);\n\n\tconst registerComposition = useCallback(\n\t\t<Schema extends AnyZodObject, Props extends Record<string, unknown>>(\n\t\t\tcomp: TComposition<Schema, Props>,\n\t\t) => {\n\t\t\tupdateCompositions((comps) => {\n\t\t\t\tif (comps.find((c) => c.id === comp.id)) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`Multiple composition with id ${comp.id} are registered.`,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tconst value = [...comps, comp]\n\t\t\t\t\t.slice()\n\n\t\t\t\t\t.sort((a, b) => a.nonce - b.nonce) as AnyComposition[];\n\t\t\t\treturn value;\n\t\t\t});\n\t\t},\n\t\t[updateCompositions],\n\t);\n\n\tconst unregisterComposition = useCallback((id: string) => {\n\t\tsetCompositions((comps) => {\n\t\t\treturn comps.filter((c) => c.id !== id);\n\t\t});\n\t}, []);\n\n\tconst registerFolder = useCallback((name: string, parent: string | null) => {\n\t\tsetFolders((prevFolders) => {\n\t\t\treturn [\n\t\t\t\t...prevFolders,\n\t\t\t\t{\n\t\t\t\t\tname,\n\t\t\t\t\tparent,\n\t\t\t\t},\n\t\t\t];\n\t\t});\n\t}, []);\n\n\tconst unregisterFolder = useCallback(\n\t\t(name: string, parent: string | null) => {\n\t\t\tsetFolders((prevFolders) => {\n\t\t\t\treturn prevFolders.filter(\n\t\t\t\t\t(p) => !(p.name === name && p.parent === parent),\n\t\t\t\t);\n\t\t\t});\n\t\t},\n\t\t[],\n\t);\n\n\tuseImperativeHandle(compositionsRef, () => {\n\t\treturn {\n\t\t\tgetCompositions: () => currentcompositionsRef.current,\n\t\t};\n\t}, []);\n\n\tconst composition = compositions.find((c) =>\n\t\tcanvasContent?.type === 'composition'\n\t\t\t? c.id === canvasContent.compositionId\n\t\t\t: null,\n\t);\n\n\tconst updateCompositionDefaultProps = useCallback(\n\t\t(id: string, newDefaultProps: Record<string, unknown>) => {\n\t\t\tsetCompositions((comps) => {\n\t\t\t\tconst updated = comps.map((c) => {\n\t\t\t\t\tif (c.id === id) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...c,\n\t\t\t\t\t\t\tdefaultProps: newDefaultProps,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn c;\n\t\t\t\t});\n\n\t\t\t\treturn updated;\n\t\t\t});\n\t\t},\n\t\t[],\n\t);\n\n\tconst contextValue = useMemo((): CompositionManagerContext => {\n\t\treturn {\n\t\t\tcompositions,\n\t\t\tfolders,\n\t\t\tcurrentCompositionMetadata,\n\t\t\tcanvasContent,\n\t\t};\n\t}, [compositions, folders, currentCompositionMetadata, canvasContent]);\n\n\tconst setters = useMemo((): CompositionManagerSetters => {\n\t\treturn {\n\t\t\tregisterComposition,\n\t\t\tunregisterComposition,\n\t\t\tregisterFolder,\n\t\t\tunregisterFolder,\n\t\t\tsetCanvasContent,\n\t\t\tupdateCompositionDefaultProps,\n\t\t\tonlyRenderComposition,\n\t\t};\n\t}, [\n\t\tregisterComposition,\n\t\tregisterFolder,\n\t\tunregisterComposition,\n\t\tunregisterFolder,\n\t\tupdateCompositionDefaultProps,\n\t\tonlyRenderComposition,\n\t]);\n\n\treturn (\n\t\t<CompositionManager.Provider value={contextValue}>\n\t\t\t<CompositionSetters.Provider value={setters}>\n\t\t\t\t<SequenceManagerProvider>\n\t\t\t\t\t<RenderAssetManagerProvider>\n\t\t\t\t\t\t<ResolveCompositionConfig>\n\t\t\t\t\t\t\t<SharedAudioContextProvider\n\t\t\t\t\t\t\t\tnumberOfAudioTags={numberOfAudioTags}\n\t\t\t\t\t\t\t\tcomponent={composition?.component ?? null}\n\t\t\t\t\t\t\t\taudioLatencyHint={audioLatencyHint}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t</SharedAudioContextProvider>\n\t\t\t\t\t\t</ResolveCompositionConfig>\n\t\t\t\t\t</RenderAssetManagerProvider>\n\t\t\t\t</SequenceManagerProvider>\n\t\t\t</CompositionSetters.Provider>\n\t\t</CompositionManager.Provider>\n\t);\n};\n",
|
|
105
|
-
"const injected: {[key: string]: boolean} = {};\n\nexport const injectCSS = (css: string) => {\n\t// Skip in node\n\tif (typeof document === 'undefined') {\n\t\treturn;\n\t}\n\n\tif (injected[css]) {\n\t\treturn;\n\t}\n\n\tconst head = document.head || document.getElementsByTagName('head')[0];\n\tconst style = document.createElement('style');\n\n\tstyle.appendChild(document.createTextNode(css));\n\n\thead.prepend(style);\n\tinjected[css] = true;\n};\n\n// make object-fit: contain low priority, so it can be overridden by another class name\nexport const OBJECTFIT_CONTAIN_CLASS_NAME = '__remotion_objectfitcontain';\n\nexport const makeDefaultPreviewCSS = (\n\tscope: string | null,\n\tbackgroundColor: string,\n) => {\n\tif (!scope) {\n\t\treturn `\n * {\n box-sizing: border-box;\n }\n body {\n margin: 0;\n\t background-color: ${backgroundColor};\n }\n .${OBJECTFIT_CONTAIN_CLASS_NAME} {\n object-fit: contain;\n }\n `;\n\t}\n\n\treturn `\n ${scope} * {\n box-sizing: border-box;\n }\n ${scope} *:-webkit-full-screen {\n width: 100%;\n height: 100%;\n }\n ${scope} .${OBJECTFIT_CONTAIN_CLASS_NAME} {\n object-fit: contain;\n }\n `;\n};\n",
|
|
106
|
-
"export const REMOTION_STUDIO_CONTAINER_ELEMENT = '__remotion-studio-container';\n\nexport const getPreviewDomElement = () => {\n\treturn document.getElementById(REMOTION_STUDIO_CONTAINER_ELEMENT);\n};\n",
|
|
107
|
-
"import type React from 'react';\n\nlet Root: React.FC | null = null;\n\nlet listeners: ((comp: React.FC) => void)[] = [];\n\n/*\n * @description Registers the root component of the Remotion project.\n * @see [Documentation](https://www.remotion.dev/docs/register-root)\n */\nexport const registerRoot = (comp: React.FC) => {\n\tif (!comp) {\n\t\tthrow new Error(\n\t\t\t`You must pass a React component to registerRoot(), but ${JSON.stringify(\n\t\t\t\tcomp,\n\t\t\t)} was passed.`,\n\t\t);\n\t}\n\n\tif (Root) {\n\t\tthrow new Error('registerRoot() was called more than once.');\n\t}\n\n\tRoot = comp;\n\tlisteners.forEach((l) => {\n\t\tl(comp);\n\t});\n};\n\nexport const getRoot = () => {\n\treturn Root;\n};\n\nexport const waitForRoot = (fn: (comp: React.FC) => void): (() => void) => {\n\tif (Root) {\n\t\tfn(Root);\n\t\treturn () => undefined;\n\t}\n\n\tlisteners.push(fn);\n\n\treturn () => {\n\t\tlisteners = listeners.filter((l) => l !== fn);\n\t};\n};\n",
|
|
108
|
-
"import React, {\n\tuseEffect,\n\tuseLayoutEffect,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n} from 'react';\nimport {CompositionManagerProvider} from './CompositionManager.js';\nimport type {BaseMetadata} from './CompositionManagerContext.js';\nimport {EditorPropsProvider} from './EditorProps.js';\nimport {BufferingProvider} from './buffering.js';\nimport type {LoggingContextValue} from './log-level-context.js';\nimport {LogLevelContext} from './log-level-context.js';\nimport type {LogLevel} from './log.js';\nimport type {TNonceContext, TSetNonceContext} from './nonce.js';\nimport {NonceContext, SetNonceContext} from './nonce.js';\nimport {PrefetchProvider} from './prefetch-state.js';\nimport {random} from './random.js';\nimport type {\n\tPlayableMediaTag,\n\tSetTimelineContextValue,\n\tTimelineContextValue,\n} from './timeline-position-state.js';\nimport {\n\tSetTimelineContext,\n\tTimelineContext,\n\tgetInitialFrameState,\n} from './timeline-position-state.js';\nimport {useDelayRender} from './use-delay-render.js';\nimport {DurationsContextProvider} from './video/duration-state.js';\n\ndeclare const __webpack_module__: {\n\thot: {\n\t\taddStatusHandler(callback: (status: string) => void): void;\n\t};\n};\n\nexport const RemotionRoot: React.FC<{\n\treadonly children: React.ReactNode;\n\treadonly numberOfAudioTags: number;\n\treadonly logLevel: LogLevel;\n\treadonly onlyRenderComposition: string | null;\n\treadonly currentCompositionMetadata: BaseMetadata | null;\n\treadonly audioLatencyHint: AudioContextLatencyCategory;\n}> = ({\n\tchildren,\n\tnumberOfAudioTags,\n\tlogLevel,\n\tonlyRenderComposition,\n\tcurrentCompositionMetadata,\n\taudioLatencyHint,\n}) => {\n\tconst [remotionRootId] = useState(() => String(random(null)));\n\tconst [frame, setFrame] = useState<Record<string, number>>(() =>\n\t\tgetInitialFrameState(),\n\t);\n\tconst [playing, setPlaying] = useState<boolean>(false);\n\tconst imperativePlaying = useRef<boolean>(false);\n\tconst [fastRefreshes, setFastRefreshes] = useState(0);\n\tconst [manualRefreshes, setManualRefreshes] = useState(0);\n\tconst [playbackRate, setPlaybackRate] = useState(1);\n\tconst audioAndVideoTags = useRef<PlayableMediaTag[]>([]);\n\tconst {delayRender, continueRender} = useDelayRender();\n\n\tif (typeof window !== 'undefined') {\n\t\t// eslint-disable-next-line react-hooks/rules-of-hooks\n\t\tuseLayoutEffect(() => {\n\t\t\twindow.remotion_setFrame = (f: number, composition: string, attempt) => {\n\t\t\t\twindow.remotion_attempt = attempt;\n\t\t\t\tconst id = delayRender(`Setting the current frame to ${f}`);\n\n\t\t\t\tlet asyncUpdate = true;\n\n\t\t\t\tsetFrame((s) => {\n\t\t\t\t\tconst currentFrame = s[composition] ?? window.remotion_initialFrame;\n\t\t\t\t\t// Avoid cloning the object\n\t\t\t\t\tif (currentFrame === f) {\n\t\t\t\t\t\tasyncUpdate = false;\n\t\t\t\t\t\treturn s;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...s,\n\t\t\t\t\t\t[composition]: f,\n\t\t\t\t\t};\n\t\t\t\t});\n\n\t\t\t\t// After setting the state, need to wait until it is applied in the next cycle\n\t\t\t\tif (asyncUpdate) {\n\t\t\t\t\trequestAnimationFrame(() => continueRender(id));\n\t\t\t\t} else {\n\t\t\t\t\tcontinueRender(id);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\twindow.remotion_isPlayer = false;\n\t\t}, [continueRender, delayRender]);\n\t}\n\n\tconst timelineContextValue = useMemo((): TimelineContextValue => {\n\t\treturn {\n\t\t\tframe,\n\t\t\tplaying,\n\t\t\timperativePlaying,\n\t\t\trootId: remotionRootId,\n\t\t\tplaybackRate,\n\t\t\tsetPlaybackRate,\n\t\t\taudioAndVideoTags,\n\t\t};\n\t}, [frame, playbackRate, playing, remotionRootId]);\n\n\tconst setTimelineContextValue = useMemo((): SetTimelineContextValue => {\n\t\treturn {\n\t\t\tsetFrame,\n\t\t\tsetPlaying,\n\t\t};\n\t}, []);\n\n\tconst nonceContext = useMemo((): TNonceContext => {\n\t\tlet counter = 0;\n\t\treturn {\n\t\t\tgetNonce: () => counter++,\n\t\t\tfastRefreshes,\n\t\t\tmanualRefreshes,\n\t\t};\n\t}, [fastRefreshes, manualRefreshes]);\n\n\tconst setNonceContext = useMemo((): TSetNonceContext => {\n\t\treturn {\n\t\t\tincreaseManualRefreshes: () => {\n\t\t\t\tsetManualRefreshes((i) => i + 1);\n\t\t\t},\n\t\t};\n\t}, []);\n\n\tuseEffect(() => {\n\t\tif (typeof __webpack_module__ !== 'undefined') {\n\t\t\tif (__webpack_module__.hot) {\n\t\t\t\t__webpack_module__.hot.addStatusHandler((status) => {\n\t\t\t\t\tif (status === 'idle') {\n\t\t\t\t\t\tsetFastRefreshes((i) => i + 1);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}, []);\n\n\tconst logging: LoggingContextValue = useMemo(() => {\n\t\treturn {logLevel, mountTime: Date.now()};\n\t}, [logLevel]);\n\n\treturn (\n\t\t<LogLevelContext.Provider value={logging}>\n\t\t\t<NonceContext.Provider value={nonceContext}>\n\t\t\t\t<SetNonceContext.Provider value={setNonceContext}>\n\t\t\t\t\t<TimelineContext.Provider value={timelineContextValue}>\n\t\t\t\t\t\t<SetTimelineContext.Provider value={setTimelineContextValue}>\n\t\t\t\t\t\t\t<EditorPropsProvider>\n\t\t\t\t\t\t\t\t<PrefetchProvider>\n\t\t\t\t\t\t\t\t\t<CompositionManagerProvider\n\t\t\t\t\t\t\t\t\t\tnumberOfAudioTags={numberOfAudioTags}\n\t\t\t\t\t\t\t\t\t\tonlyRenderComposition={onlyRenderComposition}\n\t\t\t\t\t\t\t\t\t\tcurrentCompositionMetadata={currentCompositionMetadata}\n\t\t\t\t\t\t\t\t\t\taudioLatencyHint={audioLatencyHint}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<DurationsContextProvider>\n\t\t\t\t\t\t\t\t\t\t\t<BufferingProvider>{children}</BufferingProvider>\n\t\t\t\t\t\t\t\t\t\t</DurationsContextProvider>\n\t\t\t\t\t\t\t\t\t</CompositionManagerProvider>\n\t\t\t\t\t\t\t\t</PrefetchProvider>\n\t\t\t\t\t\t\t</EditorPropsProvider>\n\t\t\t\t\t\t</SetTimelineContext.Provider>\n\t\t\t\t\t</TimelineContext.Provider>\n\t\t\t\t</SetNonceContext.Provider>\n\t\t\t</NonceContext.Provider>\n\t\t</LogLevelContext.Provider>\n\t);\n};\n",
|
|
109
|
-
"import {getRemotionEnvironment} from './get-remotion-environment.js';\n\n// https://github.com/remotion-dev/remotion/issues/3412#issuecomment-1910120552\n\nfunction getEnvVar() {\n\tconst parts = ['proc', 'ess', '.', 'en', 'v', '.', 'NOD', 'E_EN', 'V'];\n\treturn parts.join('');\n}\n\nconst getEnvVariables = (): Record<string, string> => {\n\tif (getRemotionEnvironment().isRendering) {\n\t\tconst param = window.remotion_envVariables;\n\t\tif (!param) {\n\t\t\treturn {};\n\t\t}\n\n\t\treturn {...JSON.parse(param), NODE_ENV: process.env.NODE_ENV};\n\t}\n\n\t// For the Studio, we already set the environment variables in index-html.ts.\n\t// We just add NODE_ENV here.\n\tif (!process.env.NODE_ENV) {\n\t\tthrow new Error(`${getEnvVar()} is not set`);\n\t}\n\n\treturn {\n\t\tNODE_ENV: process.env.NODE_ENV,\n\t};\n};\n\nexport const setupEnvVariables = () => {\n\tconst env = getEnvVariables();\n\tif (!window.process) {\n\t\twindow.process = {} as NodeJS.Process;\n\t}\n\n\tif (!window.process.env) {\n\t\twindow.process.env = {};\n\t}\n\n\tObject.keys(env).forEach((key) => {\n\t\twindow.process.env[key] = env[key];\n\t});\n};\n",
|
|
110
|
-
"import React, {createContext} from 'react';\nimport {useRemotionEnvironment} from './use-remotion-environment';\nimport {useUnsafeVideoConfig} from './use-unsafe-video-config';\n\ntype Size = {\n\twidth: number;\n\theight: number;\n\tleft: number;\n\ttop: number;\n\twindowSize: {\n\t\twidth: number;\n\t\theight: number;\n\t};\n\trefresh: () => void;\n};\n\nexport type CurrentScaleContextType =\n\t| {\n\t\t\ttype: 'scale';\n\t\t\tscale: number;\n\t }\n\t| {\n\t\t\ttype: 'canvas-size';\n\t\t\tcanvasSize: Size;\n\t };\n\nexport const CurrentScaleContext =\n\tReact.createContext<CurrentScaleContextType | null>(null);\n\ntype Options = {\n\tdontThrowIfOutsideOfRemotion: boolean;\n};\n\nexport type Translation = {\n\tx: number;\n\ty: number;\n};\n\nexport type PreviewSize = {\n\tsize: number | 'auto';\n\ttranslation: Translation;\n};\n\nexport type PreviewSizeCtx = {\n\tsize: PreviewSize;\n\tsetSize: (cb: (oldSize: PreviewSize) => PreviewSize) => void;\n};\n\nexport const PreviewSizeContext = createContext<PreviewSizeCtx>({\n\tsetSize: () => undefined,\n\tsize: {size: 'auto', translation: {x: 0, y: 0}},\n});\n\nexport const calculateScale = ({\n\tcanvasSize,\n\tcompositionHeight,\n\tcompositionWidth,\n\tpreviewSize,\n}: {\n\tpreviewSize: PreviewSize['size'];\n\tcompositionWidth: number;\n\tcompositionHeight: number;\n\tcanvasSize: {width: number; height: number};\n}) => {\n\tconst heightRatio = canvasSize.height / compositionHeight;\n\tconst widthRatio = canvasSize.width / compositionWidth;\n\n\tconst ratio = Math.min(heightRatio, widthRatio);\n\n\tif (previewSize === 'auto') {\n\t\t// Container may be 0x0 because it doesn't have any content yet.\n\t\tif (ratio === 0) {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn ratio;\n\t}\n\n\treturn Number(previewSize);\n};\n\n/*\n * @description Retrieves the current scale of the canvas within Remotion's Studio or Player context. In the Studio, it corresponds to the zoom level (1 equals no scaling, i.e., 100% zoom). In the Player, it indicates the scaling necessary to fit the video into the player. If called outside of a Remotion context, by default, it throws an error unless configured not to.\n * @see [Documentation](https://www.remotion.dev/docs/use-current-scale)\n */\nexport const useCurrentScale = (options?: Options) => {\n\tconst hasContext = React.useContext(CurrentScaleContext);\n\tconst zoomContext = React.useContext(PreviewSizeContext);\n\tconst config = useUnsafeVideoConfig();\n\tconst env = useRemotionEnvironment();\n\n\tif (hasContext === null || config === null || zoomContext === null) {\n\t\tif (options?.dontThrowIfOutsideOfRemotion) {\n\t\t\treturn 1;\n\t\t}\n\n\t\tif (env.isRendering) {\n\t\t\treturn 1;\n\t\t}\n\n\t\tthrow new Error(\n\t\t\t[\n\t\t\t\t'useCurrentScale() was called outside of a Remotion context.',\n\t\t\t\t'This hook can only be called in a component that is being rendered by Remotion.',\n\t\t\t\t'If you want to this hook to return 1 outside of Remotion, pass {dontThrowIfOutsideOfRemotion: true} as an option.',\n\t\t\t\t'If you think you called this hook in a Remotion component, make sure all versions of Remotion are aligned.',\n\t\t\t].join('\\n'),\n\t\t);\n\t}\n\n\tif (hasContext.type === 'scale') {\n\t\treturn hasContext.scale;\n\t}\n\n\treturn calculateScale({\n\t\tcanvasSize: hasContext.canvasSize,\n\t\tcompositionHeight: config.height,\n\t\tcompositionWidth: config.width,\n\t\tpreviewSize: zoomContext.size.size,\n\t});\n};\n",
|
|
111
|
-
"import React, {\n\tforwardRef,\n\tuseContext,\n\tuseEffect,\n\tuseImperativeHandle,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n} from 'react';\nimport {SequenceContext} from '../SequenceContext.js';\nimport {SequenceVisibilityToggleContext} from '../SequenceManager.js';\nimport type {IsExact} from '../audio/props.js';\nimport {SharedAudioContext} from '../audio/shared-audio-tags.js';\nimport {makeSharedElementSourceNode} from '../audio/shared-element-source-node.js';\nimport {useFrameForVolumeProp} from '../audio/use-audio-frame.js';\nimport {getCrossOriginValue} from '../get-cross-origin-value.js';\nimport {useLogLevel, useMountTime} from '../log-level-context.js';\nimport {playbackLogging} from '../playback-logging.js';\nimport {usePreload} from '../prefetch.js';\nimport {useVolume} from '../use-amplification.js';\nimport {useMediaInTimeline} from '../use-media-in-timeline.js';\nimport {useMediaPlayback} from '../use-media-playback.js';\nimport {useVideoConfig} from '../use-video-config.js';\nimport {VERSION} from '../version.js';\nimport {\n\tuseMediaMutedState,\n\tuseMediaVolumeState,\n} from '../volume-position-state.js';\nimport {evaluateVolume} from '../volume-prop.js';\nimport {warnAboutTooHighVolume} from '../volume-safeguard.js';\nimport {useEmitVideoFrame} from './emit-video-frame.js';\nimport type {NativeVideoProps, OnVideoFrame, RemotionVideoProps} from './props';\nimport {isIosSafari, useAppendVideoFragment} from './video-fragment.js';\n\ntype VideoForPreviewProps = RemotionVideoProps & {\n\treadonly onlyWarnForMediaSeekingError: boolean;\n\treadonly onDuration: (src: string, durationInSeconds: number) => void;\n\treadonly pauseWhenBuffering: boolean;\n\treadonly _remotionInternalNativeLoopPassed: boolean;\n\treadonly _remotionInternalStack: string | null;\n\treadonly showInTimeline: boolean;\n\treadonly onVideoFrame: null | OnVideoFrame;\n\treadonly crossOrigin?: '' | 'anonymous' | 'use-credentials';\n};\n\ntype Expected = Omit<\n\tNativeVideoProps,\n\t'crossOrigin' | 'src' | 'name' | 'muted' | 'style'\n>;\n\nconst VideoForDevelopmentRefForwardingFunction: React.ForwardRefRenderFunction<\n\tHTMLVideoElement,\n\tVideoForPreviewProps\n> = (props, ref) => {\n\tconst context = useContext(SharedAudioContext);\n\tif (!context) {\n\t\tthrow new Error('SharedAudioContext not found');\n\t}\n\n\tconst videoRef = useRef<HTMLVideoElement | null>(null);\n\tconst sharedSource = useMemo(() => {\n\t\tif (!context.audioContext) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn makeSharedElementSourceNode({\n\t\t\taudioContext: context.audioContext,\n\t\t\tref: videoRef,\n\t\t});\n\t}, [context.audioContext]);\n\n\tconst {\n\t\tvolume,\n\t\tmuted,\n\t\tplaybackRate,\n\t\tonlyWarnForMediaSeekingError,\n\t\tsrc,\n\t\tonDuration,\n\t\t// @ts-expect-error\n\t\tacceptableTimeShift,\n\t\tacceptableTimeShiftInSeconds,\n\t\ttoneFrequency,\n\t\tname,\n\t\t_remotionInternalNativeLoopPassed,\n\t\t_remotionInternalStack,\n\t\tstyle,\n\t\tpauseWhenBuffering,\n\t\tshowInTimeline,\n\t\tloopVolumeCurveBehavior,\n\t\tonError,\n\t\tonAutoPlayError,\n\t\tonVideoFrame,\n\t\tcrossOrigin,\n\t\tdelayRenderRetries,\n\t\tdelayRenderTimeoutInMilliseconds,\n\t\tallowAmplificationDuringRender,\n\t\tuseWebAudioApi,\n\t\taudioStreamIndex,\n\t\t...nativeProps\n\t} = props;\n\n\tconst _propsValid: IsExact<typeof nativeProps, Expected> = true;\n\n\tif (!_propsValid) {\n\t\tthrow new Error('typecheck error');\n\t}\n\n\tconst volumePropFrame = useFrameForVolumeProp(\n\t\tloopVolumeCurveBehavior ?? 'repeat',\n\t);\n\tconst {fps, durationInFrames} = useVideoConfig();\n\tconst parentSequence = useContext(SequenceContext);\n\tconst {hidden} = useContext(SequenceVisibilityToggleContext);\n\tconst logLevel = useLogLevel();\n\tconst mountTime = useMountTime();\n\n\tconst [timelineId] = useState(() => String(Math.random()));\n\tconst isSequenceHidden = hidden[timelineId] ?? false;\n\n\tif (typeof acceptableTimeShift !== 'undefined') {\n\t\tthrow new Error(\n\t\t\t'acceptableTimeShift has been removed. Use acceptableTimeShiftInSeconds instead.',\n\t\t);\n\t}\n\n\tconst [mediaVolume] = useMediaVolumeState();\n\tconst [mediaMuted] = useMediaMutedState();\n\n\tconst userPreferredVolume = evaluateVolume({\n\t\tframe: volumePropFrame,\n\t\tvolume,\n\t\tmediaVolume,\n\t});\n\n\twarnAboutTooHighVolume(userPreferredVolume);\n\n\tuseMediaInTimeline({\n\t\tmediaRef: videoRef,\n\t\tvolume,\n\t\tmediaVolume,\n\t\tmediaType: 'video',\n\t\tsrc,\n\t\tplaybackRate: props.playbackRate ?? 1,\n\t\tdisplayName: name ?? null,\n\t\tid: timelineId,\n\t\tstack: _remotionInternalStack,\n\t\tshowInTimeline,\n\t\tpremountDisplay: null,\n\t\tpostmountDisplay: null,\n\t\tonAutoPlayError: onAutoPlayError ?? null,\n\t\tisPremounting: Boolean(parentSequence?.premounting),\n\t\tisPostmounting: Boolean(parentSequence?.postmounting),\n\t});\n\n\t// putting playback before useVolume\n\t// because volume looks at playbackrate\n\tuseMediaPlayback({\n\t\tmediaRef: videoRef,\n\t\tsrc,\n\t\tmediaType: 'video',\n\t\tplaybackRate: props.playbackRate ?? 1,\n\t\tonlyWarnForMediaSeekingError,\n\t\tacceptableTimeshift: acceptableTimeShiftInSeconds ?? null,\n\t\tisPremounting: Boolean(parentSequence?.premounting),\n\t\tisPostmounting: Boolean(parentSequence?.postmounting),\n\t\tpauseWhenBuffering,\n\t\tonAutoPlayError: onAutoPlayError ?? null,\n\t});\n\n\tuseVolume({\n\t\tlogLevel,\n\t\tmediaRef: videoRef,\n\t\tvolume: userPreferredVolume,\n\t\tsource: sharedSource,\n\t\tshouldUseWebAudioApi: useWebAudioApi ?? false,\n\t});\n\n\tconst actualFrom = parentSequence ? parentSequence.relativeFrom : 0;\n\tconst duration = parentSequence\n\t\t? Math.min(parentSequence.durationInFrames, durationInFrames)\n\t\t: durationInFrames;\n\n\tconst preloadedSrc = usePreload(src as string);\n\n\tconst actualSrc = useAppendVideoFragment({\n\t\tactualSrc: preloadedSrc,\n\t\tactualFrom,\n\t\tduration,\n\t\tfps,\n\t});\n\n\tuseImperativeHandle(ref, () => {\n\t\treturn videoRef.current as HTMLVideoElement;\n\t}, []);\n\n\tuseState(() =>\n\t\tplaybackLogging({\n\t\t\tlogLevel,\n\t\t\tmessage: `Mounting video with source = ${actualSrc}, v=${VERSION}, user agent=${\n\t\t\t\ttypeof navigator === 'undefined' ? 'server' : navigator.userAgent\n\t\t\t}`,\n\t\t\ttag: 'video',\n\t\t\tmountTime,\n\t\t}),\n\t);\n\n\tuseEffect(() => {\n\t\tconst {current} = videoRef;\n\t\tif (!current) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst errorHandler = () => {\n\t\t\tif (current.error) {\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.error('Error occurred in video', current?.error);\n\n\t\t\t\t// If user is handling the error, we don't cause an unhandled exception\n\t\t\t\tif (onError) {\n\t\t\t\t\tconst err = new Error(\n\t\t\t\t\t\t`Code ${current.error.code}: ${current.error.message}`,\n\t\t\t\t\t);\n\t\t\t\t\tonError(err);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`The browser threw an error while playing the video ${src}: Code ${current.error.code} - ${current?.error?.message}. See https://remotion.dev/docs/media-playback-error for help. Pass an onError() prop to handle the error.`,\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\t// If user is handling the error, we don't cause an unhandled exception\n\t\t\t\tif (onError) {\n\t\t\t\t\tconst err = new Error(\n\t\t\t\t\t\t`The browser threw an error while playing the video ${src}`,\n\t\t\t\t\t);\n\t\t\t\t\tonError(err);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthrow new Error('The browser threw an error while playing the video');\n\t\t\t}\n\t\t};\n\n\t\tcurrent.addEventListener('error', errorHandler, {once: true});\n\t\treturn () => {\n\t\t\tcurrent.removeEventListener('error', errorHandler);\n\t\t};\n\t}, [onError, src]);\n\n\tconst currentOnDurationCallback =\n\t\tuseRef<VideoForPreviewProps['onDuration']>(onDuration);\n\tcurrentOnDurationCallback.current = onDuration;\n\n\tuseEmitVideoFrame({ref: videoRef, onVideoFrame});\n\n\tuseEffect(() => {\n\t\tconst {current} = videoRef;\n\t\tif (!current) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (current.duration) {\n\t\t\tcurrentOnDurationCallback.current?.(src as string, current.duration);\n\t\t\treturn;\n\t\t}\n\n\t\tconst onLoadedMetadata = () => {\n\t\t\tcurrentOnDurationCallback.current?.(src as string, current.duration);\n\t\t};\n\n\t\tcurrent.addEventListener('loadedmetadata', onLoadedMetadata);\n\t\treturn () => {\n\t\t\tcurrent.removeEventListener('loadedmetadata', onLoadedMetadata);\n\t\t};\n\t}, [src]);\n\n\tuseEffect(() => {\n\t\tconst {current} = videoRef;\n\n\t\tif (!current) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Without this, on iOS Safari, the video cannot be seeked.\n\t\t// if a seek is triggered before `loadedmetadata` is fired,\n\t\t// the video will not seek, even if `loadedmetadata` is fired afterwards.\n\n\t\t// Also, this needs to happen in a useEffect, because otherwise\n\t\t// the SSR props will be applied.\n\n\t\tif (isIosSafari()) {\n\t\t\tcurrent.preload = 'metadata';\n\t\t} else {\n\t\t\tcurrent.preload = 'auto';\n\t\t}\n\t}, []);\n\n\tconst actualStyle: React.CSSProperties = useMemo(() => {\n\t\treturn {\n\t\t\t...style,\n\t\t\topacity: isSequenceHidden ? 0 : (style?.opacity ?? 1),\n\t\t};\n\t}, [isSequenceHidden, style]);\n\n\tconst crossOriginValue = getCrossOriginValue({\n\t\tcrossOrigin,\n\t\trequestsVideoFrame: Boolean(onVideoFrame),\n\t});\n\n\treturn (\n\t\t<video\n\t\t\tref={videoRef}\n\t\t\tmuted={\n\t\t\t\tmuted || mediaMuted || isSequenceHidden || userPreferredVolume <= 0\n\t\t\t}\n\t\t\tplaysInline\n\t\t\tsrc={actualSrc}\n\t\t\tloop={_remotionInternalNativeLoopPassed}\n\t\t\tstyle={actualStyle}\n\t\t\tdisableRemotePlayback\n\t\t\tcrossOrigin={crossOriginValue}\n\t\t\t{...nativeProps}\n\t\t/>\n\t);\n};\n\nexport const VideoForPreview = forwardRef(\n\tVideoForDevelopmentRefForwardingFunction,\n);\n",
|
|
112
|
-
"import {useEffect} from 'react';\nimport type {OnVideoFrame} from './props';\n\nexport const useEmitVideoFrame = ({\n\tref,\n\tonVideoFrame,\n}: {\n\tref: React.RefObject<HTMLVideoElement | null>;\n\tonVideoFrame: OnVideoFrame | null;\n}) => {\n\tuseEffect(() => {\n\t\tconst {current} = ref;\n\t\tif (!current) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!onVideoFrame) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet handle = 0;\n\t\tconst callback = () => {\n\t\t\tif (!ref.current) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tonVideoFrame(ref.current);\n\t\t\thandle = ref.current.requestVideoFrameCallback(callback);\n\t\t};\n\n\t\tcallback();\n\n\t\treturn () => {\n\t\t\tcurrent.cancelVideoFrameCallback(handle);\n\t\t};\n\t}, [onVideoFrame, ref]);\n};\n",
|
|
113
|
-
"import {getRemotionEnvironment} from './get-remotion-environment';\nimport type {StaticFile} from './get-static-files';\nimport {ENABLE_V5_BREAKING_CHANGES} from './v5-flag';\n\ntype WatcherCallback = (newData: StaticFile | null) => void;\n\nexport const WATCH_REMOTION_STATIC_FILES = 'remotion_staticFilesChanged';\n\nexport type WatchRemotionStaticFilesPayload = {\n\tfiles: StaticFile[];\n};\n\n/*\n * @description Watches for changes in a specific static file and invokes a callback function when the file changes, enabling dynamic updates in your Remotion projects.\n * @see [Documentation](https://www.remotion.dev/docs/watchstaticfile)\n */\nexport const watchStaticFile = (\n\tfileName: string,\n\tcallback: WatcherCallback,\n): {cancel: () => void} => {\n\tif (ENABLE_V5_BREAKING_CHANGES) {\n\t\tthrow new Error(\n\t\t\t'watchStaticFile() has moved into the `@remotion/studio` package. Update your imports.',\n\t\t);\n\t}\n\n\t// Check if function is called in Remotion Studio\n\tif (!getRemotionEnvironment().isStudio) {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.warn(\n\t\t\t'The watchStaticFile() API is only available while using the Remotion Studio.',\n\t\t);\n\t\treturn {cancel: () => undefined};\n\t}\n\n\tconst withoutStaticBase = fileName.startsWith(window.remotion_staticBase)\n\t\t? fileName.replace(window.remotion_staticBase, '')\n\t\t: fileName;\n\tconst withoutLeadingSlash = withoutStaticBase.startsWith('/')\n\t\t? withoutStaticBase.slice(1)\n\t\t: withoutStaticBase;\n\n\tlet prevFileData = window.remotion_staticFiles.find(\n\t\t(file: StaticFile) => file.name === withoutLeadingSlash,\n\t);\n\n\t// Check if the specified static file has updated or deleted\n\tconst checkFile = (event: Event) => {\n\t\tconst staticFiles: StaticFile[] = (\n\t\t\t(event as CustomEvent).detail as WatchRemotionStaticFilesPayload\n\t\t).files;\n\n\t\t// Check for user specified file\n\t\tconst newFileData = staticFiles.find(\n\t\t\t(file: StaticFile) => file.name === withoutLeadingSlash,\n\t\t);\n\n\t\tif (!newFileData) {\n\t\t\t// File is deleted\n\t\t\tif (prevFileData !== undefined) {\n\t\t\t\tcallback(null);\n\t\t\t}\n\n\t\t\tprevFileData = undefined;\n\t\t\treturn;\n\t\t}\n\n\t\tif (\n\t\t\tprevFileData === undefined ||\n\t\t\tprevFileData.lastModified !== newFileData.lastModified\n\t\t) {\n\t\t\tcallback(newFileData); // File is added or modified\n\t\t\tprevFileData = newFileData;\n\t\t}\n\t};\n\n\twindow.addEventListener(WATCH_REMOTION_STATIC_FILES, checkFile);\n\n\tconst cancel = () => {\n\t\treturn window.removeEventListener(WATCH_REMOTION_STATIC_FILES, checkFile);\n\t};\n\n\treturn {cancel};\n};\n",
|
|
114
|
-
"// This is used for when other reconcilers are being used\n// such as in React Three Fiber. All the contexts need to be passed again\n// for them to be useable\n\nimport React, {useMemo} from 'react';\nimport {CanUseRemotionHooks} from './CanUseRemotionHooks.js';\nimport {CompositionManager} from './CompositionManagerContext.js';\nimport {RenderAssetManager} from './RenderAssetManager.js';\nimport {ResolveCompositionContext} from './ResolveCompositionConfig.js';\nimport {SequenceContext} from './SequenceContext.js';\nimport {SequenceManager} from './SequenceManager.js';\nimport {BufferingContextReact} from './buffering.js';\nimport {LogLevelContext} from './log-level-context.js';\nimport {NonceContext} from './nonce.js';\nimport {PreloadContext} from './prefetch-state.js';\nimport {\n\tSetTimelineContext,\n\tTimelineContext,\n} from './timeline-position-state.js';\n\nexport function useRemotionContexts() {\n\tconst compositionManagerCtx = React.useContext(CompositionManager);\n\tconst timelineContext = React.useContext(TimelineContext);\n\tconst setTimelineContext = React.useContext(SetTimelineContext);\n\tconst sequenceContext = React.useContext(SequenceContext);\n\tconst nonceContext = React.useContext(NonceContext);\n\tconst canUseRemotionHooksContext = React.useContext(CanUseRemotionHooks);\n\tconst preloadContext = React.useContext(PreloadContext);\n\tconst resolveCompositionContext = React.useContext(ResolveCompositionContext);\n\tconst renderAssetManagerContext = React.useContext(RenderAssetManager);\n\tconst sequenceManagerContext = React.useContext(SequenceManager);\n\tconst bufferManagerContext = React.useContext(BufferingContextReact);\n\tconst logLevelContext = React.useContext(LogLevelContext);\n\n\treturn useMemo(\n\t\t() => ({\n\t\t\tcompositionManagerCtx,\n\t\t\ttimelineContext,\n\t\t\tsetTimelineContext,\n\t\t\tsequenceContext,\n\t\t\tnonceContext,\n\t\t\tcanUseRemotionHooksContext,\n\t\t\tpreloadContext,\n\t\t\tresolveCompositionContext,\n\t\t\trenderAssetManagerContext,\n\t\t\tsequenceManagerContext,\n\t\t\tbufferManagerContext,\n\t\t\tlogLevelContext,\n\t\t}),\n\t\t[\n\t\t\tcompositionManagerCtx,\n\t\t\tnonceContext,\n\t\t\tsequenceContext,\n\t\t\tsetTimelineContext,\n\t\t\ttimelineContext,\n\t\t\tcanUseRemotionHooksContext,\n\t\t\tpreloadContext,\n\t\t\tresolveCompositionContext,\n\t\t\trenderAssetManagerContext,\n\t\t\tsequenceManagerContext,\n\t\t\tbufferManagerContext,\n\t\t\tlogLevelContext,\n\t\t],\n\t);\n}\n\nexport interface RemotionContextProviderProps {\n\treadonly contexts: ReturnType<typeof useRemotionContexts>;\n\treadonly children: React.ReactNode;\n}\n\nexport const RemotionContextProvider = (\n\tprops: RemotionContextProviderProps,\n) => {\n\tconst {children, contexts} = props;\n\treturn (\n\t\t<LogLevelContext.Provider value={contexts.logLevelContext}>\n\t\t\t<CanUseRemotionHooks.Provider value={contexts.canUseRemotionHooksContext}>\n\t\t\t\t<NonceContext.Provider value={contexts.nonceContext}>\n\t\t\t\t\t<PreloadContext.Provider value={contexts.preloadContext}>\n\t\t\t\t\t\t<CompositionManager.Provider value={contexts.compositionManagerCtx}>\n\t\t\t\t\t\t\t<SequenceManager.Provider value={contexts.sequenceManagerContext}>\n\t\t\t\t\t\t\t\t<RenderAssetManager.Provider\n\t\t\t\t\t\t\t\t\tvalue={contexts.renderAssetManagerContext}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<ResolveCompositionContext.Provider\n\t\t\t\t\t\t\t\t\t\tvalue={contexts.resolveCompositionContext}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<TimelineContext.Provider value={contexts.timelineContext}>\n\t\t\t\t\t\t\t\t\t\t\t<SetTimelineContext.Provider\n\t\t\t\t\t\t\t\t\t\t\t\tvalue={contexts.setTimelineContext}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<SequenceContext.Provider\n\t\t\t\t\t\t\t\t\t\t\t\t\tvalue={contexts.sequenceContext}\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<BufferingContextReact.Provider\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalue={contexts.bufferManagerContext}\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t\t\t\t\t\t</BufferingContextReact.Provider>\n\t\t\t\t\t\t\t\t\t\t\t\t</SequenceContext.Provider>\n\t\t\t\t\t\t\t\t\t\t\t</SetTimelineContext.Provider>\n\t\t\t\t\t\t\t\t\t\t</TimelineContext.Provider>\n\t\t\t\t\t\t\t\t\t</ResolveCompositionContext.Provider>\n\t\t\t\t\t\t\t\t</RenderAssetManager.Provider>\n\t\t\t\t\t\t\t</SequenceManager.Provider>\n\t\t\t\t\t\t</CompositionManager.Provider>\n\t\t\t\t\t</PreloadContext.Provider>\n\t\t\t\t</NonceContext.Provider>\n\t\t\t</CanUseRemotionHooks.Provider>\n\t\t</LogLevelContext.Provider>\n\t);\n};\n",
|
|
115
|
-
"/**\n * Copied from:\n * https://github.com/software-mansion/react-native-reanimated/blob/master/src/reanimated2/Colors.ts\n */\n\nimport {interpolate} from './interpolate.js';\n\ntype MatcherType = RegExp | undefined;\n\n// var INTEGER = '[-+]?\\\\d+';\nconst NUMBER = '[-+]?\\\\d*\\\\.?\\\\d+';\nconst PERCENTAGE = NUMBER + '%';\n\nfunction call(...args: unknown[]): string {\n\treturn '\\\\(\\\\s*(' + args.join(')\\\\s*,\\\\s*(') + ')\\\\s*\\\\)';\n}\n\n// matchers use RegExp objects which needs to be created separately on JS and on\n// the UI thread. We keep separate cache of Regexes for UI and JS using the below\n// objects, then pick the right cache in getMatchers() method.\ntype Matchers = {\n\trgb: MatcherType;\n\trgba: MatcherType;\n\thsl: MatcherType;\n\thsla: MatcherType;\n\thex3: MatcherType;\n\thex4: MatcherType;\n\thex5: MatcherType;\n\thex6: MatcherType;\n\thex8: MatcherType;\n};\nfunction getMatchers(): Matchers {\n\tconst cachedMatchers: Matchers = {\n\t\trgb: undefined,\n\t\trgba: undefined,\n\t\thsl: undefined,\n\t\thsla: undefined,\n\t\thex3: undefined,\n\t\thex4: undefined,\n\t\thex5: undefined,\n\t\thex6: undefined,\n\t\thex8: undefined,\n\t};\n\tif (cachedMatchers.rgb === undefined) {\n\t\tcachedMatchers.rgb = new RegExp('rgb' + call(NUMBER, NUMBER, NUMBER));\n\t\tcachedMatchers.rgba = new RegExp(\n\t\t\t'rgba' + call(NUMBER, NUMBER, NUMBER, NUMBER),\n\t\t);\n\t\tcachedMatchers.hsl = new RegExp(\n\t\t\t'hsl' + call(NUMBER, PERCENTAGE, PERCENTAGE),\n\t\t);\n\t\tcachedMatchers.hsla = new RegExp(\n\t\t\t'hsla' + call(NUMBER, PERCENTAGE, PERCENTAGE, NUMBER),\n\t\t);\n\t\tcachedMatchers.hex3 = /^#([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/;\n\t\tcachedMatchers.hex4 =\n\t\t\t/^#([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/;\n\t\tcachedMatchers.hex6 = /^#([0-9a-fA-F]{6})$/;\n\t\tcachedMatchers.hex8 = /^#([0-9a-fA-F]{8})$/;\n\t}\n\n\treturn cachedMatchers;\n}\n\nfunction hue2rgb(p: number, q: number, t: number): number {\n\tif (t < 0) {\n\t\tt += 1;\n\t}\n\n\tif (t > 1) {\n\t\tt -= 1;\n\t}\n\n\tif (t < 1 / 6) {\n\t\treturn p + (q - p) * 6 * t;\n\t}\n\n\tif (t < 1 / 2) {\n\t\treturn q;\n\t}\n\n\tif (t < 2 / 3) {\n\t\treturn p + (q - p) * (2 / 3 - t) * 6;\n\t}\n\n\treturn p;\n}\n\nfunction hslToRgb(h: number, s: number, l: number): number {\n\tconst q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n\tconst p = 2 * l - q;\n\tconst r = hue2rgb(p, q, h + 1 / 3);\n\tconst g = hue2rgb(p, q, h);\n\tconst b = hue2rgb(p, q, h - 1 / 3);\n\n\treturn (\n\t\t(Math.round(r * 255) << 24) |\n\t\t(Math.round(g * 255) << 16) |\n\t\t(Math.round(b * 255) << 8)\n\t);\n}\n\nfunction parse255(str: string): number {\n\tconst int = Number.parseInt(str, 10);\n\tif (int < 0) {\n\t\treturn 0;\n\t}\n\n\tif (int > 255) {\n\t\treturn 255;\n\t}\n\n\treturn int;\n}\n\nfunction parse360(str: string): number {\n\tconst int = Number.parseFloat(str);\n\treturn (((int % 360) + 360) % 360) / 360;\n}\n\nfunction parse1(str: string): number {\n\tconst num = Number.parseFloat(str);\n\tif (num < 0) {\n\t\treturn 0;\n\t}\n\n\tif (num > 1) {\n\t\treturn 255;\n\t}\n\n\treturn Math.round(num * 255);\n}\n\nfunction parsePercentage(str: string): number {\n\t// parseFloat conveniently ignores the final %\n\tconst int = Number.parseFloat(str);\n\tif (int < 0) {\n\t\treturn 0;\n\t}\n\n\tif (int > 100) {\n\t\treturn 1;\n\t}\n\n\treturn int / 100;\n}\n\nexport const colorNames: {[key: string]: number} = {\n\ttransparent: 0x00000000,\n\n\t// http://www.w3.org/TR/css3-color/#svg-color\n\taliceblue: 0xf0f8ffff,\n\tantiquewhite: 0xfaebd7ff,\n\taqua: 0x00ffffff,\n\taquamarine: 0x7fffd4ff,\n\tazure: 0xf0ffffff,\n\tbeige: 0xf5f5dcff,\n\tbisque: 0xffe4c4ff,\n\tblack: 0x000000ff,\n\tblanchedalmond: 0xffebcdff,\n\tblue: 0x0000ffff,\n\tblueviolet: 0x8a2be2ff,\n\tbrown: 0xa52a2aff,\n\tburlywood: 0xdeb887ff,\n\tburntsienna: 0xea7e5dff,\n\tcadetblue: 0x5f9ea0ff,\n\tchartreuse: 0x7fff00ff,\n\tchocolate: 0xd2691eff,\n\tcoral: 0xff7f50ff,\n\tcornflowerblue: 0x6495edff,\n\tcornsilk: 0xfff8dcff,\n\tcrimson: 0xdc143cff,\n\tcyan: 0x00ffffff,\n\tdarkblue: 0x00008bff,\n\tdarkcyan: 0x008b8bff,\n\tdarkgoldenrod: 0xb8860bff,\n\tdarkgray: 0xa9a9a9ff,\n\tdarkgreen: 0x006400ff,\n\tdarkgrey: 0xa9a9a9ff,\n\tdarkkhaki: 0xbdb76bff,\n\tdarkmagenta: 0x8b008bff,\n\tdarkolivegreen: 0x556b2fff,\n\tdarkorange: 0xff8c00ff,\n\tdarkorchid: 0x9932ccff,\n\tdarkred: 0x8b0000ff,\n\tdarksalmon: 0xe9967aff,\n\tdarkseagreen: 0x8fbc8fff,\n\tdarkslateblue: 0x483d8bff,\n\tdarkslategray: 0x2f4f4fff,\n\tdarkslategrey: 0x2f4f4fff,\n\tdarkturquoise: 0x00ced1ff,\n\tdarkviolet: 0x9400d3ff,\n\tdeeppink: 0xff1493ff,\n\tdeepskyblue: 0x00bfffff,\n\tdimgray: 0x696969ff,\n\tdimgrey: 0x696969ff,\n\tdodgerblue: 0x1e90ffff,\n\tfirebrick: 0xb22222ff,\n\tfloralwhite: 0xfffaf0ff,\n\tforestgreen: 0x228b22ff,\n\tfuchsia: 0xff00ffff,\n\tgainsboro: 0xdcdcdcff,\n\tghostwhite: 0xf8f8ffff,\n\tgold: 0xffd700ff,\n\tgoldenrod: 0xdaa520ff,\n\tgray: 0x808080ff,\n\tgreen: 0x008000ff,\n\tgreenyellow: 0xadff2fff,\n\tgrey: 0x808080ff,\n\thoneydew: 0xf0fff0ff,\n\thotpink: 0xff69b4ff,\n\tindianred: 0xcd5c5cff,\n\tindigo: 0x4b0082ff,\n\tivory: 0xfffff0ff,\n\tkhaki: 0xf0e68cff,\n\tlavender: 0xe6e6faff,\n\tlavenderblush: 0xfff0f5ff,\n\tlawngreen: 0x7cfc00ff,\n\tlemonchiffon: 0xfffacdff,\n\tlightblue: 0xadd8e6ff,\n\tlightcoral: 0xf08080ff,\n\tlightcyan: 0xe0ffffff,\n\tlightgoldenrodyellow: 0xfafad2ff,\n\tlightgray: 0xd3d3d3ff,\n\tlightgreen: 0x90ee90ff,\n\tlightgrey: 0xd3d3d3ff,\n\tlightpink: 0xffb6c1ff,\n\tlightsalmon: 0xffa07aff,\n\tlightseagreen: 0x20b2aaff,\n\tlightskyblue: 0x87cefaff,\n\tlightslategray: 0x778899ff,\n\tlightslategrey: 0x778899ff,\n\tlightsteelblue: 0xb0c4deff,\n\tlightyellow: 0xffffe0ff,\n\tlime: 0x00ff00ff,\n\tlimegreen: 0x32cd32ff,\n\tlinen: 0xfaf0e6ff,\n\tmagenta: 0xff00ffff,\n\tmaroon: 0x800000ff,\n\tmediumaquamarine: 0x66cdaaff,\n\tmediumblue: 0x0000cdff,\n\tmediumorchid: 0xba55d3ff,\n\tmediumpurple: 0x9370dbff,\n\tmediumseagreen: 0x3cb371ff,\n\tmediumslateblue: 0x7b68eeff,\n\tmediumspringgreen: 0x00fa9aff,\n\tmediumturquoise: 0x48d1ccff,\n\tmediumvioletred: 0xc71585ff,\n\tmidnightblue: 0x191970ff,\n\tmintcream: 0xf5fffaff,\n\tmistyrose: 0xffe4e1ff,\n\tmoccasin: 0xffe4b5ff,\n\tnavajowhite: 0xffdeadff,\n\tnavy: 0x000080ff,\n\toldlace: 0xfdf5e6ff,\n\tolive: 0x808000ff,\n\tolivedrab: 0x6b8e23ff,\n\torange: 0xffa500ff,\n\torangered: 0xff4500ff,\n\torchid: 0xda70d6ff,\n\tpalegoldenrod: 0xeee8aaff,\n\tpalegreen: 0x98fb98ff,\n\tpaleturquoise: 0xafeeeeff,\n\tpalevioletred: 0xdb7093ff,\n\tpapayawhip: 0xffefd5ff,\n\tpeachpuff: 0xffdab9ff,\n\tperu: 0xcd853fff,\n\tpink: 0xffc0cbff,\n\tplum: 0xdda0ddff,\n\tpowderblue: 0xb0e0e6ff,\n\tpurple: 0x800080ff,\n\trebeccapurple: 0x663399ff,\n\tred: 0xff0000ff,\n\trosybrown: 0xbc8f8fff,\n\troyalblue: 0x4169e1ff,\n\tsaddlebrown: 0x8b4513ff,\n\tsalmon: 0xfa8072ff,\n\tsandybrown: 0xf4a460ff,\n\tseagreen: 0x2e8b57ff,\n\tseashell: 0xfff5eeff,\n\tsienna: 0xa0522dff,\n\tsilver: 0xc0c0c0ff,\n\tskyblue: 0x87ceebff,\n\tslateblue: 0x6a5acdff,\n\tslategray: 0x708090ff,\n\tslategrey: 0x708090ff,\n\tsnow: 0xfffafaff,\n\tspringgreen: 0x00ff7fff,\n\tsteelblue: 0x4682b4ff,\n\ttan: 0xd2b48cff,\n\tteal: 0x008080ff,\n\tthistle: 0xd8bfd8ff,\n\ttomato: 0xff6347ff,\n\tturquoise: 0x40e0d0ff,\n\tviolet: 0xee82eeff,\n\twheat: 0xf5deb3ff,\n\twhite: 0xffffffff,\n\twhitesmoke: 0xf5f5f5ff,\n\tyellow: 0xffff00ff,\n\tyellowgreen: 0x9acd32ff,\n};\n\nfunction normalizeColor(color: string): number {\n\tconst matchers = getMatchers();\n\n\tlet match: RegExpExecArray | null;\n\n\t// Ordered based on occurrences on Facebook codebase\n\tif (matchers.hex6) {\n\t\tif ((match = matchers.hex6.exec(color))) {\n\t\t\treturn Number.parseInt(match[1] + 'ff', 16) >>> 0;\n\t\t}\n\t}\n\n\tif (colorNames[color] !== undefined) {\n\t\treturn colorNames[color];\n\t}\n\n\tif (matchers.rgb) {\n\t\tif ((match = matchers.rgb.exec(color))) {\n\t\t\treturn (\n\t\t\t\t// b\n\t\t\t\t// a\n\t\t\t\t((parse255(match[1]) << 24) | // r\n\t\t\t\t\t(parse255(match[2]) << 16) | // g\n\t\t\t\t\t(parse255(match[3]) << 8) |\n\t\t\t\t\t0x000000ff) >>>\n\t\t\t\t0\n\t\t\t);\n\t\t}\n\t}\n\n\tif (matchers.rgba) {\n\t\tif ((match = matchers.rgba.exec(color))) {\n\t\t\treturn (\n\t\t\t\t// b\n\t\t\t\t// a\n\t\t\t\t((parse255(match[1]) << 24) | // r\n\t\t\t\t\t(parse255(match[2]) << 16) | // g\n\t\t\t\t\t(parse255(match[3]) << 8) |\n\t\t\t\t\tparse1(match[4])) >>>\n\t\t\t\t0\n\t\t\t);\n\t\t}\n\t}\n\n\tif (matchers.hex3) {\n\t\tif ((match = matchers.hex3.exec(color))) {\n\t\t\treturn (\n\t\t\t\tNumber.parseInt(\n\t\t\t\t\tmatch[1] +\n\t\t\t\t\t\tmatch[1] + // r\n\t\t\t\t\t\tmatch[2] +\n\t\t\t\t\t\tmatch[2] + // g\n\t\t\t\t\t\tmatch[3] +\n\t\t\t\t\t\tmatch[3] + // b\n\t\t\t\t\t\t'ff', // a\n\t\t\t\t\t16,\n\t\t\t\t) >>> 0\n\t\t\t);\n\t\t}\n\t}\n\n\t// https://drafts.csswg.org/css-color-4/#hex-notation\n\tif (matchers.hex8) {\n\t\tif ((match = matchers.hex8.exec(color))) {\n\t\t\treturn Number.parseInt(match[1], 16) >>> 0;\n\t\t}\n\t}\n\n\tif (matchers.hex4) {\n\t\tif ((match = matchers.hex4.exec(color))) {\n\t\t\treturn (\n\t\t\t\tNumber.parseInt(\n\t\t\t\t\tmatch[1] +\n\t\t\t\t\t\tmatch[1] + // r\n\t\t\t\t\t\tmatch[2] +\n\t\t\t\t\t\tmatch[2] + // g\n\t\t\t\t\t\tmatch[3] +\n\t\t\t\t\t\tmatch[3] + // b\n\t\t\t\t\t\tmatch[4] +\n\t\t\t\t\t\tmatch[4], // a\n\t\t\t\t\t16,\n\t\t\t\t) >>> 0\n\t\t\t);\n\t\t}\n\t}\n\n\tif (matchers.hsl) {\n\t\tif ((match = matchers.hsl.exec(color))) {\n\t\t\treturn (\n\t\t\t\t(hslToRgb(\n\t\t\t\t\tparse360(match[1]), // h\n\t\t\t\t\tparsePercentage(match[2]), // s\n\t\t\t\t\tparsePercentage(match[3]), // l\n\t\t\t\t) |\n\t\t\t\t\t0x000000ff) >>> // a\n\t\t\t\t0\n\t\t\t);\n\t\t}\n\t}\n\n\tif (matchers.hsla) {\n\t\tif ((match = matchers.hsla.exec(color))) {\n\t\t\treturn (\n\t\t\t\t(hslToRgb(\n\t\t\t\t\tparse360(match[1]), // h\n\t\t\t\t\tparsePercentage(match[2]), // s\n\t\t\t\t\tparsePercentage(match[3]), // l\n\t\t\t\t) |\n\t\t\t\t\tparse1(match[4])) >>> // a\n\t\t\t\t0\n\t\t\t);\n\t\t}\n\t}\n\n\tthrow new Error(`invalid color string ${color} provided`);\n}\n\nconst opacity = (c: number): number => {\n\treturn ((c >> 24) & 255) / 255;\n};\n\nconst red = (c: number): number => {\n\treturn (c >> 16) & 255;\n};\n\nconst green = (c: number): number => {\n\treturn (c >> 8) & 255;\n};\n\nconst blue = (c: number): number => {\n\treturn c & 255;\n};\n\nconst rgbaColor = (r: number, g: number, b: number, alpha: number): string => {\n\treturn `rgba(${r}, ${g}, ${b}, ${alpha})`;\n};\n\nexport function processColor(color: string): number {\n\tconst normalizedColor = normalizeColor(color);\n\n\treturn ((normalizedColor << 24) | (normalizedColor >>> 8)) >>> 0; // argb\n}\n\nconst interpolateColorsRGB = (\n\tvalue: number,\n\tinputRange: readonly number[],\n\tcolors: readonly number[],\n) => {\n\tconst [r, g, b, a] = [red, green, blue, opacity].map((f) => {\n\t\tconst unrounded = interpolate(\n\t\t\tvalue,\n\t\t\tinputRange,\n\t\t\tcolors.map((c) => f(c)),\n\t\t\t{\n\t\t\t\textrapolateLeft: 'clamp',\n\t\t\t\textrapolateRight: 'clamp',\n\t\t\t},\n\t\t);\n\t\tif (f === opacity) {\n\t\t\treturn Number(unrounded.toFixed(3));\n\t\t}\n\n\t\treturn Math.round(unrounded);\n\t});\n\treturn rgbaColor(r, g, b, a);\n};\n\n/*\n * @description Allows you to map a range of values to colors using a concise syntax.\n * @see [Documentation](https://remotion.dev/docs/interpolate-colors)\n */\nexport const interpolateColors = (\n\tinput: number,\n\tinputRange: readonly number[],\n\toutputRange: readonly string[],\n): string => {\n\tif (typeof input === 'undefined') {\n\t\tthrow new TypeError('input can not be undefined');\n\t}\n\n\tif (typeof inputRange === 'undefined') {\n\t\tthrow new TypeError('inputRange can not be undefined');\n\t}\n\n\tif (typeof outputRange === 'undefined') {\n\t\tthrow new TypeError('outputRange can not be undefined');\n\t}\n\n\tif (inputRange.length !== outputRange.length) {\n\t\tthrow new TypeError(\n\t\t\t'inputRange (' +\n\t\t\t\tinputRange.length +\n\t\t\t\t' values provided) and outputRange (' +\n\t\t\t\toutputRange.length +\n\t\t\t\t' values provided) must have the same length',\n\t\t);\n\t}\n\n\tconst processedOutputRange = outputRange.map((c) => processColor(c));\n\n\treturn interpolateColorsRGB(input, inputRange, processedOutputRange);\n};\n",
|
|
116
|
-
"export const validateFrame = ({\n\tallowFloats,\n\tdurationInFrames,\n\tframe,\n}: {\n\tframe: number;\n\tdurationInFrames: number;\n\tallowFloats: boolean;\n}) => {\n\tif (typeof frame === 'undefined') {\n\t\tthrow new TypeError(`Argument missing for parameter \"frame\"`);\n\t}\n\n\tif (typeof frame !== 'number') {\n\t\tthrow new TypeError(\n\t\t\t`Argument passed for \"frame\" is not a number: ${frame}`,\n\t\t);\n\t}\n\n\tif (!Number.isFinite(frame)) {\n\t\tthrow new RangeError(`Frame ${frame} is not finite`);\n\t}\n\n\tif (frame % 1 !== 0 && !allowFloats) {\n\t\tthrow new RangeError(\n\t\t\t`Argument for frame must be an integer, but got ${frame}`,\n\t\t);\n\t}\n\n\tif (frame < 0 && frame < -durationInFrames) {\n\t\tthrow new RangeError(\n\t\t\t`Cannot use frame ${frame}: Duration of composition is ${durationInFrames}, therefore the lowest frame that can be rendered is ${-durationInFrames}`,\n\t\t);\n\t}\n\n\tif (frame > durationInFrames - 1) {\n\t\tthrow new RangeError(\n\t\t\t`Cannot use frame ${frame}: Duration of composition is ${durationInFrames}, therefore the highest frame that can be rendered is ${\n\t\t\t\tdurationInFrames - 1\n\t\t\t}`,\n\t\t);\n\t}\n};\n",
|
|
117
|
-
"import {getAbsoluteSrc} from '../absolute-src';\n\nexport const getOffthreadVideoSource = ({\n\tsrc,\n\ttransparent,\n\tcurrentTime,\n\ttoneMapped,\n}: {\n\tsrc: string;\n\ttransparent: boolean;\n\tcurrentTime: number;\n\ttoneMapped: boolean;\n}) => {\n\treturn `http://localhost:${\n\t\twindow.remotion_proxyPort\n\t}/proxy?src=${encodeURIComponent(\n\t\tgetAbsoluteSrc(src),\n\t)}&time=${encodeURIComponent(Math.max(0, currentTime))}&transparent=${String(\n\t\ttransparent,\n\t)}&toneMapped=${String(toneMapped)}`;\n};\n",
|
|
118
|
-
"import type {FC, PropsWithChildren} from 'react';\nimport React, {Children, forwardRef, useMemo} from 'react';\nimport type {LayoutAndStyle, SequenceProps} from '../Sequence.js';\nimport {Sequence} from '../Sequence.js';\nimport {addSequenceStackTraces} from '../enable-sequence-stack-traces.js';\nimport {ENABLE_V5_BREAKING_CHANGES} from '../v5-flag.js';\nimport {validateDurationInFrames} from '../validation/validate-duration-in-frames.js';\nimport {flattenChildren} from './flatten-children.js';\nimport {\n\tIsInsideSeriesContainer,\n\tIsNotInsideSeriesProvider,\n\tuseRequireToBeInsideSeries,\n} from './is-inside-series.js';\n\ntype SeriesSequenceProps = PropsWithChildren<\n\t{\n\t\treadonly durationInFrames: number;\n\t\treadonly offset?: number;\n\t\treadonly className?: string;\n\t} & Pick<SequenceProps, 'layout' | 'name'> &\n\t\tLayoutAndStyle\n>;\n\nconst SeriesSequenceRefForwardingFunction: React.ForwardRefRenderFunction<\n\tHTMLDivElement,\n\tSeriesSequenceProps\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n> = ({children}, _ref) => {\n\tuseRequireToBeInsideSeries();\n\t// Discard ref\n\n\treturn <IsNotInsideSeriesProvider>{children}</IsNotInsideSeriesProvider>;\n};\n\nconst SeriesSequence = forwardRef(SeriesSequenceRefForwardingFunction);\n\ntype V4Props = {\n\tchildren: React.ReactNode;\n};\n\ntype V5Props = SequenceProps;\n\ntype SeriesProps = true extends typeof ENABLE_V5_BREAKING_CHANGES\n\t? V5Props\n\t: V4Props;\n\n/**\n * @description with this component, you can easily stitch together scenes that should play sequentially after another.\n * @see [Documentation](https://www.remotion.dev/docs/series)\n */\nconst Series: FC<SeriesProps> & {\n\tSequence: typeof SeriesSequence;\n} = (props) => {\n\tconst childrenValue = useMemo(() => {\n\t\tlet startFrame = 0;\n\t\tconst flattenedChildren = flattenChildren(props.children);\n\t\treturn Children.map(flattenedChildren, (child, i) => {\n\t\t\tconst castedChild = child as unknown as\n\t\t\t\t| {\n\t\t\t\t\t\tprops: SeriesSequenceProps;\n\t\t\t\t\t\ttype: typeof SeriesSequence;\n\t\t\t\t\t\tref: React.MutableRefObject<HTMLDivElement>;\n\t\t\t\t }\n\t\t\t\t| string;\n\t\t\tif (typeof castedChild === 'string') {\n\t\t\t\t// Don't throw if it's just some accidential whitespace\n\t\t\t\tif (castedChild.trim() === '') {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\tthrow new TypeError(\n\t\t\t\t\t`The <Series /> component only accepts a list of <Series.Sequence /> components as its children, but you passed a string \"${castedChild}\"`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (castedChild.type !== SeriesSequence) {\n\t\t\t\tthrow new TypeError(\n\t\t\t\t\t`The <Series /> component only accepts a list of <Series.Sequence /> components as its children, but got ${castedChild} instead`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst debugInfo = `index = ${i}, duration = ${castedChild.props.durationInFrames}`;\n\n\t\t\tif (!castedChild?.props.children) {\n\t\t\t\tthrow new TypeError(\n\t\t\t\t\t`A <Series.Sequence /> component (${debugInfo}) was detected to not have any children. Delete it to fix this error.`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst durationInFramesProp = castedChild.props.durationInFrames;\n\t\t\tconst {\n\t\t\t\tdurationInFrames,\n\t\t\t\tchildren: _children,\n\t\t\t\tfrom,\n\t\t\t\tname,\n\t\t\t\t...passedProps\n\t\t\t} = castedChild.props as SeriesSequenceProps & {from: never}; // `from` is not accepted and must be filtered out if used in JS\n\n\t\t\tif (\n\t\t\t\ti !== flattenedChildren.length - 1 ||\n\t\t\t\tdurationInFramesProp !== Infinity\n\t\t\t) {\n\t\t\t\tvalidateDurationInFrames(durationInFramesProp, {\n\t\t\t\t\tcomponent: `of a <Series.Sequence /> component`,\n\t\t\t\t\tallowFloats: true,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst offset = castedChild.props.offset ?? 0;\n\t\t\tif (Number.isNaN(offset)) {\n\t\t\t\tthrow new TypeError(\n\t\t\t\t\t`The \"offset\" property of a <Series.Sequence /> must not be NaN, but got NaN (${debugInfo}).`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (!Number.isFinite(offset)) {\n\t\t\t\tthrow new TypeError(\n\t\t\t\t\t`The \"offset\" property of a <Series.Sequence /> must be finite, but got ${offset} (${debugInfo}).`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (offset % 1 !== 0) {\n\t\t\t\tthrow new TypeError(\n\t\t\t\t\t`The \"offset\" property of a <Series.Sequence /> must be finite, but got ${offset} (${debugInfo}).`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst currentStartFrame = startFrame + offset;\n\t\t\tstartFrame += durationInFramesProp + offset;\n\t\t\treturn (\n\t\t\t\t<Sequence\n\t\t\t\t\tname={name || '<Series.Sequence>'}\n\t\t\t\t\tfrom={currentStartFrame}\n\t\t\t\t\tdurationInFrames={durationInFramesProp}\n\t\t\t\t\t{...passedProps}\n\t\t\t\t\tref={castedChild.ref}\n\t\t\t\t>\n\t\t\t\t\t{child}\n\t\t\t\t</Sequence>\n\t\t\t);\n\t\t});\n\t}, [props.children]);\n\n\tif (ENABLE_V5_BREAKING_CHANGES) {\n\t\treturn (\n\t\t\t<IsInsideSeriesContainer>\n\t\t\t\t<Sequence {...props}>{childrenValue}</Sequence>\n\t\t\t</IsInsideSeriesContainer>\n\t\t);\n\t}\n\n\treturn <IsInsideSeriesContainer>{childrenValue}</IsInsideSeriesContainer>;\n};\n\nSeries.Sequence = SeriesSequence;\n\nexport {Series};\n\naddSequenceStackTraces(SeriesSequence);\n",
|
|
119
|
-
"import type {PropsWithChildren} from 'react';\nimport React from 'react';\n\ntype ReactChildArray = ReturnType<typeof React.Children.toArray>;\n\nexport const flattenChildren = (children: React.ReactNode): ReactChildArray => {\n\tconst childrenArray = React.Children.toArray(children);\n\treturn childrenArray.reduce((flatChildren: ReactChildArray, child) => {\n\t\tif ((child as React.ReactElement<unknown>).type === React.Fragment) {\n\t\t\treturn flatChildren.concat(\n\t\t\t\tflattenChildren(\n\t\t\t\t\t(child as React.ReactElement<PropsWithChildren<unknown>>).props\n\t\t\t\t\t\t.children,\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\n\t\tflatChildren.push(child);\n\t\treturn flatChildren;\n\t}, []);\n};\n",
|
|
120
|
-
"import React, {createContext} from 'react';\n\nexport const IsInsideSeriesContext = createContext(false);\n\nexport const IsInsideSeriesContainer: React.FC<{\n\treadonly children: React.ReactNode;\n}> = ({children}) => {\n\treturn (\n\t\t<IsInsideSeriesContext.Provider value>\n\t\t\t{children}\n\t\t</IsInsideSeriesContext.Provider>\n\t);\n};\n\nexport const IsNotInsideSeriesProvider: React.FC<{\n\treadonly children: React.ReactNode;\n}> = ({children}) => {\n\treturn (\n\t\t<IsInsideSeriesContext.Provider value={false}>\n\t\t\t{children}\n\t\t</IsInsideSeriesContext.Provider>\n\t);\n};\n\nexport const useRequireToBeInsideSeries = () => {\n\tconst isInsideSeries = React.useContext(IsInsideSeriesContext);\n\tif (!isInsideSeries) {\n\t\tthrow new Error('This component must be inside a <Series /> component.');\n\t}\n};\n",
|
|
121
|
-
"export const validateSpringDuration = (dur: unknown) => {\n\tif (typeof dur === 'undefined') {\n\t\treturn;\n\t}\n\n\tif (typeof dur !== 'number') {\n\t\tthrow new TypeError(\n\t\t\t`A \"duration\" of a spring must be a \"number\" but is \"${typeof dur}\"`,\n\t\t);\n\t}\n\n\tif (Number.isNaN(dur)) {\n\t\tthrow new TypeError(\n\t\t\t'A \"duration\" of a spring is NaN, which it must not be',\n\t\t);\n\t}\n\n\tif (!Number.isFinite(dur)) {\n\t\tthrow new TypeError(\n\t\t\t'A \"duration\" of a spring must be finite, but is ' + dur,\n\t\t);\n\t}\n\n\tif (dur <= 0) {\n\t\tthrow new TypeError(\n\t\t\t'A \"duration\" of a spring must be positive, but is ' + dur,\n\t\t);\n\t}\n};\n",
|
|
122
|
-
"type AnimationNode = {\n\tlastTimestamp: number;\n\ttoValue: number;\n\tcurrent: number;\n\tvelocity: number;\n\tprevPosition?: number;\n};\n\nexport type SpringConfig = {\n\tdamping: number;\n\tmass: number;\n\tstiffness: number;\n\tovershootClamping: boolean;\n};\n\nconst defaultSpringConfig: SpringConfig = {\n\tdamping: 10,\n\tmass: 1,\n\tstiffness: 100,\n\tovershootClamping: false,\n};\n\nconst advanceCache: {[key: string]: AnimationNode} = {};\n\nfunction advance({\n\tanimation,\n\tnow,\n\tconfig,\n}: {\n\tanimation: AnimationNode;\n\tnow: number;\n\tconfig: SpringConfig;\n}): AnimationNode {\n\tconst {toValue, lastTimestamp, current, velocity} = animation;\n\n\tconst deltaTime = Math.min(now - lastTimestamp, 64);\n\n\tif (config.damping <= 0) {\n\t\tthrow new Error(\n\t\t\t'Spring damping must be greater than 0, otherwise the spring() animation will never end, causing an infinite loop.',\n\t\t);\n\t}\n\n\tconst c = config.damping;\n\tconst m = config.mass;\n\tconst k = config.stiffness;\n\n\tconst cacheKey = [\n\t\ttoValue,\n\t\tlastTimestamp,\n\t\tcurrent,\n\t\tvelocity,\n\t\tc,\n\t\tm,\n\t\tk,\n\t\tnow,\n\t].join('-');\n\tif (advanceCache[cacheKey]) {\n\t\treturn advanceCache[cacheKey];\n\t}\n\n\tconst v0 = -velocity;\n\tconst x0 = toValue - current;\n\n\tconst zeta = c / (2 * Math.sqrt(k * m)); // damping ratio\n\tconst omega0 = Math.sqrt(k / m); // undamped angular frequency of the oscillator (rad/ms)\n\tconst omega1 = omega0 * Math.sqrt(1 - zeta ** 2); // exponential decay\n\n\tconst t = deltaTime / 1000;\n\n\tconst sin1 = Math.sin(omega1 * t);\n\tconst cos1 = Math.cos(omega1 * t);\n\n\t// under damped\n\tconst underDampedEnvelope = Math.exp(-zeta * omega0 * t);\n\tconst underDampedFrag1 =\n\t\tunderDampedEnvelope *\n\t\t(sin1 * ((v0 + zeta * omega0 * x0) / omega1) + x0 * cos1);\n\n\tconst underDampedPosition = toValue - underDampedFrag1;\n\t// This looks crazy -- it's actually just the derivative of the oscillation function\n\tconst underDampedVelocity =\n\t\tzeta * omega0 * underDampedFrag1 -\n\t\tunderDampedEnvelope *\n\t\t\t(cos1 * (v0 + zeta * omega0 * x0) - omega1 * x0 * sin1);\n\n\t// critically damped\n\tconst criticallyDampedEnvelope = Math.exp(-omega0 * t);\n\tconst criticallyDampedPosition =\n\t\ttoValue - criticallyDampedEnvelope * (x0 + (v0 + omega0 * x0) * t);\n\n\tconst criticallyDampedVelocity =\n\t\tcriticallyDampedEnvelope *\n\t\t(v0 * (t * omega0 - 1) + t * x0 * omega0 * omega0);\n\n\tconst animationNode: AnimationNode = {\n\t\ttoValue,\n\t\tprevPosition: current,\n\t\tlastTimestamp: now,\n\t\tcurrent: zeta < 1 ? underDampedPosition : criticallyDampedPosition,\n\t\tvelocity: zeta < 1 ? underDampedVelocity : criticallyDampedVelocity,\n\t};\n\tadvanceCache[cacheKey] = animationNode;\n\treturn animationNode;\n}\n\nconst calculationCache: {[key: string]: AnimationNode} = {};\n\nexport function springCalculation({\n\tframe,\n\tfps,\n\tconfig = {},\n}: {\n\tframe: number;\n\tfps: number;\n\tconfig?: Partial<SpringConfig>;\n}): AnimationNode {\n\tconst from = 0;\n\tconst to = 1;\n\tconst cacheKey = [\n\t\tframe,\n\t\tfps,\n\t\tconfig.damping,\n\t\tconfig.mass,\n\t\tconfig.overshootClamping,\n\t\tconfig.stiffness,\n\t].join('-');\n\tif (calculationCache[cacheKey]) {\n\t\treturn calculationCache[cacheKey];\n\t}\n\n\tlet animation: AnimationNode = {\n\t\tlastTimestamp: 0,\n\t\tcurrent: from,\n\t\ttoValue: to,\n\t\tvelocity: 0,\n\t\tprevPosition: 0,\n\t};\n\tconst frameClamped = Math.max(0, frame);\n\tconst unevenRest = frameClamped % 1;\n\tfor (let f = 0; f <= Math.floor(frameClamped); f++) {\n\t\tif (f === Math.floor(frameClamped)) {\n\t\t\tf += unevenRest;\n\t\t}\n\n\t\tconst time = (f / fps) * 1000;\n\t\tanimation = advance({\n\t\t\tanimation,\n\t\t\tnow: time,\n\t\t\tconfig: {\n\t\t\t\t...defaultSpringConfig,\n\t\t\t\t...config,\n\t\t\t},\n\t\t});\n\t}\n\n\tcalculationCache[cacheKey] = animation;\n\treturn animation;\n}\n",
|
|
123
|
-
"import type {ENABLE_V5_BREAKING_CHANGES} from '../v5-flag.js';\nimport {validateFps} from '../validation/validate-fps.js';\nimport type {SpringConfig} from './spring-utils';\nimport {springCalculation} from './spring-utils.js';\n\nconst cache = new Map<string, number>();\n\ntype V4Props = {\n\tfrom?: number;\n\tto?: number;\n};\n\ntype MeasureSpringProps = {\n\tfps: number;\n\tconfig?: Partial<SpringConfig>;\n\tthreshold?: number;\n} & (false extends typeof ENABLE_V5_BREAKING_CHANGES ? V4Props : {});\n\n/*\n * @description Based on a spring() configuration and the frame rate, return how long it takes for a spring animation to settle.\n * @see [Documentation](https://remotion.dev/docs/measure-spring)\n */\nexport function measureSpring({\n\tfps,\n\tconfig = {},\n\tthreshold = 0.005,\n}: MeasureSpringProps): number {\n\tif (typeof threshold !== 'number') {\n\t\tthrow new TypeError(\n\t\t\t`threshold must be a number, got ${threshold} of type ${typeof threshold}`,\n\t\t);\n\t}\n\n\tif (threshold === 0) {\n\t\treturn Infinity;\n\t}\n\n\tif (threshold === 1) {\n\t\treturn 0;\n\t}\n\n\tif (isNaN(threshold)) {\n\t\tthrow new TypeError('Threshold is NaN');\n\t}\n\n\tif (!Number.isFinite(threshold)) {\n\t\tthrow new TypeError('Threshold is not finite');\n\t}\n\n\tif (threshold < 0) {\n\t\tthrow new TypeError('Threshold is below 0');\n\t}\n\n\tconst cacheKey = [\n\t\tfps,\n\t\tconfig.damping,\n\t\tconfig.mass,\n\t\tconfig.overshootClamping,\n\t\tconfig.stiffness,\n\t\tthreshold,\n\t].join('-');\n\tif (cache.has(cacheKey)) {\n\t\treturn cache.get(cacheKey)!;\n\t}\n\n\tvalidateFps(fps, 'to the measureSpring() function', false);\n\n\tlet frame = 0;\n\tlet finishedFrame = 0;\n\tconst calc = () => {\n\t\treturn springCalculation({\n\t\t\tfps,\n\t\t\tframe,\n\t\t\tconfig,\n\t\t});\n\t};\n\n\tlet animation = calc();\n\tconst calcDifference = () => {\n\t\treturn Math.abs(animation.current - animation.toValue);\n\t};\n\n\tlet difference = calcDifference();\n\twhile (difference >= threshold) {\n\t\tframe++;\n\t\tanimation = calc();\n\t\tdifference = calcDifference();\n\t}\n\n\t// Since spring is bouncy, just because it's under the threshold we\n\t// cannot be sure it's done. We need to animate further until it stays in the\n\t// threshold for, say, 20 frames.\n\tfinishedFrame = frame;\n\tfor (let i = 0; i < 20; i++) {\n\t\tframe++;\n\t\tanimation = calc();\n\t\tdifference = calcDifference();\n\t\tif (difference >= threshold) {\n\t\t\ti = 0;\n\t\t\tfinishedFrame = frame + 1;\n\t\t}\n\t}\n\n\tcache.set(cacheKey, finishedFrame);\n\n\treturn finishedFrame;\n}\n",
|
|
124
|
-
"import {interpolate} from '../interpolate.js';\nimport {validateFrame} from '../validate-frame.js';\nimport {validateFps} from '../validation/validate-fps.js';\nimport {validateSpringDuration} from '../validation/validation-spring-duration.js';\nimport {measureSpring} from './measure-spring.js';\nimport type {SpringConfig} from './spring-utils';\nimport {springCalculation} from './spring-utils.js';\n\n/*\n * @description Calculates a position based on physical parameters, start and end value, and time.\n * @see [Documentation](https://www.remotion.dev/docs/spring)\n */\nexport function spring({\n\tframe: passedFrame,\n\tfps,\n\tconfig = {},\n\tfrom = 0,\n\tto = 1,\n\tdurationInFrames: passedDurationInFrames,\n\tdurationRestThreshold,\n\tdelay = 0,\n\treverse = false,\n}: {\n\tframe: number;\n\tfps: number;\n\tconfig?: Partial<SpringConfig>;\n\tfrom?: number;\n\tto?: number;\n\tdurationInFrames?: number;\n\tdurationRestThreshold?: number;\n\tdelay?: number;\n\treverse?: boolean;\n}): number {\n\tvalidateSpringDuration(passedDurationInFrames);\n\tvalidateFrame({\n\t\tframe: passedFrame,\n\t\tdurationInFrames: Infinity,\n\t\tallowFloats: true,\n\t});\n\tvalidateFps(fps, 'to spring()', false);\n\n\tconst needsToCalculateNaturalDuration =\n\t\treverse || typeof passedDurationInFrames !== 'undefined';\n\n\tconst naturalDuration = needsToCalculateNaturalDuration\n\t\t? measureSpring({\n\t\t\t\tfps,\n\t\t\t\tconfig,\n\t\t\t\tthreshold: durationRestThreshold,\n\t\t\t})\n\t\t: undefined;\n\n\tconst naturalDurationGetter = needsToCalculateNaturalDuration\n\t\t? {\n\t\t\t\tget: () => naturalDuration as number,\n\t\t\t}\n\t\t: {\n\t\t\t\tget: () => {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t'did not calculate natural duration, this is an error with Remotion. Please report',\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t};\n\n\tconst reverseProcessed = reverse\n\t\t? (passedDurationInFrames ?? naturalDurationGetter.get()) - passedFrame\n\t\t: passedFrame;\n\n\tconst delayProcessed = reverseProcessed + (reverse ? delay : -delay);\n\n\tconst durationProcessed =\n\t\tpassedDurationInFrames === undefined\n\t\t\t? delayProcessed\n\t\t\t: delayProcessed / (passedDurationInFrames / naturalDurationGetter.get());\n\n\tif (passedDurationInFrames && delayProcessed > passedDurationInFrames) {\n\t\treturn to;\n\t}\n\n\tconst spr = springCalculation({\n\t\tfps,\n\t\tframe: durationProcessed,\n\t\tconfig,\n\t});\n\n\tconst inner = config.overshootClamping\n\t\t? to >= from\n\t\t\t? Math.min(spr.current, to)\n\t\t\t: Math.max(spr.current, to)\n\t\t: spr.current;\n\n\tconst interpolated =\n\t\tfrom === 0 && to === 1 ? inner : interpolate(inner, [0, 1], [from, to]);\n\n\treturn interpolated;\n}\n\nexport {measureSpring} from './measure-spring.js';\nexport type {SpringConfig} from './spring-utils';\n",
|
|
125
|
-
"const problematicCharacters = {\n\t'%3A': ':',\n\t'%2F': '/',\n\t'%3F': '?',\n\t'%23': '#',\n\t'%5B': '[',\n\t'%5D': ']',\n\t'%40': '@',\n\t'%21': '!',\n\t'%24': '$',\n\t'%26': '&',\n\t'%27': \"'\",\n\t'%28': '(',\n\t'%29': ')',\n\t'%2A': '*',\n\t'%2B': '+',\n\t'%2C': ',',\n\t'%3B': ';',\n};\n\ntype HexCode = keyof typeof problematicCharacters;\n\nexport type HexInfo =\n\t| {\n\t\t\tcontainsHex: false;\n\t }\n\t| {\n\t\t\tcontainsHex: true;\n\t\t\thexCode: HexCode;\n\t };\n\nconst didWarn: {[key: string]: boolean} = {};\nconst warnOnce = (message: string) => {\n\tif (didWarn[message]) {\n\t\treturn;\n\t}\n\n\t// eslint-disable-next-line no-console\n\tconsole.warn(message);\n\tdidWarn[message] = true;\n};\n\nexport const includesHexOfUnsafeChar = (path: string): HexInfo => {\n\tfor (const key of Object.keys(\n\t\tproblematicCharacters,\n\t) as (keyof typeof problematicCharacters)[]) {\n\t\tif (path.includes(key)) {\n\t\t\treturn {containsHex: true, hexCode: key as HexCode};\n\t\t}\n\t}\n\n\treturn {containsHex: false};\n};\n\nconst trimLeadingSlash = (path: string): string => {\n\tif (path.startsWith('/')) {\n\t\treturn trimLeadingSlash(path.substring(1));\n\t}\n\n\treturn path;\n};\n\nconst inner = (path: string): string => {\n\tif (typeof window !== 'undefined' && window.remotion_staticBase) {\n\t\tif (path.startsWith(window.remotion_staticBase)) {\n\t\t\tthrow new Error(\n\t\t\t\t`The value \"${path}\" is already prefixed with the static base ${window.remotion_staticBase}. You don't need to call staticFile() on it.`,\n\t\t\t);\n\t\t}\n\n\t\treturn `${window.remotion_staticBase}/${trimLeadingSlash(path)}`;\n\t}\n\n\treturn `/${trimLeadingSlash(path)}`;\n};\n\nconst encodeBySplitting = (path: string): string => {\n\tconst splitBySlash = path.split('/');\n\n\tconst encodedArray = splitBySlash.map((element) => {\n\t\treturn encodeURIComponent(element);\n\t});\n\tconst merged = encodedArray.join('/');\n\treturn merged;\n};\n\n/*\n * @description Reference a file from the public/ folder. If the file does not appear in the autocomplete, type the path manually.\n * @see [Documentation](https://www.remotion.dev/docs/staticfile)\n */\nexport const staticFile = (path: string) => {\n\tif (path === null) {\n\t\tthrow new TypeError('null was passed to staticFile()');\n\t}\n\n\tif (typeof path === 'undefined') {\n\t\tthrow new TypeError('undefined was passed to staticFile()');\n\t}\n\n\tif (path.startsWith('http://') || path.startsWith('https://')) {\n\t\tthrow new TypeError(\n\t\t\t`staticFile() does not support remote URLs - got \"${path}\". Instead, pass the URL without wrapping it in staticFile(). See: https://remotion.dev/docs/staticfile-remote-urls`,\n\t\t);\n\t}\n\n\tif (path.startsWith('..') || path.startsWith('./')) {\n\t\tthrow new TypeError(\n\t\t\t`staticFile() does not support relative paths - got \"${path}\". Instead, pass the name of a file that is inside the public/ folder. See: https://remotion.dev/docs/staticfile-relative-paths`,\n\t\t);\n\t}\n\n\tif (\n\t\tpath.startsWith('/Users') ||\n\t\tpath.startsWith('/home') ||\n\t\tpath.startsWith('/tmp') ||\n\t\tpath.startsWith('/etc') ||\n\t\tpath.startsWith('/opt') ||\n\t\tpath.startsWith('/var') ||\n\t\tpath.startsWith('C:') ||\n\t\tpath.startsWith('D:') ||\n\t\tpath.startsWith('E:')\n\t) {\n\t\tthrow new TypeError(\n\t\t\t`staticFile() does not support absolute paths - got \"${path}\". Instead, pass the name of a file that is inside the public/ folder. See: https://remotion.dev/docs/staticfile-relative-paths`,\n\t\t);\n\t}\n\n\tif (path.startsWith('public/')) {\n\t\tthrow new TypeError(\n\t\t\t`Do not include the public/ prefix when using staticFile() - got \"${path}\". See: https://remotion.dev/docs/staticfile-relative-paths`,\n\t\t);\n\t}\n\n\tconst includesHex = includesHexOfUnsafeChar(path);\n\tif (includesHex.containsHex) {\n\t\twarnOnce(\n\t\t\t`WARNING: You seem to pass an already encoded path (path contains ${includesHex.hexCode}). Since Remotion 4.0, the encoding is done by staticFile() itself. You may want to remove a encodeURIComponent() wrapping.`,\n\t\t);\n\t}\n\n\tconst preprocessed = encodeBySplitting(path);\n\tconst preparsed = inner(preprocessed);\n\n\tif (!preparsed.startsWith('/')) {\n\t\treturn `/${preparsed}`;\n\t}\n\n\treturn preparsed;\n};\n",
|
|
126
|
-
"import React from 'react';\nimport type {AnyZodObject} from 'zod';\nimport type {CompositionProps, StillProps} from './Composition.js';\nimport {Composition} from './Composition.js';\n\n/*\n * @description A `<Still />` is a `<Composition />` that is only 1 frame long.\n * @see [Documentation](https://www.remotion.dev/docs/still)\n */\n\nexport const Still = <\n\tSchema extends AnyZodObject,\n\tProps extends Record<string, unknown>,\n>(\n\tprops: StillProps<Schema, Props>,\n) => {\n\tconst newProps: CompositionProps<Schema, Props> = {\n\t\t...props,\n\t\tdurationInFrames: 1,\n\t\tfps: 1,\n\t};\n\t// @ts-expect-error TypeScript does not understand it, but should still fail on type mismatch\n\treturn React.createElement(Composition<Schema, Props>, newProps);\n};\n",
|
|
127
|
-
"import React, {useCallback} from 'react';\nimport {Sequence} from '../Sequence.js';\nimport {useRemotionEnvironment} from '../use-remotion-environment.js';\nimport {validateMediaProps} from '../validate-media-props.js';\nimport {\n\tresolveTrimProps,\n\tvalidateMediaTrimProps,\n} from '../validate-start-from-props.js';\nimport {OffthreadVideoForRendering} from './OffthreadVideoForRendering.js';\nimport {VideoForPreview} from './VideoForPreview.js';\nimport type {RemotionOffthreadVideoProps} from './props.js';\n\n/*\n * @description This method imports and displays a video, similar to <Video />. During rendering, it extracts the exact frame from the video and displays it in an <img> tag\n * @see [Documentation](https://www.remotion.dev/docs/offthreadvideo)\n */\nexport const OffthreadVideo: React.FC<RemotionOffthreadVideoProps> = (\n\tprops,\n) => {\n\t// Should only destruct `startFrom` and `endAt` from props,\n\t// rest gets drilled down\n\tconst {\n\t\tstartFrom,\n\t\tendAt,\n\t\ttrimBefore,\n\t\ttrimAfter,\n\t\tname,\n\t\tpauseWhenBuffering,\n\t\tstack,\n\t\tshowInTimeline,\n\t\t...otherProps\n\t} = props;\n\tconst environment = useRemotionEnvironment();\n\n\tconst onDuration = useCallback(() => undefined, []);\n\n\tif (typeof props.src !== 'string') {\n\t\tthrow new TypeError(\n\t\t\t`The \\`<OffthreadVideo>\\` tag requires a string for \\`src\\`, but got ${JSON.stringify(\n\t\t\t\tprops.src,\n\t\t\t)} instead.`,\n\t\t);\n\t}\n\n\tif (props.imageFormat) {\n\t\tthrow new TypeError(\n\t\t\t`The \\`<OffthreadVideo>\\` tag does no longer accept \\`imageFormat\\`. Use the \\`transparent\\` prop if you want to render a transparent video.`,\n\t\t);\n\t}\n\n\tvalidateMediaTrimProps({startFrom, endAt, trimBefore, trimAfter});\n\n\tconst {trimBeforeValue, trimAfterValue} = resolveTrimProps({\n\t\tstartFrom,\n\t\tendAt,\n\t\ttrimBefore,\n\t\ttrimAfter,\n\t});\n\n\tif (\n\t\ttypeof trimBeforeValue !== 'undefined' ||\n\t\ttypeof trimAfterValue !== 'undefined'\n\t) {\n\t\treturn (\n\t\t\t<Sequence\n\t\t\t\tlayout=\"none\"\n\t\t\t\tfrom={0 - (trimBeforeValue ?? 0)}\n\t\t\t\tshowInTimeline={false}\n\t\t\t\tdurationInFrames={trimAfterValue}\n\t\t\t\tname={name}\n\t\t\t>\n\t\t\t\t<OffthreadVideo\n\t\t\t\t\tpauseWhenBuffering={pauseWhenBuffering ?? false}\n\t\t\t\t\t{...otherProps}\n\t\t\t\t/>\n\t\t\t</Sequence>\n\t\t);\n\t}\n\n\tvalidateMediaProps(props, 'Video');\n\n\tif (environment.isRendering) {\n\t\treturn <OffthreadVideoForRendering {...otherProps} />;\n\t}\n\n\tconst {\n\t\ttransparent,\n\t\ttoneMapped,\n\t\tonAutoPlayError,\n\t\tonVideoFrame,\n\t\tcrossOrigin,\n\t\tdelayRenderRetries,\n\t\tdelayRenderTimeoutInMilliseconds,\n\t\t...propsForPreview\n\t} = otherProps;\n\n\treturn (\n\t\t<VideoForPreview\n\t\t\t_remotionInternalStack={stack ?? null}\n\t\t\t_remotionInternalNativeLoopPassed={false}\n\t\t\tonDuration={onDuration}\n\t\t\tonlyWarnForMediaSeekingError\n\t\t\tpauseWhenBuffering={pauseWhenBuffering ?? false}\n\t\t\tshowInTimeline={showInTimeline ?? true}\n\t\t\tonAutoPlayError={onAutoPlayError ?? undefined}\n\t\t\tonVideoFrame={onVideoFrame ?? null}\n\t\t\tcrossOrigin={crossOrigin}\n\t\t\t{...propsForPreview}\n\t\t/>\n\t);\n};\n",
|
|
128
|
-
"import React, {\n\tuseCallback,\n\tuseContext,\n\tuseEffect,\n\tuseLayoutEffect,\n\tuseMemo,\n\tuseState,\n} from 'react';\nimport {Img} from '../Img.js';\nimport {RenderAssetManager} from '../RenderAssetManager.js';\nimport {SequenceContext} from '../SequenceContext.js';\nimport {getAbsoluteSrc} from '../absolute-src.js';\nimport {\n\tuseFrameForVolumeProp,\n\tuseMediaStartsAt,\n} from '../audio/use-audio-frame.js';\nimport {cancelRender} from '../cancel-render.js';\nimport {OBJECTFIT_CONTAIN_CLASS_NAME} from '../default-css.js';\nimport type {delayRender as delayRenderGlobal} from '../delay-render.js';\nimport {random} from '../random.js';\nimport {useTimelinePosition} from '../timeline-position-state.js';\nimport {truthy} from '../truthy.js';\nimport {useCurrentFrame} from '../use-current-frame.js';\nimport {useDelayRender} from '../use-delay-render.js';\nimport {useUnsafeVideoConfig} from '../use-unsafe-video-config.js';\nimport {evaluateVolume} from '../volume-prop.js';\nimport {warnAboutTooHighVolume} from '../volume-safeguard.js';\nimport {getExpectedMediaFrameUncorrected} from './get-current-time.js';\nimport {getOffthreadVideoSource} from './offthread-video-source.js';\nimport type {RemotionOffthreadVideoProps} from './props.js';\n\ntype SrcAndHandle = {\n\tsrc: string;\n\thandle: ReturnType<typeof delayRenderGlobal>;\n};\n\nexport const OffthreadVideoForRendering: React.FC<\n\tRemotionOffthreadVideoProps\n> = ({\n\tonError,\n\tvolume: volumeProp,\n\tplaybackRate,\n\tsrc,\n\tmuted,\n\tallowAmplificationDuringRender,\n\ttransparent = false,\n\ttoneMapped = true,\n\ttoneFrequency,\n\tname,\n\tloopVolumeCurveBehavior,\n\tdelayRenderRetries,\n\tdelayRenderTimeoutInMilliseconds,\n\tonVideoFrame,\n\t// Remove crossOrigin prop during rendering\n\t// https://discord.com/channels/809501355504959528/844143007183667220/1311639632496033813\n\tcrossOrigin,\n\taudioStreamIndex,\n\t...props\n}) => {\n\tconst absoluteFrame = useTimelinePosition();\n\n\tconst frame = useCurrentFrame();\n\tconst volumePropsFrame = useFrameForVolumeProp(\n\t\tloopVolumeCurveBehavior ?? 'repeat',\n\t);\n\tconst videoConfig = useUnsafeVideoConfig();\n\tconst sequenceContext = useContext(SequenceContext);\n\tconst mediaStartsAt = useMediaStartsAt();\n\n\tconst {registerRenderAsset, unregisterRenderAsset} =\n\t\tuseContext(RenderAssetManager);\n\n\tif (!src) {\n\t\tthrow new TypeError('No `src` was passed to <OffthreadVideo>.');\n\t}\n\n\t// Generate a string that's as unique as possible for this asset\n\t// but at the same time the same on all threads\n\tconst id = useMemo(\n\t\t() =>\n\t\t\t`offthreadvideo-${random(\n\t\t\t\tsrc ?? '',\n\t\t\t)}-${sequenceContext?.cumulatedFrom}-${sequenceContext?.relativeFrom}-${sequenceContext?.durationInFrames}`,\n\t\t[\n\t\t\tsrc,\n\t\t\tsequenceContext?.cumulatedFrom,\n\t\t\tsequenceContext?.relativeFrom,\n\t\t\tsequenceContext?.durationInFrames,\n\t\t],\n\t);\n\n\tif (!videoConfig) {\n\t\tthrow new Error('No video config found');\n\t}\n\n\tconst volume = evaluateVolume({\n\t\tvolume: volumeProp,\n\t\tframe: volumePropsFrame,\n\t\tmediaVolume: 1,\n\t});\n\n\twarnAboutTooHighVolume(volume);\n\n\tuseEffect(() => {\n\t\tif (!src) {\n\t\t\tthrow new Error('No src passed');\n\t\t}\n\n\t\tif (!window.remotion_audioEnabled) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (muted) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (volume <= 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tregisterRenderAsset({\n\t\t\ttype: 'video',\n\t\t\tsrc: getAbsoluteSrc(src),\n\t\t\tid,\n\t\t\tframe: absoluteFrame,\n\t\t\tvolume,\n\t\t\tmediaFrame: frame,\n\t\t\tplaybackRate: playbackRate ?? 1,\n\t\t\ttoneFrequency: toneFrequency ?? null,\n\t\t\taudioStartFrame: Math.max(0, -(sequenceContext?.relativeFrom ?? 0)),\n\t\t\taudioStreamIndex: audioStreamIndex ?? 0,\n\t\t});\n\n\t\treturn () => unregisterRenderAsset(id);\n\t}, [\n\t\tmuted,\n\t\tsrc,\n\t\tregisterRenderAsset,\n\t\tid,\n\t\tunregisterRenderAsset,\n\t\tvolume,\n\t\tframe,\n\t\tabsoluteFrame,\n\t\tplaybackRate,\n\t\ttoneFrequency,\n\t\tsequenceContext?.relativeFrom,\n\t\taudioStreamIndex,\n\t]);\n\n\tconst currentTime = useMemo(() => {\n\t\treturn (\n\t\t\tgetExpectedMediaFrameUncorrected({\n\t\t\t\tframe,\n\t\t\t\tplaybackRate: playbackRate || 1,\n\t\t\t\tstartFrom: -mediaStartsAt,\n\t\t\t}) / videoConfig.fps\n\t\t);\n\t}, [frame, mediaStartsAt, playbackRate, videoConfig.fps]);\n\n\tconst actualSrc = useMemo(() => {\n\t\treturn getOffthreadVideoSource({\n\t\t\tsrc,\n\t\t\tcurrentTime,\n\t\t\ttransparent,\n\t\t\ttoneMapped,\n\t\t});\n\t}, [toneMapped, currentTime, src, transparent]);\n\n\tconst [imageSrc, setImageSrc] = useState<SrcAndHandle | null>(null);\n\tconst {delayRender, continueRender} = useDelayRender();\n\n\tuseLayoutEffect(() => {\n\t\tif (!window.remotion_videoEnabled) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst cleanup: Function[] = [];\n\n\t\tsetImageSrc(null);\n\t\tconst controller = new AbortController();\n\n\t\tconst newHandle = delayRender(`Fetching ${actualSrc} from server`, {\n\t\t\tretries: delayRenderRetries ?? undefined,\n\t\t\ttimeoutInMilliseconds: delayRenderTimeoutInMilliseconds ?? undefined,\n\t\t});\n\n\t\tconst execute = async () => {\n\t\t\ttry {\n\t\t\t\tconst res = await fetch(actualSrc, {\n\t\t\t\t\tsignal: controller.signal,\n\t\t\t\t\tcache: 'no-store',\n\t\t\t\t});\n\t\t\t\tif (res.status !== 200) {\n\t\t\t\t\tif (res.status === 500) {\n\t\t\t\t\t\tconst json = await res.json();\n\t\t\t\t\t\tif (json.error) {\n\t\t\t\t\t\t\tconst cleanedUpErrorMessage = (json.error as string).replace(\n\t\t\t\t\t\t\t\t/^Error: /,\n\t\t\t\t\t\t\t\t'',\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tthrow new Error(cleanedUpErrorMessage);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`Server returned status ${res.status} while fetching ${actualSrc}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tconst blob = await res.blob();\n\n\t\t\t\tconst url = URL.createObjectURL(blob);\n\t\t\t\tcleanup.push(() => URL.revokeObjectURL(url));\n\t\t\t\tsetImageSrc({\n\t\t\t\t\tsrc: url,\n\t\t\t\t\thandle: newHandle,\n\t\t\t\t});\n\t\t\t} catch (err) {\n\t\t\t\t// If component is unmounted, we should not throw\n\t\t\t\tif ((err as Error).message.includes('aborted')) {\n\t\t\t\t\tcontinueRender(newHandle);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (controller.signal.aborted) {\n\t\t\t\t\tcontinueRender(newHandle);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif ((err as Error).message.includes('Failed to fetch')) {\n\t\t\t\t\t// eslint-disable-next-line no-ex-assign\n\t\t\t\t\terr = new Error(\n\t\t\t\t\t\t`Failed to fetch ${actualSrc}. This could be caused by Chrome rejecting the request because the disk space is low. Consider increasing the disk size of your environment.`,\n\t\t\t\t\t\t{cause: err},\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif (onError) {\n\t\t\t\t\tonError(err as Error);\n\t\t\t\t} else {\n\t\t\t\t\tcancelRender(err);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\texecute();\n\n\t\tcleanup.push(() => {\n\t\t\tif (controller.signal.aborted) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcontroller.abort();\n\t\t});\n\n\t\treturn () => {\n\t\t\tcleanup.forEach((c) => c());\n\t\t};\n\t}, [\n\t\tactualSrc,\n\t\tdelayRenderRetries,\n\t\tdelayRenderTimeoutInMilliseconds,\n\t\tonError,\n\t\tcontinueRender,\n\t\tdelayRender,\n\t]);\n\n\tconst onErr: React.ReactEventHandler<HTMLVideoElement | HTMLImageElement> =\n\t\tuseCallback(() => {\n\t\t\tif (onError) {\n\t\t\t\tonError?.(new Error('Failed to load image with src ' + imageSrc));\n\t\t\t} else {\n\t\t\t\tcancelRender('Failed to load image with src ' + imageSrc);\n\t\t\t}\n\t\t}, [imageSrc, onError]);\n\n\tconst className = useMemo(() => {\n\t\treturn [OBJECTFIT_CONTAIN_CLASS_NAME, props.className]\n\t\t\t.filter(truthy)\n\t\t\t.join(' ');\n\t}, [props.className]);\n\n\tconst onImageFrame = useCallback(\n\t\t(img: HTMLImageElement) => {\n\t\t\tif (onVideoFrame) {\n\t\t\t\tonVideoFrame(img);\n\t\t\t}\n\t\t},\n\t\t[onVideoFrame],\n\t);\n\n\tif (!imageSrc || !window.remotion_videoEnabled) {\n\t\treturn null;\n\t}\n\n\tcontinueRender(imageSrc.handle);\n\n\treturn (\n\t\t<Img\n\t\t\tsrc={imageSrc.src}\n\t\t\tclassName={className}\n\t\t\tdelayRenderRetries={delayRenderRetries}\n\t\t\tdelayRenderTimeoutInMilliseconds={delayRenderTimeoutInMilliseconds}\n\t\t\tonImageFrame={onImageFrame}\n\t\t\t{...props}\n\t\t\tonError={onErr}\n\t\t/>\n\t);\n};\n",
|
|
129
|
-
"/* eslint-disable @typescript-eslint/no-use-before-define */\nimport React, {forwardRef, useCallback, useContext} from 'react';\nimport {Sequence} from '../Sequence.js';\nimport {getAbsoluteSrc} from '../absolute-src.js';\nimport {calculateLoopDuration} from '../calculate-loop.js';\nimport {addSequenceStackTraces} from '../enable-sequence-stack-traces.js';\nimport {Loop} from '../loop/index.js';\nimport {usePreload} from '../prefetch.js';\nimport {useRemotionEnvironment} from '../use-remotion-environment.js';\nimport {useVideoConfig} from '../use-video-config.js';\nimport {validateMediaProps} from '../validate-media-props.js';\nimport {\n\tresolveTrimProps,\n\tvalidateMediaTrimProps,\n} from '../validate-start-from-props.js';\nimport {VideoForPreview} from './VideoForPreview.js';\nimport {VideoForRendering} from './VideoForRendering.js';\nimport {DurationsContext} from './duration-state.js';\nimport type {RemotionMainVideoProps, RemotionVideoProps} from './props';\n\nconst VideoForwardingFunction: React.ForwardRefRenderFunction<\n\tHTMLVideoElement,\n\tRemotionVideoProps &\n\t\tRemotionMainVideoProps & {\n\t\t\t/**\n\t\t\t * @deprecated For internal use only\n\t\t\t */\n\t\t\treadonly stack?: string;\n\t\t}\n> = (props, ref) => {\n\tconst {\n\t\tstartFrom,\n\t\tendAt,\n\t\ttrimBefore,\n\t\ttrimAfter,\n\t\tname,\n\t\tpauseWhenBuffering,\n\t\tstack,\n\t\t_remotionInternalNativeLoopPassed,\n\t\tshowInTimeline,\n\t\tonAutoPlayError,\n\t\t...otherProps\n\t} = props;\n\tconst {loop, ...propsOtherThanLoop} = props;\n\tconst {fps} = useVideoConfig();\n\tconst environment = useRemotionEnvironment();\n\n\tconst {durations, setDurations} = useContext(DurationsContext);\n\n\tif (typeof ref === 'string') {\n\t\tthrow new Error('string refs are not supported');\n\t}\n\n\tif (typeof props.src !== 'string') {\n\t\tthrow new TypeError(\n\t\t\t`The \\`<Video>\\` tag requires a string for \\`src\\`, but got ${JSON.stringify(\n\t\t\t\tprops.src,\n\t\t\t)} instead.`,\n\t\t);\n\t}\n\n\tconst preloadedSrc = usePreload(props.src);\n\n\tconst onDuration = useCallback(\n\t\t(src: string, durationInSeconds: number) => {\n\t\t\tsetDurations({type: 'got-duration', durationInSeconds, src});\n\t\t},\n\t\t[setDurations],\n\t);\n\n\tconst onVideoFrame = useCallback(() => {}, []);\n\n\tconst durationFetched =\n\t\tdurations[getAbsoluteSrc(preloadedSrc)] ??\n\t\tdurations[getAbsoluteSrc(props.src)];\n\n\tvalidateMediaTrimProps({startFrom, endAt, trimBefore, trimAfter});\n\tconst {trimBeforeValue, trimAfterValue} = resolveTrimProps({\n\t\tstartFrom,\n\t\tendAt,\n\t\ttrimBefore,\n\t\ttrimAfter,\n\t});\n\n\tif (loop && durationFetched !== undefined) {\n\t\tif (!Number.isFinite(durationFetched)) {\n\t\t\treturn (\n\t\t\t\t<Video\n\t\t\t\t\t{...propsOtherThanLoop}\n\t\t\t\t\tref={ref}\n\t\t\t\t\t_remotionInternalNativeLoopPassed\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\n\t\tconst mediaDuration = durationFetched * fps;\n\n\t\treturn (\n\t\t\t<Loop\n\t\t\t\tdurationInFrames={calculateLoopDuration({\n\t\t\t\t\tendAt: trimAfterValue ?? undefined,\n\t\t\t\t\tmediaDuration,\n\t\t\t\t\tplaybackRate: props.playbackRate ?? 1,\n\t\t\t\t\tstartFrom: trimBeforeValue ?? undefined,\n\t\t\t\t})}\n\t\t\t\tlayout=\"none\"\n\t\t\t\tname={name}\n\t\t\t>\n\t\t\t\t<Video\n\t\t\t\t\t{...propsOtherThanLoop}\n\t\t\t\t\tref={ref}\n\t\t\t\t\t_remotionInternalNativeLoopPassed\n\t\t\t\t/>\n\t\t\t</Loop>\n\t\t);\n\t}\n\n\tif (\n\t\ttypeof trimBeforeValue !== 'undefined' ||\n\t\ttypeof trimAfterValue !== 'undefined'\n\t) {\n\t\treturn (\n\t\t\t<Sequence\n\t\t\t\tlayout=\"none\"\n\t\t\t\tfrom={0 - (trimBeforeValue ?? 0)}\n\t\t\t\tshowInTimeline={false}\n\t\t\t\tdurationInFrames={trimAfterValue}\n\t\t\t\tname={name}\n\t\t\t>\n\t\t\t\t<Video\n\t\t\t\t\tpauseWhenBuffering={pauseWhenBuffering ?? false}\n\t\t\t\t\t{...otherProps}\n\t\t\t\t\tref={ref}\n\t\t\t\t/>\n\t\t\t</Sequence>\n\t\t);\n\t}\n\n\tvalidateMediaProps(props, 'Video');\n\n\tif (environment.isRendering) {\n\t\treturn (\n\t\t\t<VideoForRendering\n\t\t\t\tonDuration={onDuration}\n\t\t\t\tonVideoFrame={onVideoFrame ?? null}\n\t\t\t\t{...otherProps}\n\t\t\t\tref={ref}\n\t\t\t/>\n\t\t);\n\t}\n\n\treturn (\n\t\t<VideoForPreview\n\t\t\tonlyWarnForMediaSeekingError={false}\n\t\t\t{...otherProps}\n\t\t\tref={ref}\n\t\t\tonVideoFrame={null}\n\t\t\t// Proposal: Make this default to true in v5\n\t\t\tpauseWhenBuffering={pauseWhenBuffering ?? false}\n\t\t\tonDuration={onDuration}\n\t\t\t_remotionInternalStack={stack ?? null}\n\t\t\t_remotionInternalNativeLoopPassed={\n\t\t\t\t_remotionInternalNativeLoopPassed ?? false\n\t\t\t}\n\t\t\tshowInTimeline={showInTimeline ?? true}\n\t\t\tonAutoPlayError={onAutoPlayError ?? undefined}\n\t\t/>\n\t);\n};\n\n/*\n * @description Wraps the native `<video>` element to include video in your component that is synchronized with Remotion's time.\n * @see [Documentation](https://www.remotion.dev/docs/video)\n */\nexport const Video = forwardRef(VideoForwardingFunction);\n\naddSequenceStackTraces(Video);\n",
|
|
130
|
-
"import type {ForwardRefExoticComponent, RefAttributes} from 'react';\nimport React, {\n\tforwardRef,\n\tuseContext,\n\tuseEffect,\n\tuseImperativeHandle,\n\tuseLayoutEffect,\n\tuseMemo,\n\tuseRef,\n} from 'react';\nimport {RenderAssetManager} from '../RenderAssetManager.js';\nimport {SequenceContext} from '../SequenceContext.js';\nimport {getAbsoluteSrc} from '../absolute-src.js';\nimport {\n\tuseFrameForVolumeProp,\n\tuseMediaStartsAt,\n} from '../audio/use-audio-frame.js';\nimport {isApproximatelyTheSame} from '../is-approximately-the-same.js';\nimport {useLogLevel, useMountTime} from '../log-level-context.js';\nimport {random} from '../random.js';\nimport {useTimelinePosition} from '../timeline-position-state.js';\nimport {useCurrentFrame} from '../use-current-frame.js';\nimport {useDelayRender} from '../use-delay-render.js';\nimport {useRemotionEnvironment} from '../use-remotion-environment.js';\nimport {useUnsafeVideoConfig} from '../use-unsafe-video-config.js';\nimport {evaluateVolume} from '../volume-prop.js';\nimport {warnAboutTooHighVolume} from '../volume-safeguard.js';\nimport {getMediaTime} from './get-current-time.js';\nimport type {OnVideoFrame, RemotionVideoProps} from './props';\nimport {seekToTimeMultipleUntilRight} from './seek-until-right.js';\n\ntype VideoForRenderingProps = RemotionVideoProps & {\n\treadonly onDuration: (src: string, durationInSeconds: number) => void;\n\treadonly onVideoFrame: null | OnVideoFrame;\n};\n\nconst VideoForRenderingForwardFunction: React.ForwardRefRenderFunction<\n\tHTMLVideoElement,\n\tVideoForRenderingProps\n> = (\n\t{\n\t\tonError,\n\t\tvolume: volumeProp,\n\t\tallowAmplificationDuringRender,\n\t\tplaybackRate,\n\t\tonDuration,\n\t\ttoneFrequency,\n\t\tname,\n\t\tacceptableTimeShiftInSeconds,\n\t\tdelayRenderRetries,\n\t\tdelayRenderTimeoutInMilliseconds,\n\t\tloopVolumeCurveBehavior,\n\t\taudioStreamIndex,\n\t\t...props\n\t},\n\tref,\n) => {\n\tconst absoluteFrame = useTimelinePosition();\n\n\tconst frame = useCurrentFrame();\n\tconst volumePropsFrame = useFrameForVolumeProp(\n\t\tloopVolumeCurveBehavior ?? 'repeat',\n\t);\n\tconst videoConfig = useUnsafeVideoConfig();\n\tconst videoRef = useRef<HTMLVideoElement>(null);\n\tconst sequenceContext = useContext(SequenceContext);\n\tconst mediaStartsAt = useMediaStartsAt();\n\tconst environment = useRemotionEnvironment();\n\tconst logLevel = useLogLevel();\n\tconst mountTime = useMountTime();\n\tconst {delayRender, continueRender} = useDelayRender();\n\n\tconst {registerRenderAsset, unregisterRenderAsset} =\n\t\tuseContext(RenderAssetManager);\n\n\t// Generate a string that's as unique as possible for this asset\n\t// but at the same time the same on all threads\n\tconst id = useMemo(\n\t\t() =>\n\t\t\t`video-${random(\n\t\t\t\tprops.src ?? '',\n\t\t\t)}-${sequenceContext?.cumulatedFrom}-${sequenceContext?.relativeFrom}-${sequenceContext?.durationInFrames}`,\n\t\t[\n\t\t\tprops.src,\n\t\t\tsequenceContext?.cumulatedFrom,\n\t\t\tsequenceContext?.relativeFrom,\n\t\t\tsequenceContext?.durationInFrames,\n\t\t],\n\t);\n\n\tif (!videoConfig) {\n\t\tthrow new Error('No video config found');\n\t}\n\n\tconst volume = evaluateVolume({\n\t\tvolume: volumeProp,\n\t\tframe: volumePropsFrame,\n\t\tmediaVolume: 1,\n\t});\n\n\twarnAboutTooHighVolume(volume);\n\n\tuseEffect(() => {\n\t\tif (!props.src) {\n\t\t\tthrow new Error('No src passed');\n\t\t}\n\n\t\tif (props.muted) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (volume <= 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!window.remotion_audioEnabled) {\n\t\t\treturn;\n\t\t}\n\n\t\tregisterRenderAsset({\n\t\t\ttype: 'video',\n\t\t\tsrc: getAbsoluteSrc(props.src),\n\t\t\tid,\n\t\t\tframe: absoluteFrame,\n\t\t\tvolume,\n\t\t\tmediaFrame: frame,\n\t\t\tplaybackRate: playbackRate ?? 1,\n\t\t\ttoneFrequency: toneFrequency ?? null,\n\t\t\taudioStartFrame: Math.max(0, -(sequenceContext?.relativeFrom ?? 0)),\n\t\t\taudioStreamIndex: audioStreamIndex ?? 0,\n\t\t});\n\n\t\treturn () => unregisterRenderAsset(id);\n\t}, [\n\t\tprops.muted,\n\t\tprops.src,\n\t\tregisterRenderAsset,\n\t\tid,\n\t\tunregisterRenderAsset,\n\t\tvolume,\n\t\tframe,\n\t\tabsoluteFrame,\n\t\tplaybackRate,\n\t\ttoneFrequency,\n\t\tsequenceContext?.relativeFrom,\n\t\taudioStreamIndex,\n\t]);\n\n\tuseImperativeHandle(ref, () => {\n\t\treturn videoRef.current as HTMLVideoElement;\n\t}, []);\n\n\tuseEffect(() => {\n\t\tif (!window.remotion_videoEnabled) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst {current} = videoRef;\n\t\tif (!current) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst currentTime = getMediaTime({\n\t\t\tframe,\n\t\t\tplaybackRate: playbackRate || 1,\n\t\t\tstartFrom: -mediaStartsAt,\n\t\t\tfps: videoConfig.fps,\n\t\t});\n\t\tconst handle = delayRender(\n\t\t\t`Rendering <Video /> with src=\"${props.src}\" at time ${currentTime}`,\n\t\t\t{\n\t\t\t\tretries: delayRenderRetries ?? undefined,\n\t\t\t\ttimeoutInMilliseconds: delayRenderTimeoutInMilliseconds ?? undefined,\n\t\t\t},\n\t\t);\n\t\tif (window.process?.env?.NODE_ENV === 'test') {\n\t\t\tcontinueRender(handle);\n\t\t\treturn;\n\t\t}\n\n\t\tif (isApproximatelyTheSame(current.currentTime, currentTime)) {\n\t\t\tif (current.readyState >= 2) {\n\t\t\t\tcontinueRender(handle);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst loadedDataHandler = () => {\n\t\t\t\tcontinueRender(handle);\n\t\t\t};\n\n\t\t\tcurrent.addEventListener('loadeddata', loadedDataHandler, {once: true});\n\t\t\treturn () => {\n\t\t\t\tcurrent.removeEventListener('loadeddata', loadedDataHandler);\n\t\t\t};\n\t\t}\n\n\t\tconst endedHandler = () => {\n\t\t\tcontinueRender(handle);\n\t\t};\n\n\t\tconst seek = seekToTimeMultipleUntilRight({\n\t\t\telement: current,\n\t\t\tdesiredTime: currentTime,\n\t\t\tfps: videoConfig.fps,\n\t\t\tlogLevel,\n\t\t\tmountTime,\n\t\t});\n\n\t\tseek.prom.then(() => {\n\t\t\tcontinueRender(handle);\n\t\t});\n\n\t\tcurrent.addEventListener('ended', endedHandler, {once: true});\n\n\t\tconst errorHandler = () => {\n\t\t\tif (current?.error) {\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.error('Error occurred in video', current?.error);\n\n\t\t\t\t// If user is handling the error, we don't cause an unhandled exception\n\t\t\t\tif (onError) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`The browser threw an error while playing the video ${props.src}: Code ${current.error.code} - ${current?.error?.message}. See https://remotion.dev/docs/media-playback-error for help. Pass an onError() prop to handle the error.`,\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tthrow new Error('The browser threw an error');\n\t\t\t}\n\t\t};\n\n\t\tcurrent.addEventListener('error', errorHandler, {once: true});\n\n\t\t// If video skips to another frame or unmounts, we clear the created handle\n\t\treturn () => {\n\t\t\tseek.cancel();\n\t\t\tcurrent.removeEventListener('ended', endedHandler);\n\t\t\tcurrent.removeEventListener('error', errorHandler);\n\t\t\tcontinueRender(handle);\n\t\t};\n\t}, [\n\t\tvolumePropsFrame,\n\t\tprops.src,\n\t\tplaybackRate,\n\t\tvideoConfig.fps,\n\t\tframe,\n\t\tmediaStartsAt,\n\t\tonError,\n\t\tdelayRenderRetries,\n\t\tdelayRenderTimeoutInMilliseconds,\n\t\tlogLevel,\n\t\tmountTime,\n\t\tcontinueRender,\n\t\tdelayRender,\n\t]);\n\n\tconst {src} = props;\n\n\t// If video source switches, make new handle\n\tif (environment.isRendering) {\n\t\t// eslint-disable-next-line react-hooks/rules-of-hooks\n\t\tuseLayoutEffect(() => {\n\t\t\tif (window.process?.env?.NODE_ENV === 'test') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst newHandle = delayRender(\n\t\t\t\t'Loading <Video> duration with src=' + src,\n\t\t\t\t{\n\t\t\t\t\tretries: delayRenderRetries ?? undefined,\n\t\t\t\t\ttimeoutInMilliseconds: delayRenderTimeoutInMilliseconds ?? undefined,\n\t\t\t\t},\n\t\t\t);\n\t\t\tconst {current} = videoRef;\n\n\t\t\tconst didLoad = () => {\n\t\t\t\tif (current?.duration) {\n\t\t\t\t\tonDuration(src as string, current.duration);\n\t\t\t\t}\n\n\t\t\t\tcontinueRender(newHandle);\n\t\t\t};\n\n\t\t\tif (current?.duration) {\n\t\t\t\tonDuration(src as string, current.duration);\n\t\t\t\tcontinueRender(newHandle);\n\t\t\t} else {\n\t\t\t\tcurrent?.addEventListener('loadedmetadata', didLoad, {once: true});\n\t\t\t}\n\n\t\t\t// If tag gets unmounted, clear pending handles because video metadata is not going to load\n\t\t\treturn () => {\n\t\t\t\tcurrent?.removeEventListener('loadedmetadata', didLoad);\n\t\t\t\tcontinueRender(newHandle);\n\t\t\t};\n\t\t}, [\n\t\t\tsrc,\n\t\t\tonDuration,\n\t\t\tdelayRenderRetries,\n\t\t\tdelayRenderTimeoutInMilliseconds,\n\t\t\tcontinueRender,\n\t\t\tdelayRender,\n\t\t]);\n\t}\n\n\treturn <video ref={videoRef} disableRemotePlayback {...props} />;\n};\n\nexport const VideoForRendering = forwardRef(\n\tVideoForRenderingForwardFunction,\n) as ForwardRefExoticComponent<\n\tVideoForRenderingProps & RefAttributes<HTMLVideoElement>\n>;\n",
|
|
131
|
-
"import {isApproximatelyTheSame} from '../is-approximately-the-same';\nimport {type LogLevel} from '../log';\nimport {seek} from '../seek';\n\nconst roundTo6Commas = (num: number) => {\n\treturn Math.round(num * 100_000) / 100_000;\n};\n\nexport const seekToTime = ({\n\telement,\n\tdesiredTime,\n\tlogLevel,\n\tmountTime,\n}: {\n\telement: HTMLVideoElement;\n\tdesiredTime: number;\n\tlogLevel: LogLevel;\n\tmountTime: number;\n}) => {\n\tif (isApproximatelyTheSame(element.currentTime, desiredTime)) {\n\t\treturn {\n\t\t\twait: Promise.resolve(desiredTime),\n\t\t\tcancel: () => {},\n\t\t};\n\t}\n\n\tseek({\n\t\tlogLevel,\n\t\tmediaRef: element,\n\t\ttime: desiredTime,\n\t\twhy: 'Seeking during rendering',\n\t\tmountTime,\n\t});\n\n\tlet cancel: number;\n\tlet cancelSeeked: null | (() => void) = null;\n\tconst prom = new Promise<number>((resolve) => {\n\t\tcancel = element.requestVideoFrameCallback((now, metadata) => {\n\t\t\tconst displayIn = metadata.expectedDisplayTime - now;\n\t\t\tif (displayIn <= 0) {\n\t\t\t\tresolve(metadata.mediaTime);\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tsetTimeout(() => {\n\t\t\t\tresolve(metadata.mediaTime);\n\t\t\t}, displayIn + 150);\n\t\t});\n\t});\n\n\tconst waitForSeekedEvent = new Promise<void>((resolve) => {\n\t\tconst onDone = () => {\n\t\t\tresolve();\n\t\t};\n\n\t\telement.addEventListener('seeked', onDone, {\n\t\t\tonce: true,\n\t\t});\n\t\tcancelSeeked = () => {\n\t\t\telement.removeEventListener('seeked', onDone);\n\t\t};\n\t});\n\n\treturn {\n\t\twait: Promise.all([prom, waitForSeekedEvent] as const).then(\n\t\t\t([time]) => time,\n\t\t),\n\t\tcancel: () => {\n\t\t\tcancelSeeked?.();\n\t\t\telement.cancelVideoFrameCallback(cancel);\n\t\t},\n\t};\n};\n\nexport const seekToTimeMultipleUntilRight = ({\n\telement,\n\tdesiredTime,\n\tfps,\n\tlogLevel,\n\tmountTime,\n}: {\n\telement: HTMLVideoElement;\n\tdesiredTime: number;\n\tfps: number;\n\tlogLevel: LogLevel;\n\tmountTime: number;\n}) => {\n\tconst threshold = 1 / fps / 2;\n\tlet currentCancel: () => void = () => undefined;\n\n\tif (\n\t\tNumber.isFinite(element.duration) &&\n\t\telement.currentTime >= element.duration &&\n\t\tdesiredTime >= element.duration\n\t) {\n\t\treturn {\n\t\t\tprom: Promise.resolve(),\n\t\t\tcancel: () => {},\n\t\t};\n\t}\n\n\tconst prom = new Promise<void>((resolve, reject) => {\n\t\tconst firstSeek = seekToTime({\n\t\t\telement,\n\t\t\tdesiredTime: desiredTime + threshold,\n\t\t\tlogLevel,\n\t\t\tmountTime,\n\t\t});\n\t\tfirstSeek.wait.then((seekedTo) => {\n\t\t\tconst difference = Math.abs(desiredTime - seekedTo);\n\n\t\t\tif (difference <= threshold) {\n\t\t\t\treturn resolve();\n\t\t\t}\n\n\t\t\tconst sign = desiredTime > seekedTo ? 1 : -1;\n\n\t\t\tconst newSeek = seekToTime({\n\t\t\t\telement,\n\t\t\t\tdesiredTime: seekedTo + threshold * sign,\n\t\t\t\tlogLevel,\n\t\t\t\tmountTime,\n\t\t\t});\n\t\t\tcurrentCancel = newSeek.cancel;\n\t\t\tnewSeek.wait\n\t\t\t\t.then((newTime) => {\n\t\t\t\t\tconst newDifference = Math.abs(desiredTime - newTime);\n\n\t\t\t\t\tif (roundTo6Commas(newDifference) <= roundTo6Commas(threshold)) {\n\t\t\t\t\t\treturn resolve();\n\t\t\t\t\t}\n\n\t\t\t\t\tconst thirdSeek = seekToTime({\n\t\t\t\t\t\telement,\n\t\t\t\t\t\tdesiredTime: desiredTime + threshold,\n\t\t\t\t\t\tlogLevel,\n\t\t\t\t\t\tmountTime,\n\t\t\t\t\t});\n\t\t\t\t\tcurrentCancel = thirdSeek.cancel;\n\t\t\t\t\treturn thirdSeek.wait\n\t\t\t\t\t\t.then(() => {\n\t\t\t\t\t\t\tresolve();\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.catch((err) => {\n\t\t\t\t\t\t\treject(err);\n\t\t\t\t\t\t});\n\t\t\t\t})\n\t\t\t\t.catch((err) => {\n\t\t\t\t\treject(err);\n\t\t\t\t});\n\t\t});\n\n\t\tcurrentCancel = firstSeek.cancel;\n\t});\n\n\treturn {\n\t\tprom,\n\t\tcancel: () => {\n\t\t\tcurrentCancel();\n\t\t},\n\t};\n};\n",
|
|
132
|
-
"import './_check-rsc.js';\nimport './asset-types.js';\nimport {Clipper} from './Clipper.js';\nimport type {Codec} from './codec.js';\nimport type {\n\tAnyCompMetadata,\n\tAnyComposition,\n\tAudioOrVideoAsset,\n\tTRenderAsset,\n} from './CompositionManager.js';\nimport {addSequenceStackTraces} from './enable-sequence-stack-traces.js';\nimport type {StaticFile} from './get-static-files.js';\nimport {useIsPlayer} from './is-player.js';\nimport type {LogLevel} from './log.js';\nimport {checkMultipleRemotionVersions} from './multiple-versions-warning.js';\nimport {Null} from './Null.js';\nimport type {PixelFormat, VideoImageFormat} from './render-types.js';\nimport {Sequence} from './Sequence.js';\nimport type {VideoConfig} from './video-config.js';\n\nexport type VideoConfigWithSerializedProps = Omit<\n\tVideoConfig,\n\t'defaultProps' | 'props'\n> & {\n\tserializedDefaultPropsWithCustomSchema: string;\n\tserializedResolvedPropsWithCustomSchema: string;\n};\n\ndeclare global {\n\tinterface Window {\n\t\tremotion_renderReady: boolean;\n\t\tremotion_delayRenderTimeouts: {\n\t\t\t[key: string]: {\n\t\t\t\tlabel: string | null;\n\t\t\t\ttimeout: number | Timer;\n\t\t\t\tstartTime: number;\n\t\t\t};\n\t\t};\n\t\tremotion_cancelledError: string | undefined;\n\t\tremotion_getCompositionNames: () => string[];\n\t\tgetStaticCompositions: () => Promise<VideoConfigWithSerializedProps[]>;\n\t\tremotion_calculateComposition: (\n\t\t\tcompId: string,\n\t\t) => Promise<VideoConfigWithSerializedProps>;\n\t\tremotion_setBundleMode: (bundleMode: BundleState) => void;\n\t\tremotion_staticBase: string;\n\t\tremotion_staticFiles: StaticFile[];\n\t\tremotion_publicPath: string;\n\t\tremotion_publicFolderExists: string | null;\n\t\tremotion_editorName: string | null;\n\t\tremotion_ignoreFastRefreshUpdate: number | null;\n\t\tremotion_numberOfAudioTags: number;\n\t\tremotion_audioLatencyHint: AudioContextLatencyCategory | undefined;\n\t\tremotion_logLevel: LogLevel;\n\t\tremotion_projectName: string;\n\t\tremotion_cwd: string;\n\t\tremotion_studioServerCommand: string;\n\t\tremotion_setFrame: (\n\t\t\tframe: number,\n\t\t\tcomposition: string,\n\t\t\tattempt: number,\n\t\t) => void;\n\t\tremotion_attempt: number;\n\t\tremotion_initialFrame: number;\n\t\tremotion_proxyPort: number;\n\t\tremotion_audioEnabled: boolean;\n\t\tremotion_videoEnabled: boolean;\n\t\tremotion_puppeteerTimeout: number;\n\t\tremotion_broadcastChannel: BroadcastChannel | undefined;\n\t\tremotion_inputProps: string;\n\t\tremotion_envVariables: string;\n\t\tremotion_isMainTab: boolean;\n\t\tremotion_mediaCacheSizeInBytes: number | null;\n\t\tremotion_initialMemoryAvailable: number | null;\n\t\tremotion_collectAssets: () => TRenderAsset[];\n\t\tremotion_isPlayer: boolean;\n\t\tremotion_isStudio: boolean;\n\t\tremotion_isReadOnlyStudio: boolean;\n\t\tremotion_isBuilding: undefined | (() => void);\n\t\tremotion_finishedBuilding: undefined | (() => void);\n\t\tsiteVersion: '11';\n\t\tremotion_version: string;\n\t\tremotion_imported: string | boolean;\n\t\tremotion_unsavedProps: boolean | undefined;\n\t}\n}\n\nexport type BundleCompositionState = {\n\ttype: 'composition';\n\tcompositionName: string;\n\tserializedResolvedPropsWithSchema: string;\n\tcompositionHeight: number;\n\tcompositionDurationInFrames: number;\n\tcompositionWidth: number;\n\tcompositionFps: number;\n\tcompositionDefaultCodec: Codec;\n\tcompositionDefaultOutName: string | null;\n\tcompositionDefaultVideoImageFormat: VideoImageFormat | null;\n\tcompositionDefaultPixelFormat: PixelFormat | null;\n};\n\nexport type BundleIndexState = {\n\ttype: 'index';\n};\n\nexport type BundleEvaluationState = {\n\ttype: 'evaluation';\n};\n\nexport type BundleState =\n\t| BundleIndexState\n\t| BundleEvaluationState\n\t| BundleCompositionState;\n\ncheckMultipleRemotionVersions();\nexport * from './AbsoluteFill.js';\nexport * from './animated-image/index.js';\nexport {Artifact} from './Artifact.js';\nexport * from './audio/index.js';\nexport type {LoopVolumeCurveBehavior} from './audio/use-audio-frame.js';\nexport {cancelRender} from './cancel-render.js';\nexport {\n\tCalculateMetadataFunction,\n\tComposition,\n\tCompositionProps,\n\tCompProps,\n\tStillProps,\n} from './Composition.js';\nexport type {CanvasContent} from './CompositionManagerContext.js';\nexport {getInputProps} from './config/input-props.js';\nexport {continueRender, delayRender} from './delay-render.js';\nexport {DownloadBehavior} from './download-behavior.js';\nexport * from './easing.js';\nexport * from './Folder.js';\nexport * from './freeze.js';\nexport {getRemotionEnvironment} from './get-remotion-environment.js';\nexport {getStaticFiles, StaticFile} from './get-static-files.js';\nexport * from './IFrame.js';\nexport {Img, ImgProps} from './Img.js';\nexport * from './internals.js';\nexport {interpolateColors} from './interpolate-colors.js';\nexport {Log, LogLevel} from './log.js';\nexport {Loop} from './loop/index.js';\nexport {\n\tEasingFunction,\n\tExtrapolateType,\n\tinterpolate,\n\tInterpolateOptions,\n\trandom,\n\tRandomSeed,\n} from './no-react';\nexport {prefetch, PrefetchOnProgress} from './prefetch.js';\nexport {registerRoot} from './register-root.js';\nexport type {PixelFormat, VideoImageFormat} from './render-types.js';\nexport {\n\tAbsoluteFillLayout,\n\tLayoutAndStyle,\n\tSequence,\n\tSequenceProps,\n\tSequencePropsWithoutDuration,\n} from './Sequence.js';\nexport {Series} from './series/index.js';\nexport * from './spring/index.js';\nexport {staticFile} from './static-file.js';\nexport * from './Still.js';\nexport type {PlayableMediaTag} from './timeline-position-state.js';\nexport {useBufferState} from './use-buffer-state';\nexport {useCurrentFrame} from './use-current-frame.js';\nexport {\n\tCurrentScaleContextType,\n\tPreviewSize,\n\tPreviewSizeCtx,\n\tTranslation,\n\tuseCurrentScale,\n} from './use-current-scale';\nexport {useDelayRender} from './use-delay-render';\nexport {useRemotionEnvironment} from './use-remotion-environment.js';\nexport * from './use-video-config.js';\nexport * from './version.js';\nexport * from './video-config.js';\nexport * from './video/index.js';\nexport type {OnVideoFrame} from './video/props.js';\nexport type {VolumeProp} from './volume-prop.js';\nexport {watchStaticFile} from './watch-static-file.js';\n\nexport const Experimental = {\n\t/**\n\t * @description This is a special component that will cause Remotion to only partially capture the frame of the video.\n\t * @see [Documentation](https://www.remotion.dev/docs/clipper)\n\t */\n\tClipper,\n\t/**\n\t * @description This is a special component, that, when rendered, will skip rendering the frame altogether.\n\t * @see [Documentation](https://www.remotion.dev/docs/null)\n\t */\n\tNull,\n\tuseIsPlayer,\n};\n\nconst proxyObj = {};\n\nexport const Config = new Proxy(proxyObj, {\n\tget(_, prop): unknown {\n\t\tif (\n\t\t\tprop === 'Bundling' ||\n\t\t\tprop === 'Rendering' ||\n\t\t\tprop === 'Log' ||\n\t\t\tprop === 'Puppeteer' ||\n\t\t\tprop === 'Output'\n\t\t) {\n\t\t\treturn Config;\n\t\t}\n\n\t\treturn () => {\n\t\t\t/* eslint-disable no-console */\n\t\t\tconsole.warn(\n\t\t\t\t'⚠️ The CLI configuration has been extracted from Remotion Core.',\n\t\t\t);\n\t\t\tconsole.warn('Update the import from the config file:');\n\t\t\tconsole.warn();\n\t\t\tconsole.warn('- Delete:');\n\t\t\tconsole.warn('import {Config} from \"remotion\";');\n\t\t\tconsole.warn('+ Replace:');\n\t\t\tconsole.warn('import {Config} from \"@remotion/cli/config\";');\n\t\t\tconsole.warn();\n\t\t\tconsole.warn(\n\t\t\t\t'For more information, see https://www.remotion.dev/docs/4-0-migration.',\n\t\t\t);\n\t\t\t/* eslint-enable no-console */\n\n\t\t\tprocess.exit(1);\n\t\t};\n\t},\n});\n\naddSequenceStackTraces(Sequence);\n\nexport type _InternalTypes = {\n\tAnyComposition: AnyComposition;\n\tBundleCompositionState: BundleCompositionState;\n\tBundleState: BundleState;\n\tVideoConfigWithSerializedProps: VideoConfigWithSerializedProps;\n\tAnyCompMetadata: AnyCompMetadata;\n\tAudioOrVideoAsset: AudioOrVideoAsset;\n\tTRenderAsset: TRenderAsset;\n};\n"
|
|
133
|
-
],
|
|
134
|
-
"mappings": "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",
|
|
135
|
-
"debugId": "58A103EE46DF799E64756E2164756E21",
|
|
136
|
-
"names": []
|
|
137
|
-
}
|