@remotion/studio 4.0.477 → 4.0.479
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/components/AssetSelector.js +8 -14
- package/dist/components/Button.d.ts +1 -0
- package/dist/components/Button.js +8 -5
- package/dist/components/CanvasIfSizeIsAvailable.js +2 -6
- package/dist/components/CompactExplanation.d.ts +12 -0
- package/dist/components/CompactExplanation.js +52 -0
- package/dist/components/CompositionSelector.js +2 -4
- package/dist/components/CurrentAsset.d.ts +3 -1
- package/dist/components/CurrentAsset.js +42 -34
- package/dist/components/CurrentComposition.d.ts +1 -1
- package/dist/components/CurrentComposition.js +38 -31
- package/dist/components/DefaultPropsEditor.d.ts +12 -2
- package/dist/components/DefaultPropsEditor.js +2 -2
- package/dist/components/EditorGuides/Guide.js +37 -9
- package/dist/components/EditorRuler/Ruler.js +4 -14
- package/dist/components/EditorRuler/index.js +9 -4
- package/dist/components/EffectPickerModal.d.ts +5 -0
- package/dist/components/EffectPickerModal.js +179 -0
- package/dist/components/InlineAction.js +1 -0
- package/dist/components/InspectorInfoHeader.d.ts +11 -0
- package/dist/components/InspectorInfoHeader.js +55 -0
- package/dist/components/InspectorPanel/DefaultInspector.d.ts +8 -0
- package/dist/components/InspectorPanel/DefaultInspector.js +93 -0
- package/dist/components/InspectorPanel/EasingInspector.d.ts +5 -0
- package/dist/components/InspectorPanel/EasingInspector.js +41 -0
- package/dist/components/InspectorPanel/GuideInspector.d.ts +7 -0
- package/dist/components/InspectorPanel/GuideInspector.js +55 -0
- package/dist/components/InspectorPanel/KeyframeInspector.d.ts +7 -0
- package/dist/components/InspectorPanel/KeyframeInspector.js +109 -0
- package/dist/components/InspectorPanel/SelectedInspector.d.ts +5 -0
- package/dist/components/InspectorPanel/SelectedInspector.js +26 -0
- package/dist/components/InspectorPanel/SequenceSelectionInspector.d.ts +5 -0
- package/dist/components/InspectorPanel/SequenceSelectionInspector.js +116 -0
- package/dist/components/InspectorPanel/common.d.ts +15 -0
- package/dist/components/InspectorPanel/common.js +18 -0
- package/dist/components/InspectorPanel/inspector-selection.d.ts +10 -0
- package/dist/components/InspectorPanel/inspector-selection.js +34 -0
- package/dist/components/InspectorPanel/styles.d.ts +27 -0
- package/dist/components/InspectorPanel/styles.js +178 -0
- package/dist/components/InspectorPanel/use-track-for-selection.d.ts +2 -0
- package/dist/components/InspectorPanel/use-track-for-selection.js +22 -0
- package/dist/components/InspectorPanel.d.ts +8 -0
- package/dist/components/InspectorPanel.js +26 -0
- package/dist/components/InspectorPanelLayout.d.ts +1 -0
- package/dist/components/InspectorPanelLayout.js +4 -0
- package/dist/components/InspectorSequenceSection.d.ts +16 -0
- package/dist/components/InspectorSequenceSection.js +147 -0
- package/dist/components/InspectorSourceLocation.d.ts +7 -0
- package/dist/components/InspectorSourceLocation.js +71 -0
- package/dist/components/MenuToolbar.d.ts +1 -0
- package/dist/components/MenuToolbar.js +4 -1
- package/dist/components/Modals.js +3 -3
- package/dist/components/NewComposition/InputDragger.js +1 -1
- package/dist/components/NewComposition/RemInput.d.ts +1 -0
- package/dist/components/NewComposition/RemInput.js +8 -2
- package/dist/components/NewComposition/RemTextarea.d.ts +1 -0
- package/dist/components/NewComposition/RemTextarea.js +8 -2
- package/dist/components/NewComposition/ValidationMessage.d.ts +3 -0
- package/dist/components/NewComposition/ValidationMessage.js +16 -5
- package/dist/components/OptionsPanel.d.ts +1 -1
- package/dist/components/OptionsPanel.js +8 -17
- package/dist/components/QuickSwitcher/QuickSwitcherContent.js +2 -7
- package/dist/components/QuickSwitcher/QuickSwitcherResult.js +3 -10
- package/dist/components/QuickSwitcher/shared.d.ts +4 -0
- package/dist/components/QuickSwitcher/shared.js +24 -0
- package/dist/components/RenderModal/DataEditor.d.ts +29 -2
- package/dist/components/RenderModal/DataEditor.js +107 -56
- package/dist/components/RenderModal/RenderModalJSONPropsEditor.d.ts +1 -0
- package/dist/components/RenderModal/RenderModalJSONPropsEditor.js +25 -7
- package/dist/components/RenderModal/SchemaEditor/Fieldset.d.ts +2 -1
- package/dist/components/RenderModal/SchemaEditor/Fieldset.js +10 -5
- package/dist/components/RenderModal/SchemaEditor/SchemaEditor.d.ts +4 -0
- package/dist/components/RenderModal/SchemaEditor/SchemaEditor.js +27 -4
- package/dist/components/RenderModal/SchemaEditor/SchemaErrorMessages.d.ts +12 -4
- package/dist/components/RenderModal/SchemaEditor/SchemaErrorMessages.js +23 -9
- package/dist/components/RenderModal/SchemaEditor/SchemaLabel.js +3 -3
- package/dist/components/RenderModal/SchemaEditor/SchemaSeparationLine.js +8 -1
- package/dist/components/RenderModal/SchemaEditor/ZodColorEditor.js +1 -1
- package/dist/components/RenderModal/SchemaEditor/ZodDateEditor.js +1 -1
- package/dist/components/RenderModal/SchemaEditor/ZodDiscriminatedUnionEditor.js +1 -1
- package/dist/components/RenderModal/SchemaEditor/ZodEnumEditor.js +1 -1
- package/dist/components/RenderModal/SchemaEditor/ZodErrorMessages.d.ts +1 -0
- package/dist/components/RenderModal/SchemaEditor/ZodErrorMessages.js +23 -6
- package/dist/components/RenderModal/SchemaEditor/ZodFieldValidation.js +2 -2
- package/dist/components/RenderModal/SchemaEditor/ZodNonEditableValue.js +2 -1
- package/dist/components/RenderModal/SchemaEditor/ZodNumberEditor.js +1 -1
- package/dist/components/RenderModal/SchemaEditor/ZodObjectEditor.js +9 -11
- package/dist/components/RenderModal/SchemaEditor/ZodOrNullishEditor.js +1 -1
- package/dist/components/RenderModal/SchemaEditor/ZodStaticFileEditor.js +1 -1
- package/dist/components/RenderModal/SchemaEditor/ZodStringEditor.js +1 -1
- package/dist/components/RenderModal/SchemaEditor/ZodTextareaEditor.js +1 -1
- package/dist/components/RenderModal/WarningIndicatorButton.d.ts +1 -0
- package/dist/components/RenderModal/WarningIndicatorButton.js +17 -4
- package/dist/components/RenderModal/get-render-modal-warnings.d.ts +2 -1
- package/dist/components/RenderModal/get-render-modal-warnings.js +6 -3
- package/dist/components/RendersTab.js +1 -1
- package/dist/components/SegmentedControl.d.ts +3 -0
- package/dist/components/SegmentedControl.js +11 -5
- package/dist/components/SelectedOutlineElement.js +135 -31
- package/dist/components/SelectedOutlineOverlay.d.ts +1 -1
- package/dist/components/SelectedOutlineOverlay.js +45 -29
- package/dist/components/SelectedOutlineUvControls.d.ts +9 -0
- package/dist/components/SelectedOutlineUvControls.js +64 -10
- package/dist/components/Tabs/index.js +4 -4
- package/dist/components/Timeline/EasingEditorModal.d.ts +5 -4
- package/dist/components/Timeline/EasingEditorModal.js +597 -124
- package/dist/components/Timeline/KeyframeSettingsModal.d.ts +2 -2
- package/dist/components/Timeline/SubscribeToNodePaths.d.ts +2 -2
- package/dist/components/Timeline/TimelineClipboardKeybindings.d.ts +15 -3
- package/dist/components/Timeline/TimelineClipboardKeybindings.js +85 -1
- package/dist/components/Timeline/TimelineDeleteKeybindings.js +10 -3
- package/dist/components/Timeline/TimelineEffectItem.d.ts +2 -2
- package/dist/components/Timeline/TimelineEffectPropItem.d.ts +8 -0
- package/dist/components/Timeline/TimelineEffectPropItem.js +24 -20
- package/dist/components/Timeline/TimelineExpandedRow.d.ts +5 -2
- package/dist/components/Timeline/TimelineExpandedRow.js +4 -4
- package/dist/components/Timeline/TimelineExpandedSection.d.ts +1 -1
- package/dist/components/Timeline/TimelineExpandedSection.js +5 -19
- package/dist/components/Timeline/TimelineKeyframeControls.d.ts +8 -2
- package/dist/components/Timeline/TimelineKeyframeControls.js +24 -3
- package/dist/components/Timeline/TimelineKeyframeEasingLine.js +2 -47
- package/dist/components/Timeline/TimelineKeyframedValue.d.ts +1 -1
- package/dist/components/Timeline/TimelineKeyframedValue.js +8 -10
- package/dist/components/Timeline/TimelineNumberField.js +5 -11
- package/dist/components/Timeline/TimelineRotationField.js +5 -6
- package/dist/components/Timeline/TimelineScaleField.js +4 -8
- package/dist/components/Timeline/TimelineSelection.d.ts +6 -0
- package/dist/components/Timeline/TimelineSelection.js +109 -14
- package/dist/components/Timeline/TimelineSequence.js +22 -14
- package/dist/components/Timeline/TimelineSequenceItem.js +12 -67
- package/dist/components/Timeline/TimelineSequencePropItem.d.ts +12 -2
- package/dist/components/Timeline/TimelineSequencePropItem.js +56 -52
- package/dist/components/Timeline/TimelineTransformOriginField.js +4 -5
- package/dist/components/Timeline/TimelineTranslateField.js +4 -5
- package/dist/components/Timeline/TimelineUvCoordinateField.js +4 -4
- package/dist/components/Timeline/TimelineVideoInfo.d.ts +1 -0
- package/dist/components/Timeline/TimelineVideoInfo.js +93 -8
- package/dist/components/Timeline/call-add-keyframe.d.ts +4 -4
- package/dist/components/Timeline/call-delete-keyframe.d.ts +4 -4
- package/dist/components/Timeline/call-move-keyframe.d.ts +2 -2
- package/dist/components/Timeline/call-update-keyframe-settings.d.ts +3 -3
- package/dist/components/Timeline/delete-selected-timeline-item.d.ts +2 -1
- package/dist/components/Timeline/delete-selected-timeline-item.js +27 -1
- package/dist/components/Timeline/duplicate-selected-timeline-item.d.ts +7 -0
- package/dist/components/Timeline/duplicate-selected-timeline-item.js +32 -3
- package/dist/components/Timeline/parse-keyframe-field-from-node-path.js +2 -2
- package/dist/components/Timeline/reset-selected-timeline-props.d.ts +3 -3
- package/dist/components/Timeline/reset-selected-timeline-props.js +19 -5
- package/dist/components/Timeline/save-effect-prop.d.ts +2 -2
- package/dist/components/Timeline/save-sequence-prop.d.ts +2 -2
- package/dist/components/Timeline/sequence-props-subscription-store.d.ts +3 -3
- package/dist/components/Timeline/timeline-field-display-utils.d.ts +5 -0
- package/dist/components/Timeline/timeline-field-display-utils.js +244 -0
- package/dist/components/Timeline/timeline-video-filmstrip-times.d.ts +17 -0
- package/dist/components/Timeline/timeline-video-filmstrip-times.js +22 -0
- package/dist/components/Timeline/update-selected-easing.d.ts +47 -4
- package/dist/components/Timeline/update-selected-easing.js +40 -9
- package/dist/components/Timeline/use-sequence-freeze-frame-menu-item.d.ts +13 -0
- package/dist/components/Timeline/use-sequence-freeze-frame-menu-item.js +73 -0
- package/dist/components/Timeline/use-sequence-props-subscription.d.ts +3 -3
- package/dist/components/Timeline/use-timeline-expanded-tree.d.ts +11 -0
- package/dist/components/Timeline/use-timeline-expanded-tree.js +33 -0
- package/dist/components/VisualControls/VisualControlsContent.d.ts +1 -1
- package/dist/components/VisualControls/VisualControlsContent.js +4 -5
- package/dist/components/effect-drag-and-drop.d.ts +10 -0
- package/dist/components/effect-drag-and-drop.js +17 -8
- package/dist/components/effect-picker-search.d.ts +5 -0
- package/dist/components/effect-picker-search.js +77 -0
- package/dist/components/import-assets.d.ts +11 -2
- package/dist/components/import-assets.js +61 -6
- package/dist/components/selected-outline-drag.d.ts +44 -2
- package/dist/components/selected-outline-drag.js +74 -1
- package/dist/components/selected-outline-types.d.ts +7 -7
- package/dist/components/selected-outline-uv.d.ts +4 -3
- package/dist/components/selected-outline-uv.js +6 -2
- package/dist/error-overlay/remotion-overlay/Overlay.js +3 -0
- package/dist/esm/{chunk-t8fjnw2d.js → chunk-fge2mq5p.js} +17004 -13432
- package/dist/esm/internals.mjs +17004 -13432
- package/dist/esm/previewEntry.mjs +26617 -23041
- package/dist/esm/renderEntry.mjs +1 -1
- package/dist/helpers/editor-guide-selection.js +1 -1
- package/dist/helpers/get-preview-file-type.js +1 -1
- package/dist/helpers/render-codec-label.d.ts +2 -0
- package/dist/helpers/render-codec-label.js +49 -0
- package/dist/helpers/ruler-canvas-size.d.ts +5 -0
- package/dist/helpers/ruler-canvas-size.js +17 -0
- package/dist/helpers/timeline-layout.d.ts +4 -4
- package/dist/helpers/use-media-metadata.d.ts +8 -2
- package/dist/helpers/use-media-metadata.js +17 -4
- package/dist/state/modals.d.ts +9 -4
- package/package.json +12 -12
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.updateSelectedTimelineEasings = exports.getTimelineEasingValueForSelection = exports.getEasingSelections = void 0;
|
|
3
|
+
exports.updateSelectedTimelineEasings = exports.getTimelineEasingValueForSelection = exports.getEasingSelections = exports.makeEasingDragOverride = exports.getSelectedEasingUpdates = exports.getSelectedEasingUpdate = void 0;
|
|
4
|
+
const studio_shared_1 = require("@remotion/studio-shared");
|
|
4
5
|
const remotion_1 = require("remotion");
|
|
5
6
|
const call_update_keyframe_settings_1 = require("./call-update-keyframe-settings");
|
|
6
7
|
const find_track_for_node_path_info_1 = require("./find-track-for-node-path-info");
|
|
@@ -42,7 +43,8 @@ const getSelectedEasingUpdate = ({ selection, sequences, overrideIdsToNodePaths,
|
|
|
42
43
|
fieldKey: field.fieldKey,
|
|
43
44
|
schema: sequence.controls.schema,
|
|
44
45
|
segmentIndex: selection.segmentIndex,
|
|
45
|
-
currentEasing: (_c = sequencePropStatus.easing[selection.segmentIndex]) !== null && _c !== void 0 ? _c :
|
|
46
|
+
currentEasing: (_c = sequencePropStatus.easing[selection.segmentIndex]) !== null && _c !== void 0 ? _c : studio_shared_1.LINEAR_KEYFRAME_EASING,
|
|
47
|
+
propStatus: sequencePropStatus,
|
|
46
48
|
};
|
|
47
49
|
}
|
|
48
50
|
const effect = sequence.effects[field.effectIndex];
|
|
@@ -69,15 +71,46 @@ const getSelectedEasingUpdate = ({ selection, sequences, overrideIdsToNodePaths,
|
|
|
69
71
|
fieldKey: field.fieldKey,
|
|
70
72
|
schema: effect.schema,
|
|
71
73
|
segmentIndex: selection.segmentIndex,
|
|
72
|
-
currentEasing: (_d = effectPropStatus.easing[selection.segmentIndex]) !== null && _d !== void 0 ? _d :
|
|
74
|
+
currentEasing: (_d = effectPropStatus.easing[selection.segmentIndex]) !== null && _d !== void 0 ? _d : studio_shared_1.LINEAR_KEYFRAME_EASING,
|
|
75
|
+
propStatus: effectPropStatus,
|
|
73
76
|
};
|
|
74
77
|
};
|
|
78
|
+
exports.getSelectedEasingUpdate = getSelectedEasingUpdate;
|
|
79
|
+
const getSelectedEasingUpdates = ({ selections, sequences, overrideIdsToNodePaths, propStatuses, }) => {
|
|
80
|
+
return (0, exports.getEasingSelections)(selections)
|
|
81
|
+
.map((selection) => (0, exports.getSelectedEasingUpdate)({
|
|
82
|
+
selection,
|
|
83
|
+
sequences,
|
|
84
|
+
overrideIdsToNodePaths,
|
|
85
|
+
propStatuses,
|
|
86
|
+
}))
|
|
87
|
+
.filter((update) => update !== null);
|
|
88
|
+
};
|
|
89
|
+
exports.getSelectedEasingUpdates = getSelectedEasingUpdates;
|
|
90
|
+
const makeEasingDragOverride = ({ status, segmentIndex, easing, }) => {
|
|
91
|
+
const nextEasing = [...status.easing];
|
|
92
|
+
while (nextEasing.length < status.keyframes.length - 1) {
|
|
93
|
+
nextEasing.push(studio_shared_1.LINEAR_KEYFRAME_EASING);
|
|
94
|
+
}
|
|
95
|
+
if (nextEasing.length > status.keyframes.length - 1) {
|
|
96
|
+
nextEasing.length = status.keyframes.length - 1;
|
|
97
|
+
}
|
|
98
|
+
nextEasing[segmentIndex] = easing;
|
|
99
|
+
return {
|
|
100
|
+
type: 'keyframed',
|
|
101
|
+
status: {
|
|
102
|
+
...status,
|
|
103
|
+
easing: nextEasing,
|
|
104
|
+
},
|
|
105
|
+
};
|
|
106
|
+
};
|
|
107
|
+
exports.makeEasingDragOverride = makeEasingDragOverride;
|
|
75
108
|
const getEasingSelections = (selections) => selections.filter(isEasingSelection);
|
|
76
109
|
exports.getEasingSelections = getEasingSelections;
|
|
77
110
|
const getTimelineEasingValueForSelection = ({ selection, sequences, overrideIdsToNodePaths, propStatuses, }) => {
|
|
78
111
|
var _a;
|
|
79
112
|
var _b;
|
|
80
|
-
return ((_b = (_a = getSelectedEasingUpdate({
|
|
113
|
+
return ((_b = (_a = (0, exports.getSelectedEasingUpdate)({
|
|
81
114
|
selection,
|
|
82
115
|
sequences,
|
|
83
116
|
overrideIdsToNodePaths,
|
|
@@ -90,14 +123,12 @@ const updateSelectedTimelineEasings = ({ selections, sequences, overrideIdsToNod
|
|
|
90
123
|
if (easingSelections.length === 0) {
|
|
91
124
|
return null;
|
|
92
125
|
}
|
|
93
|
-
const updates =
|
|
94
|
-
|
|
95
|
-
selection,
|
|
126
|
+
const updates = (0, exports.getSelectedEasingUpdates)({
|
|
127
|
+
selections: easingSelections,
|
|
96
128
|
sequences,
|
|
97
129
|
overrideIdsToNodePaths,
|
|
98
130
|
propStatuses,
|
|
99
|
-
})
|
|
100
|
-
.filter((update) => update !== null);
|
|
131
|
+
});
|
|
101
132
|
if (updates.length === 0) {
|
|
102
133
|
return null;
|
|
103
134
|
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { CanUpdateSequencePropStatus, SequencePropsSubscriptionKey, TSequence } from 'remotion';
|
|
2
|
+
import type { ComboboxValue } from '../NewComposition/ComboBox';
|
|
3
|
+
import { type SetPropStatuses } from './save-sequence-prop';
|
|
4
|
+
export declare const useSequenceFreezeFrameMenuItem: ({ clientId, nodePath, propStatusesForOverride, sequence, sequenceFrameOffset, setPropStatuses, timelinePosition, validatedSource, }: {
|
|
5
|
+
readonly clientId: string | null;
|
|
6
|
+
readonly nodePath: SequencePropsSubscriptionKey | null;
|
|
7
|
+
readonly propStatusesForOverride: Record<string, CanUpdateSequencePropStatus> | undefined;
|
|
8
|
+
readonly sequence: TSequence;
|
|
9
|
+
readonly sequenceFrameOffset: number;
|
|
10
|
+
readonly setPropStatuses: SetPropStatuses;
|
|
11
|
+
readonly timelinePosition: number;
|
|
12
|
+
readonly validatedSource: string | null;
|
|
13
|
+
}) => ComboboxValue;
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.useSequenceFreezeFrameMenuItem = void 0;
|
|
4
|
+
const react_1 = require("react");
|
|
5
|
+
const save_sequence_prop_1 = require("./save-sequence-prop");
|
|
6
|
+
const useSequenceFreezeFrameMenuItem = ({ clientId, nodePath, propStatusesForOverride, sequence, sequenceFrameOffset, setPropStatuses, timelinePosition, validatedSource, }) => {
|
|
7
|
+
const freezeStatus = propStatusesForOverride === null || propStatusesForOverride === void 0 ? void 0 : propStatusesForOverride.freeze;
|
|
8
|
+
const isFrozen = (freezeStatus === null || freezeStatus === void 0 ? void 0 : freezeStatus.status) === 'static' &&
|
|
9
|
+
typeof freezeStatus.codeValue === 'number';
|
|
10
|
+
const canToggleFreeze = clientId !== null &&
|
|
11
|
+
Boolean(sequence.controls) &&
|
|
12
|
+
nodePath !== null &&
|
|
13
|
+
validatedSource !== null &&
|
|
14
|
+
freezeStatus !== undefined &&
|
|
15
|
+
freezeStatus !== null &&
|
|
16
|
+
freezeStatus.status === 'static';
|
|
17
|
+
const onToggleFreezeFrame = (0, react_1.useCallback)(() => {
|
|
18
|
+
if (!canToggleFreeze ||
|
|
19
|
+
!sequence.controls ||
|
|
20
|
+
nodePath === null ||
|
|
21
|
+
validatedSource === null ||
|
|
22
|
+
clientId === null) {
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
const rawFreezeFrame = Math.round(timelinePosition - sequence.from + sequenceFrameOffset);
|
|
26
|
+
const maxFrame = Number.isFinite(sequence.duration)
|
|
27
|
+
? Math.max(0, sequence.duration - 1)
|
|
28
|
+
: rawFreezeFrame;
|
|
29
|
+
const freezeFrame = Math.min(Math.max(0, rawFreezeFrame), maxFrame);
|
|
30
|
+
const remove = isFrozen;
|
|
31
|
+
(0, save_sequence_prop_1.saveSequenceProps)({
|
|
32
|
+
changes: [
|
|
33
|
+
{
|
|
34
|
+
fileName: validatedSource,
|
|
35
|
+
nodePath,
|
|
36
|
+
fieldKey: 'freeze',
|
|
37
|
+
value: remove ? null : freezeFrame,
|
|
38
|
+
defaultValue: null,
|
|
39
|
+
schema: sequence.controls.schema,
|
|
40
|
+
},
|
|
41
|
+
],
|
|
42
|
+
setPropStatuses,
|
|
43
|
+
clientId,
|
|
44
|
+
undoLabel: remove ? 'Unfreeze sequence' : 'Freeze sequence',
|
|
45
|
+
redoLabel: remove ? 'Freeze sequence again' : 'Unfreeze sequence again',
|
|
46
|
+
});
|
|
47
|
+
}, [
|
|
48
|
+
canToggleFreeze,
|
|
49
|
+
clientId,
|
|
50
|
+
isFrozen,
|
|
51
|
+
nodePath,
|
|
52
|
+
sequence.controls,
|
|
53
|
+
sequence.duration,
|
|
54
|
+
sequence.from,
|
|
55
|
+
sequenceFrameOffset,
|
|
56
|
+
setPropStatuses,
|
|
57
|
+
timelinePosition,
|
|
58
|
+
validatedSource,
|
|
59
|
+
]);
|
|
60
|
+
return (0, react_1.useMemo)(() => ({
|
|
61
|
+
type: 'item',
|
|
62
|
+
id: 'toggle-freeze-frame',
|
|
63
|
+
keyHint: null,
|
|
64
|
+
label: isFrozen ? 'Unfreeze frame' : 'Freeze frame',
|
|
65
|
+
leftItem: null,
|
|
66
|
+
disabled: !canToggleFreeze,
|
|
67
|
+
onClick: onToggleFreezeFrame,
|
|
68
|
+
quickSwitcherLabel: null,
|
|
69
|
+
subMenu: null,
|
|
70
|
+
value: 'toggle-freeze-frame',
|
|
71
|
+
}), [canToggleFreeze, isFrozen, onToggleFreezeFrame]);
|
|
72
|
+
};
|
|
73
|
+
exports.useSequenceFreezeFrameMenuItem = useSequenceFreezeFrameMenuItem;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { InteractivitySchema } from 'remotion';
|
|
2
2
|
import type { OriginalPosition } from '../../error-overlay/react-overlay/utils/get-source-map';
|
|
3
3
|
export declare const useSequencePropsSubscription: ({ originalLocation, overrideId, componentIdentity, schema, effects, }: {
|
|
4
4
|
overrideId: string;
|
|
5
5
|
componentIdentity: string | null;
|
|
6
|
-
schema:
|
|
7
|
-
effects:
|
|
6
|
+
schema: InteractivitySchema;
|
|
7
|
+
effects: InteractivitySchema[];
|
|
8
8
|
originalLocation: OriginalPosition | null;
|
|
9
9
|
}) => void;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type TSequence } from 'remotion';
|
|
2
|
+
import type { SequenceNodePathInfo } from '../../helpers/get-timeline-sequence-sort-key';
|
|
3
|
+
export declare const useTimelineExpandedTree: ({ sequence, nodePathInfo, }: {
|
|
4
|
+
readonly sequence: TSequence;
|
|
5
|
+
readonly nodePathInfo: SequenceNodePathInfo;
|
|
6
|
+
}) => {
|
|
7
|
+
getIsExpanded: import("../ExpandedTracksProvider").GetIsExpanded;
|
|
8
|
+
propStatuses: import("remotion").PropStatuses;
|
|
9
|
+
toggleTrack: (nodePathInfo: SequenceNodePathInfo) => void;
|
|
10
|
+
tree: import("../../helpers/timeline-layout").TimelineTreeNode[];
|
|
11
|
+
};
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.useTimelineExpandedTree = void 0;
|
|
4
|
+
const react_1 = require("react");
|
|
5
|
+
const remotion_1 = require("remotion");
|
|
6
|
+
const timeline_layout_1 = require("../../helpers/timeline-layout");
|
|
7
|
+
const ExpandedTracksProvider_1 = require("../ExpandedTracksProvider");
|
|
8
|
+
const useTimelineExpandedTree = ({ sequence, nodePathInfo, }) => {
|
|
9
|
+
const { getIsExpanded } = (0, react_1.useContext)(ExpandedTracksProvider_1.ExpandedTracksGetterContext);
|
|
10
|
+
const { toggleTrack } = (0, react_1.useContext)(ExpandedTracksProvider_1.ExpandedTracksSetterContext);
|
|
11
|
+
const { propStatuses: visualModePropStatuses } = (0, react_1.useContext)(remotion_1.Internals.VisualModePropStatusesContext);
|
|
12
|
+
const { getDragOverrides, getEffectDragOverrides } = (0, react_1.useContext)(remotion_1.Internals.VisualModeDragOverridesContext);
|
|
13
|
+
const tree = (0, react_1.useMemo)(() => (0, timeline_layout_1.buildTimelineTree)({
|
|
14
|
+
sequence,
|
|
15
|
+
nodePathInfo,
|
|
16
|
+
getDragOverrides,
|
|
17
|
+
getEffectDragOverrides,
|
|
18
|
+
propStatuses: visualModePropStatuses,
|
|
19
|
+
}), [
|
|
20
|
+
sequence,
|
|
21
|
+
nodePathInfo,
|
|
22
|
+
getDragOverrides,
|
|
23
|
+
getEffectDragOverrides,
|
|
24
|
+
visualModePropStatuses,
|
|
25
|
+
]);
|
|
26
|
+
return {
|
|
27
|
+
getIsExpanded,
|
|
28
|
+
propStatuses: visualModePropStatuses,
|
|
29
|
+
toggleTrack,
|
|
30
|
+
tree,
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
exports.useTimelineExpandedTree = useTimelineExpandedTree;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const VisualControlsContent: () => import("react/jsx-runtime").JSX.Element;
|
|
1
|
+
export declare const VisualControlsContent: () => import("react/jsx-runtime").JSX.Element | null;
|
|
@@ -37,16 +37,15 @@ exports.VisualControlsContent = void 0;
|
|
|
37
37
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
38
38
|
const react_1 = __importStar(require("react"));
|
|
39
39
|
const VisualControls_1 = require("../../visual-controls/VisualControls");
|
|
40
|
-
const is_menu_item_1 = require("../Menu/is-menu-item");
|
|
41
40
|
const SchemaSeparationLine_1 = require("../RenderModal/SchemaEditor/SchemaSeparationLine");
|
|
42
41
|
const VisualControlHandle_1 = require("./VisualControlHandle");
|
|
43
|
-
const container = {
|
|
44
|
-
overflowY: 'auto',
|
|
45
|
-
};
|
|
46
42
|
const VisualControlsContent = () => {
|
|
47
43
|
const { handles } = (0, react_1.useContext)(VisualControls_1.VisualControlsContext);
|
|
48
44
|
const entries = Object.entries(handles);
|
|
49
|
-
|
|
45
|
+
if (entries.length === 0) {
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
return (jsx_runtime_1.jsx("div", { children: entries.map(([key, value], i) => {
|
|
50
49
|
return (jsx_runtime_1.jsxs(react_1.default.Fragment, { children: [
|
|
51
50
|
jsx_runtime_1.jsx(VisualControlHandle_1.VisualControlHandle, { keyName: key, value: value }), i === entries.length - 1 ? null : jsx_runtime_1.jsx(SchemaSeparationLine_1.SchemaSeparationLine, {})] }, key));
|
|
52
51
|
}) }));
|
|
@@ -9,3 +9,13 @@ export declare const addEffectFromDragData: ({ clientId, dragData, fileName, nod
|
|
|
9
9
|
readonly fileName: string;
|
|
10
10
|
readonly nodePath: SequencePropsSubscriptionKey;
|
|
11
11
|
}) => Promise<void>;
|
|
12
|
+
export declare const addEffectToSequence: ({ clientId, effect, fileName, nodePath, }: {
|
|
13
|
+
readonly clientId: string;
|
|
14
|
+
readonly effect: {
|
|
15
|
+
name: string;
|
|
16
|
+
importPath: string;
|
|
17
|
+
config: Record<string, unknown>;
|
|
18
|
+
};
|
|
19
|
+
readonly fileName: string;
|
|
20
|
+
readonly nodePath: SequencePropsSubscriptionKey;
|
|
21
|
+
}) => Promise<void>;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.addEffectFromDragData = exports.getEffectDragData = exports.hasExplicitEffectDragType = exports.hasEffectDragType = void 0;
|
|
3
|
+
exports.addEffectToSequence = exports.addEffectFromDragData = exports.getEffectDragData = exports.hasExplicitEffectDragType = exports.hasEffectDragType = void 0;
|
|
4
4
|
const studio_shared_1 = require("@remotion/studio-shared");
|
|
5
5
|
const install_required_package_1 = require("../helpers/install-required-package");
|
|
6
6
|
const call_api_1 = require("./call-api");
|
|
@@ -47,20 +47,29 @@ const getEffectDragData = (dataTransfer) => {
|
|
|
47
47
|
return null;
|
|
48
48
|
};
|
|
49
49
|
exports.getEffectDragData = getEffectDragData;
|
|
50
|
-
const addEffectFromDragData =
|
|
50
|
+
const addEffectFromDragData = ({ clientId, dragData, fileName, nodePath, }) => {
|
|
51
|
+
return (0, exports.addEffectToSequence)({
|
|
52
|
+
clientId,
|
|
53
|
+
effect: dragData.effect,
|
|
54
|
+
fileName,
|
|
55
|
+
nodePath,
|
|
56
|
+
});
|
|
57
|
+
};
|
|
58
|
+
exports.addEffectFromDragData = addEffectFromDragData;
|
|
59
|
+
const addEffectToSequence = async ({ clientId, effect, fileName, nodePath, }) => {
|
|
51
60
|
try {
|
|
52
|
-
const requiredPackage = (0, studio_shared_1.getRequiredPackageForEffectImportPath)(
|
|
61
|
+
const requiredPackage = (0, studio_shared_1.getRequiredPackageForEffectImportPath)(effect.importPath);
|
|
53
62
|
await (0, install_required_package_1.installRequiredPackages)(requiredPackage ? [requiredPackage] : []);
|
|
54
63
|
const result = await (0, call_api_1.callApi)('/api/add-effect', {
|
|
55
64
|
fileName,
|
|
56
65
|
sequenceNodePath: nodePath,
|
|
57
|
-
effectName:
|
|
58
|
-
effectImportPath:
|
|
59
|
-
effectConfig:
|
|
66
|
+
effectName: effect.name,
|
|
67
|
+
effectImportPath: effect.importPath,
|
|
68
|
+
effectConfig: effect.config,
|
|
60
69
|
clientId,
|
|
61
70
|
});
|
|
62
71
|
if (result.success) {
|
|
63
|
-
(0, NotificationCenter_1.showNotification)(`Added ${
|
|
72
|
+
(0, NotificationCenter_1.showNotification)(`Added ${effect.name}()`, 2000);
|
|
64
73
|
}
|
|
65
74
|
else {
|
|
66
75
|
(0, NotificationCenter_1.showNotification)(result.reason, 4000);
|
|
@@ -70,4 +79,4 @@ const addEffectFromDragData = async ({ clientId, dragData, fileName, nodePath, }
|
|
|
70
79
|
(0, NotificationCenter_1.showNotification)(err.message, 4000);
|
|
71
80
|
}
|
|
72
81
|
};
|
|
73
|
-
exports.
|
|
82
|
+
exports.addEffectToSequence = addEffectToSequence;
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.filterEffectCatalog = void 0;
|
|
4
|
+
const normalize = (value) => value.trim().toLowerCase();
|
|
5
|
+
const compact = (value) => normalize(value).replace(/[^a-z0-9]/g, '');
|
|
6
|
+
const fuzzyMatches = (query, value) => {
|
|
7
|
+
let index = -1;
|
|
8
|
+
for (const character of query) {
|
|
9
|
+
index = value.indexOf(character, index + 1);
|
|
10
|
+
if (index === -1) {
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
return true;
|
|
15
|
+
};
|
|
16
|
+
const getMatchScore = (item, query) => {
|
|
17
|
+
const normalizedQuery = normalize(query);
|
|
18
|
+
const compactQuery = compact(query);
|
|
19
|
+
if (normalizedQuery.length === 0) {
|
|
20
|
+
return 0;
|
|
21
|
+
}
|
|
22
|
+
const label = normalize(item.label);
|
|
23
|
+
const name = normalize(item.effect.name);
|
|
24
|
+
const primary = [label, name];
|
|
25
|
+
const compactPrimary = primary.map(compact);
|
|
26
|
+
if (primary.some((field) => field === normalizedQuery)) {
|
|
27
|
+
return 0;
|
|
28
|
+
}
|
|
29
|
+
if (compactQuery.length > 0) {
|
|
30
|
+
if (compactPrimary.some((field) => field === compactQuery)) {
|
|
31
|
+
return 1;
|
|
32
|
+
}
|
|
33
|
+
if (compactPrimary.some((field) => field.startsWith(compactQuery))) {
|
|
34
|
+
return 2;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
if (primary.some((field) => field.startsWith(normalizedQuery))) {
|
|
38
|
+
return 2;
|
|
39
|
+
}
|
|
40
|
+
if (compactQuery.length > 0) {
|
|
41
|
+
if (compactPrimary.some((field) => field.includes(compactQuery))) {
|
|
42
|
+
return 3;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
if (primary.some((field) => field.includes(normalizedQuery))) {
|
|
46
|
+
return 3;
|
|
47
|
+
}
|
|
48
|
+
const importPath = normalize(item.effect.importPath);
|
|
49
|
+
if (importPath.includes(normalizedQuery) ||
|
|
50
|
+
(compactQuery.length > 0 && compact(importPath).includes(compactQuery))) {
|
|
51
|
+
return 4;
|
|
52
|
+
}
|
|
53
|
+
const secondary = [normalize(item.category), normalize(item.description)];
|
|
54
|
+
const compactSecondary = secondary.map(compact);
|
|
55
|
+
if (secondary.some((field) => field.includes(normalizedQuery)) ||
|
|
56
|
+
(compactQuery.length > 0 &&
|
|
57
|
+
compactSecondary.some((field) => field.includes(compactQuery)))) {
|
|
58
|
+
return 5;
|
|
59
|
+
}
|
|
60
|
+
if (compactQuery.length > 0 &&
|
|
61
|
+
compactPrimary.some((field) => fuzzyMatches(compactQuery, field))) {
|
|
62
|
+
return 6;
|
|
63
|
+
}
|
|
64
|
+
return null;
|
|
65
|
+
};
|
|
66
|
+
const filterEffectCatalog = ({ items, query, }) => {
|
|
67
|
+
return items
|
|
68
|
+
.map((item, index) => ({
|
|
69
|
+
item,
|
|
70
|
+
index,
|
|
71
|
+
score: getMatchScore(item, query),
|
|
72
|
+
}))
|
|
73
|
+
.filter((candidate) => candidate.score !== null)
|
|
74
|
+
.sort((a, b) => a.score - b.score || a.index - b.index)
|
|
75
|
+
.map(({ item }) => item);
|
|
76
|
+
};
|
|
77
|
+
exports.filterEffectCatalog = filterEffectCatalog;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { type ComponentProp, type FileType, type InsertableCompositionElementPosition } from '@remotion/studio-shared';
|
|
2
|
+
import type { Dimensions } from '../helpers/is-current-selected-still';
|
|
2
3
|
export type InsertElementDropPosition = {
|
|
3
4
|
readonly centerX: number;
|
|
4
5
|
readonly centerY: number;
|
|
@@ -8,7 +9,7 @@ export declare const getAssetElement: ({ fileType, src, }: {
|
|
|
8
9
|
src: string;
|
|
9
10
|
}) => {
|
|
10
11
|
type: "asset";
|
|
11
|
-
assetType: "audio" | "gif" | "image" | "video";
|
|
12
|
+
assetType: "animated-image" | "audio" | "gif" | "image" | "video";
|
|
12
13
|
src: string;
|
|
13
14
|
srcType: "remote" | "static";
|
|
14
15
|
dimensions: {
|
|
@@ -19,7 +20,7 @@ export declare const getAssetElement: ({ fileType, src, }: {
|
|
|
19
20
|
} | null;
|
|
20
21
|
export declare const getAssetElementFromPath: (assetPath: string) => {
|
|
21
22
|
type: "asset";
|
|
22
|
-
assetType: "audio" | "gif" | "image" | "video";
|
|
23
|
+
assetType: "animated-image" | "audio" | "gif" | "image" | "video";
|
|
23
24
|
src: string;
|
|
24
25
|
srcType: "remote" | "static";
|
|
25
26
|
dimensions: {
|
|
@@ -28,6 +29,13 @@ export declare const getAssetElementFromPath: (assetPath: string) => {
|
|
|
28
29
|
} | null;
|
|
29
30
|
position: InsertableCompositionElementPosition | null;
|
|
30
31
|
} | null;
|
|
32
|
+
export declare const getComponentDimensions: (component: {
|
|
33
|
+
componentName: string;
|
|
34
|
+
dimensions?: import("@remotion/studio-shared").ComponentDimensions | undefined;
|
|
35
|
+
importName: string;
|
|
36
|
+
importPath: string;
|
|
37
|
+
props: ComponentProp[];
|
|
38
|
+
}) => Dimensions | null;
|
|
31
39
|
export declare const pickFilesToImport: () => Promise<File[]>;
|
|
32
40
|
export declare const importAssets: ({ compositionFile, compositionId, dropPosition, files, }: {
|
|
33
41
|
compositionFile: string;
|
|
@@ -55,6 +63,7 @@ export declare const insertExistingAssets: ({ assetPaths, compositionFile, compo
|
|
|
55
63
|
export declare const insertComponent: ({ component, compositionFile, compositionId, dropPosition, }: {
|
|
56
64
|
component: {
|
|
57
65
|
componentName: string;
|
|
66
|
+
dimensions?: import("@remotion/studio-shared").ComponentDimensions | undefined;
|
|
58
67
|
importName: string;
|
|
59
68
|
importPath: string;
|
|
60
69
|
props: ComponentProp[];
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.insertComponent = exports.insertExistingAssets = exports.insertRemoteAudio = exports.importRemoteAsset = exports.importAssets = exports.pickFilesToImport = exports.getAssetElementFromPath = exports.getAssetElement = void 0;
|
|
3
|
+
exports.insertComponent = exports.insertExistingAssets = exports.insertRemoteAudio = exports.importRemoteAsset = exports.importAssets = exports.pickFilesToImport = exports.getComponentDimensions = exports.getAssetElementFromPath = exports.getAssetElement = void 0;
|
|
4
4
|
const media_utils_1 = require("@remotion/media-utils");
|
|
5
5
|
const studio_shared_1 = require("@remotion/studio-shared");
|
|
6
6
|
const remotion_1 = require("remotion");
|
|
@@ -23,6 +23,16 @@ const getAssetElement = ({ fileType, src, }) => {
|
|
|
23
23
|
position: null,
|
|
24
24
|
};
|
|
25
25
|
}
|
|
26
|
+
if (fileType.type === 'apng') {
|
|
27
|
+
return {
|
|
28
|
+
type: 'asset',
|
|
29
|
+
assetType: 'animated-image',
|
|
30
|
+
src,
|
|
31
|
+
srcType: 'static',
|
|
32
|
+
dimensions: fileType.dimensions,
|
|
33
|
+
position: null,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
26
36
|
if (fileType.type === 'gif') {
|
|
27
37
|
return {
|
|
28
38
|
type: 'asset',
|
|
@@ -81,6 +91,16 @@ const getAssetElementFromPath = (assetPath) => {
|
|
|
81
91
|
position: null,
|
|
82
92
|
};
|
|
83
93
|
}
|
|
94
|
+
if (extension === 'apng') {
|
|
95
|
+
return {
|
|
96
|
+
type: 'asset',
|
|
97
|
+
assetType: 'animated-image',
|
|
98
|
+
src: assetPath,
|
|
99
|
+
srcType: 'static',
|
|
100
|
+
dimensions: null,
|
|
101
|
+
position: null,
|
|
102
|
+
};
|
|
103
|
+
}
|
|
84
104
|
if (extension === 'gif') {
|
|
85
105
|
return {
|
|
86
106
|
type: 'asset',
|
|
@@ -127,6 +147,9 @@ const getAssetLabel = (element) => {
|
|
|
127
147
|
if (element.assetType === 'gif') {
|
|
128
148
|
return '<Gif>';
|
|
129
149
|
}
|
|
150
|
+
if (element.assetType === 'animated-image') {
|
|
151
|
+
return '<AnimatedImage>';
|
|
152
|
+
}
|
|
130
153
|
if (element.assetType === 'audio') {
|
|
131
154
|
return '<Audio>';
|
|
132
155
|
}
|
|
@@ -155,6 +178,9 @@ const getComponentPropNumber = (props, name) => {
|
|
|
155
178
|
return typeof (prop === null || prop === void 0 ? void 0 : prop.value) === 'number' ? prop.value : null;
|
|
156
179
|
};
|
|
157
180
|
const getComponentDimensions = (component) => {
|
|
181
|
+
if (component.dimensions) {
|
|
182
|
+
return component.dimensions;
|
|
183
|
+
}
|
|
158
184
|
const width = getComponentPropNumber(component.props, 'width');
|
|
159
185
|
const height = getComponentPropNumber(component.props, 'height');
|
|
160
186
|
if (width !== null && height !== null) {
|
|
@@ -166,6 +192,7 @@ const getComponentDimensions = (component) => {
|
|
|
166
192
|
}
|
|
167
193
|
return null;
|
|
168
194
|
};
|
|
195
|
+
exports.getComponentDimensions = getComponentDimensions;
|
|
169
196
|
const getImageDimensions = ({ revokeObjectUrl, src, }) => {
|
|
170
197
|
return new Promise((resolve, reject) => {
|
|
171
198
|
const image = new Image();
|
|
@@ -199,6 +226,7 @@ const getFileDimensions = async ({ file, fileType, }) => {
|
|
|
199
226
|
fileType.type === 'jpeg' ||
|
|
200
227
|
fileType.type === 'webp' ||
|
|
201
228
|
fileType.type === 'bmp' ||
|
|
229
|
+
fileType.type === 'apng' ||
|
|
202
230
|
fileType.type === 'gif') {
|
|
203
231
|
if (fileType.dimensions) {
|
|
204
232
|
return fileType.dimensions;
|
|
@@ -225,7 +253,7 @@ const getStaticAssetDimensions = (assetPath) => {
|
|
|
225
253
|
const extension = (_a = assetPath.split('.').pop()) === null || _a === void 0 ? void 0 : _a.toLowerCase();
|
|
226
254
|
const src = (0, remotion_1.staticFile)(assetPath);
|
|
227
255
|
if (extension &&
|
|
228
|
-
['png', 'jpg', 'jpeg', 'webp', 'bmp', 'gif'].includes(extension)) {
|
|
256
|
+
['png', 'jpg', 'jpeg', 'webp', 'bmp', 'gif', 'apng'].includes(extension)) {
|
|
229
257
|
return getImageDimensions({ revokeObjectUrl: false, src });
|
|
230
258
|
}
|
|
231
259
|
if (extension &&
|
|
@@ -250,6 +278,33 @@ const getStaticAssetDimensionsOrNull = async (assetPath) => {
|
|
|
250
278
|
return null;
|
|
251
279
|
}
|
|
252
280
|
};
|
|
281
|
+
const getStaticAssetFileType = async (assetPath) => {
|
|
282
|
+
var _a;
|
|
283
|
+
const extension = (_a = assetPath.split('.').pop()) === null || _a === void 0 ? void 0 : _a.toLowerCase();
|
|
284
|
+
if (extension !== 'png' && extension !== 'apng') {
|
|
285
|
+
return null;
|
|
286
|
+
}
|
|
287
|
+
try {
|
|
288
|
+
const response = await fetch((0, remotion_1.staticFile)(assetPath));
|
|
289
|
+
if (!response.ok) {
|
|
290
|
+
return null;
|
|
291
|
+
}
|
|
292
|
+
return (0, studio_shared_1.detectFileType)(new Uint8Array(await response.arrayBuffer()));
|
|
293
|
+
}
|
|
294
|
+
catch (_b) {
|
|
295
|
+
return null;
|
|
296
|
+
}
|
|
297
|
+
};
|
|
298
|
+
const getAssetElementFromStaticAsset = async (assetPath) => {
|
|
299
|
+
const fileType = await getStaticAssetFileType(assetPath);
|
|
300
|
+
if (fileType) {
|
|
301
|
+
const element = (0, exports.getAssetElement)({ fileType, src: assetPath });
|
|
302
|
+
if (element) {
|
|
303
|
+
return element;
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
return (0, exports.getAssetElementFromPath)(assetPath);
|
|
307
|
+
};
|
|
253
308
|
const pickFilesToImport = () => {
|
|
254
309
|
return new Promise((resolve) => {
|
|
255
310
|
const input = document.createElement('input');
|
|
@@ -456,18 +511,18 @@ const insertExistingAssets = async ({ assetPaths, compositionFile, compositionId
|
|
|
456
511
|
const unsupportedFiles = [];
|
|
457
512
|
try {
|
|
458
513
|
for (const assetPath of assetPaths) {
|
|
459
|
-
const element =
|
|
514
|
+
const element = await getAssetElementFromStaticAsset(assetPath);
|
|
460
515
|
if (element === null) {
|
|
461
516
|
unsupportedFiles.push(assetPath);
|
|
462
517
|
continue;
|
|
463
518
|
}
|
|
464
|
-
const dimensions = await getStaticAssetDimensionsOrNull(assetPath);
|
|
519
|
+
const dimensions = (_a = element.dimensions) !== null && _a !== void 0 ? _a : (await getStaticAssetDimensionsOrNull(assetPath));
|
|
465
520
|
const inserted = await insertAssetElement({
|
|
466
521
|
compositionFile,
|
|
467
522
|
compositionId,
|
|
468
523
|
element: {
|
|
469
524
|
...element,
|
|
470
|
-
dimensions
|
|
525
|
+
dimensions,
|
|
471
526
|
position: getCenteredPosition({
|
|
472
527
|
dimensions,
|
|
473
528
|
dropPosition,
|
|
@@ -499,7 +554,7 @@ const insertComponent = async ({ component, compositionFile, compositionId, drop
|
|
|
499
554
|
importPath: component.importPath,
|
|
500
555
|
props: component.props,
|
|
501
556
|
position: getCenteredPosition({
|
|
502
|
-
dimensions: getComponentDimensions(component),
|
|
557
|
+
dimensions: (0, exports.getComponentDimensions)(component),
|
|
503
558
|
dropPosition,
|
|
504
559
|
}),
|
|
505
560
|
},
|