Agregar sección de oradores plenarios en la home#199
Conversation
Nueva sección en la home entre SectionMain y SectionEarlyBird que muestra los oradores plenarios como tarjetas en un grid responsive. Cada orador se define como un .md en src/data/speakers/ con frontmatter tipado (nombre, orden, foto, links a github/linkedin/instagram/website, descripción). Se incluye ada-lovelace.md.template como punto de partida para futuros oradores. La sección no se renderiza si no hay oradores cargados. La descripción usa texto plano multilínea renderizado con whitespace-pre-line. i18n completo en es/en/ca con keys speakers.* y aria-labels apropiados para los links externos (cumplen regla de new_tab).
ctrl-alt-d
left a comment
There was a problem hiding this comment.
Bona feina amb els aria-label dels enllaços. Tinc algunes propostes de millora per a accessibilitat, especialment per a usuaris de lector de pantalla a les llistes (*1), per exemple a la llista de xarxes socials dels speackers:
-
Eliminar
role="list"del<ul>. Els elements<ul>ja exposen semàntica de llista de manera nativa, així que aquest atribut és redundant. -
Afegir un nom accessible a la llista per proporcionar context als usuaris de lector de pantalla:
<ul aria-label="Enllaços socials d'Ada Lovelace">-
Els SVG estan marcats amb
aria-hidden="true", però alguns també tenenaria-label. Aquests atributs són contradictoris: si la icona és decorativa i l'enllaç ja té un nom accessible, l'aria-labelde l'SVG es pot eliminar. -
Afegir
focusable="false"als SVG per evitar que rebin focus en alguns navegadors i tecnologies d'assistència:
<svg aria-hidden="true" focusable="false">- Remove redundant role='list' from <ul> in SectionSpeakers and SpeakerCard - Add translated aria-label to social links list (es, en, ca) - Add focusable='false' to decorative SVGs - Fix aria-hidden + aria-label contradiction in Icon.astro so decorative icons no longer expose an accessible name
Resumen
Nueva sección en la página de inicio que muestra los oradores plenarios como tarjetas en un grid responsive. Se ubica entre
SectionMainySectionEarlyBird, justo antes de la sección de entradas.Cambios
Nuevos archivos
src/types/speakers.ts— tiposISpeaker,ISpeakerLink,TSpeakerLinkType(link types: github, linkedin, instagram, website)src/components/home/SectionSpeakers.astro— carga los MD, ordena pororderascendente y renderiza el grid (no se muestra si no hay oradores)src/components/home/SpeakerCard.astro— tarjeta por orador: foto circular, nombre como<h3>, iconos de redes sociales + icono de globo para web, descripción multilínea conwhitespace-pre-linesrc/data/speakers/ada-lovelace.md.template— plantilla lista para clonar y rellenar con oradores realespublic/speakers/ada-lovelace.webp— foto de ejemplo para la plantillaArchivos modificados
src/components/index.astro— importa y renderiza<SectionSpeakers>en la posición acordadasrc/i18n/home.ts— agrega 7 clavesspeakers.*× 3 locales (es, en, ca)Cómo añadir un orador
public/speakers/<slug>.<ext>src/data/speakers/<slug>.mdsiguiendo la estructura deada-lovelace.md.templateorder(ascendente) y al menos un linkAccesibilidad
<h1>por página, jerarquía<h2>(sección) →<h3>(card) respetadatarget="_blank"llevarel="noopener noreferrer"yaria-labelcon la traducción de "se abre en nueva pestaña" desdemenuTextsaltdescriptivo dinámicoaria-hidden="true"focus-visible:outline)Notas
.mdensrc/data/speakers/(la extensión.templatese ignora a propósito para que sirva solo como guía)whitespace-pre-lineCapturas
Closes #191