remotion 4.0.473 → 4.0.474

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.
@@ -71,7 +71,7 @@ export type TSequence = {
71
71
  premountDisplay: number | null;
72
72
  postmountDisplay: number | null;
73
73
  controls: SequenceControls | null;
74
- refForOutline: React.RefObject<HTMLElement | null> | null;
74
+ refForOutline: React.RefObject<Element | null> | null;
75
75
  effects: readonly EffectDefinition<unknown>[];
76
76
  isInsideSeries: boolean;
77
77
  } & EnhancedTSequenceData;
@@ -65,7 +65,7 @@ export type SequencePropsWithoutDuration = {
65
65
  /**
66
66
  * @deprecated For internal use only.
67
67
  */
68
- readonly _remotionInternalRefForOutline?: React.RefObject<HTMLElement | null> | null;
68
+ readonly _remotionInternalRefForOutline?: React.RefObject<Element | null> | null;
69
69
  } & LayoutAndStyle;
70
70
  export type SequenceProps = {
71
71
  readonly durationInFrames?: number;
@@ -1,15 +1,22 @@
1
1
  import React from 'react';
2
2
  import type { TSequence } from './CompositionManager.js';
3
- import type { CanUpdateSequencePropStatus, CodeValues, DragOverrideValue, GetDragOverrides, GetEffectDragOverrides } from './use-schema.js';
3
+ import type { CanUpdateSequencePropStatus, DragOverrideValue, GetDragOverrides, GetEffectDragOverrides, PropStatuses } from './use-schema.js';
4
4
  export type SequenceManagerContext = {
5
5
  registerSequence: (seq: TSequence) => void;
6
6
  unregisterSequence: (id: string) => void;
7
7
  sequences: TSequence[];
8
8
  };
9
+ export type SequenceManagerRef = {
10
+ current: TSequence[];
11
+ };
9
12
  export type SequenceNodePath = Array<string | number>;
10
13
  export declare const SequenceManager: React.Context<SequenceManagerContext>;
11
- export type VisualModeCodeValues = {
12
- codeValues: CodeValues;
14
+ export declare const SequenceManagerRefContext: React.Context<SequenceManagerRef>;
15
+ export type VisualModePropStatuses = {
16
+ propStatuses: PropStatuses;
17
+ };
18
+ export type VisualModePropStatusesRef = {
19
+ current: PropStatuses;
13
20
  };
14
21
  export type VisualModeDragOverrides = {
15
22
  getDragOverrides: GetDragOverrides;
@@ -20,7 +27,7 @@ export type VisualModeSetters = {
20
27
  clearDragOverrides: (nodePath: SequencePropsSubscriptionKey) => void;
21
28
  setEffectDragOverrides: (nodePath: SequencePropsSubscriptionKey, effectIndex: number, key: string, value: DragOverrideValue) => void;
22
29
  clearEffectDragOverrides: (nodePath: SequencePropsSubscriptionKey, effectIndex: number) => void;
23
- setCodeValues: (nodePath: SequencePropsSubscriptionKey, values: (prev: CanUpdateSequencePropsResponse) => CanUpdateSequencePropsResponse) => void;
30
+ setPropStatuses: (nodePath: SequencePropsSubscriptionKey, values: (prev: CanUpdateSequencePropsResponse) => CanUpdateSequencePropsResponse) => void;
24
31
  };
25
32
  export type CanUpdateEffectPropsResponseTrue = {
26
33
  canUpdate: true;
@@ -48,7 +55,8 @@ export type CanUpdateSequencePropsResponseFalse = {
48
55
  };
49
56
  export type CanUpdateSequencePropsResponse = CanUpdateSequencePropsResponseTrue | CanUpdateSequencePropsResponseFalse;
50
57
  export declare const makeSequencePropsSubscriptionKey: (key: SequencePropsSubscriptionKey) => string;
51
- export declare const VisualModeCodeValuesContext: React.Context<VisualModeCodeValues>;
58
+ export declare const VisualModePropStatusesContext: React.Context<VisualModePropStatuses>;
59
+ export declare const VisualModePropStatusesRefContext: React.Context<VisualModePropStatusesRef>;
52
60
  export declare const VisualModeDragOverridesContext: React.Context<VisualModeDragOverrides>;
53
61
  export declare const VisualModeSettersContext: React.Context<VisualModeSetters>;
54
62
  export type SequencePropsSubscriptionKey = {
@@ -33,7 +33,7 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.SequenceManagerProvider = exports.VisualModeSettersContext = exports.VisualModeDragOverridesContext = exports.VisualModeCodeValuesContext = exports.makeSequencePropsSubscriptionKey = exports.SequenceManager = void 0;
36
+ exports.SequenceManagerProvider = exports.VisualModeSettersContext = exports.VisualModeDragOverridesContext = exports.VisualModePropStatusesRefContext = exports.VisualModePropStatusesContext = exports.makeSequencePropsSubscriptionKey = exports.SequenceManagerRefContext = exports.SequenceManager = void 0;
37
37
  const jsx_runtime_1 = require("react/jsx-runtime");
38
38
  const react_1 = __importStar(require("react"));
39
39
  exports.SequenceManager = react_1.default.createContext({
@@ -45,12 +45,18 @@ exports.SequenceManager = react_1.default.createContext({
45
45
  },
46
46
  sequences: [],
47
47
  });
48
+ exports.SequenceManagerRefContext = react_1.default.createContext({
49
+ current: [],
50
+ });
48
51
  const makeSequencePropsSubscriptionKey = (key) => {
49
52
  return `${key.nodePath.join('.')}.${key.sequenceKeys.join('.')}.${key.effectKeys.map((keys) => keys.join('.')).join('.')}`;
50
53
  };
51
54
  exports.makeSequencePropsSubscriptionKey = makeSequencePropsSubscriptionKey;
52
- exports.VisualModeCodeValuesContext = react_1.default.createContext({
53
- codeValues: {},
55
+ exports.VisualModePropStatusesContext = react_1.default.createContext({
56
+ propStatuses: {},
57
+ });
58
+ exports.VisualModePropStatusesRefContext = react_1.default.createContext({
59
+ current: {},
54
60
  });
55
61
  exports.VisualModeDragOverridesContext = react_1.default.createContext({
56
62
  getDragOverrides: () => {
@@ -73,18 +79,22 @@ exports.VisualModeSettersContext = react_1.default.createContext({
73
79
  clearEffectDragOverrides: () => {
74
80
  throw new Error('VisualModeSettersContext not initialized');
75
81
  },
76
- setCodeValues: () => {
82
+ setPropStatuses: () => {
77
83
  throw new Error('VisualModeSettersContext not initialized');
78
84
  },
79
85
  });
80
86
  const effectDragOverridesKey = (nodePath, effectIndex) => `${(0, exports.makeSequencePropsSubscriptionKey)(nodePath)}.effects.${effectIndex}`;
81
87
  const SequenceManagerProvider = ({ children }) => {
82
88
  const [sequences, setSequences] = (0, react_1.useState)([]);
89
+ const sequencesRef = (0, react_1.useRef)(sequences);
90
+ sequencesRef.current = sequences;
83
91
  const [dragOverrides, setControlOverrides] = (0, react_1.useState)({});
84
92
  const controlOverridesRef = (0, react_1.useRef)(dragOverrides);
85
93
  controlOverridesRef.current = dragOverrides;
86
94
  const [effectDragOverridesState, setEffectDragOverridesState] = (0, react_1.useState)({});
87
- const [codeValues, setCodeValuesMapState] = (0, react_1.useState)({});
95
+ const [propStatuses, setPropStatusesMapState] = (0, react_1.useState)({});
96
+ const propStatusesRef = (0, react_1.useRef)(propStatuses);
97
+ propStatusesRef.current = propStatuses;
88
98
  const setDragOverrides = (0, react_1.useCallback)((nodePath, key, value) => {
89
99
  setControlOverrides((prev) => ({
90
100
  ...prev,
@@ -128,8 +138,8 @@ const SequenceManagerProvider = ({ children }) => {
128
138
  return next;
129
139
  });
130
140
  }, []);
131
- const setCodeValues = (0, react_1.useCallback)((nodePath, values) => {
132
- setCodeValuesMapState((prev) => {
141
+ const setPropStatuses = (0, react_1.useCallback)((nodePath, values) => {
142
+ setPropStatusesMapState((prev) => {
133
143
  const key = (0, exports.makeSequencePropsSubscriptionKey)(nodePath);
134
144
  const prevKey = prev[key];
135
145
  const newKey = values(prevKey);
@@ -162,11 +172,11 @@ const SequenceManagerProvider = ({ children }) => {
162
172
  var _a;
163
173
  return ((_a = effectDragOverridesState[effectDragOverridesKey(nodePath, effectIndex)]) !== null && _a !== void 0 ? _a : {});
164
174
  }, [effectDragOverridesState]);
165
- const codeValuesContext = (0, react_1.useMemo)(() => {
175
+ const propStatusesContext = (0, react_1.useMemo)(() => {
166
176
  return {
167
- codeValues,
177
+ propStatuses,
168
178
  };
169
- }, [codeValues]);
179
+ }, [propStatuses]);
170
180
  const dragOverridesContext = (0, react_1.useMemo)(() => {
171
181
  return {
172
182
  getDragOverrides,
@@ -179,15 +189,15 @@ const SequenceManagerProvider = ({ children }) => {
179
189
  clearDragOverrides,
180
190
  setEffectDragOverrides,
181
191
  clearEffectDragOverrides,
182
- setCodeValues,
192
+ setPropStatuses,
183
193
  };
184
194
  }, [
185
195
  setDragOverrides,
186
196
  clearDragOverrides,
187
197
  setEffectDragOverrides,
188
198
  clearEffectDragOverrides,
189
- setCodeValues,
199
+ setPropStatuses,
190
200
  ]);
191
- return (jsx_runtime_1.jsx(exports.SequenceManager.Provider, { value: sequenceContext, children: jsx_runtime_1.jsx(exports.VisualModeCodeValuesContext.Provider, { value: codeValuesContext, children: jsx_runtime_1.jsx(exports.VisualModeDragOverridesContext.Provider, { value: dragOverridesContext, children: jsx_runtime_1.jsx(exports.VisualModeSettersContext.Provider, { value: settersContext, children: children }) }) }) }));
201
+ return (jsx_runtime_1.jsx(exports.SequenceManagerRefContext.Provider, { value: sequencesRef, children: jsx_runtime_1.jsx(exports.SequenceManager.Provider, { value: sequenceContext, children: jsx_runtime_1.jsx(exports.VisualModePropStatusesRefContext.Provider, { value: propStatusesRef, children: jsx_runtime_1.jsx(exports.VisualModePropStatusesContext.Provider, { value: propStatusesContext, children: jsx_runtime_1.jsx(exports.VisualModeDragOverridesContext.Provider, { value: dragOverridesContext, children: jsx_runtime_1.jsx(exports.VisualModeSettersContext.Provider, { value: settersContext, children: children }) }) }) }) }) }));
192
202
  };
193
203
  exports.SequenceManagerProvider = SequenceManagerProvider;
@@ -12,6 +12,6 @@ const calculateMediaDuration = ({ trimAfter, mediaDurationInFrames, playbackRate
12
12
  duration -= trimBefore;
13
13
  }
14
14
  const actualDuration = duration / playbackRate;
15
- return Math.floor(actualDuration);
15
+ return Number(actualDuration.toFixed(10));
16
16
  };
17
17
  exports.calculateMediaDuration = calculateMediaDuration;
@@ -1,6 +1,6 @@
1
1
  import type { CannotUpdateEffectReason, CannotUpdateSequenceReason } from '../SequenceManager.js';
2
2
  import { type SequencePropsSubscriptionKey } from '../SequenceManager.js';
3
- import { type CanUpdateSequencePropStatus, type CodeValues } from '../use-schema.js';
3
+ import { type CanUpdateSequencePropStatus, type PropStatuses } from '../use-schema.js';
4
4
  import type { EffectDefinition, EffectDefinitionAndStack, EffectDescriptor } from './effect-types.js';
5
5
  export declare const useMemoizedEffectDefinitions: (effects: readonly EffectDescriptor<unknown>[]) => readonly EffectDefinition<unknown>[];
6
6
  type EffectStatus = {
@@ -13,13 +13,13 @@ type EffectStatus = {
13
13
  type: 'can-update-effect';
14
14
  props: Record<string, CanUpdateSequencePropStatus>;
15
15
  };
16
- export declare const getEffectCodeValuesCtx: ({ codeValues, nodePath, effectIndex, }: {
17
- codeValues: CodeValues;
16
+ export declare const getEffectPropStatusesCtx: ({ propStatuses, nodePath, effectIndex, }: {
17
+ propStatuses: PropStatuses;
18
18
  nodePath: SequencePropsSubscriptionKey;
19
19
  effectIndex: number;
20
20
  }) => EffectStatus;
21
- export declare const getCodeValuesCtx: (codeValues: CodeValues, nodePath: SequencePropsSubscriptionKey) => Record<string, CanUpdateSequencePropStatus> | undefined;
22
- export type GetCodeValuesType = typeof getCodeValuesCtx;
21
+ export declare const getPropStatusesCtx: (propStatuses: PropStatuses, nodePath: SequencePropsSubscriptionKey) => Record<string, CanUpdateSequencePropStatus> | undefined;
22
+ export type GetPropStatusesType = typeof getPropStatusesCtx;
23
23
  export declare const useMemoizedEffects: ({ effects, overrideId, }: {
24
24
  effects: readonly EffectDescriptor<unknown>[];
25
25
  readonly overrideId: string | null;
@@ -1,21 +1,21 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.useMemoizedEffects = exports.getCodeValuesCtx = exports.getEffectCodeValuesCtx = exports.useMemoizedEffectDefinitions = void 0;
3
+ exports.useMemoizedEffects = exports.getPropStatusesCtx = exports.getEffectPropStatusesCtx = exports.useMemoizedEffectDefinitions = void 0;
4
4
  const react_1 = require("react");
5
5
  const get_effective_visual_mode_value_js_1 = require("../get-effective-visual-mode-value.js");
6
+ const interpolate_keyframed_status_js_1 = require("../interpolate-keyframed-status.js");
6
7
  const sequence_node_path_js_1 = require("../sequence-node-path.js");
7
8
  const SequenceManager_js_1 = require("../SequenceManager.js");
8
- const SequenceManager_js_2 = require("../SequenceManager.js");
9
9
  const use_current_frame_js_1 = require("../use-current-frame.js");
10
- const mergeOverrides = ({ descriptor, codeOverrides, dragOverrides, frame, }) => {
11
- if (!codeOverrides && !dragOverrides) {
10
+ const mergeOverrides = ({ descriptor, propStatusOverrides, dragOverrides, frame, }) => {
11
+ if (!propStatusOverrides && !dragOverrides) {
12
12
  return { params: descriptor.params, effectKey: descriptor.effectKey };
13
13
  }
14
14
  const merged = {
15
15
  ...descriptor.params,
16
16
  };
17
- if (codeOverrides) {
18
- for (const [key, value] of Object.entries(codeOverrides)) {
17
+ if (propStatusOverrides) {
18
+ for (const [key, value] of Object.entries(propStatusOverrides)) {
19
19
  if (value !== undefined) {
20
20
  merged[key] = value;
21
21
  }
@@ -37,16 +37,27 @@ const mergeOverrides = ({ descriptor, codeOverrides, dragOverrides, frame, }) =>
37
37
  effectKey: descriptor.definition.calculateKey(merged),
38
38
  };
39
39
  };
40
- const extractCodeOverrides = (propStatus) => {
40
+ const resolvePropStatusOverrides = (propStatus, frame) => {
41
41
  if (!propStatus) {
42
42
  return null;
43
43
  }
44
44
  const out = {};
45
45
  let hasAny = false;
46
46
  for (const [key, status] of Object.entries(propStatus)) {
47
- if (status.status !== 'computed') {
47
+ if (status.status === 'static') {
48
48
  out[key] = status.codeValue;
49
49
  hasAny = true;
50
+ continue;
51
+ }
52
+ if (status.status === 'keyframed') {
53
+ const value = (0, interpolate_keyframed_status_js_1.interpolateKeyframedStatus)({
54
+ frame,
55
+ status,
56
+ });
57
+ if (value !== null) {
58
+ out[key] = value;
59
+ hasAny = true;
60
+ }
50
61
  }
51
62
  }
52
63
  return hasAny ? out : null;
@@ -65,8 +76,8 @@ const useMemoizedEffectDefinitions = (effects) => {
65
76
  return definitions;
66
77
  };
67
78
  exports.useMemoizedEffectDefinitions = useMemoizedEffectDefinitions;
68
- const getEffectCodeValuesCtx = ({ codeValues, nodePath, effectIndex, }) => {
69
- const status = codeValues[(0, SequenceManager_js_1.makeSequencePropsSubscriptionKey)(nodePath)];
79
+ const getEffectPropStatusesCtx = ({ propStatuses, nodePath, effectIndex, }) => {
80
+ const status = propStatuses[(0, SequenceManager_js_1.makeSequencePropsSubscriptionKey)(nodePath)];
70
81
  if (!status) {
71
82
  return { type: 'cannot-update-sequence', reason: 'not-found' };
72
83
  }
@@ -82,9 +93,9 @@ const getEffectCodeValuesCtx = ({ codeValues, nodePath, effectIndex, }) => {
82
93
  }
83
94
  return { type: 'can-update-effect', props: effect.props };
84
95
  };
85
- exports.getEffectCodeValuesCtx = getEffectCodeValuesCtx;
86
- const getCodeValuesCtx = (codeValues, nodePath) => {
87
- const status = codeValues[(0, SequenceManager_js_1.makeSequencePropsSubscriptionKey)(nodePath)];
96
+ exports.getEffectPropStatusesCtx = getEffectPropStatusesCtx;
97
+ const getPropStatusesCtx = (propStatuses, nodePath) => {
98
+ const status = propStatuses[(0, SequenceManager_js_1.makeSequencePropsSubscriptionKey)(nodePath)];
88
99
  if (!status) {
89
100
  return undefined;
90
101
  }
@@ -93,12 +104,12 @@ const getCodeValuesCtx = (codeValues, nodePath) => {
93
104
  }
94
105
  return status.props;
95
106
  };
96
- exports.getCodeValuesCtx = getCodeValuesCtx;
107
+ exports.getPropStatusesCtx = getPropStatusesCtx;
97
108
  const useMemoizedEffects = ({ effects, overrideId, }) => {
98
109
  var _a;
99
110
  const previousRef = (0, react_1.useRef)(null);
100
- const { codeValues } = (0, react_1.useContext)(SequenceManager_js_2.VisualModeCodeValuesContext);
101
- const { getEffectDragOverrides } = (0, react_1.useContext)(SequenceManager_js_2.VisualModeDragOverridesContext);
111
+ const { propStatuses } = (0, react_1.useContext)(SequenceManager_js_1.VisualModePropStatusesContext);
112
+ const { getEffectDragOverrides } = (0, react_1.useContext)(SequenceManager_js_1.VisualModeDragOverridesContext);
102
113
  const frame = (0, use_current_frame_js_1.useCurrentFrame)();
103
114
  const { overrideIdToNodePathMappings } = (0, react_1.useContext)(sequence_node_path_js_1.OverrideIdsToNodePathsGettersContext);
104
115
  const previous = previousRef.current;
@@ -113,19 +124,19 @@ const useMemoizedEffects = ({ effects, overrideId, }) => {
113
124
  effectKey: descriptor.effectKey,
114
125
  };
115
126
  }
116
- const effectStatus = (0, exports.getEffectCodeValuesCtx)({
117
- codeValues,
127
+ const effectStatus = (0, exports.getEffectPropStatusesCtx)({
128
+ propStatuses,
118
129
  nodePath,
119
130
  effectIndex: index,
120
131
  });
121
- const codeOverrides = effectStatus.type === 'can-update-effect'
122
- ? extractCodeOverrides(effectStatus.props)
132
+ const propStatusOverrides = effectStatus.type === 'can-update-effect'
133
+ ? resolvePropStatusOverrides(effectStatus.props, frame)
123
134
  : null;
124
135
  const dragOverridesMap = getEffectDragOverrides(nodePath, index);
125
136
  const dragOverrides = Object.keys(dragOverridesMap).length === 0 ? null : dragOverridesMap;
126
137
  const { params, effectKey } = mergeOverrides({
127
138
  descriptor,
128
- codeOverrides,
139
+ propStatusOverrides,
129
140
  dragOverrides,
130
141
  frame,
131
142
  });
@@ -9,8 +9,8 @@ export declare const resolveDragOverrideValue: ({ dragOverrideValue, frame, }: {
9
9
  dragOverrideValue: DragOverrideValue | undefined;
10
10
  frame: number | null;
11
11
  }) => ResolvedDragOverrideValue;
12
- export declare const getEffectiveVisualModeValue: ({ codeValue, dragOverrideValue, defaultValue, frame, shouldResortToDefaultValueIfUndefined, }: {
13
- codeValue: CanUpdateSequencePropStatusKeyframed | CanUpdateSequencePropStatusStatic;
12
+ export declare const getEffectiveVisualModeValue: ({ propStatus, dragOverrideValue, defaultValue, frame, shouldResortToDefaultValueIfUndefined, }: {
13
+ propStatus: CanUpdateSequencePropStatusKeyframed | CanUpdateSequencePropStatusStatic;
14
14
  dragOverrideValue: DragOverrideValue | undefined;
15
15
  defaultValue: unknown;
16
16
  frame?: number | null | undefined;
@@ -22,7 +22,7 @@ const resolveDragOverrideValue = ({ dragOverrideValue, frame, }) => {
22
22
  return { type: 'resolved', value: interpolated };
23
23
  };
24
24
  exports.resolveDragOverrideValue = resolveDragOverrideValue;
25
- const getEffectiveVisualModeValue = ({ codeValue, dragOverrideValue, defaultValue, frame = null, shouldResortToDefaultValueIfUndefined = false, }) => {
25
+ const getEffectiveVisualModeValue = ({ propStatus, dragOverrideValue, defaultValue, frame = null, shouldResortToDefaultValueIfUndefined = false, }) => {
26
26
  const dragOverride = (0, exports.resolveDragOverrideValue)({
27
27
  dragOverrideValue,
28
28
  frame,
@@ -30,16 +30,19 @@ const getEffectiveVisualModeValue = ({ codeValue, dragOverrideValue, defaultValu
30
30
  if (dragOverride.type === 'resolved' && dragOverride.value !== undefined) {
31
31
  return dragOverride.value;
32
32
  }
33
- if (codeValue.status === 'keyframed' && frame !== null) {
34
- return (0, interpolate_keyframed_status_1.interpolateKeyframedStatus)({
35
- frame,
36
- status: codeValue,
37
- });
33
+ if (propStatus.status === 'keyframed') {
34
+ if (frame !== null) {
35
+ return (0, interpolate_keyframed_status_1.interpolateKeyframedStatus)({
36
+ frame,
37
+ status: propStatus,
38
+ });
39
+ }
40
+ return shouldResortToDefaultValueIfUndefined ? defaultValue : undefined;
38
41
  }
39
- if (codeValue.codeValue === undefined &&
42
+ if (propStatus.codeValue === undefined &&
40
43
  shouldResortToDefaultValueIfUndefined) {
41
44
  return defaultValue;
42
45
  }
43
- return codeValue.codeValue;
46
+ return propStatus.codeValue;
44
47
  };
45
48
  exports.getEffectiveVisualModeValue = getEffectiveVisualModeValue;
@@ -18,8 +18,8 @@ import { type CanUpdateEffectPropsResponse, type CanUpdateEffectPropsResponseFal
18
18
  import * as TimelinePosition from './timeline-position-state.js';
19
19
  import { type PlaybackRateContextValue, type SetTimelineContextValue, type TimelineContextValue } from './TimelineContext.js';
20
20
  import { truthy } from './truthy.js';
21
- import type { CanUpdateSequencePropStatusFalse, CanUpdateSequencePropStatusKeyframed, CanUpdateSequencePropStatusStatic, DragOverrideValue, GetCodeValues, GetDragOverrides, GetEffectCodeValues, GetEffectDragOverrides } from './use-schema.js';
22
- import { type CanUpdateSequencePropStatus, type CodeValues, type DragOverrides, type EffectDragOverrides } from './use-schema.js';
21
+ import type { CanUpdateSequencePropStatusFalse, CanUpdateSequencePropStatusKeyframed, CanUpdateSequencePropStatusStatic, DragOverrideValue, GetDragOverrides, GetEffectDragOverrides, GetEffectPropStatuses, GetPropStatuses } from './use-schema.js';
22
+ import { type CanUpdateSequencePropStatus, type DragOverrides, type EffectDragOverrides, type PropStatuses } from './use-schema.js';
23
23
  import type { MediaVolumeContextValue, SetMediaVolumeContextValue } from './volume-position-state.js';
24
24
  import type { WatchRemotionStaticFilesPayload } from './watch-static-file.js';
25
25
  import { useRemotionContexts } from './wrap-remotion-context.js';
@@ -70,10 +70,12 @@ export declare const Internals: {
70
70
  }, "ref"> & import("react").RefAttributes<HTMLVideoElement>>;
71
71
  readonly CompositionManager: import("react").Context<CompositionManagerContext>;
72
72
  readonly CompositionSetters: import("react").Context<import("./CompositionManagerContext.js").CompositionManagerSetters>;
73
- readonly VisualModeCodeValuesContext: import("react").Context<import("./SequenceManager.js").VisualModeCodeValues>;
73
+ readonly VisualModePropStatusesContext: import("react").Context<import("./SequenceManager.js").VisualModePropStatuses>;
74
+ readonly VisualModePropStatusesRefContext: import("react").Context<import("./SequenceManager.js").VisualModePropStatusesRef>;
74
75
  readonly VisualModeDragOverridesContext: import("react").Context<import("./SequenceManager.js").VisualModeDragOverrides>;
75
76
  readonly VisualModeSettersContext: import("react").Context<import("./SequenceManager.js").VisualModeSetters>;
76
77
  readonly SequenceManager: import("react").Context<import("./SequenceManager.js").SequenceManagerContext>;
78
+ readonly SequenceManagerRefContext: import("react").Context<import("./SequenceManager.js").SequenceManagerRef>;
77
79
  readonly SequenceStackTracesUpdateContext: import("react").Context<import("./sequence-stack-traces.js").UpdateResolvedStackTraceFn>;
78
80
  readonly wrapInSchema: <S extends SequenceSchema, Props extends object>({ Component, schema, supportsEffects, }: {
79
81
  Component: import("react").ComponentType<Props & {
@@ -301,7 +303,7 @@ export declare const Internals: {
301
303
  postmountDisplay: number | null;
302
304
  loopDisplay: import("./CompositionManager.js").LoopDisplay | undefined;
303
305
  documentationLink: string | null;
304
- refForOutline: import("react").RefObject<HTMLElement | null> | null;
306
+ refForOutline: import("react").RefObject<Element | null> | null;
305
307
  }) => void;
306
308
  readonly useLazyComponent: <Props>({ compProps, componentName, noSuspense, }: {
307
309
  compProps: CompProps<Props>;
@@ -638,8 +640,8 @@ export declare const Internals: {
638
640
  children: import("react").ReactNode;
639
641
  collectAssets: import("react").RefObject<import("./RenderAssetManager.js").CollectAssetsRef | null> | null;
640
642
  }>;
641
- readonly getEffectiveVisualModeValue: ({ codeValue, dragOverrideValue, defaultValue, frame, shouldResortToDefaultValueIfUndefined, }: {
642
- codeValue: CanUpdateSequencePropStatusKeyframed | CanUpdateSequencePropStatusStatic;
643
+ readonly getEffectiveVisualModeValue: ({ propStatus, dragOverrideValue, defaultValue, frame, shouldResortToDefaultValueIfUndefined, }: {
644
+ propStatus: CanUpdateSequencePropStatusKeyframed | CanUpdateSequencePropStatusStatic;
643
645
  dragOverrideValue: DragOverrideValue | undefined;
644
646
  defaultValue: unknown;
645
647
  frame?: number | null | undefined;
@@ -693,9 +695,9 @@ export declare const Internals: {
693
695
  value: unknown;
694
696
  }) => string[];
695
697
  readonly makeSequencePropsSubscriptionKey: (key: SequencePropsSubscriptionKey) => string;
696
- readonly getCodeValuesCtx: (codeValues: CodeValues, nodePath: SequencePropsSubscriptionKey) => Record<string, CanUpdateSequencePropStatus> | undefined;
697
- readonly getEffectCodeValuesCtx: ({ codeValues, nodePath, effectIndex, }: {
698
- codeValues: CodeValues;
698
+ readonly getPropStatusesCtx: (propStatuses: PropStatuses, nodePath: SequencePropsSubscriptionKey) => Record<string, CanUpdateSequencePropStatus> | undefined;
699
+ readonly getEffectPropStatusesCtx: ({ propStatuses, nodePath, effectIndex, }: {
700
+ propStatuses: PropStatuses;
699
701
  nodePath: SequencePropsSubscriptionKey;
700
702
  effectIndex: number;
701
703
  }) => {
@@ -723,4 +725,4 @@ export declare const Internals: {
723
725
  readonly hiddenFromList: true;
724
726
  };
725
727
  };
726
- export type { ArrayFieldSchema, ArrayItemFieldSchema, CannotUpdateSequenceReason, CanUpdateEffectPropsResponse, CanUpdateEffectPropsResponseFalse, CanUpdateEffectPropsResponseTrue, CanUpdateSequencePropsResponse, CanUpdateSequencePropsResponseFalse, CanUpdateSequencePropsResponseTrue, CanUpdateSequencePropStatus, CanUpdateSequencePropStatusFalse, CanUpdateSequencePropStatusKeyframed, CanUpdateSequencePropStatusStatic, CodeValues, CompositionManagerContext, CompProps, DragOverrides, DragOverrideValue, EffectDragOverrides, GetCodeValues, GetDragOverrides, GetEffectCodeValues, GetEffectDragOverrides, LoggingContextValue, MediaVolumeContextValue, NonceHistory, OverrideIdsToNodePathsGettersContext, OverrideIdsToNodePathsSettersContext, OverrideIdToNodePaths, OverrideToNodePathGetters, OverrideToNodeSetters, PlaybackRateContextValue, RemotionAudioContextState, RemotionEnvironment, ResolvedStackLocation, ScheduleAudioNodeOptions, ScheduleAudioNodeResult, SequenceFieldSchema, SequenceNodePath, SequencePropsSubscriptionKey, SequenceSchema, SerializedJSONWithCustomFields, SetMediaVolumeContextValue, SetTimelineContextValue, TCompMetadata, TComposition, TimelineContextValue, TRenderAsset, TSequence, VisibleFieldSchema, WatchRemotionStaticFilesPayload, };
728
+ export type { ArrayFieldSchema, ArrayItemFieldSchema, CannotUpdateSequenceReason, CanUpdateEffectPropsResponse, CanUpdateEffectPropsResponseFalse, CanUpdateEffectPropsResponseTrue, CanUpdateSequencePropsResponse, CanUpdateSequencePropsResponseFalse, CanUpdateSequencePropsResponseTrue, CanUpdateSequencePropStatus, CanUpdateSequencePropStatusFalse, CanUpdateSequencePropStatusKeyframed, CanUpdateSequencePropStatusStatic, CompositionManagerContext, CompProps, DragOverrides, DragOverrideValue, EffectDragOverrides, GetDragOverrides, GetEffectDragOverrides, GetEffectPropStatuses, GetPropStatuses, LoggingContextValue, MediaVolumeContextValue, NonceHistory, OverrideIdsToNodePathsGettersContext, OverrideIdsToNodePathsSettersContext, OverrideIdToNodePaths, OverrideToNodePathGetters, OverrideToNodeSetters, PlaybackRateContextValue, PropStatuses, RemotionAudioContextState, RemotionEnvironment, ResolvedStackLocation, ScheduleAudioNodeOptions, ScheduleAudioNodeResult, SequenceFieldSchema, SequenceNodePath, SequencePropsSubscriptionKey, SequenceSchema, SerializedJSONWithCustomFields, SetMediaVolumeContextValue, SetTimelineContextValue, TCompMetadata, TComposition, TimelineContextValue, TRenderAsset, TSequence, VisibleFieldSchema, WatchRemotionStaticFilesPayload, };
@@ -134,10 +134,12 @@ exports.Internals = {
134
134
  VideoForPreview: VideoForPreview_js_1.VideoForPreview,
135
135
  CompositionManager: CompositionManagerContext_js_1.CompositionManager,
136
136
  CompositionSetters: CompositionManagerContext_js_1.CompositionSetters,
137
- VisualModeCodeValuesContext: SequenceManager_js_1.VisualModeCodeValuesContext,
137
+ VisualModePropStatusesContext: SequenceManager_js_1.VisualModePropStatusesContext,
138
+ VisualModePropStatusesRefContext: SequenceManager_js_1.VisualModePropStatusesRefContext,
138
139
  VisualModeDragOverridesContext: SequenceManager_js_1.VisualModeDragOverridesContext,
139
140
  VisualModeSettersContext: SequenceManager_js_1.VisualModeSettersContext,
140
141
  SequenceManager: SequenceManager_js_1.SequenceManager,
142
+ SequenceManagerRefContext: SequenceManager_js_1.SequenceManagerRefContext,
141
143
  SequenceStackTracesUpdateContext: sequence_stack_traces_js_1.SequenceStackTracesUpdateContext,
142
144
  wrapInSchema: wrap_in_schema_js_1.wrapInSchema,
143
145
  sequenceSchema: sequence_field_schema_js_1.sequenceSchema,
@@ -256,8 +258,8 @@ exports.Internals = {
256
258
  OverrideIdsToNodePathsSettersContext: sequence_node_path_js_1.OverrideIdsToNodePathsSettersContext,
257
259
  findPropsToDelete: find_props_to_delete_js_1.findPropsToDelete,
258
260
  makeSequencePropsSubscriptionKey: SequenceManager_js_1.makeSequencePropsSubscriptionKey,
259
- getCodeValuesCtx: use_memoized_effects_js_1.getCodeValuesCtx,
260
- getEffectCodeValuesCtx: use_memoized_effects_js_1.getEffectCodeValuesCtx,
261
+ getPropStatusesCtx: use_memoized_effects_js_1.getPropStatusesCtx,
262
+ getEffectPropStatusesCtx: use_memoized_effects_js_1.getEffectPropStatusesCtx,
261
263
  hiddenField: sequence_field_schema_js_1.hiddenField,
262
264
  durationInFramesField: sequence_field_schema_js_1.durationInFramesField,
263
265
  fromField: sequence_field_schema_js_1.fromField,
@@ -38,5 +38,5 @@ export declare const useMediaInTimeline: ({ volume, mediaVolume, src, mediaType,
38
38
  postmountDisplay: number | null;
39
39
  loopDisplay: LoopDisplay | undefined;
40
40
  documentationLink: string | null;
41
- refForOutline: import("react").RefObject<HTMLElement | null> | null;
41
+ refForOutline: import("react").RefObject<Element | null> | null;
42
42
  }) => void;
@@ -20,7 +20,6 @@ export type CanUpdateSequencePropStatusComputed = {
20
20
  };
21
21
  export type CanUpdateSequencePropStatusKeyframed = {
22
22
  status: 'keyframed';
23
- codeValue: unknown;
24
23
  interpolationFunction: CanUpdateSequencePropStatusInterpolationFunction;
25
24
  keyframes: CanUpdateSequencePropStatusKeyframe[];
26
25
  easing: CanUpdateSequencePropStatusEasing[];
@@ -38,9 +37,9 @@ export type DragOverrideValue = {
38
37
  };
39
38
  export type DragOverrides = Record<string, Record<string, DragOverrideValue>>;
40
39
  export type EffectDragOverrides = Record<string, Record<string, DragOverrideValue>>;
41
- export type CodeValues = Record<string, CanUpdateSequencePropsResponse>;
42
- export type GetCodeValues = (nodePath: SequencePropsSubscriptionKey) => Record<string, CanUpdateSequencePropStatus> | undefined;
43
- export type GetEffectCodeValues = (nodePath: SequencePropsSubscriptionKey, effectIndex: number) => Record<string, CanUpdateSequencePropStatus> | undefined;
40
+ export type PropStatuses = Record<string, CanUpdateSequencePropsResponse>;
41
+ export type GetPropStatuses = (nodePath: SequencePropsSubscriptionKey) => Record<string, CanUpdateSequencePropStatus> | undefined;
42
+ export type GetEffectPropStatuses = (nodePath: SequencePropsSubscriptionKey, effectIndex: number) => Record<string, CanUpdateSequencePropStatus> | undefined;
44
43
  export type GetDragOverrides = (nodePath: SequencePropsSubscriptionKey) => DragOverrides[string];
45
44
  export type GetEffectDragOverrides = (nodePath: SequencePropsSubscriptionKey, effectIndex: number) => Record<string, DragOverrideValue>;
46
45
  export declare const makeStaticDragOverride: (value: unknown) => DragOverrideValue;
@@ -64,16 +64,16 @@ const computeEffectiveSchemaValuesDotNotation = ({ schema, currentValue, overrid
64
64
  const merged = {};
65
65
  const propsToDelete = new Set();
66
66
  for (const key of Object.keys(currentValue)) {
67
- const codeValueStatus = (_b = propStatus === null || propStatus === void 0 ? void 0 : propStatus[key]) !== null && _b !== void 0 ? _b : null;
67
+ const status = (_b = propStatus === null || propStatus === void 0 ? void 0 : propStatus[key]) !== null && _b !== void 0 ? _b : null;
68
68
  const field = findFieldInSchema(schema, key);
69
69
  if ((field === null || field === void 0 ? void 0 : field.type) === 'hidden') {
70
70
  continue;
71
71
  }
72
72
  let value;
73
- if (codeValueStatus === null) {
73
+ if (status === null) {
74
74
  value = currentValue[key];
75
75
  }
76
- else if ((0, exports.isKeyframedStatus)(codeValueStatus)) {
76
+ else if ((0, exports.isKeyframedStatus)(status)) {
77
77
  if ((field === null || field === void 0 ? void 0 : field.type) === 'array' || (field === null || field === void 0 ? void 0 : field.keyframable) === false) {
78
78
  value = currentValue[key];
79
79
  }
@@ -88,7 +88,7 @@ const computeEffectiveSchemaValuesDotNotation = ({ schema, currentValue, overrid
88
88
  else if (frame !== null) {
89
89
  const interpolated = (0, interpolate_keyframed_status_js_1.interpolateKeyframedStatus)({
90
90
  frame,
91
- status: codeValueStatus,
91
+ status,
92
92
  });
93
93
  value = interpolated !== null && interpolated !== void 0 ? interpolated : currentValue[key];
94
94
  }
@@ -97,12 +97,12 @@ const computeEffectiveSchemaValuesDotNotation = ({ schema, currentValue, overrid
97
97
  }
98
98
  }
99
99
  }
100
- else if (codeValueStatus.status === 'computed') {
100
+ else if (status.status === 'computed') {
101
101
  value = currentValue[key];
102
102
  }
103
103
  else {
104
104
  value = (0, get_effective_visual_mode_value_js_1.getEffectiveVisualModeValue)({
105
- codeValue: codeValueStatus,
105
+ propStatus: status,
106
106
  dragOverrideValue: overrideValues[key],
107
107
  defaultValue: field === null || field === void 0 ? void 0 : field.default,
108
108
  frame,
@@ -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.473";
6
+ export declare const VERSION = "4.0.474";
@@ -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.473';
10
+ exports.VERSION = '4.0.474';
@@ -112,7 +112,7 @@ const wrapInSchema = ({ Component, schema, supportsEffects, }) => {
112
112
  });
113
113
  }
114
114
  // eslint-disable-next-line react-hooks/rules-of-hooks
115
- const { codeValues } = (0, react_1.useContext)(SequenceManager_js_1.VisualModeCodeValuesContext);
115
+ const { propStatuses } = (0, react_1.useContext)(SequenceManager_js_1.VisualModePropStatusesContext);
116
116
  // eslint-disable-next-line react-hooks/rules-of-hooks
117
117
  const { getDragOverrides } = (0, react_1.useContext)(SequenceManager_js_1.VisualModeDragOverridesContext);
118
118
  // eslint-disable-next-line react-hooks/rules-of-hooks
@@ -169,14 +169,14 @@ const wrapInSchema = ({ Component, schema, supportsEffects, }) => {
169
169
  overrideValues: nodePath === null ? {} : getDragOverrides(nodePath),
170
170
  propStatus: nodePath === null
171
171
  ? undefined
172
- : (0, use_memoized_effects_js_1.getCodeValuesCtx)(codeValues, nodePath),
172
+ : (0, use_memoized_effects_js_1.getPropStatusesCtx)(propStatuses, nodePath),
173
173
  frame,
174
174
  });
175
175
  }, [
176
176
  currentRuntimeValueDotNotation,
177
177
  getDragOverrides,
178
178
  nodePath,
179
- codeValues,
179
+ propStatuses,
180
180
  frame,
181
181
  ]);
182
182
  // 4. Eliminate values forbidden by the resolved discriminated union.
@@ -25,6 +25,8 @@ export declare function useRemotionContexts(): {
25
25
  } | null;
26
26
  renderAssetManagerContext: import("./RenderAssetManager.js").RenderAssetManagerContext;
27
27
  sequenceManagerContext: import("./SequenceManager.js").SequenceManagerContext;
28
+ sequenceManagerRefContext: import("./SequenceManager.js").SequenceManagerRef;
29
+ visualModePropStatusesRefContext: import("./SequenceManager.js").VisualModePropStatusesRef;
28
30
  bufferManagerContext: {
29
31
  addBlock: (block: {
30
32
  id: string;
@@ -62,6 +62,8 @@ function useRemotionContexts() {
62
62
  const resolveCompositionContext = react_1.default.useContext(ResolveCompositionConfig_js_1.ResolveCompositionContext);
63
63
  const renderAssetManagerContext = react_1.default.useContext(RenderAssetManager_js_1.RenderAssetManager);
64
64
  const sequenceManagerContext = react_1.default.useContext(SequenceManager_js_1.SequenceManager);
65
+ const sequenceManagerRefContext = react_1.default.useContext(SequenceManager_js_1.SequenceManagerRefContext);
66
+ const visualModePropStatusesRefContext = react_1.default.useContext(SequenceManager_js_1.VisualModePropStatusesRefContext);
65
67
  const bufferManagerContext = react_1.default.useContext(buffering_js_1.BufferingContextReact);
66
68
  const logLevelContext = react_1.default.useContext(log_level_context_js_1.LogLevelContext);
67
69
  return (0, react_1.useMemo)(() => ({
@@ -75,6 +77,8 @@ function useRemotionContexts() {
75
77
  resolveCompositionContext,
76
78
  renderAssetManagerContext,
77
79
  sequenceManagerContext,
80
+ sequenceManagerRefContext,
81
+ visualModePropStatusesRefContext,
78
82
  bufferManagerContext,
79
83
  logLevelContext,
80
84
  }), [
@@ -88,12 +92,14 @@ function useRemotionContexts() {
88
92
  resolveCompositionContext,
89
93
  renderAssetManagerContext,
90
94
  sequenceManagerContext,
95
+ sequenceManagerRefContext,
96
+ visualModePropStatusesRefContext,
91
97
  bufferManagerContext,
92
98
  logLevelContext,
93
99
  ]);
94
100
  }
95
101
  const RemotionContextProvider = (props) => {
96
102
  const { children, contexts } = props;
97
- 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(nonce_js_1.NonceContext.Provider, { value: contexts.nonceContext, 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.SequenceManager.Provider, { value: contexts.sequenceManagerContext, 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 }) }) }) }) }) }) }) }) }) }) }) }));
103
+ 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(nonce_js_1.NonceContext.Provider, { value: contexts.nonceContext, 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 }) }) }) }) }) }) }) }) }) }) }) }) }) }));
98
104
  };
99
105
  exports.RemotionContextProvider = RemotionContextProvider;
@@ -1291,7 +1291,7 @@ var addSequenceStackTraces = (component) => {
1291
1291
  };
1292
1292
 
1293
1293
  // src/version.ts
1294
- var VERSION = "4.0.473";
1294
+ var VERSION = "4.0.474";
1295
1295
 
1296
1296
  // src/multiple-versions-warning.ts
1297
1297
  var checkMultipleRemotionVersions = () => {
@@ -1832,11 +1832,17 @@ var SequenceManager = React11.createContext({
1832
1832
  },
1833
1833
  sequences: []
1834
1834
  });
1835
+ var SequenceManagerRefContext = React11.createContext({
1836
+ current: []
1837
+ });
1835
1838
  var makeSequencePropsSubscriptionKey = (key) => {
1836
1839
  return `${key.nodePath.join(".")}.${key.sequenceKeys.join(".")}.${key.effectKeys.map((keys) => keys.join(".")).join(".")}`;
1837
1840
  };
1838
- var VisualModeCodeValuesContext = React11.createContext({
1839
- codeValues: {}
1841
+ var VisualModePropStatusesContext = React11.createContext({
1842
+ propStatuses: {}
1843
+ });
1844
+ var VisualModePropStatusesRefContext = React11.createContext({
1845
+ current: {}
1840
1846
  });
1841
1847
  var VisualModeDragOverridesContext = React11.createContext({
1842
1848
  getDragOverrides: () => {
@@ -1859,18 +1865,22 @@ var VisualModeSettersContext = React11.createContext({
1859
1865
  clearEffectDragOverrides: () => {
1860
1866
  throw new Error("VisualModeSettersContext not initialized");
1861
1867
  },
1862
- setCodeValues: () => {
1868
+ setPropStatuses: () => {
1863
1869
  throw new Error("VisualModeSettersContext not initialized");
1864
1870
  }
1865
1871
  });
1866
1872
  var effectDragOverridesKey = (nodePath, effectIndex) => `${makeSequencePropsSubscriptionKey(nodePath)}.effects.${effectIndex}`;
1867
1873
  var SequenceManagerProvider = ({ children }) => {
1868
1874
  const [sequences, setSequences] = useState3([]);
1875
+ const sequencesRef = useRef4(sequences);
1876
+ sequencesRef.current = sequences;
1869
1877
  const [dragOverrides, setControlOverrides] = useState3({});
1870
1878
  const controlOverridesRef = useRef4(dragOverrides);
1871
1879
  controlOverridesRef.current = dragOverrides;
1872
1880
  const [effectDragOverridesState, setEffectDragOverridesState] = useState3({});
1873
- const [codeValues, setCodeValuesMapState] = useState3({});
1881
+ const [propStatuses, setPropStatusesMapState] = useState3({});
1882
+ const propStatusesRef = useRef4(propStatuses);
1883
+ propStatusesRef.current = propStatuses;
1874
1884
  const setDragOverrides = useCallback5((nodePath, key, value) => {
1875
1885
  setControlOverrides((prev) => ({
1876
1886
  ...prev,
@@ -1914,8 +1924,8 @@ var SequenceManagerProvider = ({ children }) => {
1914
1924
  return next;
1915
1925
  });
1916
1926
  }, []);
1917
- const setCodeValues = useCallback5((nodePath, values) => {
1918
- setCodeValuesMapState((prev) => {
1927
+ const setPropStatuses = useCallback5((nodePath, values) => {
1928
+ setPropStatusesMapState((prev) => {
1919
1929
  const key = makeSequencePropsSubscriptionKey(nodePath);
1920
1930
  const prevKey = prev[key];
1921
1931
  const newKey = values(prevKey);
@@ -1946,11 +1956,11 @@ var SequenceManagerProvider = ({ children }) => {
1946
1956
  const getEffectDragOverrides = useCallback5((nodePath, effectIndex) => {
1947
1957
  return effectDragOverridesState[effectDragOverridesKey(nodePath, effectIndex)] ?? {};
1948
1958
  }, [effectDragOverridesState]);
1949
- const codeValuesContext = useMemo12(() => {
1959
+ const propStatusesContext = useMemo12(() => {
1950
1960
  return {
1951
- codeValues
1961
+ propStatuses
1952
1962
  };
1953
- }, [codeValues]);
1963
+ }, [propStatuses]);
1954
1964
  const dragOverridesContext = useMemo12(() => {
1955
1965
  return {
1956
1966
  getDragOverrides,
@@ -1963,24 +1973,30 @@ var SequenceManagerProvider = ({ children }) => {
1963
1973
  clearDragOverrides,
1964
1974
  setEffectDragOverrides,
1965
1975
  clearEffectDragOverrides,
1966
- setCodeValues
1976
+ setPropStatuses
1967
1977
  };
1968
1978
  }, [
1969
1979
  setDragOverrides,
1970
1980
  clearDragOverrides,
1971
1981
  setEffectDragOverrides,
1972
1982
  clearEffectDragOverrides,
1973
- setCodeValues
1983
+ setPropStatuses
1974
1984
  ]);
1975
- return /* @__PURE__ */ jsx10(SequenceManager.Provider, {
1976
- value: sequenceContext,
1977
- children: /* @__PURE__ */ jsx10(VisualModeCodeValuesContext.Provider, {
1978
- value: codeValuesContext,
1979
- children: /* @__PURE__ */ jsx10(VisualModeDragOverridesContext.Provider, {
1980
- value: dragOverridesContext,
1981
- children: /* @__PURE__ */ jsx10(VisualModeSettersContext.Provider, {
1982
- value: settersContext,
1983
- children
1985
+ return /* @__PURE__ */ jsx10(SequenceManagerRefContext.Provider, {
1986
+ value: sequencesRef,
1987
+ children: /* @__PURE__ */ jsx10(SequenceManager.Provider, {
1988
+ value: sequenceContext,
1989
+ children: /* @__PURE__ */ jsx10(VisualModePropStatusesRefContext.Provider, {
1990
+ value: propStatusesRef,
1991
+ children: /* @__PURE__ */ jsx10(VisualModePropStatusesContext.Provider, {
1992
+ value: propStatusesContext,
1993
+ children: /* @__PURE__ */ jsx10(VisualModeDragOverridesContext.Provider, {
1994
+ value: dragOverridesContext,
1995
+ children: /* @__PURE__ */ jsx10(VisualModeSettersContext.Provider, {
1996
+ value: settersContext,
1997
+ children
1998
+ })
1999
+ })
1984
2000
  })
1985
2001
  })
1986
2002
  })
@@ -3178,7 +3194,7 @@ var resolveDragOverrideValue = ({
3178
3194
  return { type: "resolved", value: interpolated };
3179
3195
  };
3180
3196
  var getEffectiveVisualModeValue = ({
3181
- codeValue,
3197
+ propStatus,
3182
3198
  dragOverrideValue,
3183
3199
  defaultValue,
3184
3200
  frame = null,
@@ -3191,16 +3207,19 @@ var getEffectiveVisualModeValue = ({
3191
3207
  if (dragOverride.type === "resolved" && dragOverride.value !== undefined) {
3192
3208
  return dragOverride.value;
3193
3209
  }
3194
- if (codeValue.status === "keyframed" && frame !== null) {
3195
- return interpolateKeyframedStatus({
3196
- frame,
3197
- status: codeValue
3198
- });
3210
+ if (propStatus.status === "keyframed") {
3211
+ if (frame !== null) {
3212
+ return interpolateKeyframedStatus({
3213
+ frame,
3214
+ status: propStatus
3215
+ });
3216
+ }
3217
+ return shouldResortToDefaultValueIfUndefined ? defaultValue : undefined;
3199
3218
  }
3200
- if (codeValue.codeValue === undefined && shouldResortToDefaultValueIfUndefined) {
3219
+ if (propStatus.codeValue === undefined && shouldResortToDefaultValueIfUndefined) {
3201
3220
  return defaultValue;
3202
3221
  }
3203
- return codeValue.codeValue;
3222
+ return propStatus.codeValue;
3204
3223
  };
3205
3224
 
3206
3225
  // src/sequence-node-path.tsx
@@ -3217,18 +3236,18 @@ var OverrideIdsToNodePathsSettersContext = createContext16({
3217
3236
  // src/effects/use-memoized-effects.ts
3218
3237
  var mergeOverrides = ({
3219
3238
  descriptor,
3220
- codeOverrides,
3239
+ propStatusOverrides,
3221
3240
  dragOverrides,
3222
3241
  frame
3223
3242
  }) => {
3224
- if (!codeOverrides && !dragOverrides) {
3243
+ if (!propStatusOverrides && !dragOverrides) {
3225
3244
  return { params: descriptor.params, effectKey: descriptor.effectKey };
3226
3245
  }
3227
3246
  const merged = {
3228
3247
  ...descriptor.params
3229
3248
  };
3230
- if (codeOverrides) {
3231
- for (const [key, value] of Object.entries(codeOverrides)) {
3249
+ if (propStatusOverrides) {
3250
+ for (const [key, value] of Object.entries(propStatusOverrides)) {
3232
3251
  if (value !== undefined) {
3233
3252
  merged[key] = value;
3234
3253
  }
@@ -3250,16 +3269,27 @@ var mergeOverrides = ({
3250
3269
  effectKey: descriptor.definition.calculateKey(merged)
3251
3270
  };
3252
3271
  };
3253
- var extractCodeOverrides = (propStatus) => {
3272
+ var resolvePropStatusOverrides = (propStatus, frame) => {
3254
3273
  if (!propStatus) {
3255
3274
  return null;
3256
3275
  }
3257
3276
  const out = {};
3258
3277
  let hasAny = false;
3259
3278
  for (const [key, status] of Object.entries(propStatus)) {
3260
- if (status.status !== "computed") {
3279
+ if (status.status === "static") {
3261
3280
  out[key] = status.codeValue;
3262
3281
  hasAny = true;
3282
+ continue;
3283
+ }
3284
+ if (status.status === "keyframed") {
3285
+ const value = interpolateKeyframedStatus({
3286
+ frame,
3287
+ status
3288
+ });
3289
+ if (value !== null) {
3290
+ out[key] = value;
3291
+ hasAny = true;
3292
+ }
3263
3293
  }
3264
3294
  }
3265
3295
  return hasAny ? out : null;
@@ -3275,12 +3305,12 @@ var useMemoizedEffectDefinitions = (effects) => {
3275
3305
  previousRef.current = definitions;
3276
3306
  return definitions;
3277
3307
  };
3278
- var getEffectCodeValuesCtx = ({
3279
- codeValues,
3308
+ var getEffectPropStatusesCtx = ({
3309
+ propStatuses,
3280
3310
  nodePath,
3281
3311
  effectIndex
3282
3312
  }) => {
3283
- const status = codeValues[makeSequencePropsSubscriptionKey(nodePath)];
3313
+ const status = propStatuses[makeSequencePropsSubscriptionKey(nodePath)];
3284
3314
  if (!status) {
3285
3315
  return { type: "cannot-update-sequence", reason: "not-found" };
3286
3316
  }
@@ -3296,8 +3326,8 @@ var getEffectCodeValuesCtx = ({
3296
3326
  }
3297
3327
  return { type: "can-update-effect", props: effect.props };
3298
3328
  };
3299
- var getCodeValuesCtx = (codeValues, nodePath) => {
3300
- const status = codeValues[makeSequencePropsSubscriptionKey(nodePath)];
3329
+ var getPropStatusesCtx = (propStatuses, nodePath) => {
3330
+ const status = propStatuses[makeSequencePropsSubscriptionKey(nodePath)];
3301
3331
  if (!status) {
3302
3332
  return;
3303
3333
  }
@@ -3311,7 +3341,7 @@ var useMemoizedEffects = ({
3311
3341
  overrideId
3312
3342
  }) => {
3313
3343
  const previousRef = useRef5(null);
3314
- const { codeValues } = useContext15(VisualModeCodeValuesContext);
3344
+ const { propStatuses } = useContext15(VisualModePropStatusesContext);
3315
3345
  const { getEffectDragOverrides } = useContext15(VisualModeDragOverridesContext);
3316
3346
  const frame = useCurrentFrame();
3317
3347
  const { overrideIdToNodePathMappings } = useContext15(OverrideIdsToNodePathsGettersContext);
@@ -3325,17 +3355,17 @@ var useMemoizedEffects = ({
3325
3355
  effectKey: descriptor.effectKey
3326
3356
  };
3327
3357
  }
3328
- const effectStatus = getEffectCodeValuesCtx({
3329
- codeValues,
3358
+ const effectStatus = getEffectPropStatusesCtx({
3359
+ propStatuses,
3330
3360
  nodePath,
3331
3361
  effectIndex: index
3332
3362
  });
3333
- const codeOverrides = effectStatus.type === "can-update-effect" ? extractCodeOverrides(effectStatus.props) : null;
3363
+ const propStatusOverrides = effectStatus.type === "can-update-effect" ? resolvePropStatusOverrides(effectStatus.props, frame) : null;
3334
3364
  const dragOverridesMap = getEffectDragOverrides(nodePath, index);
3335
3365
  const dragOverrides = Object.keys(dragOverridesMap).length === 0 ? null : dragOverridesMap;
3336
3366
  const { params, effectKey } = mergeOverrides({
3337
3367
  descriptor,
3338
- codeOverrides,
3368
+ propStatusOverrides,
3339
3369
  dragOverrides,
3340
3370
  frame
3341
3371
  });
@@ -3493,15 +3523,15 @@ var computeEffectiveSchemaValuesDotNotation = ({
3493
3523
  const merged = {};
3494
3524
  const propsToDelete = new Set;
3495
3525
  for (const key of Object.keys(currentValue)) {
3496
- const codeValueStatus = propStatus?.[key] ?? null;
3526
+ const status = propStatus?.[key] ?? null;
3497
3527
  const field = findFieldInSchema(schema, key);
3498
3528
  if (field?.type === "hidden") {
3499
3529
  continue;
3500
3530
  }
3501
3531
  let value;
3502
- if (codeValueStatus === null) {
3532
+ if (status === null) {
3503
3533
  value = currentValue[key];
3504
- } else if (isKeyframedStatus(codeValueStatus)) {
3534
+ } else if (isKeyframedStatus(status)) {
3505
3535
  if (field?.type === "array" || field?.keyframable === false) {
3506
3536
  value = currentValue[key];
3507
3537
  } else {
@@ -3514,18 +3544,18 @@ var computeEffectiveSchemaValuesDotNotation = ({
3514
3544
  } else if (frame !== null) {
3515
3545
  const interpolated = interpolateKeyframedStatus({
3516
3546
  frame,
3517
- status: codeValueStatus
3547
+ status
3518
3548
  });
3519
3549
  value = interpolated ?? currentValue[key];
3520
3550
  } else {
3521
3551
  value = currentValue[key];
3522
3552
  }
3523
3553
  }
3524
- } else if (codeValueStatus.status === "computed") {
3554
+ } else if (status.status === "computed") {
3525
3555
  value = currentValue[key];
3526
3556
  } else {
3527
3557
  value = getEffectiveVisualModeValue({
3528
- codeValue: codeValueStatus,
3558
+ propStatus: status,
3529
3559
  dragOverrideValue: overrideValues[key],
3530
3560
  defaultValue: field?.default,
3531
3561
  frame,
@@ -3619,7 +3649,7 @@ var wrapInSchema = ({
3619
3649
  ref
3620
3650
  });
3621
3651
  }
3622
- const { codeValues } = useContext16(VisualModeCodeValuesContext);
3652
+ const { propStatuses } = useContext16(VisualModePropStatusesContext);
3623
3653
  const { getDragOverrides } = useContext16(VisualModeDragOverridesContext);
3624
3654
  const nodePathMapping = useContext16(OverrideIdsToNodePathsGettersContext);
3625
3655
  const frame = useCurrentFrame();
@@ -3658,14 +3688,14 @@ var wrapInSchema = ({
3658
3688
  schema,
3659
3689
  currentValue: currentRuntimeValueDotNotation,
3660
3690
  overrideValues: nodePath === null ? {} : getDragOverrides(nodePath),
3661
- propStatus: nodePath === null ? undefined : getCodeValuesCtx(codeValues, nodePath),
3691
+ propStatus: nodePath === null ? undefined : getPropStatusesCtx(propStatuses, nodePath),
3662
3692
  frame
3663
3693
  });
3664
3694
  }, [
3665
3695
  currentRuntimeValueDotNotation,
3666
3696
  getDragOverrides,
3667
3697
  nodePath,
3668
- codeValues,
3698
+ propStatuses,
3669
3699
  frame
3670
3700
  ]);
3671
3701
  const activeKeys = selectActiveKeys(schema, valuesDotNotation);
@@ -4970,7 +5000,7 @@ var calculateMediaDuration = ({
4970
5000
  duration -= trimBefore;
4971
5001
  }
4972
5002
  const actualDuration = duration / playbackRate;
4973
- return Math.floor(actualDuration);
5003
+ return Number(actualDuration.toFixed(10));
4974
5004
  };
4975
5005
 
4976
5006
  // src/loop/index.tsx
@@ -10524,6 +10554,8 @@ function useRemotionContexts() {
10524
10554
  const resolveCompositionContext = React38.useContext(ResolveCompositionContext);
10525
10555
  const renderAssetManagerContext = React38.useContext(RenderAssetManager);
10526
10556
  const sequenceManagerContext = React38.useContext(SequenceManager);
10557
+ const sequenceManagerRefContext = React38.useContext(SequenceManagerRefContext);
10558
+ const visualModePropStatusesRefContext = React38.useContext(VisualModePropStatusesRefContext);
10527
10559
  const bufferManagerContext = React38.useContext(BufferingContextReact);
10528
10560
  const logLevelContext = React38.useContext(LogLevelContext);
10529
10561
  return useMemo37(() => ({
@@ -10537,6 +10569,8 @@ function useRemotionContexts() {
10537
10569
  resolveCompositionContext,
10538
10570
  renderAssetManagerContext,
10539
10571
  sequenceManagerContext,
10572
+ sequenceManagerRefContext,
10573
+ visualModePropStatusesRefContext,
10540
10574
  bufferManagerContext,
10541
10575
  logLevelContext
10542
10576
  }), [
@@ -10550,6 +10584,8 @@ function useRemotionContexts() {
10550
10584
  resolveCompositionContext,
10551
10585
  renderAssetManagerContext,
10552
10586
  sequenceManagerContext,
10587
+ sequenceManagerRefContext,
10588
+ visualModePropStatusesRefContext,
10553
10589
  bufferManagerContext,
10554
10590
  logLevelContext
10555
10591
  ]);
@@ -10566,21 +10602,27 @@ var RemotionContextProvider = (props2) => {
10566
10602
  value: contexts.preloadContext,
10567
10603
  children: /* @__PURE__ */ jsx35(CompositionManager.Provider, {
10568
10604
  value: contexts.compositionManagerCtx,
10569
- children: /* @__PURE__ */ jsx35(SequenceManager.Provider, {
10570
- value: contexts.sequenceManagerContext,
10571
- children: /* @__PURE__ */ jsx35(RenderAssetManager.Provider, {
10572
- value: contexts.renderAssetManagerContext,
10573
- children: /* @__PURE__ */ jsx35(ResolveCompositionContext.Provider, {
10574
- value: contexts.resolveCompositionContext,
10575
- children: /* @__PURE__ */ jsx35(TimelineContext.Provider, {
10576
- value: contexts.timelineContext,
10577
- children: /* @__PURE__ */ jsx35(SetTimelineContext.Provider, {
10578
- value: contexts.setTimelineContext,
10579
- children: /* @__PURE__ */ jsx35(SequenceContext.Provider, {
10580
- value: contexts.sequenceContext,
10581
- children: /* @__PURE__ */ jsx35(BufferingContextReact.Provider, {
10582
- value: contexts.bufferManagerContext,
10583
- children
10605
+ children: /* @__PURE__ */ jsx35(SequenceManagerRefContext.Provider, {
10606
+ value: contexts.sequenceManagerRefContext,
10607
+ children: /* @__PURE__ */ jsx35(SequenceManager.Provider, {
10608
+ value: contexts.sequenceManagerContext,
10609
+ children: /* @__PURE__ */ jsx35(VisualModePropStatusesRefContext.Provider, {
10610
+ value: contexts.visualModePropStatusesRefContext,
10611
+ children: /* @__PURE__ */ jsx35(RenderAssetManager.Provider, {
10612
+ value: contexts.renderAssetManagerContext,
10613
+ children: /* @__PURE__ */ jsx35(ResolveCompositionContext.Provider, {
10614
+ value: contexts.resolveCompositionContext,
10615
+ children: /* @__PURE__ */ jsx35(TimelineContext.Provider, {
10616
+ value: contexts.timelineContext,
10617
+ children: /* @__PURE__ */ jsx35(SetTimelineContext.Provider, {
10618
+ value: contexts.setTimelineContext,
10619
+ children: /* @__PURE__ */ jsx35(SequenceContext.Provider, {
10620
+ value: contexts.sequenceContext,
10621
+ children: /* @__PURE__ */ jsx35(BufferingContextReact.Provider, {
10622
+ value: contexts.bufferManagerContext,
10623
+ children
10624
+ })
10625
+ })
10584
10626
  })
10585
10627
  })
10586
10628
  })
@@ -10613,10 +10655,12 @@ var Internals = {
10613
10655
  VideoForPreview,
10614
10656
  CompositionManager,
10615
10657
  CompositionSetters,
10616
- VisualModeCodeValuesContext,
10658
+ VisualModePropStatusesContext,
10659
+ VisualModePropStatusesRefContext,
10617
10660
  VisualModeDragOverridesContext,
10618
10661
  VisualModeSettersContext,
10619
10662
  SequenceManager,
10663
+ SequenceManagerRefContext,
10620
10664
  SequenceStackTracesUpdateContext,
10621
10665
  wrapInSchema,
10622
10666
  sequenceSchema,
@@ -10735,8 +10779,8 @@ var Internals = {
10735
10779
  OverrideIdsToNodePathsSettersContext,
10736
10780
  findPropsToDelete,
10737
10781
  makeSequencePropsSubscriptionKey,
10738
- getCodeValuesCtx,
10739
- getEffectCodeValuesCtx,
10782
+ getPropStatusesCtx,
10783
+ getEffectPropStatusesCtx,
10740
10784
  hiddenField,
10741
10785
  durationInFramesField,
10742
10786
  fromField
@@ -1,5 +1,5 @@
1
1
  // src/version.ts
2
- var VERSION = "4.0.473";
2
+ var VERSION = "4.0.474";
3
3
  export {
4
4
  VERSION
5
5
  };
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "url": "https://github.com/remotion-dev/remotion/tree/main/packages/core"
4
4
  },
5
5
  "name": "remotion",
6
- "version": "4.0.473",
6
+ "version": "4.0.474",
7
7
  "description": "Make videos programmatically",
8
8
  "main": "dist/cjs/index.js",
9
9
  "types": "dist/cjs/index.d.ts",
@@ -35,7 +35,7 @@
35
35
  "react-dom": "19.2.3",
36
36
  "webpack": "5.105.0",
37
37
  "zod": "4.3.6",
38
- "@remotion/eslint-config-internal": "4.0.473",
38
+ "@remotion/eslint-config-internal": "4.0.474",
39
39
  "eslint": "9.19.0",
40
40
  "@typescript/native-preview": "7.0.0-dev.20260217.1"
41
41
  },