@remotion/studio 4.0.506 → 4.0.508
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/api/copy-render-output-to-asset.d.ts +4 -0
- package/dist/api/copy-render-output-to-asset.js +11 -0
- package/dist/components/AssetSelector.js +19 -4
- package/dist/components/AssetSelectorItem.js +2 -2
- package/dist/components/CodingAgentIcon.d.ts +6 -0
- package/dist/components/CodingAgentIcon.js +12 -0
- package/dist/components/ConfigureDefaultEditorModal.d.ts +1 -3
- package/dist/components/ConfigureDefaultEditorModal.js +67 -77
- package/dist/components/ConfigureLicenseModal.d.ts +1 -4
- package/dist/components/ConfigureLicenseModal.js +89 -81
- package/dist/components/ContextMenu.d.ts +1 -0
- package/dist/components/ContextMenu.js +42 -13
- package/dist/components/EditorContent.js +4 -3
- package/dist/components/EditorContexts.js +6 -5
- package/dist/components/ExpandedTracksProvider.js +10 -53
- package/dist/components/InlineAction.d.ts +2 -1
- package/dist/components/InlineAction.js +3 -3
- package/dist/components/InspectorLocationCopy.js +8 -8
- package/dist/components/InspectorOpenInEditor.d.ts +2 -0
- package/dist/components/InspectorOpenInEditor.js +81 -50
- package/dist/components/InspectorPanel/AlignmentControls.js +2 -2
- package/dist/components/InspectorPanel/CompositionInspector.js +3 -1
- package/dist/components/InspectorPanel/SequenceInspectorHeader.d.ts +3 -0
- package/dist/components/InspectorPanel/SequenceInspectorHeader.js +22 -4
- package/dist/components/InspectorPanel/SequenceSelectionInspector.js +1 -1
- package/dist/components/InspectorPanel/styles.js +1 -1
- package/dist/components/InspectorSequenceSection.js +36 -4
- package/dist/components/Menu/MenuSectionHeader.d.ts +4 -0
- package/dist/components/Menu/MenuSectionHeader.js +20 -0
- package/dist/components/Menu/SubMenu.js +13 -2
- package/dist/components/Menu/menu-tree-context.d.ts +3 -0
- package/dist/components/Menu/menu-tree-context.js +13 -0
- package/dist/components/MenuBuildIndicator.js +1 -1
- package/dist/components/NewComposition/ComboBox.d.ts +6 -1
- package/dist/components/NewComposition/MenuContent.js +27 -19
- package/dist/components/NewComposition/menu-typeahead.js +2 -2
- package/dist/components/PlayPause.d.ts +1 -1
- package/dist/components/PlayPause.js +61 -12
- package/dist/components/Preview.js +29 -4
- 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.d.ts +1 -0
- package/dist/components/RenderModal/SchemaEditor/ZodEnumEditor.js +3 -3
- 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 +8 -3
- 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 +2 -2
- 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/RenderModal/ServerRenderModal.js +4 -0
- package/dist/components/RenderQueue/RenderQueueItem.js +8 -2
- package/dist/components/RenderQueue/actions.d.ts +4 -2
- package/dist/components/RenderQueue/actions.js +4 -2
- package/dist/components/RenderQueue/index.js +3 -4
- package/dist/components/RenderQueue/use-render-output-file-drag.d.ts +8 -0
- package/dist/components/RenderQueue/use-render-output-file-drag.js +121 -0
- package/dist/components/SegmentedControl.js +0 -1
- package/dist/components/SelectedOutlineCanvasRotation.d.ts +9 -0
- package/dist/components/SelectedOutlineCanvasRotation.js +237 -0
- package/dist/components/SelectedOutlineElement.d.ts +16 -18
- package/dist/components/SelectedOutlineElement.js +144 -931
- package/dist/components/SelectedOutlineKeyboardControls.d.ts +7 -0
- package/dist/components/SelectedOutlineKeyboardControls.js +261 -0
- package/dist/components/SelectedOutlineOverlay.d.ts +7 -14
- package/dist/components/SelectedOutlineOverlay.js +378 -864
- package/dist/components/SelectedOutlinePolygon.d.ts +26 -0
- package/dist/components/SelectedOutlinePolygon.js +360 -0
- package/dist/components/SelectedOutlineRenderer.d.ts +19 -0
- package/dist/components/SelectedOutlineRenderer.js +225 -0
- package/dist/components/SelectedOutlineRotationCornerHandle.d.ts +17 -0
- package/dist/components/SelectedOutlineRotationCornerHandle.js +271 -0
- package/dist/components/SelectedOutlineScaleEdgeLine.d.ts +17 -0
- package/dist/components/SelectedOutlineScaleEdgeLine.js +215 -0
- package/dist/components/SelectedOutlineSnapIndicators.d.ts +9 -0
- package/dist/components/SelectedOutlineSnapIndicators.js +29 -0
- package/dist/components/SelectedOutlineTransformOriginHandle.d.ts +9 -0
- package/dist/components/SelectedOutlineTransformOriginHandle.js +312 -0
- package/dist/components/SelectedOutlineUvControls.d.ts +3 -9
- package/dist/components/SelectedOutlineUvControls.js +57 -12
- package/dist/components/SequencePropsSubscriptionProvider.js +8 -0
- package/dist/components/SettingsContext.d.ts +15 -0
- package/dist/components/SettingsContext.js +116 -0
- package/dist/components/SettingsModal.js +10 -4
- package/dist/components/SettingsModalFooter.d.ts +1 -3
- package/dist/components/SettingsModalFooter.js +4 -6
- package/dist/components/ShowOutlinesProvider.js +2 -3
- package/dist/components/Timeline/EasingEditorModal.js +66 -22
- package/dist/components/Timeline/SequencePropsObserver.js +97 -1
- package/dist/components/Timeline/SubscribeToNodePaths.js +4 -2
- package/dist/components/Timeline/Timeline.js +22 -5
- package/dist/components/Timeline/TimelineDuplicateCount.d.ts +4 -0
- package/dist/components/Timeline/TimelineDuplicateCount.js +28 -0
- package/dist/components/Timeline/TimelineEffectItem.js +1 -4
- package/dist/components/Timeline/TimelineExpandedKeyframeRow.js +3 -23
- package/dist/components/Timeline/TimelineExpandedTrackKeyframes.d.ts +4 -2
- package/dist/components/Timeline/TimelineExpandedTrackKeyframes.js +11 -1
- package/dist/components/Timeline/TimelineFieldRowContent.js +10 -3
- 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 +45 -2
- package/dist/components/Timeline/TimelineSequence.js +28 -25
- package/dist/components/Timeline/TimelineSequenceItem.js +91 -28
- package/dist/components/Timeline/TimelineSequencePropItem.js +5 -2
- package/dist/components/Timeline/TimelineTrack.js +2 -1
- 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.d.ts +6 -3
- package/dist/components/Timeline/get-sequence-context-menu-items.js +69 -57
- 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/use-expanded-track-keyframe-rows.js +36 -4
- package/dist/components/Timeline/{use-open-sequence-in-editor.d.ts → use-open-sequence-in-apps.d.ts} +4 -1
- package/dist/components/Timeline/{use-open-sequence-in-editor.js → use-open-sequence-in-apps.js} +21 -5
- 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 +45 -9
- 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-expanded-tree.d.ts +4 -0
- package/dist/components/Timeline/use-timeline-expanded-tree.js +45 -1
- 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/get-open-in-menu-items.d.ts +17 -0
- package/dist/components/get-open-in-menu-items.js +144 -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 +7 -2
- package/dist/components/selected-outline-measurement.js +28 -1
- package/dist/components/selected-outline-order.d.ts +12 -0
- package/dist/components/selected-outline-order.js +251 -0
- package/dist/components/selected-outline-types.d.ts +15 -10
- package/dist/components/svg-point-to-client-point.d.ts +2 -0
- package/dist/components/svg-point-to-client-point.js +10 -0
- package/dist/components/use-auto-save-config.d.ts +8 -0
- package/dist/components/use-auto-save-config.js +74 -0
- package/dist/components/use-default-editor-info.d.ts +1 -0
- package/dist/components/use-default-editor-info.js +10 -30
- package/dist/esm/{chunk-jefhcs5z.js → chunk-fgedsvhb.js} +1 -2
- package/dist/esm/{chunk-b49ec3nz.js → chunk-zpn4m49r.js} +12924 -10139
- package/dist/esm/index.mjs +357 -2
- package/dist/esm/internals.mjs +12923 -10138
- package/dist/esm/previewEntry.mjs +12771 -9986
- package/dist/esm/renderEntry.mjs +2 -2
- package/dist/helpers/are-sequence-node-path-infos-equal.d.ts +2 -0
- package/dist/helpers/are-sequence-node-path-infos-equal.js +27 -0
- package/dist/helpers/calculate-timeline.js +3 -3
- package/dist/helpers/client-id.js +8 -1
- package/dist/helpers/format-file-location.d.ts +1 -1
- package/dist/helpers/format-file-location.js +3 -3
- package/dist/helpers/get-box-quads-polyfill-internals.js +10 -2
- package/dist/helpers/migrate-expanded-tracks-for-subscription-key.js +3 -3
- package/dist/helpers/open-in-editor.d.ts +4 -1
- package/dist/helpers/open-in-editor.js +9 -1
- 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/studio-runtime-config.js +3 -0
- package/dist/helpers/timeline-node-path-key.d.ts +2 -0
- package/dist/helpers/timeline-node-path-key.js +3 -1
- package/dist/helpers/use-asset-drag-events.d.ts +2 -1
- package/dist/helpers/use-asset-drag-events.js +14 -6
- package/dist/helpers/use-menu-structure.js +2 -2
- package/dist/helpers/use-runtime-values.d.ts +1 -3
- 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/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/state/timeline-sequence-hover.d.ts +9 -3
- package/dist/state/timeline-sequence-hover.js +63 -12
- package/dist/state/transform-3d-mode.d.ts +10 -0
- package/dist/state/transform-3d-mode.js +27 -0
- package/dist/state/z-index.js +5 -8
- package/package.json +12 -12
|
@@ -44,6 +44,7 @@ const react_dom_1 = __importDefault(require("react-dom"));
|
|
|
44
44
|
const mobile_layout_1 = require("../helpers/mobile-layout");
|
|
45
45
|
const noop_1 = require("../helpers/noop");
|
|
46
46
|
const z_index_1 = require("../state/z-index");
|
|
47
|
+
const menu_tree_context_1 = require("./Menu/menu-tree-context");
|
|
47
48
|
const portals_1 = require("./Menu/portals");
|
|
48
49
|
const styles_1 = require("./Menu/styles");
|
|
49
50
|
const MenuContent_1 = require("./NewComposition/MenuContent");
|
|
@@ -70,8 +71,7 @@ const notifyContextMenuOpened = (id) => {
|
|
|
70
71
|
detail: id,
|
|
71
72
|
}));
|
|
72
73
|
};
|
|
73
|
-
const ContextMenuPortal = ({ sizeSource, currentZIndex, onHide, opened }) => {
|
|
74
|
-
const menuRef = (0, react_1.useRef)(null);
|
|
74
|
+
const ContextMenuPortal = ({ menuTreeId, sizeSource, currentZIndex, onHide, opened }) => {
|
|
75
75
|
const size = player_1.PlayerInternals.useElementSize(sizeSource, {
|
|
76
76
|
triggerOnWindowResize: true,
|
|
77
77
|
shouldApplyCssTransforms: true,
|
|
@@ -138,11 +138,11 @@ const ContextMenuPortal = ({ sizeSource, currentZIndex, onHide, opened }) => {
|
|
|
138
138
|
}, []);
|
|
139
139
|
(0, react_1.useEffect)(() => {
|
|
140
140
|
const dismissWithoutClickThrough = (event) => {
|
|
141
|
-
var _a;
|
|
142
141
|
if (event.button !== 0) {
|
|
143
142
|
return;
|
|
144
143
|
}
|
|
145
|
-
|
|
144
|
+
const target = event.target;
|
|
145
|
+
if ((0, menu_tree_context_1.isNodeInMenuTree)(target, menuTreeId)) {
|
|
146
146
|
return;
|
|
147
147
|
}
|
|
148
148
|
event.preventDefault();
|
|
@@ -154,7 +154,7 @@ const ContextMenuPortal = ({ sizeSource, currentZIndex, onHide, opened }) => {
|
|
|
154
154
|
return () => {
|
|
155
155
|
window.removeEventListener('pointerdown', dismissWithoutClickThrough, true);
|
|
156
156
|
};
|
|
157
|
-
}, [onHide]);
|
|
157
|
+
}, [menuTreeId, onHide]);
|
|
158
158
|
// Prevent deselection of a selected item
|
|
159
159
|
const onMenuPointerDown = (0, react_1.useCallback)((e) => {
|
|
160
160
|
e.stopPropagation();
|
|
@@ -162,11 +162,12 @@ const ContextMenuPortal = ({ sizeSource, currentZIndex, onHide, opened }) => {
|
|
|
162
162
|
if (!portalStyle) {
|
|
163
163
|
return null;
|
|
164
164
|
}
|
|
165
|
-
return react_dom_1.default.createPortal(jsx_runtime_1.jsx("div", { style: contextMenuFullScreenOverlay, children: jsx_runtime_1.jsx("div", { style: contextMenuOuterPortal, className: "css-reset", children: jsx_runtime_1.jsx(z_index_1.HigherZIndex, { onOutsideClick: onHide, onEscape: onHide, outsideClickButton: "primary", children: jsx_runtime_1.jsx("div", {
|
|
165
|
+
return react_dom_1.default.createPortal(jsx_runtime_1.jsx("div", { style: contextMenuFullScreenOverlay, children: jsx_runtime_1.jsx("div", { style: contextMenuOuterPortal, className: "css-reset", children: jsx_runtime_1.jsx(z_index_1.HigherZIndex, { onOutsideClick: onHide, onEscape: onHide, outsideClickButton: "primary", children: jsx_runtime_1.jsx("div", { "data-remotion-menu-tree-id": menuTreeId, style: portalStyle, onPointerDown: onMenuPointerDown, children: jsx_runtime_1.jsx(menu_tree_context_1.MenuTreeContext.Provider, { value: menuTreeId, children: jsx_runtime_1.jsx(MenuContent_1.MenuContent, { onNextMenu: noop_1.noop, onPreviousMenu: noop_1.noop, values: opened.values, onHide: onHide, leaveLeftSpace: true, preselectIndex: false, topItemCanBeUnselected: false, fixedHeight: null }) }) }) }) }) }), (0, portals_1.getPortal)(currentZIndex));
|
|
166
166
|
};
|
|
167
167
|
exports.ContextMenu = react_1.default.forwardRef(({ children, getItems, style = undefined, className = undefined, onPointerDown = undefined, }, forwardedRef) => {
|
|
168
168
|
const ref = (0, react_1.useRef)(null);
|
|
169
169
|
const idRef = (0, react_1.useRef)(nextContextMenuId++);
|
|
170
|
+
const menuTreeIdRef = (0, react_1.useRef)((0, menu_tree_context_1.getNextMenuTreeId)());
|
|
170
171
|
const invocationRef = (0, react_1.useRef)(0);
|
|
171
172
|
const getItemsRef = (0, react_1.useRef)(getItems);
|
|
172
173
|
getItemsRef.current = getItems;
|
|
@@ -232,17 +233,29 @@ exports.ContextMenu = react_1.default.forwardRef(({ children, getItems, style =
|
|
|
232
233
|
};
|
|
233
234
|
}, [onHide]);
|
|
234
235
|
return (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
|
|
235
|
-
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, { sizeSource: ref, currentZIndex: currentZIndex, onHide: onHide, opened: opened })) : null] }));
|
|
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] }));
|
|
236
237
|
});
|
|
237
238
|
exports.ContextMenu.displayName = 'ContextMenu';
|
|
238
|
-
const ContextMenuForTarget = ({ triggerRef, getItems }) => {
|
|
239
|
+
const ContextMenuForTarget = ({ triggerRef, getItems, onOpenChange = undefined }) => {
|
|
239
240
|
const idRef = (0, react_1.useRef)(nextContextMenuId++);
|
|
241
|
+
const menuTreeIdRef = (0, react_1.useRef)((0, menu_tree_context_1.getNextMenuTreeId)());
|
|
240
242
|
const invocationRef = (0, react_1.useRef)(0);
|
|
243
|
+
const isOpenRef = (0, react_1.useRef)(false);
|
|
241
244
|
const getItemsRef = (0, react_1.useRef)(getItems);
|
|
245
|
+
const onOpenChangeRef = (0, react_1.useRef)(onOpenChange);
|
|
242
246
|
getItemsRef.current = getItems;
|
|
247
|
+
onOpenChangeRef.current = onOpenChange;
|
|
243
248
|
const [opened, setOpened] = (0, react_1.useState)({ type: 'not-open' });
|
|
244
249
|
const [body, setBody] = (0, react_1.useState)(null);
|
|
245
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
|
+
}, []);
|
|
246
259
|
(0, react_1.useEffect)(() => {
|
|
247
260
|
// Access document.body after mount so importing this component stays safe
|
|
248
261
|
// in DOM-less test environments.
|
|
@@ -258,8 +271,21 @@ const ContextMenuForTarget = ({ triggerRef, getItems }) => {
|
|
|
258
271
|
e.preventDefault();
|
|
259
272
|
e.stopPropagation();
|
|
260
273
|
const currentInvocation = ++invocationRef.current;
|
|
261
|
-
|
|
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
|
+
}
|
|
262
285
|
if (currentInvocation !== invocationRef.current || values === null) {
|
|
286
|
+
if (currentInvocation === invocationRef.current) {
|
|
287
|
+
setOpenLifecycleState(false);
|
|
288
|
+
}
|
|
263
289
|
return false;
|
|
264
290
|
}
|
|
265
291
|
notifyContextMenuOpened(idRef.current);
|
|
@@ -275,16 +301,19 @@ const ContextMenuForTarget = ({ triggerRef, getItems }) => {
|
|
|
275
301
|
return () => {
|
|
276
302
|
current.removeEventListener('contextmenu', onClick);
|
|
277
303
|
};
|
|
278
|
-
}, [triggerRef]);
|
|
304
|
+
}, [setOpenLifecycleState, triggerRef]);
|
|
279
305
|
(0, react_1.useEffect)(() => {
|
|
280
306
|
const invocation = invocationRef;
|
|
281
307
|
return () => {
|
|
282
308
|
invocation.current++;
|
|
309
|
+
setOpenLifecycleState(false);
|
|
283
310
|
};
|
|
284
|
-
}, []);
|
|
311
|
+
}, [setOpenLifecycleState]);
|
|
285
312
|
const onHide = (0, react_1.useCallback)(() => {
|
|
313
|
+
invocationRef.current++;
|
|
314
|
+
setOpenLifecycleState(false);
|
|
286
315
|
setOpened({ type: 'not-open' });
|
|
287
|
-
}, []);
|
|
316
|
+
}, [setOpenLifecycleState]);
|
|
288
317
|
(0, react_1.useEffect)(() => {
|
|
289
318
|
const onOtherContextMenuOpened = (event) => {
|
|
290
319
|
if (event.detail === idRef.current) {
|
|
@@ -297,6 +326,6 @@ const ContextMenuForTarget = ({ triggerRef, getItems }) => {
|
|
|
297
326
|
window.removeEventListener(contextMenuOpenedEvent, onOtherContextMenuOpened);
|
|
298
327
|
};
|
|
299
328
|
}, [onHide]);
|
|
300
|
-
return opened.type === 'open' ? (jsx_runtime_1.jsx(ContextMenuPortal, { sizeSource: body, currentZIndex: currentZIndex, onHide: onHide, opened: opened })) : null;
|
|
329
|
+
return opened.type === 'open' ? (jsx_runtime_1.jsx(ContextMenuPortal, { menuTreeId: menuTreeIdRef.current, sizeSource: body, currentZIndex: currentZIndex, onHide: onHide, opened: opened })) : null;
|
|
301
330
|
};
|
|
302
331
|
exports.ContextMenuForTarget = ContextMenuForTarget;
|
|
@@ -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;
|
|
@@ -18,6 +18,7 @@ const ModalsProvider_1 = require("./ModalsProvider");
|
|
|
18
18
|
const ClientRenderQueueProcessor_1 = require("./RenderQueue/ClientRenderQueueProcessor");
|
|
19
19
|
const context_1 = require("./RenderQueue/context");
|
|
20
20
|
const SetTimelineInOutProvider_1 = require("./SetTimelineInOutProvider");
|
|
21
|
+
const SettingsContext_1 = require("./SettingsContext");
|
|
21
22
|
const ShowGuidesProvider_1 = require("./ShowGuidesProvider");
|
|
22
23
|
const ShowOutlinesProvider_1 = require("./ShowOutlinesProvider");
|
|
23
24
|
const ShowRulersProvider_1 = require("./ShowRulersProvider");
|
|
@@ -25,10 +26,10 @@ const SnappingProvider_1 = require("./SnappingProvider");
|
|
|
25
26
|
const VisualControlsUndoSync_1 = require("./VisualControls/VisualControlsUndoSync");
|
|
26
27
|
const ZoomGesturesProvider_1 = require("./ZoomGesturesProvider");
|
|
27
28
|
const EditorContexts = ({ children }) => {
|
|
28
|
-
return (jsx_runtime_1.jsx(get_zod_if_possible_1.ZodProvider, { children: jsx_runtime_1.jsx(VisualControls_1.VisualControlsProvider, { children: jsx_runtime_1.
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
29
|
+
return (jsx_runtime_1.jsx(get_zod_if_possible_1.ZodProvider, { children: jsx_runtime_1.jsx(VisualControls_1.VisualControlsProvider, { children: jsx_runtime_1.jsx(client_id_1.PreviewServerConnection, { children: jsx_runtime_1.jsxs(SettingsContext_1.SettingsProvider, { children: [
|
|
30
|
+
jsx_runtime_1.jsx(VisualControlsUndoSync_1.VisualControlsUndoSync, {}), jsx_runtime_1.jsxs(context_1.RenderQueueContextProvider, { children: [
|
|
31
|
+
jsx_runtime_1.jsx(ClientRenderQueueProcessor_1.ClientRenderQueueProcessor, {}), jsx_runtime_1.jsx(keybindings_1.KeybindingContextProvider, { children: jsx_runtime_1.jsx(CheckerboardProvider_1.CheckerboardProvider, { children: jsx_runtime_1.jsx(ZoomGesturesProvider_1.ZoomGesturesProvider, { children: jsx_runtime_1.jsx(ShowRulersProvider_1.ShowRulersProvider, { children: jsx_runtime_1.jsx(ShowGuidesProvider_1.ShowGuidesProvider, { children: jsx_runtime_1.jsx(ShowOutlinesProvider_1.ShowOutlinesProvider, { children: jsx_runtime_1.jsx(SnappingProvider_1.SnappingProvider, { children: jsx_runtime_1.jsx(preview_size_1.PreviewSizeProvider, { children: jsx_runtime_1.jsx(ModalsProvider_1.ModalsProvider, { children: jsx_runtime_1.jsx(MediaVolumeProvider_1.MediaVolumeProvider, { children: jsx_runtime_1.jsx(player_1.PlayerInternals.PlayerEmitterProvider, { currentPlaybackRate: null, children: jsx_runtime_1.jsx(sidebar_1.SidebarContextProvider, { children: jsx_runtime_1.jsx(folders_1.FolderContextProvider, { children: jsx_runtime_1.jsx(highest_z_index_1.HighestZIndexProvider, { children: jsx_runtime_1.jsx(SetTimelineInOutProvider_1.SetTimelineInOutProvider, { children: jsx_runtime_1.jsx(ExpandedTracksProvider_1.ExpandedTracksProvider, { children: children }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) })
|
|
32
|
+
] })
|
|
33
|
+
] }) }) }) }));
|
|
33
34
|
};
|
|
34
35
|
exports.EditorContexts = EditorContexts;
|
|
@@ -4,46 +4,11 @@ exports.ExpandedTracksProvider = exports.ExpandedTracksSetterContext = exports.E
|
|
|
4
4
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
5
|
const react_1 = require("react");
|
|
6
6
|
const migrate_expanded_tracks_for_subscription_key_1 = require("../helpers/migrate-expanded-tracks-for-subscription-key");
|
|
7
|
+
const persist_boolean_map_1 = require("../helpers/persist-boolean-map");
|
|
7
8
|
const timeline_node_path_key_1 = require("../helpers/timeline-node-path-key");
|
|
8
|
-
const SESSION_STORAGE_KEY = 'remotion.editor.expandedTracks';
|
|
9
|
-
const onlyCollapsedTrackValues = (state) => {
|
|
10
|
-
const result = {};
|
|
11
|
-
for (const [key, value] of Object.entries(state)) {
|
|
12
|
-
if (value === false) {
|
|
13
|
-
result[key] = false;
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
return result;
|
|
17
|
-
};
|
|
9
|
+
const SESSION_STORAGE_KEY = 'remotion.editor.expandedTracks.v2';
|
|
18
10
|
const loadExpandedTracks = () => {
|
|
19
|
-
|
|
20
|
-
return {};
|
|
21
|
-
}
|
|
22
|
-
try {
|
|
23
|
-
const raw = window.sessionStorage.getItem(SESSION_STORAGE_KEY);
|
|
24
|
-
if (raw === null) {
|
|
25
|
-
return {};
|
|
26
|
-
}
|
|
27
|
-
const parsed = JSON.parse(raw);
|
|
28
|
-
if (!parsed || typeof parsed !== 'object') {
|
|
29
|
-
return {};
|
|
30
|
-
}
|
|
31
|
-
return onlyCollapsedTrackValues(parsed);
|
|
32
|
-
}
|
|
33
|
-
catch (_a) {
|
|
34
|
-
return {};
|
|
35
|
-
}
|
|
36
|
-
};
|
|
37
|
-
const persistExpandedTracks = (state) => {
|
|
38
|
-
if (typeof window === 'undefined') {
|
|
39
|
-
return;
|
|
40
|
-
}
|
|
41
|
-
try {
|
|
42
|
-
window.sessionStorage.setItem(SESSION_STORAGE_KEY, JSON.stringify(onlyCollapsedTrackValues(state)));
|
|
43
|
-
}
|
|
44
|
-
catch (_a) {
|
|
45
|
-
// Ignore quota errors or disabled storage.
|
|
46
|
-
}
|
|
11
|
+
return (0, persist_boolean_map_1.loadPersistedBooleanMap)(SESSION_STORAGE_KEY);
|
|
47
12
|
};
|
|
48
13
|
exports.ExpandedTracksGetterContext = (0, react_1.createContext)({
|
|
49
14
|
getIsExpanded: () => {
|
|
@@ -78,31 +43,23 @@ const ExpandedTracksProvider = ({ children }) => {
|
|
|
78
43
|
let changed = false;
|
|
79
44
|
const next = { ...prev };
|
|
80
45
|
for (const key of keysToExpand) {
|
|
81
|
-
if (next[key]
|
|
82
|
-
|
|
46
|
+
if (!next[key]) {
|
|
47
|
+
next[key] = true;
|
|
83
48
|
changed = true;
|
|
84
49
|
}
|
|
85
50
|
}
|
|
86
51
|
if (!changed) {
|
|
87
52
|
return prev;
|
|
88
53
|
}
|
|
89
|
-
|
|
54
|
+
(0, persist_boolean_map_1.persistBooleanMap)(SESSION_STORAGE_KEY, next);
|
|
90
55
|
return next;
|
|
91
56
|
});
|
|
92
57
|
}, []);
|
|
93
58
|
const toggleTrack = (0, react_1.useCallback)((nodePathInfo) => {
|
|
94
59
|
setExpandedTracks((prev) => {
|
|
95
|
-
var _a;
|
|
96
60
|
const key = (0, timeline_node_path_key_1.timelineNodePathInfoToKey)(nodePathInfo);
|
|
97
|
-
const next =
|
|
98
|
-
|
|
99
|
-
if (isExpanded) {
|
|
100
|
-
next[key] = false;
|
|
101
|
-
}
|
|
102
|
-
else {
|
|
103
|
-
delete next[key];
|
|
104
|
-
}
|
|
105
|
-
persistExpandedTracks(next);
|
|
61
|
+
const next = (0, persist_boolean_map_1.toggleBooleanMapKey)(prev, key);
|
|
62
|
+
(0, persist_boolean_map_1.persistBooleanMap)(SESSION_STORAGE_KEY, next);
|
|
106
63
|
return next;
|
|
107
64
|
});
|
|
108
65
|
}, []);
|
|
@@ -112,14 +69,14 @@ const ExpandedTracksProvider = ({ children }) => {
|
|
|
112
69
|
if (!next) {
|
|
113
70
|
return prev;
|
|
114
71
|
}
|
|
115
|
-
|
|
72
|
+
(0, persist_boolean_map_1.persistBooleanMap)(SESSION_STORAGE_KEY, next);
|
|
116
73
|
return next;
|
|
117
74
|
});
|
|
118
75
|
}, []);
|
|
119
76
|
const getterValue = (0, react_1.useMemo)(() => ({
|
|
120
77
|
getIsExpanded: (nodePathInfo) => {
|
|
121
78
|
var _a;
|
|
122
|
-
return (_a = expandedTracks[(0, timeline_node_path_key_1.timelineNodePathInfoToKey)(nodePathInfo)]) !== null && _a !== void 0 ? _a :
|
|
79
|
+
return (_a = expandedTracks[(0, timeline_node_path_key_1.timelineNodePathInfoToKey)(nodePathInfo)]) !== null && _a !== void 0 ? _a : false;
|
|
123
80
|
},
|
|
124
81
|
}), [expandedTracks]);
|
|
125
82
|
const setterValue = (0, react_1.useMemo)(() => ({
|
|
@@ -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) }));
|
|
@@ -38,8 +38,8 @@ const icon = {
|
|
|
38
38
|
const InspectorLocationCopy = ({ children, location, name, openInEditorLocation }) => {
|
|
39
39
|
const [hovered, setHovered] = (0, react_1.useState)(false);
|
|
40
40
|
const [focusedWithin, setFocusedWithin] = (0, react_1.useState)(false);
|
|
41
|
-
const
|
|
42
|
-
return (0, format_file_location_1.
|
|
41
|
+
const contextForAgents = (0, react_1.useMemo)(() => {
|
|
42
|
+
return (0, format_file_location_1.formatContextForAgents)({
|
|
43
43
|
location,
|
|
44
44
|
name,
|
|
45
45
|
root: window.remotion_cwd,
|
|
@@ -50,20 +50,20 @@ const InspectorLocationCopy = ({ children, location, name, openInEditorLocation
|
|
|
50
50
|
}, []);
|
|
51
51
|
const onCopy = (0, react_1.useCallback)((event) => {
|
|
52
52
|
event.stopPropagation();
|
|
53
|
-
if (!
|
|
53
|
+
if (!contextForAgents) {
|
|
54
54
|
return;
|
|
55
55
|
}
|
|
56
|
-
navigator.clipboard.writeText(
|
|
56
|
+
navigator.clipboard.writeText(contextForAgents).catch((err) => {
|
|
57
57
|
(0, NotificationCenter_1.showNotification)(`Could not copy to clipboard: ${err.message}`, 2000);
|
|
58
58
|
});
|
|
59
|
-
}, [
|
|
59
|
+
}, [contextForAgents]);
|
|
60
60
|
const showAction = hovered || focusedWithin;
|
|
61
|
-
return (jsx_runtime_1.jsxs("div", { style: row, onPointerEnter: () => setHovered(true), onPointerLeave: () => setHovered(false), onFocus: () => setFocusedWithin(true), onBlur: () => setFocusedWithin(false), children: [
|
|
62
|
-
jsx_runtime_1.jsx("div", { style: content, children: children }),
|
|
61
|
+
return (jsx_runtime_1.jsxs("div", { "aria-label": "Inspector source location", role: "group", style: row, onPointerEnter: () => setHovered(true), onPointerLeave: () => setHovered(false), onFocus: () => setFocusedWithin(true), onBlur: () => setFocusedWithin(false), children: [
|
|
62
|
+
jsx_runtime_1.jsx("div", { style: content, children: children }), contextForAgents || openInEditorLocation ? (jsx_runtime_1.jsxs("div", { style: {
|
|
63
63
|
...action,
|
|
64
64
|
opacity: showAction ? 1 : 0,
|
|
65
65
|
pointerEvents: showAction ? 'auto' : 'none',
|
|
66
66
|
}, children: [
|
|
67
|
-
jsx_runtime_1.jsx(InspectorOpenInEditor_1.InspectorOpenInEditor, { location: openInEditorLocation }),
|
|
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;
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import type { OriginalPosition } from '../error-overlay/react-overlay/utils/get-source-map';
|
|
3
3
|
export declare const InspectorOpenInEditor: React.FC<{
|
|
4
|
+
readonly contextForAgents?: string | null;
|
|
4
5
|
readonly location: OriginalPosition | null;
|
|
5
6
|
readonly label?: React.ReactNode;
|
|
7
|
+
readonly locationType: 'file' | 'folder' | null;
|
|
6
8
|
}>;
|
|
@@ -10,8 +10,10 @@ const caret_1 = require("../icons/caret");
|
|
|
10
10
|
const editor_1 = require("../icons/editor");
|
|
11
11
|
const modals_1 = require("../state/modals");
|
|
12
12
|
const z_index_1 = require("../state/z-index");
|
|
13
|
+
const get_open_in_menu_items_1 = require("./get-open-in-menu-items");
|
|
13
14
|
const InlineDropdown_1 = require("./InlineDropdown");
|
|
14
15
|
const NotificationCenter_1 = require("./Notifications/NotificationCenter");
|
|
16
|
+
const actions_1 = require("./RenderQueue/actions");
|
|
15
17
|
const use_default_editor_info_1 = require("./use-default-editor-info");
|
|
16
18
|
const splitButton = {
|
|
17
19
|
alignItems: 'center',
|
|
@@ -38,23 +40,18 @@ const mainButtonBase = {
|
|
|
38
40
|
padding: '0 6px',
|
|
39
41
|
whiteSpace: 'nowrap',
|
|
40
42
|
};
|
|
41
|
-
const menuLabel = {
|
|
42
|
-
color: 'inherit',
|
|
43
|
-
fontFamily: 'sans-serif',
|
|
44
|
-
fontSize: 13,
|
|
45
|
-
lineHeight: '16px',
|
|
46
|
-
};
|
|
47
43
|
const editorButtonIconSize = 18;
|
|
48
|
-
const
|
|
49
|
-
const InspectorOpenInEditor = ({ label, location }) => {
|
|
44
|
+
const InspectorOpenInEditor = ({ contextForAgents = null, label, location, locationType }) => {
|
|
50
45
|
var _a;
|
|
51
46
|
const { previewServerState } = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx);
|
|
52
47
|
const { setSelectedModal } = (0, react_1.useContext)(modals_1.SetSelectedModalContext);
|
|
53
48
|
const { tabIndex } = (0, z_index_1.useZIndex)();
|
|
54
49
|
const [hovered, setHovered] = (0, react_1.useState)(false);
|
|
55
50
|
const [dropdownOpened, setDropdownOpened] = (0, react_1.useState)(false);
|
|
51
|
+
const ignorePointerEnter = (0, react_1.useRef)(false);
|
|
56
52
|
const editorPickerAvailable = (0, use_default_editor_info_1.canUseEditorPicker)(previewServerState.type === 'connected');
|
|
57
53
|
const editorInfo = (0, use_default_editor_info_1.useDefaultEditorInfo)(editorPickerAvailable);
|
|
54
|
+
const codingAgentInfo = (0, use_default_editor_info_1.useDefaultCodingAgentInfo)(editorPickerAvailable);
|
|
58
55
|
const openWithEditor = (0, react_1.useCallback)(async (editorId) => {
|
|
59
56
|
if (!location) {
|
|
60
57
|
return;
|
|
@@ -67,12 +64,30 @@ const InspectorOpenInEditor = ({ label, location }) => {
|
|
|
67
64
|
}
|
|
68
65
|
}, [location]);
|
|
69
66
|
const preferredEditorId = (0, use_default_editor_info_1.getPreferredEditorId)(editorInfo);
|
|
67
|
+
const openWithCodingAgent = (0, react_1.useCallback)(async (codingAgentId, codingAgentName) => {
|
|
68
|
+
try {
|
|
69
|
+
const response = await (0, open_in_editor_1.openInCodingAgent)(codingAgentId, codingAgentId === 'copilot' ? null : contextForAgents);
|
|
70
|
+
if (!response.success) {
|
|
71
|
+
(0, NotificationCenter_1.showNotification)(`Could not open ${codingAgentName}`, 2000);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
catch (err) {
|
|
75
|
+
(0, NotificationCenter_1.showNotification)(err.message, 2000);
|
|
76
|
+
}
|
|
77
|
+
}, [contextForAgents]);
|
|
70
78
|
const editorName = (_a = window.remotion_editorName) !== null && _a !== void 0 ? _a : 'default editor';
|
|
71
79
|
const canOpenDefault = location !== null && window.remotion_editorName !== null;
|
|
72
80
|
const onOpenDefault = (0, react_1.useCallback)((event) => {
|
|
73
81
|
event.stopPropagation();
|
|
74
82
|
openWithEditor(null).catch(() => undefined);
|
|
75
83
|
}, [openWithEditor]);
|
|
84
|
+
const onDropdownOpenChange = (0, react_1.useCallback)((open) => {
|
|
85
|
+
setDropdownOpened(open);
|
|
86
|
+
if (!open) {
|
|
87
|
+
ignorePointerEnter.current = true;
|
|
88
|
+
setHovered(false);
|
|
89
|
+
}
|
|
90
|
+
}, []);
|
|
76
91
|
const mainHovered = hovered && !dropdownOpened;
|
|
77
92
|
const mainButtonStyle = (0, react_1.useMemo)(() => {
|
|
78
93
|
return {
|
|
@@ -101,49 +116,58 @@ const InspectorOpenInEditor = ({ label, location }) => {
|
|
|
101
116
|
return jsx_runtime_1.jsx(caret_1.CaretDown, { color: color, small: true });
|
|
102
117
|
}, []);
|
|
103
118
|
const menuItems = (0, react_1.useMemo)(() => {
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
119
|
+
return (0, get_open_in_menu_items_1.getOpenInMenuItems)({
|
|
120
|
+
codingAgentInfo,
|
|
121
|
+
editorDisabled: location === null,
|
|
122
|
+
editorInfo,
|
|
123
|
+
excludeCodingAgentId: null,
|
|
124
|
+
excludeEditorId: preferredEditorId,
|
|
125
|
+
fileManagerDisabled: !(location === null || location === void 0 ? void 0 : location.source),
|
|
126
|
+
folder: locationType === 'folder',
|
|
127
|
+
onConfigureApps: () => {
|
|
128
|
+
var _a;
|
|
129
|
+
var _b;
|
|
130
|
+
setSelectedModal({
|
|
131
|
+
type: 'settings',
|
|
132
|
+
initialTab: 'apps',
|
|
133
|
+
initialPublicLicenseKey: (_b = (_a = window.remotion_renderDefaults) === null || _a === void 0 ? void 0 : _a.publicLicenseKey) !== null && _b !== void 0 ? _b : null,
|
|
134
|
+
});
|
|
135
|
+
},
|
|
136
|
+
onOpenInCodingAgent: (codingAgentId, codingAgentName) => {
|
|
137
|
+
openWithCodingAgent(codingAgentId, codingAgentName).catch(() => undefined);
|
|
138
|
+
},
|
|
139
|
+
onOpenInEditor: (editorId) => {
|
|
140
|
+
openWithEditor(editorId).catch(() => undefined);
|
|
141
|
+
},
|
|
142
|
+
onOpenInFileExplorer: () => {
|
|
143
|
+
if (!(location === null || location === void 0 ? void 0 : location.source)) {
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
(0, actions_1.openInFileExplorer)({ directory: location.source }).catch((err) => {
|
|
147
|
+
(0, NotificationCenter_1.showNotification)(`Could not open file: ${err.message}`, 2000);
|
|
148
|
+
});
|
|
114
149
|
},
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
leftItem: null,
|
|
129
|
-
onClick: () => {
|
|
130
|
-
var _a;
|
|
131
|
-
var _b;
|
|
132
|
-
setSelectedModal({
|
|
133
|
-
type: 'settings',
|
|
134
|
-
initialTab: 'apps',
|
|
135
|
-
initialPublicLicenseKey: (_b = (_a = window.remotion_renderDefaults) === null || _a === void 0 ? void 0 : _a.publicLicenseKey) !== null && _b !== void 0 ? _b : null,
|
|
136
|
-
});
|
|
137
|
-
},
|
|
138
|
-
quickSwitcherLabel: null,
|
|
139
|
-
subMenu: null,
|
|
140
|
-
type: 'item',
|
|
141
|
-
value: 'set-default-editor',
|
|
150
|
+
onOpenInTerminal: (terminalId) => {
|
|
151
|
+
if (!(location === null || location === void 0 ? void 0 : location.source) || locationType !== 'folder') {
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
(0, open_in_editor_1.openInTerminal)(terminalId, location.source)
|
|
155
|
+
.then((response) => {
|
|
156
|
+
if (!response.success) {
|
|
157
|
+
(0, NotificationCenter_1.showNotification)('Could not open terminal', 2000);
|
|
158
|
+
}
|
|
159
|
+
})
|
|
160
|
+
.catch((err) => {
|
|
161
|
+
(0, NotificationCenter_1.showNotification)(`Could not open terminal: ${err.message}`, 2000);
|
|
162
|
+
});
|
|
142
163
|
},
|
|
143
|
-
|
|
144
|
-
return [...alternateEditors, ...settingsItems];
|
|
164
|
+
});
|
|
145
165
|
}, [
|
|
146
|
-
|
|
166
|
+
codingAgentInfo,
|
|
167
|
+
editorInfo,
|
|
168
|
+
location,
|
|
169
|
+
locationType,
|
|
170
|
+
openWithCodingAgent,
|
|
147
171
|
openWithEditor,
|
|
148
172
|
preferredEditorId,
|
|
149
173
|
setSelectedModal,
|
|
@@ -151,9 +175,16 @@ const InspectorOpenInEditor = ({ label, location }) => {
|
|
|
151
175
|
if (!editorPickerAvailable) {
|
|
152
176
|
return null;
|
|
153
177
|
}
|
|
154
|
-
return (jsx_runtime_1.jsxs("div", { style: splitButton, onPointerEnter: () =>
|
|
178
|
+
return (jsx_runtime_1.jsxs("div", { style: splitButton, onPointerEnter: () => {
|
|
179
|
+
if (!ignorePointerEnter.current) {
|
|
180
|
+
setHovered(true);
|
|
181
|
+
}
|
|
182
|
+
}, onPointerLeave: () => {
|
|
183
|
+
ignorePointerEnter.current = false;
|
|
184
|
+
setHovered(false);
|
|
185
|
+
}, children: [
|
|
155
186
|
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 })
|
|
156
|
-
] }), jsx_runtime_1.jsx(InlineDropdown_1.InlineDropdown, { onOpenChange:
|
|
187
|
+
] }), jsx_runtime_1.jsx(InlineDropdown_1.InlineDropdown, { onOpenChange: onDropdownOpenChange, renderAction: renderDropdownAction, style: dropdownStyle, title: "Open in another app", unhoveredColor: dropdownForegroundColor, values: menuItems, variant: "compact" })
|
|
157
188
|
] }));
|
|
158
189
|
};
|
|
159
190
|
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',
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.CompositionInspector = void 0;
|
|
4
4
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
5
|
const react_1 = require("react");
|
|
6
|
+
const client_id_1 = require("../../helpers/client-id");
|
|
6
7
|
const interactivity_enabled_1 = require("../../helpers/interactivity-enabled");
|
|
7
8
|
const browse_elements_1 = require("../../icons/browse-elements");
|
|
8
9
|
const frame_1 = require("../../icons/frame");
|
|
@@ -123,9 +124,10 @@ const CompositionVisualControlsSection = ({ readOnlyStudio }) => {
|
|
|
123
124
|
] }));
|
|
124
125
|
};
|
|
125
126
|
const CompositionInspector = ({ composition, currentDefaultProps, readOnlyStudio, setDefaultProps }) => {
|
|
127
|
+
const { previewServerState } = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx);
|
|
126
128
|
return (jsx_runtime_1.jsxs("div", { style: styles_1.scrollableContainer, className: is_menu_item_1.VERTICAL_SCROLLBAR_CLASSNAME, children: [
|
|
127
129
|
jsx_runtime_1.jsxs("div", { style: styles_1.inspectorOverviewSection, children: [
|
|
128
|
-
jsx_runtime_1.jsx(CompositionInspectorHeader_1.CompositionInspectorHeader, {}), jsx_runtime_1.jsx(common_1.InspectorSectionDivider, {}), jsx_runtime_1.jsx(CompositionMetadata_1.CompositionMetadata, { compositionId: composition.id, disabled: readOnlyStudio, stack: composition.stack })
|
|
130
|
+
jsx_runtime_1.jsx(CompositionInspectorHeader_1.CompositionInspectorHeader, {}), jsx_runtime_1.jsx(common_1.InspectorSectionDivider, {}), jsx_runtime_1.jsx(CompositionMetadata_1.CompositionMetadata, { compositionId: composition.id, disabled: readOnlyStudio || previewServerState.type !== 'connected', stack: composition.stack })
|
|
129
131
|
] }), jsx_runtime_1.jsx(CompositionDefaultPropsSection, { composition: composition, currentDefaultProps: currentDefaultProps, readOnlyStudio: readOnlyStudio, setDefaultProps: setDefaultProps }), jsx_runtime_1.jsx(CompositionVisualControlsSection, { readOnlyStudio: readOnlyStudio }), jsx_runtime_1.jsx(CompositionActions, { readOnlyStudio: readOnlyStudio })
|
|
130
132
|
] }));
|
|
131
133
|
};
|
|
@@ -11,6 +11,9 @@ export declare const SequenceInspectorHeader: React.FC<{
|
|
|
11
11
|
readonly sourceLocation: SequenceInspectorSourceLocation;
|
|
12
12
|
readonly track: TimelineTrackData;
|
|
13
13
|
}>;
|
|
14
|
+
export declare const SequenceInspectorDuplicationSection: React.FC<{
|
|
15
|
+
readonly track: TimelineTrackData;
|
|
16
|
+
}>;
|
|
14
17
|
export declare const SequenceInspectorSections: React.FC<{
|
|
15
18
|
readonly track: TimelineTrackData;
|
|
16
19
|
}>;
|