@remotion/promo-pages 4.0.321 → 4.0.323

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 (181) hide show
  1. package/.turbo/turbo-make.log +2 -2
  2. package/dist/Homepage.js +28 -23
  3. package/dist/homepage/Pricing.js +2 -2
  4. package/dist/tailwind.css +6 -0
  5. package/package.json +10 -10
  6. package/src/components/homepage/Counter.tsx +3 -3
  7. package/.turbo/turbo-lint.log +0 -5
  8. package/dist/cn.d.ts +0 -2
  9. package/dist/cn.js +0 -5
  10. package/dist/components/Homepage.d.ts +0 -6
  11. package/dist/components/Homepage.js +0 -20
  12. package/dist/components/homepage/BackgroundAnimation.d.ts +0 -2
  13. package/dist/components/homepage/BackgroundAnimation.js +0 -66
  14. package/dist/components/homepage/ChooseTemplate.d.ts +0 -2
  15. package/dist/components/homepage/ChooseTemplate.js +0 -27
  16. package/dist/components/homepage/CommunityStats.d.ts +0 -3
  17. package/dist/components/homepage/CommunityStats.js +0 -6
  18. package/dist/components/homepage/CommunityStatsItems.d.ts +0 -7
  19. package/dist/components/homepage/CommunityStatsItems.js +0 -58
  20. package/dist/components/homepage/Counter.d.ts +0 -9
  21. package/dist/components/homepage/Counter.js +0 -55
  22. package/dist/components/homepage/Demo/Card.d.ts +0 -15
  23. package/dist/components/homepage/Demo/Card.js +0 -174
  24. package/dist/components/homepage/Demo/Cards.d.ts +0 -15
  25. package/dist/components/homepage/Demo/Cards.js +0 -57
  26. package/dist/components/homepage/Demo/Comp.d.ts +0 -38
  27. package/dist/components/homepage/Demo/Comp.js +0 -71
  28. package/dist/components/homepage/Demo/CurrentCountry.d.ts +0 -9
  29. package/dist/components/homepage/Demo/CurrentCountry.js +0 -48
  30. package/dist/components/homepage/Demo/DemoError.d.ts +0 -2
  31. package/dist/components/homepage/Demo/DemoError.js +0 -10
  32. package/dist/components/homepage/Demo/DemoErrorIcon.d.ts +0 -2
  33. package/dist/components/homepage/Demo/DemoErrorIcon.js +0 -16
  34. package/dist/components/homepage/Demo/DemoRender.d.ts +0 -102
  35. package/dist/components/homepage/Demo/DemoRender.js +0 -95
  36. package/dist/components/homepage/Demo/DigitWheel.d.ts +0 -9
  37. package/dist/components/homepage/Demo/DigitWheel.js +0 -94
  38. package/dist/components/homepage/Demo/DisplayedEmoji.d.ts +0 -5
  39. package/dist/components/homepage/Demo/DisplayedEmoji.js +0 -63
  40. package/dist/components/homepage/Demo/DoneCheckmark.d.ts +0 -2
  41. package/dist/components/homepage/Demo/DoneCheckmark.js +0 -20
  42. package/dist/components/homepage/Demo/DownloadNudge.d.ts +0 -2
  43. package/dist/components/homepage/Demo/DownloadNudge.js +0 -27
  44. package/dist/components/homepage/Demo/DragAndDropNudge.d.ts +0 -3
  45. package/dist/components/homepage/Demo/DragAndDropNudge.js +0 -26
  46. package/dist/components/homepage/Demo/EmojiCard.d.ts +0 -10
  47. package/dist/components/homepage/Demo/EmojiCard.js +0 -119
  48. package/dist/components/homepage/Demo/Minus.d.ts +0 -5
  49. package/dist/components/homepage/Demo/Minus.js +0 -11
  50. package/dist/components/homepage/Demo/PlayPauseButton.d.ts +0 -5
  51. package/dist/components/homepage/Demo/PlayPauseButton.js +0 -47
  52. package/dist/components/homepage/Demo/PlayerControls.d.ts +0 -8
  53. package/dist/components/homepage/Demo/PlayerControls.js +0 -15
  54. package/dist/components/homepage/Demo/PlayerSeekBar.d.ts +0 -11
  55. package/dist/components/homepage/Demo/PlayerSeekBar.js +0 -216
  56. package/dist/components/homepage/Demo/PlayerVolume.d.ts +0 -5
  57. package/dist/components/homepage/Demo/PlayerVolume.js +0 -53
  58. package/dist/components/homepage/Demo/Progress.d.ts +0 -4
  59. package/dist/components/homepage/Demo/Progress.js +0 -14
  60. package/dist/components/homepage/Demo/Spinner.d.ts +0 -5
  61. package/dist/components/homepage/Demo/Spinner.js +0 -37
  62. package/dist/components/homepage/Demo/Switcher.d.ts +0 -6
  63. package/dist/components/homepage/Demo/Switcher.js +0 -25
  64. package/dist/components/homepage/Demo/Temperature.d.ts +0 -6
  65. package/dist/components/homepage/Demo/Temperature.js +0 -21
  66. package/dist/components/homepage/Demo/TemperatureNumber.d.ts +0 -5
  67. package/dist/components/homepage/Demo/TemperatureNumber.js +0 -36
  68. package/dist/components/homepage/Demo/ThemeNudge.d.ts +0 -3
  69. package/dist/components/homepage/Demo/ThemeNudge.js +0 -35
  70. package/dist/components/homepage/Demo/TimeDisplay.d.ts +0 -6
  71. package/dist/components/homepage/Demo/TimeDisplay.js +0 -27
  72. package/dist/components/homepage/Demo/TrendingRepos.d.ts +0 -6
  73. package/dist/components/homepage/Demo/TrendingRepos.js +0 -65
  74. package/dist/components/homepage/Demo/icons.d.ts +0 -10
  75. package/dist/components/homepage/Demo/icons.js +0 -22
  76. package/dist/components/homepage/Demo/index.d.ts +0 -2
  77. package/dist/components/homepage/Demo/index.js +0 -95
  78. package/dist/components/homepage/Demo/math.d.ts +0 -10
  79. package/dist/components/homepage/Demo/math.js +0 -29
  80. package/dist/components/homepage/Demo/types.d.ts +0 -6
  81. package/dist/components/homepage/Demo/types.js +0 -0
  82. package/dist/components/homepage/EvaluateRemotion.d.ts +0 -3
  83. package/dist/components/homepage/EvaluateRemotion.js +0 -39
  84. package/dist/components/homepage/FreePricing.d.ts +0 -4
  85. package/dist/components/homepage/FreePricing.js +0 -75
  86. package/dist/components/homepage/GetStartedStrip.d.ts +0 -2
  87. package/dist/components/homepage/GetStartedStrip.js +0 -14
  88. package/dist/components/homepage/GitHubButton.d.ts +0 -2
  89. package/dist/components/homepage/GitHubButton.js +0 -7
  90. package/dist/components/homepage/IconForTemplate.d.ts +0 -6
  91. package/dist/components/homepage/IconForTemplate.js +0 -98
  92. package/dist/components/homepage/IfYouKnowReact.d.ts +0 -3
  93. package/dist/components/homepage/IfYouKnowReact.js +0 -23
  94. package/dist/components/homepage/InfoTooltip.d.ts +0 -6
  95. package/dist/components/homepage/InfoTooltip.js +0 -6
  96. package/dist/components/homepage/MoreTemplatesButton.d.ts +0 -2
  97. package/dist/components/homepage/MoreTemplatesButton.js +0 -10
  98. package/dist/components/homepage/MoreVideoPowerSection.d.ts +0 -2
  99. package/dist/components/homepage/MoreVideoPowerSection.js +0 -16
  100. package/dist/components/homepage/MuxVideo.d.ts +0 -7
  101. package/dist/components/homepage/MuxVideo.js +0 -45
  102. package/dist/components/homepage/NewsletterButton.d.ts +0 -2
  103. package/dist/components/homepage/NewsletterButton.js +0 -39
  104. package/dist/components/homepage/ParameterizeAndEdit.d.ts +0 -2
  105. package/dist/components/homepage/ParameterizeAndEdit.js +0 -22
  106. package/dist/components/homepage/Pricing.d.ts +0 -2
  107. package/dist/components/homepage/Pricing.js +0 -15
  108. package/dist/components/homepage/PricingBulletPoint.d.ts +0 -6
  109. package/dist/components/homepage/PricingBulletPoint.js +0 -19
  110. package/dist/components/homepage/RealMp4Videos.d.ts +0 -2
  111. package/dist/components/homepage/RealMp4Videos.js +0 -41
  112. package/dist/components/homepage/Spacer.d.ts +0 -2
  113. package/dist/components/homepage/Spacer.js +0 -4
  114. package/dist/components/homepage/TemplateIcon.d.ts +0 -5
  115. package/dist/components/homepage/TemplateIcon.js +0 -24
  116. package/dist/components/homepage/TextInput.d.ts +0 -7
  117. package/dist/components/homepage/TextInput.js +0 -34
  118. package/dist/components/homepage/TrustedByBanner.d.ts +0 -2
  119. package/dist/components/homepage/TrustedByBanner.js +0 -32
  120. package/dist/components/homepage/VideoApps.d.ts +0 -4
  121. package/dist/components/homepage/VideoApps.js +0 -72
  122. package/dist/components/homepage/VideoAppsShowcase.d.ts +0 -3
  123. package/dist/components/homepage/VideoAppsShowcase.js +0 -163
  124. package/dist/components/homepage/VideoAppsTitle.d.ts +0 -4
  125. package/dist/components/homepage/VideoAppsTitle.js +0 -4
  126. package/dist/components/homepage/VideoPlayerWithControls.d.ts +0 -20
  127. package/dist/components/homepage/VideoPlayerWithControls.js +0 -104
  128. package/dist/components/homepage/WriteInReact.d.ts +0 -2
  129. package/dist/components/homepage/WriteInReact.js +0 -10
  130. package/dist/components/homepage/YouAreHere.d.ts +0 -2
  131. package/dist/components/homepage/YouAreHere.js +0 -23
  132. package/dist/components/homepage/layout/Button.d.ts +0 -19
  133. package/dist/components/homepage/layout/Button.js +0 -29
  134. package/dist/components/homepage/layout/colors.d.ts +0 -13
  135. package/dist/components/homepage/layout/colors.js +0 -14
  136. package/dist/components/homepage/layout/use-color-mode.d.ts +0 -21
  137. package/dist/components/homepage/layout/use-color-mode.js +0 -22
  138. package/dist/components/homepage/layout/use-el-size.d.ts +0 -5
  139. package/dist/components/homepage/layout/use-el-size.js +0 -40
  140. package/dist/components/homepage/layout/use-mobile-layout.d.ts +0 -1
  141. package/dist/components/homepage/layout/use-mobile-layout.js +0 -6
  142. package/dist/components/icons/blank.d.ts +0 -3
  143. package/dist/components/icons/blank.js +0 -4
  144. package/dist/components/icons/clone.d.ts +0 -2
  145. package/dist/components/icons/clone.js +0 -2
  146. package/dist/components/icons/code-hike.d.ts +0 -3
  147. package/dist/components/icons/code-hike.js +0 -4
  148. package/dist/components/icons/cubes.d.ts +0 -3
  149. package/dist/components/icons/cubes.js +0 -4
  150. package/dist/components/icons/js.d.ts +0 -3
  151. package/dist/components/icons/js.js +0 -4
  152. package/dist/components/icons/music.d.ts +0 -2
  153. package/dist/components/icons/music.js +0 -4
  154. package/dist/components/icons/next.d.ts +0 -4
  155. package/dist/components/icons/next.js +0 -4
  156. package/dist/components/icons/overlay.d.ts +0 -3
  157. package/dist/components/icons/overlay.js +0 -4
  158. package/dist/components/icons/recorder.d.ts +0 -3
  159. package/dist/components/icons/recorder.js +0 -4
  160. package/dist/components/icons/remix.d.ts +0 -3
  161. package/dist/components/icons/remix.js +0 -4
  162. package/dist/components/icons/skia.d.ts +0 -3
  163. package/dist/components/icons/skia.js +0 -4
  164. package/dist/components/icons/stargazer.d.ts +0 -3
  165. package/dist/components/icons/stargazer.js +0 -4
  166. package/dist/components/icons/still.d.ts +0 -3
  167. package/dist/components/icons/still.js +0 -4
  168. package/dist/components/icons/tailwind.d.ts +0 -3
  169. package/dist/components/icons/tailwind.js +0 -4
  170. package/dist/components/icons/tiktok.d.ts +0 -3
  171. package/dist/components/icons/tiktok.js +0 -4
  172. package/dist/components/icons/ts.d.ts +0 -3
  173. package/dist/components/icons/ts.js +0 -4
  174. package/dist/components/icons/tts.d.ts +0 -3
  175. package/dist/components/icons/tts.js +0 -4
  176. package/dist/components/icons/undo.d.ts +0 -3
  177. package/dist/components/icons/undo.js +0 -2
  178. package/dist/components/icons/waveform.d.ts +0 -3
  179. package/dist/components/icons/waveform.js +0 -4
  180. package/dist/main.d.ts +0 -1
  181. package/dist/main.js +0 -6
