import React, { useState } from 'react'; import { DrugRecord, ToxicityPredictionResult } from '../types'; import { SIDER_BENCHMARK_DRUGS } from '../utils/siderDataset'; import { globalEpiADREngine } from '../utils/epiAdrEngine'; import { MoleculeVisualizer } from './MoleculeVisualizer'; import { Activity, AlertTriangle, CheckCircle, Database, HelpCircle, Info, ShieldAlert, Sparkles, Zap } from 'lucide-react'; interface PredictionPanelProps { useTissueConditioning: boolean; onOpenAiReportWithData: (data: any) => void; } export const PredictionPanel: React.FC = ({ useTissueConditioning, onOpenAiReportWithData }) => { const [selectedDrugId, setSelectedDrugId] = useState('doxorubicin'); const [customSmiles, setCustomSmiles] = useState(''); const [compoundName, setCompoundName] = useState('Doxorubicin'); // Select active drug record const activeDrug = SIDER_BENCHMARK_DRUGS.find(d => d.id === selectedDrugId) || SIDER_BENCHMARK_DRUGS[0]; const activeSmiles = customSmiles.trim() !== '' ? customSmiles : activeDrug.smiles; // Run prediction using EpiADR engine const prediction: ToxicityPredictionResult = globalEpiADREngine.predictCompoundToxicity( customSmiles.trim() !== '' ? 'Custom Molecule Candidate' : activeDrug.name, activeSmiles, useTissueConditioning ); const handleSelectDrug = (drug: DrugRecord) => { setSelectedDrugId(drug.id); setCompoundName(drug.name); setCustomSmiles(''); }; const getRiskBadgeColor = (level: string) => { switch (level) { case 'Severe': return 'bg-rose-500/20 text-rose-300 border-rose-500/50'; case 'High': return 'bg-amber-500/20 text-amber-300 border-amber-500/50'; case 'Moderate': return 'bg-yellow-500/20 text-yellow-300 border-yellow-500/50'; default: return 'bg-emerald-500/20 text-emerald-300 border-emerald-500/50'; } }; const getDomainColor = (color: string) => { if (color === 'green') return 'bg-emerald-500/10 text-emerald-400 border-emerald-500/40'; if (color === 'yellow') return 'bg-amber-500/10 text-amber-400 border-amber-500/40'; return 'bg-rose-500/10 text-rose-400 border-rose-500/40'; }; return (
{/* Medical Doctor & Biological Research Scope Banner */}
Clinical & Biological Research Scope MD / Toxicologist Access Only

Computational in-silico disaggregation intended for certified Medical Doctors, Clinical Pharmacologists, and Preclinical Researchers.

{/* Molecule Input & Preset Selector */}

SIDER 4.1 Benchmark Compound Library

7,325 Training SMILES Records
{/* Drug Selection Chips */}
{SIDER_BENCHMARK_DRUGS.map((drug) => { const isSelected = selectedDrugId === drug.id && customSmiles === ''; return ( ); })}
{/* Custom SMILES Input */}
setCustomSmiles(e.target.value)} placeholder="e.g. CC(=O)NC1=CC=C(O)C=C1 or C1=CC=CC=C1" className="flex-1 bg-slate-950 border border-slate-800 rounded-xl px-3.5 py-2 text-xs font-mono text-indigo-300 focus:outline-none focus:border-indigo-500" /> {customSmiles !== '' && ( )}
{/* Tanimoto Structural Applicability Domain Banner */}
Tanimoto Applicability Domain Score: {prediction.tanimotoSimilarity}

{prediction.applicabilityDomain}

Morgan 128-bit Count Similarity Reference Set: SIDER 4.1
{/* Main Grid: Molecular XAI + Organ Toxicity Cards */}
{/* Left Column: 2D Molecular Hotspot Visualizer */}
{/* Right Column: 5 Primary Organ Zero-Shot Risk Cards */}

5 Primary Organ Zero-Shot Toxicity Scores

Bayesian MC Dropout (N=30, μ ± σ)
{/* Liver Card */}
🫀 Hepatotoxicity (Liver) {prediction.organScores.liver.riskLevel} Risk
Mean Risk Score (μ): {(prediction.organScores.liver.meanRisk * 100).toFixed(1)}%
Uncertainty σ = ±{prediction.organScores.liver.uncertaintySigma}
{/* Heart Card */}
❤️ Cardiotoxicity (Heart) {prediction.organScores.heart.riskLevel} Risk
Mean Risk Score (μ): {(prediction.organScores.heart.meanRisk * 100).toFixed(1)}%
Uncertainty σ = ±{prediction.organScores.heart.uncertaintySigma}
{/* Kidney Card */}
🩺 Nephrotoxicity (Kidney) {prediction.organScores.kidney.riskLevel} Risk
Mean Risk Score (μ): {(prediction.organScores.kidney.meanRisk * 100).toFixed(1)}%
Uncertainty σ = ±{prediction.organScores.kidney.uncertaintySigma}
{/* Brain Card */}
🧠 Neurotoxicity (Brain) {prediction.organScores.brain.riskLevel} Risk
Mean Risk Score (μ): {(prediction.organScores.brain.meanRisk * 100).toFixed(1)}%
Uncertainty σ = ±{prediction.organScores.brain.uncertaintySigma}
{/* Lung Card (Full Span on small screens) */}
🫁 Pulmotoxicity (Lung) {prediction.organScores.lung.riskLevel} Risk
Mean Risk Score (μ): {(prediction.organScores.lung.meanRisk * 100).toFixed(1)}%
Uncertainty σ = ±{prediction.organScores.lung.uncertaintySigma}
{/* MedDRA 10 Clinical Classes Breakdown */}

MedDRA Clinical Side Effect Classes (10 Categories)

{Object.entries(prediction.meddraScores).map(([key, val]) => (
{key.replace('_', ' ')} 0.6 ? 'text-rose-400' : val > 0.35 ? 'text-amber-400' : 'text-emerald-400'}`}> {(val * 100).toFixed(0)}%
))}
); };