@remotion/studio 4.0.519 → 4.0.520

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 (79) hide show
  1. package/dist/api/visual-control.js +2 -2
  2. package/dist/components/AudioWaveform.js +6 -1
  3. package/dist/components/Canvas.js +30 -36
  4. package/dist/components/CompositionSelector.js +6 -10
  5. package/dist/components/CompositionSelectorItem.js +7 -12
  6. package/dist/components/CurrentCompositionSideEffects.js +5 -0
  7. package/dist/components/ElementInstallConfirmation.d.ts +2 -23
  8. package/dist/components/ElementInstallConfirmation.js +16 -2
  9. package/dist/components/FpsCounter.js +1 -1
  10. package/dist/components/FramePersistor.js +1 -1
  11. package/dist/components/InspectorPanel/SequenceSelectionInspector.js +4 -3
  12. package/dist/components/InspectorPanel/use-composition-actions.js +5 -8
  13. package/dist/components/Modals.js +1 -1
  14. package/dist/components/NewComposition/NewComposition.js +2 -2
  15. package/dist/components/PlayPause.js +2 -13
  16. package/dist/components/PreviewToolbar.js +1 -1
  17. package/dist/components/QuickSwitcher/QuickSwitcherContent.js +29 -15
  18. package/dist/components/QuickSwitcher/QuickSwitcherResult.d.ts +14 -1
  19. package/dist/components/QuickSwitcher/QuickSwitcherResult.js +64 -9
  20. package/dist/components/QuickSwitcher/composition-search.d.ts +16 -0
  21. package/dist/components/QuickSwitcher/composition-search.js +136 -0
  22. package/dist/components/ResetZoomButton.js +17 -2
  23. package/dist/components/SelectedOutlineElement.js +10 -30
  24. package/dist/components/Timeline/Timeline.js +2 -1
  25. package/dist/components/Timeline/TimelineAssetField.js +1 -0
  26. package/dist/components/Timeline/TimelineDeleteKeybindings.js +5 -90
  27. package/dist/components/Timeline/TimelineDragHandler.js +18 -8
  28. package/dist/components/Timeline/TimelineInOutDragHandler.js +2 -3
  29. package/dist/components/Timeline/TimelinePinchZoom.js +14 -4
  30. package/dist/components/Timeline/TimelinePlayCursorSyncer.js +8 -4
  31. package/dist/components/Timeline/TimelineSequence.js +16 -41
  32. package/dist/components/Timeline/TimelineSequenceItem.js +14 -35
  33. package/dist/components/Timeline/TimelineSequenceRightEdgeDragHandle.js +3 -3
  34. package/dist/components/Timeline/TimelineSlider.js +2 -2
  35. package/dist/components/Timeline/TimelineWidthProvider.js +15 -8
  36. package/dist/components/Timeline/TimelineZoomControls.js +25 -8
  37. package/dist/components/Timeline/delete-selected-timeline-item.js +2 -2
  38. package/dist/components/Timeline/timeline-scroll-logic.d.ts +1 -0
  39. package/dist/components/Timeline/timeline-scroll-logic.js +21 -17
  40. package/dist/components/Timeline/use-delete-timeline-items.d.ts +1 -0
  41. package/dist/components/Timeline/use-delete-timeline-items.js +118 -0
  42. package/dist/components/Timeline/use-timeline-asset-drop.js +8 -14
  43. package/dist/components/WebMcp.js +61 -8
  44. package/dist/components/ZoomPersistor.js +2 -2
  45. package/dist/components/composition-drag-data.d.ts +36 -0
  46. package/dist/components/composition-drag-data.js +232 -0
  47. package/dist/components/drop-handler-data.d.ts +2 -1
  48. package/dist/components/drop-handler-data.js +6 -4
  49. package/dist/components/effect-drag-and-drop.d.ts +2 -5
  50. package/dist/components/handle-drop.js +6 -2
  51. package/dist/components/import-assets.d.ts +5 -13
  52. package/dist/error-overlay/current-error.d.ts +13 -0
  53. package/dist/error-overlay/current-error.js +21 -0
  54. package/dist/error-overlay/remotion-overlay/ErrorLoader.js +5 -1
  55. package/dist/esm/{chunk-1fkq5bfq.js → chunk-np6q13k5.js} +21571 -18952
  56. package/dist/esm/index.mjs +4 -1
  57. package/dist/esm/internals.mjs +17206 -14587
  58. package/dist/esm/previewEntry.mjs +19510 -16804
  59. package/dist/esm/renderEntry.mjs +1 -1
  60. package/dist/helpers/create-folder-tree.js +2 -5
  61. package/dist/helpers/document-title.d.ts +2 -0
  62. package/dist/helpers/document-title.js +14 -3
  63. package/dist/helpers/get-timeline-max-zoom.d.ts +34 -28
  64. package/dist/helpers/get-timeline-max-zoom.js +46 -29
  65. package/dist/helpers/install-fiber-sequence-order-observer.d.ts +37 -0
  66. package/dist/helpers/install-fiber-sequence-order-observer.js +109 -0
  67. package/dist/helpers/open-in-editor.js +2 -1
  68. package/dist/helpers/use-runtime-values.d.ts +1 -1
  69. package/dist/helpers/use-runtime-values.js +5 -4
  70. package/dist/helpers/use-sync-external-store.d.ts +3 -0
  71. package/dist/helpers/use-sync-external-store.js +5 -0
  72. package/dist/previewEntry.js +2 -0
  73. package/dist/state/modals.d.ts +18 -2
  74. package/dist/state/timeline-sequence-hover.js +3 -2
  75. package/dist/state/timeline-zoom.d.ts +0 -1
  76. package/dist/state/timeline-zoom.js +13 -6
  77. package/package.json +16 -16
  78. package/dist/helpers/sort-by-nonce-history.d.ts +0 -1
  79. package/dist/helpers/sort-by-nonce-history.js +0 -6
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.visualControl = void 0;
4
- const react_1 = require("react");
5
4
  const remotion_1 = require("remotion");
5
+ const use_sync_external_store_1 = require("../helpers/use-sync-external-store");
6
6
  const visual_control_store_1 = require("../visual-controls/visual-control-store");
7
7
  const VisualControls_1 = require("../visual-controls/VisualControls");
