@remotion/studio 4.0.472 → 4.0.474

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 (165) hide show
  1. package/dist/api/rename-static-file.d.ts +6 -0
  2. package/dist/api/rename-static-file.js +18 -0
  3. package/dist/components/AssetSelector.js +45 -4
  4. package/dist/components/AssetSelectorItem.js +177 -27
  5. package/dist/components/Canvas.js +131 -11
  6. package/dist/components/ConfirmationDialog-types.d.ts +8 -0
  7. package/dist/components/ConfirmationDialog-types.js +2 -0
  8. package/dist/components/ConfirmationDialog.d.ts +7 -0
  9. package/dist/components/ConfirmationDialog.js +103 -0
  10. package/dist/components/ContextMenu.d.ts +9 -1
  11. package/dist/components/ContextMenu.js +49 -5
  12. package/dist/components/CurrentAsset.d.ts +1 -0
  13. package/dist/components/CurrentAsset.js +13 -2
  14. package/dist/components/EditorContent.js +15 -2
  15. package/dist/components/EditorContexts.js +2 -1
  16. package/dist/components/EditorRuler/Ruler.js +2 -0
  17. package/dist/components/ExplorerPanel.d.ts +0 -4
  18. package/dist/components/ExplorerPanel.js +8 -4
  19. package/dist/components/ExplorerPanelRef.d.ts +4 -0
  20. package/dist/components/ExplorerPanelRef.js +5 -0
  21. package/dist/components/FilePreview.d.ts +1 -1
  22. package/dist/components/InitialCompositionLoader.d.ts +0 -1
  23. package/dist/components/InitialCompositionLoader.js +5 -27
  24. package/dist/components/Menu/MenuItem.js +7 -1
  25. package/dist/components/Menu/SubMenu.js +5 -1
  26. package/dist/components/Menu/portals.js +17 -8
  27. package/dist/components/MenuToolbar.js +5 -1
  28. package/dist/components/ModalContainer.js +6 -1
  29. package/dist/components/Modals.js +5 -2
  30. package/dist/components/NewComposition/ComboBox.js +8 -2
  31. package/dist/components/NewComposition/InputDragger.d.ts +1 -0
  32. package/dist/components/NewComposition/InputDragger.js +9 -6
  33. package/dist/components/NewComposition/RenameStaticFile.d.ts +4 -0
  34. package/dist/components/NewComposition/RenameStaticFile.js +118 -0
  35. package/dist/components/OptionsPanel.js +5 -1
  36. package/dist/components/OutlineToggle.d.ts +2 -0
  37. package/dist/components/OutlineToggle.js +20 -0
  38. package/dist/components/Preview.d.ts +0 -2
  39. package/dist/components/Preview.js +23 -33
  40. package/dist/components/PreviewToolbar.js +19 -6
  41. package/dist/components/RenderButton.js +8 -2
  42. package/dist/components/RenderPreview.js +2 -2
  43. package/dist/components/SelectedOutlineOverlay.d.ts +29 -3
  44. package/dist/components/SelectedOutlineOverlay.js +259 -80
  45. package/dist/components/ShowOutlinesProvider.d.ts +4 -0
  46. package/dist/components/ShowOutlinesProvider.js +24 -0
  47. package/dist/components/SizeSelector.js +3 -3
  48. package/dist/components/Splitter/SplitterHandle.js +2 -0
  49. package/dist/components/StaticFilePreview.js +2 -2
  50. package/dist/components/Timeline/KeyframeSettingsModal.d.ts +15 -0
  51. package/dist/components/Timeline/KeyframeSettingsModal.js +150 -0
  52. package/dist/components/Timeline/SequencePropsObserver.js +3 -3
  53. package/dist/components/Timeline/Timeline.js +3 -13
  54. package/dist/components/Timeline/TimelineClipboardKeybindings.d.ts +26 -3
  55. package/dist/components/Timeline/TimelineClipboardKeybindings.js +242 -25
  56. package/dist/components/Timeline/TimelineDeleteKeybindings.js +23 -11
  57. package/dist/components/Timeline/TimelineEffectItem.js +8 -7
  58. package/dist/components/Timeline/TimelineEffectPropItem.js +69 -19
  59. package/dist/components/Timeline/TimelineExpandedKeyframeRow.js +6 -1
  60. package/dist/components/Timeline/TimelineExpandedSection.js +5 -5
  61. package/dist/components/Timeline/TimelineKeyframeControls.js +13 -23
  62. package/dist/components/Timeline/TimelineKeyframeDiamond.js +24 -22
  63. package/dist/components/Timeline/TimelineKeyframeDiamondIcon.d.ts +6 -0
  64. package/dist/components/Timeline/TimelineKeyframeDiamondIcon.js +14 -0
  65. package/dist/components/Timeline/TimelineKeyframeDragState.d.ts +17 -0
  66. package/dist/components/Timeline/TimelineKeyframeDragState.js +39 -0
  67. package/dist/components/Timeline/TimelineKeyframeEasingLine.d.ts +9 -0
  68. package/dist/components/Timeline/TimelineKeyframeEasingLine.js +120 -0
  69. package/dist/components/Timeline/TimelineKeyframedValue.js +1 -1
  70. package/dist/components/Timeline/TimelineList.js +2 -2
  71. package/dist/components/Timeline/TimelineMediaInfo.d.ts +0 -13
  72. package/dist/components/Timeline/TimelineMediaInfo.js +8 -73
  73. package/dist/components/Timeline/TimelineNumberField.js +15 -7
  74. package/dist/components/Timeline/TimelineRotationField.js +17 -11
  75. package/dist/components/Timeline/TimelineScaleField.js +17 -13
  76. package/dist/components/Timeline/TimelineSelection.d.ts +15 -0
  77. package/dist/components/Timeline/TimelineSelection.js +26 -1
  78. package/dist/components/Timeline/TimelineSequence.js +6 -6
  79. package/dist/components/Timeline/TimelineSequenceItem.d.ts +1 -0
  80. package/dist/components/Timeline/TimelineSequenceItem.js +297 -36
  81. package/dist/components/Timeline/TimelineSequencePropItem.js +113 -48
  82. package/dist/components/Timeline/TimelineSequenceRightEdgeDragHandle.d.ts +5 -5
  83. package/dist/components/Timeline/TimelineSequenceRightEdgeDragHandle.js +69 -70
  84. package/dist/components/Timeline/TimelineTranslateField.js +24 -19
  85. package/dist/components/Timeline/TimelineUvCoordinateField.js +18 -12
  86. package/dist/components/Timeline/apply-effect-response-to-prop-statuses.d.ts +5 -0
  87. package/dist/components/Timeline/apply-effect-response-to-prop-statuses.js +19 -0
  88. package/dist/components/Timeline/call-add-keyframe.d.ts +5 -5
  89. package/dist/components/Timeline/call-add-keyframe.js +6 -4
  90. package/dist/components/Timeline/call-delete-keyframe.d.ts +7 -7
  91. package/dist/components/Timeline/call-delete-keyframe.js +7 -7
  92. package/dist/components/Timeline/call-move-keyframe.d.ts +19 -0
  93. package/dist/components/Timeline/call-move-keyframe.js +71 -0
  94. package/dist/components/Timeline/call-update-keyframe-settings.d.ts +22 -0
  95. package/dist/components/Timeline/call-update-keyframe-settings.js +52 -0
  96. package/dist/components/Timeline/delete-selected-keyframe.d.ts +5 -5
  97. package/dist/components/Timeline/delete-selected-keyframe.js +5 -5
  98. package/dist/components/Timeline/delete-selected-timeline-item.d.ts +10 -7
  99. package/dist/components/Timeline/delete-selected-timeline-item.js +37 -23
  100. package/dist/components/Timeline/duplicate-selected-timeline-item.d.ts +4 -2
  101. package/dist/components/Timeline/duplicate-selected-timeline-item.js +39 -34
  102. package/dist/components/Timeline/get-bounded-keyframe-drag-delta.d.ts +8 -0
  103. package/dist/components/Timeline/get-bounded-keyframe-drag-delta.js +12 -0
  104. package/dist/components/Timeline/get-keyframe-navigation.d.ts +2 -2
  105. package/dist/components/Timeline/get-keyframe-navigation.js +14 -6
  106. package/dist/components/Timeline/get-node-keyframes.d.ts +3 -3
  107. package/dist/components/Timeline/get-node-keyframes.js +4 -4
  108. package/dist/components/Timeline/get-timeline-easing-segments.d.ts +9 -0
  109. package/dist/components/Timeline/get-timeline-easing-segments.js +19 -0
  110. package/dist/components/Timeline/reset-selected-timeline-props.d.ts +7 -7
  111. package/dist/components/Timeline/reset-selected-timeline-props.js +13 -12
  112. package/dist/components/Timeline/save-effect-prop.d.ts +16 -5
  113. package/dist/components/Timeline/save-effect-prop.js +37 -19
  114. package/dist/components/Timeline/save-prop-queue.d.ts +4 -3
  115. package/dist/components/Timeline/save-prop-queue.js +6 -3
  116. package/dist/components/Timeline/save-sequence-prop.d.ts +5 -10
  117. package/dist/components/Timeline/save-sequence-prop.js +35 -32
  118. package/dist/components/Timeline/should-clear-selection-on-pointer-down.d.ts +3 -0
  119. package/dist/components/Timeline/should-clear-selection-on-pointer-down.js +7 -0
  120. package/dist/components/Timeline/timeline-asset-link.d.ts +13 -0
  121. package/dist/components/Timeline/timeline-asset-link.js +37 -0
  122. package/dist/components/Timeline/timeline-field-utils.d.ts +10 -0
  123. package/dist/components/Timeline/timeline-field-utils.js +26 -5
  124. package/dist/components/Timeline/timeline-translate-utils.d.ts +1 -1
  125. package/dist/components/Timeline/timeline-translate-utils.js +6 -4
  126. package/dist/components/Timeline/use-expanded-track-keyframe-rows.js +7 -7
  127. package/dist/components/Timeline/use-sequence-props-subscription.js +3 -3
  128. package/dist/components/Timeline/use-timeline-height.js +3 -3
  129. package/dist/components/Timeline/use-timeline-keyframe-drag.d.ts +10 -0
  130. package/dist/components/Timeline/use-timeline-keyframe-drag.js +380 -0
  131. package/dist/components/import-assets.d.ts +31 -0
  132. package/dist/components/import-assets.js +216 -17
  133. package/dist/components/load-canvas-content-from-url.d.ts +1 -0
  134. package/dist/components/load-canvas-content-from-url.js +9 -3
  135. package/dist/components/use-select-asset.d.ts +1 -0
  136. package/dist/components/use-select-asset.js +30 -0
  137. package/dist/error-overlay/error-origin.d.ts +3 -0
  138. package/dist/error-overlay/error-origin.js +42 -0
  139. package/dist/error-overlay/react-overlay/listen-to-runtime-errors.js +6 -2
  140. package/dist/error-overlay/remotion-overlay/ErrorLoader.js +38 -0
  141. package/dist/error-overlay/remotion-overlay/ShortcutHint.js +1 -1
  142. package/dist/error-overlay/remotion-overlay/log-studio-error.d.ts +3 -0
  143. package/dist/error-overlay/remotion-overlay/log-studio-error.js +27 -0
  144. package/dist/esm/{chunk-48grt472.js → chunk-xjvc8qen.js} +21838 -18862
  145. package/dist/esm/internals.mjs +21838 -18862
  146. package/dist/esm/previewEntry.mjs +21127 -18127
  147. package/dist/esm/renderEntry.mjs +1 -1
  148. package/dist/helpers/get-asset-metadata.js +2 -2
  149. package/dist/helpers/get-preview-file-type.d.ts +2 -0
  150. package/dist/helpers/get-preview-file-type.js +33 -0
  151. package/dist/helpers/install-required-package.d.ts +1 -0
  152. package/dist/helpers/install-required-package.js +39 -0
  153. package/dist/helpers/remote-asset-drag.d.ts +4 -0
  154. package/dist/helpers/remote-asset-drag.js +73 -0
  155. package/dist/helpers/timeline-layout.d.ts +6 -6
  156. package/dist/helpers/timeline-layout.js +5 -5
  157. package/dist/helpers/use-asset-drag-events.d.ts +5 -2
  158. package/dist/helpers/use-asset-drag-events.js +13 -2
  159. package/dist/hot-middleware-client/client.js +6 -0
  160. package/dist/state/editor-outlines.d.ts +8 -0
  161. package/dist/state/editor-outlines.js +18 -0
  162. package/dist/state/modals.d.ts +16 -2
  163. package/package.json +10 -10
  164. package/dist/helpers/detect-file-type.d.ts +0 -69
  165. package/dist/helpers/detect-file-type.js +0 -278
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ export declare const ShowOutlinesProvider: React.FC<{
3
+ readonly children: React.ReactNode;
4
+ }>;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ShowOutlinesProvider = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_1 = require("react");
6
+ const editor_outlines_1 = require("../state/editor-outlines");
7
+ const ShowOutlinesProvider = ({ children }) => {
8
+ const [editorShowOutlines, setEditorShowOutlinesState] = (0, react_1.useState)(() => (0, editor_outlines_1.loadEditorShowOutlinesOption)());
9
+ const setEditorShowOutlines = (0, react_1.useCallback)((newValue) => {
10
+ setEditorShowOutlinesState((prevState) => {
11
+ const newVal = newValue(prevState);
12
+ (0, editor_outlines_1.persistEditorShowOutlinesOption)(newVal);
13
+ return newVal;
14
+ });
15
+ }, []);
16
+ const editorShowOutlinesCtx = (0, react_1.useMemo)(() => {
17
+ return {
18
+ editorShowOutlines,
19
+ setEditorShowOutlines,
20
+ };
21
+ }, [editorShowOutlines, setEditorShowOutlines]);
22
+ return (jsx_runtime_1.jsx(editor_outlines_1.EditorShowOutlinesContext.Provider, { value: editorShowOutlinesCtx, children: children }));
23
+ };
24
+ exports.ShowOutlinesProvider = ShowOutlinesProvider;
@@ -4,10 +4,10 @@ exports.SizeSelector = exports.getUniqueSizes = exports.getPreviewSizeLabel = vo
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 get_preview_file_type_1 = require("../helpers/get-preview-file-type");
7
8
  const Checkmark_1 = require("../icons/Checkmark");
