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 (
| Student ID |
File |
Language |
AI Probability |
Verdict |
|
{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' }}>
|
{r.id}
|
{r.file || '—'}
|
|
|
{label} |
|
)
})}
)
}