@remotion/studio 4.0.88 → 4.0.90

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 (271) hide show
  1. package/.eslintrc +33 -28
  2. package/.turbo/turbo-build.log +1 -1
  3. package/dist/Studio.d.ts +6 -0
  4. package/dist/Studio.js +24 -0
  5. package/dist/components/AssetSelector.js +4 -3
  6. package/dist/components/AssetSelectorItem.js +2 -1
  7. package/dist/{error-overlay/remotion-overlay → components}/Button.js +1 -1
  8. package/dist/components/ControlButton.d.ts +1 -1
  9. package/dist/components/CopyButton.js +1 -1
  10. package/dist/components/CurrentComposition.d.ts +1 -2
  11. package/dist/components/CurrentCompositionSideEffects.d.ts +3 -1
  12. package/dist/components/CurrentCompositionSideEffects.js +6 -3
  13. package/dist/components/Editor.d.ts +4 -1
  14. package/dist/components/Editor.js +6 -23
  15. package/dist/components/EditorContent.d.ts +3 -1
  16. package/dist/components/EditorContent.js +2 -2
  17. package/dist/components/EditorContexts.d.ts +1 -0
  18. package/dist/components/EditorContexts.js +2 -2
  19. package/dist/components/FilePreview.js +2 -2
  20. package/dist/components/InitialCompositionLoader.js +3 -2
  21. package/dist/components/MenuBuildIndicator.js +1 -1
  22. package/dist/components/MenuToolbar.d.ts +3 -1
  23. package/dist/components/MenuToolbar.js +3 -3
  24. package/dist/components/Modals.d.ts +3 -1
  25. package/dist/components/Modals.js +4 -3
  26. package/dist/components/NewComposition/NewCompCode.d.ts +1 -2
  27. package/dist/components/NewComposition/RemInput.d.ts +2 -2
  28. package/dist/components/NewComposition/RemInputTypeColor.d.ts +1 -1
  29. package/dist/components/NewComposition/RemTextarea.d.ts +1 -1
  30. package/dist/components/NoRegisterRoot.js +2 -3
  31. package/dist/components/Notifications/ServerDisconnected.js +1 -1
  32. package/dist/components/OptionsPanel.d.ts +3 -1
  33. package/dist/components/OptionsPanel.js +7 -4
  34. package/dist/components/PreviewToolbar.d.ts +3 -1
  35. package/dist/components/PreviewToolbar.js +2 -2
  36. package/dist/components/QuickSwitcher/QuickSwitcher.d.ts +1 -0
  37. package/dist/components/QuickSwitcher/QuickSwitcher.js +2 -2
  38. package/dist/components/QuickSwitcher/QuickSwitcherContent.d.ts +1 -0
  39. package/dist/components/QuickSwitcher/QuickSwitcherContent.js +2 -2
  40. package/dist/components/RenderButton.js +4 -4
  41. package/dist/components/RenderModal/DataEditor.d.ts +1 -0
  42. package/dist/components/RenderModal/DataEditor.js +7 -7
  43. package/dist/components/RenderModal/GuiRenderStatus.d.ts +1 -1
  44. package/dist/components/RenderModal/OptionExplainer.js +1 -1
  45. package/dist/components/RenderModal/RenderModal.js +10 -10
  46. package/dist/components/RenderModal/RenderModalAdvanced.d.ts +1 -1
  47. package/dist/components/RenderModal/RenderModalAudio.js +2 -2
  48. package/dist/components/RenderModal/RenderModalEnvironmentVariables.js +1 -1
  49. package/dist/components/RenderModal/RenderModalInput.d.ts +1 -1
  50. package/dist/components/RenderModal/RenderModalJSONPropsEditor.js +1 -1
  51. package/dist/components/RenderModal/RenderStatusModal.js +2 -2
  52. package/dist/components/RenderModal/SchemaEditor/SchemaErrorMessages.d.ts +3 -3
  53. package/dist/components/RenderModal/SchemaEditor/SchemaErrorMessages.js +2 -2
  54. package/dist/components/RenderModal/SchemaEditor/extract-enum-json-paths.d.ts +0 -1
  55. package/dist/components/RenderModal/SchemaEditor/local-state.d.ts +1 -1
  56. package/dist/components/RenderPreview.js +2 -1
  57. package/dist/components/RenderQueue/RenderQueueCopyToClipboard.d.ts +1 -1
  58. package/dist/components/RenderQueue/RenderQueueError.d.ts +1 -1
  59. package/dist/components/RenderQueue/RenderQueueItem.d.ts +1 -1
  60. package/dist/components/RenderQueue/RenderQueueItem.js +2 -1
  61. package/dist/components/RenderQueue/RenderQueueItemCancelButton.d.ts +1 -1
  62. package/dist/components/RenderQueue/RenderQueueItemStatus.d.ts +1 -1
  63. package/dist/components/RenderQueue/RenderQueueOpenInFolder.d.ts +1 -1
  64. package/dist/components/RenderQueue/RenderQueueOutputName.d.ts +1 -1
  65. package/dist/components/RenderQueue/RenderQueueProgressMessage.d.ts +1 -1
  66. package/dist/components/RenderQueue/RenderQueueRemoveItem.d.ts +1 -1
  67. package/dist/components/RenderQueue/RenderQueueRepeat.d.ts +1 -1
  68. package/dist/components/RenderQueue/RenderQueueRepeat.js +1 -1
  69. package/dist/components/RenderQueue/actions.d.ts +5 -7
  70. package/dist/components/RenderQueue/actions.js +7 -1
  71. package/dist/components/RenderQueue/context.d.ts +2 -2
  72. package/dist/components/RenderQueue/context.js +2 -1
  73. package/dist/components/RenderQueue/index.js +2 -1
  74. package/dist/components/ResetZoomButton.js +1 -1
  75. package/dist/components/SidebarRenderButton.js +2 -1
  76. package/dist/components/StaticFilePreview.js +2 -1
  77. package/dist/components/Timeline/MaxTimelineTracks.d.ts +0 -1
  78. package/dist/components/Timeline/MaxTimelineTracks.js +3 -3
  79. package/dist/components/Timeline/TimelineStack/index.js +9 -8
  80. package/dist/components/TopPanel.d.ts +3 -1
  81. package/dist/components/TopPanel.js +2 -2
  82. package/dist/components/UpdateCheck.d.ts +2 -3
  83. package/dist/components/ZoomPersistor.js +4 -3
  84. package/dist/error-overlay/entry-basic.d.ts +95 -1
  85. package/dist/error-overlay/entry-basic.js +20 -15
  86. package/dist/error-overlay/react-overlay/effects/resolve-file-source.d.ts +1 -2
  87. package/dist/error-overlay/react-overlay/listen-to-runtime-errors.d.ts +7 -1
  88. package/dist/error-overlay/react-overlay/listen-to-runtime-errors.js +2 -7
  89. package/dist/error-overlay/react-overlay/utils/get-lines-around.d.ts +1 -1
  90. package/dist/error-overlay/react-overlay/utils/get-stack-frames.d.ts +7 -1
  91. package/dist/error-overlay/react-overlay/utils/get-stack-frames.js +0 -6
  92. package/dist/error-overlay/react-overlay/utils/make-stack-frame.d.ts +7 -0
  93. package/dist/error-overlay/react-overlay/utils/{stack-frame.js → make-stack-frame.js} +0 -6
  94. package/dist/error-overlay/react-overlay/utils/parser.d.ts +7 -1
  95. package/dist/error-overlay/react-overlay/utils/parser.js +5 -11
  96. package/dist/error-overlay/react-overlay/utils/unmapper.d.ts +7 -1
  97. package/dist/error-overlay/react-overlay/utils/unmapper.js +0 -8
  98. package/dist/error-overlay/remotion-overlay/AskOnDiscord.js +1 -1
  99. package/dist/error-overlay/remotion-overlay/CodeFrame.d.ts +1 -1
  100. package/dist/error-overlay/remotion-overlay/DismissButton.js +2 -1
  101. package/dist/error-overlay/remotion-overlay/ErrorDisplay.js +2 -2
  102. package/dist/error-overlay/remotion-overlay/HelpLink.js +1 -1
  103. package/dist/error-overlay/remotion-overlay/OpenInEditor.d.ts +1 -1
  104. package/dist/error-overlay/remotion-overlay/OpenInEditor.js +1 -2
  105. package/dist/error-overlay/remotion-overlay/Retry.js +1 -1
  106. package/dist/error-overlay/remotion-overlay/SearchGitHubIssues.js +1 -1
  107. package/dist/error-overlay/remotion-overlay/ShortcutHint.d.ts +1 -1
  108. package/dist/error-overlay/remotion-overlay/ShortcutHint.js +8 -8
  109. package/dist/error-overlay/remotion-overlay/StackFrame.d.ts +1 -1
  110. package/dist/error-overlay/remotion-overlay/StackFrame.js +1 -1
  111. package/dist/error-overlay/remotion-overlay/carets.d.ts +1 -1
  112. package/dist/helpers/client-id.d.ts +7 -4
  113. package/dist/helpers/client-id.js +97 -10
  114. package/dist/helpers/colors.d.ts +1 -1
  115. package/dist/helpers/document-title.d.ts +1 -1
  116. package/dist/helpers/get-location-of-sequence.d.ts +1 -1
  117. package/dist/helpers/open-in-editor.d.ts +1 -1
  118. package/dist/{preview-server → helpers}/retry-payload.d.ts +1 -1
  119. package/dist/helpers/url-state.d.ts +4 -0
  120. package/dist/helpers/url-state.js +33 -0
  121. package/dist/helpers/use-file-existence.js +5 -6
  122. package/dist/helpers/use-menu-structure.d.ts +1 -1
  123. package/dist/helpers/use-menu-structure.js +149 -114
  124. package/dist/helpers/use-studio-canvas-dimensions.d.ts +4 -4
  125. package/dist/helpers/use-studio-canvas-dimensions.js +4 -4
  126. package/dist/{preview-server/hot-middleware → hot-middleware-client}/client.d.ts +7 -1
  127. package/dist/{preview-server/hot-middleware → hot-middleware-client}/client.js +32 -39
  128. package/dist/{preview-server/hot-middleware → hot-middleware-client}/process-update.d.ts +6 -1
  129. package/dist/{preview-server/hot-middleware → hot-middleware-client}/process-update.js +4 -8
  130. package/dist/icons/Checkmark.d.ts +1 -2
  131. package/dist/icons/audio.d.ts +1 -1
  132. package/dist/icons/caret.d.ts +2 -2
  133. package/dist/icons/data.d.ts +1 -1
  134. package/dist/icons/frame.d.ts +1 -1
  135. package/dist/icons/gear.d.ts +1 -1
  136. package/dist/icons/gif.d.ts +1 -1
  137. package/dist/index.d.ts +2 -64
  138. package/dist/index.js +3 -25
  139. package/dist/previewEntry.d.ts +1 -1
  140. package/dist/previewEntry.js +26 -16
  141. package/package.json +23 -10
  142. package/prettierrc.js +14 -0
  143. package/tsconfig.tsbuildinfo +1 -1
  144. package/.turbo/turbo-lint.log +0 -10
  145. package/dist/ansi/ansi-diff.d.ts +0 -41
  146. package/dist/ansi/ansi-diff.js +0 -220
  147. package/dist/ansi/ansi-split.d.ts +0 -2
  148. package/dist/ansi/ansi-split.js +0 -44
  149. package/dist/better-opn/index.d.ts +0 -6
  150. package/dist/better-opn/index.js +0 -202
  151. package/dist/codemods/stringify-with-path.d.ts +0 -5
  152. package/dist/codemods/stringify-with-path.js +0 -49
  153. package/dist/codemods/update-default-props.d.ts +0 -7
  154. package/dist/codemods/update-default-props.js +0 -137
  155. package/dist/components/BufferingIndicator.d.ts +0 -2
  156. package/dist/components/BufferingIndicator.js +0 -23
  157. package/dist/error-overlay/react-overlay/effects/map-error-to-react-stack.d.ts +0 -7
  158. package/dist/error-overlay/react-overlay/effects/map-error-to-react-stack.js +0 -46
  159. package/dist/error-overlay/react-overlay/utils/get-file-source.d.ts +0 -1
  160. package/dist/error-overlay/react-overlay/utils/get-file-source.js +0 -22
  161. package/dist/error-overlay/react-overlay/utils/open-in-editor.d.ts +0 -16
  162. package/dist/error-overlay/react-overlay/utils/open-in-editor.js +0 -503
  163. package/dist/error-overlay/react-overlay/utils/source-map-endpoint.d.ts +0 -1
  164. package/dist/error-overlay/react-overlay/utils/source-map-endpoint.js +0 -4
  165. package/dist/error-overlay/react-overlay/utils/stack-frame.d.ts +0 -40
  166. package/dist/event-source-events.d.ts +0 -31
  167. package/dist/event-source-events.js +0 -2
  168. package/dist/file-watcher.d.ts +0 -9
  169. package/dist/file-watcher.js +0 -35
  170. package/dist/get-default-out-name.d.ts +0 -5
  171. package/dist/get-default-out-name.js +0 -10
  172. package/dist/get-latest-remotion-version.d.ts +0 -1
  173. package/dist/get-latest-remotion-version.js +0 -31
  174. package/dist/get-network-address.d.ts +0 -1
  175. package/dist/get-network-address.js +0 -16
  176. package/dist/helpers/event-source.d.ts +0 -3
  177. package/dist/helpers/event-source.js +0 -76
  178. package/dist/helpers/format-bytes.d.ts +0 -6
  179. package/dist/helpers/format-bytes.js +0 -103
  180. package/dist/helpers/open-directory-in-finder.d.ts +0 -1
  181. package/dist/helpers/open-directory-in-finder.js +0 -49
  182. package/dist/max-timeline-tracks.d.ts +0 -2
  183. package/dist/max-timeline-tracks.js +0 -25
  184. package/dist/preview-server/api-routes.d.ts +0 -4
  185. package/dist/preview-server/api-routes.js +0 -25
  186. package/dist/preview-server/api-types.d.ts +0 -40
  187. package/dist/preview-server/api-types.js +0 -2
  188. package/dist/preview-server/dev-middleware/compatible-api.d.ts +0 -7
  189. package/dist/preview-server/dev-middleware/compatible-api.js +0 -20
  190. package/dist/preview-server/dev-middleware/get-paths.d.ts +0 -7
  191. package/dist/preview-server/dev-middleware/get-paths.js +0 -19
  192. package/dist/preview-server/dev-middleware/index.d.ts +0 -3
  193. package/dist/preview-server/dev-middleware/index.js +0 -27
  194. package/dist/preview-server/dev-middleware/middleware.d.ts +0 -9
  195. package/dist/preview-server/dev-middleware/middleware.js +0 -222
  196. package/dist/preview-server/dev-middleware/range-parser.d.ts +0 -15
  197. package/dist/preview-server/dev-middleware/range-parser.js +0 -96
  198. package/dist/preview-server/dev-middleware/ready.d.ts +0 -3
  199. package/dist/preview-server/dev-middleware/ready.js +0 -11
  200. package/dist/preview-server/dev-middleware/setup-hooks.d.ts +0 -2
  201. package/dist/preview-server/dev-middleware/setup-hooks.js +0 -52
  202. package/dist/preview-server/dev-middleware/setup-output-filesystem.d.ts +0 -2
  203. package/dist/preview-server/dev-middleware/setup-output-filesystem.js +0 -13
  204. package/dist/preview-server/dev-middleware/types.d.ts +0 -10
  205. package/dist/preview-server/dev-middleware/types.js +0 -2
  206. package/dist/preview-server/env-supports-fs-recursive.d.ts +0 -1
  207. package/dist/preview-server/env-supports-fs-recursive.js +0 -18
  208. package/dist/preview-server/file-existence-watchers.d.ts +0 -13
  209. package/dist/preview-server/file-existence-watchers.js +0 -62
  210. package/dist/preview-server/get-absolute-public-dir.d.ts +0 -4
  211. package/dist/preview-server/get-absolute-public-dir.js +0 -14
  212. package/dist/preview-server/get-package-manager.d.ts +0 -10
  213. package/dist/preview-server/get-package-manager.js +0 -62
  214. package/dist/preview-server/handler.d.ts +0 -12
  215. package/dist/preview-server/handler.js +0 -36
  216. package/dist/preview-server/hot-middleware/index.d.ts +0 -102
  217. package/dist/preview-server/hot-middleware/index.js +0 -149
  218. package/dist/preview-server/hot-middleware/types.d.ts +0 -27
  219. package/dist/preview-server/hot-middleware/types.js +0 -10
  220. package/dist/preview-server/job.d.ts +0 -232
  221. package/dist/preview-server/job.js +0 -2
  222. package/dist/preview-server/live-events.d.ts +0 -10
  223. package/dist/preview-server/live-events.js +0 -76
  224. package/dist/preview-server/parse-body.d.ts +0 -2
  225. package/dist/preview-server/parse-body.js +0 -16
  226. package/dist/preview-server/project-info.d.ts +0 -5
  227. package/dist/preview-server/project-info.js +0 -32
  228. package/dist/preview-server/public-folder.d.ts +0 -12
  229. package/dist/preview-server/public-folder.js +0 -58
  230. package/dist/preview-server/routes/add-render.d.ts +0 -3
  231. package/dist/preview-server/routes/add-render.js +0 -122
  232. package/dist/preview-server/routes/can-update-default-props.d.ts +0 -4
  233. package/dist/preview-server/routes/can-update-default-props.js +0 -40
  234. package/dist/preview-server/routes/cancel-render.d.ts +0 -3
  235. package/dist/preview-server/routes/cancel-render.js +0 -8
  236. package/dist/preview-server/routes/copy-still-to-clipboard-handler.d.ts +0 -3
  237. package/dist/preview-server/routes/copy-still-to-clipboard-handler.js +0 -17
  238. package/dist/preview-server/routes/open-in-file-explorer.d.ts +0 -3
  239. package/dist/preview-server/routes/open-in-file-explorer.js +0 -8
  240. package/dist/preview-server/routes/remove-render.d.ts +0 -3
  241. package/dist/preview-server/routes/remove-render.js +0 -8
  242. package/dist/preview-server/routes/subscribe-to-file-existence.d.ts +0 -3
  243. package/dist/preview-server/routes/subscribe-to-file-existence.js +0 -13
  244. package/dist/preview-server/routes/unsubscribe-from-file-existence.d.ts +0 -3
  245. package/dist/preview-server/routes/unsubscribe-from-file-existence.js +0 -13
  246. package/dist/preview-server/routes/update-available.d.ts +0 -3
  247. package/dist/preview-server/routes/update-available.js +0 -9
  248. package/dist/preview-server/routes/update-default-props.d.ts +0 -3
  249. package/dist/preview-server/routes/update-default-props.js +0 -34
  250. package/dist/preview-server/serve-static.d.ts +0 -14
  251. package/dist/preview-server/serve-static.js +0 -75
  252. package/dist/preview-server/start-server.d.ts +0 -31
  253. package/dist/preview-server/start-server.js +0 -127
  254. package/dist/preview-server/update-available.d.ts +0 -3
  255. package/dist/preview-server/update-available.js +0 -47
  256. package/dist/required-chromium-options.d.ts +0 -3
  257. package/dist/required-chromium-options.js +0 -2
  258. package/dist/routes.d.ts +0 -26
  259. package/dist/routes.js +0 -242
  260. package/dist/server-ready.d.ts +0 -2
  261. package/dist/server-ready.js +0 -13
  262. package/dist/start-studio.d.ts +0 -26
  263. package/dist/start-studio.js +0 -117
  264. package/dist/watch-root-file.d.ts +0 -1
  265. package/dist/watch-root-file.js +0 -22
  266. package/out.txt +0 -1
  267. package/web/beep.wav +0 -0
  268. package/web/favicon.png +0 -0
  269. /package/dist/{error-overlay/remotion-overlay → components}/Button.d.ts +0 -0
  270. /package/dist/{preview-server → helpers}/retry-payload.js +0 -0
  271. /package/{styles/styles.css → styles.css} +0 -0
