@remotion/promo-pages 4.0.460 → 4.0.462
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Homepage.js +860 -450
- package/dist/cn.d.ts +2 -0
- package/dist/cn.js +5 -0
- package/dist/components/3DEngine/ButtonDemo.d.ts +2 -0
- package/dist/components/3DEngine/ButtonDemo.js +43 -0
- package/dist/components/3DEngine/Faces.d.ts +5 -0
- package/dist/components/3DEngine/Faces.js +7 -0
- package/dist/components/3DEngine/Outer.d.ts +8 -0
- package/dist/components/3DEngine/Outer.js +56 -0
- package/dist/components/3DEngine/Switch.d.ts +4 -0
- package/dist/components/3DEngine/Switch.js +4 -0
- package/dist/components/3DEngine/get-child-node-from.d.ts +1 -0
- package/dist/components/3DEngine/get-child-node-from.js +14 -0
- package/dist/components/3DEngine/hover-transforms.d.ts +9 -0
- package/dist/components/3DEngine/hover-transforms.js +177 -0
- package/dist/components/BackButton.d.ts +6 -0
- package/dist/components/BackButton.js +9 -0
- package/dist/components/CommandCopyButton.d.ts +5 -0
- package/dist/components/CommandCopyButton.js +4 -0
- package/dist/components/Homepage.d.ts +6 -0
- package/dist/components/Homepage.js +20 -0
- package/dist/components/ManageTeamMembers.d.ts +2 -0
- package/dist/components/ManageTeamMembers.js +42 -0
- package/dist/components/Spinner.d.ts +3 -0
- package/dist/components/Spinner.js +4 -0
- package/dist/components/TeamPicture.d.ts +1 -0
- package/dist/components/TeamPicture.js +4 -0
- package/dist/components/design.d.ts +1 -0
- package/dist/components/design.js +33 -0
- package/dist/components/experts/ExpertsPage.d.ts +11 -0
- package/dist/components/experts/ExpertsPage.js +50 -0
- package/dist/components/experts/experts-data.d.ts +19 -0
- package/dist/components/experts/experts-data.js +391 -0
- package/dist/components/experts/experts-icons.d.ts +8 -0
- package/dist/components/experts/experts-icons.js +42 -0
- package/dist/components/experts.d.ts +3 -0
- package/dist/components/experts.js +2 -0
- package/dist/components/homepage/BackgroundAnimation.d.ts +2 -0
- package/dist/components/homepage/BackgroundAnimation.js +66 -0
- package/dist/components/homepage/ChooseTemplate.d.ts +2 -0
- package/dist/components/homepage/ChooseTemplate.js +25 -0
- package/dist/components/homepage/CommunityStats.d.ts +3 -0
- package/dist/components/homepage/CommunityStats.js +6 -0
- package/dist/components/homepage/CommunityStatsItems.d.ts +7 -0
- package/dist/components/homepage/CommunityStatsItems.js +58 -0
- package/dist/components/homepage/Demo/Card.d.ts +15 -0
- package/dist/components/homepage/Demo/Card.js +174 -0
- package/dist/components/homepage/Demo/Cards.d.ts +15 -0
- package/dist/components/homepage/Demo/Cards.js +57 -0
- package/dist/components/homepage/Demo/Comp.d.ts +38 -0
- package/dist/components/homepage/Demo/Comp.js +72 -0
- package/dist/components/homepage/Demo/CurrentCountry.d.ts +9 -0
- package/dist/components/homepage/Demo/CurrentCountry.js +48 -0
- package/dist/components/homepage/Demo/DemoError.d.ts +2 -0
- package/dist/components/homepage/Demo/DemoError.js +10 -0
- package/dist/components/homepage/Demo/DemoErrorIcon.d.ts +2 -0
- package/dist/components/homepage/Demo/DemoErrorIcon.js +16 -0
- package/dist/components/homepage/Demo/DemoRender.d.ts +33 -0
- package/dist/components/homepage/Demo/DemoRender.js +107 -0
- package/dist/components/homepage/Demo/DigitWheel.d.ts +9 -0
- package/dist/components/homepage/Demo/DigitWheel.js +94 -0
- package/dist/components/homepage/Demo/DisplayedEmoji.d.ts +5 -0
- package/dist/components/homepage/Demo/DisplayedEmoji.js +59 -0
- package/dist/components/homepage/Demo/DoneCheckmark.d.ts +2 -0
- package/dist/components/homepage/Demo/DoneCheckmark.js +20 -0
- package/dist/components/homepage/Demo/DownloadNudge.d.ts +2 -0
- package/dist/components/homepage/Demo/DownloadNudge.js +27 -0
- package/dist/components/homepage/Demo/DragAndDropNudge.d.ts +3 -0
- package/dist/components/homepage/Demo/DragAndDropNudge.js +26 -0
- package/dist/components/homepage/Demo/EmojiCard.d.ts +10 -0
- package/dist/components/homepage/Demo/EmojiCard.js +120 -0
- package/dist/components/homepage/Demo/Minus.d.ts +5 -0
- package/dist/components/homepage/Demo/Minus.js +11 -0
- package/dist/components/homepage/Demo/PlayPauseButton.d.ts +5 -0
- package/dist/components/homepage/Demo/PlayPauseButton.js +47 -0
- package/dist/components/homepage/Demo/PlayerControls.d.ts +8 -0
- package/dist/components/homepage/Demo/PlayerControls.js +15 -0
- package/dist/components/homepage/Demo/PlayerSeekBar.d.ts +11 -0
- package/dist/components/homepage/Demo/PlayerSeekBar.js +216 -0
- package/dist/components/homepage/Demo/PlayerVolume.d.ts +5 -0
- package/dist/components/homepage/Demo/PlayerVolume.js +53 -0
- package/dist/components/homepage/Demo/Progress.d.ts +4 -0
- package/dist/components/homepage/Demo/Progress.js +14 -0
- package/dist/components/homepage/Demo/Spinner.d.ts +5 -0
- package/dist/components/homepage/Demo/Spinner.js +37 -0
- package/dist/components/homepage/Demo/Switcher.d.ts +6 -0
- package/dist/components/homepage/Demo/Switcher.js +25 -0
- package/dist/components/homepage/Demo/Temperature.d.ts +6 -0
- package/dist/components/homepage/Demo/Temperature.js +21 -0
- package/dist/components/homepage/Demo/TemperatureNumber.d.ts +5 -0
- package/dist/components/homepage/Demo/TemperatureNumber.js +36 -0
- package/dist/components/homepage/Demo/ThemeNudge.d.ts +3 -0
- package/dist/components/homepage/Demo/ThemeNudge.js +35 -0
- package/dist/components/homepage/Demo/TimeDisplay.d.ts +6 -0
- package/dist/components/homepage/Demo/TimeDisplay.js +27 -0
- package/dist/components/homepage/Demo/TrendingRepos.d.ts +6 -0
- package/dist/components/homepage/Demo/TrendingRepos.js +65 -0
- package/dist/components/homepage/Demo/icons.d.ts +10 -0
- package/dist/components/homepage/Demo/icons.js +22 -0
- package/dist/components/homepage/Demo/index.d.ts +2 -0
- package/dist/components/homepage/Demo/index.js +95 -0
- package/dist/components/homepage/Demo/math.d.ts +10 -0
- package/dist/components/homepage/Demo/math.js +29 -0
- package/dist/components/homepage/Demo/types.d.ts +6 -0
- package/dist/components/homepage/Demo/types.js +0 -0
- package/dist/components/homepage/EditorStarterSection.d.ts +3 -0
- package/dist/components/homepage/EditorStarterSection.js +8 -0
- package/dist/components/homepage/EvaluateRemotion.d.ts +3 -0
- package/dist/components/homepage/EvaluateRemotion.js +21 -0
- package/dist/components/homepage/FreePricing.d.ts +4 -0
- package/dist/components/homepage/FreePricing.js +133 -0
- package/dist/components/homepage/GetStartedStrip.d.ts +2 -0
- package/dist/components/homepage/GetStartedStrip.js +14 -0
- package/dist/components/homepage/GitHubButton.d.ts +2 -0
- package/dist/components/homepage/GitHubButton.js +7 -0
- package/dist/components/homepage/IconForTemplate.d.ts +6 -0
- package/dist/components/homepage/IconForTemplate.js +105 -0
- package/dist/components/homepage/IfYouKnowReact.d.ts +3 -0
- package/dist/components/homepage/IfYouKnowReact.js +23 -0
- package/dist/components/homepage/MoreTemplatesButton.d.ts +2 -0
- package/dist/components/homepage/MoreTemplatesButton.js +11 -0
- package/dist/components/homepage/MuxVideo.d.ts +7 -0
- package/dist/components/homepage/MuxVideo.js +45 -0
- package/dist/components/homepage/NewsletterButton.d.ts +2 -0
- package/dist/components/homepage/NewsletterButton.js +38 -0
- package/dist/components/homepage/ParameterizeAndEdit.d.ts +2 -0
- package/dist/components/homepage/ParameterizeAndEdit.js +22 -0
- package/dist/components/homepage/Pricing.d.ts +2 -0
- package/dist/components/homepage/Pricing.js +15 -0
- package/dist/components/homepage/PricingBulletPoint.d.ts +6 -0
- package/dist/components/homepage/PricingBulletPoint.js +19 -0
- package/dist/components/homepage/RealMp4Videos.d.ts +2 -0
- package/dist/components/homepage/RealMp4Videos.js +41 -0
- package/dist/components/homepage/Spacer.d.ts +2 -0
- package/dist/components/homepage/Spacer.js +4 -0
- package/dist/components/homepage/TemplateIcon.d.ts +5 -0
- package/dist/components/homepage/TemplateIcon.js +24 -0
- package/dist/components/homepage/TextInput.d.ts +7 -0
- package/dist/components/homepage/TextInput.js +34 -0
- package/dist/components/homepage/TrustedByBanner.d.ts +2 -0
- package/dist/components/homepage/TrustedByBanner.js +27 -0
- package/dist/components/homepage/VideoApps.d.ts +4 -0
- package/dist/components/homepage/VideoApps.js +72 -0
- package/dist/components/homepage/VideoAppsShowcase.d.ts +3 -0
- package/dist/components/homepage/VideoAppsShowcase.js +139 -0
- package/dist/components/homepage/VideoAppsTitle.d.ts +4 -0
- package/dist/components/homepage/VideoAppsTitle.js +4 -0
- package/dist/components/homepage/VideoPlayerWithControls.d.ts +20 -0
- package/dist/components/homepage/VideoPlayerWithControls.js +105 -0
- package/dist/components/homepage/WriteInReact.d.ts +2 -0
- package/dist/components/homepage/WriteInReact.js +10 -0
- package/dist/components/homepage/YouAreHere.d.ts +2 -0
- package/dist/components/homepage/YouAreHere.js +23 -0
- package/dist/components/homepage/layout/Button.d.ts +22 -0
- package/dist/components/homepage/layout/Button.js +30 -0
- package/dist/components/homepage/layout/colors.d.ts +13 -0
- package/dist/components/homepage/layout/colors.js +14 -0
- package/dist/components/homepage/layout/use-color-mode.d.ts +21 -0
- package/dist/components/homepage/layout/use-color-mode.js +22 -0
- package/dist/components/homepage/layout/use-el-size.d.ts +5 -0
- package/dist/components/homepage/layout/use-el-size.js +40 -0
- package/dist/components/homepage/layout/use-mobile-layout.d.ts +1 -0
- package/dist/components/homepage/layout/use-mobile-layout.js +6 -0
- package/dist/components/icons/blank.d.ts +3 -0
- package/dist/components/icons/blank.js +4 -0
- package/dist/components/icons/brain.d.ts +2 -0
- package/dist/components/icons/brain.js +4 -0
- package/dist/components/icons/clone.d.ts +2 -0
- package/dist/components/icons/clone.js +2 -0
- package/dist/components/icons/code-hike.d.ts +3 -0
- package/dist/components/icons/code-hike.js +4 -0
- package/dist/components/icons/cubes.d.ts +3 -0
- package/dist/components/icons/cubes.js +4 -0
- package/dist/components/icons/editor.d.ts +3 -0
- package/dist/components/icons/editor.js +4 -0
- package/dist/components/icons/electron.d.ts +4 -0
- package/dist/components/icons/electron.js +4 -0
- package/dist/components/icons/js.d.ts +3 -0
- package/dist/components/icons/js.js +4 -0
- package/dist/components/icons/music.d.ts +2 -0
- package/dist/components/icons/music.js +4 -0
- package/dist/components/icons/next.d.ts +4 -0
- package/dist/components/icons/next.js +4 -0
- package/dist/components/icons/overlay.d.ts +3 -0
- package/dist/components/icons/overlay.js +4 -0
- package/dist/components/icons/prompt-to-video.d.ts +2 -0
- package/dist/components/icons/prompt-to-video.js +4 -0
- package/dist/components/icons/recorder.d.ts +3 -0
- package/dist/components/icons/recorder.js +4 -0
- package/dist/components/icons/remix.d.ts +3 -0
- package/dist/components/icons/remix.js +4 -0
- package/dist/components/icons/render-server.d.ts +3 -0
- package/dist/components/icons/render-server.js +4 -0
- package/dist/components/icons/skia.d.ts +3 -0
- package/dist/components/icons/skia.js +4 -0
- package/dist/components/icons/stargazer.d.ts +3 -0
- package/dist/components/icons/stargazer.js +4 -0
- package/dist/components/icons/still.d.ts +3 -0
- package/dist/components/icons/still.js +4 -0
- package/dist/components/icons/tailwind.d.ts +3 -0
- package/dist/components/icons/tailwind.js +4 -0
- package/dist/components/icons/tiktok.d.ts +3 -0
- package/dist/components/icons/tiktok.js +4 -0
- package/dist/components/icons/timeline.d.ts +3 -0
- package/dist/components/icons/timeline.js +4 -0
- package/dist/components/icons/ts.d.ts +3 -0
- package/dist/components/icons/ts.js +4 -0
- package/dist/components/icons/undo.d.ts +3 -0
- package/dist/components/icons/undo.js +2 -0
- package/dist/components/icons/vercel.d.ts +4 -0
- package/dist/components/icons/vercel.js +4 -0
- package/dist/components/icons/waveform.d.ts +3 -0
- package/dist/components/icons/waveform.js +4 -0
- package/dist/components/prompts/CardLikeButton.d.ts +5 -0
- package/dist/components/prompts/CardLikeButton.js +49 -0
- package/dist/components/prompts/ClipboardIcon.d.ts +5 -0
- package/dist/components/prompts/ClipboardIcon.js +4 -0
- package/dist/components/prompts/CopyPromptButton.d.ts +4 -0
- package/dist/components/prompts/CopyPromptButton.js +13 -0
- package/dist/components/prompts/LikeButton.d.ts +5 -0
- package/dist/components/prompts/LikeButton.js +49 -0
- package/dist/components/prompts/MuxPlayer.d.ts +8 -0
- package/dist/components/prompts/MuxPlayer.js +21 -0
- package/dist/components/prompts/NewBackButton.d.ts +5 -0
- package/dist/components/prompts/NewBackButton.js +8 -0
- package/dist/components/prompts/Page.d.ts +8 -0
- package/dist/components/prompts/Page.js +7 -0
- package/dist/components/prompts/PromptsGallery.d.ts +7 -0
- package/dist/components/prompts/PromptsGallery.js +60 -0
- package/dist/components/prompts/PromptsShow.d.ts +5 -0
- package/dist/components/prompts/PromptsShow.js +17 -0
- package/dist/components/prompts/PromptsSubmit.d.ts +2 -0
- package/dist/components/prompts/PromptsSubmit.js +173 -0
- package/dist/components/prompts/config.d.ts +1 -0
- package/dist/components/prompts/config.js +1 -0
- package/dist/components/prompts/prompt-helpers.d.ts +8 -0
- package/dist/components/prompts/prompt-helpers.js +76 -0
- package/dist/components/prompts/prompt-types.d.ts +14 -0
- package/dist/components/prompts/prompt-types.js +0 -0
- package/dist/components/prompts/use-heart-animation.d.ts +5 -0
- package/dist/components/prompts/use-heart-animation.js +29 -0
- package/dist/components/team/TeamCards.d.ts +6 -0
- package/dist/components/team/TeamCards.js +19 -0
- package/dist/components/team/TitleTeamCards.d.ts +2 -0
- package/dist/components/team/TitleTeamCards.js +6 -0
- package/dist/components/team/TrustSection.d.ts +2 -0
- package/dist/components/team/TrustSection.js +59 -0
- package/dist/components/team.d.ts +3 -0
- package/dist/components/team.js +15 -0
- package/dist/components/template-modal-content.d.ts +5 -0
- package/dist/components/template-modal-content.js +73 -0
- package/dist/components/templates.d.ts +2 -0
- package/dist/components/templates.js +27 -0
- package/dist/design.js +590 -325
- package/dist/experts.js +575 -310
- package/dist/helpers/mobile-layout.d.ts +1 -0
- package/dist/helpers/mobile-layout.js +6 -0
- package/dist/helpers/use-el-size.d.ts +5 -0
- package/dist/helpers/use-el-size.js +40 -0
- package/dist/homepage/Pricing.js +590 -325
- package/dist/main.d.ts +1 -0
- package/dist/main.js +6 -0
- package/dist/prompts/PromptsGallery.js +590 -325
- package/dist/prompts/PromptsShow.js +616 -351
- package/dist/prompts/PromptsSubmit.js +616 -351
- package/dist/prompts-show.d.ts +1 -0
- package/dist/prompts-show.js +20 -0
- package/dist/prompts-submit.d.ts +1 -0
- package/dist/prompts-submit.js +6 -0
- package/dist/prompts.d.ts +1 -0
- package/dist/prompts.js +6 -0
- package/dist/team.d.ts +1 -0
- package/dist/team.js +590 -325
- package/dist/template-modal-content.js +590 -325
- package/dist/templates.js +591 -325
- package/package.json +18 -18
package/dist/cn.d.ts
ADDED
package/dist/cn.js
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback, useRef, useState } from 'react';
|
|
3
|
+
import { cn } from '../../cn';
|
|
4
|
+
import { useHoverTransforms } from './hover-transforms';
|
|
5
|
+
import { Outer } from './Outer';
|
|
6
|
+
export const Button3D = ({ children, className, disabled, ...buttonProps }) => {
|
|
7
|
+
const [dimensions, setDimensions] = useState(null);
|
|
8
|
+
const ref = useRef(null);
|
|
9
|
+
const { isActive, progress } = useHoverTransforms(ref, Boolean(disabled));
|
|
10
|
+
const onPointerEnter = useCallback((e) => {
|
|
11
|
+
if (e.pointerType !== 'mouse') {
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
setDimensions((prevDim) => {
|
|
15
|
+
if (prevDim) {
|
|
16
|
+
return prevDim;
|
|
17
|
+
}
|
|
18
|
+
if (!ref.current) {
|
|
19
|
+
throw new Error('Ref is not set');
|
|
20
|
+
}
|
|
21
|
+
const { childNodes } = ref.current;
|
|
22
|
+
if (childNodes.length === 0) {
|
|
23
|
+
throw new Error('No child nodes');
|
|
24
|
+
}
|
|
25
|
+
const childNode = childNodes[0];
|
|
26
|
+
if (!childNode) {
|
|
27
|
+
throw new Error('No child node');
|
|
28
|
+
}
|
|
29
|
+
const rect = childNode.getBoundingClientRect();
|
|
30
|
+
const { borderRadius } = getComputedStyle(childNode);
|
|
31
|
+
const cornerRadius = borderRadius.includes('e+0')
|
|
32
|
+
? Infinity
|
|
33
|
+
: parseInt(borderRadius !== null && borderRadius !== void 0 ? borderRadius : '0', 10);
|
|
34
|
+
return {
|
|
35
|
+
width: rect.width,
|
|
36
|
+
height: rect.height,
|
|
37
|
+
borderRadius: Math.min(cornerRadius, rect.width / 2, rect.height / 2),
|
|
38
|
+
};
|
|
39
|
+
});
|
|
40
|
+
}, []);
|
|
41
|
+
const content = (_jsx("button", { type: "button", disabled: disabled, className: cn('text-black', 'flex', 'justify-center', 'bg-white', 'items-center', 'font-brand', 'border-solid', 'text-[1em]', 'rounded-md', 'border-black', 'border-2', 'border-b-4', 'cursor-pointer', 'px-4', 'py-3', 'disabled:cursor-default', 'disabled:border-gray-500', 'disabled:text-gray-500', 'transition-colors', className), ...buttonProps, children: children }));
|
|
42
|
+
return (_jsx("div", { ref: ref, className: "contents", onPointerEnter: onPointerEnter, children: dimensions && (isActive || progress > 0) ? (_jsx(Outer, { parentRef: ref, width: dimensions.width, height: dimensions.height, cornerRadius: dimensions.borderRadius, hoverTransform: progress, children: content })) : (content) }));
|
|
43
|
+
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { threeDIntoSvgPath } from '@remotion/svg-3d-engine';
|
|
3
|
+
export const Faces = ({ elements, ...svgProps }) => {
|
|
4
|
+
return (_jsx(_Fragment, { children: elements.map(({ points, color, crispEdges }, idx) => {
|
|
5
|
+
return (_jsx("path", { d: threeDIntoSvgPath(points), fill: color, shapeRendering: crispEdges ? 'crispEdges' : undefined, ...svgProps }, idx));
|
|
6
|
+
}) }));
|
|
7
|
+
};
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { parsePath, PathInternals, reduceInstructions } from '@remotion/paths';
|
|
3
|
+
import { makeRect } from '@remotion/shapes';
|
|
4
|
+
import { extrudeAndTransformElement, interpolateMatrix4d, makeMatrix3dTransform, reduceMatrices, rotateX, rotateY, scaled, translateX, translateY, translateZ, } from '@remotion/svg-3d-engine';
|
|
5
|
+
import { interpolate } from 'remotion';
|
|
6
|
+
import { Faces } from './Faces';
|
|
7
|
+
import { useClickTransforms, useMousePosition } from './hover-transforms';
|
|
8
|
+
export const Outer = ({ children, width, height, cornerRadius, hoverTransform, parentRef }) => {
|
|
9
|
+
const clickTransform = useClickTransforms(parentRef);
|
|
10
|
+
const angle = useMousePosition(parentRef);
|
|
11
|
+
const appropriateScale = Math.min(1.1, (20 + width) / width);
|
|
12
|
+
const transformationUnhovered = reduceMatrices([
|
|
13
|
+
rotateX(-Math.PI / 20),
|
|
14
|
+
]);
|
|
15
|
+
const transformationHovered = reduceMatrices([
|
|
16
|
+
scaled(appropriateScale),
|
|
17
|
+
rotateX(-Math.PI / 16),
|
|
18
|
+
rotateX(Math.sin(angle) / 4),
|
|
19
|
+
rotateY(-Math.cos(angle) / 4),
|
|
20
|
+
]);
|
|
21
|
+
const transformation = interpolateMatrix4d(hoverTransform, transformationUnhovered, transformationHovered);
|
|
22
|
+
const depthFromClick = clickTransform * 15;
|
|
23
|
+
const depthFromHover = interpolate(hoverTransform, [0, 1], [10, 20]);
|
|
24
|
+
const depth = depthFromHover;
|
|
25
|
+
const frontFace = reduceMatrices([
|
|
26
|
+
translateZ(-depth / 2 + depthFromClick),
|
|
27
|
+
transformation,
|
|
28
|
+
]);
|
|
29
|
+
const centerOriented = reduceMatrices([
|
|
30
|
+
translateX(-width / 2),
|
|
31
|
+
translateY(-height / 2),
|
|
32
|
+
transformation,
|
|
33
|
+
translateX(width / 2),
|
|
34
|
+
translateY(height / 2),
|
|
35
|
+
]);
|
|
36
|
+
const { path, instructions } = makeRect({ height, width, cornerRadius });
|
|
37
|
+
const { viewBox } = PathInternals.getBoundingBoxFromInstructions(reduceInstructions(instructions));
|
|
38
|
+
const inbetween = extrudeAndTransformElement({
|
|
39
|
+
sideColor: 'black',
|
|
40
|
+
crispEdges: false,
|
|
41
|
+
depth,
|
|
42
|
+
pressInDepth: depthFromClick,
|
|
43
|
+
points: parsePath(path),
|
|
44
|
+
description: 'rect',
|
|
45
|
+
transformations: centerOriented,
|
|
46
|
+
});
|
|
47
|
+
return (_jsxs("div", { className: "relative", style: { width, height }, children: [_jsx("svg", { viewBox: viewBox, style: {
|
|
48
|
+
overflow: 'visible',
|
|
49
|
+
height,
|
|
50
|
+
width,
|
|
51
|
+
position: 'absolute',
|
|
52
|
+
top: 0,
|
|
53
|
+
}, pointerEvents: "none", children: _jsx(Faces, { elements: inbetween }) }), _jsx("div", { style: {
|
|
54
|
+
transform: makeMatrix3dTransform(frontFace),
|
|
55
|
+
}, children: children })] }));
|
|
56
|
+
};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
export const Switch = ({ active, onToggle }) => {
|
|
3
|
+
return (_jsx("div", { "data-active": active, className: "h-6 transition-all rounded-full w-12 border-2 border-b-4 bg-gray-200 p-[2px] cursor-pointer data-[active=true]:bg-brand border-black relative", onClick: onToggle, children: _jsx("div", { "data-active": active, className: "h-4 w-4 left-[4px] top-[4px] transition-all rounded-full bg-white border-2 border-black absolute data-[active=true]:left-[calc(100%-24px)]" }) }));
|
|
4
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const getChildNodeFrom: (htmlElement: HTMLDivElement | null) => HTMLElement | null;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export const getChildNodeFrom = (htmlElement) => {
|
|
2
|
+
if (!htmlElement) {
|
|
3
|
+
return null;
|
|
4
|
+
}
|
|
5
|
+
const { childNodes } = htmlElement;
|
|
6
|
+
if (childNodes.length === 0) {
|
|
7
|
+
return null;
|
|
8
|
+
}
|
|
9
|
+
const childNode = childNodes[0];
|
|
10
|
+
if (!childNode) {
|
|
11
|
+
return null;
|
|
12
|
+
}
|
|
13
|
+
return childNode;
|
|
14
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
type State = {
|
|
3
|
+
progress: number;
|
|
4
|
+
isActive: boolean;
|
|
5
|
+
};
|
|
6
|
+
export declare const useHoverTransforms: (ref: React.RefObject<HTMLDivElement | null>, disabled: boolean) => State;
|
|
7
|
+
export declare const useClickTransforms: (ref: React.RefObject<HTMLDivElement | null>) => number;
|
|
8
|
+
export declare const useMousePosition: (ref: React.RefObject<HTMLDivElement | null>) => number;
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
import React, { useEffect, useMemo, useState } from 'react';
|
|
2
|
+
import { getChildNodeFrom } from './get-child-node-from';
|
|
3
|
+
export const useHoverTransforms = (ref, disabled) => {
|
|
4
|
+
const [state, setState] = React.useState({
|
|
5
|
+
progress: 0,
|
|
6
|
+
isActive: false,
|
|
7
|
+
});
|
|
8
|
+
const eventTarget = useMemo(() => new EventTarget(), []);
|
|
9
|
+
useEffect(() => {
|
|
10
|
+
if (disabled) {
|
|
11
|
+
eventTarget.dispatchEvent(new Event('disabled'));
|
|
12
|
+
}
|
|
13
|
+
else {
|
|
14
|
+
eventTarget.dispatchEvent(new Event('enabled'));
|
|
15
|
+
}
|
|
16
|
+
}, [disabled, eventTarget]);
|
|
17
|
+
React.useEffect(() => {
|
|
18
|
+
const element = ref.current;
|
|
19
|
+
if (!element)
|
|
20
|
+
return;
|
|
21
|
+
let animationFrame;
|
|
22
|
+
let start = null;
|
|
23
|
+
let isHovered = false;
|
|
24
|
+
let internalDisabled = disabled;
|
|
25
|
+
const getIsActive = () => {
|
|
26
|
+
return isHovered && !internalDisabled;
|
|
27
|
+
};
|
|
28
|
+
const animate = (timestamp) => {
|
|
29
|
+
if (start === null)
|
|
30
|
+
start = timestamp;
|
|
31
|
+
const progress = Math.min((timestamp - start) / 150, 1);
|
|
32
|
+
setState(() => ({
|
|
33
|
+
isActive: getIsActive(),
|
|
34
|
+
progress: getIsActive() ? progress : 1 - progress,
|
|
35
|
+
}));
|
|
36
|
+
if (progress < 1) {
|
|
37
|
+
animationFrame = requestAnimationFrame(animate);
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
const animateIn = () => {
|
|
41
|
+
start = null;
|
|
42
|
+
cancelAnimationFrame(animationFrame);
|
|
43
|
+
animationFrame = requestAnimationFrame(animate);
|
|
44
|
+
};
|
|
45
|
+
const handleMouseEnter = () => {
|
|
46
|
+
const prevIsActive = getIsActive();
|
|
47
|
+
isHovered = true;
|
|
48
|
+
if (prevIsActive === getIsActive()) {
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
animateIn();
|
|
52
|
+
};
|
|
53
|
+
const handleMouseLeave = () => {
|
|
54
|
+
const prevIsActive = getIsActive();
|
|
55
|
+
isHovered = false;
|
|
56
|
+
if (prevIsActive === getIsActive()) {
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
animateIn();
|
|
60
|
+
};
|
|
61
|
+
const handleDisabled = () => {
|
|
62
|
+
const prevIsActive = getIsActive();
|
|
63
|
+
internalDisabled = true;
|
|
64
|
+
if (prevIsActive === getIsActive()) {
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
animateIn();
|
|
68
|
+
};
|
|
69
|
+
const handleEnabled = () => {
|
|
70
|
+
const prevIsActive = getIsActive();
|
|
71
|
+
internalDisabled = false;
|
|
72
|
+
if (prevIsActive === getIsActive()) {
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
animateIn();
|
|
76
|
+
};
|
|
77
|
+
element.addEventListener('mouseenter', handleMouseEnter);
|
|
78
|
+
element.addEventListener('mouseleave', handleMouseLeave);
|
|
79
|
+
eventTarget.addEventListener('disabled', handleDisabled);
|
|
80
|
+
eventTarget.addEventListener('enabled', handleEnabled);
|
|
81
|
+
return () => {
|
|
82
|
+
element.removeEventListener('mouseenter', handleMouseEnter);
|
|
83
|
+
element.removeEventListener('mouseleave', handleMouseLeave);
|
|
84
|
+
eventTarget.removeEventListener('disabled', handleDisabled);
|
|
85
|
+
eventTarget.removeEventListener('enabled', handleEnabled);
|
|
86
|
+
cancelAnimationFrame(animationFrame);
|
|
87
|
+
};
|
|
88
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
89
|
+
}, [ref, eventTarget]);
|
|
90
|
+
return state;
|
|
91
|
+
};
|
|
92
|
+
export const useClickTransforms = (ref) => {
|
|
93
|
+
const [hoverProgress, setHoverProgress] = React.useState(0);
|
|
94
|
+
React.useEffect(() => {
|
|
95
|
+
const element = getChildNodeFrom(ref.current);
|
|
96
|
+
if (!element) {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
let animationFrame;
|
|
100
|
+
let start = null;
|
|
101
|
+
let isHovered = false;
|
|
102
|
+
const animate = (timestamp) => {
|
|
103
|
+
if (start === null)
|
|
104
|
+
start = timestamp;
|
|
105
|
+
const progress = Math.min((timestamp - start) / 150, 1);
|
|
106
|
+
setHoverProgress(isHovered ? progress : 1 - progress);
|
|
107
|
+
if (progress < 1) {
|
|
108
|
+
animationFrame = requestAnimationFrame(animate);
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
const handleMouseEnter = () => {
|
|
112
|
+
isHovered = true;
|
|
113
|
+
start = null;
|
|
114
|
+
cancelAnimationFrame(animationFrame);
|
|
115
|
+
animationFrame = requestAnimationFrame(animate);
|
|
116
|
+
};
|
|
117
|
+
const handleMouseLeave = () => {
|
|
118
|
+
isHovered = false;
|
|
119
|
+
start = null;
|
|
120
|
+
cancelAnimationFrame(animationFrame);
|
|
121
|
+
animationFrame = requestAnimationFrame(animate);
|
|
122
|
+
};
|
|
123
|
+
element.addEventListener('pointerdown', handleMouseEnter);
|
|
124
|
+
element.addEventListener('pointerup', handleMouseLeave);
|
|
125
|
+
return () => {
|
|
126
|
+
element.removeEventListener('pointerdown', handleMouseEnter);
|
|
127
|
+
element.removeEventListener('pointerup', handleMouseLeave);
|
|
128
|
+
cancelAnimationFrame(animationFrame);
|
|
129
|
+
};
|
|
130
|
+
}, [ref]);
|
|
131
|
+
return hoverProgress;
|
|
132
|
+
};
|
|
133
|
+
const getAngle = (ref, coordinates) => {
|
|
134
|
+
const element = getChildNodeFrom(ref);
|
|
135
|
+
if (!element) {
|
|
136
|
+
return 0;
|
|
137
|
+
}
|
|
138
|
+
if (coordinates === null) {
|
|
139
|
+
return 0;
|
|
140
|
+
}
|
|
141
|
+
const clientRect = element.getClientRects();
|
|
142
|
+
if (!clientRect) {
|
|
143
|
+
return 0;
|
|
144
|
+
}
|
|
145
|
+
if (clientRect.length === 0) {
|
|
146
|
+
return 0;
|
|
147
|
+
}
|
|
148
|
+
const center = {
|
|
149
|
+
x: clientRect[0].x + clientRect[0].width / 2,
|
|
150
|
+
y: clientRect[0].y + clientRect[0].height / 2,
|
|
151
|
+
};
|
|
152
|
+
const angle = Math.atan2(coordinates.y - center.y, coordinates.x - center.x);
|
|
153
|
+
return angle;
|
|
154
|
+
};
|
|
155
|
+
let lastCoordinates = null;
|
|
156
|
+
export const useMousePosition = (ref) => {
|
|
157
|
+
const [angle, setAngle] = useState(getAngle(ref.current, lastCoordinates));
|
|
158
|
+
useEffect(() => {
|
|
159
|
+
const element = ref.current;
|
|
160
|
+
if (!element) {
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
const onMouseMove = (e) => {
|
|
164
|
+
const clientRect = element.getClientRects();
|
|
165
|
+
if (!clientRect) {
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
lastCoordinates = { y: e.clientY, x: e.clientX };
|
|
169
|
+
setAngle(getAngle(element, { y: e.clientY, x: e.clientX }));
|
|
170
|
+
};
|
|
171
|
+
window.addEventListener('mousemove', onMouseMove);
|
|
172
|
+
return () => {
|
|
173
|
+
window.removeEventListener('mousemove', onMouseMove);
|
|
174
|
+
};
|
|
175
|
+
}, [ref]);
|
|
176
|
+
return angle;
|
|
177
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Button } from '@remotion/design';
|
|
3
|
+
export const BackButton = ({ color, text, link }) => {
|
|
4
|
+
return (_jsx("div", { className: "justify-center items-center font-medium mb-4 block", style: {
|
|
5
|
+
fontFamily: 'GTPlanar',
|
|
6
|
+
fontWeight: 500,
|
|
7
|
+
color,
|
|
8
|
+
}, children: _jsx(Button, { href: link, className: "px-4 rounded-full text-sm h-10", children: _jsxs("div", { className: "flex row items-center justify-center px-4", children: [_jsx("svg", { className: "h-4 mr-[15px] inline-block", style: { color }, xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 448 512", children: _jsx("path", { fill: "currentcolor", d: "M9.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.2 288 416 288c17.7 0 32-14.3 32-32s-14.3-32-32-32l-306.7 0L214.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z" }) }), text] }) }) }));
|
|
9
|
+
};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
export const CommandCopyButton = ({ copied, customSvg }) => {
|
|
3
|
+
return copied ? (_jsx("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 448 512", className: "h-5", children: _jsx("path", { fill: "currentColor", d: "M438.6 105.4C451.1 117.9 451.1 138.1 438.6 150.6L182.6 406.6C170.1 419.1 149.9 419.1 137.4 406.6L9.372 278.6C-3.124 266.1-3.124 245.9 9.372 233.4C21.87 220.9 42.13 220.9 54.63 233.4L159.1 338.7L393.4 105.4C405.9 92.88 426.1 92.88 438.6 105.4H438.6z" }) })) : customSvg ? (customSvg) : (_jsx("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 384 512", className: "h-5", children: _jsx("path", { fill: "currentColor", d: "M320 64h-49.61C262.1 27.48 230.7 0 192 0S121 27.48 113.6 64H64C28.65 64 0 92.66 0 128v320c0 35.34 28.65 64 64 64h256c35.35 0 64-28.66 64-64V128C384 92.66 355.3 64 320 64zM192 48c13.23 0 24 10.77 24 24S205.2 96 192 96S168 85.23 168 72S178.8 48 192 48zM336 448c0 8.82-7.178 16-16 16H64c-8.822 0-16-7.18-16-16V128c0-8.82 7.178-16 16-16h18.26C80.93 117.1 80 122.4 80 128v16C80 152.8 87.16 160 96 160h192c8.836 0 16-7.164 16-16V128c0-5.559-.9316-10.86-2.264-16H320c8.822 0 16 7.18 16 16V448z" }) }));
|
|
4
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { BackgroundAnimation } from './homepage/BackgroundAnimation';
|
|
4
|
+
import CommunityStats from './homepage/CommunityStats';
|
|
5
|
+
import { Demo } from './homepage/Demo';
|
|
6
|
+
import EditorStarterSection from './homepage/EditorStarterSection';
|
|
7
|
+
import EvaluateRemotionSection from './homepage/EvaluateRemotion';
|
|
8
|
+
import { IfYouKnowReact } from './homepage/IfYouKnowReact';
|
|
9
|
+
import { ColorModeProvider } from './homepage/layout/use-color-mode';
|
|
10
|
+
import { NewsletterButton } from './homepage/NewsletterButton';
|
|
11
|
+
import { ParameterizeAndEdit } from './homepage/ParameterizeAndEdit';
|
|
12
|
+
import { Pricing } from './homepage/Pricing';
|
|
13
|
+
import { RealMP4Videos } from './homepage/RealMp4Videos';
|
|
14
|
+
import TrustedByBanner from './homepage/TrustedByBanner';
|
|
15
|
+
import VideoAppsShowcase from './homepage/VideoAppsShowcase';
|
|
16
|
+
import { SectionTitle } from './homepage/VideoAppsTitle';
|
|
17
|
+
import { WriteInReact } from './homepage/WriteInReact';
|
|
18
|
+
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(VideoAppsShowcase, {}), _jsx("br", {}), _jsx("br", {}), _jsx(Demo, {}), _jsx("br", {}), _jsx("br", {}), _jsx("br", {}), _jsx(SectionTitle, { children: "Pricing" }), _jsx(Pricing, {}), _jsx(TrustedByBanner, {}), _jsx("br", {}), _jsx(EvaluateRemotionSection, {}), _jsx("br", {}), _jsx("br", {}), _jsx("br", {}), _jsx(CommunityStats, {}), _jsx("br", {}), _jsx("br", {}), _jsx("br", {}), _jsx(EditorStarterSection, {}), _jsx("br", {}), _jsx("br", {}), _jsx("br", {}), _jsx("br", {}), _jsx(NewsletterButton, {}), _jsx("br", {}), _jsx("br", {}), _jsx("br", {})] })] }) }) }));
|
|
20
|
+
};
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { Button, Input } from '@remotion/design';
|
|
3
|
+
import React, { useCallback, useState } from 'react';
|
|
4
|
+
function generateId() {
|
|
5
|
+
return Math.random().toString(36).substr(2, 9);
|
|
6
|
+
}
|
|
7
|
+
const initialMembers = [
|
|
8
|
+
{ id: generateId(), name: 'alice' },
|
|
9
|
+
{ id: generateId(), name: 'bob' },
|
|
10
|
+
];
|
|
11
|
+
const Row = ({ value, onChange, onDelete, disableDelete }) => {
|
|
12
|
+
return (_jsxs("div", { className: "flex flex-row gap-2 items-center", children: [_jsx(Input, { placeholder: "Enter username", className: "w-full block flex-1", value: value, onChange: (e) => onChange(e.target.value) }), _jsx(Button, { className: "hover:text-white hover:bg-warn transition-colors w-10 h-10 p-0 rounded-full", onClick: onDelete, type: "button", disabled: disableDelete, "aria-label": "Delete member", depth: 0.5, children: _jsx("svg", { width: "16", height: "16", viewBox: "0 0 10 10", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: _jsx("path", { d: "M1 1L9 9M1 9L9 1", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round" }) }) })] }));
|
|
13
|
+
};
|
|
14
|
+
export const ManageTeamMembers = () => {
|
|
15
|
+
const [members, setMembers] = useState(initialMembers);
|
|
16
|
+
// One extra row for adding new member
|
|
17
|
+
const displayedMembers = [...members, { id: 'NEW', name: '' }];
|
|
18
|
+
const updateMember = useCallback((idx, value) => {
|
|
19
|
+
// If it's last "NEW" row, add as new member if not empty
|
|
20
|
+
if (idx === members.length) {
|
|
21
|
+
if (value.trim() !== '') {
|
|
22
|
+
setMembers((prev) => [...prev, { id: generateId(), name: value }]);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
setMembers((prev) => prev.map((m, i) => (i === idx ? { ...m, name: value } : m)));
|
|
27
|
+
}
|
|
28
|
+
}, [members.length]);
|
|
29
|
+
const deleteMember = useCallback((idx) => {
|
|
30
|
+
setMembers((prev) => prev.filter((_, i) => i !== idx));
|
|
31
|
+
}, []);
|
|
32
|
+
const [loading, setLoading] = useState(false);
|
|
33
|
+
const save = useCallback(() => {
|
|
34
|
+
setLoading(true);
|
|
35
|
+
setTimeout(() => {
|
|
36
|
+
setLoading(false);
|
|
37
|
+
}, 1000);
|
|
38
|
+
}, []);
|
|
39
|
+
return (_jsxs(_Fragment, { children: [_jsx("h2", { children: "Manage team members" }), _jsx("p", { className: "font-brand", children: "Add a new team member to your team." }), displayedMembers.map((member, idx) => (
|
|
40
|
+
// eslint-disable-next-line react/no-array-index-key
|
|
41
|
+
_jsxs(React.Fragment, { children: [_jsx(Row, { value: member.name, onChange: (val) => updateMember(idx, val), onDelete: idx < members.length ? () => deleteMember(idx) : undefined, disableDelete: idx >= members.length }), _jsx("div", { className: "h-2" })] }, idx))), _jsx("div", { className: "h-4" }), _jsx("div", { className: "flex flex-row justify-end", children: _jsx(Button, { className: "bg-brand text-white", loading: loading, onClick: save, children: "Save" }) })] }));
|
|
42
|
+
};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
export const Spinner = (props) => {
|
|
3
|
+
return (_jsxs("svg", { id: "loading", xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 32 32", width: "32", height: "32", fill: "currentColor", ...props, children: [_jsx("path", { opacity: ".1", d: "M14 0 H18 V8 H14 z", transform: "rotate(0 16 16)", children: _jsx("animate", { attributeName: "opacity", from: "1", to: ".1", dur: "1s", repeatCount: "indefinite", begin: "0" }) }), _jsx("path", { opacity: ".1", d: "M14 0 H18 V8 H14 z", transform: "rotate(45 16 16)", children: _jsx("animate", { attributeName: "opacity", from: "1", to: ".1", dur: "1s", repeatCount: "indefinite", begin: "0.125s" }) }), _jsx("path", { opacity: ".1", d: "M14 0 H18 V8 H14 z", transform: "rotate(90 16 16)", children: _jsx("animate", { attributeName: "opacity", from: "1", to: ".1", dur: "1s", repeatCount: "indefinite", begin: "0.25s" }) }), _jsx("path", { opacity: ".1", d: "M14 0 H18 V8 H14 z", transform: "rotate(135 16 16)", children: _jsx("animate", { attributeName: "opacity", from: "1", to: ".1", dur: "1s", repeatCount: "indefinite", begin: "0.375s" }) }), _jsx("path", { opacity: ".1", d: "M14 0 H18 V8 H14 z", transform: "rotate(180 16 16)", children: _jsx("animate", { attributeName: "opacity", from: "1", to: ".1", dur: "1s", repeatCount: "indefinite", begin: "0.5s" }) }), _jsx("path", { opacity: ".1", d: "M14 0 H18 V8 H14 z", transform: "rotate(225 16 16)", children: _jsx("animate", { attributeName: "opacity", from: "1", to: ".1", dur: "1s", repeatCount: "indefinite", begin: "0.675s" }) }), _jsx("path", { opacity: ".1", d: "M14 0 H18 V8 H14 z", transform: "rotate(270 16 16)", children: _jsx("animate", { attributeName: "opacity", from: "1", to: ".1", dur: "1s", repeatCount: "indefinite", begin: "0.75s" }) }), _jsx("path", { opacity: ".1", d: "M14 0 H18 V8 H14 z", transform: "rotate(315 16 16)", children: _jsx("animate", { attributeName: "opacity", from: "1", to: ".1", dur: "1s", repeatCount: "indefinite", begin: "0.875s" }) })] }));
|
|
4
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const TeamPicture: () => import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
export const TeamPicture = () => {
|
|
3
|
+
return (_jsx("div", { className: "border-effect overflow-hidden mb-10 lg:mb-4", children: _jsx("img", { src: "/img/team/team.jpeg", style: { aspectRatio: '1500 / 1038' }, className: "w-full mb-0 float-left " }) }));
|
|
4
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const DesignPage: React.FC;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Button, Card, Counter, InlineCode, Input, Link, Select, SelectContent, SelectItem, SelectTrigger, SelectValue, Switch, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, } from '@remotion/design';
|
|
3
|
+
import { useCallback, useState } from 'react';
|
|
4
|
+
import { ManageTeamMembers } from './ManageTeamMembers';
|
|
5
|
+
const Explainer = ({ children }) => {
|
|
6
|
+
return (_jsx("div", { children: _jsx("div", { className: "text-gray-500 font-brand text-sm mb-2", children: children }) }));
|
|
7
|
+
};
|
|
8
|
+
export const DesignPage = () => {
|
|
9
|
+
const [count, setCount] = useState(10);
|
|
10
|
+
const [active, setActive] = useState(false);
|
|
11
|
+
const [submitButtonActive, setSubmitButtonActive] = useState(true);
|
|
12
|
+
const [submitButtonPrimaryActive, setSubmitButtonPrimaryActive] = useState(true);
|
|
13
|
+
const onClick = useCallback(() => {
|
|
14
|
+
setSubmitButtonActive(false);
|
|
15
|
+
setTimeout(() => {
|
|
16
|
+
setSubmitButtonActive(true);
|
|
17
|
+
}, 1000);
|
|
18
|
+
}, []);
|
|
19
|
+
const onClickPrimary = useCallback(() => {
|
|
20
|
+
setSubmitButtonPrimaryActive(false);
|
|
21
|
+
setTimeout(() => {
|
|
22
|
+
setSubmitButtonPrimaryActive(true);
|
|
23
|
+
}, 1000);
|
|
24
|
+
}, []);
|
|
25
|
+
const [saving, setSaving] = useState(false);
|
|
26
|
+
const save = useCallback(() => {
|
|
27
|
+
setSaving(true);
|
|
28
|
+
setTimeout(() => {
|
|
29
|
+
setSaving(false);
|
|
30
|
+
}, 1000);
|
|
31
|
+
}, []);
|
|
32
|
+
return (_jsx("div", { className: "bg-[var(--background)] relative", children: _jsxs("div", { className: "max-w-[800px] mx-auto pt-10 pb-10 px-4", children: [_jsx("h1", { children: "@remotion/design" }), _jsx("a", { href: "https://github.com/remotion-dev/remotion/blob/main/packages/promo-pages/src/components/design.tsx", className: "font-brand text-brand", target: "_blank", children: "View source" }), _jsx("br", {}), _jsx("br", {}), _jsx("h2", { className: "text-brand", children: "<Button />" }), _jsx(Explainer, { children: "Button with label" }), _jsx(Button, { children: "Click me" }), _jsx("br", {}), _jsx(Explainer, { children: "Disabled" }), _jsxs(Button, { disabled: true, children: ["Don't", " click me"] }), _jsx("br", {}), _jsx(Explainer, { children: "Primary" }), _jsx(Button, { className: "bg-brand text-white", children: "Primary" }), _jsx("br", {}), _jsx(Explainer, { children: "Click to disable" }), _jsx(Button, { onClick: onClick, loading: !submitButtonActive, children: "Submit" }), _jsx("br", {}), _jsx(Explainer, { children: "Click to disable (primary)" }), _jsx(Button, { onClick: onClickPrimary, className: "bg-brand text-white", loading: !submitButtonPrimaryActive, children: "Submit" }), _jsx("br", {}), _jsx(Explainer, { children: "Loading state" }), _jsx(Button, { onClick: onClick, loading: true, children: "Loading" }), _jsx("br", {}), _jsx(Explainer, { children: "Loading state (primary)" }), _jsx(Button, { onClick: onClick, className: "bg-brand text-white", loading: true, children: "Loading" }), _jsx("br", {}), _jsx(Explainer, { children: "Rounded" }), _jsx(Button, { className: "rounded-full", children: "Rounded" }), _jsx("br", {}), _jsx(Explainer, { children: "Full width" }), _jsx(Button, { className: "w-full", children: "Choose a template" }), _jsx("br", {}), _jsx(Explainer, { children: "Full width rounded" }), _jsx(Button, { className: "w-full rounded-full", children: "Fully rounded" }), _jsx("div", { className: "h-8" }), _jsx(Explainer, { children: "Circular" }), _jsx(Button, { className: "rounded-full bg-brand w-12 h-12" }), _jsx("div", { className: "h-8" }), _jsx(Explainer, { children: "Remove" }), _jsx(Button, { className: "hover:text-white hover:bg-warn transition-colors w-10 h-10 p-0 rounded-full", depth: 0.5, children: _jsx("svg", { width: "16", height: "16", viewBox: "0 0 10 10", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: _jsx("path", { d: "M1 1L9 9M1 9L9 1", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round" }) }) }), _jsx("div", { className: "h-8" }), _jsx(Explainer, { children: "Link button" }), _jsx(Button, { href: "/design", children: "Link button" }), _jsx("br", {}), _jsxs(Explainer, { children: ["Link button with ", _jsx("code", { children: "<span>" })] }), _jsx(Button, { href: "/design", children: _jsx("span", { children: "Link button with span child" }) }), _jsx("br", {}), _jsx(Explainer, { children: "External link button" }), _jsx(Button, { href: "https://github.com/remotion-dev/remotion", target: "_blank", children: "GitHub" }), _jsx("div", { className: "h-8" }), _jsx(Explainer, { children: "Remove (small)" }), _jsx(Button, { className: "hover:text-white hover:bg-warn transition-colors w-6 h-6 p-0 rounded-full", depth: 0.5, children: _jsx("svg", { width: "10", height: "10", viewBox: "0 0 10 10", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: _jsx("path", { d: "M1 1L9 9M1 9L9 1", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round" }) }) }), _jsx("div", { className: "h-8" }), _jsx("h2", { className: "text-brand", children: "<Counter />" }), _jsx(Counter, { count: count, setCount: setCount, minCount: 1, step: 1, incrementStep: 1 }), _jsx("br", {}), " ", _jsx("h2", { className: "text-brand", children: "<Switch />" }), _jsx(Switch, { active: active, onToggle: () => setActive((e) => !e) }), _jsx("br", {}), " ", _jsx("h2", { className: "text-brand", children: "<Card />" }), _jsxs(Card, { className: "px-4 py-4", children: [_jsx("h3", { className: "text-text", children: "Card" }), _jsx("div", { className: "text-gray-500", children: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua." })] }), _jsx("br", {}), _jsx("h2", { className: "text-brand", children: "<Select />" }), _jsxs(Select, { defaultValue: "option1", children: [_jsx(SelectTrigger, { style: { width: '200px' }, children: _jsx(SelectValue, { placeholder: "Select an option" }) }), _jsxs(SelectContent, { children: [_jsx(SelectItem, { value: "option1", children: "Option 1" }), _jsx(SelectItem, { value: "option2", children: "Option 2" }), _jsx(SelectItem, { value: "option3", children: "Option 3" })] })] }), _jsx("br", {}), _jsx("h2", { className: "text-brand", children: "<Tabs />" }), _jsxs(Tabs, { defaultValue: "tab1", children: [_jsxs(TabsList, { children: [_jsx(TabsTrigger, { value: "tab1", children: "Tab 1" }), _jsx(TabsTrigger, { value: "tab2", children: "Tab 2" }), _jsx(TabsTrigger, { value: "tab3", children: "Tab 3" })] }), _jsx(TabsContent, { value: "tab1", children: _jsx("div", { className: "font-brand", children: "Content for Tab 1" }) }), _jsx(TabsContent, { value: "tab2", children: _jsx("div", { className: "font-brand", children: "Content for Tab 2" }) }), _jsx(TabsContent, { value: "tab3", children: _jsx("div", { className: "font-brand", children: "Content for Tab 3" }) })] }), _jsx("br", {}), _jsx("h2", { className: "text-brand", children: "<Input />" }), _jsx(Input, { placeholder: "Enter your email" }), _jsx("br", {}), _jsx("br", {}), _jsx("h2", { className: "text-brand", children: "<Textarea />" }), _jsx(Textarea, { placeholder: "Enter your message" }), _jsx("br", {}), _jsx("br", {}), _jsx("h2", { className: "text-brand", children: "<InlineCode />" }), _jsxs("p", { className: "font-brand", children: ["Use ", _jsx(InlineCode, { children: "useCurrentFrame()" }), " to get the current frame and ", _jsx(InlineCode, { children: "useVideoConfig()" }), " to get the video configuration."] }), _jsx("br", {}), _jsx("h2", { className: "text-brand", children: "<Link />" }), _jsxs("p", { className: "font-brand", children: ["See the", ' ', _jsx(Link, { href: "https://www.remotion.dev/docs", target: "_blank", rel: "noopener noreferrer", children: "Remotion documentation" }), ' ', "for more information."] }), _jsx("br", {}), _jsx("br", {}), _jsx("h1", { children: "Example form set" }), _jsx("br", {}), _jsx("h2", { children: "Change email" }), _jsx("p", { className: "font-brand", children: "A email will be sent to the new email address. You will need to click on the link in the email to confirm the change." }), _jsx(Input, { placeholder: "Enter your email", className: "w-full block" }), _jsx("div", { className: "h-2" }), _jsx("div", { className: "flex flex-row justify-end", children: _jsx(Button, { className: "bg-brand text-white", loading: saving, onClick: save, children: "Change" }) }), _jsx("br", {}), _jsx("br", {}), _jsx(ManageTeamMembers, {})] }) }));
|
|
33
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
type ExpertsPageProps = {
|
|
3
|
+
readonly Link: React.ComponentType<{
|
|
4
|
+
style?: React.CSSProperties;
|
|
5
|
+
className?: string;
|
|
6
|
+
href: string;
|
|
7
|
+
children: React.ReactNode;
|
|
8
|
+
}>;
|
|
9
|
+
};
|
|
10
|
+
export declare const ExpertsPageContent: React.FC<ExpertsPageProps>;
|
|
11
|
+
export {};
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useMemo } from 'react';
|
|
3
|
+
import { random } from 'remotion';
|
|
4
|
+
import { EmailLogo, GitHubLogo, LinkedInLogo, TwitterLogo, } from '../team/TeamCards';
|
|
5
|
+
import { experts } from './experts-data';
|
|
6
|
+
import { DiscordLogo, PersonalWebsite } from './experts-icons';
|
|
7
|
+
const arrowIcon = {
|
|
8
|
+
height: 16,
|
|
9
|
+
marginLeft: 10,
|
|
10
|
+
};
|
|
11
|
+
const dateString = (date) => date.getDate() + '-' + date.getMonth() + '-' + date.getFullYear();
|
|
12
|
+
const todayHash = dateString(new Date());
|
|
13
|
+
const infoCard = {
|
|
14
|
+
backgroundColor: 'var(--footer-background)',
|
|
15
|
+
padding: 20,
|
|
16
|
+
flex: 1,
|
|
17
|
+
flexDirection: 'row',
|
|
18
|
+
display: 'flex',
|
|
19
|
+
fontSize: 13,
|
|
20
|
+
border: '1px solid var(--ifm-color-emphasis-300)',
|
|
21
|
+
borderRadius: 8,
|
|
22
|
+
};
|
|
23
|
+
const cardIcon = {
|
|
24
|
+
width: 30,
|
|
25
|
+
marginRight: 20,
|
|
26
|
+
color: 'var(--text-color)',
|
|
27
|
+
};
|
|
28
|
+
const wrapperStyle = {
|
|
29
|
+
maxWidth: 1000,
|
|
30
|
+
margin: 'auto',
|
|
31
|
+
paddingTop: 60,
|
|
32
|
+
paddingLeft: 20,
|
|
33
|
+
paddingRight: 20,
|
|
34
|
+
paddingBottom: 100,
|
|
35
|
+
};
|
|
36
|
+
const ExpertCard = ({ expert, Link }) => {
|
|
37
|
+
return (_jsxs("div", { className: "flex-1 rounded-[15px] flex flex-col md:flex-row gap-2 md:gap-4", children: [_jsx(Link, { href: `/experts/${expert.slug}`, className: "no-underline text-inherit", children: _jsx("img", { src: expert.image, alt: `Profile picture of ${expert.name}`, className: "w-[250px] h-[250px] rounded-xl border-effect object-cover" }) }), _jsxs("div", { className: "flex flex-col border-effect px-4 py-3 bg-pane flex-1", children: [_jsx(Link, { href: `/experts/${expert.slug}`, className: "no-underline text-inherit", children: _jsx("h2", { className: "text-[1.6em] mb-1 mt-3 text-[var(--ifm-color-primary)] font-brand", children: expert.name }) }), _jsx("div", { className: "mt-2 mb-3 leading-normal font-brand", children: expert.description }), _jsxs("div", { className: "leading-6 mb-4", children: [_jsxs(Link, { className: "no-underline text-brand font-brand font-bold inline-flex flex-row items-center", href: `/experts/${expert.slug}`, children: ["View profile", ' ', _jsx("svg", { style: arrowIcon, 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" }) })] }), expert.videocall ? (_jsxs(_Fragment, { children: [_jsx("br", {}), _jsxs("a", { className: "no-underline text-brand font-brand font-bold inline-flex flex-row items-center", target: "_blank", href: expert.videocall, children: ["Book a call", ' ', _jsx("svg", { style: arrowIcon, 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" }) })] })] })) : null] }), _jsx("div", { className: "flex-1" }), _jsxs("div", { className: "gap-3 flex flex-row flex-wrap", children: [expert.website ? (_jsx("a", { className: "no-underline text-inherit", target: "_blank", href: expert.website, children: _jsx(PersonalWebsite, {}) })) : null, expert.x ? (_jsx("a", { className: "no-underline text-inherit", target: "_blank", href: `https://x.com/${expert.x}`, children: _jsx(TwitterLogo, {}) })) : null, expert.github ? (_jsx("a", { className: "no-underline text-inherit", target: "_blank", href: `https://github.com/${expert.github}`, children: _jsx(GitHubLogo, {}) })) : null, expert.linkedin ? (_jsx("a", { className: "no-underline text-inherit", target: "_blank", href: `https://www.linkedin.com/${expert.linkedin}`, children: _jsx(LinkedInLogo, {}) })) : null, expert.email ? (_jsx("a", { className: "no-underline text-inherit", target: "_blank", href: `mailto:${expert.email}`, children: _jsx(EmailLogo, {}) })) : null, expert.discord ? (_jsx("a", { className: "no-underline text-inherit", target: "_blank", href: `https://discord.com/users/${expert.discord.userId}`, title: `@${expert.discord.username} on Discord`, children: _jsx(DiscordLogo, {}) })) : null] })] })] }));
|
|
38
|
+
};
|
|
39
|
+
export const ExpertsPageContent = ({ Link }) => {
|
|
40
|
+
const expertsInRandomOrder = useMemo(() => {
|
|
41
|
+
if (typeof window === 'undefined') {
|
|
42
|
+
return [];
|
|
43
|
+
}
|
|
44
|
+
// Have a different order every day.
|
|
45
|
+
return experts.sort((a, b) => random(a.name + todayHash) - random(b.name + todayHash));
|
|
46
|
+
}, []);
|
|
47
|
+
return (_jsx("div", { className: "relative bg-[var(--background)]", children: _jsxs("div", { style: wrapperStyle, children: [_jsx("h1", { className: "experts-pagetitle", children: "Find a Remotion Expert" }), _jsxs("p", { className: "experts-tagline", children: ["Get help by booking a call or hiring these freelancers to work on your Remotion project.", _jsx("br", {}), "They appear in random order.", ' '] }), _jsx("p", { className: "experts-tagline", children: _jsx("a", { href: "mailto:hi@remotion.dev?subject=Remotion+Experts+directory", children: _jsx("strong", { children: "Are you available for hire? Let us know!" }) }) }), _jsxs("div", { style: infoCard, children: [_jsxs("svg", { viewBox: "0 0 661 512", fill: "none", xmlns: "http://www.w3.org/2000/svg", style: cardIcon, children: [_jsxs("g", { clipPath: "url(#clip0_1_2)", children: [_jsx("path", { d: "M511.5 213C532.991 213 551.678 225.088 561.08 242.842C580.293 236.943 602.018 241.615 617.201 256.799C632.385 271.982 637.057 293.765 631.158 312.92C648.912 322.322 661 341.009 661 362.5C661 383.991 648.912 402.678 631.158 412.08C637.057 431.293 632.385 453.018 617.201 468.201C602.018 483.385 580.235 488.057 561.08 482.158C551.678 499.912 532.991 512 511.5 512C490.009 512 471.322 499.912 461.92 482.158C442.707 488.057 420.982 483.385 405.799 468.201C390.615 453.018 385.943 431.235 391.842 412.08C374.088 402.678 362 383.991 362 362.5C362 341.009 374.088 322.322 391.842 312.92C385.943 293.707 390.615 271.982 405.799 256.799C420.982 241.615 442.765 236.943 461.92 242.842C471.322 225.088 490.009 213 511.5 213ZM568.146 344.396L578.074 334.469L558.219 314.672L548.291 324.599L492.812 380.078L470.037 357.303L460.109 347.375L440.312 367.172L450.24 377.1L482.943 409.803L492.871 419.73L502.799 409.803L568.146 344.396Z", fill: "currentcolor" }), _jsx("path", { d: "M184 48H328C332.4 48 336 51.6 336 56V96H176V56C176 51.6 179.6 48 184 48ZM128 56V96H64C28.7 96 0 124.7 0 160V256H192H352H360.2C392.5 216.9 441.3 192 496 192C501.4 192 506.7 192.2 512 192.7V160C512 124.7 483.3 96 448 96H384V56C384 25.1 358.9 0 328 0H184C153.1 0 128 25.1 128 56ZM320 352H224C206.3 352 192 337.7 192 320V288H0V416C0 451.3 28.7 480 64 480H360.2C335.1 449.6 320 410.5 320 368C320 362.6 320.2 357.3 320.7 352H320Z", fill: "currentcolor" })] }), _jsx("defs", { children: _jsx("clipPath", { id: "clip0_1_2", children: _jsx("rect", { width: "661", height: "512", fill: "white" }) }) })] }), _jsxs("div", { style: { flex: 1 }, children: ["Remotion Experts are independent freelancers with proven Remotion expertise and portfolios. However,", ' ', _jsx("strong", { children: " perform due diligence " }), " before hiring. ", _jsx("br", {}), ' ', "Remotion does not arbitrate disputes between experts and clients."] })] }), _jsx("br", {}), _jsx("div", { className: "flex flex-col gap-12 md:gap-4", children: expertsInRandomOrder.map((e) => {
|
|
48
|
+
return _jsx(ExpertCard, { expert: e, Link: Link }, e.name);
|
|
49
|
+
}) })] }) }));
|
|
50
|
+
};
|