8
9
  const ControlButton_1 = require("./ControlButton");
9
10
  const ComboBox_1 = require("./NewComposition/ComboBox");
10
- const Preview_1 = require("./Preview");
11
11
  const commonPreviewSizes = [
12
12
  {
13
13
  size: 'auto',
@@ -83,11 +83,11 @@ const SizeSelector = () => {
83
83
  return true;
84
84
  }
85
85
  if (canvasContent.type === 'asset' &&
86
- zoomableFileTypes.includes((0, Preview_1.getPreviewFileType)(canvasContent.asset))) {
86
+ zoomableFileTypes.includes((0, get_preview_file_type_1.getPreviewFileType)(canvasContent.asset))) {
87
87
  return true;
88
88
  }
89
89
  if (canvasContent.type === 'output' &&
90
- zoomableFileTypes.includes((0, Preview_1.getPreviewFileType)(canvasContent.path))) {
90
+ zoomableFileTypes.includes((0, get_preview_file_type_1.getPreviewFileType)(canvasContent.path))) {
91
91
  return true;
92
92
  }
93
93
  return false;
@@ -34,6 +34,8 @@ const SplitterHandle = ({ allowToCollapse, onCollapse }) => {
34
34
  if (e.button !== 0) {
35
35
  return;
36
36
  }
37
+ // Prevent deselection of currently selected items
38
+ e.stopPropagation();
37
39
  // Capture the context and starting flex once, at drag start. The flex
38
40
  // value updates on every pointermove, so it must not be re-read live.
39
41
  const dragContext = latest.current.context;
@@ -6,8 +6,8 @@ const react_1 = require("react");
6
6
  const remotion_1 = require("remotion");
7
7
  const client_id_1 = require("../helpers/client-id");
8
8
  const colors_1 = require("../helpers/colors");
9
+ const get_preview_file_type_1 = require("../helpers/get-preview-file-type");
9
10
  const FilePreview_1 = require("./FilePreview");
10
- const Preview_1 = require("./Preview");
11
11
  const use_static_files_1 = require("./use-static-files");
12
12
  const msgStyle = {
13
13
  fontSize: 13,
@@ -21,7 +21,7 @@ const errMsgStyle = {
21
21
  color: colors_1.LIGHT_TEXT,
22
22
  };
23
23
  const StaticFilePreview = ({ currentAsset, assetMetadata }) => {
24
- const fileType = (0, Preview_1.getPreviewFileType)(currentAsset);
24
+ const fileType = (0, get_preview_file_type_1.getPreviewFileType)(currentAsset);
25
25
  const staticFileSrc = (0, remotion_1.staticFile)(currentAsset);
26
26
  const staticFiles = (0, use_static_files_1.useStaticFiles)();
27
27
  const connectionStatus = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx)
@@ -0,0 +1,15 @@
1
+ import React from 'react';
2
+ import type { CanUpdateSequencePropStatusKeyframed, SequencePropsSubscriptionKey, SequenceSchema } from 'remotion';
3
+ export type KeyframeSettingsModalState = {
4
+ type: 'keyframe-settings';
5
+ fileName: string;
6
+ nodePath: SequencePropsSubscriptionKey;
7
+ fieldKey: string;
8
+ fieldLabel: string;
9
+ status: CanUpdateSequencePropStatusKeyframed;
10
+ schema: SequenceSchema;
11
+ effectIndex: number | null;
12
+ };
13
+ export declare const KeyframeSettingsModal: React.FC<{
14
+ readonly state: KeyframeSettingsModalState;
15
+ }>;
@@ -0,0 +1,150 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.KeyframeSettingsModal = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_1 = require("react");
6
+ const remotion_1 = require("remotion");
7
+ const client_id_1 = require("../../helpers/client-id");
8
+ const colors_1 = require("../../helpers/colors");
9
+ const modals_1 = require("../../state/modals");
10
+ const Button_1 = require("../Button");
11
+ const layout_1 = require("../layout");
12
+ const ModalButton_1 = require("../ModalButton");
13
+ const ModalFooter_1 = require("../ModalFooter");
14
+ const ModalHeader_1 = require("../ModalHeader");
15
+ const ComboBox_1 = require("../NewComposition/ComboBox");
16
+ const DismissableModal_1 = require("../NewComposition/DismissableModal");
17
+ const InputDragger_1 = require("../NewComposition/InputDragger");
18
+ const call_update_keyframe_settings_1 = require("./call-update-keyframe-settings");
19
+ const container = {
20
+ padding: 16,
21
+ width: 520,
22
+ };
23
+ const row = {
24
+ alignItems: 'center',
25
+ display: 'flex',
26
+ justifyContent: 'space-between',
27
+ marginBottom: 12,
28
+ };
29
+ const label = {
30
+ fontSize: 13,
31
+ };
32
+ const helperText = {
33
+ color: 'rgba(255, 255, 255, 0.6)',
34
+ fontSize: 12,
35
+ lineHeight: 1.4,
36
+ marginTop: 4,
37
+ };
38
+ const comboStyle = {
39
+ minWidth: 150,
40
+ };
41
+ const posterizeInputStyle = {
42
+ backgroundColor: colors_1.INPUT_BACKGROUND,
43
+ borderRadius: 4,
44
+ minWidth: 64,
45
+ textAlign: 'right',
46
+ };
47
+ const extrapolateOptions = [
48
+ 'extend',
49
+ 'clamp',
50
+ 'identity',
51
+ 'wrap',
52
+ ];
53
+ const labelForExtrapolate = (value) => value[0].toUpperCase() + value.slice(1);
54
+ const getExtrapolateValues = (onSelect) => {
55
+ return extrapolateOptions.map((value) => ({
56
+ type: 'item',
57
+ id: value,
58
+ keyHint: null,
59
+ label: labelForExtrapolate(value),
60
+ leftItem: null,
61
+ disabled: false,
62
+ onClick: () => onSelect(value),
63
+ quickSwitcherLabel: null,
64
+ subMenu: null,
65
+ value,
66
+ }));
67
+ };
68
+ const KeyframeSettingsModal = ({ state }) => {
69
+ var _a;
70
+ const { setSelectedModal } = (0, react_1.useContext)(modals_1.ModalsContext);
71
+ const { setPropStatuses } = (0, react_1.useContext)(remotion_1.Internals.VisualModeSettersContext);
72
+ const { previewServerState } = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx);
73
+ const [left, setLeft] = (0, react_1.useState)(state.status.clamping.left);
74
+ const [right, setRight] = (0, react_1.useState)(state.status.clamping.right);
75
+ const [posterize, setPosterize] = (0, react_1.useState)((_a = state.status.posterize) !== null && _a !== void 0 ? _a : 0);
76
+ const [saving, setSaving] = (0, react_1.useState)(false);
77
+ const canEditClamping = state.status.interpolationFunction === 'interpolate';
78
+ const close = (0, react_1.useCallback)(() => {
79
+ setSelectedModal(null);
80
+ }, [setSelectedModal]);
81
+ const leftOptions = (0, react_1.useMemo)(() => getExtrapolateValues(setLeft), []);
82
+ const rightOptions = (0, react_1.useMemo)(() => getExtrapolateValues(setRight), []);
83
+ const onPosterizeChange = (0, react_1.useCallback)((value) => {
84
+ setPosterize(Math.max(0, Math.round(value)));
85
+ }, []);
86
+ const posterizeFormatter = (0, react_1.useCallback)((value) => {
87
+ const numericValue = Number(value);
88
+ return String(Math.round(numericValue));
89
+ }, []);
90
+ const onSave = (0, react_1.useCallback)(() => {
91
+ if (previewServerState.type !== 'connected') {
92
+ return;
93
+ }
94
+ const settings = {
95
+ clamping: canEditClamping ? { left, right } : undefined,
96
+ posterize: posterize <= 0 ? undefined : posterize,
97
+ };
98
+ setSaving(true);
99
+ const promise = state.effectIndex === null
100
+ ? (0, call_update_keyframe_settings_1.callUpdateSequenceKeyframeSettings)({
101
+ fileName: state.fileName,
102
+ nodePath: state.nodePath,
103
+ fieldKey: state.fieldKey,
104
+ settings,
105
+ schema: state.schema,
106
+ setPropStatuses,
107
+ clientId: previewServerState.clientId,
108
+ })
109
+ : (0, call_update_keyframe_settings_1.callUpdateEffectKeyframeSettings)({
110
+ fileName: state.fileName,
111
+ nodePath: state.nodePath,
112
+ effectIndex: state.effectIndex,
113
+ fieldKey: state.fieldKey,
114
+ settings,
115
+ schema: state.schema,
116
+ setPropStatuses,
117
+ clientId: previewServerState.clientId,
118
+ });
119
+ promise.then(close).finally(() => {
120
+ setSaving(false);
121
+ });
122
+ }, [
123
+ canEditClamping,
124
+ close,
125
+ left,
126
+ posterize,
127
+ previewServerState,
128
+ right,
129
+ setPropStatuses,
130
+ state,
131
+ ]);
132
+ const saveDisabled = saving || previewServerState.type !== 'connected';
133
+ return (jsx_runtime_1.jsxs(DismissableModal_1.DismissableModal, { children: [
134
+ jsx_runtime_1.jsx(ModalHeader_1.ModalHeader, { title: `Keyframe settings: ${state.fieldLabel}` }), jsx_runtime_1.jsxs("div", { style: container, children: [canEditClamping ? (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
135
+ jsx_runtime_1.jsxs("div", { style: row, children: [
136
+ jsx_runtime_1.jsx("div", { style: label, children: "Extrapolate left" }), jsx_runtime_1.jsx(ComboBox_1.Combobox, { values: leftOptions, selectedId: left, title: "Extrapolate left", style: comboStyle })
137
+ ] }), jsx_runtime_1.jsxs("div", { style: row, children: [
138
+ jsx_runtime_1.jsx("div", { style: label, children: "Extrapolate right" }), jsx_runtime_1.jsx(ComboBox_1.Combobox, { values: rightOptions, selectedId: right, title: "Extrapolate right", style: comboStyle })
139
+ ] })
140
+ ] })) : null, jsx_runtime_1.jsxs("div", { style: row, children: [
141
+ jsx_runtime_1.jsxs("div", { children: [
142
+ jsx_runtime_1.jsx("div", { style: label, children: "Posterize" }), jsx_runtime_1.jsx("div", { style: helperText, children: "Use 0 to turn posterization off." })
143
+ ] }), jsx_runtime_1.jsx(InputDragger_1.InputDragger, { type: "number", value: posterize, status: "ok", onValueChange: onPosterizeChange, onValueChangeEnd: onPosterizeChange, onTextChange: () => undefined, min: 0, step: 1, formatter: posterizeFormatter, rightAlign: true, style: posterizeInputStyle })
144
+ ] })
145
+ ] }), jsx_runtime_1.jsx(ModalFooter_1.ModalFooterContainer, { children: jsx_runtime_1.jsxs(layout_1.Row, { justify: "flex-end", align: "center", children: [
146
+ jsx_runtime_1.jsx(Button_1.Button, { onClick: close, children: "Cancel" }), jsx_runtime_1.jsx(layout_1.Spacing, { x: 1 }), jsx_runtime_1.jsx(ModalButton_1.ModalButton, { onClick: onSave, disabled: saveDisabled, children: "Save" })
147
+ ] }) })
148
+ ] }));
149
+ };
150
+ exports.KeyframeSettingsModal = KeyframeSettingsModal;
@@ -6,19 +6,19 @@ const remotion_1 = require("remotion");
6
6
  const client_id_1 = require("../../helpers/client-id");
