@remotion/promo-pages 4.0.314 → 4.0.317
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/.turbo/turbo-make.log +2 -2
- package/dist/Homepage.js +11958 -12155
- package/dist/components/Homepage.js +4 -4
- package/dist/components/homepage/BackgroundAnimation.js +1 -1
- package/dist/components/homepage/CommunityStats.js +1 -1
- package/dist/components/homepage/CommunityStatsItems.js +1 -1
- package/dist/components/homepage/Counter.d.ts +1 -0
- package/dist/components/homepage/Counter.js +15 -7
- package/dist/components/homepage/Demo/DisplayedEmoji.js +17 -3
- package/dist/components/homepage/FreePricing.js +20 -25
- package/dist/components/homepage/GitHubButton.js +1 -1
- package/dist/components/homepage/IconForTemplate.js +4 -0
- package/dist/components/homepage/IfYouKnowReact.js +5 -2
- package/dist/components/homepage/MoreVideoPowerSection.d.ts +2 -0
- package/dist/components/homepage/MoreVideoPowerSection.js +16 -0
- package/dist/components/homepage/NewsletterButton.js +3 -2
- package/dist/components/homepage/ParameterizeAndEdit.d.ts +2 -0
- package/dist/components/homepage/ParameterizeAndEdit.js +22 -0
- package/dist/components/homepage/RealMp4Videos.js +10 -1
- package/dist/components/homepage/VideoAppsShowcase.js +6 -3
- package/dist/components/homepage/VideoAppsTitle.d.ts +0 -1
- package/dist/components/homepage/VideoAppsTitle.js +1 -4
- package/dist/components/icons/recorder.d.ts +3 -0
- package/dist/components/icons/recorder.js +4 -0
- package/dist/homepage/Pricing.js +131 -90
- package/dist/tailwind.css +115 -55
- package/package.json +10 -10
- package/public/img/editing-safari.mp4 +0 -0
- package/public/img/editing-vp9-chrome.webm +0 -0
- package/public/img/media-parser.png +0 -0
- package/public/img/recorder.png +0 -0
- package/public/img/webcodecs.png +0 -0
- package/src/components/Homepage.tsx +12 -12
- package/src/components/homepage/CommunityStats.tsx +1 -1
- package/src/components/homepage/Counter.tsx +17 -7
- package/src/components/homepage/Demo/DisplayedEmoji.tsx +22 -4
- package/src/components/homepage/FreePricing.tsx +88 -65
- package/src/components/homepage/IconForTemplate.tsx +5 -0
- package/src/components/homepage/IfYouKnowReact.tsx +26 -14
- package/src/components/homepage/MoreVideoPowerSection.tsx +95 -0
- package/src/components/homepage/NewsletterButton.tsx +6 -5
- package/src/components/homepage/ParameterizeAndEdit.tsx +89 -0
- package/src/components/homepage/RealMp4Videos.tsx +55 -13
- package/src/components/homepage/VideoAppsShowcase.tsx +21 -10
- package/src/components/homepage/VideoAppsTitle.tsx +0 -13
- package/src/components/icons/recorder.tsx +23 -0
- package/dist/components/homepage/Editor.d.ts +0 -2
- package/dist/components/homepage/Editor.js +0 -37
- package/public/img/player-demo.mp4 +0 -0
- package/src/components/homepage/Editor.tsx +0 -67
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import React, {useEffect, useRef, useState} from 'react';
|
|
2
2
|
|
|
3
|
-
import {BlueButton} from './layout/Button';
|
|
4
3
|
import {MuxVideo} from './MuxVideo';
|
|
5
4
|
import {SectionTitle} from './VideoAppsTitle';
|
|
6
5
|
|
|
@@ -57,6 +56,11 @@ const videoApps = [
|
|
|
57
56
|
},
|
|
58
57
|
];
|
|
59
58
|
|
|
59
|
+
const icon: React.CSSProperties = {
|
|
60
|
+
height: 16,
|
|
61
|
+
marginLeft: 10,
|
|
62
|
+
};
|
|
63
|
+
|
|
60
64
|
const VideoAppsShowcase: React.FC = () => {
|
|
61
65
|
const [activeTab, setActiveTab] = useState(0);
|
|
62
66
|
const [isMuted, setIsMuted] = useState(true);
|
|
@@ -174,7 +178,7 @@ const VideoAppsShowcase: React.FC = () => {
|
|
|
174
178
|
<SectionTitle>Use Cases</SectionTitle>
|
|
175
179
|
<div
|
|
176
180
|
className={
|
|
177
|
-
'grid justify-center grid-flow-col grid-rows-1 gap-2.5 justify-self-center mb-4 w-[90vw] md:w-auto'
|
|
181
|
+
'grid justify-center grid-flow-col grid-rows-1 gap-2.5 justify-self-center mb-4 w-[90vw] md:w-auto -mt-4'
|
|
178
182
|
}
|
|
179
183
|
>
|
|
180
184
|
{tabs.map((tab, index) => (
|
|
@@ -201,7 +205,7 @@ const VideoAppsShowcase: React.FC = () => {
|
|
|
201
205
|
ref={videoRef}
|
|
202
206
|
muxId={videoApps[activeTab].muxId}
|
|
203
207
|
className={
|
|
204
|
-
'absolute left-0 top-0 w-full h-full object-contain rounded-
|
|
208
|
+
'absolute left-0 top-0 w-full h-full object-contain rounded-sm rounded-tr-none rounded-br-none'
|
|
205
209
|
}
|
|
206
210
|
loop
|
|
207
211
|
playsInline
|
|
@@ -228,8 +232,8 @@ const VideoAppsShowcase: React.FC = () => {
|
|
|
228
232
|
</button>
|
|
229
233
|
)}
|
|
230
234
|
</div>
|
|
231
|
-
<div className={'
|
|
232
|
-
<div className="text-4xl font-bold fontbrand">
|
|
235
|
+
<div className={'p-6 flex-1 flex flex-col h-full'}>
|
|
236
|
+
<div className="text-4xl font-bold fontbrand mt-0">
|
|
233
237
|
{videoApps[activeTab].title}
|
|
234
238
|
</div>
|
|
235
239
|
<div className="text-muted mt-4 text-base fontbrand">
|
|
@@ -242,13 +246,20 @@ const VideoAppsShowcase: React.FC = () => {
|
|
|
242
246
|
) : null}
|
|
243
247
|
<div className="h-5" />
|
|
244
248
|
<a
|
|
245
|
-
|
|
249
|
+
className="no-underline text-brand font-brand font-bold inline-flex flex-row items-center"
|
|
246
250
|
href={videoApps[activeTab].link}
|
|
247
|
-
style={{textDecoration: 'none'}}
|
|
248
251
|
>
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
+
{videoApps[activeTab].buttonText}
|
|
253
|
+
<svg
|
|
254
|
+
style={icon}
|
|
255
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
256
|
+
viewBox="0 0 448 512"
|
|
257
|
+
>
|
|
258
|
+
<path
|
|
259
|
+
fill="currentColor"
|
|
260
|
+
d="M438.6 278.6l-160 160C272.4 444.9 264.2 448 256 448s-16.38-3.125-22.62-9.375c-12.5-12.5-12.5-32.75 0-45.25L338.8 288H32C14.33 288 .0016 273.7 .0016 256S14.33 224 32 224h306.8l-105.4-105.4c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0l160 160C451.1 245.9 451.1 266.1 438.6 278.6z"
|
|
261
|
+
/>
|
|
262
|
+
</svg>
|
|
252
263
|
</a>
|
|
253
264
|
</div>
|
|
254
265
|
</div>
|
|
@@ -1,18 +1,5 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
|
|
3
|
-
export const VideoAppsTitle: React.FC = () => {
|
|
4
|
-
return (
|
|
5
|
-
<div className={'text-center'}>
|
|
6
|
-
<h2 className={'fontbrand text-4xl'}>
|
|
7
|
-
Build video <span className={'fontbrand'}>apps</span>
|
|
8
|
-
</h2>
|
|
9
|
-
<p>
|
|
10
|
-
Use our suite of tools to build apps that lets others create videos.
|
|
11
|
-
</p>
|
|
12
|
-
</div>
|
|
13
|
-
);
|
|
14
|
-
};
|
|
15
|
-
|
|
16
3
|
export const SectionTitle: React.FC<{readonly children: React.ReactNode}> = ({
|
|
17
4
|
children,
|
|
18
5
|
}) => {
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type {SVGProps} from 'react';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
|
|
4
|
+
export const Recorder: React.FC<SVGProps<SVGSVGElement>> = (props) => {
|
|
5
|
+
return (
|
|
6
|
+
<svg viewBox="0 0 700 700" {...props}>
|
|
7
|
+
<path
|
|
8
|
+
d="M0 350C0 115.5 115.5 0 350 0C584.5 0 700 115.5 700 350C700 584.5 584.5 700 350 700C115.5 700 0 584.5 0 350Z"
|
|
9
|
+
fill="#F43B00"
|
|
10
|
+
fillOpacity="0.15"
|
|
11
|
+
/>
|
|
12
|
+
<path
|
|
13
|
+
d="M79.4595 344.324C79.4595 161.794 169.362 71.8915 351.892 71.8915C534.422 71.8915 624.324 161.794 624.324 344.324C624.324 526.854 534.422 616.756 351.892 616.756C169.362 616.756 79.4595 526.854 79.4595 344.324Z"
|
|
14
|
+
fill="#F43B00"
|
|
15
|
+
fillOpacity="0.3"
|
|
16
|
+
/>
|
|
17
|
+
<path
|
|
18
|
+
d="M155.135 343.378C155.135 212.185 219.752 147.567 350.946 147.567C482.139 147.567 546.756 212.185 546.756 343.378C546.756 474.571 482.139 539.189 350.946 539.189C219.752 539.189 155.135 474.571 155.135 343.378Z"
|
|
19
|
+
fill="#F43B00"
|
|
20
|
+
/>
|
|
21
|
+
</svg>
|
|
22
|
+
);
|
|
23
|
+
};
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { useCallback, useEffect, useRef, useState } from 'react';
|
|
3
|
-
export const LightningFastEditor = () => {
|
|
4
|
-
const ref = useRef(null);
|
|
5
|
-
const videoRef = useRef(null);
|
|
6
|
-
const [isIntersecting, setIsIntersecting] = useState(false);
|
|
7
|
-
const callback = useCallback((data) => {
|
|
8
|
-
var _a, _b;
|
|
9
|
-
const { isIntersecting: intersecting } = data[0];
|
|
10
|
-
setIsIntersecting(intersecting);
|
|
11
|
-
if (intersecting) {
|
|
12
|
-
(_a = videoRef.current) === null || _a === void 0 ? void 0 : _a.play();
|
|
13
|
-
}
|
|
14
|
-
else {
|
|
15
|
-
(_b = videoRef.current) === null || _b === void 0 ? void 0 : _b.pause();
|
|
16
|
-
}
|
|
17
|
-
}, []);
|
|
18
|
-
useEffect(() => {
|
|
19
|
-
const { current } = ref;
|
|
20
|
-
if (!current) {
|
|
21
|
-
return;
|
|
22
|
-
}
|
|
23
|
-
const observer = new IntersectionObserver(callback, {
|
|
24
|
-
root: null,
|
|
25
|
-
threshold: 0.2,
|
|
26
|
-
});
|
|
27
|
-
observer.observe(current);
|
|
28
|
-
return () => observer.unobserve(current);
|
|
29
|
-
}, [callback]);
|
|
30
|
-
return (_jsxs("div", { ref: ref, className: 'flex flex-col-reverse lg:flex-row justify-start lg:justify-end lg:text-right items-start lg:items-center', children: [_jsx("div", { children: _jsx("video", { src: "/img/player-demo.mp4", autoPlay: true, muted: true, playsInline: true, loop: true, style: {
|
|
31
|
-
animationPlayState: isIntersecting ? 'running' : 'paused',
|
|
32
|
-
width: 500,
|
|
33
|
-
maxWidth: '100%',
|
|
34
|
-
borderRadius: 7,
|
|
35
|
-
overflow: 'hidden',
|
|
36
|
-
} }) }), _jsxs("div", { style: { flex: 1 }, children: [_jsxs("h2", { className: 'fontbrand text-4xl', children: ["Fast and ", _jsx("br", {}), " ", _jsx("span", { className: "text-brand", children: "delightful" }), " editing"] }), _jsxs("p", { className: "leading-relaxed", children: ["Preview your video in the browser. ", _jsx("br", {}), "Fast refresh while the video is playing. ", _jsx("br", {}), "Scrub through the timeline to get every frame perfect."] })] })] }));
|
|
37
|
-
};
|
|
Binary file
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
import React, {useCallback, useEffect, useRef, useState} from 'react';
|
|
2
|
-
|
|
3
|
-
export const LightningFastEditor: React.FC = () => {
|
|
4
|
-
const ref = useRef<HTMLDivElement>(null);
|
|
5
|
-
const videoRef = useRef<HTMLVideoElement>(null);
|
|
6
|
-
const [isIntersecting, setIsIntersecting] = useState(false);
|
|
7
|
-
|
|
8
|
-
const callback: IntersectionObserverCallback = useCallback((data) => {
|
|
9
|
-
const {isIntersecting: intersecting} = data[0];
|
|
10
|
-
setIsIntersecting(intersecting);
|
|
11
|
-
if (intersecting) {
|
|
12
|
-
videoRef.current?.play();
|
|
13
|
-
} else {
|
|
14
|
-
videoRef.current?.pause();
|
|
15
|
-
}
|
|
16
|
-
}, []);
|
|
17
|
-
|
|
18
|
-
useEffect(() => {
|
|
19
|
-
const {current} = ref;
|
|
20
|
-
if (!current) {
|
|
21
|
-
return;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
const observer = new IntersectionObserver(callback, {
|
|
25
|
-
root: null,
|
|
26
|
-
threshold: 0.2,
|
|
27
|
-
});
|
|
28
|
-
observer.observe(current);
|
|
29
|
-
|
|
30
|
-
return () => observer.unobserve(current);
|
|
31
|
-
}, [callback]);
|
|
32
|
-
return (
|
|
33
|
-
<div
|
|
34
|
-
ref={ref}
|
|
35
|
-
className={
|
|
36
|
-
'flex flex-col-reverse lg:flex-row justify-start lg:justify-end lg:text-right items-start lg:items-center'
|
|
37
|
-
}
|
|
38
|
-
>
|
|
39
|
-
<div>
|
|
40
|
-
<video
|
|
41
|
-
src="/img/player-demo.mp4"
|
|
42
|
-
autoPlay
|
|
43
|
-
muted
|
|
44
|
-
playsInline
|
|
45
|
-
loop
|
|
46
|
-
style={{
|
|
47
|
-
animationPlayState: isIntersecting ? 'running' : 'paused',
|
|
48
|
-
width: 500,
|
|
49
|
-
maxWidth: '100%',
|
|
50
|
-
borderRadius: 7,
|
|
51
|
-
overflow: 'hidden',
|
|
52
|
-
}}
|
|
53
|
-
/>
|
|
54
|
-
</div>
|
|
55
|
-
<div style={{flex: 1}}>
|
|
56
|
-
<h2 className={'fontbrand text-4xl'}>
|
|
57
|
-
Fast and <br /> <span className="text-brand">delightful</span> editing
|
|
58
|
-
</h2>
|
|
59
|
-
<p className="leading-relaxed">
|
|
60
|
-
Preview your video in the browser. <br />
|
|
61
|
-
Fast refresh while the video is playing. <br />
|
|
62
|
-
Scrub through the timeline to get every frame perfect.
|
|
63
|
-
</p>
|
|
64
|
-
</div>
|
|
65
|
-
</div>
|
|
66
|
-
);
|
|
67
|
-
};
|