@remotion/promo-pages 4.0.485 → 4.0.487
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.
- package/dist/Homepage.css +1 -1
- package/dist/Homepage.js +1215 -2314
- package/dist/components/homepage/CommunityStatsItems.js +2 -2
- package/dist/components/homepage/GetStartedStrip.js +1 -1
- package/dist/components/homepage/GitHubButton.js +1 -1
- package/dist/components/homepage/Pricing.d.ts +3 -1
- package/dist/components/homepage/Pricing.js +6 -2
- package/dist/components/prompts/PromptsGallery.js +1 -1
- package/dist/components/prompts/PromptsSubmit.js +3 -169
- package/dist/design.js +318 -206
- package/dist/experts.js +225 -113
- package/dist/homepage/Pricing.js +349 -215
- package/dist/prompts/PromptsGallery.js +322 -210
- package/dist/prompts/PromptsShow.js +320 -208
- package/dist/prompts/PromptsSubmit.js +318 -206
- package/dist/tailwind.css +21 -3
- package/dist/team.js +318 -206
- package/dist/template-modal-content.css +1 -1
- package/dist/template-modal-content.js +327 -215
- package/dist/templates.js +318 -206
- package/package.json +17 -17
- package/public/img/editing-safari.mp4 +0 -0
- package/public/img/editing-vp9-chrome.webm +0 -0
- package/public/img/homepage-assets-master.mp4 +0 -0
- package/public/img/homepage-assets-master.webm +0 -0
- package/public/img/what-is-remotion.mp4 +0 -0
- package/public/img/what-is-remotion.webm +0 -0
package/dist/team.js
CHANGED
|
@@ -1559,7 +1559,7 @@ var getDefaultConfig = () => {
|
|
|
1559
1559
|
var twMerge = /* @__PURE__ */ createTailwindMerge(getDefaultConfig);
|
|
1560
1560
|
|
|
1561
1561
|
// ../design/dist/esm/index.mjs
|
|
1562
|
-
import React32, { useEffect as
|
|
1562
|
+
import React32, { useEffect as useEffect21, useMemo as useMemo42, useState as useState21 } from "react";
|
|
1563
1563
|
|
|
1564
1564
|
// ../paths/dist/esm/index.mjs
|
|
1565
1565
|
var cutLInstruction = ({
|
|
@@ -3665,6 +3665,94 @@ var getBoundingBox = (d) => {
|
|
|
3665
3665
|
const unarced = removeATSHVQInstructions(normalizeInstructions(parsed));
|
|
3666
3666
|
return getBoundingBoxFromInstructions(unarced);
|
|
3667
3667
|
};
|
|
3668
|
+
var translateSegments = (segments, x, y) => {
|
|
3669
|
+
return segments.map((segment) => {
|
|
3670
|
+
if (segment.type === "a" || segment.type === "c" || segment.type === "v" || segment.type === "s" || segment.type === "h" || segment.type === "l" || segment.type === "m" || segment.type === "q" || segment.type === "t") {
|
|
3671
|
+
return segment;
|
|
3672
|
+
}
|
|
3673
|
+
if (segment.type === "V") {
|
|
3674
|
+
return {
|
|
3675
|
+
type: "V",
|
|
3676
|
+
y: segment.y + y
|
|
3677
|
+
};
|
|
3678
|
+
}
|
|
3679
|
+
if (segment.type === "H") {
|
|
3680
|
+
return {
|
|
3681
|
+
type: "H",
|
|
3682
|
+
x: segment.x + x
|
|
3683
|
+
};
|
|
3684
|
+
}
|
|
3685
|
+
if (segment.type === "A") {
|
|
3686
|
+
return {
|
|
3687
|
+
type: "A",
|
|
3688
|
+
rx: segment.rx,
|
|
3689
|
+
ry: segment.ry,
|
|
3690
|
+
largeArcFlag: segment.largeArcFlag,
|
|
3691
|
+
sweepFlag: segment.sweepFlag,
|
|
3692
|
+
xAxisRotation: segment.xAxisRotation,
|
|
3693
|
+
x: segment.x + x,
|
|
3694
|
+
y: segment.y + y
|
|
3695
|
+
};
|
|
3696
|
+
}
|
|
3697
|
+
if (segment.type === "Z") {
|
|
3698
|
+
return segment;
|
|
3699
|
+
}
|
|
3700
|
+
if (segment.type === "C") {
|
|
3701
|
+
return {
|
|
3702
|
+
type: "C",
|
|
3703
|
+
cp1x: segment.cp1x + x,
|
|
3704
|
+
cp1y: segment.cp1y + y,
|
|
3705
|
+
cp2x: segment.cp2x + x,
|
|
3706
|
+
cp2y: segment.cp2y + y,
|
|
3707
|
+
x: segment.x + x,
|
|
3708
|
+
y: segment.y + y
|
|
3709
|
+
};
|
|
3710
|
+
}
|
|
3711
|
+
if (segment.type === "Q") {
|
|
3712
|
+
return {
|
|
3713
|
+
type: "Q",
|
|
3714
|
+
cpx: segment.cpx + x,
|
|
3715
|
+
cpy: segment.cpy + y,
|
|
3716
|
+
x: segment.x + x,
|
|
3717
|
+
y: segment.y + y
|
|
3718
|
+
};
|
|
3719
|
+
}
|
|
3720
|
+
if (segment.type === "S") {
|
|
3721
|
+
return {
|
|
3722
|
+
type: "S",
|
|
3723
|
+
cpx: segment.cpx + x,
|
|
3724
|
+
cpy: segment.cpy + y,
|
|
3725
|
+
x: segment.x + x,
|
|
3726
|
+
y: segment.y + y
|
|
3727
|
+
};
|
|
3728
|
+
}
|
|
3729
|
+
if (segment.type === "T") {
|
|
3730
|
+
return {
|
|
3731
|
+
type: "T",
|
|
3732
|
+
x: segment.x + x,
|
|
3733
|
+
y: segment.y + y
|
|
3734
|
+
};
|
|
3735
|
+
}
|
|
3736
|
+
if (segment.type === "L") {
|
|
3737
|
+
return {
|
|
3738
|
+
type: "L",
|
|
3739
|
+
x: segment.x + x,
|
|
3740
|
+
y: segment.y + y
|
|
3741
|
+
};
|
|
3742
|
+
}
|
|
3743
|
+
if (segment.type === "M") {
|
|
3744
|
+
return {
|
|
3745
|
+
type: "M",
|
|
3746
|
+
x: segment.x + x,
|
|
3747
|
+
y: segment.y + y
|
|
3748
|
+
};
|
|
3749
|
+
}
|
|
3750
|
+
throw new Error(`Unknown segment type: ${segment.type}`);
|
|
3751
|
+
});
|
|
3752
|
+
};
|
|
3753
|
+
var translatePath = (path, x, y) => {
|
|
3754
|
+
return serializeInstructions(translateSegments(parsePath(path), x, y));
|
|
3755
|
+
};
|
|
3668
3756
|
var mod = (x, m) => {
|
|
3669
3757
|
return (x % m + m) % m;
|
|
3670
3758
|
};
|
|
@@ -4226,94 +4314,6 @@ var getLength = (path) => {
|
|
|
4226
4314
|
const constructucted = construct(path);
|
|
4227
4315
|
return constructucted.totalLength;
|
|
4228
4316
|
};
|
|
4229
|
-
var translateSegments = (segments, x, y) => {
|
|
4230
|
-
return segments.map((segment) => {
|
|
4231
|
-
if (segment.type === "a" || segment.type === "c" || segment.type === "v" || segment.type === "s" || segment.type === "h" || segment.type === "l" || segment.type === "m" || segment.type === "q" || segment.type === "t") {
|
|
4232
|
-
return segment;
|
|
4233
|
-
}
|
|
4234
|
-
if (segment.type === "V") {
|
|
4235
|
-
return {
|
|
4236
|
-
type: "V",
|
|
4237
|
-
y: segment.y + y
|
|
4238
|
-
};
|
|
4239
|
-
}
|
|
4240
|
-
if (segment.type === "H") {
|
|
4241
|
-
return {
|
|
4242
|
-
type: "H",
|
|
4243
|
-
x: segment.x + x
|
|
4244
|
-
};
|
|
4245
|
-
}
|
|
4246
|
-
if (segment.type === "A") {
|
|
4247
|
-
return {
|
|
4248
|
-
type: "A",
|
|
4249
|
-
rx: segment.rx,
|
|
4250
|
-
ry: segment.ry,
|
|
4251
|
-
largeArcFlag: segment.largeArcFlag,
|
|
4252
|
-
sweepFlag: segment.sweepFlag,
|
|
4253
|
-
xAxisRotation: segment.xAxisRotation,
|
|
4254
|
-
x: segment.x + x,
|
|
4255
|
-
y: segment.y + y
|
|
4256
|
-
};
|
|
4257
|
-
}
|
|
4258
|
-
if (segment.type === "Z") {
|
|
4259
|
-
return segment;
|
|
4260
|
-
}
|
|
4261
|
-
if (segment.type === "C") {
|
|
4262
|
-
return {
|
|
4263
|
-
type: "C",
|
|
4264
|
-
cp1x: segment.cp1x + x,
|
|
4265
|
-
cp1y: segment.cp1y + y,
|
|
4266
|
-
cp2x: segment.cp2x + x,
|
|
4267
|
-
cp2y: segment.cp2y + y,
|
|
4268
|
-
x: segment.x + x,
|
|
4269
|
-
y: segment.y + y
|
|
4270
|
-
};
|
|
4271
|
-
}
|
|
4272
|
-
if (segment.type === "Q") {
|
|
4273
|
-
return {
|
|
4274
|
-
type: "Q",
|
|
4275
|
-
cpx: segment.cpx + x,
|
|
4276
|
-
cpy: segment.cpy + y,
|
|
4277
|
-
x: segment.x + x,
|
|
4278
|
-
y: segment.y + y
|
|
4279
|
-
};
|
|
4280
|
-
}
|
|
4281
|
-
if (segment.type === "S") {
|
|
4282
|
-
return {
|
|
4283
|
-
type: "S",
|
|
4284
|
-
cpx: segment.cpx + x,
|
|
4285
|
-
cpy: segment.cpy + y,
|
|
4286
|
-
x: segment.x + x,
|
|
4287
|
-
y: segment.y + y
|
|
4288
|
-
};
|
|
4289
|
-
}
|
|
4290
|
-
if (segment.type === "T") {
|
|
4291
|
-
return {
|
|
4292
|
-
type: "T",
|
|
4293
|
-
x: segment.x + x,
|
|
4294
|
-
y: segment.y + y
|
|
4295
|
-
};
|
|
4296
|
-
}
|
|
4297
|
-
if (segment.type === "L") {
|
|
4298
|
-
return {
|
|
4299
|
-
type: "L",
|
|
4300
|
-
x: segment.x + x,
|
|
4301
|
-
y: segment.y + y
|
|
4302
|
-
};
|
|
4303
|
-
}
|
|
4304
|
-
if (segment.type === "M") {
|
|
4305
|
-
return {
|
|
4306
|
-
type: "M",
|
|
4307
|
-
x: segment.x + x,
|
|
4308
|
-
y: segment.y + y
|
|
4309
|
-
};
|
|
4310
|
-
}
|
|
4311
|
-
throw new Error(`Unknown segment type: ${segment.type}`);
|
|
4312
|
-
});
|
|
4313
|
-
};
|
|
4314
|
-
var translatePath = (path, x, y) => {
|
|
4315
|
-
return serializeInstructions(translateSegments(parsePath(path), x, y));
|
|
4316
|
-
};
|
|
4317
4317
|
var resetPath = (d) => {
|
|
4318
4318
|
const box = getBoundingBox(d);
|
|
4319
4319
|
return translatePath(d, -box.x1, -box.y1);
|
|
@@ -4502,8 +4502,8 @@ import {
|
|
|
4502
4502
|
forwardRef as forwardRef10,
|
|
4503
4503
|
useCallback as useCallback17,
|
|
4504
4504
|
useContext as useContext32,
|
|
4505
|
-
useEffect as useEffect17,
|
|
4506
4505
|
useImperativeHandle as useImperativeHandle7,
|
|
4506
|
+
useLayoutEffect as useLayoutEffect10,
|
|
4507
4507
|
useMemo as useMemo31,
|
|
4508
4508
|
useRef as useRef23,
|
|
4509
4509
|
useState as useState16
|
|
@@ -4511,7 +4511,7 @@ import {
|
|
|
4511
4511
|
import { jsx as jsx26 } from "react/jsx-runtime";
|
|
4512
4512
|
import { forwardRef as forwardRef11, useCallback as useCallback18, useState as useState17 } from "react";
|
|
4513
4513
|
import { jsx as jsx27 } from "react/jsx-runtime";
|
|
4514
|
-
import { useCallback as useCallback19, useContext as useContext33, useLayoutEffect as
|
|
4514
|
+
import { useCallback as useCallback19, useContext as useContext33, useLayoutEffect as useLayoutEffect11, useRef as useRef24 } from "react";
|
|
4515
4515
|
import { jsx as jsx28 } from "react/jsx-runtime";
|
|
4516
4516
|
import React29, { forwardRef as forwardRef12, useCallback as useCallback20, useRef as useRef25 } from "react";
|
|
4517
4517
|
import { jsx as jsx29 } from "react/jsx-runtime";
|
|
@@ -4537,8 +4537,8 @@ import { useCallback as useCallback24 } from "react";
|
|
|
4537
4537
|
import {
|
|
4538
4538
|
useCallback as useCallback22,
|
|
4539
4539
|
useContext as useContext36,
|
|
4540
|
-
useEffect as
|
|
4541
|
-
useLayoutEffect as
|
|
4540
|
+
useEffect as useEffect17,
|
|
4541
|
+
useLayoutEffect as useLayoutEffect12,
|
|
4542
4542
|
useMemo as useMemo35,
|
|
4543
4543
|
useState as useState19
|
|
4544
4544
|
} from "react";
|
|
@@ -4547,13 +4547,13 @@ import React37, {
|
|
|
4547
4547
|
forwardRef as forwardRef13,
|
|
4548
4548
|
useCallback as useCallback23,
|
|
4549
4549
|
useContext as useContext37,
|
|
4550
|
-
useEffect as
|
|
4550
|
+
useEffect as useEffect19,
|
|
4551
4551
|
useImperativeHandle as useImperativeHandle9,
|
|
4552
4552
|
useMemo as useMemo36,
|
|
4553
4553
|
useRef as useRef27,
|
|
4554
4554
|
useState as useState20
|
|
4555
4555
|
} from "react";
|
|
4556
|
-
import { useEffect as
|
|
4556
|
+
import { useEffect as useEffect18 } from "react";
|
|
4557
4557
|
import { jsx as jsx34 } from "react/jsx-runtime";
|
|
4558
4558
|
import { jsx as jsx35 } from "react/jsx-runtime";
|
|
4559
4559
|
import React39, { useMemo as useMemo37 } from "react";
|
|
@@ -4570,9 +4570,9 @@ import { forwardRef as forwardRef16, useCallback as useCallback25, useContext as
|
|
|
4570
4570
|
import {
|
|
4571
4571
|
forwardRef as forwardRef15,
|
|
4572
4572
|
useContext as useContext38,
|
|
4573
|
-
useEffect as
|
|
4573
|
+
useEffect as useEffect20,
|
|
4574
4574
|
useImperativeHandle as useImperativeHandle10,
|
|
4575
|
-
useLayoutEffect as
|
|
4575
|
+
useLayoutEffect as useLayoutEffect13,
|
|
4576
4576
|
useMemo as useMemo39,
|
|
4577
4577
|
useRef as useRef28
|
|
4578
4578
|
} from "react";
|
|
@@ -5746,7 +5746,7 @@ var getComponentsToAddStacksTo = () => componentsToAddStacksTo;
|
|
|
5746
5746
|
var addSequenceStackTraces = (component) => {
|
|
5747
5747
|
componentsToAddStacksTo.push(component);
|
|
5748
5748
|
};
|
|
5749
|
-
var VERSION = "4.0.
|
|
5749
|
+
var VERSION = "4.0.487";
|
|
5750
5750
|
var checkMultipleRemotionVersions = () => {
|
|
5751
5751
|
if (typeof globalThis === "undefined") {
|
|
5752
5752
|
return;
|
|
@@ -6152,6 +6152,12 @@ var textSchema = {
|
|
|
6152
6152
|
default: undefined,
|
|
6153
6153
|
description: "Color"
|
|
6154
6154
|
},
|
|
6155
|
+
"style.fontFamily": {
|
|
6156
|
+
type: "font-family",
|
|
6157
|
+
default: undefined,
|
|
6158
|
+
description: "Font family",
|
|
6159
|
+
keyframable: false
|
|
6160
|
+
},
|
|
6155
6161
|
"style.fontSize": {
|
|
6156
6162
|
type: "number",
|
|
6157
6163
|
default: undefined,
|
|
@@ -11610,7 +11616,8 @@ var useBufferManager = (logLevel, mountTime) => {
|
|
|
11610
11616
|
if (rendering) {
|
|
11611
11617
|
return;
|
|
11612
11618
|
}
|
|
11613
|
-
if (blocks.length > 0) {
|
|
11619
|
+
if (blocks.length > 0 && !buffering.current) {
|
|
11620
|
+
buffering.current = true;
|
|
11614
11621
|
onBufferingCallbacks.forEach((c2) => c2());
|
|
11615
11622
|
playbackLogging({
|
|
11616
11623
|
logLevel,
|
|
@@ -11625,7 +11632,8 @@ var useBufferManager = (logLevel, mountTime) => {
|
|
|
11625
11632
|
if (rendering) {
|
|
11626
11633
|
return;
|
|
11627
11634
|
}
|
|
11628
|
-
if (blocks.length === 0) {
|
|
11635
|
+
if (blocks.length === 0 && buffering.current) {
|
|
11636
|
+
buffering.current = false;
|
|
11629
11637
|
onResumeCallbacks.forEach((c2) => c2());
|
|
11630
11638
|
playbackLogging({
|
|
11631
11639
|
logLevel,
|
|
@@ -11658,15 +11666,11 @@ var useIsPlayerBuffering = (bufferManager) => {
|
|
|
11658
11666
|
const onResume = () => {
|
|
11659
11667
|
setIsBuffering(false);
|
|
11660
11668
|
};
|
|
11661
|
-
bufferManager.listenForBuffering(onBuffer);
|
|
11662
|
-
bufferManager.listenForResume(onResume);
|
|
11669
|
+
const buffer = bufferManager.listenForBuffering(onBuffer);
|
|
11670
|
+
const resume = bufferManager.listenForResume(onResume);
|
|
11663
11671
|
return () => {
|
|
11664
|
-
|
|
11665
|
-
|
|
11666
|
-
});
|
|
11667
|
-
bufferManager.listenForResume(() => {
|
|
11668
|
-
return;
|
|
11669
|
-
});
|
|
11672
|
+
buffer.remove();
|
|
11673
|
+
resume.remove();
|
|
11670
11674
|
};
|
|
11671
11675
|
}, [bufferManager]);
|
|
11672
11676
|
return isBuffering;
|
|
@@ -11790,6 +11794,72 @@ var useBufferUntilFirstFrame = ({
|
|
|
11790
11794
|
};
|
|
11791
11795
|
}, [bufferUntilFirstFrame]);
|
|
11792
11796
|
};
|
|
11797
|
+
var getMediaSyncAction = (input) => {
|
|
11798
|
+
const {
|
|
11799
|
+
duration,
|
|
11800
|
+
currentTime,
|
|
11801
|
+
paused,
|
|
11802
|
+
ended,
|
|
11803
|
+
desiredUnclampedTime,
|
|
11804
|
+
mediaTagTime,
|
|
11805
|
+
mediaTagLastUpdate,
|
|
11806
|
+
rvcTime,
|
|
11807
|
+
rvcLastUpdate,
|
|
11808
|
+
isVariableFpsVideo,
|
|
11809
|
+
acceptableTimeShift,
|
|
11810
|
+
lastSeekDueToShift,
|
|
11811
|
+
playing,
|
|
11812
|
+
playbackRate,
|
|
11813
|
+
mediaTagBufferingOrStalled,
|
|
11814
|
+
playerBuffering,
|
|
11815
|
+
absoluteFrame,
|
|
11816
|
+
onlyWarnForMediaSeekingError,
|
|
11817
|
+
isPremounting,
|
|
11818
|
+
isPostmounting,
|
|
11819
|
+
pauseWhenBuffering
|
|
11820
|
+
} = input;
|
|
11821
|
+
const shouldBeTime = !Number.isNaN(duration) && Number.isFinite(duration) ? Math.min(duration, desiredUnclampedTime) : desiredUnclampedTime;
|
|
11822
|
+
const timeShiftMediaTag = Math.abs(shouldBeTime - mediaTagTime);
|
|
11823
|
+
const timeShiftRvcTag = rvcTime ? Math.abs(shouldBeTime - rvcTime) : null;
|
|
11824
|
+
const mostRecentTimeshift = rvcLastUpdate && rvcTime > mediaTagLastUpdate ? timeShiftRvcTag : timeShiftMediaTag;
|
|
11825
|
+
const timeShift = timeShiftRvcTag && !isVariableFpsVideo ? mostRecentTimeshift : timeShiftMediaTag;
|
|
11826
|
+
if (timeShift > acceptableTimeShift && lastSeekDueToShift !== shouldBeTime) {
|
|
11827
|
+
return {
|
|
11828
|
+
type: "seek-due-to-shift",
|
|
11829
|
+
shouldBeTime,
|
|
11830
|
+
why: `because time shift is too big. shouldBeTime = ${shouldBeTime}, isTime = ${mediaTagTime}, requestVideoCallbackTime = ${rvcTime}, timeShift = ${timeShift}${isVariableFpsVideo ? ", isVariableFpsVideo = true" : ""}, isPremounting = ${isPremounting}, isPostmounting = ${isPostmounting}, pauseWhenBuffering = ${pauseWhenBuffering}`,
|
|
11831
|
+
bufferUntilFirstFrame: playing && playbackRate > 0,
|
|
11832
|
+
playReason: playing && paused ? "player is playing but media tag is paused, and just seeked" : null,
|
|
11833
|
+
warnAboutNonSeekable: !onlyWarnForMediaSeekingError
|
|
11834
|
+
};
|
|
11835
|
+
}
|
|
11836
|
+
const seekThreshold = playing ? 0.15 : 0.01;
|
|
11837
|
+
const makesSenseToSeek = Math.abs(currentTime - shouldBeTime) > seekThreshold;
|
|
11838
|
+
const isSomethingElseBuffering = playerBuffering && !mediaTagBufferingOrStalled;
|
|
11839
|
+
if (!playing || isSomethingElseBuffering) {
|
|
11840
|
+
return {
|
|
11841
|
+
type: "seek-if-not-playing",
|
|
11842
|
+
shouldBeTime,
|
|
11843
|
+
why: makesSenseToSeek ? `not playing or something else is buffering. time offset is over seek threshold (${seekThreshold})` : null
|
|
11844
|
+
};
|
|
11845
|
+
}
|
|
11846
|
+
if (!playing || playerBuffering) {
|
|
11847
|
+
return { type: "none" };
|
|
11848
|
+
}
|
|
11849
|
+
const pausedCondition = paused && !ended;
|
|
11850
|
+
const firstFrameCondition = absoluteFrame === 0;
|
|
11851
|
+
if (pausedCondition || firstFrameCondition) {
|
|
11852
|
+
const reason = pausedCondition ? "media tag is paused" : "absolute frame is 0";
|
|
11853
|
+
return {
|
|
11854
|
+
type: "play-and-seek",
|
|
11855
|
+
shouldBeTime,
|
|
11856
|
+
why: makesSenseToSeek ? `is over timeshift threshold (threshold = ${seekThreshold}) and ${reason}` : null,
|
|
11857
|
+
playReason: `player is playing and ${reason}`,
|
|
11858
|
+
bufferUntilFirstFrame: !isVariableFpsVideo && playbackRate > 0
|
|
11859
|
+
};
|
|
11860
|
+
}
|
|
11861
|
+
return { type: "none" };
|
|
11862
|
+
};
|
|
11793
11863
|
var useCurrentTimeOfMediaTagWithUpdateTimeStamp = (mediaRef) => {
|
|
11794
11864
|
const lastUpdate = React21.useRef({
|
|
11795
11865
|
time: mediaRef.current?.currentTime ?? 0,
|
|
@@ -12209,89 +12279,93 @@ var useMediaPlayback = ({
|
|
|
12209
12279
|
if (!src) {
|
|
12210
12280
|
throw new Error(`No 'src' attribute was passed to the ${tagName} element.`);
|
|
12211
12281
|
}
|
|
12212
|
-
const {
|
|
12213
|
-
const
|
|
12214
|
-
|
|
12215
|
-
|
|
12216
|
-
|
|
12217
|
-
|
|
12218
|
-
|
|
12219
|
-
|
|
12220
|
-
|
|
12221
|
-
|
|
12282
|
+
const { current } = mediaRef;
|
|
12283
|
+
const action = getMediaSyncAction({
|
|
12284
|
+
duration: current.duration,
|
|
12285
|
+
currentTime: current.currentTime,
|
|
12286
|
+
paused: current.paused,
|
|
12287
|
+
ended: current.ended,
|
|
12288
|
+
desiredUnclampedTime,
|
|
12289
|
+
mediaTagTime: mediaTagCurrentTime.current.time,
|
|
12290
|
+
mediaTagLastUpdate: mediaTagCurrentTime.current.lastUpdate,
|
|
12291
|
+
rvcTime: rvcCurrentTime.current?.time ?? null,
|
|
12292
|
+
rvcLastUpdate: rvcCurrentTime.current?.lastUpdate ?? null,
|
|
12293
|
+
isVariableFpsVideo: Boolean(isVariableFpsVideoMap.current[src]),
|
|
12294
|
+
acceptableTimeShift: acceptableTimeShiftButLessThanDuration,
|
|
12295
|
+
lastSeekDueToShift: lastSeekDueToShift.current,
|
|
12296
|
+
playing,
|
|
12297
|
+
playbackRate,
|
|
12298
|
+
mediaTagBufferingOrStalled: isMediaTagBuffering || isBuffering(),
|
|
12299
|
+
playerBuffering: buffering.buffering.current,
|
|
12300
|
+
absoluteFrame,
|
|
12301
|
+
onlyWarnForMediaSeekingError,
|
|
12302
|
+
isPremounting,
|
|
12303
|
+
isPostmounting,
|
|
12304
|
+
pauseWhenBuffering
|
|
12305
|
+
});
|
|
12306
|
+
if (action.type === "none") {
|
|
12307
|
+
return;
|
|
12308
|
+
}
|
|
12309
|
+
if (action.type === "seek-due-to-shift") {
|
|
12222
12310
|
lastSeek.current = seek({
|
|
12223
|
-
mediaRef:
|
|
12224
|
-
time: shouldBeTime,
|
|
12311
|
+
mediaRef: current,
|
|
12312
|
+
time: action.shouldBeTime,
|
|
12225
12313
|
logLevel,
|
|
12226
|
-
why:
|
|
12314
|
+
why: action.why,
|
|
12227
12315
|
mountTime
|
|
12228
12316
|
});
|
|
12229
12317
|
lastSeekDueToShift.current = lastSeek.current;
|
|
12230
|
-
if (
|
|
12231
|
-
|
|
12232
|
-
bufferUntilFirstFrame(shouldBeTime);
|
|
12233
|
-
}
|
|
12234
|
-
if (mediaRef.current.paused) {
|
|
12235
|
-
playAndHandleNotAllowedError({
|
|
12236
|
-
mediaRef,
|
|
12237
|
-
mediaType,
|
|
12238
|
-
onAutoPlayError,
|
|
12239
|
-
logLevel,
|
|
12240
|
-
mountTime,
|
|
12241
|
-
reason: "player is playing but media tag is paused, and just seeked",
|
|
12242
|
-
isPlayer: env.isPlayer
|
|
12243
|
-
});
|
|
12244
|
-
}
|
|
12245
|
-
}
|
|
12246
|
-
if (!onlyWarnForMediaSeekingError) {
|
|
12247
|
-
warnAboutNonSeekableMedia(mediaRef.current, onlyWarnForMediaSeekingError ? "console-warning" : "console-error");
|
|
12318
|
+
if (action.bufferUntilFirstFrame) {
|
|
12319
|
+
bufferUntilFirstFrame(action.shouldBeTime);
|
|
12248
12320
|
}
|
|
12249
|
-
|
|
12250
|
-
|
|
12251
|
-
|
|
12252
|
-
|
|
12253
|
-
|
|
12254
|
-
const isSomethingElseBuffering = buffering.buffering.current && !isMediaTagBufferingOrStalled;
|
|
12255
|
-
if (!playing || isSomethingElseBuffering) {
|
|
12256
|
-
if (makesSenseToSeek) {
|
|
12257
|
-
lastSeek.current = seek({
|
|
12258
|
-
mediaRef: mediaRef.current,
|
|
12259
|
-
time: shouldBeTime,
|
|
12321
|
+
if (action.playReason !== null) {
|
|
12322
|
+
playAndHandleNotAllowedError({
|
|
12323
|
+
mediaRef,
|
|
12324
|
+
mediaType,
|
|
12325
|
+
onAutoPlayError,
|
|
12260
12326
|
logLevel,
|
|
12261
|
-
|
|
12262
|
-
|
|
12327
|
+
mountTime,
|
|
12328
|
+
reason: action.playReason,
|
|
12329
|
+
isPlayer: env.isPlayer
|
|
12263
12330
|
});
|
|
12264
12331
|
}
|
|
12332
|
+
if (action.warnAboutNonSeekable) {
|
|
12333
|
+
warnAboutNonSeekableMedia(current, "console-error");
|
|
12334
|
+
}
|
|
12265
12335
|
return;
|
|
12266
12336
|
}
|
|
12267
|
-
if (
|
|
12268
|
-
|
|
12269
|
-
}
|
|
12270
|
-
const pausedCondition = mediaRef.current.paused && !mediaRef.current.ended;
|
|
12271
|
-
const firstFrameCondition = absoluteFrame === 0;
|
|
12272
|
-
if (pausedCondition || firstFrameCondition) {
|
|
12273
|
-
const reason = pausedCondition ? "media tag is paused" : "absolute frame is 0";
|
|
12274
|
-
if (makesSenseToSeek) {
|
|
12337
|
+
if (action.type === "seek-if-not-playing") {
|
|
12338
|
+
if (action.why !== null) {
|
|
12275
12339
|
lastSeek.current = seek({
|
|
12276
|
-
mediaRef:
|
|
12277
|
-
time: shouldBeTime,
|
|
12340
|
+
mediaRef: current,
|
|
12341
|
+
time: action.shouldBeTime,
|
|
12278
12342
|
logLevel,
|
|
12279
|
-
why:
|
|
12343
|
+
why: action.why,
|
|
12280
12344
|
mountTime
|
|
12281
12345
|
});
|
|
12282
12346
|
}
|
|
12283
|
-
|
|
12284
|
-
|
|
12285
|
-
|
|
12286
|
-
|
|
12347
|
+
return;
|
|
12348
|
+
}
|
|
12349
|
+
if (action.why !== null) {
|
|
12350
|
+
lastSeek.current = seek({
|
|
12351
|
+
mediaRef: current,
|
|
12352
|
+
time: action.shouldBeTime,
|
|
12287
12353
|
logLevel,
|
|
12288
|
-
|
|
12289
|
-
|
|
12290
|
-
isPlayer: env.isPlayer
|
|
12354
|
+
why: action.why,
|
|
12355
|
+
mountTime
|
|
12291
12356
|
});
|
|
12292
|
-
|
|
12293
|
-
|
|
12294
|
-
|
|
12357
|
+
}
|
|
12358
|
+
playAndHandleNotAllowedError({
|
|
12359
|
+
mediaRef,
|
|
12360
|
+
mediaType,
|
|
12361
|
+
onAutoPlayError,
|
|
12362
|
+
logLevel,
|
|
12363
|
+
mountTime,
|
|
12364
|
+
reason: action.playReason,
|
|
12365
|
+
isPlayer: env.isPlayer
|
|
12366
|
+
});
|
|
12367
|
+
if (action.bufferUntilFirstFrame) {
|
|
12368
|
+
bufferUntilFirstFrame(action.shouldBeTime);
|
|
12295
12369
|
}
|
|
12296
12370
|
}, [
|
|
12297
12371
|
absoluteFrame,
|
|
@@ -13482,6 +13556,18 @@ var loadImage = ({
|
|
|
13482
13556
|
function exponentialBackoff(errorCount) {
|
|
13483
13557
|
return 1000 * 2 ** (errorCount - 1);
|
|
13484
13558
|
}
|
|
13559
|
+
var waitForNextFrame = ({
|
|
13560
|
+
onFrame
|
|
13561
|
+
}) => {
|
|
13562
|
+
if (typeof requestAnimationFrame === "undefined") {
|
|
13563
|
+
onFrame();
|
|
13564
|
+
return () => {
|
|
13565
|
+
return;
|
|
13566
|
+
};
|
|
13567
|
+
}
|
|
13568
|
+
const frame = requestAnimationFrame(onFrame);
|
|
13569
|
+
return () => cancelAnimationFrame(frame);
|
|
13570
|
+
};
|
|
13485
13571
|
var CanvasImageContent = forwardRef10(({
|
|
13486
13572
|
src,
|
|
13487
13573
|
width,
|
|
@@ -13511,6 +13597,17 @@ var CanvasImageContent = forwardRef10(({
|
|
|
13511
13597
|
overrideId: controls?.overrideId ?? null
|
|
13512
13598
|
});
|
|
13513
13599
|
const sequenceContext = useContext32(SequenceContext);
|
|
13600
|
+
const pendingLoadDelayRef = useRef23(null);
|
|
13601
|
+
const continuePendingLoadDelay = useCallback17(() => {
|
|
13602
|
+
const pending = pendingLoadDelayRef.current;
|
|
13603
|
+
if (!pending || pending.continued) {
|
|
13604
|
+
return;
|
|
13605
|
+
}
|
|
13606
|
+
pending.continued = true;
|
|
13607
|
+
pending.unblock();
|
|
13608
|
+
continueRender2(pending.handle);
|
|
13609
|
+
pendingLoadDelayRef.current = null;
|
|
13610
|
+
}, [continueRender2]);
|
|
13514
13611
|
const sourceCanvas = useMemo31(() => {
|
|
13515
13612
|
if (typeof document === "undefined") {
|
|
13516
13613
|
return null;
|
|
@@ -13528,7 +13625,7 @@ var CanvasImageContent = forwardRef10(({
|
|
|
13528
13625
|
ref.current = canvas;
|
|
13529
13626
|
}
|
|
13530
13627
|
}, [ref, refForOutline]);
|
|
13531
|
-
|
|
13628
|
+
useLayoutEffect10(() => {
|
|
13532
13629
|
const isPremounting = Boolean(sequenceContext?.premounting);
|
|
13533
13630
|
const isPostmounting = Boolean(sequenceContext?.postmounting);
|
|
13534
13631
|
const handle = delayRender2(`Rendering <CanvasImage> with src="${truncateSrcForLabel(actualSrc)}"`, {
|
|
@@ -13540,17 +13637,13 @@ var CanvasImageContent = forwardRef10(({
|
|
|
13540
13637
|
};
|
|
13541
13638
|
const controller = new AbortController;
|
|
13542
13639
|
let cancelled = false;
|
|
13543
|
-
let continued = false;
|
|
13544
13640
|
let errorCount = 0;
|
|
13545
13641
|
let timeoutId = null;
|
|
13546
13642
|
setLoadedImage(null);
|
|
13547
|
-
|
|
13548
|
-
|
|
13549
|
-
|
|
13550
|
-
|
|
13551
|
-
continued = true;
|
|
13552
|
-
unblock();
|
|
13553
|
-
continueRender2(handle);
|
|
13643
|
+
pendingLoadDelayRef.current = {
|
|
13644
|
+
handle,
|
|
13645
|
+
unblock,
|
|
13646
|
+
continued: false
|
|
13554
13647
|
};
|
|
13555
13648
|
const attemptLoad = () => {
|
|
13556
13649
|
loadImage({ src: actualSrc, signal: controller.signal }).then((image) => {
|
|
@@ -13558,13 +13651,9 @@ var CanvasImageContent = forwardRef10(({
|
|
|
13558
13651
|
return;
|
|
13559
13652
|
}
|
|
13560
13653
|
setLoadedImage(image);
|
|
13561
|
-
}).then(() => {
|
|
13562
|
-
if (!cancelled) {
|
|
13563
|
-
continueRenderOnce();
|
|
13564
|
-
}
|
|
13565
13654
|
}).catch((err) => {
|
|
13566
13655
|
if (err.name === "AbortError") {
|
|
13567
|
-
|
|
13656
|
+
continuePendingLoadDelay();
|
|
13568
13657
|
return;
|
|
13569
13658
|
}
|
|
13570
13659
|
errorCount++;
|
|
@@ -13578,7 +13667,7 @@ var CanvasImageContent = forwardRef10(({
|
|
|
13578
13667
|
}, backoff);
|
|
13579
13668
|
} else if (onError) {
|
|
13580
13669
|
onError(err);
|
|
13581
|
-
|
|
13670
|
+
continuePendingLoadDelay();
|
|
13582
13671
|
} else {
|
|
13583
13672
|
cancelRender2(err);
|
|
13584
13673
|
}
|
|
@@ -13591,12 +13680,12 @@ var CanvasImageContent = forwardRef10(({
|
|
|
13591
13680
|
clearTimeout(timeoutId);
|
|
13592
13681
|
}
|
|
13593
13682
|
controller.abort();
|
|
13594
|
-
|
|
13683
|
+
continuePendingLoadDelay();
|
|
13595
13684
|
};
|
|
13596
13685
|
}, [
|
|
13597
13686
|
actualSrc,
|
|
13598
13687
|
cancelRender2,
|
|
13599
|
-
|
|
13688
|
+
continuePendingLoadDelay,
|
|
13600
13689
|
delayPlayback,
|
|
13601
13690
|
delayRender2,
|
|
13602
13691
|
delayRenderRetries,
|
|
@@ -13607,13 +13696,16 @@ var CanvasImageContent = forwardRef10(({
|
|
|
13607
13696
|
sequenceContext?.postmounting,
|
|
13608
13697
|
sequenceContext?.premounting
|
|
13609
13698
|
]);
|
|
13610
|
-
|
|
13699
|
+
useLayoutEffect10(() => {
|
|
13611
13700
|
if (!loadedImage || !outputCanvas || !sourceCanvas) {
|
|
13612
13701
|
return;
|
|
13613
13702
|
}
|
|
13614
13703
|
const handle = delayRender2(`Applying effects to <CanvasImage> with src="${truncateSrcForLabel(actualSrc)}"`);
|
|
13615
13704
|
let cancelled = false;
|
|
13616
13705
|
let continued = false;
|
|
13706
|
+
let cancelWaitForNextFrame = () => {
|
|
13707
|
+
return;
|
|
13708
|
+
};
|
|
13617
13709
|
const continueRenderOnce = () => {
|
|
13618
13710
|
if (continued) {
|
|
13619
13711
|
return;
|
|
@@ -13648,7 +13740,15 @@ var CanvasImageContent = forwardRef10(({
|
|
|
13648
13740
|
height: canvasHeight
|
|
13649
13741
|
}).then((completed) => {
|
|
13650
13742
|
if (completed && !cancelled) {
|
|
13651
|
-
|
|
13743
|
+
cancelWaitForNextFrame = waitForNextFrame({
|
|
13744
|
+
onFrame: () => {
|
|
13745
|
+
if (cancelled) {
|
|
13746
|
+
return;
|
|
13747
|
+
}
|
|
13748
|
+
continueRenderOnce();
|
|
13749
|
+
continuePendingLoadDelay();
|
|
13750
|
+
}
|
|
13751
|
+
});
|
|
13652
13752
|
}
|
|
13653
13753
|
}).catch((err) => {
|
|
13654
13754
|
if (cancelled) {
|
|
@@ -13657,12 +13757,14 @@ var CanvasImageContent = forwardRef10(({
|
|
|
13657
13757
|
if (onError) {
|
|
13658
13758
|
onError(err);
|
|
13659
13759
|
continueRenderOnce();
|
|
13760
|
+
continuePendingLoadDelay();
|
|
13660
13761
|
} else {
|
|
13661
13762
|
cancelRender2(err);
|
|
13662
13763
|
}
|
|
13663
13764
|
});
|
|
13664
13765
|
return () => {
|
|
13665
13766
|
cancelled = true;
|
|
13767
|
+
cancelWaitForNextFrame();
|
|
13666
13768
|
continueRenderOnce();
|
|
13667
13769
|
};
|
|
13668
13770
|
}, [
|
|
@@ -13670,6 +13772,7 @@ var CanvasImageContent = forwardRef10(({
|
|
|
13670
13772
|
cancelRender2,
|
|
13671
13773
|
chainState,
|
|
13672
13774
|
continueRender2,
|
|
13775
|
+
continuePendingLoadDelay,
|
|
13673
13776
|
delayRender2,
|
|
13674
13777
|
fit,
|
|
13675
13778
|
height,
|
|
@@ -13879,7 +13982,7 @@ var ImgContent = ({
|
|
|
13879
13982
|
if (typeof window !== "undefined") {
|
|
13880
13983
|
const isPremounting = Boolean(sequenceContext?.premounting);
|
|
13881
13984
|
const isPostmounting = Boolean(sequenceContext?.postmounting);
|
|
13882
|
-
|
|
13985
|
+
useLayoutEffect11(() => {
|
|
13883
13986
|
if (window.process?.env?.NODE_ENV === "test") {
|
|
13884
13987
|
if (imageRef.current) {
|
|
13885
13988
|
imageRef.current.src = actualSrc;
|
|
@@ -14775,7 +14878,7 @@ var OffthreadVideoForRendering = ({
|
|
|
14775
14878
|
mediaVolume: 1
|
|
14776
14879
|
});
|
|
14777
14880
|
warnAboutTooHighVolume(volume);
|
|
14778
|
-
|
|
14881
|
+
useEffect17(() => {
|
|
14779
14882
|
if (!src) {
|
|
14780
14883
|
throw new Error("No src passed");
|
|
14781
14884
|
}
|
|
@@ -14832,7 +14935,7 @@ var OffthreadVideoForRendering = ({
|
|
|
14832
14935
|
}, [toneMapped, currentTime, src, transparent]);
|
|
14833
14936
|
const [imageSrc, setImageSrc] = useState19(null);
|
|
14834
14937
|
const { delayRender: delayRender2, continueRender: continueRender2 } = useDelayRender();
|
|
14835
|
-
|
|
14938
|
+
useLayoutEffect12(() => {
|
|
14836
14939
|
if (!window.remotion_videoEnabled) {
|
|
14837
14940
|
return;
|
|
14838
14941
|
}
|
|
@@ -14936,7 +15039,7 @@ var useEmitVideoFrame = ({
|
|
|
14936
15039
|
ref,
|
|
14937
15040
|
onVideoFrame
|
|
14938
15041
|
}) => {
|
|
14939
|
-
|
|
15042
|
+
useEffect18(() => {
|
|
14940
15043
|
const { current } = ref;
|
|
14941
15044
|
if (!current) {
|
|
14942
15045
|
return;
|
|
@@ -15111,7 +15214,7 @@ var VideoForDevelopmentRefForwardingFunction = (props2, ref) => {
|
|
|
15111
15214
|
tag: "video",
|
|
15112
15215
|
mountTime
|
|
15113
15216
|
}));
|
|
15114
|
-
|
|
15217
|
+
useEffect19(() => {
|
|
15115
15218
|
const { current } = videoRef;
|
|
15116
15219
|
if (!current) {
|
|
15117
15220
|
return;
|
|
@@ -15154,7 +15257,7 @@ var VideoForDevelopmentRefForwardingFunction = (props2, ref) => {
|
|
|
15154
15257
|
const currentOnDurationCallback = useRef27(onDuration);
|
|
15155
15258
|
currentOnDurationCallback.current = onDuration;
|
|
15156
15259
|
useEmitVideoFrame({ ref: videoRef, onVideoFrame });
|
|
15157
|
-
|
|
15260
|
+
useEffect19(() => {
|
|
15158
15261
|
const { current } = videoRef;
|
|
15159
15262
|
if (!current) {
|
|
15160
15263
|
return;
|
|
@@ -15171,7 +15274,7 @@ var VideoForDevelopmentRefForwardingFunction = (props2, ref) => {
|
|
|
15171
15274
|
current.removeEventListener("loadedmetadata", onLoadedMetadata);
|
|
15172
15275
|
};
|
|
15173
15276
|
}, [src]);
|
|
15174
|
-
|
|
15277
|
+
useEffect19(() => {
|
|
15175
15278
|
const { current } = videoRef;
|
|
15176
15279
|
if (!current) {
|
|
15177
15280
|
return;
|
|
@@ -15786,6 +15889,15 @@ var staticFile = (path) => {
|
|
|
15786
15889
|
}
|
|
15787
15890
|
return preparsed;
|
|
15788
15891
|
};
|
|
15892
|
+
var Still = (props2) => {
|
|
15893
|
+
const newProps = {
|
|
15894
|
+
...props2,
|
|
15895
|
+
durationInFrames: 1,
|
|
15896
|
+
fps: 1
|
|
15897
|
+
};
|
|
15898
|
+
return React42.createElement(Composition, newProps);
|
|
15899
|
+
};
|
|
15900
|
+
addSequenceStackTraces(Still);
|
|
15789
15901
|
var roundTo6Commas = (num) => {
|
|
15790
15902
|
return Math.round(num * 1e5) / 1e5;
|
|
15791
15903
|
};
|
|
@@ -15952,7 +16064,7 @@ var VideoForRenderingForwardFunction = ({
|
|
|
15952
16064
|
mediaVolume: 1
|
|
15953
16065
|
});
|
|
15954
16066
|
warnAboutTooHighVolume(volume);
|
|
15955
|
-
|
|
16067
|
+
useEffect20(() => {
|
|
15956
16068
|
if (!props2.src) {
|
|
15957
16069
|
throw new Error("No src passed");
|
|
15958
16070
|
}
|
|
@@ -15996,7 +16108,7 @@ var VideoForRenderingForwardFunction = ({
|
|
|
15996
16108
|
return videoRef.current;
|
|
15997
16109
|
}, []);
|
|
15998
16110
|
useEmitVideoFrame({ ref: videoRef, onVideoFrame });
|
|
15999
|
-
|
|
16111
|
+
useEffect20(() => {
|
|
16000
16112
|
if (!window.remotion_videoEnabled) {
|
|
16001
16113
|
return;
|
|
16002
16114
|
}
|
|
@@ -16086,7 +16198,7 @@ var VideoForRenderingForwardFunction = ({
|
|
|
16086
16198
|
]);
|
|
16087
16199
|
const { src } = props2;
|
|
16088
16200
|
if (environment.isRendering) {
|
|
16089
|
-
|
|
16201
|
+
useLayoutEffect13(() => {
|
|
16090
16202
|
if (window.process?.env?.NODE_ENV === "test") {
|
|
16091
16203
|
return;
|
|
16092
16204
|
}
|
|
@@ -19190,7 +19302,7 @@ var extrudeAndTransformElement = (options) => {
|
|
|
19190
19302
|
// ../design/dist/esm/index.mjs
|
|
19191
19303
|
import { jsx as jsx212, Fragment as Fragment3 } from "react/jsx-runtime";
|
|
19192
19304
|
import { jsx as jsx312, jsxs as jsxs5 } from "react/jsx-runtime";
|
|
19193
|
-
import { useEffect as
|
|
19305
|
+
import { useEffect as useEffect22, useMemo as useMemo210, useRef as useRef31 } from "react";
|
|
19194
19306
|
import { jsx as jsx45 } from "react/jsx-runtime";
|
|
19195
19307
|
import { jsx as jsx53, jsxs as jsxs23 } from "react/jsx-runtime";
|
|
19196
19308
|
import React62 from "react";
|
|
@@ -19445,7 +19557,7 @@ var useHoverTransforms = (ref, disabled) => {
|
|
|
19445
19557
|
isActive: false
|
|
19446
19558
|
});
|
|
19447
19559
|
const eventTarget = useMemo42(() => new EventTarget, []);
|
|
19448
|
-
|
|
19560
|
+
useEffect21(() => {
|
|
19449
19561
|
if (disabled) {
|
|
19450
19562
|
eventTarget.dispatchEvent(new Event("disabled"));
|
|
19451
19563
|
} else {
|
|
@@ -19592,7 +19704,7 @@ var getAngle = (ref, coordinates) => {
|
|
|
19592
19704
|
var lastCoordinates = null;
|
|
19593
19705
|
var useMousePosition = (ref) => {
|
|
19594
19706
|
const [angle, setAngle] = useState21(getAngle(ref.current, lastCoordinates));
|
|
19595
|
-
|
|
19707
|
+
useEffect21(() => {
|
|
19596
19708
|
const element = ref.current;
|
|
19597
19709
|
if (!element) {
|
|
19598
19710
|
return;
|
|
@@ -19713,7 +19825,7 @@ var Spinner = ({ size, duration }) => {
|
|
|
19713
19825
|
};
|
|
19714
19826
|
}, [size]);
|
|
19715
19827
|
const pathsRef = useRef31([]);
|
|
19716
|
-
|
|
19828
|
+
useEffect22(() => {
|
|
19717
19829
|
const animate = () => {
|
|
19718
19830
|
const now = performance.now();
|
|
19719
19831
|
for (let index = 0;index < lines; index++) {
|