7
7
  const SequencePropsObserver = () => {
8
8
  const { subscribeToEvent } = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx);
9
- const { setCodeValues } = (0, react_1.useContext)(remotion_1.Internals.VisualModeSettersContext);
9
+ const { setPropStatuses } = (0, react_1.useContext)(remotion_1.Internals.VisualModeSettersContext);
10
10
  (0, react_1.useEffect)(() => {
11
11
  const handleEvent = (event) => {
12
12
  if (event.type !== 'sequence-props-updated') {
13
13
  return;
14
14
  }
15
- setCodeValues(event.nodePath, () => event.result);
15
+ setPropStatuses(event.nodePath, () => event.result);
16
16
  };
17
17
  const unsubscribe = subscribeToEvent('sequence-props-updated', handleEvent);
18
18
  return () => {
19
19
  unsubscribe();
20
20
  };
21
- }, [setCodeValues, subscribeToEvent]);
21
+ }, [setPropStatuses, subscribeToEvent]);
22
22
  return null;
23
23
  };
24
24
  exports.SequencePropsObserver = SequencePropsObserver;
@@ -78,9 +78,8 @@ const container = {
78
78
  backgroundColor: colors_1.BACKGROUND,
79
79
  };
80
80
  const noop = () => undefined;
81
- const TimelineClearSelectionArea = ({ children }) => {
81
+ const TimelineContextMenuArea = ({ children }) => {
82
82
  var _a, _b;
83
- const { clearSelection } = (0, TimelineSelection_1.useTimelineSelection)();
84
83
  const { compositions, canvasContent } = (0, react_1.useContext)(remotion_1.Internals.CompositionManager);
85
84
  const videoConfig = remotion_1.Internals.useUnsafeVideoConfig();
86
85
  const [isAddingSolid, setIsAddingSolid] = (0, react_1.useState)(false);
@@ -101,15 +100,6 @@ const TimelineClearSelectionArea = ({ children }) => {
101
100
  compositionFile,
102
101
  compositionId: currentCompositionId,
103
102
  });
104
- // Selection-triggering click handlers in children call e.stopPropagation(),
105
- // so any pointerdown that bubbles up here is by definition on empty space
106
- // and should clear the current selection.
107
- const onPointerDown = (0, react_1.useCallback)((e) => {
108
- if (e.button !== 0) {
109
- return;
110
- }
111
- clearSelection();
112
- }, [clearSelection]);
113
103
  const canInsertSolid = previewConnected &&
114
104
  (compositionComponentInfo === null || compositionComponentInfo === void 0 ? void 0 : compositionComponentInfo.canAddSequence) === true &&
115
105
  currentCompositionId !== null &&
@@ -203,7 +193,7 @@ const TimelineClearSelectionArea = ({ children }) => {
203
193
  },
204
194
  ];
