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