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 ( ); })}
); };