@remotion/studio 4.0.428 → 4.0.430

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. package/README.md +7 -7
  2. package/dist/components/AssetSelectorItem.js +1 -1
  3. package/dist/components/Canvas.js +1 -1
  4. package/dist/components/CopyButton.js +1 -1
  5. package/dist/components/FilePreview.js +1 -1
  6. package/dist/components/InstallPackage.js +1 -1
  7. package/dist/components/Menu/MenuSubItem.js +1 -1
  8. package/dist/components/MenuBuildIndicator.js +1 -1
  9. package/dist/components/MenuToolbar.js +1 -1
  10. package/dist/components/ModalHeader.js +1 -1
  11. package/dist/components/NewComposition/CodemodFooter.js +1 -1
  12. package/dist/components/NewComposition/ComboBox.js +1 -1
  13. package/dist/components/NewComposition/DuplicateComposition.js +15 -15
  14. package/dist/components/NewComposition/InputDragger.d.ts +1 -0
  15. package/dist/components/NewComposition/InputDragger.js +8 -2
  16. package/dist/components/NewComposition/MenuContent.js +1 -1
  17. package/dist/components/NewComposition/NewCompDuration.js +5 -5
  18. package/dist/components/NewComposition/RenameComposition.js +5 -5
  19. package/dist/components/OverrideInputProps.js +1 -1
  20. package/dist/components/PreviewToolbar.js +4 -3
  21. package/dist/components/QuickSwitcher/QuickSwitcherContent.js +3 -3
  22. package/dist/components/RenderButton.js +1 -1
  23. package/dist/components/RenderModal/DataEditor.js +4 -4
  24. package/dist/components/RenderModal/EnforceAudioTrackSetting.js +1 -1
  25. package/dist/components/RenderModal/EnvInput.js +1 -1
  26. package/dist/components/RenderModal/MutedSetting.js +1 -1
  27. package/dist/components/RenderModal/NumberSetting.js +2 -2
  28. package/dist/components/RenderModal/OptionExplainer.js +1 -1
  29. package/dist/components/RenderModal/RenderModalAdvanced.js +2 -2
  30. package/dist/components/RenderModal/RenderModalAudio.js +3 -3
  31. package/dist/components/RenderModal/RenderModalBasic.js +3 -3
  32. package/dist/components/RenderModal/RenderModalGif.js +1 -1
  33. package/dist/components/RenderModal/RenderModalJSONPropsEditor.js +2 -2
  34. package/dist/components/RenderModal/RenderModalOutputName.js +1 -1
  35. package/dist/components/RenderModal/RenderModalPicture.js +2 -2
  36. package/dist/components/RenderModal/RenderStatusModal.js +1 -1
  37. package/dist/components/RenderModal/ResolveCompositionBeforeModal.js +1 -1
  38. package/dist/components/RenderModal/SchemaEditor/SchemaEditor.js +3 -3
  39. package/dist/components/RenderModal/SchemaEditor/SchemaErrorMessages.js +1 -1
  40. package/dist/components/RenderModal/SchemaEditor/SchemaLabel.js +1 -1
  41. package/dist/components/RenderModal/SchemaEditor/ZodArrayEditor.d.ts +1 -1
  42. package/dist/components/RenderModal/SchemaEditor/ZodArrayEditor.js +4 -4
  43. package/dist/components/RenderModal/SchemaEditor/ZodArrayItemEditor.d.ts +1 -1
  44. package/dist/components/RenderModal/SchemaEditor/ZodBooleanEditor.d.ts +1 -1
  45. package/dist/components/RenderModal/SchemaEditor/ZodBooleanEditor.js +1 -1
  46. package/dist/components/RenderModal/SchemaEditor/ZodColorEditor.d.ts +1 -1
  47. package/dist/components/RenderModal/SchemaEditor/ZodColorEditor.js +3 -3
  48. package/dist/components/RenderModal/SchemaEditor/ZodDateEditor.d.ts +1 -1
  49. package/dist/components/RenderModal/SchemaEditor/ZodDateEditor.js +2 -2
  50. package/dist/components/RenderModal/SchemaEditor/ZodDiscriminatedUnionEditor.d.ts +1 -1
  51. package/dist/components/RenderModal/SchemaEditor/ZodDiscriminatedUnionEditor.js +4 -4
  52. package/dist/components/RenderModal/SchemaEditor/ZodEffectEditor.d.ts +1 -1
  53. package/dist/components/RenderModal/SchemaEditor/ZodEffectEditor.js +2 -2
  54. package/dist/components/RenderModal/SchemaEditor/ZodEnumEditor.d.ts +1 -1
  55. package/dist/components/RenderModal/SchemaEditor/ZodEnumEditor.js +2 -2
  56. package/dist/components/RenderModal/SchemaEditor/ZodErrorMessages.js +1 -1
  57. package/dist/components/RenderModal/SchemaEditor/ZodMatrixEditor.d.ts +1 -1
  58. package/dist/components/RenderModal/SchemaEditor/ZodMatrixEditor.js +4 -4
  59. package/dist/components/RenderModal/SchemaEditor/ZodNullableEditor.d.ts +1 -1
  60. package/dist/components/RenderModal/SchemaEditor/ZodNullableEditor.js +1 -1
  61. package/dist/components/RenderModal/SchemaEditor/ZodNumberEditor.d.ts +1 -1
  62. package/dist/components/RenderModal/SchemaEditor/ZodNumberEditor.js +3 -66
  63. package/dist/components/RenderModal/SchemaEditor/ZodObjectEditor.d.ts +1 -1
  64. package/dist/components/RenderModal/SchemaEditor/ZodObjectEditor.js +3 -3
  65. package/dist/components/RenderModal/SchemaEditor/ZodOptionalEditor.d.ts +1 -1
  66. package/dist/components/RenderModal/SchemaEditor/ZodOptionalEditor.js +1 -1
  67. package/dist/components/RenderModal/SchemaEditor/ZodOrNullishEditor.d.ts +1 -1
  68. package/dist/components/RenderModal/SchemaEditor/ZodOrNullishEditor.js +2 -2
  69. package/dist/components/RenderModal/SchemaEditor/ZodStaticFileEditor.d.ts +1 -1
  70. package/dist/components/RenderModal/SchemaEditor/ZodStaticFileEditor.js +1 -1
  71. package/dist/components/RenderModal/SchemaEditor/ZodStringEditor.d.ts +1 -1
  72. package/dist/components/RenderModal/SchemaEditor/ZodStringEditor.js +2 -2
  73. package/dist/components/RenderModal/SchemaEditor/ZodTextareaEditor.d.ts +1 -1
  74. package/dist/components/RenderModal/SchemaEditor/ZodTextareaEditor.js +2 -2
  75. package/dist/components/RenderModal/SchemaEditor/ZodTupleItemEditor.d.ts +1 -1
  76. package/dist/components/RenderModal/SchemaEditor/ZodUnionEditor.d.ts +1 -1
  77. package/dist/components/RenderModal/SchemaEditor/ZodUnionEditor.js +1 -1
  78. package/dist/components/RenderModal/SchemaEditor/local-state.d.ts +1 -1
  79. package/dist/components/RenderModal/SchemaEditor/zod-number-constraints.d.ts +4 -0
  80. package/dist/components/RenderModal/SchemaEditor/zod-number-constraints.js +70 -0
  81. package/dist/components/RenderModal/SeparateAudioOption.js +2 -2
  82. package/dist/components/RenderModal/ServerRenderModal.js +5 -5
  83. package/dist/components/RenderModal/WebRenderModalAudio.js +3 -3
  84. package/dist/components/RenderModal/WebRenderModalLicense.js +1 -1
  85. package/dist/components/RenderQueue/index.js +2 -2
  86. package/dist/components/RendersTab.js +1 -1
  87. package/dist/components/RunningCalculateMetadata.js +1 -1
  88. package/dist/components/TimeValue.js +1 -1
  89. package/dist/components/Timeline/Timeline.js +2 -2
  90. package/dist/components/Timeline/TimelineDragHandler.js +2 -2
  91. package/dist/components/Timeline/TimelineExpandedSection.d.ts +7 -0
  92. package/dist/components/Timeline/TimelineExpandedSection.js +186 -0
  93. package/dist/components/Timeline/TimelineListItem.js +23 -14
  94. package/dist/components/Timeline/TimelineSchemaField.d.ts +14 -0
  95. package/dist/components/Timeline/TimelineSchemaField.js +106 -0
  96. package/dist/components/Timeline/TimelineSequenceFrame.js +1 -0
  97. package/dist/components/Timeline/TimelineSlider.js +2 -2
  98. package/dist/components/Timeline/TimelineStack/index.d.ts +2 -0
  99. package/dist/components/Timeline/TimelineStack/index.js +2 -17
  100. package/dist/components/Timeline/TimelineTimeIndicators.js +1 -1
  101. package/dist/components/Timeline/TimelineTracks.js +9 -6
  102. package/dist/components/Timeline/TimelineVideoInfo.js +49 -34
  103. package/dist/components/Timeline/timeline-scroll-logic.js +1 -1
  104. package/dist/components/UpdateModal/UpdateModal.js +1 -1
  105. package/dist/components/VisualControls/VisualControlHandle.js +5 -5
  106. package/dist/error-overlay/react-overlay/listen-to-runtime-errors.js +1 -1
  107. package/dist/error-overlay/remotion-overlay/CompositionIdsDropdown.js +1 -1
  108. package/dist/error-overlay/remotion-overlay/ErrorDisplay.js +2 -2
  109. package/dist/error-overlay/remotion-overlay/StackFrame.js +1 -1
  110. package/dist/esm/{chunk-btxgxqx6.js → chunk-59m8tgkh.js} +3700 -3330
  111. package/dist/esm/chunk-m17t3vjq.js +9 -0
  112. package/dist/esm/index.mjs +0 -16
  113. package/dist/esm/internals.mjs +3696 -3341
  114. package/dist/esm/previewEntry.mjs +32590 -32228
  115. package/dist/esm/renderEntry.mjs +3 -5
  116. package/dist/helpers/calculate-timeline.js +1 -0
  117. package/dist/helpers/extract-frames.js +23 -7
  118. package/dist/helpers/get-timeline-sequence-layout.js +4 -18
  119. package/dist/helpers/timeline-layout.d.ts +14 -0
  120. package/dist/helpers/timeline-layout.js +33 -1
  121. package/dist/helpers/use-menu-structure.js +1 -1
  122. package/dist/previewEntry.js +1 -2
  123. package/dist/renderEntry.js +0 -1
  124. package/package.json +12 -11
  125. package/dist/esm/chunk-6jf1natv.js +0 -25
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TimelineFieldSavingSpinner = exports.TimelineFieldValue = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_1 = require("react");
6
+ const Checkbox_1 = require("../Checkbox");
7
+ const InputDragger_1 = require("../NewComposition/InputDragger");
8
+ const Spinner_1 = require("../Spinner");
9
+ const unsupportedLabel = {
10
+ color: 'rgba(255, 255, 255, 0.4)',
11
+ fontSize: 12,
12
+ marginLeft: 'auto',
13
+ fontStyle: 'italic',
14
+ };
15
+ const draggerStyle = {
16
+ width: 80,
17
+ marginLeft: 'auto',
18
+ };
19
+ const checkboxContainer = {
20
+ marginLeft: 'auto',
21
+ };
22
+ const notEditableBackground = {
23
+ backgroundColor: 'rgba(255, 0, 0, 0.2)',
24
+ borderRadius: 3,
25
+ padding: '0 4px',
26
+ };
27
+ const TimelineNumberField = ({ field, codeValue, canUpdate, onSave, onDragValueChange, onDragEnd }) => {
28
+ var _a, _b, _c;
29
+ const [dragValue, setDragValue] = (0, react_1.useState)(null);
30
+ const dragging = (0, react_1.useRef)(false);
31
+ const onValueChange = (0, react_1.useCallback)((newVal) => {
32
+ dragging.current = true;
33
+ setDragValue(newVal);
34
+ onDragValueChange(field.key, newVal);
35
+ }, [onDragValueChange, field.key]);
36
+ (0, react_1.useEffect)(() => {
37
+ setDragValue(null);
38
+ onDragEnd();
39
+ }, [field.currentValue, onDragEnd]);
40
+ const onValueChangeEnd = (0, react_1.useCallback)((newVal) => {
41
+ if (canUpdate && newVal !== codeValue) {
42
+ onSave(field.key, newVal).catch(() => {
43
+ setDragValue(null);
44
+ });
45
+ }
46
+ else {
47
+ setDragValue(null);
48
+ }
49
+ }, [canUpdate, onSave, field.key, codeValue]);
50
+ const onTextChange = (0, react_1.useCallback)((newVal) => {
51
+ if (canUpdate) {
52
+ const parsed = Number(newVal);
53
+ if (!Number.isNaN(parsed) && parsed !== codeValue) {
54
+ setDragValue(parsed);
55
+ onSave(field.key, parsed).catch(() => {
56
+ setDragValue(null);
57
+ });
58
+ }
59
+ }
60
+ }, [canUpdate, onSave, field.key, codeValue]);
61
+ return (jsx_runtime_1.jsx(InputDragger_1.InputDragger, { type: "number", value: dragValue !== null && dragValue !== void 0 ? dragValue : codeValue, style: draggerStyle, status: "ok", onValueChange: onValueChange, onValueChangeEnd: onValueChangeEnd, onTextChange: onTextChange, min: field.fieldSchema.type === 'number'
62
+ ? ((_a = field.fieldSchema.min) !== null && _a !== void 0 ? _a : -Infinity)
63
+ : -Infinity, max: field.fieldSchema.type === 'number'
64
+ ? ((_b = field.fieldSchema.max) !== null && _b !== void 0 ? _b : Infinity)
65
+ : Infinity, step: field.fieldSchema.type === 'number' ? ((_c = field.fieldSchema.step) !== null && _c !== void 0 ? _c : 1) : 1, rightAlign: true }));
66
+ };
67
+ const TimelineBooleanField = ({ field, codeValue, canUpdate, onSave }) => {
68
+ const checked = Boolean(codeValue);
69
+ const onChange = (0, react_1.useCallback)(() => {
70
+ if (canUpdate) {
71
+ onSave(field.key, !checked);
72
+ }
73
+ }, [canUpdate, onSave, field.key, checked]);
74
+ return (jsx_runtime_1.jsx("div", { style: checkboxContainer, children: jsx_runtime_1.jsx(Checkbox_1.Checkbox, { checked: checked, onChange: onChange, name: field.key, disabled: !canUpdate }) }));
75
+ };
76
+ const TimelineFieldValue = ({ field, onSave, onDragValueChange, onDragEnd, propStatus, canUpdate }) => {
77
+ var _a, _b;
78
+ const wrapperStyle = canUpdate === null || canUpdate === false
79
+ ? notEditableBackground
80
+ : undefined;
81
+ if (!field.supported) {
82
+ return jsx_runtime_1.jsx("span", { style: unsupportedLabel, children: "unsupported" });
83
+ }
84
+ if (propStatus !== null && !propStatus.canUpdate) {
85
+ return jsx_runtime_1.jsx("span", { style: unsupportedLabel, children: propStatus.reason });
86
+ }
87
+ if (propStatus === null) {
88
+ return (jsx_runtime_1.jsx("span", { style: { ...notEditableBackground }, children: jsx_runtime_1.jsx("span", { style: unsupportedLabel, children: "error" }) }));
89
+ }
90
+ const effectiveCodeValue = (_b = (_a = propStatus.codeValue) !== null && _a !== void 0 ? _a : field.currentValue) !== null && _b !== void 0 ? _b : field.fieldSchema.default;
91
+ if (field.typeName === 'number') {
92
+ return (jsx_runtime_1.jsx("span", { style: wrapperStyle, children: jsx_runtime_1.jsx(TimelineNumberField, { field: field, codeValue: effectiveCodeValue, canUpdate: canUpdate, onSave: onSave, onDragValueChange: onDragValueChange, onDragEnd: onDragEnd }) }));
93
+ }
94
+ if (field.typeName === 'boolean') {
95
+ return (jsx_runtime_1.jsx("span", { style: wrapperStyle, children: jsx_runtime_1.jsx(TimelineBooleanField, { field: field, codeValue: effectiveCodeValue, canUpdate: canUpdate, onSave: onSave }) }));
96
+ }
97
+ return (jsx_runtime_1.jsx("span", { style: { ...unsupportedLabel, fontStyle: 'normal' }, children: String(effectiveCodeValue) }));
98
+ };
99
+ exports.TimelineFieldValue = TimelineFieldValue;
100
+ const TimelineFieldSavingSpinner = ({ saving }) => {
101
+ if (!saving) {
102
+ return null;
103
+ }
104
+ return jsx_runtime_1.jsx(Spinner_1.Spinner, { duration: 0.5, size: 12 });
105
+ };
106
+ exports.TimelineFieldSavingSpinner = TimelineFieldSavingSpinner;
@@ -7,6 +7,7 @@ const relativeFrameStyle = {
7
7
  fontFamily: 'Arial, Helvetica, sans-serif',
8
8
  color: 'white',
9
9
  opacity: 0.5,
10
+ whiteSpace: 'nowrap',
10
11
  };
