@remotion/studio 4.0.89 → 4.0.91

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 (263) hide show
  1. package/.eslintrc +33 -28
  2. package/.turbo/turbo-build.log +1 -1
  3. package/dist/Studio.js +6 -1
  4. package/dist/components/AssetSelectorItem.js +2 -1
  5. package/dist/components/ControlButton.d.ts +1 -1
  6. package/dist/components/CopyButton.js +1 -1
  7. package/dist/components/CurrentComposition.d.ts +1 -2
  8. package/dist/components/CurrentCompositionSideEffects.d.ts +3 -1
  9. package/dist/components/CurrentCompositionSideEffects.js +5 -2
  10. package/dist/components/Editor.d.ts +1 -0
  11. package/dist/components/Editor.js +6 -3
  12. package/dist/components/EditorContent.d.ts +3 -1
  13. package/dist/components/EditorContent.js +2 -2
  14. package/dist/components/EditorContexts.d.ts +1 -0
  15. package/dist/components/EditorContexts.js +2 -2
  16. package/dist/components/FilePreview.js +2 -2
  17. package/dist/components/InitialCompositionLoader.js +3 -2
  18. package/dist/components/MenuToolbar.d.ts +3 -1
  19. package/dist/components/MenuToolbar.js +3 -3
  20. package/dist/components/Modals.d.ts +3 -1
  21. package/dist/components/Modals.js +2 -2
  22. package/dist/components/NewComposition/NewCompCode.d.ts +1 -2
  23. package/dist/components/NewComposition/RemInput.d.ts +2 -2
  24. package/dist/components/NewComposition/RemInputTypeColor.d.ts +1 -1
  25. package/dist/components/NewComposition/RemTextarea.d.ts +1 -1
  26. package/dist/components/OptionsPanel.d.ts +3 -1
  27. package/dist/components/OptionsPanel.js +7 -4
  28. package/dist/components/PreviewToolbar.d.ts +3 -1
  29. package/dist/components/PreviewToolbar.js +2 -2
  30. package/dist/components/QuickSwitcher/QuickSwitcher.d.ts +1 -0
  31. package/dist/components/QuickSwitcher/QuickSwitcher.js +2 -2
  32. package/dist/components/QuickSwitcher/QuickSwitcherContent.d.ts +1 -0
  33. package/dist/components/QuickSwitcher/QuickSwitcherContent.js +2 -2
  34. package/dist/components/RenderButton.js +1 -1
  35. package/dist/components/RenderModal/DataEditor.d.ts +1 -0
  36. package/dist/components/RenderModal/DataEditor.js +3 -3
  37. package/dist/components/RenderModal/GuiRenderStatus.d.ts +1 -1
  38. package/dist/components/RenderModal/OptionExplainer.js +1 -1
  39. package/dist/components/RenderModal/RenderModal.js +10 -10
  40. package/dist/components/RenderModal/RenderModalAdvanced.d.ts +1 -1
  41. package/dist/components/RenderModal/RenderModalAudio.js +2 -2
  42. package/dist/components/RenderModal/RenderModalEnvironmentVariables.js +1 -1
  43. package/dist/components/RenderModal/RenderModalInput.d.ts +1 -1
  44. package/dist/components/RenderModal/RenderModalJSONPropsEditor.js +1 -1
  45. package/dist/components/RenderModal/RenderStatusModal.js +2 -2
  46. package/dist/components/RenderModal/SchemaEditor/SchemaErrorMessages.d.ts +3 -3
  47. package/dist/components/RenderModal/SchemaEditor/SchemaErrorMessages.js +2 -2
  48. package/dist/components/RenderModal/SchemaEditor/extract-enum-json-paths.d.ts +0 -1
  49. package/dist/components/RenderModal/SchemaEditor/local-state.d.ts +1 -1
  50. package/dist/components/RenderQueue/RenderQueueCopyToClipboard.d.ts +1 -1
  51. package/dist/components/RenderQueue/RenderQueueError.d.ts +1 -1
  52. package/dist/components/RenderQueue/RenderQueueItem.d.ts +1 -1
  53. package/dist/components/RenderQueue/RenderQueueItem.js +2 -1
  54. package/dist/components/RenderQueue/RenderQueueItemCancelButton.d.ts +1 -1
  55. package/dist/components/RenderQueue/RenderQueueItemStatus.d.ts +1 -1
  56. package/dist/components/RenderQueue/RenderQueueOpenInFolder.d.ts +1 -1
  57. package/dist/components/RenderQueue/RenderQueueOutputName.d.ts +1 -1
  58. package/dist/components/RenderQueue/RenderQueueProgressMessage.d.ts +1 -1
  59. package/dist/components/RenderQueue/RenderQueueRemoveItem.d.ts +1 -1
  60. package/dist/components/RenderQueue/RenderQueueRepeat.d.ts +1 -1
  61. package/dist/components/RenderQueue/RenderQueueRepeat.js +1 -1
  62. package/dist/components/RenderQueue/actions.d.ts +5 -7
  63. package/dist/components/RenderQueue/actions.js +7 -1
  64. package/dist/components/RenderQueue/context.d.ts +2 -2
  65. package/dist/components/RenderQueue/context.js +2 -1
  66. package/dist/components/ResetZoomButton.js +1 -1
  67. package/dist/components/Timeline/MaxTimelineTracks.d.ts +0 -1
  68. package/dist/components/Timeline/MaxTimelineTracks.js +3 -3
  69. package/dist/components/Timeline/TimelineStack/index.js +9 -8
  70. package/dist/components/TopPanel.d.ts +3 -1
  71. package/dist/components/TopPanel.js +2 -2
  72. package/dist/components/UpdateCheck.d.ts +2 -3
  73. package/dist/components/ZoomPersistor.js +4 -3
  74. package/dist/error-overlay/entry-basic.d.ts +95 -1
  75. package/dist/error-overlay/entry-basic.js +20 -15
  76. package/dist/error-overlay/react-overlay/effects/resolve-file-source.d.ts +1 -2
  77. package/dist/error-overlay/react-overlay/listen-to-runtime-errors.d.ts +7 -1
  78. package/dist/error-overlay/react-overlay/listen-to-runtime-errors.js +2 -7
  79. package/dist/error-overlay/react-overlay/utils/get-lines-around.d.ts +1 -1
  80. package/dist/error-overlay/react-overlay/utils/get-stack-frames.d.ts +7 -1
  81. package/dist/error-overlay/react-overlay/utils/get-stack-frames.js +0 -6
  82. package/dist/error-overlay/react-overlay/utils/parser.d.ts +7 -1
  83. package/dist/error-overlay/react-overlay/utils/parser.js +5 -11
  84. package/dist/error-overlay/react-overlay/utils/unmapper.d.ts +7 -1
  85. package/dist/error-overlay/react-overlay/utils/unmapper.js +0 -8
  86. package/dist/error-overlay/remotion-overlay/AskOnDiscord.js +1 -1
  87. package/dist/error-overlay/remotion-overlay/CodeFrame.d.ts +1 -1
  88. package/dist/error-overlay/remotion-overlay/DismissButton.js +2 -1
  89. package/dist/error-overlay/remotion-overlay/ErrorDisplay.js +2 -2
  90. package/dist/error-overlay/remotion-overlay/HelpLink.js +1 -1
  91. package/dist/error-overlay/remotion-overlay/OpenInEditor.d.ts +1 -1
  92. package/dist/error-overlay/remotion-overlay/OpenInEditor.js +1 -2
  93. package/dist/error-overlay/remotion-overlay/Retry.js +1 -1
  94. package/dist/error-overlay/remotion-overlay/SearchGitHubIssues.js +1 -1
  95. package/dist/error-overlay/remotion-overlay/ShortcutHint.d.ts +1 -1
  96. package/dist/error-overlay/remotion-overlay/ShortcutHint.js +8 -8
  97. package/dist/error-overlay/remotion-overlay/StackFrame.d.ts +1 -1
  98. package/dist/error-overlay/remotion-overlay/StackFrame.js +1 -1
  99. package/dist/error-overlay/remotion-overlay/carets.d.ts +1 -1
  100. package/dist/helpers/checkerboard-background.d.ts +1 -1
  101. package/dist/helpers/client-id.d.ts +2 -1
  102. package/dist/helpers/client-id.js +7 -3
  103. package/dist/helpers/colors.d.ts +1 -1
  104. package/dist/helpers/document-title.d.ts +1 -1
  105. package/dist/helpers/get-location-of-sequence.d.ts +1 -1
  106. package/dist/helpers/open-in-editor.d.ts +1 -1
  107. package/dist/helpers/presets-labels.d.ts +1 -1
  108. package/dist/helpers/render-modal-sections.d.ts +0 -1
  109. package/dist/helpers/url-state.d.ts +4 -0
  110. package/dist/helpers/url-state.js +33 -0
  111. package/dist/helpers/use-menu-structure.d.ts +1 -1
  112. package/dist/helpers/use-menu-structure.js +148 -113
  113. package/dist/helpers/use-studio-canvas-dimensions.d.ts +4 -4
  114. package/dist/helpers/use-studio-canvas-dimensions.js +4 -4
  115. package/dist/hot-middleware-client/process-update.js +3 -2
  116. package/dist/icons/Checkmark.d.ts +1 -2
  117. package/dist/icons/audio.d.ts +1 -1
  118. package/dist/icons/caret.d.ts +2 -2
  119. package/dist/icons/data.d.ts +1 -1
  120. package/dist/icons/frame.d.ts +1 -1
  121. package/dist/icons/gear.d.ts +1 -1
  122. package/dist/icons/gif.d.ts +1 -1
  123. package/dist/index.d.ts +2 -64
  124. package/dist/index.js +3 -25
  125. package/dist/previewEntry.d.ts +1 -1
  126. package/dist/previewEntry.js +6 -3
  127. package/package.json +23 -10
  128. package/prettierrc.js +14 -0
  129. package/tsconfig.tsbuildinfo +1 -1
  130. package/dist/ansi/ansi-diff.d.ts +0 -41
  131. package/dist/ansi/ansi-diff.js +0 -220
  132. package/dist/ansi/ansi-split.d.ts +0 -2
  133. package/dist/ansi/ansi-split.js +0 -44
  134. package/dist/better-opn/index.d.ts +0 -6
  135. package/dist/better-opn/index.js +0 -202
  136. package/dist/codemods/stringify-with-path.d.ts +0 -5
  137. package/dist/codemods/stringify-with-path.js +0 -49
  138. package/dist/codemods/update-default-props.d.ts +0 -7
  139. package/dist/codemods/update-default-props.js +0 -137
  140. package/dist/components/Studio.d.ts +0 -4
  141. package/dist/components/Studio.js +0 -16
  142. package/dist/components/render-defaults.d.ts +0 -40
  143. package/dist/components/render-defaults.js +0 -2
  144. package/dist/error-overlay/react-overlay/effects/map-error-to-react-stack.d.ts +0 -7
  145. package/dist/error-overlay/react-overlay/effects/map-error-to-react-stack.js +0 -46
  146. package/dist/error-overlay/react-overlay/utils/get-file-source.d.ts +0 -1
  147. package/dist/error-overlay/react-overlay/utils/get-file-source.js +0 -22
  148. package/dist/error-overlay/react-overlay/utils/open-in-editor.d.ts +0 -16
  149. package/dist/error-overlay/react-overlay/utils/open-in-editor.js +0 -503
  150. package/dist/error-overlay/react-overlay/utils/source-map-endpoint.d.ts +0 -1
  151. package/dist/error-overlay/react-overlay/utils/source-map-endpoint.js +0 -4
  152. package/dist/error-overlay/react-overlay/utils/stack-frame.d.ts +0 -40
  153. package/dist/error-overlay/react-overlay/utils/stack-frame.js +0 -31
  154. package/dist/error-overlay/remotion-overlay/Button.d.ts +0 -11
  155. package/dist/error-overlay/remotion-overlay/Button.js +0 -35
  156. package/dist/event-source-events.d.ts +0 -31
  157. package/dist/event-source-events.js +0 -2
  158. package/dist/file-watcher.d.ts +0 -9
  159. package/dist/file-watcher.js +0 -35
  160. package/dist/get-default-out-name.d.ts +0 -5
  161. package/dist/get-default-out-name.js +0 -10
  162. package/dist/get-latest-remotion-version.d.ts +0 -1
  163. package/dist/get-latest-remotion-version.js +0 -31
  164. package/dist/get-network-address.d.ts +0 -1
  165. package/dist/get-network-address.js +0 -16
  166. package/dist/helpers/format-bytes.d.ts +0 -6
  167. package/dist/helpers/format-bytes.js +0 -103
  168. package/dist/helpers/open-directory-in-finder.d.ts +0 -1
  169. package/dist/helpers/open-directory-in-finder.js +0 -49
  170. package/dist/max-timeline-tracks.d.ts +0 -2
  171. package/dist/max-timeline-tracks.js +0 -25
  172. package/dist/preview-server/api-routes.d.ts +0 -4
  173. package/dist/preview-server/api-routes.js +0 -25
  174. package/dist/preview-server/api-types.d.ts +0 -40
  175. package/dist/preview-server/api-types.js +0 -2
  176. package/dist/preview-server/dev-middleware/compatible-api.d.ts +0 -7
  177. package/dist/preview-server/dev-middleware/compatible-api.js +0 -20
  178. package/dist/preview-server/dev-middleware/get-paths.d.ts +0 -7
  179. package/dist/preview-server/dev-middleware/get-paths.js +0 -19
  180. package/dist/preview-server/dev-middleware/index.d.ts +0 -3
  181. package/dist/preview-server/dev-middleware/index.js +0 -27
  182. package/dist/preview-server/dev-middleware/middleware.d.ts +0 -9
  183. package/dist/preview-server/dev-middleware/middleware.js +0 -222
  184. package/dist/preview-server/dev-middleware/range-parser.d.ts +0 -15
  185. package/dist/preview-server/dev-middleware/range-parser.js +0 -96
  186. package/dist/preview-server/dev-middleware/ready.d.ts +0 -3
  187. package/dist/preview-server/dev-middleware/ready.js +0 -11
  188. package/dist/preview-server/dev-middleware/setup-hooks.d.ts +0 -2
  189. package/dist/preview-server/dev-middleware/setup-hooks.js +0 -52
  190. package/dist/preview-server/dev-middleware/setup-output-filesystem.d.ts +0 -2
  191. package/dist/preview-server/dev-middleware/setup-output-filesystem.js +0 -13
  192. package/dist/preview-server/dev-middleware/types.d.ts +0 -10
  193. package/dist/preview-server/dev-middleware/types.js +0 -2
  194. package/dist/preview-server/env-supports-fs-recursive.d.ts +0 -1
  195. package/dist/preview-server/env-supports-fs-recursive.js +0 -18
  196. package/dist/preview-server/file-existence-watchers.d.ts +0 -13
  197. package/dist/preview-server/file-existence-watchers.js +0 -62
  198. package/dist/preview-server/get-absolute-public-dir.d.ts +0 -4
  199. package/dist/preview-server/get-absolute-public-dir.js +0 -14
  200. package/dist/preview-server/get-package-manager.d.ts +0 -10
  201. package/dist/preview-server/get-package-manager.js +0 -62
  202. package/dist/preview-server/handler.d.ts +0 -12
  203. package/dist/preview-server/handler.js +0 -36
  204. package/dist/preview-server/hot-middleware/client.d.ts +0 -21
  205. package/dist/preview-server/hot-middleware/client.js +0 -179
  206. package/dist/preview-server/hot-middleware/index.d.ts +0 -102
  207. package/dist/preview-server/hot-middleware/index.js +0 -149
  208. package/dist/preview-server/hot-middleware/process-update.d.ts +0 -7
  209. package/dist/preview-server/hot-middleware/process-update.js +0 -162
  210. package/dist/preview-server/hot-middleware/types.d.ts +0 -27
  211. package/dist/preview-server/hot-middleware/types.js +0 -10
  212. package/dist/preview-server/job.d.ts +0 -232
  213. package/dist/preview-server/job.js +0 -2
  214. package/dist/preview-server/live-events.d.ts +0 -10
  215. package/dist/preview-server/live-events.js +0 -76
  216. package/dist/preview-server/parse-body.d.ts +0 -2
  217. package/dist/preview-server/parse-body.js +0 -16
  218. package/dist/preview-server/project-info.d.ts +0 -5
  219. package/dist/preview-server/project-info.js +0 -32
  220. package/dist/preview-server/public-folder.d.ts +0 -12
  221. package/dist/preview-server/public-folder.js +0 -58
  222. package/dist/preview-server/retry-payload.d.ts +0 -3
  223. package/dist/preview-server/retry-payload.js +0 -142
  224. package/dist/preview-server/routes/add-render.d.ts +0 -3
  225. package/dist/preview-server/routes/add-render.js +0 -122
  226. package/dist/preview-server/routes/can-update-default-props.d.ts +0 -4
  227. package/dist/preview-server/routes/can-update-default-props.js +0 -40
  228. package/dist/preview-server/routes/cancel-render.d.ts +0 -3
  229. package/dist/preview-server/routes/cancel-render.js +0 -8
  230. package/dist/preview-server/routes/copy-still-to-clipboard-handler.d.ts +0 -3
  231. package/dist/preview-server/routes/copy-still-to-clipboard-handler.js +0 -17
  232. package/dist/preview-server/routes/open-in-file-explorer.d.ts +0 -3
  233. package/dist/preview-server/routes/open-in-file-explorer.js +0 -8
  234. package/dist/preview-server/routes/remove-render.d.ts +0 -3
  235. package/dist/preview-server/routes/remove-render.js +0 -8
  236. package/dist/preview-server/routes/subscribe-to-file-existence.d.ts +0 -3
  237. package/dist/preview-server/routes/subscribe-to-file-existence.js +0 -13
  238. package/dist/preview-server/routes/unsubscribe-from-file-existence.d.ts +0 -3
  239. package/dist/preview-server/routes/unsubscribe-from-file-existence.js +0 -13
  240. package/dist/preview-server/routes/update-available.d.ts +0 -3
  241. package/dist/preview-server/routes/update-available.js +0 -9
  242. package/dist/preview-server/routes/update-default-props.d.ts +0 -3
  243. package/dist/preview-server/routes/update-default-props.js +0 -34
  244. package/dist/preview-server/serve-static.d.ts +0 -14
  245. package/dist/preview-server/serve-static.js +0 -75
  246. package/dist/preview-server/start-server.d.ts +0 -31
  247. package/dist/preview-server/start-server.js +0 -127
  248. package/dist/preview-server/update-available.d.ts +0 -3
  249. package/dist/preview-server/update-available.js +0 -47
  250. package/dist/required-chromium-options.d.ts +0 -3
  251. package/dist/required-chromium-options.js +0 -2
  252. package/dist/routes.d.ts +0 -25
  253. package/dist/routes.js +0 -242
  254. package/dist/server-ready.d.ts +0 -2
  255. package/dist/server-ready.js +0 -13
  256. package/dist/start-studio.d.ts +0 -26
  257. package/dist/start-studio.js +0 -117
  258. package/dist/watch-root-file.d.ts +0 -1
  259. package/dist/watch-root-file.js +0 -22
  260. package/out.txt +0 -1
  261. package/web/beep.wav +0 -0
  262. package/web/favicon.png +0 -0
  263. /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.88 build /Users/jonathanburger/remotion/packages/studio
