@remotion/studio 4.0.515 → 4.0.517
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api/restart-studio.js +4 -0
- package/dist/components/AssetSelector.js +4 -10
- package/dist/components/AssetSelectorItem.d.ts +2 -1
- package/dist/components/AssetSelectorItem.js +24 -29
- package/dist/components/Canvas.js +21 -15
- package/dist/components/CanvasCaptureDropHandler.d.ts +4 -0
- package/dist/components/CanvasCaptureDropHandler.js +42 -0
- package/dist/components/CanvasOrLoading.js +4 -3
- package/dist/components/CaptionInspector.d.ts +2 -0
- package/dist/components/CaptionInspector.js +3 -5
- package/dist/components/CheckboardToggle.js +1 -1
- package/dist/components/Checkbox.d.ts +0 -1
- package/dist/components/Checkbox.js +2 -19
- package/dist/components/CompositionSelector.js +6 -3
- package/dist/components/CompositionSelectorItem.js +9 -10
- package/dist/components/ConfigSelect.d.ts +17 -0
- package/dist/components/ConfigSelect.js +50 -0
- package/dist/components/ConfigureLicenseModal.js +79 -46
- package/dist/components/CurrentAsset.d.ts +10 -2
- package/dist/components/CurrentAsset.js +143 -45
- package/dist/components/Editor.js +2 -1
- package/dist/components/EditorContent.js +5 -2
- package/dist/components/EditorContexts.js +2 -1
- package/dist/components/EditorRuler/Ruler.d.ts +1 -0
- package/dist/components/EditorRuler/Ruler.js +9 -8
- package/dist/components/EditorRuler/index.d.ts +1 -0
- package/dist/components/EditorRuler/index.js +3 -4
- package/dist/components/EditorRuler/use-is-ruler-visible.d.ts +1 -1
- package/dist/components/EditorRuler/use-is-ruler-visible.js +8 -2
- package/dist/components/ElementLibraryModal.d.ts +5 -0
- package/dist/components/ElementLibraryModal.js +38 -0
- package/dist/components/FilePreview.js +71 -0
- package/dist/components/FixComputedValueModal.js +54 -51
- package/dist/components/GlobalKeybindings.js +5 -5
- package/dist/components/InlineAction.d.ts +1 -1
- package/dist/components/InlineAction.js +12 -2
- package/dist/components/InlineCaptionInspector.d.ts +2 -0
- package/dist/components/InlineCaptionInspector.js +2 -2
- package/dist/components/InlineCompositionName.js +1 -1
- package/dist/components/InlineEditableTitle.js +5 -4
- package/dist/components/InspectorInfoHeader.js +1 -1
- package/dist/components/InspectorOpenInEditor.js +48 -72
- package/dist/components/InspectorPanel/AlignmentControls.js +2 -3
- package/dist/components/InspectorPanel/CollapsibleInspectorSectionHeader.d.ts +7 -0
- package/dist/components/InspectorPanel/CollapsibleInspectorSectionHeader.js +39 -0
- package/dist/components/InspectorPanel/CompositionInspector.js +25 -45
- package/dist/components/InspectorPanel/CompositionInspectorHeader.js +2 -2
- package/dist/components/InspectorPanel/CompositionMetadata.js +11 -4
- package/dist/components/InspectorPanel/EasingInspector.js +2 -2
- package/dist/components/InspectorPanel/ElementLibraryButton.d.ts +2 -0
- package/dist/components/InspectorPanel/ElementLibraryButton.js +139 -0
- package/dist/components/InspectorPanel/KeyframeEasingNavigator.js +10 -4
- package/dist/components/InspectorPanel/KeyframeInspector.js +1 -1
- package/dist/components/InspectorPanel/SequenceInspectorHeader.js +14 -6
- package/dist/components/InspectorPanel/SequenceSelectionInspector.js +2 -7
- package/dist/components/InspectorPanel/common.d.ts +0 -13
- package/dist/components/InspectorPanel/common.js +6 -59
- package/dist/components/InspectorPanel/inspector-selection.d.ts +2 -2
- package/dist/components/InspectorPanel/styles.d.ts +0 -1
- package/dist/components/InspectorPanel/styles.js +3 -4
- package/dist/components/InspectorPanel/use-composition-actions.js +0 -1
- package/dist/components/InspectorPanel/use-track-for-selection.d.ts +1 -2
- package/dist/components/InspectorPanelLayout.d.ts +1 -1
- package/dist/components/InspectorPanelLayout.js +1 -1
- package/dist/components/InspectorSequenceSection.d.ts +1 -2
- package/dist/components/InspectorSequenceSection.js +40 -54
- package/dist/components/InspectorSourceLocation.js +1 -1
- package/dist/components/InstallPackage.d.ts +2 -1
- package/dist/components/InstallPackage.js +60 -30
- package/dist/components/InstallablePackage.js +37 -11
- package/dist/components/KeyboardShortcutsSettings.d.ts +2 -0
- package/dist/components/KeyboardShortcutsSettings.js +177 -0
- package/dist/components/Menu/MenuItem.js +15 -6
- package/dist/components/MenuBuildIndicator.js +1 -1
- package/dist/components/MenuToolbar.js +7 -3
- package/dist/components/Modals.js +7 -5
- package/dist/components/NewComposition/CodemodFooter.d.ts +0 -1
- package/dist/components/NewComposition/CodemodFooter.js +2 -8
- package/dist/components/NewComposition/DeleteComposition.js +1 -1
- package/dist/components/NewComposition/DeleteFolder.js +1 -1
- package/dist/components/NewComposition/DuplicateComposition.js +1 -1
- package/dist/components/NewComposition/InputDragger.js +27 -4
- package/dist/components/NewComposition/NewComposition.js +1 -1
- package/dist/components/NewComposition/NewFolder.js +1 -3
- package/dist/components/NewComposition/RenameComposition.js +1 -1
- package/dist/components/NewComposition/RenameFolder.js +1 -1
- package/dist/components/NewComposition/use-rename-static-file.js +1 -1
- package/dist/components/Notifications/NotificationCenter.d.ts +1 -0
- package/dist/components/Notifications/NotificationCenter.js +5 -0
- package/dist/components/OptionsPanel.js +9 -12
- package/dist/components/PlaybackRateSelector.js +1 -1
- package/dist/components/Preview.js +83 -5
- package/dist/components/PreviewToolbar.js +12 -3
- package/dist/components/PreviewToolbarOverflowButton.d.ts +1 -0
- package/dist/components/PreviewToolbarOverflowButton.js +39 -2
- package/dist/components/QuickSwitcher/ExplorerQuickSwitcherTrigger.js +2 -2
- package/dist/components/QuickSwitcher/QuickSwitcherContent.js +14 -30
- package/dist/components/RadioButton.d.ts +6 -0
- package/dist/components/RadioButton.js +62 -0
- package/dist/components/RenderButton.js +68 -184
- package/dist/components/RenderModal/DataEditor.js +15 -12
- package/dist/components/RenderModal/RenderStatusModal.js +0 -1
- package/dist/components/RenderModal/SchemaEditor/ZodSwitch.js +3 -1
- package/dist/components/RenderModal/SchemaEditor/infer-zod-schema-from-value.d.ts +15 -0
- package/dist/components/RenderModal/SchemaEditor/infer-zod-schema-from-value.js +95 -0
- package/dist/components/RenderQueue/RenderQueueRemoveItem.js +1 -6
- package/dist/components/RenderingSettings.js +7 -4
- package/dist/components/RulersAndGuidesToggle.d.ts +4 -0
- package/dist/components/RulersAndGuidesToggle.js +34 -0
- package/dist/components/SegmentedButton.d.ts +29 -0
- package/dist/components/SegmentedButton.js +226 -0
- package/dist/components/SelectedOutlineEditingHandles.d.ts +16 -0
- package/dist/components/SelectedOutlineEditingHandles.js +66 -0
- package/dist/components/SelectedOutlineElement.d.ts +2 -4
- package/dist/components/SelectedOutlineElement.js +15 -54
- package/dist/components/SelectedOutlineOverlay.js +32 -6
- package/dist/components/SelectedOutlinePolygon.d.ts +4 -6
- package/dist/components/SelectedOutlinePolygon.js +18 -16
- package/dist/components/SelectedOutlineRenderer.d.ts +1 -2
- package/dist/components/SelectedOutlineRenderer.js +66 -14
- package/dist/components/SelectedOutlineUvControls.d.ts +1 -1
- package/dist/components/SettingsModal.d.ts +1 -1
- package/dist/components/SettingsModal.js +30 -7
- package/dist/components/SettingsModalFooter.d.ts +3 -1
- package/dist/components/SettingsModalFooter.js +20 -4
- package/dist/components/ShowPixelGridProvider.d.ts +4 -0
- package/dist/components/ShowPixelGridProvider.js +24 -0
- package/dist/components/SidebarCollapserControls.js +2 -2
- package/dist/components/SkillsSettings.d.ts +2 -0
- package/dist/components/SkillsSettings.js +129 -0
- package/dist/components/StaticFilePreview.js +7 -1
- package/dist/components/StudioSettings.js +7 -48
- package/dist/components/Tabs/index.js +1 -1
- package/dist/components/Timeline/Timeline.js +41 -1
- package/dist/components/Timeline/TimelineAssetField.d.ts +1 -1
- package/dist/components/Timeline/TimelineAssetField.js +15 -9
- package/dist/components/Timeline/TimelineBooleanField.js +1 -4
- package/dist/components/Timeline/TimelineClipboardKeybindings.d.ts +6 -7
- package/dist/components/Timeline/TimelineClipboardKeybindings.js +7 -10
- package/dist/components/Timeline/TimelineDragHandler.js +11 -4
- package/dist/components/Timeline/TimelineEffectItem.d.ts +1 -0
- package/dist/components/Timeline/TimelineEffectItem.js +23 -10
- package/dist/components/Timeline/TimelineEffectPropItem.js +15 -2
- package/dist/components/Timeline/TimelineExpandedRow.js +5 -4
- package/dist/components/Timeline/TimelineFieldLabel.js +4 -2
- package/dist/components/Timeline/TimelineFieldRowContent.d.ts +1 -2
- package/dist/components/Timeline/TimelineFieldRowContent.js +8 -21
- package/dist/components/Timeline/TimelineImageInfo.d.ts +0 -1
- package/dist/components/Timeline/TimelineImageInfo.js +13 -32
- package/dist/components/Timeline/TimelineKeyframeControls.d.ts +1 -2
- package/dist/components/Timeline/TimelineKeyframeControls.js +10 -4
- package/dist/components/Timeline/TimelinePlayCursorSyncer.js +4 -2
- package/dist/components/Timeline/TimelinePrimitiveFieldValue.js +1 -1
- package/dist/components/Timeline/TimelineRotationField.js +0 -2
- package/dist/components/Timeline/TimelineRowChrome.d.ts +0 -1
- package/dist/components/Timeline/TimelineRowChrome.js +3 -4
- package/dist/components/Timeline/TimelineRowLayoutContext.d.ts +0 -1
- package/dist/components/Timeline/TimelineRowLayoutContext.js +1 -4
- package/dist/components/Timeline/TimelineScaleField.js +2 -6
- package/dist/components/Timeline/TimelineSchemaField.js +9 -3
- package/dist/components/Timeline/TimelineSelection.d.ts +29 -66
- package/dist/components/Timeline/TimelineSelection.js +31 -171
- package/dist/components/Timeline/TimelineSequence.d.ts +2 -0
- package/dist/components/Timeline/TimelineSequence.js +110 -19
- package/dist/components/Timeline/TimelineSequenceItem.d.ts +1 -0
- package/dist/components/Timeline/TimelineSequenceItem.js +13 -11
- package/dist/components/Timeline/TimelineSequencePropItem.js +15 -2
- package/dist/components/Timeline/TimelineSequenceRightEdgeDragHandle.d.ts +7 -6
- package/dist/components/Timeline/TimelineSequenceRightEdgeDragHandle.js +85 -91
- package/dist/components/Timeline/TimelineTrack.js +1 -1
- package/dist/components/Timeline/TimelineTransformOriginField.js +0 -4
- package/dist/components/Timeline/TimelineTranslateField.js +0 -4
- package/dist/components/Timeline/TimelineVirtualization.js +3 -1
- package/dist/components/Timeline/delete-selected-timeline-item.d.ts +3 -4
- package/dist/components/Timeline/duplicate-selected-timeline-item.d.ts +3 -4
- package/dist/components/Timeline/duplicate-selected-timeline-item.js +3 -12
- package/dist/components/Timeline/find-track-for-node-path-info.d.ts +1 -1
- package/dist/components/Timeline/get-copy-context-for-agents-menu-item.d.ts +4 -0
- package/dist/components/Timeline/get-copy-context-for-agents-menu-item.js +26 -0
- package/dist/components/Timeline/get-sequence-context-menu-items.js +2 -19
- package/dist/components/Timeline/get-timeline-sequence-visible-layout.d.ts +6 -1
- package/dist/components/Timeline/get-timeline-sequence-visible-layout.js +11 -4
- package/dist/components/Timeline/keyframe-clipboard.d.ts +2 -3
- package/dist/components/Timeline/reset-selected-timeline-props.d.ts +2 -3
- package/dist/components/Timeline/sequence-prop-clipboard.d.ts +2 -3
- package/dist/components/Timeline/split-selected-timeline-item.d.ts +2 -3
- package/dist/components/Timeline/split-selected-timeline-item.js +0 -1
- package/dist/components/Timeline/timeline-expanded-filter.d.ts +1 -2
- package/dist/components/Timeline/timeline-field-row-layout.d.ts +1 -1
- package/dist/components/Timeline/timeline-field-row-layout.js +4 -7
- package/dist/components/Timeline/timeline-field-utils.js +0 -2
- package/dist/components/Timeline/timeline-scroll-logic.d.ts +7 -5
- package/dist/components/Timeline/timeline-scroll-logic.js +12 -7
- package/dist/components/Timeline/update-selected-easing.d.ts +7 -7
- package/dist/components/Timeline/use-timeline-asset-drop.js +24 -0
- package/dist/components/Timeline/use-timeline-keyframe-drag.d.ts +6 -7
- package/dist/components/TimelineCombobox.js +25 -160
- package/dist/components/TimelineInOutToggle.js +4 -1
- package/dist/components/canvas-capture-drop.d.ts +4 -0
- package/dist/components/canvas-capture-drop.js +22 -0
- package/dist/components/duplicate-jsx-node-api.d.ts +2 -0
- package/dist/components/duplicate-jsx-node-api.js +12 -0
- package/dist/components/effect-drag-and-drop.js +1 -4
- package/dist/components/handle-drop.d.ts +2 -1
- package/dist/components/handle-drop.js +3 -3
- package/dist/components/import-assets.js +9 -65
- package/dist/components/keyboard-shortcuts.d.ts +10 -0
- package/dist/components/keyboard-shortcuts.js +135 -0
- package/dist/components/selected-outline-control-layout.js +2 -6
- package/dist/components/selected-outline-measurement.d.ts +8 -9
- package/dist/components/selected-outline-measurement.js +16 -3
- package/dist/components/use-delete-asset.d.ts +1 -0
- package/dist/components/use-delete-asset.js +40 -0
- package/dist/components/use-selected-outline-control-target.d.ts +11 -0
- package/dist/components/use-selected-outline-control-target.js +79 -0
- package/dist/esm/{chunk-s6k99gh2.js → chunk-4bxz1d3g.js} +3 -2
- package/dist/esm/{chunk-v5a8vpv4.js → chunk-gzqm3g2m.js} +47432 -40444
- package/dist/esm/index.mjs +3 -0
- package/dist/esm/internals.mjs +47431 -40443
- package/dist/esm/previewEntry.mjs +47169 -40181
- package/dist/esm/renderEntry.mjs +2 -2
- package/dist/helpers/add-asset-cache-bust.d.ts +4 -0
- package/dist/helpers/add-asset-cache-bust.js +10 -0
- package/dist/helpers/calculate-timeline.d.ts +1 -7
- package/dist/helpers/calculate-timeline.js +2 -145
- package/dist/helpers/colors.d.ts +2 -0
- package/dist/helpers/colors.js +6 -2
- package/dist/helpers/drag-aware-double-click.d.ts +6 -0
- package/dist/helpers/drag-aware-double-click.js +20 -0
- package/dist/helpers/editor-ruler.js +6 -5
- package/dist/helpers/get-asset-metadata.d.ts +19 -0
- package/dist/helpers/get-asset-metadata.js +75 -21
- package/dist/helpers/get-connected-compositions.d.ts +1 -6
- package/dist/helpers/get-connected-compositions.js +2 -8
- package/dist/helpers/get-sequence-double-click-action.d.ts +2 -1
- package/dist/helpers/get-sequence-double-click-action.js +7 -1
- package/dist/helpers/get-sequence-visible-range.d.ts +1 -5
- package/dist/helpers/get-sequence-visible-range.js +6 -51
- package/dist/helpers/get-timeline-nestedness.d.ts +1 -2
- package/dist/helpers/get-timeline-nestedness.js +2 -12
- package/dist/helpers/get-timeline-sequence-layout.d.ts +4 -1
- package/dist/helpers/get-timeline-sequence-layout.js +15 -6
- package/dist/helpers/get-timeline-sequence-sort-key.d.ts +2 -21
- package/dist/helpers/get-timeline-sequence-sort-key.js +2 -16
- package/dist/helpers/hoverable.d.ts +1 -0
- package/dist/helpers/hoverable.js +2 -1
- package/dist/helpers/inject-css.js +3 -1
- package/dist/helpers/is-current-selected-still.js +4 -2
- package/dist/helpers/open-in-remotion-convert.d.ts +7 -0
- package/dist/helpers/open-in-remotion-convert.js +18 -0
- package/dist/helpers/sort-by-nonce-history.d.ts +1 -5
- package/dist/helpers/sort-by-nonce-history.js +3 -148
- package/dist/helpers/timeline-node-path-key.d.ts +1 -2
- package/dist/helpers/timeline-node-path-key.js +2 -2
- package/dist/helpers/use-media-metadata.d.ts +2 -1
- package/dist/helpers/use-media-metadata.js +12 -5
- package/dist/helpers/use-menu-structure.js +52 -32
- package/dist/icons/align-center-horizontal.js +1 -1
- package/dist/icons/align-left.js +1 -1
- package/dist/icons/align-right.js +1 -1
- package/dist/icons/keyboard.d.ts +4 -0
- package/dist/icons/keyboard.js +10 -0
- package/dist/icons/license.d.ts +4 -0
- package/dist/icons/license.js +8 -0
- package/dist/icons/package.d.ts +4 -0
- package/dist/icons/package.js +8 -0
- package/dist/icons/react.js +1 -1
- package/dist/icons/remotion-convert.d.ts +4 -0
- package/dist/icons/remotion-convert.js +10 -0
- package/dist/icons/skills.d.ts +4 -0
- package/dist/icons/skills.js +10 -0
- package/dist/state/editor-pixel-grid.d.ts +8 -0
- package/dist/state/editor-pixel-grid.js +18 -0
- package/dist/state/modals.d.ts +6 -5
- package/package.json +14 -12
- package/dist/components/KeyboardShortcutsExplainer.d.ts +0 -2
- package/dist/components/KeyboardShortcutsExplainer.js +0 -194
|
@@ -6,16 +6,14 @@ const client_1 = require("@remotion/renderer/client");
|
|
|
6
6
|
const studio_shared_1 = require("@remotion/studio-shared");
|
|
7
7
|
const react_1 = require("react");
|
|
8
8
|
const colors_1 = require("../helpers/colors");
|
|
9
|
-
const Checkmark_1 = require("../icons/Checkmark");
|
|
10
9
|
const undo_1 = require("../icons/undo");
|
|
11
10
|
const Button_1 = require("./Button");
|
|
11
|
+
const ConfigSelect_1 = require("./ConfigSelect");
|
|
12
12
|
const styles_1 = require("./InspectorPanel/styles");
|
|
13
13
|
const layout_1 = require("./layout");
|
|
14
|
-
const ComboBox_1 = require("./NewComposition/ComboBox");
|
|
15
14
|
const InputDragger_1 = require("./NewComposition/InputDragger");
|
|
16
15
|
const ValidationMessage_1 = require("./NewComposition/ValidationMessage");
|
|
17
16
|
const layout_2 = require("./RenderModal/layout");
|
|
18
|
-
const RenderModalHr_1 = require("./RenderModal/RenderModalHr");
|
|
19
17
|
const SettingsContext_1 = require("./SettingsContext");
|
|
20
18
|
const use_auto_save_config_1 = require("./use-auto-save-config");
|
|
21
19
|
const container = {
|
|
@@ -29,15 +27,14 @@ const dividerLabel = {
|
|
|
29
27
|
margin: 0,
|
|
30
28
|
padding: '4px 16px',
|
|
31
29
|
};
|
|
32
|
-
const
|
|
33
|
-
|
|
34
|
-
|
|
30
|
+
const sectionTitle = {
|
|
31
|
+
...dividerLabel,
|
|
32
|
+
marginTop: 8,
|
|
35
33
|
};
|
|
36
34
|
const resetIcon = {
|
|
37
35
|
height: 12,
|
|
38
36
|
width: 12,
|
|
39
37
|
};
|
|
40
|
-
const DEFAULT_VALUE = 'studio-default';
|
|
41
38
|
const initialSettings = {
|
|
42
39
|
askAIEnabled: null,
|
|
43
40
|
audioLatencyHint: null,
|
|
@@ -50,39 +47,6 @@ const initialSettings = {
|
|
|
50
47
|
numberOfSharedAudioTags: null,
|
|
51
48
|
rspack: null,
|
|
52
49
|
};
|
|
53
|
-
const ConfigSelect = ({ defaultLabel, name, onChange, options, value, }) => {
|
|
54
|
-
const values = [
|
|
55
|
-
{
|
|
56
|
-
id: DEFAULT_VALUE,
|
|
57
|
-
keyHint: null,
|
|
58
|
-
label: `Default (${defaultLabel})`,
|
|
59
|
-
leftItem: value === null ? jsx_runtime_1.jsx(Checkmark_1.Checkmark, {}) : null,
|
|
60
|
-
onClick: () => onChange(null),
|
|
61
|
-
quickSwitcherLabel: null,
|
|
62
|
-
subMenu: null,
|
|
63
|
-
type: 'item',
|
|
64
|
-
value: DEFAULT_VALUE,
|
|
65
|
-
},
|
|
66
|
-
{ id: `${DEFAULT_VALUE}-divider`, type: 'divider' },
|
|
67
|
-
...options.map((option) => {
|
|
68
|
-
const id = `${name}-${String(option.value)}`;
|
|
69
|
-
return {
|
|
70
|
-
id,
|
|
71
|
-
keyHint: null,
|
|
72
|
-
label: option.label,
|
|
73
|
-
leftItem: value === option.value ? jsx_runtime_1.jsx(Checkmark_1.Checkmark, {}) : null,
|
|
74
|
-
onClick: () => onChange(option.value),
|
|
75
|
-
quickSwitcherLabel: null,
|
|
76
|
-
subMenu: null,
|
|
77
|
-
type: 'item',
|
|
78
|
-
value: id,
|
|
79
|
-
};
|
|
80
|
-
}),
|
|
81
|
-
];
|
|
82
|
-
return (jsx_runtime_1.jsxs("div", { style: layout_2.optionRow, children: [
|
|
83
|
-
jsx_runtime_1.jsx("div", { style: layout_2.label, children: name }), jsx_runtime_1.jsx("div", { style: layout_2.rightRow, children: jsx_runtime_1.jsx(ComboBox_1.Combobox, { values: values, selectedId: value === null ? DEFAULT_VALUE : `${name}-${String(value)}`, style: controlWidth, title: name }) })
|
|
84
|
-
] }));
|
|
85
|
-
};
|
|
86
50
|
const ConfigNumber = ({ defaultLabel, defaultValue, name, onChange, onChangeEnd, value, }) => {
|
|
87
51
|
const resolvedDefaultLabel = defaultLabel !== null && defaultLabel !== void 0 ? defaultLabel : String(defaultValue);
|
|
88
52
|
return (jsx_runtime_1.jsxs("div", { style: layout_2.optionRow, children: [
|
|
@@ -91,10 +55,6 @@ const ConfigNumber = ({ defaultLabel, defaultValue, name, onChange, onChangeEnd,
|
|
|
91
55
|
] })
|
|
92
56
|
] }));
|
|
93
57
|
};
|
|
94
|
-
const booleanOptions = [
|
|
95
|
-
{ label: 'Enabled', value: true },
|
|
96
|
-
{ label: 'Disabled', value: false },
|
|
97
|
-
];
|
|
98
58
|
const StudioSettings = () => {
|
|
99
59
|
var _a;
|
|
100
60
|
const { error: settingsError, revision, studioRuntimeConfig } = (0, SettingsContext_1.useSettings)();
|
|
@@ -140,7 +100,6 @@ const StudioSettings = () => {
|
|
|
140
100
|
update('setAudioLatencyHint', settings.audioLatencyHint),
|
|
141
101
|
update('setNumberOfSharedAudioTags', committedNumberSettings.numberOfSharedAudioTags),
|
|
142
102
|
update('setRspack', settings.rspack),
|
|
143
|
-
update('setKeyboardShortcutsEnabled', settings.keyboardShortcutsEnabled),
|
|
144
103
|
update('setInteractivityEnabled', settings.interactivityEnabled),
|
|
145
104
|
update('setLogLevel', settings.logLevel),
|
|
146
105
|
].filter((item) => editedSetters.has(item.setter));
|
|
@@ -167,14 +126,14 @@ const StudioSettings = () => {
|
|
|
167
126
|
return null;
|
|
168
127
|
}
|
|
169
128
|
return (jsx_runtime_1.jsxs("div", { style: container, children: [
|
|
170
|
-
jsx_runtime_1.jsx("p", { style: dividerLabel, children: "Interface" }), jsx_runtime_1.jsx(ConfigSelect, { defaultLabel: "Enabled", name: "Ask AI enabled", onChange: (value) => changeSetting('askAIEnabled', 'setAskAIEnabled', value), options: booleanOptions, value: settings.askAIEnabled }), jsx_runtime_1.jsx(
|
|
129
|
+
jsx_runtime_1.jsx("p", { style: dividerLabel, children: "Interface" }), jsx_runtime_1.jsx(ConfigSelect_1.ConfigSelect, { defaultLabel: "Enabled", name: "Ask AI enabled", onChange: (value) => changeSetting('askAIEnabled', 'setAskAIEnabled', value), options: ConfigSelect_1.booleanOptions, value: settings.askAIEnabled }), jsx_runtime_1.jsx(ConfigSelect_1.ConfigSelect, { defaultLabel: "Enabled", name: "Interactivity enabled", onChange: (value) => changeSetting('interactivityEnabled', 'setInteractivityEnabled', value), options: ConfigSelect_1.booleanOptions, value: settings.interactivityEnabled }), jsx_runtime_1.jsx(ConfigNumber, { defaultLabel: "Unlimited", defaultValue: studio_shared_1.DEFAULT_TIMELINE_TRACKS, name: "Max timeline tracks", onChange: (value) => previewNumberSetting('maxTimelineTracks', value), onChangeEnd: (value) => commitNumberSetting('maxTimelineTracks', 'setMaxTimelineTracks', value), value: settings.maxTimelineTracks }), jsx_runtime_1.jsx("p", { style: sectionTitle, children: "Audio" }), jsx_runtime_1.jsx(ConfigSelect_1.ConfigSelect, { defaultLabel: "Playback", name: "Audio latency hint", onChange: (value) => changeSetting('audioLatencyHint', 'setAudioLatencyHint', value), options: [
|
|
171
130
|
{ label: 'Interactive', value: 'interactive' },
|
|
172
131
|
{ label: 'Balanced', value: 'balanced' },
|
|
173
132
|
{ label: 'Playback', value: 'playback' },
|
|
174
|
-
], value: settings.audioLatencyHint }), jsx_runtime_1.jsx(ConfigNumber, { defaultValue: 0, name: "Number of shared audio tags", onChange: (value) => previewNumberSetting('numberOfSharedAudioTags', value), onChangeEnd: (value) => commitNumberSetting('numberOfSharedAudioTags', 'setNumberOfSharedAudioTags', value), value: settings.numberOfSharedAudioTags }), jsx_runtime_1.jsx(ConfigSelect, { defaultLabel: "Disabled", name: "Beep on finish", onChange: (value) => changeSetting('beepOnFinish', 'setBeepOnFinish', value), options: booleanOptions, value: settings.beepOnFinish }), jsx_runtime_1.jsx(
|
|
133
|
+
], value: settings.audioLatencyHint }), jsx_runtime_1.jsx(ConfigNumber, { defaultValue: 0, name: "Number of shared audio tags", onChange: (value) => previewNumberSetting('numberOfSharedAudioTags', value), onChangeEnd: (value) => commitNumberSetting('numberOfSharedAudioTags', 'setNumberOfSharedAudioTags', value), value: settings.numberOfSharedAudioTags }), jsx_runtime_1.jsx(ConfigSelect_1.ConfigSelect, { defaultLabel: "Disabled", name: "Beep on finish", onChange: (value) => changeSetting('beepOnFinish', 'setBeepOnFinish', value), options: ConfigSelect_1.booleanOptions, value: settings.beepOnFinish }), jsx_runtime_1.jsx("p", { style: sectionTitle, children: "Development" }), jsx_runtime_1.jsx(ConfigSelect_1.ConfigSelect, { defaultLabel: "Webpack", name: "Bundler", onChange: (value) => changeSetting('rspack', 'setRspack', value), options: [
|
|
175
134
|
{ label: 'Rspack', value: true },
|
|
176
135
|
{ label: 'Webpack', value: false },
|
|
177
|
-
], value: settings.rspack }), jsx_runtime_1.jsx(ConfigSelect, { defaultLabel: "Disabled", name: "Cross-site isolation", onChange: (value) => changeSetting('enableCrossSiteIsolation', 'setEnableCrossSiteIsolation', value), options: booleanOptions, value: settings.enableCrossSiteIsolation }), jsx_runtime_1.jsx(ConfigSelect, { defaultLabel: "Info", name: "Log level", onChange: (value) => changeSetting('logLevel', 'setLogLevel', value), options: client_1.BrowserSafeApis.logLevels.map((value) => ({
|
|
136
|
+
], value: settings.rspack }), jsx_runtime_1.jsx(ConfigSelect_1.ConfigSelect, { defaultLabel: "Disabled", name: "Cross-site isolation", onChange: (value) => changeSetting('enableCrossSiteIsolation', 'setEnableCrossSiteIsolation', value), options: ConfigSelect_1.booleanOptions, value: settings.enableCrossSiteIsolation }), jsx_runtime_1.jsx(ConfigSelect_1.ConfigSelect, { defaultLabel: "Info", name: "Log level", onChange: (value) => changeSetting('logLevel', 'setLogLevel', value), options: client_1.BrowserSafeApis.logLevels.map((value) => ({
|
|
178
137
|
label: value[0].toUpperCase() + value.slice(1),
|
|
179
138
|
value,
|
|
180
139
|
})), value: settings.logLevel }), (error !== null && error !== void 0 ? error : settingsError) ? (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
|
|
@@ -62,6 +62,7 @@ const should_subscribe_to_sequence_props_1 = require("./should-subscribe-to-sequ
|
|
|
62
62
|
const SubscribeToNodePaths_1 = require("./SubscribeToNodePaths");
|
|
63
63
|
const timeline_asset_drop_context_1 = require("./timeline-asset-drop-context");
|
|
64
64
|
const timeline_refs_1 = require("./timeline-refs");
|
|
65
|
+
const timeline_scroll_logic_1 = require("./timeline-scroll-logic");
|
|
65
66
|
const TimelineDragHandler_1 = require("./TimelineDragHandler");
|
|
66
67
|
const TimelineHeightContainer_1 = require("./TimelineHeightContainer");
|
|
67
68
|
const TimelineInOutDragHandler_1 = require("./TimelineInOutDragHandler");
|
|
@@ -72,6 +73,7 @@ const TimelinePinchZoom_1 = require("./TimelinePinchZoom");
|
|
|
72
73
|
const TimelinePlayCursorSyncer_1 = require("./TimelinePlayCursorSyncer");
|
|
73
74
|
const TimelineScrollable_1 = require("./TimelineScrollable");
|
|
74
75
|
const TimelineSelection_1 = require("./TimelineSelection");
|
|
76
|
+
const TimelineSequenceItem_1 = require("./TimelineSequenceItem");
|
|
75
77
|
const TimelineSlider_1 = require("./TimelineSlider");
|
|
76
78
|
const TimelineTimeIndicators_1 = require("./TimelineTimeIndicators");
|
|
77
79
|
const TimelineTracks_1 = require("./TimelineTracks");
|
|
@@ -94,6 +96,7 @@ const TimelineContextMenuArea = ({ children }) => {
|
|
|
94
96
|
const assetDropFrame = (0, use_timeline_asset_drop_1.useTimelineAssetDrop)();
|
|
95
97
|
const { compositions, canvasContent } = (0, react_1.useContext)(remotion_1.Internals.CompositionManager);
|
|
96
98
|
const videoConfig = remotion_1.Internals.useUnsafeVideoConfig();
|
|
99
|
+
const isStill = (0, is_current_selected_still_1.useIsStill)();
|
|
97
100
|
const [isAddingSolid, setIsAddingSolid] = (0, react_1.useState)(false);
|
|
98
101
|
const [isAddingAsset, setIsAddingAsset] = (0, react_1.useState)(false);
|
|
99
102
|
const { previewServerState } = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx);
|
|
@@ -101,6 +104,44 @@ const TimelineContextMenuArea = ({ children }) => {
|
|
|
101
104
|
const previewInteractive = previewConnected && (0, interactivity_enabled_1.isStudioInteractivityEnabled)();
|
|
102
105
|
const browserStudioOperations = (0, browser_studio_operations_1.getBrowserStudioOperations)();
|
|
103
106
|
const browserStudioCanInsertSolid = browserStudioOperations !== null;
|
|
107
|
+
(0, react_1.useEffect)(() => {
|
|
108
|
+
const verticalScroll = timeline_refs_1.timelineVerticalScroll.current;
|
|
109
|
+
if (!verticalScroll) {
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
const autoScroll = (0, timeline_scroll_logic_1.startTimelineEdgeAutoScroll)({
|
|
113
|
+
includeHorizontal: false,
|
|
114
|
+
includeVertical: true,
|
|
115
|
+
verticalTopOffset: isStill ? 0 : TimelineTimeIndicators_1.TIMELINE_TIME_INDICATOR_HEIGHT,
|
|
116
|
+
onTick: (directions) => {
|
|
117
|
+
if (directions.y === null) {
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
verticalScroll.scrollTop +=
|
|
121
|
+
directions.y === 'up'
|
|
122
|
+
? -timeline_scroll_logic_1.EDGE_SCROLL_VERTICAL_INCREMENT
|
|
123
|
+
: timeline_scroll_logic_1.EDGE_SCROLL_VERTICAL_INCREMENT;
|
|
124
|
+
},
|
|
125
|
+
});
|
|
126
|
+
const onDragOver = (event) => {
|
|
127
|
+
if (!event.dataTransfer ||
|
|
128
|
+
!Array.from(event.dataTransfer.types).includes(TimelineSequenceItem_1.SEQUENCE_REORDER_MIME_TYPE)) {
|
|
129
|
+
autoScroll.stop();
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
autoScroll.update(event);
|
|
133
|
+
};
|
|
134
|
+
const stopAutoScroll = () => autoScroll.stop();
|
|
135
|
+
verticalScroll.addEventListener('dragover', onDragOver, true);
|
|
136
|
+
document.addEventListener('dragend', stopAutoScroll, true);
|
|
137
|
+
document.addEventListener('drop', stopAutoScroll, true);
|
|
138
|
+
return () => {
|
|
139
|
+
autoScroll.stop();
|
|
140
|
+
verticalScroll.removeEventListener('dragover', onDragOver, true);
|
|
141
|
+
document.removeEventListener('dragend', stopAutoScroll, true);
|
|
142
|
+
document.removeEventListener('drop', stopAutoScroll, true);
|
|
143
|
+
};
|
|
144
|
+
}, [isStill]);
|
|
104
145
|
const currentCompositionId = (canvasContent === null || canvasContent === void 0 ? void 0 : canvasContent.type) === 'composition' ? canvasContent.compositionId : null;
|
|
105
146
|
const currentComposition = (0, react_1.useMemo)(() => {
|
|
106
147
|
var _a;
|
|
@@ -153,7 +194,6 @@ const TimelineContextMenuArea = ({ children }) => {
|
|
|
153
194
|
? await browserStudioOperations.insertSolid(request)
|
|
154
195
|
: await (0, call_api_1.callApi)('/api/insert-jsx-element', request);
|
|
155
196
|
if (result.success) {
|
|
156
|
-
(0, NotificationCenter_1.showNotification)('Added <Solid> to source file', 2000);
|
|
157
197
|
return;
|
|
158
198
|
}
|
|
159
199
|
(0, NotificationCenter_1.showNotification)(result.reason, 4000);
|
|
@@ -2,7 +2,7 @@ import React from 'react';
|
|
|
2
2
|
import { type CanUpdateSequencePropStatusStatic } from 'remotion';
|
|
3
3
|
import type { SchemaFieldInfo, TimelineFieldOnDragValueChange, TimelineFieldOnSave } from '../../helpers/timeline-layout';
|
|
4
4
|
import { type InspectorQuickActionProps } from '../InspectorPanel/common';
|
|
5
|
-
export type InspectorSourceAction =
|
|
5
|
+
export type InspectorSourceAction = InspectorQuickActionProps;
|
|
6
6
|
type AssetSelectionContextValue = {
|
|
7
7
|
readonly initialQuery: string;
|
|
8
8
|
readonly getSourceAction: (src: string) => InspectorSourceAction | null;
|
|
@@ -18,6 +18,19 @@ const penIcon = {
|
|
|
18
18
|
height: 14,
|
|
19
19
|
width: 14,
|
|
20
20
|
};
|
|
21
|
+
const sourceActions = {
|
|
22
|
+
alignItems: 'center',
|
|
23
|
+
display: 'flex',
|
|
24
|
+
flex: 1,
|
|
25
|
+
gap: 4,
|
|
26
|
+
minWidth: 0,
|
|
27
|
+
};
|
|
28
|
+
const standaloneSourceActionStyle = {
|
|
29
|
+
flex: 1,
|
|
30
|
+
margin: 0,
|
|
31
|
+
minWidth: 0,
|
|
32
|
+
width: 'auto',
|
|
33
|
+
};
|
|
21
34
|
exports.AssetSelectionContext = (0, react_1.createContext)({
|
|
22
35
|
getSourceAction: () => null,
|
|
23
36
|
initialQuery: '',
|
|
@@ -100,14 +113,7 @@ const TimelineAssetField = ({ field, effectiveValue, propStatus, onSave, onDragV
|
|
|
100
113
|
if (inlineSourceAction === null) {
|
|
101
114
|
return action;
|
|
102
115
|
}
|
|
103
|
-
return (jsx_runtime_1.
|
|
104
|
-
|
|
105
|
-
trailing: {
|
|
106
|
-
disabled: window.remotion_isReadOnlyStudio,
|
|
107
|
-
onClick: openAssetSelection,
|
|
108
|
-
renderIcon: (color) => jsx_runtime_1.jsx(pen_1.PenIcon, { color: color, style: penIcon }),
|
|
109
|
-
title: 'Change source',
|
|
110
|
-
},
|
|
111
|
-
} }));
|
|
116
|
+
return (jsx_runtime_1.jsxs("div", { style: sourceActions, children: [
|
|
117
|
+
jsx_runtime_1.jsx(common_1.InspectorQuickAction, { ...inlineSourceAction, size: "compact", style: standaloneSourceActionStyle }), action] }));
|
|
112
118
|
};
|
|
113
119
|
exports.TimelineAssetField = TimelineAssetField;
|
|
@@ -4,9 +4,6 @@ exports.TimelineBooleanField = void 0;
|
|
|
4
4
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
5
|
const react_1 = require("react");
|
|
6
6
|
const Checkbox_1 = require("../Checkbox");
|
|
7
|
-
const checkboxContainer = {
|
|
8
|
-
marginLeft: 8,
|
|
9
|
-
};
|
|
10
7
|
const TimelineBooleanField = ({ field, propStatus, effectiveValue, onSave }) => {
|
|
11
8
|
const checked = Boolean(effectiveValue);
|
|
12
9
|
const onChange = (0, react_1.useCallback)(() => {
|
|
@@ -15,6 +12,6 @@ const TimelineBooleanField = ({ field, propStatus, effectiveValue, onSave }) =>
|
|
|
15
12
|
onSave(newValue);
|
|
16
13
|
}
|
|
17
14
|
}, [propStatus, onSave, checked]);
|
|
18
|
-
return (jsx_runtime_1.jsx(
|
|
15
|
+
return (jsx_runtime_1.jsx(Checkbox_1.Checkbox, { checked: checked, onChange: onChange, name: field.key, disabled: false, variant: "small" }));
|
|
19
16
|
};
|
|
20
17
|
exports.TimelineBooleanField = TimelineBooleanField;
|
|
@@ -3,7 +3,6 @@ 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
5
|
import { type EffectsClipboardEnvelope } from './effects-clipboard';
|
|
6
|
-
import { type TimelineSelection } from './TimelineSelection';
|
|
7
6
|
export type PasteEffectsTarget = {
|
|
8
7
|
readonly type: 'valid';
|
|
9
8
|
readonly nodePathInfo: SequenceNodePathInfo;
|
|
@@ -28,9 +27,9 @@ export type PasteEffectPropTarget = {
|
|
|
28
27
|
} | {
|
|
29
28
|
readonly type: 'none' | 'unsupported' | 'effect-type-mismatch' | 'prop-mismatch' | 'uncopyable';
|
|
30
29
|
};
|
|
31
|
-
export declare const getPasteEffectsTarget: (selectedItems: readonly
|
|
30
|
+
export declare const getPasteEffectsTarget: (selectedItems: readonly import("@remotion/canvas").CanvasSelectionItem[]) => PasteEffectsTarget;
|
|
32
31
|
export declare const getSnapshotsFromSelection: ({ selection, propStatuses, }: {
|
|
33
|
-
selection:
|
|
32
|
+
selection: import("@remotion/canvas").CanvasSelectionItem;
|
|
34
33
|
propStatuses: PropStatuses;
|
|
35
34
|
}) => EffectClipboardSnapshot[] | null;
|
|
36
35
|
export type EffectClipboardDataFromSelections = {
|
|
@@ -44,15 +43,15 @@ export type EffectClipboardDataFromSelections = {
|
|
|
44
43
|
readonly type: 'uncopyable';
|
|
45
44
|
};
|
|
46
45
|
export declare const getEffectClipboardDataFromSelections: ({ selectedItems, propStatuses, }: {
|
|
47
|
-
selectedItems: readonly
|
|
46
|
+
selectedItems: readonly import("@remotion/canvas").CanvasSelectionItem[];
|
|
48
47
|
propStatuses: PropStatuses;
|
|
49
48
|
}) => EffectClipboardDataFromSelections;
|
|
50
49
|
export declare const getEffectsClipboardEnvelopeFromSelections: ({ selectedItems, payload, }: {
|
|
51
|
-
selectedItems: readonly
|
|
50
|
+
selectedItems: readonly import("@remotion/canvas").CanvasSelectionItem[];
|
|
52
51
|
payload: EffectClipboardData;
|
|
53
52
|
}) => EffectsClipboardEnvelope;
|
|
54
53
|
export declare const getEffectPropClipboardDataFromSelection: ({ selection, propStatuses, }: {
|
|
55
|
-
selection:
|
|
54
|
+
selection: import("@remotion/canvas").CanvasSelectionItem;
|
|
56
55
|
propStatuses: PropStatuses;
|
|
57
56
|
}) => EffectPropClipboardData | null;
|
|
58
57
|
export declare const getEasingClipboardDataFromSelection: ({ selection, sequences, overrideIdsToNodePaths, propStatuses, }: {
|
|
@@ -68,7 +67,7 @@ export declare const getEasingClipboardDataFromSelection: ({ selection, sequence
|
|
|
68
67
|
propStatuses: PropStatuses;
|
|
69
68
|
}) => EasingClipboardData | null;
|
|
70
69
|
export declare const getPasteEffectPropTarget: ({ selectedItems, payload, propStatuses, sequences, overrideIdsToNodePaths, }: {
|
|
71
|
-
readonly selectedItems: readonly
|
|
70
|
+
readonly selectedItems: readonly import("@remotion/canvas").CanvasSelectionItem[];
|
|
72
71
|
readonly payload: EffectPropClipboardData;
|
|
73
72
|
readonly propStatuses: PropStatuses;
|
|
74
73
|
readonly sequences: TSequence[];
|
|
@@ -792,9 +792,9 @@ const TimelineClipboardKeybindings = () => {
|
|
|
792
792
|
? 'Reapply property paste onto selected sequences'
|
|
793
793
|
: 'Reapply property paste',
|
|
794
794
|
}).then(() => {
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
795
|
+
if (sequencePropTarget.targets.length > 1) {
|
|
796
|
+
(0, NotificationCenter_1.showNotification)('Pasted property onto selected sequences', 2000);
|
|
797
|
+
}
|
|
798
798
|
});
|
|
799
799
|
}
|
|
800
800
|
const effectPropResult = (0, studio_shared_1.parseEffectPropClipboardDataResult)(text);
|
|
@@ -859,9 +859,9 @@ const TimelineClipboardKeybindings = () => {
|
|
|
859
859
|
? 'Reapply effect prop paste onto selected effects'
|
|
860
860
|
: 'Reapply effect prop paste',
|
|
861
861
|
}).then(() => {
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
862
|
+
if (effectPropTarget.targets.length > 1) {
|
|
863
|
+
(0, NotificationCenter_1.showNotification)('Pasted effect prop onto selected effects', 2000);
|
|
864
|
+
}
|
|
865
865
|
});
|
|
866
866
|
}
|
|
867
867
|
const result = envelope === null
|
|
@@ -904,10 +904,7 @@ const TimelineClipboardKeybindings = () => {
|
|
|
904
904
|
clientId,
|
|
905
905
|
insertAtIndices,
|
|
906
906
|
}).then((pasteResult) => {
|
|
907
|
-
if (pasteResult.success) {
|
|
908
|
-
(0, NotificationCenter_1.showNotification)('Pasted effects', 2000);
|
|
909
|
-
}
|
|
910
|
-
else {
|
|
907
|
+
if (!pasteResult.success) {
|
|
911
908
|
(0, NotificationCenter_1.showNotification)(pasteResult.reason, 4000);
|
|
912
909
|
}
|
|
913
910
|
});
|
|
@@ -74,20 +74,25 @@ const getClientXWithScroll = (x) => {
|
|
|
74
74
|
const TimelineDragHandler = () => {
|
|
75
75
|
const video = remotion_1.Internals.useUnsafeVideoConfig();
|
|
76
76
|
const { zoom: zoomMap } = (0, react_1.useContext)(timeline_zoom_1.TimelineZoomCtx);
|
|
77
|
-
const { canvasContent } = (0, react_1.useContext)(remotion_1.Internals.CompositionManager);
|
|
77
|
+
const { canvasContent, currentAssetMetadata } = (0, react_1.useContext)(remotion_1.Internals.CompositionManager);
|
|
78
78
|
const containerStyle = (0, react_1.useMemo)(() => {
|
|
79
79
|
var _a;
|
|
80
|
-
if (!canvasContent
|
|
80
|
+
if (!canvasContent) {
|
|
81
81
|
return {};
|
|
82
82
|
}
|
|
83
|
-
const zoom =
|
|
83
|
+
const zoom = canvasContent.type === 'composition'
|
|
84
|
+
? ((_a = zoomMap[canvasContent.compositionId]) !== null && _a !== void 0 ? _a : timeline_zoom_1.TIMELINE_MIN_ZOOM)
|
|
85
|
+
: timeline_zoom_1.TIMELINE_MIN_ZOOM;
|
|
84
86
|
return {
|
|
85
87
|
...container,
|
|
86
88
|
width: 100 * zoom + '%',
|
|
87
89
|
height: TimelineTimeIndicators_1.TIMELINE_TIME_INDICATOR_HEIGHT,
|
|
88
90
|
};
|
|
89
91
|
}, [canvasContent, zoomMap]);
|
|
90
|
-
|
|
92
|
+
const hasPlayableContent = (canvasContent === null || canvasContent === void 0 ? void 0 : canvasContent.type) === 'composition' ||
|
|
93
|
+
((canvasContent === null || canvasContent === void 0 ? void 0 : canvasContent.type) === 'asset' &&
|
|
94
|
+
(currentAssetMetadata === null || currentAssetMetadata === void 0 ? void 0 : currentAssetMetadata.asset) === canvasContent.asset);
|
|
95
|
+
if (!hasPlayableContent) {
|
|
91
96
|
return null;
|
|
92
97
|
}
|
|
93
98
|
return (jsx_runtime_1.jsx("div", { ref: timeline_refs_1.sliderAreaRef, style: containerStyle, [TimelineSelection_1.TIMELINE_SCRUBBER_ATTR]: true, children: video && (0, interactivity_enabled_1.isStudioSelectionEnabled)() ? (jsx_runtime_1.jsx(TimelineDragHandlerInnerMemo, {})) : null }));
|
|
@@ -248,7 +253,9 @@ const TimelineDragHandlerInner = () => {
|
|
|
248
253
|
return;
|
|
249
254
|
}
|
|
250
255
|
const scroller = (0, timeline_scroll_logic_1.startTimelineEdgeAutoScroll)({
|
|
256
|
+
includeHorizontal: true,
|
|
251
257
|
includeVertical: false,
|
|
258
|
+
verticalTopOffset: 0,
|
|
252
259
|
onTick: onEdgeScrollTick,
|
|
253
260
|
});
|
|
254
261
|
autoScroller.current = scroller;
|
|
@@ -12,6 +12,7 @@ export declare const TimelineEffectItem: React.FC<{
|
|
|
12
12
|
readonly nodePath: SequencePropsSubscriptionKey;
|
|
13
13
|
readonly validatedLocation: CodePosition;
|
|
14
14
|
readonly rowDepth: number;
|
|
15
|
+
readonly labelNextToToggle: boolean;
|
|
15
16
|
readonly getIsExpanded: GetIsExpanded;
|
|
16
17
|
readonly toggleTrack: (nodePathInfo: SequenceNodePathInfo) => void;
|
|
17
18
|
}>;
|
|
@@ -7,10 +7,12 @@ const remotion_1 = require("remotion");
|
|
|
7
7
|
const browser_studio_operations_1 = require("../../helpers/browser-studio-operations");
|
|
8
8
|
const client_id_1 = require("../../helpers/client-id");
|
|
9
9
|
const colors_1 = require("../../helpers/colors");
|
|
10
|
+
const format_file_location_1 = require("../../helpers/format-file-location");
|
|
10
11
|
const timeline_layout_1 = require("../../helpers/timeline-layout");
|
|
11
12
|
const ContextMenu_1 = require("../ContextMenu");
|
|
12
13
|
const effect_operations_api_1 = require("../effect-operations-api");
|
|
13
14
|
const NotificationCenter_1 = require("../Notifications/NotificationCenter");
|
|
15
|
+
const get_copy_context_for_agents_menu_item_1 = require("./get-copy-context-for-agents-menu-item");
|
|
14
16
|
const save_effect_prop_1 = require("./save-effect-prop");
|
|
15
17
|
const TimelineExpandArrowButton_1 = require("./TimelineExpandArrowButton");
|
|
16
18
|
const TimelineLayerEye_1 = require("./TimelineLayerEye");
|
|
@@ -73,7 +75,7 @@ const getEffectReorderDragData = (dataTransfer) => {
|
|
|
73
75
|
const getDestinationIndex = ({ fromIndex, insertionIndex, }) => {
|
|
74
76
|
return insertionIndex > fromIndex ? insertionIndex - 1 : insertionIndex;
|
|
75
77
|
};
|
|
76
|
-
const TimelineEffectItem = ({ label, nodePathInfo, effectIndex, effectSchema, documentationLink, nodePath, validatedLocation, rowDepth, getIsExpanded, toggleTrack, }) => {
|
|
78
|
+
const TimelineEffectItem = ({ label, nodePathInfo, effectIndex, effectSchema, documentationLink, nodePath, validatedLocation, rowDepth, labelNextToToggle, getIsExpanded, toggleTrack, }) => {
|
|
77
79
|
var _a;
|
|
78
80
|
var _b;
|
|
79
81
|
const { previewServerState } = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx);
|
|
@@ -130,13 +132,25 @@ const TimelineEffectItem = ({ label, nodePathInfo, effectIndex, effectSchema, do
|
|
|
130
132
|
}
|
|
131
133
|
}, [deleteDisabled, effectIndex, nodePath, validatedLocation.source]);
|
|
132
134
|
const getContextMenuItems = (0, react_1.useCallback)(() => {
|
|
133
|
-
if (!previewConnected) {
|
|
134
|
-
return [];
|
|
135
|
-
}
|
|
136
135
|
if (selection.selectable) {
|
|
137
136
|
selection.onSelect({ shiftKey: false, toggleKey: false });
|
|
138
137
|
}
|
|
139
|
-
const items = [
|
|
138
|
+
const items = [
|
|
139
|
+
(0, get_copy_context_for_agents_menu_item_1.getCopyContextForAgentsMenuItem)({
|
|
140
|
+
contextForAgents: (0, format_file_location_1.formatContextForAgents)({
|
|
141
|
+
location: validatedLocation,
|
|
142
|
+
name: `Effect "${label}"`,
|
|
143
|
+
root: window.remotion_cwd,
|
|
144
|
+
}),
|
|
145
|
+
}),
|
|
146
|
+
];
|
|
147
|
+
if (!previewConnected) {
|
|
148
|
+
return items;
|
|
149
|
+
}
|
|
150
|
+
items.push({
|
|
151
|
+
type: 'divider',
|
|
152
|
+
id: 'copy-context-for-agents-divider',
|
|
153
|
+
});
|
|
140
154
|
if (documentationLink) {
|
|
141
155
|
items.push({
|
|
142
156
|
type: 'item',
|
|
@@ -178,9 +192,11 @@ const TimelineEffectItem = ({ label, nodePathInfo, effectIndex, effectSchema, do
|
|
|
178
192
|
}, [
|
|
179
193
|
deleteDisabled,
|
|
180
194
|
documentationLink,
|
|
195
|
+
label,
|
|
181
196
|
onDeleteEffectFromSource,
|
|
182
197
|
previewConnected,
|
|
183
198
|
selection,
|
|
199
|
+
validatedLocation,
|
|
184
200
|
]);
|
|
185
201
|
const onToggle = (0, react_1.useCallback)((type) => {
|
|
186
202
|
if (!canToggle || previewServerState.type !== 'connected') {
|
|
@@ -310,10 +326,7 @@ const TimelineEffectItem = ({ label, nodePathInfo, effectIndex, effectSchema, do
|
|
|
310
326
|
toIndex: dropTarget.toIndex,
|
|
311
327
|
clientId: previewServerState.clientId,
|
|
312
328
|
});
|
|
313
|
-
if (result.success) {
|
|
314
|
-
(0, NotificationCenter_1.showNotification)('Reordered effect', 2000);
|
|
315
|
-
}
|
|
316
|
-
else {
|
|
329
|
+
if (!result.success) {
|
|
317
330
|
(0, NotificationCenter_1.showNotification)(result.reason, 4000);
|
|
318
331
|
}
|
|
319
332
|
}
|
|
@@ -336,7 +349,7 @@ const TimelineEffectItem = ({ label, nodePathInfo, effectIndex, effectSchema, do
|
|
|
336
349
|
...(dropIndicator === 'before' ? { top: -1 } : { bottom: -1 }),
|
|
337
350
|
};
|
|
338
351
|
}, [dropIndicator]);
|
|
339
|
-
const row = (jsx_runtime_1.jsx(TimelineRowChrome_1.TimelineRowChrome, { depth: rowDepth, eye: canToggle ? (jsx_runtime_1.jsx(TimelineLayerEye_1.TimelineLayerEye, { type: "effect", hidden: isDisabled, onInvoked: onToggle })) : (jsx_runtime_1.jsx(TimelineLayerEye_1.TimelineLayerEyeSpacer, {})), arrow: jsx_runtime_1.jsx(TimelineExpandArrowButton_1.TimelineExpandArrowSpacer, {}), style: rowStyle, selected: selection.selected, selectable: selection.selectable, onSelect: selection.onSelect, showSelectedBackground: true, containsSelection: containsSelection,
|
|
352
|
+
const row = (jsx_runtime_1.jsx(TimelineRowChrome_1.TimelineRowChrome, { depth: rowDepth, eye: canToggle ? (jsx_runtime_1.jsx(TimelineLayerEye_1.TimelineLayerEye, { type: "effect", hidden: isDisabled, onInvoked: onToggle })) : (jsx_runtime_1.jsx(TimelineLayerEye_1.TimelineLayerEyeSpacer, {})), arrow: labelNextToToggle ? null : jsx_runtime_1.jsx(TimelineExpandArrowButton_1.TimelineExpandArrowSpacer, {}), style: rowStyle, selected: selection.selected, selectable: selection.selectable, onSelect: selection.onSelect, showSelectedBackground: true, containsSelection: containsSelection, outerHeight: null, children: jsx_runtime_1.jsxs("div", { style: labelContainerStyle, children: [
|
|
340
353
|
jsx_runtime_1.jsx("span", { title: label, style: labelStyle, children: label }), jsx_runtime_1.jsx(TimelineExpandArrowButton_1.TimelineExpandArrowButton, { isExpanded: isExpanded, onClick: () => toggleTrack(nodePathInfo), label: `${label} section`, disabled: false })
|
|
341
354
|
] }) }));
|
|
342
355
|
const draggableRow = canReorder ? (jsx_runtime_1.jsxs("div", { draggable: true, onDragStart: onDragStart, onDragEnd: onDragEnd, onDragOver: onDragOver, onDragLeave: onDragLeave, onDrop: onDrop, style: reorderWrapper, children: [reorderLineStyle ? jsx_runtime_1.jsx("div", { style: reorderLineStyle }) : null, row] })) : (row);
|
|
@@ -7,12 +7,14 @@ const react_1 = require("react");
|
|
|
7
7
|
const remotion_1 = require("remotion");
|
|
8
8
|
const browser_studio_operations_1 = require("../../helpers/browser-studio-operations");
|
|
9
9
|
const client_id_1 = require("../../helpers/client-id");
|
|
10
|
+
const format_file_location_1 = require("../../helpers/format-file-location");
|
|
10
11
|
const open_in_editor_1 = require("../../helpers/open-in-editor");
|
|
11
12
|
const use_runtime_values_1 = require("../../helpers/use-runtime-values");
|
|
12
13
|
const ContextMenu_1 = require("../ContextMenu");
|
|
13
14
|
const effect_operations_api_1 = require("../effect-operations-api");
|
|
14
15
|
const use_default_editor_info_1 = require("../use-default-editor-info");
|
|
15
16
|
const call_add_keyframe_1 = require("./call-add-keyframe");
|
|
17
|
+
const get_copy_context_for_agents_menu_item_1 = require("./get-copy-context-for-agents-menu-item");
|
|
16
18
|
const get_timeline_keyframes_1 = require("./get-timeline-keyframes");
|
|
17
19
|
const save_effect_prop_1 = require("./save-effect-prop");
|
|
18
20
|
const save_prop_queue_1 = require("./save-prop-queue");
|
|
@@ -323,6 +325,17 @@ const TimelineEffectPropItem = ({ field, validatedLocation, rowDepth, nodePath,
|
|
|
323
325
|
selection.onSelect({ shiftKey: false, toggleKey: false });
|
|
324
326
|
}
|
|
325
327
|
return [
|
|
328
|
+
(0, get_copy_context_for_agents_menu_item_1.getCopyContextForAgentsMenuItem)({
|
|
329
|
+
contextForAgents: (0, format_file_location_1.formatContextForAgents)({
|
|
330
|
+
location: validatedLocation,
|
|
331
|
+
name: `Effect property "${field.key}"`,
|
|
332
|
+
root: window.remotion_cwd,
|
|
333
|
+
}),
|
|
334
|
+
}),
|
|
335
|
+
{
|
|
336
|
+
type: 'divider',
|
|
337
|
+
id: 'copy-context-for-agents-divider',
|
|
338
|
+
},
|
|
326
339
|
{
|
|
327
340
|
type: 'item',
|
|
328
341
|
id: 'reset-effect-field',
|
|
@@ -336,7 +349,7 @@ const TimelineEffectPropItem = ({ field, validatedLocation, rowDepth, nodePath,
|
|
|
336
349
|
value: 'reset-effect-field',
|
|
337
350
|
},
|
|
338
351
|
];
|
|
339
|
-
}, [canShowReset, onReset, selection]);
|
|
352
|
+
}, [canShowReset, field.key, onReset, selection, validatedLocation]);
|
|
340
353
|
const onPropertyDoubleClick = (0, react_1.useCallback)((event) => {
|
|
341
354
|
if (!canOpenInEditor || !defaultEditorId) {
|
|
342
355
|
return;
|
|
@@ -348,7 +361,7 @@ const TimelineEffectPropItem = ({ field, validatedLocation, rowDepth, nodePath,
|
|
|
348
361
|
property: field.key,
|
|
349
362
|
}).catch(() => undefined);
|
|
350
363
|
}, [canOpenInEditor, defaultEditorId, field.key, validatedLocation]);
|
|
351
|
-
const row = (jsx_runtime_1.jsx(TimelineRowChrome_1.TimelineRowChrome, { depth: rowDepth, eye: jsx_runtime_1.jsx(TimelineLayerEye_1.TimelineLayerEyeSpacer, {}), keyframeControls: keyframeControls, arrow: jsx_runtime_1.jsx(TimelineExpandArrowButton_1.TimelineExpandArrowSpacer, {}), style: style, selected: selection.selected, selectable: selection.selectable, onSelect: selection.onSelect, onDoubleClick: onPropertyDoubleClick, showSelectedBackground: true, containsSelection: false,
|
|
364
|
+
const row = (jsx_runtime_1.jsx(TimelineRowChrome_1.TimelineRowChrome, { depth: rowDepth, eye: jsx_runtime_1.jsx(TimelineLayerEye_1.TimelineLayerEyeSpacer, {}), keyframeControls: keyframeControls, arrow: jsx_runtime_1.jsx(TimelineExpandArrowButton_1.TimelineExpandArrowSpacer, {}), style: style, selected: selection.selected, selectable: selection.selectable, onSelect: selection.onSelect, onDoubleClick: onPropertyDoubleClick, showSelectedBackground: true, containsSelection: false, outerHeight: null, children: jsx_runtime_1.jsx(TimelineFieldRowContent_1.TimelineFieldRowContent, { field: field, rowDepth: rowDepth, selected: selection.selected, children: jsx_runtime_1.jsx(TimelineEffectPropValueAtCurrentFrame, { field: field, nodePath: nodePath, validatedLocation: validatedLocation, keyframeDisplayOffset: resolvedKeyframeDisplayOffset, runtimeValueStore: runtimeValueStore }) }) }));
|
|
352
365
|
return jsx_runtime_1.jsx(ContextMenu_1.ContextMenu, { getItems: getContextMenuItems, children: row });
|
|
353
366
|
};
|
|
354
367
|
exports.TimelineEffectPropItem = TimelineEffectPropItem;
|
|
@@ -23,6 +23,7 @@ const rowLabel = {
|
|
|
23
23
|
};
|
|
24
24
|
const TimelineExpandedRowInner = ({ node, depth, nestedDepth, rowDepthBase, getIsExpanded, toggleTrack, validatedLocation, nodePath, schema, keyframeDisplayOffset, keyframeControlsMode, }) => {
|
|
25
25
|
const rowDepth = (rowDepthBase !== null && rowDepthBase !== void 0 ? rowDepthBase : (0, timeline_row_layout_1.getExpandedRowDepth)({ nestedDepth, treeDepth: 0 })) + depth;
|
|
26
|
+
const isInspector = keyframeControlsMode === 'inspector';
|
|
26
27
|
const selection = (0, TimelineSelection_1.useTimelineRowSelection)(node.nodePathInfo);
|
|
27
28
|
const labelStyle = react_1.default.useMemo(() => ({
|
|
28
29
|
...rowLabel,
|
|
@@ -39,17 +40,17 @@ const TimelineExpandedRowInner = ({ node, depth, nestedDepth, rowDepthBase, getI
|
|
|
39
40
|
if (node.effectInfo) {
|
|
40
41
|
return (
|
|
41
42
|
// A single effect
|
|
42
|
-
jsx_runtime_1.jsx(TimelineEffectItem_1.TimelineEffectItem, { label: node.label, nodePathInfo: node.nodePathInfo, effectIndex: node.effectInfo.effectIndex, effectSchema: node.effectInfo.effectSchema, documentationLink: node.effectInfo.documentationLink, nodePath: nodePath, validatedLocation: validatedLocation, rowDepth: rowDepth, getIsExpanded: getIsExpanded, toggleTrack: toggleTrack }));
|
|
43
|
+
jsx_runtime_1.jsx(TimelineEffectItem_1.TimelineEffectItem, { label: node.label, nodePathInfo: node.nodePathInfo, effectIndex: node.effectInfo.effectIndex, effectSchema: node.effectInfo.effectSchema, documentationLink: node.effectInfo.documentationLink, nodePath: nodePath, validatedLocation: validatedLocation, rowDepth: rowDepth, labelNextToToggle: isInspector, getIsExpanded: getIsExpanded, toggleTrack: toggleTrack }));
|
|
43
44
|
}
|
|
44
45
|
// Group like "Effects"
|
|
45
46
|
const isExpanded = getIsExpanded(node.nodePathInfo);
|
|
46
47
|
return (jsx_runtime_1.jsx(TimelineRowChrome_1.TimelineRowChrome, { depth: rowDepth, eye: jsx_runtime_1.jsx(TimelineLayerEye_1.TimelineLayerEyeSpacer, {}), arrow: jsx_runtime_1.jsx(TimelineExpandArrowButton_1.TimelineExpandArrowButton, { isExpanded: isExpanded, onClick: () => toggleTrack(node.nodePathInfo), label: `${node.label} section`, disabled: false }), style: {
|
|
47
48
|
height: timeline_layout_1.TREE_GROUP_ROW_HEIGHT,
|
|
48
|
-
}, selected: selection.selected, selectable: selection.selectable, onSelect: selection.onSelect, showSelectedBackground: true, containsSelection: false,
|
|
49
|
+
}, selected: selection.selected, selectable: selection.selectable, onSelect: selection.onSelect, showSelectedBackground: true, containsSelection: false, outerHeight: null, children: jsx_runtime_1.jsx("span", { style: labelStyle, children: node.label }) }));
|
|
49
50
|
}
|
|
50
51
|
if (node.field) {
|
|
51
52
|
if (node.field.kind === 'effect-field') {
|
|
52
|
-
return (jsx_runtime_1.jsx(TimelineEffectPropItem_1.TimelineEffectPropItem, { field: node.field, validatedLocation: validatedLocation, rowDepth: rowDepth, nodePath: nodePath, nodePathInfo: node.nodePathInfo, keyframeDisplayOffset: keyframeDisplayOffset, keyframeControlsMode: keyframeControlsMode, runtimeValueStore: node.runtimeValueStore }));
|
|
53
|
+
return (jsx_runtime_1.jsx(TimelineEffectPropItem_1.TimelineEffectPropItem, { field: node.field, validatedLocation: validatedLocation, rowDepth: isInspector ? rowDepth - 1 : rowDepth, nodePath: nodePath, nodePathInfo: node.nodePathInfo, keyframeDisplayOffset: keyframeDisplayOffset, keyframeControlsMode: keyframeControlsMode, runtimeValueStore: node.runtimeValueStore }));
|
|
53
54
|
}
|
|
54
55
|
if (node.field.kind === 'sequence-field') {
|
|
55
56
|
return (jsx_runtime_1.jsx(TimelineSequencePropItem_1.TimelineSequencePropItem, { field: node.field, validatedLocation: validatedLocation, rowDepth: rowDepth, nodePath: nodePath, nodePathInfo: node.nodePathInfo, schema: schema, keyframeDisplayOffset: keyframeDisplayOffset, keyframeControlsMode: keyframeControlsMode, runtimeValue: node.runtimeValue }));
|
|
@@ -58,6 +59,6 @@ const TimelineExpandedRowInner = ({ node, depth, nestedDepth, rowDepthBase, getI
|
|
|
58
59
|
}
|
|
59
60
|
return (jsx_runtime_1.jsx(TimelineRowChrome_1.TimelineRowChrome, { depth: rowDepth, eye: jsx_runtime_1.jsx(TimelineLayerEye_1.TimelineLayerEyeSpacer, {}), arrow: jsx_runtime_1.jsx(TimelineExpandArrowButton_1.TimelineExpandArrowSpacer, {}), style: {
|
|
60
61
|
height: (0, timeline_layout_1.getTreeRowHeight)(node),
|
|
61
|
-
}, selected: selection.selected, selectable: selection.selectable, onSelect: selection.onSelect, showSelectedBackground: true, containsSelection: false,
|
|
62
|
+
}, selected: selection.selected, selectable: selection.selectable, onSelect: selection.onSelect, showSelectedBackground: true, containsSelection: false, outerHeight: null, children: jsx_runtime_1.jsx("span", { style: labelStyle, children: node.label }) }));
|
|
62
63
|
};
|
|
63
64
|
exports.TimelineExpandedRow = react_1.default.memo(TimelineExpandedRowInner);
|
|
@@ -4,12 +4,12 @@ exports.TimelineFieldLabel = void 0;
|
|
|
4
4
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
5
|
const react_1 = require("react");
|
|
6
6
|
const colors_1 = require("../../helpers/colors");
|
|
7
|
-
const timeline_layout_1 = require("../../helpers/timeline-layout");
|
|
8
7
|
const timeline_field_row_layout_1 = require("./timeline-field-row-layout");
|
|
9
8
|
const TimelineRowLayoutContext_1 = require("./TimelineRowLayoutContext");
|
|
10
9
|
const TimelineSelection_1 = require("./TimelineSelection");
|
|
11
10
|
const fieldNameBase = {
|
|
12
11
|
fontSize: 12,
|
|
12
|
+
lineHeight: `${timeline_field_row_layout_1.TIMELINE_STACKED_FIELD_HEADER_HEIGHT}px`,
|
|
13
13
|
color: colors_1.WHITE_ALPHA_80,
|
|
14
14
|
userSelect: 'none',
|
|
15
15
|
whiteSpace: 'nowrap',
|
|
@@ -23,7 +23,9 @@ const TimelineFieldLabel = ({ rowDepth, selected, label, stacked = false }) => {
|
|
|
23
23
|
const labelRowStyle = (0, react_1.useMemo)(() => ({
|
|
24
24
|
...(0, timeline_field_row_layout_1.getTimelineFieldLabelRowStyle)(rowDepth, basePadding),
|
|
25
25
|
...(0, TimelineSelection_1.getTimelineSelectedLabelStyle)(selected && highlightSelectedLabel, true),
|
|
26
|
-
...(stacked
|
|
26
|
+
...(stacked
|
|
27
|
+
? { flex: `0 0 ${timeline_field_row_layout_1.TIMELINE_STACKED_FIELD_HEADER_HEIGHT}px` }
|
|
28
|
+
: null),
|
|
27
29
|
alignSelf: 'stretch',
|
|
28
30
|
}), [basePadding, highlightSelectedLabel, rowDepth, selected, stacked]);
|
|
29
31
|
const fieldNameStyle = (0, react_1.useMemo)(() => ({
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import {
|
|
2
|
+
import type { SchemaFieldInfo } from '../../helpers/timeline-layout';
|
|
3
3
|
export declare const TimelineFieldRowContent: React.FC<{
|
|
4
4
|
readonly field: SchemaFieldInfo;
|
|
5
5
|
readonly rowDepth: number;
|
|
6
6
|
readonly selected: boolean;
|
|
7
|
-
readonly keyframeControls: React.ReactNode;
|
|
8
7
|
readonly children: React.ReactNode;
|
|
9
8
|
}>;
|