import { useState } from 'react' import { Badge, LangBadge, Icon } from './primitives' function cellStyle(i, hover, first) { return { padding: '14px 18px', fontSize: 13, borderBottom: '1px solid rgba(148,163,184,0.08)', background: hover ? 'rgba(0,212,255,0.04)' : i % 2 === 1 ? '#131B2E' : 'transparent', boxShadow: hover && first ? 'inset 2px 0 0 #00D4FF' : 'none', transition: 'background .12s cubic-bezier(0.22,1,0.36,1)', } } export default function ResultsTable({ rows, onOpen }) { const [sortKey, setSortKey] = useState('ai_probability') const [sortDir, setSortDir] = useState('desc') const [hover, setHover] = useState(null) const sorted = [...rows].sort((a, b) => { const dir = sortDir === 'asc' ? 1 : -1 if (a[sortKey] < b[sortKey]) return -dir if (a[sortKey] > b[sortKey]) return dir return 0 }) const toggle = (k) => { if (sortKey === k) setSortDir(sortDir === 'asc' ? 'desc' : 'asc') else { setSortKey(k); setSortDir('desc') } } const Th = ({ k, children, style }) => ( toggle(k)} style={{ fontSize: 11, textTransform: 'uppercase', letterSpacing: '0.04em', fontWeight: 500, color: sortKey === k ? '#00D4FF' : '#94A3B8', textAlign: 'left', padding: '14px 18px', background: '#0F1729', borderBottom: '1px solid rgba(148,163,184,0.12)', cursor: 'pointer', userSelect: 'none', ...style, }}> {children} {sortKey === k && {sortDir === 'asc' ? '▲' : '▼'}} ) return (
{sorted.map((r, i) => { const prob = Math.round((r.ai_probability || 0) * 100) const tone = prob >= 70 ? 'red' : prob >= 40 ? 'amber' : 'green' const label = prob >= 70 ? 'LIKELY AI' : prob >= 40 ? 'POSSIBLY AI' : 'LIKELY HUMAN' const probColor = prob >= 70 ? '#EF4444' : prob >= 40 ? '#F59E0B' : '#10B981' const isHover = hover === i return ( setHover(i)} onMouseLeave={() => setHover(null)} onClick={() => onOpen && onOpen(r)} style={{ cursor: 'pointer' }}> ) })}
Student ID File Language AI Probability Verdict
{r.id} {r.file || '—'}
{prob}%
{label}
) }