@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
|
@@ -36,6 +36,7 @@ const EditorGuides_1 = __importDefault(require("./EditorGuides"));
|
|
|
36
36
|
const EditorRuler_1 = require("./EditorRuler");
|
|
37
37
|
const use_is_ruler_visible_1 = require("./EditorRuler/use-is-ruler-visible");
|
|
38
38
|
const effect_drag_and_drop_1 = require("./effect-drag-and-drop");
|
|
39
|
+
const element_drag_and_drop_1 = require("./element-drag-and-drop");
|
|
39
40
|
const element_install_api_1 = require("./element-install-api");
|
|
40
41
|
const element_install_request_1 = require("./element-install-request");
|
|
41
42
|
const handle_drop_1 = require("./handle-drop");
|
|
@@ -44,6 +45,7 @@ const layout_1 = require("./layout");
|
|
|
44
45
|
const NotificationCenter_1 = require("./Notifications/NotificationCenter");
|
|
45
46
|
const Preview_1 = require("./Preview");
|
|
46
47
|
const ResetZoomButton_1 = require("./ResetZoomButton");
|
|
48
|
+
const SelectedOutlineSnapIndicators_1 = require("./SelectedOutlineSnapIndicators");
|
|
47
49
|
const SvgImportDialog_1 = require("./SvgImportDialog");
|
|
48
50
|
const imperative_state_1 = require("./Timeline/imperative-state");
|
|
49
51
|
const use_resolved_stack_1 = require("./Timeline/use-resolved-stack");
|
|
@@ -142,7 +144,7 @@ const Canvas = ({ canvasContent, size }) => {
|
|
|
142
144
|
const { setSelectedModal } = (0, react_1.useContext)(modals_1.SetSelectedModalContext);
|
|
143
145
|
const config = remotion_1.Internals.useUnsafeVideoConfig();
|
|
144
146
|
const areRulersVisible = (0, use_is_ruler_visible_1.useIsRulerVisible)();
|
|
145
|
-
const { editorShowGuides } = (0, react_1.useContext)(editor_guides_1.EditorShowGuidesContext);
|
|
147
|
+
const { editorShowGuides, guidesList } = (0, react_1.useContext)(editor_guides_1.EditorShowGuidesContext);
|
|
146
148
|
const { editorSnapping } = (0, react_1.useContext)(editor_snapping_1.EditorSnappingContext);
|
|
147
149
|
const { compositions } = (0, react_1.useContext)(remotion_1.Internals.CompositionManager);
|
|
148
150
|
const { setCurrentAssetMetadata } = (0, react_1.useContext)(remotion_1.Internals.CompositionSetters);
|
|
@@ -155,7 +157,6 @@ const Canvas = ({ canvasContent, size }) => {
|
|
|
155
157
|
const [pendingElementInstallRequests, setPendingElementInstallRequests] = (0, react_1.useState)([]);
|
|
156
158
|
const [activeElementInstallRequest, setActiveElementInstallRequest] = (0, react_1.useState)(null);
|
|
157
159
|
const lastFocusedAtRef = (0, react_1.useRef)(typeof document === 'undefined' || document.hasFocus() ? Date.now() : null);
|
|
158
|
-
const unsupportedDropNotifiedRef = (0, react_1.useRef)(false);
|
|
159
160
|
const [assetResolution, setAssetResolution] = (0, react_1.useState)(null);
|
|
160
161
|
const metadataRequestRef = (0, react_1.useRef)(0);
|
|
161
162
|
const currentCompositionId = canvasContent.type === 'composition' ? canvasContent.compositionId : null;
|
|
@@ -844,17 +845,14 @@ const Canvas = ({ canvasContent, size }) => {
|
|
|
844
845
|
var _a;
|
|
845
846
|
var _b;
|
|
846
847
|
if (!(0, drop_handler_data_1.isSupportedDropEvent)(event) || !isDragEventInsideCanvas(event)) {
|
|
847
|
-
unsupportedDropNotifiedRef.current = false;
|
|
848
848
|
setCompositionDropPreview(null);
|
|
849
849
|
return;
|
|
850
850
|
}
|
|
851
851
|
const mayBeCanvasCapture = (0, drop_handler_data_1.isFileDragEvent)(event) && !window.remotion_isReadOnlyStudio;
|
|
852
|
-
const
|
|
853
|
-
|
|
854
|
-
!
|
|
855
|
-
(0,
|
|
856
|
-
}
|
|
857
|
-
unsupportedDropNotifiedRef.current = shouldNotifyAboutUnsupportedDrop;
|
|
852
|
+
const canDropElementIntoNewComposition = cannotAddSequence &&
|
|
853
|
+
canReceiveElementInstallRequest &&
|
|
854
|
+
!isAddingAsset &&
|
|
855
|
+
(0, element_drag_and_drop_1.hasElementDragType)(event.dataTransfer);
|
|
858
856
|
if (!canDropAssets && !cannotAddSequence && !mayBeCanvasCapture) {
|
|
859
857
|
setCompositionDropPreview(null);
|
|
860
858
|
return;
|
|
@@ -862,7 +860,11 @@ const Canvas = ({ canvasContent, size }) => {
|
|
|
862
860
|
event.preventDefault();
|
|
863
861
|
if (event.dataTransfer) {
|
|
864
862
|
event.dataTransfer.dropEffect =
|
|
865
|
-
canDropAssets ||
|
|
863
|
+
canDropAssets ||
|
|
864
|
+
canDropElementIntoNewComposition ||
|
|
865
|
+
mayBeCanvasCapture
|
|
866
|
+
? 'copy'
|
|
867
|
+
: 'none';
|
|
866
868
|
}
|
|
867
869
|
if (!canDropAssets ||
|
|
868
870
|
contentDimensions === null ||
|
|
@@ -872,36 +874,46 @@ const Canvas = ({ canvasContent, size }) => {
|
|
|
872
874
|
}
|
|
873
875
|
const metadata = getCanvasDragPreviewMetadata((_b = (_a = event.dataTransfer) === null || _a === void 0 ? void 0 : _a.types) !== null && _b !== void 0 ? _b : []);
|
|
874
876
|
if (((metadata === null || metadata === void 0 ? void 0 : metadata.type) !== 'composition' && (metadata === null || metadata === void 0 ? void 0 : metadata.type) !== 'element') ||
|
|
875
|
-
metadata.
|
|
876
|
-
|
|
877
|
+
(metadata.type === 'composition' &&
|
|
878
|
+
(metadata.width === undefined || metadata.height === undefined))) {
|
|
877
879
|
setCompositionDropPreview(null);
|
|
878
880
|
return;
|
|
879
881
|
}
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
882
|
+
const isFullscreenElement = metadata.type === 'element' &&
|
|
883
|
+
(metadata.width === undefined || metadata.height === undefined);
|
|
884
|
+
let dropPosition = isFullscreenElement
|
|
885
|
+
? {
|
|
886
|
+
centerX: contentDimensions.width / 2,
|
|
887
|
+
centerY: contentDimensions.height / 2,
|
|
888
|
+
}
|
|
889
|
+
: getDropPosition({
|
|
890
|
+
addFitPadding,
|
|
891
|
+
clientX: event.clientX,
|
|
892
|
+
clientY: event.clientY,
|
|
893
|
+
contentDimensions,
|
|
894
|
+
unbounded: metadata.type === 'composition',
|
|
895
|
+
previewSize,
|
|
896
|
+
size,
|
|
897
|
+
});
|
|
889
898
|
if (dropPosition === null) {
|
|
890
899
|
setCompositionDropPreview(null);
|
|
891
900
|
return;
|
|
892
901
|
}
|
|
893
|
-
const compositionDimensions =
|
|
894
|
-
|
|
895
|
-
height: metadata.height
|
|
896
|
-
|
|
897
|
-
if (
|
|
902
|
+
const compositionDimensions = metadata.width === undefined || metadata.height === undefined
|
|
903
|
+
? contentDimensions
|
|
904
|
+
: { width: metadata.width, height: metadata.height };
|
|
905
|
+
let snapPoints = [];
|
|
906
|
+
if (!isFullscreenElement &&
|
|
898
907
|
editorSnapping &&
|
|
899
908
|
!event.metaKey &&
|
|
900
909
|
!event.ctrlKey) {
|
|
901
|
-
|
|
910
|
+
const snapped = (0, composition_drop_preview_1.snapCompositionDropPosition)({
|
|
902
911
|
compositionDimensions,
|
|
903
912
|
destinationDimensions: contentDimensions,
|
|
904
913
|
dropPosition,
|
|
914
|
+
guides: editorShowGuides
|
|
915
|
+
? guidesList.filter((guide) => guide.compositionId === currentCompositionId)
|
|
916
|
+
: [],
|
|
905
917
|
scale: calculateCanvasScale({
|
|
906
918
|
addFitPadding,
|
|
907
919
|
canvasSize: size,
|
|
@@ -910,6 +922,8 @@ const Canvas = ({ canvasContent, size }) => {
|
|
|
910
922
|
previewSize: previewSize.size,
|
|
911
923
|
}),
|
|
912
924
|
});
|
|
925
|
+
dropPosition = snapped.dropPosition;
|
|
926
|
+
snapPoints = snapped.snapPoints;
|
|
913
927
|
}
|
|
914
928
|
setCompositionDropPreview((currentPreview) => {
|
|
915
929
|
if ((currentPreview === null || currentPreview === void 0 ? void 0 : currentPreview.compositionDimensions.width) ===
|
|
@@ -917,20 +931,29 @@ const Canvas = ({ canvasContent, size }) => {
|
|
|
917
931
|
currentPreview.compositionDimensions.height ===
|
|
918
932
|
compositionDimensions.height &&
|
|
919
933
|
currentPreview.dropPosition.centerX === dropPosition.centerX &&
|
|
920
|
-
currentPreview.dropPosition.centerY === dropPosition.centerY
|
|
934
|
+
currentPreview.dropPosition.centerY === dropPosition.centerY &&
|
|
935
|
+
currentPreview.snapPoints.length === snapPoints.length &&
|
|
936
|
+
snapPoints.every((snapPoint, index) => {
|
|
937
|
+
const currentPoint = currentPreview.snapPoints[index];
|
|
938
|
+
return (currentPoint.edge === snapPoint.edge &&
|
|
939
|
+
currentPoint.target.type === snapPoint.target.type &&
|
|
940
|
+
currentPoint.target.position === snapPoint.target.position);
|
|
941
|
+
})) {
|
|
921
942
|
return currentPreview;
|
|
922
943
|
}
|
|
923
|
-
return {
|
|
924
|
-
compositionDimensions,
|
|
925
|
-
dropPosition,
|
|
926
|
-
};
|
|
944
|
+
return { compositionDimensions, dropPosition, snapPoints };
|
|
927
945
|
});
|
|
928
946
|
}, [
|
|
929
947
|
addFitPadding,
|
|
930
948
|
canDropAssets,
|
|
931
949
|
cannotAddSequence,
|
|
950
|
+
canReceiveElementInstallRequest,
|
|
932
951
|
contentDimensions,
|
|
952
|
+
currentCompositionId,
|
|
953
|
+
editorShowGuides,
|
|
933
954
|
editorSnapping,
|
|
955
|
+
guidesList,
|
|
956
|
+
isAddingAsset,
|
|
934
957
|
previewSize,
|
|
935
958
|
size,
|
|
936
959
|
]);
|
|
@@ -947,18 +970,14 @@ const Canvas = ({ canvasContent, size }) => {
|
|
|
947
970
|
return;
|
|
948
971
|
}
|
|
949
972
|
}
|
|
950
|
-
unsupportedDropNotifiedRef.current = false;
|
|
951
973
|
setCompositionDropPreview(null);
|
|
952
974
|
}, []);
|
|
953
975
|
const onDragEnd = (0, react_1.useCallback)(() => {
|
|
954
|
-
unsupportedDropNotifiedRef.current = false;
|
|
955
976
|
setCompositionDropPreview(null);
|
|
956
977
|
}, []);
|
|
957
978
|
const onDrop = (0, react_1.useCallback)(async (event) => {
|
|
958
979
|
var _a, _b;
|
|
959
980
|
var _c, _d;
|
|
960
|
-
const unsupportedDropWasNotified = unsupportedDropNotifiedRef.current;
|
|
961
|
-
unsupportedDropNotifiedRef.current = false;
|
|
962
981
|
setCompositionDropPreview(null);
|
|
963
982
|
if (!(0, drop_handler_data_1.isSupportedDropEvent)(event) || !isDragEventInsideCanvas(event)) {
|
|
964
983
|
return;
|
|
@@ -984,15 +1003,17 @@ const Canvas = ({ canvasContent, size }) => {
|
|
|
984
1003
|
}
|
|
985
1004
|
}
|
|
986
1005
|
}
|
|
987
|
-
|
|
1006
|
+
const canDropElementIntoNewComposition = cannotAddSequence &&
|
|
1007
|
+
canReceiveElementInstallRequest &&
|
|
1008
|
+
!isAddingAsset &&
|
|
1009
|
+
(0, element_drag_and_drop_1.getElementDragData)(event.dataTransfer) !== null;
|
|
1010
|
+
if (cannotAddSequence && !canDropElementIntoNewComposition) {
|
|
988
1011
|
event.preventDefault();
|
|
989
1012
|
event.stopPropagation();
|
|
990
|
-
|
|
991
|
-
(0, NotificationCenter_1.showCannotAddSequenceDropNotification)();
|
|
992
|
-
}
|
|
1013
|
+
(0, NotificationCenter_1.showNotification)('Cannot insert this item: This composition component cannot accept a new <Sequence>.', 3000);
|
|
993
1014
|
return;
|
|
994
1015
|
}
|
|
995
|
-
if (!canDropAssets ||
|
|
1016
|
+
if ((!canDropAssets && !canDropElementIntoNewComposition) ||
|
|
996
1017
|
compositionFile === null ||
|
|
997
1018
|
currentCompositionId === null ||
|
|
998
1019
|
config === null) {
|
|
@@ -1019,7 +1040,7 @@ const Canvas = ({ canvasContent, size }) => {
|
|
|
1019
1040
|
size,
|
|
1020
1041
|
});
|
|
1021
1042
|
if (dropPosition !== null &&
|
|
1022
|
-
|
|
1043
|
+
((metadata === null || metadata === void 0 ? void 0 : metadata.type) === 'composition' || (metadata === null || metadata === void 0 ? void 0 : metadata.type) === 'element') &&
|
|
1023
1044
|
metadata.width !== undefined &&
|
|
1024
1045
|
metadata.height !== undefined &&
|
|
1025
1046
|
contentDimensions !== null &&
|
|
@@ -1034,6 +1055,9 @@ const Canvas = ({ canvasContent, size }) => {
|
|
|
1034
1055
|
},
|
|
1035
1056
|
destinationDimensions: contentDimensions,
|
|
1036
1057
|
dropPosition,
|
|
1058
|
+
guides: editorShowGuides
|
|
1059
|
+
? guidesList.filter((guide) => guide.compositionId === currentCompositionId)
|
|
1060
|
+
: [],
|
|
1037
1061
|
scale: calculateCanvasScale({
|
|
1038
1062
|
addFitPadding,
|
|
1039
1063
|
canvasSize: size,
|
|
@@ -1041,7 +1065,7 @@ const Canvas = ({ canvasContent, size }) => {
|
|
|
1041
1065
|
compositionWidth: contentDimensions.width,
|
|
1042
1066
|
previewSize: previewSize.size,
|
|
1043
1067
|
}),
|
|
1044
|
-
});
|
|
1068
|
+
}).dropPosition;
|
|
1045
1069
|
}
|
|
1046
1070
|
await (0, handle_drop_1.handleDrop)({
|
|
1047
1071
|
chooseSvgImportMode,
|
|
@@ -1063,12 +1087,16 @@ const Canvas = ({ canvasContent, size }) => {
|
|
|
1063
1087
|
addFitPadding,
|
|
1064
1088
|
canDropAssets,
|
|
1065
1089
|
cannotAddSequence,
|
|
1090
|
+
canReceiveElementInstallRequest,
|
|
1066
1091
|
chooseSvgImportMode,
|
|
1067
1092
|
compositionFile,
|
|
1068
1093
|
config,
|
|
1069
1094
|
contentDimensions,
|
|
1070
1095
|
currentCompositionId,
|
|
1096
|
+
editorShowGuides,
|
|
1071
1097
|
editorSnapping,
|
|
1098
|
+
guidesList,
|
|
1099
|
+
isAddingAsset,
|
|
1072
1100
|
previewSize,
|
|
1073
1101
|
size,
|
|
1074
1102
|
setSelectedModal,
|
|
@@ -1210,7 +1238,44 @@ const Canvas = ({ canvasContent, size }) => {
|
|
|
1210
1238
|
zIndex: 1,
|
|
1211
1239
|
};
|
|
1212
1240
|
}, [compositionDropPreview, contentDimensions, previewSize, size]);
|
|
1241
|
+
const compositionDropSnapLines = (0, react_1.useMemo)(() => {
|
|
1242
|
+
if (compositionDropPreview === null ||
|
|
1243
|
+
compositionDropPreview.snapPoints.length === 0 ||
|
|
1244
|
+
contentDimensions === null ||
|
|
1245
|
+
contentDimensions === 'none') {
|
|
1246
|
+
return null;
|
|
1247
|
+
}
|
|
1248
|
+
const scale = calculateCanvasScale({
|
|
1249
|
+
addFitPadding,
|
|
1250
|
+
canvasSize: size,
|
|
1251
|
+
compositionHeight: contentDimensions.height,
|
|
1252
|
+
compositionWidth: contentDimensions.width,
|
|
1253
|
+
previewSize: previewSize.size,
|
|
1254
|
+
});
|
|
1255
|
+
const left = size.width / 2 -
|
|
1256
|
+
(contentDimensions.width * scale) / 2 -
|
|
1257
|
+
previewSize.translation.x;
|
|
1258
|
+
const top = size.height / 2 -
|
|
1259
|
+
(contentDimensions.height * scale) / 2 -
|
|
1260
|
+
previewSize.translation.y;
|
|
1261
|
+
return (jsx_runtime_1.jsx("svg", { "aria-hidden": "true", "data-testid": "canvas-drop-snap-lines", style: {
|
|
1262
|
+
position: 'absolute',
|
|
1263
|
+
left,
|
|
1264
|
+
top,
|
|
1265
|
+
width: contentDimensions.width * scale,
|
|
1266
|
+
height: contentDimensions.height * scale,
|
|
1267
|
+
pointerEvents: 'none',
|
|
1268
|
+
overflow: 'visible',
|
|
1269
|
+
zIndex: 2,
|
|
1270
|
+
}, children: jsx_runtime_1.jsx(SelectedOutlineSnapIndicators_1.SelectedOutlineSnapLines, { compositionHeight: contentDimensions.height, compositionWidth: contentDimensions.width, scale: scale, snapPoints: compositionDropPreview.snapPoints }) }));
|
|
1271
|
+
}, [
|
|
1272
|
+
addFitPadding,
|
|
1273
|
+
compositionDropPreview,
|
|
1274
|
+
contentDimensions,
|
|
1275
|
+
previewSize,
|
|
1276
|
+
size,
|
|
1277
|
+
]);
|
|
1213
1278
|
return (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
|
|
1214
|
-
jsx_runtime_1.jsxs("div", { ref: canvas_ref_1.canvasRef, style: getContainerStyle(editorZoomGestures), children: [size ? (jsx_runtime_1.jsx(Preview_1.VideoPreview, { canvasContent: canvasContent, contentDimensions: contentDimensions, canvasSize: size, assetMetadata: assetResolution, onRetryAssetMetadata: fetchMetadata })) : null, compositionDropPreviewStyle === null ? null : (jsx_runtime_1.jsx("div", { className: "css-reset", "data-testid": "composition-drop-preview", style: compositionDropPreviewStyle })), isFit ? null : (jsx_runtime_1.jsx("div", { style: resetZoom, className: "css-reset", children: jsx_runtime_1.jsx(ResetZoomButton_1.ResetZoomButton, { onClick: onReset }) })), editorShowGuides && canvasContent.type === 'composition' && (jsx_runtime_1.jsx(EditorGuides_1.default, { canvasSize: size, contentDimensions: contentDimensions, assetMetadata: assetResolution }))] }), areRulersVisible && (jsx_runtime_1.jsx(EditorRuler_1.EditorRulers, { canCreateGuides: canvasContent.type === 'composition', contentDimensions: contentDimensions, canvasSize: size, assetMetadata: assetResolution, containerRef: canvas_ref_1.canvasRef }))] }));
|
|
1279
|
+
jsx_runtime_1.jsxs("div", { ref: canvas_ref_1.canvasRef, style: getContainerStyle(editorZoomGestures), children: [size ? (jsx_runtime_1.jsx(Preview_1.VideoPreview, { canvasContent: canvasContent, contentDimensions: contentDimensions, canvasSize: size, assetMetadata: assetResolution, onRetryAssetMetadata: fetchMetadata })) : null, compositionDropPreviewStyle === null ? null : (jsx_runtime_1.jsx("div", { className: "css-reset", "data-testid": "composition-drop-preview", style: compositionDropPreviewStyle })), compositionDropSnapLines, isFit ? null : (jsx_runtime_1.jsx("div", { style: resetZoom, className: "css-reset", children: jsx_runtime_1.jsx(ResetZoomButton_1.ResetZoomButton, { onClick: onReset }) })), editorShowGuides && canvasContent.type === 'composition' && (jsx_runtime_1.jsx(EditorGuides_1.default, { canvasSize: size, contentDimensions: contentDimensions, assetMetadata: assetResolution }))] }), areRulersVisible && (jsx_runtime_1.jsx(EditorRuler_1.EditorRulers, { canCreateGuides: canvasContent.type === 'composition', contentDimensions: contentDimensions, canvasSize: size, assetMetadata: assetResolution, containerRef: canvas_ref_1.canvasRef }))] }));
|
|
1215
1280
|
};
|
|
1216
1281
|
exports.Canvas = Canvas;
|
|
@@ -5,6 +5,7 @@ const react_1 = require("react");
|
|
|
5
5
|
const modals_1 = require("../state/modals");
|
|
6
6
|
const canvas_capture_drop_1 = require("./canvas-capture-drop");
|
|
7
7
|
const drop_handler_data_1 = require("./drop-handler-data");
|
|
8
|
+
const canvasCaptureMessagePrefix = 'remotion-canvas-capture';
|
|
8
9
|
const CanvasCaptureDropHandler = ({ readOnlyStudio }) => {
|
|
9
10
|
const { setSelectedModal } = (0, react_1.useContext)(modals_1.SetSelectedModalContext);
|
|
10
11
|
const onDragOver = (0, react_1.useCallback)((event) => {
|
|
@@ -37,6 +38,68 @@ const CanvasCaptureDropHandler = ({ readOnlyStudio }) => {
|
|
|
37
38
|
document.removeEventListener('drop', onDrop);
|
|
38
39
|
};
|
|
39
40
|
}, [onDragOver, onDrop]);
|
|
41
|
+
(0, react_1.useEffect)(() => {
|
|
42
|
+
if (readOnlyStudio) {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
const handoffWindow = window.remotion_browserStudio && window.parent !== window
|
|
46
|
+
? window.parent
|
|
47
|
+
: window;
|
|
48
|
+
const captureId = new URL(handoffWindow.location.href).searchParams.get('canvas-capture');
|
|
49
|
+
if (!captureId) {
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
let incoming = null;
|
|
53
|
+
const onMessage = async (event) => {
|
|
54
|
+
if (event.source !== handoffWindow ||
|
|
55
|
+
event.origin !== handoffWindow.location.origin ||
|
|
56
|
+
typeof event.data !== 'object' ||
|
|
57
|
+
event.data === null ||
|
|
58
|
+
event.data.captureId !== captureId) {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
if (event.data.type === `${canvasCaptureMessagePrefix}-start` &&
|
|
62
|
+
typeof event.data.filename === 'string' &&
|
|
63
|
+
typeof event.data.mimeType === 'string' &&
|
|
64
|
+
Number.isSafeInteger(event.data.chunks) &&
|
|
65
|
+
event.data.chunks >= 0) {
|
|
66
|
+
incoming = {
|
|
67
|
+
captureId,
|
|
68
|
+
filename: event.data.filename,
|
|
69
|
+
mimeType: event.data.mimeType,
|
|
70
|
+
chunks: Array.from({ length: event.data.chunks }, () => null),
|
|
71
|
+
};
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
if (event.data.type === `${canvasCaptureMessagePrefix}-chunk` &&
|
|
75
|
+
incoming &&
|
|
76
|
+
Number.isSafeInteger(event.data.index) &&
|
|
77
|
+
event.data.index >= 0 &&
|
|
78
|
+
event.data.index < incoming.chunks.length &&
|
|
79
|
+
typeof event.data.data === 'string') {
|
|
80
|
+
const binary = atob(event.data.data);
|
|
81
|
+
const buffer = new ArrayBuffer(binary.length);
|
|
82
|
+
const bytes = new Uint8Array(buffer);
|
|
83
|
+
for (let index = 0; index < binary.length; index++) {
|
|
84
|
+
bytes[index] = binary.charCodeAt(index);
|
|
85
|
+
}
|
|
86
|
+
incoming.chunks[event.data.index] = buffer;
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
if (event.data.type === `${canvasCaptureMessagePrefix}-complete` &&
|
|
90
|
+
incoming &&
|
|
91
|
+
incoming.chunks.every((chunk) => chunk !== null)) {
|
|
92
|
+
const file = new File(incoming.chunks, incoming.filename, {
|
|
93
|
+
type: incoming.mimeType,
|
|
94
|
+
});
|
|
95
|
+
incoming = null;
|
|
96
|
+
await (0, canvas_capture_drop_1.handleCanvasCaptureDrop)({ files: [file], setSelectedModal });
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
handoffWindow.addEventListener('message', onMessage);
|
|
100
|
+
handoffWindow.postMessage({ type: `${canvasCaptureMessagePrefix}-ready`, captureId }, handoffWindow.location.origin);
|
|
101
|
+
return () => handoffWindow.removeEventListener('message', onMessage);
|
|
102
|
+
}, [readOnlyStudio, setSelectedModal]);
|
|
40
103
|
return null;
|
|
41
104
|
};
|
|
42
105
|
exports.CanvasCaptureDropHandler = CanvasCaptureDropHandler;
|
|
@@ -6,6 +6,7 @@ const react_1 = require("react");
|
|
|
6
6
|
const remotion_1 = require("remotion");
|
|
7
7
|
const ErrorLoader_1 = require("../error-overlay/remotion-overlay/ErrorLoader");
|
|
8
8
|
const colors_1 = require("../helpers/colors");
|
|
9
|
+
const url_state_1 = require("../helpers/url-state");
|
|
9
10
|
const composition_list_1 = require("../state/composition-list");
|
|
10
11
|
const timeline_zoom_1 = require("../state/timeline-zoom");
|
|
11
12
|
const Canvas_1 = require("./Canvas");
|
|
@@ -26,6 +27,10 @@ const container = {
|
|
|
26
27
|
backgroundColor: colors_1.BACKGROUND,
|
|
27
28
|
flexDirection: 'column',
|
|
28
29
|
};
|
|
30
|
+
const welcomeLabel = {
|
|
31
|
+
...RunningCalculateMetadata_1.loaderLabel,
|
|
32
|
+
textAlign: 'center',
|
|
33
|
+
};
|
|
29
34
|
const CanvasOrLoading = ({ size }) => {
|
|
30
35
|
const resolved = remotion_1.Internals.useResolvedVideoConfig(null);
|
|
31
36
|
const { setZoom } = (0, react_1.useContext)(timeline_zoom_1.TimelineZoomCtx);
|
|
@@ -53,8 +58,11 @@ const CanvasOrLoading = ({ size }) => {
|
|
|
53
58
|
if (compositionListState !== 'ready') {
|
|
54
59
|
return null;
|
|
55
60
|
}
|
|
56
|
-
const
|
|
57
|
-
|
|
61
|
+
const route = (0, url_state_1.getRoute)();
|
|
62
|
+
if (route === '') {
|
|
63
|
+
return (jsx_runtime_1.jsx("div", { style: container, className: "css-reset", children: jsx_runtime_1.jsx("div", { style: welcomeLabel, children: "Select a composition to get started." }) }));
|
|
64
|
+
}
|
|
65
|
+
return (jsx_runtime_1.jsx("div", { style: container, className: "css-reset", children: jsx_runtime_1.jsxs("div", { style: RunningCalculateMetadata_1.loaderLabel, children: ["Composition with ID ", decodeURIComponent(route.substring(1)), " not found."] }) }));
|
|
58
66
|
}
|
|
59
67
|
const content = (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
|
|
60
68
|
jsx_runtime_1.jsx(ZoomPersistor_1.ZoomPersistor, {}), jsx_runtime_1.jsx(Canvas_1.Canvas, { size: size, canvasContent: canvasContent }), (resolved === null || resolved === void 0 ? void 0 : resolved.type) === 'success-and-refreshing' ? (jsx_runtime_1.jsx(RefreshCompositionOverlay_1.RefreshCompositionOverlay, {})) : null] }));
|
|
@@ -60,6 +60,8 @@ const readOnlyStatus = {
|
|
|
60
60
|
};
|
|
61
61
|
const CaptionInspector = ({ captions, expanded, onTextChange, onTextSave, onTextCancel, onReplaceCaptions, onToggle, readOnly, readOnlyTitle, }) => {
|
|
62
62
|
const fileInput = (0, react_1.useRef)(null);
|
|
63
|
+
const expansionRef = (0, react_1.useRef)({ expanded, onToggle });
|
|
64
|
+
expansionRef.current = { expanded, onToggle };
|
|
63
65
|
const [isImporting, setIsImporting] = (0, react_1.useState)(false);
|
|
64
66
|
const { setSelectedModal } = react_1.default.useContext(modals_1.SetSelectedModalContext);
|
|
65
67
|
const importCaptions = (0, react_1.useCallback)(async ({ fileName, contents, }) => {
|
|
@@ -68,10 +70,14 @@ const CaptionInspector = ({ captions, expanded, onTextChange, onTextSave, onText
|
|
|
68
70
|
}
|
|
69
71
|
setIsImporting(true);
|
|
70
72
|
try {
|
|
71
|
-
|
|
73
|
+
const imported = (0, parse_caption_file_1.parseCaptionFile)({
|
|
72
74
|
fileName,
|
|
73
75
|
contents: await contents,
|
|
74
|
-
})
|
|
76
|
+
});
|
|
77
|
+
onReplaceCaptions(imported);
|
|
78
|
+
if (imported.length > 0 && !expansionRef.current.expanded) {
|
|
79
|
+
expansionRef.current.onToggle();
|
|
80
|
+
}
|
|
75
81
|
}
|
|
76
82
|
catch (error) {
|
|
77
83
|
(0, NotificationCenter_1.showNotification)(`Could not import ${fileName}: ${error instanceof Error ? error.message : String(error)}`, 5000);
|
|
@@ -112,6 +118,6 @@ const CaptionInspector = ({ captions, expanded, onTextChange, onTextSave, onText
|
|
|
112
118
|
}, [importCaptions, setSelectedModal]);
|
|
113
119
|
return (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
|
|
114
120
|
jsx_runtime_1.jsx(common_1.InspectorSectionHeader, { children: jsx_runtime_1.jsx(CollapsibleInspectorSectionHeader_1.CollapsibleInspectorSectionHeader, { action: jsx_runtime_1.jsxs("div", { style: styles_1.sectionHeaderEnd, children: [onReplaceCaptions === null ? null : (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
|
|
115
|
-
jsx_runtime_1.jsx("input", { ref: fileInput, accept: ".json", "aria-label": "Import captions file", hidden: true, onChange: onFileSelected, type: "file" }), jsx_runtime_1.jsx(InlineAction_1.InlineAction, { "aria-label": "Import captions", className: hoverable_1.FOCUS_VISIBLE_ONLY_CLASS_NAME, disabled: isImporting, onClick: openCaptionSelection, renderAction: (color) => (jsx_runtime_1.jsx(upload_1.UploadIcon, { "aria-hidden": "true", color: color, focusable: "false", style: { height: 14, width: 14 } })), title: importTooltip, variant: null })] })), readOnly ? (jsx_runtime_1.jsx("div", { style: readOnlyStatus, title: readOnlyTitle !== null && readOnlyTitle !== void 0 ? readOnlyTitle : undefined, children: "Read only" })) : null] }), expanded: expanded, label: "Captions", onToggle: onToggle }) }), expanded ? (jsx_runtime_1.jsx(CaptionTextEditor_1.CaptionTextEditor, { captions: captions, onChange: onTextChange, onSave: onTextSave, onCancel: onTextCancel, readOnly: readOnly })) : null] }));
|
|
121
|
+
jsx_runtime_1.jsx("input", { ref: fileInput, accept: ".json", "aria-label": "Import captions file", hidden: true, onChange: onFileSelected, type: "file" }), jsx_runtime_1.jsx(InlineAction_1.InlineAction, { "aria-label": "Import captions", className: hoverable_1.FOCUS_VISIBLE_ONLY_CLASS_NAME, disabled: isImporting, onClick: openCaptionSelection, renderAction: (color) => (jsx_runtime_1.jsx(upload_1.UploadIcon, { "aria-hidden": "true", color: color, focusable: "false", style: { height: 14, width: 14 } })), title: importTooltip, variant: null })] })), readOnly ? (jsx_runtime_1.jsx("div", { style: readOnlyStatus, title: readOnlyTitle !== null && readOnlyTitle !== void 0 ? readOnlyTitle : undefined, children: "Read only" })) : null] }), expanded: expanded, label: "Captions", onToggle: captions.length > 0 ? onToggle : null }) }), expanded || captions.length === 0 ? (jsx_runtime_1.jsx(CaptionTextEditor_1.CaptionTextEditor, { captions: captions, onChange: onTextChange, onSave: onTextSave, onCancel: onTextCancel, readOnly: readOnly })) : null] }));
|
|
116
122
|
};
|
|
117
123
|
exports.CaptionInspector = CaptionInspector;
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CodeFrame = void 0;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const colors_1 = require("../helpers/colors");
|
|
6
|
+
const LazySyntaxHighlightedSource_1 = require("./LazySyntaxHighlightedSource");
|
|
7
|
+
const is_menu_item_1 = require("./Menu/is-menu-item");
|
|
8
|
+
const frame = {
|
|
9
|
+
backgroundColor: colors_1.ERROR_CODE_FRAME_BACKGROUND,
|
|
10
|
+
borderRadius: 6,
|
|
11
|
+
display: 'flex',
|
|
12
|
+
marginBottom: 20,
|
|
13
|
+
overflow: 'hidden',
|
|
14
|
+
};
|
|
15
|
+
const sourceContainer = {
|
|
16
|
+
flex: 1,
|
|
17
|
+
minWidth: 0,
|
|
18
|
+
overflowX: 'auto',
|
|
19
|
+
overscrollBehaviorX: 'none',
|
|
20
|
+
};
|
|
21
|
+
const lineNumberColumn = {
|
|
22
|
+
flexShrink: 0,
|
|
23
|
+
width: 60,
|
|
24
|
+
};
|
|
25
|
+
const lineNumber = {
|
|
26
|
+
whiteSpace: 'pre',
|
|
27
|
+
paddingRight: 12,
|
|
28
|
+
color: 'inherit',
|
|
29
|
+
lineHeight: 1.7,
|
|
30
|
+
width: 60,
|
|
31
|
+
flexShrink: 0,
|
|
32
|
+
display: 'flex',
|
|
33
|
+
alignItems: 'center',
|
|
34
|
+
justifyContent: 'flex-end',
|
|
35
|
+
fontFamily: 'monospace',
|
|
36
|
+
};
|
|
37
|
+
const CodeFrame = ({ source, lineNumberWidth, fontSize, horizontalMargin }) => {
|
|
38
|
+
return (jsx_runtime_1.jsxs("div", { style: {
|
|
39
|
+
...frame,
|
|
40
|
+
marginLeft: horizontalMargin,
|
|
41
|
+
marginRight: horizontalMargin,
|
|
42
|
+
}, children: [
|
|
43
|
+
jsx_runtime_1.jsx("div", { style: lineNumberColumn, children: source.map((s, j) => {
|
|
44
|
+
return (jsx_runtime_1.jsx("div", { style: {
|
|
45
|
+
...lineNumber,
|
|
46
|
+
fontSize,
|
|
47
|
+
backgroundColor: s.highlight
|
|
48
|
+
? colors_1.ERROR_CODE_FRAME_BACKGROUND
|
|
49
|
+
: colors_1.ERROR_CODE_FRAME_LINE_BACKGROUND,
|
|
50
|
+
backgroundImage: s.highlight
|
|
51
|
+
? `linear-gradient(${colors_1.SELECTED_BACKGROUND}, ${colors_1.SELECTED_BACKGROUND})`
|
|
52
|
+
: undefined,
|
|
53
|
+
color: s.highlight ? colors_1.WHITE : colors_1.WHITE_ALPHA_40,
|
|
54
|
+
}, children: String(s.lineNumber).padStart(lineNumberWidth, ' ') }, j));
|
|
55
|
+
}) }), jsx_runtime_1.jsx("div", { style: sourceContainer, className: is_menu_item_1.HORIZONTAL_SCROLLBAR_CLASSNAME, children: jsx_runtime_1.jsx("div", { style: { minWidth: '100%', width: 'max-content' }, children: source.map((s, j) => {
|
|
56
|
+
return (jsx_runtime_1.jsx("div", { style: {
|
|
57
|
+
backgroundColor: s.highlight
|
|
58
|
+
? colors_1.SELECTED_BACKGROUND
|
|
59
|
+
: colors_1.TRANSPARENT,
|
|
60
|
+
}, children: jsx_runtime_1.jsx("code", { className: "language-tsx", style: {
|
|
61
|
+
display: 'block',
|
|
62
|
+
fontFamily: 'monospace',
|
|
63
|
+
fontSize,
|
|
64
|
+
color: '#9cdcfe',
|
|
65
|
+
whiteSpace: 'pre',
|
|
66
|
+
tabSize: 2,
|
|
67
|
+
backgroundColor: colors_1.TRANSPARENT,
|
|
68
|
+
lineHeight: 1.7,
|
|
69
|
+
paddingRight: 12,
|
|
70
|
+
paddingLeft: 12,
|
|
71
|
+
paddingTop: 0,
|
|
72
|
+
paddingBottom: 0,
|
|
73
|
+
}, children: jsx_runtime_1.jsx(LazySyntaxHighlightedSource_1.LazySyntaxHighlightedSource, { source: s.content }) }) }, j));
|
|
74
|
+
}) }) })
|
|
75
|
+
] }));
|
|
76
|
+
};
|
|
77
|
+
exports.CodeFrame = CodeFrame;
|
|
@@ -4,7 +4,6 @@ exports.CompositionSelectorItem = void 0;
|
|
|
4
4
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
5
|
const react_1 = require("react");
|
|
6
6
|
const browser_studio_operations_1 = require("../helpers/browser-studio-operations");
|
|
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");
|
|
@@ -23,7 +22,7 @@ const NotificationCenter_1 = require("./Notifications/NotificationCenter");
|
|
|
23
22
|
const actions_1 = require("./RenderQueue/actions");
|
|
24
23
|
const SidebarRenderButton_1 = require("./SidebarRenderButton");
|
|
25
24
|
const use_resolved_stack_1 = require("./Timeline/use-resolved-stack");
|
|
26
|
-
const
|
|
25
|
+
const use_open_in_menu_apps_1 = require("./use-open-in-menu-apps");
|
|
27
26
|
const itemStyle = {
|
|
28
27
|
paddingRight: 2,
|
|
29
28
|
paddingTop: 5,
|
|
@@ -43,6 +42,7 @@ const itemStyle = {
|
|
|
43
42
|
textAlign: 'left',
|
|
44
43
|
height: layout_1.COMPACT_CONTROL_ROW_HEIGHT,
|
|
45
44
|
userSelect: 'none',
|
|
45
|
+
WebkitUserSelect: 'none',
|
|
46
46
|
};
|
|
47
47
|
const labelStyle = {
|
|
48
48
|
textAlign: 'left',
|
|
@@ -193,9 +193,7 @@ const CompositionSelectorItem = ({ item, level, currentComposition, tabIndex, se
|
|
|
193
193
|
}
|
|
194
194
|
}, [onClick]);
|
|
195
195
|
const { setSelectedModal } = (0, react_1.useContext)(modals_1.SetSelectedModalContext);
|
|
196
|
-
const connectionStatus = (0,
|
|
197
|
-
.previewServerState.type;
|
|
198
|
-
const { defaultEditorId, defaultEditorName } = (0, use_default_editor_info_1.useEditorOpening)(connectionStatus === 'connected');
|
|
196
|
+
const { connectionStatus, openInApps } = (0, use_open_in_menu_apps_1.useOpenInMenuApps)();
|
|
199
197
|
const resolvedLocation = (0, use_resolved_stack_1.useResolvedStack)(item.type === 'composition' ? item.composition.stack : item.folder.stack);
|
|
200
198
|
const getContextMenuItems = (0, react_1.useCallback)(() => {
|
|
201
199
|
if (item.type === 'composition') {
|
|
@@ -203,9 +201,8 @@ const CompositionSelectorItem = ({ item, level, currentComposition, tabIndex, se
|
|
|
203
201
|
closeMenu: noop_1.noop,
|
|
204
202
|
composition: item.composition,
|
|
205
203
|
connectionStatus,
|
|
206
|
-
editorId: defaultEditorId,
|
|
207
|
-
editorName: defaultEditorName,
|
|
208
204
|
includeCompositionManagementItems: true,
|
|
205
|
+
openInApps,
|
|
209
206
|
resolvedLocation,
|
|
210
207
|
setSelectedModal,
|
|
211
208
|
readOnlyStudio: window.remotion_isReadOnlyStudio,
|
|
@@ -214,21 +211,14 @@ const CompositionSelectorItem = ({ item, level, currentComposition, tabIndex, se
|
|
|
214
211
|
return (0, folder_menu_items_1.getFolderMenuItems)({
|
|
215
212
|
closeMenu: noop_1.noop,
|
|
216
213
|
connectionStatus,
|
|
217
|
-
editorId: defaultEditorId,
|
|
218
|
-
editorName: defaultEditorName,
|
|
214
|
+
editorId: openInApps.defaultEditorId,
|
|
215
|
+
editorName: openInApps.defaultEditorName,
|
|
219
216
|
folder: item.folder,
|
|
220
217
|
resolvedLocation,
|
|
221
218
|
setSelectedModal,
|
|
222
219
|
readOnlyStudio: window.remotion_isReadOnlyStudio,
|
|
223
220
|
});
|
|
224
|
-
}, [
|
|
225
|
-
connectionStatus,
|
|
226
|
-
defaultEditorId,
|
|
227
|
-
defaultEditorName,
|
|
228
|
-
item,
|
|
229
|
-
resolvedLocation,
|
|
230
|
-
setSelectedModal,
|
|
231
|
-
]);
|
|
221
|
+
}, [connectionStatus, item, openInApps, resolvedLocation, setSelectedModal]);
|
|
232
222
|
const onItemDragStart = (0, react_1.useCallback)((event) => {
|
|
233
223
|
var _a, _b, _c, _d, _e;
|
|
234
224
|
if (window.remotion_isReadOnlyStudio) {
|