2.3 KiB
2.3 KiB
Accesibilidad
Objetivo: WCAG 2.2 nivel AA para los contratos entregados.
Formularios
- Labels vinculados con
for/idgenerado o explícito. - Descripciones y errores unidos mediante
aria-describedby. - Los errores establecen
aria-invalid; la aplicación decide cuándo anunciarlos dinámicamente. - Checkbox, radio y select conservan semántica HTML nativa.
requiredydisabledse transmiten al control real.- El switch expone
role="switch"yaria-checkedporque representa encendido/apagado, no selección de formulario genérica.
Teclado y foco
- El foco usa un contorno de 2 px con separación de 2 px.
- Tabs: Tab entra en el tab activo; flechas cambian a la pestaña anterior/siguiente; Home y End van a extremos; tabs deshabilitadas se omiten.
- Dialog:
showModal()proporciona top layer, fondo inerte, contención y Escape nativos. Al cerrar se intenta restaurar el foco previo. - Todos los botones tienen una altura mínima razonable;
DsIconButtonexige unlabelaccesible.
Estados
- Loading en botones conserva el texto, usa
aria-busyy deshabilita interacciones duplicadas. DsProgressBarpublica valor, mínimo y máximo.- Alertas estáticas no usan live regions por defecto para evitar anuncios al cargar una página.
livedebe activarse solo cuando el mensaje aparece como resultado de una acción. - Los iconos decorativos se ocultan con
aria-hidden. - Skeleton es decorativo; el contenedor que lo usa debe proporcionar el estado textual cuando sea necesario.
Movimiento y contraste
prefers-reduced-motion: reduce reduce animaciones y transiciones. La paleta usa texto slate oscuro sobre fondos claros, blanco sobre acciones sky oscuras y variantes de estado con texto oscuro. Los indicadores de foco no dependen de cambios de color internos.
Pruebas incluidas
- Asociación label/control, descripción, error y
v-model. - Disabled y loading.
- Navegación de Tabs con teclado.
- Apertura, nombre y cancelación de Dialog.
- Presencia de exportaciones públicas.
Limitación: jsdom permite verificar contratos DOM, pero no sustituye pruebas manuales con lector de pantalla, zoom al 200 %, alto contraste ni navegación real en Safari/iOS. Estas comprobaciones forman parte de la revisión previa a una publicación estable.