@remotion/studio 4.0.490 → 4.0.491

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.
Files changed (76) hide show
  1. package/dist/components/Canvas.js +1 -0
  2. package/dist/components/CurrentComposition.js +4 -1
  3. package/dist/components/EditorContent.js +1 -1
  4. package/dist/components/GlobalKeybindings.d.ts +1 -3
  5. package/dist/components/GlobalKeybindings.js +2 -9
  6. package/dist/components/InspectorLocationCopy.d.ts +7 -0
  7. package/dist/components/InspectorLocationCopy.js +65 -0
  8. package/dist/components/InspectorPanel/SequenceInspectorHeader.js +4 -3
  9. package/dist/components/KeyboardShortcutsExplainer.js +4 -0
  10. package/dist/components/OptionsPanel.js +4 -8
  11. package/dist/components/OutlineToggle.d.ts +3 -1
  12. package/dist/components/OutlineToggle.js +2 -2
  13. package/dist/components/PreviewToolbar.js +1 -1
  14. package/dist/components/RenderButton.js +9 -33
  15. package/dist/components/RenderModal/WebRenderModal.js +3 -8
  16. package/dist/components/RenderModal/WebRenderModalAdvanced.d.ts +0 -2
  17. package/dist/components/RenderModal/WebRenderModalAdvanced.js +2 -9
  18. package/dist/components/RenderQueue/ClientRenderQueueProcessor.js +0 -2
  19. package/dist/components/RenderQueue/client-side-render-types.d.ts +0 -1
  20. package/dist/components/RenderQueue/index.js +0 -9
  21. package/dist/components/SelectedOutlineElement.js +40 -38
  22. package/dist/components/SelectedOutlineOverlay.d.ts +1 -1
  23. package/dist/components/SelectedOutlineOverlay.js +2 -13
  24. package/dist/components/SnappingToggle.d.ts +3 -1
  25. package/dist/components/SnappingToggle.js +2 -2
  26. package/dist/components/Timeline/TimelineClipboardKeybindings.d.ts +20 -1
  27. package/dist/components/Timeline/TimelineClipboardKeybindings.js +301 -155
  28. package/dist/components/Timeline/TimelineEffectPropItem.js +7 -11
  29. package/dist/components/Timeline/TimelineFieldLabel.d.ts +1 -0
  30. package/dist/components/Timeline/TimelineFieldLabel.js +4 -2
  31. package/dist/components/Timeline/TimelineFieldRowContent.d.ts +8 -0
  32. package/dist/components/Timeline/TimelineFieldRowContent.js +16 -0
  33. package/dist/components/Timeline/TimelinePrimitiveFieldValue.js +1 -1
  34. package/dist/components/Timeline/TimelineRowChrome.js +2 -0
  35. package/dist/components/Timeline/TimelineSequence.js +2 -4
  36. package/dist/components/Timeline/TimelineSequencePropItem.js +8 -10
  37. package/dist/components/Timeline/TimelineSequenceRightEdgeDragHandle.d.ts +2 -0
  38. package/dist/components/Timeline/TimelineSequenceRightEdgeDragHandle.js +18 -6
  39. package/dist/components/Timeline/TimelineTextContentField.js +12 -5
  40. package/dist/components/Timeline/TimelineVideoInfo.d.ts +3 -1
  41. package/dist/components/Timeline/TimelineVideoInfo.js +11 -4
  42. package/dist/components/Timeline/delete-selected-timeline-item.js +4 -5
  43. package/dist/components/Timeline/effects-clipboard.d.ts +14 -0
  44. package/dist/components/Timeline/effects-clipboard.js +68 -0
  45. package/dist/components/Timeline/get-sequence-context-menu-items.js +37 -0
  46. package/dist/components/Timeline/get-timeline-media-start-frame.d.ts +6 -0
  47. package/dist/components/Timeline/get-timeline-media-start-frame.js +15 -0
  48. package/dist/components/Timeline/sequence-props-subscription-store.d.ts +3 -2
  49. package/dist/components/Timeline/sequence-props-subscription-store.js +4 -2
  50. package/dist/components/Timeline/timeline-field-row-layout.d.ts +1 -0
  51. package/dist/components/Timeline/timeline-field-row-layout.js +8 -1
  52. package/dist/components/Timeline/timeline-row-layout.d.ts +1 -1
  53. package/dist/components/Timeline/timeline-row-layout.js +1 -1
  54. package/dist/components/Timeline/use-sequence-props-subscription.js +10 -1
  55. package/dist/components/import-assets.d.ts +4 -0
  56. package/dist/components/import-assets.js +9 -2
  57. package/dist/components/selected-outline-measurement.d.ts +4 -0
  58. package/dist/components/selected-outline-measurement.js +3 -1
  59. package/dist/components/selected-outline-types.d.ts +1 -6
  60. package/dist/esm/{chunk-16nwrbrm.js → chunk-9wh9k3jj.js} +7288 -7038
  61. package/dist/esm/index.mjs +0 -1
  62. package/dist/esm/internals.mjs +7288 -7038
  63. package/dist/esm/previewEntry.mjs +5948 -5698
  64. package/dist/esm/renderEntry.mjs +1 -1
  65. package/dist/helpers/format-file-location.d.ts +5 -0
  66. package/dist/helpers/format-file-location.js +9 -1
  67. package/dist/helpers/retry-payload.js +0 -1
  68. package/dist/helpers/studio-runtime-config.d.ts +0 -1
  69. package/dist/helpers/studio-runtime-config.js +1 -6
  70. package/dist/helpers/use-menu-structure.js +15 -18
  71. package/dist/state/modals.d.ts +0 -1
  72. package/package.json +11 -11
  73. package/dist/components/RenderModal/WebRendererExperimentalBadge.d.ts +0 -1
  74. package/dist/components/RenderModal/WebRendererExperimentalBadge.js +0 -35
  75. package/dist/helpers/show-browser-rendering.d.ts +0 -1
  76. package/dist/helpers/show-browser-rendering.js +0 -5