@@ -1,95 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Player } from '@remotion/player';
3
- import { useCallback, useEffect, useMemo, useRef, useState, } from 'react';
4
- import { PALETTE } from '../layout/colors';
5
- import { useColorMode } from '../layout/use-color-mode';
6
- import { SectionTitle } from '../VideoAppsTitle';
7
- import { getDataAndProps, HomepageVideoComp, } from './Comp';
8
- import { DemoError } from './DemoError';
9
- import { RenderButton } from './DemoRender';
10
- import { DownloadNudge } from './DownloadNudge';
11
- import { DragAndDropNudge } from './DragAndDropNudge';
12
- import { PlayerControls } from './PlayerControls';
13
- import { ThemeNudge } from './ThemeNudge';
14
- const style = {
15
- width: '100%',
16
- aspectRatio: '640 / 360',
17
- borderBottom: `2px solid ${PALETTE.BOX_STROKE}`,
18
- touchAction: 'none', // prevent page from scrolling when dragging children on mobile
19
- };
20
- const playerWrapper = {
21
- border: `2px solid ${PALETTE.BOX_STROKE}`,
22
- borderBottom: `4px solid ${PALETTE.BOX_STROKE}`,
23
- borderRadius: 8,
24
- width: '100%',
25
- overflow: 'hidden',
26
- };
27
- export const Demo = () => {
28
- const { colorMode } = useColorMode();
29
- const [data, setData] = useState(null);
30
- const ref = useRef(null);
31
- const [isFullscreen, setIsFullscreen] = useState(false);
32
- const [cardOrder, setCardOrder] = useState([0, 1, 2, 3]);
33
- const [emojiIndex, setEmojiIndex] = useState(0);
34
- const [error, setError] = useState(false);
35
- useEffect(() => {
36
- getDataAndProps()
37
- .then((d) => {
38
- setData(d);
39
- })
40
- .catch((err) => {
41
- // eslint-disable-next-line no-console
42
- console.log(err);
43
- setError(true);
44
- });
45
- }, []);
46
- useEffect(() => {
47
- const { current: playerRef } = ref;
48
- if (!playerRef || !data) {
49
- return;
50
- }
51
- const onFullscreenChange = () => {
52
- setIsFullscreen(playerRef.isFullscreen());
53
- };
54
- playerRef.addEventListener('fullscreenchange', onFullscreenChange);
55
- return () => {
56
- playerRef.removeEventListener('fullscreenchange', onFullscreenChange);
57
- };
58
- }, [data]);
59
- const updateCardOrder = useCallback((newCardOrder) => {
60
- setCardOrder(newCardOrder);
61
- }, []);
62
- const props = useMemo(() => {
63
- var _a, _b;
64
- return {
65
- theme: colorMode,
66
- onToggle: () => {
67
- var _a;
68
- (_a = ref.current) === null || _a === void 0 ? void 0 : _a.toggle();
69
- },
70
- cardOrder,
71
- updateCardOrder,
72
- location: (_a = data === null || data === void 0 ? void 0 : data.location) !== null && _a !== void 0 ? _a : null,
73
- trending: (_b = data === null || data === void 0 ? void 0 : data.trending) !== null && _b !== void 0 ? _b : null,
74
- onClickLeft: () => {
75
- setEmojiIndex((e) => e - 1);
76
- },
77
- onClickRight: () => {
78
- setEmojiIndex((e) => e + 1);
79
- },
80
- emojiIndex,
81
- };
82
- }, [cardOrder, emojiIndex, colorMode, data, updateCardOrder]);
83
- const onError = useCallback(() => {
84
- setError(true);
85
- }, []);
86
- return (_jsxs("div", { children: [_jsx("br", {}), _jsx("br", {}), _jsx(SectionTitle, { children: "Demo" }), _jsxs("div", { style: { height: 140, position: '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, loop: true }), _jsx(PlayerControls, { playerRef: ref, durationInFrames: 120, fps: 30, children: _jsx(RenderButton, { onError: onError, renderData: data
87
- ? {
88
- cardOrder,
89
- emojiIndex,
90
- location: data.location,
91
- theme: colorMode,
92
- trending: data.trending,
93
- }
94
- : null }) })] }), error ? _jsx(DemoError, {}) : null, _jsx(DownloadNudge, {})] }));
95
- };
@@ -1,10 +0,0 @@
1
- export type Position = {
2
- x: number;
3
- y: number;
4
- };
5
- export declare const paddingAndMargin = 20;
6
- export declare const cardHeight: number;
7
- export declare const cardWidth: number;
8
- export declare const getPositionForIndex: (index: number) => Position;
9
- export declare const getInitialPositions: () => Position[];
10
- export declare const getIndexFromPosition: (clientX: number, clientY: number) => 0 | 1 | 3 | 2 | undefined;
@@ -1,29 +0,0 @@
1
- export const paddingAndMargin = 20;
2
- const height = 360;
3
- const width = 640;
4
- export const cardHeight = (height - paddingAndMargin * 3) / 2;
5
- export const cardWidth = (width - paddingAndMargin * 3) / 2;
6
- export const getPositionForIndex = (index) => {
7
- const x = index % 2 === 0 ? paddingAndMargin : cardWidth + paddingAndMargin * 2;
8
- const y = index < 2 ? paddingAndMargin : cardHeight + paddingAndMargin * 2;
9
- return { x, y };
10
- };
11
- export const getInitialPositions = () => {
12
- return new Array(4).fill(true).map((_, i) => getPositionForIndex(i));
13
- };
14
- export const getIndexFromPosition = (clientX, clientY) => {
15
- const left = clientX < cardWidth / 2 + paddingAndMargin;
16
- const top = clientY < cardHeight / 2 + paddingAndMargin;
17
- if (left && top) {
18
- return 0;
19
- }
20
- if (!left && top) {
21
- return 1;
22
- }
23
- if (left && !top) {
24
- return 2;
25
- }
26
- if (!left && !top) {
27
- return 3;
28
- }
29
- };
@@ -1,6 +0,0 @@
1
- export type Location = {
2
- country: string;
3
- city: string;
4
- latitude: number | string;
5
- longitude: number | string;
6
- };
File without changes
@@ -1,3 +0,0 @@
1
- import React from 'react';
2
- declare const EvaluateRemotionSection: React.FC;
3
- export default EvaluateRemotionSection;
@@ -1,39 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- // Adjustments to the EvaluateRemotionSection.tsx to separate the flex box into two boxes
3
- // with specified alignment and positioning requirements.
4
- import { useEffect, useState } from 'react';
5
- import { BlueButton } from './layout/Button';
6
- const EvaluateRemotionSection = () => {
7
- const [dailyAvatars, setDailyAvatars] = useState([]);
8
- useEffect(() => {
9
- const avatars = [
10
- '/img/freelancers/alex.jpeg',
11
- '/img/freelancers/antoine.jpeg',
12
- '/img/freelancers/ayush.png',
13
- '/img/freelancers/benjamin.jpeg',
14
- '/img/freelancers/florent.jpeg',
15
- '/img/freelancers/karel.jpeg',
16
- '/img/freelancers/lorenzo.jpeg',
17
- '/img/freelancers/mickael.jpeg',
18
- '/img/freelancers/mohit.jpeg',
19
- '/img/freelancers/pramod.jpg',
20
- '/img/freelancers/pranav.jpg',
21
- '/img/freelancers/rahul.png',
22
- '/img/freelancers/ray.jpeg',
23
- '/img/freelancers/stephen.png',
24
- '/img/freelancers/umungo.png',
25
- '/img/freelancers/yehor.jpeg',
26
- '/img/freelancers/andrei.png',
27
- // Add more avatar paths here
28
- ];
29
- const selectedAvatars = [];
30
- for (let i = 0; i < 3; i++) {
31
- const index = Math.floor(Math.random() * avatars.length);
32
- selectedAvatars.push(avatars[index]);
33
- avatars.splice(index, 1); // Remove selected avatar to avoid duplicates
34
- }
35
- setDailyAvatars(selectedAvatars);
36
- }, []);
37
- return (_jsxs("div", { className: "flex flex-col lg:flex-row gap-2", children: [_jsxs("div", { className: 'card flex-1 flex flex-col', children: [_jsx("div", { className: 'fontbrand text-2xl font-bold', children: "Evaluate Remotion for your company" }), _jsx("p", { className: 'text-muted fontbrand leading-snug', children: "Book a 20 minute call with us to get all your questions answered." }), _jsx("div", { className: "flex-1" }), _jsx("a", { target: "_blank", href: "https://cal.com/remotion/evaluate", style: { textDecoration: 'none' }, children: _jsx(BlueButton, { size: "sm", loading: false, children: "Schedule a call" }) })] }), _jsxs("div", { className: 'card flex-1 flex flex-col', children: [_jsx("div", { className: 'fontbrand text-2xl font-bold', children: "Get help for your projects" }), _jsx("p", { className: 'text-muted fontbrand leading-snug', children: "Contact our experts for help and work." }), _jsx("div", { className: "flex-1" }), _jsxs("div", { className: 'flex flex-row justify-between', children: [_jsx("a", { href: "/experts", style: { textDecoration: 'none' }, children: _jsx(BlueButton, { size: "sm", loading: false, children: "Remotion Experts" }) }), _jsx("div", { className: 'flex justify-end items-end gap-3', children: dailyAvatars.map((avatar) => (_jsx("div", { className: 'w-12 h-12 rounded-full bg-muted bg-cover bg-center -ml-5 border-2 border-black', style: { backgroundImage: `url(${avatar})` } }, avatar))) })] })] })] }));
38
- };
39
- export default EvaluateRemotionSection;
@@ -1,4 +0,0 @@
1
- import React from 'react';
2
- export declare const FreePricing: React.FC;
3
- export declare const EnterpriseLicense: React.FC;
4
- export declare const CompanyPricing: React.FC;
@@ -1,75 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import React, { useCallback, useMemo } from 'react';
3
- import { cn } from '../../cn';
4
- import { Counter } from './Counter';
5
- import { InfoTooltip } from './InfoTooltip';
6
- import { PricingBulletPoint } from './PricingBulletPoint';
7
- const Container = ({ children, }) => {
8
- return (_jsx("div", { className: 'flex flex-col border-effect rounded-xl p-5 bg-pane', children: children }));
9
- };
10
- const Title = ({ children }) => {
11
- return (_jsx("div", { className: "text-4xl font-bold leading-none fontbrand mt-2 mb-5", children: children }));
12
- };
13
- const Audience = ({ children }) => {
14
- return _jsx("div", { className: 'fontbrand text-lg leading-none', children: children });
15
- };
16
- const BottomInfo = ({ children, className, ...props }) => {
17
- return (_jsx("div", { className: cn(className, 'text-[var(--subtitle)] fontbrand text-sm'), ...props, children: children }));
18
- };
19
- const PriceTag = ({ children }) => {
20
- return (_jsx("div", { className: 'fontbrand text-2xl font-bold min-w-[80px] w-auto text-right shrink-0 ml-4', children: children }));
21
- };
22
- const SmallPriceTag = ({ children }) => {
23
- return (_jsx("div", { className: 'fontbrand text-2xl font-medium w-auto min-w-[80px] text-right shrink-0', children: children }));
24
- };
25
- export const FreePricing = () => {
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 })] }));
27
- };
28
- const textUnitWrapper = {
29
- display: 'flex',
30
- flexDirection: 'column',
31
- };
32
- export const EnterpriseLicense = () => {
33
- return (_jsxs(Container, { children: [_jsx(Audience, { children: "For advanced needs" }), _jsx(Title, { children: "Enterprise License" }), _jsx(PricingBulletPoint, { text: "Everything in Company License", checked: true }), _jsx(PricingBulletPoint, { text: "Custom terms, billing and pricing", checked: true }), _jsx(PricingBulletPoint, { text: "Compliance forms", checked: true }), _jsx(PricingBulletPoint, { text: "Prioritized feature requests", checked: true }), _jsx(PricingBulletPoint, { text: "Private Slack or Discord", checked: true }), _jsx(PricingBulletPoint, { text: "Monthly consulting session", checked: true }), _jsx("div", { style: { height: 30 } }), _jsx("div", { className: 'flex flex-row justify-end', children: _jsxs("div", { style: {
34
- ...textUnitWrapper,
35
- alignItems: 'flex-end',
36
- }, children: [_jsx(PriceTag, { children: _jsx("a", { className: 'cursor-pointer no-underline text-inherit hover:text-brand', target: '_blank', href: "https://www.remotion.pro/contact", children: "Contact us" }) }), _jsx("div", { className: 'text-[var(--subtitle)] fontbrand text-sm', children: "Starting at $500 per month" })] }) })] }));
37
- };
38
- const SEAT_PRICE = 25;
39
- const RENDER_UNIT_PRICE = 10;
40
- const WEBCODECS_UNIT_PRICE = 10;
41
- const icon = {
42
- height: 16,
43
- marginLeft: 4,
44
- };
45
- export const CompanyPricing = () => {
46
- const [devSeatCount, setDevSeatCount] = React.useState(1);
47
- const [cloudRenders, setCloudRenders] = React.useState(1000);
48
- const [creations, setCreations] = React.useState(1000);
49
- const formatPrice = useCallback((price) => {
50
- const formatter = new Intl.NumberFormat('en-US', {
51
- style: 'currency',
52
- currency: 'USD',
53
- maximumFractionDigits: 0,
54
- });
55
- return formatter.format(price);
56
- }, []);
57
- const totalPrice = useMemo(() => {
58
- return Math.max(100, devSeatCount * SEAT_PRICE +
59
- (cloudRenders / 1000) * RENDER_UNIT_PRICE +
60
- (creations / 1000) * WEBCODECS_UNIT_PRICE);
61
- }, [cloudRenders, devSeatCount, creations]);
62
- const totalPriceString = useMemo(() => {
63
- return formatPrice(totalPrice);
64
- }, [formatPrice, totalPrice]);
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" }) })] }) }) })] }));
75
- };
@@ -1,2 +0,0 @@
1
- import React from 'react';
2
- export declare const GetStarted: React.FC;
@@ -1,14 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useState } from 'react';
3
- import { GithubButton } from './GitHubButton';
4
- import { PlainButton } from './layout/Button';
5
- export const GetStarted = () => {
6
- const [clicked, setClicked] = useState(null);
7
- return (_jsxs("div", { className: "flex flex-col lg:flex-row items-center justify-center text-center w-full", children: [_jsx("div", { className: "w-full lg:w-auto", children: _jsxs("div", { className: "flex flex-row w-full ", children: [clicked ? (_jsx("div", { style: {
8
- animation: 'click 0.7s linear',
9
- animationFillMode: 'forwards',
10
- }, className: "absolute z-0 top-0 font-mono text-sm text-center w-full", children: "Copied!" }, clicked)) : null, _jsx("div", { className: "bg-[#333] text-white rounded-lg px-4 font-mono hover:[#444] cursor-pointer justify-center items-center flex flex-1 min-h-12", onClick: () => {
11
- navigator.clipboard.writeText('npx create-video@latest');
12
- setClicked(Date.now());
13
- }, title: "Click to copy", children: "$ npx create-video@latest" })] }) }), _jsx("div", { className: "w-2 h-2" }), _jsx("div", { className: "w-full lg:w-auto", children: _jsx("a", { className: 'no-underline w-full block', href: "https://www.youtube.com/watch?v=deg8bOoziaE", target: "_blank", children: _jsx(PlainButton, { size: "sm", loading: false, className: "w-full", children: "Watch demo" }) }) }), _jsx("div", { style: { width: 10, height: 10 } }), _jsx("a", { className: 'no-underline w-full lg:w-auto', href: "/docs", children: _jsx(PlainButton, { size: "sm", loading: false, className: "w-full", children: "Docs" }) }), _jsx("div", { className: "w-2 h-2" }), _jsx("a", { className: "no-underline w-full lg:w-auto", href: "https://remotion.dev/discord", target: "_blank", children: _jsx(PlainButton, { size: "sm", loading: false, className: "w-full", children: "Discord" }) }), _jsx("div", { className: "w-2 h-2" }), _jsx("a", { className: "no-underline w-full lg:w-auto", href: "https://github.com/remotion-dev/remotion", target: "_blank", children: _jsx(PlainButton, { size: "sm", loading: false, className: "w-full", children: _jsx(GithubButton, {}) }) })] }));
14
- };
@@ -1,2 +0,0 @@
1
- import React from 'react';
2
- export declare const GithubButton: React.FC;
@@ -1,7 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- const GithubIcon = () => {
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
- };
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: '22k' })] }));
7
- };
@@ -1,6 +0,0 @@
1
- import type { Template } from 'create-video';
2
- import React from 'react';
3
- export declare const IconForTemplate: React.FC<{
4
- readonly template: Template;
5
- readonly scale: number;
6
- }>;
@@ -1,98 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { Blank } from '../icons/blank';
3
- import { CodeHike } from '../icons/code-hike';
4
- import { Cubes } from '../icons/cubes';
5
- import { JSIcon } from '../icons/js';
6
- import { MusicIcon } from '../icons/music';
7
- import { NextIcon } from '../icons/next';
8
- import { OverlayIcon } from '../icons/overlay';
9
- import { Recorder } from '../icons/recorder';
10
- import { ReactRouterIcon } from '../icons/remix';
11
- import { SkiaIcon } from '../icons/skia';
12
- import { Stargazer } from '../icons/stargazer';
13
- import { StillIcon } from '../icons/still';
14
- import { TikTok } from '../icons/tiktok';
15
- import { TypeScriptIcon } from '../icons/ts';
16
- import { TTSIcon } from '../icons/tts';
17
- import { Waveform } from '../icons/waveform';
18
- export const IconForTemplate = ({ template, scale = 1 }) => {
19
- if (template.cliId === 'hello-world') {
20
- return (_jsx(TypeScriptIcon, { style: {
21
- height: scale * 48,
22
- } }));
23
- }
24
- if (template.cliId === 'blank') {
25
- return (_jsx(Blank, { style: {
26
- height: scale * 36,
27
- overflow: 'visible',
28
- } }));
29
- }
30
- if (template.cliId === 'javascript') {
31
- return (_jsx(JSIcon, { style: {
32
- height: scale * 40,
33
- } }));
34
- }
35
- if (template.cliId === 'three') {
36
- return (_jsx(Cubes, { style: {
37
- height: scale * 36,
38
- } }));
39
- }
40
- if (template.cliId === 'still') {
41
- return (_jsx(StillIcon, { style: {
42
- height: scale * 36,
43
- } }));
44
- }
45
- if (template.cliId === 'audiogram') {
46
- return (_jsx(Waveform, { style: {
47
- height: scale * 36,
48
- } }));
49
- }
50
- if (template.cliId === 'tts') {
51
- return (_jsx(TTSIcon, { style: {
52
- height: scale * 36,
53
- } }));
54
- }
55
- if (template.cliId === 'google-tts') {
56
- return (_jsx(TTSIcon, { style: {
57
- height: scale * 36,
58
- } }));
59
- }
60
- if (template.cliId === 'skia') {
61
- return (_jsx(SkiaIcon, { style: {
62
- height: scale * 32,
63
- } }));
64
- }
65
- if (template.cliId === 'music-visualization') {
66
- return (_jsx(MusicIcon, { style: {
67
- height: scale * 32,
68
- } }));
69
- }
70
- if (template.cliId === 'react-router') {
71
- return (_jsx(ReactRouterIcon, { style: {
72
- height: scale * 32,
73
- } }));
74
- }
75
- if (template.cliId === 'overlay') {
76
- return _jsx(OverlayIcon, { style: { height: scale * 42 } });
77
- }
78
- if (template.cliId === 'recorder') {
79
- return _jsx(Recorder, { style: { height: scale * 36 } });
80
- }
81
- if (template.cliId === 'next' ||
82
- template.cliId === 'next-tailwind' ||
83
- template.cliId === 'next-pages-dir') {
84
- return _jsx(NextIcon, { style: { height: scale * 36 } });
85
- }
86
- if (template.cliId === 'stargazer') {
87
- return _jsx(Stargazer, { style: { height: scale * 36 } });
88
- }
89
- if (template.cliId === 'tiktok') {
90
- return _jsx(TikTok, { style: { height: scale * 36 } });
91
- }
92
- if (template.cliId === 'code-hike') {
93
- return _jsx(CodeHike, { style: { height: scale * 36 } });
94
- }
95
- return (_jsx(Blank, { style: {
96
- height: scale * 40,
97
- } }));
98
- };
@@ -1,3 +0,0 @@
1
- import React from 'react';
2
- export declare const isWebkit: () => boolean;
3
- export declare const IfYouKnowReact: React.FC;
@@ -1,23 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useEffect, useState } from 'react';
3
- export const isWebkit = () => {
4
- if (typeof window === 'undefined') {
5
- return false;
6
- }
7
- const isSafariUserAgent = Boolean(navigator.userAgent.match(/Version\/[\d.]+.*Safari/));
8
- const isChrome = Boolean(navigator.userAgent.match(/CriOS\//));
9
- return isSafariUserAgent || isChrome;
10
- };
11
- const icon = {
12
- height: 16,
13
- marginLeft: 10,
14
- };
15
- export const IfYouKnowReact = () => {
16
- const [vid, setVid] = useState('/img/compose.webm');
17
- useEffect(() => {
18
- if (isWebkit()) {
19
- setVid('/img/compose.mp4');
20
- }
21
- }, []);
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" }) })] })] })] }));
23
- };
@@ -1,6 +0,0 @@
1
- import React from 'react';
2
- interface InfoTooltipProps {
3
- readonly text: string;
4
- }
5
- export declare const InfoTooltip: React.FC<InfoTooltipProps>;
6
- export {};
@@ -1,6 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useState } from 'react';
3
- export const InfoTooltip = ({ text }) => {
4
- const [isVisible, setIsVisible] = useState(false);
5
- return (_jsxs("span", { className: "relative inline-block ml-1 text-gray-600 cursor-default", onMouseEnter: () => setIsVisible(true), onMouseLeave: () => setIsVisible(false), children: [_jsx("span", { style: { fontSize: '1rem' }, children: "\u24D8" }), isVisible && (_jsxs("span", { className: "absolute bottom-full left-1/2 transform -translate-x-1/2 bg-gray-800 text-white p-2 rounded text-xs whitespace-nowrap z-10 cursor-default", children: [text, _jsx("span", { className: "absolute top-full left-1/2 transform -translate-x-1/2 border-5 border-solid border-gray-800 border-t-transparent border-r-transparent border-b-transparent border-l-transparent cursor-default" })] }))] }));
6
- };
@@ -1,2 +0,0 @@
1
- import React from 'react';
2
- export declare const MoreTemplatesButton: React.FC;
@@ -1,10 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useMobileLayout } from './layout/use-mobile-layout';
3
- const icon = {
4
- height: 16,
5
- marginLeft: 10,
6
- };
7
- export const MoreTemplatesButton = () => {
8
- const mobileLayout = useMobileLayout();
9
- return (_jsx("a", { href: "/templates", className: "no-underline text-inherit", children: _jsxs("div", { className: "right-0 border-2 rounded-full text-inherit px-4 py-2 fontbrand font-semibold text-sm flex flex-row items-center", 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" }) })] }) }));
10
- };
@@ -1,2 +0,0 @@
1
- import React from 'react';
2
- export declare const MoreVideoPowerSection: React.FC;
@@ -1,16 +0,0 @@
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
- };
@@ -1,7 +0,0 @@
1
- import React from 'react';
2
- export declare const MuxVideo: React.ForwardRefExoticComponent<Omit<React.ClassAttributes<HTMLVideoElement> & React.VideoHTMLAttributes<HTMLVideoElement> & {
3
- readonly muxId: string;
4
- }, "ref"> & React.RefAttributes<HTMLVideoElement>>;
5
- export declare const NewMuxVideo: React.FC<{
6
- readonly muxId: string;
7
- }>;
@@ -1,45 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import Hls from 'hls.js';
3
- import { forwardRef, useEffect, useImperativeHandle, useRef } from 'react';
4
- import { VideoPlayerWithControls } from './VideoPlayerWithControls';
5
- const getVideoToPlayUrl = (muxId) => {
6
- return `https://stream.mux.com/${muxId}.m3u8`;
7
- };
8
- const MuxVideoForward = ({ muxId, ...props }, ref) => {
9
- const videoRef = useRef(null);
10
- const vidUrl = getVideoToPlayUrl(muxId);
11
- useImperativeHandle(ref, () => videoRef.current, []);
12
- useEffect(() => {
13
- let hls;
14
- if (videoRef.current) {
15
- const { current } = videoRef;
16
- if (current.canPlayType('application/vnd.apple.mpegurl')) {
17
- // Some browers (safari and ie edge) support HLS natively
18
- current.src = vidUrl;
19
- }
20
- else if (Hls.isSupported()) {
21
- // This will run in all other modern browsers
22
- hls = new Hls();
23
- hls.loadSource(vidUrl);
24
- hls.attachMedia(current);
25
- }
26
- else {
27
- // eslint-disable-next-line no-console
28
- console.error("This is a legacy browser that doesn't support MSE");
29
- }
30
- }
31
- return () => {
32
- if (hls) {
33
- hls.destroy();
34
- }
35
- };
36
- }, [vidUrl, videoRef]);
37
- return _jsx("video", { ref: videoRef, ...props });
38
- };
39
- export const MuxVideo = forwardRef(MuxVideoForward);
40
- export const NewMuxVideo = ({ muxId }) => {
41
- return (_jsx(VideoPlayerWithControls, { playbackId: muxId, poster: 'https://image.mux.com/' + muxId + '/thumbnail.png?time=1', onError: (error) => {
42
- // eslint-disable-next-line no-console
43
- console.log(error);
44
- }, onLoaded: () => undefined, onSize: () => undefined }));
45
- };
@@ -1,2 +0,0 @@
1
- import React from 'react';
2
- export declare const NewsletterButton: React.FC<{}>;
@@ -1,39 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useCallback, useState } from 'react';
3
- import { BlueButton } from './layout/Button';
4
- import { Spacer } from './Spacer';
5
- import { SectionTitle } from './VideoAppsTitle';
6
- export const NewsletterButton = () => {
7
- const [email, setEmail] = useState('');
8
- const [submitting, setSubmitting] = useState(false);
9
- const [subscribed, setSubscribed] = useState(false);
10
- const handleSubmit = useCallback(async (e) => {
11
- try {
12
- setSubmitting(true);
13
- e.preventDefault();
14
- const response = await fetch('https://www.remotion.pro/api/newsletter', {
15
- method: 'POST',
16
- body: JSON.stringify({ email }),
17
- headers: {
18
- 'content-type': 'application/json',
19
- },
20
- });
21
- const json = await response.json();
22
- if (json.success) {
23
- setSubscribed(true);
24
- }
25
- else {
26
- // eslint-disable-next-line no-alert
27
- alert('Something went wrong. Please try again later.');
28
- }
29
- setSubmitting(false);
30
- }
31
- catch (_a) {
32
- // eslint-disable-next-line no-alert
33
- alert('Something went wrong. Please try again later.');
34
- }
35
- }, [email]);
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: {
37
- width: '100%',
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' }) })] })] }) }) }) }));
39
- };
@@ -1,2 +0,0 @@
1
- import React from 'react';
2
- export declare const ParameterizeAndEdit: React.FC;