--- name: chart-implementation description: Create interactive charts for car registration and COE data visualization using Recharts. Use when adding new chart types, fixing chart bugs, or implementing data visualizations. allowed-tools: Read, Edit, Write, Grep, Glob --- # Chart Implementation Skill Uses **Recharts** for data visualization. Always use CSS variables for colors (see `design-language-system` skill). ## Common Chart Types ### Line Chart ```typescript "use client"; import { LineChart, Line, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer } from "recharts"; export function TrendChart({ data }: { data: { month: string; value: number }[] }) { return ( ); } ``` ### Bar Chart ```typescript import { BarChart, Bar, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer } from "recharts"; export function TopMakesChart({ data }: { data: { make: string; count: number }[] }) { return ( ); } ``` ### Multi-Line Chart (COE Categories) ```typescript export function COETrends({ data }: { data: any[] }) { return ( `$${Number(value).toLocaleString()}`} /> ); } ``` ### Pie Chart ```typescript import { PieChart, Pie, Cell, Tooltip, ResponsiveContainer } from "recharts"; export function MarketShareChart({ data }: { data: { name: string; value: number }[] }) { return ( {data.map((entry, index) => ( ))} ); } ``` ## Custom Tooltip ```typescript import { TooltipProps } from "recharts"; function CustomTooltip({ active, payload, label }: TooltipProps) { if (!active || !payload?.length) return null; return (

{label}

{payload.map((entry, i) => (

{entry.name}: {entry.value?.toLocaleString()}

))}
); } ``` ## Performance ### Lazy Load Charts ```typescript import dynamic from "next/dynamic"; const Chart = dynamic(() => import("./chart"), { ssr: false, loading: () =>
Loading chart...
, }); ``` ### Memoize Data ```typescript const chartData = useMemo(() => transformData(rawData), [rawData]); ``` ## Common Issues ### Chart Not Rendering Ensure parent has explicit height: ```tsx // ❌ Wrong // ✅ Correct - parent with height
``` ### SSR Errors Use dynamic import with `ssr: false`: ```typescript const Chart = dynamic(() => import("./chart"), { ssr: false }); ``` ## Best Practices 1. **ResponsiveContainer** - Always wrap charts 2. **CSS Variables** - Use `var(--chart-N)` for colors 3. **Lazy Load** - Dynamic import with `ssr: false` 4. **Memoize** - Use useMemo for data transformations 5. **Tooltips** - Provide formatted, detailed tooltips 6. **Mobile** - Test on small screens ## References - Recharts: Use Context7 for latest docs - Design Language System: See `design-language-system` skill for colors