package/.eslintrc CHANGED
@@ -1,30 +1,35 @@
1
1
  {
2
- "extends": "@jonny",
3
- "rules": {
4
- "no-console": "error",
5
- "no-restricted-imports": [
6
- "error",
7
- {
8
- "patterns": ["@remotion/*/src/*", "remotion/src/*"]
9
- }
10
- ],
11
- "@typescript-eslint/no-use-before-define": "off",
12
- "@typescript-eslint/no-restricted-imports": [
13
- "error",
14
- {
15
- "paths": [
16
- {
17
- "name": "zod",
18
- "message": "Can only import zod as a type",
19
- "allowTypeImports": true
20
- },
21
- {
22
- "name": "@remotion/zod-types",
23
- "message": "Can only import @remotion/zod-types as a type",
24
- "allowTypeImports": true
25
- }
26
- ]
27
- }
28
- ]
29
- }
2
+ "extends": "@jonny",
3
+ "rules": {
4
+ "no-console": "error",
5
+ "no-restricted-imports": [
6
+ "error",
7
+ {
8
+ "patterns": [
9
+ "@remotion/*/src",
10
+ "@remotion/*/src/*",
11
+ "@remotion/*/dist/*",
12
+ "remotion/src/*"
13
+ ]
14
+ }
15
+ ],
16
+ "@typescript-eslint/no-use-before-define": "off",
17
+ "@typescript-eslint/no-restricted-imports": [
18
+ "error",
19
+ {
20
+ "paths": [
21
+ {
22
+ "name": "zod",
23
+ "message": "Can only import zod as a type",
24
+ "allowTypeImports": true
25
+ },
26
+ {
27
+ "name": "@remotion/zod-types",
28
+ "message": "Can only import @remotion/zod-types as a type",
29
+ "allowTypeImports": true
30
+ }
31
+ ]
32
+ }
33
+ ]
34
+ }
30
35
  }