@@ -36,7 +36,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.SelectedOutlineElement = exports.SelectedOutlineTransformOriginHandle = void 0;
37
37
  const jsx_runtime_1 = require("react/jsx-runtime");
38
38
  const react_1 = __importStar(require("react"));
39
- const react_dom_1 = require("react-dom");
40
39
  const remotion_1 = require("remotion");
41
40
  const no_react_1 = require("remotion/no-react");
42
41
  const client_id_1 = require("../helpers/client-id");
@@ -51,7 +50,6 @@ const ContextMenu_1 = require("./ContextMenu");
51
50
  const effect_drag_and_drop_1 = require("./effect-drag-and-drop");
52
51
  const ForceSpecificCursor_1 = require("./ForceSpecificCursor");
53
52
  const NotificationCenter_1 = require("./Notifications/NotificationCenter");
54
- const options_sidebar_tabs_1 = require("./options-sidebar-tabs");
55
53
  const selected_outline_drag_1 = require("./selected-outline-drag");
56
54
  const selected_outline_measurement_1 = require("./selected-outline-measurement");
57
55
  const selected_outline_snap_1 = require("./selected-outline-snap");
@@ -320,7 +318,7 @@ const SelectedOutlineTransformOriginHandle = ({ outline, onDraggingChange, targe
320
318
  ] }));
321
319
  };
322
320
  exports.SelectedOutlineTransformOriginHandle = SelectedOutlineTransformOriginHandle;
