@remotion/studio 4.0.494 → 4.0.495
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/api/get-static-files.d.ts +1 -1
- package/dist/components/AssetFileIcon.d.ts +7 -0
- package/dist/components/AssetFileIcon.js +24 -0
- package/dist/components/AssetSelectorItem.js +13 -7
- package/dist/components/Canvas.js +191 -36
- package/dist/components/CompositionSelectorItem.js +15 -8
- package/dist/components/CurrentAsset.d.ts +1 -0
- package/dist/components/CurrentAsset.js +17 -1
- package/dist/components/Editor.js +2 -4
- package/dist/components/InspectorPanel/AssetInspector.d.ts +4 -0
- package/dist/components/InspectorPanel/AssetInspector.js +11 -0
- package/dist/components/InspectorPanel/{DefaultInspector.d.ts → CompositionInspector.d.ts} +2 -2
- package/dist/components/InspectorPanel/CompositionInspector.js +114 -0
- package/dist/components/InspectorPanel/CompositionInspectorHeader.d.ts +1 -0
- package/dist/components/{CurrentComposition.js → InspectorPanel/CompositionInspectorHeader.js} +16 -16
- package/dist/components/InspectorPanel/{CompositionDimensions.d.ts → CompositionMetadata.d.ts} +1 -1
- package/dist/components/InspectorPanel/{CompositionDimensions.js → CompositionMetadata.js} +17 -8
- package/dist/components/InspectorPanel/ConnectedCompositionsSection.js +2 -2
- package/dist/components/InspectorPanel/EasingInspector.js +3 -5
- package/dist/components/InspectorPanel/KeyframeInspector.js +2 -2
- package/dist/components/InspectorPanel/SequenceSelectionInspector.js +34 -1
- package/dist/components/InspectorPanel/common.d.ts +8 -0
- package/dist/components/InspectorPanel/common.js +31 -8
- package/dist/components/InspectorPanel/styles.d.ts +5 -3
- package/dist/components/InspectorPanel/styles.js +13 -4
- package/dist/components/InspectorPanel/use-composition-actions.d.ts +8 -0
- package/dist/components/InspectorPanel/use-composition-actions.js +114 -0
- package/dist/components/InspectorPanel.js +11 -2
- package/dist/components/InspectorSequenceSection.d.ts +0 -1
- package/dist/components/InspectorSequenceSection.js +9 -48
- package/dist/components/Modals.js +2 -1
- package/dist/components/NewComposition/InputDragger.d.ts +6 -0
- package/dist/components/NewComposition/InputDragger.js +26 -13
- package/dist/components/NewComposition/NewComposition.js +8 -1
- package/dist/components/NewComposition/ValidationMessage.d.ts +1 -1
- package/dist/components/Preview.js +15 -7
- package/dist/components/RenderModal/RenderModalOutputName.js +34 -1
- package/dist/components/SelectedOutlineOverlay.js +1 -0
- package/dist/components/SvgImportDialog.d.ts +7 -0
- package/dist/components/SvgImportDialog.js +103 -0
- package/dist/components/Timeline/Timeline.js +1 -0
- package/dist/components/Timeline/TimelineClipboardKeybindings.js +8 -1
- package/dist/components/Timeline/TimelineList.js +9 -4
- package/dist/components/Timeline/TimelineSequenceItem.d.ts +2 -1
- package/dist/components/Timeline/TimelineSequenceItem.js +19 -11
- package/dist/components/Timeline/nest-timeline-tracks.d.ts +8 -0
- package/dist/components/Timeline/nest-timeline-tracks.js +25 -0
- package/dist/components/Timeline/timeline-scroll-logic.d.ts +8 -4
- package/dist/components/Timeline/timeline-scroll-logic.js +29 -15
- package/dist/components/import-assets.d.ts +17 -1
- package/dist/components/import-assets.js +96 -11
- package/dist/components/layout.d.ts +1 -0
- package/dist/components/layout.js +2 -1
- package/dist/components/selected-outline-measurement.d.ts +2 -1
- package/dist/components/selected-outline-measurement.js +3 -1
- package/dist/esm/{chunk-tdncqycp.js → chunk-784jbkzs.js} +8428 -7246
- package/dist/esm/internals.mjs +8428 -7246
- package/dist/esm/previewEntry.mjs +8577 -7395
- package/dist/esm/renderEntry.mjs +1 -1
- package/dist/helpers/client-id.js +2 -1
- package/dist/helpers/clipboard-figma.d.ts +4 -0
- package/dist/helpers/clipboard-figma.js +41 -0
- package/dist/helpers/clipboard-images.d.ts +10 -0
- package/dist/helpers/clipboard-images.js +77 -0
- package/dist/helpers/clipboard-svg.d.ts +3 -0
- package/dist/helpers/clipboard-svg.js +47 -0
- package/dist/helpers/get-effective-translation.d.ts +2 -1
- package/dist/helpers/get-effective-translation.js +15 -7
- package/dist/helpers/get-preview-file-type.d.ts +1 -1
- package/dist/helpers/get-preview-file-type.js +5 -1
- package/dist/helpers/inject-css.js +9 -0
- package/dist/helpers/studio-fit-padding.d.ts +41 -0
- package/dist/helpers/studio-fit-padding.js +64 -0
- package/dist/helpers/use-image-metadata.d.ts +8 -0
- package/dist/helpers/use-image-metadata.js +82 -0
- package/dist/helpers/use-studio-canvas-dimensions.js +2 -2
- package/dist/icons/audio.d.ts +3 -0
- package/dist/icons/audio.js +3 -1
- package/dist/icons/font.d.ts +4 -0
- package/dist/icons/font.js +8 -0
- package/dist/icons/frame.d.ts +3 -1
- package/dist/icons/frame.js +1 -1
- package/dist/icons/json.d.ts +4 -0
- package/dist/icons/json.js +8 -0
- package/dist/icons/magnet.js +1 -1
- package/dist/icons/scissors.d.ts +5 -0
- package/dist/icons/scissors.js +8 -0
- package/dist/icons/solid.d.ts +5 -0
- package/dist/icons/solid.js +8 -0
- package/dist/icons/video.d.ts +3 -0
- package/dist/icons/video.js +5 -1
- package/dist/state/modals.d.ts +8 -1
- package/dist/state/timeline-zoom.js +12 -11
- package/package.json +11 -11
- package/dist/components/CurrentComposition.d.ts +0 -2
- package/dist/components/InspectorPanel/DefaultInspector.js +0 -97
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.keyframeEditorValue = exports.keyframeEditorLabel = exports.keyframeEditorRow = exports.detailValue = exports.detailLabel = exports.detailRow = exports.guideDetailsContainer = exports.detailsBeforeInlineAction = exports.detailsWithInlineAction = exports.detailsContainer = exports.centeredMessage = exports.selectedContainer = exports.resolveLinkStyle = exports.defaultPropsWarningMessages = exports.defaultPropsWarningContainer = exports.sectionHeaderEnd = exports.sectionHeaderStart = exports.sectionHeaderTitle = exports.sectionHeaderRow = exports.sequenceHeaderSubtitle = exports.sequenceHeaderTitle = exports.sequenceHeader = exports.sectionHeader = exports.sequenceHeaderDivider = exports.inspectorSectionDivider = exports.
|
|
3
|
+
exports.keyframeEditorValue = exports.keyframeEditorLabel = exports.keyframeEditorRow = exports.detailValue = exports.detailLabel = exports.detailRow = exports.guideDetailsContainer = exports.detailsBeforeInlineAction = exports.inspectorActionSection = exports.detailsWithInlineAction = exports.detailsContainer = exports.centeredMessage = exports.selectedContainer = exports.resolveLinkStyle = exports.defaultPropsWarningMessages = exports.defaultPropsWarningContainer = exports.sectionHeaderEnd = exports.sectionHeaderStart = exports.sectionHeaderTitle = exports.sectionHeaderRow = exports.sequenceHeaderSubtitle = exports.sequenceHeaderTitle = exports.sequenceHeader = exports.inspectorSectionBody = exports.sectionHeader = exports.sequenceHeaderDivider = exports.inspectorSectionDivider = exports.inspectorOverviewSection = exports.compositionVisualControlsSection = exports.compositionDefaultPropsSection = exports.scrollableContainer = exports.container = void 0;
|
|
4
4
|
const colors_1 = require("../../helpers/colors");
|
|
5
5
|
const InspectorPanelLayout_1 = require("../InspectorPanelLayout");
|
|
6
6
|
exports.container = {
|
|
@@ -16,15 +16,15 @@ exports.scrollableContainer = {
|
|
|
16
16
|
...exports.container,
|
|
17
17
|
overflowY: 'auto',
|
|
18
18
|
};
|
|
19
|
-
exports.
|
|
19
|
+
exports.compositionDefaultPropsSection = {
|
|
20
20
|
display: 'flex',
|
|
21
21
|
flexDirection: 'column',
|
|
22
22
|
};
|
|
23
|
-
exports.
|
|
23
|
+
exports.compositionVisualControlsSection = {
|
|
24
24
|
display: 'flex',
|
|
25
25
|
flexDirection: 'column',
|
|
26
26
|
};
|
|
27
|
-
exports.
|
|
27
|
+
exports.inspectorOverviewSection = {
|
|
28
28
|
display: 'flex',
|
|
29
29
|
flexDirection: 'column',
|
|
30
30
|
};
|
|
@@ -44,6 +44,12 @@ exports.sectionHeader = {
|
|
|
44
44
|
padding: `8px ${InspectorPanelLayout_1.INSPECTOR_PANEL_HORIZONTAL_PADDING}px`,
|
|
45
45
|
userSelect: 'none',
|
|
46
46
|
};
|
|
47
|
+
exports.inspectorSectionBody = {
|
|
48
|
+
display: 'flex',
|
|
49
|
+
flexDirection: 'column',
|
|
50
|
+
minWidth: 0,
|
|
51
|
+
paddingBottom: 8,
|
|
52
|
+
};
|
|
47
53
|
exports.sequenceHeader = {
|
|
48
54
|
backgroundColor: colors_1.BACKGROUND,
|
|
49
55
|
display: 'flex',
|
|
@@ -158,6 +164,9 @@ exports.detailsContainer = {
|
|
|
158
164
|
exports.detailsWithInlineAction = {
|
|
159
165
|
paddingBottom: InspectorPanelLayout_1.INSPECTOR_PANEL_HORIZONTAL_PADDING,
|
|
160
166
|
};
|
|
167
|
+
exports.inspectorActionSection = {
|
|
168
|
+
padding: '4px 0',
|
|
169
|
+
};
|
|
161
170
|
exports.detailsBeforeInlineAction = {
|
|
162
171
|
padding: `0 ${InspectorPanelLayout_1.INSPECTOR_PANEL_HORIZONTAL_PADDING}px`,
|
|
163
172
|
};
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.useCompositionActions = void 0;
|
|
4
|
+
const react_1 = require("react");
|
|
5
|
+
const remotion_1 = require("remotion");
|
|
6
|
+
const client_id_1 = require("../../helpers/client-id");
|
|
7
|
+
const interactivity_enabled_1 = require("../../helpers/interactivity-enabled");
|
|
8
|
+
const open_in_editor_1 = require("../../helpers/open-in-editor");
|
|
9
|
+
const call_api_1 = require("../call-api");
|
|
10
|
+
const import_assets_1 = require("../import-assets");
|
|
11
|
+
const NotificationCenter_1 = require("../Notifications/NotificationCenter");
|
|
12
|
+
const use_resolved_stack_1 = require("../Timeline/use-resolved-stack");
|
|
13
|
+
const useCompositionActions = () => {
|
|
14
|
+
var _a, _b;
|
|
15
|
+
const { compositions, canvasContent } = (0, react_1.useContext)(remotion_1.Internals.CompositionManager);
|
|
16
|
+
const videoConfig = remotion_1.Internals.useUnsafeVideoConfig();
|
|
17
|
+
const [isAddingSolid, setIsAddingSolid] = (0, react_1.useState)(false);
|
|
18
|
+
const [isAddingAsset, setIsAddingAsset] = (0, react_1.useState)(false);
|
|
19
|
+
const { previewServerState } = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx);
|
|
20
|
+
const previewConnected = previewServerState.type === 'connected';
|
|
21
|
+
const previewInteractive = previewConnected && interactivity_enabled_1.studioInteractivityEnabled;
|
|
22
|
+
const currentCompositionId = (canvasContent === null || canvasContent === void 0 ? void 0 : canvasContent.type) === 'composition' ? canvasContent.compositionId : null;
|
|
23
|
+
const currentComposition = (0, react_1.useMemo)(() => {
|
|
24
|
+
var _a;
|
|
25
|
+
if (currentCompositionId === null) {
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
return ((_a = compositions.find((composition) => composition.id === currentCompositionId)) !== null && _a !== void 0 ? _a : null);
|
|
29
|
+
}, [compositions, currentCompositionId]);
|
|
30
|
+
const resolvedCompositionLocation = (0, use_resolved_stack_1.useResolvedStack)((_a = currentComposition === null || currentComposition === void 0 ? void 0 : currentComposition.stack) !== null && _a !== void 0 ? _a : null);
|
|
31
|
+
const compositionFile = (_b = resolvedCompositionLocation === null || resolvedCompositionLocation === void 0 ? void 0 : resolvedCompositionLocation.source) !== null && _b !== void 0 ? _b : null;
|
|
32
|
+
const compositionComponentInfo = (0, open_in_editor_1.useCachedCompositionComponentInfo)({
|
|
33
|
+
compositionFile,
|
|
34
|
+
compositionId: currentCompositionId,
|
|
35
|
+
});
|
|
36
|
+
const canShowInsertSolid = previewInteractive &&
|
|
37
|
+
(compositionComponentInfo === null || compositionComponentInfo === void 0 ? void 0 : compositionComponentInfo.canAddSequence) === true &&
|
|
38
|
+
currentCompositionId !== null &&
|
|
39
|
+
compositionFile !== null &&
|
|
40
|
+
videoConfig !== null;
|
|
41
|
+
const canInsertSolid = canShowInsertSolid && !isAddingSolid;
|
|
42
|
+
const canShowInsertAsset = previewInteractive &&
|
|
43
|
+
!window.remotion_isReadOnlyStudio &&
|
|
44
|
+
(compositionComponentInfo === null || compositionComponentInfo === void 0 ? void 0 : compositionComponentInfo.canAddSequence) === true &&
|
|
45
|
+
currentCompositionId !== null &&
|
|
46
|
+
compositionFile !== null;
|
|
47
|
+
const canInsertAsset = canShowInsertAsset && !isAddingAsset;
|
|
48
|
+
const insertSolid = (0, react_1.useCallback)(async () => {
|
|
49
|
+
if (!canInsertSolid ||
|
|
50
|
+
currentCompositionId === null ||
|
|
51
|
+
compositionFile === null ||
|
|
52
|
+
videoConfig === null) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
setIsAddingSolid(true);
|
|
56
|
+
try {
|
|
57
|
+
const result = await (0, call_api_1.callApi)('/api/insert-jsx-element', {
|
|
58
|
+
compositionFile,
|
|
59
|
+
compositionId: currentCompositionId,
|
|
60
|
+
element: {
|
|
61
|
+
type: 'solid',
|
|
62
|
+
width: videoConfig.width,
|
|
63
|
+
height: videoConfig.height,
|
|
64
|
+
position: null,
|
|
65
|
+
},
|
|
66
|
+
});
|
|
67
|
+
if (result.success) {
|
|
68
|
+
(0, NotificationCenter_1.showNotification)('Added <Solid> to source file', 2000);
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
(0, NotificationCenter_1.showNotification)(result.reason, 4000);
|
|
72
|
+
}
|
|
73
|
+
catch (err) {
|
|
74
|
+
(0, NotificationCenter_1.showNotification)(err.message, 4000);
|
|
75
|
+
}
|
|
76
|
+
finally {
|
|
77
|
+
setIsAddingSolid(false);
|
|
78
|
+
}
|
|
79
|
+
}, [canInsertSolid, compositionFile, currentCompositionId, videoConfig]);
|
|
80
|
+
const insertAsset = (0, react_1.useCallback)(async () => {
|
|
81
|
+
if (!canInsertAsset ||
|
|
82
|
+
currentCompositionId === null ||
|
|
83
|
+
compositionFile === null) {
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
const files = await (0, import_assets_1.pickFilesToImport)();
|
|
87
|
+
if (files.length === 0) {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
setIsAddingAsset(true);
|
|
91
|
+
try {
|
|
92
|
+
await (0, import_assets_1.importAssets)({
|
|
93
|
+
files,
|
|
94
|
+
compositionFile,
|
|
95
|
+
compositionId: currentCompositionId,
|
|
96
|
+
destinationDimensions: null,
|
|
97
|
+
dropPosition: null,
|
|
98
|
+
svgImportMode: 'image',
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
finally {
|
|
102
|
+
setIsAddingAsset(false);
|
|
103
|
+
}
|
|
104
|
+
}, [canInsertAsset, compositionFile, currentCompositionId]);
|
|
105
|
+
return {
|
|
106
|
+
canInsertAsset,
|
|
107
|
+
canInsertSolid,
|
|
108
|
+
canShowInsertAsset,
|
|
109
|
+
canShowInsertSolid,
|
|
110
|
+
insertAsset,
|
|
111
|
+
insertSolid,
|
|
112
|
+
};
|
|
113
|
+
};
|
|
114
|
+
exports.useCompositionActions = useCompositionActions;
|
|
@@ -3,17 +3,26 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.InspectorPanel = void 0;
|
|
4
4
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
5
|
const react_1 = require("react");
|
|
6
|
+
const remotion_1 = require("remotion");
|
|
7
|
+
const AssetInspector_1 = require("./InspectorPanel/AssetInspector");
|
|
6
8
|
const common_1 = require("./InspectorPanel/common");
|
|
7
|
-
const
|
|
9
|
+
const CompositionInspector_1 = require("./InspectorPanel/CompositionInspector");
|
|
8
10
|
const inspector_selection_1 = require("./InspectorPanel/inspector-selection");
|
|
9
11
|
const SelectedInspector_1 = require("./InspectorPanel/SelectedInspector");
|
|
10
12
|
const styles_1 = require("./InspectorPanel/styles");
|
|
11
13
|
const TimelineSelection_1 = require("./Timeline/TimelineSelection");
|
|
12
14
|
const InspectorPanel = ({ composition, currentDefaultProps, readOnlyStudio, setDefaultProps }) => {
|
|
15
|
+
const { canvasContent } = (0, react_1.useContext)(remotion_1.Internals.CompositionManager);
|
|
13
16
|
const { selectedItems } = (0, TimelineSelection_1.useTimelineSelection)();
|
|
14
17
|
const sameSequenceInspectorSelection = (0, react_1.useMemo)(() => (0, inspector_selection_1.getSameSequenceInspectorSelection)(selectedItems), [selectedItems]);
|
|
15
18
|
if (selectedItems.length === 0) {
|
|
16
|
-
|
|
19
|
+
if ((canvasContent === null || canvasContent === void 0 ? void 0 : canvasContent.type) === 'asset') {
|
|
20
|
+
return jsx_runtime_1.jsx(AssetInspector_1.AssetInspector, { readOnlyStudio: readOnlyStudio });
|
|
21
|
+
}
|
|
22
|
+
if (composition === null) {
|
|
23
|
+
return jsx_runtime_1.jsx("div", { style: styles_1.container });
|
|
24
|
+
}
|
|
25
|
+
return (jsx_runtime_1.jsx(CompositionInspector_1.CompositionInspector, { composition: composition, currentDefaultProps: currentDefaultProps, readOnlyStudio: readOnlyStudio, setDefaultProps: setDefaultProps }));
|
|
17
26
|
}
|
|
18
27
|
if (selectedItems.length > 1) {
|
|
19
28
|
if (sameSequenceInspectorSelection) {
|
|
@@ -14,7 +14,6 @@ export declare const InspectorSequenceSection: React.FC<{
|
|
|
14
14
|
readonly validatedLocation: CodePosition;
|
|
15
15
|
readonly nodePathInfo: SequenceNodePathInfo;
|
|
16
16
|
readonly keyframeDisplayOffset: number;
|
|
17
|
-
readonly renderSectionHeader: (children: React.ReactNode) => React.ReactNode;
|
|
18
17
|
readonly renderTransformControls: () => React.ReactNode;
|
|
19
18
|
}>;
|
|
20
19
|
export {};
|
|
@@ -1,41 +1,8 @@
|
|
|
1
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
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
3
|
exports.InspectorSequenceSection = exports.hasSequenceControls = exports.getInspectorSelectableItems = void 0;
|
|
37
4
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
38
|
-
const react_1 =
|
|
5
|
+
const react_1 = require("react");
|
|
39
6
|
const client_id_1 = require("../helpers/client-id");
|
|
40
7
|
const colors_1 = require("../helpers/colors");
|
|
41
8
|
const timeline_layout_1 = require("../helpers/timeline-layout");
|
|
@@ -43,6 +10,7 @@ const plus_1 = require("../icons/plus");
|
|
|
43
10
|
const modals_1 = require("../state/modals");
|
|
44
11
|
const CurrentAsset_1 = require("./CurrentAsset");
|
|
45
12
|
const InlineAction_1 = require("./InlineAction");
|
|
13
|
+
const common_1 = require("./InspectorPanel/common");
|
|
46
14
|
const styles_1 = require("./InspectorPanel/styles");
|
|
47
15
|
const InspectorPanelLayout_1 = require("./InspectorPanelLayout");
|
|
48
16
|
const timeline_asset_link_1 = require("./Timeline/timeline-asset-link");
|
|
@@ -63,11 +31,7 @@ const emptyState = {
|
|
|
63
31
|
fontFamily: 'sans-serif',
|
|
64
32
|
fontSize: 12,
|
|
65
33
|
lineHeight: 1.4,
|
|
66
|
-
padding: '0 12px
|
|
67
|
-
};
|
|
68
|
-
const controlsEffectsDivider = {
|
|
69
|
-
...styles_1.sequenceHeaderDivider,
|
|
70
|
-
margin: '8px 0 4px',
|
|
34
|
+
padding: '0 12px',
|
|
71
35
|
};
|
|
72
36
|
const effectsHeaderTitle = {
|
|
73
37
|
...styles_1.sectionHeaderTitle,
|
|
@@ -170,7 +134,7 @@ const hasSequenceControls = (sequence) => {
|
|
|
170
134
|
return sequence.controls !== null;
|
|
171
135
|
};
|
|
172
136
|
exports.hasSequenceControls = hasSequenceControls;
|
|
173
|
-
const InspectorSequenceSection = ({ sequence, validatedLocation, nodePathInfo, keyframeDisplayOffset,
|
|
137
|
+
const InspectorSequenceSection = ({ sequence, validatedLocation, nodePathInfo, keyframeDisplayOffset, renderTransformControls, }) => {
|
|
174
138
|
const { tree } = (0, use_timeline_expanded_tree_1.useTimelineExpandedTree)({
|
|
175
139
|
sequence,
|
|
176
140
|
nodePathInfo,
|
|
@@ -240,7 +204,6 @@ const InspectorSequenceSection = ({ sequence, validatedLocation, nodePathInfo, k
|
|
|
240
204
|
const controlGroups = (0, react_1.useMemo)(() => getInspectorControlGroups(controlRows), [controlRows]);
|
|
241
205
|
const { schema } = sequence.controls;
|
|
242
206
|
const showEffectsSection = nodePathInfo.supportsEffects || effectRows.length > 0;
|
|
243
|
-
const showControlsEffectsDivider = controlRows.length > 0 && showEffectsSection;
|
|
244
207
|
const canAddEffect = nodePathInfo.supportsEffects &&
|
|
245
208
|
previewServerState.type === 'connected' &&
|
|
246
209
|
Boolean(validatedLocation.source);
|
|
@@ -261,18 +224,16 @@ const InspectorSequenceSection = ({ sequence, validatedLocation, nodePathInfo, k
|
|
|
261
224
|
setSelectedModal,
|
|
262
225
|
validatedLocation.source,
|
|
263
226
|
]);
|
|
264
|
-
const
|
|
265
|
-
|
|
266
|
-
jsx_runtime_1.jsx("div", { style: effectsHeaderTitle, children: "Effects" }), jsx_runtime_1.jsx(InlineAction_1.InlineAction, { disabled: !canAddEffect, onClick: onAddEffect, title: canAddEffect ? 'Add effect' : undefined, renderAction: (color) => jsx_runtime_1.jsx(plus_1.Plus, { color: color, style: plusIcon }) })] }));
|
|
267
|
-
};
|
|
227
|
+
const effectsHeader = (jsx_runtime_1.jsxs("div", { style: styles_1.sectionHeaderRow, children: [
|
|
228
|
+
jsx_runtime_1.jsx("div", { style: effectsHeaderTitle, children: "Effects" }), jsx_runtime_1.jsx(InlineAction_1.InlineAction, { disabled: !canAddEffect, onClick: onAddEffect, title: canAddEffect ? 'Add effect' : undefined, renderAction: (color) => jsx_runtime_1.jsx(plus_1.Plus, { color: color, style: plusIcon }) })] }));
|
|
268
229
|
const renderRow = ({ node, depth }) => {
|
|
269
230
|
return (jsx_runtime_1.jsx(TimelineRowLayoutContext_1.TimelineRowLayoutContext.Provider, { value: TimelineRowLayoutContext_1.INSPECTOR_TIMELINE_ROW_LAYOUT, children: jsx_runtime_1.jsx(TimelineExpandedRow_1.TimelineExpandedRow, { node: node, depth: depth, nestedDepth: 0, rowDepthBase: 0, getIsExpanded: getIsExpanded, toggleTrack: toggleTrack, validatedLocation: validatedLocation, nodePath: nodePathInfo.sequenceSubscriptionKey, schema: schema, keyframeDisplayOffset: keyframeDisplayOffset, keyframeControlsMode: "inspector" }) }, JSON.stringify(node.nodePathInfo)));
|
|
270
231
|
};
|
|
271
232
|
if (controlRows.length === 0 && !showEffectsSection) {
|
|
272
|
-
return (jsx_runtime_1.jsx("div", { style: container, children: jsx_runtime_1.jsx("div", { style: emptyState, children: "No schema" }) }));
|
|
233
|
+
return (jsx_runtime_1.jsx("div", { style: container, children: jsx_runtime_1.jsx(common_1.InspectorSection, { header: "Controls", children: jsx_runtime_1.jsx("div", { style: emptyState, children: "No schema" }) }) }));
|
|
273
234
|
}
|
|
274
|
-
return (jsx_runtime_1.jsxs("div", { style: container, children: [controlRows.length > 0 ? (jsx_runtime_1.jsx(TimelineSelection_1.TimelineSelectionOrderProvider, { items: controlSelectableItems, children: controlGroups.map((group
|
|
235
|
+
return (jsx_runtime_1.jsxs("div", { style: container, children: [controlRows.length > 0 ? (jsx_runtime_1.jsx(TimelineSelection_1.TimelineSelectionOrderProvider, { items: controlSelectableItems, children: controlGroups.map((group) => (jsx_runtime_1.jsxs(common_1.InspectorSection, { header: group.label, children: [group.id === 'source' && localAsset ? (jsx_runtime_1.jsx(CurrentAsset_1.AssetInfo, { assetName: localAsset.assetPath, contentSized: true, onAssetClick: jumpToAsset, readOnlyStudio: true })) : null, group.id === 'source' && remoteAsset && remoteSourceParts ? (jsx_runtime_1.jsxs("div", { style: remoteSourceLabel, title: remoteAsset.href, children: [
|
|
275
236
|
jsx_runtime_1.jsx("span", { style: remoteSourceLeading, children: remoteSourceParts.leading }), jsx_runtime_1.jsx("span", { style: remoteSourceTrailing, children: remoteSourceParts.trailing })
|
|
276
|
-
] })) : null, group.id === 'transforms' ? renderTransformControls() : null, group.id === 'source' ? null : group.rows.map(renderRow)] }, group.id))) })) : null, showEffectsSection ? (jsx_runtime_1.
|
|
237
|
+
] })) : null, group.id === 'transforms' ? renderTransformControls() : null, group.id === 'source' ? null : group.rows.map(renderRow)] }, group.id))) })) : null, showEffectsSection ? (jsx_runtime_1.jsx(common_1.InspectorSection, { header: effectsHeader, children: effectRows.length > 0 ? (jsx_runtime_1.jsx(TimelineSelection_1.TimelineSelectionOrderProvider, { items: effectSelectableItems, children: effectRows.map(renderRow) })) : null })) : null] }));
|
|
277
238
|
};
|
|
278
239
|
exports.InspectorSequenceSection = InspectorSequenceSection;
|
|
@@ -26,6 +26,7 @@ const QuickSwitcher_1 = __importDefault(require("./QuickSwitcher/QuickSwitcher")
|
|
|
26
26
|
const RenderStatusModal_1 = require("./RenderModal/RenderStatusModal");
|
|
27
27
|
const ServerRenderModal_1 = require("./RenderModal/ServerRenderModal");
|
|
28
28
|
const WebRenderModal_1 = require("./RenderModal/WebRenderModal");
|
|
29
|
+
const SvgImportDialog_1 = require("./SvgImportDialog");
|
|
29
30
|
const UpdateModal_1 = require("./UpdateModal/UpdateModal");
|
|
30
31
|
const Modals = ({ readOnlyStudio }) => {
|
|
31
32
|
var _a;
|
|
@@ -34,6 +35,6 @@ const Modals = ({ readOnlyStudio }) => {
|
|
|
34
35
|
'connected';
|
|
35
36
|
return (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [modalContextType && modalContextType.type === 'new-comp' && (jsx_runtime_1.jsx(NewComposition_1.NewComposition, { folderName: modalContextType.folderName, parentName: modalContextType.parentName, stack: modalContextType.stack })), modalContextType && modalContextType.type === 'new-folder' && (jsx_runtime_1.jsx(NewFolder_1.NewFolder, { parentName: modalContextType.parentName, stack: modalContextType.stack })), modalContextType && modalContextType.type === 'duplicate-comp' && (jsx_runtime_1.jsx(DuplicateComposition_1.DuplicateComposition, { compositionType: modalContextType.compositionType, compositionId: modalContextType.compositionId })), modalContextType && modalContextType.type === 'delete-comp' && (jsx_runtime_1.jsx(DeleteComposition_1.DeleteComposition, { compositionId: modalContextType.compositionId })), modalContextType && modalContextType.type === 'rename-comp' && (jsx_runtime_1.jsx(RenameComposition_1.RenameComposition, { compositionId: modalContextType.compositionId })), modalContextType && modalContextType.type === 'delete-folder' && (jsx_runtime_1.jsx(DeleteFolder_1.DeleteFolder, { folderName: modalContextType.folderName, parentName: modalContextType.parentName, stack: modalContextType.stack })), modalContextType && modalContextType.type === 'rename-folder' && (jsx_runtime_1.jsx(RenameFolder_1.RenameFolder, { folderName: modalContextType.folderName, parentName: modalContextType.parentName, stack: modalContextType.stack })), modalContextType && modalContextType.type === 'rename-static-file' && (jsx_runtime_1.jsx(RenameStaticFile_1.RenameStaticFileModal, { relativePath: modalContextType.relativePath })), modalContextType && modalContextType.type === 'input-props-override' && (jsx_runtime_1.jsx(OverrideInputProps_1.OverrideInputPropsModal, {})), modalContextType && modalContextType.type === 'web-render' && (jsx_runtime_1.jsx(WebRenderModal_1.WebRenderModalWithLoader, { ...modalContextType })), modalContextType &&
|
|
36
37
|
modalContextType.type === 'server-render' &&
|
|
37
|
-
(canRender || modalContextType.readOnlyStudio) ? (jsx_runtime_1.jsx(ServerRenderModal_1.RenderModalWithLoader, { readOnlyStudio: (_a = modalContextType.readOnlyStudio) !== null && _a !== void 0 ? _a : false, initialFrame: modalContextType.initialFrame, initialDarkMode: modalContextType.initialDarkMode, compositionId: modalContextType.compositionId, initialVideoImageFormat: modalContextType.initialVideoImageFormat, initialJpegQuality: modalContextType.initialJpegQuality, initialScale: modalContextType.initialScale, initialLogLevel: modalContextType.initialLogLevel, initialOffthreadVideoCacheSizeInBytes: modalContextType.initialOffthreadVideoCacheSizeInBytes, initialOffthreadVideoThreads: modalContextType.initialOffthreadVideoThreads, initialMediaCacheSizeInBytes: modalContextType.initialMediaCacheSizeInBytes, initialConcurrency: modalContextType.initialConcurrency, maxConcurrency: modalContextType.maxConcurrency, minConcurrency: modalContextType.minConcurrency, initialStillImageFormat: modalContextType.initialStillImageFormat, initialMuted: modalContextType.initialMuted, initialEnforceAudioTrack: modalContextType.initialEnforceAudioTrack, initialProResProfile: modalContextType.initialProResProfile, initialx264Preset: modalContextType.initialx264Preset, initialGopSize: modalContextType.initialGopSize, initialPixelFormat: modalContextType.initialPixelFormat, initialAudioBitrate: modalContextType.initialAudioBitrate, initialVideoBitrate: modalContextType.initialVideoBitrate, initialEveryNthFrame: modalContextType.initialEveryNthFrame, initialNumberOfGifLoops: modalContextType.initialNumberOfGifLoops, initialDelayRenderTimeout: modalContextType.initialDelayRenderTimeout, initialEnvVariables: modalContextType.initialEnvVariables, initialDisableWebSecurity: modalContextType.initialDisableWebSecurity, initialGl: modalContextType.initialOpenGlRenderer, initialHeadless: modalContextType.initialHeadless, initialIgnoreCertificateErrors: modalContextType.initialIgnoreCertificateErrors, initialEncodingBufferSize: modalContextType.initialEncodingBufferSize, initialEncodingMaxRate: modalContextType.initialEncodingMaxRate, initialUserAgent: modalContextType.initialUserAgent, initialColorSpace: modalContextType.initialColorSpace, initialMultiProcessOnLinux: modalContextType.initialMultiProcessOnLinux, initialRepro: modalContextType.initialRepro, initialBeep: modalContextType.initialBeep, initialForSeamlessAacConcatenation: modalContextType.initialForSeamlessAacConcatenation, defaultProps: modalContextType.defaultProps, inFrameMark: modalContextType.inFrameMark, outFrameMark: modalContextType.outFrameMark, defaultConfigurationAudioCodec: modalContextType.defaultConfigurationAudioCodec, defaultConfigurationVideoCodec: modalContextType.defaultConfigurationVideoCodec, renderTypeOfLastRender: modalContextType.renderTypeOfLastRender, defaultMetadata: modalContextType.defaulMetadata, initialHardwareAcceleration: modalContextType.initialHardwareAcceleration, initialSampleRate: modalContextType.initialSampleRate, initialChromeMode: modalContextType.initialChromeMode, renderDefaults: modalContextType.renderDefaults })) : null, modalContextType && modalContextType.type === 'render-progress' && (jsx_runtime_1.jsx(RenderStatusModal_1.RenderStatusModal, { jobId: modalContextType.jobId })), modalContextType && modalContextType.type === 'update' && (jsx_runtime_1.jsx(UpdateModal_1.UpdateModal, { info: modalContextType.info, knownBugs: modalContextType.knownBugs })), modalContextType && modalContextType.type === 'install-packages' && (jsx_runtime_1.jsx(InstallPackage_1.InstallPackageModal, { packageManager: modalContextType.packageManager })), modalContextType && modalContextType.type === 'quick-switcher' && (jsx_runtime_1.jsx(QuickSwitcher_1.default, { readOnlyStudio: readOnlyStudio, invocationTimestamp: modalContextType.invocationTimestamp, initialMode: modalContextType.mode })), modalContextType && modalContextType.type === 'add-effect' && (jsx_runtime_1.jsx(EffectPickerModal_1.EffectPickerModal, { state: modalContextType })), modalContextType && modalContextType.type === 'confirmation-dialog' && (jsx_runtime_1.jsx(ConfirmationDialog_1.ConfirmationDialog, { state: modalContextType })), (0, studio_runtime_config_1.getStudioAskAIEnabled)() && jsx_runtime_1.jsx(AskAiModal_1.AskAiModal, {})] }));
|
|
38
|
+
(canRender || modalContextType.readOnlyStudio) ? (jsx_runtime_1.jsx(ServerRenderModal_1.RenderModalWithLoader, { readOnlyStudio: (_a = modalContextType.readOnlyStudio) !== null && _a !== void 0 ? _a : false, initialFrame: modalContextType.initialFrame, initialDarkMode: modalContextType.initialDarkMode, compositionId: modalContextType.compositionId, initialVideoImageFormat: modalContextType.initialVideoImageFormat, initialJpegQuality: modalContextType.initialJpegQuality, initialScale: modalContextType.initialScale, initialLogLevel: modalContextType.initialLogLevel, initialOffthreadVideoCacheSizeInBytes: modalContextType.initialOffthreadVideoCacheSizeInBytes, initialOffthreadVideoThreads: modalContextType.initialOffthreadVideoThreads, initialMediaCacheSizeInBytes: modalContextType.initialMediaCacheSizeInBytes, initialConcurrency: modalContextType.initialConcurrency, maxConcurrency: modalContextType.maxConcurrency, minConcurrency: modalContextType.minConcurrency, initialStillImageFormat: modalContextType.initialStillImageFormat, initialMuted: modalContextType.initialMuted, initialEnforceAudioTrack: modalContextType.initialEnforceAudioTrack, initialProResProfile: modalContextType.initialProResProfile, initialx264Preset: modalContextType.initialx264Preset, initialGopSize: modalContextType.initialGopSize, initialPixelFormat: modalContextType.initialPixelFormat, initialAudioBitrate: modalContextType.initialAudioBitrate, initialVideoBitrate: modalContextType.initialVideoBitrate, initialEveryNthFrame: modalContextType.initialEveryNthFrame, initialNumberOfGifLoops: modalContextType.initialNumberOfGifLoops, initialDelayRenderTimeout: modalContextType.initialDelayRenderTimeout, initialEnvVariables: modalContextType.initialEnvVariables, initialDisableWebSecurity: modalContextType.initialDisableWebSecurity, initialGl: modalContextType.initialOpenGlRenderer, initialHeadless: modalContextType.initialHeadless, initialIgnoreCertificateErrors: modalContextType.initialIgnoreCertificateErrors, initialEncodingBufferSize: modalContextType.initialEncodingBufferSize, initialEncodingMaxRate: modalContextType.initialEncodingMaxRate, initialUserAgent: modalContextType.initialUserAgent, initialColorSpace: modalContextType.initialColorSpace, initialMultiProcessOnLinux: modalContextType.initialMultiProcessOnLinux, initialRepro: modalContextType.initialRepro, initialBeep: modalContextType.initialBeep, initialForSeamlessAacConcatenation: modalContextType.initialForSeamlessAacConcatenation, defaultProps: modalContextType.defaultProps, inFrameMark: modalContextType.inFrameMark, outFrameMark: modalContextType.outFrameMark, defaultConfigurationAudioCodec: modalContextType.defaultConfigurationAudioCodec, defaultConfigurationVideoCodec: modalContextType.defaultConfigurationVideoCodec, renderTypeOfLastRender: modalContextType.renderTypeOfLastRender, defaultMetadata: modalContextType.defaulMetadata, initialHardwareAcceleration: modalContextType.initialHardwareAcceleration, initialSampleRate: modalContextType.initialSampleRate, initialChromeMode: modalContextType.initialChromeMode, renderDefaults: modalContextType.renderDefaults })) : null, modalContextType && modalContextType.type === 'render-progress' && (jsx_runtime_1.jsx(RenderStatusModal_1.RenderStatusModal, { jobId: modalContextType.jobId })), modalContextType && modalContextType.type === 'update' && (jsx_runtime_1.jsx(UpdateModal_1.UpdateModal, { info: modalContextType.info, knownBugs: modalContextType.knownBugs })), modalContextType && modalContextType.type === 'install-packages' && (jsx_runtime_1.jsx(InstallPackage_1.InstallPackageModal, { packageManager: modalContextType.packageManager })), modalContextType && modalContextType.type === 'quick-switcher' && (jsx_runtime_1.jsx(QuickSwitcher_1.default, { readOnlyStudio: readOnlyStudio, invocationTimestamp: modalContextType.invocationTimestamp, initialMode: modalContextType.mode })), modalContextType && modalContextType.type === 'add-effect' && (jsx_runtime_1.jsx(EffectPickerModal_1.EffectPickerModal, { state: modalContextType })), modalContextType && modalContextType.type === 'confirmation-dialog' && (jsx_runtime_1.jsx(ConfirmationDialog_1.ConfirmationDialog, { state: modalContextType })), modalContextType && modalContextType.type === 'svg-import-dialog' && (jsx_runtime_1.jsx(SvgImportDialog_1.SvgImportDialog, { state: modalContextType })), (0, studio_runtime_config_1.getStudioAskAIEnabled)() && jsx_runtime_1.jsx(AskAiModal_1.AskAiModal, {})] }));
|
|
38
39
|
};
|
|
39
40
|
exports.Modals = Modals;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { InputHTMLAttributes } from 'react';
|
|
2
2
|
import React from 'react';
|
|
3
3
|
import type { RemInputStatus } from './RemInput';
|
|
4
|
+
export declare const inputDraggerContainerStyle: React.CSSProperties;
|
|
4
5
|
export declare const deriveInputDraggerStep: ({ min, snapToStep, step, }: {
|
|
5
6
|
readonly min: string | number | undefined;
|
|
6
7
|
readonly snapToStep: boolean;
|
|
@@ -10,6 +11,11 @@ export declare const deriveInputDraggerDragStartValue: ({ min, value, }: {
|
|
|
10
11
|
readonly min: string | number | undefined;
|
|
11
12
|
readonly value: string | number | readonly string[] | undefined;
|
|
12
13
|
}) => number;
|
|
14
|
+
export declare const isInputDraggerValueInRange: ({ max, min, value, }: {
|
|
15
|
+
readonly max: string | number | undefined;
|
|
16
|
+
readonly min: string | number | undefined;
|
|
17
|
+
readonly value: number;
|
|
18
|
+
}) => boolean;
|
|
13
19
|
export declare const InputDragger: React.ForwardRefExoticComponent<InputHTMLAttributes<HTMLInputElement> & {
|
|
14
20
|
readonly onValueChange: (newVal: number) => void;
|
|
15
21
|
readonly onValueChangeEnd?: ((newVal: number) => void) | undefined;
|
|
@@ -33,7 +33,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.InputDragger = exports.deriveInputDraggerDragStartValue = exports.deriveInputDraggerStep = void 0;
|
|
36
|
+
exports.InputDragger = exports.isInputDraggerValueInRange = exports.deriveInputDraggerDragStartValue = exports.deriveInputDraggerStep = exports.inputDraggerContainerStyle = void 0;
|
|
37
37
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
38
38
|
const react_1 = __importStar(require("react"));
|
|
39
39
|
const remotion_1 = require("remotion");
|
|
@@ -43,6 +43,15 @@ const input_dragger_click_lock_1 = require("../../state/input-dragger-click-lock
|
|
|
43
43
|
const z_index_1 = require("../../state/z-index");
|
|
44
44
|
const ForceSpecificCursor_1 = require("../ForceSpecificCursor");
|
|
45
45
|
const RemInput_1 = require("./RemInput");
|
|
46
|
+
exports.inputDraggerContainerStyle = {
|
|
47
|
+
...RemInput_1.inputBaseStyle,
|
|
48
|
+
backgroundColor: colors_1.TRANSPARENT,
|
|
49
|
+
borderColor: colors_1.TRANSPARENT,
|
|
50
|
+
display: 'inline-block',
|
|
51
|
+
lineHeight: 1.5,
|
|
52
|
+
outline: 'none',
|
|
53
|
+
padding: '4px 6px',
|
|
54
|
+
};
|
|
46
55
|
const isInt = (num) => {
|
|
47
56
|
return num % 1 === 0;
|
|
48
57
|
};
|
|
@@ -76,20 +85,18 @@ const deriveInputDraggerDragStartValue = ({ min, value, }) => {
|
|
|
76
85
|
return 0;
|
|
77
86
|
};
|
|
78
87
|
exports.deriveInputDraggerDragStartValue = deriveInputDraggerDragStartValue;
|
|
88
|
+
const isInputDraggerValueInRange = ({ max, min, value, }) => {
|
|
89
|
+
const numericMin = Number(min);
|
|
90
|
+
const numericMax = Number(max);
|
|
91
|
+
return ((!Number.isFinite(numericMin) || value >= numericMin) &&
|
|
92
|
+
(!Number.isFinite(numericMax) || value <= numericMax));
|
|
93
|
+
};
|
|
94
|
+
exports.isInputDraggerValueInRange = isInputDraggerValueInRange;
|
|
79
95
|
const InputDraggerForwardRefFn = ({ onValueChange, onValueChangeEnd, min: _min, max: _max, step: _step, value, onTextChange, formatter = (q) => String(q), status, rightAlign, small, snapToStep = true, dragDecimalPlaces, ...props }, ref) => {
|
|
80
96
|
const [inputFallback, setInputFallback] = (0, react_1.useState)(false);
|
|
81
97
|
const [dragging, setDragging] = (0, react_1.useState)(false);
|
|
82
98
|
const fallbackRef = (0, react_1.useRef)(null);
|
|
83
99
|
const pointerDownRef = (0, react_1.useRef)(false);
|
|
84
|
-
const style = (0, react_1.useMemo)(() => {
|
|
85
|
-
return {
|
|
86
|
-
...RemInput_1.inputBaseStyle,
|
|
87
|
-
backgroundColor: colors_1.TRANSPARENT,
|
|
88
|
-
borderColor: colors_1.TRANSPARENT,
|
|
89
|
-
padding: '4px 6px',
|
|
90
|
-
...{ outline: 'none' },
|
|
91
|
-
};
|
|
92
|
-
}, []);
|
|
93
100
|
const span = (0, react_1.useMemo)(() => ({
|
|
94
101
|
color: dragging ? 'var(--remotion-cli-internals-blue-hovered)' : colors_1.BLUE,
|
|
95
102
|
cursor: 'ew-resize',
|
|
@@ -126,10 +133,16 @@ const InputDraggerForwardRefFn = ({ onValueChange, onValueChangeEnd, min: _min,
|
|
|
126
133
|
}, []);
|
|
127
134
|
const onInputChange = (0, react_1.useCallback)((e) => {
|
|
128
135
|
const parsed = Number(e.target.value);
|
|
129
|
-
if (e.target.value !== '' &&
|
|
136
|
+
if (e.target.value !== '' &&
|
|
137
|
+
!Number.isNaN(parsed) &&
|
|
138
|
+
(0, exports.isInputDraggerValueInRange)({
|
|
139
|
+
max: _max,
|
|
140
|
+
min: _min,
|
|
141
|
+
value: parsed,
|
|
142
|
+
})) {
|
|
130
143
|
onValueChange(parsed);
|
|
131
144
|
}
|
|
132
|
-
}, [onValueChange]);
|
|
145
|
+
}, [_max, _min, onValueChange]);
|
|
133
146
|
const onBlur = (0, react_1.useCallback)(() => {
|
|
134
147
|
if (!fallbackRef.current) {
|
|
135
148
|
return;
|
|
@@ -233,6 +246,6 @@ const InputDraggerForwardRefFn = ({ onValueChange, onValueChangeEnd, min: _min,
|
|
|
233
246
|
if (inputFallback) {
|
|
234
247
|
return (jsx_runtime_1.jsx(z_index_1.HigherZIndex, { onEscape: onEscape, onOutsideClick: noop_1.noop, children: jsx_runtime_1.jsx(RemInput_1.RemotionInput, { ref: fallbackRef, autoFocus: true, onKeyPress: onKeyPress, onBlur: onBlur, onChange: onInputChange, min: _min, max: _max, step: deriveStep, defaultValue: value, status: status, pattern: '[0-9]*[.]?[0-9]*', rightAlign: rightAlign, small: small, ...props }) }));
|
|
235
248
|
}
|
|
236
|
-
return (jsx_runtime_1.jsx("button", { ref: ref, type: "button", className: '__remotion_input_dragger', style:
|
|
249
|
+
return (jsx_runtime_1.jsx("button", { ref: ref, type: "button", className: '__remotion_input_dragger', style: exports.inputDraggerContainerStyle, onClick: onClick, onFocus: onFocus, onKeyDown: onKeyDown, onPointerDown: onPointerDown, children: jsx_runtime_1.jsx("span", { style: span, children: formatter(value) }) }));
|
|
237
250
|
};
|
|
238
251
|
exports.InputDragger = react_1.default.forwardRef(InputDraggerForwardRefFn);
|
|
@@ -36,6 +36,13 @@ const NewCompositionLoaded = ({ folderName, parentName, stack }) => {
|
|
|
36
36
|
: null;
|
|
37
37
|
const initialDimensions = (0, get_new_composition_defaults_1.getNewCompositionDefaults)(initialComposition);
|
|
38
38
|
const [newId, setName] = (0, react_1.useState)(() => (0, use_create_composition_1.getUniqueCompositionName)(compositions));
|
|
39
|
+
const inputRef = (0, react_1.useRef)(null);
|
|
40
|
+
(0, react_1.useEffect)(() => {
|
|
41
|
+
const input = inputRef.current;
|
|
42
|
+
if (!input)
|
|
43
|
+
return;
|
|
44
|
+
input.select();
|
|
45
|
+
}, []);
|
|
39
46
|
const [selectedFrameRate, setFrameRate] = (0, react_1.useState)(initialDimensions.fps);
|
|
40
47
|
const [size, setSize] = (0, react_1.useState)(() => ({
|
|
41
48
|
width: initialDimensions.width,
|
|
@@ -102,7 +109,7 @@ const NewCompositionLoaded = ({ folderName, parentName, stack }) => {
|
|
|
102
109
|
jsx_runtime_1.jsx("div", { style: layout_2.label, children: "Folder" }), jsx_runtime_1.jsx("div", { style: layout_2.rightRow, children: jsx_runtime_1.jsx("span", { style: folderPathStyle, children: folderPath }) })
|
|
103
110
|
] })) : null, jsx_runtime_1.jsxs("div", { style: layout_2.optionRow, children: [
|
|
104
111
|
jsx_runtime_1.jsx("div", { style: layout_2.label, children: "ID" }), jsx_runtime_1.jsx("div", { style: layout_2.rightRow, children: jsx_runtime_1.jsxs(InputAndValidationContainer_1.InputAndValidationContainer, { children: [
|
|
105
|
-
jsx_runtime_1.jsx(RemInput_1.RemotionInput, { value: newId, onChange: onNameChange, type: "text", autoFocus: true, placeholder: "Composition ID", status: "ok", rightAlign: true }), compNameErrMessage ? (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
|
|
112
|
+
jsx_runtime_1.jsx(RemInput_1.RemotionInput, { ref: inputRef, value: newId, onChange: onNameChange, type: "text", autoFocus: true, placeholder: "Composition ID", status: "ok", rightAlign: true }), compNameErrMessage ? (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
|
|
106
113
|
jsx_runtime_1.jsx(layout_1.Spacing, { y: 1, block: true }), jsx_runtime_1.jsx(ValidationMessage_1.ValidationMessage, { align: "flex-start", message: compNameErrMessage, type: "error" })
|
|
107
114
|
] })) : null] }) })
|
|
108
115
|
] }), jsx_runtime_1.jsxs("div", { style: layout_2.optionRow, children: [
|
|
@@ -3,7 +3,7 @@ import React from 'react';
|
|
|
3
3
|
export declare const WarningTriangle: React.FC<SVGProps<SVGSVGElement>>;
|
|
4
4
|
type ValidationMessageSize = 'default' | 'compact';
|
|
5
5
|
export declare const ValidationMessage: React.FC<{
|
|
6
|
-
readonly message:
|
|
6
|
+
readonly message: React.ReactNode;
|
|
7
7
|
readonly align: 'flex-start' | 'flex-end';
|
|
8
8
|
readonly type: 'warning' | 'error';
|
|
9
9
|
readonly action?: React.ReactNode;
|
|
@@ -9,6 +9,7 @@ const ErrorLoader_1 = require("../error-overlay/remotion-overlay/ErrorLoader");
|
|
|
9
9
|
const checkerboard_background_1 = require("../helpers/checkerboard-background");
|
|
10
10
|
const colors_1 = require("../helpers/colors");
|
|
11
11
|
const get_preview_file_type_1 = require("../helpers/get-preview-file-type");
|
|
12
|
+
const studio_fit_padding_1 = require("../helpers/studio-fit-padding");
|
|
12
13
|
const checkerboard_1 = require("../state/checkerboard");
|
|
13
14
|
const is_menu_item_1 = require("./Menu/is-menu-item");
|
|
14
15
|
const RenderPreview_1 = require("./RenderPreview");
|
|
@@ -78,13 +79,20 @@ const CompWhenItHasDimensions = ({ contentDimensions, canvasSize, canvasContent,
|
|
|
78
79
|
scale: 1,
|
|
79
80
|
};
|
|
80
81
|
}
|
|
81
|
-
return
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
82
|
+
return canvasContent.type === 'composition'
|
|
83
|
+
? (0, studio_fit_padding_1.calculateStudioCanvasTransformation)({
|
|
84
|
+
canvasSize,
|
|
85
|
+
compositionHeight: contentDimensions.height,
|
|
86
|
+
compositionWidth: contentDimensions.width,
|
|
87
|
+
previewSize: previewSize.size,
|
|
88
|
+
})
|
|
89
|
+
: player_1.PlayerInternals.calculateCanvasTransformation({
|
|
90
|
+
canvasSize,
|
|
91
|
+
compositionHeight: contentDimensions.height,
|
|
92
|
+
compositionWidth: contentDimensions.width,
|
|
93
|
+
previewSize: previewSize.size,
|
|
94
|
+
});
|
|
95
|
+
}, [canvasContent.type, canvasSize, contentDimensions, previewSize.size]);
|
|
88
96
|
const outer = (0, react_1.useMemo)(() => {
|
|
89
97
|
return {
|
|
90
98
|
width: contentDimensions === 'none' ? '100%' : contentDimensions.width * scale,
|
|
@@ -2,17 +2,50 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.RenderModalOutputName = void 0;
|
|
4
4
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const react_1 = require("react");
|
|
6
|
+
const colors_1 = require("../../helpers/colors");
|
|
7
|
+
const get_file_manager_name_1 = require("../../helpers/get-file-manager-name");
|
|
8
|
+
const folder_1 = require("../../icons/folder");
|
|
9
|
+
const InlineAction_1 = require("../InlineAction");
|
|
5
10
|
const layout_1 = require("../layout");
|
|
6
11
|
const RemInput_1 = require("../NewComposition/RemInput");
|
|
7
12
|
const ValidationMessage_1 = require("../NewComposition/ValidationMessage");
|
|
13
|
+
const NotificationCenter_1 = require("../Notifications/NotificationCenter");
|
|
14
|
+
const actions_1 = require("../RenderQueue/actions");
|
|
8
15
|
const layout_2 = require("./layout");
|
|
16
|
+
const existsMessageStyle = {
|
|
17
|
+
display: 'inline-flex',
|
|
18
|
+
alignItems: 'center',
|
|
19
|
+
minWidth: 0,
|
|
20
|
+
fontFamily: 'sans-serif',
|
|
21
|
+
fontSize: 13,
|
|
22
|
+
lineHeight: '18px',
|
|
23
|
+
color: colors_1.WHITE,
|
|
24
|
+
whiteSpace: 'nowrap',
|
|
25
|
+
};
|
|
26
|
+
const openIconStyle = {
|
|
27
|
+
width: 12,
|
|
28
|
+
height: 12,
|
|
29
|
+
flexShrink: 0,
|
|
30
|
+
};
|
|
9
31
|
const RenderModalOutputName = ({ existence, inputStyle, outName, onValueChange, validationMessage, label: labelText, }) => {
|
|
32
|
+
const openExistingOutput = (0, react_1.useCallback)(() => {
|
|
33
|
+
(0, actions_1.openInFileExplorer)({ directory: outName }).catch((err) => {
|
|
34
|
+
(0, NotificationCenter_1.showNotification)(`Could not open file: ${err.message}`, 2000);
|
|
35
|
+
});
|
|
36
|
+
}, [outName]);
|
|
37
|
+
const renderOpenIcon = (0, react_1.useCallback)((color) => {
|
|
38
|
+
return jsx_runtime_1.jsx(folder_1.ExpandedFolderIconSolid, { style: openIconStyle, color: color });
|
|
39
|
+
}, []);
|
|
40
|
+
const fileManagerName = (0, get_file_manager_name_1.getFileManagerName)(window.remotion_fileSystemPlatform);
|
|
10
41
|
return (jsx_runtime_1.jsxs("div", { style: layout_2.optionRow, children: [
|
|
11
42
|
jsx_runtime_1.jsx(layout_1.Column, { children: jsx_runtime_1.jsx("div", { style: layout_2.label, children: labelText }) }), jsx_runtime_1.jsx("div", { style: layout_2.rightRow, children: jsx_runtime_1.jsxs("div", { children: [
|
|
12
43
|
jsx_runtime_1.jsx(RemInput_1.RemotionInput, { status: validationMessage ? 'error' : existence ? 'warning' : 'ok', style: inputStyle, type: "text", value: outName, onChange: onValueChange, rightAlign: true }), validationMessage ? (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
|
|
13
44
|
jsx_runtime_1.jsx(layout_1.Spacing, { y: 1, block: true }), jsx_runtime_1.jsx(ValidationMessage_1.ValidationMessage, { align: "flex-end", message: validationMessage, type: 'error' })
|
|
14
45
|
] })) : existence ? (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
|
|
15
|
-
jsx_runtime_1.jsx(layout_1.Spacing, { y: 1, block: true }), jsx_runtime_1.jsx(ValidationMessage_1.ValidationMessage, { align: "flex-end", message: "
|
|
46
|
+
jsx_runtime_1.jsx(layout_1.Spacing, { y: 1, block: true }), jsx_runtime_1.jsx(ValidationMessage_1.ValidationMessage, { align: "flex-end", message: jsx_runtime_1.jsxs("span", { style: existsMessageStyle, children: [
|
|
47
|
+
jsx_runtime_1.jsx(InlineAction_1.InlineAction, { onClick: openExistingOutput, renderAction: renderOpenIcon, title: `Open in ${fileManagerName}` }),
|
|
48
|
+
"Exists, will be overwritten"] }), type: 'warning' })
|
|
16
49
|
] })) : null] }) })
|
|
17
50
|
] }));
|
|
18
51
|
};
|
|
@@ -411,6 +411,7 @@ const SelectedOutlineOverlay = ({ compositionHeight, compositionWidth, scale, tr
|
|
|
411
411
|
sequences,
|
|
412
412
|
overrideIdsToNodePaths: overrideIdToNodePathMappings,
|
|
413
413
|
compositions,
|
|
414
|
+
timelinePosition,
|
|
414
415
|
}).map(({ key, keyframeDisplayOffset, nodePathInfo, sequence }) => {
|
|
415
416
|
var _a, _b, _c, _d, _e, _f;
|
|
416
417
|
if (sequence.refForOutline === null) {
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { SvgImportDialogState } from '../state/modals';
|
|
3
|
+
export type SvgImportMode = 'image' | 'inline';
|
|
4
|
+
export declare const useSvgImportDialog: () => () => Promise<SvgImportMode | null>;
|
|
5
|
+
export declare const SvgImportDialog: React.FC<{
|
|
6
|
+
readonly state: SvgImportDialogState;
|
|
7
|
+
}>;
|