@remotion/promo-pages 4.0.490 → 4.0.492

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.
@@ -5,16 +5,20 @@ import { BackgroundAnimation } from './homepage/BackgroundAnimation';
5
5
  import CommunityStats from './homepage/CommunityStats';
6
6
  import { Demo } from './homepage/Demo';
7
7
  import EvaluateRemotionSection from './homepage/EvaluateRemotion';
8
- import { IfYouKnowReact } from './homepage/IfYouKnowReact';
9
8
  import { ColorModeProvider } from './homepage/layout/use-color-mode';
9
+ import { MakeVideosAgentically } from './homepage/MakeVideosAgentically';
10
+ import { MakeVideosInteractively } from './homepage/MakeVideosInteractively';
11
+ import { MakeVideosProgrammatically } from './homepage/MakeVideosProgrammatically';
10
12
  import { NewsletterButton } from './homepage/NewsletterButton';
11
- import { ParameterizeAndEdit } from './homepage/ParameterizeAndEdit';
12
13
  import { Pricing } from './homepage/Pricing';
13
- import { RealMP4Videos } from './homepage/RealMp4Videos';
14
14
  import TrustedByBanner from './homepage/TrustedByBanner';
15
15
  import { BuiltWithRemotionShowcase } from './homepage/VideoAppsShowcase';
16
16
  import { SectionTitle } from './homepage/VideoAppsTitle';
17
17
  import { WriteInReact } from './homepage/WriteInReact';
18
+ const makeVideosRowClassName = 'mt-4 md:mt-6 flex flex-col lg:flex-row gap-10';
18
19
  export const NewLanding = ({ colorMode, setColorMode }) => {
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", {}), _jsx(IfYouKnowReact, {}), _jsx(ParameterizeAndEdit, {}), _jsx(RealMP4Videos, {}), _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", {})] })] }) }) }));
20
+ 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
+ { label: 'API Docs', href: '/docs/api' },
22
+ { 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", {})] })] }) }) }));
20
24
  };
@@ -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
+ };
@@ -23,7 +23,7 @@ export const InstallsPerMonth = () => {
23
23
  display: 'flex',
24
24
  alignItems: 'center',
25
25
  justifyContent: 'center',
26
- }, children: [_jsx(StatItemContent, { content: "3M+", width: "100px", fontSize: "2.5rem", fontWeight: "bold" }), _jsx(StatItemContent, { content: _jsx("svg", { width: "40", height: "40", viewBox: "0 0 25 25", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: _jsx("path", { d: "M12.6367 2.47534C12.5488 2.44116 12.4512 2.44116 12.3584 2.47534L3.10547 5.98608L12.5 9.67749L21.8945 5.98608L12.6367 2.47534ZM2.34375 18.4519C2.34375 18.613 2.44629 18.7595 2.59766 18.8181L11.3281 22.1287V11.738L2.34375 8.20776V18.4519ZM13.6719 22.1287L22.4023 18.8181C22.5537 18.7595 22.6562 18.613 22.6562 18.4519V8.20776L13.6719 11.738V22.1287ZM11.5283 0.287842C12.1533 0.048584 12.8418 0.048584 13.4668 0.287842L23.2324 3.9939C24.2969 4.39429 25 5.40991 25 6.54761V18.4519C25 19.5896 24.2969 20.6052 23.2373 21.0105L13.4717 24.7166C12.8467 24.9558 12.1582 24.9558 11.5332 24.7166L1.76758 21.0105C0.703125 20.6052 0 19.5896 0 18.4519V6.54761C0 5.40991 0.703125 4.39429 1.7627 3.98901L11.5283 0.282959V0.287842Z", fill: "var(--text-color)" }) }), width: "50px" })] }), _jsx(StatItemContent, { content: "installs", width: "75%", fontSize: "1.0rem", fontWeight: "bold" })] }));
26
+ }, children: [_jsx(StatItemContent, { content: "4M+", width: "100px", fontSize: "2.5rem", fontWeight: "bold" }), _jsx(StatItemContent, { content: _jsx("svg", { width: "40", height: "40", viewBox: "0 0 25 25", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: _jsx("path", { d: "M12.6367 2.47534C12.5488 2.44116 12.4512 2.44116 12.3584 2.47534L3.10547 5.98608L12.5 9.67749L21.8945 5.98608L12.6367 2.47534ZM2.34375 18.4519C2.34375 18.613 2.44629 18.7595 2.59766 18.8181L11.3281 22.1287V11.738L2.34375 8.20776V18.4519ZM13.6719 22.1287L22.4023 18.8181C22.5537 18.7595 22.6562 18.613 22.6562 18.4519V8.20776L13.6719 11.738V22.1287ZM11.5283 0.287842C12.1533 0.048584 12.8418 0.048584 13.4668 0.287842L23.2324 3.9939C24.2969 4.39429 25 5.40991 25 6.54761V18.4519C25 19.5896 24.2969 20.6052 23.2373 21.0105L13.4717 24.7166C12.8467 24.9558 12.1582 24.9558 11.5332 24.7166L1.76758 21.0105C0.703125 20.6052 0 19.5896 0 18.4519V6.54761C0 5.40991 0.703125 4.39429 1.7627 3.98901L11.5283 0.282959V0.287842Z", fill: "var(--text-color)" }) }), width: "50px" })] }), _jsx(StatItemContent, { content: "installs per month", width: "75%", fontSize: "1.0rem", fontWeight: "bold" })] }));
27
27
  };
