import { useI18n } from '../i18n' import { Callout } from './ui' import type { BiometricResult } from '../biometrics/results' const TONE: Record = { 'result.match': 'ok', 'result.pass': 'ok', 'result.enrolled': 'ok', 'result.noMatch': 'bad', 'result.fail': 'bad', 'result.enrollFailed': 'bad', 'result.inconclusive': 'warn', } /** Renders a backend-produced biometric decision. Shows scores as understandable * labels + a collapsible technical panel. Never renders templates/embeddings. */ export function ResultPanel({ r }: { r: BiometricResult }) { const { t } = useI18n() return (
{t(r.summaryKey)}
{r.similarity !== undefined && (<>
{t('result.similarity')}
{r.similarity.toFixed(3)}
)} {r.threshold !== undefined && (<>
{t('result.threshold')}
{r.threshold.toFixed(3)}
)} {r.deepfakeScore != null && ( <>
{t('result.deepfake')}
{r.deepfakeScore.toFixed(3)} ({t('bio.experimental')})
)}
{r.perModality && Object.keys(r.perModality).length > 0 && (
{t('bio.perModality')}
{Object.entries(r.perModality).map(([m, s]) => (
{t(`bio.modality.${m}` as 'bio.modality.face')}
{s.toFixed(3)}
))} )}
{t('tech.title')}
{r.userId && (<>
{t('bio.userId')}
{r.userId}
)} {r.modalities && (<>
modalities
{r.modalities.join(', ')}
)}
{t('tech.requestId')}
{r.requestId ?? '—'}
{t('tech.created')}
{r.at}
) }