@remotion/studio 4.0.522 → 4.0.524
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/install-package.js +4 -2
- package/dist/components/ActionTooltip.d.ts +9 -0
- package/dist/components/ActionTooltip.js +143 -0
- package/dist/components/AssetAudioVolume.d.ts +5 -0
- package/dist/components/AssetAudioVolume.js +33 -0
- package/dist/components/Canvas.js +8 -8
- package/dist/components/CaptionInspector.js +74 -20
- package/dist/components/CheckboardToggle.js +9 -10
- package/dist/components/Checkbox.d.ts +1 -0
- package/dist/components/Checkbox.js +2 -2
- package/dist/components/CompositionContextButton.js +4 -1
- package/dist/components/CompositionSelectorItem.js +2 -2
- package/dist/components/ConfigureLicenseModal.js +1 -1
- package/dist/components/CurrentAsset.js +40 -6
- package/dist/components/EditorContexts.js +3 -1
- package/dist/components/ElementInstallConfirmation.js +254 -137
- package/dist/components/FixComputedValueModal.js +38 -8
- package/dist/components/FullscreenToggle.js +8 -10
- package/dist/components/GlobalKeybindings.js +107 -49
- package/dist/components/InspectorPanel/MultiSequenceField.d.ts +12 -0
- package/dist/components/InspectorPanel/MultiSequenceField.js +131 -0
- package/dist/components/InspectorPanel/MultiSequenceInspector.d.ts +8 -0
- package/dist/components/InspectorPanel/MultiSequenceInspector.js +102 -0
- package/dist/components/InspectorPanel/MultiSequenceNumberField.d.ts +9 -0
- package/dist/components/InspectorPanel/MultiSequenceNumberField.js +88 -0
- package/dist/components/InspectorPanel.js +4 -0
- package/dist/components/InspectorSequenceSection.js +69 -6
- package/dist/components/InstallPackage.js +4 -5
- package/dist/components/KeyboardShortcutsSettings.js +212 -33
- package/dist/components/LazySyntaxHighlightedSource.d.ts +4 -0
- package/dist/components/LazySyntaxHighlightedSource.js +43 -0
- package/dist/components/LoopToggle.js +8 -2
- package/dist/components/MenuToolbar.js +11 -7
- package/dist/components/ModalContainer.d.ts +1 -0
- package/dist/components/ModalContainer.js +2 -2
- package/dist/components/Modals.js +3 -1
- package/dist/components/ModelManager.d.ts +16 -0
- package/dist/components/ModelManager.js +200 -0
- package/dist/components/ModelsSettings.d.ts +2 -0
- package/dist/components/ModelsSettings.js +133 -0
- package/dist/components/MuteToggle.d.ts +1 -0
- package/dist/components/MuteToggle.js +16 -6
- package/dist/components/NewComposition/DismissableModal.d.ts +1 -0
- package/dist/components/NewComposition/DismissableModal.js +2 -2
- package/dist/components/NewComposition/InputDragger.d.ts +2 -2
- package/dist/components/NewComposition/InputDragger.js +6 -6
- package/dist/components/NewComposition/NewComposition.d.ts +1 -0
- package/dist/components/NewComposition/NewComposition.js +5 -4
- package/dist/components/NewComposition/NewFolder.js +9 -8
- package/dist/components/NewComposition/RenameComposition.js +3 -2
- package/dist/components/NewComposition/RenameFolder.js +15 -10
- package/dist/components/NewComposition/SlugPreview.d.ts +7 -0
- package/dist/components/NewComposition/SlugPreview.js +18 -0
- package/dist/components/OptionalPackageModal.d.ts +11 -0
- package/dist/components/OptionalPackageModal.js +155 -0
- package/dist/components/OutlineToggle.js +16 -10
- package/dist/components/PlayPause.js +11 -9
- package/dist/components/PlaybackKeyboardShortcutsManager.d.ts +2 -0
- package/dist/components/PlaybackKeyboardShortcutsManager.js +39 -7
- package/dist/components/PlaybackRateSelector.js +2 -2
- package/dist/components/PreviewToolbar.js +1 -1
- package/dist/components/PreviewToolbarOverflowButton.js +19 -4
- package/dist/components/QuickSwitcher/ExplorerQuickSwitcherTrigger.js +5 -2
- package/dist/components/RadioButton.d.ts +1 -0
- package/dist/components/RadioButton.js +2 -2
- package/dist/components/RenderButton.js +5 -1
- package/dist/components/RenderModal/NumberSetting.d.ts +6 -1
- package/dist/components/RenderModal/NumberSetting.js +2 -2
- package/dist/components/RenderModal/RenderModalBasic.js +1 -1
- package/dist/components/RenderModal/RenderModalOutputName.d.ts +3 -1
- package/dist/components/RenderModal/RenderModalOutputName.js +4 -4
- package/dist/components/RenderModal/SeparateAudioOption.js +1 -1
- package/dist/components/RenderModal/WebRenderModalBasic.js +1 -1
- package/dist/components/RenderQueue/CaptionQueueItem.d.ts +6 -0
- package/dist/components/RenderQueue/CaptionQueueItem.js +130 -0
- package/dist/components/RenderQueue/CaptionQueueProcessor.d.ts +1 -0
- package/dist/components/RenderQueue/CaptionQueueProcessor.js +110 -0
- package/dist/components/RenderQueue/CaptionQueueProcessorLoader.d.ts +2 -0
- package/dist/components/RenderQueue/CaptionQueueProcessorLoader.js +54 -0
- package/dist/components/RenderQueue/RenderQueueCopyToClipboard.js +2 -1
- package/dist/components/RenderQueue/RenderQueueDownloadItem.js +2 -1
- package/dist/components/RenderQueue/RenderQueueItem.js +3 -3
- package/dist/components/RenderQueue/RenderQueueItemCancelButton.js +2 -1
- package/dist/components/RenderQueue/RenderQueueOpenInFolder.js +2 -1
- package/dist/components/RenderQueue/RenderQueueRemoveItem.js +2 -1
- package/dist/components/RenderQueue/RenderQueueRepeat.js +2 -1
- package/dist/components/RenderQueue/VideoMattingQueueItem.d.ts +6 -0
- package/dist/components/RenderQueue/VideoMattingQueueItem.js +130 -0
- package/dist/components/RenderQueue/VideoMattingQueueProcessor.d.ts +1 -0
- package/dist/components/RenderQueue/VideoMattingQueueProcessor.js +105 -0
- package/dist/components/RenderQueue/VideoMattingQueueProcessorLoader.d.ts +2 -0
- package/dist/components/RenderQueue/VideoMattingQueueProcessorLoader.js +54 -0
- package/dist/components/RenderQueue/caption-job-types.d.ts +47 -0
- package/dist/components/RenderQueue/caption-job-types.js +7 -0
- package/dist/components/RenderQueue/context.d.ts +16 -0
- package/dist/components/RenderQueue/context.js +224 -11
- package/dist/components/RenderQueue/index.js +34 -10
- package/dist/components/RenderQueue/item-style.d.ts +1 -0
- package/dist/components/RenderQueue/item-style.js +2 -1
- package/dist/components/RenderQueue/load-model-for-job.d.ts +11 -0
- package/dist/components/RenderQueue/load-model-for-job.js +14 -0
- package/dist/components/RenderQueue/video-matting-job-types.d.ts +38 -0
- package/dist/components/RenderQueue/video-matting-job-types.js +5 -0
- package/dist/components/RendersTab.js +4 -4
- package/dist/components/RulersAndGuidesToggle.js +7 -1
- package/dist/components/SegmentedControl.d.ts +2 -2
- package/dist/components/SegmentedControl.js +38 -13
- package/dist/components/SelectedOutlinePolygon.js +8 -2
- package/dist/components/SettingsButton.d.ts +4 -0
- package/dist/components/SettingsButton.js +51 -0
- package/dist/components/SettingsModal.d.ts +1 -1
- package/dist/components/SettingsModal.js +3 -1
- package/dist/components/ShowOutlinesProvider.js +12 -0
- package/dist/components/SidebarCollapserControls.js +17 -21
- package/dist/components/SizeSelector.js +12 -4
- package/dist/components/SkillsSettings.js +2 -3
- package/dist/components/SnappingToggle.js +9 -8
- package/dist/components/StudioSettings.js +32 -18
- package/dist/components/SyntaxHighlightedSource.d.ts +5 -0
- package/dist/components/SyntaxHighlightedSource.js +78 -0
- package/dist/components/Tabs/vertical.d.ts +1 -0
- package/dist/components/Tabs/vertical.js +2 -2
- package/dist/components/TimeValue.js +2 -3
- package/dist/components/Timeline/SequencePropsObserver.js +4 -0
- package/dist/components/Timeline/Timeline.js +49 -81
- package/dist/components/Timeline/TimelineClipboardKeybindings.js +2 -4
- package/dist/components/Timeline/TimelineDeleteKeybindings.js +3 -18
- package/dist/components/Timeline/TimelineDragHandler.js +2 -2
- package/dist/components/Timeline/TimelineExpandedKeyframeRow.js +1 -0
- package/dist/components/Timeline/TimelineLayerChildren.js +12 -9
- package/dist/components/Timeline/TimelineRowChrome.js +11 -3
- package/dist/components/Timeline/TimelineSchemaField.js +8 -4
- package/dist/components/Timeline/TimelineSelection.d.ts +2 -0
- package/dist/components/Timeline/TimelineSelection.js +55 -2
- package/dist/components/Timeline/TimelineSequence.js +75 -17
- package/dist/components/Timeline/TimelineSequenceItem.d.ts +0 -1
- package/dist/components/Timeline/TimelineSequenceItem.js +208 -111
- package/dist/components/Timeline/TimelineSequenceRightEdgeDragHandle.d.ts +23 -3
- package/dist/components/Timeline/TimelineSequenceRightEdgeDragHandle.js +73 -25
- package/dist/components/Timeline/TimelineTimeIndicators.js +1 -0
- package/dist/components/Timeline/TimelineZoomControls.js +2 -1
- package/dist/components/Timeline/timeline-field-display-utils.js +8 -5
- package/dist/components/Timeline/use-asset-timeline-context-menu.d.ts +2 -0
- package/dist/components/Timeline/use-asset-timeline-context-menu.js +52 -0
- package/dist/components/TimelineCombobox.d.ts +1 -0
- package/dist/components/TimelineCombobox.js +8 -4
- package/dist/components/TimelineInOutToggle.js +14 -18
- package/dist/components/Transcription/LazyModels.d.ts +1 -0
- package/dist/components/Transcription/LazyModels.js +5 -0
- package/dist/components/Transcription/Models.d.ts +6 -0
- package/dist/components/Transcription/Models.js +18 -0
- package/dist/components/Transcription/TranscriptionModal.d.ts +3 -0
- package/dist/components/Transcription/TranscriptionModal.js +428 -0
- package/dist/components/Transcription/TranscriptionModalWithOptionalWhisper.d.ts +5 -0
- package/dist/components/Transcription/TranscriptionModalWithOptionalWhisper.js +48 -0
- package/dist/components/Transcription/caption-output-name.d.ts +2 -0
- package/dist/components/Transcription/caption-output-name.js +10 -0
- package/dist/components/Transcription/resample-media-to-16-khz.d.ts +6 -0
- package/dist/components/Transcription/resample-media-to-16-khz.js +82 -0
- package/dist/components/Transcription/whisper-languages.d.ts +2 -0
- package/dist/components/Transcription/whisper-languages.js +104 -0
- package/dist/components/Transcription/whisper-webgpu-capability.d.ts +2 -0
- package/dist/components/Transcription/whisper-webgpu-capability.js +7 -0
- package/dist/components/UndoRedoButtons.js +13 -38
- package/dist/components/UpdatesSettings.js +8 -12
- package/dist/components/VideoMatting/LazyModels.d.ts +1 -0
- package/dist/components/VideoMatting/LazyModels.js +5 -0
- package/dist/components/VideoMatting/Models.d.ts +6 -0
- package/dist/components/VideoMatting/Models.js +18 -0
- package/dist/components/VideoMatting/VideoMattingModal.d.ts +3 -0
- package/dist/components/VideoMatting/VideoMattingModal.js +207 -0
- package/dist/components/VideoMatting/VideoMattingModalWithOptionalPackage.d.ts +5 -0
- package/dist/components/VideoMatting/VideoMattingModalWithOptionalPackage.js +46 -0
- package/dist/components/VideoMatting/video-matting-capability.d.ts +2 -0
- package/dist/components/VideoMatting/video-matting-capability.js +7 -0
- package/dist/components/WebMcp.js +439 -22
- package/dist/components/handle-drop.js +3 -2
- package/dist/components/import-assets.d.ts +3 -2
- package/dist/components/import-assets.js +5 -9
- package/dist/components/keyboard-shortcuts.d.ts +17 -1
- package/dist/components/keyboard-shortcuts.js +191 -89
- package/dist/components/public-output-name.d.ts +5 -0
- package/dist/components/public-output-name.js +60 -0
- package/dist/components/use-model-cache-status.d.ts +7 -0
- package/dist/components/use-model-cache-status.js +35 -0
- package/dist/error-overlay/remotion-overlay/CodeFrame.js +29 -18
- package/dist/esm/CaptionQueueProcessor-k0yrm3dj.mjs +211 -0
- package/dist/esm/LazyModels-hc33szyn.mjs +11 -0
- package/dist/esm/LazyModels-sg40rjw6.mjs +11 -0
- package/dist/esm/SyntaxHighlightedSource-3xks91rz.mjs +1236 -0
- package/dist/esm/TranscriptionModal-3ctnxpt6.mjs +1011 -0
- package/dist/esm/VideoMattingModal-b0r7e60n.mjs +374 -0
- package/dist/esm/VideoMattingQueueProcessor-t1hgm2rm.mjs +109 -0
- package/dist/esm/index-1b9skrrd.mjs +142 -0
- package/dist/esm/index-2j3d1g81.mjs +261 -0
- package/dist/esm/index-5zrb1ft4.mjs +39 -0
- package/dist/esm/index-7tt71e8n.mjs +36 -0
- package/dist/esm/index-9qtvmwtx.mjs +1366 -0
- package/dist/esm/index-9x6e1dq0.mjs +428 -0
- package/dist/esm/index-c37kme2v.mjs +46209 -0
- package/dist/esm/index-cw0pnpg5.mjs +50 -0
- package/dist/esm/index-e3zwf3e7.mjs +36 -0
- package/dist/esm/index-er3mh6em.mjs +54688 -0
- package/dist/esm/{chunk-je0h1bgt.js → index-k426ye99.mjs} +4 -1
- package/dist/esm/index-q2epbw93.mjs +423 -0
- package/dist/esm/index-q5xv20xx.mjs +41 -0
- package/dist/esm/{chunk-6jf1natv.js → index-rcv7qkt5.mjs} +18 -1
- package/dist/esm/index-v4tr1bft.mjs +20 -0
- package/dist/esm/index-wbmp5srk.mjs +35 -0
- package/dist/esm/index-yfrysr5f.mjs +1154 -0
- package/dist/esm/index.mjs +45 -933
- package/dist/esm/internals.mjs +13 -114393
- package/dist/esm/previewEntry.mjs +387 -115050
- package/dist/esm/renderEntry.mjs +5 -5
- package/dist/esm/{chunk-m0jqdbkr.js → resolve-composition-component-location-bt2d6qxq.mjs} +1 -1
- package/dist/helpers/colors.d.ts +1 -0
- package/dist/helpers/colors.js +4 -3
- package/dist/helpers/drag-aware-double-click.d.ts +2 -1
- package/dist/helpers/drag-aware-double-click.js +12 -1
- package/dist/helpers/get-asset-metadata.d.ts +1 -0
- package/dist/helpers/get-asset-metadata.js +4 -0
- package/dist/helpers/hoverable.js +8 -0
- package/dist/helpers/inject-css.js +2 -0
- package/dist/helpers/optional-package-dependencies.d.ts +3 -0
- package/dist/helpers/optional-package-dependencies.js +24 -0
- package/dist/helpers/pointer-session.d.ts +6 -0
- package/dist/helpers/pointer-session.js +36 -14
- package/dist/helpers/prism-vsc-dark-plus.d.ts +1 -0
- package/dist/helpers/prism-vsc-dark-plus.js +305 -0
- package/dist/helpers/sequence-node-path-mutations.js +11 -0
- package/dist/helpers/slugify-name.d.ts +1 -0
- package/dist/helpers/slugify-name.js +14 -0
- package/dist/helpers/studio-runtime-config.d.ts +1 -0
- package/dist/helpers/studio-runtime-config.js +6 -1
- package/dist/helpers/use-create-composition.d.ts +1 -0
- package/dist/helpers/use-create-composition.js +12 -7
- package/dist/helpers/use-keybinding.d.ts +9 -3
- package/dist/helpers/use-keybinding.js +8 -9
- package/dist/helpers/use-keyboard-shortcut-label.d.ts +2 -0
- package/dist/helpers/use-keyboard-shortcut-label.js +15 -0
- package/dist/helpers/use-menu-structure.js +59 -14
- package/dist/helpers/use-rename-composition.d.ts +1 -0
- package/dist/helpers/use-rename-composition.js +11 -5
- package/dist/icons/input-props.d.ts +1 -1
- package/dist/icons/input-props.js +2 -2
- package/dist/icons/models.d.ts +4 -0
- package/dist/icons/models.js +7 -0
- package/dist/icons/separation.d.ts +4 -0
- package/dist/icons/separation.js +7 -0
- package/dist/icons/skills.js +1 -1
- package/dist/icons/transcription.d.ts +4 -0
- package/dist/icons/transcription.js +7 -0
- package/dist/icons/upload.js +1 -1
- package/dist/renderEntry.js +2 -2
- package/dist/state/modals.d.ts +14 -2
- package/package.json +35 -21
- package/dist/components/UpdateCheck.d.ts +0 -1
- package/dist/components/UpdateCheck.js +0 -79
- package/dist/esm/chunk-3netyjd9.js +0 -99793
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MultiSequenceInspector = void 0;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const studio_shared_1 = require("@remotion/studio-shared");
|
|
6
|
+
const react_1 = require("react");
|
|
7
|
+
const remotion_1 = require("remotion");
|
|
8
|
+
const calculate_timeline_1 = require("../../helpers/calculate-timeline");
|
|
9
|
+
const colors_1 = require("../../helpers/colors");
|
|
10
|
+
const timeline_layout_1 = require("../../helpers/timeline-layout");
|
|
11
|
+
const InspectorInfoHeader_1 = require("../InspectorInfoHeader");
|
|
12
|
+
const InspectorPanelLayout_1 = require("../InspectorPanelLayout");
|
|
13
|
+
const layout_1 = require("../layout");
|
|
14
|
+
const is_menu_item_1 = require("../Menu/is-menu-item");
|
|
15
|
+
const TimelineRowLayoutContext_1 = require("../Timeline/TimelineRowLayoutContext");
|
|
16
|
+
const common_1 = require("./common");
|
|
17
|
+
const MultiSequenceField_1 = require("./MultiSequenceField");
|
|
18
|
+
const styles_1 = require("./styles");
|
|
19
|
+
const selectionCountStyle = {
|
|
20
|
+
color: colors_1.LIGHT_TEXT,
|
|
21
|
+
fontFamily: 'sans-serif',
|
|
22
|
+
fontSize: 13,
|
|
23
|
+
height: layout_1.COMPACT_CONTROL_ROW_HEIGHT,
|
|
24
|
+
lineHeight: `${layout_1.COMPACT_CONTROL_ROW_HEIGHT}px`,
|
|
25
|
+
overflow: 'hidden',
|
|
26
|
+
padding: `0 ${InspectorPanelLayout_1.INSPECTOR_PANEL_HORIZONTAL_PADDING}px`,
|
|
27
|
+
textOverflow: 'ellipsis',
|
|
28
|
+
whiteSpace: 'nowrap',
|
|
29
|
+
};
|
|
30
|
+
const MultiSequenceInspector = ({ selections, readOnlyStudio }) => {
|
|
31
|
+
const { sequences } = (0, react_1.useContext)(remotion_1.Internals.SequenceManager);
|
|
32
|
+
const { overrideIdToNodePathMappings } = (0, react_1.useContext)(remotion_1.Internals.OverrideIdsToNodePathsGettersContext);
|
|
33
|
+
const { propStatuses } = (0, react_1.useContext)(remotion_1.Internals.VisualModePropStatusesContext);
|
|
34
|
+
const { getDragOverrides } = (0, react_1.useContext)(remotion_1.Internals.VisualModeDragOverridesContext);
|
|
35
|
+
const targets = (0, react_1.useMemo)(() => {
|
|
36
|
+
const tracks = (0, calculate_timeline_1.calculateTimeline)({
|
|
37
|
+
sequences,
|
|
38
|
+
overrideIdsToNodePaths: overrideIdToNodePathMappings,
|
|
39
|
+
});
|
|
40
|
+
const result = [];
|
|
41
|
+
const seen = new Set();
|
|
42
|
+
for (const selection of selections) {
|
|
43
|
+
const key = (0, studio_shared_1.stringifySequenceExpandedRowKey)(selection.nodePathInfo.sequenceSubscriptionKey);
|
|
44
|
+
const track = tracks.find((candidate) => candidate.nodePathInfo !== null &&
|
|
45
|
+
(0, studio_shared_1.stringifySequenceExpandedRowKey)(candidate.nodePathInfo.sequenceSubscriptionKey) === key &&
|
|
46
|
+
candidate.nodePathInfo.index === selection.nodePathInfo.index);
|
|
47
|
+
if (!(track === null || track === void 0 ? void 0 : track.sequence.controls) || !track.nodePathInfo) {
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
// Multiple rendered instances can share the same editable source.
|
|
51
|
+
if (seen.has(key)) {
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
seen.add(key);
|
|
55
|
+
result.push({
|
|
56
|
+
nodePath: track.nodePathInfo.sequenceSubscriptionKey,
|
|
57
|
+
controls: track.sequence.controls,
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
return result;
|
|
61
|
+
}, [overrideIdToNodePathMappings, selections, sequences]);
|
|
62
|
+
const store = (0, react_1.useMemo)(() => {
|
|
63
|
+
const stores = (targets !== null && targets !== void 0 ? targets : []).map((target) => target.controls.runtimeValues);
|
|
64
|
+
let snapshots = stores.map((value) => value.getSnapshot());
|
|
65
|
+
return {
|
|
66
|
+
subscribe: (listener) => {
|
|
67
|
+
const unsubscribes = stores.map((value) => value.subscribe(listener));
|
|
68
|
+
return () => unsubscribes.forEach((unsubscribe) => unsubscribe());
|
|
69
|
+
},
|
|
70
|
+
getSnapshot: () => {
|
|
71
|
+
const next = stores.map((value) => value.getSnapshot());
|
|
72
|
+
if (next.some((value, index) => value !== snapshots[index])) {
|
|
73
|
+
snapshots = next;
|
|
74
|
+
}
|
|
75
|
+
return snapshots;
|
|
76
|
+
},
|
|
77
|
+
};
|
|
78
|
+
}, [targets]);
|
|
79
|
+
const runtimeValues = (0, react_1.useSyncExternalStore)(store.subscribe, store.getSnapshot, store.getSnapshot);
|
|
80
|
+
const fields = (0, react_1.useMemo)(() => {
|
|
81
|
+
var _a;
|
|
82
|
+
const allFields = (targets !== null && targets !== void 0 ? targets : []).map((target, index) => {
|
|
83
|
+
var _a;
|
|
84
|
+
return (_a = (0, timeline_layout_1.getFieldsToShow)({
|
|
85
|
+
schema: target.controls.schema,
|
|
86
|
+
currentRuntimeValueDotNotation: runtimeValues[index],
|
|
87
|
+
getDragOverrides,
|
|
88
|
+
propStatuses,
|
|
89
|
+
nodePath: target.nodePath,
|
|
90
|
+
includeTextContent: true,
|
|
91
|
+
})) !== null && _a !== void 0 ? _a : [];
|
|
92
|
+
});
|
|
93
|
+
return ((_a = allFields[0]) !== null && _a !== void 0 ? _a : []).filter((field) => allFields.every((candidate) => candidate.some((other) => other.key === field.key && other.fieldSchema === field.fieldSchema)));
|
|
94
|
+
}, [getDragOverrides, propStatuses, runtimeValues, targets]);
|
|
95
|
+
return (jsx_runtime_1.jsxs("div", { style: styles_1.scrollableContainer, className: is_menu_item_1.VERTICAL_SCROLLBAR_CLASSNAME, children: [
|
|
96
|
+
jsx_runtime_1.jsx(InspectorInfoHeader_1.InspectorInfoHeader, { padding: "4px 0", children: jsx_runtime_1.jsxs("div", { style: selectionCountStyle, children: [selections.length, " sequences selected"] }) }), jsx_runtime_1.jsx("div", { role: "separator", style: styles_1.sequenceHeaderDivider }), targets === null ? (jsx_runtime_1.jsx(common_1.InspectorMessage, { children: "Sequence controls unavailable" })) : fields.length === 0 ? (jsx_runtime_1.jsx(common_1.InspectorMessage, { children: "No shared controls" })) : (jsx_runtime_1.jsx(TimelineRowLayoutContext_1.TimelineRowLayoutContext.Provider, { value: TimelineRowLayoutContext_1.INSPECTOR_TIMELINE_ROW_LAYOUT, children: timeline_layout_1.SCHEMA_FIELD_GROUPS.map((group) => {
|
|
97
|
+
const groupedFields = fields.filter((field) => field.group === group.id);
|
|
98
|
+
return groupedFields.length === 0 ? null : (jsx_runtime_1.jsx(common_1.InspectorSection, { header: group.label, children: groupedFields.map((field) => (jsx_runtime_1.jsx(MultiSequenceField_1.MultiSequenceField, { field: field, targets: targets, readOnlyStudio: readOnlyStudio }, JSON.stringify(targets.map((target) => target.nodePath)) +
|
|
99
|
+
field.key))) }, group.id));
|
|
100
|
+
}) }))] }));
|
|
101
|
+
};
|
|
102
|
+
exports.MultiSequenceInspector = MultiSequenceInspector;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { SchemaFieldInfo } from '../../helpers/timeline-layout';
|
|
3
|
+
export declare const MultiSequenceNumberField: React.FC<{
|
|
4
|
+
readonly field: SchemaFieldInfo;
|
|
5
|
+
readonly values: unknown[];
|
|
6
|
+
readonly onPreview: (values: unknown[]) => void;
|
|
7
|
+
readonly onSave: (values: unknown[]) => Promise<void>;
|
|
8
|
+
readonly onClear: () => void;
|
|
9
|
+
}>;
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MultiSequenceNumberField = void 0;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const react_1 = require("react");
|
|
6
|
+
const noop_1 = require("../../helpers/noop");
|
|
7
|
+
const InputDragger_1 = require("../NewComposition/InputDragger");
|
|
8
|
+
const timeline_field_display_utils_1 = require("../Timeline/timeline-field-display-utils");
|
|
9
|
+
const timeline_field_utils_1 = require("../Timeline/timeline-field-utils");
|
|
10
|
+
const timeline_translate_utils_1 = require("../Timeline/timeline-translate-utils");
|
|
11
|
+
const NumericAxis = ({ field, values, axis, onPreview, onSave, onClear }) => {
|
|
12
|
+
var _a, _b, _c, _d;
|
|
13
|
+
const [dragValue, setDragValue] = (0, react_1.useState)(null);
|
|
14
|
+
const initialValues = (0, react_1.useRef)(null);
|
|
15
|
+
const coordinates = values.map((value) => {
|
|
16
|
+
var _a;
|
|
17
|
+
return axis === null ? Number(value) : ((_a = (0, timeline_translate_utils_1.parseTranslate)(String(value))[axis]) !== null && _a !== void 0 ? _a : 0);
|
|
18
|
+
});
|
|
19
|
+
const mixed = coordinates.some((value) => value !== coordinates[0]);
|
|
20
|
+
const schema = field.fieldSchema;
|
|
21
|
+
const step = 'step' in schema ? ((_a = schema.step) !== null && _a !== void 0 ? _a : 1) : 1;
|
|
22
|
+
const decimalPlaces = (0, timeline_field_utils_1.getTimelineDisplayDecimalPlaces)({
|
|
23
|
+
defaultDecimalPlaces: 1,
|
|
24
|
+
step,
|
|
25
|
+
});
|
|
26
|
+
const min = schema.type === 'number' ? ((_b = schema.min) !== null && _b !== void 0 ? _b : -Infinity) : -Infinity;
|
|
27
|
+
const max = schema.type === 'number' ? ((_c = schema.max) !== null && _c !== void 0 ? _c : Infinity) : Infinity;
|
|
28
|
+
const nextValues = (value, source) => {
|
|
29
|
+
var _a, _b;
|
|
30
|
+
const baseline = (_a = initialValues.current) !== null && _a !== void 0 ? _a : values;
|
|
31
|
+
const first = axis === null
|
|
32
|
+
? Number(baseline[0])
|
|
33
|
+
: ((_b = (0, timeline_translate_utils_1.parseTranslate)(String(baseline[0]))[axis]) !== null && _b !== void 0 ? _b : 0);
|
|
34
|
+
return baseline.map((original) => {
|
|
35
|
+
var _a;
|
|
36
|
+
const coordinatesForValue = axis === null ? null : (0, timeline_translate_utils_1.parseTranslate)(String(original));
|
|
37
|
+
const current = coordinatesForValue === null || axis === null
|
|
38
|
+
? Number(original)
|
|
39
|
+
: ((_a = coordinatesForValue[axis]) !== null && _a !== void 0 ? _a : 0);
|
|
40
|
+
const next = Math.min(max, Math.max(min, source === 'drag'
|
|
41
|
+
? (0, timeline_field_utils_1.roundToDecimalPlaces)(current + value - first, Math.max((0, timeline_field_utils_1.getDecimalPlaces)(current), (0, timeline_field_utils_1.getDecimalPlaces)(value), (0, timeline_field_utils_1.getDecimalPlaces)(first)))
|
|
42
|
+
: value));
|
|
43
|
+
if (coordinatesForValue === null || axis === null) {
|
|
44
|
+
return next;
|
|
45
|
+
}
|
|
46
|
+
const [x, y, z] = coordinatesForValue;
|
|
47
|
+
return (0, timeline_translate_utils_1.serializeTranslate)([axis === 0 ? next : x, axis === 1 ? next : y, axis === 2 ? next : z], decimalPlaces);
|
|
48
|
+
});
|
|
49
|
+
};
|
|
50
|
+
const clear = () => {
|
|
51
|
+
initialValues.current = null;
|
|
52
|
+
setDragValue(null);
|
|
53
|
+
onClear();
|
|
54
|
+
};
|
|
55
|
+
return (jsx_runtime_1.jsx("span", { onKeyDownCapture: (event) => {
|
|
56
|
+
if (event.key === 'Escape') {
|
|
57
|
+
clear();
|
|
58
|
+
}
|
|
59
|
+
}, onPointerCancelCapture: clear, onBlurCapture: (event) => {
|
|
60
|
+
if (event.target instanceof HTMLInputElement &&
|
|
61
|
+
event.target.value.trim() === '') {
|
|
62
|
+
clear();
|
|
63
|
+
}
|
|
64
|
+
}, children: jsx_runtime_1.jsx(InputDragger_1.InputDragger, { type: "number", value: dragValue !== null && dragValue !== void 0 ? dragValue : coordinates[0], "aria-label": axis === null
|
|
65
|
+
? ((_d = field.description) !== null && _d !== void 0 ? _d : field.key)
|
|
66
|
+
: `Offset ${['X', 'Y', 'Z'][axis]}`, title: "Type to set all values; drag to adjust each value", status: "ok", small: true, rightAlign: false, min: min, max: max, step: step, snapToStep: axis === null, dragDecimalPlaces: decimalPlaces, dragSensitivity: axis === null ? 1 : 3, buttonStyle: { paddingLeft: 0 }, style: { width: 70 }, formatter: (value) => mixed && dragValue === null
|
|
67
|
+
? 'Mixed'
|
|
68
|
+
: (0, timeline_field_display_utils_1.formatTimelineFieldValueForDisplay)({ fieldSchema: schema, value }), onTextChange: noop_1.noop, onValueChange: (value, source) => {
|
|
69
|
+
var _a;
|
|
70
|
+
(_a = initialValues.current) !== null && _a !== void 0 ? _a : (initialValues.current = values);
|
|
71
|
+
setDragValue(value);
|
|
72
|
+
onPreview(nextValues(value, source));
|
|
73
|
+
}, onValueChangeEnd: (value, source) => {
|
|
74
|
+
if (initialValues.current === null) {
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
onSave(nextValues(value, source)).finally(clear);
|
|
78
|
+
} }) }));
|
|
79
|
+
};
|
|
80
|
+
const MultiSequenceNumberField = (props) => {
|
|
81
|
+
const axes = props.field.typeName === 'translate'
|
|
82
|
+
? props.values.some((value) => (0, timeline_translate_utils_1.parseTranslate)(String(value))[2] !== null)
|
|
83
|
+
? [0, 1, 2]
|
|
84
|
+
: [0, 1]
|
|
85
|
+
: [null];
|
|
86
|
+
return (jsx_runtime_1.jsx("span", { style: { display: 'flex', gap: 4 }, children: axes.map((axis) => (jsx_runtime_1.jsx(NumericAxis, { ...props, axis: axis }, axis !== null && axis !== void 0 ? axis : 'value'))) }));
|
|
87
|
+
};
|
|
88
|
+
exports.MultiSequenceNumberField = MultiSequenceNumberField;
|
|
@@ -8,6 +8,7 @@ const AssetInspector_1 = require("./InspectorPanel/AssetInspector");
|
|
|
8
8
|
const common_1 = require("./InspectorPanel/common");
|
|
9
9
|
const CompositionInspector_1 = require("./InspectorPanel/CompositionInspector");
|
|
10
10
|
const inspector_selection_1 = require("./InspectorPanel/inspector-selection");
|
|
11
|
+
const MultiSequenceInspector_1 = require("./InspectorPanel/MultiSequenceInspector");
|
|
11
12
|
const SelectedInspector_1 = require("./InspectorPanel/SelectedInspector");
|
|
12
13
|
const styles_1 = require("./InspectorPanel/styles");
|
|
13
14
|
const TimelineSelection_1 = require("./Timeline/TimelineSelection");
|
|
@@ -28,6 +29,9 @@ const InspectorPanel = ({ composition, currentDefaultProps, readOnlyStudio, setD
|
|
|
28
29
|
if (sameSequenceInspectorSelection) {
|
|
29
30
|
return (jsx_runtime_1.jsx("div", { style: styles_1.container, children: jsx_runtime_1.jsx(SelectedInspector_1.SelectedInspector, { selection: sameSequenceInspectorSelection, readOnlyStudio: readOnlyStudio }) }));
|
|
30
31
|
}
|
|
32
|
+
if (selectedItems.every((item) => item.type === 'sequence')) {
|
|
33
|
+
return (jsx_runtime_1.jsx(MultiSequenceInspector_1.MultiSequenceInspector, { selections: selectedItems, readOnlyStudio: readOnlyStudio }));
|
|
34
|
+
}
|
|
31
35
|
return (jsx_runtime_1.jsx("div", { style: styles_1.container, children: jsx_runtime_1.jsxs(common_1.InspectorMessage, { children: [selectedItems.length, " items selected"] }) }));
|
|
32
36
|
}
|
|
33
37
|
return (jsx_runtime_1.jsx("div", { style: styles_1.container, children: jsx_runtime_1.jsx(SelectedInspector_1.SelectedInspector, { selection: selectedItems[0], readOnlyStudio: readOnlyStudio }) }));
|
|
@@ -213,6 +213,15 @@ const InspectorSequenceSection = ({ sequence, readOnlyStudio, validatedLocation,
|
|
|
213
213
|
includeTextContent: true,
|
|
214
214
|
includeSourceControls: true,
|
|
215
215
|
});
|
|
216
|
+
const { selectedItems } = (0, TimelineSelection_1.useTimelineSelection)();
|
|
217
|
+
const selectedEffect = selectedItems.length === 1 &&
|
|
218
|
+
(selectedItems[0].type === 'sequence-effect' ||
|
|
219
|
+
selectedItems[0].type === 'sequence-effect-prop')
|
|
220
|
+
? selectedItems[0]
|
|
221
|
+
: null;
|
|
222
|
+
const selectedEffectKey = selectedEffect === null ? null : (0, TimelineSelection_1.getTimelineSelectionKey)(selectedEffect);
|
|
223
|
+
const selectedEffectRowRef = (0, react_1.useRef)(null);
|
|
224
|
+
const scrolledEffectKey = (0, react_1.useRef)(null);
|
|
216
225
|
const [collapsedKeys, setCollapsedKeys] = (0, react_1.useState)(loadInspectorCollapsedKeys);
|
|
217
226
|
const [sectionExpansionOverrides, setSectionExpansionOverrides] = (0, react_1.useState)(loadInspectorSectionExpansionOverrides);
|
|
218
227
|
const [automaticSectionExpansion, setAutomaticSectionExpansion] = (0, react_1.useState)({});
|
|
@@ -299,6 +308,55 @@ const InspectorSequenceSection = ({ sequence, readOnlyStudio, validatedLocation,
|
|
|
299
308
|
}),
|
|
300
309
|
};
|
|
301
310
|
}, [getIsExpanded, tree]);
|
|
311
|
+
(0, react_1.useEffect)(() => {
|
|
312
|
+
if (selectedEffectKey === null ||
|
|
313
|
+
scrolledEffectKey.current === selectedEffectKey) {
|
|
314
|
+
return;
|
|
315
|
+
}
|
|
316
|
+
const rows = (0, timeline_layout_1.flattenVisibleTreeNodes)({
|
|
317
|
+
nodes: tree,
|
|
318
|
+
getIsExpanded: () => true,
|
|
319
|
+
});
|
|
320
|
+
const targetIndex = rows.findIndex(({ node }) => {
|
|
321
|
+
const selection = (0, TimelineSelection_1.getTimelineSelectionFromNodePathInfo)(node.nodePathInfo);
|
|
322
|
+
return (selection !== null &&
|
|
323
|
+
(0, TimelineSelection_1.getTimelineSelectionKey)(selection) === selectedEffectKey);
|
|
324
|
+
});
|
|
325
|
+
if (targetIndex === -1) {
|
|
326
|
+
return;
|
|
327
|
+
}
|
|
328
|
+
const parentKeys = [];
|
|
329
|
+
let { depth } = rows[targetIndex];
|
|
330
|
+
for (let i = targetIndex - 1; i >= 0 && depth > 0; i--) {
|
|
331
|
+
if (rows[i].depth < depth) {
|
|
332
|
+
parentKeys.push(getInspectorExpansionKey(rows[i].node.nodePathInfo));
|
|
333
|
+
depth = rows[i].depth;
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
setCollapsedKeys((previous) => {
|
|
337
|
+
if (!parentKeys.some((key) => previous.has(key))) {
|
|
338
|
+
return previous;
|
|
339
|
+
}
|
|
340
|
+
const next = new Set(previous);
|
|
341
|
+
for (const key of parentKeys) {
|
|
342
|
+
next.delete(key);
|
|
343
|
+
}
|
|
344
|
+
persistInspectorCollapsedKeys(next);
|
|
345
|
+
return next;
|
|
346
|
+
});
|
|
347
|
+
}, [selectedEffectKey, tree]);
|
|
348
|
+
(0, react_1.useEffect)(() => {
|
|
349
|
+
if (selectedEffectKey === null) {
|
|
350
|
+
scrolledEffectKey.current = null;
|
|
351
|
+
return;
|
|
352
|
+
}
|
|
353
|
+
if (scrolledEffectKey.current === selectedEffectKey ||
|
|
354
|
+
selectedEffectRowRef.current === null) {
|
|
355
|
+
return;
|
|
356
|
+
}
|
|
357
|
+
selectedEffectRowRef.current.scrollIntoView({ block: 'center' });
|
|
358
|
+
scrolledEffectKey.current = selectedEffectKey;
|
|
359
|
+
}, [effectRows, selectedEffectKey]);
|
|
302
360
|
const effectSelectableItems = (0, react_1.useMemo)(() => (0, exports.getInspectorSelectableItems)(effectRows), [effectRows]);
|
|
303
361
|
const controlGroups = (0, react_1.useMemo)(() => getInspectorControlGroups(controlRows), [controlRows]);
|
|
304
362
|
const layoutGroup = controlGroups.find((group) => group.id === 'layout');
|
|
@@ -426,11 +484,11 @@ const InspectorSequenceSection = ({ sequence, readOnlyStudio, validatedLocation,
|
|
|
426
484
|
return node.kind === 'field' && ((_a = node.field) === null || _a === void 0 ? void 0 : _a.key) === border_radius_representation_1.BORDER_RADIUS_SHORTHAND_KEY;
|
|
427
485
|
});
|
|
428
486
|
const borderRadiusConversion = (0, border_radius_representation_1.getBorderRadiusConversion)(sequencePropStatuses, getDragOverrides(nodePathInfo.sequenceSubscriptionKey));
|
|
429
|
-
const
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
487
|
+
const hasCaptionsSchema = ((_a = schema.captions) === null || _a === void 0 ? void 0 : _a.type) === 'remotion-captions';
|
|
488
|
+
const inlineCaptions = hasCaptionsSchema
|
|
489
|
+
? Array.isArray(runtimeValues.captions)
|
|
490
|
+
? runtimeValues.captions
|
|
491
|
+
: []
|
|
434
492
|
: null;
|
|
435
493
|
const showEffectsSection = nodePathInfo.supportsEffects || effectRows.length > 0;
|
|
436
494
|
const canAddEffect = nodePathInfo.supportsEffects &&
|
|
@@ -516,7 +574,12 @@ const InspectorSequenceSection = ({ sequence, readOnlyStudio, validatedLocation,
|
|
|
516
574
|
inlineCaptions === null) {
|
|
517
575
|
return (jsx_runtime_1.jsx("div", { style: container, children: jsx_runtime_1.jsx(common_1.InspectorSection, { header: "Controls", children: jsx_runtime_1.jsx("div", { style: emptyState, children: "No schema" }) }) }));
|
|
518
576
|
}
|
|
519
|
-
return (jsx_runtime_1.jsx(TimelineAssetField_1.AssetSelectionContext.Provider, { value: assetSelectionContextValue, children: jsx_runtime_1.jsxs("div", { style: container, children: [controlRows.length > 0 ? (jsx_runtime_1.jsx(TimelineSelection_1.TimelineSelectionOrderProvider, { items: controlSelectableItems, children: controlGroupsWithoutLayout.map((group) => (jsx_runtime_1.jsx(common_1.InspectorSection, { header: renderControlGroupHeader(group), children: isControlGroupExpanded(group) ? (group.id === 'transforms' ? (jsx_runtime_1.jsxs(Transform3DModeContext_1.Transform3DModeContext.Provider, { value: show3DTransformControls, children: [renderTransformControls(), group.rows.map(renderRow)] })) : (group.rows.map(renderRow))) : null }, group.id))) })) : null, inlineCaptions ? (jsx_runtime_1.jsx(InlineCaptionInspector_1.InlineCaptionInspector, { captions: inlineCaptions, controls: sequence.controls, expanded: captionsExpanded, nodePath: nodePathInfo.sequenceSubscriptionKey, onToggle: () => toggleAdditionalSection('captions'), readOnlyStudio: readOnlyStudio, validatedLocation: validatedLocation })) : null, showEffectsSection ? (jsx_runtime_1.jsx(common_1.InspectorSection, { header: effectsHeader, children: effectRows.length > 0 ? (jsx_runtime_1.jsx(TimelineSelection_1.TimelineSelectionOrderProvider, { items: effectSelectableItems, children: effectRows.map(
|
|
577
|
+
return (jsx_runtime_1.jsx(TimelineAssetField_1.AssetSelectionContext.Provider, { value: assetSelectionContextValue, children: jsx_runtime_1.jsxs("div", { style: container, children: [controlRows.length > 0 ? (jsx_runtime_1.jsx(TimelineSelection_1.TimelineSelectionOrderProvider, { items: controlSelectableItems, children: controlGroupsWithoutLayout.map((group) => (jsx_runtime_1.jsx(common_1.InspectorSection, { header: renderControlGroupHeader(group), children: isControlGroupExpanded(group) ? (group.id === 'transforms' ? (jsx_runtime_1.jsxs(Transform3DModeContext_1.Transform3DModeContext.Provider, { value: show3DTransformControls, children: [renderTransformControls(), group.rows.map(renderRow)] })) : (group.rows.map(renderRow))) : null }, group.id))) })) : null, inlineCaptions ? (jsx_runtime_1.jsx(InlineCaptionInspector_1.InlineCaptionInspector, { captions: inlineCaptions, controls: sequence.controls, expanded: captionsExpanded, nodePath: nodePathInfo.sequenceSubscriptionKey, onToggle: () => toggleAdditionalSection('captions'), readOnlyStudio: readOnlyStudio, validatedLocation: validatedLocation })) : null, showEffectsSection ? (jsx_runtime_1.jsx(common_1.InspectorSection, { header: effectsHeader, children: effectRows.length > 0 ? (jsx_runtime_1.jsx(TimelineSelection_1.TimelineSelectionOrderProvider, { items: effectSelectableItems, children: effectRows.map((row) => {
|
|
578
|
+
const selection = (0, TimelineSelection_1.getTimelineSelectionFromNodePathInfo)(row.node.nodePathInfo);
|
|
579
|
+
const selected = selection !== null &&
|
|
580
|
+
(0, TimelineSelection_1.getTimelineSelectionKey)(selection) === selectedEffectKey;
|
|
581
|
+
return (jsx_runtime_1.jsx("div", { ref: selected ? selectedEffectRowRef : null, children: renderRow(row) }, getInspectorExpansionKey(row.node.nodePathInfo)));
|
|
582
|
+
}) })) : null })) : null, layoutGroup ? (jsx_runtime_1.jsx(TimelineSelection_1.TimelineSelectionOrderProvider, { items: controlSelectableItems, children: jsx_runtime_1.jsx(common_1.InspectorSection, { header: renderControlGroupHeader(layoutGroup), children: isControlGroupExpanded(layoutGroup)
|
|
520
583
|
? layoutGroup.rows.map(renderRow)
|
|
521
584
|
: null }) })) : null] }) }));
|
|
522
585
|
};
|
|
@@ -55,6 +55,7 @@ const layout_1 = require("./layout");
|
|
|
55
55
|
const is_menu_item_1 = require("./Menu/is-menu-item");
|
|
56
56
|
const ModalButton_1 = require("./ModalButton");
|
|
57
57
|
const ModalFooter_1 = require("./ModalFooter");
|
|
58
|
+
const OptionalPackageModal_1 = require("./OptionalPackageModal");
|
|
58
59
|
const container = {
|
|
59
60
|
boxSizing: 'border-box',
|
|
60
61
|
flex: 1,
|
|
@@ -103,7 +104,6 @@ const InstallPackageSettings = ({ footerContainer, packageManager }) => {
|
|
|
103
104
|
});
|
|
104
105
|
});
|
|
105
106
|
const onClick = (0, react_1.useCallback)(async () => {
|
|
106
|
-
var _a;
|
|
107
107
|
if (state.type === 'done') {
|
|
108
108
|
if (packageManager === null) {
|
|
109
109
|
setSelectedModal(null);
|
|
@@ -116,10 +116,9 @@ const InstallPackageSettings = ({ footerContainer, packageManager }) => {
|
|
|
116
116
|
setState({ type: 'installing' });
|
|
117
117
|
try {
|
|
118
118
|
await (0, install_package_1.installPackages)(selectedPackageSpecs);
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
]));
|
|
119
|
+
for (const packageName of selectedPackages) {
|
|
120
|
+
(0, OptionalPackageModal_1.markOptionalPackageInstalled)(packageName);
|
|
121
|
+
}
|
|
123
122
|
setState({ type: 'done' });
|
|
124
123
|
}
|
|
125
124
|
catch (err) {
|