Loading source
Pulling the file list, source metadata, and syntax-aware rendering for this listing.
Source from repo
Build React UIs using shadcn/ui components with Tailwind CSS, Radix primitives, and proper accessibility patterns.
Files
Skill
Size
Entrypoint
Format
Open file
Syntax-highlighted preview of this file as included in the skill package.
references/charts-components.md
1# shadcn/ui - Charts Component Reference23Built on **Recharts** with consistent theming and styling.45## Installation67```bash8npx shadcn@latest add chart9```1011## CSS Variables for Charts1213Add to `globals.css`:1415```css16@layer base {17:root {18--chart-1: oklch(0.646 0.222 41.116);19--chart-2: oklch(0.6 0.118 184.704);20--chart-3: oklch(0.546 0.198 38.228);21--chart-4: oklch(0.596 0.151 343.253);22--chart-5: oklch(0.546 0.158 49.157);23}24.dark {25--chart-1: oklch(0.488 0.243 264.376);26--chart-2: oklch(0.696 0.17 162.48);27--chart-3: oklch(0.698 0.141 24.311);28--chart-4: oklch(0.676 0.172 171.196);29--chart-5: oklch(0.578 0.192 302.85);30}31}32```3334## ChartConfig and ChartContainer3536`ChartContainer` wraps your Recharts component and accepts a `config` prop for theming.3738```tsx39import { Bar, BarChart, CartesianGrid, XAxis } from "recharts"40import { ChartContainer, ChartTooltipContent } from "@/components/ui/chart"4142const chartConfig = {43desktop: { label: "Desktop", color: "var(--chart-1)" },44mobile: { label: "Mobile", color: "var(--chart-2)" },45} satisfies import("@/components/ui/chart").ChartConfig4647const chartData = [48{ month: "January", desktop: 186, mobile: 80 },49{ month: "February", desktop: 305, mobile: 200 },50{ month: "March", desktop: 237, mobile: 120 },51]5253export function BarChartDemo() {54return (55<ChartContainer config={chartConfig} className="min-h-[200px] w-full">56<BarChart data={chartData}>57<CartesianGrid vertical={false} />58<XAxis dataKey="month" tickLine={false} axisLine={false}59tickFormatter={(value) => value.slice(0, 3)} />60<Bar dataKey="desktop" fill="var(--color-desktop)" radius={4} />61<Bar dataKey="mobile" fill="var(--color-mobile)" radius={4} />62<ChartTooltip content={<ChartTooltipContent />} />63</BarChart>64</ChartContainer>65)66}67```6869## Custom Colors in ChartConfig7071```tsx72const chartConfig = {73visitors: {74label: "Visitors",75color: "#2563eb",76theme: {77light: "#2563eb",78dark: "#60a5fa",79},80},81sales: {82label: "Sales",83color: "var(--chart-1)",84theme: {85light: "oklch(0.646 0.222 41.116)",86dark: "oklch(0.696 0.182 281.41)",87},88},89} satisfies import("@/components/ui/chart").ChartConfig90```9192## Line Chart9394```tsx95import { Line, LineChart, CartesianGrid, XAxis, YAxis } from "recharts"96import { ChartContainer, ChartTooltipContent } from "@/components/ui/chart"9798const chartConfig = {99price: { label: "Price", color: "var(--chart-1)" },100} satisfies import("@/components/ui/chart").ChartConfig101102export function LineChartDemo() {103return (104<ChartContainer config={chartConfig} className="min-h-[200px]">105<LineChart data={chartData}>106<CartesianGrid vertical={false} />107<XAxis dataKey="month" tickLine={false} axisLine={false} />108<YAxis tickLine={false} axisLine={false} tickFormatter={(v) => `$${v}`} />109<Line dataKey="price" stroke="var(--color-price)" strokeWidth={2} dot={false} />110<ChartTooltip content={<ChartTooltipContent />} />111</LineChart>112</ChartContainer>113)114}115```116117## Area Chart118119```tsx120import { Area, AreaChart, XAxis, YAxis } from "recharts"121import {122ChartContainer, ChartLegend, ChartLegendContent, ChartTooltipContent,123} from "@/components/ui/chart"124125const chartConfig = {126desktop: { label: "Desktop", color: "var(--chart-1)" },127mobile: { label: "Mobile", color: "var(--chart-2)" },128} satisfies import("@/components/ui/chart").ChartConfig129130export function AreaChartDemo() {131return (132<ChartContainer config={chartConfig} className="min-h-[200px]">133<AreaChart data={chartData}>134<XAxis dataKey="month" tickLine={false} axisLine={false} />135<YAxis tickLine={false} axisLine={false} />136<Area dataKey="desktop" fill="var(--color-desktop)" stroke="var(--color-desktop)" fillOpacity={0.3} />137<Area dataKey="mobile" fill="var(--color-mobile)" stroke="var(--color-mobile)" fillOpacity={0.3} />138<ChartTooltip content={<ChartTooltipContent />} />139<ChartLegend content={<ChartLegendContent />} />140</AreaChart>141</ChartContainer>142)143}144```145146## Pie Chart147148```tsx149import { Pie, PieChart } from "recharts"150import { ChartContainer, ChartLegend, ChartLegendContent, ChartTooltipContent } from "@/components/ui/chart"151152const chartConfig = {153chrome: { label: "Chrome", color: "var(--chart-1)" },154safari: { label: "Safari", color: "var(--chart-2)" },155firefox: { label: "Firefox", color: "var(--chart-3)" },156} satisfies import("@/components/ui/chart").ChartConfig157158const pieData = [159{ browser: "Chrome", visitors: 275, fill: "var(--color-chrome)" },160{ browser: "Safari", visitors: 200, fill: "var(--color-safari)" },161{ browser: "Firefox", visitors: 187, fill: "var(--color-firefox)" },162]163164export function PieChartDemo() {165return (166<ChartContainer config={chartConfig} className="min-h-[200px]">167<PieChart>168<Pie data={pieData} dataKey="visitors" nameKey="browser" cx="50%" cy="50%" outerRadius={80} />169<ChartTooltip content={<ChartTooltipContent />} />170<ChartLegend content={<ChartLegendContent />} />171</PieChart>172</ChartContainer>173)174}175```176177## ChartTooltipContent Props178179| Prop | Type | Default | Description |180|------|------|---------|-------------|181| `labelKey` | string | "label" | Key for tooltip label |182| `nameKey` | string | "name" | Key for tooltip name |183| `indicator` | "dot" \| "line" \| "dashed" | "dot" | Indicator style |184| `hideLabel` | boolean | false | Hide label |185| `hideIndicator` | boolean | false | Hide indicator |186187## Accessibility188189Enable keyboard navigation and screen reader support:190191```tsx192<BarChart accessibilityLayer data={chartData}>...</BarChart>193```194195This adds keyboard arrow key navigation, ARIA labels, and screen reader announcements.196