import { useState, useEffect } from 'react' import { Badge } from './primitives' export default function ResultGauge({ value, size = 200, animate = true }) { const [display, setDisplay] = useState(animate ? 0 : value) useEffect(() => { if (!animate) { setDisplay(value); return } let raf, start const dur = 800 const tick = (t) => { if (!start) start = t const p = Math.min((t - start) / dur, 1) const eased = 1 - Math.pow(1 - p, 3) setDisplay(Math.round(value * eased)) if (p < 1) raf = requestAnimationFrame(tick) } raf = requestAnimationFrame(tick) return () => cancelAnimationFrame(raf) }, [value, animate]) const color = value >= 70 ? '#EF4444' : value >= 40 ? '#F59E0B' : '#10B981' const verdict = value >= 70 ? 'LIKELY AI-GENERATED' : value >= 40 ? 'POSSIBLY AI-GENERATED' : 'LIKELY HUMAN-WRITTEN' const tone = value >= 70 ? 'red' : value >= 40 ? 'amber' : 'green' const r = 42, c = 2 * Math.PI * r const offset = c - (display / 100) * c return (
{display}%
AI probability
{verdict}
Confidence
) }