"use client" import { cn } from "@/lib/utils" import React from "react" import { Area, AreaChart as RechartsAreaChart, CartesianGrid, ResponsiveContainer, Tooltip, XAxis, YAxis, } from "recharts" interface AreaChartProps extends React.HTMLAttributes { data: Record[] index: string categories: string[] strokeColors?: string[] fillColors?: string[] tooltipBgColor?: string tooltipBorderColor?: string gridColor?: string valueFormatter?: (value: number) => string showGrid?: boolean showTooltip?: boolean fill?: "gradient" | "solid" className?: string } const AreaChart = React.forwardRef( ( { data = [], index, categories = [], strokeColors = ["var(--foreground)"], fillColors = ["var(--primary)"], tooltipBgColor = "var(--background)", tooltipBorderColor = "var(--border)", gridColor = "var(--muted)", valueFormatter = (value: number) => value.toString(), showGrid = true, showTooltip = true, fill = "gradient", className, ...props }, ref ) => { const chartId = React.useId() return (
{categories.map((category, index) => { const fillColor = fillColors[index] || fillColors[0] const gradientId = `gradient-${chartId}-${category}` return ( {fill === "gradient" ? ( <> ) : ( )} ) })} {showGrid && ( )} {showTooltip && ( { if (!active || !payload?.length) return null return (
{index} {label}
{payload.map((entry, index) => (
{entry.dataKey} {valueFormatter(entry.value as number)}
))}
) }} /> )} {categories.map((category, index) => { const strokeColor = strokeColors[index] || strokeColors[0] const gradientId = `gradient-${chartId}-${category}` return ( ) })}
) } ) AreaChart.displayName = "AreaChart" export { AreaChart, type AreaChartProps }