File size: 2,831 Bytes
654bfe6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
import React, { useState } from 'react';
import { Header } from './components/Header';
import { PredictionPanel } from './components/PredictionPanel';
import { TrainingPanel } from './components/TrainingPanel';
import { OrganProfilesPanel } from './components/OrganProfilesPanel';
import { ApiDocsPanel } from './components/ApiDocsPanel';
import { RepositoryCardPanel } from './components/RepositoryCardPanel';
import { AiAdvisorModal } from './components/AiAdvisorModal';

export default function App() {
  const [activeTab, setActiveTab] = useState<'predict' | 'train' | 'organs' | 'api' | 'repo'>('predict');
  const [useTissueConditioning, setUseTissueConditioning] = useState<boolean>(true);
  const [isAiModalOpen, setIsAiModalOpen] = useState<boolean>(false);
  const [aiModalData, setAiModalData] = useState<any>(null);

  const handleOpenAiReportWithData = (data: any) => {
    setAiModalData(data);
    setIsAiModalOpen(true);
  };

  return (
    <div className="min-h-screen bg-slate-950 text-slate-100 font-sans selection:bg-indigo-500 selection:text-white flex flex-col">
      
      {/* App Header & Navigation */}
      <Header
        activeTab={activeTab}
        setActiveTab={setActiveTab}
        useTissueConditioning={useTissueConditioning}
        setUseTissueConditioning={setUseTissueConditioning}
        onOpenAiReport={() => setIsAiModalOpen(true)}
      />

      {/* Main Container */}
      <main className="flex-1 max-w-7xl w-full mx-auto px-4 sm:px-6 lg:px-8 py-6">
        
        {activeTab === 'predict' && (
          <PredictionPanel
            useTissueConditioning={useTissueConditioning}
            onOpenAiReportWithData={handleOpenAiReportWithData}
          />
        )}

        {activeTab === 'train' && (
          <TrainingPanel
            useTissueConditioning={useTissueConditioning}
            setUseTissueConditioning={setUseTissueConditioning}
          />
        )}

        {activeTab === 'organs' && (
          <OrganProfilesPanel />
        )}

        {activeTab === 'api' && (
          <ApiDocsPanel />
        )}

        {activeTab === 'repo' && (
          <RepositoryCardPanel />
        )}

      </main>

      {/* Footer */}
      <footer className="bg-slate-900 border-t border-slate-800 py-4 text-center text-xs text-slate-500">
        <div className="max-w-7xl mx-auto px-4 flex flex-wrap items-center justify-between gap-2">
          <span>EpiADR-Net © 2026 Tissue-Conditioned Zero-Shot AI Platform</span>
          <span className="font-mono text-[11px]">SIDER 4.1 & GTEx V8 Transcriptomics Integrated</span>
        </div>
      </footer>

      {/* AI Preclinical Safety Modal */}
      <AiAdvisorModal
        isOpen={isAiModalOpen}
        onClose={() => setIsAiModalOpen(false)}
        initialData={aiModalData}
      />

    </div>
  );
}