import type { RenderResponse } from '../worker/renderWorker'; export default function DiagnosticsPanel({ result }: { result: RenderResponse }) { const d = result.diag; const modes = Array.from(result.modeF); const shown = modes.slice(0, 10); return (
Impacts {d.impactCount} · mean {d.meanV.toFixed(2)} m/s, max {d.maxV.toFixed(2)} m/s
Contact time {d.meanTauUs.toFixed(0)} µs mean (Hertz)
Shell modes {shown.map((f) => f.toFixed(0)).join(', ')} {modes.length > shown.length ? `, … (${modes.length} total)` : ''} Hz
Breathing {d.breathingHz.toFixed(0)} Hz (dry {d.breathingDryHz.toFixed(0)} Hz, cavity{' '} {(d.breathingHz - d.breathingDryHz >= 0 ? '+' : '') + (d.breathingHz - d.breathingDryHz).toFixed(0)}{' '} Hz)
Listener {(d.listenerDistM * 100).toFixed(0)} cm from the shell centre
Peak pressure {d.peakPa.toFixed(3)} Pa ({d.peakSplDb.toFixed(1)} dB SPL)
Length {d.durationS.toFixed(2)} s · {result.quality} · oversample {d.oversample}
impacts: {d.solveCached ? 'cached' : `${(d.solveMs / 1000).toFixed(2)} s`} · radiation:{' '} {d.radiateCached ? 'cached' : `${(d.radiateMs / 1000).toFixed(2)} s`}
{d.warnings.map((w, i) => (
⚠ {w}
))}
); }