import {loadFont} from '@remotion/google-fonts/Inter'; import {AbsoluteFill, spring, useCurrentFrame, useVideoConfig} from 'remotion'; const {fontFamily} = loadFont(); const COLOR_BAR = '#D4AF37'; const COLOR_TEXT = '#ffffff'; const COLOR_MUTED = '#888888'; const COLOR_BG = '#0a0a0a'; const COLOR_AXIS = '#333333'; // Ideal composition size: 1280x720 const Title: React.FC<{children: React.ReactNode}> = ({children}) => (
{children}
); const YAxis: React.FC<{steps: number[]; height: number}> = ({ steps, height, }) => (
{steps .slice() .reverse() .map((step) => (
{step.toLocaleString()}
))}
); const Bar: React.FC<{ height: number; progress: number; }> = ({height, progress}) => (
); const XAxis: React.FC<{ children: React.ReactNode; labels: string[]; height: number; }> = ({children, labels, height}) => (
{children}
{labels.map((label) => (
{label}
))}
); export const MyAnimation = () => { const frame = useCurrentFrame(); const {fps, height} = useVideoConfig(); const data = [ {month: 'Jan', price: 2039}, {month: 'Mar', price: 2160}, {month: 'May', price: 2327}, {month: 'Jul', price: 2426}, {month: 'Sep', price: 2634}, {month: 'Nov', price: 2672}, ]; const minPrice = 2000; const maxPrice = 2800; const priceRange = maxPrice - minPrice; const chartHeight = height - 280; const yAxisSteps = [2000, 2400, 2800]; return ( Gold Price 2024
d.month)}> {data.map((item, i) => { const progress = spring({ frame: frame - i * 5 - 10, fps, config: {damping: 18, stiffness: 80}, }); const barHeight = ((item.price - minPrice) / priceRange) * chartHeight * progress; return ( ); })}
); };