2
+ > @remotion/studio@4.0.90 build /Users/jonathanburger/remotion/packages/studio
3
3
  > tsc -d
4
4
 
package/dist/Studio.js CHANGED
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Studio = void 0;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_1 = require("react");
5
6
  const react_dom_1 = require("react-dom");
6
7
  const remotion_1 = require("remotion");
7
8
  require("../styles.css");
@@ -12,7 +13,11 @@ const getServerDisconnectedDomElement = () => {
12
13
  return document.getElementById('server-disconnected-overlay');
13
14
  };
14
15
  const Studio = ({ rootComponent, readOnly }) => {
15
- return ((0, jsx_runtime_1.jsx)(remotion_1.Internals.RemotionRoot, { numberOfAudioTags: window.remotion_numberOfAudioTags, children: (0, jsx_runtime_1.jsxs)(EditorContexts_1.EditorContexts, { children: [(0, jsx_runtime_1.jsx)(Editor_1.Editor, { readOnlyStudio: readOnly, Root: 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
16
21
  ? null
17
22
  : (0, react_dom_1.createPortal)((0, jsx_runtime_1.jsx)(ServerDisconnected_1.ServerDisconnected, {}), getServerDisconnectedDomElement())] }) }));
18
23
  };
@@ -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 {
@@ -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,7 +33,7 @@ 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
39
  const { type } = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx).previewServerState;
@@ -41,13 +41,16 @@ const CurrentCompositionKeybindings = () => {
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,4 +1,5 @@
1
1
  import React from 'react';
2
2
  export declare const Editor: React.FC<{
3
3
  Root: React.FC;
4
+ readOnlyStudio: boolean;
4
5
  }>;
@@ -20,8 +20,11 @@ const background = {
20
20
  flexDirection: 'column',
21
21
  position: 'absolute',
22
22
  };
23
- const Editor = ({ Root }) => {
23
+ const Editor = ({ Root, readOnlyStudio, }) => {
24
24
  (0, react_1.useEffect)(() => {
25
+ if (readOnlyStudio) {
26
+ return;
27
+ }
25
28
  const listenToChanges = (e) => {
26
29
  if (window.remotion_unsavedProps) {
27
30
  e.returnValue = 'Are you sure you want to leave?';
@@ -31,7 +34,7 @@ const Editor = ({ Root }) => {
31
34
  return () => {
32
35
  window.removeEventListener('beforeunload', listenToChanges);
33
36
  };
34
- }, []);
35
- 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, {}), (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 })] }) }));
36
39
  };
