@remotion/studio 4.0.492 → 4.0.494
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ResolveCompositionConfigInStudio.js +16 -6
- package/dist/components/Canvas.js +3 -0
- package/dist/components/CompositionSelector.js +1 -1
- package/dist/components/CompositionSelectorItem.js +1 -1
- package/dist/components/CurrentComposition.d.ts +1 -1
- package/dist/components/CurrentComposition.js +3 -4
- package/dist/components/InitialCompositionLoader.d.ts +1 -1
- package/dist/components/InitialCompositionLoader.js +6 -1
- package/dist/components/InspectorInfoHeader.d.ts +1 -0
- package/dist/components/InspectorInfoHeader.js +7 -2
- package/dist/components/InspectorPanel/CompositionDimensions.d.ts +6 -0
- package/dist/components/InspectorPanel/CompositionDimensions.js +173 -0
- package/dist/components/InspectorPanel/ConnectedCompositionsSection.d.ts +9 -0
- package/dist/components/InspectorPanel/ConnectedCompositionsSection.js +32 -0
- package/dist/components/InspectorPanel/DefaultInspector.js +6 -3
- package/dist/components/InspectorPanel/EasingInspector.js +3 -3
- package/dist/components/InspectorPanel/KeyframeInspector.js +6 -4
- package/dist/components/InspectorPanel/KeyframeSettings.js +1 -1
- package/dist/components/InspectorPanel/SequenceInspectorHeader.d.ts +1 -1
- package/dist/components/InspectorPanel/SequenceInspectorHeader.js +9 -6
- package/dist/components/InspectorPanel/SequenceSelectionInspector.js +5 -2
- package/dist/components/InspectorPanel/common.d.ts +2 -1
- package/dist/components/InspectorPanel/common.js +11 -7
- package/dist/components/InspectorPanel/optimistic-composition-metadata.d.ts +22 -0
- package/dist/components/InspectorPanel/optimistic-composition-metadata.js +41 -0
- package/dist/components/InspectorPanel/styles.d.ts +2 -0
- package/dist/components/InspectorPanel/styles.js +7 -2
- package/dist/components/InspectorSequenceSection.js +2 -5
- package/dist/components/SelectedOutlineElement.js +21 -2
- package/dist/components/SelectedOutlineOverlay.d.ts +1 -1
- package/dist/components/SelectedOutlineOverlay.js +4 -3
- package/dist/components/Timeline/Timeline.js +9 -1
- package/dist/components/Timeline/TimelineClipboardKeybindings.js +136 -1
- package/dist/components/Timeline/TimelineDeleteKeybindings.js +2 -0
- package/dist/components/Timeline/TimelineKeyframeControls.js +1 -0
- package/dist/components/Timeline/TimelineList.js +2 -1
- package/dist/components/Timeline/TimelinePrimitiveFieldValue.js +1 -3
- package/dist/components/Timeline/TimelineSelection.js +19 -5
- package/dist/components/Timeline/TimelineSequence.d.ts +1 -0
- package/dist/components/Timeline/TimelineSequence.js +42 -6
- package/dist/components/Timeline/TimelineSequenceItem.d.ts +2 -1
- package/dist/components/Timeline/TimelineSequenceItem.js +43 -8
- package/dist/components/Timeline/TimelineSequenceName.js +4 -0
- package/dist/components/Timeline/TimelineTrack.js +2 -1
- package/dist/components/Timeline/call-delete-keyframe.d.ts +1 -0
- package/dist/components/Timeline/call-delete-keyframe.js +4 -0
- package/dist/components/Timeline/delete-selected-keyframe.d.ts +4 -2
- package/dist/components/Timeline/delete-selected-keyframe.js +48 -5
- package/dist/components/Timeline/delete-selected-timeline-item.d.ts +3 -1
- package/dist/components/Timeline/delete-selected-timeline-item.js +3 -1
- package/dist/components/Timeline/keyframe-clipboard.d.ts +34 -0
- package/dist/components/Timeline/keyframe-clipboard.js +278 -0
- package/dist/components/Timeline/timeline-field-display-utils.js +2 -1
- package/dist/components/Timeline/update-selected-easing.d.ts +1 -1
- package/dist/components/Timeline/update-selected-easing.js +4 -5
- package/dist/components/Timeline/use-expanded-track-keyframe-rows.js +3 -4
- package/dist/components/import-assets.d.ts +25 -3
- package/dist/components/import-assets.js +54 -15
- package/dist/components/selected-outline-measurement.d.ts +2 -5
- package/dist/components/selected-outline-measurement.js +3 -4
- package/dist/esm/{chunk-ewx0568t.js → chunk-tdncqycp.js} +5397 -4402
- package/dist/esm/internals.mjs +5397 -4402
- package/dist/esm/previewEntry.mjs +5987 -4996
- package/dist/esm/renderEntry.mjs +1 -1
- package/dist/helpers/calculate-timeline.d.ts +2 -1
- package/dist/helpers/calculate-timeline.js +36 -5
- package/dist/{components/InspectorPanel/get-compositions-matching-single-child.d.ts → helpers/get-connected-compositions.d.ts} +1 -1
- package/dist/{components/InspectorPanel/get-compositions-matching-single-child.js → helpers/get-connected-compositions.js} +3 -3
- package/dist/helpers/get-sequence-double-click-action.d.ts +12 -0
- package/dist/helpers/get-sequence-double-click-action.js +22 -0
- package/dist/helpers/get-timeline-sequence-sort-key.d.ts +2 -1
- package/dist/helpers/inject-css.js +0 -2
- package/package.json +11 -11
- package/dist/components/InspectorPanel/SequenceCompositionsSection.d.ts +0 -5
- package/dist/components/InspectorPanel/SequenceCompositionsSection.js +0 -37
package/dist/esm/renderEntry.mjs
CHANGED
|
@@ -212,7 +212,7 @@ var renderContent = (Root) => {
|
|
|
212
212
|
renderToDOM(/* @__PURE__ */ jsx("div", {
|
|
213
213
|
children: /* @__PURE__ */ jsx(DelayedSpinner, {})
|
|
214
214
|
}));
|
|
215
|
-
import("./chunk-
|
|
215
|
+
import("./chunk-tdncqycp.js").then(({ StudioInternals }) => {
|
|
216
216
|
window.remotion_isStudio = true;
|
|
217
217
|
window.remotion_isReadOnlyStudio = true;
|
|
218
218
|
window.remotion_inputProps = "{}";
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { OverrideIdToNodePaths, TSequence } from 'remotion';
|
|
2
2
|
import type { TrackWithHash } from './get-timeline-sequence-sort-key';
|
|
3
|
-
export declare const calculateTimeline: ({ sequences, overrideIdsToNodePaths, }: {
|
|
3
|
+
export declare const calculateTimeline: ({ sequences, overrideIdsToNodePaths, compositions, }: {
|
|
4
4
|
sequences: TSequence[];
|
|
5
5
|
overrideIdsToNodePaths: OverrideIdToNodePaths;
|
|
6
|
+
compositions?: readonly import("remotion").AnyComposition[] | undefined;
|
|
6
7
|
}) => TrackWithHash[];
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.calculateTimeline = void 0;
|
|
4
4
|
const studio_shared_1 = require("@remotion/studio-shared");
|
|
5
|
+
const get_connected_compositions_1 = require("./get-connected-compositions");
|
|
5
6
|
const get_sequence_visible_range_1 = require("./get-sequence-visible-range");
|
|
6
7
|
const get_timeline_nestedness_1 = require("./get-timeline-nestedness");
|
|
7
8
|
const get_timeline_sequence_hash_1 = require("./get-timeline-sequence-hash");
|
|
@@ -20,19 +21,42 @@ const getInheritedLoopDisplay = (sequence, sequences) => {
|
|
|
20
21
|
}
|
|
21
22
|
return getInheritedLoopDisplay(parent, sequences);
|
|
22
23
|
};
|
|
23
|
-
const calculateTimeline = ({ sequences, overrideIdsToNodePaths, }) => {
|
|
24
|
+
const calculateTimeline = ({ sequences, overrideIdsToNodePaths, compositions = [], }) => {
|
|
24
25
|
var _a, _b;
|
|
25
|
-
var _c;
|
|
26
|
+
var _c, _d;
|
|
26
27
|
const sortedSequences = (0, sort_by_nonce_history_1.sortItemsByNonceHistory)(sequences);
|
|
27
28
|
const tracks = [];
|
|
28
29
|
if (sortedSequences.length === 0) {
|
|
29
30
|
return [];
|
|
30
31
|
}
|
|
32
|
+
const connectedCompositionsBySequenceId = new Map();
|
|
33
|
+
for (const sequence of sortedSequences) {
|
|
34
|
+
const connectedCompositions = (0, get_connected_compositions_1.getConnectedCompositions)({
|
|
35
|
+
compositions,
|
|
36
|
+
singleChildComponent: sequence.singleChildComponent,
|
|
37
|
+
});
|
|
38
|
+
if (connectedCompositions.length > 0) {
|
|
39
|
+
connectedCompositionsBySequenceId.set(sequence.id, connectedCompositions);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
const sequencesById = new Map(sortedSequences.map((sequence) => [sequence.id, sequence]));
|
|
43
|
+
const timelineSequences = sortedSequences.filter((sequence) => {
|
|
44
|
+
var _a;
|
|
45
|
+
var _b;
|
|
46
|
+
let parentId = sequence.parent;
|
|
47
|
+
while (parentId !== null) {
|
|
48
|
+
if (connectedCompositionsBySequenceId.has(parentId)) {
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
parentId = (_b = (_a = sequencesById.get(parentId)) === null || _a === void 0 ? void 0 : _a.parent) !== null && _b !== void 0 ? _b : null;
|
|
52
|
+
}
|
|
53
|
+
return true;
|
|
54
|
+
});
|
|
31
55
|
const sameHashes = {};
|
|
32
56
|
const hashesUsedInRoot = {};
|
|
33
57
|
const cache = {};
|
|
34
|
-
for (let i = 0; i <
|
|
35
|
-
const sequence =
|
|
58
|
+
for (let i = 0; i < timelineSequences.length; i++) {
|
|
59
|
+
const sequence = timelineSequences[i];
|
|
36
60
|
if (!hashesUsedInRoot[sequence.rootId]) {
|
|
37
61
|
hashesUsedInRoot[sequence.rootId] = [];
|
|
38
62
|
}
|
|
@@ -51,7 +75,9 @@ const calculateTimeline = ({ sequences, overrideIdsToNodePaths, }) => {
|
|
|
51
75
|
const overrideId = (_c = (_a = sequence.controls) === null || _a === void 0 ? void 0 : _a.overrideId) !== null && _c !== void 0 ? _c : null;
|
|
52
76
|
const nodePath = overrideId ? overrideIdsToNodePaths[overrideId] : null;
|
|
53
77
|
const hasKeyframeRows = sequence.controls !== null || sequence.effects.length > 0;
|
|
78
|
+
const connectedCompositions = (_d = connectedCompositionsBySequenceId.get(sequence.id)) !== null && _d !== void 0 ? _d : [];
|
|
54
79
|
tracks.push({
|
|
80
|
+
...(connectedCompositions.length > 0 ? { connectedCompositions } : {}),
|
|
55
81
|
sequence: {
|
|
56
82
|
...sequence,
|
|
57
83
|
from: visibleStart,
|
|
@@ -81,10 +107,15 @@ const calculateTimeline = ({ sequences, overrideIdsToNodePaths, }) => {
|
|
|
81
107
|
}
|
|
82
108
|
const uniqueTracks = [];
|
|
83
109
|
for (const track of tracks) {
|
|
84
|
-
|
|
110
|
+
const existingTrack = uniqueTracks.find((t) => t.hash === track.hash);
|
|
111
|
+
if (!existingTrack) {
|
|
85
112
|
const { cascadedDuration, cascadedStart, ...cleanTrack } = track;
|
|
86
113
|
uniqueTracks.push(cleanTrack);
|
|
87
114
|
}
|
|
115
|
+
else if (existingTrack.connectedCompositions === undefined &&
|
|
116
|
+
track.connectedCompositions !== undefined) {
|
|
117
|
+
existingTrack.connectedCompositions = track.connectedCompositions;
|
|
118
|
+
}
|
|
88
119
|
}
|
|
89
120
|
const nonceRanks = new Map();
|
|
90
121
|
for (let i = 0; i < tracks.length; i++) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare const
|
|
1
|
+
export declare const getConnectedCompositions: <Composition extends {
|
|
2
2
|
readonly componentFromProps?: unknown;
|
|
3
3
|
}>({ compositions, singleChildComponent, }: {
|
|
4
4
|
readonly compositions: readonly Composition[];
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
const
|
|
3
|
+
exports.getConnectedCompositions = void 0;
|
|
4
|
+
const getConnectedCompositions = ({ compositions, singleChildComponent, }) => {
|
|
5
5
|
if (singleChildComponent === null ||
|
|
6
6
|
typeof singleChildComponent === 'undefined') {
|
|
7
7
|
return [];
|
|
8
8
|
}
|
|
9
9
|
return compositions.filter((composition) => composition.componentFromProps === singleChildComponent);
|
|
10
10
|
};
|
|
11
|
-
exports.
|
|
11
|
+
exports.getConnectedCompositions = getConnectedCompositions;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { TSequence } from 'remotion';
|
|
2
|
+
export type SequenceDoubleClickAction = 'open-connected-composition' | 'open-in-editor';
|
|
3
|
+
export declare const getSequenceDoubleClickAction: ({ button, canOpenInEditor, numberOfConnectedCompositions, }: {
|
|
4
|
+
readonly button: number;
|
|
5
|
+
readonly canOpenInEditor: boolean;
|
|
6
|
+
readonly numberOfConnectedCompositions: number;
|
|
7
|
+
}) => SequenceDoubleClickAction | null;
|
|
8
|
+
export declare const getConnectedCompositionFrame: ({ timelinePosition, sequence, sequenceFrameOffset, }: {
|
|
9
|
+
readonly timelinePosition: number;
|
|
10
|
+
readonly sequence: TSequence;
|
|
11
|
+
readonly sequenceFrameOffset: number;
|
|
12
|
+
}) => number | null;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getConnectedCompositionFrame = exports.getSequenceDoubleClickAction = void 0;
|
|
4
|
+
const getSequenceDoubleClickAction = ({ button, canOpenInEditor, numberOfConnectedCompositions, }) => {
|
|
5
|
+
if (button !== 0) {
|
|
6
|
+
return null;
|
|
7
|
+
}
|
|
8
|
+
if (numberOfConnectedCompositions === 1) {
|
|
9
|
+
return 'open-connected-composition';
|
|
10
|
+
}
|
|
11
|
+
return canOpenInEditor ? 'open-in-editor' : null;
|
|
12
|
+
};
|
|
13
|
+
exports.getSequenceDoubleClickAction = getSequenceDoubleClickAction;
|
|
14
|
+
const getConnectedCompositionFrame = ({ timelinePosition, sequence, sequenceFrameOffset, }) => {
|
|
15
|
+
var _a;
|
|
16
|
+
const relativeFrame = timelinePosition - sequence.from;
|
|
17
|
+
if (relativeFrame < 0 || relativeFrame >= sequence.duration) {
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
return (_a = sequence.frozenFrame) !== null && _a !== void 0 ? _a : relativeFrame + sequenceFrameOffset;
|
|
21
|
+
};
|
|
22
|
+
exports.getConnectedCompositionFrame = getConnectedCompositionFrame;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { SequencePropsSubscriptionKey, TSequence } from 'remotion';
|
|
1
|
+
import type { _InternalTypes, SequencePropsSubscriptionKey, TSequence } from 'remotion';
|
|
2
2
|
export type SequenceNodePathInfo = {
|
|
3
3
|
sequenceSubscriptionKey: SequencePropsSubscriptionKey;
|
|
4
4
|
auxiliaryKeys: string[];
|
|
@@ -8,6 +8,7 @@ export type SequenceNodePathInfo = {
|
|
|
8
8
|
};
|
|
9
9
|
type Track = {
|
|
10
10
|
sequence: TSequence;
|
|
11
|
+
connectedCompositions?: readonly _InternalTypes['AnyComposition'][];
|
|
11
12
|
depth: number;
|
|
12
13
|
nodePathInfo: SequenceNodePathInfo | null;
|
|
13
14
|
keyframeDisplayOffset: number;
|
|
@@ -14,12 +14,10 @@ const makeDefaultGlobalCSS = () => {
|
|
|
14
14
|
--remotion-cli-internals-blue: ${colors_1.BLUE};
|
|
15
15
|
--remotion-cli-internals-blue-hovered: ${colors_1.BLUE_HOVERED};
|
|
16
16
|
overscroll-behavior-y: none;
|
|
17
|
-
overscroll-behavior-x: none;
|
|
18
17
|
}
|
|
19
18
|
|
|
20
19
|
body {
|
|
21
20
|
overscroll-behavior-y: none;
|
|
22
|
-
overscroll-behavior-x: none;
|
|
23
21
|
/* Override Chakra UI position: relative on body */
|
|
24
22
|
position: static !important;
|
|
25
23
|
}
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"url": "https://github.com/remotion-dev/remotion/tree/main/packages/studio"
|
|
4
4
|
},
|
|
5
5
|
"name": "@remotion/studio",
|
|
6
|
-
"version": "4.0.
|
|
6
|
+
"version": "4.0.494",
|
|
7
7
|
"description": "APIs for interacting with the Remotion Studio",
|
|
8
8
|
"main": "dist",
|
|
9
9
|
"scripts": {
|
|
@@ -25,15 +25,15 @@
|
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
27
|
"semver": "7.5.3",
|
|
28
|
-
"remotion": "4.0.
|
|
29
|
-
"@remotion/canvas-capture": "4.0.
|
|
30
|
-
"@remotion/player": "4.0.
|
|
31
|
-
"@remotion/media-utils": "4.0.
|
|
32
|
-
"@remotion/renderer": "4.0.
|
|
33
|
-
"@remotion/web-renderer": "4.0.
|
|
34
|
-
"@remotion/studio-shared": "4.0.
|
|
35
|
-
"@remotion/timeline-utils": "4.0.
|
|
36
|
-
"@remotion/zod-types": "4.0.
|
|
28
|
+
"remotion": "4.0.494",
|
|
29
|
+
"@remotion/canvas-capture": "4.0.494",
|
|
30
|
+
"@remotion/player": "4.0.494",
|
|
31
|
+
"@remotion/media-utils": "4.0.494",
|
|
32
|
+
"@remotion/renderer": "4.0.494",
|
|
33
|
+
"@remotion/web-renderer": "4.0.494",
|
|
34
|
+
"@remotion/studio-shared": "4.0.494",
|
|
35
|
+
"@remotion/timeline-utils": "4.0.494",
|
|
36
|
+
"@remotion/zod-types": "4.0.494",
|
|
37
37
|
"@jridgewell/trace-mapping": "0.3.31",
|
|
38
38
|
"mediabunny": "1.50.8",
|
|
39
39
|
"memfs": "3.4.3",
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
"react": "19.2.3",
|
|
45
45
|
"react-dom": "19.2.3",
|
|
46
46
|
"@types/semver": "7.5.3",
|
|
47
|
-
"@remotion/eslint-config-internal": "4.0.
|
|
47
|
+
"@remotion/eslint-config-internal": "4.0.494",
|
|
48
48
|
"eslint": "9.19.0",
|
|
49
49
|
"@typescript/native-preview": "7.0.0-dev.20260217.1"
|
|
50
50
|
},
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.SequenceCompositionsSection = void 0;
|
|
4
|
-
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
-
const react_1 = require("react");
|
|
6
|
-
const remotion_1 = require("remotion");
|
|
7
|
-
const CompositionOrStillIcon_1 = require("../CompositionOrStillIcon");
|
|
8
|
-
const InitialCompositionLoader_1 = require("../InitialCompositionLoader");
|
|
9
|
-
const common_1 = require("./common");
|
|
10
|
-
const get_compositions_matching_single_child_1 = require("./get-compositions-matching-single-child");
|
|
11
|
-
const styles_1 = require("./styles");
|
|
12
|
-
const compositionIconStyle = {
|
|
13
|
-
height: 13,
|
|
14
|
-
width: 13,
|
|
15
|
-
};
|
|
16
|
-
const compositionListStyle = {
|
|
17
|
-
...styles_1.detailsContainer,
|
|
18
|
-
display: 'flex',
|
|
19
|
-
flexDirection: 'column',
|
|
20
|
-
paddingBottom: 6,
|
|
21
|
-
paddingTop: 6,
|
|
22
|
-
};
|
|
23
|
-
const SequenceCompositionsSection = ({ track }) => {
|
|
24
|
-
const { compositions } = (0, react_1.useContext)(remotion_1.Internals.CompositionManager);
|
|
25
|
-
const selectComposition = (0, InitialCompositionLoader_1.useSelectComposition)();
|
|
26
|
-
const matchingCompositions = (0, react_1.useMemo)(() => (0, get_compositions_matching_single_child_1.getCompositionsMatchingSingleChild)({
|
|
27
|
-
compositions,
|
|
28
|
-
singleChildComponent: track.sequence.singleChildComponent,
|
|
29
|
-
}), [compositions, track.sequence.singleChildComponent]);
|
|
30
|
-
if (matchingCompositions.length === 0) {
|
|
31
|
-
return null;
|
|
32
|
-
}
|
|
33
|
-
return (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
|
|
34
|
-
jsx_runtime_1.jsx("div", { style: styles_1.inspectorSectionDivider }), jsx_runtime_1.jsx("div", { style: compositionListStyle, children: matchingCompositions.map((composition) => (jsx_runtime_1.jsx(common_1.InspectorInlineAction, { disabled: false, onClick: () => selectComposition(composition, true), renderIcon: (color) => (jsx_runtime_1.jsx(CompositionOrStillIcon_1.CompositionOrStillIcon, { color: color, composition: composition, style: compositionIconStyle })), children: composition.id }, composition.id))) })
|
|
35
|
-
] }));
|
|
36
|
-
};
|
|
37
|
-
exports.SequenceCompositionsSection = SequenceCompositionsSection;
|