323
- const SelectedOutlinePolygon = ({ allDragTargets, allDragOutlines, contextMenuValues, dragging, hovered, onContextMenuOpen, outline, onDraggingChange, onHoverChange, onSnapPointsChange, onSelect, onTextEditStart, scale, snapTargets, target, }) => {
321
+ const SelectedOutlinePolygon = ({ allDragTargets, allDragOutlines, contextMenuValues, dragging, hovered, onContextMenuOpen, outline, onDraggingChange, onHoverChange, onSnapPointsChange, onSelect, onDoubleClickTarget, scale, snapTargets, target, }) => {
324
322
  var _a, _b, _c, _d;
325
323
  const { getDragOverrides } = (0, react_1.useContext)(remotion_1.Internals.VisualModeDragOverridesContext);
326
324
  const { setPropStatuses, setDragOverrides, clearDragOverrides } = (0, react_1.useContext)(remotion_1.Internals.VisualModeSettersContext);
@@ -532,10 +530,12 @@ const SelectedOutlinePolygon = ({ allDragTargets, allDragOutlines, contextMenuVa
532
530
  if (target === undefined) {
533
531
  return;
534
532
  }
533
+ if (!onDoubleClickTarget(target, event.button)) {
534
+ return;
535
+ }
535
536
  event.preventDefault();
536
537
  event.stopPropagation();
537
- onTextEditStart(target);
538
- }, [onTextEditStart, target]);
538
+ }, [onDoubleClickTarget, target]);
539
539
  const onEffectDragOver = react_1.default.useCallback((event) => {
540
540
  if (effectDrop === null || !(0, effect_drag_and_drop_1.hasEffectDragType)(event.dataTransfer)) {
541
541
  return;
@@ -982,28 +982,42 @@ const SelectedOutlineElement = ({ allDragTargets, allDragOutlines, allRotationDr
982
982
  const confirm = (0, ConfirmationDialog_1.useConfirmationDialog)();
983
983
  const selectAsset = (0, use_select_asset_1.useSelectAsset)();
984
984
  const { setSelectedModal } = (0, react_1.useContext)(modals_1.ModalsContext);
985
- const onTextEditStart = react_1.default.useCallback((editTarget) => {
986
- const { textEdit } = editTarget;
987
- if (textEdit === null) {
988
- return;
985
+ const resolveOriginalLocation = react_1.default.useCallback(async (resolveTarget) => {
986
+ const stack = resolveTarget.sequence.getStack();
987
+ if (!stack) {
988
+ return null;
989
989
  }
990
- if (textEdit.propStatus.status !== 'static' ||
991
- typeof textEdit.propStatus.codeValue !== 'string') {
992
- (0, NotificationCenter_1.showNotification)('This text is computed and cannot be edited visually', 3000);
993
- return;
990
+ let originalLocation = null;
991
+ try {
992
+ originalLocation = await (0, get_stack_1.getOriginalLocationFromStack)(stack, 'sequence');
994
993
  }
995
- (0, react_dom_1.flushSync)(() => {
996
- var _a;
997
- if (!editTarget.selected) {
998
- onSelect(editTarget.selection, { shiftKey: false, toggleKey: false });
999
- }
1000
- (_a = options_sidebar_tabs_1.optionsSidebarTabs.current) === null || _a === void 0 ? void 0 : _a.selectInspectorPanel();
994
+ catch (err) {
995
+ (0, NotificationCenter_1.showNotification)(err.message, 2000);
996
+ }
997
+ updateResolvedStackTrace(stack, originalLocation);
998
+ return originalLocation;
999
+ }, [updateResolvedStackTrace]);
1000
+ const onDoubleClickTarget = react_1.default.useCallback((doubleClickTarget, button) => {
1001
+ const action = (0, selected_outline_measurement_1.getOutlineDoubleClickAction)({
1002
+ button,
1003
+ canOpenInEditor: previewServerState.type === 'connected' &&
1004
+ Boolean(window.remotion_editorName),
1001
1005
  });
1002
- (0, focus_inspector_field_1.requestFocusInspectorField)({
1003
- fieldKey: 'children',
1004
- nodePath: textEdit.nodePath,
1006
+ if (action === null) {
1007
+ return false;
1008
+ }
1009
+ const openTargetInEditor = async () => {
1010
+ const originalLocation = await resolveOriginalLocation(doubleClickTarget);
1011
+ if (originalLocation === null) {
1012
+ return;
1013
+ }
1014
+ await (0, open_in_editor_1.openOriginalPositionInEditor)(originalLocation);
1015
+ };
1016
+ openTargetInEditor().catch((err) => {
1017
+ (0, NotificationCenter_1.showNotification)(err.message, 2000);
1005
1018
  });
1006
- }, [onSelect]);
1019
+ return true;
1020
+ }, [previewServerState.type, resolveOriginalLocation]);
1007
1021
  const onContextMenuOpen = react_1.default.useCallback(async () => {
1008
1022
  if (target === undefined || previewServerState.type !== 'connected') {
1009
1023
  return false;
@@ -1011,19 +1025,7 @@ const SelectedOutlineElement = ({ allDragTargets, allDragOutlines, allRotationDr
1011
1025
  if (!target.selected) {
1012
1026
  onSelect(target.selection, { shiftKey: false, toggleKey: false });
1013
1027
  }
1014
- const stack = target.sequence.getStack();
1015
- let originalLocation = null;
1016
- if (stack) {
1017
- try {
1018
- originalLocation = await (0, get_stack_1.getOriginalLocationFromStack)(stack, 'sequence');
1019
- }
1020
- catch (err) {
1021
- (0, NotificationCenter_1.showNotification)(err.message, 2000);
1022
- }
1023
- }
1024
- if (stack) {
1025
- updateResolvedStackTrace(stack, originalLocation);
1026
- }
1028
+ const originalLocation = await resolveOriginalLocation(target);
1027
1029
  const fileLocation = (0, format_file_location_1.formatFileLocation)({
1028
1030
  location: originalLocation,
1029
1031
  root: window.remotion_cwd,
@@ -1152,14 +1154,14 @@ const SelectedOutlineElement = ({ allDragTargets, allDragOutlines, allRotationDr
1152
1154
  confirm,
1153
1155
  onSelect,
1154
1156
  previewServerState,
1157
+ resolveOriginalLocation,
1155
1158
  selectAsset,
1156
1159
  setSelectedModal,
1157
1160
  setPropStatuses,
1158
1161
  target,
1159
- updateResolvedStackTrace,
1160
1162
  ]);
1161
1163
  return (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
1162
- jsx_runtime_1.jsx(SelectedOutlinePolygon, { allDragTargets: allDragTargets, allDragOutlines: allDragOutlines, contextMenuValues: emptyContextMenuValues, dragging: dragging, hovered: hovered, outline: outline, onContextMenuOpen: onContextMenuOpen, onDraggingChange: onDraggingChange, onHoverChange: onHoverChange, onSnapPointsChange: onSnapPointsChange, onSelect: onSelect, onTextEditStart: onTextEditStart, scale: scale, snapTargets: snapTargets, target: target }), (target === null || target === void 0 ? void 0 : target.containsSelection) || hovered
1164
+ jsx_runtime_1.jsx(SelectedOutlinePolygon, { allDragTargets: allDragTargets, allDragOutlines: allDragOutlines, contextMenuValues: emptyContextMenuValues, dragging: dragging, hovered: hovered, outline: outline, onContextMenuOpen: onContextMenuOpen, onDraggingChange: onDraggingChange, onHoverChange: onHoverChange, onSnapPointsChange: onSnapPointsChange, onSelect: onSelect, onDoubleClickTarget: onDoubleClickTarget, scale: scale, snapTargets: snapTargets, target: target }), (target === null || target === void 0 ? void 0 : target.containsSelection) || hovered
1163
1165
  ? ['top', 'right', 'bottom', 'left'].map((edge) => (jsx_runtime_1.jsx(SelectedOutlineScaleEdgeLine, { allScaleDragTargets: allScaleDragTargets, contextMenuValues: emptyContextMenuValues, dragging: dragging, edge: edge, outline: outline, onContextMenuOpen: onContextMenuOpen, onDraggingChange: onDraggingChange, onHoverChange: onHoverChange, onSelect: onSelect, target: target }, edge)))
1164
1166
  : null, (target === null || target === void 0 ? void 0 : target.containsSelection) || hovered
1165
1167
  ? ['top-left', 'top-right', 'bottom-right', 'bottom-left'].map((corner) => (jsx_runtime_1.jsx(SelectedOutlineRotationCornerHandle, { allRotationDragTargets: allRotationDragTargets, contextMenuValues: emptyContextMenuValues, corner: corner, dragging: dragging, outline: outline, onContextMenuOpen: onContextMenuOpen, onDraggingChange: onDraggingChange, onHoverChange: onHoverChange, onSelect: onSelect, target: target }, corner)))
@@ -2,7 +2,7 @@ import React from 'react';
2
2
  import { type SelectedOutline } from './selected-outline-geometry';
3
3
  import { type SelectedOutlineTarget } from './selected-outline-types';
4
4
  export { applySelectedOutlineDragAxisLock, applySelectedOutlineTransformOriginAxisLock, compensateTranslateForTransformOrigin, getSelectedOutlineActiveSchema, getSelectedOutlineDragChanges, getSelectedOutlineDragValues, getSelectedOutlineKeyboardNudgeDelta, getSelectedOutlineKeyboardNudgeDeltas, getSelectedOutlineRotationDragChanges, getSelectedOutlineRotationDragStates, getSelectedOutlineRotationDragValues, getSelectedOutlineScaleDragChanges, getSelectedOutlineScaleDragStates, getSelectedOutlineScaleDragValues, getSelectedOutlineScaleEdgeInfo, getSelectedOutlineTransformOriginLockedAxis, isSelectedOutlineDragPastThreshold, selectedOutlineTransformOriginSnapThresholdPx, selectedOutlineUvSnapThresholdPx, snapSelectedOutlineRotationDeltaDegrees, snapSelectedOutlineTransformOriginUv, snapSelectedOutlineUv, } from './selected-outline-drag';
5
- export { getOutlineSelectionInteraction, getSelectedEffectFieldsBySequenceKey, getSelectedOutlineRotationCornerInfo, getSelectedOutlineRotationDeltaDegrees, getSelectedOutlineRotationPivot, getSelectedSequenceKeys, getSequencesWithSelectableOutlines, getTransformedSvgViewportPoints, } from './selected-outline-measurement';
5
+ export { getOutlineDoubleClickAction, getOutlineSelectionInteraction, getSelectedEffectFieldsBySequenceKey, getSelectedOutlineRotationCornerInfo, getSelectedOutlineRotationDeltaDegrees, getSelectedOutlineRotationPivot, getSelectedSequenceKeys, getSequencesWithSelectableOutlines, getTransformedSvgViewportPoints, } from './selected-outline-measurement';
6
6
  export { selectedOutlineDragThresholdPx } from './selected-outline-types';
7
7
  export type { SelectedOutlineDragState, SelectedOutlineRotationDragState, SelectedOutlineScaleDragState, } from './selected-outline-types';
8
8
  type OutlineSequenceParent = {
@@ -33,7 +33,7 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.SelectedOutlineOverlay = exports.orderOutlinesForRendering = exports.selectedOutlineDragThresholdPx = exports.getTransformedSvgViewportPoints = exports.getSequencesWithSelectableOutlines = exports.getSelectedSequenceKeys = exports.getSelectedOutlineRotationPivot = exports.getSelectedOutlineRotationDeltaDegrees = exports.getSelectedOutlineRotationCornerInfo = exports.getSelectedEffectFieldsBySequenceKey = exports.getOutlineSelectionInteraction = exports.snapSelectedOutlineUv = exports.snapSelectedOutlineTransformOriginUv = exports.snapSelectedOutlineRotationDeltaDegrees = exports.selectedOutlineUvSnapThresholdPx = exports.selectedOutlineTransformOriginSnapThresholdPx = exports.isSelectedOutlineDragPastThreshold = exports.getSelectedOutlineTransformOriginLockedAxis = exports.getSelectedOutlineScaleEdgeInfo = exports.getSelectedOutlineScaleDragValues = exports.getSelectedOutlineScaleDragStates = exports.getSelectedOutlineScaleDragChanges = exports.getSelectedOutlineRotationDragValues = exports.getSelectedOutlineRotationDragStates = exports.getSelectedOutlineRotationDragChanges = exports.getSelectedOutlineKeyboardNudgeDeltas = exports.getSelectedOutlineKeyboardNudgeDelta = exports.getSelectedOutlineDragValues = exports.getSelectedOutlineDragChanges = exports.getSelectedOutlineActiveSchema = exports.compensateTranslateForTransformOrigin = exports.applySelectedOutlineTransformOriginAxisLock = exports.applySelectedOutlineDragAxisLock = void 0;
36
+ exports.SelectedOutlineOverlay = exports.orderOutlinesForRendering = exports.selectedOutlineDragThresholdPx = exports.getTransformedSvgViewportPoints = exports.getSequencesWithSelectableOutlines = exports.getSelectedSequenceKeys = exports.getSelectedOutlineRotationPivot = exports.getSelectedOutlineRotationDeltaDegrees = exports.getSelectedOutlineRotationCornerInfo = exports.getSelectedEffectFieldsBySequenceKey = exports.getOutlineSelectionInteraction = exports.getOutlineDoubleClickAction = exports.snapSelectedOutlineUv = exports.snapSelectedOutlineTransformOriginUv = exports.snapSelectedOutlineRotationDeltaDegrees = exports.selectedOutlineUvSnapThresholdPx = exports.selectedOutlineTransformOriginSnapThresholdPx = exports.isSelectedOutlineDragPastThreshold = exports.getSelectedOutlineTransformOriginLockedAxis = exports.getSelectedOutlineScaleEdgeInfo = exports.getSelectedOutlineScaleDragValues = exports.getSelectedOutlineScaleDragStates = exports.getSelectedOutlineScaleDragChanges = exports.getSelectedOutlineRotationDragValues = exports.getSelectedOutlineRotationDragStates = exports.getSelectedOutlineRotationDragChanges = exports.getSelectedOutlineKeyboardNudgeDeltas = exports.getSelectedOutlineKeyboardNudgeDelta = exports.getSelectedOutlineDragValues = exports.getSelectedOutlineDragChanges = exports.getSelectedOutlineActiveSchema = exports.compensateTranslateForTransformOrigin = exports.applySelectedOutlineTransformOriginAxisLock = exports.applySelectedOutlineDragAxisLock = void 0;
37
37
  const jsx_runtime_1 = require("react/jsx-runtime");
38
38
  const player_1 = require("@remotion/player");
39
39
  const react_1 = __importStar(require("react"));
@@ -82,6 +82,7 @@ Object.defineProperty(exports, "snapSelectedOutlineRotationDeltaDegrees", { enum
82
82
  Object.defineProperty(exports, "snapSelectedOutlineTransformOriginUv", { enumerable: true, get: function () { return selected_outline_drag_2.snapSelectedOutlineTransformOriginUv; } });
83
83
  Object.defineProperty(exports, "snapSelectedOutlineUv", { enumerable: true, get: function () { return selected_outline_drag_2.snapSelectedOutlineUv; } });
84
84
  const selected_outline_measurement_2 = require("./selected-outline-measurement");
85
+ Object.defineProperty(exports, "getOutlineDoubleClickAction", { enumerable: true, get: function () { return selected_outline_measurement_2.getOutlineDoubleClickAction; } });
85
86
  Object.defineProperty(exports, "getOutlineSelectionInteraction", { enumerable: true, get: function () { return selected_outline_measurement_2.getOutlineSelectionInteraction; } });
86
87
  Object.defineProperty(exports, "getSelectedEffectFieldsBySequenceKey", { enumerable: true, get: function () { return selected_outline_measurement_2.getSelectedEffectFieldsBySequenceKey; } });
87
88
  Object.defineProperty(exports, "getSelectedOutlineRotationCornerInfo", { enumerable: true, get: function () { return selected_outline_measurement_2.getSelectedOutlineRotationCornerInfo; } });
@@ -439,8 +440,6 @@ const SelectedOutlineOverlay = ({ compositionHeight, compositionWidth, scale, tr
439
440
  const rotationPropStatus = nodePropStatuses === null || nodePropStatuses === void 0 ? void 0 : nodePropStatuses[selected_outline_types_1.rotateFieldKey];
440
441
  const transformOriginFieldSchema = activeSchema === null || activeSchema === void 0 ? void 0 : activeSchema[selected_outline_types_1.transformOriginFieldKey];
441
442
  const transformOriginPropStatus = nodePropStatuses === null || nodePropStatuses === void 0 ? void 0 : nodePropStatuses[selected_outline_types_1.transformOriginFieldKey];
442
- const textContentFieldSchema = activeSchema === null || activeSchema === void 0 ? void 0 : activeSchema.children;
443
- const textContentPropStatus = nodePropStatuses === null || nodePropStatuses === void 0 ? void 0 : nodePropStatuses.children;
444
443
  const transformOriginValueForRotation = (transformOriginFieldSchema === null || transformOriginFieldSchema === void 0 ? void 0 : transformOriginFieldSchema.type) === 'transform-origin' &&
445
444
  ((transformOriginPropStatus === null || transformOriginPropStatus === void 0 ? void 0 : transformOriginPropStatus.status) === 'static' ||
446
445
  (transformOriginPropStatus === null || transformOriginPropStatus === void 0 ? void 0 : transformOriginPropStatus.status) === 'keyframed')
@@ -493,10 +492,6 @@ const SelectedOutlineOverlay = ({ compositionHeight, compositionWidth, scale, tr
493
492
  canTransformOriginTranslateStatus;
494
493
  const canDropEffect = previewServerState.type === 'connected' &&
495
494
  (controls === null || controls === void 0 ? void 0 : controls.supportsEffects) === true;
496
- const canTextEdit = previewServerState.type === 'connected' &&
497
- controls !== null &&
498
- (textContentFieldSchema === null || textContentFieldSchema === void 0 ? void 0 : textContentFieldSchema.type) === 'text-content' &&
499
- textContentPropStatus !== undefined;
500
495
  return {
501
496
  key,
502
497
  containsSelection,
@@ -611,12 +606,6 @@ const SelectedOutlineOverlay = ({ compositionHeight, compositionWidth, scale, tr
611
606
  })) !== null && _f !== void 0 ? _f : fieldSchema.default),
612
607
  }
613
608
  : null,
614
- textEdit: canTextEdit
615
- ? {
616
- nodePath,
617
- propStatus: textContentPropStatus,
618
- }
619
- : null,
620
609
  uvHandles: containsSelection
621
610
  ? (0, selected_outline_uv_1.getSelectedUvHandles)({
622
611
  propStatuses,
@@ -1,2 +1,4 @@
1
1
  import React from 'react';
2
- export declare const SnappingToggle: React.FC;
2
+ export declare const SnappingToggle: React.FC<{
3
+ readonly disabled: boolean;
4
+ }>;
@@ -9,7 +9,7 @@ const use_keybinding_1 = require("../helpers/use-keybinding");
9
9
  const magnet_1 = require("../icons/magnet");
10
10
  const editor_snapping_1 = require("../state/editor-snapping");
11
11
  const ControlButton_1 = require("./ControlButton");
12
- const SnappingToggle = () => {
12
+ const SnappingToggle = ({ disabled }) => {
13
13
  const { editorSnapping, setEditorSnapping } = (0, react_1.useContext)(editor_snapping_1.EditorSnappingContext);
14
14
  const onClick = (0, react_1.useCallback)(() => {
15
15
  setEditorSnapping((current) => !current);
@@ -21,6 +21,6 @@ const SnappingToggle = () => {
21
21
  ]
22
22
  .filter(no_react_1.NoReactInternals.truthy)
23
23
  .join(' ');
24
- return (jsx_runtime_1.jsx(ControlButton_1.ControlButton, { title: accessibilityLabel, "aria-label": accessibilityLabel, "aria-pressed": editorSnapping, "aria-keyshortcuts": "Shift+M", onClick: onClick, children: jsx_runtime_1.jsx(magnet_1.MagnetIcon, { style: { width: 17, height: 17 }, fill: color, "aria-hidden": "true", focusable: "false" }) }));
24
+ return (jsx_runtime_1.jsx(ControlButton_1.ControlButton, { title: accessibilityLabel, "aria-label": accessibilityLabel, "aria-pressed": editorSnapping, "aria-keyshortcuts": "Shift+M", disabled: disabled, onClick: onClick, children: jsx_runtime_1.jsx(magnet_1.MagnetIcon, { style: { width: 17, height: 17 }, fill: color, "aria-hidden": "true", focusable: "false" }) }));
25
25
  };
26
26
  exports.SnappingToggle = SnappingToggle;
@@ -1,7 +1,8 @@
1
- import { type EasingClipboardData, type EffectClipboardSnapshot, type EffectPropClipboardData } from '@remotion/studio-shared';
1
+ import { type EasingClipboardData, type EffectClipboardData, type EffectClipboardSnapshot, type EffectPropClipboardData } from '@remotion/studio-shared';
2
2
  import type React from 'react';
3
3
  import { type OverrideIdToNodePaths, type PropStatuses, type SequencePropsSubscriptionKey, type InteractivitySchema, type TSequence } from 'remotion';
4
4
  import type { SequenceNodePathInfo } from '../../helpers/get-timeline-sequence-sort-key';
5
+ import { type EffectsClipboardEnvelope } from './effects-clipboard';
5
6
  import { type TimelineSelection } from './TimelineSelection';
6
7
  export type PasteEffectsTarget = {
7
8
  readonly type: 'valid';
@@ -29,6 +30,24 @@ export declare const getSnapshotsFromSelection: ({ selection, propStatuses, }: {
29
30
  selection: TimelineSelection;
30
31
  propStatuses: PropStatuses;
31
32
  }) => EffectClipboardSnapshot[] | null;
33
+ export type EffectClipboardDataFromSelections = {
34
+ readonly type: 'valid';
35
+ readonly payload: EffectClipboardData;
36
+ } | {
37
+ readonly type: 'none';
38
+ } | {
39
+ readonly type: 'mixed';
40
+ } | {
41
+ readonly type: 'uncopyable';
42
+ };
43
+ export declare const getEffectClipboardDataFromSelections: ({ selectedItems, propStatuses, }: {
44
+ selectedItems: readonly TimelineSelection[];
45
+ propStatuses: PropStatuses;
46
+ }) => EffectClipboardDataFromSelections;
47
+ export declare const getEffectsClipboardEnvelopeFromSelections: ({ selectedItems, payload, }: {
48
+ selectedItems: readonly TimelineSelection[];
49
+ payload: EffectClipboardData;
50
+ }) => EffectsClipboardEnvelope;
32
51
  export declare const getEffectPropClipboardDataFromSelection: ({ selection, propStatuses, }: {
33
52
  selection: TimelineSelection;
34
53
  propStatuses: PropStatuses;