@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.
Files changed (50) hide show
  1. package/.turbo/turbo-make.log +2 -2
  2. package/dist/Homepage.js +11958 -12155
  3. package/dist/components/Homepage.js +4 -4
  4. package/dist/components/homepage/BackgroundAnimation.js +1 -1
  5. package/dist/components/homepage/CommunityStats.js +1 -1
  6. package/dist/components/homepage/CommunityStatsItems.js +1 -1
  7. package/dist/components/homepage/Counter.d.ts +1 -0
  8. package/dist/components/homepage/Counter.js +15 -7
  9. package/dist/components/homepage/Demo/DisplayedEmoji.js +17 -3
  10. package/dist/components/homepage/FreePricing.js +20 -25
  11. package/dist/components/homepage/GitHubButton.js +1 -1
  12. package/dist/components/homepage/IconForTemplate.js +4 -0
  13. package/dist/components/homepage/IfYouKnowReact.js +5 -2
  14. package/dist/components/homepage/MoreVideoPowerSection.d.ts +2 -0
  15. package/dist/components/homepage/MoreVideoPowerSection.js +16 -0
  16. package/dist/components/homepage/NewsletterButton.js +3 -2
  17. package/dist/components/homepage/ParameterizeAndEdit.d.ts +2 -0
  18. package/dist/components/homepage/ParameterizeAndEdit.js +22 -0
  19. package/dist/components/homepage/RealMp4Videos.js +10 -1
  20. package/dist/components/homepage/VideoAppsShowcase.js +6 -3
  21. package/dist/components/homepage/VideoAppsTitle.d.ts +0 -1
  22. package/dist/components/homepage/VideoAppsTitle.js +1 -4
  23. package/dist/components/icons/recorder.d.ts +3 -0
  24. package/dist/components/icons/recorder.js +4 -0
  25. package/dist/homepage/Pricing.js +131 -90
  26. package/dist/tailwind.css +115 -55
  27. package/package.json +10 -10
  28. package/public/img/editing-safari.mp4 +0 -0
  29. package/public/img/editing-vp9-chrome.webm +0 -0
  30. package/public/img/media-parser.png +0 -0
  31. package/public/img/recorder.png +0 -0
  32. package/public/img/webcodecs.png +0 -0
  33. package/src/components/Homepage.tsx +12 -12
  34. package/src/components/homepage/CommunityStats.tsx +1 -1
  35. package/src/components/homepage/Counter.tsx +17 -7
  36. package/src/components/homepage/Demo/DisplayedEmoji.tsx +22 -4
  37. package/src/components/homepage/FreePricing.tsx +88 -65
  38. package/src/components/homepage/IconForTemplate.tsx +5 -0
  39. package/src/components/homepage/IfYouKnowReact.tsx +26 -14
  40. package/src/components/homepage/MoreVideoPowerSection.tsx +95 -0
  41. package/src/components/homepage/NewsletterButton.tsx +6 -5
  42. package/src/components/homepage/ParameterizeAndEdit.tsx +89 -0
  43. package/src/components/homepage/RealMp4Videos.tsx +55 -13
  44. package/src/components/homepage/VideoAppsShowcase.tsx +21 -10
  45. package/src/components/homepage/VideoAppsTitle.tsx +0 -13
  46. package/src/components/icons/recorder.tsx +23 -0
  47. package/dist/components/homepage/Editor.d.ts +0 -2
  48. package/dist/components/homepage/Editor.js +0 -37
  49. package/public/img/player-demo.mp4 +0 -0
  50. 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-lg rounded-tr-none rounded-br-none'
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={'pl-4 flex-1 lg:pl-4 flex flex-col h-full pt-8 pb-6'}>
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
- target="_blank"
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
- <BlueButton loading={false} size="sm">
250
- {videoApps[activeTab].buttonText}
251
- </BlueButton>
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,2 +0,0 @@
1
- import React from 'react';
2
- export declare const LightningFastEditor: React.FC;
@@ -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
- };