remotion 4.0.533 → 4.0.534

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/dist/cjs/CompositionManager.d.ts +4 -0
  2. package/dist/cjs/CompositionManagerProvider.js +6 -9
  3. package/dist/cjs/HtmlInCanvas.js +2 -1
  4. package/dist/cjs/Sequence.d.ts +5 -0
  5. package/dist/cjs/Sequence.js +44 -11
  6. package/dist/cjs/SequenceManager.d.ts +9 -7
  7. package/dist/cjs/SequenceManager.js +24 -4
  8. package/dist/cjs/Track.d.ts +6 -0
  9. package/dist/cjs/Track.js +32 -0
  10. package/dist/cjs/animated-image/AnimatedImage.js +2 -1
  11. package/dist/cjs/canvas-image/CanvasImage.js +2 -1
  12. package/dist/cjs/effects/Solid.js +4 -3
  13. package/dist/cjs/effects/use-memoized-effects.d.ts +3 -1
  14. package/dist/cjs/effects/use-memoized-effects.js +8 -4
  15. package/dist/cjs/evaluate-source-expressions.d.ts +5 -0
  16. package/dist/cjs/evaluate-source-expressions.js +98 -0
  17. package/dist/cjs/freeze.js +6 -8
  18. package/dist/cjs/index.d.ts +2 -0
  19. package/dist/cjs/index.js +3 -1
  20. package/dist/cjs/internals.d.ts +10 -3
  21. package/dist/cjs/internals.js +8 -0
  22. package/dist/cjs/no-react.d.ts +2 -0
  23. package/dist/cjs/no-react.js +3 -0
  24. package/dist/cjs/series/index.js +3 -1
  25. package/dist/cjs/timeline-track-context.d.ts +9 -0
  26. package/dist/cjs/timeline-track-context.js +6 -0
  27. package/dist/cjs/use-media-in-timeline.js +14 -2
  28. package/dist/cjs/use-schema.d.ts +32 -18
  29. package/dist/cjs/version.d.ts +1 -1
  30. package/dist/cjs/version.js +1 -1
  31. package/dist/cjs/video/html5-video.js +1 -1
  32. package/dist/cjs/with-interactivity-schema.js +8 -2
  33. package/dist/cjs/wrap-remotion-context.d.ts +2 -0
  34. package/dist/cjs/wrap-remotion-context.js +8 -1
  35. package/dist/esm/index.mjs +404 -205
  36. package/dist/esm/no-react.mjs +78 -0
  37. package/dist/esm/version.mjs +1 -1
  38. package/package.json +2 -2
