remotion 4.0.0-oops.3 → 4.0.0-prefetch.7

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 (189) hide show
  1. package/.turbo/turbo-build.log +5 -5
  2. package/README.md +30 -19
  3. package/dist/AbsoluteFill.d.ts +6 -2
  4. package/dist/AbsoluteFill.js +7 -3
  5. package/dist/CanUseRemotionHooks.d.ts +5 -0
  6. package/dist/CanUseRemotionHooks.js +10 -0
  7. package/dist/Composition.d.ts +3 -6
  8. package/dist/Composition.js +40 -28
  9. package/dist/CompositionManager.d.ts +7 -12
  10. package/dist/CompositionManager.js +15 -5
  11. package/dist/Folder.d.ts +15 -0
  12. package/dist/Folder.js +33 -0
  13. package/dist/IFrame.js +1 -1
  14. package/dist/Img.js +33 -16
  15. package/dist/RemotionRoot.js +1 -1
  16. package/dist/{sequencing/index.d.ts → Sequence.d.ts} +13 -3
  17. package/dist/{sequencing/index.js → Sequence.js} +40 -34
  18. package/dist/Still.d.ts +1 -1
  19. package/dist/Still.js +1 -1
  20. package/dist/asset-types.d.ts +1 -4
  21. package/dist/audio/Audio.d.ts +2 -2
  22. package/dist/audio/Audio.js +5 -5
  23. package/dist/audio/AudioForDevelopment.d.ts +3 -2
  24. package/dist/audio/AudioForDevelopment.js +19 -6
  25. package/dist/audio/AudioForRendering.d.ts +5 -2
  26. package/dist/audio/AudioForRendering.js +15 -8
  27. package/dist/audio/index.js +5 -1
  28. package/dist/audio/props.d.ts +1 -1
  29. package/dist/audio/shared-audio-tags.d.ts +4 -3
  30. package/dist/audio/shared-audio-tags.js +115 -42
  31. package/dist/audio/use-audio-frame.js +4 -4
  32. package/dist/config/bundle-out-dir.d.ts +2 -0
  33. package/dist/config/bundle-out-dir.js +12 -0
  34. package/dist/config/input-props.js +12 -14
  35. package/dist/config/public-path.d.ts +2 -0
  36. package/dist/config/public-path.js +12 -0
  37. package/dist/{config/index.d.ts → config.d.ts} +70 -22
  38. package/dist/config.js +21 -0
  39. package/dist/default-css.d.ts +1 -0
  40. package/dist/default-css.js +9 -2
  41. package/dist/delay-render.d.ts +1 -1
  42. package/dist/delay-render.js +4 -4
  43. package/dist/freeze.d.ts +2 -2
  44. package/dist/freeze.js +2 -2
  45. package/dist/get-timeline-clip-name.js +2 -1
  46. package/dist/index.d.ts +23 -8
  47. package/dist/index.js +18 -8
  48. package/dist/internals.d.ts +35 -101
  49. package/dist/internals.js +18 -94
  50. package/dist/{interpolateColors.d.ts → interpolate-colors.d.ts} +0 -0
  51. package/dist/{interpolateColors.js → interpolate-colors.js} +0 -0
  52. package/dist/loading-indicator.d.ts +2 -0
  53. package/dist/loading-indicator.js +35 -0
  54. package/dist/loop/index.js +5 -4
  55. package/dist/multiple-versions-warning.js +18 -4
  56. package/dist/play-and-handle-not-allowed-error.d.ts +1 -1
  57. package/dist/portal-node.d.ts +1 -0
  58. package/dist/portal-node.js +23 -0
  59. package/dist/preload.d.ts +7 -0
  60. package/dist/preload.js +83 -0
  61. package/dist/register-root.d.ts +2 -1
  62. package/dist/register-root.js +20 -5
  63. package/dist/series/index.d.ts +2 -2
  64. package/dist/series/index.js +4 -4
  65. package/dist/spring/index.d.ts +8 -4
  66. package/dist/spring/index.js +21 -6
  67. package/dist/spring/measure-spring.d.ts +1 -1
  68. package/dist/spring/measure-spring.js +1 -1
  69. package/dist/static-file.js +6 -0
  70. package/dist/timeline-position-state.d.ts +1 -1
  71. package/dist/{use-frame.d.ts → use-current-frame.d.ts} +0 -1
  72. package/dist/use-current-frame.js +28 -0
  73. package/dist/use-lazy-component.d.ts +3 -3
  74. package/dist/use-lazy-component.js +5 -1
  75. package/dist/use-media-in-timeline.d.ts +2 -2
  76. package/dist/use-media-in-timeline.js +10 -7
  77. package/dist/use-media-playback.d.ts +3 -2
  78. package/dist/use-media-playback.js +9 -6
  79. package/dist/use-media-tag-volume.d.ts +1 -1
  80. package/dist/use-sync-volume-with-media-tag.d.ts +2 -2
  81. package/dist/use-unsafe-video-config.d.ts +1 -1
  82. package/dist/use-unsafe-video-config.js +2 -2
  83. package/dist/use-video-config.d.ts +1 -1
  84. package/dist/use-video-config.js +6 -0
  85. package/dist/use-video.d.ts +13 -1
  86. package/dist/use-video.js +16 -3
  87. package/dist/validate-media-props.d.ts +4 -3
  88. package/dist/validation/validate-fps.d.ts +1 -1
  89. package/dist/validation/validate-fps.js +4 -1
  90. package/dist/validation/validate-offthreadvideo-image-format.d.ts +1 -0
  91. package/dist/validation/validate-offthreadvideo-image-format.js +15 -0
  92. package/dist/validation/validation-spring-duration.d.ts +1 -0
  93. package/dist/validation/validation-spring-duration.js +21 -0
  94. package/dist/version.d.ts +1 -0
  95. package/dist/version.js +5 -0
  96. package/dist/video/OffthreadVideo.d.ts +3 -0
  97. package/dist/video/OffthreadVideo.js +27 -0
  98. package/dist/video/OffthreadVideoForRendering.d.ts +3 -0
  99. package/dist/video/OffthreadVideoForRendering.js +101 -0
  100. package/dist/video/Video.d.ts +3 -3
  101. package/dist/video/Video.js +4 -4
  102. package/dist/video/VideoForDevelopment.d.ts +7 -2
  103. package/dist/video/VideoForDevelopment.js +28 -4
  104. package/dist/video/VideoForRendering.d.ts +5 -2
  105. package/dist/video/VideoForRendering.js +62 -40
  106. package/dist/video/get-current-time.d.ts +7 -1
  107. package/dist/video/get-current-time.js +17 -9
  108. package/dist/video/index.d.ts +3 -2
  109. package/dist/video/index.js +5 -12
  110. package/dist/video/props.d.ts +13 -2
  111. package/dist/volume-prop.js +1 -1
  112. package/dist/warn-about-non-seekable-media.d.ts +1 -1
  113. package/dist/warn-about-non-seekable-media.js +14 -2
  114. package/dist/wrap-remotion-context.d.ts +2 -1
  115. package/dist/wrap-remotion-context.js +12 -4
  116. package/ensure-correct-version.js +24 -0
  117. package/package.json +10 -11
  118. package/version.d.ts +1 -0
  119. package/version.js +1 -0
  120. package/dist/compress-assets.d.ts +0 -7
  121. package/dist/compress-assets.js +0 -25
  122. package/dist/config/browser-executable.d.ts +0 -3
  123. package/dist/config/browser-executable.js +0 -12
  124. package/dist/config/browser.d.ts +0 -4
  125. package/dist/config/browser.js +0 -19
  126. package/dist/config/chromium-flags.d.ts +0 -10
  127. package/dist/config/chromium-flags.js +0 -34
  128. package/dist/config/codec.d.ts +0 -17
  129. package/dist/config/codec.js +0 -103
  130. package/dist/config/concurrency.d.ts +0 -3
  131. package/dist/config/concurrency.js +0 -15
  132. package/dist/config/crf.d.ts +0 -9
  133. package/dist/config/crf.js +0 -83
  134. package/dist/config/env-file.d.ts +0 -2
  135. package/dist/config/env-file.js +0 -10
  136. package/dist/config/ffmpeg-executable.d.ts +0 -3
  137. package/dist/config/ffmpeg-executable.js +0 -12
  138. package/dist/config/frame-range.d.ts +0 -5
  139. package/dist/config/frame-range.js +0 -80
  140. package/dist/config/image-format.d.ts +0 -8
  141. package/dist/config/image-format.js +0 -37
  142. package/dist/config/image-sequence.d.ts +0 -3
  143. package/dist/config/image-sequence.js +0 -15
  144. package/dist/config/index.js +0 -175
  145. package/dist/config/log.d.ts +0 -7
  146. package/dist/config/log.js +0 -25
  147. package/dist/config/max-timeline-tracks.d.ts +0 -2
  148. package/dist/config/max-timeline-tracks.js +0 -24
  149. package/dist/config/override-webpack.d.ts +0 -12
  150. package/dist/config/override-webpack.js +0 -14
  151. package/dist/config/overwrite.d.ts +0 -3
  152. package/dist/config/overwrite.js +0 -14
  153. package/dist/config/pixel-format.d.ts +0 -8
  154. package/dist/config/pixel-format.js +0 -38
  155. package/dist/config/preview-server.d.ts +0 -2
  156. package/dist/config/preview-server.js +0 -20
  157. package/dist/config/prores-profile.d.ts +0 -7
  158. package/dist/config/prores-profile.js +0 -32
  159. package/dist/config/quality.d.ts +0 -2
  160. package/dist/config/quality.js +0 -17
  161. package/dist/config/scale.d.ts +0 -3
  162. package/dist/config/scale.js +0 -15
  163. package/dist/config/still-frame.d.ts +0 -2
  164. package/dist/config/still-frame.js +0 -12
  165. package/dist/config/timeout.d.ts +0 -2
  166. package/dist/config/timeout.js +0 -17
  167. package/dist/config/webpack-caching.d.ts +0 -3
  168. package/dist/config/webpack-caching.js +0 -16
  169. package/dist/feature-flags.d.ts +0 -1
  170. package/dist/feature-flags.js +0 -7
  171. package/dist/initial-frame.d.ts +0 -2
  172. package/dist/initial-frame.js +0 -12
  173. package/dist/is-audio-codec.d.ts +0 -2
  174. package/dist/is-audio-codec.js +0 -7
  175. package/dist/perf/index.d.ts +0 -5
  176. package/dist/perf/index.js +0 -33
  177. package/dist/timeline-inout-position-state.d.ts +0 -12
  178. package/dist/timeline-inout-position-state.js +0 -23
  179. package/dist/timeout.d.ts +0 -2
  180. package/dist/timeout.js +0 -12
  181. package/dist/use-frame.js +0 -25
  182. package/dist/validation/validate-frame.d.ts +0 -1
  183. package/dist/validation/validate-frame.js +0 -24
  184. package/dist/validation/validate-image-format.d.ts +0 -2
  185. package/dist/validation/validate-image-format.js +0 -9
  186. package/dist/validation/validate-opengl-renderer.d.ts +0 -4
  187. package/dist/validation/validate-opengl-renderer.js +0 -14
  188. package/dist/validation/validate-quality.d.ts +0 -1
  189. package/dist/validation/validate-quality.js +0 -21