28
28
  export const PagesOfDocs = () => {
29
29
  return (_jsxs(Pill, { className: "flex-col", children: [_jsxs("div", { style: { display: 'flex', alignItems: 'center', gap: 8 }, children: [_jsx(StatItemContent, { content: _jsx("svg", { width: "28", height: "40", viewBox: "0 0 18 21", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: _jsx("path", { d: "M0 3.60938C0 1.61602 1.58304 0 3.53571 0H17.0357H18V0.984375V15.4219V16.4062H17.0357H16.7143V19.0312H17.0357H18V21H17.0357H3.21429C1.43839 21 0 19.5316 0 17.7188C0 17.608 0.00401786 17.4973 0.0160714 17.3906H0V3.60938ZM3.21429 16.4062C2.50312 16.4062 1.92857 16.9928 1.92857 17.7188C1.92857 18.4447 2.50312 19.0312 3.21429 19.0312H14.7857V16.4062H3.21429ZM1.92857 14.7123C2.32232 14.5359 2.75625 14.4375 3.21429 14.4375H16.0714V1.96875H3.53571C2.64777 1.96875 1.92857 2.70293 1.92857 3.60938V14.7123ZM6.10714 4.59375H13.1786H14.1429V6.5625H13.1786H6.10714H5.14286V4.59375H6.10714ZM6.10714 7.875H13.1786H14.1429V9.84375H13.1786H6.10714H5.14286V7.875H6.10714Z", fill: "var(--text-color)" }) }), width: "32px" }), _jsx(StatItemContent, { content: "1000", width: "112px", fontSize: "2.5rem", fontWeight: "bold" })] }), _jsx(StatItemContent, { content: "pages of docs", width: "125px", fontSize: "1.0rem", fontWeight: "bold" })] }));
@@ -2,11 +2,11 @@ import React from 'react';
2
2
  import { type Position } from './math';
3
3
  export declare const Card: React.FC<{
4
4
  readonly index: number;
5
- readonly refsToUse: React.MutableRefObject<HTMLDivElement>[];
5
+ readonly refsToUse: React.RefObject<HTMLDivElement>[];
6
6
  readonly onUpdate: (newIndices: number[]) => void;
7
7
  readonly content: React.ReactNode;
8
- readonly positions: React.MutableRefObject<Position[]>;
9
- readonly shouldBePositions: React.MutableRefObject<Position[]>;
8
+ readonly positions: React.RefObject<Position[]>;
9
+ readonly shouldBePositions: React.RefObject<Position[]>;
10
10
  readonly indices: number[];
11
11
  readonly theme: 'dark' | 'light';
12
12
  readonly withSwitcher: boolean;
@@ -1,12 +1,13 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { getLottieMetadata, Lottie, } from '@remotion/lottie';
3
3
  import { useEffect, useMemo, useState } from 'react';
4
- import { useDelayRender, useVideoConfig } from 'remotion';
4
+ import { useDelayRender, useRemotionEnvironment, useVideoConfig } from 'remotion';
5
5
  export const DisplayedEmoji = ({ emoji }) => {
6
6
  const [data, setData] = useState(null);
7
7
  const { durationInFrames, fps } = useVideoConfig();
8
8
  const [browser, setBrowser] = useState(typeof document !== 'undefined');
9
9
  const { delayRender, continueRender, cancelRender } = useDelayRender();
10
+ const { isRendering } = useRemotionEnvironment();
10
11
  const src = useMemo(() => {
11
12
  if (emoji === 'melting') {
12
13
  return 'https://fonts.gstatic.com/s/e/notoemoji/latest/1fae0/lottie.json';
@@ -32,9 +33,14 @@ export const DisplayedEmoji = ({ emoji }) => {
32
33
  continueRender(handle);
33
34
  })
34
35
  .catch((err) => {
35
- cancelRender(err);
36
+ if (isRendering) {
37
+ cancelRender(err);
38
+ }
39
+ // eslint-disable-next-line no-console
40
+ console.warn('Could not load emoji animation', err);
41
+ continueRender(handle);
36
42
  });
37
- }, [handle, src, continueRender, cancelRender]);
43
+ }, [handle, src, continueRender, cancelRender, isRendering]);
38
44
  useEffect(() => {
39
45
  if (typeof document !== 'undefined') {
40
46
  setBrowser(true);
@@ -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;
@@ -1,4 +1,7 @@
1
1
  import React from 'react';
2
2
  export declare const Pricing: React.FC<{
3
3
  readonly faqHref?: string;
4
+ readonly faqLabel?: string;
5
+ readonly licenseHref?: string;
6
+ readonly termsHref?: string;
4
7
  }>;
@@ -1,10 +1,16 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useMemo } from 'react';
3
3
  import { CompanyPricing, EnterpriseLicense, FreePricing } from './FreePricing';
4
- export const Pricing = ({ faqHref = '/pricing#faq' }) => {
4
+ export const Pricing = ({ faqHref = '/docs/license/faq', faqLabel = 'License FAQ', licenseHref = 'https://github.com/remotion-dev/remotion/blob/main/LICENSE.md', termsHref = 'https://www.remotion.pro/terms', }) => {
5
5
  const faqLinkTarget = useMemo(() => {
6
6
  return faqHref.startsWith('http') ? '_blank' : undefined;
7
7
  }, [faqHref]);
8
+ const licenseLinkTarget = useMemo(() => {
9
+ return licenseHref.startsWith('http') ? '_blank' : undefined;
10
+ }, [licenseHref]);
11
+ const termsLinkTarget = useMemo(() => {
12
+ return termsHref.startsWith('http') ? '_blank' : undefined;
13
+ }, [termsHref]);
8
14
  return (_jsxs("div", { style: {
9
15
  display: 'flex',
10
16
  flexDirection: 'column',
@@ -15,5 +21,5 @@ export const Pricing = ({ faqHref = '/pricing#faq' }) => {
15
21
  display: 'flex',
16
22
  }, children: _jsxs("div", { style: {
17
23
  fontFamily: 'GTPlanar',
18
- }, children: ["See our", ' ', _jsx("a", { target: faqLinkTarget, className: "bluelink", href: faqHref, children: "FAQ" }), ' ', "and", ' ', _jsx("a", { target: "_blank", className: "bluelink", href: "https://www.remotion.pro/terms", children: "Terms and Conditions" }), ' ', "for more details."] }) })] }));
24
+ }, children: ["See our", ' ', _jsx("a", { target: licenseLinkTarget, className: "bluelink", href: licenseHref, children: "LICENSE.md" }), ', ', _jsx("a", { target: faqLinkTarget, className: "bluelink", href: faqHref, children: faqLabel }), ', and ', _jsx("a", { target: termsLinkTarget, className: "bluelink", href: termsHref, children: "Terms and Conditions" }), ' ', "for more details."] }) })] }));
19
25
  };
