added exit case button for deepface screen
This commit is contained in:
parent
b61a669344
commit
5ab5b827e2
3 changed files with 37 additions and 7 deletions
12
src/App.tsx
12
src/App.tsx
|
|
@ -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>
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue