@remotion/studio 4.0.521 → 4.0.522

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 (60) hide show
  1. package/dist/components/CanvasIfSizeIsAvailable.js +7 -0
  2. package/dist/components/CopyButton.js +7 -14
  3. package/dist/components/Editor.js +6 -5
  4. package/dist/components/EditorContent.js +1 -1
  5. package/dist/components/ElementInstallConfirmation.js +3 -1
  6. package/dist/components/FixComputedValueModal.js +20 -10
  7. package/dist/components/InspectorLocationCopy.js +10 -5
  8. package/dist/components/MenuBuildIndicator.js +7 -2
  9. package/dist/components/MenuCompositionName.js +62 -6
  10. package/dist/components/RenderModal/CliCopyButton.js +13 -27
  11. package/dist/components/RenderQueue/RenderQueueCopyToClipboard.js +7 -4
  12. package/dist/components/SidebarCollapserControls.js +11 -5
  13. package/dist/components/SkillsSettings.js +9 -5
  14. package/dist/components/Splitter/SplitterContainer.js +63 -10
  15. package/dist/components/Splitter/SplitterContext.d.ts +3 -0
  16. package/dist/components/Splitter/SplitterContext.js +5 -1
  17. package/dist/components/Splitter/SplitterElement.js +11 -2
  18. package/dist/components/Splitter/SplitterHandle.d.ts +1 -0
  19. package/dist/components/Splitter/SplitterHandle.js +55 -25
  20. package/dist/components/Timeline/SubscribeToNodePaths.d.ts +2 -1
  21. package/dist/components/Timeline/SubscribeToNodePaths.js +2 -1
  22. package/dist/components/Timeline/Timeline.js +15 -4
  23. package/dist/components/Timeline/TimelineDragHandler.js +9 -4
  24. package/dist/components/Timeline/TimelinePinchZoom.js +6 -30
  25. package/dist/components/Timeline/TimelinePlayCursorSyncer.js +1 -7
  26. package/dist/components/Timeline/TimelineSequence.js +77 -12
  27. package/dist/components/Timeline/TimelineSequenceItem.js +12 -1
  28. package/dist/components/Timeline/TimelineSequenceRightEdgeDragHandle.d.ts +13 -3
  29. package/dist/components/Timeline/TimelineSequenceRightEdgeDragHandle.js +168 -121
  30. package/dist/components/Timeline/TimelineSlider.js +1 -4
  31. package/dist/components/Timeline/TimelineWidthProvider.js +2 -5
  32. package/dist/components/Timeline/TimelineZoomControls.js +20 -20
  33. package/dist/components/Timeline/get-sequence-split-menu-item.d.ts +11 -0
  34. package/dist/components/Timeline/get-sequence-split-menu-item.js +55 -0
  35. package/dist/components/Timeline/use-sequence-props-subscription.d.ts +3 -2
  36. package/dist/components/Timeline/use-sequence-props-subscription.js +4 -10
  37. package/dist/components/TopPanel.js +3 -19
  38. package/dist/components/UpdatesSettings.js +9 -5
  39. package/dist/components/ZoomPersistor.js +6 -3
  40. package/dist/components/composition-menu-items.js +1 -1
  41. package/dist/esm/{chunk-emw4k5b0.js → chunk-3netyjd9.js} +4917 -4651
  42. package/dist/esm/internals.mjs +4917 -4651
  43. package/dist/esm/previewEntry.mjs +4895 -4629
  44. package/dist/esm/renderEntry.mjs +1 -1
  45. package/dist/helpers/copy-text.js +1 -2
  46. package/dist/helpers/use-copy-feedback.d.ts +4 -0
  47. package/dist/helpers/use-copy-feedback.js +19 -0
  48. package/dist/icons/copy.d.ts +5 -0
  49. package/dist/icons/copy.js +12 -0
  50. package/dist/state/canvas-ref.d.ts +1 -0
  51. package/dist/state/canvas-ref.js +2 -1
  52. package/dist/state/sidebar.d.ts +3 -0
  53. package/dist/state/sidebar.js +6 -1
  54. package/dist/state/timeline-zoom.d.ts +1 -1
  55. package/dist/state/timeline-zoom.js +3 -3
  56. package/dist/visual-controls/VisualControls.js +4 -0
  57. package/package.json +15 -15
  58. package/dist/esm/chunk-vkrvnx2h.js +0 -99378
  59. package/dist/helpers/use-max-media-duration.d.ts +0 -2
  60. package/dist/helpers/use-max-media-duration.js +0 -61
@@ -215,7 +215,7 @@ var renderContent = (Root) => {
215
215
  renderToDOM(/* @__PURE__ */ jsx("div", {
216
216
  children: /* @__PURE__ */ jsx(DelayedSpinner, {})
217
217
  }));
218
- import("./chunk-emw4k5b0.js").then(({ StudioInternals }) => {
218
+ import("./chunk-3netyjd9.js").then(({ StudioInternals }) => {
219
219
  window.remotion_isStudio = true;
220
220
  window.remotion_isReadOnlyStudio = true;
221
221
  window.remotion_inputProps = "{}";
@@ -8,8 +8,7 @@ const copyText = (cmd) => {
8
8
  .query({ name: permissionName })
9
9
  .then((result) => {
10
10
  if (result.state === 'granted' || result.state === 'prompt') {
11
- navigator.clipboard.writeText(cmd);
12
- resolve();
11
+ navigator.clipboard.writeText(cmd).then(resolve).catch(reject);
13
12
  }
14
13
  else {
15
14
  reject(new Error('Permission to copy not granted'));
@@ -0,0 +1,4 @@
1
+ export declare const useCopyFeedback: () => {
2
+ copied: boolean;
3
+ markCopied: () => void;
4
+ };
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useCopyFeedback = void 0;
4
+ const react_1 = require("react");
5
+ const useCopyFeedback = () => {
6
+ const [copyCount, setCopyCount] = (0, react_1.useState)(0);
7
+ (0, react_1.useEffect)(() => {
8
+ if (copyCount === 0) {
9
+ return;
10
+ }
11
+ const timeout = setTimeout(() => setCopyCount(0), 2000);
12
+ return () => clearTimeout(timeout);
13
+ }, [copyCount]);
14
+ const markCopied = (0, react_1.useCallback)(() => {
15
+ setCopyCount((currentCopyCount) => currentCopyCount + 1);
16
+ }, []);
17
+ return { copied: copyCount > 0, markCopied };
18
+ };
19
+ exports.useCopyFeedback = useCopyFeedback;
@@ -0,0 +1,5 @@
1
+ import type { SVGProps } from 'react';
2
+ export declare const CopyIcon: React.FC<SVGProps<SVGSVGElement> & {
3
+ readonly copied: boolean;
4
+ readonly color?: string;
5
+ }>;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CopyIcon = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const clipboard_1 = require("./clipboard");
6
+ const CopyIcon = ({ copied, color, style, ...props }) => {
7
+ if (copied) {
8
+ return (jsx_runtime_1.jsx("svg", { viewBox: "0 0 512 512", style: style, ...props, children: jsx_runtime_1.jsx("path", { fill: color, d: "M435.848 83.466L172.804 346.51l-96.652-96.652c-4.686-4.686-12.284-4.686-16.971 0l-28.284 28.284c-4.686 4.686-4.686 12.284 0 16.971l133.421 133.421c4.686 4.686 12.284 4.686 16.971 0l299.813-299.813c4.686-4.686 4.686-12.284 0-16.971l-28.284-28.284c-4.686-4.686-12.284-4.686-16.97 0z" }) }));
9
+ }
10
+ return jsx_runtime_1.jsx(clipboard_1.ClipboardIcon, { color: color, style: style, ...props });
11
+ };
12
+ exports.CopyIcon = CopyIcon;
@@ -1,2 +1,3 @@
1
1
  export declare const canvasRef: import("react").RefObject<HTMLDivElement | null>;
2
2
  export declare const drawRef: import("react").RefObject<HTMLDivElement | null>;
3
+ export declare const RefreshCanvasSizeContext: import("react").Context<(() => void) | null>;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.drawRef = exports.canvasRef = void 0;
3
+ exports.RefreshCanvasSizeContext = exports.drawRef = exports.canvasRef = void 0;
4
4
  const react_1 = require("react");
5
5
  exports.canvasRef = (0, react_1.createRef)();
6
6
  exports.drawRef = (0, react_1.createRef)();
7
+ exports.RefreshCanvasSizeContext = (0, react_1.createContext)(null);
@@ -2,6 +2,8 @@ import React from 'react';
2
2
  export type SidebarCollapsedState = 'collapsed' | 'expanded' | 'responsive';
3
3
  type RightSidebarCollapsedState = Exclude<SidebarCollapsedState, 'responsive'>;
4
4
  type Context = {
5
+ sidebarCollapsedDuringDrag: Sidebars | null;
6
+ setSidebarCollapsedDuringDrag: (side: Sidebars | null) => void;
5
7
  sidebarCollapsedStateLeft: SidebarCollapsedState;
6
8
  setSidebarCollapsedState: (options: {
7
9
  left: null | React.SetStateAction<SidebarCollapsedState>;
@@ -9,6 +11,7 @@ type Context = {
9
11
  }) => void;
10
12
  sidebarCollapsedStateRight: RightSidebarCollapsedState;
11
13
  };
14
+ type Sidebars = 'left' | 'right';
12
15
  export declare const SidebarContext: React.Context<Context>;
13
16
  export declare const SidebarContextProvider: React.FC<{
14
17
  readonly children: React.ReactNode;
@@ -37,6 +37,8 @@ const saveCollapsedState = (type, sidebar) => {
37
37
  window.localStorage.setItem(storageKey(sidebar), type);
38
38
  };
39
39
  exports.SidebarContext = (0, react_1.createContext)({
40
+ sidebarCollapsedDuringDrag: null,
41
+ setSidebarCollapsedDuringDrag: () => undefined,
40
42
  sidebarCollapsedStateLeft: 'collapsed',
41
43
  setSidebarCollapsedState: () => {
42
44
  throw new Error('sidebar collapsed state');
@@ -49,8 +51,11 @@ const SidebarContextProvider = ({ children }) => {
49
51
  left: getSavedCollapsedStateLeft(isMobileLayout),
50
52
  right: getSavedCollapsedStateRight(isMobileLayout),
51
53
  }));
54
+ const [sidebarCollapsedDuringDrag, setSidebarCollapsedDuringDrag] = (0, react_1.useState)(null);
52
55
  const value = (0, react_1.useMemo)(() => {
53
56
  return {
57
+ sidebarCollapsedDuringDrag,
58
+ setSidebarCollapsedDuringDrag,
54
59
  sidebarCollapsedStateLeft: sidebarCollapsedState.left,
55
60
  sidebarCollapsedStateRight: sidebarCollapsedState.right,
56
61
  setSidebarCollapsedState: (options) => {
@@ -71,7 +76,7 @@ const SidebarContextProvider = ({ children }) => {
71
76
  });
72
77
  },
73
78
  };
74
- }, [sidebarCollapsedState]);
79
+ }, [sidebarCollapsedState, sidebarCollapsedDuringDrag]);
75
80
  return (jsx_runtime_1.jsx(exports.SidebarContext.Provider, { value: value, children: children }));
76
81
  };
77
82
  exports.SidebarContextProvider = SidebarContextProvider;
@@ -5,7 +5,7 @@ export type TimelineSetZoomOptions = {
5
5
  };
6
6
  export declare const TimelineZoomCtx: React.Context<{
7
7
  zoom: Record<string, number>;
8
- setZoom: (compositionId: string, prev: (prevZoom: number) => number, options?: TimelineSetZoomOptions | undefined) => void;
8
+ setZoom: (videoId: string, prev: (prevZoom: number) => number, options?: TimelineSetZoomOptions | undefined) => void;
9
9
  }>;
10
10
  export declare const TimelineZoomContext: React.FC<{
11
11
  readonly children: React.ReactNode;
@@ -17,7 +17,7 @@ exports.TimelineZoomCtx = (0, react_1.createContext)({
17
17
  });
18
18
  const TimelineZoomContext = ({ children }) => {
19
19
  const [zoom, setZoomState] = (0, react_1.useState)(() => (0, ZoomPersistor_1.getZoomFromLocalStorage)());
20
- const setZoom = (0, react_1.useCallback)((compositionId, callback, options) => {
20
+ const setZoom = (0, react_1.useCallback)((videoId, callback, options) => {
21
21
  var _a, _b;
22
22
  // Capture the old geometry before committing the new timeline width.
23
23
  const preserveTimelineCursor = (0, timeline_scroll_logic_1.prepareToPreserveTimelineCursor)({
@@ -35,14 +35,14 @@ const TimelineZoomContext = ({ children }) => {
35
35
  const previousZoom = (0, get_timeline_max_zoom_1.getTimelineZoom)({
36
36
  durationInFrames,
37
37
  timelineViewportWidth,
38
- zoom: (_c = prevZoomMap[compositionId]) !== null && _c !== void 0 ? _c : null,
38
+ zoom: (_c = prevZoomMap[videoId]) !== null && _c !== void 0 ? _c : null,
39
39
  });
40
40
  const newZoom = (0, get_timeline_max_zoom_1.clampTimelineZoom)({
41
41
  zoom: callback(previousZoom),
42
42
  durationInFrames,
43
43
  timelineViewportWidth,
44
44
  });
45
- return { ...prevZoomMap, [compositionId]: newZoom };
45
+ return { ...prevZoomMap, [videoId]: newZoom };
46
46
  });
47
47
  });
48
48
  // The new scroll range exists now, so the browser will not clamp the offset
@@ -107,6 +107,10 @@ const VisualControlsProvider = ({ children }) => {
107
107
  globalVisualControl: visualControl,
108
108
  };
109
109
  }, [visualControl]);
110
+ (0, react_1.useEffect)(() => {
111
+ // Controls may have rendered before the imperative API or Zod was ready.
112
+ visual_control_store_1.visualControlStore.emitChange();
113
+ }, [visualControl]);
110
114
  (0, react_1.useEffect)(() => {
111
115
  const callback = () => {
112
116
  if (imperativeHandles.current) {
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.521",
6
+ "version": "4.0.522",
7
7
  "description": "APIs for interacting with the Remotion Studio",
8
8
  "main": "dist",
9
9
  "scripts": {
@@ -25,20 +25,20 @@
25
25
  },
26
26
  "dependencies": {
27
27
  "@tanstack/react-virtual": "3.14.9",
28
- "@remotion/canvas": "4.0.521",
29
- "@remotion/studio-protocol": "4.0.521",
30
- "@remotion/studio-codemods": "4.0.521",
28
+ "@remotion/canvas": "4.0.522",
29
+ "@remotion/studio-protocol": "4.0.522",
30
+ "@remotion/studio-codemods": "4.0.522",
31
31
  "semver": "7.5.3",
32
- "remotion": "4.0.521",
33
- "@remotion/captions": "4.0.521",
34
- "@remotion/media": "4.0.521",
35
- "@remotion/player": "4.0.521",
36
- "@remotion/media-utils": "4.0.521",
37
- "@remotion/renderer": "4.0.521",
38
- "@remotion/web-renderer": "4.0.521",
39
- "@remotion/studio-shared": "4.0.521",
40
- "@remotion/timeline-utils": "4.0.521",
41
- "@remotion/zod-types": "4.0.521",
32
+ "remotion": "4.0.522",
33
+ "@remotion/captions": "4.0.522",
34
+ "@remotion/media": "4.0.522",
35
+ "@remotion/player": "4.0.522",
36
+ "@remotion/media-utils": "4.0.522",
37
+ "@remotion/renderer": "4.0.522",
38
+ "@remotion/web-renderer": "4.0.522",
39
+ "@remotion/studio-shared": "4.0.522",
40
+ "@remotion/timeline-utils": "4.0.522",
41
+ "@remotion/zod-types": "4.0.522",
42
42
  "@jridgewell/trace-mapping": "0.3.31",
43
43
  "mediabunny": "1.55.5",
44
44
  "memfs": "3.4.3",
@@ -51,7 +51,7 @@
51
51
  "react-dom": "19.2.3",
52
52
  "@testing-library/react": "16.1.0",
53
53
  "@types/semver": "7.5.3",
54
- "@remotion/eslint-config-internal": "4.0.521",
54
+ "@remotion/eslint-config-internal": "4.0.522",
55
55
  "eslint": "9.19.0",
56
56
  "@typescript/native-preview": "7.0.0-dev.20260217.1"
57
57
  },