@@ -1,5 +1,5 @@
1
- remotion:build: cache hit, replaying output 631f1a83aedea9d9
2
- remotion:build: 
3
- remotion:build: > remotion@3.0.7 build /Users/jonathanburger/remotion/packages/core
4
- remotion:build: > tsc -d
5
- remotion:build: 
1
+ remotion:build: cache hit, replaying output f61b1baa8746d331
2
+ remotion:build: 
3
+ remotion:build: > remotion@3.2.16 build /Users/jonathanburger/remotion/packages/core
4
+ remotion:build: > tsc -d
5
+ remotion:build: 
package/README.md CHANGED
@@ -1,15 +1,19 @@
1
1
  <p align="center">
2
2
  <a href="https://github.com/remotion-dev/logo">
3
- <img src="https://github.com/remotion-dev/logo/raw/main/withtitle/element-0.png">
3
+ <picture>
4
+ <source media="(prefers-color-scheme: dark)" srcset="https://github.com/remotion-dev/logo/raw/main/animated-logo-banner-dark.gif">
5
+ <img alt="Animated Remotion Logo" src="https://github.com/remotion-dev/logo/raw/main/animated-logo-banner-light.gif">
6
+ </picture>
4
7
  </a>
5
8
  </p>
6
9
 
7
- [![Discord Shield](https://discordapp.com/api/guilds/809501355504959528/widget.png?style=shield)](https://discord.gg/6VzzNDwUwV)
8
- [![NPM Version](http://img.shields.io/npm/v/remotion.svg?style=flat)](https://www.npmjs.org/package/remotion)
10
+ [![Discord Shield](https://discordapp.com/api/guilds/809501355504959528/widget.png?style=shield)](https://remotion.dev/discord)
11
+ [![NPM Version](https://img.shields.io/npm/v/remotion.svg?style=flat)](https://www.npmjs.org/package/remotion)
9
12
  [![NPM Downloads](https://img.shields.io/npm/dm/remotion.svg?style=flat)](https://npmcharts.com/compare/remotion?minimal=true)
10
13
  [![Install Size](https://packagephobia.now.sh/badge?p=remotion)](https://packagephobia.now.sh/result?p=remotion)
14
+ <a href="https://twitter.com/remotion_dev"><img src="https://img.shields.io/twitter/follow/remotion_dev?label=Twitter&style=social" alt="Twitter"></a>
11
15
 
12
- Remotion is a suite of libraries building a foundation for **creating videos programmatically using React.**
16
+ Remotion is a framework for **creating videos programmatically using React.**
13
17
 
14
18
  ## Why create videos in React?
15
19
 
@@ -17,35 +21,42 @@ Remotion is a suite of libraries building a foundation for **creating videos pro
17
21
  - **Leverage programming**: Use variables, functions, APIs, math and algorithms to create new effects
18
22
  - **Leverage React**: Reusable components, Powerful composition, Fast Refresh, Package ecosystem
19
23
 
20
- ## Example videos
21
-
22
- - **Remotion Trailer** [Watch](https://www.youtube.com/watch?v=gwlDorikqgY) • [Source code](https://github.com/remotion-dev/trailer) • The announcement video for Remotion was written in Remotion itself!
23
- - **AnySticker Welcome Video** [Watch](https://www.youtube.com/watch?v=Y0SNPeTz09w) • [Source code](https://github.com/JonnyBurger/anysticker-tutorials) • An in-app explainer video for my app AnySticker.
24
- - **Spotify Wrapped Recreated** [Watch](https://twitter.com/JNYBGR/status/1360269270526136320) • [Tutorial](https://www.youtube.com/watch?v=I-y_5H9-3gk) • [Source code](https://github.com/JonnyBurger/remotion-wrapped) • A recreation of Spotify Wrapped where you can override all text and images via command line.
25
- - **"Game changer or no game changer" intro** [Watch](https://youtu.be/ga_xAZo9m7k?t=61) • [Source code](https://github.com/JonnyBurger/gamechanger-or-no-gamechanger-intro) • An intro for a quiz show I did with William Candillon.
26
- - **"The X in MDX" talk** [Watch](https://twitter.com/pomber/status/1359556846688886789)[Source code](https://github.com/pomber/record-talk-with-remotion) • A re-recording of [this talk](https://www.youtube.com/watch?v=xEu3t-KJVVg) using Remotion.
27
- - **Redesigning the Scatterplot** [Watch](https://twitter.com/BrooksLybrand/status/1371547875109445635) • [Source code](https://github.com/brookslybrand/redesigning-scatterplots) • An animated section of Edward R. Tufte's book [The Visual Display of Quantitative Information](https://www.amazon.com/Visual-Display-Quantitative-Information/dp/0961392142/ref=sr_1_1?crid=3HQZSBUUROV09&dchild=1&keywords=the+visual+display+of+quantitative+information&qid=1615907320&sprefix=the+visual+disp%2Caps%2C190&sr=8-1).
28
- - **News Podcast Maker** [Watch](https://www.youtube.com/watch?v=Mwo5iNlWryg) • [Source code](https://github.com/FelippeChemello/podcast-maker/) • A fully automated News Podcast Maker.
29
-
30
- Feel free to pull request your creations!
24
+ ## Created with Remotion
25
+
26
+ <table>
27
+ <tr>
28
+ <td align="center">
29
+ <img style="width: 290px" src="packages/docs/static/img/fireship-quick.gif" />
30
+ <p>"This video was made with code" <em>- Fireship</em> <a href="https://youtu.be/deg8bOoziaE">Watch</a><a href="https://github.com/wcandillon/remotion-fireship">Source</a></p>
31
+ </td>
32
+ <td align="center">
33
+ <img style="width: 240px" src="packages/docs/static/img/github-unwrapped.gif" />
34
+ <p>GitHub Unwrapped - Personalized year in Review <a href="https://githubunwrapped.com">Try</a> • <a href="https://github.com/remotion-dev/github-unwrapped">Source</a></p>
35
+ </td>
36
+ <td align="center">
37
+ <em>View more in the <a href="https://remotion.dev/showcase">Remotion Showcase</a>!</em>
38
+ </td>
39
+ </tr>
40
+ </table>
31
41
 
32
42
  ## Get started
33
43
 
34
- If you already have Yarn and FFMPEG installed, type
44
+ If you already have Node.JS installed, type
35
45
 
36
46
  ```console
37
- yarn create video
47
+ npm init video
38
48
  ```
39
49
 
40
50
  to get started. Otherwise, read the [installation page](https://www.remotion.dev/docs/) in the documentation.
41
51
 
42
52
  ## Documentation
43
53
 
44
- Head to [**remotion.dev**](https://www.remotion.dev) to learn the in and outs of Remotion!
54
+ Documentation: [**remotion.dev/docs**](https://www.remotion.dev/docs)
55
+ API Reference: [**remotion.dev/api**](https://www.remotion.dev/api)
45
56
 
46
57
  ## License
47
58
 
48
- Be aware of that Remotion has a special license and requires obtaining a company license in some cases. Read the [LICENSE](LICENSE.md) documentation for more information.
59
+ Be aware of that Remotion has a special license and requires obtaining a company license in some cases. Read the [LICENSE](LICENSE.md) page for more information.
49
60
 
50
61
  ## Contributing
51
62
 
@@ -1,2 +1,6 @@
1
- import React, { HTMLAttributes } from 'react';
2
- export declare const AbsoluteFill: React.FC<HTMLAttributes<HTMLDivElement>>;
1
+ import React from 'react';
2
+ /**
3
+ * An absolutely positioned <div> element with 100% width, height, and a column flex style
4
+ * @link https://www.remotion.dev/docs/absolute-fill
5
+ */
6
+ export declare const AbsoluteFill: React.ForwardRefExoticComponent<Pick<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "key" | keyof React.HTMLAttributes<HTMLDivElement>> & React.RefAttributes<HTMLDivElement>>;
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.AbsoluteFill = void 0;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const react_1 = require("react");
6
- const AbsoluteFill = (props) => {
6
+ const AbsoluteFillRefForwarding = (props, ref) => {
7
7
  const { style, ...other } = props;
8
8
  const actualStyle = (0, react_1.useMemo)(() => {
9
9
  return {
@@ -19,6 +19,10 @@ const AbsoluteFill = (props) => {
19
19
  ...style,
20
20
  };
21
21
  }, [style]);
22
- return (0, jsx_runtime_1.jsx)("div", { style: actualStyle, ...other }, void 0);
22
+ return (0, jsx_runtime_1.jsx)("div", { ref: ref, style: actualStyle, ...other });
23
23
  };
24
- exports.AbsoluteFill = AbsoluteFill;
24
+ /**
25
+ * An absolutely positioned <div> element with 100% width, height, and a column flex style
26
+ * @link https://www.remotion.dev/docs/absolute-fill
27
+ */
28
+ exports.AbsoluteFill = (0, react_1.forwardRef)(AbsoluteFillRefForwarding);
@@ -0,0 +1,5 @@
1
+ import React from 'react';
2
+ export declare const CanUseRemotionHooks: React.Context<boolean>;
3
+ export declare const CanUseRemotionHooksProvider: React.FC<{
4
+ children: React.ReactNode;
5
+ }>;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CanUseRemotionHooksProvider = exports.CanUseRemotionHooks = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_1 = require("react");
6
+ exports.CanUseRemotionHooks = (0, react_1.createContext)(false);
7
+ const CanUseRemotionHooksProvider = ({ children }) => {
8
+ return ((0, jsx_runtime_1.jsx)(exports.CanUseRemotionHooks.Provider, { value: true, children: children }));
9
+ };
10
+ exports.CanUseRemotionHooksProvider = CanUseRemotionHooksProvider;
@@ -1,8 +1,5 @@
1
- import React, { ComponentType, FC } from 'react';
2
- export declare const Folder: FC<{
3
- name: string;
4
- children: React.ReactNode;
5
- }>;
1
+ import type { ComponentType } from 'react';
2
+ import React from 'react';
6
3
  declare type LooseComponentType<T> = ComponentType<T> | ((props: T) => React.ReactNode);
7
4
  export declare type CompProps<T> = {
8
5
  lazyComponent: () => Promise<{
@@ -21,5 +18,5 @@ declare type CompositionProps<T> = StillProps<T> & {
21
18
  fps: number;
22
19
  durationInFrames: number;
23
20
  };
24
- export declare const Composition: <T>({ width, height, fps, durationInFrames, id, defaultProps, ...compProps }: CompositionProps<T>) => null;
21
+ export declare const Composition: <T>({ width, height, fps, durationInFrames, id, defaultProps, ...compProps }: CompositionProps<T>) => React.ReactPortal | null;
25
22
  export {};
@@ -1,47 +1,45 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Composition = exports.Folder = void 0;
3
+ exports.Composition = void 0;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const react_1 = require("react");
6
+ const react_dom_1 = require("react-dom");
7
+ const CanUseRemotionHooks_1 = require("./CanUseRemotionHooks");
6
8
  const CompositionManager_1 = require("./CompositionManager");
9
+ const input_props_1 = require("./config/input-props");
10
+ const delay_render_1 = require("./delay-render");
11
+ const Folder_1 = require("./Folder");
12
+ const get_environment_1 = require("./get-environment");
13
+ const internals_1 = require("./internals");
14
+ const loading_indicator_1 = require("./loading-indicator");
7
15
  const nonce_1 = require("./nonce");
8
- const truthy_1 = require("./truthy");
16
+ const portal_node_1 = require("./portal-node");
9
17
  const use_lazy_component_1 = require("./use-lazy-component");
18
+ const use_video_1 = require("./use-video");
10
19
  const validate_composition_id_1 = require("./validation/validate-composition-id");
11
20
  const validate_dimensions_1 = require("./validation/validate-dimensions");
12
21
  const validate_duration_in_frames_1 = require("./validation/validate-duration-in-frames");
13
- const validate_folder_name_1 = require("./validation/validate-folder-name");
14
22
  const validate_fps_1 = require("./validation/validate-fps");
15
- const FolderContext = (0, react_1.createContext)({
16
- folderName: null,
17
- parentName: null,
18
- });
19
- const Folder = ({ name, children, }) => {
20
- const parent = (0, react_1.useContext)(FolderContext);
21
- const { registerFolder, unregisterFolder } = (0, react_1.useContext)(CompositionManager_1.CompositionManager);
22
- (0, validate_folder_name_1.validateFolderName)(name);
23
- const parentNameArr = [parent.parentName, parent.folderName].filter(truthy_1.truthy);
24
- const parentName = parentNameArr.length === 0 ? null : parentNameArr.join('/');
25
- const value = (0, react_1.useMemo)(() => {
26
- return {
27
- folderName: name,
28
- parentName,
29
- };
30
- }, [name, parentName]);
23
+ const Fallback = () => {
31
24
  (0, react_1.useEffect)(() => {
32
- registerFolder(name, parentName);
33
- return () => {
34
- unregisterFolder(name, parentName);
35
- };
36
- }, [name, parent.folderName, parentName, registerFolder, unregisterFolder]);
37
- return ((0, jsx_runtime_1.jsx)(FolderContext.Provider, { value: value, children: children }, void 0));
25
+ const fallback = (0, delay_render_1.delayRender)('Waiting for Root component to unsuspend');
26
+ return () => (0, delay_render_1.continueRender)(fallback);
27
+ }, []);
28
+ return null;
38
29
  };
39
- exports.Folder = Folder;
40
30
  const Composition = ({ width, height, fps, durationInFrames, id, defaultProps, ...compProps }) => {
41
31
  const { registerComposition, unregisterComposition } = (0, react_1.useContext)(CompositionManager_1.CompositionManager);
32
+ const video = (0, use_video_1.useVideo)();
42
33
  const lazy = (0, use_lazy_component_1.useLazyComponent)(compProps);
43
34
  const nonce = (0, nonce_1.useNonce)();
44
- const { folderName, parentName } = (0, react_1.useContext)(FolderContext);
35
+ const canUseComposition = (0, react_1.useContext)(internals_1.Internals.CanUseRemotionHooks);
36
+ if (canUseComposition) {
37
+ if (typeof window !== 'undefined' && window.remotion_isPlayer) {
38
+ throw new Error('<Composition> was mounted inside the `component` that was passed to the <Player>. See https://remotion.dev/docs/wrong-composition-mount for help.');
39
+ }
40
+ throw new Error('<Composition> mounted inside another composition. See https://remotion.dev/docs/wrong-composition-mount for help.');
41
+ }
42
+ const { folderName, parentName } = (0, react_1.useContext)(Folder_1.FolderContext);
45
43
  (0, react_1.useEffect)(() => {
46
44
  // Ensure it's a URL safe id
47
45
  if (!id) {
@@ -51,7 +49,7 @@ const Composition = ({ width, height, fps, durationInFrames, id, defaultProps, .
51
49
  (0, validate_dimensions_1.validateDimension)(width, 'width', 'of the <Composition/> component');
52
50
  (0, validate_dimensions_1.validateDimension)(height, 'height', 'of the <Composition/> component');
53
51
  (0, validate_duration_in_frames_1.validateDurationInFrames)(durationInFrames, 'of the <Composition/> component');
54
- (0, validate_fps_1.validateFps)(fps, 'as a prop of the <Composition/> component');
52
+ (0, validate_fps_1.validateFps)(fps, 'as a prop of the <Composition/> component', false);
55
53
  registerComposition({
56
54
  durationInFrames,
57
55
  fps,
@@ -81,6 +79,20 @@ const Composition = ({ width, height, fps, durationInFrames, id, defaultProps, .
81
79
  nonce,
82
80
  parentName,
83
81
  ]);
82
+ if ((0, get_environment_1.getRemotionEnvironment)() === 'preview' &&
83
+ video &&
84
+ video.component === lazy) {
85
+ const Comp = lazy;
86
+ const inputProps = (0, input_props_1.getInputProps)();
87
+ return (0, react_dom_1.createPortal)((0, jsx_runtime_1.jsx)(CanUseRemotionHooks_1.CanUseRemotionHooksProvider, { children: (0, jsx_runtime_1.jsx)(react_1.Suspense, { fallback: (0, jsx_runtime_1.jsx)(loading_indicator_1.Loading, {}), children: (0, jsx_runtime_1.jsx)(Comp, { ...defaultProps, ...inputProps }) }) }), (0, portal_node_1.portalNode)());
88
+ }
89
+ if ((0, get_environment_1.getRemotionEnvironment)() === 'rendering' &&
90
+ video &&
91
+ video.component === lazy) {
92
+ const Comp = lazy;
93
+ const inputProps = (0, input_props_1.getInputProps)();
94
+ return (0, react_dom_1.createPortal)((0, jsx_runtime_1.jsx)(CanUseRemotionHooks_1.CanUseRemotionHooksProvider, { children: (0, jsx_runtime_1.jsx)(react_1.Suspense, { fallback: (0, jsx_runtime_1.jsx)(Fallback, {}), children: (0, jsx_runtime_1.jsx)(Comp, { ...defaultProps, ...inputProps }) }) }), (0, portal_node_1.portalNode)());
95
+ }
84
96
  return null;
85
97
  };
86
98
  exports.Composition = Composition;
@@ -1,4 +1,6 @@
1
- import React, { ComponentType, LazyExoticComponent } from 'react';
1
+ import type { ComponentType, LazyExoticComponent } from 'react';
2
+ import React from 'react';
3
+ import type { TFolder } from './Folder';
2
4
  export declare type TComposition<T = unknown> = {
3
5
  width: number;
4
6
  height: number;
@@ -12,7 +14,7 @@ export declare type TComposition<T = unknown> = {
12
14
  nonce: number;
13
15
  };
14
16
  export declare type TCompMetadata = Pick<TComposition, 'id' | 'height' | 'width' | 'fps' | 'durationInFrames' | 'defaultProps'>;
15
- export declare type SmallTCompMetadata = Pick<TComposition, 'id' | 'height' | 'width' | 'fps' | 'durationInFrames'>;
17
+ export declare type SmallTCompMetadata = Pick<TComposition, 'id' | 'height' | 'width' | 'fps' | 'durationInFrames'> & Partial<Pick<TComposition, 'defaultProps'>>;
16
18
  declare type EnhancedTSequenceData = {
17
19
  type: 'sequence';
18
20
  } | {
@@ -48,12 +50,7 @@ export declare type TAsset = {
48
50
  mediaFrame: number;
49
51
  playbackRate: number;
50
52
  };
51
- export declare type RenderAssetInfo = {
52
- assets: TAsset[][];
53
- imageSequenceName: string;
54
- firstFrameIndex: number;
55
- downloadDir: string;
56
- };
53
+ declare type BaseMetadata = Pick<TCompMetadata, 'durationInFrames' | 'fps' | 'defaultProps' | 'height' | 'width'>;
57
54
  export declare type CompositionManagerContext = {
58
55
  compositions: TComposition[];
59
56
  registerComposition: <T>(comp: TComposition<T>) => void;
@@ -62,6 +59,8 @@ export declare type CompositionManagerContext = {
62
59
  unregisterFolder: (name: string, parent: string | null) => void;
63
60
  currentComposition: string | null;
64
61
  setCurrentComposition: (curr: string) => void;
62
+ setCurrentCompositionMetadata: (metadata: BaseMetadata) => void;
63
+ currentCompositionMetadata: BaseMetadata | null;
65
64
  registerSequence: (seq: TSequence) => void;
66
65
  unregisterSequence: (id: string) => void;
67
66
  registerAsset: (asset: TAsset) => void;
@@ -74,10 +73,6 @@ export declare const CompositionManager: React.Context<CompositionManagerContext
74
73
  export declare const compositionsRef: React.RefObject<{
75
74
  getCompositions: () => TCompMetadata[];
76
75
  }>;
77
- export declare type TFolder = {
78
- name: string;
79
- parent: string | null;
80
- };
81
76
  export declare const CompositionManagerProvider: React.FC<{
82
77
  children: React.ReactNode;
83
78
  }>;
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -30,6 +34,7 @@ exports.CompositionManager = (0, react_1.createContext)({
30
34
  unregisterFolder: () => undefined,
31
35
  currentComposition: null,
32
36
  setCurrentComposition: () => undefined,
37
+ setCurrentCompositionMetadata: () => undefined,
33
38
  registerSequence: () => undefined,
34
39
  unregisterSequence: () => undefined,
35
40
  registerAsset: () => undefined,
@@ -37,6 +42,7 @@ exports.CompositionManager = (0, react_1.createContext)({
37
42
  sequences: [],
38
43
  assets: [],
39
44
  folders: [],
45
+ currentCompositionMetadata: null,
40
46
  });
41
47
  exports.compositionsRef = react_1.default.createRef();
42
48
  const CompositionManagerProvider = ({ children }) => {
@@ -47,6 +53,7 @@ const CompositionManagerProvider = ({ children }) => {
47
53
  const [assets, setAssets] = (0, react_1.useState)([]);
48
54
  const [folders, setFolders] = (0, react_1.useState)([]);
49
55
  const [sequences, setSequences] = (0, react_1.useState)([]);
56
+ const [currentCompositionMetadata, setCurrentCompositionMetadata] = (0, react_1.useState)(null);
50
57
  const registerComposition = (0, react_1.useCallback)((comp) => {
51
58
  setCompositions((comps) => {
52
59
  if (comps.find((c) => c.id === comp.id)) {
@@ -123,22 +130,25 @@ const CompositionManagerProvider = ({ children }) => {
123
130
  folders,
124
131
  registerFolder,
125
132
  unregisterFolder,
133
+ currentCompositionMetadata,
134
+ setCurrentCompositionMetadata,
126
135
  };
127
136
  }, [
128
137
  compositions,
129
- currentComposition,
130
138
  registerComposition,
131
- registerSequence,
132
139
  unregisterComposition,
140
+ currentComposition,
141
+ registerSequence,
133
142
  unregisterSequence,
134
143
  registerAsset,
135
144
  unregisterAsset,
136
145
  sequences,
137
146
  assets,
147
+ folders,
138
148
  registerFolder,
139
149
  unregisterFolder,
140
- folders,
150
+ currentCompositionMetadata,
141
151
  ]);
142
- return ((0, jsx_runtime_1.jsx)(exports.CompositionManager.Provider, { value: contextValue, children: children }, void 0));
152
+ return ((0, jsx_runtime_1.jsx)(exports.CompositionManager.Provider, { value: contextValue, children: children }));
143
153
  };
144
154
  exports.CompositionManagerProvider = CompositionManagerProvider;
@@ -0,0 +1,15 @@
1
+ import type { FC } from 'react';
2
+ export declare type TFolder = {
3
+ name: string;
4
+ parent: string | null;
5
+ };
6
+ declare type FolderContextType = {
7
+ folderName: string | null;
8
+ parentName: string | null;
9
+ };
10
+ export declare const FolderContext: import("react").Context<FolderContextType>;
11
+ export declare const Folder: FC<{
12
+ name: string;
13
+ children: React.ReactNode;
14
+ }>;
15
+ export {};
package/dist/Folder.js ADDED
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Folder = exports.FolderContext = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_1 = require("react");
6
+ const CompositionManager_1 = require("./CompositionManager");
7
+ const truthy_1 = require("./truthy");
8
+ const validate_folder_name_1 = require("./validation/validate-folder-name");
9
+ exports.FolderContext = (0, react_1.createContext)({
10
+ folderName: null,
11
+ parentName: null,
12
+ });
13
+ const Folder = ({ name, children, }) => {
14
+ const parent = (0, react_1.useContext)(exports.FolderContext);
15
+ const { registerFolder, unregisterFolder } = (0, react_1.useContext)(CompositionManager_1.CompositionManager);
16
+ (0, validate_folder_name_1.validateFolderName)(name);
17
+ const parentNameArr = [parent.parentName, parent.folderName].filter(truthy_1.truthy);
18
+ const parentName = parentNameArr.length === 0 ? null : parentNameArr.join('/');
19
+ const value = (0, react_1.useMemo)(() => {
20
+ return {
21
+ folderName: name,
22
+ parentName,
23
+ };
24
+ }, [name, parentName]);
25
+ (0, react_1.useEffect)(() => {
26
+ registerFolder(name, parentName);
27
+ return () => {
28
+ unregisterFolder(name, parentName);
29
+ };
30
+ }, [name, parent.folderName, parentName, registerFolder, unregisterFolder]);
31
+ return ((0, jsx_runtime_1.jsx)(exports.FolderContext.Provider, { value: value, children: children }));
32
+ };
33
+ exports.Folder = Folder;
package/dist/IFrame.js CHANGED
@@ -19,6 +19,6 @@ const IFrameRefForwarding = ({ onLoad, onError, ...props }, ref) => {
19
19
  console.error('Error loading iframe:', e, 'Handle the event using the onError() prop to make this message disappear.');
20
20
  }
21
21
  }, [handle, onError]);
22
- return (0, jsx_runtime_1.jsx)("iframe", { ...props, ref: ref, onError: didGetError, onLoad: didLoad }, void 0);
22
+ return (0, jsx_runtime_1.jsx)("iframe", { ...props, ref: ref, onError: didGetError, onLoad: didLoad });
23
23
  };
24
24
  exports.IFrame = (0, react_1.forwardRef)(IFrameRefForwarding);
package/dist/Img.js CHANGED
@@ -4,27 +4,44 @@ exports.Img = void 0;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const react_1 = require("react");
6
6
  const delay_render_1 = require("./delay-render");
7
- const ImgRefForwarding = ({ onLoad, onError, ...props }, ref) => {
8
- const [handle] = (0, react_1.useState)(() => (0, delay_render_1.delayRender)('Loading <Img> with src=' + props.src));
9
- (0, react_1.useEffect)(() => {
10
- if (ref &&
11
- ref.current.complete) {
12
- (0, delay_render_1.continueRender)(handle);
13
- }
14
- }, [handle, ref]);
15
- const didLoad = (0, react_1.useCallback)((e) => {
16
- (0, delay_render_1.continueRender)(handle);
17
- onLoad === null || onLoad === void 0 ? void 0 : onLoad(e);
18
- }, [handle, onLoad]);
7
+ const preload_1 = require("./preload");
8
+ const ImgRefForwarding = ({ onError, src, ...props }, ref) => {
9
+ const imageRef = (0, react_1.useRef)(null);
10
+ (0, react_1.useImperativeHandle)(ref, () => {
11
+ return imageRef.current;
12
+ });
13
+ const actualSrc = (0, preload_1.usePreload)(src);
19
14
  const didGetError = (0, react_1.useCallback)((e) => {
20
- (0, delay_render_1.continueRender)(handle);
15
+ var _a;
21
16
  if (onError) {
22
17
  onError(e);
23
18
  }
24
19
  else {
25
- console.error('Error loading image:', e, 'Handle the event using the onError() prop to make this message disappear.');
20
+ console.error('Error loading image with src:', (_a = imageRef.current) === null || _a === void 0 ? void 0 : _a.src, e, 'Handle the event using the onError() prop to make this message disappear.');
21
+ }
22
+ }, [onError]);
23
+ // If image source switches, make new handle
24
+ (0, react_1.useLayoutEffect)(() => {
25
+ if (process.env.NODE_ENV === 'test') {
26
+ return;
27
+ }
28
+ const newHandle = (0, delay_render_1.delayRender)('Loading <Img> with src=' + src);
29
+ const { current } = imageRef;
30
+ const didLoad = () => {
31
+ (0, delay_render_1.continueRender)(newHandle);
32
+ };
33
+ if (current === null || current === void 0 ? void 0 : current.complete) {
34
+ (0, delay_render_1.continueRender)(newHandle);
35
+ }
36
+ else {
37
+ current === null || current === void 0 ? void 0 : current.addEventListener('load', didLoad, { once: true });
26
38
  }
27
- }, [handle, onError]);
28
- return (0, jsx_runtime_1.jsx)("img", { ...props, ref: ref, onLoad: didLoad, onError: didGetError }, void 0);
39
+ // If tag gets unmounted, clear pending handles because image is not going to load
40
+ return () => {
41
+ current === null || current === void 0 ? void 0 : current.removeEventListener('load', didLoad);
42
+ (0, delay_render_1.continueRender)(newHandle);
43
+ };
44
+ }, [src]);
45
+ return ((0, jsx_runtime_1.jsx)("img", { ...props, ref: imageRef, src: actualSrc, onError: didGetError }));
29
46
  };
30
47
  exports.Img = (0, react_1.forwardRef)(ImgRefForwarding);
@@ -65,6 +65,6 @@ const RemotionRoot = ({ children }) => {
65
65
  // In the preview, which is mostly played on Desktop, we opt out of the autoplay policy fix as described in https://github.com/remotion-dev/remotion/pull/554, as it mostly applies to mobile.
66
66
  , {
67
67
  // In the preview, which is mostly played on Desktop, we opt out of the autoplay policy fix as described in https://github.com/remotion-dev/remotion/pull/554, as it mostly applies to mobile.
68
- numberOfAudioTags: 0, children: children }, void 0) }, void 0) }, void 0) }, void 0) }, void 0));
68
+ numberOfAudioTags: 0, children: children }) }) }) }) }));
69
69
  };
70
70
  exports.RemotionRoot = RemotionRoot;
@@ -7,13 +7,23 @@ export declare type SequenceContextType = {
7
7
  id: string;
8
8
  };
9
9
  export declare const SequenceContext: React.Context<SequenceContextType | null>;
10
+ declare type LayoutAndStyle = {
11
+ layout: 'none';
12
+ } | {
13
+ layout?: 'absolute-fill';
14
+ style?: React.CSSProperties;
15
+ };
10
16
  export declare type SequenceProps = {
11
17
  children: React.ReactNode;
12
18
  from: number;
13
19
  durationInFrames?: number;
14
20
  name?: string;
15
- layout?: 'absolute-fill' | 'none';
16
21
  showInTimeline?: boolean;
17
22
  showLoopTimesInTimeline?: number;
18
- };
19
- export declare const Sequence: React.FC<SequenceProps>;
23
+ } & LayoutAndStyle;
24
+ /**
25
+ * A component that time-shifts its children and wraps them in an absolutely positioned <div>.
26
+ * @link https://www.remotion.dev/docs/sequence
27
+ */
28
+ export declare const Sequence: React.ForwardRefExoticComponent<SequenceProps & React.RefAttributes<HTMLDivElement>>;
29
+ export {};