11
12
  const TimelineSequenceFrame = ({ roundedFrame, premounted, postmounted }) => {
12
13
  return (jsx_runtime_1.jsx("div", { style: relativeFrameStyle, children: premounted
@@ -5,10 +5,10 @@ const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const react_1 = require("react");
6
6
  const remotion_1 = require("remotion");
7
7
  const get_left_of_timeline_slider_1 = require("../../helpers/get-left-of-timeline-slider");
8
- const TimelineSliderHandle_1 = require("./TimelineSliderHandle");
9
- const TimelineWidthProvider_1 = require("./TimelineWidthProvider");
10
8
  const imperative_state_1 = require("./imperative-state");
11
9
  const timeline_refs_1 = require("./timeline-refs");
10
+ const TimelineSliderHandle_1 = require("./TimelineSliderHandle");
11
+ const TimelineWidthProvider_1 = require("./TimelineWidthProvider");
12
12
  const container = {
13
13
  position: 'absolute',
14
14
  bottom: 0,
@@ -1,6 +1,8 @@
1
1
  import React from 'react';
2
2
  import type { TSequence } from 'remotion';
3
+ import type { OriginalPosition } from '../../../error-overlay/react-overlay/utils/get-source-map';
3
4
  export declare const TimelineStack: React.FC<{
4
5
  readonly isCompact: boolean;
5
6
  readonly sequence: TSequence;
7
+ readonly originalLocation: OriginalPosition | null;
6
8
  }>;
@@ -11,10 +11,9 @@ const get_git_menu_item_1 = require("../../../helpers/get-git-menu-item");
11
11
  const open_in_editor_1 = require("../../../helpers/open-in-editor");
12
12
  const url_state_1 = require("../../../helpers/url-state");
13
13
  const InitialCompositionLoader_1 = require("../../InitialCompositionLoader");
14
+ const layout_1 = require("../../layout");
14
15
  const NotificationCenter_1 = require("../../Notifications/NotificationCenter");
15
16
  const Spinner_1 = require("../../Spinner");
16
- const layout_1 = require("../../layout");
17
- const get_stack_1 = require("./get-stack");
18
17
  const source_attribution_1 = require("./source-attribution");
19
18
  const publicPath = window.remotion_publicPath === '/' ? '' : window.remotion_publicPath;
20
19
  const withoutSlashInTheEnd = publicPath.endsWith('/')
@@ -24,8 +23,7 @@ const withoutSlashInTheEnd = publicPath.endsWith('/')
24
23
  source_map_1.SourceMapConsumer.initialize({
25
24
  'lib/mappings.wasm': withoutSlashInTheEnd + studio_shared_1.SOURCE_MAP_ENDPOINT,
26
25
  });
27
- const TimelineStack = ({ isCompact, sequence }) => {
28
- const [originalLocation, setOriginalLocation] = (0, react_1.useState)(null);
26
+ const TimelineStack = ({ isCompact, sequence, originalLocation }) => {
29
27
  const [stackHovered, setStackHovered] = (0, react_1.useState)(false);
30
28
  const [titleHovered, setTitleHovered] = (0, react_1.useState)(false);
31
29
  const [opening, setOpening] = (0, react_1.useState)(false);
@@ -107,19 +105,6 @@ const TimelineStack = ({ isCompact, sequence }) => {
107
105
  window.open((0, get_git_menu_item_1.getGitRefUrl)(window.remotion_gitSource, originalLocation), '_blank');
108
106
  }
109
107
  }, [canOpenInEditor, canOpenInGitHub, openEditor, originalLocation]);
110
- (0, react_1.useEffect)(() => {
111
- if (!sequence.stack) {
112
- return;
113
- }
114
- (0, get_stack_1.getOriginalLocationFromStack)(sequence.stack, 'sequence')
115
- .then((frame) => {
116
- setOriginalLocation(frame);
117
- })
118
- .catch((err) => {
119
- // eslint-disable-next-line no-console
120
- console.error('Could not get original location of Sequence', err);
121
- });
122
- }, [sequence.stack]);
123
108
  const onStackPointerEnter = (0, react_1.useCallback)(() => {
124
109
  setStackHovered(true);
125
110
  }, []);
@@ -9,9 +9,9 @@ const timeline_layout_1 = require("../../helpers/timeline-layout");
9
9
  const render_frame_1 = require("../../state/render-frame");
10
10
  const SplitterHandle_1 = require("../Splitter/SplitterHandle");
11
11
  const TimeValue_1 = require("../TimeValue");
12
- const TimelineWidthProvider_1 = require("./TimelineWidthProvider");
13
12
  const timeline_refs_1 = require("./timeline-refs");
14
13
  const timeline_scroll_logic_1 = require("./timeline-scroll-logic");
14
+ const TimelineWidthProvider_1 = require("./TimelineWidthProvider");
15
15
  exports.TIMELINE_TIME_INDICATOR_HEIGHT = 39;
16
16
  const container = {
17
17
  height: exports.TIMELINE_TIME_INDICATOR_HEIGHT - 4,
@@ -3,12 +3,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.TimelineTracks = void 0;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const react_1 = require("react");
6
+ const client_id_1 = require("../../helpers/client-id");
6
7
  const timeline_layout_1 = require("../../helpers/timeline-layout");
7
8
  const ExpandedTracksProvider_1 = require("../ExpandedTracksProvider");
9
+ const is_collapsed_1 = require("./is-collapsed");
8
10
  const MaxTimelineTracks_1 = require("./MaxTimelineTracks");
9
11
  const TimelineSequence_1 = require("./TimelineSequence");
10
12
  const TimelineTimeIndicators_1 = require("./TimelineTimeIndicators");
11
- const is_collapsed_1 = require("./is-collapsed");
12
13
  const content = {
13
14
  paddingLeft: timeline_layout_1.TIMELINE_PADDING,
14
15
  paddingRight: timeline_layout_1.TIMELINE_PADDING,
@@ -17,12 +18,14 @@ const content = {
17
18
  const timelineContent = {
18
19
  minHeight: '100%',
19
20
  };
20
- const expandedPlaceholder = {
21
- height: timeline_layout_1.TIMELINE_TRACK_EXPANDED_HEIGHT + timeline_layout_1.TIMELINE_ITEM_BORDER_BOTTOM,
22
- };
21
+ const getExpandedPlaceholderStyle = (controls) => ({
22
+ height: (0, timeline_layout_1.getExpandedTrackHeight)(controls) + timeline_layout_1.TIMELINE_ITEM_BORDER_BOTTOM,
23
+ });
23
24
  const TimelineTracks = ({ timeline, hasBeenCut }) => {
24
25
  const { expandedTracks } = (0, react_1.useContext)(ExpandedTracksProvider_1.ExpandedTracksContext);
25
- const visualModeEnabled = Boolean(process.env.EXPERIMENTAL_VISUAL_MODE_ENABLED);
26
+ const { previewServerState } = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx);
27
+ const visualModeEnabled = Boolean(process.env.EXPERIMENTAL_VISUAL_MODE_ENABLED) &&
28
+ previewServerState.type === 'connected';
26
29
  const timelineStyle = (0, react_1.useMemo)(() => {
27
30
  return {
28
31
  ...timelineContent,
@@ -41,7 +44,7 @@ const TimelineTracks = ({ timeline, hasBeenCut }) => {
41
44
  jsx_runtime_1.jsx("div", { style: {
42
45
  height: (0, timeline_layout_1.getTimelineLayerHeight)(track.sequence.type === 'video' ? 'video' : 'other'),
43
46
  marginBottom: timeline_layout_1.TIMELINE_ITEM_BORDER_BOTTOM,
44
- }, children: jsx_runtime_1.jsx(TimelineSequence_1.TimelineSequence, { s: track.sequence }) }), visualModeEnabled && isExpanded ? (jsx_runtime_1.jsx("div", { style: expandedPlaceholder })) : null] }, track.sequence.id));
47
+ }, children: jsx_runtime_1.jsx(TimelineSequence_1.TimelineSequence, { s: track.sequence }) }), visualModeEnabled && isExpanded ? (jsx_runtime_1.jsx("div", { style: getExpandedPlaceholderStyle(track.sequence.controls) })) : null] }, track.sequence.id));
45
48
  })] }), hasBeenCut ? jsx_runtime_1.jsx(MaxTimelineTracks_1.MaxTimelineTracksReached, {}) : null] }));
