Medical
Insurance Verification Card - Patient Insurance
Monitor patient insurance verification and coverage. Track insurance status and eligibility.
Insurance Verification Card
The Insurance Verification Card Monitor insurance verification status for patient admissions.
Preview
Installation
ash npx shadcn@latest add https://vectormotion.vercel.app/registry/insurance-verification-card.json
Insurance Verification Card
'use client'import React from 'react';import { Shield, CheckCircle2, MoreHorizontal } from 'lucide-react';import { motion } from 'motion/react';import { clsx, type ClassValue } from "clsx";import { twMerge } from "tailwind-merge";import { PieChart, Pie, Cell, ResponsiveContainer } from 'recharts';function cn(...inputs: ClassValue[]) { return twMerge(clsx(inputs));}interface VerificationData { name: string; value: number; color: string; [key: string]: any;}interface CoverageItem { name: string; status: 'Verified' | 'Pending'; colorClass: string;}interface InsuranceVerificationCardProps { className?: string; title?: string; subtitle?: string; verifiedCount?: number; todayCount?: number; data?: VerificationData[]; coverageItems?: CoverageItem[];}const DEFAULT_DATA: VerificationData[] = [ { name: 'Verified', value: 85, color: '#10b981' }, // emerald-500 { name: 'Pending', value: 15, color: '#fbbf24' }, // amber-400];const DEFAULT_COVERAGE_ITEMS: CoverageItem[] = [ { name: "Blue Cross", status: "Verified", colorClass: "text-emerald-600" }, { name: "Aetna", status: "Pending", colorClass: "text-amber-500" },];const DEFAULT_TITLE = "Coverage";const DEFAULT_SUBTITLE = "Auth Status";const DEFAULT_VERIFIED_PERCENTAGE = 85;const DEFAULT_TODAY_COUNT = 42;export const InsuranceVerificationCard: React.FC<InsuranceVerificationCardProps> = ({ className = "", title = DEFAULT_TITLE, subtitle = DEFAULT_SUBTITLE, verifiedCount = DEFAULT_VERIFIED_PERCENTAGE, todayCount = DEFAULT_TODAY_COUNT, data = DEFAULT_DATA, coverageItems = DEFAULT_COVERAGE_ITEMS,}) => { const isInteractive = true; const index = 8; return ( <motion.div layoutId={isInteractive ? `card-${index}-${title}` : undefined} transition={{ duration: 0.4, ease: "easeOut" }} className={cn( "relative overflow-hidden rounded-2xl border border-border bg-card text-card-foreground shadow-sm transition-all flex flex-col h-full", isInteractive ? "hover:border-primary/50 hover:shadow-md" : "", className )} > <div className="p-5 flex flex-col h-full relative z-10"> <div className="mb-2 flex items-start justify-between"> <div> <h3 className="font-bold text-lg text-foreground"> {title} </h3> <div className="flex items-center gap-1.5 mt-1"> <span className="relative flex h-2 w-2"> <span className="relative inline-flex rounded-full h-2 w-2 bg-blue-500"></span> </span> <p className="text-sm text-muted-foreground font-medium"> {subtitle} </p> </div> </div> <div className="rounded-xl bg-blue-500/10 p-2.5 text-blue-500 flex items-center justify-center ring-1 ring-blue-100 dark:ring-blue-800"> <Shield className="h-5 w-5" /> </div> </div> <div className="flex-1 flex items-center gap-3"> <div className="relative h-20 w-20 flex-shrink-0"> <ResponsiveContainer width="100%" height="100%"> <PieChart> <Pie data={data} innerRadius={25} outerRadius={36} paddingAngle={4} dataKey="value" stroke="none" > {data.map((entry, index) => ( <Cell key={`cell-${index}`} fill={entry.color} /> ))} </Pie> </PieChart> </ResponsiveContainer> <div className="absolute inset-0 flex items-center justify-center"> <CheckCircle2 className="h-6 w-6 text-emerald-500" /> </div> </div> <div className="flex-1 space-y-2"> <div className="bg-muted p-2 rounded-lg border border-border"> <p className="text-[10px] text-muted-foreground uppercase font-bold">Today's List</p> <p className="text-xl font-bold text-foreground">{todayCount}</p> </div> </div> </div> <div className="mt-3 space-y-1.5"> {coverageItems.map((item, i) => ( <div key={i} className="flex justify-between items-center text-xs p-1.5 rounded hover:bg-zinc-50 dark:hover:bg-zinc-800/50 cursor-pointer"> <span className="font-medium text-foreground">{item.name}</span> {item.status === 'Verified' ? ( <span className="text-emerald-600 font-bold">Verified</span> ) : ( <span className="text-amber-500 font-bold text-[10px] uppercase bg-amber-50 dark:bg-amber-900/10 px-1.5 py-0.5 rounded">Pending</span> )} </div> ))} </div> </div> </motion.div> );};Usage
This component is a demo card displaying medical metrics with animated visualizations and dark mode support.
Prop
Type