@@ -44,12 +44,11 @@ const Freeze = ({ frame: frameToFreeze, children, active = true, _remotionIntern
44
44
  const isInsideNonPremountFreeze = (0, exports.useIsInsideNonPremountFreeze)();
45
45
  const relativeFrom = (_a = sequenceContext === null || sequenceContext === void 0 ? void 0 : sequenceContext.relativeFrom) !== null && _a !== void 0 ? _a : 0;
46
46
  const playbackRate = (_b = sequenceContext === null || sequenceContext === void 0 ? void 0 : sequenceContext.playbackRate) !== null && _b !== void 0 ? _b : 1;
47
- const timelineValue = (0, react_1.useMemo)(() => {
48
- if (!isActive) {
49
- return timelineContext;
50
- }
47
+ const { audioAndVideoTags } = timelineContext;
48
+ // Advancing the outer timeline must not invalidate the frozen clock.
49
+ const frozenTimelineValue = (0, react_1.useMemo)(() => {
51
50
  return {
52
- ...timelineContext,
51
+ audioAndVideoTags,
53
52
  isPlaying: () => false,
54
53
  isInsideFreeze: true,
55
54
  frame: {
@@ -57,8 +56,7 @@ const Freeze = ({ frame: frameToFreeze, children, active = true, _remotionIntern
57
56
  },
58
57
  };
59
58
  }, [
60
- isActive,
61
- timelineContext,
59
+ audioAndVideoTags,
62
60
  videoConfig.id,
63
61
  frameToFreeze,
64
62
  relativeFrom,
@@ -77,6 +75,6 @@ const Freeze = ({ frame: frameToFreeze, children, active = true, _remotionIntern
77
75
  };
78
76
  }, [sequenceContext, isActive]);
79
77
  return (jsx_runtime_1.jsx(NonPremountFreezeContext.Provider, { value: isInsideNonPremountFreeze ||
80
- (Boolean(isActive) && !_remotionInternalIsPremounting), children: jsx_runtime_1.jsx(TimelineContext_js_1.TimelineContext.Provider, { value: timelineValue, children: jsx_runtime_1.jsx(SequenceContext_js_1.SequenceContext.Provider, { value: newSequenceContext, children: children }) }) }));
78
+ (Boolean(isActive) && !_remotionInternalIsPremounting), children: jsx_runtime_1.jsx(TimelineContext_js_1.TimelineContext.Provider, { value: isActive ? frozenTimelineValue : timelineContext, children: jsx_runtime_1.jsx(SequenceContext_js_1.SequenceContext.Provider, { value: newSequenceContext, children: children }) }) }));
81
79
  };
82
80
  exports.Freeze = Freeze;
@@ -34,6 +34,7 @@ declare global {
34
34
  remotion_calculateComposition: (compId: string) => Promise<VideoConfigWithSerializedProps>;
35
35
  remotion_setBundleMode: (bundleMode: BundleState) => void;
36
36
  remotion_staticBase: string;
37
+ remotion_outputsBase: string | null;
37
38
  remotion_staticFiles: StaticFile[];
38
39
  remotion_publicPath: string;
39
40
  remotion_publicFolderExists: string | null;
@@ -145,6 +146,7 @@ export * from './spring/index.js';
145
146
  export { staticFile } from './static-file.js';
146
147
  export * from './Still.js';
147
148
  export type { PlayableMediaTag } from './timeline-position-state.js';
149
+ export { Track, type TrackProps } from './Track.js';
148
150
  export { useBufferState } from './use-buffer-state';
149
151
  export { useCurrentFrame } from './use-current-frame.js';
150
152
  export { CurrentScaleContextType, PreviewSize, PreviewSizeCtx, Translation, useCurrentScale, } from './use-current-scale';
package/dist/cjs/index.js CHANGED
@@ -14,7 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.Config = exports.Experimental = exports.watchStaticFile = exports.MediaPlaybackError = exports.Video = exports.OffthreadVideo = exports.Html5Video = exports.useRemotionEnvironment = exports.usePixelDensity = exports.useDelayRender = exports.useCurrentScale = exports.useCurrentFrame = exports.useBufferState = exports.staticFile = exports.Series = exports.Sequence = exports.registerRoot = exports.prefetch = exports.random = exports.interpolate = exports.assertValidInterpolatePosterizeOption = exports.assertValidInterpolateEasingOption = exports.Loop = exports.interpolateColors = exports.Interactive = exports.Img = exports.getStaticFiles = exports.getRemotionEnvironment = exports.delayRender = exports.continueRender = exports.getInputProps = exports.Composition = exports.CanvasImage = exports.isHtmlInCanvasSupported = exports.HtmlInCanvas = exports.getHtmlInCanvasUnsupportedMessage = exports.HTML_IN_CANVAS_UNSUPPORTED_MESSAGE = exports.Solid = exports.cancelRender = exports.Html5Audio = exports.Audio = exports.Artifact = exports.createEffect = void 0;
17
+ exports.Config = exports.Experimental = exports.watchStaticFile = exports.MediaPlaybackError = exports.Video = exports.OffthreadVideo = exports.Html5Video = exports.useRemotionEnvironment = exports.usePixelDensity = exports.useDelayRender = exports.useCurrentScale = exports.useCurrentFrame = exports.useBufferState = exports.Track = exports.staticFile = exports.Series = exports.Sequence = exports.registerRoot = exports.prefetch = exports.random = exports.interpolate = exports.assertValidInterpolatePosterizeOption = exports.assertValidInterpolateEasingOption = exports.Loop = exports.interpolateColors = exports.Interactive = exports.Img = exports.getStaticFiles = exports.getRemotionEnvironment = exports.delayRender = exports.continueRender = exports.getInputProps = exports.Composition = exports.CanvasImage = exports.isHtmlInCanvasSupported = exports.HtmlInCanvas = exports.getHtmlInCanvasUnsupportedMessage = exports.HTML_IN_CANVAS_UNSUPPORTED_MESSAGE = exports.Solid = exports.cancelRender = exports.Html5Audio = exports.Audio = exports.Artifact = exports.createEffect = void 0;
18
18
  require("./_check-rsc.js");
19
19
  require("./asset-types.js");
20
20
  const Clipper_js_1 = require("./Clipper.js");
@@ -91,6 +91,8 @@ __exportStar(require("./spring/index.js"), exports);
91
91
  const static_file_js_1 = require("./static-file.js");
92
92
  Object.defineProperty(exports, "staticFile", { enumerable: true, get: function () { return static_file_js_1.staticFile; } });
93
93
  __exportStar(require("./Still.js"), exports);
94
+ const Track_js_1 = require("./Track.js");
95
+ Object.defineProperty(exports, "Track", { enumerable: true, get: function () { return Track_js_1.Track; } });
94
96
  const use_buffer_state_1 = require("./use-buffer-state");
95
97
  Object.defineProperty(exports, "useBufferState", { enumerable: true, get: function () { return use_buffer_state_1.useBufferState; } });
96
98
  const use_current_frame_js_1 = require("./use-current-frame.js");
@@ -25,6 +25,8 @@ import type { WatchRemotionStaticFilesPayload } from './watch-static-file.js';
25
25
  import { useRemotionContexts } from './wrap-remotion-context.js';
26
26
  export type { EffectChainState } from './effects/run-effect-chain.js';
27
27
  export declare const Internals: {
28
+ readonly evaluateSourceNumericValue: (expression: import("./use-schema.js").SourceNumericValue, config: VideoConfigValues | null) => number;
29
+ readonly evaluateSourcePropStatuses: (props: Record<string, import("./use-schema.js").CanUpdateSequencePropSource>, config: VideoConfigValues | null) => Record<string, CanUpdateSequencePropStatus>;
28
30
  readonly AbsoluteFillElement: import("react").ForwardRefExoticComponent<Omit<import("./AbsoluteFillElement.js").AbsoluteFillElementProps, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
29
31
  readonly MaxMediaCacheSizeContext: import("react").Context<number | null>;
30
32
  readonly getMediabunnyInputResourceKey: ({ src, credentials, requestInitFingerprint, revision, }: {
@@ -826,6 +828,9 @@ export declare const Internals: {
826
828
  });
827
829
  readonly truthy: typeof truthy;
828
830
  readonly SequenceContext: import("react").Context<import("./SequenceContext.js").SequenceContextType | null>;
831
+ readonly TimelineTrackContext: import("react").Context<import("./timeline-track-context.js").TimelineTrack | null>;
832
+ readonly ExperimentalTracksEnabledContext: import("react").Context<boolean>;
833
+ readonly TrackWithoutSchema: import("react").FC<import("./Sequence.js").SequenceProps>;
829
834
  readonly PremountContext: import("react").Context<import("./PremountContext.js").PremountContextValue>;
830
835
  readonly usePremounting: ({ from, durationInFrames, premountFor, postmountFor, style, styleWhilePremounted, styleWhilePostmounted, hideWhilePremounted, }: {
831
836
  readonly from: number;
@@ -1242,9 +1247,10 @@ export declare const Internals: {
1242
1247
  readonly createEffectChainState: (width: number, height: number) => import("./internals.js").EffectChainState;
1243
1248
  readonly cleanupEffectChainState: (state: import("./internals.js").EffectChainState) => void;
1244
1249
  readonly runEffectChain: ({ state, source, effects, output, width, height, }: import("./effects/run-effect-chain.js").RunEffectChainOptions) => Promise<boolean>;
1245
- readonly useMemoizedEffects: ({ effects, overrideId, }: {
1250
+ readonly useMemoizedEffects: ({ effects, overrideId, videoConfigValues, }: {
1246
1251
  effects: readonly import("./index.js").EffectDescriptor<unknown>[];
1247
1252
  readonly overrideId: string | null;
1253
+ videoConfigValues: VideoConfigValues | null;
1248
1254
  }) => import("./index.js").EffectDefinitionAndStack<unknown>[];
1249
1255
  readonly useMemoizedEffectDefinitions: (effects: readonly import("./index.js").EffectDescriptor<unknown>[]) => readonly import("./index.js").EffectDefinition<unknown>[] & {
1250
1256
  readonly runtimeValues: readonly import("./runtime-value-store.js").RuntimeValueStore[];
@@ -1256,7 +1262,7 @@ export declare const Internals: {
1256
1262
  schema: InteractivitySchema;
1257
1263
  currentValue: Record<string, unknown>;
1258
1264
  overrideValues: Record<string, DragOverrideValue>;
1259
- propStatus: Record<string, CanUpdateSequencePropStatus> | undefined;
1265
+ propStatus: Record<string, CanUpdateSequencePropStatus<number>> | undefined;
1260
1266
  frame: number | null;
1261
1267
  }) => {
1262
1268
  merged: Record<string, unknown>;
@@ -1280,7 +1286,7 @@ export declare const Internals: {
1280
1286
  }) => string) => void;
1281
1287
  readonly makeStaticDragOverride: (value: unknown) => DragOverrideValue;
1282
1288
  readonly makeKeyframedDragOverride: ({ status, frame, value, defaultEasing, }: {
1283
- status: CanUpdateSequencePropStatusKeyframed;
1289
+ status: CanUpdateSequencePropStatusKeyframed<number>;
1284
1290
  frame: number;
1285
1291
  value: unknown;
1286
1292
  defaultEasing?: CanUpdateSequencePropStatusEasing | undefined;
@@ -1347,3 +1353,4 @@ export declare const Internals: {
1347
1353
  }) => import("react").CSSProperties | null;
1348
1354
  };
1349
1355
  export type { ArrayFieldSchema, AssetFieldSchema, ArrayItemFieldSchema, CannotUpdateSequenceReason, CanUpdateEffectPropsResponse, CanUpdateEffectPropsResponseFalse, CanUpdateEffectPropsResponseTrue, CanUpdateSequencePropsResponse, CanUpdateSequencePropsResponseFalse, CanUpdateSequencePropsResponseTrue, CanUpdateSequencePropStatus, CanUpdateSequencePropStatusEasing, CanUpdateSequencePropStatusFalse, CanUpdateSequencePropStatusKeyframed, CanUpdateSequencePropStatusStatic, VideoConfigNumericExpression, CompositionManagerContext, CompProps, DragOverrides, DragOverrideValue, EffectDragOverrides, GetDragOverrides, GetEffectDragOverrides, GetEffectPropStatuses, GetPropStatuses, JsxComponentIdentity, LoggingContextValue, MediaVolumeContextValue, OriginalSourceLocation, OverrideIdsToNodePathsGettersContext, OverrideIdsToNodePathsSettersContext, OverrideIdToNodePaths, OverrideToNodePathGetters, OverrideToNodeSetters, PlaybackRateContextValue, PropStatuses, RemotionAudioContextState, RemotionEnvironment, ResolvedStackLocation, ScheduleAudioNodeOptions, ScheduleAudioNodeResult, InteractivitySchemaField, SequenceNodePath, SequencePropsSubscriptionKey, SequencePropsStatusRemapping, VideoConfigValues, InteractivitySchema, SerializedJSONWithCustomFields, SetMediaVolumeContextValue, SetTimelineContextValue, TCompMetadata, TComposition, TimelineContextValue, TRenderAsset, TSequence, VisibleFieldSchema, WatchRemotionStaticFilesPayload, };
1356
+ export type { CanUpdateSequencePropSource, SourceNumericValue, VideoConfigNumericBinding, } from './use-schema.js';
@@ -58,6 +58,7 @@ const use_effect_chain_state_js_1 = require("./effects/use-effect-chain-state.js
58
58
  const use_memoized_effects_js_1 = require("./effects/use-memoized-effects.js");
59
59
  const webgl2_context_error_js_1 = require("./effects/webgl2-context-error.js");
60
60
  const enable_sequence_stack_traces_js_1 = require("./enable-sequence-stack-traces.js");
61
+ const evaluate_source_expressions_js_1 = require("./evaluate-source-expressions.js");
61
62
  const find_props_to_delete_js_1 = require("./find-props-to-delete.js");
62
63
  const flatten_schema_js_1 = require("./flatten-schema.js");
63
64
  const freeze_js_1 = require("./freeze.js");
@@ -99,7 +100,9 @@ const SequenceManager_js_1 = require("./SequenceManager.js");
99
100
  const setup_env_variables_js_1 = require("./setup-env-variables.js");
100
101
  const TimelinePosition = __importStar(require("./timeline-position-state.js"));
101
102
  const timeline_position_state_js_1 = require("./timeline-position-state.js");
103
+ const timeline_track_context_js_1 = require("./timeline-track-context.js");
102
104
  const TimelineContext_js_1 = require("./TimelineContext.js");
105
+ const Track_js_1 = require("./Track.js");
103
106
  const truthy_js_1 = require("./truthy.js");
104
107
  const use_buffering_js_1 = require("./use-buffering.js");
105
108
  const use_crop_style_js_1 = require("./use-crop-style.js");
@@ -136,6 +139,8 @@ const compositionSelectorRef = (0, react_1.createRef)();
136
139
  // Mark them as Internals so use don't assume this is public
137
140
  // API and are less likely to use it
138
141
  exports.Internals = {
142
+ evaluateSourceNumericValue: evaluate_source_expressions_js_1.evaluateSourceNumericValue,
143
+ evaluateSourcePropStatuses: evaluate_source_expressions_js_1.evaluateSourcePropStatuses,
139
144
  AbsoluteFillElement: AbsoluteFillElement_js_1.AbsoluteFillElement,
140
145
  MaxMediaCacheSizeContext: max_video_cache_size_js_1.MaxMediaCacheSizeContext,
141
146
  getMediabunnyInputResourceKey: media_resource_manager_js_1.getMediabunnyInputResourceKey,
@@ -201,6 +206,9 @@ exports.Internals = {
201
206
  useLazyComponent: use_lazy_component_js_1.useLazyComponent,
202
207
  truthy: truthy_js_1.truthy,
203
208
  SequenceContext: SequenceContext_js_1.SequenceContext,
209
+ TimelineTrackContext: timeline_track_context_js_1.TimelineTrackContext,
210
+ ExperimentalTracksEnabledContext: timeline_track_context_js_1.ExperimentalTracksEnabledContext,
211
+ TrackWithoutSchema: Track_js_1.TrackWithoutSchema,
204
212
  PremountContext: PremountContext_js_1.PremountContext,
205
213
  usePremounting: use_premounting_js_1.usePremounting,
206
214
  resolveSequenceDuration: resolve_sequence_duration_js_1.resolveSequenceDuration,
@@ -12,6 +12,8 @@ import { validateDimension } from './validation/validate-dimensions';
12
12
  import { validateDurationInFrames } from './validation/validate-duration-in-frames';
13
13
  import { validateFps } from './validation/validate-fps';
14
14
  export declare const NoReactInternals: {
15
+ evaluateSourceNumericValue: (expression: import("./use-schema.js").SourceNumericValue, config: import("./video-config").VideoConfigValues | null) => number;
16
+ evaluateSourcePropStatuses: (props: Record<string, import("./use-schema.js").CanUpdateSequencePropSource>, config: import("./video-config").VideoConfigValues | null) => Record<string, import("./use-schema.js").CanUpdateSequencePropStatus>;
15
17
  processColor: typeof processColor;
16
18
  truthy: typeof truthy;
17
19
  validateFps: typeof validateFps;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.NoReactInternals = exports.random = exports.interpolate = exports.assertValidInterpolatePosterizeOption = exports.assertValidInterpolateEasingOption = void 0;
4
+ const evaluate_source_expressions_js_1 = require("./evaluate-source-expressions.js");
4
5
  const interpolate_1 = require("./interpolate");
5
6
  Object.defineProperty(exports, "assertValidInterpolateEasingOption", { enumerable: true, get: function () { return interpolate_1.assertValidInterpolateEasingOption; } });
6
7
  Object.defineProperty(exports, "assertValidInterpolatePosterizeOption", { enumerable: true, get: function () { return interpolate_1.assertValidInterpolatePosterizeOption; } });
@@ -27,6 +28,8 @@ const validate_fps_1 = require("./validation/validate-fps");
27
28
  const get_current_time_1 = require("./video/get-current-time");
28
29
  const offthread_video_source_1 = require("./video/offthread-video-source");
29
30
  exports.NoReactInternals = {
31
+ evaluateSourceNumericValue: evaluate_source_expressions_js_1.evaluateSourceNumericValue,
32
+ evaluateSourcePropStatuses: evaluate_source_expressions_js_1.evaluateSourcePropStatuses,
30
33
  processColor: interpolate_colors_1.processColor,
31
34
  truthy: truthy_1.truthy,
32
35
  validateFps: validate_fps_1.validateFps,
@@ -40,6 +40,7 @@ const enable_sequence_stack_traces_js_1 = require("../enable-sequence-stack-trac
40
40
  const Interactive_js_1 = require("../Interactive.js");
41
41
  const interactivity_schema_js_1 = require("../interactivity-schema.js");
42
42
  const Sequence_js_1 = require("../Sequence.js");
43
+ const Track_js_1 = require("../Track.js");
43
44
  const validate_duration_in_frames_js_1 = require("../validation/validate-duration-in-frames.js");
44
45
  const with_interactivity_schema_js_1 = require("../with-interactivity-schema.js");
45
46
  const flatten_children_js_1 = require("./flatten-children.js");
@@ -90,6 +91,7 @@ const validateSeriesSequenceProps = ({ durationInFrames, offset: offsetProp, ind
90
91
  return offset;
91
92
  };
92
93
  const SeriesInner = (props) => {
94
+ var _a;
93
95
  const childrenValue = (0, react_1.useMemo)(() => {
94
96
  const flattenedChildren = (0, flatten_children_js_1.flattenChildren)(props.children);
95
97
  const renderChildren = (i, startFrame) => {
@@ -139,7 +141,7 @@ const SeriesInner = (props) => {
139
141
  };
140
142
  return renderChildren(0, 0);
141
143
  }, [props.children]);
142
- return (jsx_runtime_1.jsx(Sequence_js_1.Sequence, { layout: "none", name: "<Series>", _remotionInternalDocumentationLink: "https://www.remotion.dev/docs/series", ...props, children: jsx_runtime_1.jsx(is_inside_series_js_1.IsInsideSeriesContainer, { children: childrenValue }) }));
144
+ return (jsx_runtime_1.jsx(Track_js_1.TrackWithoutSchema, { layout: "none", _remotionInternalDocumentationLink: "https://www.remotion.dev/docs/series", ...props, name: (_a = props.name) !== null && _a !== void 0 ? _a : '<Series>', children: jsx_runtime_1.jsx(is_inside_series_js_1.IsInsideSeriesContainer, { children: childrenValue }) }));
143
145
  };
144
146
  /**
145
147
  * @description with this component, you can easily stitch together scenes that should play sequentially after another.
@@ -0,0 +1,9 @@
1
+ export type TimelineTrack = {
2
+ readonly id: string;
3
+ readonly name: string;
4
+ };
5
+ export type TimelineTrackItem = TimelineTrack & {
6
+ readonly role: 'track' | 'clip' | 'transition' | 'overlay';
7
+ };
8
+ export declare const TimelineTrackContext: import("react").Context<TimelineTrack | null>;
9
+ export declare const ExperimentalTracksEnabledContext: import("react").Context<boolean>;
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ExperimentalTracksEnabledContext = exports.TimelineTrackContext = void 0;
4
+ const react_1 = require("react");
5
+ exports.TimelineTrackContext = (0, react_1.createContext)(null);
6
+ exports.ExperimentalTracksEnabledContext = (0, react_1.createContext)(false);
@@ -9,10 +9,12 @@ const index_js_1 = require("./loop/index.js");
9
9
  const sequence_outline_js_1 = require("./sequence-outline.js");
10
10
  const SequenceContext_js_1 = require("./SequenceContext.js");
11
11
  const SequenceManager_js_1 = require("./SequenceManager.js");
12
+ const timeline_track_context_js_1 = require("./timeline-track-context.js");
12
13
  const use_remotion_environment_js_1 = require("./use-remotion-environment.js");
13
14
  const use_sequence_registration_js_1 = require("./use-sequence-registration.js");
14
15
  const use_video_config_js_1 = require("./use-video-config.js");
15
16
  const volume_prop_js_1 = require("./volume-prop.js");
17
+ const EMPTY_EFFECTS = [];
16
18
  const useBasicMediaInTimeline = ({ volume, mediaVolume, src, displayName, trimBefore, trimAfter, playbackRate, sequenceDurationInFrames, mediaStartsAt, mediaFrom, loop, muted, }) => {
17
19
  var _a, _b;
18
20
  if (!src) {
@@ -89,6 +91,7 @@ exports.useBasicMediaInTimeline = useBasicMediaInTimeline;
89
91
  const useMediaInTimeline = ({ volume, mediaVolume, src, mediaType, playbackRate, displayName, id, getStack, showInTimeline, premountDisplay, postmountDisplay, loopDisplay, loopVolumeCurveBehavior, documentationLink, muted, }) => {
90
92
  var _a, _b;
91
93
  const parentSequence = (0, react_1.useContext)(SequenceContext_js_1.SequenceContext);
94
+ const timelineTrack = (0, react_1.useContext)(timeline_track_context_js_1.TimelineTrackContext);
92
95
  const mediaTrimBefore = (0, react_1.useContext)(use_audio_frame_js_1.Html5MediaTrimContext);
93
96
  const sequenceRegistrationEnabled = (0, react_1.useContext)(SequenceManager_js_1.SequenceRegistrationContext);
94
97
  const { durationInFrames } = (0, use_video_config_js_1.useVideoConfig)();
@@ -170,6 +173,14 @@ const useMediaInTimeline = ({ volume, mediaVolume, src, mediaType, playbackRate,
170
173
  }
171
174
  return {
172
175
  effectRuntimeValues: null,
176
+ ...(timelineTrack
177
+ ? {
178
+ timelineTrack: {
179
+ ...timelineTrack,
180
+ role: 'clip',
181
+ },
182
+ }
183
+ : {}),
173
184
  type: mediaType,
174
185
  src,
175
186
  id,
@@ -193,7 +204,7 @@ const useMediaInTimeline = ({ volume, mediaVolume, src, mediaType, playbackRate,
193
204
  premountDisplay,
194
205
  postmountDisplay,
195
206
  controls: null,
196
- effects: [],
207
+ effects: EMPTY_EFFECTS,
197
208
  refForOutline: automaticOutlineRef,
198
209
  isInsideSeries: false,
199
210
  frozenFrame: null,
@@ -202,7 +213,8 @@ const useMediaInTimeline = ({ volume, mediaVolume, src, mediaType, playbackRate,
202
213
  }, [
203
214
  duration,
204
215
  id,
205
- parentSequence,
216
+ timelineTrack,
217
+ parentSequence === null || parentSequence === void 0 ? void 0 : parentSequence.id,
206
218
  src,
207
219
  volumes,
208
220
  doesVolumeChange,
@@ -1,42 +1,56 @@
1
1
  import type { InteractivitySchema } from './interactivity-schema.js';
2
2
  import type { ExtrapolateType, InterpolateOutputOption } from './interpolate.js';
3
3
  import type { CanUpdateSequencePropsResponse, SequencePropsSubscriptionKey } from './SequenceManager.js';
4
- export type CanUpdateSequencePropStatusStatic = {
4
+ import type { VideoConfigValues } from './video-config.js';
5
+ export type CanUpdateSequencePropStatusStatic<Numeric = number> = {
5
6
  status: 'static';
6
7
  codeValue: unknown;
7
- keyframeDisplayOffsetAdjustment: number | null;
8
+ keyframeDisplayOffsetAdjustment: Numeric | null;
8
9
  /** Multiplies the element's local frame to recover the source frame clock. */
9
- keyframePlaybackRateAdjustment?: number;
10
+ keyframePlaybackRateAdjustment?: Numeric;
10
11
  /** False when the source frame clock cannot be represented by the Studio. */
11
12
  canKeyframe?: false;
12
13
  numericExpression?: VideoConfigNumericExpression;
13
14
  };
14
- export type CanUpdateSequencePropStatusKeyframe = {
15
- frame: number;
15
+ export type CanUpdateSequencePropStatusKeyframe<Numeric = number> = {
16
+ frame: Numeric;
16
17
  value: unknown;
17
18
  frameExpression?: VideoConfigNumericExpression;
18
19
  };
20
+ /** Source bindings remain independent of the configuration of a mounted instance. */
21
+ export type VideoConfigNumericBinding = {
22
+ type: 'video-config';
23
+ field: keyof VideoConfigValues;
24
+ } | {
25
+ type: 'constant';
26
+ value: number;
27
+ };
19
28
  export type VideoConfigNumericExpression = {
20
29
  type: 'literal';
21
30
  value: number;
22
31
  } | {
23
32
  type: 'video-config-value';
24
33
  identifier: string;
25
- value: number;
34
+ binding: VideoConfigNumericBinding;
26
35
  } | {
27
36
  type: 'video-config-multiplication';
28
37
  identifier: string;
38
+ binding: VideoConfigNumericBinding;
29
39
  multiplier: number;
30
- multiplicand: number;
31
40
  factorPosition: 'left' | 'right';
32
- value: number;
33
41
  } | {
34
42
  type: 'video-config-subtraction';
35
43
  identifier: string;
36
- minuend: number;
44
+ binding: VideoConfigNumericBinding;
37
45
  subtrahend: number;
38
- value: number;
46
+ } | {
47
+ type: 'binary';
48
+ operator: '+' | '-' | '*' | '/';
49
+ left: SourceNumericValue;
50
+ right: SourceNumericValue;
39
51
  };
52
+ export type SourceNumericValue = number | VideoConfigNumericExpression;
53
+ export type CanUpdateSequencePropSource = CanUpdateSequencePropStatus<SourceNumericValue>;
40
54
  export type CanUpdateSequencePropStatusLinearEasing = {
41
55
  type: 'linear';
42
56
  };
@@ -69,7 +83,7 @@ export type CanUpdateSequencePropStatusInterpolationFunction = 'interpolate' | '
69
83
  export type CanUpdateSequencePropStatusComputed = {
70
84
  status: 'computed';
71
85
  };
72
- export type CanUpdateSequencePropStatusKeyframed = {
86
+ export type CanUpdateSequencePropStatusKeyframed<Numeric = number> = {
73
87
  status: 'keyframed';
74
88
  interpolationFunction: CanUpdateSequencePropStatusInterpolationFunction;
75
89
  /**
@@ -78,17 +92,17 @@ export type CanUpdateSequencePropStatusKeyframed = {
78
92
  * This is non-zero when the useCurrentFrame() call is outside a timing
79
93
  * element that wraps the controlled element.
80
94
  */
81
- keyframeDisplayOffsetAdjustment: number | null;
95
+ keyframeDisplayOffsetAdjustment: Numeric | null;
82
96
  /** Defaults to 1 for statuses produced without a playback rate conversion. */
83
- keyframePlaybackRateAdjustment?: number;
84
- keyframes: CanUpdateSequencePropStatusKeyframe[];
97
+ keyframePlaybackRateAdjustment?: Numeric;
98
+ keyframes: CanUpdateSequencePropStatusKeyframe<Numeric>[];
85
99
  easing: CanUpdateSequencePropStatusEasing[];
86
100
  clamping: CanUpdateSequencePropStatusClamping;
87
101
  posterize: number | undefined;
88
102
  output: InterpolateOutputOption | undefined;
89
103
  };
90
104
  export type CanUpdateSequencePropStatusFalse = CanUpdateSequencePropStatusComputed;
91
- export type CanUpdateSequencePropStatus = CanUpdateSequencePropStatusStatic | CanUpdateSequencePropStatusKeyframed | CanUpdateSequencePropStatusFalse;
105
+ export type CanUpdateSequencePropStatus<Numeric = number> = CanUpdateSequencePropStatusStatic<Numeric> | CanUpdateSequencePropStatusKeyframed<Numeric> | CanUpdateSequencePropStatusFalse;
92
106
  export type DragOverrideValue = {
93
107
  readonly type: 'static';
94
108
  readonly value: unknown;
@@ -105,18 +119,18 @@ export type GetDragOverrides = (nodePath: SequencePropsSubscriptionKey) => DragO
105
119
  export type GetEffectDragOverrides = (nodePath: SequencePropsSubscriptionKey, effectIndex: number) => Record<string, DragOverrideValue>;
106
120
  export declare const makeStaticDragOverride: (value: unknown) => DragOverrideValue;
107
121
  export declare const makeKeyframedDragOverride: ({ status, frame, value, defaultEasing, }: {
108
- status: CanUpdateSequencePropStatusKeyframed;
122
+ status: CanUpdateSequencePropStatusKeyframed<number>;
109
123
  frame: number;
110
124
  value: unknown;
111
125
  defaultEasing?: CanUpdateSequencePropStatusEasing | undefined;
112
126
  }) => DragOverrideValue;
113
127
  export declare const getStaticDragOverrideValue: (dragOverrideValue: DragOverrideValue | undefined) => unknown;
114
- export declare const isKeyframedStatus: (status: CanUpdateSequencePropStatus | null) => status is CanUpdateSequencePropStatusKeyframed;
128
+ export declare const isKeyframedStatus: (status: CanUpdateSequencePropStatus<number> | null) => status is CanUpdateSequencePropStatusKeyframed<number>;
115
129
  export declare const computeEffectiveSchemaValuesDotNotation: ({ schema, currentValue, overrideValues, propStatus, frame, }: {
116
130
  schema: InteractivitySchema;
117
131
  currentValue: Record<string, unknown>;
118
132
  overrideValues: Record<string, DragOverrideValue>;
119
- propStatus: Record<string, CanUpdateSequencePropStatus> | undefined;
133
+ propStatus: Record<string, CanUpdateSequencePropStatus<number>> | undefined;
120
134
  frame: number | null;
121
135
  }) => {
122
136
  merged: Record<string, unknown>;
@@ -3,4 +3,4 @@
3
3
  * @see [Documentation](https://remotion.dev/docs/version)
4
4
  * @returns {string} The current version of the remotion package
5
5
  */
6
- export declare const VERSION = "4.0.533";
6
+ export declare const VERSION = "4.0.534";
@@ -7,4 +7,4 @@ exports.VERSION = void 0;
7
7
  * @see [Documentation](https://remotion.dev/docs/version)
8
8
  * @returns {string} The current version of the remotion package
9
9
  */
10
- exports.VERSION = '4.0.533';
10
+ exports.VERSION = '4.0.534';
@@ -80,7 +80,7 @@ const VideoForwardingFunction = (props, ref) => {
80
80
  ? undefined
81
81
  : (trimBeforeValue !== null && trimBeforeValue !== void 0 ? trimBeforeValue : 0) +
82
82
  (effectiveTrimAfter - (trimBeforeValue !== null && trimBeforeValue !== void 0 ? trimBeforeValue : 0)) /
83
- ((_c = props.playbackRate) !== null && _c !== void 0 ? _c : 1), name: name, children: jsx_runtime_1.jsx(exports.Html5Video, { pauseWhenBuffering: shouldPauseWhenBuffering, onVideoFrame: onVideoFrame, ...otherProps, ref: ref, _remotionInternalStack: _remotionInternalStack }) }) }));
83
+ ((_c = props.playbackRate) !== null && _c !== void 0 ? _c : 1), name: name, children: jsx_runtime_1.jsx(exports.Html5Video, { pauseWhenBuffering: shouldPauseWhenBuffering, onVideoFrame: onVideoFrame, ...otherProps, ref: ref, showInTimeline: showInTimeline, _remotionInternalStack: _remotionInternalStack }) }) }));
84
84
  }
85
85
  (0, validate_media_props_js_1.validateMediaProps)({
86
86
  playbackRate: props.playbackRate,
@@ -121,7 +121,6 @@ const mergeValues = ({ flatSchema, props, valuesDotNotation, schemaKeys, propsTo
121
121
  return merged;
122
122
  };
123
123
  exports.mergeValues = mergeValues;
124
- const stackToOverrideMap = {};
125
124
  const DisableInteractivityContext = (0, react_1.createContext)(false);
126
125
  const DisableInteractivityProvider = ({ children }) => {
127
126
  return react_1.default.createElement(DisableInteractivityContext.Provider, { value: true }, children);
@@ -139,6 +138,9 @@ const withInteractivitySchema = ({ Component, componentName, componentIdentity =
139
138
  const schemaWithSequenceName = (0, interactivity_schema_js_1.extendSchemaWithSequenceName)(schema);
140
139
  const flatSchema = (0, flatten_schema_js_1.getFlatSchemaWithAllKeys)(schemaWithSequenceName);
141
140
  const flatKeys = Object.keys(flatSchema);
141
+ // A structural edit can put a different component at the same stack.
142
+ // Only reuse overrides for instances of this component.
143
+ const stackToOverrideMap = {};
142
144
  const Wrapped = (0, react_1.forwardRef)((props, ref) => {
143
145
  var _a;
144
146
  const { _remotionInternalStack: internalStack, ...propsWithoutInternalStack } = props;
@@ -261,7 +263,10 @@ const withInteractivitySchema = ({ Component, componentName, componentIdentity =
261
263
  overrideValues: dragOverrides,
262
264
  propStatus: nodePath === null
263
265
  ? undefined
264
- : (0, use_memoized_effects_js_1.getPropStatusesCtx)(propStatuses, nodePath),
266
+ : (0, use_memoized_effects_js_1.getPropStatusesCtx)(propStatuses, {
267
+ ...nodePath,
268
+ videoConfigValues,
269
+ }),
265
270
  frame,
266
271
  });
267
272
  }, [
@@ -269,6 +274,7 @@ const withInteractivitySchema = ({ Component, componentName, componentIdentity =
269
274
  dragOverrides,
270
275
  nodePath,
271
276
  propStatuses,
277
+ videoConfigValues,
272
278
  frame,
273
279
  ]);
274
280
  // 4. Eliminate values forbidden by the resolved discriminated union.
@@ -4,6 +4,8 @@ export declare function useRemotionContexts(): {
4
4
  timelineContext: import("./TimelineContext.js").TimelineContextValue | null;
5
5
  setTimelineContext: import("./TimelineContext.js").SetTimelineContextValue;
6
6
  sequenceContext: import("./SequenceContext.js").SequenceContextType | null;
7
+ experimentalTracksEnabled: boolean;
8
+ timelineTrackContext: import("./timeline-track-context.js").TimelineTrack | null;
7
9
  canUseRemotionHooksContext: boolean;
8
10
  preloadContext: {
9
11
  [x: string]: string;
@@ -49,12 +49,15 @@ const RenderAssetManager_js_1 = require("./RenderAssetManager.js");
49
49
  const ResolveCompositionConfig_js_1 = require("./ResolveCompositionConfig.js");
50
50
  const SequenceContext_js_1 = require("./SequenceContext.js");
51
51
  const SequenceManager_js_1 = require("./SequenceManager.js");
52
+ const timeline_track_context_js_1 = require("./timeline-track-context.js");
52
53
  const TimelineContext_js_1 = require("./TimelineContext.js");
53
54
  function useRemotionContexts() {
54
55
  const compositionManagerCtx = react_1.default.useContext(CompositionManagerContext_js_1.CompositionManager);
55
56
  const timelineContext = react_1.default.useContext(TimelineContext_js_1.TimelineContext);
56
57
  const setTimelineContext = react_1.default.useContext(TimelineContext_js_1.SetTimelineContext);
57
58
  const sequenceContext = react_1.default.useContext(SequenceContext_js_1.SequenceContext);
59
+ const experimentalTracksEnabled = react_1.default.useContext(timeline_track_context_js_1.ExperimentalTracksEnabledContext);
60
+ const timelineTrackContext = react_1.default.useContext(timeline_track_context_js_1.TimelineTrackContext);
58
61
  const canUseRemotionHooksContext = react_1.default.useContext(CanUseRemotionHooks_js_1.CanUseRemotionHooks);
59
62
  const preloadContext = react_1.default.useContext(prefetch_state_js_1.PreloadContext);
60
63
  const resolveCompositionContext = react_1.default.useContext(ResolveCompositionConfig_js_1.ResolveCompositionContext);
@@ -69,6 +72,8 @@ function useRemotionContexts() {
69
72
  timelineContext,
70
73
  setTimelineContext,
71
74
  sequenceContext,
75
+ experimentalTracksEnabled,
76
+ timelineTrackContext,
72
77
  canUseRemotionHooksContext,
73
78
  preloadContext,
74
79
  resolveCompositionContext,
@@ -81,6 +86,8 @@ function useRemotionContexts() {
81
86
  }), [
82
87
  compositionManagerCtx,
83
88
  sequenceContext,
89
+ experimentalTracksEnabled,
90
+ timelineTrackContext,
84
91
  setTimelineContext,
85
92
  timelineContext,
86
93
  canUseRemotionHooksContext,
@@ -96,6 +103,6 @@ function useRemotionContexts() {
96
103
  }
97
104
  const RemotionContextProvider = (props) => {
98
105
  const { children, contexts } = props;
99
- return (jsx_runtime_1.jsx(log_level_context_js_1.LogLevelContext.Provider, { value: contexts.logLevelContext, children: jsx_runtime_1.jsx(CanUseRemotionHooks_js_1.CanUseRemotionHooks.Provider, { value: contexts.canUseRemotionHooksContext, children: jsx_runtime_1.jsx(prefetch_state_js_1.PreloadContext.Provider, { value: contexts.preloadContext, children: jsx_runtime_1.jsx(CompositionManagerContext_js_1.CompositionManager.Provider, { value: contexts.compositionManagerCtx, children: jsx_runtime_1.jsx(SequenceManager_js_1.SequenceManagerRefContext.Provider, { value: contexts.sequenceManagerRefContext, children: jsx_runtime_1.jsx(SequenceManager_js_1.SequenceManager.Provider, { value: contexts.sequenceManagerContext, children: jsx_runtime_1.jsx(SequenceManager_js_1.VisualModePropStatusesRefContext.Provider, { value: contexts.visualModePropStatusesRefContext, children: jsx_runtime_1.jsx(RenderAssetManager_js_1.RenderAssetManager.Provider, { value: contexts.renderAssetManagerContext, children: jsx_runtime_1.jsx(ResolveCompositionConfig_js_1.ResolveCompositionContext.Provider, { value: contexts.resolveCompositionContext, children: jsx_runtime_1.jsx(TimelineContext_js_1.TimelineContext.Provider, { value: contexts.timelineContext, children: jsx_runtime_1.jsx(TimelineContext_js_1.SetTimelineContext.Provider, { value: contexts.setTimelineContext, children: jsx_runtime_1.jsx(SequenceContext_js_1.SequenceContext.Provider, { value: contexts.sequenceContext, children: jsx_runtime_1.jsx(buffering_js_1.BufferingContextReact.Provider, { value: contexts.bufferManagerContext, children: children }) }) }) }) }) }) }) }) }) }) }) }) }));
106
+ return (jsx_runtime_1.jsx(log_level_context_js_1.LogLevelContext.Provider, { value: contexts.logLevelContext, children: jsx_runtime_1.jsx(CanUseRemotionHooks_js_1.CanUseRemotionHooks.Provider, { value: contexts.canUseRemotionHooksContext, children: jsx_runtime_1.jsx(prefetch_state_js_1.PreloadContext.Provider, { value: contexts.preloadContext, children: jsx_runtime_1.jsx(CompositionManagerContext_js_1.CompositionManager.Provider, { value: contexts.compositionManagerCtx, children: jsx_runtime_1.jsx(SequenceManager_js_1.SequenceManagerRefContext.Provider, { value: contexts.sequenceManagerRefContext, children: jsx_runtime_1.jsx(SequenceManager_js_1.SequenceManager.Provider, { value: contexts.sequenceManagerContext, children: jsx_runtime_1.jsx(SequenceManager_js_1.VisualModePropStatusesRefContext.Provider, { value: contexts.visualModePropStatusesRefContext, children: jsx_runtime_1.jsx(RenderAssetManager_js_1.RenderAssetManager.Provider, { value: contexts.renderAssetManagerContext, children: jsx_runtime_1.jsx(ResolveCompositionConfig_js_1.ResolveCompositionContext.Provider, { value: contexts.resolveCompositionContext, children: jsx_runtime_1.jsx(TimelineContext_js_1.TimelineContext.Provider, { value: contexts.timelineContext, children: jsx_runtime_1.jsx(TimelineContext_js_1.SetTimelineContext.Provider, { value: contexts.setTimelineContext, children: jsx_runtime_1.jsx(SequenceContext_js_1.SequenceContext.Provider, { value: contexts.sequenceContext, children: jsx_runtime_1.jsx(buffering_js_1.BufferingContextReact.Provider, { value: contexts.bufferManagerContext, children: jsx_runtime_1.jsx(timeline_track_context_js_1.ExperimentalTracksEnabledContext.Provider, { value: contexts.experimentalTracksEnabled, children: jsx_runtime_1.jsx(timeline_track_context_js_1.TimelineTrackContext.Provider, { value: contexts.timelineTrackContext, children: children }) }) }) }) }) }) }) }) }) }) }) }) }) }) }));
100
107
  };
101
108
  exports.RemotionContextProvider = RemotionContextProvider;