import { useTranslation } from 'react-i18next'; import { Area, AreaChart, Bar, BarChart, CartesianGrid, Cell, ComposedChart, Legend, Line, LineChart, Pie, PieChart, PolarAngleAxis, PolarGrid, Radar, RadarChart, XAxis, YAxis, } from 'recharts'; import { ContentPanel } from '../components/ContentPanel'; import { PageHeader } from '../components/PageHeader'; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '../components/ui/card'; import { type ChartConfig, ChartContainer, ChartLegend, ChartLegendContent, ChartTooltip, ChartTooltipContent, } from '../components/ui/chart'; // --- Data --- const revenueData = [ { month: 'Jan', revenue: 18400 }, { month: 'Feb', revenue: 22100 }, { month: 'Mar', revenue: 19800 }, { month: 'Apr', revenue: 27500 }, { month: 'May', revenue: 31200 }, { month: 'Jun', revenue: 29800 }, ]; const revenueConfig = { revenue: { label: 'Revenue', color: 'var(--chart-1)' }, } satisfies ChartConfig; const usersData = [ { week: 'W1', new: 120, returning: 340 }, { week: 'W2', new: 180, returning: 390 }, { week: 'W3', new: 150, returning: 420 }, { week: 'W4', new: 210, returning: 460 }, { week: 'W5', new: 190, returning: 510 }, { week: 'W6', new: 260, returning: 530 }, ]; const usersConfig = { new: { label: 'New Users', color: 'var(--chart-1)' }, returning: { label: 'Returning', color: 'var(--chart-2)' }, } satisfies ChartConfig; const mrrData = [ { month: 'Jan', mrr: 8200 }, { month: 'Feb', mrr: 11400 }, { month: 'Mar', mrr: 14800 }, { month: 'Apr', mrr: 19200 }, { month: 'May', mrr: 24600 }, { month: 'Jun', mrr: 31000 }, ]; const mrrConfig = { mrr: { label: 'MRR', color: 'var(--chart-2)' }, } satisfies ChartConfig; const planData = [ { name: 'Free', value: 58 }, { name: 'Startup', value: 31 }, { name: 'Pro', value: 11 }, ]; const planConfig = { Free: { label: 'Free', color: 'var(--chart-1)' }, Startup: { label: 'Startup', color: 'var(--chart-2)' }, Pro: { label: 'Pro', color: 'var(--chart-3)' }, } satisfies ChartConfig; const featureData = [ { feature: 'API', usage: 88 }, { feature: 'Auth', usage: 72 }, { feature: 'Storage', usage: 54 }, { feature: 'Realtime', usage: 40 }, { feature: 'Edge Fn', usage: 65 }, { feature: 'Analytics', usage: 30 }, ]; const featureConfig = { usage: { label: 'Usage %', color: 'var(--chart-3)' }, } satisfies ChartConfig; const composedData = [ { month: 'Jan', revenue: 18400, margin: 42 }, { month: 'Feb', revenue: 22100, margin: 45 }, { month: 'Mar', revenue: 19800, margin: 38 }, { month: 'Apr', revenue: 27500, margin: 51 }, { month: 'May', revenue: 31200, margin: 55 }, { month: 'Jun', revenue: 29800, margin: 53 }, ]; const composedConfig = { revenue: { label: 'Revenue', color: 'var(--chart-1)' }, margin: { label: 'Margin %', color: 'var(--chart-4)' }, } satisfies ChartConfig; // --- Sparkline configs --- const sparkRevenueConfig = { revenue: { label: 'Revenue', color: 'var(--chart-1)' }, } satisfies ChartConfig; const sparkUsersConfig = { new: { label: 'New Users', color: 'var(--chart-2)' }, } satisfies ChartConfig; const sparkMrrConfig = { mrr: { label: 'MRR', color: 'var(--chart-3)' }, } satisfies ChartConfig; const sparkMarginConfig = { margin: { label: 'Gross Margin', color: 'var(--chart-4)' }, } satisfies ChartConfig; export default function Charts() { const { t } = useTranslation(); return ( <> {/* Sparkline summary cards */}
{/* Revenue Sparkline */} {t('charts.revenue')} {t('charts.revenueSparkline')} {/* New Users Sparkline */} {t('charts.newUsers')} 1,110 {/* MRR Sparkline */} {t('charts.mrr')} {t('charts.mrrSparkline')} {/* Gross Margin Sparkline */} {t('charts.grossMargin')} {t('charts.grossMarginSparkline')}
{/* 1. Revenue — BarChart */} {t('charts.revenue')} {t('charts.revenueDescription')} `$${(v / 1000).toFixed(0)}k`} /> } /> {/* 2. Active Users — LineChart */} {t('charts.activeUsers')} {t('charts.activeUsersDescription')} } /> } /> {/* 3. MRR Growth — AreaChart */} {t('charts.mrrGrowth')} {t('charts.mrrGrowthDescription')} `$${(v / 1000).toFixed(0)}k`} /> } /> {/* 4. Plan Distribution — PieChart */} {t('charts.planDistribution')} {t('charts.planDistributionDescription')} } /> } /> {planData.map((entry) => ( ))} {/* 5. Feature Usage — RadarChart */} {t('charts.featureUsage')} {t('charts.featureUsageDescription')} } /> {/* 6. Revenue & Margin — ComposedChart */} {t('charts.revenueAndMargin')} {t('charts.revenueAndMarginDescription')} `$${(v / 1000).toFixed(0)}k`} /> `${v}%`} /> } /> } />
); }