@remotion/studio 4.0.513 → 4.0.514
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/Studio.js +2 -1
- package/dist/components/AskAiModal.js +1 -1
- package/dist/components/AssetSelector.js +2 -0
- package/dist/components/AssetSelectorItem.js +1 -2
- package/dist/components/AudioWaveform.d.ts +3 -0
- package/dist/components/AudioWaveform.js +55 -67
- package/dist/components/Canvas.js +40 -5
- package/dist/components/CanvasOrLoading.js +5 -0
- package/dist/components/CompositionSelector.js +2 -0
- package/dist/components/ConfigureDefaultEditorModal.js +17 -11
- package/dist/components/Editor.js +16 -1
- package/dist/components/ElementInstallConfirmation.d.ts +1 -0
- package/dist/components/ElementInstallConfirmation.js +4 -2
- package/dist/components/FixComputedValueModal.d.ts +9 -0
- package/dist/components/FixComputedValueModal.js +217 -0
- package/dist/components/InitialCompositionLoader.js +19 -0
- package/dist/components/InlineDropdown.js +4 -4
- package/dist/components/InspectorInfoHeader.js +3 -3
- package/dist/components/InspectorOpenInEditor.js +3 -1
- package/dist/components/InspectorPanel/CompositionInspector.js +11 -1
- package/dist/components/InspectorPanel/CompositionInspectorHeader.js +2 -2
- package/dist/components/InspectorPanel/ConnectedCompositionsSection.js +1 -1
- package/dist/components/InspectorPanel/EasingInspector.js +1 -1
- package/dist/components/InspectorPanel/KeyframeInspector.js +2 -2
- package/dist/components/InspectorPanel/SequenceInspectorHeader.js +1 -1
- package/dist/components/InspectorPanel/SequenceSelectionInspector.js +35 -6
- package/dist/components/InspectorPanel/common.d.ts +5 -5
- package/dist/components/InspectorPanel/common.js +8 -8
- package/dist/components/InspectorPanel/styles.d.ts +1 -1
- package/dist/components/InspectorPanel/styles.js +4 -2
- package/dist/components/InspectorSourceLocation.d.ts +1 -1
- package/dist/components/InspectorSourceLocation.js +2 -2
- package/dist/components/LicenseKeyValidation.js +2 -2
- package/dist/components/Modals.js +2 -1
- package/dist/components/NewComposition/CodemodFooter.d.ts +1 -0
- package/dist/components/NewComposition/CodemodFooter.js +10 -8
- package/dist/components/NewComposition/DeleteComposition.js +1 -1
- package/dist/components/NewComposition/DeleteFolder.js +1 -1
- package/dist/components/NewComposition/DuplicateComposition.js +7 -2
- package/dist/components/NewComposition/NewComposition.js +1 -1
- package/dist/components/NewComposition/NewFolder.js +1 -1
- package/dist/components/NewComposition/RenameComposition.js +1 -1
- package/dist/components/NewComposition/RenameFolder.js +1 -1
- package/dist/components/NewComposition/duplicate-composition-api.d.ts +16 -0
- package/dist/components/NewComposition/duplicate-composition-api.js +16 -0
- package/dist/components/NoRegisterRoot.js +1 -1
- package/dist/components/QuickSwitcher/ExplorerQuickSwitcherTrigger.js +4 -3
- package/dist/components/QuickSwitcher/QuickSwitcherContent.js +1 -0
- package/dist/components/QuickSwitcher/fuzzy-search.js +1 -1
- package/dist/components/RefreshCompositionOverlay.js +1 -1
- package/dist/components/RenderButton.js +6 -3
- package/dist/components/RenderModal/WebRenderModal.js +6 -2
- package/dist/components/RenderModal/WebRenderModalAdvanced.d.ts +2 -0
- package/dist/components/RenderModal/WebRenderModalAdvanced.js +9 -2
- package/dist/components/RenderModal/render-modals.js +5 -1
- package/dist/components/RenderQueue/ClientRenderQueueProcessor.js +5 -1
- package/dist/components/RenderQueue/actions.js +12 -2
- package/dist/components/RenderQueue/client-side-render-types.d.ts +1 -0
- package/dist/components/RenderingSettings.d.ts +2 -0
- package/dist/components/RenderingSettings.js +355 -0
- package/dist/components/SelectedOutlineElement.js +3 -3
- package/dist/components/SelectedOutlinePolygon.d.ts +1 -0
- package/dist/components/SelectedOutlinePolygon.js +53 -9
- package/dist/components/SettingsContext.d.ts +4 -1
- package/dist/components/SettingsContext.js +9 -2
- package/dist/components/SettingsModal.d.ts +1 -1
- package/dist/components/SettingsModal.js +10 -1
- package/dist/components/SettingsModalFooter.js +1 -1
- package/dist/components/StudioSettings.d.ts +2 -0
- package/dist/components/StudioSettings.js +185 -0
- package/dist/components/Timeline/LoopedIndicator.js +1 -1
- package/dist/components/Timeline/LoopedTimelineIndicators.d.ts +3 -0
- package/dist/components/Timeline/LoopedTimelineIndicators.js +22 -14
- package/dist/components/Timeline/Timeline.js +11 -9
- package/dist/components/Timeline/TimelineAssetField.d.ts +2 -2
- package/dist/components/Timeline/TimelineAssetField.js +1 -1
- package/dist/components/Timeline/TimelineDragHandler.js +62 -76
- package/dist/components/Timeline/TimelineEffectItem.js +1 -1
- package/dist/components/Timeline/TimelineEffectPropItem.d.ts +4 -2
- package/dist/components/Timeline/TimelineEffectPropItem.js +16 -11
- package/dist/components/Timeline/TimelineExpandedRow.d.ts +1 -1
- package/dist/components/Timeline/TimelineExpandedRow.js +4 -4
- package/dist/components/Timeline/TimelineExpandedSection.js +1 -1
- package/dist/components/Timeline/TimelineHeightContainer.d.ts +0 -4
- package/dist/components/Timeline/TimelineHeightContainer.js +4 -4
- package/dist/components/Timeline/TimelineImageInfo.d.ts +1 -0
- package/dist/components/Timeline/TimelineImageInfo.js +3 -2
- package/dist/components/Timeline/TimelineKeyframeControls.js +6 -1
- package/dist/components/Timeline/TimelineList.d.ts +1 -5
- package/dist/components/Timeline/TimelineList.js +14 -9
- package/dist/components/Timeline/TimelinePinchZoom.js +5 -5
- package/dist/components/Timeline/TimelineRowChrome.d.ts +0 -2
- package/dist/components/Timeline/TimelineRowChrome.js +12 -5
- package/dist/components/Timeline/TimelineSchemaField.d.ts +7 -3
- package/dist/components/Timeline/TimelineSchemaField.js +71 -13
- package/dist/components/Timeline/TimelineScrollable.js +3 -1
- package/dist/components/Timeline/TimelineSelection.d.ts +5 -2
- package/dist/components/Timeline/TimelineSelection.js +90 -103
- package/dist/components/Timeline/TimelineSequence.js +59 -25
- package/dist/components/Timeline/TimelineSequenceItem.d.ts +1 -1
- package/dist/components/Timeline/TimelineSequenceItem.js +15 -9
- package/dist/components/Timeline/TimelineSequencePropItem.d.ts +2 -1
- package/dist/components/Timeline/TimelineSequencePropItem.js +3 -3
- package/dist/components/Timeline/TimelineSequenceRightEdgeDragHandle.js +33 -10
- package/dist/components/Timeline/TimelineSlider.js +42 -33
- package/dist/components/Timeline/TimelineTimeIndicators.js +90 -98
- package/dist/components/Timeline/TimelineTracks.d.ts +0 -2
- package/dist/components/Timeline/TimelineTracks.js +11 -4
- package/dist/components/Timeline/TimelineTransformOriginField.js +1 -1
- package/dist/components/Timeline/TimelineVideoInfo.d.ts +4 -4
- package/dist/components/Timeline/TimelineVideoInfo.js +151 -61
- package/dist/components/Timeline/TimelineViewport.d.ts +12 -0
- package/dist/components/Timeline/TimelineViewport.js +62 -0
- package/dist/components/Timeline/TimelineVirtualization.d.ts +22 -0
- package/dist/components/Timeline/TimelineVirtualization.js +144 -0
- package/dist/components/Timeline/TimelineZoomControls.js +16 -8
- package/dist/components/Timeline/call-add-keyframe.js +31 -3
- package/dist/components/Timeline/call-delete-keyframe.js +13 -3
- package/dist/components/Timeline/call-move-keyframe.js +11 -1
- package/dist/components/Timeline/call-update-keyframe-settings.js +31 -3
- package/dist/components/Timeline/delete-selected-timeline-item.js +2 -1
- package/dist/components/Timeline/get-timeline-keyframes.d.ts +1 -2
- package/dist/components/Timeline/get-timeline-keyframes.js +1 -8
- package/dist/components/Timeline/get-timeline-sequence-visible-layout.d.ts +30 -0
- package/dist/components/Timeline/get-timeline-sequence-visible-layout.js +61 -0
- package/dist/components/Timeline/split-selected-timeline-item.js +2 -2
- package/dist/components/Timeline/timeline-scroll-logic.d.ts +24 -0
- package/dist/components/Timeline/timeline-scroll-logic.js +127 -4
- package/dist/components/Timeline/use-timeline-height.d.ts +3 -5
- package/dist/components/Timeline/use-timeline-height.js +16 -18
- package/dist/components/UpdateCheck.d.ts +2 -10
- package/dist/components/UpdateCheck.js +8 -2
- package/dist/components/VisualControls/VisualControlHandle.js +8 -0
- package/dist/components/delete-jsx-node-api.d.ts +2 -0
- package/dist/components/delete-jsx-node-api.js +12 -0
- package/dist/components/element-install-api.d.ts +3 -0
- package/dist/components/element-install-api.js +19 -0
- package/dist/components/import-assets.js +20 -9
- package/dist/components/reorder-sequence-api.d.ts +2 -0
- package/dist/components/reorder-sequence-api.js +12 -0
- package/dist/components/split-jsx-sequence-api.d.ts +2 -0
- package/dist/components/split-jsx-sequence-api.js +12 -0
- package/dist/components/split-video-from-audio-api.d.ts +2 -0
- package/dist/components/split-video-from-audio-api.js +12 -0
- package/dist/error-overlay/remotion-overlay/Overlay.js +1 -1
- package/dist/esm/{chunk-tv7r0jy3.js → chunk-xn2q7eem.js} +11073 -7495
- package/dist/esm/index.mjs +7 -5
- package/dist/esm/internals.mjs +11073 -7495
- package/dist/esm/previewEntry.mjs +10905 -7327
- package/dist/esm/renderEntry.mjs +2 -3
- package/dist/helpers/browser-studio-operations.d.ts +2 -0
- package/dist/helpers/browser-studio-operations.js +10 -1
- package/dist/helpers/get-timeline-max-zoom.d.ts +26 -0
- package/dist/helpers/get-timeline-max-zoom.js +45 -0
- package/dist/helpers/inject-css.js +2 -2
- package/dist/helpers/render-codec-label.d.ts +1 -1
- package/dist/helpers/retry-payload.js +1 -0
- package/dist/helpers/studio-runtime-config.d.ts +1 -1
- package/dist/helpers/studio-runtime-config.js +2 -3
- package/dist/helpers/timeline-layout.d.ts +3 -1
- package/dist/helpers/timeline-layout.js +6 -1
- package/dist/helpers/url-state.js +3 -2
- package/dist/helpers/use-menu-structure.js +1 -5
- package/dist/helpers/use-runtime-values.d.ts +2 -1
- package/dist/helpers/use-runtime-values.js +7 -3
- package/dist/icons/remotion-triangle.d.ts +2 -0
- package/dist/icons/remotion-triangle.js +7 -0
- package/dist/renderEntry.js +1 -1
- package/dist/state/composition-list.d.ts +13 -0
- package/dist/state/composition-list.js +21 -0
- package/dist/state/modals.d.ts +7 -1
- package/dist/state/timeline-zoom.d.ts +1 -2
- package/dist/state/timeline-zoom.js +9 -5
- package/package.json +14 -13
package/dist/Studio.js
CHANGED
|
@@ -12,13 +12,14 @@ const use_static_files_1 = require("./components/use-static-files");
|
|
|
12
12
|
const FastRefreshProvider_1 = require("./FastRefreshProvider");
|
|
13
13
|
const inject_css_1 = require("./helpers/inject-css");
|
|
14
14
|
const ResolveCompositionConfigInStudio_1 = require("./ResolveCompositionConfigInStudio");
|
|
15
|
+
const composition_list_1 = require("./state/composition-list");
|
|
15
16
|
const getServerDisconnectedDomElement = () => {
|
|
16
17
|
return document.getElementById('server-disconnected-overlay');
|
|
17
18
|
};
|
|
18
19
|
const StudioInner = ({ rootComponent, readOnly }) => {
|
|
19
20
|
var _a, _b, _c;
|
|
20
21
|
return (jsx_runtime_1.jsx(remotion_1.Internals.CompositionManagerProvider, { onlyRenderComposition: null, currentCompositionMetadata: null, initialCompositions: [], initialCanvasContent: null, children: jsx_runtime_1.jsx(remotion_1.Internals.RemotionRootContexts, { frameState: null, audioEnabled: window.remotion_audioEnabled, videoEnabled: window.remotion_videoEnabled, logLevel: (_a = window.remotion_logLevel) !== null && _a !== void 0 ? _a : 'info', numberOfAudioTags: window.remotion_numberOfAudioTags, audioLatencyHint: (_b = window.remotion_audioLatencyHint) !== null && _b !== void 0 ? _b : 'playback', previewSampleRate: window.remotion_previewSampleRate, _experimentalKeepAudioContextAlive: (_c = window.remotion_experimentalKeepAudioContextAlive) !== null && _c !== void 0 ? _c : false, children: jsx_runtime_1.jsx(use_static_files_1.StaticFilesProvider, { children: jsx_runtime_1.jsx(ResolveCompositionConfigInStudio_1.ResolveCompositionConfigInStudio, { children: jsx_runtime_1.jsxs(EditorContexts_1.EditorContexts, { children: [
|
|
21
|
-
jsx_runtime_1.jsx(Editor_1.Editor, { readOnlyStudio: readOnly, Root: rootComponent }), readOnly
|
|
22
|
+
jsx_runtime_1.jsx(composition_list_1.CompositionListProvider, { children: jsx_runtime_1.jsx(Editor_1.Editor, { readOnlyStudio: readOnly, Root: rootComponent }) }), readOnly
|
|
22
23
|
? null
|
|
23
24
|
: (0, react_dom_1.createPortal)(jsx_runtime_1.jsx(ServerDisconnected_1.ServerDisconnected, {}), getServerDisconnectedDomElement())] }) }) }) }) }));
|
|
24
25
|
};
|
|
@@ -63,7 +63,7 @@ const AskAiModal = () => {
|
|
|
63
63
|
if (state === 'never-opened') {
|
|
64
64
|
return null;
|
|
65
65
|
}
|
|
66
|
-
return (jsx_runtime_1.jsx(remotion_1.
|
|
66
|
+
return (jsx_runtime_1.jsx(remotion_1.Internals.AbsoluteFillElement, { style: { display: state === 'visible' ? 'block' : 'none' }, children: jsx_runtime_1.jsxs(ModalContainer_1.ModalContainer, { noZIndex: state === 'hidden', onOutsideClick: onQuit, onEscape: onQuit, children: [
|
|
67
67
|
jsx_runtime_1.jsx(ModalHeader_1.ModalHeader, { title: "Ask AI", onClose: onQuit }), jsx_runtime_1.jsx("iframe", { ref: iframe, frameBorder: 0, style: container, src: "https://www.remotion.dev/ai-embed", allow: "clipboard-read; clipboard-write" })
|
|
68
68
|
] }) }));
|
|
69
69
|
};
|
|
@@ -80,11 +80,10 @@ const itemStyle = {
|
|
|
80
80
|
alignItems: 'center',
|
|
81
81
|
marginBottom: 1,
|
|
82
82
|
marginLeft: 4,
|
|
83
|
-
marginRight: 4,
|
|
84
83
|
appearance: 'none',
|
|
85
84
|
border: 'none',
|
|
86
85
|
borderRadius: 4,
|
|
87
|
-
width: 'calc(100% -
|
|
86
|
+
width: 'calc(100% - 4px)',
|
|
88
87
|
textAlign: 'left',
|
|
89
88
|
backgroundColor: colors_1.BACKGROUND,
|
|
90
89
|
height: layout_1.COMPACT_CONTROL_ROW_HEIGHT,
|
|
@@ -6,8 +6,11 @@ export declare const AudioWaveform: React.NamedExoticComponent<{
|
|
|
6
6
|
readonly visualizationWidth: number;
|
|
7
7
|
readonly startFrom: number;
|
|
8
8
|
readonly durationInFrames: number;
|
|
9
|
+
readonly displayOffsetInFrames: number;
|
|
10
|
+
readonly displayDurationInFrames: number;
|
|
9
11
|
readonly volume: string | number;
|
|
10
12
|
readonly doesVolumeChange: boolean;
|
|
13
|
+
readonly muted: boolean;
|
|
11
14
|
readonly playbackRate: number;
|
|
12
15
|
readonly loopDisplay: LoopDisplay | undefined;
|
|
13
16
|
}>;
|
|
@@ -74,6 +74,8 @@ const waveformCanvasStyle = {
|
|
|
74
74
|
};
|
|
75
75
|
const volumeCanvasStyle = {
|
|
76
76
|
position: 'absolute',
|
|
77
|
+
width: '100%',
|
|
78
|
+
height: '100%',
|
|
77
79
|
};
|
|
78
80
|
const parseVolume = (volume) => {
|
|
79
81
|
if (typeof volume === 'number') {
|
|
@@ -81,35 +83,7 @@ const parseVolume = (volume) => {
|
|
|
81
83
|
}
|
|
82
84
|
return volume.split(',').map((v) => Number(v));
|
|
83
85
|
};
|
|
84
|
-
const
|
|
85
|
-
const h = canvas.height;
|
|
86
|
-
const w = Math.ceil(visualizationWidth);
|
|
87
|
-
const targetCanvas = document.createElement('canvas');
|
|
88
|
-
targetCanvas.width = Math.max(1, Math.ceil(loopWidth));
|
|
89
|
-
targetCanvas.height = h;
|
|
90
|
-
(0, timeline_utils_1.drawBars)({
|
|
91
|
-
canvas: targetCanvas,
|
|
92
|
-
peaks,
|
|
93
|
-
color: colors_1.WHITE_ALPHA_60,
|
|
94
|
-
volume,
|
|
95
|
-
width: targetCanvas.width,
|
|
96
|
-
});
|
|
97
|
-
canvas.width = w;
|
|
98
|
-
canvas.height = h;
|
|
99
|
-
const ctx = canvas.getContext('2d');
|
|
100
|
-
if (!ctx) {
|
|
101
|
-
throw new Error('Failed to get canvas context');
|
|
102
|
-
}
|
|
103
|
-
const pattern = ctx.createPattern(targetCanvas, 'repeat-x');
|
|
104
|
-
if (!pattern) {
|
|
105
|
-
return;
|
|
106
|
-
}
|
|
107
|
-
pattern.setTransform(new DOMMatrix().scaleSelf(loopWidth / targetCanvas.width, 1));
|
|
108
|
-
ctx.clearRect(0, 0, w, h);
|
|
109
|
-
ctx.fillStyle = pattern;
|
|
110
|
-
ctx.fillRect(0, 0, w, h);
|
|
111
|
-
};
|
|
112
|
-
const AudioWaveformInner = ({ src, height, startFrom, durationInFrames, visualizationWidth, volume, doesVolumeChange, playbackRate, loopDisplay, }) => {
|
|
86
|
+
const AudioWaveformInner = ({ src, height, startFrom, durationInFrames, displayOffsetInFrames, displayDurationInFrames, visualizationWidth, volume, doesVolumeChange, muted, playbackRate, loopDisplay, }) => {
|
|
113
87
|
const [peaks, setPeaks] = (0, react_1.useState)(null);
|
|
114
88
|
const [error, setError] = (0, react_1.useState)(null);
|
|
115
89
|
const [waveformCanvasKey, setWaveformCanvasKey] = (0, react_1.useState)(0);
|
|
@@ -125,6 +99,23 @@ const AudioWaveformInner = ({ src, height, startFrom, durationInFrames, visualiz
|
|
|
125
99
|
const latestRequestId = (0, react_1.useRef)(0);
|
|
126
100
|
const shouldRenderVolumeOverlay = doesVolumeChange && typeof volume === 'string';
|
|
127
101
|
const parsedVolume = (0, react_1.useMemo)(() => parseVolume(volume), [volume]);
|
|
102
|
+
const visibleVolume = (0, react_1.useMemo)(() => {
|
|
103
|
+
if (muted) {
|
|
104
|
+
return 0;
|
|
105
|
+
}
|
|
106
|
+
return (0, timeline_utils_1.getVisibleWaveformVolume)({
|
|
107
|
+
displayDurationInFrames,
|
|
108
|
+
displayOffsetInFrames,
|
|
109
|
+
loopDisplay,
|
|
110
|
+
volume: parsedVolume,
|
|
111
|
+
});
|
|
112
|
+
}, [
|
|
113
|
+
displayDurationInFrames,
|
|
114
|
+
displayOffsetInFrames,
|
|
115
|
+
loopDisplay,
|
|
116
|
+
muted,
|
|
117
|
+
parsedVolume,
|
|
118
|
+
]);
|
|
128
119
|
(0, react_1.useEffect)(() => {
|
|
129
120
|
if (canUseWorkerPath) {
|
|
130
121
|
return;
|
|
@@ -203,17 +194,20 @@ const AudioWaveformInner = ({ src, height, startFrom, durationInFrames, visualiz
|
|
|
203
194
|
if (canUseWorkerPath || !peaks) {
|
|
204
195
|
return null;
|
|
205
196
|
}
|
|
206
|
-
return (0, timeline_utils_1.
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
197
|
+
return (0, timeline_utils_1.sliceVisibleWaveformPeaks)({
|
|
198
|
+
displayDurationInFrames,
|
|
199
|
+
displayOffsetInFrames,
|
|
200
|
+
durationInFrames,
|
|
210
201
|
fps: vidConf.fps,
|
|
202
|
+
loopDisplay,
|
|
211
203
|
peaks,
|
|
212
204
|
playbackRate,
|
|
213
205
|
startFrom,
|
|
214
206
|
});
|
|
215
207
|
}, [
|
|
216
208
|
canUseWorkerPath,
|
|
209
|
+
displayDurationInFrames,
|
|
210
|
+
displayOffsetInFrames,
|
|
217
211
|
durationInFrames,
|
|
218
212
|
loopDisplay,
|
|
219
213
|
peaks,
|
|
@@ -226,8 +220,9 @@ const AudioWaveformInner = ({ src, height, startFrom, durationInFrames, visualiz
|
|
|
226
220
|
if (!canvasElement) {
|
|
227
221
|
return;
|
|
228
222
|
}
|
|
229
|
-
const
|
|
230
|
-
const
|
|
223
|
+
const pixelRatio = window.devicePixelRatio;
|
|
224
|
+
const h = Math.ceil(height * pixelRatio);
|
|
225
|
+
const w = Math.ceil(visualizationWidth * pixelRatio);
|
|
231
226
|
if (canUseWorkerPath) {
|
|
232
227
|
const worker = waveformWorker.current;
|
|
233
228
|
if (!worker || !hasTransferredCanvas.current) {
|
|
@@ -241,9 +236,11 @@ const AudioWaveformInner = ({ src, height, startFrom, durationInFrames, visualiz
|
|
|
241
236
|
src,
|
|
242
237
|
width: w,
|
|
243
238
|
height: h,
|
|
244
|
-
volume:
|
|
239
|
+
volume: visibleVolume,
|
|
245
240
|
startFrom,
|
|
246
241
|
durationInFrames,
|
|
242
|
+
displayOffsetInFrames,
|
|
243
|
+
displayDurationInFrames,
|
|
247
244
|
fps: vidConf.fps,
|
|
248
245
|
playbackRate,
|
|
249
246
|
loopDisplay,
|
|
@@ -253,39 +250,27 @@ const AudioWaveformInner = ({ src, height, startFrom, durationInFrames, visualiz
|
|
|
253
250
|
}
|
|
254
251
|
canvasElement.width = w;
|
|
255
252
|
canvasElement.height = h;
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
visualizationWidth,
|
|
264
|
-
loopDisplay,
|
|
265
|
-
}),
|
|
266
|
-
});
|
|
267
|
-
}
|
|
268
|
-
else {
|
|
269
|
-
(0, timeline_utils_1.drawBars)({
|
|
270
|
-
canvas: canvasElement,
|
|
271
|
-
peaks: portionPeaks !== null && portionPeaks !== void 0 ? portionPeaks : EMPTY_PEAKS,
|
|
272
|
-
color: colors_1.WHITE_ALPHA_60,
|
|
273
|
-
volume: parsedVolume,
|
|
274
|
-
width: w,
|
|
275
|
-
});
|
|
276
|
-
}
|
|
253
|
+
(0, timeline_utils_1.drawBars)({
|
|
254
|
+
canvas: canvasElement,
|
|
255
|
+
peaks: portionPeaks !== null && portionPeaks !== void 0 ? portionPeaks : EMPTY_PEAKS,
|
|
256
|
+
color: colors_1.WHITE_ALPHA_60,
|
|
257
|
+
volume: visibleVolume,
|
|
258
|
+
width: w,
|
|
259
|
+
});
|
|
277
260
|
}, [
|
|
278
261
|
canUseWorkerPath,
|
|
262
|
+
displayDurationInFrames,
|
|
263
|
+
displayOffsetInFrames,
|
|
279
264
|
durationInFrames,
|
|
280
265
|
height,
|
|
281
266
|
loopDisplay,
|
|
282
267
|
playbackRate,
|
|
283
|
-
parsedVolume,
|
|
284
268
|
portionPeaks,
|
|
285
269
|
src,
|
|
286
270
|
startFrom,
|
|
287
271
|
vidConf.fps,
|
|
288
272
|
visualizationWidth,
|
|
273
|
+
visibleVolume,
|
|
289
274
|
waveformCanvasKey,
|
|
290
275
|
]);
|
|
291
276
|
(0, react_1.useEffect)(() => {
|
|
@@ -296,24 +281,26 @@ const AudioWaveformInner = ({ src, height, startFrom, durationInFrames, visualiz
|
|
|
296
281
|
if (!volumeCanvasElement) {
|
|
297
282
|
return;
|
|
298
283
|
}
|
|
299
|
-
const
|
|
284
|
+
const pixelRatio = window.devicePixelRatio;
|
|
285
|
+
const h = Math.ceil(height * pixelRatio);
|
|
286
|
+
const w = Math.ceil(visualizationWidth * pixelRatio);
|
|
300
287
|
const context = volumeCanvasElement.getContext('2d');
|
|
301
288
|
if (!context) {
|
|
302
289
|
return;
|
|
303
290
|
}
|
|
304
|
-
volumeCanvasElement.width =
|
|
291
|
+
volumeCanvasElement.width = w;
|
|
305
292
|
volumeCanvasElement.height = h;
|
|
306
|
-
context.clearRect(0, 0,
|
|
307
|
-
if (!Array.isArray(
|
|
293
|
+
context.clearRect(0, 0, w, h);
|
|
294
|
+
if (!Array.isArray(visibleVolume)) {
|
|
308
295
|
return;
|
|
309
296
|
}
|
|
310
297
|
context.beginPath();
|
|
311
298
|
context.moveTo(0, h);
|
|
312
|
-
|
|
313
|
-
const x =
|
|
299
|
+
visibleVolume.forEach((v, index) => {
|
|
300
|
+
const x = visibleVolume.length <= 1
|
|
314
301
|
? 0
|
|
315
|
-
: (index / (
|
|
316
|
-
const y = (1 - v) * (h - timeline_layout_1.TIMELINE_BORDER * 2) +
|
|
302
|
+
: (index / (visibleVolume.length - 1)) * w;
|
|
303
|
+
const y = (1 - v) * (h - timeline_layout_1.TIMELINE_BORDER * 2 * pixelRatio) + pixelRatio;
|
|
317
304
|
if (index === 0) {
|
|
318
305
|
context.moveTo(x, y);
|
|
319
306
|
}
|
|
@@ -322,8 +309,9 @@ const AudioWaveformInner = ({ src, height, startFrom, durationInFrames, visualiz
|
|
|
322
309
|
}
|
|
323
310
|
});
|
|
324
311
|
context.strokeStyle = colors_1.WHITE_ALPHA_70;
|
|
312
|
+
context.lineWidth = pixelRatio;
|
|
325
313
|
context.stroke();
|
|
326
|
-
}, [height,
|
|
314
|
+
}, [height, shouldRenderVolumeOverlay, visibleVolume, visualizationWidth]);
|
|
327
315
|
if (error) {
|
|
328
316
|
return null;
|
|
329
317
|
}
|
|
@@ -9,6 +9,7 @@ const studio_protocol_1 = require("@remotion/studio-protocol");
|
|
|
9
9
|
const react_1 = require("react");
|
|
10
10
|
const remotion_1 = require("remotion");
|
|
11
11
|
const get_static_files_1 = require("../api/get-static-files");
|
|
12
|
+
const browser_studio_operations_1 = require("../helpers/browser-studio-operations");
|
|
12
13
|
const client_id_1 = require("../helpers/client-id");
|
|
13
14
|
const clipboard_figma_1 = require("../helpers/clipboard-figma");
|
|
14
15
|
const clipboard_images_1 = require("../helpers/clipboard-images");
|
|
@@ -35,6 +36,7 @@ const EditorGuides_1 = __importDefault(require("./EditorGuides"));
|
|
|
35
36
|
const EditorRuler_1 = require("./EditorRuler");
|
|
36
37
|
const use_is_ruler_visible_1 = require("./EditorRuler/use-is-ruler-visible");
|
|
37
38
|
const effect_drag_and_drop_1 = require("./effect-drag-and-drop");
|
|
39
|
+
const element_install_api_1 = require("./element-install-api");
|
|
38
40
|
const element_install_request_1 = require("./element-install-request");
|
|
39
41
|
const ElementInstallConfirmation_1 = require("./ElementInstallConfirmation");
|
|
40
42
|
const handle_drop_1 = require("./handle-drop");
|
|
@@ -618,6 +620,33 @@ const Canvas = ({ canvasContent, size }) => {
|
|
|
618
620
|
setPendingElementInstallRequests((requests) => [...requests, request]);
|
|
619
621
|
});
|
|
620
622
|
}, []);
|
|
623
|
+
(0, react_1.useEffect)(() => {
|
|
624
|
+
var _a;
|
|
625
|
+
var _b;
|
|
626
|
+
if (!canInstallElements ||
|
|
627
|
+
compositionFile === null ||
|
|
628
|
+
currentCompositionId === null) {
|
|
629
|
+
return;
|
|
630
|
+
}
|
|
631
|
+
const initialElement = (_b = (_a = (0, browser_studio_operations_1.getBrowserStudioOperations)()) === null || _a === void 0 ? void 0 : _a.consumeInitialElement()) !== null && _b !== void 0 ? _b : null;
|
|
632
|
+
if (initialElement === null) {
|
|
633
|
+
return;
|
|
634
|
+
}
|
|
635
|
+
(0, element_install_request_1.enqueueElementInstallRequest)({
|
|
636
|
+
clientId: 'browser-studio',
|
|
637
|
+
compositionFile,
|
|
638
|
+
compositionId: currentCompositionId,
|
|
639
|
+
createdAt: Date.now(),
|
|
640
|
+
element: initialElement.element,
|
|
641
|
+
from: null,
|
|
642
|
+
id: crypto.randomUUID(),
|
|
643
|
+
position: null,
|
|
644
|
+
source: {
|
|
645
|
+
origin: initialElement.sourceOrigin,
|
|
646
|
+
type: 'browser-studio-link',
|
|
647
|
+
},
|
|
648
|
+
});
|
|
649
|
+
}, [canInstallElements, compositionFile, currentCompositionId]);
|
|
621
650
|
(0, react_1.useEffect)(() => {
|
|
622
651
|
if (activeElementInstallRequest !== null ||
|
|
623
652
|
pendingElementInstallRequests.length === 0) {
|
|
@@ -636,8 +665,9 @@ const Canvas = ({ canvasContent, size }) => {
|
|
|
636
665
|
}
|
|
637
666
|
let canceled = false;
|
|
638
667
|
const handleInstallRequest = async () => {
|
|
668
|
+
var _a;
|
|
639
669
|
setInstallingElementName(activeElementInstallRequest.element.displayName);
|
|
640
|
-
const preflight = await (0,
|
|
670
|
+
const preflight = await (0, element_install_api_1.prepareElementInstall)({
|
|
641
671
|
compositionFile: activeElementInstallRequest.compositionFile,
|
|
642
672
|
compositionId: activeElementInstallRequest.compositionId,
|
|
643
673
|
element: activeElementInstallRequest.element,
|
|
@@ -661,12 +691,17 @@ const Canvas = ({ canvasContent, size }) => {
|
|
|
661
691
|
.map((dependency) => dependency.version === null
|
|
662
692
|
? dependency.name
|
|
663
693
|
: `${dependency.name}@${dependency.version}`);
|
|
664
|
-
const
|
|
665
|
-
|
|
666
|
-
|
|
694
|
+
const { source } = activeElementInstallRequest;
|
|
695
|
+
const sourceLabel = source.type === 'studio-protocol'
|
|
696
|
+
? source.origin
|
|
697
|
+
: source.type === 'browser-studio-link'
|
|
698
|
+
? ((_a = source.origin) !== null && _a !== void 0 ? _a : 'Unverified Browser Studio link')
|
|
699
|
+
: 'Unverified drag-and-drop payload';
|
|
700
|
+
const sourceIsUnverified = source.type === 'drag-and-drop' ||
|
|
701
|
+
(source.type === 'browser-studio-link' && source.origin === null);
|
|
667
702
|
const accepted = await confirm({
|
|
668
703
|
title: 'Install Element',
|
|
669
|
-
message: (jsx_runtime_1.jsx(ElementInstallConfirmation_1.ElementInstallConfirmation, { displayName: activeElementInstallRequest.element.displayName, sourceLabel: sourceLabel, sourceIsUnverified:
|
|
704
|
+
message: (jsx_runtime_1.jsx(ElementInstallConfirmation_1.ElementInstallConfirmation, { displayName: activeElementInstallRequest.element.displayName, sourceLabel: sourceLabel, sourceIsUnverified: sourceIsUnverified, compositionId: activeElementInstallRequest.compositionId, filePath: preflight.plan.filePath, overwritesExistingFile: preflight.plan.expectedFileState.exists, dependenciesToReview: dependenciesToReview, missingPackages: missingPackages, sourceCode: activeElementInstallRequest.element.sourceCode, usesBrowserDependencyResolution: (0, browser_studio_operations_1.getBrowserStudioOperations)() !== null })),
|
|
670
705
|
confirmLabel: 'Install',
|
|
671
706
|
cancelLabel: 'Cancel',
|
|
672
707
|
});
|
|
@@ -6,6 +6,7 @@ const react_1 = require("react");
|
|
|
6
6
|
const remotion_1 = require("remotion");
|
|
7
7
|
const ErrorLoader_1 = require("../error-overlay/remotion-overlay/ErrorLoader");
|
|
8
8
|
const colors_1 = require("../helpers/colors");
|
|
9
|
+
const composition_list_1 = require("../state/composition-list");
|
|
9
10
|
const timeline_zoom_1 = require("../state/timeline-zoom");
|
|
10
11
|
const Canvas_1 = require("./Canvas");
|
|
11
12
|
const FramePersistor_1 = require("./FramePersistor");
|
|
@@ -29,6 +30,7 @@ const CanvasOrLoading = ({ size }) => {
|
|
|
29
30
|
const resolved = remotion_1.Internals.useResolvedVideoConfig(null);
|
|
30
31
|
const { setZoom } = (0, react_1.useContext)(timeline_zoom_1.TimelineZoomCtx);
|
|
31
32
|
const { canvasContent } = (0, react_1.useContext)(remotion_1.Internals.CompositionManager);
|
|
33
|
+
const { compositionListState } = (0, react_1.useContext)(composition_list_1.CompositionListContext);
|
|
32
34
|
const { error: renderError } = (0, react_1.useContext)(RenderErrorContext_1.RenderErrorContext);
|
|
33
35
|
(0, react_1.useEffect)(() => {
|
|
34
36
|
if ((resolved === null || resolved === void 0 ? void 0 : resolved.type) !== 'success' &&
|
|
@@ -48,6 +50,9 @@ const CanvasOrLoading = ({ size }) => {
|
|
|
48
50
|
return (jsx_runtime_1.jsx(ErrorLoading, { error: renderError, calculateMetadataContext: false }));
|
|
49
51
|
}
|
|
50
52
|
if (!canvasContent) {
|
|
53
|
+
if (compositionListState !== 'ready') {
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
51
56
|
const compname = window.location.pathname.replace('/', '');
|
|
52
57
|
return (jsx_runtime_1.jsx("div", { style: container, className: "css-reset", children: jsx_runtime_1.jsxs("div", { style: RunningCalculateMetadata_1.loaderLabel, children: ["Composition with ID ", compname, " not found."] }) }));
|
|
53
58
|
}
|
|
@@ -10,6 +10,7 @@ const CodingAgentIcon_1 = require("./CodingAgentIcon");
|
|
|
10
10
|
const layout_1 = require("./layout");
|
|
11
11
|
const ComboBox_1 = require("./NewComposition/ComboBox");
|
|
12
12
|
const ValidationMessage_1 = require("./NewComposition/ValidationMessage");
|
|
13
|
+
const layout_2 = require("./RenderModal/layout");
|
|
13
14
|
const SettingsContext_1 = require("./SettingsContext");
|
|
14
15
|
const use_auto_save_config_1 = require("./use-auto-save-config");
|
|
15
16
|
const container = {
|
|
@@ -20,7 +21,6 @@ const container = {
|
|
|
20
21
|
};
|
|
21
22
|
const content = {
|
|
22
23
|
flex: 1,
|
|
23
|
-
padding: 16,
|
|
24
24
|
};
|
|
25
25
|
const description = {
|
|
26
26
|
color: colors_1.LIGHT_TEXT,
|
|
@@ -29,16 +29,18 @@ const description = {
|
|
|
29
29
|
lineHeight: 1.5,
|
|
30
30
|
margin: 0,
|
|
31
31
|
};
|
|
32
|
-
const title = {
|
|
33
|
-
color: colors_1.LIGHT_TEXT,
|
|
34
|
-
fontFamily: 'sans-serif',
|
|
35
|
-
fontSize: 14,
|
|
36
|
-
lineHeight: 1.5,
|
|
37
|
-
margin: 0,
|
|
38
|
-
};
|
|
39
32
|
const comboBoxStyle = {
|
|
40
33
|
boxSizing: 'border-box',
|
|
41
|
-
width:
|
|
34
|
+
width: 180,
|
|
35
|
+
};
|
|
36
|
+
const rightDescription = {
|
|
37
|
+
...description,
|
|
38
|
+
textAlign: 'right',
|
|
39
|
+
};
|
|
40
|
+
const rightColumn = {
|
|
41
|
+
...layout_2.rightRow,
|
|
42
|
+
alignItems: 'flex-end',
|
|
43
|
+
flexDirection: 'column',
|
|
42
44
|
};
|
|
43
45
|
const appLabel = {
|
|
44
46
|
display: 'flex',
|
|
@@ -192,8 +194,12 @@ const DefaultEditorSettings = () => {
|
|
|
192
194
|
});
|
|
193
195
|
const displayedError = error !== null && error !== void 0 ? error : settingsError;
|
|
194
196
|
return (jsx_runtime_1.jsx("div", { style: container, children: jsx_runtime_1.jsxs("div", { style: content, children: [
|
|
195
|
-
jsx_runtime_1.
|
|
196
|
-
jsx_runtime_1.jsx(
|
|
197
|
+
jsx_runtime_1.jsxs("div", { style: layout_2.optionRow, children: [
|
|
198
|
+
jsx_runtime_1.jsx("div", { style: layout_2.label, children: "Default editor" }), jsx_runtime_1.jsxs("div", { style: rightColumn, children: [editorInfo === null && displayedError === null ? (jsx_runtime_1.jsx("p", { style: rightDescription, children: "Loading installed editors..." })) : null, (editorInfo === null || editorInfo === void 0 ? void 0 : editorInfo.installedEditors.length) === 0 ? (jsx_runtime_1.jsx("p", { style: rightDescription, children: "No supported editors were found on this computer." })) : null, editorInfo === null ? null : (jsx_runtime_1.jsx(ComboBox_1.Combobox, { values: editorValues, selectedId: selectedEditor !== null && selectedEditor !== void 0 ? selectedEditor : NO_PREFERENCE_ID, style: comboBoxStyle, title: "Default editor" }))] })
|
|
199
|
+
] }), jsx_runtime_1.jsxs("div", { style: layout_2.optionRow, children: [
|
|
200
|
+
jsx_runtime_1.jsx("div", { style: layout_2.label, children: "Default coding agent" }), jsx_runtime_1.jsxs("div", { style: rightColumn, children: [codingAgentInfo === null && displayedError === null ? (jsx_runtime_1.jsx("p", { style: rightDescription, children: "Loading installed coding agents..." })) : null, (codingAgentInfo === null || codingAgentInfo === void 0 ? void 0 : codingAgentInfo.installedCodingAgents.length) === 0 ? (jsx_runtime_1.jsx("p", { style: rightDescription, children: "No supported coding agents were found on this computer." })) : null, codingAgentInfo === null ? null : (jsx_runtime_1.jsx(ComboBox_1.Combobox, { values: codingAgentValues, selectedId: selectedCodingAgent !== null && selectedCodingAgent !== void 0 ? selectedCodingAgent : NO_PREFERENCE_ID, style: comboBoxStyle, title: "Default coding agent" }))] })
|
|
201
|
+
] }), displayedError ? (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
|
|
202
|
+
jsx_runtime_1.jsx(layout_1.Spacing, { y: 1.5 }), jsx_runtime_1.jsx("div", { style: { paddingLeft: 16, paddingRight: 16 }, children: jsx_runtime_1.jsx(ValidationMessage_1.ValidationMessage, { message: displayedError, align: "flex-start", type: "error" }) })
|
|
197
203
|
] })) : null] }) }));
|
|
198
204
|
};
|
|
199
205
|
exports.DefaultEditorSettings = DefaultEditorSettings;
|
|
@@ -44,6 +44,7 @@ const noop_1 = require("../helpers/noop");
|
|
|
44
44
|
const studio_fit_padding_1 = require("../helpers/studio-fit-padding");
|
|
45
45
|
const studio_runtime_config_1 = require("../helpers/studio-runtime-config");
|
|
46
46
|
const canvas_ref_1 = require("../state/canvas-ref");
|
|
47
|
+
const composition_list_1 = require("../state/composition-list");
|
|
47
48
|
const scale_lock_1 = require("../state/scale-lock");
|
|
48
49
|
const timeline_zoom_1 = require("../state/timeline-zoom");
|
|
49
50
|
const z_index_1 = require("../state/z-index");
|
|
@@ -62,6 +63,20 @@ const background = {
|
|
|
62
63
|
flexDirection: 'column',
|
|
63
64
|
position: 'absolute',
|
|
64
65
|
};
|
|
66
|
+
const RootCompositionLoader = ({ Root }) => {
|
|
67
|
+
return (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
|
|
68
|
+
jsx_runtime_1.jsx(Root, {}), jsx_runtime_1.jsx(CompositionListRenderMarker, {})
|
|
69
|
+
] }));
|
|
70
|
+
};
|
|
71
|
+
const CompositionListRenderMarker = () => {
|
|
72
|
+
(0, react_1.useLayoutEffect)(() => {
|
|
73
|
+
composition_list_1.compositionListRenderedRef.current = true;
|
|
74
|
+
return () => {
|
|
75
|
+
composition_list_1.compositionListRenderedRef.current = false;
|
|
76
|
+
};
|
|
77
|
+
}, []);
|
|
78
|
+
return null;
|
|
79
|
+
};
|
|
65
80
|
const Editor = ({ Root, readOnlyStudio }) => {
|
|
66
81
|
(0, client_id_1.useStudioConfigRevision)();
|
|
67
82
|
const [drawElement, setDrawElement] = (0, react_1.useState)(null);
|
|
@@ -97,7 +112,7 @@ const Editor = ({ Root, readOnlyStudio }) => {
|
|
|
97
112
|
return (jsx_runtime_1.jsx(z_index_1.HigherZIndex, { onEscape: noop_1.noop, onOutsideClick: noop_1.noop, children: jsx_runtime_1.jsx(timeline_zoom_1.TimelineZoomContext, { children: jsx_runtime_1.jsxs(SequencePropsSubscriptionProvider_1.SequencePropsSubscriptionProvider, { children: [
|
|
98
113
|
jsx_runtime_1.jsxs(remotion_1.Internals.CurrentScaleContext.Provider, { value: value, children: [
|
|
99
114
|
jsx_runtime_1.jsx(ForceSpecificCursor_1.ForceSpecificCursor, {}), jsx_runtime_1.jsx(scale_lock_1.ScaleLockProvider, { children: jsx_runtime_1.jsxs("div", { style: background, children: [
|
|
100
|
-
jsx_runtime_1.jsx(remotion_1.Internals.CompositionRenderErrorContext.Provider, { value: compositionRenderErrorContextValue, children: canvasMounted ? jsx_runtime_1.jsx(
|
|
115
|
+
jsx_runtime_1.jsx(remotion_1.Internals.CompositionRenderErrorContext.Provider, { value: compositionRenderErrorContextValue, children: canvasMounted ? (jsx_runtime_1.jsx(RootCompositionLoader, { Root: MemoRoot })) : null }), jsx_runtime_1.jsx(remotion_1.Internals.CanUseRemotionHooksProvider, { children: jsx_runtime_1.jsx(RenderErrorContext_1.RenderErrorContext.Provider, { value: renderErrorContextValue, children: jsx_runtime_1.jsx(EditorContent_1.EditorContent, { readOnlyStudio: readOnlyStudio, children: jsx_runtime_1.jsx(TopPanel_1.TopPanel, { drawRef: setDrawRef, bufferStateDelayInMilliseconds: (0, studio_runtime_config_1.getStudioBufferStateDelayInMilliseconds)(), onMounted: onMounted, readOnlyStudio: readOnlyStudio }) }) }) })
|
|
101
116
|
] }) })
|
|
102
117
|
] }), jsx_runtime_1.jsx(Modals_1.Modals, { readOnlyStudio: readOnlyStudio }), jsx_runtime_1.jsx(NotificationCenter_1.NotificationCenter, {})
|
|
103
118
|
] }) }) }));
|
|
@@ -171,7 +171,7 @@ const makeSourceControlsVisible = (sourceCode) => {
|
|
|
171
171
|
return `\\u${(_a = character.codePointAt(0)) === null || _a === void 0 ? void 0 : _a.toString(16).padStart(4, '0')}`;
|
|
172
172
|
});
|
|
173
173
|
};
|
|
174
|
-
const ElementInstallConfirmation = ({ displayName, sourceLabel, sourceIsUnverified, compositionId, filePath, overwritesExistingFile, dependenciesToReview, missingPackages, sourceCode, }) => {
|
|
174
|
+
const ElementInstallConfirmation = ({ displayName, sourceLabel, sourceIsUnverified, compositionId, filePath, overwritesExistingFile, dependenciesToReview, missingPackages, sourceCode, usesBrowserDependencyResolution, }) => {
|
|
175
175
|
return (jsx_runtime_1.jsxs("div", { style: container, children: [
|
|
176
176
|
jsx_runtime_1.jsxs("dl", { style: metadataStyle, "aria-label": "Installation details", children: [
|
|
177
177
|
jsx_runtime_1.jsxs("div", { style: metadataRowStyle, children: [
|
|
@@ -196,7 +196,9 @@ const ElementInstallConfirmation = ({ displayName, sourceLabel, sourceIsUnverifi
|
|
|
196
196
|
] }, packageName));
|
|
197
197
|
}) })
|
|
198
198
|
] })) : null, jsx_runtime_1.jsxs("div", { style: warningStyle, children: [
|
|
199
|
-
jsx_runtime_1.jsx(ValidationMessage_1.WarningTriangle, { style: warningIconStyle }), jsx_runtime_1.
|
|
199
|
+
jsx_runtime_1.jsx(ValidationMessage_1.WarningTriangle, { style: warningIconStyle }), jsx_runtime_1.jsxs("p", { style: warningDescriptionStyle, children: ["This adds executable source code to your project.", usesBrowserDependencyResolution
|
|
200
|
+
? null
|
|
201
|
+
: ' Package lifecycle scripts may also run during installation, with access to your files and the network.'] })
|
|
200
202
|
] }), jsx_runtime_1.jsxs("details", { style: sourceDetailsStyle, children: [
|
|
201
203
|
jsx_runtime_1.jsx("summary", { style: sourceSummaryStyle, children: "Source code" }), jsx_runtime_1.jsx("pre", { style: sourceCodeBlockStyle, children: jsx_runtime_1.jsx("code", { style: sourceCodeStyle, children: makeSourceControlsVisible(sourceCode) }) })
|
|
202
204
|
] })
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { ModalState } from '../state/modals';
|
|
3
|
+
type FixComputedValueModalState = Extract<ModalState, {
|
|
4
|
+
type: 'fix-computed-value';
|
|
5
|
+
}>;
|
|
6
|
+
export declare const FixComputedValueModal: React.FC<{
|
|
7
|
+
readonly state: FixComputedValueModalState;
|
|
8
|
+
}>;
|
|
9
|
+
export {};
|