diff --git a/packages/docs/src/components/Demo/action-row.module.css b/packages/docs/src/components/Demo/action-row.module.css index 473d7030d7b..6fe7e3e4ec7 100644 --- a/packages/docs/src/components/Demo/action-row.module.css +++ b/packages/docs/src/components/Demo/action-row.module.css @@ -10,10 +10,6 @@ text-wrap: balance; } -.action-title { - font-family: 'GT Planar'; -} - @media screen and (max-width: 900px) { .row { flex-direction: column; diff --git a/packages/docs/src/remotion/HomepageVideo/cards/Cards.tsx b/packages/docs/src/remotion/HomepageVideo/cards/Cards.tsx index 9630a96eb80..584f732b0fd 100644 --- a/packages/docs/src/remotion/HomepageVideo/cards/Cards.tsx +++ b/packages/docs/src/remotion/HomepageVideo/cards/Cards.tsx @@ -10,7 +10,7 @@ import type {Trending} from '../Comp'; import {CurrentCountry} from '../CurrentCountry'; import {Temperature} from '../Temperature'; import {TrendingRepos} from '../TrendingRepos'; -import {EmojiCard} from '../emoji/EmojiCard'; +import {EmojiCard, type EmojiPosition} from '../emoji/EmojiCard'; import type {Location} from '../types'; import {Card} from './Card'; import {getInitialPositions} from './math'; @@ -34,7 +34,16 @@ export const Cards: React.FC<{ }) => { const container = useRef(null); - const [emojiPosition, setEmojiPosition] = useState(10000000 * 3); + const activeTranslationStyle = + 'transform 0.2s ease-in, opacity 0.2s ease-in-out'; + + const [emojiPositions, setEmojiPositions] = useState({ + prev: 'melting', + current: 'partying-face', + next: 'fire', + translation: 0, + translationStyle: activeTranslationStyle, + }); const [refs] = useState(() => { return new Array(4).fill(true).map(() => { @@ -67,11 +76,46 @@ export const Cards: React.FC<{ }, [onToggle]); const onLeft = useCallback(() => { - setEmojiPosition((i) => i + 1); + setEmojiPositions((c) => { + return { + ...c, + translation: -33.3, + translationStyle: activeTranslationStyle, + }; + }); + // after the animation is done, we need to update the emoji contents + setTimeout(() => { + setEmojiPositions((c) => { + return { + prev: c.next, + current: c.prev, + next: c.current, + translation: 0, + translationStyle: undefined, + }; + }); + }, 200); }, []); const onRight = useCallback(() => { - setEmojiPosition((i) => i - 1); + setEmojiPositions((c) => { + return { + ...c, + translation: 33.3, + translationStyle: 'transform 0.2s ease-in, opacity 0.2s ease-in-out', + }; + }); + setTimeout(() => { + setEmojiPositions((c) => { + return { + prev: c.current, + current: c.next, + next: c.prev, + translation: 0, + translationStyle: '', + }; + }); + }, 200); }, []); return ( @@ -90,7 +134,7 @@ export const Cards: React.FC<{ ) : index === 2 ? ( ) : ( - + ); return ( diff --git a/packages/docs/src/remotion/HomepageVideo/emoji/DisplayedEmoji.tsx b/packages/docs/src/remotion/HomepageVideo/emoji/DisplayedEmoji.tsx index a651d446de7..bda2f079ad5 100644 --- a/packages/docs/src/remotion/HomepageVideo/emoji/DisplayedEmoji.tsx +++ b/packages/docs/src/remotion/HomepageVideo/emoji/DisplayedEmoji.tsx @@ -2,13 +2,10 @@ import type {EmojiName} from '@remotion/animated-emoji'; import {AnimatedEmoji, getAvailableEmojis} from '@remotion/animated-emoji'; import React from 'react'; import {useVideoConfig} from 'remotion'; -import styles from './emoji.module.css'; export const DisplayedEmoji: React.FC<{ readonly emoji: EmojiName; - readonly isNext: boolean; - readonly isPrevious: boolean; -}> = ({emoji, isNext, isPrevious}) => { +}> = ({emoji}) => { const partyDuration = getAvailableEmojis().find( (e) => e.name === emoji, ).durationInSeconds; @@ -22,8 +19,12 @@ export const DisplayedEmoji: React.FC<{ ); }; diff --git a/packages/docs/src/remotion/HomepageVideo/emoji/EmojiCard.tsx b/packages/docs/src/remotion/HomepageVideo/emoji/EmojiCard.tsx index c9045903ec9..47877bc1099 100644 --- a/packages/docs/src/remotion/HomepageVideo/emoji/EmojiCard.tsx +++ b/packages/docs/src/remotion/HomepageVideo/emoji/EmojiCard.tsx @@ -2,9 +2,17 @@ import React from 'react'; import {AbsoluteFill} from 'remotion'; import {DisplayedEmoji} from './DisplayedEmoji'; +export type EmojiPosition = { + prev: 'melting' | 'partying-face' | 'fire'; + current: 'melting' | 'partying-face' | 'fire'; + next: 'melting' | 'partying-face' | 'fire'; + translation: number; + translationStyle: string; +}; + export const EmojiCard: React.FC<{ - emojiPosition: number; -}> = ({emojiPosition}) => { + emojiPositions: EmojiPosition; +}> = ({emojiPositions}) => { return ( Choose an emoji - - - +
+ + + +
); };