46
49
  };
47
50
  exports.TimelineTracks = TimelineTracks;
@@ -213,47 +213,62 @@ const TimelineVideoInfo = ({ src, visualizationWidth, naturalWidth, trimBefore,
213
213
  },
214
214
  src,
215
215
  onVideoSample: (sample) => {
216
- const frame = sample.toVideoFrame();
217
- const scale = (HEIGHT / frame.displayHeight) * window.devicePixelRatio;
218
- const transformed = (0, resize_video_frame_1.resizeVideoFrame)({
219
- frame,
220
- scale,
221
- });
222
- if (transformed !== frame) {
223
- frame.close();
216
+ let frame;
217
+ try {
218
+ frame = sample.toVideoFrame();
219
+ const scale = (HEIGHT / frame.displayHeight) * window.devicePixelRatio;
220
+ const transformed = (0, resize_video_frame_1.resizeVideoFrame)({
221
+ frame,
222
+ scale,
223
+ });
224
+ if (transformed !== frame) {
225
+ frame.close();
226
+ }
227
+ frame = undefined;
228
+ const databaseKey = (0, frame_database_1.makeFrameDatabaseKey)(src, transformed.timestamp);
229
+ const existingFrame = frame_database_1.frameDatabase.get(databaseKey);
230
+ if (existingFrame) {
231
+ existingFrame.frame.close();
232
+ }
233
+ frame_database_1.frameDatabase.set(databaseKey, {
234
+ frame: transformed,
235
+ lastUsed: Date.now(),
236
+ });
237
+ if (aspectRatio.current === null) {
238
+ throw new Error('Aspect ratio is not set');
239
+ }
240
+ ensureSlots({
241
+ filledSlots,
242
+ fromSeconds,
243
+ toSeconds,
244
+ naturalWidth,
245
+ aspectRatio: aspectRatio.current,
246
+ });
247
+ fillFrameWhereItFits({
248
+ ctx,
249
+ filledSlots,
250
+ visualizationWidth: naturalWidth,
251
+ frame: transformed,
252
+ segmentDuration: toSeconds - fromSeconds,
253
+ fromSeconds,
254
+ });
224
255
  }
225
- const databaseKey = (0, frame_database_1.makeFrameDatabaseKey)(src, transformed.timestamp);
226
- const existingFrame = frame_database_1.frameDatabase.get(databaseKey);
227
- if (existingFrame) {
228
- existingFrame.frame.close();
256
+ catch (e) {
257
+ if (frame) {
258
+ frame.close();
259
+ }
260
+ throw e;
229
261
  }
230
- frame_database_1.frameDatabase.set(databaseKey, {
231
- frame: transformed,
232
- lastUsed: Date.now(),
233
- });
234
- if (aspectRatio.current === null) {
235
- throw new Error('Aspect ratio is not set');
262
+ finally {
263
+ sample.close();
236
264
  }
237
- ensureSlots({
238
- filledSlots,
239
- fromSeconds,
240
- toSeconds,
241
- naturalWidth,
242
- aspectRatio: aspectRatio.current,
243
- });
244
- fillFrameWhereItFits({
245
- ctx,
246
- filledSlots,
247
- visualizationWidth: naturalWidth,
248
- frame: transformed,
249
- segmentDuration: toSeconds - fromSeconds,
250
- fromSeconds,
251
- });
252
- sample.close();
253
265
  },
254
266
  signal: controller.signal,
255
267
  })
256
268
  .then(() => {
269
+ if (controller.signal.aborted) {
270
+ return;
271
+ }
257
272
  fillWithCachedFrames({
258
273
  ctx,
259
274
  naturalWidth,
@@ -3,8 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.zoomAndPreserveCursor = exports.getFrameFromX = exports.getFrameWhileScrollingRight = exports.getFrameIncrementFromWidth = exports.getScrollPositionForCursorOnRightEdge = exports.getScrollPositionForCursorOnLeftEdge = exports.scrollToTimelineXOffset = exports.ensureFrameIsInViewport = exports.isCursorInViewport = exports.getFrameWhileScrollingLeft = exports.canScrollTimelineIntoDirection = void 0;
4
4
  const remotion_1 = require("remotion");
5
5
  const timeline_layout_1 = require("../../helpers/timeline-layout");
6
- const TimelineSlider_1 = require("./TimelineSlider");
7
6
  const timeline_refs_1 = require("./timeline-refs");
7
+ const TimelineSlider_1 = require("./TimelineSlider");
8
8
  const canScrollTimelineIntoDirection = () => {
9
9
  const current = timeline_refs_1.scrollableRef.current;
10
10
  const { scrollWidth, scrollLeft, clientWidth } = current;
@@ -7,10 +7,10 @@ const colors_1 = require("../../helpers/colors");
7
7
  const copy_text_1 = require("../../helpers/copy-text");
8
8
  const CopyButton_1 = require("../CopyButton");
9
9
  const KnownBugs_1 = require("../KnownBugs");
10
+ const layout_1 = require("../layout");
10
11
  const ModalHeader_1 = require("../ModalHeader");
11
12
  const DismissableModal_1 = require("../NewComposition/DismissableModal");
12
13
  const NotificationCenter_1 = require("../Notifications/NotificationCenter");
13
- const layout_1 = require("../layout");
14
14
  const container = {
15
15
  padding: 20,
16
16
  paddingTop: 0,
@@ -5,17 +5,17 @@ const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const react_1 = require("react");
6
6
  const no_react_1 = require("remotion/no-react");
7
7
  const fast_refresh_context_1 = require("../../fast-refresh-context");
8
- const VisualControls_1 = require("../../visual-controls/VisualControls");
9
8
  const get_current_edited_value_1 = require("../../visual-controls/get-current-edited-value");
9
+ const VisualControls_1 = require("../../visual-controls/VisualControls");
10
+ const get_zod_if_possible_1 = require("../get-zod-if-possible");
11
+ const layout_1 = require("../layout");
10
12
  const NotificationCenter_1 = require("../Notifications/NotificationCenter");
11
- const ZodSwitch_1 = require("../RenderModal/SchemaEditor/ZodSwitch");
12
13
  const extract_enum_json_paths_1 = require("../RenderModal/SchemaEditor/extract-enum-json-paths");
13
14
  const local_state_1 = require("../RenderModal/SchemaEditor/local-state");
15
+ const ZodSwitch_1 = require("../RenderModal/SchemaEditor/ZodSwitch");
14
16
  const actions_1 = require("../RenderQueue/actions");
15
- const get_zod_if_possible_1 = require("../get-zod-if-possible");
16
- const layout_1 = require("../layout");
17
- const VisualControlHandleHeader_1 = require("./VisualControlHandleHeader");
18
17
  const get_original_stack_trace_1 = require("./get-original-stack-trace");
18
+ const VisualControlHandleHeader_1 = require("./VisualControlHandleHeader");
19
19
  const VisualControlHandle = ({ value, keyName }) => {
20
20
  const z = (0, get_zod_if_possible_1.useZodIfPossible)();
21
21
  if (!z) {
@@ -2,11 +2,11 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getErrorRecord = void 0;
4
4
  exports.listenToRuntimeErrors = listenToRuntimeErrors;
5
+ const url_state_1 = require("../../helpers/url-state");
5
6
  const Overlay_1 = require("../remotion-overlay/Overlay");
6
7
  const format_warning_1 = require("./effects/format-warning");
7
8
  const proxy_console_1 = require("./effects/proxy-console");
8
9
  const stack_trace_limit_1 = require("./effects/stack-trace-limit");
9
- const url_state_1 = require("../../helpers/url-state");
10
10
  const unhandled_error_1 = require("./effects/unhandled-error");
11
11
  const unhandled_rejection_1 = require("./effects/unhandled-rejection");
12
12
  const get_stack_frames_1 = require("./utils/get-stack-frames");
@@ -5,8 +5,8 @@ const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const react_1 = require("react");
6
6
  const Button_1 = require("../../components/Button");
7
7
  const colors_1 = require("../../helpers/colors");
8
- const CompositionIdListItem_1 = require("./CompositionIdListItem");
9
8
  const carets_1 = require("./carets");
9
+ const CompositionIdListItem_1 = require("./CompositionIdListItem");
10
10
  const containerStyle = {
11
11
  display: 'inline-block',
12
12
  position: 'relative',
@@ -4,19 +4,19 @@ exports.ErrorDisplay = void 0;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const studio_shared_1 = require("@remotion/studio-shared");
6
6
  const react_1 = require("react");
7
- const is_menu_item_1 = require("../../components/Menu/is-menu-item");
8
7
  const layout_1 = require("../../components/layout");
8
+ const is_menu_item_1 = require("../../components/Menu/is-menu-item");
9
9
  const url_state_1 = require("../../helpers/url-state");
10
10
  const AskOnDiscord_1 = require("./AskOnDiscord");
11
11
  const CalculateMetadataErrorExplainer_1 = require("./CalculateMetadataErrorExplainer");
12
12
  const CompositionIdsDropdown_1 = require("./CompositionIdsDropdown");
13
13
  const ErrorTitle_1 = require("./ErrorTitle");
14
+ const get_help_link_1 = require("./get-help-link");
14
15
  const HelpLink_1 = require("./HelpLink");
15
16
  const OpenInEditor_1 = require("./OpenInEditor");
16
17
  const Retry_1 = require("./Retry");
17
18
  const SearchGitHubIssues_1 = require("./SearchGitHubIssues");
18
19
  const StackFrame_1 = require("./StackFrame");
19
- const get_help_link_1 = require("./get-help-link");
20
20
  const stack = {
21
21
  marginTop: 17,
22
22
  overflowX: 'scroll',
@@ -4,8 +4,8 @@ exports.StackElement = void 0;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const react_1 = require("react");
6
6
  const Button_1 = require("../../components/Button");
7
- const CodeFrame_1 = require("./CodeFrame");
8
7
  const carets_1 = require("./carets");
8
+ const CodeFrame_1 = require("./CodeFrame");
9
9
  const format_location_1 = require("./format-location");
10
10
  const location = {
11
11
  color: 'rgba(255, 255, 255, 0.6)',