"use client"; import { TrendingDown, TrendingUp } from "lucide-react"; import type { ReactNode } from "react"; import { Sparkline } from "@/components/chat/sparkline"; import { Badge } from "@/components/ui/badge"; import { Card } from "@/components/ui/card"; import { cn } from "@/lib/utils"; // All figures here are mock/placeholder data — there is no analytics backend. // They illustrate the dashboard layout (clinic profits, patient volume, etc.). type Metric = { label: string; value: string; // % change vs the previous period; sign drives the up/down badge. delta?: number; points?: number[]; // Tailwind text-color class tinting the sparkline (via currentColor). tone?: string; }; function DeltaBadge({ delta }: { delta: number }) { const up = delta >= 0; return ( {up ? ( ) : ( )} {up ? "+" : ""} {delta}% ); } function StatCard({ label, value, delta, points, tone }: Metric) { return (
{label} {typeof delta === "number" && }
{value}
{points && (
)}
); } function Section({ title, description, children, }: { title: string; description: string; children: ReactNode; }) { return (

{title}

{description}

{children}
); } const revenue: Metric[] = [ { label: "Revenue (this month)", value: "$48.2k", delta: 12, points: [31, 34, 33, 38, 41, 44, 48.2], tone: "text-emerald-500", }, { label: "Profit margin", value: "32%", delta: 4, points: [24, 26, 25, 28, 30, 31, 32], tone: "text-emerald-500", }, { label: "Outstanding balances", value: "$6.4k", delta: -8, points: [9.1, 8.4, 8.8, 7.6, 7.0, 6.7, 6.4], tone: "text-amber-500", }, ]; const volume: Metric[] = [ { label: "New patients", value: "38", delta: 9, points: [22, 27, 25, 30, 33, 35, 38], tone: "text-sky-500", }, { label: "Returning patients", value: "212", delta: 3, points: [188, 196, 201, 199, 205, 209, 212], tone: "text-sky-500", }, { label: "Active patients", value: "1,284", delta: 2, points: [1190, 1210, 1230, 1242, 1260, 1271, 1284], tone: "text-sky-500", }, ]; const appointments: Metric[] = [ { label: "Appointments this week", value: "146", delta: 6, points: [120, 128, 131, 134, 139, 142, 146], tone: "text-violet-500", }, { label: "No-show rate", value: "4.1%", delta: -2 }, { label: "Schedule utilization", value: "87%", delta: 5 }, ]; const operations: Metric[] = [ { label: "Avg. wait time", value: "14 min", delta: -11, points: [22, 21, 19, 18, 17, 15, 14], tone: "text-amber-500", }, { label: "Prescriptions issued", value: "318", delta: 7, points: [270, 281, 290, 297, 305, 312, 318], tone: "text-primary", }, { label: "Top diagnosis", value: "Hypertension" }, ]; export function AnalysisView() { return (

Analysis

Clinic performance at a glance. Figures are sample data.

{revenue.map((m) => ( ))}
{volume.map((m) => ( ))}
{appointments.map((m) => ( ))}
{operations.map((m) => ( ))}
); }