@remotion/studio 4.0.525 → 4.0.527
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/focus-default-props-path.js +7 -1
- package/dist/api/restart-studio.d.ts +1 -1
- package/dist/api/restart-studio.js +1 -1
- package/dist/components/AgentPrompt.d.ts +6 -0
- package/dist/components/AgentPrompt.js +107 -0
- package/dist/components/AssetFileIcon.js +2 -0
- package/dist/components/AssetSelectorItem.d.ts +1 -23
- package/dist/components/AssetSelectorItem.js +10 -200
- package/dist/components/Canvas.js +109 -44
- package/dist/components/CanvasCaptureDropHandler.js +63 -0
- package/dist/components/CanvasOrLoading.js +10 -2
- package/dist/components/CaptionInspector.js +9 -3
- package/dist/{error-overlay/remotion-overlay → components}/CodeFrame.d.ts +2 -0
- package/dist/components/CodeFrame.js +77 -0
- package/dist/components/CompositionSelectorItem.js +7 -17
- package/dist/components/CurrentAsset.js +6 -4
- package/dist/components/ElementInstallConfirmation.js +69 -38
- package/dist/components/FilePreview.js +4 -0
- package/dist/components/FixComputedValueModal.js +64 -96
- package/dist/components/GenerateWithAgentModal.d.ts +9 -0
- package/dist/components/GenerateWithAgentModal.js +39 -0
- package/dist/components/InitialCompositionLoader.js +1 -1
- package/dist/components/InlineDropdown.js +26 -2
- package/dist/components/InlineEditableTitle.js +3 -0
- package/dist/components/InspectorOpenInEditor.js +8 -4
- package/dist/components/InspectorPanel/CollapsibleInspectorSection.d.ts +7 -0
- package/dist/components/InspectorPanel/CollapsibleInspectorSection.js +14 -0
- package/dist/components/InspectorPanel/CollapsibleInspectorSectionHeader.d.ts +1 -1
- package/dist/components/InspectorPanel/CollapsibleInspectorSectionHeader.js +20 -8
- package/dist/components/InspectorPanel/CompositionInspector.js +32 -15
- package/dist/components/InspectorPanel/CompositionMetadata.js +7 -0
- package/dist/components/InspectorPanel/ConnectedCompositionsSection.js +6 -12
- package/dist/components/InspectorPanel/ElementLibraryButton.js +2 -0
- package/dist/components/InspectorPanel/GuideInspector.js +2 -3
- package/dist/components/InspectorPanel/KeyframeSettings.js +5 -6
- package/dist/components/InspectorPanel/MultiSequenceInspector.js +34 -2
- package/dist/components/InspectorPanel/SequenceSelectionInspector.js +45 -4
- package/dist/components/InspectorPanel/common.d.ts +4 -0
- package/dist/components/InspectorPanel/common.js +15 -2
- package/dist/components/InspectorPanel/styles.d.ts +0 -3
- package/dist/components/InspectorPanel/styles.js +3 -27
- package/dist/components/InspectorPanel/use-composition-actions.d.ts +2 -0
- package/dist/components/InspectorPanel/use-composition-actions.js +16 -0
- package/dist/components/InspectorPanel/use-inspector-section-expanded.d.ts +1 -0
- package/dist/components/InspectorPanel/use-inspector-section-expanded.js +21 -0
- package/dist/components/InspectorSequenceSection.js +44 -35
- package/dist/components/InspectorSourceLocation.js +4 -0
- package/dist/components/KeyboardShortcutsSettings.js +12 -4
- package/dist/components/LutPreview.d.ts +4 -0
- package/dist/components/LutPreview.js +192 -0
- package/dist/components/MenuBuildIndicator.js +1 -0
- package/dist/components/MenuCompositionName.js +4 -9
- package/dist/components/Modals.js +3 -6
- package/dist/components/ModelsSettings.js +15 -4
- package/dist/components/NewComposition/CancelButton.js +1 -1
- package/dist/components/Notifications/NotificationCenter.d.ts +0 -1
- package/dist/components/Notifications/NotificationCenter.js +1 -22
- package/dist/components/Preview.js +3 -0
- package/dist/components/QuickSwitcher/ExplorerQuickSwitcherTrigger.js +1 -0
- package/dist/components/QuickSwitcher/QuickSwitcherContent.js +1 -0
- package/dist/components/QuickSwitcher/QuickSwitcherResult.js +4 -9
- package/dist/components/RadioButton.js +1 -0
- package/dist/components/RenderModal/DataEditor.js +4 -1
- package/dist/components/RenderModal/SchemaEditor/scroll-to-default-props-path.d.ts +1 -0
- package/dist/components/RenderModal/SchemaEditor/scroll-to-default-props-path.js +2 -1
- package/dist/components/RenderModal/WebRenderModal.js +10 -2
- package/dist/components/RenderQueue/CaptionQueueItem.js +5 -2
- package/dist/components/RenderQueue/CaptionQueueProcessor.js +35 -8
- package/dist/components/RenderQueue/VideoMattingQueueItem.js +1 -0
- package/dist/components/RenderQueue/caption-job-types.d.ts +6 -0
- package/dist/components/RenderQueue/index.js +1 -0
- package/dist/components/RendersTab.js +4 -0
- package/dist/components/SelectedOutlineElement.js +6 -0
- package/dist/components/SelectedOutlineSnapIndicators.d.ts +6 -0
- package/dist/components/SelectedOutlineSnapIndicators.js +16 -12
- package/dist/components/SequencePropsSubscriptionProvider.d.ts +3 -0
- package/dist/components/SequencePropsSubscriptionProvider.js +8 -6
- package/dist/components/SettingsButton.js +11 -2
- package/dist/components/SettingsModal.d.ts +1 -2
- package/dist/components/SettingsModal.js +24 -6
- package/dist/components/SettingsModalFooter.js +17 -3
- package/dist/components/SkillsSettings.d.ts +5 -0
- package/dist/components/SkillsSettings.js +29 -26
- package/dist/components/Timeline/Timeline.js +10 -11
- package/dist/components/Timeline/TimelineAssetField.js +81 -51
- package/dist/components/Timeline/TimelineDeleteKeybindings.js +6 -9
- package/dist/components/Timeline/TimelineEffectItem.js +1 -0
- package/dist/components/Timeline/TimelineExpandArrowButton.js +1 -0
- package/dist/components/Timeline/TimelineExpandedRow.js +1 -0
- package/dist/components/Timeline/TimelineFieldLabel.js +1 -0
- package/dist/components/Timeline/TimelineHeightContainer.js +11 -1
- package/dist/components/Timeline/TimelineKeyframeControls.js +16 -1
- package/dist/components/Timeline/TimelineLayerChildren.d.ts +3 -3
- package/dist/components/Timeline/TimelineLayerChildren.js +11 -9
- package/dist/components/Timeline/TimelineLayerEye.d.ts +1 -1
- package/dist/components/Timeline/TimelineLayerEye.js +6 -3
- package/dist/components/Timeline/TimelineList.js +9 -3
- package/dist/components/Timeline/TimelineSchemaField.js +2 -6
- package/dist/components/Timeline/TimelineSelection.d.ts +14 -3
- package/dist/components/Timeline/TimelineSelection.js +91 -49
- package/dist/components/Timeline/TimelineSequence.js +28 -2
- package/dist/components/Timeline/TimelineSequenceFrame.js +1 -0
- package/dist/components/Timeline/TimelineSequenceItem.d.ts +2 -0
- package/dist/components/Timeline/TimelineSequenceItem.js +45 -13
- package/dist/components/Timeline/TimelineViewport.d.ts +1 -0
- package/dist/components/Timeline/TimelineViewport.js +10 -1
- package/dist/components/Timeline/TimelineVirtualization.d.ts +3 -3
- package/dist/components/Timeline/delete-selected-timeline-item.js +2 -2
- package/dist/components/Timeline/get-sequence-context-menu-items.d.ts +6 -2
- package/dist/components/Timeline/get-sequence-context-menu-items.js +143 -46
- package/dist/components/Timeline/normalize-font-weight-for-keyframe.d.ts +1 -0
- package/dist/components/Timeline/normalize-font-weight-for-keyframe.js +19 -0
- package/dist/components/Timeline/split-selected-timeline-item.d.ts +13 -10
- package/dist/components/Timeline/split-selected-timeline-item.js +58 -35
- package/dist/components/Timeline/timeline-display-groups.d.ts +9 -0
- package/dist/components/Timeline/timeline-display-groups.js +66 -0
- package/dist/components/Timeline/use-timeline-asset-drop.js +21 -21
- package/dist/components/Timeline/use-timeline-expanded-tree.d.ts +2 -1
- package/dist/components/Timeline/use-timeline-expanded-tree.js +1 -2
- package/dist/components/TimelineCombobox.js +1 -0
- package/dist/components/Transcription/TranscriptionModal.js +16 -11
- package/dist/components/Transcription/TranscriptionModalWithOptionalWhisper.js +1 -1
- package/dist/components/UpdateStatusContext.d.ts +2 -2
- package/dist/components/UpdateStatusContext.js +6 -7
- package/dist/components/UpdatesSettings.js +6 -6
- package/dist/components/WebMcp.js +41 -41
- package/dist/components/asset-context-menu.d.ts +32 -0
- package/dist/components/asset-context-menu.js +242 -0
- package/dist/components/composition-drop-preview.d.ts +9 -2
- package/dist/components/composition-drop-preview.js +7 -4
- package/dist/components/composition-menu-items.d.ts +4 -6
- package/dist/components/composition-menu-items.js +191 -75
- package/dist/components/delete-jsx-nodes-api.d.ts +2 -0
- package/dist/components/{delete-jsx-node-api.js → delete-jsx-nodes-api.js} +5 -5
- package/dist/components/get-open-in-menu-items.d.ts +6 -5
- package/dist/components/get-open-in-menu-items.js +22 -16
- package/dist/components/keyboard-shortcuts.d.ts +4 -4
- package/dist/components/keyboard-shortcuts.js +3 -1
- package/dist/components/public-output-name.d.ts +1 -0
- package/dist/components/public-output-name.js +7 -3
- package/dist/components/selected-outline-order.js +18 -12
- package/dist/components/use-open-in-menu-apps.d.ts +14 -0
- package/dist/components/use-open-in-menu-apps.js +33 -0
- package/dist/error-overlay/remotion-overlay/ErrorDisplay.js +2 -2
- package/dist/error-overlay/remotion-overlay/OpenInEditor.d.ts +1 -0
- package/dist/error-overlay/remotion-overlay/OpenInEditor.js +3 -3
- package/dist/error-overlay/remotion-overlay/StackFrame.d.ts +5 -1
- package/dist/error-overlay/remotion-overlay/StackFrame.js +26 -19
- package/dist/esm/{CaptionQueueProcessor-k0yrm3dj.mjs → CaptionQueueProcessor-npa6szn1.mjs} +39 -8
- package/dist/esm/{LazyModels-gfmpcy4h.mjs → LazyModels-nh3c8h9p.mjs} +4 -3
- package/dist/esm/{LazyModels-m1rf06wh.mjs → LazyModels-rr5v8h5y.mjs} +4 -3
- package/dist/esm/{TranscriptionModal-8pvrehg4.mjs → TranscriptionModal-79m5wgcj.mjs} +25 -17
- package/dist/esm/{VideoMattingModal-fefbzgka.mjs → VideoMattingModal-31pew0xj.mjs} +9 -6
- package/dist/esm/index-21hxsfaa.mjs +239 -0
- package/dist/esm/{index-s848rffx.mjs → index-4zen9prq.mjs} +5438 -4686
- package/dist/esm/index-5t2dwxsk.mjs +530 -0
- package/dist/esm/{index-vsxrxfpj.mjs → index-614tdz2q.mjs} +1 -1
- package/dist/esm/{index-0x13f28h.mjs → index-9xxg6218.mjs} +20 -541
- package/dist/esm/{index-hbezgbbq.mjs → index-ac5550e7.mjs} +1 -1
- package/dist/esm/{index-41kqns5c.mjs → index-e855w59j.mjs} +15 -92
- package/dist/esm/{index-tzxb8808.mjs → index-n5gmcvhz.mjs} +8 -8
- package/dist/esm/{index-ggqpre9v.mjs → index-ppspzgn9.mjs} +4963 -4178
- package/dist/esm/{index-jrw61pkj.mjs → index-r0ejh5sy.mjs} +1 -1
- package/dist/esm/index-r1gr3j3a.mjs +80 -0
- package/dist/esm/{index-mww32xc8.mjs → index-s7qa3xbw.mjs} +6 -4
- package/dist/esm/{index-1089795y.mjs → index-vxwg66ar.mjs} +7 -22
- package/dist/esm/index.mjs +13 -6
- package/dist/esm/internals.mjs +10 -7
- package/dist/esm/previewEntry.mjs +10 -7
- package/dist/esm/{resolve-composition-component-location-bt2d6qxq.mjs → resolve-composition-component-location-qrp05g62.mjs} +1 -1
- package/dist/helpers/client-id.d.ts +1 -0
- package/dist/helpers/client-id.js +8 -4
- package/dist/helpers/copy-text.js +1 -16
- package/dist/helpers/cube-lut.d.ts +12 -0
- package/dist/helpers/cube-lut.js +160 -0
- package/dist/helpers/get-preview-file-type.d.ts +1 -1
- package/dist/helpers/get-preview-file-type.js +3 -0
- package/dist/helpers/hoverable.js +2 -1
- package/dist/helpers/open-in-editor.d.ts +5 -2
- package/dist/helpers/open-in-editor.js +13 -5
- package/dist/helpers/settings-tab-availability.d.ts +14 -0
- package/dist/helpers/settings-tab-availability.js +35 -0
- package/dist/helpers/studio-runtime-config.d.ts +1 -1
- package/dist/helpers/use-keybinding.d.ts +1 -1
- package/dist/helpers/use-keyboard-shortcut-label.d.ts +2 -2
- package/dist/helpers/use-menu-structure.js +31 -21
- package/dist/icons/lut.d.ts +4 -0
- package/dist/icons/lut.js +6 -0
- package/dist/icons/sparkles.d.ts +4 -0
- package/dist/icons/sparkles.js +6 -0
- package/dist/state/modals.d.ts +17 -2
- package/dist/state/timeline-zoom.js +4 -0
- package/package.json +19 -19
- package/dist/components/delete-jsx-node-api.d.ts +0 -2
- package/dist/error-overlay/remotion-overlay/CodeFrame.js +0 -62
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.keyframeEditorValue = exports.keyframeEditorRow = exports.detailValue = exports.detailLabel = exports.detailRow = exports.guideDetailsContainer = exports.detailsBeforeInlineAction = exports.inspectorQuickActionsSection = exports.detailsWithInlineAction = exports.detailsContainer = exports.centeredMessage = exports.selectedContainer = exports.resolveLinkStyle = exports.defaultPropsWarningMessages = exports.defaultPropsWarningContainer = exports.sectionHeaderEnd = exports.
|
|
3
|
+
exports.keyframeEditorValue = exports.keyframeEditorRow = exports.detailValue = exports.detailLabel = exports.detailRow = exports.guideDetailsContainer = exports.detailsBeforeInlineAction = exports.inspectorQuickActionsSection = exports.detailsWithInlineAction = exports.detailsContainer = exports.centeredMessage = exports.selectedContainer = exports.resolveLinkStyle = exports.defaultPropsWarningMessages = exports.defaultPropsWarningContainer = exports.sectionHeaderEnd = exports.sectionHeaderRow = exports.sequenceHeaderSubtitle = exports.inspectorSectionBody = exports.sectionHeader = exports.sequenceHeaderDivider = exports.inspectorOverviewSection = 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
|
const layout_1 = require("../layout");
|
|
@@ -22,10 +22,6 @@ exports.compositionDefaultPropsSection = {
|
|
|
22
22
|
display: 'flex',
|
|
23
23
|
flexDirection: 'column',
|
|
24
24
|
};
|
|
25
|
-
exports.compositionVisualControlsSection = {
|
|
26
|
-
display: 'flex',
|
|
27
|
-
flexDirection: 'column',
|
|
28
|
-
};
|
|
29
25
|
exports.inspectorOverviewSection = {
|
|
30
26
|
display: 'flex',
|
|
31
27
|
flexDirection: 'column',
|
|
@@ -44,6 +40,7 @@ exports.sectionHeader = {
|
|
|
44
40
|
lineHeight: '24px',
|
|
45
41
|
padding: `4px 0 4px ${InspectorPanelLayout_1.INSPECTOR_PANEL_HORIZONTAL_PADDING}px`,
|
|
46
42
|
userSelect: 'none',
|
|
43
|
+
WebkitUserSelect: 'none',
|
|
47
44
|
};
|
|
48
45
|
exports.inspectorSectionBody = {
|
|
49
46
|
display: 'flex',
|
|
@@ -76,28 +73,6 @@ exports.sectionHeaderRow = {
|
|
|
76
73
|
justifyContent: 'space-between',
|
|
77
74
|
minWidth: 0,
|
|
78
75
|
};
|
|
79
|
-
exports.sectionHeaderTitle = {
|
|
80
|
-
alignItems: 'center',
|
|
81
|
-
color: colors_1.LIGHT_TEXT,
|
|
82
|
-
display: 'flex',
|
|
83
|
-
flexShrink: 0,
|
|
84
|
-
fontFamily: 'sans-serif',
|
|
85
|
-
fontSize: 12,
|
|
86
|
-
fontWeight: 'bold',
|
|
87
|
-
lineHeight: '16px',
|
|
88
|
-
minHeight: 24,
|
|
89
|
-
minWidth: 0,
|
|
90
|
-
overflow: 'hidden',
|
|
91
|
-
textOverflow: 'ellipsis',
|
|
92
|
-
userSelect: 'none',
|
|
93
|
-
whiteSpace: 'nowrap',
|
|
94
|
-
};
|
|
95
|
-
exports.sectionHeaderStart = {
|
|
96
|
-
alignItems: 'center',
|
|
97
|
-
display: 'flex',
|
|
98
|
-
gap: 8,
|
|
99
|
-
minWidth: 0,
|
|
100
|
-
};
|
|
101
76
|
exports.sectionHeaderEnd = {
|
|
102
77
|
alignItems: 'center',
|
|
103
78
|
display: 'flex',
|
|
@@ -170,6 +145,7 @@ exports.detailLabel = {
|
|
|
170
145
|
overflow: 'hidden',
|
|
171
146
|
textOverflow: 'ellipsis',
|
|
172
147
|
userSelect: 'none',
|
|
148
|
+
WebkitUserSelect: 'none',
|
|
173
149
|
whiteSpace: 'nowrap',
|
|
174
150
|
};
|
|
175
151
|
exports.detailValue = {
|
|
@@ -5,7 +5,9 @@ export declare const useCompositionActions: () => {
|
|
|
5
5
|
canShowInsertAsset: boolean;
|
|
6
6
|
canShowInsertComposition: boolean;
|
|
7
7
|
canShowInsertSolid: boolean;
|
|
8
|
+
canShowGenerateWithAgent: boolean;
|
|
8
9
|
insertAsset: () => void;
|
|
9
10
|
insertComposition: () => void;
|
|
10
11
|
insertSolid: () => Promise<void>;
|
|
12
|
+
generateWithAgent: () => void;
|
|
11
13
|
};
|
|
@@ -57,6 +57,10 @@ const useCompositionActions = () => {
|
|
|
57
57
|
const canInsertAsset = canShowInsertAsset && !isAddingAsset;
|
|
58
58
|
const canShowInsertComposition = canShowInsertAsset;
|
|
59
59
|
const canInsertComposition = canShowInsertComposition && !isAddingComposition;
|
|
60
|
+
const canShowGenerateWithAgent = previewInteractive &&
|
|
61
|
+
!window.remotion_isReadOnlyStudio &&
|
|
62
|
+
browserStudioOperations === null &&
|
|
63
|
+
currentCompositionId !== null;
|
|
60
64
|
const insertSolid = (0, react_1.useCallback)(async () => {
|
|
61
65
|
if (!canInsertSolid ||
|
|
62
66
|
currentCompositionId === null ||
|
|
@@ -231,6 +235,16 @@ const useCompositionActions = () => {
|
|
|
231
235
|
onCompositionSelected,
|
|
232
236
|
setSelectedModal,
|
|
233
237
|
]);
|
|
238
|
+
const generateWithAgent = (0, react_1.useCallback)(() => {
|
|
239
|
+
var _a;
|
|
240
|
+
if (currentCompositionId === null) {
|
|
241
|
+
return;
|
|
242
|
+
}
|
|
243
|
+
setSelectedModal({
|
|
244
|
+
type: 'generate-with-agent',
|
|
245
|
+
location: (_a = compositionComponentInfo === null || compositionComponentInfo === void 0 ? void 0 : compositionComponentInfo.location) !== null && _a !== void 0 ? _a : null,
|
|
246
|
+
});
|
|
247
|
+
}, [compositionComponentInfo, currentCompositionId, setSelectedModal]);
|
|
234
248
|
return {
|
|
235
249
|
canInsertAsset,
|
|
236
250
|
canInsertComposition,
|
|
@@ -238,9 +252,11 @@ const useCompositionActions = () => {
|
|
|
238
252
|
canShowInsertAsset,
|
|
239
253
|
canShowInsertComposition,
|
|
240
254
|
canShowInsertSolid,
|
|
255
|
+
canShowGenerateWithAgent,
|
|
241
256
|
insertAsset,
|
|
242
257
|
insertComposition,
|
|
243
258
|
insertSolid,
|
|
259
|
+
generateWithAgent,
|
|
244
260
|
};
|
|
245
261
|
};
|
|
246
262
|
exports.useCompositionActions = useCompositionActions;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const useInspectorSectionExpanded: (sectionId: string) => readonly [boolean, (expanded: boolean) => void];
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.useInspectorSectionExpanded = void 0;
|
|
4
|
+
const react_1 = require("react");
|
|
5
|
+
const persist_boolean_map_1 = require("../../helpers/persist-boolean-map");
|
|
6
|
+
const storageKey = 'remotion.editor.inspectorCollapsedSections';
|
|
7
|
+
const useInspectorSectionExpanded = (sectionId) => {
|
|
8
|
+
const [collapsedSections, setCollapsedSections] = (0, react_1.useState)(() => (0, persist_boolean_map_1.loadPersistedBooleanMap)(storageKey));
|
|
9
|
+
const setExpanded = (0, react_1.useCallback)((expanded) => {
|
|
10
|
+
setCollapsedSections((previous) => ({
|
|
11
|
+
...previous,
|
|
12
|
+
[sectionId]: !expanded,
|
|
13
|
+
}));
|
|
14
|
+
(0, persist_boolean_map_1.persistBooleanMap)(storageKey, {
|
|
15
|
+
...(0, persist_boolean_map_1.loadPersistedBooleanMap)(storageKey),
|
|
16
|
+
[sectionId]: !expanded,
|
|
17
|
+
});
|
|
18
|
+
}, [sectionId]);
|
|
19
|
+
return [!collapsedSections[sectionId], setExpanded];
|
|
20
|
+
};
|
|
21
|
+
exports.useInspectorSectionExpanded = useInspectorSectionExpanded;
|
|
@@ -21,7 +21,6 @@ const InlineCaptionInspector_1 = require("./InlineCaptionInspector");
|
|
|
21
21
|
const CollapsibleInspectorSectionHeader_1 = require("./InspectorPanel/CollapsibleInspectorSectionHeader");
|
|
22
22
|
const common_1 = require("./InspectorPanel/common");
|
|
23
23
|
const inspector_section_collapse_1 = require("./InspectorPanel/inspector-section-collapse");
|
|
24
|
-
const styles_1 = require("./InspectorPanel/styles");
|
|
25
24
|
const border_radius_representation_1 = require("./Timeline/border-radius-representation");
|
|
26
25
|
const save_sequence_prop_1 = require("./Timeline/save-sequence-prop");
|
|
27
26
|
const timeline_asset_link_1 = require("./Timeline/timeline-asset-link");
|
|
@@ -51,10 +50,6 @@ const plusIcon = {
|
|
|
51
50
|
width: 15,
|
|
52
51
|
height: 15,
|
|
53
52
|
};
|
|
54
|
-
const effectsHeaderTitle = {
|
|
55
|
-
...styles_1.sectionHeaderTitle,
|
|
56
|
-
flexShrink: 1,
|
|
57
|
-
};
|
|
58
53
|
const borderRadiusToggleIcon = {
|
|
59
54
|
flexShrink: 0,
|
|
60
55
|
height: 15,
|
|
@@ -293,30 +288,57 @@ const InspectorSequenceSection = ({ sequence, readOnlyStudio, validatedLocation,
|
|
|
293
288
|
return next;
|
|
294
289
|
});
|
|
295
290
|
}, []);
|
|
296
|
-
const
|
|
291
|
+
const isAdditionalSectionExpanded = (0, react_1.useCallback)((sectionId) => {
|
|
292
|
+
var _a;
|
|
293
|
+
const expansionKey = getInspectorSectionExpansionKey({
|
|
294
|
+
nodePathInfo,
|
|
295
|
+
sectionId,
|
|
296
|
+
});
|
|
297
|
+
return (_a = sectionExpansionOverrides[expansionKey]) !== null && _a !== void 0 ? _a : true;
|
|
298
|
+
}, [nodePathInfo, sectionExpansionOverrides]);
|
|
299
|
+
const setAdditionalSectionExpanded = (0, react_1.useCallback)((sectionId, expanded) => {
|
|
300
|
+
const expansionKey = getInspectorSectionExpansionKey({
|
|
301
|
+
nodePathInfo,
|
|
302
|
+
sectionId,
|
|
303
|
+
});
|
|
304
|
+
setSectionExpansionOverrides((previous) => {
|
|
305
|
+
if (previous[expansionKey] === expanded) {
|
|
306
|
+
return previous;
|
|
307
|
+
}
|
|
308
|
+
const next = { ...previous, [expansionKey]: expanded };
|
|
309
|
+
persistInspectorSectionExpansionOverrides(next);
|
|
310
|
+
return next;
|
|
311
|
+
});
|
|
312
|
+
}, [nodePathInfo]);
|
|
313
|
+
const toggleAdditionalSection = (0, react_1.useCallback)((sectionId) => {
|
|
314
|
+
setAdditionalSectionExpanded(sectionId, !isAdditionalSectionExpanded(sectionId));
|
|
315
|
+
}, [isAdditionalSectionExpanded, setAdditionalSectionExpanded]);
|
|
316
|
+
const effectsExpanded = isAdditionalSectionExpanded('effects');
|
|
317
|
+
const { controlRows, effectRows, hasEffects } = (0, react_1.useMemo)(() => {
|
|
297
318
|
const controlNodes = [];
|
|
298
|
-
let
|
|
319
|
+
let root = null;
|
|
299
320
|
for (const node of tree) {
|
|
300
321
|
if (isEffectsRoot(node)) {
|
|
301
|
-
|
|
322
|
+
root = node;
|
|
302
323
|
}
|
|
303
324
|
else {
|
|
304
325
|
controlNodes.push(node);
|
|
305
326
|
}
|
|
306
327
|
}
|
|
307
328
|
return {
|
|
329
|
+
hasEffects: root !== null && root.children.length > 0,
|
|
308
330
|
controlRows: (0, timeline_layout_1.flattenVisibleTreeNodes)({
|
|
309
331
|
nodes: controlNodes,
|
|
310
332
|
getIsExpanded,
|
|
311
333
|
}),
|
|
312
|
-
effectRows:
|
|
334
|
+
effectRows: root === null || !effectsExpanded
|
|
313
335
|
? []
|
|
314
336
|
: (0, timeline_layout_1.flattenVisibleTreeNodes)({
|
|
315
|
-
nodes:
|
|
337
|
+
nodes: root.children,
|
|
316
338
|
getIsExpanded,
|
|
317
339
|
}),
|
|
318
340
|
};
|
|
319
|
-
}, [getIsExpanded, tree]);
|
|
341
|
+
}, [effectsExpanded, getIsExpanded, tree]);
|
|
320
342
|
(0, react_1.useEffect)(() => {
|
|
321
343
|
if (selectedEffectKey === null ||
|
|
322
344
|
inspectorRevealToken === null ||
|
|
@@ -335,6 +357,7 @@ const InspectorSequenceSection = ({ sequence, readOnlyStudio, validatedLocation,
|
|
|
335
357
|
if (targetIndex === -1) {
|
|
336
358
|
return;
|
|
337
359
|
}
|
|
360
|
+
setAdditionalSectionExpanded('effects', true);
|
|
338
361
|
const parentKeys = [];
|
|
339
362
|
let { depth } = rows[targetIndex];
|
|
340
363
|
for (let i = targetIndex - 1; i >= 0 && depth > 0; i--) {
|
|
@@ -354,7 +377,12 @@ const InspectorSequenceSection = ({ sequence, readOnlyStudio, validatedLocation,
|
|
|
354
377
|
persistInspectorCollapsedKeys(next);
|
|
355
378
|
return next;
|
|
356
379
|
});
|
|
357
|
-
}, [
|
|
380
|
+
}, [
|
|
381
|
+
inspectorRevealToken,
|
|
382
|
+
selectedEffectKey,
|
|
383
|
+
setAdditionalSectionExpanded,
|
|
384
|
+
tree,
|
|
385
|
+
]);
|
|
358
386
|
(0, react_1.useEffect)(() => {
|
|
359
387
|
if (inspectorRevealToken === null) {
|
|
360
388
|
return;
|
|
@@ -459,26 +487,6 @@ const InspectorSequenceSection = ({ sequence, readOnlyStudio, validatedLocation,
|
|
|
459
487
|
return next;
|
|
460
488
|
});
|
|
461
489
|
}, [isControlGroupExpanded, nodePathInfo]);
|
|
462
|
-
const isAdditionalSectionExpanded = (0, react_1.useCallback)((sectionId) => {
|
|
463
|
-
var _a;
|
|
464
|
-
const expansionKey = getInspectorSectionExpansionKey({
|
|
465
|
-
nodePathInfo,
|
|
466
|
-
sectionId,
|
|
467
|
-
});
|
|
468
|
-
return (_a = sectionExpansionOverrides[expansionKey]) !== null && _a !== void 0 ? _a : true;
|
|
469
|
-
}, [nodePathInfo, sectionExpansionOverrides]);
|
|
470
|
-
const toggleAdditionalSection = (0, react_1.useCallback)((sectionId) => {
|
|
471
|
-
const expansionKey = getInspectorSectionExpansionKey({
|
|
472
|
-
nodePathInfo,
|
|
473
|
-
sectionId,
|
|
474
|
-
});
|
|
475
|
-
const nextExpanded = !isAdditionalSectionExpanded(sectionId);
|
|
476
|
-
setSectionExpansionOverrides((previous) => {
|
|
477
|
-
const next = { ...previous, [expansionKey]: nextExpanded };
|
|
478
|
-
persistInspectorSectionExpansionOverrides(next);
|
|
479
|
-
return next;
|
|
480
|
-
});
|
|
481
|
-
}, [isAdditionalSectionExpanded, nodePathInfo]);
|
|
482
490
|
const captionsExpanded = isAdditionalSectionExpanded('captions');
|
|
483
491
|
const visibleControlRows = controlGroups.flatMap((group) => {
|
|
484
492
|
return isControlGroupExpanded(group) ? group.rows : [];
|
|
@@ -499,7 +507,7 @@ const InspectorSequenceSection = ({ sequence, readOnlyStudio, validatedLocation,
|
|
|
499
507
|
? runtimeValues.captions
|
|
500
508
|
: []
|
|
501
509
|
: null;
|
|
502
|
-
const showEffectsSection = nodePathInfo.supportsEffects ||
|
|
510
|
+
const showEffectsSection = nodePathInfo.supportsEffects || hasEffects;
|
|
503
511
|
const canAddEffect = nodePathInfo.supportsEffects &&
|
|
504
512
|
previewServerState.type === 'connected' &&
|
|
505
513
|
(0, interactivity_enabled_1.isStudioInteractivityEnabled)() &&
|
|
@@ -508,6 +516,7 @@ const InspectorSequenceSection = ({ sequence, readOnlyStudio, validatedLocation,
|
|
|
508
516
|
if (!canAddEffect || previewServerState.type !== 'connected') {
|
|
509
517
|
return;
|
|
510
518
|
}
|
|
519
|
+
setAdditionalSectionExpanded('effects', true);
|
|
511
520
|
setSelectedModal({
|
|
512
521
|
type: 'add-effect',
|
|
513
522
|
clientId: previewServerState.clientId,
|
|
@@ -518,6 +527,7 @@ const InspectorSequenceSection = ({ sequence, readOnlyStudio, validatedLocation,
|
|
|
518
527
|
canAddEffect,
|
|
519
528
|
nodePathInfo.sequenceSubscriptionKey,
|
|
520
529
|
previewServerState,
|
|
530
|
+
setAdditionalSectionExpanded,
|
|
521
531
|
setSelectedModal,
|
|
522
532
|
validatedLocation.source,
|
|
523
533
|
]);
|
|
@@ -563,8 +573,7 @@ const InspectorSequenceSection = ({ sequence, readOnlyStudio, validatedLocation,
|
|
|
563
573
|
: show3DTransformControls
|
|
564
574
|
? 'Hide 3D transform controls'
|
|
565
575
|
: 'Show 3D transform controls', hoveredColor: show3DTransformControls ? colors_1.BLUE : undefined, unhoveredColor: show3DTransformControls ? colors_1.BLUE : colors_1.LIGHT_TEXT, renderAction: (color) => (jsx_runtime_1.jsx(cube_1.CubeIcon, { color: color, style: transform3DToggleIcon })) }));
|
|
566
|
-
const effectsHeader = (jsx_runtime_1.
|
|
567
|
-
jsx_runtime_1.jsx("div", { style: effectsHeaderTitle, children: "Effects" }), jsx_runtime_1.jsx(InlineAction_1.InlineAction, { variant: null, disabled: !canAddEffect, onClick: onAddEffect, title: canAddEffect ? 'Add effect' : undefined, renderAction: (color) => jsx_runtime_1.jsx(plus_1.Plus, { color: color, style: plusIcon }) })] }));
|
|
576
|
+
const effectsHeader = (jsx_runtime_1.jsx(CollapsibleInspectorSectionHeader_1.CollapsibleInspectorSectionHeader, { action: jsx_runtime_1.jsx(InlineAction_1.InlineAction, { variant: null, disabled: !canAddEffect, onClick: onAddEffect, title: canAddEffect ? 'Add effect' : undefined, renderAction: (color) => jsx_runtime_1.jsx(plus_1.Plus, { color: color, style: plusIcon }) }), expanded: effectsExpanded, label: "Effects", onToggle: hasEffects ? () => toggleAdditionalSection('effects') : null }));
|
|
568
577
|
const renderRow = ({ node, depth }) => {
|
|
569
578
|
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)));
|
|
570
579
|
};
|
|
@@ -28,11 +28,13 @@ const sourceLocationStyle = {
|
|
|
28
28
|
textDecoration: 'none',
|
|
29
29
|
textOverflow: 'ellipsis',
|
|
30
30
|
userSelect: 'none',
|
|
31
|
+
WebkitUserSelect: 'none',
|
|
31
32
|
whiteSpace: 'nowrap',
|
|
32
33
|
width: 'fit-content',
|
|
33
34
|
};
|
|
34
35
|
const quickActionStyle = {
|
|
35
36
|
userSelect: 'none',
|
|
37
|
+
WebkitUserSelect: 'none',
|
|
36
38
|
};
|
|
37
39
|
const sourceLocationLabelStyle = {
|
|
38
40
|
color: 'inherit',
|
|
@@ -43,6 +45,8 @@ const sourceLocationLabelStyle = {
|
|
|
43
45
|
minWidth: 0,
|
|
44
46
|
overflow: 'hidden',
|
|
45
47
|
textOverflow: 'ellipsis',
|
|
48
|
+
userSelect: 'none',
|
|
49
|
+
WebkitUserSelect: 'none',
|
|
46
50
|
whiteSpace: 'nowrap',
|
|
47
51
|
};
|
|
48
52
|
const InspectorSourceLocation = ({ location, canOpen, onOpen, renderIcon, size = 'default' }) => {
|
|
@@ -37,7 +37,9 @@ exports.KeyboardShortcutsSettings = void 0;
|
|
|
37
37
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
38
38
|
const react_1 = __importStar(require("react"));
|
|
39
39
|
const browser_studio_operations_1 = require("../helpers/browser-studio-operations");
|
|
40
|
+
const client_id_1 = require("../helpers/client-id");
|
|
40
41
|
const colors_1 = require("../helpers/colors");
|
|
42
|
+
const settings_tab_availability_1 = require("../helpers/settings-tab-availability");
|
|
41
43
|
const studio_runtime_config_1 = require("../helpers/studio-runtime-config");
|
|
42
44
|
const caret_1 = require("../icons/caret");
|
|
43
45
|
const Checkbox_1 = require("./Checkbox");
|
|
@@ -158,6 +160,12 @@ const KeyboardShortcutsSettings = () => {
|
|
|
158
160
|
var _a;
|
|
159
161
|
const { error: settingsError, revision, studioRuntimeConfig } = (0, SettingsContext_1.useSettings)();
|
|
160
162
|
const isBrowserStudio = (0, browser_studio_operations_1.getBrowserStudioOperations)() !== null;
|
|
163
|
+
const { previewServerState } = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx);
|
|
164
|
+
const canEdit = (0, settings_tab_availability_1.canEditStudioConfig)({
|
|
165
|
+
isBrowserStudio,
|
|
166
|
+
previewServerConnected: previewServerState.type === 'connected',
|
|
167
|
+
readOnlyStudio: window.remotion_isReadOnlyStudio,
|
|
168
|
+
});
|
|
161
169
|
const [enabled, setEnabled] = (0, react_1.useState)(true);
|
|
162
170
|
const [configuredShortcuts, setConfiguredShortcuts] = (0, react_1.useState)({});
|
|
163
171
|
const [enabledEdited, setEnabledEdited] = (0, react_1.useState)(false);
|
|
@@ -212,7 +220,7 @@ const KeyboardShortcutsSettings = () => {
|
|
|
212
220
|
}, [configuredShortcuts, enabled, enabledEdited, shortcutsEdited]);
|
|
213
221
|
const ready = studioRuntimeConfig !== null && syncedRevision === revision;
|
|
214
222
|
(0, use_auto_save_config_1.useAutoSaveConfig)({
|
|
215
|
-
enabled: ready &&
|
|
223
|
+
enabled: ready && canEdit,
|
|
216
224
|
onError: setError,
|
|
217
225
|
ready,
|
|
218
226
|
syncRevision: syncedRevision,
|
|
@@ -221,11 +229,11 @@ const KeyboardShortcutsSettings = () => {
|
|
|
221
229
|
if (studioRuntimeConfig === null) {
|
|
222
230
|
return null;
|
|
223
231
|
}
|
|
224
|
-
return (jsx_runtime_1.jsxs("div", { style: container, children: [
|
|
232
|
+
return (jsx_runtime_1.jsxs("div", { style: container, children: [canEdit ? (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
|
|
225
233
|
jsx_runtime_1.jsx("p", { style: dividerLabel, children: "General" }), jsx_runtime_1.jsxs("label", { style: layout_2.optionRow, children: [
|
|
226
234
|
jsx_runtime_1.jsx("div", { style: layout_2.label, children: "Keyboard shortcuts" }), jsx_runtime_1.jsx("div", { style: layout_2.rightRow, children: jsx_runtime_1.jsx(Checkbox_1.Checkbox, { checked: enabled, name: "keyboard-shortcuts", onChange: onEnabledChange }) })
|
|
227
235
|
] })
|
|
228
|
-
] })), visibleShortcutGroups.map((group, groupIndex) => (jsx_runtime_1.jsxs("div", { children: [
|
|
236
|
+
] })) : null, visibleShortcutGroups.map((group, groupIndex) => (jsx_runtime_1.jsxs("div", { children: [
|
|
229
237
|
jsx_runtime_1.jsx("p", { style: shortcutSectionTitle, children: group.name }), jsx_runtime_1.jsx("div", { role: "list", "aria-label": group.name, children: group.shortcuts.map((shortcut, shortcutIndex) => {
|
|
230
238
|
var _a;
|
|
231
239
|
const configured = shortcut.actionId === null
|
|
@@ -306,7 +314,7 @@ const KeyboardShortcutsSettings = () => {
|
|
|
306
314
|
shortcutIndex === group.shortcuts.length - 1
|
|
307
315
|
? lastShortcutRow
|
|
308
316
|
: shortcutRow, children: [
|
|
309
|
-
jsx_runtime_1.jsx("span", { style: actionName, children: shortcut.action }), shortcut.actionId === null ||
|
|
317
|
+
jsx_runtime_1.jsx("span", { style: actionName, children: shortcut.action }), shortcut.actionId === null || !canEdit ? (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
|
|
310
318
|
jsx_runtime_1.jsx("span", { style: shortcutCell, children: jsx_runtime_1.jsx(ShortcutChords, { values: shortcutValues }) }), jsx_runtime_1.jsx("span", {})
|
|
311
319
|
] })) : (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
|
|
312
320
|
jsx_runtime_1.jsx("span", { style: shortcutCell, children: jsx_runtime_1.jsx("button", { id: shortcutButtonId, type: "button", style: chordButton, "aria-label": `Change shortcut for ${shortcut.action}`, onClick: () => {
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LutPreview = void 0;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const player_1 = require("@remotion/player");
|
|
6
|
+
const react_1 = require("react");
|
|
7
|
+
const colors_1 = require("../helpers/colors");
|
|
8
|
+
const cube_lut_1 = require("../helpers/cube-lut");
|
|
9
|
+
const hoverable_1 = require("../helpers/hoverable");
|
|
10
|
+
const z_index_1 = require("../state/z-index");
|
|
11
|
+
const sampleImage = 'https://remotion.media/transition-bg-blue.jpg';
|
|
12
|
+
const previewWidth = 640;
|
|
13
|
+
const previewHeight = 427;
|
|
14
|
+
const container = {
|
|
15
|
+
padding: 24,
|
|
16
|
+
flex: 1,
|
|
17
|
+
display: 'flex',
|
|
18
|
+
alignItems: 'center',
|
|
19
|
+
justifyContent: 'center',
|
|
20
|
+
fontFamily: 'sans-serif',
|
|
21
|
+
fontSize: 13,
|
|
22
|
+
minHeight: 0,
|
|
23
|
+
};
|
|
24
|
+
const comparison = {
|
|
25
|
+
position: 'relative',
|
|
26
|
+
flexShrink: 0,
|
|
27
|
+
userSelect: 'none',
|
|
28
|
+
WebkitUserSelect: 'none',
|
|
29
|
+
};
|
|
30
|
+
const canvasStyle = {
|
|
31
|
+
display: 'block',
|
|
32
|
+
width: '100%',
|
|
33
|
+
height: 'auto',
|
|
34
|
+
borderRadius: 4,
|
|
35
|
+
userSelect: 'none',
|
|
36
|
+
WebkitUserSelect: 'none',
|
|
37
|
+
};
|
|
38
|
+
const sliderStyle = {
|
|
39
|
+
...(0, hoverable_1.hoverableStyle)({
|
|
40
|
+
idleBackground: colors_1.TRANSPARENT,
|
|
41
|
+
hoverBackground: colors_1.TRANSPARENT,
|
|
42
|
+
idleColor: colors_1.LIGHT_TEXT,
|
|
43
|
+
hoverColor: colors_1.WHITE,
|
|
44
|
+
}),
|
|
45
|
+
position: 'absolute',
|
|
46
|
+
inset: 0,
|
|
47
|
+
borderRadius: 4,
|
|
48
|
+
cursor: 'default',
|
|
49
|
+
touchAction: 'none',
|
|
50
|
+
userSelect: 'none',
|
|
51
|
+
WebkitUserSelect: 'none',
|
|
52
|
+
};
|
|
53
|
+
const dividerStyle = {
|
|
54
|
+
position: 'absolute',
|
|
55
|
+
top: 0,
|
|
56
|
+
bottom: 0,
|
|
57
|
+
width: 2,
|
|
58
|
+
backgroundColor: colors_1.CURRENT_COLOR,
|
|
59
|
+
transform: 'translateX(-50%)',
|
|
60
|
+
pointerEvents: 'none',
|
|
61
|
+
};
|
|
62
|
+
const handleStyle = {
|
|
63
|
+
position: 'absolute',
|
|
64
|
+
top: '50%',
|
|
65
|
+
left: '50%',
|
|
66
|
+
transform: 'translate(-50%, -50%)',
|
|
67
|
+
width: 32,
|
|
68
|
+
height: 32,
|
|
69
|
+
borderRadius: '50%',
|
|
70
|
+
border: `2px solid ${colors_1.CURRENT_COLOR}`,
|
|
71
|
+
backgroundColor: colors_1.BACKGROUND,
|
|
72
|
+
display: 'flex',
|
|
73
|
+
alignItems: 'center',
|
|
74
|
+
justifyContent: 'center',
|
|
75
|
+
};
|
|
76
|
+
const message = {
|
|
77
|
+
color: colors_1.LIGHT_TEXT,
|
|
78
|
+
textAlign: 'center',
|
|
79
|
+
overflowWrap: 'anywhere',
|
|
80
|
+
};
|
|
81
|
+
const LutPreview = ({ src }) => {
|
|
82
|
+
const containerRef = (0, react_1.useRef)(null);
|
|
83
|
+
const beforeRef = (0, react_1.useRef)(null);
|
|
84
|
+
const afterRef = (0, react_1.useRef)(null);
|
|
85
|
+
const [state, setState] = (0, react_1.useState)({ type: 'loading' });
|
|
86
|
+
const [position, setPosition] = (0, react_1.useState)(50);
|
|
87
|
+
const { tabIndex } = (0, z_index_1.useZIndex)();
|
|
88
|
+
const size = player_1.PlayerInternals.useElementSize(containerRef, {
|
|
89
|
+
triggerOnWindowResize: true,
|
|
90
|
+
shouldApplyCssTransforms: true,
|
|
91
|
+
});
|
|
92
|
+
const updatePosition = (0, react_1.useCallback)((event) => {
|
|
93
|
+
const rect = event.currentTarget.getBoundingClientRect();
|
|
94
|
+
setPosition(Math.max(0, Math.min(100, ((event.clientX - rect.left) / rect.width) * 100)));
|
|
95
|
+
}, []);
|
|
96
|
+
const onPointerDown = (0, react_1.useCallback)((event) => {
|
|
97
|
+
if (event.button !== 0 || !event.isPrimary) {
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
event.currentTarget.setPointerCapture(event.pointerId);
|
|
101
|
+
updatePosition(event);
|
|
102
|
+
}, [updatePosition]);
|
|
103
|
+
const onPointerMove = (0, react_1.useCallback)((event) => {
|
|
104
|
+
if (event.currentTarget.hasPointerCapture(event.pointerId)) {
|
|
105
|
+
updatePosition(event);
|
|
106
|
+
}
|
|
107
|
+
}, [updatePosition]);
|
|
108
|
+
const onKeyDown = (0, react_1.useCallback)((event) => {
|
|
109
|
+
const step = event.shiftKey ? 10 : 1;
|
|
110
|
+
if (event.key === 'Home') {
|
|
111
|
+
setPosition(0);
|
|
112
|
+
}
|
|
113
|
+
else if (event.key === 'End') {
|
|
114
|
+
setPosition(100);
|
|
115
|
+
}
|
|
116
|
+
else if (event.key === 'ArrowLeft' || event.key === 'ArrowDown') {
|
|
117
|
+
setPosition((value) => Math.max(0, value - step));
|
|
118
|
+
}
|
|
119
|
+
else if (event.key === 'ArrowRight' || event.key === 'ArrowUp') {
|
|
120
|
+
setPosition((value) => Math.min(100, value + step));
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
event.preventDefault();
|
|
126
|
+
event.stopPropagation();
|
|
127
|
+
}, []);
|
|
128
|
+
(0, react_1.useEffect)(() => {
|
|
129
|
+
const controller = new AbortController();
|
|
130
|
+
const image = new Image();
|
|
131
|
+
image.crossOrigin = 'anonymous';
|
|
132
|
+
setState({ type: 'loading' });
|
|
133
|
+
const load = async () => {
|
|
134
|
+
var _a, _b;
|
|
135
|
+
const response = await fetch(src, { signal: controller.signal });
|
|
136
|
+
if (!response.ok) {
|
|
137
|
+
throw new Error(`Could not load LUT (HTTP ${response.status}).`);
|
|
138
|
+
}
|
|
139
|
+
const lut = (0, cube_lut_1.parseCubeLut)(await response.text());
|
|
140
|
+
if (controller.signal.aborted) {
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
image.src = sampleImage;
|
|
144
|
+
try {
|
|
145
|
+
await image.decode();
|
|
146
|
+
}
|
|
147
|
+
catch (_c) {
|
|
148
|
+
throw new Error('Could not load the LUT sample image. Check your internet connection.');
|
|
149
|
+
}
|
|
150
|
+
if (controller.signal.aborted) {
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
const before = (_a = beforeRef.current) === null || _a === void 0 ? void 0 : _a.getContext('2d');
|
|
154
|
+
const after = (_b = afterRef.current) === null || _b === void 0 ? void 0 : _b.getContext('2d');
|
|
155
|
+
if (!before || !after) {
|
|
156
|
+
throw new Error('Could not create the LUT preview canvas.');
|
|
157
|
+
}
|
|
158
|
+
before.drawImage(image, 0, 0, previewWidth, previewHeight);
|
|
159
|
+
const pixels = before.getImageData(0, 0, previewWidth, previewHeight);
|
|
160
|
+
(0, cube_lut_1.applyCubeLut)(pixels.data, lut);
|
|
161
|
+
after.putImageData(pixels, 0, 0);
|
|
162
|
+
setState({ type: 'loaded' });
|
|
163
|
+
};
|
|
164
|
+
load().catch((error) => {
|
|
165
|
+
if (!controller.signal.aborted) {
|
|
166
|
+
setState({
|
|
167
|
+
type: 'error',
|
|
168
|
+
error: error instanceof Error ? error.message : String(error),
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
});
|
|
172
|
+
return () => {
|
|
173
|
+
controller.abort();
|
|
174
|
+
image.removeAttribute('src');
|
|
175
|
+
};
|
|
176
|
+
}, [src]);
|
|
177
|
+
return (jsx_runtime_1.jsxs("div", { ref: containerRef, style: container, children: [state.type === 'error' ? (jsx_runtime_1.jsxs("div", { style: message, role: "alert", children: ["Could not preview LUT: ", state.error] })) : state.type === 'loading' ? (jsx_runtime_1.jsx("div", { style: message, role: "status", children: "Loading LUT preview..." })) : null, jsx_runtime_1.jsxs("div", { style: {
|
|
178
|
+
...comparison,
|
|
179
|
+
width: size
|
|
180
|
+
? Math.max(0, Math.min(960, size.width - 48, ((size.height - 48) * previewWidth) / previewHeight))
|
|
181
|
+
: 0,
|
|
182
|
+
display: state.type === 'loaded' ? 'block' : 'none',
|
|
183
|
+
}, children: [
|
|
184
|
+
jsx_runtime_1.jsx("canvas", { ref: afterRef, width: previewWidth, height: previewHeight, style: canvasStyle, role: "img", "aria-label": "Sample image after LUT" }), jsx_runtime_1.jsx("div", { style: {
|
|
185
|
+
position: 'absolute',
|
|
186
|
+
inset: 0,
|
|
187
|
+
clipPath: `inset(0 ${100 - position}% 0 0)`,
|
|
188
|
+
}, children: jsx_runtime_1.jsx("canvas", { ref: beforeRef, width: previewWidth, height: previewHeight, style: canvasStyle, role: "img", "aria-label": "Sample image before LUT" }) }), jsx_runtime_1.jsx("div", { role: "slider", "aria-label": "Before and after comparison", "aria-valuemin": 0, "aria-valuemax": 100, "aria-valuenow": Math.round(position), "aria-valuetext": `${Math.round(position)}% before, ${100 - Math.round(position)}% after`, tabIndex: tabIndex, className: `${hoverable_1.HOVERABLE_CLASS_NAME} ${hoverable_1.FOCUS_VISIBLE_ONLY_CLASS_NAME}`, style: sliderStyle, onPointerDown: onPointerDown, onPointerMove: onPointerMove, onKeyDown: onKeyDown, children: jsx_runtime_1.jsx("div", { "aria-hidden": true, style: { ...dividerStyle, left: `${position}%` }, children: jsx_runtime_1.jsx("div", { style: handleStyle, children: jsx_runtime_1.jsx("svg", { width: 20, height: 20, viewBox: "0 0 24 24", fill: "none", children: jsx_runtime_1.jsx("path", { d: "M8 8 4 12l4 4M16 8l4 4-4 4", stroke: colors_1.CURRENT_COLOR, strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round" }) }) }) }) })
|
|
189
|
+
] })
|
|
190
|
+
] }));
|
|
191
|
+
};
|
|
192
|
+
exports.LutPreview = LutPreview;
|
|
@@ -4,7 +4,6 @@ exports.MenuCompositionName = void 0;
|
|
|
4
4
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
5
|
const react_1 = require("react");
|
|
6
6
|
const remotion_1 = require("remotion");
|
|
7
|
-
const client_id_1 = require("../helpers/client-id");
|
|
8
7
|
const colors_1 = require("../helpers/colors");
|
|
9
8
|
const hoverable_1 = require("../helpers/hoverable");
|
|
10
9
|
const noop_1 = require("../helpers/noop");
|
|
@@ -13,7 +12,7 @@ const composition_menu_items_1 = require("./composition-menu-items");
|
|
|
13
12
|
const ContextMenu_1 = require("./ContextMenu");
|
|
14
13
|
const InlineDropdown_1 = require("./InlineDropdown");
|
|
15
14
|
const use_resolved_stack_1 = require("./Timeline/use-resolved-stack");
|
|
16
|
-
const
|
|
15
|
+
const use_open_in_menu_apps_1 = require("./use-open-in-menu-apps");
|
|
17
16
|
const baseStyle = {
|
|
18
17
|
cursor: 'default',
|
|
19
18
|
textDecoration: 'none',
|
|
@@ -66,18 +65,15 @@ const MenuCompositionName = () => {
|
|
|
66
65
|
}, [canvasContent, compositions]);
|
|
67
66
|
const asset = (canvasContent === null || canvasContent === void 0 ? void 0 : canvasContent.type) === 'asset' ? canvasContent.asset : null;
|
|
68
67
|
const { setSelectedModal } = (0, react_1.useContext)(modals_1.SetSelectedModalContext);
|
|
69
|
-
const connectionStatus = (0,
|
|
70
|
-
.previewServerState.type;
|
|
71
|
-
const { defaultEditorId, defaultEditorName } = (0, use_default_editor_info_1.useEditorOpening)(connectionStatus === 'connected');
|
|
68
|
+
const { connectionStatus, openInApps } = (0, use_open_in_menu_apps_1.useOpenInMenuApps)();
|
|
72
69
|
const resolvedLocation = (0, use_resolved_stack_1.useResolvedStack)((_a = composition === null || composition === void 0 ? void 0 : composition.stack) !== null && _a !== void 0 ? _a : null);
|
|
73
70
|
const getContextMenuItems = (0, react_1.useCallback)(() => {
|
|
74
71
|
return (0, composition_menu_items_1.getCompositionContextMenuItems)({
|
|
75
72
|
closeMenu: noop_1.noop,
|
|
76
73
|
composition,
|
|
77
74
|
connectionStatus,
|
|
78
|
-
editorId: defaultEditorId,
|
|
79
|
-
editorName: defaultEditorName,
|
|
80
75
|
includeCompositionManagementItems: true,
|
|
76
|
+
openInApps,
|
|
81
77
|
resolvedLocation,
|
|
82
78
|
setSelectedModal,
|
|
83
79
|
readOnlyStudio: window.remotion_isReadOnlyStudio,
|
|
@@ -85,8 +81,7 @@ const MenuCompositionName = () => {
|
|
|
85
81
|
}, [
|
|
86
82
|
composition,
|
|
87
83
|
connectionStatus,
|
|
88
|
-
|
|
89
|
-
defaultEditorName,
|
|
84
|
+
openInApps,
|
|
90
85
|
resolvedLocation,
|
|
91
86
|
setSelectedModal,
|
|
92
87
|
]);
|