'use client'; import { Area, AreaChart, CartesianGrid, Legend, XAxis, YAxis } from 'recharts'; import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from '@/components/ui/card'; import { type ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from '@/components/ui/chart'; import type { ReactNode } from 'react'; export interface AreaChartData { [key: string]: string | number; } interface XAxisConfig { key: string; tickFormatter?: (value: string) => string; tickMargin?: number; angle?: number; } interface AreaChartProps { data: AreaChartData[]; config: ChartConfig; title: string; description?: string; xAxis: XAxisConfig; className?: string; footer?: ReactNode; showYAxis?: boolean; stacked?: boolean; chartContainerClassName?: string; } const defaultTickFormatter = (value: string) => value.split(',')[0]; const defaultTickMargin = 8; export function AreaChartComponent({ data, config, title, description, xAxis, footer, showYAxis, stacked, chartContainerClassName, }: AreaChartProps) { const dataKeys = Object.keys(config); const { key, tickFormatter = defaultTickFormatter, tickMargin = defaultTickMargin } = xAxis; return ( {title} {description && {description}} {dataKeys.length > 1 && ( config[value].label} /> )} } wrapperStyle={{ minWidth: '200px', width: 'auto' }} /> {dataKeys.map((key) => ( ))} {dataKeys.map((key) => ( ))} {footer && {footer}} ); }