@@ -1,10 +1,9 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { ChooseTemplate } from './ChooseTemplate';
3
2
  import { GetStarted } from './GetStartedStrip';
4
3
  export const WriteInReact = () => {
5
4
  return (_jsxs("div", { children: [_jsx("h1", { className: "text-4xl sm:text-5xl lg:text-[5em] text-center fontbrand font-black leading-none text-balance", style: {
6
5
  textShadow: '0 5px 30px var(--background)',
7
6
  }, children: "Make videos programmatically." }), _jsxs("p", { style: {
8
7
  textShadow: '0 5px 30px var(--background)',
9
- }, className: "font-medium text-center text-lg", children: ["Create real MP4 videos with React. ", _jsx("br", {}), "Use coding agents, build apps and render in bulk."] }), _jsx("br", {}), _jsx("div", { children: _jsx(GetStarted, {}) }), _jsx("br", {}), _jsx("br", {}), _jsx(ChooseTemplate, {})] }));
8
+ }, className: "font-medium text-center text-lg", children: ["Create real MP4 videos with React. ", _jsx("br", {}), "Use coding agents, build apps and render in bulk."] }), _jsx("br", {}), _jsx("div", { children: _jsx(GetStarted, {}) }), _jsx("br", {}), _jsx("br", {})] }));
10
9
  };