1
0
Fork 0

added exit case button for deepface screen

This commit is contained in:
koplenov 2026-04-05 11:43:25 +03:00
parent b61a669344
commit 5ab5b827e2
3 changed files with 37 additions and 7 deletions

View file

@ -67,12 +67,12 @@ const App: React.FC = () => {
}}> ЗАКРЫТЬ</button> }}> ЗАКРЫТЬ</button>
<div style={{ clear: 'both' }} /> <div style={{ clear: 'both' }} />
{overlay === 'case1' && <Case1Desktop onComplete={() => { markComplete('case1'); close(); }} />} {overlay === 'case1' && <Case1Desktop onComplete={() => { markComplete('1'); close(); }} />}
{overlay === 'case2' && <Case2Desktop onComplete={() => { markComplete('case2'); close(); }} />} {overlay === 'case2' && <Case2Desktop onComplete={() => { markComplete('2'); close(); }} />}
{overlay === 'case3' && <Case3Desktop onComplete={() => { markComplete('case3'); close(); }} />} {overlay === 'case3' && <Case3Desktop onComplete={() => { markComplete('3'); close(); }} />}
{overlay === 'case4' && <Case4Desktop onComplete={() => { markComplete('case4'); close(); }} />} {overlay === 'case4' && <Case4Desktop onComplete={() => { markComplete('4'); close(); }} />}
{overlay === 'case5' && <Case5Desktop onComplete={() => { markComplete('case5'); close(); }} />} {overlay === 'case5' && <Case5Desktop onComplete={() => { markComplete('5'); close(); }} />}
{overlay === 'deepfake' && <ChatterboxTTS />} {overlay === 'deepfake' && <ChatterboxTTS onComplete={() => { markComplete('deepfake'); close(); }} />}
{overlay === 'quiz' && <MyQuize />} {overlay === 'quiz' && <MyQuize />}
{overlay === 'wiki' && <CyberSecurityArticle />} {overlay === 'wiki' && <CyberSecurityArticle />}
</div> </div>

View file

@ -427,3 +427,24 @@
.download-btn:hover { .download-btn:hover {
background: rgba(0,255,65,0.2); background: rgba(0,255,65,0.2);
} }
.complete-btn {
display: block;
margin-top: 16px;
padding: 11px 28px;
background: rgba(0,255,255,0.1);
border: 1px solid #00FFFF;
color: #00FFFF;
border-radius: 6px;
cursor: pointer;
font-family: 'Orbitron', monospace;
font-size: 12px;
font-weight: 700;
letter-spacing: 2px;
transition: all 0.2s;
width: 100%;
}
.complete-btn:hover {
background: rgba(0,255,255,0.2);
box-shadow: 0 0 16px rgba(0,255,255,0.35);
}

View file

@ -5,7 +5,11 @@ import './ChatterboxTTS.css';
const API_URL = 'https://back.hack.kinsle.ru/process-audio'; const API_URL = 'https://back.hack.kinsle.ru/process-audio';
const ChatterboxTTS = () => { interface ChatterboxTTSProps {
onComplete?: () => void;
}
const ChatterboxTTS = ({ onComplete }: ChatterboxTTSProps) => {
// Recording state // Recording state
const [isRecording, setIsRecording] = useState(false); const [isRecording, setIsRecording] = useState(false);
const [hasRecording, setHasRecording] = useState(false); const [hasRecording, setHasRecording] = useState(false);
@ -383,6 +387,11 @@ const ChatterboxTTS = () => {
<audio src={resultUrl} controls /> <audio src={resultUrl} controls />
<br /> <br />
<a href={resultUrl} className="download-btn" download="output.wav">💾 Скачать WAV'ку!</a> <a href={resultUrl} className="download-btn" download="output.wav">💾 Скачать WAV'ку!</a>
{onComplete && (
<button className="complete-btn" onClick={onComplete}>
Завершить кейс
</button>
)}
</div> </div>
)} )}
</div> </div>