remotion 4.0.534 → 4.0.536
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/cjs/AbsoluteFill.d.ts +2 -7
- package/dist/cjs/AbsoluteFill.js +1 -1
- package/dist/cjs/Composition.js +15 -20
- package/dist/cjs/CompositionManager.d.ts +0 -4
- package/dist/cjs/CompositionManagerContext.d.ts +1 -6
- package/dist/cjs/CompositionManagerContext.js +0 -4
- package/dist/cjs/CompositionManagerProvider.js +77 -169
- package/dist/cjs/CompositionRegistryProvider.d.ts +5 -0
- package/dist/cjs/CompositionRegistryProvider.js +142 -0
- package/dist/cjs/DefaultPremountContext.d.ts +1 -0
- package/dist/cjs/DefaultPremountContext.js +6 -0
- package/dist/cjs/Folder.js +11 -20
- package/dist/cjs/HtmlInCanvas.d.ts +6 -4
- package/dist/cjs/HtmlInCanvas.js +179 -32
- package/dist/cjs/IFrame.js +40 -8
- package/dist/cjs/Img.d.ts +4 -2
- package/dist/cjs/Img.js +4 -3
- package/dist/cjs/Interactive.d.ts +31 -5
- package/dist/cjs/Interactive.js +40 -8
- package/dist/cjs/RemotionRoot.js +2 -1
- package/dist/cjs/Sequence.d.ts +2 -3
- package/dist/cjs/Sequence.js +117 -39
- package/dist/cjs/SequenceActivityBoundary.d.ts +10 -0
- package/dist/cjs/SequenceActivityBoundary.js +101 -0
- package/dist/cjs/SequenceActivityBudget.d.ts +13 -0
- package/dist/cjs/SequenceActivityBudget.js +196 -0
- package/dist/cjs/SequenceActivitySuspensionProvider.d.ts +4 -0
- package/dist/cjs/SequenceActivitySuspensionProvider.js +45 -0
- package/dist/cjs/SequenceManager.d.ts +9 -22
- package/dist/cjs/SequenceManager.js +54 -196
- package/dist/cjs/SequenceRegistryProvider.d.ts +4 -0
- package/dist/cjs/SequenceRegistryProvider.js +292 -0
- package/dist/cjs/Track.d.ts +10 -3
- package/dist/cjs/Track.js +8 -8
- package/dist/cjs/animated-image/AnimatedImage.d.ts +3 -2
- package/dist/cjs/animated-image/AnimatedImage.js +47 -34
- package/dist/cjs/animated-image/canvas.d.ts +2 -1
- package/dist/cjs/animated-image/canvas.js +2 -2
- package/dist/cjs/animated-image/props.d.ts +2 -1
- package/dist/cjs/asset-types.d.ts +4 -0
- package/dist/cjs/audio/AudioForPreview.js +54 -41
- package/dist/cjs/audio/get-audio-sync-anchor-tolerance.d.ts +1 -0
- package/dist/cjs/audio/get-audio-sync-anchor-tolerance.js +11 -0
- package/dist/cjs/audio/shared-audio-tags.d.ts +1 -1
- package/dist/cjs/audio/shared-audio-tags.js +1 -1
- package/dist/cjs/audio/use-audio-context.js +26 -7
- package/dist/cjs/canvas-image/CanvasImage.d.ts +3 -2
- package/dist/cjs/canvas-image/CanvasImage.js +5 -4
- package/dist/cjs/canvas-image/props.d.ts +2 -1
- package/dist/cjs/committed-metadata.d.ts +68 -0
- package/dist/cjs/committed-metadata.js +39 -0
- package/dist/cjs/component-identity.d.ts +6 -0
- package/dist/cjs/component-identity.js +39 -0
- package/dist/cjs/composition-registry-fallback.d.ts +14 -0
- package/dist/cjs/composition-registry-fallback.js +35 -0
- package/dist/cjs/create-element-source-proxy.d.ts +4 -0
- package/dist/cjs/create-element-source-proxy.js +46 -0
- package/dist/cjs/default-premount-in-seconds.d.ts +3 -0
- package/dist/cjs/default-premount-in-seconds.js +12 -0
- package/dist/cjs/effects/Solid.d.ts +3 -2
- package/dist/cjs/effects/Solid.js +5 -4
- package/dist/cjs/effects/canvas-pool.d.ts +1 -0
- package/dist/cjs/effects/canvas-pool.js +15 -10
- package/dist/cjs/effects/effect-types.d.ts +4 -0
- package/dist/cjs/effects/index.d.ts +1 -1
- package/dist/cjs/effects/run-effect-chain.d.ts +3 -1
- package/dist/cjs/effects/run-effect-chain.js +94 -56
- package/dist/cjs/effects/use-effect-chain-state.d.ts +2 -1
- package/dist/cjs/effects/use-effect-chain-state.js +11 -2
- package/dist/cjs/effects/use-memoized-effects.js +96 -17
- package/dist/cjs/enable-sequence-stack-traces.d.ts +2 -8
- package/dist/cjs/enable-sequence-stack-traces.js +7 -38
- package/dist/cjs/freeze.js +4 -1
- package/dist/cjs/index.d.ts +1 -3
- package/dist/cjs/index.js +0 -2
- package/dist/cjs/interactivity-schema.d.ts +50 -14
- package/dist/cjs/interactivity-schema.js +32 -4
- package/dist/cjs/internals.d.ts +110 -33
- package/dist/cjs/internals.js +29 -8
- package/dist/cjs/interpolate-keyframed-status.d.ts +4 -0
- package/dist/cjs/interpolate-keyframed-status.js +38 -1
- package/dist/cjs/interpolate.d.ts +12 -0
- package/dist/cjs/interpolate.js +15 -1
- package/dist/cjs/no-react.d.ts +5 -1
- package/dist/cjs/no-react.js +6 -0
- package/dist/cjs/optimistic-sequence-deletion.d.ts +17 -0
- package/dist/cjs/optimistic-sequence-deletion.js +114 -0
- package/dist/cjs/registry-store.d.ts +17 -0
- package/dist/cjs/registry-store.js +68 -0
- package/dist/cjs/sequence-activity-context.d.ts +13 -0
- package/dist/cjs/sequence-activity-context.js +21 -0
- package/dist/cjs/sequence-activity-defaults.d.ts +1 -0
- package/dist/cjs/sequence-activity-defaults.js +4 -0
- package/dist/cjs/sequence-outline.js +1 -2
- package/dist/cjs/sequence-registry-context.d.ts +26 -0
- package/dist/cjs/sequence-registry-context.js +71 -0
- package/dist/cjs/series/index.d.ts +2 -1
- package/dist/cjs/series/index.js +12 -4
- package/dist/cjs/timeline-position-state.js +11 -3
- package/dist/cjs/timeline-track-context.d.ts +1 -1
- package/dist/cjs/timeline-track-context.js +1 -2
- package/dist/cjs/use-lazy-component.js +29 -15
- package/dist/cjs/use-media-in-timeline.d.ts +7 -14
- package/dist/cjs/use-media-in-timeline.js +15 -117
- package/dist/cjs/use-premounting.js +3 -4
- package/dist/cjs/use-schema.js +3 -1
- package/dist/cjs/use-sequence-registration.d.ts +1 -1
- package/dist/cjs/use-sequence-registration.js +22 -6
- package/dist/cjs/use-timeline-seek.d.ts +1 -0
- package/dist/cjs/use-timeline-seek.js +10 -0
- package/dist/cjs/use-video.d.ts +7 -2
- package/dist/cjs/use-video.js +11 -3
- package/dist/cjs/version.d.ts +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/cjs/video/VideoForPreview.js +55 -42
- package/dist/cjs/video/seek-until-right.js +11 -7
- package/dist/cjs/with-interactivity-schema.js +40 -14
- package/dist/cjs/wrap-remotion-context.d.ts +15 -3
- package/dist/cjs/wrap-remotion-context.js +101 -7
- package/dist/esm/index.mjs +3562 -2347
- package/dist/esm/no-react.mjs +74 -37
- package/dist/esm/version.mjs +1 -1
- package/package.json +2 -2
- package/dist/cjs/nonce.d.ts +0 -11
- package/dist/cjs/nonce.js +0 -42
- package/dist/cjs/sequence-order-marker.d.ts +0 -58
- package/dist/cjs/sequence-order-marker.js +0 -44
|
@@ -32,64 +32,38 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
32
32
|
return result;
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
36
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
37
|
+
};
|
|
38
|
+
var _a;
|
|
35
39
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.SequenceManagerProvider = exports.VisualModeBatchSettersContext = exports.VisualModeSettersContext = exports.useEffectDragOverridesForNodePath = exports.useActiveFromDragOverrideKeys = exports.useDragOverridesForNodePath = exports.VisualModeDragOverridesContext = exports.VisualModePropStatusesRefContext = exports.VisualModePropStatusesContext = exports.makeSequencePropsSubscriptionKey = exports.VisualModeDragOverridesSubscriptionContext =
|
|
40
|
+
exports.SequenceManagerProvider = exports.VisualModeBatchSettersContext = exports.VisualModeSettersContext = exports.useEffectDragOverridesForNodePath = exports.useActiveFromDragOverrideKeys = exports.useDragOverridesForNodePath = exports.VisualModeDragOverridesRefContext = exports.VisualModeDragOverridesContext = exports.VisualModePropStatusesRefContext = exports.VisualModePropStatusesContext = exports.makeSequencePropsSubscriptionKey = exports.VisualModeDragOverridesSubscriptionContext = void 0;
|
|
37
41
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
38
42
|
const react_1 = __importStar(require("react"));
|
|
39
|
-
|
|
43
|
+
__exportStar(require("./sequence-registry-context.js"), exports);
|
|
44
|
+
const sequence_activity_context_js_1 = require("./sequence-activity-context.js");
|
|
45
|
+
const sequence_registry_context_js_1 = require("./sequence-registry-context.js");
|
|
46
|
+
const SequenceActivityBudget_js_1 = require("./SequenceActivityBudget.js");
|
|
47
|
+
const SequenceActivitySuspensionProvider_js_1 = require("./SequenceActivitySuspensionProvider.js");
|
|
48
|
+
const SequenceRegistryProvider_js_1 = require("./SequenceRegistryProvider.js");
|
|
40
49
|
const use_remotion_environment_js_1 = require("./use-remotion-environment.js");
|
|
41
50
|
const use_sync_external_store_js_1 = require("./use-sync-external-store.js");
|
|
42
51
|
const useIsomorphicLayoutEffect = typeof window === 'undefined' ? react_1.default.useEffect : react_1.default.useLayoutEffect;
|
|
43
|
-
const
|
|
44
|
-
registerSequence: () => {
|
|
45
|
-
throw new Error('SequenceManagerContext not initialized');
|
|
46
|
-
},
|
|
47
|
-
updateSequence: null,
|
|
48
|
-
unregisterSequence: () => {
|
|
49
|
-
throw new Error('SequenceManagerContext not initialized');
|
|
50
|
-
},
|
|
51
|
-
sequences: [],
|
|
52
|
-
};
|
|
53
|
-
exports.SequenceManagerActionsContext = react_1.default.createContext({
|
|
54
|
-
registerSequence: defaultSequenceManager.registerSequence,
|
|
55
|
-
updateSequence: defaultSequenceManager.updateSequence,
|
|
56
|
-
unregisterSequence: defaultSequenceManager.unregisterSequence,
|
|
57
|
-
});
|
|
58
|
-
exports.SequenceManager = react_1.default.createContext(defaultSequenceManager);
|
|
59
|
-
const NativeSequenceManagerProvider = exports.SequenceManager.Provider;
|
|
60
|
-
const SequenceManagerProviderWithActions = ({ value, children }) => {
|
|
61
|
-
const actions = (0, react_1.useMemo)(() => ({
|
|
62
|
-
registerSequence: value.registerSequence,
|
|
63
|
-
updateSequence: value.updateSequence,
|
|
64
|
-
unregisterSequence: value.unregisterSequence,
|
|
65
|
-
}), [value.registerSequence, value.updateSequence, value.unregisterSequence]);
|
|
66
|
-
return (jsx_runtime_1.jsx(exports.SequenceManagerActionsContext.Provider, { value: actions, children: jsx_runtime_1.jsx(NativeSequenceManagerProvider, { value: value, children: children }) }));
|
|
67
|
-
};
|
|
68
|
-
// Keep custom SequenceManager.Provider trees in sync with the stable actions
|
|
69
|
-
// context while preserving the legacy reactive sequence-list context.
|
|
70
|
-
Object.defineProperty(exports.SequenceManager, 'Provider', {
|
|
71
|
-
value: SequenceManagerProviderWithActions,
|
|
72
|
-
});
|
|
73
|
-
const useSequenceManagerSequences = () => {
|
|
74
|
-
return (0, react_1.useContext)(exports.SequenceManager).sequences;
|
|
75
|
-
};
|
|
76
|
-
exports.useSequenceManagerSequences = useSequenceManagerSequences;
|
|
77
|
-
exports.SequenceManagerRefContext = react_1.default.createContext({
|
|
78
|
-
current: [],
|
|
79
|
-
});
|
|
80
|
-
exports.SequenceRegistrationContext = react_1.default.createContext(false);
|
|
81
|
-
exports.DisableSequenceRegistrationContext = react_1.default.createContext(false);
|
|
82
|
-
const DisableSequenceRegistrationProvider = ({ children }) => {
|
|
83
|
-
return react_1.default.createElement(exports.DisableSequenceRegistrationContext.Provider, { value: true }, children);
|
|
84
|
-
};
|
|
85
|
-
exports.DisableSequenceRegistrationProvider = DisableSequenceRegistrationProvider;
|
|
52
|
+
const useCommitEffect = (_a = react_1.default.useInsertionEffect) !== null && _a !== void 0 ? _a : useIsomorphicLayoutEffect;
|
|
86
53
|
exports.VisualModeDragOverridesSubscriptionContext = react_1.default.createContext(null);
|
|
87
54
|
const ActiveFromDragOverrideKeysContext = react_1.default.createContext(null);
|
|
88
55
|
const SequenceManagerScopeProviders = ({ children, dragOverridesSubscription, fromKeys }) => {
|
|
89
|
-
|
|
56
|
+
var _a;
|
|
57
|
+
const { isStudio } = (0, use_remotion_environment_js_1.useRemotionEnvironment)();
|
|
58
|
+
const activitySettings = (0, react_1.useContext)(sequence_activity_context_js_1.SequenceActivitySettingsContext);
|
|
59
|
+
const commitRegistrationEnabled = (0, react_1.useContext)(sequence_registry_context_js_1.SequenceCommitRegistrationContext);
|
|
60
|
+
const manager = (0, react_1.useContext)(sequence_registry_context_js_1.SequenceManagerActionsContext);
|
|
90
61
|
const scopedDragOverridesSubscription = (0, react_1.useMemo)(() => ({ ...dragOverridesSubscription, manager }), [dragOverridesSubscription, manager]);
|
|
91
62
|
const activeFromDragOverrideKeys = (0, react_1.useMemo)(() => ({ manager, keys: fromKeys }), [fromKeys, manager]);
|
|
92
|
-
return (jsx_runtime_1.jsx(ActiveFromDragOverrideKeysContext.Provider, { value: activeFromDragOverrideKeys, children: jsx_runtime_1.jsx(exports.VisualModeDragOverridesSubscriptionContext.Provider, { value: scopedDragOverridesSubscription, children:
|
|
63
|
+
return (jsx_runtime_1.jsx(ActiveFromDragOverrideKeysContext.Provider, { value: activeFromDragOverrideKeys, children: jsx_runtime_1.jsx(exports.VisualModeDragOverridesSubscriptionContext.Provider, { value: scopedDragOverridesSubscription, children: jsx_runtime_1.jsx(sequence_activity_context_js_1.SequenceActivityContext.Provider, { value: ((_a = activitySettings === null || activitySettings === void 0 ? void 0 : activitySettings.limit) !== null && _a !== void 0 ? _a : sequence_activity_context_js_1.DEFAULT_SEQUENCE_ACTIVITY_LIMIT) > 0 &&
|
|
64
|
+
isStudio &&
|
|
65
|
+
commitRegistrationEnabled &&
|
|
66
|
+
typeof react_1.default.Activity !== 'undefined', children: jsx_runtime_1.jsx(SequenceActivitySuspensionProvider_js_1.SequenceActivitySuspensionProvider, { children: jsx_runtime_1.jsx(SequenceActivityBudget_js_1.SequenceActivityBudgetProvider, { children: children }) }) }) }) }));
|
|
93
67
|
};
|
|
94
68
|
const emptyDragOverrides = {};
|
|
95
69
|
const emptyFromOverrideKeys = new Set();
|
|
@@ -104,24 +78,34 @@ exports.VisualModePropStatusesContext = react_1.default.createContext({
|
|
|
104
78
|
exports.VisualModePropStatusesRefContext = react_1.default.createContext({
|
|
105
79
|
current: {},
|
|
106
80
|
});
|
|
107
|
-
|
|
81
|
+
const defaultVisualModeDragOverrides = {
|
|
108
82
|
getDragOverrides: () => {
|
|
109
83
|
throw new Error('VisualModeDragOverridesContext not initialized');
|
|
110
84
|
},
|
|
111
85
|
getEffectDragOverrides: () => {
|
|
112
86
|
throw new Error('VisualModeDragOverridesContext not initialized');
|
|
113
87
|
},
|
|
114
|
-
}
|
|
115
|
-
|
|
88
|
+
};
|
|
89
|
+
exports.VisualModeDragOverridesContext = react_1.default.createContext(defaultVisualModeDragOverrides);
|
|
90
|
+
exports.VisualModeDragOverridesRefContext = react_1.default.createContext({ current: defaultVisualModeDragOverrides });
|
|
91
|
+
const useDragOverrideSnapshot = (subscribe, getSnapshot) => {
|
|
92
|
+
const dormant = (0, react_1.useContext)(sequence_activity_context_js_1.SequenceActivityDormantContext);
|
|
93
|
+
const [, forceUpdate] = (0, react_1.useState)(0);
|
|
94
|
+
const snapshot = (0, use_sync_external_store_js_1.useSyncExternalStore)(subscribe, getSnapshot, getSnapshot);
|
|
95
|
+
useCommitEffect(() => {
|
|
96
|
+
if (!dormant) {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
// Activity disconnects passive subscriptions, including useSyncExternalStore.
|
|
100
|
+
// Insertion effects stay connected through nested hidden Activities.
|
|
101
|
+
return subscribe(() => forceUpdate((current) => current + 1));
|
|
102
|
+
}, [dormant, subscribe]);
|
|
103
|
+
return snapshot;
|
|
104
|
+
};
|
|
116
105
|
const useDragOverridesForNodePath = (nodePath) => {
|
|
117
106
|
const subscription = (0, react_1.useContext)(exports.VisualModeDragOverridesSubscriptionContext);
|
|
118
|
-
const manager = (0, react_1.useContext)(
|
|
107
|
+
const manager = (0, react_1.useContext)(sequence_registry_context_js_1.SequenceManagerActionsContext);
|
|
119
108
|
const scopedSubscription = (subscription === null || subscription === void 0 ? void 0 : subscription.manager) === manager ? subscription : null;
|
|
120
|
-
// Legacy providers only supply VisualModeDragOverridesContext. Its presence is
|
|
121
|
-
// fixed for the lifetime of a mounted tree.
|
|
122
|
-
const legacy = scopedSubscription === null
|
|
123
|
-
? (0, react_1.useContext)(exports.VisualModeDragOverridesContext)
|
|
124
|
-
: null;
|
|
125
109
|
const key = nodePath === null ? null : (0, exports.makeSequencePropsSubscriptionKey)(nodePath);
|
|
126
110
|
const subscribe = (0, react_1.useCallback)((listener) => {
|
|
127
111
|
var _a;
|
|
@@ -131,27 +115,19 @@ const useDragOverridesForNodePath = (nodePath) => {
|
|
|
131
115
|
var _a;
|
|
132
116
|
return (_a = scopedSubscription === null || scopedSubscription === void 0 ? void 0 : scopedSubscription.getSnapshot(key)) !== null && _a !== void 0 ? _a : emptyDragOverrides;
|
|
133
117
|
}, [key, scopedSubscription]);
|
|
134
|
-
|
|
135
|
-
return legacy !== null && nodePath !== null
|
|
136
|
-
? legacy.getDragOverrides(nodePath)
|
|
137
|
-
: overrides;
|
|
118
|
+
return useDragOverrideSnapshot(subscribe, getSnapshot);
|
|
138
119
|
};
|
|
139
120
|
exports.useDragOverridesForNodePath = useDragOverridesForNodePath;
|
|
140
121
|
const useActiveFromDragOverrideKeys = () => {
|
|
141
122
|
const snapshot = (0, react_1.useContext)(ActiveFromDragOverrideKeysContext);
|
|
142
|
-
const manager = (0, react_1.useContext)(
|
|
123
|
+
const manager = (0, react_1.useContext)(sequence_registry_context_js_1.SequenceManagerActionsContext);
|
|
143
124
|
return (snapshot === null || snapshot === void 0 ? void 0 : snapshot.manager) === manager ? snapshot.keys : emptyFromOverrideKeys;
|
|
144
125
|
};
|
|
145
126
|
exports.useActiveFromDragOverrideKeys = useActiveFromDragOverrideKeys;
|
|
146
|
-
const useEffectDragOverridesForNodePath = (nodePath
|
|
127
|
+
const useEffectDragOverridesForNodePath = (nodePath) => {
|
|
147
128
|
const subscription = (0, react_1.useContext)(exports.VisualModeDragOverridesSubscriptionContext);
|
|
148
|
-
const manager = (0, react_1.useContext)(
|
|
129
|
+
const manager = (0, react_1.useContext)(sequence_registry_context_js_1.SequenceManagerActionsContext);
|
|
149
130
|
const scopedSubscription = (subscription === null || subscription === void 0 ? void 0 : subscription.manager) === manager ? subscription : null;
|
|
150
|
-
// Legacy providers only supply VisualModeDragOverridesContext. Its presence is
|
|
151
|
-
// fixed for the lifetime of a mounted tree.
|
|
152
|
-
const legacy = scopedSubscription === null
|
|
153
|
-
? (0, react_1.useContext)(exports.VisualModeDragOverridesContext)
|
|
154
|
-
: null;
|
|
155
131
|
const key = nodePath === null ? null : (0, exports.makeSequencePropsSubscriptionKey)(nodePath);
|
|
156
132
|
const subscribe = (0, react_1.useCallback)((listener) => {
|
|
157
133
|
var _a;
|
|
@@ -161,18 +137,9 @@ const useEffectDragOverridesForNodePath = (nodePath, effectCount) => {
|
|
|
161
137
|
var _a;
|
|
162
138
|
return (_a = scopedSubscription === null || scopedSubscription === void 0 ? void 0 : scopedSubscription.getEffectSnapshot(key)) !== null && _a !== void 0 ? _a : emptyEffectDragOverrides;
|
|
163
139
|
}, [key, scopedSubscription]);
|
|
164
|
-
|
|
165
|
-
if (legacy !== null && nodePath !== null) {
|
|
166
|
-
const legacyOverrides = {};
|
|
167
|
-
for (let index = 0; index < effectCount; index++) {
|
|
168
|
-
legacyOverrides[index] = legacy.getEffectDragOverrides(nodePath, index);
|
|
169
|
-
}
|
|
170
|
-
return legacyOverrides;
|
|
171
|
-
}
|
|
172
|
-
return overrides;
|
|
140
|
+
return useDragOverrideSnapshot(subscribe, getSnapshot);
|
|
173
141
|
};
|
|
174
142
|
exports.useEffectDragOverridesForNodePath = useEffectDragOverridesForNodePath;
|
|
175
|
-
/* eslint-enable react-hooks/rules-of-hooks */
|
|
176
143
|
exports.VisualModeSettersContext = react_1.default.createContext({
|
|
177
144
|
setDragOverrides: () => {
|
|
178
145
|
throw new Error('VisualModeSettersContext not initialized');
|
|
@@ -196,13 +163,6 @@ exports.VisualModeSettersContext = react_1.default.createContext({
|
|
|
196
163
|
exports.VisualModeBatchSettersContext = react_1.default.createContext(null);
|
|
197
164
|
const effectDragOverridesKey = (nodePath, effectIndex) => `${(0, exports.makeSequencePropsSubscriptionKey)(nodePath)}.effects.${effectIndex}`;
|
|
198
165
|
const SequenceManagerProvider = ({ children }) => {
|
|
199
|
-
const { isStudio } = (0, use_remotion_environment_js_1.useRemotionEnvironment)();
|
|
200
|
-
const [sequenceManagerId] = (0, react_1.useState)(() => String(Math.random()));
|
|
201
|
-
const committedOrderRef = (0, react_1.useRef)(null);
|
|
202
|
-
const committedOrderIdsRef = (0, react_1.useRef)(null);
|
|
203
|
-
const [sequences, setSequences] = (0, react_1.useState)([]);
|
|
204
|
-
const sequencesRef = (0, react_1.useRef)(sequences);
|
|
205
|
-
sequencesRef.current = sequences;
|
|
206
166
|
const [dragOverrideState, setDragOverrideState] = (0, react_1.useState)(() => ({
|
|
207
167
|
overrides: {},
|
|
208
168
|
fromKeys: new Set(),
|
|
@@ -220,7 +180,9 @@ const SequenceManagerProvider = ({ children }) => {
|
|
|
220
180
|
});
|
|
221
181
|
const [propStatuses, setPropStatusesMapState] = (0, react_1.useState)({});
|
|
222
182
|
const propStatusesRef = (0, react_1.useRef)(propStatuses);
|
|
223
|
-
|
|
183
|
+
useIsomorphicLayoutEffect(() => {
|
|
184
|
+
propStatusesRef.current = propStatuses;
|
|
185
|
+
}, [propStatuses]);
|
|
224
186
|
const setDragOverridesBatch = (0, react_1.useCallback)((overrides) => {
|
|
225
187
|
setDragOverrideState((prevState) => {
|
|
226
188
|
var _a;
|
|
@@ -436,114 +398,6 @@ const SequenceManagerProvider = ({ children }) => {
|
|
|
436
398
|
return next;
|
|
437
399
|
});
|
|
438
400
|
}, []);
|
|
439
|
-
useIsomorphicLayoutEffect(() => {
|
|
440
|
-
if (!isStudio) {
|
|
441
|
-
return;
|
|
442
|
-
}
|
|
443
|
-
let unmounted = false;
|
|
444
|
-
const onCommitOrder = (event) => {
|
|
445
|
-
const { detail } = event;
|
|
446
|
-
const managerOrder = detail.sequenceManagers.find((item) => item.managerId === sequenceManagerId);
|
|
447
|
-
if (!managerOrder) {
|
|
448
|
-
return;
|
|
449
|
-
}
|
|
450
|
-
const previousOrder = committedOrderIdsRef.current;
|
|
451
|
-
if (previousOrder !== null &&
|
|
452
|
-
previousOrder.length === managerOrder.sequenceIds.length &&
|
|
453
|
-
previousOrder.every((sequenceId, index) => sequenceId === managerOrder.sequenceIds[index])) {
|
|
454
|
-
return;
|
|
455
|
-
}
|
|
456
|
-
const order = new Map(managerOrder.sequenceIds.map((sequenceId, index) => [
|
|
457
|
-
sequenceId,
|
|
458
|
-
index,
|
|
459
|
-
]));
|
|
460
|
-
committedOrderIdsRef.current = managerOrder.sequenceIds;
|
|
461
|
-
committedOrderRef.current = order;
|
|
462
|
-
queueMicrotask(() => {
|
|
463
|
-
if (unmounted) {
|
|
464
|
-
return;
|
|
465
|
-
}
|
|
466
|
-
setSequences((currentSequences) => {
|
|
467
|
-
let changed = false;
|
|
468
|
-
const nextSequences = currentSequences.map((sequence) => {
|
|
469
|
-
var _a;
|
|
470
|
-
const timelineOrder = (_a = order.get(sequence.id)) !== null && _a !== void 0 ? _a : null;
|
|
471
|
-
if (sequence.timelineOrder === timelineOrder) {
|
|
472
|
-
return sequence;
|
|
473
|
-
}
|
|
474
|
-
changed = true;
|
|
475
|
-
return { ...sequence, timelineOrder };
|
|
476
|
-
});
|
|
477
|
-
return changed ? nextSequences : currentSequences;
|
|
478
|
-
});
|
|
479
|
-
});
|
|
480
|
-
};
|
|
481
|
-
window.addEventListener(sequence_order_marker_js_1.COMMIT_ORDER_EVENT, onCommitOrder);
|
|
482
|
-
return () => {
|
|
483
|
-
unmounted = true;
|
|
484
|
-
window.removeEventListener(sequence_order_marker_js_1.COMMIT_ORDER_EVENT, onCommitOrder);
|
|
485
|
-
};
|
|
486
|
-
}, [isStudio, sequenceManagerId]);
|
|
487
|
-
const registerSequence = (0, react_1.useCallback)((seq) => {
|
|
488
|
-
setSequences((seqs) => {
|
|
489
|
-
var _a;
|
|
490
|
-
var _b;
|
|
491
|
-
return [
|
|
492
|
-
...seqs,
|
|
493
|
-
{
|
|
494
|
-
...seq,
|
|
495
|
-
timelineOrder: (_b = (_a = committedOrderRef.current) === null || _a === void 0 ? void 0 : _a.get(seq.id)) !== null && _b !== void 0 ? _b : null,
|
|
496
|
-
},
|
|
497
|
-
];
|
|
498
|
-
});
|
|
499
|
-
}, []);
|
|
500
|
-
const updateSequence = (0, react_1.useCallback)((seq) => {
|
|
501
|
-
setSequences((seqs) => {
|
|
502
|
-
var _a;
|
|
503
|
-
var _b;
|
|
504
|
-
const index = seqs.findIndex((item) => item.id === seq.id);
|
|
505
|
-
if (index === -1) {
|
|
506
|
-
return seqs;
|
|
507
|
-
}
|
|
508
|
-
const previousSequence = seqs[index];
|
|
509
|
-
const timelineOrder = (_b = (_a = committedOrderRef.current) === null || _a === void 0 ? void 0 : _a.get(seq.id)) !== null && _b !== void 0 ? _b : null;
|
|
510
|
-
// A new registration getter does not necessarily change the metadata.
|
|
511
|
-
let unchanged = Object.is(previousSequence.timelineOrder, timelineOrder);
|
|
512
|
-
// The manager adds timelineOrder even if the incoming object omits it.
|
|
513
|
-
let keyCount = 1;
|
|
514
|
-
if (unchanged) {
|
|
515
|
-
for (const key in seq) {
|
|
516
|
-
if (key === 'timelineOrder' ||
|
|
517
|
-
!Object.prototype.hasOwnProperty.call(seq, key)) {
|
|
518
|
-
continue;
|
|
519
|
-
}
|
|
520
|
-
keyCount++;
|
|
521
|
-
if (!Object.prototype.hasOwnProperty.call(previousSequence, key) ||
|
|
522
|
-
!Object.is(previousSequence[key], seq[key])) {
|
|
523
|
-
unchanged = false;
|
|
524
|
-
break;
|
|
525
|
-
}
|
|
526
|
-
}
|
|
527
|
-
}
|
|
528
|
-
if (unchanged && Object.keys(previousSequence).length === keyCount) {
|
|
529
|
-
return seqs;
|
|
530
|
-
}
|
|
531
|
-
const next = [...seqs];
|
|
532
|
-
next[index] = { ...seq, timelineOrder };
|
|
533
|
-
return next;
|
|
534
|
-
});
|
|
535
|
-
}, []);
|
|
536
|
-
const unregisterSequence = (0, react_1.useCallback)((seq) => {
|
|
537
|
-
setSequences((seqs) => seqs.filter((s) => s.id !== seq));
|
|
538
|
-
}, []);
|
|
539
|
-
const sequenceContext = (0, react_1.useMemo)(() => {
|
|
540
|
-
return {
|
|
541
|
-
registerSequence,
|
|
542
|
-
sequences,
|
|
543
|
-
updateSequence,
|
|
544
|
-
unregisterSequence,
|
|
545
|
-
};
|
|
546
|
-
}, [registerSequence, sequences, unregisterSequence, updateSequence]);
|
|
547
401
|
const dragOverridesSubscription = (0, react_1.useMemo)(() => ({
|
|
548
402
|
subscribe: subscribeDragOverrides,
|
|
549
403
|
getSnapshot: getDragOverridesSnapshot,
|
|
@@ -574,6 +428,11 @@ const SequenceManagerProvider = ({ children }) => {
|
|
|
574
428
|
getEffectDragOverrides,
|
|
575
429
|
};
|
|
576
430
|
}, [getDragOverrides, getEffectDragOverrides]);
|
|
431
|
+
const dragOverridesRef = (0, react_1.useRef)(dragOverridesContext);
|
|
432
|
+
useIsomorphicLayoutEffect(() => {
|
|
433
|
+
// Interaction handlers read the latest committed overrides without subscribing.
|
|
434
|
+
dragOverridesRef.current = dragOverridesContext;
|
|
435
|
+
}, [dragOverridesContext]);
|
|
577
436
|
const settersContext = (0, react_1.useMemo)(() => {
|
|
578
437
|
return {
|
|
579
438
|
setDragOverrides,
|
|
@@ -592,7 +451,6 @@ const SequenceManagerProvider = ({ children }) => {
|
|
|
592
451
|
remapPropStatuses,
|
|
593
452
|
]);
|
|
594
453
|
const batchSettersContext = (0, react_1.useMemo)(() => ({ setDragOverridesBatch, setEffectDragOverridesBatch }), [setDragOverridesBatch, setEffectDragOverridesBatch]);
|
|
595
|
-
|
|
596
|
-
return isStudio ? (jsx_runtime_1.jsx(sequence_order_marker_js_1.SequenceManagerOrderMarker, { managerId: sequenceManagerId, children: providers })) : (providers);
|
|
454
|
+
return (jsx_runtime_1.jsx(SequenceRegistryProvider_js_1.SequenceRegistryProvider, { 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(SequenceManagerScopeProviders, { dragOverridesSubscription: dragOverridesSubscription, fromKeys: dragOverrideState.fromKeys, children: jsx_runtime_1.jsx(exports.VisualModeDragOverridesContext.Provider, { value: dragOverridesContext, children: jsx_runtime_1.jsx(exports.VisualModeDragOverridesRefContext.Provider, { value: dragOverridesRef, children: jsx_runtime_1.jsx(exports.VisualModeSettersContext.Provider, { value: settersContext, children: jsx_runtime_1.jsx(exports.VisualModeBatchSettersContext.Provider, { value: batchSettersContext, children: children }) }) }) }) }) }) }) }));
|
|
597
455
|
};
|
|
598
456
|
exports.SequenceManagerProvider = SequenceManagerProvider;
|
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.SequenceRegistryProvider = void 0;
|
|
37
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
38
|
+
const react_1 = __importStar(require("react"));
|
|
39
|
+
const committed_metadata_js_1 = require("./committed-metadata.js");
|
|
40
|
+
const registry_store_js_1 = require("./registry-store.js");
|
|
41
|
+
const sequence_registry_context_js_1 = require("./sequence-registry-context.js");
|
|
42
|
+
const use_remotion_environment_js_1 = require("./use-remotion-environment.js");
|
|
43
|
+
const useIsomorphicLayoutEffect = typeof window === 'undefined' ? react_1.default.useEffect : react_1.default.useLayoutEffect;
|
|
44
|
+
const SequenceManagerRefProvider = (0, committed_metadata_js_1.withCommittedMetadata)(sequence_registry_context_js_1.SequenceManagerRefContext.Provider);
|
|
45
|
+
const SequenceRegistryProvider = ({ children }) => {
|
|
46
|
+
const { isStudio } = (0, use_remotion_environment_js_1.useRemotionEnvironment)();
|
|
47
|
+
const sequenceRegistrationEnabled = (0, react_1.useContext)(sequence_registry_context_js_1.SequenceRegistrationContext);
|
|
48
|
+
const shouldObserveCommits = isStudio || sequenceRegistrationEnabled;
|
|
49
|
+
const [sequenceManagerId] = (0, react_1.useState)(() => String(Math.random()));
|
|
50
|
+
const [commitRegistrationEnabled, setCommitRegistrationEnabled] = (0, react_1.useState)(() => shouldObserveCommits && (0, committed_metadata_js_1.isCommitRegistrationObserverInstalled)());
|
|
51
|
+
const observedCommitRef = (0, react_1.useRef)(false);
|
|
52
|
+
const rootObservationFailedRef = (0, react_1.useRef)(false);
|
|
53
|
+
const committedRegistrationIdsRef = (0, react_1.useRef)(new Set());
|
|
54
|
+
const committedDescriptorsRef = (0, react_1.useRef)(new Map());
|
|
55
|
+
const pendingCommittedSequencesRef = (0, react_1.useRef)(new Map());
|
|
56
|
+
const committedScopesRef = (0, react_1.useRef)(new Map([
|
|
57
|
+
[sequenceManagerId, { sequences: [], sequenceIds: [] }],
|
|
58
|
+
]));
|
|
59
|
+
const registrationObserverFailedRef = (0, react_1.useRef)(false);
|
|
60
|
+
const registrationUnmountedRef = (0, react_1.useRef)(false);
|
|
61
|
+
const committedOrderRef = (0, react_1.useRef)(null);
|
|
62
|
+
const committedOrderIdsRef = (0, react_1.useRef)(null);
|
|
63
|
+
const [registry] = (0, react_1.useState)(() => (0, registry_store_js_1.createRegistryStore)([]));
|
|
64
|
+
const setSequences = registry.setSnapshot;
|
|
65
|
+
const sequencesRef = (0, react_1.useMemo)(() => ({
|
|
66
|
+
get current() {
|
|
67
|
+
return registry.getSnapshot();
|
|
68
|
+
},
|
|
69
|
+
}), [registry]);
|
|
70
|
+
const onCommitSequences = (0, react_1.useCallback)((scopeId, snapshot, sequenceIds) => {
|
|
71
|
+
var _a;
|
|
72
|
+
if (registrationObserverFailedRef.current ||
|
|
73
|
+
registrationUnmountedRef.current) {
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
const previousSnapshot = (_a = pendingCommittedSequencesRef.current.get(scopeId)) !== null && _a !== void 0 ? _a : committedScopesRef.current.get(scopeId);
|
|
77
|
+
if ((previousSnapshot === null || previousSnapshot === void 0 ? void 0 : previousSnapshot.sequences) === snapshot &&
|
|
78
|
+
previousSnapshot.sequenceIds === sequenceIds) {
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
const alreadyPending = pendingCommittedSequencesRef.current.size > 0;
|
|
82
|
+
pendingCommittedSequencesRef.current.set(scopeId, {
|
|
83
|
+
sequences: snapshot,
|
|
84
|
+
sequenceIds,
|
|
85
|
+
});
|
|
86
|
+
if (alreadyPending) {
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
// Publish after React finishes committing, and coalesce successive snapshots.
|
|
90
|
+
queueMicrotask(() => {
|
|
91
|
+
const pending = pendingCommittedSequencesRef.current;
|
|
92
|
+
pendingCommittedSequencesRef.current = new Map();
|
|
93
|
+
if (pending.size === 0 ||
|
|
94
|
+
registrationObserverFailedRef.current ||
|
|
95
|
+
registrationUnmountedRef.current) {
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
const previousIds = committedRegistrationIdsRef.current;
|
|
99
|
+
const previousDescriptors = committedDescriptorsRef.current;
|
|
100
|
+
for (const [id, scope] of pending) {
|
|
101
|
+
if (id !== sequenceManagerId && scope.sequenceIds.length === 0) {
|
|
102
|
+
committedScopesRef.current.delete(id);
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
committedScopesRef.current.set(id, scope);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
// A forwarded renderer owns only its fragment. Publishing or removing it
|
|
109
|
+
// must never replace the descriptors committed by the other roots.
|
|
110
|
+
const scopes = [...committedScopesRef.current.values()];
|
|
111
|
+
const sequences = scopes.flatMap((scope) => scope.sequences);
|
|
112
|
+
const ids = scopes.flatMap((scope) => scope.sequenceIds);
|
|
113
|
+
committedDescriptorsRef.current = new Map(sequences.map((sequence) => [sequence.id, sequence]));
|
|
114
|
+
const nextIds = new Set(sequences.map((sequence) => sequence.id));
|
|
115
|
+
const order = new Map(ids.map((id, index) => [id, index]));
|
|
116
|
+
committedOrderIdsRef.current = ids;
|
|
117
|
+
committedOrderRef.current = order;
|
|
118
|
+
committedRegistrationIdsRef.current = nextIds;
|
|
119
|
+
setSequences((current) => (0, registry_store_js_1.reconcileRegistryEntries)({
|
|
120
|
+
current,
|
|
121
|
+
entries: sequences,
|
|
122
|
+
previousDescriptors,
|
|
123
|
+
previousKeys: previousIds,
|
|
124
|
+
nextKeys: nextIds,
|
|
125
|
+
getKey: (sequence) => sequence.id,
|
|
126
|
+
order,
|
|
127
|
+
orderProperty: 'timelineOrder',
|
|
128
|
+
}));
|
|
129
|
+
});
|
|
130
|
+
}, [sequenceManagerId, setSequences]);
|
|
131
|
+
const onCommitRootSequences = (0, react_1.useCallback)((sequences, sequenceIds) => {
|
|
132
|
+
if (!rootObservationFailedRef.current) {
|
|
133
|
+
observedCommitRef.current = true;
|
|
134
|
+
onCommitSequences(sequenceManagerId, sequences, sequenceIds);
|
|
135
|
+
}
|
|
136
|
+
}, [onCommitSequences, sequenceManagerId]);
|
|
137
|
+
const registryScope = (0, react_1.useMemo)(() => ({
|
|
138
|
+
onCommitSequences,
|
|
139
|
+
commitRegistrationRequested: shouldObserveCommits,
|
|
140
|
+
}), [onCommitSequences, shouldObserveCommits]);
|
|
141
|
+
useIsomorphicLayoutEffect(() => {
|
|
142
|
+
if (!shouldObserveCommits) {
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
let unmounted = false;
|
|
146
|
+
registrationUnmountedRef.current = false;
|
|
147
|
+
const onRegistrationError = () => {
|
|
148
|
+
if (registrationObserverFailedRef.current) {
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
registrationObserverFailedRef.current = true;
|
|
152
|
+
pendingCommittedSequencesRef.current.clear();
|
|
153
|
+
queueMicrotask(() => {
|
|
154
|
+
if (registrationUnmountedRef.current) {
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
const previousIds = committedRegistrationIdsRef.current;
|
|
158
|
+
committedRegistrationIdsRef.current = new Set();
|
|
159
|
+
committedScopesRef.current.clear();
|
|
160
|
+
setSequences((current) => current.filter((sequence) => !previousIds.has(sequence.id)));
|
|
161
|
+
setCommitRegistrationEnabled(false);
|
|
162
|
+
});
|
|
163
|
+
};
|
|
164
|
+
const onCommitOrder = (event) => {
|
|
165
|
+
const { detail } = event;
|
|
166
|
+
const managerOrder = detail.sequenceManagers.find((item) => item.managerId === sequenceManagerId);
|
|
167
|
+
if (!managerOrder) {
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
if (commitRegistrationEnabled) {
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
const previousOrder = committedOrderIdsRef.current;
|
|
174
|
+
if (previousOrder === managerOrder.sequenceIds ||
|
|
175
|
+
(previousOrder !== null &&
|
|
176
|
+
previousOrder.length === managerOrder.sequenceIds.length &&
|
|
177
|
+
previousOrder.every((sequenceId, index) => sequenceId === managerOrder.sequenceIds[index]))) {
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
const order = new Map(managerOrder.sequenceIds.map((sequenceId, index) => [
|
|
181
|
+
sequenceId,
|
|
182
|
+
index,
|
|
183
|
+
]));
|
|
184
|
+
committedOrderIdsRef.current = managerOrder.sequenceIds;
|
|
185
|
+
committedOrderRef.current = order;
|
|
186
|
+
queueMicrotask(() => {
|
|
187
|
+
if (unmounted) {
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
setSequences((currentSequences) => {
|
|
191
|
+
let changed = false;
|
|
192
|
+
const nextSequences = currentSequences.map((sequence) => {
|
|
193
|
+
var _a;
|
|
194
|
+
const timelineOrder = (_a = order.get(sequence.id)) !== null && _a !== void 0 ? _a : null;
|
|
195
|
+
if (sequence.timelineOrder === timelineOrder) {
|
|
196
|
+
return sequence;
|
|
197
|
+
}
|
|
198
|
+
changed = true;
|
|
199
|
+
return { ...sequence, timelineOrder };
|
|
200
|
+
});
|
|
201
|
+
return changed ? nextSequences : currentSequences;
|
|
202
|
+
});
|
|
203
|
+
});
|
|
204
|
+
};
|
|
205
|
+
window.addEventListener(committed_metadata_js_1.COMMIT_ORDER_EVENT, onCommitOrder);
|
|
206
|
+
window.addEventListener(committed_metadata_js_1.COMMIT_REGISTRATION_ERROR_EVENT, onRegistrationError);
|
|
207
|
+
if (commitRegistrationEnabled) {
|
|
208
|
+
// React invokes its commit hook after layout effects. Installation alone
|
|
209
|
+
// does not prove this renderer connected to the hook during initialization.
|
|
210
|
+
queueMicrotask(() => {
|
|
211
|
+
if (unmounted ||
|
|
212
|
+
observedCommitRef.current ||
|
|
213
|
+
registrationObserverFailedRef.current) {
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
rootObservationFailedRef.current = true;
|
|
217
|
+
onCommitSequences(sequenceManagerId, [], []);
|
|
218
|
+
setCommitRegistrationEnabled(false);
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
return () => {
|
|
222
|
+
unmounted = true;
|
|
223
|
+
registrationUnmountedRef.current = true;
|
|
224
|
+
// Effect replay must not discard a snapshot already collected by React.
|
|
225
|
+
window.removeEventListener(committed_metadata_js_1.COMMIT_ORDER_EVENT, onCommitOrder);
|
|
226
|
+
window.removeEventListener(committed_metadata_js_1.COMMIT_REGISTRATION_ERROR_EVENT, onRegistrationError);
|
|
227
|
+
};
|
|
228
|
+
}, [
|
|
229
|
+
shouldObserveCommits,
|
|
230
|
+
sequenceManagerId,
|
|
231
|
+
setSequences,
|
|
232
|
+
commitRegistrationEnabled,
|
|
233
|
+
onCommitSequences,
|
|
234
|
+
]);
|
|
235
|
+
const registerSequence = (0, react_1.useCallback)((seq) => {
|
|
236
|
+
setSequences((seqs) => {
|
|
237
|
+
var _a;
|
|
238
|
+
var _b;
|
|
239
|
+
return [
|
|
240
|
+
...seqs,
|
|
241
|
+
{
|
|
242
|
+
...seq,
|
|
243
|
+
timelineOrder: (_b = (_a = committedOrderRef.current) === null || _a === void 0 ? void 0 : _a.get(seq.id)) !== null && _b !== void 0 ? _b : null,
|
|
244
|
+
},
|
|
245
|
+
];
|
|
246
|
+
});
|
|
247
|
+
}, [setSequences]);
|
|
248
|
+
const updateSequence = (0, react_1.useCallback)((seq) => {
|
|
249
|
+
setSequences((seqs) => {
|
|
250
|
+
var _a;
|
|
251
|
+
var _b;
|
|
252
|
+
const index = seqs.findIndex((item) => item.id === seq.id);
|
|
253
|
+
if (index === -1) {
|
|
254
|
+
return seqs;
|
|
255
|
+
}
|
|
256
|
+
const updatedSequence = {
|
|
257
|
+
...seq,
|
|
258
|
+
timelineOrder: (_b = (_a = committedOrderRef.current) === null || _a === void 0 ? void 0 : _a.get(seq.id)) !== null && _b !== void 0 ? _b : null,
|
|
259
|
+
};
|
|
260
|
+
if ((0, registry_store_js_1.areRegistryEntriesEqual)(seqs[index], updatedSequence)) {
|
|
261
|
+
return seqs;
|
|
262
|
+
}
|
|
263
|
+
const next = [...seqs];
|
|
264
|
+
next[index] = updatedSequence;
|
|
265
|
+
return next;
|
|
266
|
+
});
|
|
267
|
+
}, [setSequences]);
|
|
268
|
+
const unregisterSequence = (0, react_1.useCallback)((seq) => {
|
|
269
|
+
setSequences((seqs) => seqs.filter((s) => s.id !== seq));
|
|
270
|
+
}, [setSequences]);
|
|
271
|
+
const actions = (0, react_1.useMemo)(() => {
|
|
272
|
+
return {
|
|
273
|
+
registerSequence,
|
|
274
|
+
updateSequence,
|
|
275
|
+
unregisterSequence,
|
|
276
|
+
};
|
|
277
|
+
}, [registerSequence, unregisterSequence, updateSequence]);
|
|
278
|
+
const metadata = (0, react_1.useMemo)(() => shouldObserveCommits
|
|
279
|
+
? {
|
|
280
|
+
type: 'sequence-manager',
|
|
281
|
+
id: sequenceManagerId,
|
|
282
|
+
onCommit: commitRegistrationEnabled ? onCommitRootSequences : null,
|
|
283
|
+
}
|
|
284
|
+
: null, [
|
|
285
|
+
commitRegistrationEnabled,
|
|
286
|
+
onCommitRootSequences,
|
|
287
|
+
sequenceManagerId,
|
|
288
|
+
shouldObserveCommits,
|
|
289
|
+
]);
|
|
290
|
+
return (jsx_runtime_1.jsx(SequenceManagerRefProvider, { value: sequencesRef, _remotionCommitMetadata: metadata, children: jsx_runtime_1.jsx(sequence_registry_context_js_1.SequenceRegistryScopeContext.Provider, { value: registryScope, children: jsx_runtime_1.jsx(sequence_registry_context_js_1.SequenceManagerActionsContext.Provider, { value: actions, children: jsx_runtime_1.jsx(sequence_registry_context_js_1.SequenceRegistryContext.Provider, { value: registry, children: jsx_runtime_1.jsx(sequence_registry_context_js_1.SequenceCommitRegistrationContext.Provider, { value: commitRegistrationEnabled, children: children }) }) }) }) }));
|
|
291
|
+
};
|
|
292
|
+
exports.SequenceRegistryProvider = SequenceRegistryProvider;
|
package/dist/cjs/Track.d.ts
CHANGED
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { type SequenceProps } from './Sequence.js';
|
|
3
|
-
export type TrackProps =
|
|
4
|
-
export
|
|
2
|
+
import { type AbsoluteFillLayout, type SequenceProps } from './Sequence.js';
|
|
3
|
+
export type TrackProps = Omit<SequenceProps, keyof AbsoluteFillLayout | 'cropLeft' | 'cropRight' | 'cropTop' | 'cropBottom' | `_remotionInternal${string}` | 'outlineRef'>;
|
|
4
|
+
export type TrackWithoutSchemaProps = Omit<SequenceProps, keyof AbsoluteFillLayout> & ((AbsoluteFillLayout & {
|
|
5
|
+
layout: 'absolute-fill';
|
|
6
|
+
}) | ({
|
|
7
|
+
layout?: 'none';
|
|
8
|
+
} & {
|
|
9
|
+
[Key in Exclude<keyof AbsoluteFillLayout, 'layout'>]?: never;
|
|
10
|
+
}));
|
|
11
|
+
export declare const TrackWithoutSchema: React.FC<TrackWithoutSchemaProps>;
|
|
5
12
|
/** Groups clips on one Studio timeline row and applies Sequence timing. */
|
|
6
13
|
export declare const Track: React.ComponentType<TrackProps>;
|