@remotion/promo-pages 4.0.502 → 4.0.503

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 (31) hide show
  1. package/dist/Homepage.js +1207 -1160
  2. package/dist/components/Homepage.js +15 -2
  3. package/dist/components/homepage/CanvasSectionTitle.d.ts +4 -0
  4. package/dist/components/homepage/CanvasSectionTitle.js +14 -0
  5. package/dist/components/homepage/ChooseTemplate.d.ts +2 -0
  6. package/dist/components/homepage/ChooseTemplate.js +25 -0
  7. package/dist/components/homepage/CommunityStatsItems.js +1 -1
  8. package/dist/components/homepage/Demo/index.js +1 -1
  9. package/dist/components/homepage/EditorStarterSection.d.ts +3 -0
  10. package/dist/components/homepage/EditorStarterSection.js +8 -0
  11. package/dist/components/homepage/FreePricing.js +2 -2
  12. package/dist/components/homepage/GitHubButton.js +1 -1
  13. package/dist/components/homepage/MakeVideosAgentically.js +4 -2
  14. package/dist/components/homepage/MakeVideosInteractively.js +4 -2
  15. package/dist/components/homepage/MakeVideosProgrammatically.js +3 -1
  16. package/dist/components/homepage/MoreTemplatesButton.d.ts +2 -0
  17. package/dist/components/homepage/MoreTemplatesButton.js +11 -0
  18. package/dist/components/homepage/PricingBulletPoint.js +4 -1
  19. package/dist/components/homepage/use-transparent-video-source.d.ts +4 -0
  20. package/dist/components/homepage/use-transparent-video-source.js +9 -0
  21. package/dist/design.js +3988 -3988
  22. package/dist/experts.js +3949 -3949
  23. package/dist/homepage/Pricing.js +3988 -3988
  24. package/dist/prompts/PromptsGallery.js +3988 -3988
  25. package/dist/prompts/PromptsShow.js +3604 -3604
  26. package/dist/prompts/PromptsSubmit.css +2578 -0
  27. package/dist/prompts/PromptsSubmit.js +3988 -3988
  28. package/dist/team.js +3988 -3988
  29. package/dist/template-modal-content.js +3988 -3988
  30. package/dist/templates.js +3988 -3989
  31. package/package.json +13 -13
@@ -1,6 +1,5 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import AutomationsSection from './homepage/AutomationsSection';
4
3
  import { BackgroundAnimation } from './homepage/BackgroundAnimation';
5
4
  import CommunityStats from './homepage/CommunityStats';
6
5
  import { Demo } from './homepage/Demo';
