@remotion/studio 4.0.518 → 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 (196) hide show
  1. package/dist/api/visual-control.js +2 -2
  2. package/dist/components/AppLaunchButton.d.ts +16 -0
  3. package/dist/components/AppLaunchButton.js +90 -0
  4. package/dist/components/AssetSelector.js +7 -6
  5. package/dist/components/AssetSelectorItem.d.ts +12 -0
  6. package/dist/components/AssetSelectorItem.js +180 -62
  7. package/dist/components/AudioWaveform.js +6 -1
  8. package/dist/components/Button.js +20 -7
  9. package/dist/components/Canvas.js +117 -92
  10. package/dist/components/CanvasOrLoading.js +7 -7
  11. package/dist/components/CodingAgentButton.d.ts +7 -0
  12. package/dist/components/CodingAgentButton.js +59 -0
  13. package/dist/components/CompositionContextButton.d.ts +1 -0
  14. package/dist/components/CompositionContextButton.js +6 -3
  15. package/dist/components/CompositionSelector.js +21 -20
  16. package/dist/components/CompositionSelectorItem.js +23 -35
  17. package/dist/components/ConfigureLicenseModal.js +4 -48
  18. package/dist/components/CurrentAsset.js +1 -1
  19. package/dist/components/CurrentCompositionSideEffects.js +5 -0
  20. package/dist/components/ElementInstallConfirmation.d.ts +2 -10
  21. package/dist/components/ElementInstallConfirmation.js +339 -32
  22. package/dist/components/FixComputedValueModal.js +5 -131
  23. package/dist/components/FpsCounter.js +1 -1
  24. package/dist/components/FramePersistor.js +1 -1
  25. package/dist/components/InitialCompositionLoader.js +3 -2
  26. package/dist/components/InspectorOpenInEditor.js +48 -33
  27. package/dist/components/InspectorPanel/CompositionInspector.js +35 -3
  28. package/dist/components/InspectorPanel/CompositionInspectorHeader.js +22 -14
  29. package/dist/components/InspectorPanel/ConnectedCompositionsSection.js +3 -1
  30. package/dist/components/InspectorPanel/SequenceInspectorHeader.d.ts +1 -1
  31. package/dist/components/InspectorPanel/SequenceInspectorHeader.js +10 -5
  32. package/dist/components/InspectorPanel/SequenceSelectionInspector.js +5 -4
  33. package/dist/components/InspectorPanel/common.js +1 -0
  34. package/dist/components/InspectorPanel/styles.js +1 -0
  35. package/dist/components/InspectorPanel/use-composition-actions.js +5 -8
  36. package/dist/components/InspectorSequenceSection.js +8 -3
  37. package/dist/components/InspectorSourceLocation.js +5 -1
  38. package/dist/components/KnownBugs.d.ts +1 -1
  39. package/dist/components/KnownBugs.js +1 -1
  40. package/dist/components/LicenseExplanation.d.ts +2 -0
  41. package/dist/components/LicenseExplanation.js +63 -0
  42. package/dist/components/MenuToolbar.js +7 -1
  43. package/dist/components/Modals.js +1 -2
  44. package/dist/components/NewComposition/InputDragger.js +29 -2
  45. package/dist/components/NewComposition/NewCompDuration.js +1 -1
  46. package/dist/components/NewComposition/NewComposition.d.ts +23 -0
  47. package/dist/components/NewComposition/NewComposition.js +217 -80
  48. package/dist/components/{UpdateModal/OpenIssueButton.js → OpenIssueButton.js} +1 -1
  49. package/dist/components/PlayPause.js +2 -13
  50. package/dist/components/PreviewToolbar.js +1 -1
  51. package/dist/components/QuickSwitcher/ExplorerQuickSwitcherTrigger.js +2 -1
  52. package/dist/components/QuickSwitcher/QuickSwitcherContent.js +50 -28
  53. package/dist/components/QuickSwitcher/QuickSwitcherResult.d.ts +14 -1
  54. package/dist/components/QuickSwitcher/QuickSwitcherResult.js +64 -9
  55. package/dist/components/QuickSwitcher/composition-search.d.ts +16 -0
  56. package/dist/components/QuickSwitcher/composition-search.js +136 -0
  57. package/dist/components/RenderQueue/actions.d.ts +1 -0
  58. package/dist/components/RenderQueue/actions.js +5 -1
  59. package/dist/components/ResetZoomButton.js +17 -2
  60. package/dist/components/SelectedOutlineCanvasRotation.js +27 -1
  61. package/dist/components/SelectedOutlineElement.js +12 -31
  62. package/dist/components/SelectedOutlineKeyboardControls.d.ts +2 -2
  63. package/dist/components/SelectedOutlineOverlay.d.ts +3 -1
  64. package/dist/components/SelectedOutlineOverlay.js +21 -26
  65. package/dist/components/SelectedOutlinePolygon.d.ts +1 -0
  66. package/dist/components/SelectedOutlinePolygon.js +12 -4
  67. package/dist/components/SelectedOutlineRenderer.js +88 -21
  68. package/dist/components/SettingsContext.js +2 -1
  69. package/dist/components/SettingsModal.d.ts +1 -1
  70. package/dist/components/SettingsModal.js +19 -3
  71. package/dist/components/SidebarRenderButton.d.ts +1 -0
  72. package/dist/components/SidebarRenderButton.js +14 -5
  73. package/dist/components/Timeline/SequencePropsObserver.js +29 -14
  74. package/dist/components/Timeline/Timeline.js +2 -1
  75. package/dist/components/Timeline/TimelineAssetField.js +1 -0
  76. package/dist/components/Timeline/TimelineDeleteKeybindings.js +5 -90
  77. package/dist/components/Timeline/TimelineDragHandler.js +18 -8
  78. package/dist/components/Timeline/TimelineInOutDragHandler.js +2 -3
  79. package/dist/components/Timeline/TimelineKeyframeControls.js +3 -1
  80. package/dist/components/Timeline/TimelinePinchZoom.js +14 -4
  81. package/dist/components/Timeline/TimelinePlayCursorSyncer.js +8 -4
  82. package/dist/components/Timeline/TimelineRowChrome.js +4 -2
  83. package/dist/components/Timeline/TimelineSequence.js +52 -45
  84. package/dist/components/Timeline/TimelineSequenceItem.js +44 -32
  85. package/dist/components/Timeline/TimelineSequenceRightEdgeDragHandle.js +3 -3
  86. package/dist/components/Timeline/TimelineSlider.js +2 -2
  87. package/dist/components/Timeline/TimelineStack/get-stack.d.ts +1 -0
  88. package/dist/components/Timeline/TimelineStack/get-stack.js +35 -3
  89. package/dist/components/Timeline/TimelineWidthProvider.js +15 -8
  90. package/dist/components/Timeline/TimelineZoomControls.js +25 -8
  91. package/dist/components/Timeline/delete-selected-timeline-item.js +2 -2
  92. package/dist/components/Timeline/duplicate-selected-timeline-item.js +23 -25
  93. package/dist/components/Timeline/get-sequence-context-menu-items.d.ts +6 -0
  94. package/dist/components/Timeline/get-sequence-context-menu-items.js +34 -1
  95. package/dist/components/Timeline/sequence-props-subscription-store.d.ts +2 -0
  96. package/dist/components/Timeline/sequence-props-subscription-store.js +22 -1
  97. package/dist/components/Timeline/timeline-scroll-logic.d.ts +1 -0
  98. package/dist/components/Timeline/timeline-scroll-logic.js +21 -17
  99. package/dist/components/Timeline/use-delete-timeline-items.d.ts +1 -0
  100. package/dist/components/Timeline/use-delete-timeline-items.js +118 -0
  101. package/dist/components/Timeline/use-sequence-props-subscription.js +7 -0
  102. package/dist/components/Timeline/use-timeline-asset-drop.js +8 -14
  103. package/dist/components/TimelineCombobox.js +1 -0
  104. package/dist/components/UpdateCheck.d.ts +0 -8
  105. package/dist/components/UpdateCheck.js +7 -54
  106. package/dist/components/UpdateStatusContext.d.ts +18 -0
  107. package/dist/components/UpdateStatusContext.js +74 -0
  108. package/dist/components/UpdatesSettings.d.ts +2 -0
  109. package/dist/components/UpdatesSettings.js +251 -0
  110. package/dist/components/WebMcp.js +64 -11
  111. package/dist/components/ZoomPersistor.js +2 -2
  112. package/dist/components/composition-drag-data.d.ts +36 -0
  113. package/dist/components/composition-drag-data.js +232 -0
  114. package/dist/components/drop-handler-data.d.ts +2 -1
  115. package/dist/components/drop-handler-data.js +6 -4
  116. package/dist/components/effect-drag-and-drop.d.ts +2 -5
  117. package/dist/components/get-open-in-menu-items.d.ts +4 -0
  118. package/dist/components/get-open-in-menu-items.js +28 -24
  119. package/dist/components/handle-drop.js +6 -2
  120. package/dist/components/import-assets.d.ts +5 -13
  121. package/dist/components/root-composition-menu-items.d.ts +4 -1
  122. package/dist/components/root-composition-menu-items.js +38 -1
  123. package/dist/components/selected-outline-geometry.d.ts +21 -2
  124. package/dist/components/selected-outline-geometry.js +16 -5
  125. package/dist/components/selected-outline-measurement.d.ts +40 -1
  126. package/dist/components/selected-outline-measurement.js +239 -1
  127. package/dist/components/selected-outline-order.d.ts +12 -0
  128. package/dist/components/selected-outline-order.js +251 -0
  129. package/dist/components/selected-outline-types.d.ts +15 -2
  130. package/dist/components/selected-outline-uv.js +106 -3
  131. package/dist/components/use-configure-default-apps.d.ts +1 -0
  132. package/dist/components/use-configure-default-apps.js +24 -0
  133. package/dist/error-overlay/current-error.d.ts +13 -0
  134. package/dist/error-overlay/current-error.js +21 -0
  135. package/dist/error-overlay/remotion-overlay/CodeFrame.js +5 -6
  136. package/dist/error-overlay/remotion-overlay/CopyStackTrace.js +1 -1
  137. package/dist/error-overlay/remotion-overlay/ErrorDisplay.js +47 -18
  138. package/dist/error-overlay/remotion-overlay/ErrorLoader.js +6 -2
  139. package/dist/error-overlay/remotion-overlay/ErrorTitle.js +5 -4
  140. package/dist/error-overlay/remotion-overlay/OpenInEditor.js +48 -76
  141. package/dist/error-overlay/remotion-overlay/SearchGitHubIssues.js +1 -1
  142. package/dist/error-overlay/remotion-overlay/ShortcutHint.js +2 -2
  143. package/dist/error-overlay/remotion-overlay/StackFrame.js +13 -8
  144. package/dist/error-overlay/remotion-overlay/Symbolicating.js +1 -1
  145. package/dist/esm/chunk-6jf1natv.js +25 -0
  146. package/dist/esm/{chunk-4bxz1d3g.js → chunk-je0h1bgt.js} +1 -28
  147. package/dist/esm/chunk-m0jqdbkr.js +14571 -0
  148. package/dist/esm/{chunk-7prjt5n5.js → chunk-np6q13k5.js} +18637 -12189
  149. package/dist/esm/index.mjs +4 -3
  150. package/dist/esm/internals.mjs +35826 -14822
  151. package/dist/esm/previewEntry.mjs +40028 -18935
  152. package/dist/esm/renderEntry.mjs +6 -3
  153. package/dist/helpers/can-show-updates.d.ts +5 -0
  154. package/dist/helpers/can-show-updates.js +7 -0
  155. package/dist/helpers/colors.d.ts +0 -3
  156. package/dist/helpers/colors.js +2 -5
  157. package/dist/helpers/create-folder-tree.d.ts +5 -0
  158. package/dist/helpers/create-folder-tree.js +26 -6
  159. package/dist/helpers/document-title.d.ts +2 -0
  160. package/dist/helpers/document-title.js +14 -3
  161. package/dist/helpers/get-asset-metadata.js +1 -1
  162. package/dist/helpers/get-box-quads-polyfill-internals.d.ts +82 -0
  163. package/dist/helpers/get-box-quads-polyfill-internals.js +2403 -0
  164. package/dist/helpers/get-box-quads-ponyfill.d.ts +10 -0
  165. package/dist/helpers/get-box-quads-ponyfill.js +23 -0
  166. package/dist/helpers/get-git-menu-item.d.ts +5 -0
  167. package/dist/helpers/get-git-menu-item.js +15 -1
  168. package/dist/helpers/get-timeline-max-zoom.d.ts +34 -28
  169. package/dist/helpers/get-timeline-max-zoom.js +46 -29
  170. package/dist/helpers/hoverable.js +10 -5
  171. package/dist/helpers/install-fiber-sequence-order-observer.d.ts +37 -0
  172. package/dist/helpers/install-fiber-sequence-order-observer.js +109 -0
  173. package/dist/helpers/open-in-editor.js +53 -2
  174. package/dist/helpers/preview-server-events.js +3 -0
  175. package/dist/helpers/timeline-layout.d.ts +0 -1
  176. package/dist/helpers/timeline-layout.js +1 -5
  177. package/dist/helpers/url-state.d.ts +1 -0
  178. package/dist/helpers/url-state.js +12 -5
  179. package/dist/helpers/use-runtime-values.d.ts +1 -1
  180. package/dist/helpers/use-runtime-values.js +5 -4
  181. package/dist/helpers/use-sync-external-store.d.ts +3 -0
  182. package/dist/helpers/use-sync-external-store.js +5 -0
  183. package/dist/previewEntry.js +2 -0
  184. package/dist/renderEntry.js +2 -0
  185. package/dist/state/folders.d.ts +3 -0
  186. package/dist/state/folders.js +40 -1
  187. package/dist/state/modals.d.ts +19 -8
  188. package/dist/state/timeline-sequence-hover.js +3 -2
  189. package/dist/state/timeline-zoom.d.ts +0 -1
  190. package/dist/state/timeline-zoom.js +13 -6
  191. package/package.json +18 -15
  192. package/dist/components/UpdateModal/UpdateModal.d.ts +0 -6
  193. package/dist/components/UpdateModal/UpdateModal.js +0 -104
  194. package/dist/helpers/sort-by-nonce-history.d.ts +0 -1
  195. package/dist/helpers/sort-by-nonce-history.js +0 -6
  196. /package/dist/components/{UpdateModal/OpenIssueButton.d.ts → OpenIssueButton.d.ts} +0 -0
@@ -0,0 +1,3 @@
1
+ type UseSyncExternalStore = <TSnapshot>(subscribe: (onStoreChange: () => void) => () => void, getSnapshot: () => TSnapshot, getServerSnapshot?: () => TSnapshot) => TSnapshot;
2
+ export declare const useSyncExternalStore: UseSyncExternalStore;
3
+ export {};
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useSyncExternalStore = void 0;
4
+ const remotion_1 = require("remotion");
5
+ ({ useSyncExternalStore: exports.useSyncExternalStore } = remotion_1.Internals);
@@ -10,8 +10,10 @@ const no_react_1 = require("remotion/no-react");
10
10
  const NoRegisterRoot_1 = require("./components/NoRegisterRoot");
11
11
  const entry_basic_1 = require("./error-overlay/entry-basic");
12
12
  const colors_1 = require("./helpers/colors");
13
+ const install_fiber_sequence_order_observer_1 = require("./helpers/install-fiber-sequence-order-observer");
13
14
  const client_2 = require("./hot-middleware-client/client");
14
15
  const Studio_1 = require("./Studio");
16
+ (0, install_fiber_sequence_order_observer_1.installFiberCommitOrderObserver)(window);
15
17
  remotion_1.Internals.CSSUtils.injectCSS(remotion_1.Internals.CSSUtils.makeDefaultPreviewCSS(null, colors_1.BACKGROUND_HEX));