8
8
  /**
@@ -12,7 +12,7 @@ const visualControl = (key, value, schema) => {
12
12
  // Subscribe to store changes so the calling component
13
13
  // re-renders when a visual control value is edited in the sidebar.
14
14
  // eslint-disable-next-line react-hooks/rules-of-hooks
15
- (0, react_1.useSyncExternalStore)(visual_control_store_1.visualControlStore.subscribe, visual_control_store_1.visualControlStore.getSnapshot, visual_control_store_1.visualControlStore.getSnapshot);
15
+ (0, use_sync_external_store_1.useSyncExternalStore)(visual_control_store_1.visualControlStore.subscribe, visual_control_store_1.visualControlStore.getSnapshot, visual_control_store_1.visualControlStore.getSnapshot);
16
16
  if ((0, remotion_1.getRemotionEnvironment)().isRendering) {
17
17
  return value;
18
18
  }
@@ -39,6 +39,7 @@ const timeline_utils_1 = require("@remotion/timeline-utils");
39
39
  const react_1 = __importStar(require("react"));
40
40
  const remotion_1 = require("remotion");
41
41
  const colors_1 = require("../helpers/colors");
42
+ const get_timeline_max_zoom_1 = require("../helpers/get-timeline-max-zoom");
42
43
  const timeline_layout_1 = require("../helpers/timeline-layout");
43
44
  const EMPTY_PEAKS = new Float32Array(0);
44
45
  const getContainerStyle = (height) => {
@@ -74,6 +75,7 @@ const AudioWaveformInner = ({ src, height, startFrom, durationInFrames, displayO
74
75
  if (vidConf === null) {
75
76
  throw new Error('Expected video config');
76
77
  }
78
+ const waveformSampleRate = Math.ceil(vidConf.fps * get_timeline_max_zoom_1.TIMELINE_FRAME_WIDTH_AT_MAX_ZOOM);
77
79
  const waveformCanvas = (0, react_1.useRef)(null);
78
80
  const volumeCanvas = (0, react_1.useRef)(null);
79
81
  const shouldRenderVolumeOverlay = doesVolumeChange && typeof volume === 'string';
@@ -102,10 +104,11 @@ const AudioWaveformInner = ({ src, height, startFrom, durationInFrames, displayO
102
104
  setError(null);
103
105
  return (0, timeline_utils_1.subscribeToWaveformPeaks)({
104
106
  src,
107
+ waveformSampleRate,
105
108
  onPeaks: (p) => setPeaks(p),
106
109
  onError: (err) => setError(err),
107
110
  });
108
- }, [src]);
111
+ }, [src, waveformSampleRate]);
109
112
  const portionPeaks = (0, react_1.useMemo)(() => {
110
113
  if (!peaks) {
111
114
  return null;
@@ -119,6 +122,7 @@ const AudioWaveformInner = ({ src, height, startFrom, durationInFrames, displayO
119
122
  peaks,
120
123
  playbackRate,
121
124
  startFrom,
125
+ waveformSampleRate,
122
126
  });
123
127
  }, [
124
128
  displayDurationInFrames,
@@ -129,6 +133,7 @@ const AudioWaveformInner = ({ src, height, startFrom, durationInFrames, displayO
129
133
  playbackRate,
130
134
  startFrom,
131
135
  vidConf.fps,
136
+ waveformSampleRate,
132
137
  ]);
133
138
  // Drawing must happen in a layout effect: when the timeline zooms, the
134
139
  // canvas CSS box resizes in the same commit, and painting the bitmap
@@ -29,6 +29,7 @@ const editor_zoom_gestures_1 = require("../state/editor-zoom-gestures");
29
29
  const modals_1 = require("../state/modals");
30
30
  const call_api_1 = require("./call-api");
31
31
  const canvas_capture_drop_1 = require("./canvas-capture-drop");
32
+ const composition_drag_data_1 = require("./composition-drag-data");
32
33
  const composition_drop_preview_1 = require("./composition-drop-preview");
33
34
  const drop_handler_data_1 = require("./drop-handler-data");
34
35
  const EditorGuides_1 = __importDefault(require("./EditorGuides"));
@@ -37,7 +38,6 @@ 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");
38
39
  const element_install_api_1 = require("./element-install-api");
39
40
  const element_install_request_1 = require("./element-install-request");
40
- const ElementInstallConfirmation_1 = require("./ElementInstallConfirmation");
41
41
  const handle_drop_1 = require("./handle-drop");
42
42
  const import_assets_1 = require("./import-assets");
43
43
  const layout_1 = require("./layout");
@@ -48,6 +48,19 @@ const SvgImportDialog_1 = require("./SvgImportDialog");
48
48
  const imperative_state_1 = require("./Timeline/imperative-state");
49
49
  const use_resolved_stack_1 = require("./Timeline/use-resolved-stack");
50
50
  const elementInstallDependencyIgnoreList = ['react', 'react-dom', 'remotion'];
51
+ const getCanvasDragPreviewMetadata = (mimeTypes) => {
52
+ var _a, _b, _c;
53
+ const composition = (0, composition_drag_data_1.getCompositionDragPreviewMetadata)(mimeTypes);
54
+ if (composition !== null) {
55
+ return {
56
+ ...composition,
57
+ width: (_a = composition.width) !== null && _a !== void 0 ? _a : undefined,
58
+ height: (_b = composition.height) !== null && _b !== void 0 ? _b : undefined,
59
+ durationInFrames: (_c = composition.durationInFrames) !== null && _c !== void 0 ? _c : undefined,
60
+ };
61
+ }
62
+ return studio_protocol_1.StudioProtocolInternals.getDragPreviewMetadata(mimeTypes);
63
+ };
51
64
  const getContainerStyle = (editorZoomGestures) => ({
52
65
  flex: 1,
53
66
  display: 'flex',
@@ -140,10 +153,8 @@ const Canvas = ({ canvasContent, size }) => {
140
153
  : null;
141
154
  const [isAddingAsset, setIsAddingAsset] = (0, react_1.useState)(false);
142
155
  const [compositionDropPreview, setCompositionDropPreview] = (0, react_1.useState)(null);
143
- const [installingElementName, setInstallingElementName] = (0, react_1.useState)(null);
144
156
  const [pendingElementInstallRequests, setPendingElementInstallRequests] = (0, react_1.useState)([]);
145
157
  const [activeElementInstallRequest, setActiveElementInstallRequest] = (0, react_1.useState)(null);
146
- const [elementInstallReview, setElementInstallReview] = (0, react_1.useState)(null);
147
158
  const lastFocusedAtRef = (0, react_1.useRef)(typeof document === 'undefined' || document.hasFocus() ? Date.now() : null);
148
159
  const [assetResolution, setAssetResolution] = (0, react_1.useState)(null);
149
160
  const metadataRequestRef = (0, react_1.useRef)(0);
@@ -601,16 +612,6 @@ const Canvas = ({ canvasContent, size }) => {
601
612
  updateElementInstallTarget(event.requestId);
602
613
  });
603
614
  }, [subscribeToEvent, updateElementInstallTarget]);
604
- (0, react_1.useEffect)(() => {
605
- if (installingElementName === null) {
606
- return;
607
- }
608
- const previousTitle = document.title;
609
- document.title = `📦 Install ${installingElementName} - Remotion Studio`;
610
- return () => {
611
- document.title = previousTitle;
612
- };
613
- }, [installingElementName]);
614
615
  (0, react_1.useEffect)(() => {
615
616
  if (previewServerClientId === null) {
616
617
  return;
@@ -680,6 +681,10 @@ const Canvas = ({ canvasContent, size }) => {
680
681
  setActiveElementInstallRequest(nextRequest);
681
682
  setPendingElementInstallRequests(remainingRequests);
682
683
  }, [activeElementInstallRequest, pendingElementInstallRequests]);
684
+ const closeElementInstallDialog = (0, react_1.useCallback)(() => {
685
+ setSelectedModal(null);
686
+ setActiveElementInstallRequest(null);
687
+ }, [setSelectedModal]);
683
688
  (0, react_1.useEffect)(() => {
684
689
  if (activeElementInstallRequest === null) {
685
690
  return;
@@ -687,7 +692,6 @@ const Canvas = ({ canvasContent, size }) => {
687
692
  let canceled = false;
688
693
  const handleInstallRequest = async () => {
689
694
  var _a;
690
- setInstallingElementName(activeElementInstallRequest.element.displayName);
691
695
  try {
692
696
  const [newPreflight, currentPreflight] = await Promise.all([
693
697
  (0, element_install_api_1.prepareElementInstall)({
@@ -711,7 +715,6 @@ const Canvas = ({ canvasContent, size }) => {
711
715
  }
712
716
  if (!newPreflight.success) {
713
717
  (0, NotificationCenter_1.showNotification)(`Could not review Element installation: ${newPreflight.reason}`, 4000);
714
- setInstallingElementName(null);
715
718
  setActiveElementInstallRequest(null);
716
719
  return;
717
720
  }
@@ -735,12 +738,14 @@ const Canvas = ({ canvasContent, size }) => {
735
738
  const currentPlan = currentPreflight.success
736
739
  ? currentPreflight.plan
737
740
  : null;
738
- setSelectedModal(null);
739
- setElementInstallReview({
741
+ setSelectedModal({
742
+ type: 'element-install',
740
743
  currentPlan,
741
744
  dependenciesToReview,
742
745
  missingPackages,
743
746
  newPlan: newPreflight.plan,
747
+ onClose: closeElementInstallDialog,
748
+ request: activeElementInstallRequest,
744
749
  sourceIsUnverified,
745
750
  sourceLabel,
746
751
  });
@@ -750,7 +755,6 @@ const Canvas = ({ canvasContent, size }) => {
750
755
  return;
751
756
  }
752
757
  (0, NotificationCenter_1.showNotification)(`Could not review Element installation: ${error instanceof Error ? error.message : String(error)}`, 4000);
753
- setInstallingElementName(null);
754
758
  setActiveElementInstallRequest(null);
755
759
  }
756
760
  };
@@ -758,12 +762,11 @@ const Canvas = ({ canvasContent, size }) => {
758
762
  return () => {
759
763
  canceled = true;
760
764
  };
761
- }, [activeElementInstallRequest, setSelectedModal]);
762
- const closeElementInstallDialog = (0, react_1.useCallback)(() => {
763
- setElementInstallReview(null);
764
- setInstallingElementName(null);
765
- setActiveElementInstallRequest(null);
766
- }, []);
765
+ }, [
766
+ activeElementInstallRequest,
767
+ closeElementInstallDialog,
768
+ setSelectedModal,
769
+ ]);
767
770
  const onDragOver = (0, react_1.useCallback)((event) => {
768
771
  var _a;
769
772
  var _b;
@@ -787,7 +790,7 @@ const Canvas = ({ canvasContent, size }) => {
787
790
  setCompositionDropPreview(null);
788
791
  return;
789
792
  }
790
- const metadata = studio_protocol_1.StudioProtocolInternals.getDragPreviewMetadata((_b = (_a = event.dataTransfer) === null || _a === void 0 ? void 0 : _a.types) !== null && _b !== void 0 ? _b : []);
793
+ const metadata = getCanvasDragPreviewMetadata((_b = (_a = event.dataTransfer) === null || _a === void 0 ? void 0 : _a.types) !== null && _b !== void 0 ? _b : []);
791
794
  if (((metadata === null || metadata === void 0 ? void 0 : metadata.type) !== 'composition' && (metadata === null || metadata === void 0 ? void 0 : metadata.type) !== 'element') ||
792
795
  metadata.width === undefined ||
793
796
  metadata.height === undefined) {
@@ -918,7 +921,7 @@ const Canvas = ({ canvasContent, size }) => {
918
921
  event.stopPropagation();
919
922
  setIsAddingAsset(true);
920
923
  try {
921
- const metadata = studio_protocol_1.StudioProtocolInternals.getDragPreviewMetadata((_d = (_b = event.dataTransfer) === null || _b === void 0 ? void 0 : _b.types) !== null && _d !== void 0 ? _d : []);
924
+ const metadata = getCanvasDragPreviewMetadata((_d = (_b = event.dataTransfer) === null || _b === void 0 ? void 0 : _b.types) !== null && _d !== void 0 ? _d : []);
922
925
  const isComposition = (metadata === null || metadata === void 0 ? void 0 : metadata.type) === 'composition';
923
926
  let dropPosition = getDropPosition({
924
927
  addFitPadding,
@@ -1122,15 +1125,6 @@ const Canvas = ({ canvasContent, size }) => {
1122
1125
  };
1123
1126
  }, [compositionDropPreview, contentDimensions, previewSize, size]);
1124
1127
  return (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
1125
- jsx_runtime_1.jsxs("div", { ref: canvas_ref_1.canvasRef, style: getContainerStyle(editorZoomGestures), children: [size ? (jsx_runtime_1.jsx(Preview_1.VideoPreview, { canvasContent: canvasContent, contentDimensions: contentDimensions, canvasSize: size, assetMetadata: assetResolution, onRetryAssetMetadata: fetchMetadata })) : null, compositionDropPreviewStyle === null ? null : (jsx_runtime_1.jsx("div", { className: "css-reset", "data-testid": "composition-drop-preview", style: compositionDropPreviewStyle })), isFit ? null : (jsx_runtime_1.jsx("div", { style: resetZoom, className: "css-reset", children: jsx_runtime_1.jsx(ResetZoomButton_1.ResetZoomButton, { onClick: onReset }) })), editorShowGuides && canvasContent.type === 'composition' && (jsx_runtime_1.jsx(EditorGuides_1.default, { canvasSize: size, contentDimensions: contentDimensions, assetMetadata: assetResolution }))] }), areRulersVisible && (jsx_runtime_1.jsx(EditorRuler_1.EditorRulers, { canCreateGuides: canvasContent.type === 'composition', contentDimensions: contentDimensions, canvasSize: size, assetMetadata: assetResolution, containerRef: canvas_ref_1.canvasRef })), activeElementInstallRequest === null ||
1126
- elementInstallReview === null ? null : (jsx_runtime_1.jsx(ElementInstallConfirmation_1.ElementInstallConfirmation, { currentCompositionMetadata: config === null ||
1127
- currentCompositionId !== activeElementInstallRequest.compositionId
1128
- ? null
1129
- : {
1130
- durationInFrames: config.durationInFrames,
1131
- fps: config.fps,
1132
- height: config.height,
1133
- width: config.width,
1134
- }, currentPlan: elementInstallReview.currentPlan, dependenciesToReview: elementInstallReview.dependenciesToReview, missingPackages: elementInstallReview.missingPackages, newPlan: elementInstallReview.newPlan, onClose: closeElementInstallDialog, request: activeElementInstallRequest, sourceIsUnverified: elementInstallReview.sourceIsUnverified, sourceLabel: elementInstallReview.sourceLabel, usesBrowserDependencyResolution: (0, browser_studio_operations_1.getBrowserStudioOperations)() !== null }))] }));
1128
+ jsx_runtime_1.jsxs("div", { ref: canvas_ref_1.canvasRef, style: getContainerStyle(editorZoomGestures), children: [size ? (jsx_runtime_1.jsx(Preview_1.VideoPreview, { canvasContent: canvasContent, contentDimensions: contentDimensions, canvasSize: size, assetMetadata: assetResolution, onRetryAssetMetadata: fetchMetadata })) : null, compositionDropPreviewStyle === null ? null : (jsx_runtime_1.jsx("div", { className: "css-reset", "data-testid": "composition-drop-preview", style: compositionDropPreviewStyle })), isFit ? null : (jsx_runtime_1.jsx("div", { style: resetZoom, className: "css-reset", children: jsx_runtime_1.jsx(ResetZoomButton_1.ResetZoomButton, { onClick: onReset }) })), editorShowGuides && canvasContent.type === 'composition' && (jsx_runtime_1.jsx(EditorGuides_1.default, { canvasSize: size, contentDimensions: contentDimensions, assetMetadata: assetResolution }))] }), areRulersVisible && (jsx_runtime_1.jsx(EditorRuler_1.EditorRulers, { canCreateGuides: canvasContent.type === 'composition', contentDimensions: contentDimensions, canvasSize: size, assetMetadata: assetResolution, containerRef: canvas_ref_1.canvasRef }))] }));
1135
1129
  };
1136
1130
  exports.Canvas = Canvas;
@@ -2,8 +2,6 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.CompositionSelector = exports.useCompositionNavigation = void 0;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
- const studio_protocol_1 = require("@remotion/studio-protocol");
6
- const studio_shared_1 = require("@remotion/studio-shared");
7
5
  const react_1 = require("react");
8
6
  const remotion_1 = require("remotion");
9
7
  const client_id_1 = require("../helpers/client-id");
@@ -13,6 +11,7 @@ const persist_open_folders_1 = require("../helpers/persist-open-folders");
13
11
  const folders_1 = require("../state/folders");
14
12
  const modals_1 = require("../state/modals");
15
13
  const z_index_1 = require("../state/z-index");
14
+ const composition_drag_data_1 = require("./composition-drag-data");
16
15
  const CompositionSelectorItem_1 = require("./CompositionSelectorItem");
17
16
  const ContextMenu_1 = require("./ContextMenu");
18
17
  const InitialCompositionLoader_1 = require("./InitialCompositionLoader");
@@ -166,9 +165,8 @@ const CompositionSelector = () => {
166
165
  }
167
166
  }, [runCompositionListAutoScroll, stopCompositionListAutoScroll]);
168
167
  const onCompositionListDragOverCapture = (0, react_1.useCallback)((event) => {
169
- var _a;
170
168
  if (window.remotion_isReadOnlyStudio ||
171
- ((_a = studio_protocol_1.StudioProtocolInternals.getDragPreviewMetadata(event.dataTransfer.types)) === null || _a === void 0 ? void 0 : _a.type) !== 'composition') {
169
+ (0, composition_drag_data_1.getCompositionDragPreviewMetadata)(event.dataTransfer.types) === null) {
172
170
  stopCompositionListAutoScroll();
173
171
  return;
174
172
  }
@@ -183,9 +181,8 @@ const CompositionSelector = () => {
183
181
  return stopCompositionListAutoScroll;
184
182
  }, [stopCompositionListAutoScroll]);
185
183
  const onRootDragOver = (0, react_1.useCallback)((event) => {
186
- var _a;
187
184
  if (window.remotion_isReadOnlyStudio ||
188
- ((_a = studio_protocol_1.StudioProtocolInternals.getDragPreviewMetadata(event.dataTransfer.types)) === null || _a === void 0 ? void 0 : _a.type) !== 'composition') {
185
+ (0, composition_drag_data_1.getCompositionDragPreviewMetadata)(event.dataTransfer.types) === null) {
189
186
  return;
190
187
  }
191
188
  event.preventDefault();
@@ -205,11 +202,10 @@ const CompositionSelector = () => {
205
202
  if (window.remotion_isReadOnlyStudio) {
206
203
  return;
207
204
  }
208
- const parsed = studio_protocol_1.StudioProtocolInternals.parseDragData(event.dataTransfer);
209
- if ((parsed === null || parsed === void 0 ? void 0 : parsed.type) !== 'composition') {
205
+ const compositionDragData = (0, composition_drag_data_1.parseCompositionDragData)(event.dataTransfer);
206
+ if (compositionDragData === null) {
210
207
  return;
211
208
  }
212
- const compositionDragData = parsed.data;
213
209
  event.preventDefault();
214
210
  event.stopPropagation();
215
211
  stopCompositionListAutoScroll();
@@ -230,7 +226,7 @@ const CompositionSelector = () => {
230
226
  },
231
227
  dryRun: false,
232
228
  signal: controller.signal,
233
- symbolicatedStack: (0, studio_shared_1.compositionDragDataToSymbolicatedStack)(compositionDragData),
229
+ symbolicatedStack: (0, composition_drag_data_1.compositionDragDataToSymbolicatedStack)(compositionDragData),
234
230
  });
235
231
  if (result.success) {
236
232
  notification.dismiss();
@@ -2,8 +2,6 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.CompositionSelectorItem = void 0;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
- const studio_protocol_1 = require("@remotion/studio-protocol");
6
- const studio_shared_1 = require("@remotion/studio-shared");
7
5
  const react_1 = require("react");
8
6
  const client_id_1 = require("../helpers/client-id");
9
7
  const colors_1 = require("../helpers/colors");
@@ -12,6 +10,7 @@ const noop_1 = require("../helpers/noop");
12
10
  const sidebar_scroll_into_view_1 = require("../helpers/sidebar-scroll-into-view");
13
11
  const folder_1 = require("../icons/folder");
14
12
  const modals_1 = require("../state/modals");
13
+ const composition_drag_data_1 = require("./composition-drag-data");
15
14
  const composition_menu_items_1 = require("./composition-menu-items");
16
15
  const CompositionContextButton_1 = require("./CompositionContextButton");
17
16
  const CompositionOrStillIcon_1 = require("./CompositionOrStillIcon");
@@ -155,8 +154,7 @@ const CompositionSelectorItem = ({ item, level, currentComposition, tabIndex, se
155
154
  }
156
155
  setIsDragging(true);
157
156
  event.dataTransfer.effectAllowed = 'copyMove';
158
- const dragData = studio_protocol_1.StudioProtocolInternals.makeDragData({
159
- type: 'composition',
157
+ const dragData = (0, composition_drag_data_1.makeCompositionDragData)({
160
158
  compositionFile: (_a = resolvedLocation === null || resolvedLocation === void 0 ? void 0 : resolvedLocation.source) !== null && _a !== void 0 ? _a : null,
161
159
  compositionId: item.composition.id,
162
160
  width: (_b = item.composition.width) !== null && _b !== void 0 ? _b : null,
@@ -169,10 +167,9 @@ const CompositionSelectorItem = ({ item, level, currentComposition, tabIndex, se
169
167
  setIsDragging(false);
170
168
  }, []);
171
169
  const onFolderDragOver = (0, react_1.useCallback)((event) => {
172
- var _a;
173
170
  if (item.type !== 'folder' ||
174
171
  window.remotion_isReadOnlyStudio ||
175
- ((_a = studio_protocol_1.StudioProtocolInternals.getDragPreviewMetadata(event.dataTransfer.types)) === null || _a === void 0 ? void 0 : _a.type) !== 'composition') {
172
+ (0, composition_drag_data_1.getCompositionDragPreviewMetadata)(event.dataTransfer.types) === null) {
176
173
  return;
177
174
  }
178
175
  event.preventDefault();
@@ -185,10 +182,9 @@ const CompositionSelectorItem = ({ item, level, currentComposition, tabIndex, se
185
182
  setDragHovered(false);
186
183
  }, []);
187
184
  const onFolderChildListDragOver = (0, react_1.useCallback)((event) => {
188
- var _a;
189
185
  if (item.type !== 'folder' ||
190
186
  window.remotion_isReadOnlyStudio ||
191
- ((_a = studio_protocol_1.StudioProtocolInternals.getDragPreviewMetadata(event.dataTransfer.types)) === null || _a === void 0 ? void 0 : _a.type) !== 'composition') {
187
+ (0, composition_drag_data_1.getCompositionDragPreviewMetadata)(event.dataTransfer.types) === null) {
192
188
  return;
193
189
  }
194
190
  event.preventDefault();
@@ -200,11 +196,10 @@ const CompositionSelectorItem = ({ item, level, currentComposition, tabIndex, se
200
196
  if (item.type !== 'folder' || window.remotion_isReadOnlyStudio) {
201
197
  return;
202
198
  }
203
- const parsed = studio_protocol_1.StudioProtocolInternals.parseDragData(event.dataTransfer);
204
- if ((parsed === null || parsed === void 0 ? void 0 : parsed.type) !== 'composition') {
199
+ const compositionDragData = (0, composition_drag_data_1.parseCompositionDragData)(event.dataTransfer);
200
+ if (compositionDragData === null) {
205
201
  return;
206
202
  }
207
- const compositionDragData = parsed.data;
208
203
  event.preventDefault();
209
204
  event.stopPropagation();
210
205
  clearRootDragHover();
@@ -228,7 +223,7 @@ const CompositionSelectorItem = ({ item, level, currentComposition, tabIndex, se
228
223
  },
229
224
  dryRun: false,
230
225
  signal: controller.signal,
231
- symbolicatedStack: (0, studio_shared_1.compositionDragDataToSymbolicatedStack)(compositionDragData),
226
+ symbolicatedStack: (0, composition_drag_data_1.compositionDragDataToSymbolicatedStack)(compositionDragData),
232
227
  });
233
228
  if (result.success) {
234
229
  notification.dismiss();
@@ -4,10 +4,12 @@ exports.TitleUpdater = void 0;
4
4
  const react_1 = require("react");
5
5
  const remotion_1 = require("remotion");
6
6
  const document_title_1 = require("../helpers/document-title");
7
+ const modals_1 = require("../state/modals");
7
8
  const context_1 = require("./RenderQueue/context");
8
9
  const TitleUpdater = () => {
9
10
  const renderQueue = (0, react_1.useContext)(context_1.RenderQueueContext);
10
11
  const { canvasContent } = (0, react_1.useContext)(remotion_1.Internals.CompositionManager);
12
+ const selectedModal = (0, react_1.useContext)(modals_1.SelectedModalContext);
11
13
  const { jobs } = renderQueue;
12
14
  (0, react_1.useEffect)(() => {
13
15
  if (!canvasContent) {
@@ -31,6 +33,9 @@ const TitleUpdater = () => {
31
33
  (0, react_1.useEffect)(() => {
32
34
  (0, document_title_1.setRenderJobs)(jobs);
33
35
  }, [jobs]);
36
+ (0, react_1.useEffect)(() => {
37
+ (0, document_title_1.setCurrentModal)(selectedModal);
38
+ }, [selectedModal]);
34
39
  return null;
35
40
  };
36
41
  exports.TitleUpdater = TitleUpdater;
@@ -1,31 +1,10 @@
1
- import type { ElementInstallExpectedFileState, ElementInstallRequest } from '@remotion/studio-shared';
2
1
  import React from 'react';
2
+ import type { ElementInstallModalState } from '../state/modals';
3
3
  export declare const ElementLibraryAddConfirmation: React.FC<{
4
4
  readonly displayName: string | null;
5
5
  readonly origin: string;
6
6
  readonly url: string;
7
7
  }>;
8
- type ElementInstallPlan = {
9
- readonly compositionFile: string;
10
- readonly filePath: string;
11
- readonly expectedFileState: ElementInstallExpectedFileState;
12
- };
13
- type CurrentCompositionMetadata = {
14
- readonly durationInFrames: number;
15
- readonly fps: number;
16
- readonly height: number;
17
- readonly width: number;
18
- };
19
8
  export declare const ElementInstallConfirmation: React.FC<{
20
- readonly currentCompositionMetadata: CurrentCompositionMetadata | null;
21
- readonly currentPlan: ElementInstallPlan | null;
22
- readonly dependenciesToReview: string[];
23
- readonly missingPackages: string[];
24
- readonly newPlan: ElementInstallPlan;
25
- readonly onClose: () => void;
26
- readonly request: ElementInstallRequest;
27
- readonly sourceIsUnverified: boolean;
28
- readonly sourceLabel: string;
29
- readonly usesBrowserDependencyResolution: boolean;
9
+ readonly state: ElementInstallModalState;
30
10
  }>;
31
- export {};
@@ -7,6 +7,7 @@ const react_1 = require("react");
7
7
  const react_dom_1 = require("react-dom");
8
8
  const remotion_1 = require("remotion");
9
9
  const ShortcutHint_1 = require("../error-overlay/remotion-overlay/ShortcutHint");
10
+ const browser_studio_operations_1 = require("../helpers/browser-studio-operations");
10
11
  const colors_1 = require("../helpers/colors");
11
12
  const hoverable_1 = require("../helpers/hoverable");
12
13
  const resolved_stack_to_symbolicated_1 = require("../helpers/resolved-stack-to-symbolicated");
@@ -262,9 +263,22 @@ const ElementLibraryAddConfirmation = ({ displayName, origin, url }) => {
262
263
  ] }));
263
264
  };
264
265
  exports.ElementLibraryAddConfirmation = ElementLibraryAddConfirmation;
265
- const ElementInstallConfirmation = ({ currentCompositionMetadata, currentPlan, dependenciesToReview, missingPackages, newPlan, onClose, request, sourceIsUnverified, sourceLabel, usesBrowserDependencyResolution, }) => {
266
+ const ElementInstallConfirmation = ({ state }) => {
266
267
  var _a, _b;
267
- const { compositions } = (0, react_1.useContext)(remotion_1.Internals.CompositionManager);
268
+ const { currentPlan, dependenciesToReview, missingPackages, newPlan, onClose, request, sourceIsUnverified, sourceLabel, } = state;
269
+ const config = remotion_1.Internals.useUnsafeVideoConfig();
270
+ const { canvasContent, compositions } = (0, react_1.useContext)(remotion_1.Internals.CompositionManager);
271
+ const currentCompositionMetadata = config === null ||
272
+ (canvasContent === null || canvasContent === void 0 ? void 0 : canvasContent.type) !== 'composition' ||
273
+ canvasContent.compositionId !== request.compositionId
274
+ ? null
275
+ : {
276
+ durationInFrames: config.durationInFrames,
277
+ fps: config.fps,
278
+ height: config.height,
279
+ width: config.width,
280
+ };
281
+ const usesBrowserDependencyResolution = (0, browser_studio_operations_1.getBrowserStudioOperations)() !== null;
268
282
  const { currentZIndex } = (0, z_index_1.useZIndex)();
269
283
  const [mode, setMode] = (0, react_1.useState)(currentPlan === null ? 'new-composition' : 'current-composition');
270
284
  const [submitting, setSubmitting] = (0, react_1.useState)(false);
@@ -17,7 +17,7 @@ const pushWithMaxSize = (arr, value, maxSize) => {
17
17
  };
18
18
  const FpsCounter = ({ playbackSpeed }) => {
19
19
  const videoConfig = remotion_1.Internals.useUnsafeVideoConfig();
20
- const [playing] = remotion_1.Internals.Timeline.usePlayingState();
20
+ const playing = remotion_1.Internals.usePlaying();
21
21
  const frame = remotion_1.Internals.Timeline.useTimelinePosition();
22
22
  const [marker, rerender] = (0, react_1.useState)({});
23
23
  const [fps, setFps] = (0, react_1.useState)(0);
@@ -4,7 +4,7 @@ exports.FramePersistor = void 0;
4
4
  const react_1 = require("react");
5
5
  const remotion_1 = require("remotion");
6
6
  const FramePersistor = () => {
7
- const [playing] = remotion_1.Internals.Timeline.usePlayingState();
7
+ const playing = remotion_1.Internals.usePlaying();
8
8
  const config = (0, remotion_1.useVideoConfig)();
9
9
  const frame = remotion_1.Internals.Timeline.useTimelinePosition();
10
10
  const setFrame = remotion_1.Internals.useTimelineSetFrame();
@@ -16,10 +16,10 @@ const InspectorSequenceSection_1 = require("../InspectorSequenceSection");
16
16
  const is_menu_item_1 = require("../Menu/is-menu-item");
17
17
  const NotificationCenter_1 = require("../Notifications/NotificationCenter");
18
18
  const split_video_from_audio_api_1 = require("../split-video-from-audio-api");
19
- const delete_selected_timeline_item_1 = require("../Timeline/delete-selected-timeline-item");
20
19
  const duplicate_selected_timeline_item_1 = require("../Timeline/duplicate-selected-timeline-item");
21
20
  const split_selected_timeline_item_1 = require("../Timeline/split-selected-timeline-item");
22
21
  const TimelineSelection_1 = require("../Timeline/TimelineSelection");
22
+ const use_delete_timeline_items_1 = require("../Timeline/use-delete-timeline-items");
23
23
  const use_sequence_freeze_frame_menu_item_1 = require("../Timeline/use-sequence-freeze-frame-menu-item");
24
24
  const AlignmentControls_1 = require("./AlignmentControls");
25
25
  const common_1 = require("./common");
@@ -74,6 +74,7 @@ const SequenceSourceQuickActions = ({ selection, track, validatedSource }) => {
74
74
  const { propStatuses } = (0, react_1.useContext)(remotion_1.Internals.VisualModePropStatusesContext);
75
75
  const { setPropStatuses } = (0, react_1.useContext)(remotion_1.Internals.VisualModeSettersContext);
76
76
  const confirm = (0, ConfirmationDialog_1.useConfirmationDialog)();
77
+ const deleteTimelineItems = (0, use_delete_timeline_items_1.useDeleteTimelineItems)();
77
78
  const propStatusesForOverride = (0, react_1.useMemo)(() => remotion_1.Internals.getPropStatusesCtx(propStatuses, selection.nodePathInfo.sequenceSubscriptionKey), [propStatuses, selection.nodePathInfo.sequenceSubscriptionKey]);
78
79
  const freezeFrameMenuItem = (0, use_sequence_freeze_frame_menu_item_1.getSequenceFreezeFrameMenuItem)({
79
80
  clientId: previewServerState.type === 'connected' && (0, interactivity_enabled_1.isStudioInteractivityEnabled)()
@@ -98,8 +99,8 @@ const SequenceSourceQuickActions = ({ selection, track, validatedSource }) => {
98
99
  if (sourceActionsDisabled) {
99
100
  return;
100
101
  }
101
- (0, delete_selected_timeline_item_1.deleteSequencesFromSource)([selection.nodePathInfo], confirm).catch(() => undefined);
102
- }, [confirm, selection.nodePathInfo, sourceActionsDisabled]);
102
+ deleteTimelineItems([selection]);
103
+ }, [deleteTimelineItems, selection, sourceActionsDisabled]);
103
104
  const splitVideoFromAudioDisabledReason = sourceActionsDisabled
104
105
  ? 'Studio is read-only'
105
106
  : selection.nodePathInfo.numberOfSequencesWithThisNodePath > 1
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.useCompositionActions = void 0;
4
- const studio_protocol_1 = require("@remotion/studio-protocol");
5
4
  const react_1 = require("react");
6
5
  const remotion_1 = require("remotion");
7
6
  const browser_studio_operations_1 = require("../../helpers/browser-studio-operations");
@@ -173,7 +172,7 @@ const useCompositionActions = () => {
173
172
  });
174
173
  }, [canInsertAsset, onAssetSelected, onFilesSelected, setSelectedModal]);
175
174
  const onCompositionSelected = (0, react_1.useCallback)(async (composition) => {
176
- var _a, _b, _c, _d, _e;
175
+ var _a, _b;
177
176
  if (!canInsertComposition ||
178
177
  currentCompositionId === null ||
179
178
  compositionFile === null) {
@@ -185,14 +184,12 @@ const useCompositionActions = () => {
185
184
  ? await (0, get_stack_1.getOriginalLocationFromStack)(composition.stack, 'sequence')
186
185
  : null;
187
186
  const selectedCompositionFile = (_b = (_a = resolvedLocation === null || resolvedLocation === void 0 ? void 0 : resolvedLocation.source) !== null && _a !== void 0 ? _a : browserStudioOperations === null || browserStudioOperations === void 0 ? void 0 : browserStudioOperations.getCompositionFile(composition.id)) !== null && _b !== void 0 ? _b : null;
188
- const compositionDragData = studio_protocol_1.StudioProtocolInternals.makeDragData({
189
- type: 'composition',
187
+ const compositionDragData = {
188
+ type: 'remotion-composition',
189
+ version: 1,
190
190
  compositionFile: selectedCompositionFile,
191
191
  compositionId: composition.id,
192
- width: (_c = composition.width) !== null && _c !== void 0 ? _c : null,
193
- height: (_d = composition.height) !== null && _d !== void 0 ? _d : null,
194
- durationInFrames: (_e = composition.durationInFrames) !== null && _e !== void 0 ? _e : null,
195
- }).data;
192
+ };
196
193
  await (0, import_assets_1.insertComposition)({
197
194
  composition: compositionDragData,
198
195
  compositionFile,
@@ -107,6 +107,6 @@ const Modals = ({ readOnlyStudio }) => {
107
107
  modalContextType.initialTab === 'packages' ||
108
108
  modalContextType.initialTab === 'shortcuts') ? (jsx_runtime_1.jsx(SettingsModal_1.SettingsModal, { initialTab: modalContextType.initialTab, initialPublicLicenseKey: modalContextType.initialPublicLicenseKey }, `${modalContextType.initialTab}-${modalContextType.initialPublicLicenseKey}`)) : null, modalContextType && modalContextType.type === 'web-render' && (jsx_runtime_1.jsx(WebRenderModal_1.WebRenderModalWithLoader, { ...modalContextType })), modalContextType &&
109
109
  modalContextType.type === 'server-render' &&
110
- (canRender || modalContextType.readOnlyStudio) ? (jsx_runtime_1.jsx(ServerRenderModal_1.RenderModalWithLoader, { readOnlyStudio: (_a = modalContextType.readOnlyStudio) !== null && _a !== void 0 ? _a : false, initialFrame: modalContextType.initialFrame, initialDarkMode: modalContextType.initialDarkMode, compositionId: modalContextType.compositionId, initialVideoImageFormat: modalContextType.initialVideoImageFormat, initialJpegQuality: modalContextType.initialJpegQuality, initialScale: modalContextType.initialScale, initialLogLevel: modalContextType.initialLogLevel, initialOffthreadVideoCacheSizeInBytes: modalContextType.initialOffthreadVideoCacheSizeInBytes, initialOffthreadVideoThreads: modalContextType.initialOffthreadVideoThreads, initialMediaCacheSizeInBytes: modalContextType.initialMediaCacheSizeInBytes, initialConcurrency: modalContextType.initialConcurrency, maxConcurrency: modalContextType.maxConcurrency, minConcurrency: modalContextType.minConcurrency, initialStillImageFormat: modalContextType.initialStillImageFormat, initialMuted: modalContextType.initialMuted, initialEnforceAudioTrack: modalContextType.initialEnforceAudioTrack, initialProResProfile: modalContextType.initialProResProfile, initialx264Preset: modalContextType.initialx264Preset, initialGopSize: modalContextType.initialGopSize, initialPixelFormat: modalContextType.initialPixelFormat, initialAudioBitrate: modalContextType.initialAudioBitrate, initialVideoBitrate: modalContextType.initialVideoBitrate, initialEveryNthFrame: modalContextType.initialEveryNthFrame, initialNumberOfGifLoops: modalContextType.initialNumberOfGifLoops, initialDelayRenderTimeout: modalContextType.initialDelayRenderTimeout, initialEnvVariables: modalContextType.initialEnvVariables, initialDisableWebSecurity: modalContextType.initialDisableWebSecurity, initialGl: modalContextType.initialOpenGlRenderer, initialHeadless: modalContextType.initialHeadless, initialIgnoreCertificateErrors: modalContextType.initialIgnoreCertificateErrors, initialEncodingBufferSize: modalContextType.initialEncodingBufferSize, initialEncodingMaxRate: modalContextType.initialEncodingMaxRate, initialUserAgent: modalContextType.initialUserAgent, initialColorSpace: modalContextType.initialColorSpace, initialMultiProcessOnLinux: modalContextType.initialMultiProcessOnLinux, initialRepro: modalContextType.initialRepro, initialBeep: modalContextType.initialBeep, initialForSeamlessAacConcatenation: modalContextType.initialForSeamlessAacConcatenation, defaultProps: modalContextType.defaultProps, inFrameMark: modalContextType.inFrameMark, outFrameMark: modalContextType.outFrameMark, defaultConfigurationAudioCodec: modalContextType.defaultConfigurationAudioCodec, defaultConfigurationVideoCodec: modalContextType.defaultConfigurationVideoCodec, renderTypeOfLastRender: modalContextType.renderTypeOfLastRender, defaultMetadata: modalContextType.defaulMetadata, initialHardwareAcceleration: modalContextType.initialHardwareAcceleration, initialSampleRate: modalContextType.initialSampleRate, initialChromeMode: modalContextType.initialChromeMode, renderDefaults: modalContextType.renderDefaults })) : null, modalContextType && modalContextType.type === 'render-progress' && (jsx_runtime_1.jsx(RenderStatusModal_1.RenderStatusModal, { jobId: modalContextType.jobId })), modalContextType && modalContextType.type === 'fix-computed-value' && (jsx_runtime_1.jsx(FixComputedValueModal_1.FixComputedValueModal, { state: modalContextType })), modalContextType && modalContextType.type === 'quick-switcher' && (jsx_runtime_1.jsx(QuickSwitcher_1.default, { readOnlyStudio: readOnlyStudio, invocationTimestamp: modalContextType.invocationTimestamp, initialMode: modalContextType.mode, assetSelection: modalContextType.assetSelection, compositionSelection: modalContextType.compositionSelection })), modalContextType && modalContextType.type === 'element-library' && (jsx_runtime_1.jsx(ElementLibraryModal_1.ElementLibraryModal, { name: modalContextType.name, url: modalContextType.url })), modalContextType && modalContextType.type === 'add-effect' && (jsx_runtime_1.jsx(EffectPickerModal_1.EffectPickerModal, { state: modalContextType })), modalContextType && modalContextType.type === 'confirmation-dialog' && (jsx_runtime_1.jsx(ConfirmationDialog_1.ConfirmationDialog, { state: modalContextType })), modalContextType && modalContextType.type === 'svg-import-dialog' && (jsx_runtime_1.jsx(SvgImportDialog_1.SvgImportDialog, { state: modalContextType })), (0, studio_runtime_config_1.getStudioAskAIEnabled)() && jsx_runtime_1.jsx(AskAiModal_1.AskAiModal, {})] }));
110
+ (canRender || modalContextType.readOnlyStudio) ? (jsx_runtime_1.jsx(ServerRenderModal_1.RenderModalWithLoader, { readOnlyStudio: (_a = modalContextType.readOnlyStudio) !== null && _a !== void 0 ? _a : false, initialFrame: modalContextType.initialFrame, initialDarkMode: modalContextType.initialDarkMode, compositionId: modalContextType.compositionId, initialVideoImageFormat: modalContextType.initialVideoImageFormat, initialJpegQuality: modalContextType.initialJpegQuality, initialScale: modalContextType.initialScale, initialLogLevel: modalContextType.initialLogLevel, initialOffthreadVideoCacheSizeInBytes: modalContextType.initialOffthreadVideoCacheSizeInBytes, initialOffthreadVideoThreads: modalContextType.initialOffthreadVideoThreads, initialMediaCacheSizeInBytes: modalContextType.initialMediaCacheSizeInBytes, initialConcurrency: modalContextType.initialConcurrency, maxConcurrency: modalContextType.maxConcurrency, minConcurrency: modalContextType.minConcurrency, initialStillImageFormat: modalContextType.initialStillImageFormat, initialMuted: modalContextType.initialMuted, initialEnforceAudioTrack: modalContextType.initialEnforceAudioTrack, initialProResProfile: modalContextType.initialProResProfile, initialx264Preset: modalContextType.initialx264Preset, initialGopSize: modalContextType.initialGopSize, initialPixelFormat: modalContextType.initialPixelFormat, initialAudioBitrate: modalContextType.initialAudioBitrate, initialVideoBitrate: modalContextType.initialVideoBitrate, initialEveryNthFrame: modalContextType.initialEveryNthFrame, initialNumberOfGifLoops: modalContextType.initialNumberOfGifLoops, initialDelayRenderTimeout: modalContextType.initialDelayRenderTimeout, initialEnvVariables: modalContextType.initialEnvVariables, initialDisableWebSecurity: modalContextType.initialDisableWebSecurity, initialGl: modalContextType.initialOpenGlRenderer, initialHeadless: modalContextType.initialHeadless, initialIgnoreCertificateErrors: modalContextType.initialIgnoreCertificateErrors, initialEncodingBufferSize: modalContextType.initialEncodingBufferSize, initialEncodingMaxRate: modalContextType.initialEncodingMaxRate, initialUserAgent: modalContextType.initialUserAgent, initialColorSpace: modalContextType.initialColorSpace, initialMultiProcessOnLinux: modalContextType.initialMultiProcessOnLinux, initialRepro: modalContextType.initialRepro, initialBeep: modalContextType.initialBeep, initialForSeamlessAacConcatenation: modalContextType.initialForSeamlessAacConcatenation, defaultProps: modalContextType.defaultProps, inFrameMark: modalContextType.inFrameMark, outFrameMark: modalContextType.outFrameMark, defaultConfigurationAudioCodec: modalContextType.defaultConfigurationAudioCodec, defaultConfigurationVideoCodec: modalContextType.defaultConfigurationVideoCodec, renderTypeOfLastRender: modalContextType.renderTypeOfLastRender, defaultMetadata: modalContextType.defaulMetadata, initialHardwareAcceleration: modalContextType.initialHardwareAcceleration, initialSampleRate: modalContextType.initialSampleRate, initialChromeMode: modalContextType.initialChromeMode, renderDefaults: modalContextType.renderDefaults })) : null, modalContextType && modalContextType.type === 'render-progress' && (jsx_runtime_1.jsx(RenderStatusModal_1.RenderStatusModal, { jobId: modalContextType.jobId })), modalContextType && modalContextType.type === 'fix-computed-value' && (jsx_runtime_1.jsx(FixComputedValueModal_1.FixComputedValueModal, { state: modalContextType })), modalContextType && modalContextType.type === 'quick-switcher' && (jsx_runtime_1.jsx(QuickSwitcher_1.default, { readOnlyStudio: readOnlyStudio, invocationTimestamp: modalContextType.invocationTimestamp, initialMode: modalContextType.mode, assetSelection: modalContextType.assetSelection, compositionSelection: modalContextType.compositionSelection })), modalContextType && modalContextType.type === 'element-library' && (jsx_runtime_1.jsx(ElementLibraryModal_1.ElementLibraryModal, { name: modalContextType.name, url: modalContextType.url })), modalContextType && modalContextType.type === 'element-install' && (jsx_runtime_1.jsx(ElementInstallConfirmation_1.ElementInstallConfirmation, { state: modalContextType })), modalContextType && modalContextType.type === 'add-effect' && (jsx_runtime_1.jsx(EffectPickerModal_1.EffectPickerModal, { state: modalContextType })), modalContextType && modalContextType.type === 'confirmation-dialog' && (jsx_runtime_1.jsx(ConfirmationDialog_1.ConfirmationDialog, { state: modalContextType })), modalContextType && modalContextType.type === 'svg-import-dialog' && (jsx_runtime_1.jsx(SvgImportDialog_1.SvgImportDialog, { state: modalContextType })), (0, studio_runtime_config_1.getStudioAskAIEnabled)() && jsx_runtime_1.jsx(AskAiModal_1.AskAiModal, {})] }));
111
111
  };
112
112
  exports.Modals = Modals;
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.NewComposition = exports.NewCompositionFields = void 0;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const canvas_1 = require("@remotion/canvas");
5
6
  const react_1 = require("react");
6
7
  const remotion_1 = require("remotion");
7
8
  const get_static_files_1 = require("../../api/get-static-files");
@@ -9,7 +10,6 @@ const write_static_file_1 = require("../../api/write-static-file");
9
10
  const colors_1 = require("../../helpers/colors");
10
11
  const get_folder_id_1 = require("../../helpers/get-folder-id");
11
12
  const install_required_package_1 = require("../../helpers/install-required-package");
12
- const sort_by_nonce_history_1 = require("../../helpers/sort-by-nonce-history");
13
13
  const use_create_composition_1 = require("../../helpers/use-create-composition");
14
14
  const Checkmark_1 = require("../../icons/Checkmark");
15
15
  const folder_1 = require("../../icons/folder");
@@ -83,7 +83,7 @@ const NewCompositionFields = ({ heightValidationMessage, inputRef, nameValidatio
83
83
  ? folders
84
84
  .slice()
85
85
  .sort((a, b) => a.name.localeCompare(b.name, undefined, { numeric: true }))
86
- : (0, sort_by_nonce_history_1.sortItemsByNonceHistory)(folders);
86
+ : (0, canvas_1.sortItemsByCommitOrder)(folders, (folder) => folder.order);
87
87
  const appendFolders = (parent) => {
88
88
  sortedFolders
89
89
  .filter((folder) => folder.parent === parent)
@@ -79,19 +79,8 @@ const PlayPauseInner = ({ playbackRate, loop, bufferStateDelayInMilliseconds, mu
79
79
  const { inFrame, outFrame } = (0, in_out_1.useTimelineInOutFramePosition)();
80
80
  const videoConfig = remotion_1.Internals.useUnsafeVideoConfig();
81
81
  const [showBufferIndicator, setShowBufferState] = (0, react_1.useState)(false);
82
- const { play, pause, pauseAndReturnToPlayStart, frameBack, seek, frameForward, emitter, getCurrentFrame, isPlaying, } = player_1.PlayerInternals.usePlayerMethods();
83
- const [playing, setPlaying] = (0, react_1.useState)(isPlaying);
84
- (0, react_1.useEffect)(() => {
85
- const onPlay = () => setPlaying(true);
86
- const onPause = () => setPlaying(false);
87
- setPlaying(isPlaying());
88
- emitter.addEventListener('play', onPlay);
89
- emitter.addEventListener('pause', onPause);
90
- return () => {
91
- emitter.removeEventListener('play', onPlay);
92
- emitter.removeEventListener('pause', onPause);
93
- };
94
- }, [emitter, isPlaying]);
82
+ const { play, pause, pauseAndReturnToPlayStart, frameBack, seek, frameForward, emitter, getCurrentFrame, } = player_1.PlayerInternals.usePlayerMethods();
83
+ const playing = remotion_1.Internals.usePlaying();
95
84
  const isStill = (0, is_current_selected_still_1.useIsStill)();
96
85
  (0, react_1.useEffect)(() => {
97
86
  if (isStill) {