Installation
To use the chart components, you need to install the following dependencies:
Terminal
npm i recharts -EStyles
The chart components use CSS variables to style the charts. You can customize the colors of the chart components by adding the following styles to your styles.css file:
CSS
@layer base {
:root {
--chart-1: 173 58% 39%;
--chart-2: 12 76% 61%;
--chart-3: 197 37% 24%;
--chart-4: 43 74% 66%;
--chart-5: 27 87% 67%;
--chart-6: 152 55% 41%;
--chart-7: 330 65% 50%;
--chart-8: 245 48% 45%;
--chart-9: 58 85% 65%;
--chart-10: 288 59% 42%;
}
.dark {
--chart-1: 221.2 83.2% 53.3%;
--chart-2: 212 95% 68%;
--chart-3: 216 92% 60%;
--chart-4: 210 98% 78%;
--chart-5: 212 97% 87%;
--chart-6: 225 84% 70%;
--chart-7: 240 93% 65%;
--chart-8: 200 95% 63%;
--chart-9: 195 90% 75%;
--chart-10: 230 85% 80%;
}
}Usage
To build the chart components, you need to import all components and types with @backend-ai/ui/charts and use them in your code.
React
import type { ChartConfig } from "@backend-ai/ui/charts";
import {
ChartContainer,
ChartTooltip,
ChartTooltipContent,
} from "@backend-ai/ui/charts";Pie Chart
React
import type { ChartConfig } from "@backend-ai/ui/charts";
import {
ChartContainer,
ChartTooltip,
ChartTooltipContent,
} from "@backend-ai/ui/charts";
import { useMemo } from "react";
import { Label, Pie, PieChart } from "recharts";
const chartData = [
{ browser: "chrome", visitors: 275, fill: "var(--color-chrome)" },
{ browser: "safari", visitors: 200, fill: "var(--color-safari)" },
{ browser: "firefox", visitors: 287, fill: "var(--color-firefox)" },
{ browser: "edge", visitors: 173, fill: "var(--color-edge)" },
{ browser: "other", visitors: 190, fill: "var(--color-other)" },
];
const chartConfig = {
visitors: {
label: "Visitors",
},
chrome: {
label: "Chrome",
color: "hsl(var(--chart-1))",
},
safari: {
label: "Safari",
color: "hsl(var(--chart-2))",
},
firefox: {
label: "Firefox",
color: "hsl(var(--chart-3))",
},
edge: {
label: "Edge",
color: "hsl(var(--chart-4))",
},
other: {
label: "Other",
color: "hsl(var(--chart-5))",
},
} satisfies ChartConfig;
const PieChartExample = () => {
const totalVisitors = useMemo(() => {
return chartData.reduce((acc, curr) => acc + curr.visitors, 0);
}, []);
return (
<ChartContainer
config={chartConfig}
className="mx-auto aspect-square max-h-[250px]"
>
<PieChart>
<ChartTooltip
cursor={false}
content={<ChartTooltipContent hideLabel />}
/>
<Pie
data={chartData}
dataKey="visitors"
nameKey="browser"
innerRadius={60}
strokeWidth={5}
>
<Label
content={({ viewBox }) => {
if (viewBox && "cx" in viewBox && "cy" in viewBox) {
return (
<text
x={viewBox.cx}
y={viewBox.cy}
textAnchor="middle"
dominantBaseline="middle"
>
<tspan
x={viewBox.cx}
y={viewBox.cy}
className="fill-black text-3xl font-bold dark:fill-white"
>
{totalVisitors.toLocaleString()}
</tspan>
<tspan
x={viewBox.cx}
y={(viewBox.cy || 0) + 24}
className="fill-black dark:fill-white"
>
Visitors
</tspan>
</text>
);
}
}}
/>
</Pie>
</PieChart>
</ChartContainer>
);
};
export default PieChartExample;Area Chart
React
import type { ChartConfig } from "@backend-ai/ui/charts";
import { Area, AreaChart, CartesianGrid, XAxis } from "recharts";
import {
ChartContainer,
ChartTooltip,
ChartTooltipContent,
} from "@backend-ai/ui/charts";
const chartData = [
{ month: "January", desktop: 186 },
{ month: "February", desktop: 305 },
{ month: "March", desktop: 237 },
{ month: "April", desktop: 73 },
{ month: "May", desktop: 209 },
{ month: "June", desktop: 214 },
];
const chartConfig = {
desktop: {
label: "Desktop",
color: "hsl(var(--chart-1))",
},
} satisfies ChartConfig;
const AreaChartExample = () => {
return (
<ChartContainer config={chartConfig}>
<AreaChart
accessibilityLayer
data={chartData}
margin={{
left: 12,
right: 12,
}}
>
<CartesianGrid vertical={false} />
<XAxis
dataKey="month"
tickLine={false}
axisLine={false}
tickMargin={8}
tickFormatter={(value) => value.slice(0, 3)}
/>
<ChartTooltip
cursor={false}
content={<ChartTooltipContent indicator="line" />}
/>
<Area
dataKey="desktop"
type="natural"
fill="var(--color-desktop)"
fillOpacity={0.4}
stroke="var(--color-desktop)"
/>
</AreaChart>
</ChartContainer>
);
};
export default AreaChartExample;Tooltip Chart
React
import type { ChartConfig } from "@backend-ai/ui/charts";
import { Bar, BarChart, XAxis } from "recharts";
import {
ChartContainer,
ChartTooltip,
ChartTooltipContent,
} from "@backend-ai/ui/charts";
const chartData = [
{ date: "2024-07-15", running: 450, swimming: 300 },
{ date: "2024-07-16", running: 380, swimming: 420 },
{ date: "2024-07-17", running: 520, swimming: 120 },
{ date: "2024-07-18", running: 140, swimming: 550 },
{ date: "2024-07-19", running: 600, swimming: 350 },
{ date: "2024-07-20", running: 480, swimming: 400 },
];
const chartConfig = {
running: {
label: "Running",
color: "hsl(var(--chart-1))",
},
swimming: {
label: "Swimming",
color: "hsl(var(--chart-2))",
},
} satisfies ChartConfig;
const TooltipChartExample = () => {
return (
<ChartContainer config={chartConfig}>
<BarChart accessibilityLayer data={chartData}>
<XAxis
dataKey="date"
tickLine={false}
tickMargin={10}
axisLine={false}
tickFormatter={(value) => {
return new Date(value).toLocaleDateString("en-US", {
weekday: "short",
});
}}
/>
<Bar
dataKey="running"
stackId="a"
fill="var(--color-running)"
radius={[0, 0, 4, 4]}
/>
<Bar
dataKey="swimming"
stackId="a"
fill="var(--color-swimming)"
radius={[4, 4, 0, 0]}
/>
<ChartTooltip
content={
<ChartTooltipContent
labelFormatter={(value) => {
return new Date(value).toLocaleDateString("en-US", {
day: "numeric",
month: "long",
year: "numeric",
});
}}
/>
}
cursor={false}
defaultIndex={1}
/>
</BarChart>
</ChartContainer>
);
};
export default TooltipChartExample;Radar Chart
React
import type { ChartConfig } from "@backend-ai/ui/charts";
import { Radar, RadarChart, PolarGrid, PolarAngleAxis } from "recharts";
import {
ChartContainer,
ChartTooltip,
ChartTooltipContent,
} from "@backend-ai/ui/charts";
const chartData = [
{ month: "January", desktop: 186 },
{ month: "February", desktop: 305 },
{ month: "March", desktop: 237 },
{ month: "April", desktop: 273 },
{ month: "May", desktop: 209 },
{ month: "June", desktop: 214 },
];
const chartConfig = {
desktop: {
label: "Desktop",
color: "hsl(var(--chart-1))",
},
} satisfies ChartConfig;
const RadarChartExample = () => {
return (
<ChartContainer
config={chartConfig}
className="mx-auto aspect-square max-h-[250px]"
>
<RadarChart data={chartData}>
<ChartTooltip cursor={false} content={<ChartTooltipContent />} />
<PolarAngleAxis dataKey="month" />
<PolarGrid />
<Radar
dataKey="desktop"
fill="var(--color-desktop)"
fillOpacity={0.6}
dot={{
r: 4,
fillOpacity: 1,
}}
/>
</RadarChart>
</ChartContainer>
);
};
export default RadarChartExample;