bouton mini test enlevé

This commit is contained in:
2026-04-25 21:22:41 +02:00
parent baa75807e2
commit f32f127c9e
3 changed files with 36 additions and 5 deletions

View File

@@ -34,6 +34,9 @@ Ce projet est un POC de professeur virtuel pour enfants, avec:
- Cote eleve, le bouton principal bascule entre `Demarrer la seance` et `Fin de la seance`.
- Cote eleve, la colonne gauche affiche les themes du jour: une card lecon avec pourcentage local, une card exercice avec statut.
- Le bilan complet de progression reste reserve aux vues prof/admin.
- Les options TTS visibles doivent etre libellees `Voix Douce`, `Voix Rigolote`, etc.; la mention "Voix IA non humaine..." est portee par un tooltip.
- Le declenchement manuel de mini-test/exercice doit disparaitre de l'interface eleve; le programme doit etre determine par Professeur TOP.
- A prevoir cote admin: tableau par eleve et prompts/instructions personnalises pour guider Professeur TOP par eleve.
- Le vrai `docker-compose.yml` de production n'est pas dans ce repo. Il est situe un niveau au-dessus sur le serveur.
- La conf nginx reelle route:
- `/api/` vers `tutor-backend:8000`

View File

@@ -105,6 +105,13 @@ function getSupportedRecordingMimeType() {
return candidates.find((type) => MediaRecorder.isTypeSupported(type)) || ''
}
function formatVoiceLabel(profile) {
if (!profile?.label) return ''
return profile.label.toLowerCase().startsWith('voix ')
? profile.label
: `Voix ${profile.label}`
}
function LoginPage({ onLogin }) {
const [credentials, setCredentials] = useState({ username: '', password: '' })
const [status, setStatus] = useState('')
@@ -935,9 +942,6 @@ function TutorApp({ currentUser, onLogout }) {
<span>{exerciseLabel}</span>
</div>
<p>{assessment?.skill_label || lessonFocus?.label || 'Aucun exercice lance.'}</p>
<button type="button" onClick={fetchAssessment} disabled={!selectedStudentId || !sessionActive}>
{exerciseStatus === 'not-started' ? 'Lancer exercice' : 'Nouvel exercice'}
</button>
</div>
</div>
)}
@@ -1020,10 +1024,19 @@ function TutorApp({ currentUser, onLogout }) {
<option value="">Voix de Professeur TOP</option>
{voiceProfiles.map((profile) => (
<option key={profile.id} value={profile.id}>
{profile.label}
{formatVoiceLabel(profile)}
</option>
))}
</select>
{selectedVoiceProfile && (
<span
className="voice-tooltip"
title={`Voix IA non humaine: ${formatVoiceLabel(selectedVoiceProfile)} - ${selectedVoiceProfile.description}`}
aria-label={`Voix IA non humaine: ${formatVoiceLabel(selectedVoiceProfile)} - ${selectedVoiceProfile.description}`}
>
i
</span>
)}
<button type="button" onClick={startVoiceInput} disabled={isTranscribing}>
{isAutoListening ? 'Couper le micro' : isTranscribing ? 'Transcription...' : 'Micro auto'}
</button>

View File

@@ -69,6 +69,9 @@ button:disabled { opacity: 0.5; cursor: not-allowed; }
.student-layout .sidebar > .stack.small-gap {
display: none;
}
.admin-layout .sidebar > button:nth-of-type(2) {
display: none;
}
.today-panel {
display: flex;
flex-direction: column;
@@ -155,10 +158,22 @@ button:disabled { opacity: 0.5; cursor: not-allowed; }
}
.composer {
display: grid;
grid-template-columns: 1fr 220px 130px 130px;
grid-template-columns: 1fr 190px 36px 130px 130px;
gap: 0.75rem;
flex: 0 0 auto;
}
.voice-tooltip {
display: grid;
place-items: center;
width: 36px;
height: 100%;
min-height: 46px;
border-radius: 12px;
background: #e2e8f0;
color: #14213d;
font-weight: 700;
cursor: help;
}
.assessment {
display: none;
flex: 0 0 auto;