Vector Motion
Finance

Compliance Status Card - Regulatory Compliance

Monitor compliance status and regulatory requirements. Track compliance violations and remediation.

Finance Compliance Status Card

The Finance Compliance Status Card tracks compliance with financial regulations and reporting requirements, ensuring businesses meet their regulatory obligations.

Preview

Installation

npx shadcn@latest add https://vectormotion.vercel.app/registry/finance-compliance-status-card.json
Finance Compliance Status Card
'use client'import React from 'react';import { ShieldCheck, Check } from 'lucide-react';import { motion } from 'motion/react';import { clsx, type ClassValue } from "clsx"import { twMerge } from "tailwind-merge"import { ResponsiveContainer, RadialBarChart, RadialBar, PolarAngleAxis } from 'recharts';function cn(...inputs: ClassValue[]) {  return twMerge(clsx(inputs))}interface ComplianceData {  name: string;  value: number;  fill: string;}interface ComplianceStatusCardProps {  isInteractive?: boolean;  className?: string;  title?: string;  score?: string;  statusLabel?: string;  checks?: string[];  data?: ComplianceData[];}const DEFAULT_TITLE = "Compliance";const DEFAULT_SCORE = "95%";const DEFAULT_STATUS_LABEL = "Passing";const DEFAULT_CHECKS = ['SOC2 Type II', 'GDPR Data', 'KYC/AML'];const DEFAULT_DATA: ComplianceData[] = [{ name: 'Compliant', value: 95, fill: '#10b981' }]; // Emeraldexport const ComplianceStatusCard: React.FC<ComplianceStatusCardProps> = ({  isInteractive = true,  className = "",  title = DEFAULT_TITLE,  score = DEFAULT_SCORE,  statusLabel = DEFAULT_STATUS_LABEL,  checks = DEFAULT_CHECKS,  data = DEFAULT_DATA,}) => {  const index = 42;  return (    <motion.div      layoutId={isInteractive ? `card-${index}-${title}` : undefined}      transition={{ duration: 0.4, ease: "easeOut" }}      className={cn(        "relative overflow-hidden rounded-xl border border-border bg-card text-card-foreground p-5 shadow-sm transition-all flex flex-col h-full group",        isInteractive ? "cursor-pointer hover:border-primary/50 hover:shadow-md" : "",        className      )}    >      <div className="mb-2 flex items-start justify-between relative z-10">        <div>          <h3 className="font-semibold text-lg text-foreground">            {title}          </h3>          <div className="flex items-center gap-2 mt-1">            <span className="text-2xl font-bold text-foreground">{score}</span>            <span className="text-xs text-muted-foreground">{statusLabel}</span>          </div>        </div>        <div className="rounded-lg bg-emerald-500/10 p-2 text-emerald-500">          <ShieldCheck className="h-5 w-5" />        </div>      </div>      <div className="relative z-10 flex-1 min-h-[120px] mb-2 flex items-center justify-center">        <div className="h-[140px] w-full relative">          <ResponsiveContainer width="100%" height="100%">            <RadialBarChart              cx="50%"              cy="50%"              innerRadius="70%"              outerRadius="100%"              barSize={12}              data={data}              startAngle={90}              endAngle={-270}            >              <PolarAngleAxis                type="number"                domain={[0, 100]}                angleAxisId={0}                tick={false}              />              <RadialBar                background={{ fill: '#f4f4f5' }} // zinc-100                dataKey="value"                cornerRadius={10}              />            </RadialBarChart>          </ResponsiveContainer>          <div className="absolute inset-0 flex flex-col items-center justify-center pointer-events-none">            <span className="text-sm font-bold text-foreground">PASS</span>          </div>        </div>      </div>      <div className="space-y-1 relative z-10">        {checks.map((check) => (          <div key={check} className="flex items-center justify-between text-xs py-1 px-2 rounded hover:bg-zinc-50 dark:hover:bg-zinc-800/50 transition-colors">            <span className="text-zinc-600 dark:text-muted-foreground">{check}</span>            <Check className="h-3 w-3 text-emerald-500" />          </div>        ))}      </div>    </motion.div>  );};

Props

Prop

Type