@remotion/studio 4.0.507 → 4.0.509
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/FastRefreshProvider.js +13 -9
- package/dist/Studio.d.ts +5 -0
- package/dist/Studio.js +2 -2
- package/dist/components/Canvas.js +35 -5
- package/dist/components/CodingAgentIcon.d.ts +3 -1
- package/dist/components/CodingAgentIcon.js +4 -9
- package/dist/components/ColorPicker/AlphaSlider.js +2 -2
- package/dist/components/ColorPicker/HueSlider.js +2 -2
- package/dist/components/ColorPicker/SaturationValueArea.js +2 -2
- package/dist/components/ConfigureDefaultEditorModal.js +1 -1
- package/dist/components/ContextMenu.d.ts +1 -0
- package/dist/components/ContextMenu.js +32 -5
- package/dist/components/EditorContent.js +4 -3
- package/dist/components/EditorGuides/Guide.js +2 -2
- package/dist/components/EditorRuler/index.js +2 -2
- package/dist/components/ExplorerPanel.js +19 -1
- package/dist/components/InlineAction.d.ts +2 -1
- package/dist/components/InlineAction.js +3 -3
- package/dist/components/InspectorLocationCopy.js +1 -1
- package/dist/components/InspectorOpenInEditor.d.ts +1 -0
- package/dist/components/InspectorOpenInEditor.js +52 -8
- package/dist/components/InspectorPanel/AlignmentControls.js +2 -2
- package/dist/components/InspectorPanel/CompositionInspector.js +3 -1
- package/dist/components/InspectorPanel/SequenceSelectionInspector.js +3 -3
- package/dist/components/InspectorPanel/styles.js +1 -1
- package/dist/components/InspectorSequenceSection.js +36 -4
- package/dist/components/Menu/MenuItem.js +2 -2
- package/dist/components/MenuBuildIndicator.js +1 -1
- package/dist/components/ModalContainer.js +1 -1
- package/dist/components/Modals.js +2 -9
- package/dist/components/NewComposition/InputDragger.js +2 -2
- package/dist/components/NewComposition/NewComposition.d.ts +2 -0
- package/dist/components/NewComposition/NewComposition.js +38 -6
- package/dist/components/NewComposition/get-new-composition-defaults.d.ts +1 -1
- package/dist/components/NewComposition/get-new-composition-defaults.js +9 -1
- package/dist/components/PlayPause.d.ts +1 -1
- package/dist/components/PlayPause.js +61 -12
- package/dist/components/RenderButton.js +16 -12
- package/dist/components/RenderModal/GuiRenderStatus.js +23 -6
- package/dist/components/RenderModal/InfoBubble.d.ts +1 -0
- package/dist/components/RenderModal/InfoBubble.js +6 -4
- package/dist/components/RenderModal/InfoTooltip.d.ts +1 -0
- package/dist/components/RenderModal/InfoTooltip.js +12 -12
- package/dist/components/RenderModal/SchemaEditor/SchemaLabel.d.ts +5 -0
- package/dist/components/RenderModal/SchemaEditor/SchemaLabel.js +16 -3
- package/dist/components/RenderModal/SchemaEditor/ZodArrayEditor.js +1 -1
- package/dist/components/RenderModal/SchemaEditor/ZodBooleanEditor.d.ts +2 -0
- package/dist/components/RenderModal/SchemaEditor/ZodBooleanEditor.js +3 -2
- package/dist/components/RenderModal/SchemaEditor/ZodColorEditor.js +1 -1
- package/dist/components/RenderModal/SchemaEditor/ZodDateEditor.js +1 -1
- package/dist/components/RenderModal/SchemaEditor/ZodDiscriminatedUnionEditor.js +2 -1
- package/dist/components/RenderModal/SchemaEditor/ZodEnumEditor.js +1 -1
- package/dist/components/RenderModal/SchemaEditor/ZodMatrixEditor.js +1 -1
- package/dist/components/RenderModal/SchemaEditor/ZodNonEditableValue.js +1 -1
- package/dist/components/RenderModal/SchemaEditor/ZodNumberEditor.js +1 -1
- package/dist/components/RenderModal/SchemaEditor/ZodObjectEditor.js +1 -1
- package/dist/components/RenderModal/SchemaEditor/ZodOrNullishEditor.js +6 -1
- package/dist/components/RenderModal/SchemaEditor/ZodStaticFileEditor.js +1 -1
- package/dist/components/RenderModal/SchemaEditor/ZodStringEditor.js +1 -1
- package/dist/components/RenderModal/SchemaEditor/ZodSwitch.js +1 -1
- package/dist/components/RenderModal/SchemaEditor/ZodTextareaEditor.js +1 -1
- package/dist/components/RenderModal/SchemaEditor/ZodTupleEditor.js +1 -1
- package/dist/components/RenderModal/SchemaEditor/zod-schema-type.d.ts +1 -0
- package/dist/components/RenderModal/SchemaEditor/zod-schema-type.js +12 -1
- package/dist/components/SelectedOutlineCanvasRotation.d.ts +9 -0
- package/dist/components/SelectedOutlineCanvasRotation.js +239 -0
- package/dist/components/SelectedOutlineCropControls.js +2 -2
- package/dist/components/SelectedOutlineElement.d.ts +2 -1
- package/dist/components/SelectedOutlineElement.js +40 -5
- package/dist/components/SelectedOutlineOverlay.d.ts +1 -1
- package/dist/components/SelectedOutlineOverlay.js +55 -26
- package/dist/components/SelectedOutlinePolygon.d.ts +1 -0
- package/dist/components/SelectedOutlinePolygon.js +6 -5
- package/dist/components/SelectedOutlineRenderer.d.ts +1 -0
- package/dist/components/SelectedOutlineRenderer.js +24 -7
- package/dist/components/SelectedOutlineRotationCornerHandle.d.ts +6 -0
- package/dist/components/SelectedOutlineRotationCornerHandle.js +9 -7
- package/dist/components/SelectedOutlineScaleEdgeLine.d.ts +2 -0
- package/dist/components/SelectedOutlineScaleEdgeLine.js +11 -7
- package/dist/components/SelectedOutlineTransformOriginHandle.js +50 -24
- package/dist/components/SelectedOutlineUvControls.js +8 -8
- package/dist/components/SequencePropsSubscriptionProvider.js +8 -0
- package/dist/components/SettingsModalFooter.js +1 -1
- package/dist/components/Splitter/SplitterHandle.js +2 -2
- package/dist/components/Tabs/index.d.ts +2 -0
- package/dist/components/Tabs/index.js +2 -2
- package/dist/components/Timeline/EasingEditorModal.js +2 -2
- package/dist/components/Timeline/SequencePropsObserver.js +97 -1
- package/dist/components/Timeline/SubscribeToNodePaths.js +4 -2
- package/dist/components/Timeline/Timeline.js +55 -1
- package/dist/components/Timeline/TimelineClipboardKeybindings.js +99 -35
- package/dist/components/Timeline/TimelineDragHandler.js +2 -2
- package/dist/components/Timeline/TimelineEffectItem.js +1 -4
- package/dist/components/Timeline/TimelineEffectPropItem.js +7 -0
- package/dist/components/Timeline/TimelineFieldRowContent.js +10 -3
- package/dist/components/Timeline/TimelineInOutDragHandler.js +2 -2
- package/dist/components/Timeline/TimelineLayerEye.js +2 -2
- package/dist/components/Timeline/TimelineRotationField.js +84 -12
- package/dist/components/Timeline/TimelineScaleField.js +58 -4
- package/dist/components/Timeline/TimelineSelection.d.ts +4 -0
- package/dist/components/Timeline/TimelineSelection.js +47 -4
- package/dist/components/Timeline/TimelineSequenceItem.js +43 -25
- package/dist/components/Timeline/TimelineSequencePropItem.js +12 -3
- package/dist/components/Timeline/TimelineSequenceRightEdgeDragHandle.js +6 -6
- package/dist/components/Timeline/TimelineTransformOriginField.js +78 -4
- package/dist/components/Timeline/TimelineTranslateField.js +55 -15
- package/dist/components/Timeline/Transform3DModeContext.d.ts +1 -0
- package/dist/components/Timeline/Transform3DModeContext.js +5 -0
- package/dist/components/Timeline/delete-selected-timeline-item.js +0 -6
- package/dist/components/Timeline/get-sequence-context-menu-items.js +14 -6
- package/dist/components/Timeline/keyframe-clipboard.d.ts +5 -1
- package/dist/components/Timeline/keyframe-clipboard.js +3 -2
- package/dist/components/Timeline/save-sequence-prop.js +16 -7
- package/dist/components/Timeline/sequence-prop-clipboard.d.ts +31 -0
- package/dist/components/Timeline/sequence-prop-clipboard.js +142 -0
- package/dist/components/Timeline/sequence-props-subscription-store.d.ts +2 -1
- package/dist/components/Timeline/sequence-props-subscription-store.js +5 -2
- package/dist/components/Timeline/timeline-field-display-utils.js +2 -2
- package/dist/components/Timeline/timeline-field-row-layout.d.ts +6 -0
- package/dist/components/Timeline/timeline-field-row-layout.js +16 -1
- package/dist/components/Timeline/timeline-rotation-utils.d.ts +16 -0
- package/dist/components/Timeline/timeline-rotation-utils.js +145 -4
- package/dist/components/Timeline/timeline-translate-utils.d.ts +3 -2
- package/dist/components/Timeline/timeline-translate-utils.js +8 -4
- package/dist/components/Timeline/transform-3d-mode.d.ts +6 -0
- package/dist/components/Timeline/transform-3d-mode.js +36 -0
- package/dist/components/Timeline/transform-origin-utils.d.ts +4 -0
- package/dist/components/Timeline/transform-origin-utils.js +12 -6
- package/dist/components/Timeline/update-selected-easing.js +8 -0
- package/dist/components/Timeline/use-open-sequence-in-apps.js +3 -1
- package/dist/components/Timeline/use-resolved-stack-react-to-change.d.ts +5 -1
- package/dist/components/Timeline/use-resolved-stack-react-to-change.js +67 -10
- package/dist/components/Timeline/use-sequence-props-subscription.d.ts +3 -1
- package/dist/components/Timeline/use-sequence-props-subscription.js +7 -2
- package/dist/components/Timeline/use-timeline-keyframe-drag.js +4 -4
- package/dist/components/call-api.js +2 -0
- package/dist/components/canvas-rotation-cursor.d.ts +1 -0
- package/dist/components/canvas-rotation-cursor.js +14 -0
- package/dist/components/folder-menu-items.js +1 -0
- package/dist/components/get-open-in-menu-items.d.ts +8 -1
- package/dist/components/get-open-in-menu-items.js +93 -8
- package/dist/components/import-assets.js +7 -0
- package/dist/components/root-composition-menu-items.js +1 -0
- package/dist/components/selected-outline-control-layout.d.ts +14 -0
- package/dist/components/selected-outline-control-layout.js +94 -0
- package/dist/components/selected-outline-drag.d.ts +11 -5
- package/dist/components/selected-outline-drag.js +80 -42
- package/dist/components/selected-outline-measurement.d.ts +5 -0
- package/dist/components/selected-outline-measurement.js +28 -1
- package/dist/components/selected-outline-types.d.ts +6 -0
- package/dist/components/use-default-editor-info.js +28 -3
- package/dist/esm/{chunk-ptnd65a9.js → chunk-jdn6nkbk.js} +10087 -7919
- package/dist/esm/{chunk-fgedsvhb.js → chunk-r46yxrjr.js} +1 -2
- package/dist/esm/index.mjs +357 -2
- package/dist/esm/internals.mjs +10086 -7918
- package/dist/esm/previewEntry.mjs +9926 -7758
- package/dist/esm/renderEntry.mjs +4 -2
- package/dist/helpers/get-box-quads-polyfill-internals.js +10 -2
- package/dist/helpers/get-canvas-capture-import.d.ts +7 -0
- package/dist/helpers/get-canvas-capture-import.js +43 -0
- package/dist/helpers/get-git-menu-item.d.ts +1 -1
- package/dist/helpers/get-git-menu-item.js +33 -3
- package/dist/helpers/inserted-element-selection.d.ts +12 -0
- package/dist/helpers/inserted-element-selection.js +29 -0
- package/dist/helpers/open-in-editor.d.ts +3 -1
- package/dist/helpers/open-in-editor.js +5 -1
- package/dist/helpers/pointer-session.d.ts +6 -2
- package/dist/helpers/pointer-session.js +29 -12
- package/dist/helpers/preview-server-events.js +4 -0
- package/dist/helpers/sequence-node-path-mutations.d.ts +4 -0
- package/dist/helpers/sequence-node-path-mutations.js +31 -0
- package/dist/helpers/use-create-composition.d.ts +15 -2
- package/dist/helpers/use-create-composition.js +11 -17
- package/dist/helpers/use-menu-structure.js +1 -0
- package/dist/icons/cube.d.ts +4 -0
- package/dist/icons/cube.js +6 -0
- package/dist/icons/finder.d.ts +4 -0
- package/dist/icons/finder.js +8 -0
- package/dist/icons/github.d.ts +4 -0
- package/dist/icons/github.js +11 -0
- package/dist/icons/terminal.d.ts +6 -0
- package/dist/icons/terminal.js +46 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.js +8 -0
- package/dist/renderEntry.js +2 -2
- package/dist/state/modals.d.ts +9 -1
- package/dist/state/transform-3d-mode.d.ts +10 -0
- package/dist/state/transform-3d-mode.js +27 -0
- package/dist/state/z-index.d.ts +0 -1
- package/dist/state/z-index.js +28 -37
- package/package.json +12 -12
|
@@ -2,7 +2,9 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.FastRefreshProvider = void 0;
|
|
4
4
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const studio_shared_1 = require("@remotion/studio-shared");
|
|
5
6
|
const react_1 = require("react");
|
|
7
|
+
const react_dom_1 = require("react-dom");
|
|
6
8
|
const fast_refresh_context_1 = require("./fast-refresh-context");
|
|
7
9
|
const FastRefreshProvider = ({ children }) => {
|
|
8
10
|
const [fastRefreshes, setFastRefreshes] = (0, react_1.useState)(0);
|
|
@@ -11,15 +13,17 @@ const FastRefreshProvider = ({ children }) => {
|
|
|
11
13
|
setManualRefreshes((i) => i + 1);
|
|
12
14
|
}, []);
|
|
13
15
|
(0, react_1.useEffect)(() => {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
16
|
+
const onReactRefreshFinished = () => {
|
|
17
|
+
// Commit consumers and their layout effects before the browser paints
|
|
18
|
+
// the refreshed composition with stale node-path statuses.
|
|
19
|
+
(0, react_dom_1.flushSync)(() => {
|
|
20
|
+
setFastRefreshes((i) => i + 1);
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
window.addEventListener(studio_shared_1.REACT_REFRESH_FINISHED_EVENT, onReactRefreshFinished);
|
|
24
|
+
return () => {
|
|
25
|
+
window.removeEventListener(studio_shared_1.REACT_REFRESH_FINISHED_EVENT, onReactRefreshFinished);
|
|
26
|
+
};
|
|
23
27
|
}, []);
|
|
24
28
|
const value = (0, react_1.useMemo)(() => ({ fastRefreshes, manualRefreshes, increaseManualRefreshes }), [fastRefreshes, manualRefreshes, increaseManualRefreshes]);
|
|
25
29
|
return (jsx_runtime_1.jsx(fast_refresh_context_1.FastRefreshContext.Provider, { value: value, children: children }));
|
package/dist/Studio.d.ts
CHANGED
package/dist/Studio.js
CHANGED
|
@@ -16,8 +16,8 @@ const getServerDisconnectedDomElement = () => {
|
|
|
16
16
|
return document.getElementById('server-disconnected-overlay');
|
|
17
17
|
};
|
|
18
18
|
const StudioInner = ({ rootComponent, readOnly }) => {
|
|
19
|
-
var _a, _b;
|
|
20
|
-
return (jsx_runtime_1.jsx(remotion_1.Internals.CompositionManagerProvider, { onlyRenderComposition: null, currentCompositionMetadata: null, initialCompositions: [], initialCanvasContent: null, children: jsx_runtime_1.jsx(remotion_1.Internals.RemotionRootContexts, { frameState: null, audioEnabled: window.remotion_audioEnabled, videoEnabled: window.remotion_videoEnabled, logLevel: (_a = window.remotion_logLevel) !== null && _a !== void 0 ? _a : 'info', numberOfAudioTags: window.remotion_numberOfAudioTags, audioLatencyHint: (_b = window.remotion_audioLatencyHint) !== null && _b !== void 0 ? _b : 'playback', previewSampleRate: window.remotion_previewSampleRate, children: jsx_runtime_1.jsx(use_static_files_1.StaticFilesProvider, { children: jsx_runtime_1.jsx(ResolveCompositionConfigInStudio_1.ResolveCompositionConfigInStudio, { children: jsx_runtime_1.jsxs(EditorContexts_1.EditorContexts, { children: [
|
|
19
|
+
var _a, _b, _c;
|
|
20
|
+
return (jsx_runtime_1.jsx(remotion_1.Internals.CompositionManagerProvider, { onlyRenderComposition: null, currentCompositionMetadata: null, initialCompositions: [], initialCanvasContent: null, children: jsx_runtime_1.jsx(remotion_1.Internals.RemotionRootContexts, { frameState: null, audioEnabled: window.remotion_audioEnabled, videoEnabled: window.remotion_videoEnabled, logLevel: (_a = window.remotion_logLevel) !== null && _a !== void 0 ? _a : 'info', numberOfAudioTags: window.remotion_numberOfAudioTags, audioLatencyHint: (_b = window.remotion_audioLatencyHint) !== null && _b !== void 0 ? _b : 'playback', previewSampleRate: window.remotion_previewSampleRate, _experimentalKeepAudioContextAlive: (_c = window.remotion_experimentalKeepAudioContextAlive) !== null && _c !== void 0 ? _c : false, children: jsx_runtime_1.jsx(use_static_files_1.StaticFilesProvider, { children: jsx_runtime_1.jsx(ResolveCompositionConfigInStudio_1.ResolveCompositionConfigInStudio, { children: jsx_runtime_1.jsxs(EditorContexts_1.EditorContexts, { children: [
|
|
21
21
|
jsx_runtime_1.jsx(Editor_1.Editor, { readOnlyStudio: readOnly, Root: rootComponent }), readOnly
|
|
22
22
|
? null
|
|
23
23
|
: (0, react_dom_1.createPortal)(jsx_runtime_1.jsx(ServerDisconnected_1.ServerDisconnected, {}), getServerDisconnectedDomElement())] }) }) }) }) }));
|
|
@@ -15,6 +15,7 @@ const clipboard_images_1 = require("../helpers/clipboard-images");
|
|
|
15
15
|
const clipboard_svg_1 = require("../helpers/clipboard-svg");
|
|
16
16
|
const colors_1 = require("../helpers/colors");
|
|
17
17
|
const get_asset_metadata_1 = require("../helpers/get-asset-metadata");
|
|
18
|
+
const get_canvas_capture_import_1 = require("../helpers/get-canvas-capture-import");
|
|
18
19
|
const get_effective_translation_1 = require("../helpers/get-effective-translation");
|
|
19
20
|
const install_required_package_1 = require("../helpers/install-required-package");
|
|
20
21
|
const open_in_editor_1 = require("../helpers/open-in-editor");
|
|
@@ -25,6 +26,7 @@ const canvas_ref_1 = require("../state/canvas-ref");
|
|
|
25
26
|
const editor_guides_1 = require("../state/editor-guides");
|
|
26
27
|
const editor_snapping_1 = require("../state/editor-snapping");
|
|
27
28
|
const editor_zoom_gestures_1 = require("../state/editor-zoom-gestures");
|
|
29
|
+
const modals_1 = require("../state/modals");
|
|
28
30
|
const call_api_1 = require("./call-api");
|
|
29
31
|
const composition_drop_preview_1 = require("./composition-drop-preview");
|
|
30
32
|
const ConfirmationDialog_1 = require("./ConfirmationDialog");
|
|
@@ -125,6 +127,7 @@ const Canvas = ({ canvasContent, size }) => {
|
|
|
125
127
|
const keybindings = (0, use_keybinding_1.useKeybinding)();
|
|
126
128
|
const confirm = (0, ConfirmationDialog_1.useConfirmationDialog)();
|
|
127
129
|
const chooseSvgImportMode = (0, SvgImportDialog_1.useSvgImportDialog)();
|
|
130
|
+
const { setSelectedModal } = (0, react_1.useContext)(modals_1.SetSelectedModalContext);
|
|
128
131
|
const config = remotion_1.Internals.useUnsafeVideoConfig();
|
|
129
132
|
const areRulersVisible = (0, use_is_ruler_visible_1.useIsRulerVisible)();
|
|
130
133
|
const { editorShowGuides } = (0, react_1.useContext)(editor_guides_1.EditorShowGuidesContext);
|
|
@@ -703,13 +706,15 @@ const Canvas = ({ canvasContent, size }) => {
|
|
|
703
706
|
setCompositionDropPreview(null);
|
|
704
707
|
return;
|
|
705
708
|
}
|
|
706
|
-
|
|
709
|
+
const mayBeCanvasCapture = (0, drop_handler_data_1.isFileDragEvent)(event) && !window.remotion_isReadOnlyStudio;
|
|
710
|
+
if (!canDropAssets && !cannotAddSequence && !mayBeCanvasCapture) {
|
|
707
711
|
setCompositionDropPreview(null);
|
|
708
712
|
return;
|
|
709
713
|
}
|
|
710
714
|
event.preventDefault();
|
|
711
715
|
if (event.dataTransfer) {
|
|
712
|
-
event.dataTransfer.dropEffect =
|
|
716
|
+
event.dataTransfer.dropEffect =
|
|
717
|
+
canDropAssets || mayBeCanvasCapture ? 'copy' : 'none';
|
|
713
718
|
}
|
|
714
719
|
if (!canDropAssets ||
|
|
715
720
|
contentDimensions === null ||
|
|
@@ -797,12 +802,36 @@ const Canvas = ({ canvasContent, size }) => {
|
|
|
797
802
|
setCompositionDropPreview(null);
|
|
798
803
|
}, []);
|
|
799
804
|
const onDrop = (0, react_1.useCallback)(async (event) => {
|
|
800
|
-
var _a;
|
|
801
|
-
var
|
|
805
|
+
var _a, _b;
|
|
806
|
+
var _c, _d;
|
|
802
807
|
setCompositionDropPreview(null);
|
|
803
808
|
if (!(0, drop_handler_data_1.isSupportedDropEvent)(event) || !isDragEventInsideCanvas(event)) {
|
|
804
809
|
return;
|
|
805
810
|
}
|
|
811
|
+
if ((0, drop_handler_data_1.isFileDragEvent)(event) && !window.remotion_isReadOnlyStudio) {
|
|
812
|
+
event.preventDefault();
|
|
813
|
+
event.stopPropagation();
|
|
814
|
+
const files = Array.from((_c = (_a = event.dataTransfer) === null || _a === void 0 ? void 0 : _a.files) !== null && _c !== void 0 ? _c : []);
|
|
815
|
+
if (files.length === 1) {
|
|
816
|
+
setIsAddingAsset(true);
|
|
817
|
+
try {
|
|
818
|
+
const canvasCapture = await (0, get_canvas_capture_import_1.getCanvasCaptureImport)(files[0]);
|
|
819
|
+
if (canvasCapture !== null) {
|
|
820
|
+
setSelectedModal({
|
|
821
|
+
type: 'new-comp',
|
|
822
|
+
canvasCapture,
|
|
823
|
+
folderName: null,
|
|
824
|
+
parentName: null,
|
|
825
|
+
stack: null,
|
|
826
|
+
});
|
|
827
|
+
return;
|
|
828
|
+
}
|
|
829
|
+
}
|
|
830
|
+
finally {
|
|
831
|
+
setIsAddingAsset(false);
|
|
832
|
+
}
|
|
833
|
+
}
|
|
834
|
+
}
|
|
806
835
|
if (cannotAddSequence) {
|
|
807
836
|
event.preventDefault();
|
|
808
837
|
event.stopPropagation();
|
|
@@ -824,7 +853,7 @@ const Canvas = ({ canvasContent, size }) => {
|
|
|
824
853
|
event.stopPropagation();
|
|
825
854
|
setIsAddingAsset(true);
|
|
826
855
|
try {
|
|
827
|
-
const metadata = studio_protocol_1.StudioProtocolInternals.getDragPreviewMetadata((
|
|
856
|
+
const metadata = studio_protocol_1.StudioProtocolInternals.getDragPreviewMetadata((_d = (_b = event.dataTransfer) === null || _b === void 0 ? void 0 : _b.types) !== null && _d !== void 0 ? _d : []);
|
|
828
857
|
const isComposition = (metadata === null || metadata === void 0 ? void 0 : metadata.type) === 'composition';
|
|
829
858
|
let dropPosition = getDropPosition({
|
|
830
859
|
addFitPadding,
|
|
@@ -887,6 +916,7 @@ const Canvas = ({ canvasContent, size }) => {
|
|
|
887
916
|
editorSnapping,
|
|
888
917
|
previewSize,
|
|
889
918
|
size,
|
|
919
|
+
setSelectedModal,
|
|
890
920
|
]);
|
|
891
921
|
const onPaste = (0, react_1.useCallback)(async (event) => {
|
|
892
922
|
const { activeElement } = document;
|
|
@@ -3,15 +3,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.CodingAgentIcon = void 0;
|
|
4
4
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
5
|
const apps_1 = require("../icons/apps");
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
width: 18,
|
|
10
|
-
};
|
|
11
|
-
const CodingAgentIcon = ({ iconDataUrl }) => {
|
|
12
|
-
if (iconDataUrl === null) {
|
|
13
|
-
return jsx_runtime_1.jsx(apps_1.AppsIcon, { height: 18, width: 18 });
|
|
6
|
+
const CodingAgentIcon = ({ codingAgentId, size }) => {
|
|
7
|
+
if (codingAgentId === null) {
|
|
8
|
+
return jsx_runtime_1.jsx(apps_1.AppsIcon, { height: size, width: size });
|
|
14
9
|
}
|
|
15
|
-
return (jsx_runtime_1.jsx("img", { alt: "", "aria-hidden": true, draggable: false, src:
|
|
10
|
+
return (jsx_runtime_1.jsx("img", { alt: "", "aria-hidden": true, "data-coding-agent-icon": codingAgentId, draggable: false, src: `/api/app-icon/coding-agent/${codingAgentId}.png`, style: { flexShrink: 0, height: size, width: size } }));
|
|
16
11
|
};
|
|
17
12
|
exports.CodingAgentIcon = CodingAgentIcon;
|
|
@@ -59,9 +59,9 @@ const AlphaSlider = ({ hue, saturation, value, alpha, onChange, onChangeComplete
|
|
|
59
59
|
e.preventDefault();
|
|
60
60
|
updateFromEvent(e.clientX, false);
|
|
61
61
|
let lastClientX = e.clientX;
|
|
62
|
-
(0, pointer_session_1.
|
|
62
|
+
(0, pointer_session_1.startCapturedPointerSession)({
|
|
63
63
|
event: e.nativeEvent,
|
|
64
|
-
|
|
64
|
+
captureTarget: e.currentTarget,
|
|
65
65
|
onMove: (ev) => {
|
|
66
66
|
lastClientX = ev.clientX;
|
|
67
67
|
updateFromEvent(ev.clientX, false);
|
|
@@ -41,9 +41,9 @@ const HueSlider = ({ hue, onChange, onChangeComplete }) => {
|
|
|
41
41
|
e.preventDefault();
|
|
42
42
|
updateFromEvent(e.clientX, false);
|
|
43
43
|
let lastClientX = e.clientX;
|
|
44
|
-
(0, pointer_session_1.
|
|
44
|
+
(0, pointer_session_1.startCapturedPointerSession)({
|
|
45
45
|
event: e.nativeEvent,
|
|
46
|
-
|
|
46
|
+
captureTarget: e.currentTarget,
|
|
47
47
|
onMove: (ev) => {
|
|
48
48
|
lastClientX = ev.clientX;
|
|
49
49
|
updateFromEvent(ev.clientX, false);
|
|
@@ -55,9 +55,9 @@ const SaturationValueArea = ({ hue, saturation, value, onChange, onChangeComplet
|
|
|
55
55
|
e.preventDefault();
|
|
56
56
|
updateFromEvent(e.clientX, e.clientY, false);
|
|
57
57
|
let lastPosition = { clientX: e.clientX, clientY: e.clientY };
|
|
58
|
-
(0, pointer_session_1.
|
|
58
|
+
(0, pointer_session_1.startCapturedPointerSession)({
|
|
59
59
|
event: e.nativeEvent,
|
|
60
|
-
|
|
60
|
+
captureTarget: e.currentTarget,
|
|
61
61
|
onMove: (ev) => {
|
|
62
62
|
lastPosition = { clientX: ev.clientX, clientY: ev.clientY };
|
|
63
63
|
updateFromEvent(ev.clientX, ev.clientY, false);
|
|
@@ -125,7 +125,7 @@ const DefaultEditorSettings = () => {
|
|
|
125
125
|
id: codingAgent.id,
|
|
126
126
|
keyHint: null,
|
|
127
127
|
label: (jsx_runtime_1.jsxs("span", { style: appLabel, children: [
|
|
128
|
-
jsx_runtime_1.jsx(CodingAgentIcon_1.CodingAgentIcon, {
|
|
128
|
+
jsx_runtime_1.jsx(CodingAgentIcon_1.CodingAgentIcon, { codingAgentId: codingAgent.id, size: 18 }), jsx_runtime_1.jsx("span", { style: appName, children: codingAgent.name })
|
|
129
129
|
] })),
|
|
130
130
|
leftItem: selectedCodingAgent === codingAgent.id ? jsx_runtime_1.jsx(Checkmark_1.Checkmark, {}) : null,
|
|
131
131
|
onClick: () => {
|
|
@@ -14,5 +14,6 @@ export declare const ContextMenu: React.ForwardRefExoticComponent<ContextMenuPro
|
|
|
14
14
|
export declare const ContextMenuForTarget: React.FC<{
|
|
15
15
|
readonly triggerRef: React.RefObject<HTMLElement | SVGElement | null>;
|
|
16
16
|
readonly getItems: ContextMenuItemsFactory;
|
|
17
|
+
readonly onOpenChange?: (open: boolean) => void;
|
|
17
18
|
}>;
|
|
18
19
|
export {};
|
|
@@ -236,15 +236,26 @@ exports.ContextMenu = react_1.default.forwardRef(({ children, getItems, style =
|
|
|
236
236
|
jsx_runtime_1.jsx("div", { ref: setRef, onContextMenu: () => false, style: style, className: className, onPointerDown: onPointerDown, children: children }), opened.type === 'open' ? (jsx_runtime_1.jsx(ContextMenuPortal, { menuTreeId: menuTreeIdRef.current, sizeSource: ref, currentZIndex: currentZIndex, onHide: onHide, opened: opened })) : null] }));
|
|
237
237
|
});
|
|
238
238
|
exports.ContextMenu.displayName = 'ContextMenu';
|
|
239
|
-
const ContextMenuForTarget = ({ triggerRef, getItems }) => {
|
|
239
|
+
const ContextMenuForTarget = ({ triggerRef, getItems, onOpenChange = undefined }) => {
|
|
240
240
|
const idRef = (0, react_1.useRef)(nextContextMenuId++);
|
|
241
241
|
const menuTreeIdRef = (0, react_1.useRef)((0, menu_tree_context_1.getNextMenuTreeId)());
|
|
242
242
|
const invocationRef = (0, react_1.useRef)(0);
|
|
243
|
+
const isOpenRef = (0, react_1.useRef)(false);
|
|
243
244
|
const getItemsRef = (0, react_1.useRef)(getItems);
|
|
245
|
+
const onOpenChangeRef = (0, react_1.useRef)(onOpenChange);
|
|
244
246
|
getItemsRef.current = getItems;
|
|
247
|
+
onOpenChangeRef.current = onOpenChange;
|
|
245
248
|
const [opened, setOpened] = (0, react_1.useState)({ type: 'not-open' });
|
|
246
249
|
const [body, setBody] = (0, react_1.useState)(null);
|
|
247
250
|
const { currentZIndex } = (0, z_index_1.useZIndex)();
|
|
251
|
+
const setOpenLifecycleState = (0, react_1.useCallback)((open) => {
|
|
252
|
+
var _a;
|
|
253
|
+
if (isOpenRef.current === open) {
|
|
254
|
+
return;
|
|
255
|
+
}
|
|
256
|
+
isOpenRef.current = open;
|
|
257
|
+
(_a = onOpenChangeRef.current) === null || _a === void 0 ? void 0 : _a.call(onOpenChangeRef, open);
|
|
258
|
+
}, []);
|
|
248
259
|
(0, react_1.useEffect)(() => {
|
|
249
260
|
// Access document.body after mount so importing this component stays safe
|
|
250
261
|
// in DOM-less test environments.
|
|
@@ -260,8 +271,21 @@ const ContextMenuForTarget = ({ triggerRef, getItems }) => {
|
|
|
260
271
|
e.preventDefault();
|
|
261
272
|
e.stopPropagation();
|
|
262
273
|
const currentInvocation = ++invocationRef.current;
|
|
263
|
-
|
|
274
|
+
setOpenLifecycleState(true);
|
|
275
|
+
let values;
|
|
276
|
+
try {
|
|
277
|
+
values = await (0, exports.resolveContextMenuItems)(getItemsRef.current, e);
|
|
278
|
+
}
|
|
279
|
+
catch (err) {
|
|
280
|
+
if (currentInvocation === invocationRef.current) {
|
|
281
|
+
setOpenLifecycleState(false);
|
|
282
|
+
}
|
|
283
|
+
throw err;
|
|
284
|
+
}
|
|
264
285
|
if (currentInvocation !== invocationRef.current || values === null) {
|
|
286
|
+
if (currentInvocation === invocationRef.current) {
|
|
287
|
+
setOpenLifecycleState(false);
|
|
288
|
+
}
|
|
265
289
|
return false;
|
|
266
290
|
}
|
|
267
291
|
notifyContextMenuOpened(idRef.current);
|
|
@@ -277,16 +301,19 @@ const ContextMenuForTarget = ({ triggerRef, getItems }) => {
|
|
|
277
301
|
return () => {
|
|
278
302
|
current.removeEventListener('contextmenu', onClick);
|
|
279
303
|
};
|
|
280
|
-
}, [triggerRef]);
|
|
304
|
+
}, [setOpenLifecycleState, triggerRef]);
|
|
281
305
|
(0, react_1.useEffect)(() => {
|
|
282
306
|
const invocation = invocationRef;
|
|
283
307
|
return () => {
|
|
284
308
|
invocation.current++;
|
|
309
|
+
setOpenLifecycleState(false);
|
|
285
310
|
};
|
|
286
|
-
}, []);
|
|
311
|
+
}, [setOpenLifecycleState]);
|
|
287
312
|
const onHide = (0, react_1.useCallback)(() => {
|
|
313
|
+
invocationRef.current++;
|
|
314
|
+
setOpenLifecycleState(false);
|
|
288
315
|
setOpened({ type: 'not-open' });
|
|
289
|
-
}, []);
|
|
316
|
+
}, [setOpenLifecycleState]);
|
|
290
317
|
(0, react_1.useEffect)(() => {
|
|
291
318
|
const onOtherContextMenuOpened = (event) => {
|
|
292
319
|
if (event.detail === idRef.current) {
|
|
@@ -4,6 +4,7 @@ exports.EditorContent = 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 transform_3d_mode_1 = require("../state/transform-3d-mode");
|
|
7
8
|
const GlobalKeybindings_1 = require("./GlobalKeybindings");
|
|
8
9
|
const InitialCompositionLoader_1 = require("./InitialCompositionLoader");
|
|
9
10
|
const MenuToolbar_1 = require("./MenuToolbar");
|
|
@@ -38,8 +39,8 @@ const EditorContent = ({ readOnlyStudio, children }) => {
|
|
|
38
39
|
const content = (jsx_runtime_1.jsxs(SplitterContainer_1.SplitterContainer, { orientation: "horizontal", id: "top-to-bottom", maxFlex: 0.9, minFlex: 0.2, defaultFlex: 0.75, maxFlexerSize: null, minFlexerSize: null, maxAntiFlexerSize: null, minAntiFlexerSize: null, children: [
|
|
39
40
|
jsx_runtime_1.jsx(SplitterElement_1.SplitterElement, { sticky: null, type: "flexer", children: children }), jsx_runtime_1.jsx(SplitterHandle_1.SplitterHandle, { allowToCollapse: "none", onCollapse: noop }), jsx_runtime_1.jsx(SplitterElement_1.SplitterElement, { sticky: null, type: "anti-flexer", children: showTimeline ? jsx_runtime_1.jsx(Timeline_1.Timeline, {}) : jsx_runtime_1.jsx(TimelineEmptyState_1.TimelineEmptyState, {}) })
|
|
40
41
|
] }));
|
|
41
|
-
return (jsx_runtime_1.jsx(TimelineSelection_1.TimelineSelectionProvider, { children: jsx_runtime_1.jsxs(StudioClearSelectionArea, { children: [
|
|
42
|
-
|
|
43
|
-
|
|
42
|
+
return (jsx_runtime_1.jsx(TimelineSelection_1.TimelineSelectionProvider, { children: jsx_runtime_1.jsx(transform_3d_mode_1.Transform3DModeStateProvider, { children: jsx_runtime_1.jsxs(StudioClearSelectionArea, { children: [
|
|
43
|
+
jsx_runtime_1.jsx(InitialCompositionLoader_1.InitialCompositionLoader, {}), jsx_runtime_1.jsx(MenuToolbar_1.MenuToolbar, { readOnlyStudio: readOnlyStudio }), jsx_runtime_1.jsx(GlobalKeybindings_1.GlobalKeybindings, {}), jsx_runtime_1.jsx(TimelineKeyframeDragState_1.TimelineKeyframeDragStateProvider, { children: content })
|
|
44
|
+
] }) }) }));
|
|
44
45
|
};
|
|
45
46
|
exports.EditorContent = EditorContent;
|
|
@@ -115,9 +115,9 @@ const GuideComp = ({ guide, canvasDimensions, scale }) => {
|
|
|
115
115
|
};
|
|
116
116
|
shouldCreateGuideRef.current = false;
|
|
117
117
|
setDraggingGuideId(() => guide.id);
|
|
118
|
-
(0, pointer_session_1.
|
|
118
|
+
(0, pointer_session_1.startCapturedPointerSession)({
|
|
119
119
|
event: e.nativeEvent,
|
|
120
|
-
|
|
120
|
+
captureTarget: e.currentTarget,
|
|
121
121
|
onMove: (moveEvent) => {
|
|
122
122
|
var _a;
|
|
123
123
|
updateHasMovedGuide(moveEvent.clientX, moveEvent.clientY);
|
|
@@ -168,9 +168,9 @@ const EditorRulers = ({ contentDimensions, canvasSize, assetMetadata, containerR
|
|
|
168
168
|
};
|
|
169
169
|
}, [draggingGuideId, moveGuidePointerRef, onMouseMove]);
|
|
170
170
|
const onPointerSessionStart = (0, react_1.useCallback)((event, guideId) => {
|
|
171
|
-
(0, pointer_session_1.
|
|
171
|
+
(0, pointer_session_1.startCapturedPointerSession)({
|
|
172
172
|
event: event.nativeEvent,
|
|
173
|
-
|
|
173
|
+
captureTarget: event.currentTarget,
|
|
174
174
|
onMove: (moveEvent) => onMouseMove(moveEvent, guideId),
|
|
175
175
|
onEnd: () => finishGuideInteraction(guideId),
|
|
176
176
|
});
|
|
@@ -4,6 +4,7 @@ exports.ExplorerPanel = void 0;
|
|
|
4
4
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
5
|
const react_1 = require("react");
|
|
6
6
|
const colors_1 = require("../helpers/colors");
|
|
7
|
+
const use_asset_drag_events_1 = require("../helpers/use-asset-drag-events");
|
|
7
8
|
const AssetSelector_1 = require("./AssetSelector");
|
|
8
9
|
const CompositionSelector_1 = require("./CompositionSelector");
|
|
9
10
|
const CompSelectorRef_1 = require("./CompSelectorRef");
|
|
@@ -33,6 +34,7 @@ const persistSelectedOptionsSidebarPanel = (panel) => {
|
|
|
33
34
|
};
|
|
34
35
|
const ExplorerPanel = ({ readOnlyStudio }) => {
|
|
35
36
|
const [panel, setPanel] = (0, react_1.useState)(() => getSelectedPanel());
|
|
37
|
+
const assetTabFocusTimer = (0, react_1.useRef)(null);
|
|
36
38
|
const onCompositionsSelected = (0, react_1.useCallback)(() => {
|
|
37
39
|
setPanel('compositions');
|
|
38
40
|
persistSelectedOptionsSidebarPanel('compositions');
|
|
@@ -41,6 +43,22 @@ const ExplorerPanel = ({ readOnlyStudio }) => {
|
|
|
41
43
|
setPanel('assets');
|
|
42
44
|
persistSelectedOptionsSidebarPanel('assets');
|
|
43
45
|
}, []);
|
|
46
|
+
const onAssetDragEnter = (0, react_1.useCallback)((event) => {
|
|
47
|
+
if ((0, use_asset_drag_events_1.isAssetUploadDragEvent)(event) &&
|
|
48
|
+
assetTabFocusTimer.current === null) {
|
|
49
|
+
assetTabFocusTimer.current = window.setTimeout(() => {
|
|
50
|
+
onAssetsSelected();
|
|
51
|
+
assetTabFocusTimer.current = null;
|
|
52
|
+
}, 500);
|
|
53
|
+
}
|
|
54
|
+
}, [onAssetsSelected]);
|
|
55
|
+
const onAssetDragLeave = (0, react_1.useCallback)((event) => {
|
|
56
|
+
if ((0, use_asset_drag_events_1.isAssetUploadDragEvent)(event) &&
|
|
57
|
+
assetTabFocusTimer.current !== null) {
|
|
58
|
+
window.clearTimeout(assetTabFocusTimer.current);
|
|
59
|
+
assetTabFocusTimer.current = null;
|
|
60
|
+
}
|
|
61
|
+
}, []);
|
|
44
62
|
(0, react_1.useImperativeHandle)(ExplorerPanelRef_1.explorerSidebarTabs, () => {
|
|
45
63
|
return {
|
|
46
64
|
getSelectedPanel: () => panel,
|
|
@@ -60,7 +78,7 @@ const ExplorerPanel = ({ readOnlyStudio }) => {
|
|
|
60
78
|
}, []);
|
|
61
79
|
return (jsx_runtime_1.jsx(CompSelectorRef_1.CompSelectorRef, { children: jsx_runtime_1.jsxs("div", { style: container, className: "css-reset", onPointerDown: onPointerDown, children: [
|
|
62
80
|
jsx_runtime_1.jsx("div", { style: tabsContainer, children: jsx_runtime_1.jsxs(Tabs_1.Tabs, { children: [
|
|
63
|
-
jsx_runtime_1.jsx(Tabs_1.Tab, { selected: panel === 'compositions', onClick: onCompositionsSelected, children: "Compositions" }), jsx_runtime_1.jsx(Tabs_1.Tab, { selected: panel === 'assets', onClick: onAssetsSelected, children: "Assets" })
|
|
81
|
+
jsx_runtime_1.jsx(Tabs_1.Tab, { selected: panel === 'compositions', onClick: onCompositionsSelected, children: "Compositions" }), jsx_runtime_1.jsx(Tabs_1.Tab, { selected: panel === 'assets', onClick: onAssetsSelected, onDragEnter: onAssetDragEnter, onDragLeave: onAssetDragLeave, children: "Assets" })
|
|
64
82
|
] }) }), panel === 'compositions' ? (jsx_runtime_1.jsx(CompositionSelector_1.CompositionSelector, {})) : (jsx_runtime_1.jsx(AssetSelector_1.AssetSelector, { readOnlyStudio: readOnlyStudio }))] }) }));
|
|
65
83
|
};
|
|
66
84
|
exports.ExplorerPanel = ExplorerPanel;
|
|
@@ -3,8 +3,9 @@ export type RenderInlineAction = (color: string) => React.ReactNode;
|
|
|
3
3
|
export type InlineActionProps = Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'children' | 'onClick' | 'style'> & {
|
|
4
4
|
readonly onClick: React.MouseEventHandler<HTMLButtonElement>;
|
|
5
5
|
readonly renderAction: RenderInlineAction;
|
|
6
|
+
readonly hoveredColor?: string;
|
|
6
7
|
readonly unhoveredColor?: string;
|
|
7
8
|
readonly variant: 'compact' | null;
|
|
8
9
|
readonly style?: React.CSSProperties;
|
|
9
10
|
};
|
|
10
|
-
export declare const InlineAction: ({ renderAction, onClick, disabled, title, unhoveredColor, variant, style: customStyle, className, ...buttonProps }: InlineActionProps) => import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
export declare const InlineAction: ({ renderAction, onClick, disabled, title, hoveredColor, unhoveredColor, variant, style: customStyle, className, ...buttonProps }: InlineActionProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -6,7 +6,7 @@ const react_1 = require("react");
|
|
|
6
6
|
const colors_1 = require("../helpers/colors");
|
|
7
7
|
const hoverable_1 = require("../helpers/hoverable");
|
|
8
8
|
const z_index_1 = require("../state/z-index");
|
|
9
|
-
const InlineAction = ({ renderAction, onClick, disabled, title, unhoveredColor = colors_1.LIGHT_TEXT, variant, style: customStyle, className, ...buttonProps }) => {
|
|
9
|
+
const InlineAction = ({ renderAction, onClick, disabled, title, hoveredColor = colors_1.WHITE, unhoveredColor = colors_1.LIGHT_TEXT, variant, style: customStyle, className, ...buttonProps }) => {
|
|
10
10
|
var _a;
|
|
11
11
|
const { tabIndex } = (0, z_index_1.useZIndex)();
|
|
12
12
|
const style = (0, react_1.useMemo)(() => {
|
|
@@ -27,11 +27,11 @@ const InlineAction = ({ renderAction, onClick, disabled, title, unhoveredColor =
|
|
|
27
27
|
? colors_1.TRANSPARENT
|
|
28
28
|
: (0, colors_1.getBackgroundFromHoverState)({ hovered: true, selected: false }),
|
|
29
29
|
idleColor: unhoveredColor,
|
|
30
|
-
hoverColor: disabled ? unhoveredColor :
|
|
30
|
+
hoverColor: disabled ? unhoveredColor : hoveredColor,
|
|
31
31
|
}),
|
|
32
32
|
...customStyle,
|
|
33
33
|
};
|
|
34
|
-
}, [customStyle, disabled, unhoveredColor, variant]);
|
|
34
|
+
}, [customStyle, disabled, hoveredColor, unhoveredColor, variant]);
|
|
35
35
|
return (jsx_runtime_1.jsx("button", { ...buttonProps, type: "button", className: className
|
|
36
36
|
? `${hoverable_1.HOVERABLE_CLASS_NAME} ${className}`
|
|
37
37
|
: hoverable_1.HOVERABLE_CLASS_NAME, disabled: disabled, onClick: onClick, style: style, tabIndex: tabIndex, title: title, "aria-label": (_a = buttonProps['aria-label']) !== null && _a !== void 0 ? _a : title, children: renderAction(colors_1.CURRENT_COLOR) }));
|
|
@@ -64,6 +64,6 @@ const InspectorLocationCopy = ({ children, location, name, openInEditorLocation
|
|
|
64
64
|
opacity: showAction ? 1 : 0,
|
|
65
65
|
pointerEvents: showAction ? 'auto' : 'none',
|
|
66
66
|
}, children: [
|
|
67
|
-
jsx_runtime_1.jsx(InspectorOpenInEditor_1.InspectorOpenInEditor, { contextForAgents: contextForAgents, location: openInEditorLocation }), contextForAgents ? (jsx_runtime_1.jsx(InlineAction_1.InlineAction, { variant: null, onClick: onCopy, renderAction: renderCopyAction, title: "Copy context for agents" })) : null] })) : null] }));
|
|
67
|
+
jsx_runtime_1.jsx(InspectorOpenInEditor_1.InspectorOpenInEditor, { locationType: null, contextForAgents: contextForAgents, location: openInEditorLocation }), contextForAgents ? (jsx_runtime_1.jsx(InlineAction_1.InlineAction, { variant: null, onClick: onCopy, renderAction: renderCopyAction, title: "Copy context for agents" })) : null] })) : null] }));
|
|
68
68
|
};
|
|
69
69
|
exports.InspectorLocationCopy = InspectorLocationCopy;
|
|
@@ -13,6 +13,7 @@ const z_index_1 = require("../state/z-index");
|
|
|
13
13
|
const get_open_in_menu_items_1 = require("./get-open-in-menu-items");
|
|
14
14
|
const InlineDropdown_1 = require("./InlineDropdown");
|
|
15
15
|
const NotificationCenter_1 = require("./Notifications/NotificationCenter");
|
|
16
|
+
const actions_1 = require("./RenderQueue/actions");
|
|
16
17
|
const use_default_editor_info_1 = require("./use-default-editor-info");
|
|
17
18
|
const splitButton = {
|
|
18
19
|
alignItems: 'center',
|
|
@@ -40,13 +41,14 @@ const mainButtonBase = {
|
|
|
40
41
|
whiteSpace: 'nowrap',
|
|
41
42
|
};
|
|
42
43
|
const editorButtonIconSize = 18;
|
|
43
|
-
const InspectorOpenInEditor = ({ contextForAgents = null, label, location }) => {
|
|
44
|
-
var _a;
|
|
44
|
+
const InspectorOpenInEditor = ({ contextForAgents = null, label, location, locationType }) => {
|
|
45
|
+
var _a, _b;
|
|
45
46
|
const { previewServerState } = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx);
|
|
46
47
|
const { setSelectedModal } = (0, react_1.useContext)(modals_1.SetSelectedModalContext);
|
|
47
48
|
const { tabIndex } = (0, z_index_1.useZIndex)();
|
|
48
49
|
const [hovered, setHovered] = (0, react_1.useState)(false);
|
|
49
50
|
const [dropdownOpened, setDropdownOpened] = (0, react_1.useState)(false);
|
|
51
|
+
const ignorePointerEnter = (0, react_1.useRef)(false);
|
|
50
52
|
const editorPickerAvailable = (0, use_default_editor_info_1.canUseEditorPicker)(previewServerState.type === 'connected');
|
|
51
53
|
const editorInfo = (0, use_default_editor_info_1.useDefaultEditorInfo)(editorPickerAvailable);
|
|
52
54
|
const codingAgentInfo = (0, use_default_editor_info_1.useDefaultCodingAgentInfo)(editorPickerAvailable);
|
|
@@ -62,6 +64,7 @@ const InspectorOpenInEditor = ({ contextForAgents = null, label, location }) =>
|
|
|
62
64
|
}
|
|
63
65
|
}, [location]);
|
|
64
66
|
const preferredEditorId = (0, use_default_editor_info_1.getPreferredEditorId)(editorInfo);
|
|
67
|
+
const preferredEditor = editorInfo === null || editorInfo === void 0 ? void 0 : editorInfo.installedEditors.find((editor) => editor.id === preferredEditorId);
|
|
65
68
|
const openWithCodingAgent = (0, react_1.useCallback)(async (codingAgentId, codingAgentName) => {
|
|
66
69
|
try {
|
|
67
70
|
const response = await (0, open_in_editor_1.openInCodingAgent)(codingAgentId, codingAgentId === 'copilot' ? null : contextForAgents);
|
|
@@ -73,12 +76,20 @@ const InspectorOpenInEditor = ({ contextForAgents = null, label, location }) =>
|
|
|
73
76
|
(0, NotificationCenter_1.showNotification)(err.message, 2000);
|
|
74
77
|
}
|
|
75
78
|
}, [contextForAgents]);
|
|
76
|
-
const editorName = (_a = window.remotion_editorName) !== null && _a !== void 0 ? _a : 'default editor';
|
|
77
|
-
const canOpenDefault = location !== null &&
|
|
79
|
+
const editorName = (_b = (_a = window.remotion_editorName) !== null && _a !== void 0 ? _a : preferredEditor === null || preferredEditor === void 0 ? void 0 : preferredEditor.nameWithType) !== null && _b !== void 0 ? _b : 'default editor';
|
|
80
|
+
const canOpenDefault = location !== null &&
|
|
81
|
+
(window.remotion_editorName !== null || preferredEditorId !== null);
|
|
78
82
|
const onOpenDefault = (0, react_1.useCallback)((event) => {
|
|
79
83
|
event.stopPropagation();
|
|
80
|
-
openWithEditor(null).catch(() => undefined);
|
|
81
|
-
}, [openWithEditor]);
|
|
84
|
+
openWithEditor(window.remotion_editorName === null ? preferredEditorId : null).catch(() => undefined);
|
|
85
|
+
}, [openWithEditor, preferredEditorId]);
|
|
86
|
+
const onDropdownOpenChange = (0, react_1.useCallback)((open) => {
|
|
87
|
+
setDropdownOpened(open);
|
|
88
|
+
if (!open) {
|
|
89
|
+
ignorePointerEnter.current = true;
|
|
90
|
+
setHovered(false);
|
|
91
|
+
}
|
|
92
|
+
}, []);
|
|
82
93
|
const mainHovered = hovered && !dropdownOpened;
|
|
83
94
|
const mainButtonStyle = (0, react_1.useMemo)(() => {
|
|
84
95
|
return {
|
|
@@ -113,6 +124,9 @@ const InspectorOpenInEditor = ({ contextForAgents = null, label, location }) =>
|
|
|
113
124
|
editorInfo,
|
|
114
125
|
excludeCodingAgentId: null,
|
|
115
126
|
excludeEditorId: preferredEditorId,
|
|
127
|
+
fileManagerDisabled: !(location === null || location === void 0 ? void 0 : location.source),
|
|
128
|
+
folder: locationType === 'folder',
|
|
129
|
+
location,
|
|
116
130
|
onConfigureApps: () => {
|
|
117
131
|
var _a;
|
|
118
132
|
var _b;
|
|
@@ -128,11 +142,34 @@ const InspectorOpenInEditor = ({ contextForAgents = null, label, location }) =>
|
|
|
128
142
|
onOpenInEditor: (editorId) => {
|
|
129
143
|
openWithEditor(editorId).catch(() => undefined);
|
|
130
144
|
},
|
|
145
|
+
onOpenInFileExplorer: () => {
|
|
146
|
+
if (!(location === null || location === void 0 ? void 0 : location.source)) {
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
(0, actions_1.openInFileExplorer)({ directory: location.source }).catch((err) => {
|
|
150
|
+
(0, NotificationCenter_1.showNotification)(`Could not open file: ${err.message}`, 2000);
|
|
151
|
+
});
|
|
152
|
+
},
|
|
153
|
+
onOpenInTerminal: (terminalId) => {
|
|
154
|
+
if (!(location === null || location === void 0 ? void 0 : location.source) || locationType !== 'folder') {
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
(0, open_in_editor_1.openInTerminal)(terminalId, location.source)
|
|
158
|
+
.then((response) => {
|
|
159
|
+
if (!response.success) {
|
|
160
|
+
(0, NotificationCenter_1.showNotification)('Could not open terminal', 2000);
|
|
161
|
+
}
|
|
162
|
+
})
|
|
163
|
+
.catch((err) => {
|
|
164
|
+
(0, NotificationCenter_1.showNotification)(`Could not open terminal: ${err.message}`, 2000);
|
|
165
|
+
});
|
|
166
|
+
},
|
|
131
167
|
});
|
|
132
168
|
}, [
|
|
133
169
|
codingAgentInfo,
|
|
134
170
|
editorInfo,
|
|
135
171
|
location,
|
|
172
|
+
locationType,
|
|
136
173
|
openWithCodingAgent,
|
|
137
174
|
openWithEditor,
|
|
138
175
|
preferredEditorId,
|
|
@@ -141,9 +178,16 @@ const InspectorOpenInEditor = ({ contextForAgents = null, label, location }) =>
|
|
|
141
178
|
if (!editorPickerAvailable) {
|
|
142
179
|
return null;
|
|
143
180
|
}
|
|
144
|
-
return (jsx_runtime_1.jsxs("div", { style: splitButton, onPointerEnter: () =>
|
|
181
|
+
return (jsx_runtime_1.jsxs("div", { style: splitButton, onPointerEnter: () => {
|
|
182
|
+
if (!ignorePointerEnter.current) {
|
|
183
|
+
setHovered(true);
|
|
184
|
+
}
|
|
185
|
+
}, onPointerLeave: () => {
|
|
186
|
+
ignorePointerEnter.current = false;
|
|
187
|
+
setHovered(false);
|
|
188
|
+
}, children: [
|
|
145
189
|
jsx_runtime_1.jsxs("button", { "aria-label": `Open in ${editorName}`, disabled: !canOpenDefault, onClick: onOpenDefault, style: mainButtonStyle, tabIndex: tabIndex, title: `Open in ${editorName}`, type: "button", children: [label, jsx_runtime_1.jsx(editor_1.EditorIcon, { editorId: preferredEditorId, size: editorButtonIconSize })
|
|
146
|
-
] }), jsx_runtime_1.jsx(InlineDropdown_1.InlineDropdown, { onOpenChange:
|
|
190
|
+
] }), jsx_runtime_1.jsx(InlineDropdown_1.InlineDropdown, { onOpenChange: onDropdownOpenChange, renderAction: renderDropdownAction, style: dropdownStyle, title: "Open in another app", unhoveredColor: dropdownForegroundColor, values: menuItems, variant: "compact" })
|
|
147
191
|
] }));
|
|
148
192
|
};
|
|
149
193
|
exports.InspectorOpenInEditor = InspectorOpenInEditor;
|
|
@@ -119,7 +119,7 @@ const AlignmentControls = ({ track }) => {
|
|
|
119
119
|
shouldResortToDefaultValueIfUndefined: true,
|
|
120
120
|
})) !== null && _c !== void 0 ? _c : fieldSchema.default) !== null && _d !== void 0 ? _d : '0px 0px')
|
|
121
121
|
: String((_e = fieldSchema.default) !== null && _e !== void 0 ? _e : '0px 0px');
|
|
122
|
-
const [currentX, currentY] = (0, timeline_translate_utils_1.parseTranslate)(currentTranslate);
|
|
122
|
+
const [currentX, currentY, currentZ] = (0, timeline_translate_utils_1.parseTranslate)(currentTranslate);
|
|
123
123
|
const { x: newX, y: newY } = (0, alignment_controls_1.computeAlignedTranslate)({
|
|
124
124
|
direction,
|
|
125
125
|
elementRect,
|
|
@@ -128,7 +128,7 @@ const AlignmentControls = ({ track }) => {
|
|
|
128
128
|
currentTranslateY: currentY,
|
|
129
129
|
scale,
|
|
130
130
|
});
|
|
131
|
-
const newValue = (0, timeline_translate_utils_1.serializeTranslate)(newX, newY);
|
|
131
|
+
const newValue = (0, timeline_translate_utils_1.serializeTranslate)([newX, newY, currentZ]);
|
|
132
132
|
const undoLabels = {
|
|
133
133
|
left: 'Align left',
|
|
134
134
|
'center-h': 'Align center horizontally',
|