"use client"; import { motion } from "framer-motion"; import { Target } from "lucide-react"; interface Saving { id: number; name: string; current_amount: number; target_amount: number; color?: string; icon?: string; } interface Props { savings: Saving[]; } function formatAmount(n: number): string { if (n >= 1_000_000) return `${(n / 1_000_000).toFixed(1)}М`; if (n >= 1_000) return `${Math.round(n / 1_000)}К`; return String(n); } const COLORS = ["#f59e0b", "#3b82f6", "#10b981", "#8b5cf6", "#f43f5e"]; export default function SavingsCard({ savings }: Props) { return ( {/* Header */}
Накопления
{savings.length} {savings.length === 1 ? "цель" : "целей"}
{savings.map((s, i) => { const pct = Math.min( 100, Math.round((s.current_amount / s.target_amount) * 100) ); const color = s.color || COLORS[i % COLORS.length]; return (
{s.icon && {s.icon}} {s.name}
{pct}%
{/* Progress bar with glow */}
{formatAmount(s.current_amount)} ₽ из {formatAmount(s.target_amount)} ₽
); })} {savings.length === 0 && (
Нет данных о накоплениях
)}
); }