remotion 4.0.532 → 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 (40) hide show
  1. package/dist/cjs/CompositionManager.d.ts +10 -0
  2. package/dist/cjs/CompositionManagerProvider.js +6 -9
  3. package/dist/cjs/HtmlInCanvas.d.ts +2 -0
  4. package/dist/cjs/HtmlInCanvas.js +17 -4
  5. package/dist/cjs/Sequence.d.ts +5 -0
  6. package/dist/cjs/Sequence.js +73 -11
  7. package/dist/cjs/SequenceManager.d.ts +37 -7
  8. package/dist/cjs/SequenceManager.js +317 -30
  9. package/dist/cjs/Track.d.ts +6 -0
  10. package/dist/cjs/Track.js +32 -0
  11. package/dist/cjs/animated-image/AnimatedImage.js +2 -1
  12. package/dist/cjs/canvas-image/CanvasImage.js +2 -1
  13. package/dist/cjs/effects/Solid.js +4 -3
  14. package/dist/cjs/effects/use-memoized-effects.d.ts +3 -1
  15. package/dist/cjs/effects/use-memoized-effects.js +12 -6
  16. package/dist/cjs/evaluate-source-expressions.d.ts +5 -0
  17. package/dist/cjs/evaluate-source-expressions.js +98 -0
  18. package/dist/cjs/freeze.js +6 -8
  19. package/dist/cjs/index.d.ts +2 -0
  20. package/dist/cjs/index.js +3 -1
  21. package/dist/cjs/internals.d.ts +13 -3
  22. package/dist/cjs/internals.js +11 -0
  23. package/dist/cjs/no-react.d.ts +2 -0
  24. package/dist/cjs/no-react.js +3 -0
  25. package/dist/cjs/series/index.js +3 -1
  26. package/dist/cjs/timeline-track-context.d.ts +9 -0
  27. package/dist/cjs/timeline-track-context.js +6 -0
  28. package/dist/cjs/use-media-in-timeline.js +14 -2
  29. package/dist/cjs/use-schema.d.ts +32 -18
  30. package/dist/cjs/use-sequence-registration.js +1 -1
  31. package/dist/cjs/version.d.ts +1 -1
  32. package/dist/cjs/version.js +1 -1
  33. package/dist/cjs/video/html5-video.js +1 -1
  34. package/dist/cjs/with-interactivity-schema.js +13 -7
  35. package/dist/cjs/wrap-remotion-context.d.ts +2 -0
  36. package/dist/cjs/wrap-remotion-context.js +8 -1
  37. package/dist/esm/index.mjs +788 -315
  38. package/dist/esm/no-react.mjs +78 -0
  39. package/dist/esm/version.mjs +1 -1
  40. package/package.json +2 -2
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.evaluateSourcePropStatuses = exports.evaluateSourceNumericValue = void 0;
4
+ const evaluateSourceNumericValue = (expression, config) => {
5
+ var _a;
6
+ if (typeof expression === 'number') {
7
+ return expression;
8
+ }
9
+ if (expression.type === 'literal') {
10
+ return expression.value;
11
+ }
12
+ if (expression.type === 'binary') {
13
+ const left = (0, exports.evaluateSourceNumericValue)(expression.left, config);
14
+ const right = (0, exports.evaluateSourceNumericValue)(expression.right, config);
15
+ switch (expression.operator) {
16
+ case '+':
17
+ return left + right;
18
+ case '-':
19
+ return left - right;
20
+ case '*':
21
+ return left * right;
22
+ case '/':
23
+ return left / right;
24
+ default:
25
+ throw new Error('Unknown source expression operator');
26
+ }
27
+ }
28
+ const value = expression.binding.type === 'constant'
29
+ ? expression.binding.value
30
+ : ((_a = config === null || config === void 0 ? void 0 : config[expression.binding.field]) !== null && _a !== void 0 ? _a : NaN);
31
+ if (expression.type === 'video-config-multiplication') {
32
+ return value * expression.multiplier;
33
+ }
34
+ if (expression.type === 'video-config-subtraction') {
35
+ return value - expression.subtrahend;
36
+ }
37
+ return value;
38
+ };
39
+ exports.evaluateSourceNumericValue = evaluateSourceNumericValue;
40
+ const evaluatedProps = new WeakMap();
41
+ /** Resolve at the consumer, never in the shared source subscription cache. */
42
+ const evaluateSourcePropStatuses = (props, config) => {
43
+ var _a;
44
+ const configKey = config === null
45
+ ? ''
46
+ : `${config.durationInFrames}:${config.fps}:${config.width}:${config.height}`;
47
+ const cached = (_a = evaluatedProps.get(props)) !== null && _a !== void 0 ? _a : new Map();
48
+ const existing = cached.get(configKey);
49
+ if (existing)
50
+ return existing;
51
+ const result = Object.fromEntries(Object.entries(props).map(([key, status]) => {
52
+ var _a;
53
+ if (status.status === 'computed') {
54
+ return [key, status];
55
+ }
56
+ const adjustment = status.keyframeDisplayOffsetAdjustment === null
57
+ ? null
58
+ : (0, exports.evaluateSourceNumericValue)(status.keyframeDisplayOffsetAdjustment, config);
59
+ const rate = (0, exports.evaluateSourceNumericValue)((_a = status.keyframePlaybackRateAdjustment) !== null && _a !== void 0 ? _a : 1, config);
60
+ if ((adjustment !== null && !Number.isFinite(adjustment)) ||
61
+ !Number.isFinite(rate) ||
62
+ rate <= 0) {
63
+ return [key, { status: 'computed' }];
64
+ }
65
+ const timing = {
66
+ keyframeDisplayOffsetAdjustment: adjustment,
67
+ ...(status.keyframePlaybackRateAdjustment === undefined
68
+ ? {}
69
+ : { keyframePlaybackRateAdjustment: rate }),
70
+ };
71
+ if (status.status === 'static') {
72
+ const value = status.numericExpression === undefined
73
+ ? status.codeValue
74
+ : (0, exports.evaluateSourceNumericValue)(status.numericExpression, config);
75
+ return [
76
+ key,
77
+ status.numericExpression !== undefined && !Number.isFinite(value)
78
+ ? { status: 'computed' }
79
+ : { ...status, ...timing, codeValue: value },
80
+ ];
81
+ }
82
+ const keyframes = status.keyframes.map((keyframe) => ({
83
+ ...keyframe,
84
+ frame: (0, exports.evaluateSourceNumericValue)(keyframe.frame, config),
85
+ }));
86
+ if (keyframes.some((keyframe, index) => !Number.isFinite(keyframe.frame) ||
87
+ (index > 0 && keyframe.frame <= keyframes[index - 1].frame))) {
88
+ return [key, { status: 'computed' }];
89
+ }
90
+ return [key, { ...status, ...timing, keyframes }];
91
+ }));
92
+ cached.set(configKey, result);
93
+ if (cached.size > 8)
94
+ cached.delete(cached.keys().next().value);
95
+ evaluatedProps.set(props, cached);
96
+ return result;
97
+ };
98
+ exports.evaluateSourcePropStatuses = evaluateSourcePropStatuses;
@@ -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, }: {
@@ -98,6 +100,7 @@ export declare const Internals: {
98
100
  readonly CompositionSetters: import("react").Context<import("./CompositionManagerContext.js").CompositionManagerSetters>;
99
101
  readonly VisualModePropStatusesContext: import("react").Context<import("./SequenceManager.js").VisualModePropStatuses>;
100
102
  readonly VisualModePropStatusesRefContext: import("react").Context<import("./SequenceManager.js").VisualModePropStatusesRef>;
103
+ readonly VisualModeBatchSettersContext: import("react").Context<import("./SequenceManager.js").VisualModeBatchSetters | null>;
101
104
  readonly VisualModeDragOverridesContext: import("react").Context<import("./SequenceManager.js").VisualModeDragOverrides>;
102
105
  readonly VisualModeSettersContext: import("react").Context<import("./SequenceManager.js").VisualModeSetters>;
103
106
  readonly SequenceManager: import("react").Context<import("./SequenceManager.js").SequenceManagerContext>;
@@ -105,6 +108,8 @@ export declare const Internals: {
105
108
  readonly children: import("react").ReactNode;
106
109
  }>;
107
110
  readonly SequenceManagerRefContext: import("react").Context<import("./SequenceManager.js").SequenceManagerRef>;
111
+ readonly useActiveFromDragOverrideKeys: () => ReadonlySet<string>;
112
+ readonly useSequenceManagerSequences: () => TSequence[];
108
113
  readonly SequenceRegistrationContext: import("react").Context<boolean>;
109
114
  readonly DisableSequenceRegistrationProvider: import("react").FC<{
110
115
  readonly children: import("react").ReactNode;
@@ -823,6 +828,9 @@ export declare const Internals: {
823
828
  });
824
829
  readonly truthy: typeof truthy;
825
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>;
826
834
  readonly PremountContext: import("react").Context<import("./PremountContext.js").PremountContextValue>;
827
835
  readonly usePremounting: ({ from, durationInFrames, premountFor, postmountFor, style, styleWhilePremounted, styleWhilePostmounted, hideWhilePremounted, }: {
828
836
  readonly from: number;
@@ -1239,9 +1247,10 @@ export declare const Internals: {
1239
1247
  readonly createEffectChainState: (width: number, height: number) => import("./internals.js").EffectChainState;
1240
1248
  readonly cleanupEffectChainState: (state: import("./internals.js").EffectChainState) => void;
1241
1249
  readonly runEffectChain: ({ state, source, effects, output, width, height, }: import("./effects/run-effect-chain.js").RunEffectChainOptions) => Promise<boolean>;
1242
- readonly useMemoizedEffects: ({ effects, overrideId, }: {
1250
+ readonly useMemoizedEffects: ({ effects, overrideId, videoConfigValues, }: {
1243
1251
  effects: readonly import("./index.js").EffectDescriptor<unknown>[];
1244
1252
  readonly overrideId: string | null;
1253
+ videoConfigValues: VideoConfigValues | null;
1245
1254
  }) => import("./index.js").EffectDefinitionAndStack<unknown>[];
1246
1255
  readonly useMemoizedEffectDefinitions: (effects: readonly import("./index.js").EffectDescriptor<unknown>[]) => readonly import("./index.js").EffectDefinition<unknown>[] & {
1247
1256
  readonly runtimeValues: readonly import("./runtime-value-store.js").RuntimeValueStore[];
@@ -1253,7 +1262,7 @@ export declare const Internals: {
1253
1262
  schema: InteractivitySchema;
1254
1263
  currentValue: Record<string, unknown>;
1255
1264
  overrideValues: Record<string, DragOverrideValue>;
1256
- propStatus: Record<string, CanUpdateSequencePropStatus> | undefined;
1265
+ propStatus: Record<string, CanUpdateSequencePropStatus<number>> | undefined;
1257
1266
  frame: number | null;
1258
1267
  }) => {
1259
1268
  merged: Record<string, unknown>;
@@ -1277,7 +1286,7 @@ export declare const Internals: {
1277
1286
  }) => string) => void;
1278
1287
  readonly makeStaticDragOverride: (value: unknown) => DragOverrideValue;
1279
1288
  readonly makeKeyframedDragOverride: ({ status, frame, value, defaultEasing, }: {
1280
- status: CanUpdateSequencePropStatusKeyframed;
1289
+ status: CanUpdateSequencePropStatusKeyframed<number>;
1281
1290
  frame: number;
1282
1291
  value: unknown;
1283
1292
  defaultEasing?: CanUpdateSequencePropStatusEasing | undefined;
@@ -1344,3 +1353,4 @@ export declare const Internals: {
1344
1353
  }) => import("react").CSSProperties | null;
1345
1354
  };
1346
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,
@@ -165,11 +170,14 @@ exports.Internals = {
165
170
  CompositionSetters: CompositionManagerContext_js_1.CompositionSetters,
166
171
  VisualModePropStatusesContext: SequenceManager_js_1.VisualModePropStatusesContext,
167
172
  VisualModePropStatusesRefContext: SequenceManager_js_1.VisualModePropStatusesRefContext,
173
+ VisualModeBatchSettersContext: SequenceManager_js_1.VisualModeBatchSettersContext,
168
174
  VisualModeDragOverridesContext: SequenceManager_js_1.VisualModeDragOverridesContext,
169
175
  VisualModeSettersContext: SequenceManager_js_1.VisualModeSettersContext,
170
176
  SequenceManager: SequenceManager_js_1.SequenceManager,
171
177
  SequenceManagerProvider: SequenceManager_js_1.SequenceManagerProvider,
172
178
  SequenceManagerRefContext: SequenceManager_js_1.SequenceManagerRefContext,
179
+ useActiveFromDragOverrideKeys: SequenceManager_js_1.useActiveFromDragOverrideKeys,
180
+ useSequenceManagerSequences: SequenceManager_js_1.useSequenceManagerSequences,
173
181
  SequenceRegistrationContext: SequenceManager_js_1.SequenceRegistrationContext,
174
182
  DisableSequenceRegistrationProvider: SequenceManager_js_1.DisableSequenceRegistrationProvider,
175
183
  CommitOrderInternals: sequence_order_marker_js_1.CommitOrderInternals,
@@ -198,6 +206,9 @@ exports.Internals = {
198
206
  useLazyComponent: use_lazy_component_js_1.useLazyComponent,
199
207
  truthy: truthy_js_1.truthy,
200
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,
201
212
  PremountContext: PremountContext_js_1.PremountContext,
202
213
  usePremounting: use_premounting_js_1.usePremounting,
203
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>;
@@ -4,7 +4,7 @@ exports.useSequenceRegistration = void 0;
4
4
  const react_1 = require("react");
5
5
  const SequenceManager_js_1 = require("./SequenceManager.js");
6
6
  const useSequenceRegistration = ({ getSequence, id, }) => {
7
- const { registerSequence, unregisterSequence, updateSequence } = (0, react_1.useContext)(SequenceManager_js_1.SequenceManager);
7
+ const { registerSequence, unregisterSequence, updateSequence } = (0, react_1.useContext)(SequenceManager_js_1.SequenceManagerActionsContext);
8
8
  const registrationDisabled = (0, react_1.useContext)(SequenceManager_js_1.DisableSequenceRegistrationContext);
9
9
  const getSequenceRef = (0, react_1.useRef)(getSequence);
10
10
  getSequenceRef.current = getSequence;
@@ -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.532";
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.532';
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,