@@ -1,4 +1,4 @@
1
1
 
2
- > @remotion/studio@4.0.87 build /Users/jonathanburger/remotion/packages/studio
2
+ > @remotion/studio@4.0.89 build /Users/jonathanburger/remotion/packages/studio
3
3
  > tsc -d
4
4
 
@@ -0,0 +1,6 @@
1
+ import React from 'react';
2
+ import '../styles.css';
3
+ export declare const Studio: React.FC<{
4
+ rootComponent: React.FC;
5
+ readOnly: boolean;
6
+ }>;
package/dist/Studio.js ADDED
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Studio = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_1 = require("react");
6
+ const react_dom_1 = require("react-dom");
7
+ const remotion_1 = require("remotion");
8
+ require("../styles.css");
9
+ const Editor_1 = require("./components/Editor");
10
+ const EditorContexts_1 = require("./components/EditorContexts");
11
+ const ServerDisconnected_1 = require("./components/Notifications/ServerDisconnected");
12
+ const getServerDisconnectedDomElement = () => {
13
+ return document.getElementById('server-disconnected-overlay');
14
+ };
15
+ const Studio = ({ rootComponent, readOnly }) => {
16
+ (0, react_1.useLayoutEffect)(() => {
17
+ window.remotion_isStudio = true;
18
+ remotion_1.Internals.enableSequenceStackTraces();
19
+ }, []);
20
+ return ((0, jsx_runtime_1.jsx)(remotion_1.Internals.RemotionRoot, { numberOfAudioTags: window.remotion_numberOfAudioTags, children: (0, jsx_runtime_1.jsxs)(EditorContexts_1.EditorContexts, { readOnlyStudio: readOnly, children: [(0, jsx_runtime_1.jsx)(Editor_1.Editor, { readOnlyStudio: readOnly, Root: rootComponent }), readOnly
21
+ ? null
22
+ : (0, react_dom_1.createPortal)((0, jsx_runtime_1.jsx)(ServerDisconnected_1.ServerDisconnected, {}), getServerDisconnectedDomElement())] }) }));
23
+ };
24
+ exports.Studio = Studio;
@@ -27,9 +27,9 @@ exports.AssetSelector = void 0;
27
27
  const jsx_runtime_1 = require("react/jsx-runtime");
28
28
  const react_1 = __importStar(require("react"));
29
29
  const remotion_1 = require("remotion");
30
+ const client_id_1 = require("../helpers/client-id");
30
31
  const colors_1 = require("../helpers/colors");
31
32
  const create_folder_tree_1 = require("../helpers/create-folder-tree");
32
- const event_source_1 = require("../helpers/event-source");
33
33
  const persist_open_folders_1 = require("../helpers/persist-open-folders");
34
34
  const folders_1 = require("../state/folders");
35
35
  const z_index_1 = require("../state/z-index");
