From 440cd861f109c5b9dc9eda60e6ccb7b5f7e09a2e Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Mon, 16 Mar 2026 15:34:02 +0000 Subject: [PATCH] feat: add micro-UX and accessibility improvements to V2 Login and Examen - Implement password visibility toggle in V2Login - Improve form accessibility in V2Login with proper label associations - Enhance V2Examen feedback loop with visual markers (check/close icons) - Update V2Examen logic to correctly evaluate answers from data - Add ARIA labels and hide decorative icons for better accessibility screen reader support Co-authored-by: godie <227743+godie@users.noreply.github.com> --- src/v2/pages/V2Examen.jsx | 42 ++++++++++++++++++++++++--------------- src/v2/pages/V2Login.jsx | 38 +++++++++++++++++++++++++++++------ 2 files changed, 58 insertions(+), 22 deletions(-) diff --git a/src/v2/pages/V2Examen.jsx b/src/v2/pages/V2Examen.jsx index f8a7b52..78a0f57 100644 --- a/src/v2/pages/V2Examen.jsx +++ b/src/v2/pages/V2Examen.jsx @@ -46,15 +46,16 @@ const V2Examen = () => { }, [identificador]); const handleSubmit = () => { - if (state.selectedAnswer === null) return; - const correct = state.selectedAnswer === 0; // In mock, first is correct - setState(prev => ({ ...prev, showFeedback: true, isCorrect: correct })); + if (state.selectedAnswer === null || !state.caso) return; + // In the current implementation, we evaluate the first question + const isCorrect = state.caso.preguntas[0].respuestas[state.selectedAnswer].is_correct; + setState(prev => ({ ...prev, showFeedback: true, isCorrect })); }; if (state.loading) return (
Cargando caso clínico...
-
+
@@ -68,11 +69,11 @@ const V2Examen = () => { Sesión Activa
- bolt + +50 XP
- timer + 14:22
@@ -96,23 +97,32 @@ const V2Examen = () => { key={rIdx} onClick={() => !showFeedback && setState(prev => ({ ...prev, selectedAnswer: rIdx }))} className="v2-card-outlined" + aria-label={`${String.fromCharCode(65 + rIdx)}. ${resp.texto}${showFeedback ? (resp.is_correct ? ' - Correcta' : (selectedAnswer === rIdx ? ' - Incorrecta' : '')) : ''}`} style={{ display: 'flex', alignItems: 'center', textAlign: 'left', cursor: showFeedback ? 'default' : 'pointer', - borderColor: selectedAnswer === rIdx ? 'var(--md-sys-color-primary)' : 'var(--md-sys-color-outline-variant)', - backgroundColor: selectedAnswer === rIdx ? 'var(--md-sys-color-primary-container)' : 'transparent', - opacity: showFeedback && selectedAnswer !== rIdx ? 0.6 : 1, + borderColor: showFeedback + ? (resp.is_correct ? 'var(--md-sys-color-primary)' : (selectedAnswer === rIdx ? 'var(--md-sys-color-error)' : 'var(--md-sys-color-outline-variant)')) + : (selectedAnswer === rIdx ? 'var(--md-sys-color-primary)' : 'var(--md-sys-color-outline-variant)'), + backgroundColor: showFeedback + ? (resp.is_correct ? 'var(--md-sys-color-primary-container)' : (selectedAnswer === rIdx ? 'var(--md-sys-color-error-container)' : 'transparent')) + : (selectedAnswer === rIdx ? 'var(--md-sys-color-primary-container)' : 'transparent'), + opacity: showFeedback && !resp.is_correct && selectedAnswer !== rIdx ? 0.6 : 1, width: '100%', padding: '16px', transition: 'all 0.2s' }} > - {String.fromCharCode(65 + rIdx)} + {showFeedback && resp.is_correct ? : + showFeedback && selectedAnswer === rIdx && !resp.is_correct ? : + String.fromCharCode(65 + rIdx)} {resp.texto} @@ -128,7 +138,7 @@ const V2Examen = () => { disabled={selectedAnswer === null} > Confirmar Respuesta - check_circle +
) : ( @@ -138,7 +148,7 @@ const V2Examen = () => { color: isCorrect ? 'var(--md-sys-color-on-primary-container)' : 'var(--md-sys-color-on-error-container)', marginBottom: '24px', display: 'flex', alignItems: 'center', gap: '12px', padding: '20px' }}> - {isCorrect ? 'check_circle' : 'cancel'} +

{isCorrect ? '¡Excelente elección!' : 'Respuesta incorrecta'}

@@ -149,7 +159,7 @@ const V2Examen = () => {

- lightbulb + Perla Médica

@@ -164,7 +174,7 @@ const V2Examen = () => { onClick={() => history.push('/v2/simulacro/resumen')} > Siguiente Caso - arrow_forward +

diff --git a/src/v2/pages/V2Login.jsx b/src/v2/pages/V2Login.jsx index 6c7648e..026235f 100644 --- a/src/v2/pages/V2Login.jsx +++ b/src/v2/pages/V2Login.jsx @@ -8,6 +8,7 @@ import '../styles/v2-theme.css'; const V2Login = () => { const [email, setEmail] = useState(''); const [password, setPassword] = useState(''); + const [showPassword, setShowPassword] = useState(false); const [loading, setLoading] = useState(false); const history = useHistory(); @@ -45,7 +46,7 @@ const V2Login = () => { display: 'flex', alignItems: 'center', justifyContent: 'center', margin: '0 auto 16px' }}> - stethoscope +

ENARM V2

Bienvenido de nuevo, Doctor

@@ -53,8 +54,9 @@ const V2Login = () => {
- + { />
-
- +
+ setPassword(e.target.value)} required + style={{ paddingRight: '48px' }} /> +
@@ -82,7 +108,7 @@ const V2Login = () => {