@@ -20,5 +19,19 @@ export const NewLanding = ({ colorMode, setColorMode }) => {
20
19
  return (_jsx(ColorModeProvider, { colorMode: colorMode, setColorMode: setColorMode, children: _jsx("div", { className: "w-full 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", {}), _jsxs("div", { className: makeVideosRowClassName, children: [_jsx(MakeVideosAgentically, { videoSrc: "/img/homepage-assets-master.webm", fallbackVideoSrc: "/img/homepage-assets-master.mp4" }), _jsx(MakeVideosInteractively, {}), _jsx(MakeVideosProgrammatically, { links: [
21
20
  { label: 'API Docs', href: '/docs/api' },
22
21
  { label: 'Resources', href: '/docs/resources' },
23
- ] })] }), _jsx("br", {}), _jsx("br", {}), _jsx("br", {}), _jsx("div", { className: "pt-6 md:pt-8", children: _jsx(AutomationsSection, {}) }), _jsx("br", {}), _jsx("br", {}), _jsx(Demo, {}), _jsx("br", {}), _jsx("br", {}), _jsx("br", {}), _jsx(BuiltWithRemotionShowcase, {}), _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("br", {}), _jsx(NewsletterButton, {}), _jsx("br", {}), _jsx("br", {}), _jsx("br", {})] })] }) }) }));
22
+ ] })] }), _jsx("br", {}), _jsx("br", {}), _jsxs("div", { className: makeVideosRowClassName, children: [_jsx(MakeVideosProgrammatically, { title: "Design systems", description: "Create a library of animated assets for your organization.", videoSrc: "/img/design-systems.webm", fallbackVideoSrc: "/img/design-systems.mp4", links: [
23
+ { label: 'Motion design systems', href: '/design-systems' },
24
+ ] }), _jsx(MakeVideosAgentically, { title: "Batch rendering", description: "Render millions of videos on your own infrastructure.", links: [
25
+ {
26
+ label: 'Server-side rendering',
27
+ href: '/docs/compare-ssr',
28
+ },
29
+ {
30
+ label: 'Client-side rendering',
31
+ href: '/docs/client-side-rendering',
32
+ },
33
+ ] }), _jsx(MakeVideosInteractively, { title: "Applications", description: "Publish a simple tool or a complex video editor.", videoSrc: "/img/applications.webm", fallbackVideoSrc: "/img/applications.mp4", links: [
34
+ { label: 'Player', href: '/docs/player' },
35
+ { label: 'Editor Starter', href: '/editor-starter' },
36
+ ] })] }), _jsx(Demo, {}), _jsx("br", {}), _jsx("br", {}), _jsx("br", {}), _jsx(BuiltWithRemotionShowcase, {}), _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("br", {}), _jsx(NewsletterButton, {}), _jsx("br", {}), _jsx("br", {}), _jsx("br", {})] })] }) }) }));
24
37
  };
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ export declare const CanvasSectionTitle: React.FC<{
3
+ readonly children: string;
4
+ }>;
@@ -0,0 +1,14 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useId } from 'react';
3
+ export const CanvasSectionTitle = ({ children }) => {
4
+ const svgId = useId().replace(/:/g, '');
5
+ const glowFilterId = `title-glow-${svgId}`;
6
+ const glowClipId = `title-glow-clip-${svgId}`;
7
+ return (_jsxs(_Fragment, { children: [_jsxs("svg", { "aria-hidden": "true", className: "pointer-events-none absolute w-full overflow-visible h-20", focusable: "false", preserveAspectRatio: "none", viewBox: "0 0 1200 320", children: [_jsx("g", { clipPath: `url(#${glowClipId})`, filter: `url(#${glowFilterId})`, children: _jsx("ellipse", { cx: "600", cy: "320", fill: "rgba(0, 0, 0, 0.1)", rx: "400", ry: '100' }) }), _jsxs("defs", { children: [_jsx("filter", { id: glowFilterId, colorInterpolationFilters: "sRGB", filterUnits: "userSpaceOnUse", height: "1120", width: "2000", x: "-400", y: "-480", children: _jsx("feGaussianBlur", { stdDeviation: "140" }) }), _jsx("clipPath", { id: glowClipId, clipPathUnits: "userSpaceOnUse", children: _jsx("rect", { height: "320", width: "2000", x: "-400", y: "0" }) })] })] }), _jsx("div", { className: "relative h-24 w-full overflow-visible", children: _jsx("div", { className: "relative z-10 flex h-full items-end justify-center", children: _jsx("h2", { className: "m-0 text-center text-4xl leading-none text-black", style: {
8
+ fontFamily: 'GTPlanarVF, GTPlanar, sans-serif',
9
+ fontVariationSettings: "'slnt' 0, 'wght' 700",
10
+ fontStyle: 'normal',
11
+ fontWeight: 700,
12
+ paddingBottom: 16,
13
+ }, children: children }) }) })] }));
14
+ };
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const ChooseTemplate: React.FC;
@@ -0,0 +1,25 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { CreateVideoInternals } from 'create-video';
3
+ import { IconForTemplate } from './IconForTemplate';
4
+ import { MoreTemplatesButton } from './MoreTemplatesButton';
5
+ import { TemplateIcon } from './TemplateIcon';
6
+ export const ChooseTemplate = () => {
7
+ return (_jsx("div", { style: {
8
+ display: 'flex',
9
+ flexDirection: 'column',
10
+ }, children: _jsx("div", { style: {
11
+ position: 'relative',
12
+ textAlign: 'center',
13
+ }, children: _jsxs("div", { className: "no-scroll-bar", style: {
14
+ display: 'inline-flex',
15
+ flexDirection: 'row',
16
+ justifyContent: 'space-around',
17
+ borderRadius: 50,
18
+ alignItems: 'center',
19
+ padding: 8,
20
+ width: '100%',
21
+ maxWidth: '550px',
22
+ }, children: [CreateVideoInternals.FEATURED_TEMPLATES.filter((f) => f.featuredOnHomePage).map((template) => {
23
+ return (_jsx("a", { className: "text-inherit no-underline", href: `/templates/${template.cliId}`, children: _jsx(TemplateIcon, { label: template.featuredOnHomePage, children: _jsx(IconForTemplate, { scale: 0.7, template: template }) }) }, template.cliId));
24
+ }), _jsx(MoreTemplatesButton, {})] }) }) }));
25
+ };
@@ -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: "53K", width: "80px", fontSize: "2.5rem", fontWeight: "bold" })] }), _jsx(StatItemContent, { content: "GitHub stars", width: "125px", fontSize: "1.0rem", fontWeight: "bold" })] }));
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: "54K", 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: {
@@ -83,7 +83,7 @@ export const Demo = () => {
83
83
  const onError = useCallback(() => {
84
84
  setError(true);
85
85
  }, []);
86
- return (_jsxs("div", { id: "demo", children: [_jsx("br", {}), _jsx("br", {}), _jsx(SectionTitle, { children: "Interactive demo" }), _jsxs("div", { className: "max-w-[760px] mx-auto", children: [_jsxs("div", { className: "h-[105px] relative", children: [_jsx(DragAndDropNudge, {}), _jsx(ThemeNudge, {})] }), _jsxs("div", { style: playerWrapper, children: [_jsx(Player, { ref: ref, component: HomepageVideoComp, compositionWidth: 640, compositionHeight: 360, durationInFrames: 120, fps: 30, autoPlay: true, controls: isFullscreen, clickToPlay: false, style: style, initiallyMuted: true, inputProps: props, acknowledgeRemotionLicense: true, numberOfSharedAudioTags: 0, loop: true }), _jsx(PlayerControls, { playerRef: ref, durationInFrames: 120, fps: 30, children: _jsx(RenderButton, { onError: onError, renderData: data
86
+ return (_jsxs("div", { id: "demo", className: "pt-24", children: [_jsx(SectionTitle, { children: "Interactive demo" }), _jsxs("div", { className: "max-w-[760px] mx-auto", children: [_jsxs("div", { className: "h-[105px] relative", children: [_jsx(DragAndDropNudge, {}), _jsx(ThemeNudge, {})] }), _jsxs("div", { style: playerWrapper, children: [_jsx(Player, { ref: ref, component: HomepageVideoComp, compositionWidth: 640, compositionHeight: 360, durationInFrames: 120, fps: 30, autoPlay: true, controls: isFullscreen, clickToPlay: false, style: style, initiallyMuted: true, inputProps: props, acknowledgeRemotionLicense: true, numberOfSharedAudioTags: 0, loop: true }), _jsx(PlayerControls, { playerRef: ref, durationInFrames: 120, fps: 30, children: _jsx(RenderButton, { onError: onError, renderData: data
87
87
  ? {
88
88
  cardOrder,
89
89
  emojiIndex,
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ declare const EditorStarterSection: React.FC;
3
+ export default EditorStarterSection;
@@ -0,0 +1,8 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { BlueButton, ClearButton } from './layout/Button';
3
+ import { MuxVideo } from './MuxVideo';
4
+ import { SectionTitle } from './VideoAppsTitle';
5
+ const EditorStarterSection = () => {
6
+ return (_jsxs("div", { children: [_jsx(SectionTitle, { children: "Build your own video editor" }), _jsx("br", {}), _jsx("div", { className: 'card flex p-0 overflow-hidden', children: _jsxs("div", { className: 'flex-1 flex flex-col lg:flex-row justify-center', children: [_jsx("div", { className: 'w-full max-w-[500px] aspect-square relative overflow-hidden bg-[#eee]', children: _jsx(MuxVideo, { muxId: 'YIvIidbcAc7009B00Wr7gIbGyq67YGNlytGvMXwdsLRtc', className: 'absolute left-0 top-0 w-full h-full object-cover object-top rounded-sm rounded-tr-none rounded-br-none', loop: true, autoPlay: true, playsInline: true, muted: true }) }), _jsxs("div", { className: 'p-6 flex-1 flex flex-col h-full', children: [_jsx("div", { className: "text-4xl font-bold fontbrand mt-0", children: "Editor Starter" }), _jsx("div", { className: "text-muted mt-4 text-base fontbrand", children: "A comprehensive template that includes everything you need to create custom video editing applications with React and TypeScript." }), _jsx("div", { className: "h-5" }), _jsxs("div", { className: "flex gap-2 items-center", children: [_jsx("a", { href: "https://www.remotion.pro/editor-starter?ref=remotion.dev", target: "_blank", className: "no-underline", children: _jsx(BlueButton, { size: "sm", loading: false, children: "Purchase" }) }), _jsx("a", { href: "https://editor-starter.remotion.dev?ref=remotion.dev", target: "_blank", className: "no-underline", children: _jsx(ClearButton, { size: "sm", loading: false, children: "Demo" }) }), ' ', _jsx("a", { href: "https://remotion.dev/editor-starter", className: "no-underline", children: _jsx(ClearButton, { size: "sm", loading: false, children: "Docs" }) })] }), _jsx("br", {})] })] }) })] }));
7
+ };
8
+ export default EditorStarterSection;
@@ -10,7 +10,7 @@ const Title = ({ children }) => {
10
10
  return (_jsx("div", { className: "text-4xl font-bold leading-none fontbrand mt-2 mb-5", children: children }));
11
11
  };
12
12
  const Audience = ({ children }) => {
13
- return _jsx("div", { className: 'fontbrand text-lg leading-none', children: children });
13
+ return _jsx("div", { className: 'fontbrand text-lg leading-snug', children: children });
14
14
  };
15
15
  const BottomInfo = ({ children, className, ...props }) => {
16
16
  return (_jsx("div", { className: cn(className, 'text-[var(--subtitle)] fontbrand text-sm'), ...props, children: children }));
@@ -64,7 +64,7 @@ const textUnitWrapper = {
64
64
  flexDirection: 'column',
65
65
  };
66
66
  export const FreePricing = () => {
67
- return (_jsxs(Container, { children: [_jsx(Audience, { children: "For individuals and companies of up to 3 people" }), _jsx(Title, { children: "Free License" }), _jsx(PricingBulletPoint, { text: "Create and automate", checked: true }), _jsx(PricingBulletPoint, { text: "Commercial use allowed", checked: true }), _jsx(PricingBulletPoint, { text: "Unlimited use", checked: true }), _jsx(PricingBulletPoint, { text: "Must upgrade when your team grows", checked: false }), _jsx("div", { className: 'flex flex-row justify-end mt-4', children: _jsx("div", { style: {
67
+ return (_jsxs(Container, { children: [_jsx(Audience, { children: "For individuals and companies of up to 3 people" }), _jsx(Title, { children: "Free License" }), _jsx(PricingBulletPoint, { text: "Create and automate", checked: true }), _jsx(PricingBulletPoint, { text: "All features included", checked: true }), _jsx(PricingBulletPoint, { text: "Unlimited commercial use", checked: true }), _jsx(PricingBulletPoint, { text: "Must upgrade when your team grows", checked: false }), _jsx("div", { className: 'flex flex-row justify-end mt-4', children: _jsx("div", { style: {
68
68
  ...textUnitWrapper,
69
69
  alignItems: 'flex-end',
70
70
  }, children: _jsxs("a", { target: "_blank", href: "https://www.remotion.dev/docs", className: "font-brand text-brand flex flex-row items-center gap-1 no-underline", children: ["No sign up needed - get started", ' ', _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" }) })] }) }) })] }));
@@ -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: '53k' })] }));
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: '54k' })] }));
7
7
  };
@@ -1,12 +1,14 @@
1
1
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useEffect, useRef } from 'react';
3
3
  import { MakeVideosLinks } from './MakeVideosLinks';
4
+ import { useTransparentVideoSource } from './use-transparent-video-source';
4
5
  export const MakeVideosAgentically = ({ title = (_jsxs(_Fragment, { children: [_jsx("span", { className: "text-[var(--subtitle)]", children: "Make videos" }), _jsx("br", {}), " agentically"] })), description = 'Turn your idea into a video using your coding agent.', showLinks = true, links = [
5
6
  { label: 'Agent Skills', href: '/docs/ai/skills' },
6
7
  { label: 'Prompts', href: '/prompts' },
7
8
  ], showVideo = true, videoSrc = '/img/render-progress.webm', fallbackVideoSrc = '/img/render-progress.mp4', }) => {
8
9
  const ref = useRef(null);
9
10
  const videoRef = useRef(null);
11
+ const src = useTransparentVideoSource({ fallbackVideoSrc, videoSrc });
10
12
  useEffect(() => {
11
13
  const { current } = ref;
12
14
  if (!current) {
@@ -25,11 +27,11 @@ export const MakeVideosAgentically = ({ title = (_jsxs(_Fragment, { children: [_
25
27
  observer.observe(current);
26
28
  return () => observer.unobserve(current);
27
29
  }, []);
28
- return (_jsxs("div", { ref: ref, className: 'flex min-w-0 basis-0 flex-col flex-1', children: [_jsx("div", { className: "flex aspect-square w-full items-start", children: showVideo ? (_jsxs("video", { ref: videoRef, muted: true, autoPlay: true, playsInline: true, loop: true, preload: "metadata", style: {
30
+ return (_jsxs("div", { ref: ref, className: 'flex min-w-0 basis-0 flex-col flex-1', children: [_jsx("div", { className: "flex aspect-square w-full items-start", children: showVideo && src ? (_jsx("video", { ref: videoRef, src: src, muted: true, autoPlay: true, playsInline: true, loop: true, preload: "metadata", style: {
29
31
  width: 400,
30
32
  maxWidth: '100%',
31
33
  maxHeight: '100%',
32
34
  borderRadius: 7,
33
35
  overflow: 'hidden',
34
- }, className: "cursor-default! relative object-contain", children: [_jsx("source", { src: fallbackVideoSrc, type: "video/mp4" }), _jsx("source", { src: videoSrc, type: "video/webm" })] })) : null }), _jsxs("div", { className: "font-brand", children: [_jsx("h2", { className: "text-2xl fontbrand leading-[1.1] font-medium", children: title }), _jsx("p", { className: "leading-relaxed", children: description }), showLinks ? _jsx(MakeVideosLinks, { links: links }) : null] })] }));
36
+ }, className: "cursor-default! relative object-contain" })) : null }), _jsxs("div", { className: "font-brand", children: [_jsx("h2", { className: "text-2xl fontbrand leading-[1.1] font-medium", children: title }), _jsx("p", { className: "leading-relaxed", children: description }), showLinks ? _jsx(MakeVideosLinks, { links: links }) : null] })] }));
35
37
  };
@@ -1,13 +1,15 @@
1
1
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useRef } from 'react';
3
3
  import { MakeVideosLinks } from './MakeVideosLinks';
4
+ import { useTransparentVideoSource } from './use-transparent-video-source';
4
5
  export const MakeVideosInteractively = ({ title = (_jsxs(_Fragment, { children: [_jsx("span", { className: "text-[var(--subtitle)]", children: "Make videos" }), _jsx("br", {}), " interactively"] })), description = 'Edit and animate using drag and drop and save back to code.', showLinks = true, links = [{ label: 'Remotion Studio', href: '/docs/studio' }], showVideo = true, videoSrc = '/img/editing-vp9-chrome.webm', fallbackVideoSrc = '/img/editing-safari.mp4', }) => {
5
6
  const ref = useRef(null);
6
- return (_jsxs("div", { ref: ref, className: 'flex min-w-0 basis-0 flex-col justify-start items-start lg:mt-0 flex-1', children: [_jsx("div", { className: "flex aspect-square w-full items-start", children: showVideo ? (_jsxs("video", { autoPlay: true, muted: true, playsInline: true, loop: true, preload: "metadata", style: {
7
+ const src = useTransparentVideoSource({ fallbackVideoSrc, videoSrc });
8
+ return (_jsxs("div", { ref: ref, className: 'flex min-w-0 basis-0 flex-col justify-start items-start lg:mt-0 flex-1', children: [_jsx("div", { className: "flex aspect-square w-full items-start", children: showVideo && src ? (_jsx("video", { src: src, autoPlay: true, muted: true, playsInline: true, loop: true, preload: "metadata", style: {
7
9
  width: 500,
8
10
  maxWidth: '100%',
9
11
  maxHeight: '100%',
10
12
  borderRadius: 7,
11
13
  overflow: 'hidden',
12
- }, className: "object-contain", children: [_jsx("source", { src: fallbackVideoSrc, type: "video/mp4" }), _jsx("source", { src: videoSrc, type: "video/webm" })] })) : null }), _jsxs("div", { className: "font-brand", children: [_jsx("h2", { className: "text-2xl fontbrand leading-[1.1] font-medium", children: title }), _jsx("p", { className: "leading-relaxed", children: description }), showLinks ? _jsx(MakeVideosLinks, { links: links }) : null] })] }));
14
+ }, className: "object-contain" })) : null }), _jsxs("div", { className: "font-brand", children: [_jsx("h2", { className: "text-2xl fontbrand leading-[1.1] font-medium", children: title }), _jsx("p", { className: "leading-relaxed", children: description }), showLinks ? _jsx(MakeVideosLinks, { links: links }) : null] })] }));
13
15
  };
@@ -1,5 +1,7 @@
1
1
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { MakeVideosLinks } from './MakeVideosLinks';
3
+ import { useTransparentVideoSource } from './use-transparent-video-source';
3
4
  export const MakeVideosProgrammatically = ({ title = (_jsxs(_Fragment, { children: [_jsx("span", { className: "text-[var(--subtitle)]", children: "Make videos" }), _jsx("br", {}), " programmatically"] })), description = 'Connect data and manage complexity with code.', showLinks = true, links = [], showVideo = true, videoSrc = '/img/what-is-remotion.webm', fallbackVideoSrc = '/img/what-is-remotion.mp4', }) => {
4
- return (_jsxs("div", { className: 'flex min-w-0 basis-0 flex-col flex-1', children: [_jsx("div", { className: "flex aspect-square w-full items-start", children: showVideo ? (_jsxs("video", { muted: true, autoPlay: true, playsInline: true, loop: true, preload: "metadata", className: "relative max-h-full max-w-full cursor-default! object-contain lg:mb-0 lg:mt-0", children: [_jsx("source", { src: fallbackVideoSrc, type: "video/mp4" }), _jsx("source", { src: videoSrc, type: "video/webm" })] })) : null }), _jsxs("div", { className: "font-brand", children: [_jsx("h2", { className: "text-2xl fontbrand leading-[1.1] font-medium", children: title }), _jsx("p", { className: "leading-relaxed", children: description }), showLinks ? _jsx(MakeVideosLinks, { links: links }) : null] })] }));
5
+ const src = useTransparentVideoSource({ fallbackVideoSrc, videoSrc });
6
+ return (_jsxs("div", { className: 'flex min-w-0 basis-0 flex-col flex-1', children: [_jsx("div", { className: "flex aspect-square w-full items-start", children: showVideo && src ? (_jsx("video", { src: src, muted: true, autoPlay: true, playsInline: true, loop: true, preload: "metadata", className: "relative max-h-full max-w-full cursor-default! object-contain lg:mb-0 lg:mt-0" })) : null }), _jsxs("div", { className: "font-brand", children: [_jsx("h2", { className: "text-2xl fontbrand leading-[1.1] font-medium", children: title }), _jsx("p", { className: "leading-relaxed", children: description }), showLinks ? _jsx(MakeVideosLinks, { links: links }) : null] })] }));
5
7
  };
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const MoreTemplatesButton: React.FC;
@@ -0,0 +1,11 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Button } from '@remotion/design';
3
+ import { useMobileLayout } from './layout/use-mobile-layout';
4
+ const icon = {
5
+ height: 16,
6
+ marginLeft: 10,
7
+ };
8
+ export const MoreTemplatesButton = () => {
9
+ const mobileLayout = useMobileLayout();
10
+ return (_jsxs(Button, { href: "/templates", className: "right-0 border-2 rounded-full text-inherit px-4 py-2 fontbrand font-semibold text-sm flex flex-row items-center h-10", children: [mobileLayout ? 'Templates' : 'Find a template', _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" }) })] }));
11
+ };
@@ -2,7 +2,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  const container = {
3
3
  display: 'flex',
4
4
  flexDirection: 'row',
5
- alignItems: 'center',
5
+ alignItems: 'flex-start',
6
6
  gap: '10px',
7
7
  };
8
8
  const greyCircle = {
@@ -10,10 +10,13 @@ const greyCircle = {
10
10
  height: 20,
11
11
  borderRadius: 10,
12
12
  backgroundColor: 'var(--footer-border)',
13
+ flexShrink: 0,
14
+ marginTop: 4,
13
15
  };
14
16
  export const PricingBulletPoint = ({ text, checked, children }) => {
15
17
  const checkmarkSVG = (_jsxs("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "none", xmlns: "http://www.w3.org/2000/svg", style: {
16
18
  flexShrink: 0,
19
+ marginTop: 4,
17
20
  }, children: [_jsx("circle", { cx: "10", cy: "10", r: "10", fill: "#0B84F3" }), _jsx("path", { d: "M14.7908 7.20505C15.0697 7.47844 15.0697 7.92243 14.7908 8.19583L9.07711 13.795C8.79813 14.0683 8.34505 14.0683 8.06606 13.795L5.20924 10.9954C4.93025 10.722 4.93025 10.278 5.20924 10.0046C5.48823 9.73121 5.9413 9.73121 6.22029 10.0046L8.5727 12.3077L13.7819 7.20505C14.0609 6.93165 14.514 6.93165 14.793 7.20505H14.7908Z", fill: "white" })] }));
18
21
  return (_jsxs("div", { style: container, children: [checked ? checkmarkSVG : _jsx("div", { style: greyCircle }), _jsxs("div", { className: 'fontbrand text-lg ', children: [text, children] })] }));
19
22
  };
@@ -0,0 +1,4 @@
1
+ export declare const useTransparentVideoSource: ({ fallbackVideoSrc, videoSrc, }: {
2
+ readonly fallbackVideoSrc: string;
3
+ readonly videoSrc: string;
4
+ }) => string | null;
@@ -0,0 +1,9 @@
1
+ import { useEffect, useState } from 'react';
2
+ import { isWebkit } from './IfYouKnowReact';
3
+ export const useTransparentVideoSource = ({ fallbackVideoSrc, videoSrc, }) => {
4
+ const [src, setSrc] = useState(null);
5
+ useEffect(() => {
6
+ setSrc(isWebkit() ? fallbackVideoSrc : videoSrc);
7
+ }, [fallbackVideoSrc, videoSrc]);
8
+ return src;
9
+ };