@@ -63,6 +63,7 @@ const list = {
63
63
  const AssetSelector = () => {
64
64
  const { tabIndex } = (0, z_index_1.useZIndex)();
65
65
  const { assetFoldersExpanded, setAssetFoldersExpanded } = (0, react_1.useContext)(folders_1.FolderContext);
66
+ const { subscribeToEvent } = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx);
66
67
  const [{ publicFolderExists, staticFiles }, setState] = react_1.default.useState(() => {
67
68
  return {
68
69
  staticFiles: (0, remotion_1.getStaticFiles)(),
@@ -79,11 +80,11 @@ const AssetSelector = () => {
79
80
  publicFolderExists: window.remotion_publicFolderExists,
80
81
  });
81
82
  };
82
- const unsub = (0, event_source_1.subscribeToEvent)('new-public-folder', onUpdate);
83
+ const unsub = subscribeToEvent('new-public-folder', onUpdate);
83
84
  return () => {
84
85
  unsub();
85
86
  };
86
- }, []);
87
+ }, [subscribeToEvent]);
87
88
  const toggleFolder = (0, react_1.useCallback)((folderName, parentName) => {
88
89
  setAssetFoldersExpanded((p) => {
89
90
  var _a;
@@ -30,6 +30,7 @@ const remotion_1 = require("remotion");
30
30
  const no_react_1 = require("remotion/no-react");
31
31
  const colors_1 = require("../helpers/colors");
32
32
  const copy_text_1 = require("../helpers/copy-text");
33
+ const url_state_1 = require("../helpers/url-state");
33
34
  const clipboard_1 = require("../icons/clipboard");
34
35
  const file_1 = require("../icons/file");
35
36
  const folder_1 = require("../icons/folder");
@@ -133,7 +134,7 @@ const AssetSelectorItem = ({ item, tabIndex, level, parentFolder }) => {
133
134
  ? parentFolder + '/' + item.name
134
135
  : item.name;
135
136
  setCanvasContent({ type: 'asset', asset: relativePath });
136
- window.history.pushState({}, 'Studio', `/assets/${relativePath}`);
137
+ (0, url_state_1.pushUrl)(`/assets/${relativePath}`);
137
138
  }, [item.name, parentFolder, setCanvasContent]);
138
139
  const style = (0, react_1.useMemo)(() => {
139
140
  return {
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Button = void 0;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const react_1 = require("react");
6
- const colors_1 = require("../../helpers/colors");
6
+ const colors_1 = require("../helpers/colors");
7
7
  const button = {
8
8
  border: `1px solid ${colors_1.INPUT_BORDER_COLOR_UNHOVERED}`,
9
9
  borderRadius: 4,
@@ -2,4 +2,4 @@ import React from 'react';
2
2
  export declare const CONTROL_BUTTON_PADDING = 6;
3
3
  export declare const ControlButton: (props: React.DetailedHTMLProps<React.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement> & {
4
4
  title: string;
5
- }) => JSX.Element;
5
+ }) => import("react/jsx-runtime").JSX.Element;
@@ -3,8 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.CopyButton = void 0;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const react_1 = require("react");
6
- const Button_1 = require("../error-overlay/remotion-overlay/Button");
7
6
  const copy_text_1 = require("../helpers/copy-text");
7
+ const Button_1 = require("./Button");
8
8
  const layout_1 = require("./layout");
9
9
  const NotificationCenter_1 = require("./Notifications/NotificationCenter");
10
10
  const iconStyle = {
@@ -1,3 +1,2 @@
1
- /// <reference types="react" />
2
1
  export declare const CURRENT_COMPOSITION_HEIGHT = 80;
3
- export declare const CurrentComposition: () => JSX.Element;
2
+ export declare const CurrentComposition: () => import("react/jsx-runtime").JSX.Element;
@@ -1,3 +1,5 @@
1
1
  import type React from 'react';
2
2
  export declare const TitleUpdater: React.FC;
3
- export declare const CurrentCompositionKeybindings: React.FC;
3
+ export declare const CurrentCompositionKeybindings: React.FC<{
4
+ readOnlyStudio: boolean;
5
+ }>;
@@ -33,21 +33,24 @@ const TitleUpdater = () => {
33
33
  return null;
34
34
  };
35
35
  exports.TitleUpdater = TitleUpdater;
36
- const CurrentCompositionKeybindings = () => {
36
+ const CurrentCompositionKeybindings = ({ readOnlyStudio }) => {
37
37
  const keybindings = (0, use_keybinding_1.useKeybinding)();
38
38
  const video = remotion_1.Internals.useVideo();
39
- const { type } = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx);
39
+ const { type } = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx).previewServerState;
40
40
  const openRenderModal = (0, react_1.useCallback)(() => {
41
41
  if (!video) {
42
42
  return;
43
43
  }
44
+ if (readOnlyStudio) {
45
+ return (0, NotificationCenter_1.sendErrorNotification)('Studio is read-only');
46
+ }
44
47
  if (type !== 'connected') {
45
48
  (0, NotificationCenter_1.sendErrorNotification)('Studio server is offline');
46
49
  return;
47
50
  }
48
51
  const renderButton = document.getElementById('render-modal-button');
49
52
  renderButton.click();
50
- }, [type, video]);
53
+ }, [readOnlyStudio, type, video]);
51
54
  (0, react_1.useEffect)(() => {
52
55
  const binding = keybindings.registerKeybinding({
53
56
  event: 'keydown',
@@ -1,2 +1,5 @@
1
1
  import React from 'react';
2
- export declare const Editor: React.FC;
2
+ export declare const Editor: React.FC<{
3
+ Root: React.FC;
4
+ readOnlyStudio: boolean;
5
+ }>;
@@ -11,7 +11,6 @@ const z_index_1 = require("../state/z-index");
11
11
  const EditorContent_1 = require("./EditorContent");
12
12
  const GlobalKeybindings_1 = require("./GlobalKeybindings");
13
13
  const Modals_1 = require("./Modals");
14
- const NoRegisterRoot_1 = require("./NoRegisterRoot");
15
14
  const NotificationCenter_1 = require("./Notifications/NotificationCenter");
16
15
  const background = {
17
16
  backgroundColor: colors_1.BACKGROUND,
@@ -21,15 +20,11 @@ const background = {
21
20
  flexDirection: 'column',
22
21
  position: 'absolute',
23
22
  };
24
- const Editor = () => {
25
- const [Root, setRoot] = (0, react_1.useState)(() => remotion_1.Internals.getRoot());
26
- const [waitForRoot] = (0, react_1.useState)(() => {
27
- if (Root) {
28
- return 0;
29
- }
30
- return (0, remotion_1.delayRender)('Waiting for registerRoot()');
31
- });
23
+ const Editor = ({ Root, readOnlyStudio, }) => {
32
24
  (0, react_1.useEffect)(() => {
25
+ if (readOnlyStudio) {
26
+ return;
27
+ }
33
28
  const listenToChanges = (e) => {
34
29
  if (window.remotion_unsavedProps) {
35
30
  e.returnValue = 'Are you sure you want to leave?';
@@ -39,19 +34,7 @@ const Editor = () => {
39
34
  return () => {
40
35
  window.removeEventListener('beforeunload', listenToChanges);
41
36
  };
42
- }, []);
43
- (0, react_1.useEffect)(() => {
44
- if (Root) {
45
- return;
46
- }
47
- const cleanup = remotion_1.Internals.waitForRoot((NewRoot) => {
48
- setRoot(() => NewRoot);
49
- (0, remotion_1.continueRender)(waitForRoot);
50
- });
51
- return () => {
52
- cleanup();
53
- };
54
- }, [Root, waitForRoot]);
55
- return ((0, jsx_runtime_1.jsx)(z_index_1.HigherZIndex, { onEscape: noop_1.noop, onOutsideClick: noop_1.noop, children: (0, jsx_runtime_1.jsxs)(timeline_zoom_1.TimelineZoomContext, { children: [(0, jsx_runtime_1.jsxs)("div", { style: background, children: [Root === null ? null : (0, jsx_runtime_1.jsx)(Root, {}), (0, jsx_runtime_1.jsxs)(remotion_1.Internals.CanUseRemotionHooksProvider, { children: [Root === null ? (0, jsx_runtime_1.jsx)(NoRegisterRoot_1.NoRegisterRoot, {}) : (0, jsx_runtime_1.jsx)(EditorContent_1.EditorContent, {}), (0, jsx_runtime_1.jsx)(GlobalKeybindings_1.GlobalKeybindings, {})] }), (0, jsx_runtime_1.jsx)(NotificationCenter_1.NotificationCenter, {})] }), (0, jsx_runtime_1.jsx)(Modals_1.Modals, {})] }) }));
37
+ }, [readOnlyStudio]);
38
+ return ((0, jsx_runtime_1.jsx)(z_index_1.HigherZIndex, { onEscape: noop_1.noop, onOutsideClick: noop_1.noop, children: (0, jsx_runtime_1.jsxs)(timeline_zoom_1.TimelineZoomContext, { children: [(0, jsx_runtime_1.jsxs)("div", { style: background, children: [(0, jsx_runtime_1.jsx)(Root, {}), (0, jsx_runtime_1.jsxs)(remotion_1.Internals.CanUseRemotionHooksProvider, { children: [(0, jsx_runtime_1.jsx)(EditorContent_1.EditorContent, { readOnlyStudio: readOnlyStudio }), (0, jsx_runtime_1.jsx)(GlobalKeybindings_1.GlobalKeybindings, {})] }), (0, jsx_runtime_1.jsx)(NotificationCenter_1.NotificationCenter, {})] }), (0, jsx_runtime_1.jsx)(Modals_1.Modals, { readOnlyStudio: readOnlyStudio })] }) }));
56
39
  };
57
40
  exports.Editor = Editor;
@@ -1,2 +1,4 @@
1
1
  import React from 'react';
2
- export declare const EditorContent: React.FC;
2
+ export declare const EditorContent: React.FC<{
3
+ readOnlyStudio: boolean;
4
+ }>;
@@ -19,11 +19,11 @@ const container = {
19
19
  flex: 1,
20
20
  height: 0,
21
21
  };
22
- const EditorContent = () => {
22
+ const EditorContent = ({ readOnlyStudio }) => {
23
23
  const isStill = (0, is_current_selected_still_1.useIsStill)();
24
24
  const { canvasContent } = (0, react_1.useContext)(remotion_1.Internals.CompositionManager);
25
25
  // Preventing multiple renders so the update check doesn't get rendered twice and needs to be aborted
26
26
  const onlyTopPanel = canvasContent === null || isStill || canvasContent.type !== 'composition';
27
- return ((0, jsx_runtime_1.jsxs)("div", { style: container, children: [(0, jsx_runtime_1.jsx)(InitialCompositionLoader_1.InitialCompositionLoader, {}), (0, jsx_runtime_1.jsx)(MenuToolbar_1.MenuToolbar, {}), onlyTopPanel ? ((0, jsx_runtime_1.jsx)(TopPanel_1.TopPanel, {})) : ((0, jsx_runtime_1.jsxs)(SplitterContainer_1.SplitterContainer, { orientation: "horizontal", id: "top-to-bottom", maxFlex: 0.9, minFlex: 0.2, defaultFlex: 0.75, children: [(0, jsx_runtime_1.jsx)(SplitterElement_1.SplitterElement, { sticky: null, type: "flexer", children: (0, jsx_runtime_1.jsx)(TopPanel_1.TopPanel, {}) }), (0, jsx_runtime_1.jsx)(SplitterHandle_1.SplitterHandle, { allowToCollapse: "none", onCollapse: noop }), (0, jsx_runtime_1.jsx)(SplitterElement_1.SplitterElement, { sticky: null, type: "anti-flexer", children: (0, jsx_runtime_1.jsx)(Timeline_1.Timeline, {}) })] }))] }));
27
+ return ((0, jsx_runtime_1.jsxs)("div", { style: container, children: [(0, jsx_runtime_1.jsx)(InitialCompositionLoader_1.InitialCompositionLoader, {}), (0, jsx_runtime_1.jsx)(MenuToolbar_1.MenuToolbar, { readOnlyStudio: readOnlyStudio }), onlyTopPanel ? ((0, jsx_runtime_1.jsx)(TopPanel_1.TopPanel, { readOnlyStudio: readOnlyStudio })) : ((0, jsx_runtime_1.jsxs)(SplitterContainer_1.SplitterContainer, { orientation: "horizontal", id: "top-to-bottom", maxFlex: 0.9, minFlex: 0.2, defaultFlex: 0.75, children: [(0, jsx_runtime_1.jsx)(SplitterElement_1.SplitterElement, { sticky: null, type: "flexer", children: (0, jsx_runtime_1.jsx)(TopPanel_1.TopPanel, { readOnlyStudio: readOnlyStudio }) }), (0, jsx_runtime_1.jsx)(SplitterHandle_1.SplitterHandle, { allowToCollapse: "none", onCollapse: noop }), (0, jsx_runtime_1.jsx)(SplitterElement_1.SplitterElement, { sticky: null, type: "anti-flexer", children: (0, jsx_runtime_1.jsx)(Timeline_1.Timeline, {}) })] }))] }));
28
28
  };
29
29
  exports.EditorContent = EditorContent;
@@ -1,4 +1,5 @@
1
1
  import React from 'react';
2
2
  export declare const EditorContexts: React.FC<{
3
3
  children: React.ReactNode;
4
+ readOnlyStudio: boolean;
4
5
  }>;
@@ -18,7 +18,7 @@ const SetTimelineInOutProvider_1 = require("./SetTimelineInOutProvider");
18
18
  const ShowGuidesProvider_1 = require("./ShowGuidesProvider");
19
19
  const ShowRulersProvider_1 = require("./ShowRulersProvider");
20
20
  const ZoomGesturesProvider_1 = require("./ZoomGesturesProvider");
21
- const EditorContexts = ({ children }) => {
22
- return ((0, jsx_runtime_1.jsx)(get_zod_if_possible_1.ZodProvider, { children: (0, jsx_runtime_1.jsx)(client_id_1.PreviewServerConnection, { children: (0, jsx_runtime_1.jsx)(context_1.RenderQueueContextProvider, { children: (0, jsx_runtime_1.jsx)(keybindings_1.KeybindingContextProvider, { children: (0, jsx_runtime_1.jsx)(CheckerboardProvider_1.CheckerboardProvider, { children: (0, jsx_runtime_1.jsx)(ZoomGesturesProvider_1.ZoomGesturesProvider, { children: (0, jsx_runtime_1.jsx)(ShowRulersProvider_1.ShowRulersProvider, { children: (0, jsx_runtime_1.jsx)(ShowGuidesProvider_1.ShowGuidesProvider, { children: (0, jsx_runtime_1.jsx)(preview_size_1.PreviewSizeProvider, { children: (0, jsx_runtime_1.jsx)(ModalsProvider_1.ModalsProvider, { children: (0, jsx_runtime_1.jsx)(MediaVolumeProvider_1.MediaVolumeProvider, { children: (0, jsx_runtime_1.jsx)(PlayerEmitterContext_1.PlayerEmitterContext, { children: (0, jsx_runtime_1.jsx)(sidebar_1.SidebarContextProvider, { children: (0, jsx_runtime_1.jsx)(folders_1.FolderContextProvider, { children: (0, jsx_runtime_1.jsx)(highest_z_index_1.HighestZIndexProvider, { children: (0, jsx_runtime_1.jsx)(SetTimelineInOutProvider_1.SetTimelineInOutProvider, { children: children }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }));
21
+ const EditorContexts = ({ children, readOnlyStudio }) => {
22
+ return ((0, jsx_runtime_1.jsx)(get_zod_if_possible_1.ZodProvider, { children: (0, jsx_runtime_1.jsx)(client_id_1.PreviewServerConnection, { readOnlyStudio: readOnlyStudio, children: (0, jsx_runtime_1.jsx)(context_1.RenderQueueContextProvider, { children: (0, jsx_runtime_1.jsx)(keybindings_1.KeybindingContextProvider, { children: (0, jsx_runtime_1.jsx)(CheckerboardProvider_1.CheckerboardProvider, { children: (0, jsx_runtime_1.jsx)(ZoomGesturesProvider_1.ZoomGesturesProvider, { children: (0, jsx_runtime_1.jsx)(ShowRulersProvider_1.ShowRulersProvider, { children: (0, jsx_runtime_1.jsx)(ShowGuidesProvider_1.ShowGuidesProvider, { children: (0, jsx_runtime_1.jsx)(preview_size_1.PreviewSizeProvider, { children: (0, jsx_runtime_1.jsx)(ModalsProvider_1.ModalsProvider, { children: (0, jsx_runtime_1.jsx)(MediaVolumeProvider_1.MediaVolumeProvider, { children: (0, jsx_runtime_1.jsx)(PlayerEmitterContext_1.PlayerEmitterContext, { children: (0, jsx_runtime_1.jsx)(sidebar_1.SidebarContextProvider, { children: (0, jsx_runtime_1.jsx)(folders_1.FolderContextProvider, { children: (0, jsx_runtime_1.jsx)(highest_z_index_1.HighestZIndexProvider, { children: (0, jsx_runtime_1.jsx)(SetTimelineInOutProvider_1.SetTimelineInOutProvider, { children: children }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }));
23
23
  };
24
24
  exports.EditorContexts = EditorContexts;
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.FilePreview = void 0;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
- const format_bytes_1 = require("../helpers/format-bytes");
5
+ const studio_shared_1 = require("@remotion/studio-shared");
6
6
  const JSONViewer_1 = require("./JSONViewer");
7
7
  const layout_1 = require("./layout");
8
8
  const TextViewer_1 = require("./TextViewer");
@@ -35,6 +35,6 @@ const FilePreview = ({ fileType, src, currentAsset, assetMetadata }) => {
35
35
  if (fileType === 'txt') {
36
36
  return (0, jsx_runtime_1.jsx)(TextViewer_1.TextViewer, { src: src });
37
37
  }
38
- return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("div", { style: msgStyle, children: currentAsset }), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { y: 0.5 }), (0, jsx_runtime_1.jsxs)("div", { style: msgStyle, children: ["Size: ", (0, format_bytes_1.formatBytes)(assetMetadata.size), " "] })] }));
38
+ return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("div", { style: msgStyle, children: currentAsset }), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { y: 0.5 }), (0, jsx_runtime_1.jsxs)("div", { style: msgStyle, children: ["Size: ", (0, studio_shared_1.formatBytes)(assetMetadata.size), " "] })] }));
39
39
  };
40
40
  exports.FilePreview = FilePreview;
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.InitialCompositionLoader = exports.useSelectComposition = exports.useSelectAsset = void 0;
4
4
  const react_1 = require("react");
5
5
  const remotion_1 = require("remotion");
6
+ const url_state_1 = require("../helpers/url-state");
6
7
  const folders_1 = require("../state/folders");
7
8
  const CompositionSelector_1 = require("./CompositionSelector");
8
9
  const ExplorerPanel_1 = require("./ExplorerPanel");
@@ -36,7 +37,7 @@ const useSelectComposition = () => {
36
37
  return (c, push) => {
37
38
  var _a;
38
39
  if (push) {
39
- window.history.pushState({}, 'Studio', `/${c.id}`);
40
+ (0, url_state_1.pushUrl)(`/${c.id}`);
40
41
  }
41
42
  (_a = ExplorerPanel_1.explorerSidebarTabs.current) === null || _a === void 0 ? void 0 : _a.selectCompositionPanel();
42
43
  setCanvasContent({ type: 'composition', compositionId: c.id });
@@ -94,7 +95,7 @@ const InitialCompositionLoader = () => {
94
95
  const onchange = () => {
95
96
  const newCanvas = (0, ZoomPersistor_1.deriveCanvasContentFromUrl)();
96
97
  if (newCanvas && newCanvas.type === 'composition') {
97
- const newComp = window.location.pathname.substring(1);
98
+ const newComp = (0, url_state_1.getPathname)().substring(1);
98
99
  const exists = compositions.find((c) => c.id === newComp);
99
100
  if (exists) {
100
101
  selectComposition(exists, false);
@@ -26,7 +26,7 @@ const noSpinner = {
26
26
  };
27
27
  const MenuBuildIndicator = () => {
28
28
  const [isBuilding, setIsBuilding] = (0, react_1.useState)(false);
29
- const ctx = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx);
29
+ const ctx = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx).previewServerState;
30
30
  const showButton = window.remotion_editorName && ctx.type === 'connected';
31
31
  (0, react_1.useEffect)(() => {
32
32
  window.remotion_isBuilding = () => {
@@ -1,2 +1,4 @@
1
1
  import React from 'react';
2
- export declare const MenuToolbar: React.FC;
2
+ export declare const MenuToolbar: React.FC<{
3
+ readOnlyStudio: boolean;
4
+ }>;
@@ -36,7 +36,7 @@ const fixedWidthLeft = {
36
36
  const flex = {
37
37
  flex: 1,
38
38
  };
39
- const MenuToolbar = () => {
39
+ const MenuToolbar = ({ readOnlyStudio }) => {
40
40
  const [selected, setSelected] = (0, react_1.useState)(null);
41
41
  const itemClicked = (0, react_1.useCallback)((itemId) => {
42
42
  setSelected(itemId);
@@ -49,7 +49,7 @@ const MenuToolbar = () => {
49
49
  const closeMenu = (0, react_1.useCallback)(() => {
50
50
  setSelected(null);
51
51
  }, []);
52
- const structure = (0, use_menu_structure_1.useMenuStructure)(closeMenu);
52
+ const structure = (0, use_menu_structure_1.useMenuStructure)(closeMenu, readOnlyStudio);
53
53
  const menus = (0, react_1.useMemo)(() => {
54
54
  return structure.map((s) => s.id);
55
55
  }, [structure]);
@@ -77,6 +77,6 @@ const MenuToolbar = () => {
77
77
  }, [setSelected]);
78
78
  return ((0, jsx_runtime_1.jsxs)(layout_1.Row, { align: "center", className: "css-reset", style: row, children: [(0, jsx_runtime_1.jsxs)("div", { style: fixedWidthLeft, children: [structure.map((s) => {
79
79
  return ((0, jsx_runtime_1.jsx)(MenuItem_1.MenuItem, { selected: selected === s.id, onItemSelected: itemClicked, onItemHovered: itemHovered, id: s.id, label: s.label, onItemQuit: onItemQuit, menu: s, onPreviousMenu: onPreviousMenu, onNextMenu: onNextMenu, leaveLeftPadding: s.leaveLeftPadding }, s.id));
80
- }), (0, jsx_runtime_1.jsx)(UpdateCheck_1.UpdateCheck, {})] }), (0, jsx_runtime_1.jsx)("div", { style: flex }), (0, jsx_runtime_1.jsx)(MenuBuildIndicator_1.MenuBuildIndicator, {}), (0, jsx_runtime_1.jsx)("div", { style: flex }), (0, jsx_runtime_1.jsx)("div", { style: fixedWidthRight, children: (0, jsx_runtime_1.jsx)(SidebarCollapserControls_1.SidebarCollapserControls, {}) }), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 1 })] }));
80
+ }), readOnlyStudio ? null : (0, jsx_runtime_1.jsx)(UpdateCheck_1.UpdateCheck, {})] }), (0, jsx_runtime_1.jsx)("div", { style: flex }), (0, jsx_runtime_1.jsx)(MenuBuildIndicator_1.MenuBuildIndicator, {}), (0, jsx_runtime_1.jsx)("div", { style: flex }), (0, jsx_runtime_1.jsx)("div", { style: fixedWidthRight, children: (0, jsx_runtime_1.jsx)(SidebarCollapserControls_1.SidebarCollapserControls, {}) }), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 1 })] }));
81
81
  };
82
82
  exports.MenuToolbar = MenuToolbar;
@@ -1,2 +1,4 @@
1
1
  import React from 'react';
2
- export declare const Modals: React.FC;
2
+ export declare const Modals: React.FC<{
3
+ readOnlyStudio: boolean;
4
+ }>;
@@ -13,11 +13,12 @@ const QuickSwitcher_1 = __importDefault(require("./QuickSwitcher/QuickSwitcher")
13
13
  const RenderModal_1 = require("./RenderModal/RenderModal");
14
14
  const RenderStatusModal_1 = require("./RenderModal/RenderStatusModal");
15
15
  const UpdateModal_1 = require("./UpdateModal/UpdateModal");
16
- const Modals = () => {
16
+ const Modals = ({ readOnlyStudio }) => {
17
17
  const { selectedModal: modalContextType } = (0, react_1.useContext)(modals_1.ModalsContext);
18
- const canRender = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx).type === 'connected';
18
+ const canRender = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx).previewServerState.type ===
19
+ 'connected';
19
20
  return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [modalContextType && modalContextType.type === 'new-comp' && ((0, jsx_runtime_1.jsx)(NewComposition_1.default, { initialCompType: modalContextType.compType })), modalContextType && canRender && modalContextType.type === 'render' && ((0, jsx_runtime_1.jsx)(RenderModal_1.RenderModalWithLoader, { initialFrame: modalContextType.initialFrame, compositionId: modalContextType.compositionId, initialVideoImageFormat: modalContextType.initialVideoImageFormat, initialJpegQuality: modalContextType.initialJpegQuality, initialScale: modalContextType.initialScale, initialLogLevel: modalContextType.initialLogLevel, initialOffthreadVideoCacheSizeInBytes: modalContextType.initialOffthreadVideoCacheSizeInBytes, initialConcurrency: modalContextType.initialConcurrency, maxConcurrency: modalContextType.maxConcurrency, minConcurrency: modalContextType.minConcurrency, initialStillImageFormat: modalContextType.initialStillImageFormat, initialMuted: modalContextType.initialMuted, initialEnforceAudioTrack: modalContextType.initialEnforceAudioTrack, initialProResProfile: modalContextType.initialProResProfile, initialx264Preset: modalContextType.initialx264Preset, 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, defaultProps: modalContextType.defaultProps, inFrameMark: modalContextType.inFrameMark, outFrameMark: modalContextType.outFrameMark, defaultConfigurationAudioCodec: modalContextType.defaultConfigurationAudioCodec, defaultConfigurationVideoCodec: modalContextType.defaultConfigurationVideoCodec })), modalContextType &&
20
21
  canRender &&
21
- modalContextType.type === 'render-progress' && ((0, jsx_runtime_1.jsx)(RenderStatusModal_1.RenderStatusModal, { jobId: modalContextType.jobId })), modalContextType && modalContextType.type === 'update' && ((0, jsx_runtime_1.jsx)(UpdateModal_1.UpdateModal, { info: modalContextType.info, knownBugs: modalContextType.knownBugs })), modalContextType && modalContextType.type === 'quick-switcher' && ((0, jsx_runtime_1.jsx)(QuickSwitcher_1.default, { invocationTimestamp: modalContextType.invocationTimestamp, initialMode: modalContextType.mode }))] }));
22
+ modalContextType.type === 'render-progress' && ((0, jsx_runtime_1.jsx)(RenderStatusModal_1.RenderStatusModal, { jobId: modalContextType.jobId })), modalContextType && modalContextType.type === 'update' && ((0, jsx_runtime_1.jsx)(UpdateModal_1.UpdateModal, { info: modalContextType.info, knownBugs: modalContextType.knownBugs })), modalContextType && modalContextType.type === 'quick-switcher' && ((0, jsx_runtime_1.jsx)(QuickSwitcher_1.default, { readOnlyStudio: readOnlyStudio, invocationTimestamp: modalContextType.invocationTimestamp, initialMode: modalContextType.mode }))] }));
22
23
  };
23
24
  exports.Modals = Modals;
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  export declare const getNewCompositionCode: ({ type, height, width, fps, durationInFrames, name, raw, }: {
3
2
  type: 'still' | 'composition';
4
3
  height: number;
@@ -7,4 +6,4 @@ export declare const getNewCompositionCode: ({ type, height, width, fps, duratio
7
6
  durationInFrames: number;
8
7
  name: string;
9
8
  raw: boolean;
10
- }) => string | (string | JSX.Element | (string | JSX.Element)[])[];
9
+ }) => string | (string | import("react/jsx-runtime").JSX.Element | (string | import("react/jsx-runtime").JSX.Element)[])[];
@@ -12,6 +12,6 @@ export declare const getInputBorderColor: ({ status, isFocused, isHovered, }: {
12
12
  status: 'error' | 'warning' | 'ok';
13
13
  isFocused: boolean;
14
14
  isHovered: boolean;
15
- }) => "#ff3232" | "hsla(0, 0%, 100%, 0.15)" | "#f1c40f" | "rgba(0, 0, 0, 0.6)" | "rgba(255, 255, 255, 0.05)";
16
- export declare const RemotionInput: React.ForwardRefExoticComponent<Pick<Props, keyof React.InputHTMLAttributes<HTMLInputElement> | "status" | "rightAlign" | "key"> & React.RefAttributes<HTMLInputElement>>;
15
+ }) => "hsla(0, 0%, 100%, 0.15)" | "rgba(0, 0, 0, 0.6)" | "rgba(255, 255, 255, 0.05)" | "#ff3232" | "#f1c40f";
16
+ export declare const RemotionInput: React.ForwardRefExoticComponent<Omit<Props, "ref"> & React.RefAttributes<HTMLInputElement>>;
17
17
  export {};
@@ -4,5 +4,5 @@ type Props = React.DetailedHTMLProps<React.InputHTMLAttributes<HTMLInputElement>
4
4
  status: RemInputStatus;
5
5
  name: string;
6
6
  };
7
- export declare const RemInputTypeColor: React.ForwardRefExoticComponent<Pick<Props, keyof React.InputHTMLAttributes<HTMLInputElement> | "status" | "key"> & React.RefAttributes<HTMLInputElement>>;
7
+ export declare const RemInputTypeColor: React.ForwardRefExoticComponent<Omit<Props, "ref"> & React.RefAttributes<HTMLInputElement>>;
8
8
  export {};
@@ -2,5 +2,5 @@ import React from 'react';
2
2
  type Props = React.DetailedHTMLProps<React.InputHTMLAttributes<HTMLTextAreaElement>, HTMLTextAreaElement> & {
3
3
  status: 'error' | 'warning' | 'ok';
4
4
  };
5
- export declare const RemTextarea: React.ForwardRefExoticComponent<Pick<Props, "status" | "key" | keyof React.InputHTMLAttributes<HTMLTextAreaElement>> & React.RefAttributes<HTMLTextAreaElement>>;
5
+ export declare const RemTextarea: React.ForwardRefExoticComponent<Omit<Props, "ref"> & React.RefAttributes<HTMLTextAreaElement>>;
6
6
  export {};
@@ -3,16 +3,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.NoRegisterRoot = void 0;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const react_1 = require("react");
6
+ const remotion_1 = require("remotion");
6
7
  const label = {
7
8
  fontSize: 13,
8
9
  color: 'white',
9
10
  fontFamily: 'Arial, Helvetica, sans-serif',
10
11
  };
11
12
  const container = {
12
- display: 'flex',
13
13
  justifyContent: 'center',
14
14
  alignItems: 'center',
15
- flex: 1,
16
15
  flexDirection: 'column',
17
16
  textAlign: 'center',
18
17
  lineHeight: 1.5,
@@ -36,6 +35,6 @@ const NoRegisterRoot = () => {
36
35
  if (!show) {
37
36
  return null;
38
37
  }
39
- return ((0, jsx_runtime_1.jsxs)("div", { style: container, children: [(0, jsx_runtime_1.jsx)("div", { style: label, children: "Waiting for registerRoot() to get called." }), (0, jsx_runtime_1.jsxs)("div", { style: label, children: ["Learn more:", ' ', (0, jsx_runtime_1.jsx)("a", { target: '_blank', style: link, href: "https://www.remotion.dev/docs/register-root", children: "remotion.dev/docs/register-root" })] })] }));
38
+ return ((0, jsx_runtime_1.jsxs)(remotion_1.AbsoluteFill, { style: container, children: [(0, jsx_runtime_1.jsx)("div", { style: label, children: "Waiting for registerRoot() to get called." }), (0, jsx_runtime_1.jsxs)("div", { style: label, children: ["Learn more:", ' ', (0, jsx_runtime_1.jsx)("a", { target: '_blank', style: link, href: "https://www.remotion.dev/docs/register-root", children: "remotion.dev/docs/register-root" })] })] }));
40
39
  };
41
40
  exports.NoRegisterRoot = NoRegisterRoot;
@@ -37,7 +37,7 @@ window.addEventListener('beforeunload', () => {
37
37
  pageIsGoingToReload = true;
38
38
  });
39
39
  const ServerDisconnected = () => {
40
- const ctx = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx);
40
+ const { previewServerState: ctx } = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx);
41
41
  const fav = document.getElementById('__remotion_favicon');
42
42
  if (ctx.type !== 'disconnected') {
43
43
  fav.setAttribute('href', '/remotion.png');
@@ -4,5 +4,7 @@ export declare const persistSelectedOptionsSidebarPanel: (panel: OptionsSidebarP
4
4
  export declare const optionsSidebarTabs: React.RefObject<{
5
5
  selectRendersPanel: () => void;
6
6
  }>;
7
- export declare const OptionsPanel: React.FC<{}>;
7
+ export declare const OptionsPanel: React.FC<{
8
+ readOnlyStudio: boolean;
9
+ }>;
8
10
  export {};
@@ -24,7 +24,10 @@ const circle = {
24
24
  borderRadius: 4,
25
25
  };
26
26
  const localStorageKey = 'remotion.sidebarPanel';
27
- const getSelectedPanel = () => {
27
+ const getSelectedPanel = (readOnlyStudio) => {
28
+ if (readOnlyStudio) {
29
+ return 'input-props';
30
+ }
28
31
  const panel = localStorage.getItem(localStorageKey);
29
32
  if (panel === 'renders') {
30
33
  return 'renders';
@@ -39,10 +42,10 @@ const persistSelectedOptionsSidebarPanel = (panel) => {
39
42
  };
40
43
  exports.persistSelectedOptionsSidebarPanel = persistSelectedOptionsSidebarPanel;
41
44
  exports.optionsSidebarTabs = (0, react_1.createRef)();
42
- const OptionsPanel = () => {
45
+ const OptionsPanel = ({ readOnlyStudio }) => {
43
46
  const { props, updateProps } = (0, react_1.useContext)(remotion_1.Internals.EditorPropsContext);
44
47
  const [saving, setSaving] = (0, react_1.useState)(false);
45
- const [panel, setPanel] = (0, react_1.useState)(() => getSelectedPanel());
48
+ const [panel, setPanel] = (0, react_1.useState)(() => getSelectedPanel(readOnlyStudio));
46
49
  const onPropsSelected = (0, react_1.useCallback)(() => {
47
50
  setPanel('input-props');
48
51
  (0, exports.persistSelectedOptionsSidebarPanel)('input-props');
@@ -107,6 +110,6 @@ const OptionsPanel = () => {
107
110
  }
108
111
  return !(0, deep_equal_1.deepEqual)(composition.defaultProps, actualProps);
109
112
  }, [actualProps, composition]);
110
- return ((0, jsx_runtime_1.jsxs)("div", { style: container, className: "css-reset", children: [(0, jsx_runtime_1.jsx)("div", { style: tabsContainer, children: (0, jsx_runtime_1.jsxs)(Tabs_1.Tabs, { children: [composition ? ((0, jsx_runtime_1.jsxs)(Tabs_1.Tab, { selected: panel === 'input-props', onClick: onPropsSelected, style: { justifyContent: 'space-between' }, children: ["Props", unsavedChangesExist ? ((0, jsx_runtime_1.jsx)("div", { title: saveToolTip, style: circleStyle })) : null] })) : null, (0, jsx_runtime_1.jsx)(RendersTab_1.RendersTab, { onClick: onRendersSelected, selected: panel === 'renders' })] }) }), panel === `input-props` && composition ? ((0, jsx_runtime_1.jsx)(DataEditor_1.DataEditor, { unresolvedComposition: composition, inputProps: actualProps, setInputProps: setInputProps, mayShowSaveButton: true, propsEditType: "default-props", saving: saving, setSaving: setSaving }, composition.id)) : ((0, jsx_runtime_1.jsx)(RenderQueue_1.RenderQueue, {}))] }));
113
+ return ((0, jsx_runtime_1.jsxs)("div", { style: container, className: "css-reset", children: [(0, jsx_runtime_1.jsx)("div", { style: tabsContainer, children: (0, jsx_runtime_1.jsxs)(Tabs_1.Tabs, { children: [composition ? ((0, jsx_runtime_1.jsxs)(Tabs_1.Tab, { selected: panel === 'input-props', onClick: onPropsSelected, style: { justifyContent: 'space-between' }, children: ["Props", unsavedChangesExist ? ((0, jsx_runtime_1.jsx)("div", { title: saveToolTip, style: circleStyle })) : null] })) : null, readOnlyStudio ? null : ((0, jsx_runtime_1.jsx)(RendersTab_1.RendersTab, { onClick: onRendersSelected, selected: panel === 'renders' }))] }) }), panel === `input-props` && composition ? ((0, jsx_runtime_1.jsx)(DataEditor_1.DataEditor, { unresolvedComposition: composition, inputProps: actualProps, setInputProps: setInputProps, mayShowSaveButton: true, propsEditType: "default-props", saving: saving, setSaving: setSaving, readOnlyStudio: readOnlyStudio }, composition.id)) : readOnlyStudio ? null : ((0, jsx_runtime_1.jsx)(RenderQueue_1.RenderQueue, {}))] }));
111
114
  };
112
115
  exports.OptionsPanel = OptionsPanel;
@@ -1,2 +1,4 @@
1
1
  import React from 'react';
2
- export declare const PreviewToolbar: React.FC;
2
+ export declare const PreviewToolbar: React.FC<{
3
+ readOnlyStudio: boolean;
4
+ }>;
@@ -42,7 +42,7 @@ const sideContainer = {
42
42
  const padding = {
43
43
  width: timeline_layout_1.TIMELINE_PADDING,
44
44
  };
45
- const PreviewToolbar = () => {
45
+ const PreviewToolbar = ({ readOnlyStudio }) => {
46
46
  const { playbackRate, setPlaybackRate } = (0, react_1.useContext)(remotion_1.Internals.Timeline.TimelineContext);
47
47
  const { mediaMuted } = (0, react_1.useContext)(remotion_1.Internals.MediaVolumeContext);
48
48
  const { setMediaMuted } = (0, react_1.useContext)(remotion_1.Internals.SetMediaVolumeContext);
@@ -50,6 +50,6 @@ const PreviewToolbar = () => {
50
50
  const isStill = (0, is_current_selected_still_1.useIsStill)();
51
51
  const [loop, setLoop] = (0, react_1.useState)((0, loop_1.loadLoopOption)());
52
52
  const isFullscreenSupported = document.fullscreenEnabled || document.webkitFullscreenEnabled;
53
- return ((0, jsx_runtime_1.jsxs)("div", { style: container, className: "css-reset", children: [(0, jsx_runtime_1.jsxs)("div", { style: sideContainer, children: [(0, jsx_runtime_1.jsx)("div", { style: padding }), (0, jsx_runtime_1.jsx)(TimelineZoomControls_1.TimelineZoomControls, {})] }), (0, jsx_runtime_1.jsx)(layout_1.Flex, {}), (0, jsx_runtime_1.jsx)(SizeSelector_1.SizeSelector, {}), isStill || isVideoComposition ? ((0, jsx_runtime_1.jsx)(PlaybackRateSelector_1.PlaybackRateSelector, { setPlaybackRate: setPlaybackRate, playbackRate: playbackRate })) : null, isVideoComposition ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 2 }), (0, jsx_runtime_1.jsx)(PlayPause_1.PlayPause, { loop: loop, playbackRate: playbackRate }), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 2 }), (0, jsx_runtime_1.jsx)(LoopToggle_1.LoopToggle, { loop: loop, setLoop: setLoop }), (0, jsx_runtime_1.jsx)(MuteToggle_1.MuteToggle, { muted: mediaMuted, setMuted: setMediaMuted }), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 2 }), (0, jsx_runtime_1.jsx)(TimelineInOutToggle_1.TimelineInOutPointToggle, {}), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 2 }), (0, jsx_runtime_1.jsx)(CheckboardToggle_1.CheckboardToggle, {}), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 1 })] })) : null, isFullscreenSupported && (0, jsx_runtime_1.jsx)(FullscreenToggle_1.FullScreenToggle, {}), (0, jsx_runtime_1.jsx)(layout_1.Flex, {}), (0, jsx_runtime_1.jsxs)("div", { style: sideContainer, children: [(0, jsx_runtime_1.jsx)(layout_1.Flex, {}), (0, jsx_runtime_1.jsx)(FpsCounter_1.FpsCounter, { playbackSpeed: playbackRate }), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 2 }), (0, jsx_runtime_1.jsx)(RenderButton_1.RenderButton, {}), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 1.5 })] }), (0, jsx_runtime_1.jsx)(PlaybackKeyboardShortcutsManager_1.PlaybackKeyboardShortcutsManager, { setPlaybackRate: setPlaybackRate }), (0, jsx_runtime_1.jsx)(PlaybackRatePersistor_1.PlaybackRatePersistor, {})] }));
53
+ return ((0, jsx_runtime_1.jsxs)("div", { style: container, className: "css-reset", children: [(0, jsx_runtime_1.jsxs)("div", { style: sideContainer, children: [(0, jsx_runtime_1.jsx)("div", { style: padding }), (0, jsx_runtime_1.jsx)(TimelineZoomControls_1.TimelineZoomControls, {})] }), (0, jsx_runtime_1.jsx)(layout_1.Flex, {}), (0, jsx_runtime_1.jsx)(SizeSelector_1.SizeSelector, {}), isStill || isVideoComposition ? ((0, jsx_runtime_1.jsx)(PlaybackRateSelector_1.PlaybackRateSelector, { setPlaybackRate: setPlaybackRate, playbackRate: playbackRate })) : null, isVideoComposition ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 2 }), (0, jsx_runtime_1.jsx)(PlayPause_1.PlayPause, { loop: loop, playbackRate: playbackRate }), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 2 }), (0, jsx_runtime_1.jsx)(LoopToggle_1.LoopToggle, { loop: loop, setLoop: setLoop }), (0, jsx_runtime_1.jsx)(MuteToggle_1.MuteToggle, { muted: mediaMuted, setMuted: setMediaMuted }), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 2 }), (0, jsx_runtime_1.jsx)(TimelineInOutToggle_1.TimelineInOutPointToggle, {}), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 2 }), (0, jsx_runtime_1.jsx)(CheckboardToggle_1.CheckboardToggle, {}), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 1 })] })) : null, isFullscreenSupported && (0, jsx_runtime_1.jsx)(FullscreenToggle_1.FullScreenToggle, {}), (0, jsx_runtime_1.jsx)(layout_1.Flex, {}), (0, jsx_runtime_1.jsxs)("div", { style: sideContainer, children: [(0, jsx_runtime_1.jsx)(layout_1.Flex, {}), (0, jsx_runtime_1.jsx)(FpsCounter_1.FpsCounter, { playbackSpeed: playbackRate }), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 2 }), readOnlyStudio ? null : (0, jsx_runtime_1.jsx)(RenderButton_1.RenderButton, {}), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 1.5 })] }), (0, jsx_runtime_1.jsx)(PlaybackKeyboardShortcutsManager_1.PlaybackKeyboardShortcutsManager, { setPlaybackRate: setPlaybackRate }), (0, jsx_runtime_1.jsx)(PlaybackRatePersistor_1.PlaybackRatePersistor, {})] }));
54
54
  };
55
55
  exports.PreviewToolbar = PreviewToolbar;
@@ -3,5 +3,6 @@ import type { QuickSwitcherMode } from './NoResults';
3
3
  declare const QuickSwitcher: React.FC<{
4
4
  initialMode: QuickSwitcherMode;
5
5
  invocationTimestamp: number;
6
+ readOnlyStudio: boolean;
6
7
  }>;
7
8
  export default QuickSwitcher;