Chart
blok/chartFreeComponent
Beautiful charts. Built using Recharts.
Install it
npx shadcn@latest add https://blok.sitecore.com/r/chart.jsonSource
1"use client";23import * as React from "react";4import * as RechartsPrimitive from "recharts";56import { cn } from "@/lib/utils";78// Format: { THEME_NAME: CSS_SELECTOR }9const THEMES = { light: "", dark: ".dark" } as const;1011export type ChartConfig = {12 [k in string]: {13 label?: React.ReactNode;14 icon?: React.ComponentType;15 } & (16 | { color?: string; theme?: never }17 | { color?: never; theme: Record<keyof typeof THEMES, string> }18 );19};2021type ChartContextProps = {22 config: ChartConfig;23};2425const ChartContext = React.createContext<ChartContextProps | null>(null);2627function useChart() {28 const context = React.useContext(ChartContext);2930 if (!context) {31 throw new Error("useChart must be used within a <ChartContainer />");32 }3334 return context;35}3637function ChartContainer({38 id,39 className,40 children,41 config,42 ...props43}: React.ComponentProps<"div"> & {44 config: ChartConfig;45 children: React.ComponentProps<46 typeof RechartsPrimitive.ResponsiveContainer47 >["children"];48}) {49 const uniqueId = React.useId();50 const chartId = `chart-${id || uniqueId.replace(/:/g, "")}`;5152 return (53 <ChartContext.Provider value={{ config }}>54 <div55 data-slot="chart"56 data-chart={chartId}57 role="img"58 aria-label={props["aria-label"] || "Data visualization chart"}59 className={cn(60 "[&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground [&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50 [&_.recharts-curve.recharts-tooltip-cursor]:stroke-border [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border [&_.recharts-radial-bar-background-sector]:fill-muted [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted [&_.recharts-reference-line_[stroke='#ccc']]:stroke-border flex aspect-video justify-center text-xs [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-hidden [&_.recharts-sector]:outline-hidden [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-surface]:outline-hidden",61 className,62 )}63 {...props}64 >65 <ChartStyle id={chartId} config={config} />66 <RechartsPrimitive.ResponsiveContainer>67 {children}68 </RechartsPrimitive.ResponsiveContainer>69 </div>70 </ChartContext.Provider>71 );72}7374const ChartStyle = ({ id, config }: { id: string; config: ChartConfig }) => {75 const colorConfig = Object.entries(config).filter(76 ([, config]) => config.theme || config.color,77 );78// … truncated
What it pulls in
npm packages
Other registry items
Files it writes
More from blok
All 72 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| Accordionaccordion | blok | Components | Free | 2 deps · 2 files | |
| Action baraction-bar | blok | Components | Free | 1 dep · 2 files | |
| Alertalert | blok | Components | Free | 2 deps · 2 files | |
| Alert dialogalert-dialog | blok | Components | Free | 2 deps | |
| Aspect ratioaspect-ratio | blok | Components | Free | 1 dep | |
| Avataravatar | blok | Components | Free | 1 dep | |
| Badgebadge | blok | Components | Free | 2 deps | |
| All componentsblok-components | blok | Components | Free | no deps |
