"use client"; import { motion } from "framer-motion"; import type { AGTScores } from "@/lib/types"; import { scoreColor } from "@/components/TrustGauge"; export function DharmaRadar({ scores }: { scores: AGTScores }) { const dims = [ { key: "truthfulness", label: "TRUTH", val: scores.truthfulness }, { key: "non_harm", label: "SAFETY", val: scores.non_harm }, { key: "harmony", label: "SYNERGY", val: scores.harmony }, { key: "responsibility", label: "AGENCY", val: scores.responsibility }, ]; const size = 300; const cx = size / 2, cy = size / 2, r = 80; const n = dims.length; const toXY = (i: number, val: number) => { const angle = (Math.PI * 2 * i) / n - Math.PI / 2; const dist = (val / 10) * r; return { x: cx + dist * Math.cos(angle), y: cy + dist * Math.sin(angle) }; }; const labelXY = (i: number) => { const angle = (Math.PI * 2 * i) / n - Math.PI / 2; const dist = r + 40; return { x: cx + dist * Math.cos(angle), y: cy + dist * Math.sin(angle) }; }; const polygon = dims.map((_, i) => { const p = toXY(i, dims[i].val); return `${p.x},${p.y}`; }).join(" "); return (
{/* Subtle Grid */} {[2.5, 5, 7.5, 10].map((v) => ( { const p = toXY(i, v); return `${p.x},${p.y}`; }).join(" ")} fill="none" stroke="rgba(255,255,255,0.03)" strokeWidth="0.5" /> ))} {/* Data area */} {/* Labels */} {dims.map((d, i) => { const l = labelXY(i); return ( {d.label} {d.val.toFixed(1)} ); })}
); }