shadimage

Dashboard Lg 01

registry/default/widgets/dashboard/lg/dashboard-01.tsx

import { DotIcon, GlobeIcon, MonitorIcon, UploadIcon } from "lucide-react";
import { Pie, PieChart } from "recharts";

import {
  Widget,
  WidgetHeader,
  WidgetContent,
  WidgetTitle,
  WidgetFooter,
} from "@/registry/default/ui/widget";
import { Label } from "@/registry/default/ui/label";
import {
  ChartConfig,
  ChartContainer,
  ChartTooltip,
  ChartTooltipContent,
} from "@/registry/default/ui/chart";
import { Button } from "@/registry/default/ui/button";

const visitorsByTrafficChartData = [
  { medium: "direct", visitors: 1578, fill: "var(--color-direct)" },
  { medium: "search", visitors: 908, fill: "var(--color-search)" },
  { medium: "referrals", visitors: 789, fill: "var(--color-referrals)" },
  { medium: "socials", visitors: 671, fill: "var(--color-socials)" },
];

const chartConfig = {
  mediums: {
    label: "Mediums",
  },
  direct: {
    label: "Direct",
    color: "var(--vercel-purple)",
  },
  search: {
    label: "Search",
    color: "var(--vercel-pink)",
  },
  referrals: {
    label: "Referrals",
    color: "var(--vercel-yellow)",
  },
  socials: {
    label: "Socials",
    color: "var(--vercel-blue)",
  },
} satisfies ChartConfig;

export default function WidgetDemo() {
  return (
    <Widget design="mumbai" size="lg" className="gap-2">
      <WidgetHeader>
        <WidgetTitle className="text-2xl">Traffic Source</WidgetTitle>
        <WidgetTitle className="text-2xl">3946</WidgetTitle>
      </WidgetHeader>
      <WidgetContent className="flex-col justify-start gap-4">
        <div className="flex w-full items-center justify-start">
          <div className="flex items-center space-x-1">
            <GlobeIcon className="stroke-muted-foreground size-4" />
            <Label className="text-muted-foreground">Worldwide</Label>
          </div>
          <DotIcon className="stroke-muted-foreground/40" />
          <div className="flex items-center space-x-1">
            <MonitorIcon className="stroke-muted-foreground size-4" />
            <Label className="text-muted-foreground">Desktop</Label>
          </div>
        </div>
        <ChartContainer config={chartConfig} className="size-full max-h-44">
          <PieChart>
            <ChartTooltip
              cursor={false}
              content={<ChartTooltipContent hideLabel />}
            />
            <Pie
              data={visitorsByTrafficChartData}
              dataKey="visitors"
              nameKey="medium"
            />
          </PieChart>
        </ChartContainer>
      </WidgetContent>
      <WidgetFooter className="flex flex-col gap-4">
        <div className="flex w-full items-center justify-center gap-6">
          <div className="flex items-center space-x-1.5">
            <div className="bg-vercel-purple size-2.5 rounded-full" />
            <Label className="text-muted-foreground text-sm">Direct</Label>
          </div>
          <div className="flex items-center space-x-1.5">
            <div className="bg-vercel-pink size-2.5 rounded-full" />
            <Label className="text-muted-foreground text-sm">Search</Label>
          </div>
          <div className="flex items-center space-x-1.5">
            <div className="bg-vercel-yellow size-2.5 rounded-full" />
            <Label className="text-muted-foreground text-sm">Referrals</Label>
          </div>
          <div className="flex items-center space-x-1.5">
            <div className="bg-vercel-blue size-2.5 rounded-full" />
            <Label className="text-muted-foreground text-sm">Socials</Label>
          </div>
        </div>
        <Button className="w-full" variant="outline">
          <UploadIcon /> Export
        </Button>
      </WidgetFooter>
    </Widget>
  );
}
Where it goes
kanbandashboard-shell
Use cases
dashboard

DependenciesBundle weight · medium

charts
recharts
icons
lucide-react