205
195
  }, [insertSolid, canInsertSolid, insertAsset, canInsertAsset]);
206
- return (jsx_runtime_1.jsx(ContextMenu_1.ContextMenu, { ref: timeline_refs_1.timelineVerticalScroll, values: contextMenuItems, onOpen: null, style: container, className: 'css-reset ' + is_menu_item_1.VERTICAL_SCROLLBAR_CLASSNAME, onPointerDown: onPointerDown, children: children }));
196
+ return (jsx_runtime_1.jsx(ContextMenu_1.ContextMenu, { ref: timeline_refs_1.timelineVerticalScroll, values: contextMenuItems, onOpen: null, style: container, className: 'css-reset ' + is_menu_item_1.VERTICAL_SCROLLBAR_CLASSNAME, children: children }));
207
197
  };
208
198
  const TimelineInner = () => {
209
199
  var _a;
@@ -233,7 +223,7 @@ const TimelineInner = () => {
233
223
  : filtered;
234
224
  }, [filtered]);
235
225
  const hasBeenCut = filtered.length > shown.length;
236
- return (jsx_runtime_1.jsxs(TimelineClearSelectionArea, { children: [sequences.map((sequence) => {
226
+ return (jsx_runtime_1.jsxs(TimelineContextMenuArea, { children: [sequences.map((sequence) => {
237
227
  if (!sequence.controls || !previewConnected || !sequence.getStack()) {
238
228
  return null;
239
229
  }
@@ -1,5 +1,6 @@
1
- import { type EffectClipboardSnapshot } from '@remotion/studio-shared';
1
+ import { type EffectClipboardSnapshot, type EffectPropClipboardData } from '@remotion/studio-shared';
2
2
  import type React from 'react';
3
+ import { type OverrideIdToNodePaths, type PropStatuses, type SequencePropsSubscriptionKey, type SequenceSchema, type TSequence } from 'remotion';
3
4
  import type { SequenceNodePathInfo } from '../../helpers/get-timeline-sequence-sort-key';
4
5
  import { type TimelineSelection } from './TimelineSelection';
5
6
  export type PasteEffectsTarget = {
@@ -12,9 +13,31 @@ export type PasteEffectsTarget = {
12
13
  } | {
13
14
  readonly type: 'unsupported';
14
15
  };
16
+ export type PasteEffectPropTarget = {
17
+ readonly type: 'valid';
18
+ readonly fileName: string;
19
+ readonly nodePath: SequencePropsSubscriptionKey;
20
+ readonly effectIndex: number;
21
+ readonly fieldKey: string;
22
+ readonly defaultValue: string | null;
23
+ readonly schema: SequenceSchema;
24
+ } | {
25
+ readonly type: 'none' | 'multiple' | 'unsupported' | 'effect-type-mismatch' | 'prop-mismatch' | 'uncopyable';
26
+ };
15
27
  export declare const getPasteEffectsTarget: (selectedItems: readonly TimelineSelection[]) => PasteEffectsTarget;
16
- export declare const getSnapshotsFromSelection: ({ selection, codeValues, }: {
28
+ export declare const getSnapshotsFromSelection: ({ selection, propStatuses, }: {
17
29
  selection: TimelineSelection;
18
- codeValues: import("remotion").CodeValues;
30
+ propStatuses: PropStatuses;
19
31
  }) => EffectClipboardSnapshot[] | null;
32
+ export declare const getEffectPropClipboardDataFromSelection: ({ selection, propStatuses, }: {
33
+ selection: TimelineSelection;
34
+ propStatuses: PropStatuses;
35
+ }) => EffectPropClipboardData | null;
36
+ export declare const getPasteEffectPropTarget: ({ selectedItems, payload, propStatuses, sequences, overrideIdsToNodePaths, }: {
37
+ readonly selectedItems: readonly TimelineSelection[];
38
+ readonly payload: EffectPropClipboardData;
39
+ readonly propStatuses: PropStatuses;
40
+ readonly sequences: TSequence[];
41
+ readonly overrideIdsToNodePaths: OverrideIdToNodePaths;
42
+ }) => PasteEffectPropTarget;
20
43
  export declare const TimelineClipboardKeybindings: React.FC;