remotion 4.0.211 → 4.0.213

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.
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ export declare const HideSequence: React.FC<{
3
+ readonly from: number;
4
+ readonly durationInFrames: number;
5
+ readonly children: React.ReactNode;
6
+ }>;
7
+ export declare const useCustomFrame: () => number;
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = 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);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.useCustomFrame = exports.HideSequence = void 0;
27
+ const jsx_runtime_1 = require("react/jsx-runtime");
28
+ const react_1 = __importStar(require("react"));
29
+ const use_current_frame_1 = require("./use-current-frame");
30
+ const context = react_1.default.createContext(null);
31
+ const HideSequence = ({ from, durationInFrames, children }) => {
32
+ var _a, _b, _c;
33
+ const parent = react_1.default.useContext(context);
34
+ const frame = (0, use_current_frame_1.useCurrentFrame)();
35
+ const actualFrame = (_a = parent === null || parent === void 0 ? void 0 : parent.frame) !== null && _a !== void 0 ? _a : frame;
36
+ const cascadedFrame = actualFrame + ((_b = parent === null || parent === void 0 ? void 0 : parent.from) !== null && _b !== void 0 ? _b : 0);
37
+ const visible = cascadedFrame >= from &&
38
+ cascadedFrame < from + durationInFrames &&
39
+ ((_c = parent === null || parent === void 0 ? void 0 : parent.visible) !== null && _c !== void 0 ? _c : true);
40
+ const value = (0, react_1.useMemo)(() => {
41
+ return {
42
+ from,
43
+ durationInFrames,
44
+ visible,
45
+ frame: cascadedFrame,
46
+ };
47
+ }, [cascadedFrame, durationInFrames, from, visible]);
48
+ return (0, jsx_runtime_1.jsx)(context.Provider, { value: value, children: children });
49
+ };
50
+ exports.HideSequence = HideSequence;
51
+ const useCustomFrame = () => {
52
+ const ctx = react_1.default.useContext(context);
53
+ const frame = (0, use_current_frame_1.useCurrentFrame)();
54
+ if (!ctx) {
55
+ return frame;
56
+ }
57
+ return ctx.frame;
58
+ };
59
+ exports.useCustomFrame = useCustomFrame;
package/dist/cjs/Img.js CHANGED
@@ -70,6 +70,9 @@ const ImgRefForwarding = ({ onError, maxRetries = 2, src, pauseWhenLoading, dela
70
70
  (0, react_1.useLayoutEffect)(() => {
71
71
  var _a, _b;
72
72
  if (((_b = (_a = window.process) === null || _a === void 0 ? void 0 : _a.env) === null || _b === void 0 ? void 0 : _b.NODE_ENV) === 'test') {
73
+ if (imageRef.current) {
74
+ imageRef.current.src = actualSrc;
75
+ }
73
76
  return;
74
77
  }
75
78
  const newHandle = (0, delay_render_js_1.delayRender)('Loading <Img> with src=' + actualSrc, {
@@ -80,31 +83,45 @@ const ImgRefForwarding = ({ onError, maxRetries = 2, src, pauseWhenLoading, dela
80
83
  ? delayPlayback().unblock
81
84
  : () => undefined;
82
85
  const { current } = imageRef;
86
+ let unmounted = false;
83
87
  const onComplete = () => {
84
88
  var _a, _b, _c, _d;
89
+ // the decode() promise isn't cancelable -- it may still resolve after unmounting
90
+ if (unmounted) {
91
+ return;
92
+ }
85
93
  if (((_b = errors.current[(_a = imageRef.current) === null || _a === void 0 ? void 0 : _a.src]) !== null && _b !== void 0 ? _b : 0) > 0) {
86
94
  delete errors.current[(_c = imageRef.current) === null || _c === void 0 ? void 0 : _c.src];
87
95
  // eslint-disable-next-line no-console
88
96
  console.info(`Retry successful - ${(_d = imageRef.current) === null || _d === void 0 ? void 0 : _d.src} is now loaded`);
89
97
  }
90
98
  if (current) {
99
+ current.src = actualSrc;
91
100
  onImageFrame === null || onImageFrame === void 0 ? void 0 : onImageFrame(current);
92
101
  }
93
102
  unblock();
94
103
  (0, delay_render_js_1.continueRender)(newHandle);
95
104
  };
96
- const didLoad = () => {
97
- onComplete();
98
- };
99
- if (current === null || current === void 0 ? void 0 : current.complete) {
100
- onComplete();
101
- }
102
- else {
103
- current === null || current === void 0 ? void 0 : current.addEventListener('load', didLoad, { once: true });
104
- }
105
+ const newImg = new Image();
106
+ newImg.src = actualSrc;
107
+ newImg
108
+ .decode()
109
+ .then(onComplete)
110
+ .catch((err) => {
111
+ // fall back to onload event if decode() fails
112
+ // eslint-disable-next-line no-console
113
+ console.warn(err);
114
+ if (newImg.complete) {
115
+ onComplete();
116
+ }
117
+ else {
118
+ newImg.addEventListener('load', onComplete);
119
+ }
120
+ });
105
121
  // If tag gets unmounted, clear pending handles because image is not going to load
106
122
  return () => {
107
- current === null || current === void 0 ? void 0 : current.removeEventListener('load', didLoad);
123
+ unmounted = true;
124
+ newImg.removeEventListener('load', onComplete);
108
125
  unblock();
109
126
  (0, delay_render_js_1.continueRender)(newHandle);
110
127
  };
@@ -118,7 +135,8 @@ const ImgRefForwarding = ({ onError, maxRetries = 2, src, pauseWhenLoading, dela
118
135
  onImageFrame,
119
136
  ]);
120
137
  }
121
- return ((0, jsx_runtime_1.jsx)("img", { ...props, ref: imageRef, src: actualSrc, onError: didGetError }));
138
+ // src gets set once we've loaded and decoded the image.
139
+ return (0, jsx_runtime_1.jsx)("img", { ...props, ref: imageRef, onError: didGetError });
122
140
  };
123
141
  /**
124
142
  * @description Works just like a regular HTML img tag. When you use the <Img> tag, Remotion will ensure that the image is loaded before rendering the frame.
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const react_1 = require("react");
4
+ if (typeof react_1.createContext !== 'function') {
5
+ throw new Error('React 18 is required for Remotion');
6
+ }
@@ -3,4 +3,4 @@
3
3
  * @see [Documentation](https://remotion.dev/docs/version)
4
4
  * @returns {string} The current version of the remotion package
5
5
  */
6
- export declare const VERSION = "4.0.211";
6
+ export declare const VERSION = "4.0.213";
@@ -7,4 +7,4 @@ exports.VERSION = void 0;
7
7
  * @see [Documentation](https://remotion.dev/docs/version)
8
8
  * @returns {string} The current version of the remotion package
9
9
  */
10
- exports.VERSION = '4.0.211';
10
+ exports.VERSION = '4.0.213';
@@ -108,7 +108,7 @@ const OffthreadVideoForRendering = ({ onError, volume: volumeProp, playbackRate,
108
108
  const cleanup = [];
109
109
  setImageSrc(null);
110
110
  const controller = new AbortController();
111
- const newHandle = (0, delay_render_js_1.delayRender)('Fetching ' + actualSrc + 'from server', {
111
+ const newHandle = (0, delay_render_js_1.delayRender)(`Fetching ${actualSrc} from server`, {
112
112
  retries: delayRenderRetries !== null && delayRenderRetries !== void 0 ? delayRenderRetries : undefined,
113
113
  timeoutInMilliseconds: delayRenderTimeoutInMilliseconds !== null && delayRenderTimeoutInMilliseconds !== void 0 ? delayRenderTimeoutInMilliseconds : undefined,
114
114
  });
@@ -155,7 +155,7 @@ function truthy(value) {
155
155
  }
156
156
 
157
157
  // src/version.ts
158
- var VERSION = "4.0.211";
158
+ var VERSION = "4.0.213";
159
159
 
160
160
  // src/multiple-versions-warning.ts
161
161
  var checkMultipleRemotionVersions = () => {
@@ -4557,6 +4557,9 @@ var ImgRefForwarding = ({
4557
4557
  const isPremounting = Boolean(sequenceContext?.premounting);
4558
4558
  useLayoutEffect4(() => {
4559
4559
  if (window.process?.env?.NODE_ENV === "test") {
4560
+ if (imageRef.current) {
4561
+ imageRef.current.src = actualSrc;
4562
+ }
4560
4563
  return;
4561
4564
  }
4562
4565
  const newHandle = delayRender("Loading <Img> with src=" + actualSrc, {
@@ -4567,27 +4570,35 @@ var ImgRefForwarding = ({
4567
4570
  return;
4568
4571
  };
4569
4572
  const { current } = imageRef;
4573
+ let unmounted = false;
4570
4574
  const onComplete = () => {
4575
+ if (unmounted) {
4576
+ return;
4577
+ }
4571
4578
  if ((errors.current[imageRef.current?.src] ?? 0) > 0) {
4572
4579
  delete errors.current[imageRef.current?.src];
4573
4580
  console.info(`Retry successful - ${imageRef.current?.src} is now loaded`);
4574
4581
  }
4575
4582
  if (current) {
4583
+ current.src = actualSrc;
4576
4584
  onImageFrame?.(current);
4577
4585
  }
4578
4586
  unblock();
4579
4587
  continueRender(newHandle);
4580
4588
  };
4581
- const didLoad = () => {
4582
- onComplete();
4583
- };
4584
- if (current?.complete) {
4585
- onComplete();
4586
- } else {
4587
- current?.addEventListener("load", didLoad, { once: true });
4588
- }
4589
+ const newImg = new Image;
4590
+ newImg.src = actualSrc;
4591
+ newImg.decode().then(onComplete).catch((err) => {
4592
+ console.warn(err);
4593
+ if (newImg.complete) {
4594
+ onComplete();
4595
+ } else {
4596
+ newImg.addEventListener("load", onComplete);
4597
+ }
4598
+ });
4589
4599
  return () => {
4590
- current?.removeEventListener("load", didLoad);
4600
+ unmounted = true;
4601
+ newImg.removeEventListener("load", onComplete);
4591
4602
  unblock();
4592
4603
  continueRender(newHandle);
4593
4604
  };
@@ -4604,7 +4615,6 @@ var ImgRefForwarding = ({
4604
4615
  return /* @__PURE__ */ jsx24("img", {
4605
4616
  ...props2,
4606
4617
  ref: imageRef,
4607
- src: actualSrc,
4608
4618
  onError: didGetError
4609
4619
  });
4610
4620
  };
@@ -5929,7 +5939,7 @@ var OffthreadVideoForRendering = ({
5929
5939
  const cleanup = [];
5930
5940
  setImageSrc(null);
5931
5941
  const controller = new AbortController;
5932
- const newHandle = delayRender("Fetching " + actualSrc + "from server", {
5942
+ const newHandle = delayRender(`Fetching ${actualSrc} from server`, {
5933
5943
  retries: delayRenderRetries ?? undefined,
5934
5944
  timeoutInMilliseconds: delayRenderTimeoutInMilliseconds ?? undefined
5935
5945
  });
@@ -1,5 +1,5 @@
1
1
  // src/version.ts
2
- var VERSION = "4.0.211";
2
+ var VERSION = "4.0.213";
3
3
  export {
4
4
  VERSION
5
5
  };
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "url": "https://github.com/remotion-dev/remotion/tree/main/packages/core"
4
4
  },
5
5
  "name": "remotion",
6
- "version": "4.0.211",
6
+ "version": "4.0.213",
7
7
  "description": "Make videos programmatically",
8
8
  "main": "dist/cjs/index.js",
9
9
  "types": "dist/cjs/index.d.ts",