37
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);
@@ -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,12 +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
18
  const canRender = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx).previewServerState.type ===
19
19
  'connected';
20
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 &&
21
21
  canRender &&
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, { 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 }))] }));
23
23
  };
24
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
- }) => "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<Pick<Props, "key" | "status" | "rightAlign" | keyof React.InputHTMLAttributes<HTMLInputElement>> & React.RefAttributes<HTMLInputElement>>;
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<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, "key" | "status" | keyof React.InputHTMLAttributes<HTMLInputElement>> & 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, "key" | "status" | keyof React.InputHTMLAttributes<HTMLTextAreaElement>> & React.RefAttributes<HTMLTextAreaElement>>;
5
+ export declare const RemTextarea: React.ForwardRefExoticComponent<Omit<Props, "ref"> & React.RefAttributes<HTMLTextAreaElement>>;
6
6
  export {};
@@ -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;
@@ -5,12 +5,12 @@ const react_1 = require("react");
5
5
  const modals_1 = require("../../state/modals");
6
6
  const ModalContainer_1 = require("../ModalContainer");
7
7
  const QuickSwitcherContent_1 = require("./QuickSwitcherContent");
8
- const QuickSwitcher = ({ initialMode, invocationTimestamp }) => {
8
+ const QuickSwitcher = ({ initialMode, invocationTimestamp, readOnlyStudio }) => {
9
9
  const { setSelectedModal } = (0, react_1.useContext)(modals_1.ModalsContext);
10
10
  const onQuit = (0, react_1.useCallback)(() => {
11
11
  setSelectedModal(null);
12
12
  }, [setSelectedModal]);
13
13
  // Separate child component to correctly capture keybindings
14
- return ((0, jsx_runtime_1.jsx)(ModalContainer_1.ModalContainer, { onOutsideClick: onQuit, onEscape: onQuit, children: (0, jsx_runtime_1.jsx)(QuickSwitcherContent_1.QuickSwitcherContent, { invocationTimestamp: invocationTimestamp, initialMode: initialMode }) }));
14
+ return ((0, jsx_runtime_1.jsx)(ModalContainer_1.ModalContainer, { onOutsideClick: onQuit, onEscape: onQuit, children: (0, jsx_runtime_1.jsx)(QuickSwitcherContent_1.QuickSwitcherContent, { readOnlyStudio: readOnlyStudio, invocationTimestamp: invocationTimestamp, initialMode: initialMode }) }));
15
15
  };
16
16
  exports.default = QuickSwitcher;
@@ -3,4 +3,5 @@ import type { QuickSwitcherMode } from './NoResults';
3
3
  export declare const QuickSwitcherContent: React.FC<{
4
4
  initialMode: QuickSwitcherMode;
5
5
  invocationTimestamp: number;
6
+ readOnlyStudio: boolean;
6
7
  }>;
@@ -88,7 +88,7 @@ const mapModeToQuery = (mode) => {
88
88
  }
89
89
  throw new Error('no mode' + mode);
90
90
  };