16
18
  if (!window.__remotionOverlayStarted) {
17
19
  window.__remotionOverlayStarted = true;
@@ -202,9 +202,11 @@ const renderContent = (Root) => {
202
202
  }
203
203
  renderToDOM(jsx_runtime_1.jsx("div", { children: jsx_runtime_1.jsx(DelayedSpinner, {}) }));
204
204
  Promise.resolve().then(() => __importStar(require('./internals'))).then(({ StudioInternals }) => {
205
+ var _a;
205
206
  window.remotion_isStudio = true;
206
207
  window.remotion_isReadOnlyStudio = true;
207
208
  window.remotion_inputProps = '{}';
209
+ (_a = window.remotion_enableSequenceStackTraces) === null || _a === void 0 ? void 0 : _a.call(window);
208
210
  renderToDOM(jsx_runtime_1.jsx(StudioInternals.Studio, { readOnly: true, rootComponent: Root }));
209
211
  })
210
212
  .catch((err) => {
@@ -1,10 +1,13 @@
1
1
  import React from 'react';
2
2
  import type { ExpandedFoldersState } from '../helpers/persist-open-folders';
3
+ export type CompositionSortOrder = 'registration' | 'alphabetical';
3
4
  type TFolderContext = {
4
5
  compositionFoldersExpanded: ExpandedFoldersState;
5
6
  setCompositionFoldersExpanded: React.Dispatch<React.SetStateAction<ExpandedFoldersState>>;
6
7
  assetFoldersExpanded: ExpandedFoldersState;
7
8
  setAssetFoldersExpanded: React.Dispatch<React.SetStateAction<ExpandedFoldersState>>;
9
+ compositionSortOrder: CompositionSortOrder;
10
+ setCompositionSortOrder: (sortOrder: CompositionSortOrder) => void;
8
11
  };
9
12
  export declare const FolderContext: React.Context<TFolderContext>;
10
13
  export declare const FolderContextProvider: React.FC<{
@@ -4,6 +4,29 @@ exports.FolderContextProvider = exports.FolderContext = void 0;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const react_1 = require("react");
6
6
  const persist_open_folders_1 = require("../helpers/persist-open-folders");
7
+ const compositionSortOrderKey = 'remotion.compositionSortOrder';
8
+ const loadCompositionSortOrder = () => {
9
+ if (typeof window === 'undefined') {
10
+ return 'registration';
11
+ }
12
+ try {
13
+ return window.localStorage.getItem(compositionSortOrderKey) ===
14
+ 'alphabetical'
15
+ ? 'alphabetical'
16
+ : 'registration';
17
+ }
18
+ catch (_a) {
19
+ return 'registration';
20
+ }
21
+ };
22
+ const persistCompositionSortOrder = (sortOrder) => {
23
+ try {
24
+ window.localStorage.setItem(compositionSortOrderKey, sortOrder);
25
+ }
26
+ catch (_a) {
27
+ // Ignore quota errors or disabled storage.
28
+ }
29
+ };
7
30
  exports.FolderContext = (0, react_1.createContext)({
8
31
  compositionFoldersExpanded: {},
9
32
  setCompositionFoldersExpanded: () => {
@@ -13,18 +36,34 @@ exports.FolderContext = (0, react_1.createContext)({
13
36
  setAssetFoldersExpanded: () => {
14
37
  throw new Error('default state');
15
38
  },
39
+ compositionSortOrder: 'registration',
40
+ setCompositionSortOrder: () => {
41
+ throw new Error('default state');
42
+ },
16
43
  });
17
44
  const FolderContextProvider = ({ children }) => {
18
45
  const [compositionFoldersExpanded, setCompositionFoldersExpanded] = (0, react_1.useState)(() => (0, persist_open_folders_1.loadExpandedFolders)('compositions'));
19
46
  const [assetFoldersExpanded, setAssetFoldersExpanded] = (0, react_1.useState)(() => (0, persist_open_folders_1.loadExpandedFolders)('assets'));
47
+ const [compositionSortOrder, setCompositionSortOrderState] = (0, react_1.useState)(loadCompositionSortOrder);
48
+ const setCompositionSortOrder = (0, react_1.useCallback)((sortOrder) => {
49
+ persistCompositionSortOrder(sortOrder);
50
+ setCompositionSortOrderState(sortOrder);
51
+ }, []);
20
52
  const value = (0, react_1.useMemo)(() => {
21
53
  return {
22
54
  compositionFoldersExpanded,
23
55
  setCompositionFoldersExpanded,
24
56
  assetFoldersExpanded,
25
57
  setAssetFoldersExpanded,
58
+ compositionSortOrder,
59
+ setCompositionSortOrder,
26
60
  };
27
- }, [assetFoldersExpanded, compositionFoldersExpanded]);
61
+ }, [
62
+ assetFoldersExpanded,
63
+ compositionFoldersExpanded,
64
+ compositionSortOrder,
65
+ setCompositionSortOrder,
66
+ ]);
28
67
  return (jsx_runtime_1.jsx(exports.FolderContext.Provider, { value: value, children: children }));
29
68
  };
30
69
  exports.FolderContextProvider = FolderContextProvider;
@@ -1,6 +1,6 @@
1
1
  import type { AudioCodec, ChromeMode, Codec, ColorSpace, LogLevel, OpenGlRenderer, PixelFormat, StillImageFormat, VideoImageFormat, X264Preset } from '@remotion/renderer';
2
2
  import type { HardwareAccelerationOption } from '@remotion/renderer/client';
3
- import type { CanvasCaptureData, RenderDefaults } from '@remotion/studio-shared';
3
+ import type { CanvasCaptureData, ElementInstallExpectedFileState, ElementInstallRequest, RenderDefaults } from '@remotion/studio-shared';
4
4
  import type { RenderStillOnWebImageFormat, WebRendererAudioCodec, WebRendererContainer, WebRendererHardwareAcceleration, WebRendererPageResponsiveness, WebRendererQuality, WebRendererVideoCodec } from '@remotion/web-renderer';
5
5
  import type React from 'react';
6
6
  import type { SequencePropsSubscriptionKey, _InternalTypes } from 'remotion';
@@ -8,7 +8,6 @@ import type { StaticFile } from '../api/get-static-files';
8
8
  import type { CompType } from '../components/NewComposition/DuplicateComposition';
9
9
  import type { QuickSwitcherMode } from '../components/QuickSwitcher/NoResults';
10
10
  import type { RenderType } from '../components/RenderModal/RenderModalAdvanced';
11
- import type { Bug, UpdateInfo } from '../components/UpdateCheck';
12
11
  export type WebRenderModalState = {
13
12
  type: 'web-render';
14
13
  initialFrame: number;
@@ -117,6 +116,22 @@ export type CanvasCaptureImport = {
117
116
  readonly height: number;
118
117
  readonly width: number;
119
118
  };
119
+ export type ElementInstallPlan = {
120
+ readonly compositionFile: string;
121
+ readonly filePath: string;
122
+ readonly expectedFileState: ElementInstallExpectedFileState;
123
+ };
124
+ export type ElementInstallModalState = {
125
+ readonly type: 'element-install';
126
+ readonly currentPlan: ElementInstallPlan | null;
127
+ readonly dependenciesToReview: string[];
128
+ readonly missingPackages: string[];
129
+ readonly newPlan: ElementInstallPlan;
130
+ readonly onClose: () => void;
131
+ readonly request: ElementInstallRequest;
132
+ readonly sourceIsUnverified: boolean;
133
+ readonly sourceLabel: string;
134
+ };
120
135
  export type ModalState = {
121
136
  type: 'new-comp';
122
137
  folderName: string | null;
@@ -154,15 +169,11 @@ export type ModalState = {
154
169
  type: 'input-props-override';
155
170
  } | {
156
171
  type: 'settings';
157
- initialTab: 'apps' | 'rendering' | 'studio' | 'packages' | 'shortcuts' | 'license';
172
+ initialTab: 'apps' | 'rendering' | 'studio' | 'packages' | 'shortcuts' | 'skills' | 'updates' | 'license';
158
173
  initialPublicLicenseKey: string | null;
159
174
  } | RenderModalState | WebRenderModalState | {
160
175
  type: 'render-progress';
161
176
  jobId: string;
162
- } | {
163
- type: 'update';
164
- info: UpdateInfo;
165
- knownBugs: Bug[];
166
177
  } | {
167
178
  type: 'fix-computed-value';
168
179
  prop: string;
@@ -185,7 +196,7 @@ export type ModalState = {
185
196
  type: 'element-library';
186
197
  name: string;
187
198
  url: string;
188
- } | AddEffectModalState | ConfirmationDialogState | SvgImportDialogState;
199
+ } | ElementInstallModalState | AddEffectModalState | ConfirmationDialogState | SvgImportDialogState;
189
200
  export type SetSelectedModalContextType = {
190
201
  setSelectedModal: React.Dispatch<React.SetStateAction<ModalState | null>>;
191
202
  };
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.useTimelineSequenceHover = exports.useIsTimelineSequenceHovered = exports.useSetTimelineSequenceHover = exports.useTimelineSequenceHoverState = exports.TimelineSequenceHoverContext = exports.createTimelineSequenceHoverStore = void 0;
4
4
  const react_1 = require("react");
5
5
  const timeline_node_path_key_1 = require("../helpers/timeline-node-path-key");
6
+ const use_sync_external_store_1 = require("../helpers/use-sync-external-store");
6
7
  const createTimelineSequenceHoverStore = () => {
7
8
  let hoveredSequence = null;
8
9
  const listeners = new Set();
@@ -28,7 +29,7 @@ exports.createTimelineSequenceHoverStore = createTimelineSequenceHoverStore;
28
29
  exports.TimelineSequenceHoverContext = (0, react_1.createContext)((0, exports.createTimelineSequenceHoverStore)());
29
30
  const useTimelineSequenceHoverState = () => {
30
31
  const store = (0, react_1.useContext)(exports.TimelineSequenceHoverContext);
31
- return (0, react_1.useSyncExternalStore)(store.subscribe, store.getSnapshot, store.getSnapshot);
32
+ return (0, use_sync_external_store_1.useSyncExternalStore)(store.subscribe, store.getSnapshot, store.getSnapshot);
32
33
  };
33
34
  exports.useTimelineSequenceHoverState = useTimelineSequenceHoverState;
34
35
  const useSetTimelineSequenceHover = () => {
@@ -41,7 +42,7 @@ const useIsTimelineSequenceHovered = (nodePathKey) => {
41
42
  var _a;
42
43
  return nodePathKey !== null && ((_a = store.getSnapshot()) === null || _a === void 0 ? void 0 : _a.nodePathKey) === nodePathKey;
43
44
  }, [nodePathKey, store]);
44
- return (0, react_1.useSyncExternalStore)(store.subscribe, getSnapshot, getSnapshot);
45
+ return (0, use_sync_external_store_1.useSyncExternalStore)(store.subscribe, getSnapshot, getSnapshot);
45
46
  };
46
47
  exports.useIsTimelineSequenceHovered = useIsTimelineSequenceHovered;
47
48
  const useTimelineSequenceHover = (nodePathInfo) => {
@@ -1,5 +1,4 @@
1
1
  import React from 'react';
2
- export { getTimelineMaxZoom, TIMELINE_MIN_ZOOM, } from '../helpers/get-timeline-max-zoom';
3
2
  export type TimelineSetZoomOptions = {
4
3
  anchorFrame: number | null;
5
4
  anchorContentX: number | null;
@@ -1,16 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TimelineZoomContext = exports.TimelineZoomCtx = exports.TIMELINE_MIN_ZOOM = exports.getTimelineMaxZoom = void 0;
3
+ exports.TimelineZoomContext = exports.TimelineZoomCtx = void 0;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const react_1 = require("react");
6
6
  const react_dom_1 = require("react-dom");
7
7
  const imperative_state_1 = require("../components/Timeline/imperative-state");
8
+ const timeline_refs_1 = require("../components/Timeline/timeline-refs");
8
9
  const timeline_scroll_logic_1 = require("../components/Timeline/timeline-scroll-logic");
9
10
  const ZoomPersistor_1 = require("../components/ZoomPersistor");
10
11
  const get_timeline_max_zoom_1 = require("../helpers/get-timeline-max-zoom");
11
- const get_timeline_max_zoom_2 = require("../helpers/get-timeline-max-zoom");
12
- Object.defineProperty(exports, "getTimelineMaxZoom", { enumerable: true, get: function () { return get_timeline_max_zoom_2.getTimelineMaxZoom; } });
13
- Object.defineProperty(exports, "TIMELINE_MIN_ZOOM", { enumerable: true, get: function () { return get_timeline_max_zoom_2.TIMELINE_MIN_ZOOM; } });
14
12
  exports.TimelineZoomCtx = (0, react_1.createContext)({
15
13
  zoom: {},
16
14
  setZoom: () => {
@@ -31,9 +29,18 @@ const TimelineZoomContext = ({ children }) => {
31
29
  (0, react_dom_1.flushSync)(() => {
32
30
  setZoomState((prevZoomMap) => {
33
31
  var _a;
32
+ var _b, _c;
33
+ const durationInFrames = (0, imperative_state_1.getCurrentDuration)();
34
+ const timelineViewportWidth = (_b = (_a = timeline_refs_1.scrollableRef.current) === null || _a === void 0 ? void 0 : _a.clientWidth) !== null && _b !== void 0 ? _b : 0;
35
+ const previousZoom = (0, get_timeline_max_zoom_1.getTimelineZoom)({
36
+ durationInFrames,
37
+ timelineViewportWidth,
38
+ zoom: (_c = prevZoomMap[compositionId]) !== null && _c !== void 0 ? _c : null,
39
+ });
34
40
  const newZoom = (0, get_timeline_max_zoom_1.clampTimelineZoom)({
35
- zoom: callback((_a = prevZoomMap[compositionId]) !== null && _a !== void 0 ? _a : get_timeline_max_zoom_1.TIMELINE_MIN_ZOOM),
36
- durationInFrames: (0, imperative_state_1.getCurrentDuration)(),
41
+ zoom: callback(previousZoom),
42
+ durationInFrames,
43
+ timelineViewportWidth,
37
44
  });
38
45
  return { ...prevZoomMap, [compositionId]: newZoom };
39
46
  });
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "url": "https://github.com/remotion-dev/remotion/tree/main/packages/studio"
4
4
  },
5
5
  "name": "@remotion/studio",
6
- "version": "4.0.518",
6
+ "version": "4.0.520",
7
7
  "description": "APIs for interacting with the Remotion Studio",
8
8
  "main": "dist",
9
9
  "scripts": {
@@ -25,30 +25,33 @@
25
25
  },
26
26
  "dependencies": {
27
27
  "@tanstack/react-virtual": "3.14.9",
28
- "@remotion/canvas": "4.0.518",
29
- "@remotion/studio-protocol": "4.0.518",
28
+ "@remotion/canvas": "4.0.520",
29
+ "@remotion/studio-protocol": "4.0.520",
30
+ "@remotion/studio-codemods": "4.0.520",
30
31
  "semver": "7.5.3",
31
- "remotion": "4.0.518",
32
- "@remotion/captions": "4.0.518",
33
- "@remotion/media": "4.0.518",
34
- "@remotion/player": "4.0.518",
35
- "@remotion/media-utils": "4.0.518",
36
- "@remotion/renderer": "4.0.518",
37
- "@remotion/web-renderer": "4.0.518",
38
- "@remotion/studio-shared": "4.0.518",
39
- "@remotion/timeline-utils": "4.0.518",
40
- "@remotion/zod-types": "4.0.518",
32
+ "remotion": "4.0.520",
33
+ "@remotion/captions": "4.0.520",
34
+ "@remotion/media": "4.0.520",
35
+ "@remotion/player": "4.0.520",
36
+ "@remotion/media-utils": "4.0.520",
37
+ "@remotion/renderer": "4.0.520",
38
+ "@remotion/web-renderer": "4.0.520",
39
+ "@remotion/studio-shared": "4.0.520",
40
+ "@remotion/timeline-utils": "4.0.520",
41
+ "@remotion/zod-types": "4.0.520",
41
42
  "@jridgewell/trace-mapping": "0.3.31",
42
- "mediabunny": "1.55.1",
43
+ "mediabunny": "1.55.5",
43
44
  "memfs": "3.4.3",
44
45
  "open": "8.4.2",
45
46
  "zod": "4.4.3"
46
47
  },
47
48
  "devDependencies": {
49
+ "@happy-dom/global-registrator": "14.5.1",
48
50
  "react": "19.2.3",
49
51
  "react-dom": "19.2.3",
52
+ "@testing-library/react": "16.1.0",
50
53
  "@types/semver": "7.5.3",
51
- "@remotion/eslint-config-internal": "4.0.518",
54
+ "@remotion/eslint-config-internal": "4.0.520",
52
55
  "eslint": "9.19.0",
53
56
  "@typescript/native-preview": "7.0.0-dev.20260217.1"
54
57
  },
@@ -1,6 +0,0 @@
1
- import React from 'react';
2
- import type { Bug, UpdateInfo } from '../UpdateCheck';
3
- export declare const UpdateModal: React.FC<{
4
- readonly info: UpdateInfo;
5
- readonly knownBugs: Bug[];
6
- }>;
@@ -1,104 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.UpdateModal = void 0;
4
- const jsx_runtime_1 = require("react/jsx-runtime");
5
- const react_1 = require("react");
6
- const colors_1 = require("../../helpers/colors");
7
- const copy_text_1 = require("../../helpers/copy-text");
8
- const clipboard_1 = require("../../icons/clipboard");
9
- const InlineAction_1 = require("../InlineAction");
10
- const KnownBugs_1 = require("../KnownBugs");
11
- const ModalHeader_1 = require("../ModalHeader");
12
- const DismissableModal_1 = require("../NewComposition/DismissableModal");
13
- const NotificationCenter_1 = require("../Notifications/NotificationCenter");
14
- const container = {
15
- padding: '0 16px 8px',
16
- };
17
- const panelStyle = {
18
- borderRadius: 6,
19
- overflow: 'hidden',
20
- };
21
- const text = {
22
- color: colors_1.LIGHT_TEXT,
23
- fontFamily: 'sans-serif',
24
- fontSize: 14,
25
- lineHeight: 1.5,
26
- };
27
- const title = {
28
- paddingTop: 12,
29
- paddingBottom: 8,
30
- ...text,
31
- };
32
- const commandField = {
33
- alignItems: 'center',
34
- background: colors_1.SELECTED_BACKGROUND,
35
- borderRadius: 6,
36
- boxSizing: 'border-box',
37
- display: 'flex',
38
- marginBottom: 10,
39
- marginTop: 10,
40
- padding: '8px 8px 8px 10px',
41
- width: '100%',
42
- };
43
- const code = {
44
- color: colors_1.WHITE,
45
- flex: 1,
46
- fontFamily: 'monospace',
47
- fontSize: 14,
48
- lineHeight: 1.5,
49
- margin: 0,
50
- minWidth: 0,
51
- overflowX: 'auto',
52
- whiteSpace: 'pre',
53
- };
54
- const copyIcon = {
55
- flexShrink: 0,
56
- height: 12,
57
- width: 12,
58
- };
59
- const link = {
60
- ...text,
61
- fontWeight: 'bold',
62
- color: colors_1.BLUE,
63
- textDecoration: 'none',
64
- };
65
- const commands = {
66
- npm: 'npx remotion upgrade',
67
- yarn: 'yarn remotion upgrade',
68
- pnpm: 'pnpm exec remotion upgrade',
69
- bun: 'bun remotion upgrade',
70
- unknown: 'npx remotion upgrade',
71
- };
72
- const skillsUpdateCommand = 'npx remotion skills update';
73
- const remotionUpgradeSkill = '/remotion-upgrade';
74
- const UpdateModal = ({ info, knownBugs }) => {
75
- const hasKnownBugs = (0, react_1.useMemo)(() => {
76
- return knownBugs && (knownBugs === null || knownBugs === void 0 ? void 0 : knownBugs.length) > 0;
77
- }, [knownBugs]);
78
- const updateAction = info.remotionUpgradeSkillAvailable
79
- ? remotionUpgradeSkill
80
- : info.updateAvailable
81
- ? commands[info.packageManager]
82
- : skillsUpdateCommand;
83
- const updateActionType = info.remotionUpgradeSkillAvailable
84
- ? 'skill'
85
- : 'command';
86
- const onClick = (0, react_1.useCallback)(() => {
87
- (0, copy_text_1.copyText)(updateAction).catch((err) => {
88
- (0, NotificationCenter_1.showNotification)(`Could not copy: ${err.message}`, 2000);
89
- });
90
- }, [updateAction]);
91
- const renderCopyAction = (0, react_1.useCallback)((color) => {
92
- return jsx_runtime_1.jsx(clipboard_1.ClipboardIcon, { color: color, style: copyIcon });
93
- }, []);
94
- return (jsx_runtime_1.jsxs(DismissableModal_1.DismissableModal, { panelStyle: panelStyle, children: [
95
- jsx_runtime_1.jsx(ModalHeader_1.ModalHeader, { title: "Update available" }), jsx_runtime_1.jsxs("div", { style: container, children: [hasKnownBugs && info.updateAvailable ? (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
96
- jsx_runtime_1.jsxs("div", { style: title, children: ["The currently installed version ", info.currentVersion, " has the following known bugs:"] }), jsx_runtime_1.jsx(KnownBugs_1.KnownBugs, { bugs: knownBugs }), jsx_runtime_1.jsx("div", { style: { height: '20px' } }), jsx_runtime_1.jsxs("div", { style: text, children: ["To upgrade, run the following ", updateActionType, ":"] })
97
- ] })) : info.updateAvailable ? (jsx_runtime_1.jsxs("div", { style: title, children: ["A new update for Remotion is available! Run the following", ' ', updateActionType, ":"] })) : (jsx_runtime_1.jsxs("div", { style: title, children: ["Your Remotion Agent Skills are out of date. Run the following", ' ', updateActionType, ":"] })), jsx_runtime_1.jsxs("div", { style: commandField, children: [
98
- jsx_runtime_1.jsx("pre", { style: code, children: updateAction }), jsx_runtime_1.jsx(InlineAction_1.InlineAction, { variant: null, onClick: onClick, renderAction: renderCopyAction, title: "Copy command" })
99
- ] }), info.updateAvailable ? (jsx_runtime_1.jsxs("div", { style: text, children: ["This will upgrade Remotion from ", info.currentVersion, " to", ' ', info.latestVersion, info.skillsUpdateAvailable
100
- ? ' and update your project Remotion Agent Skills.'
101
- : '.'] })) : null, info.updateAvailable ? (jsx_runtime_1.jsxs("div", { style: text, children: ["Read the", ' ', jsx_runtime_1.jsx("a", { style: link, target: "_blank", href: "https://github.com/remotion-dev/remotion/releases", children: "Release notes" }), ' ', "to know what", "'s", " new in Remotion."] })) : null] })
102
- ] }));
103
- };
104
- exports.UpdateModal = UpdateModal;
@@ -1 +0,0 @@
1
- export { compareNonceHistories, sortItemsByNonceHistory } from '@remotion/canvas';
@@ -1,6 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.sortItemsByNonceHistory = exports.compareNonceHistories = void 0;
4
- const canvas_1 = require("@remotion/canvas");
5
- Object.defineProperty(exports, "compareNonceHistories", { enumerable: true, get: function () { return canvas_1.compareNonceHistories; } });
6
- Object.defineProperty(exports, "sortItemsByNonceHistory", { enumerable: true, get: function () { return canvas_1.sortItemsByNonceHistory; } });