@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
|
@@ -3,18 +3,18 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
3
3
|
import { BackgroundAnimation } from './homepage/BackgroundAnimation';
|
|
4
4
|
import CommunityStats from './homepage/CommunityStats';
|
|
5
5
|
import { Demo } from './homepage/Demo';
|
|
6
|
-
import { LightningFastEditor } from './homepage/Editor';
|
|
7
6
|
import EvaluateRemotionSection from './homepage/EvaluateRemotion';
|
|
8
7
|
import { IfYouKnowReact } from './homepage/IfYouKnowReact';
|
|
9
8
|
import { ColorModeProvider } from './homepage/layout/use-color-mode';
|
|
9
|
+
import { MoreVideoPowerSection } from './homepage/MoreVideoPowerSection';
|
|
10
10
|
import { NewsletterButton } from './homepage/NewsletterButton';
|
|
11
|
+
import { ParameterizeAndEdit } from './homepage/ParameterizeAndEdit';
|
|
11
12
|
import { Pricing } from './homepage/Pricing';
|
|
12
13
|
import { RealMP4Videos } from './homepage/RealMp4Videos';
|
|
13
14
|
import TrustedByBanner from './homepage/TrustedByBanner';
|
|
14
|
-
import { VideoApps } from './homepage/VideoApps';
|
|
15
15
|
import VideoAppsShowcase from './homepage/VideoAppsShowcase';
|
|
16
|
-
import { SectionTitle
|
|
16
|
+
import { SectionTitle } from './homepage/VideoAppsTitle';
|
|
17
17
|
import { WriteInReact } from './homepage/WriteInReact';
|
|
18
18
|
export const NewLanding = ({ colorMode, setColorMode }) => {
|
|
19
|
-
return (_jsx(ColorModeProvider, { colorMode: colorMode, setColorMode: setColorMode, children: _jsx("div", { className: "bg-[var(--background)] relative", children: _jsxs("div", { style: { overflow: 'hidden' }, children: [_jsx("div", { children: _jsx(BackgroundAnimation, {}) }), _jsx("br", {}), _jsx("br", {}), _jsx("br", {}), _jsx("br", {}), _jsxs("div", { className: "max-w-[500px] lg:max-w-[1000px] m-auto pl-5 pr-5 overflow-x-clip md:overflow-x-visible relative", children: [_jsx(WriteInReact, {}), _jsx("br", {}), _jsx(IfYouKnowReact, {}), _jsx(
|
|
19
|
+
return (_jsx(ColorModeProvider, { colorMode: colorMode, setColorMode: setColorMode, children: _jsx("div", { className: "bg-[var(--background)] relative", children: _jsxs("div", { style: { overflow: 'hidden' }, children: [_jsx("div", { children: _jsx(BackgroundAnimation, {}) }), _jsx("br", {}), _jsx("br", {}), _jsx("br", {}), _jsx("br", {}), _jsxs("div", { className: "max-w-[500px] lg:max-w-[1000px] m-auto pl-5 pr-5 overflow-x-clip md:overflow-x-visible relative", children: [_jsx(WriteInReact, {}), _jsx("br", {}), _jsx(IfYouKnowReact, {}), _jsx(ParameterizeAndEdit, {}), _jsx(RealMP4Videos, {}), _jsx("br", {}), _jsx("br", {}), _jsx("br", {}), _jsx(VideoAppsShowcase, {}), _jsx("br", {}), _jsx("br", {}), _jsx(Demo, {}), _jsx("br", {}), _jsx("br", {}), _jsx("br", {}), _jsx(SectionTitle, { children: "Pricing" }), _jsx(Pricing, {}), _jsx(TrustedByBanner, {}), _jsx("br", {}), _jsx(EvaluateRemotionSection, {}), _jsx("br", {}), _jsx("br", {}), _jsx("br", {}), _jsx(CommunityStats, {}), _jsx("br", {}), _jsx("br", {}), _jsx("br", {}), _jsx(SectionTitle, { children: "Even more power to developers" }), _jsx("div", { className: 'fontbrand text-center mb-10 -mt-4', children: "Innovative video products that you might enjoy." }), _jsx(MoreVideoPowerSection, {}), _jsx("br", {}), _jsx("br", {}), _jsx("br", {}), _jsx(NewsletterButton, {}), _jsx("br", {}), _jsx("br", {}), _jsx("br", {})] })] }) }) }));
|
|
20
20
|
};
|
|
@@ -44,7 +44,7 @@ export const BackgroundAnimation = () => {
|
|
|
44
44
|
_style.innerHTML = css;
|
|
45
45
|
document.head.appendChild(_style);
|
|
46
46
|
}, [css]);
|
|
47
|
-
return (_jsx("div", { className: " w-full h-full
|
|
47
|
+
return (_jsx("div", { className: " w-full h-full min-w-0 m-auto lg:relative lg:min-w-[700px] lg:max-w-[1200px] lg:ml-auto lg:left-auto pointer-events-none", children: _jsxs("svg", { className: "translate-y-[-30%] lg:translate-y-[-50%]", viewBox: "0 0 1 1", style: {
|
|
48
48
|
width: '100%',
|
|
49
49
|
position: 'absolute',
|
|
50
50
|
}, children: [_jsx("path", { d: d, fill: "none", stroke: "var(--ifm-color-primary)", strokeLinecap: "round", className: "stroke-[0.04] lg:stroke-[0.035]", style: {
|
|
@@ -2,5 +2,5 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
2
2
|
import { Contributors, DiscordMembers, GitHubStars, InstallsPerMonth, PagesOfDocs, TemplatesAndExamples, } from './CommunityStatsItems';
|
|
3
3
|
import { SectionTitle } from './VideoAppsTitle';
|
|
4
4
|
const SectionLink = ({ href, children }) => (_jsx("a", { target: "_blank", href: href, className: 'no-underline text-inherit contents', children: children }));
|
|
5
|
-
const CommunityStats = () => (_jsxs("div", { className: 'm-auto max-w-[700px] text-center', children: [_jsx(SectionTitle, { children: "Never build alone" }), _jsx("div", { className: 'fontbrand text-center mb-10', children: "Join a thriving community of developers." }), _jsxs("div", { className: 'flex flex-wrap justify-between gap-4 w-full items-center', children: [_jsx(SectionLink, { href: "https://www.npmjs.com/package/remotion", children: _jsx(InstallsPerMonth, {}) }), _jsx(SectionLink, { href: "https://www.remotion.dev/docs/", children: _jsx(PagesOfDocs, {}) }), _jsx(SectionLink, { href: "https://www.remotion.dev/templates", children: _jsx(TemplatesAndExamples, {}) }), _jsx(SectionLink, { href: "https://github.com/remotion-dev/remotion", children: _jsx(GitHubStars, {}) }), _jsx(SectionLink, { href: "https://remotion.dev/discord", children: _jsx(DiscordMembers, {}) }), _jsx(SectionLink, { href: "https://github.com/remotion-dev/remotion/graphs/contributors", children: _jsx(Contributors, {}) })] })] }));
|
|
5
|
+
const CommunityStats = () => (_jsxs("div", { className: 'm-auto max-w-[700px] text-center', children: [_jsx(SectionTitle, { children: "Never build alone" }), _jsx("div", { className: 'fontbrand text-center mb-10 -mt-4', children: "Join a thriving community of developers." }), _jsxs("div", { className: 'flex flex-wrap justify-between gap-4 w-full items-center', children: [_jsx(SectionLink, { href: "https://www.npmjs.com/package/remotion", children: _jsx(InstallsPerMonth, {}) }), _jsx(SectionLink, { href: "https://www.remotion.dev/docs/", children: _jsx(PagesOfDocs, {}) }), _jsx(SectionLink, { href: "https://www.remotion.dev/templates", children: _jsx(TemplatesAndExamples, {}) }), _jsx(SectionLink, { href: "https://github.com/remotion-dev/remotion", children: _jsx(GitHubStars, {}) }), _jsx(SectionLink, { href: "https://remotion.dev/discord", children: _jsx(DiscordMembers, {}) }), _jsx(SectionLink, { href: "https://github.com/remotion-dev/remotion/graphs/contributors", children: _jsx(Contributors, {}) })] })] }));
|
|
6
6
|
export default CommunityStats;
|
|
@@ -30,7 +30,7 @@ export const PagesOfDocs = () => {
|
|
|
30
30
|
};
|
|
31
31
|
export const TemplatesAndExamples = () => (_jsxs(Pill, { className: "w-[30%] flex items-center flex-row", children: [_jsx(StatItemContent, { content: "35", width: "60px", fontSize: "2.7rem", fontWeight: "bold" }), _jsx(StatItemContent, { content: "templates & examples", width: "135px", fontSize: "1.35rem", fontWeight: "bold" })] }));
|
|
32
32
|
export const GitHubStars = () => {
|
|
33
|
-
return (_jsxs(Pill, { className: "w-[30%] flex-col", children: [_jsxs("div", { style: { display: 'flex', alignItems: 'center' }, children: [_jsx(StatItemContent, { content: _jsx("svg", { width: "40", height: "40", viewBox: "0 0 26 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: _jsx("path", { d: "M12.9951 0C13.4424 0 13.8507 0.24375 14.0451 0.632812L17.3799 7.25625L24.8271 8.31562C25.2646 8.37656 25.6292 8.67188 25.7653 9.07969C25.9014 9.4875 25.7896 9.92812 25.4785 10.2281L20.0778 15.3937L21.3514 22.6875C21.4243 23.1094 21.2444 23.5359 20.8799 23.7891C20.5153 24.0422 20.0389 24.0703 19.65 23.8688L12.9903 20.4375L6.34027 23.8641C5.94652 24.0656 5.47014 24.0375 5.11041 23.7844C4.75069 23.5312 4.56597 23.1047 4.63889 22.6828L5.9125 15.3891L0.511803 10.2281C0.195831 9.92812 0.0888863 9.48281 0.224997 9.07969C0.361108 8.67656 0.725692 8.38125 1.16319 8.31562L8.61041 7.25625L11.9451 0.632812C12.1444 0.24375 12.5479 0 12.9951 0ZM12.9951 3.70312L10.4431 8.775C10.2729 9.10781 9.94722 9.34219 9.56319 9.39844L3.8125 10.2141L7.98819 14.2031C8.25555 14.4609 8.38194 14.8266 8.31875 15.1875L7.33194 20.7984L12.4458 18.1641C12.791 17.9859 13.2042 17.9859 13.5444 18.1641L18.6583 20.7984L17.6764 15.1922C17.6132 14.8313 17.7347 14.4656 18.0069 14.2078L22.1826 10.2188L16.4319 9.39844C16.0528 9.34219 15.7222 9.1125 15.5521 8.775L12.9951 3.70312Z", fill: "var(--text-color)" }) }), width: "45px" }), _jsx(StatItemContent, { content: "
|
|
33
|
+
return (_jsxs(Pill, { className: "w-[30%] flex-col", children: [_jsxs("div", { style: { display: 'flex', alignItems: 'center' }, children: [_jsx(StatItemContent, { content: _jsx("svg", { width: "40", height: "40", viewBox: "0 0 26 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: _jsx("path", { d: "M12.9951 0C13.4424 0 13.8507 0.24375 14.0451 0.632812L17.3799 7.25625L24.8271 8.31562C25.2646 8.37656 25.6292 8.67188 25.7653 9.07969C25.9014 9.4875 25.7896 9.92812 25.4785 10.2281L20.0778 15.3937L21.3514 22.6875C21.4243 23.1094 21.2444 23.5359 20.8799 23.7891C20.5153 24.0422 20.0389 24.0703 19.65 23.8688L12.9903 20.4375L6.34027 23.8641C5.94652 24.0656 5.47014 24.0375 5.11041 23.7844C4.75069 23.5312 4.56597 23.1047 4.63889 22.6828L5.9125 15.3891L0.511803 10.2281C0.195831 9.92812 0.0888863 9.48281 0.224997 9.07969C0.361108 8.67656 0.725692 8.38125 1.16319 8.31562L8.61041 7.25625L11.9451 0.632812C12.1444 0.24375 12.5479 0 12.9951 0ZM12.9951 3.70312L10.4431 8.775C10.2729 9.10781 9.94722 9.34219 9.56319 9.39844L3.8125 10.2141L7.98819 14.2031C8.25555 14.4609 8.38194 14.8266 8.31875 15.1875L7.33194 20.7984L12.4458 18.1641C12.791 17.9859 13.2042 17.9859 13.5444 18.1641L18.6583 20.7984L17.6764 15.1922C17.6132 14.8313 17.7347 14.4656 18.0069 14.2078L22.1826 10.2188L16.4319 9.39844C16.0528 9.34219 15.7222 9.1125 15.5521 8.775L12.9951 3.70312Z", fill: "var(--text-color)" }) }), width: "45px" }), _jsx(StatItemContent, { content: "22k", width: "80px", fontSize: "2.5rem", fontWeight: "bold" })] }), _jsx(StatItemContent, { content: "GitHub stars", width: "125px", fontSize: "1.0rem", fontWeight: "bold" })] }));
|
|
34
34
|
};
|
|
35
35
|
export const DiscordMembers = () => {
|
|
36
36
|
return (_jsx(Pill, { className: 'w-[30%]', children: _jsxs("div", { style: {
|
|
@@ -23,22 +23,30 @@ const buttonContainer = {
|
|
|
23
23
|
backgroundColor: 'inherit',
|
|
24
24
|
cursor: 'pointer',
|
|
25
25
|
};
|
|
26
|
-
export const Counter = ({ count, setCount, minCount = 0, }) => {
|
|
26
|
+
export const Counter = ({ count, setCount, minCount = 0, step = 1, }) => {
|
|
27
27
|
const decrement = () => {
|
|
28
28
|
if (count > minCount) {
|
|
29
|
-
setCount(count -
|
|
29
|
+
setCount(Math.max(minCount, count - step));
|
|
30
30
|
}
|
|
31
31
|
};
|
|
32
32
|
const increment = () => {
|
|
33
|
-
setCount(count +
|
|
33
|
+
setCount(count + step);
|
|
34
34
|
};
|
|
35
|
-
return (_jsxs("div", { style: container, className: cn('border-effect w-[
|
|
35
|
+
return (_jsxs("div", { style: container, className: cn('border-effect w-[140px] text-text'), children: [_jsx("input", { className: 'fontbrand text-2xl font-medium min-w-[80px] border-0 text-end bg-transparent outline-0 text-text', type: "number", onClick: (e) => e.currentTarget.select(), value: count, onChange: (e) => {
|
|
36
36
|
if (e.target.value.trim() === '') {
|
|
37
|
-
setCount(1);
|
|
37
|
+
setCount(step === 1 ? 1 : minCount);
|
|
38
38
|
return;
|
|
39
39
|
}
|
|
40
|
-
const
|
|
41
|
-
|
|
40
|
+
const inputValue = parseInt(e.target.value, 10);
|
|
41
|
+
const validValue = Math.max(inputValue, minCount);
|
|
42
|
+
// For steps > 1, round to the nearest valid step
|
|
43
|
+
if (step > 1) {
|
|
44
|
+
const roundedValue = Math.round(validValue / step) * step;
|
|
45
|
+
setCount(Math.max(roundedValue, minCount));
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
setCount(validValue);
|
|
49
|
+
}
|
|
42
50
|
} }), _jsxs("div", { className: "flex flex-col ml-3 h-full", children: [_jsx("button", { type: "button", className: "border-0 border-l-2 border-l-solid border-b-2 flex-1 border-text", style: {
|
|
43
51
|
...buttonContainer,
|
|
44
52
|
}, onClick: increment, children: _jsx(Triangle, { rotated: false }) }), _jsx("button", { type: "button", className: "border-0 border-l-2 border-l-solid flex-1 border-text", style: {
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { Lottie, getLottieMetadata } from '@remotion/lottie';
|
|
3
2
|
import { useEffect, useMemo, useState } from 'react';
|
|
4
3
|
import { cancelRender, continueRender, delayRender, useVideoConfig, } from 'remotion';
|
|
5
4
|
export const DisplayedEmoji = ({ emoji }) => {
|
|
6
5
|
const [data, setData] = useState(null);
|
|
7
6
|
const { durationInFrames, fps } = useVideoConfig();
|
|
7
|
+
const [browser, setBrowser] = useState(typeof document !== 'undefined');
|
|
8
8
|
const src = useMemo(() => {
|
|
9
9
|
if (emoji === 'melting') {
|
|
10
10
|
return 'https://fonts.gstatic.com/s/e/notoemoji/latest/1fae0/lottie.json';
|
|
@@ -19,8 +19,14 @@ export const DisplayedEmoji = ({ emoji }) => {
|
|
|
19
19
|
}, [emoji]);
|
|
20
20
|
const [handle] = useState(() => delayRender());
|
|
21
21
|
useEffect(() => {
|
|
22
|
-
Promise.all([
|
|
23
|
-
.then((
|
|
22
|
+
Promise.all([
|
|
23
|
+
fetch(src).then((res) => res.json()),
|
|
24
|
+
import('@remotion/lottie').then(({ Lottie, getLottieMetadata }) => ({
|
|
25
|
+
Lottie,
|
|
26
|
+
getLottieMetadata,
|
|
27
|
+
})),
|
|
28
|
+
])
|
|
29
|
+
.then(([json, { Lottie, getLottieMetadata }]) => {
|
|
24
30
|
var _a;
|
|
25
31
|
setData({
|
|
26
32
|
Lottie,
|
|
@@ -33,6 +39,14 @@ export const DisplayedEmoji = ({ emoji }) => {
|
|
|
33
39
|
cancelRender(err);
|
|
34
40
|
});
|
|
35
41
|
}, [handle, src]);
|
|
42
|
+
useEffect(() => {
|
|
43
|
+
if (typeof document !== 'undefined') {
|
|
44
|
+
setBrowser(true);
|
|
45
|
+
}
|
|
46
|
+
}, []);
|
|
47
|
+
if (!browser) {
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
36
50
|
if (!data) {
|
|
37
51
|
return null;
|
|
38
52
|
}
|
|
@@ -20,7 +20,7 @@ const PriceTag = ({ children }) => {
|
|
|
20
20
|
return (_jsx("div", { className: 'fontbrand text-2xl font-bold min-w-[80px] w-auto text-right shrink-0 ml-4', children: children }));
|
|
21
21
|
};
|
|
22
22
|
const SmallPriceTag = ({ children }) => {
|
|
23
|
-
return (_jsx("div", { className: 'fontbrand text-2xl font-medium w-auto min-w-[80px] text-right shrink-0
|
|
23
|
+
return (_jsx("div", { className: 'fontbrand text-2xl font-medium w-auto min-w-[80px] text-right shrink-0', children: children }));
|
|
24
24
|
};
|
|
25
25
|
export const FreePricing = () => {
|
|
26
26
|
return (_jsxs(Container, { children: [_jsx(Audience, { children: "For individuals and companies of up to 3 people" }), _jsx(Title, { children: "Free License" }), _jsx(PricingBulletPoint, { text: "Unlimited videos", checked: true }), _jsx(PricingBulletPoint, { text: "Commercial use allowed", checked: true }), _jsx(PricingBulletPoint, { text: "Self-hosted cloud rendering allowed", checked: true }), _jsx(PricingBulletPoint, { text: "Must upgrade when your team grows", checked: false })] }));
|
|
@@ -38,10 +38,14 @@ export const EnterpriseLicense = () => {
|
|
|
38
38
|
const SEAT_PRICE = 25;
|
|
39
39
|
const RENDER_UNIT_PRICE = 10;
|
|
40
40
|
const WEBCODECS_UNIT_PRICE = 10;
|
|
41
|
+
const icon = {
|
|
42
|
+
height: 16,
|
|
43
|
+
marginLeft: 4,
|
|
44
|
+
};
|
|
41
45
|
export const CompanyPricing = () => {
|
|
42
46
|
const [devSeatCount, setDevSeatCount] = React.useState(1);
|
|
43
|
-
const [
|
|
44
|
-
const [
|
|
47
|
+
const [cloudRenders, setCloudRenders] = React.useState(1000);
|
|
48
|
+
const [creations, setCreations] = React.useState(1000);
|
|
45
49
|
const formatPrice = useCallback((price) => {
|
|
46
50
|
const formatter = new Intl.NumberFormat('en-US', {
|
|
47
51
|
style: 'currency',
|
|
@@ -52,29 +56,20 @@ export const CompanyPricing = () => {
|
|
|
52
56
|
}, []);
|
|
53
57
|
const totalPrice = useMemo(() => {
|
|
54
58
|
return Math.max(100, devSeatCount * SEAT_PRICE +
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
}, [
|
|
59
|
+
(cloudRenders / 1000) * RENDER_UNIT_PRICE +
|
|
60
|
+
(creations / 1000) * WEBCODECS_UNIT_PRICE);
|
|
61
|
+
}, [cloudRenders, devSeatCount, creations]);
|
|
58
62
|
const totalPriceString = useMemo(() => {
|
|
59
63
|
return formatPrice(totalPrice);
|
|
60
64
|
}, [formatPrice, totalPrice]);
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
return formatter.format(webcodecsUnits * 1000);
|
|
72
|
-
}, [webcodecsUnits]);
|
|
73
|
-
return (_jsxs(Container, { children: [_jsx(Audience, { children: "For collaborations and companies of 4+ people" }), _jsx(Title, { children: "Company License" }), _jsx(PricingBulletPoint, { text: "Commercial use allowed", checked: true }), _jsx(PricingBulletPoint, { text: "Self-hosted cloud rendering allowed", checked: true }), _jsx(PricingBulletPoint, { text: "Prioritized Support", checked: true }), _jsx(PricingBulletPoint, { text: "$250 Mux credits", checked: true, children: _jsx(InfoTooltip, { text: "Credits for Mux.com. Applies only to new Mux customers." }) }), _jsx("div", { style: { height: 30 } }), _jsxs("div", { className: 'flex flex-row items-center', children: [_jsxs("div", { style: textUnitWrapper, children: [_jsx("div", { className: 'fontbrand font-bold text-lg', children: "Developer Seats" }), _jsx("div", { className: 'text-muted fontbrand text-sm', children: "Number of developers working with Remotion" })] }), _jsx("div", { style: { flex: 3 } }), _jsx(Counter, { count: devSeatCount, setCount: setDevSeatCount, minCount: 1 }), _jsxs(SmallPriceTag, { children: ["$", new Intl.NumberFormat('en-US', {
|
|
74
|
-
maximumFractionDigits: 0,
|
|
75
|
-
}).format(SEAT_PRICE * devSeatCount)] })] }), _jsx("div", { style: { height: 14 } }), _jsxs("div", { className: 'flex flex-row items-center', children: [_jsxs("div", { style: textUnitWrapper, children: [_jsx("div", { className: 'fontbrand font-bold text-lg', children: "Cloud Rendering Units" }), _jsxs("div", { className: 'text-muted fontbrand text-sm', children: ["Allows for ", rendersPerMonth, ' ', _jsx("a", { href: "https://www.remotion.dev/docs/compare-ssr", className: "underline underline-offset-4 text-inherit", children: "self-hosted renders per month" }), ' ', "each"] })] }), _jsx("div", { style: { flex: 3 } }), _jsx(Counter, { count: cloudUnitCount, setCount: setCloudUnitCount, minCount: 0 }), _jsxs(SmallPriceTag, { children: ["$", new Intl.NumberFormat('en-US', {
|
|
76
|
-
maximumFractionDigits: 0,
|
|
77
|
-
}).format(RENDER_UNIT_PRICE * cloudUnitCount)] })] }), _jsx("div", { style: { height: 14 } }), _jsxs("div", { className: 'flex flex-row items-center', children: [_jsxs("div", { style: textUnitWrapper, children: [_jsx("div", { className: 'fontbrand font-bold text-lg', children: "WebCodecs Conversion Units" }), _jsxs("div", { className: 'text-muted fontbrand text-sm', children: ["Allows for", ' ', _jsxs("a", { className: "underline underline-offset-4 text-inherit", href: "https://remotion.dev/webcodecs", children: [conversionsPerMonth, " client-side video conversions", ' '] })] })] }), _jsx("div", { style: { flex: 3 } }), _jsx(Counter, { count: webcodecsUnits, setCount: setWebcodecsUnits, minCount: 0 }), _jsxs(SmallPriceTag, { children: ["$", new Intl.NumberFormat('en-US', {
|
|
78
|
-
maximumFractionDigits: 0,
|
|
79
|
-
}).format(RENDER_UNIT_PRICE * webcodecsUnits)] })] }), _jsx("div", { style: { height: 20 } }), _jsx("div", { className: 'flex flex-row justify-end', children: _jsxs("div", { style: { ...textUnitWrapper, alignItems: 'flex-end' }, children: [_jsxs(PriceTag, { children: [totalPriceString, "/mo"] }), _jsx(BottomInfo, { "data-visible": totalPrice <= 100, className: "opacity-0 data-[visible=true]:opacity-100 transition-opacity", children: "The minimum is $100 per month" })] }) })] }));
|
|
65
|
+
return (_jsxs(Container, { children: [_jsx(Audience, { children: "For collaborations and companies of 4+ people" }), _jsx(Title, { children: "Company License" }), _jsx(PricingBulletPoint, { text: "Commercial use allowed", checked: true }), _jsx(PricingBulletPoint, { text: "Self-hosted cloud rendering allowed", checked: true }), _jsx(PricingBulletPoint, { text: "Prioritized Support", checked: true }), _jsx(PricingBulletPoint, { text: "$250 Mux credits", checked: true, children: _jsx(InfoTooltip, { text: "Credits for Mux.com. Applies only to new Mux customers." }) }), _jsx("div", { style: { height: 30 } }), _jsxs("div", { className: 'flex flex-col md:flex-row md:items-center', children: [_jsxs("div", { style: textUnitWrapper, children: [_jsx("div", { className: 'fontbrand font-bold text-lg', children: "Developer Seats" }), _jsx("div", { className: 'text-muted fontbrand text-sm', children: "Number of developers working with Remotion" })] }), _jsx("div", { style: { flex: 3 }, className: "hidden md:block" }), _jsxs("div", { className: "flex flex-row items-center justify-between mt-3 md:mt-0", children: [_jsx(Counter, { count: devSeatCount, setCount: setDevSeatCount, minCount: 1 }), _jsxs(SmallPriceTag, { children: ["$", new Intl.NumberFormat('en-US', {
|
|
66
|
+
maximumFractionDigits: 0,
|
|
67
|
+
}).format(SEAT_PRICE * devSeatCount)] })] })] }), _jsx("div", { style: { height: 14 } }), _jsxs("div", { className: 'flex flex-col md:flex-row md:items-center', children: [_jsxs("div", { style: textUnitWrapper, children: [_jsx("div", { className: 'fontbrand font-bold text-lg', children: "Server renders" }), _jsx("div", { className: 'text-muted fontbrand text-sm', children: _jsx("a", { href: "https://www.remotion.dev/docs/compare-ssr", className: "underline underline-offset-4 text-inherit", children: "Renders per month (self-hosted)" }) })] }), _jsx("div", { style: { flex: 3 }, className: "hidden md:block" }), _jsxs("div", { className: "flex flex-row items-center justify-between mt-3 md:mt-0", children: [_jsx(Counter, { count: cloudRenders, setCount: setCloudRenders, minCount: 0, step: 1000 }), _jsxs(SmallPriceTag, { children: ["$", new Intl.NumberFormat('en-US', {
|
|
68
|
+
maximumFractionDigits: 0,
|
|
69
|
+
}).format((cloudRenders / 1000) * RENDER_UNIT_PRICE)] })] })] }), _jsx("div", { style: { height: 14 } }), _jsxs("div", { className: 'flex flex-col md:flex-row md:items-center', children: [_jsxs("div", { style: textUnitWrapper, children: [_jsx("div", { className: 'fontbrand font-bold text-lg', children: "WebCodecs video creations" }), _jsx("div", { className: 'text-muted fontbrand text-sm', children: _jsx("a", { className: "underline underline-offset-4 text-inherit", href: "https://remotion.dev/webcodecs", children: "Client-side video creations per month" }) })] }), _jsx("div", { style: { flex: 3 }, className: "hidden md:block" }), _jsxs("div", { className: "flex flex-row items-center justify-between mt-3 md:mt-0", children: [_jsx(Counter, { count: creations, setCount: setCreations, minCount: 0, step: 1000 }), _jsxs(SmallPriceTag, { children: ["$", new Intl.NumberFormat('en-US', {
|
|
70
|
+
maximumFractionDigits: 0,
|
|
71
|
+
}).format((creations / 1000) * WEBCODECS_UNIT_PRICE)] })] })] }), _jsx("div", { style: { height: 20 } }), _jsx("div", { className: 'flex flex-row justify-end', children: _jsxs("div", { style: { ...textUnitWrapper, alignItems: 'flex-end' }, children: [_jsxs(PriceTag, { children: [totalPriceString, "/mo"] }), _jsx(BottomInfo, { "data-visible": totalPrice <= 100, className: "opacity-0 data-[visible=true]:opacity-100 transition-opacity", children: "The minimum is $100 per month" })] }) }), _jsx("div", { className: 'flex flex-row justify-end mt-4', children: _jsx("div", { style: {
|
|
72
|
+
...textUnitWrapper,
|
|
73
|
+
alignItems: 'flex-end',
|
|
74
|
+
}, children: _jsxs("a", { href: "https://remotion.pro/dashboard", className: "font-brand text-brand flex flex-row items-center gap-1 no-underline", children: ["Buy now", ' ', _jsx("svg", { style: icon, xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 448 512", children: _jsx("path", { fill: "currentColor", 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" }) })] }) }) })] }));
|
|
80
75
|
};
|
|
@@ -3,5 +3,5 @@ const GithubIcon = () => {
|
|
|
3
3
|
return (_jsx("svg", { viewBox: "0 0 496 512", style: { height: 24, marginRight: 8 }, children: _jsx("path", { fill: "currentColor", d: "M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z" }) }));
|
|
4
4
|
};
|
|
5
5
|
export const GithubButton = () => {
|
|
6
|
-
return (_jsxs("div", { className: "flex flex-row items-center text-base", children: [_jsx(GithubIcon, {}), " ", _jsx("span", { children: "GitHub" }), ' ', _jsx("div", { className: "text-xs inline-block ml-2 leading-none mt-[3px] self-center", children: '
|
|
6
|
+
return (_jsxs("div", { className: "flex flex-row items-center text-base", children: [_jsx(GithubIcon, {}), " ", _jsx("span", { children: "GitHub" }), ' ', _jsx("div", { className: "text-xs inline-block ml-2 leading-none mt-[3px] self-center", children: '22k' })] }));
|
|
7
7
|
};
|
|
@@ -6,6 +6,7 @@ import { JSIcon } from '../icons/js';
|
|
|
6
6
|
import { MusicIcon } from '../icons/music';
|
|
7
7
|
import { NextIcon } from '../icons/next';
|
|
8
8
|
import { OverlayIcon } from '../icons/overlay';
|
|
9
|
+
import { Recorder } from '../icons/recorder';
|
|
9
10
|
import { ReactRouterIcon } from '../icons/remix';
|
|
10
11
|
import { SkiaIcon } from '../icons/skia';
|
|
11
12
|
import { Stargazer } from '../icons/stargazer';
|
|
@@ -74,6 +75,9 @@ export const IconForTemplate = ({ template, scale = 1 }) => {
|
|
|
74
75
|
if (template.cliId === 'overlay') {
|
|
75
76
|
return _jsx(OverlayIcon, { style: { height: scale * 42 } });
|
|
76
77
|
}
|
|
78
|
+
if (template.cliId === 'recorder') {
|
|
79
|
+
return _jsx(Recorder, { style: { height: scale * 36 } });
|
|
80
|
+
}
|
|
77
81
|
if (template.cliId === 'next' ||
|
|
78
82
|
template.cliId === 'next-tailwind' ||
|
|
79
83
|
template.cliId === 'next-pages-dir') {
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { useEffect, useState } from 'react';
|
|
3
|
-
import { BlueButton } from './layout/Button';
|
|
4
3
|
export const isWebkit = () => {
|
|
5
4
|
if (typeof window === 'undefined') {
|
|
6
5
|
return false;
|
|
@@ -9,6 +8,10 @@ export const isWebkit = () => {
|
|
|
9
8
|
const isChrome = Boolean(navigator.userAgent.match(/CriOS\//));
|
|
10
9
|
return isSafariUserAgent || isChrome;
|
|
11
10
|
};
|
|
11
|
+
const icon = {
|
|
12
|
+
height: 16,
|
|
13
|
+
marginLeft: 10,
|
|
14
|
+
};
|
|
12
15
|
export const IfYouKnowReact = () => {
|
|
13
16
|
const [vid, setVid] = useState('/img/compose.webm');
|
|
14
17
|
useEffect(() => {
|
|
@@ -16,5 +19,5 @@ export const IfYouKnowReact = () => {
|
|
|
16
19
|
setVid('/img/compose.mp4');
|
|
17
20
|
}
|
|
18
21
|
}, []);
|
|
19
|
-
return (_jsxs("div", { className: "flex flex-col lg:flex-row text-left
|
|
22
|
+
return (_jsxs("div", { className: "flex flex-col lg:flex-row text-left justify-start lg:justify-end items-start lg:mb-0 gap-6 mt-8", children: [_jsx("video", { src: vid, muted: true, autoPlay: true, playsInline: true, loop: true, className: "w-[500px] cursor-default! relative lg:-translate-x-8 -mb-40 lg:mt-0 lg:mb-0" }), _jsxs("div", { children: [_jsxs("h2", { className: "text-4xl fontbrand pt-20", children: [_jsx("span", { className: "text-brand", children: "Compose" }), " with code"] }), _jsx("p", { className: "leading-relaxed font-brand", children: "Use React, a powerful frontend technology, to create sophisticated videos with code." }), _jsx("div", { className: "h-4" }), _jsxs("a", { className: "no-underline text-brand font-brand font-bold inline-flex flex-row items-center", href: "/docs/the-fundamentals", children: ["Learn Remotion", ' ', _jsx("svg", { style: icon, xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 448 512", children: _jsx("path", { fill: "currentColor", 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" }) })] })] })] }));
|
|
20
23
|
};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
const StepTitle = ({ children }) => {
|
|
3
|
+
return (_jsx("div", { className: "text-left text-xl font-semibold fontbrand", children: children }));
|
|
4
|
+
};
|
|
5
|
+
const Subtitle = ({ children }) => {
|
|
6
|
+
return (_jsx("div", { className: "text-left text-base fontbrand text-[var(--subtitle)]", children: children }));
|
|
7
|
+
};
|
|
8
|
+
const Pane = ({ children, className }) => {
|
|
9
|
+
return (_jsx("div", { className: `border-effect bg-pane flex-1 flex flex-col ${className || ''}`, children: children }));
|
|
10
|
+
};
|
|
11
|
+
const FeatureCard = ({ title, subtitle, image, link }) => {
|
|
12
|
+
return (_jsxs("a", { href: link, className: "group lg:border-r-2 border-b lg:border-b-0 border-[var(--border)] cursor-pointer hover:bg-[var(--hover)] transition-colors no-underline text-inherit", children: [_jsx("div", { className: "relative", children: _jsx("img", { src: image, alt: title, className: "w-full h-auto" }) }), _jsxs("div", { className: "p-4", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(StepTitle, { children: title }), _jsx("svg", { width: "16", viewBox: "0 0 448 512", fill: "currentColor", className: "opacity-0 group-hover:opacity-100 transition-opacity", children: _jsx("path", { d: "M438.6 278.6c12.5-12.5 12.5-32.8 0-45.3l-160-160c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L338.8 224 32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l306.7 0L233.4 393.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l160-160z" }) })] }), _jsx(Subtitle, { children: subtitle }), _jsx("br", {}), _jsx("div", { className: "flex-1" })] })] }));
|
|
13
|
+
};
|
|
14
|
+
export const MoreVideoPowerSection = () => {
|
|
15
|
+
return (_jsx("div", { className: "w-full", children: _jsx(Pane, { className: "overflow-hidden", children: _jsxs("div", { className: "grid grid-cols-1 lg:grid-cols-3 h-full", children: [_jsx(FeatureCard, { title: "Media Parser", subtitle: "A new multimedia library for the web", image: "/img/media-parser.png", link: "/media-parser" }), _jsx(FeatureCard, { title: "WebCodecs", subtitle: "Read, process, transform and create videos on the frontend", image: "/img/webcodecs.png", link: "/webcodecs" }), _jsx(FeatureCard, { title: "Recorder", subtitle: "Produce engaging screencasts end-to-end in JavaScript", image: "/img/recorder.png", link: "/recorder" })] }) }) }));
|
|
16
|
+
};
|
|
@@ -2,6 +2,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
2
2
|
import { useCallback, useState } from 'react';
|
|
3
3
|
import { BlueButton } from './layout/Button';
|
|
4
4
|
import { Spacer } from './Spacer';
|
|
5
|
+
import { SectionTitle } from './VideoAppsTitle';
|
|
5
6
|
export const NewsletterButton = () => {
|
|
6
7
|
const [email, setEmail] = useState('');
|
|
7
8
|
const [submitting, setSubmitting] = useState(false);
|
|
@@ -32,7 +33,7 @@ export const NewsletterButton = () => {
|
|
|
32
33
|
alert('Something went wrong. Please try again later.');
|
|
33
34
|
}
|
|
34
35
|
}, [email]);
|
|
35
|
-
return (_jsx("div", { children: _jsx("div", { className: "flex flex-col", children: _jsx("div", { className: 'w-full', children: _jsxs("div", { className: '
|
|
36
|
+
return (_jsx("div", { children: _jsx("div", { className: "flex flex-col", children: _jsx("div", { className: 'w-full', children: _jsxs("div", { className: 'flex flex-col flex-1', children: [_jsx(SectionTitle, { children: "Newsletter" }), _jsxs("form", { onSubmit: handleSubmit, style: {
|
|
36
37
|
width: '100%',
|
|
37
|
-
}, children: [
|
|
38
|
+
}, children: [_jsxs("div", { className: 'fontbrand text-center mb-10 -mt-4', children: ["Read about new features and noteworthy updates we have made on Remotion once in a while.", ' '] }), _jsx("input", { className: "w-full dark:bg-[#121212] rounded-lg border-effect border-black outline-none px-3 py-3 fontbrand text-lg box-border focus:border-brand", disabled: submitting, value: email, onChange: (e) => setEmail(e.target.value), type: 'email', required: true, placeholder: "animator@gmail.com" }), _jsx(Spacer, {}), _jsx(Spacer, {}), _jsx("div", { children: _jsx(BlueButton, { type: "submit", className: "w-full", loading: submitting, disabled: submitting || subscribed, size: "sm", children: subscribed ? 'Subscribed!' : 'Subscribe' }) })] })] }) }) }) }));
|
|
38
39
|
};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useRef, useState } from 'react';
|
|
3
|
+
import { isWebkit } from './IfYouKnowReact';
|
|
4
|
+
const icon = {
|
|
5
|
+
height: 16,
|
|
6
|
+
marginLeft: 10,
|
|
7
|
+
};
|
|
8
|
+
export const ParameterizeAndEdit = () => {
|
|
9
|
+
const ref = useRef(null);
|
|
10
|
+
const [vid, setVid] = useState('/img/editing-vp9-chrome.webm');
|
|
11
|
+
useEffect(() => {
|
|
12
|
+
if (isWebkit()) {
|
|
13
|
+
setVid('/img/editing-safari.mp4');
|
|
14
|
+
}
|
|
15
|
+
}, []);
|
|
16
|
+
return (_jsxs("div", { ref: ref, className: 'flex flex-col lg:flex-row justify-start lg:justify-end items-start gap-6 mt-20 lg:mt-0', children: [_jsx("div", { children: _jsx("video", { src: vid, autoPlay: true, muted: true, playsInline: true, loop: true, style: {
|
|
17
|
+
width: 500,
|
|
18
|
+
maxWidth: '100%',
|
|
19
|
+
borderRadius: 7,
|
|
20
|
+
overflow: 'hidden',
|
|
21
|
+
} }) }), _jsxs("div", { style: { flex: 1 }, className: "font-brand pt-4", children: [_jsxs("h2", { className: 'fontbrand text-4xl', children: ["Edit ", _jsx("span", { className: "text-brand", children: "dynamically" })] }), _jsxs("p", { className: "leading-relaxed", children: ["Parameterize your video by passing data.", _jsx("br", {}), "Or embed it into your app and build an interface around it."] }), _jsx("div", { className: "h-4" }), _jsxs("div", { className: "leading-6", children: [_jsxs("a", { className: "no-underline text-brand font-brand font-bold inline-flex flex-row items-center", href: "/docs/studio", children: ["Remotion Studio", ' ', _jsx("svg", { style: icon, xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 448 512", children: _jsx("path", { fill: "currentColor", 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" }) })] }), _jsx("br", {}), _jsxs("a", { className: "no-underline text-brand font-brand font-bold inline-flex flex-row items-center", href: "/player", children: ["Remotion Player", ' ', _jsx("svg", { style: icon, xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 448 512", children: _jsx("path", { fill: "currentColor", 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" }) })] })] })] })] }));
|
|
22
|
+
};
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { useEffect, useRef, useState } from 'react';
|
|
3
3
|
import { isWebkit } from './IfYouKnowReact';
|
|
4
|
+
const icon = {
|
|
5
|
+
height: 16,
|
|
6
|
+
marginLeft: 10,
|
|
7
|
+
};
|
|
4
8
|
export const RealMP4Videos = () => {
|
|
5
9
|
const ref = useRef(null);
|
|
6
10
|
const videoRef = useRef(null);
|
|
@@ -28,5 +32,10 @@ export const RealMP4Videos = () => {
|
|
|
28
32
|
observer.observe(current);
|
|
29
33
|
return () => observer.unobserve(current);
|
|
30
34
|
}, []);
|
|
31
|
-
return (_jsxs("div", { ref: ref, className: 'flex flex-col lg:flex-row
|
|
35
|
+
return (_jsxs("div", { ref: ref, className: 'flex flex-col lg:flex-row mt-40 lg:mt-30 gap-6', children: [_jsx("div", { className: "flex w-[500px] justify-start lg:justify-start items-end", children: _jsx("video", { ref: videoRef, src: vid, muted: true, autoPlay: true, playsInline: true, loop: true, style: {
|
|
36
|
+
width: 400,
|
|
37
|
+
maxWidth: '100%',
|
|
38
|
+
borderRadius: 7,
|
|
39
|
+
overflow: 'hidden',
|
|
40
|
+
}, className: "w-[550px] cursor-default! relative lg:translate-x-8 -mt-20 lg:mt-0" }) }), ' ', _jsxs("div", { className: "font-brand", children: [_jsxs("h2", { className: "text-4xl fontbrand", children: [_jsx("span", { className: 'text-brand', children: "Scalable" }), " rendering"] }), _jsxs("p", { className: "leading-relaxed", children: ["Render the video .mp4 or other formats. ", _jsx("br", {}), "Locally, on the server or serverless."] }), ' ', _jsx("div", { className: "h-4" }), _jsxs("div", { className: "leading-6", children: [_jsxs("a", { className: "no-underline text-brand font-brand font-bold inline-flex flex-row items-center", href: "/docs/render", children: ["Render options", ' ', _jsx("svg", { style: icon, xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 448 512", children: _jsx("path", { fill: "currentColor", 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" }) })] }), _jsx("br", {}), _jsxs("a", { className: "no-underline text-brand font-brand font-bold inline-flex flex-row items-center", href: "/lambda", children: ["Remotion Lambda", ' ', _jsx("svg", { style: icon, xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 448 512", children: _jsx("path", { fill: "currentColor", 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" }) })] })] })] })] }));
|
|
32
41
|
};
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { useEffect, useRef, useState } from 'react';
|
|
3
|
-
import { BlueButton } from './layout/Button';
|
|
4
3
|
import { MuxVideo } from './MuxVideo';
|
|
5
4
|
import { SectionTitle } from './VideoAppsTitle';
|
|
6
5
|
const tabs = [
|
|
@@ -49,6 +48,10 @@ const videoApps = [
|
|
|
49
48
|
buttonText: 'GitHub Unwrapped website',
|
|
50
49
|
},
|
|
51
50
|
];
|
|
51
|
+
const icon = {
|
|
52
|
+
height: 16,
|
|
53
|
+
marginLeft: 10,
|
|
54
|
+
};
|
|
52
55
|
const VideoAppsShowcase = () => {
|
|
53
56
|
const [activeTab, setActiveTab] = useState(0);
|
|
54
57
|
const [isMuted, setIsMuted] = useState(true);
|
|
@@ -146,10 +149,10 @@ const VideoAppsShowcase = () => {
|
|
|
146
149
|
setIsMuted(newMutedState);
|
|
147
150
|
}
|
|
148
151
|
};
|
|
149
|
-
return (_jsxs("div", { ref: containerRef, children: [_jsx(SectionTitle, { children: "Use Cases" }), _jsx("div", { className: 'grid justify-center grid-flow-col grid-rows-1 gap-2.5 justify-self-center mb-4 w-[90vw] md:w-auto', children: tabs.map((tab, index) => (_jsx("button", { type: "button", "data-active": index === activeTab, className: `bg-transparent border-none m-0 p-0 lg:mx-3 my-4 cursor-pointer text-base fontbrand font-bold transition-colors text-muted data-[active=true]:text-brand`, onClick: () => setActiveTab(index), children: tab }, tab))) }), _jsx("div", { className: 'card flex p-0 overflow-hidden', children: _jsxs("div", { className: 'flex-1 flex flex-col lg:flex-row justify-center', children: [_jsxs("div", { className: 'w-full max-w-[500px] aspect-square relative overflow-hidden bg-[#eee]', onClick: handlePlayPause, children: [_jsx(MuxVideo, { ref: videoRef, muxId: videoApps[activeTab].muxId, className: 'absolute left-0 top-0 w-full h-full object-contain rounded-
|
|
152
|
+
return (_jsxs("div", { ref: containerRef, children: [_jsx(SectionTitle, { children: "Use Cases" }), _jsx("div", { className: 'grid justify-center grid-flow-col grid-rows-1 gap-2.5 justify-self-center mb-4 w-[90vw] md:w-auto -mt-4', children: tabs.map((tab, index) => (_jsx("button", { type: "button", "data-active": index === activeTab, className: `bg-transparent border-none m-0 p-0 lg:mx-3 my-4 cursor-pointer text-base fontbrand font-bold transition-colors text-muted data-[active=true]:text-brand`, onClick: () => setActiveTab(index), children: tab }, tab))) }), _jsx("div", { className: 'card flex p-0 overflow-hidden', children: _jsxs("div", { className: 'flex-1 flex flex-col lg:flex-row justify-center', children: [_jsxs("div", { className: 'w-full max-w-[500px] aspect-square relative overflow-hidden bg-[#eee]', onClick: handlePlayPause, children: [_jsx(MuxVideo, { ref: videoRef, muxId: videoApps[activeTab].muxId, className: 'absolute left-0 top-0 w-full h-full object-contain rounded-sm rounded-tr-none rounded-br-none', loop: true, playsInline: true, muted: isMuted }), isMuted && (_jsx("button", { type: "button", className: 'absolute bottom-2.5 right-2.5 bg-white text-black rounded-full w-8 h-8 flex justify-center items-center text-base cursor-pointer transition-colors border-2 border-black border-solid', onClick: (e) => {
|
|
150
153
|
e.stopPropagation();
|
|
151
154
|
handleMuteToggle();
|
|
152
|
-
}, children: _jsx("svg", { style: { width: 24 }, viewBox: "0 0 576 512", children: _jsx("path", { fill: "black", d: "M0 160L0 352l128 0L272 480l48 0 0-448-48 0L128 160 0 160zm441 23l-17-17L390.1 200l17 17 39 39-39 39-17 17L424 345.9l17-17 39-39 39 39 17 17L569.9 312l-17-17-39-39 39-39 17-17L536 166.1l-17 17-39 39-39-39z" }) }) }))] }), _jsxs("div", { className: '
|
|
155
|
+
}, children: _jsx("svg", { style: { width: 24 }, viewBox: "0 0 576 512", children: _jsx("path", { fill: "black", d: "M0 160L0 352l128 0L272 480l48 0 0-448-48 0L128 160 0 160zm441 23l-17-17L390.1 200l17 17 39 39-39 39-17 17L424 345.9l17-17 39-39 39 39 17 17L569.9 312l-17-17-39-39 39-39 17-17L536 166.1l-17 17-39 39-39-39z" }) }) }))] }), _jsxs("div", { className: 'p-6 flex-1 flex flex-col h-full', children: [_jsx("div", { className: "text-4xl font-bold fontbrand mt-0", children: videoApps[activeTab].title }), _jsx("div", { className: "text-muted mt-4 text-base fontbrand", children: videoApps[activeTab].description }), videoApps[activeTab].additionalInfo ? (_jsx("div", { className: "text-muted mt-4 text-base fontbrand", children: videoApps[activeTab].additionalInfo })) : null, _jsx("div", { className: "h-5" }), _jsxs("a", { className: "no-underline text-brand font-brand font-bold inline-flex flex-row items-center", href: videoApps[activeTab].link, children: [videoApps[activeTab].buttonText, _jsx("svg", { style: icon, xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 448 512", children: _jsx("path", { fill: "currentColor", 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" }) })] })] })] }) }), _jsx("div", { style: {
|
|
153
156
|
marginTop: '1rem',
|
|
154
157
|
justifyContent: 'center',
|
|
155
158
|
display: 'flex',
|
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
import { jsx as _jsx
|
|
2
|
-
export const VideoAppsTitle = () => {
|
|
3
|
-
return (_jsxs("div", { className: 'text-center', children: [_jsxs("h2", { className: 'fontbrand text-4xl', children: ["Build video ", _jsx("span", { className: 'fontbrand', children: "apps" })] }), _jsx("p", { children: "Use our suite of tools to build apps that lets others create videos." })] }));
|
|
4
|
-
};
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
5
2
|
export const SectionTitle = ({ children, }) => {
|
|
6
3
|
return (_jsx("div", { className: 'text-center', children: _jsx("h2", { className: 'fontbrand text-4xl', children: children }) }));
|
|
7
4
|
};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
export const Recorder = (props) => {
|
|
3
|
+
return (_jsxs("svg", { viewBox: "0 0 700 700", ...props, children: [_jsx("path", { 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", fill: "#F43B00", fillOpacity: "0.15" }), _jsx("path", { 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", fill: "#F43B00", fillOpacity: "0.3" }), _jsx("path", { 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", fill: "#F43B00" })] }));
|
|
4
|
+
};
|