91
- const QuickSwitcherContent = ({ initialMode, invocationTimestamp }) => {
91
+ const QuickSwitcherContent = ({ initialMode, invocationTimestamp, readOnlyStudio }) => {
92
92
  const { compositions } = (0, react_1.useContext)(remotion_1.Internals.CompositionManager);
93
93
  const [state, setState] = (0, react_1.useState)(() => {
94
94
  return {
@@ -105,7 +105,7 @@ const QuickSwitcherContent = ({ initialMode, invocationTimestamp }) => {
105
105
  const inputRef = (0, react_1.useRef)(null);
106
106
  const selectComposition = (0, InitialCompositionLoader_1.useSelectComposition)();
107
107
  const closeMenu = (0, react_1.useCallback)(() => undefined, []);
108
- const actions = (0, use_menu_structure_1.useMenuStructure)(closeMenu);
108
+ const actions = (0, use_menu_structure_1.useMenuStructure)(closeMenu, readOnlyStudio);
109
109
  const [docResults, setDocResults] = (0, react_1.useState)({ type: 'initial' });
110
110
  const { setSelectedModal } = (0, react_1.useContext)(modals_1.ModalsContext);
111
111
  const keybindings = (0, use_keybinding_1.useKeybinding)();
@@ -4,12 +4,12 @@ exports.RenderButton = void 0;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const react_1 = require("react");
6
6
  const remotion_1 = require("remotion");
7
- const Button_1 = require("../error-overlay/remotion-overlay/Button");
8
7
  const client_id_1 = require("../helpers/client-id");
9
8
  const use_keybinding_1 = require("../helpers/use-keybinding");
10
9
  const render_1 = require("../icons/render");
11
10
  const in_out_1 = require("../state/in-out");
12
11
  const modals_1 = require("../state/modals");
12
+ const Button_1 = require("./Button");
13
13
  const layout_1 = require("./layout");
14
14
  const button = {
15
15
  paddingLeft: 7,
@@ -19,4 +19,5 @@ export declare const DataEditor: React.FC<{
19
19
  propsEditType: PropsEditType;
20
20
  saving: boolean;
21
21
  setSaving: React.Dispatch<React.SetStateAction<boolean>>;
22
+ readOnlyStudio: boolean;
22
23
  }>;
@@ -87,7 +87,7 @@ const getPersistedShowWarningState = () => {
87
87
  const setPersistedShowWarningState = (val) => {
88
88
  localStorage.setItem(persistanceKey, String(Boolean(val)));
89
89
  };
90
- const DataEditor = ({ unresolvedComposition, inputProps, setInputProps, mayShowSaveButton, propsEditType, saving, setSaving, }) => {
90
+ const DataEditor = ({ unresolvedComposition, inputProps, setInputProps, mayShowSaveButton, propsEditType, saving, setSaving, readOnlyStudio, }) => {
91
91
  const [mode, setMode] = (0, react_1.useState)('schema');
92
92
  const [showWarning, setShowWarningWithoutPersistance] = (0, react_1.useState)(() => getPersistedShowWarningState());
93
93
  const inJSONEditor = mode === 'json';
@@ -147,7 +147,7 @@ const DataEditor = ({ unresolvedComposition, inputProps, setInputProps, mayShowS
147
147
  const { fastRefreshes } = (0, react_1.useContext)(remotion_1.Internals.NonceContext);
148
148
  const checkIfCanSaveDefaultProps = (0, react_1.useCallback)(async () => {
149
149
  try {
150
- const can = await (0, actions_1.canUpdateDefaultProps)(unresolvedComposition.id);
150
+ const can = await (0, actions_1.canUpdateDefaultProps)(unresolvedComposition.id, readOnlyStudio);
151
151
  if (can.canUpdate) {
152
152
  setCanSaveDefaultProps((prevState) => ({
153
153
  ...prevState,
@@ -177,7 +177,7 @@ const DataEditor = ({ unresolvedComposition, inputProps, setInputProps, mayShowS
177
177
  },
178
178
  }));
179
179
  }
180
- }, [unresolvedComposition.id]);
180
+ }, [readOnlyStudio, unresolvedComposition.id]);
181
181
  (0, react_1.useEffect)(() => {
182
182
  checkIfCanSaveDefaultProps();
183
183
  }, [checkIfCanSaveDefaultProps]);
@@ -1,5 +1,5 @@
1
+ import type { RenderJob } from '@remotion/studio-shared';
1
2
  import React from 'react';
2
- import type { RenderJob } from '../../preview-server/job';
3
3
  export declare const GuiRenderStatus: React.FC<{
4
4
  job: RenderJob;
5
5
  }>;
@@ -3,8 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.OptionExplainer = void 0;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const colors_1 = require("../../helpers/colors");
6
- const MenuDivider_1 = require("../Menu/MenuDivider");
7
6
  const layout_1 = require("../layout");
7
+ const MenuDivider_1 = require("../Menu/MenuDivider");
8
8
  const CliCopyButton_1 = require("./CliCopyButton");
9
9
  const container = {
10
10
  fontSize: 14,