Visor de informes Markdown — /informes/ver/<carpeta>--<nombre>
Descripción
Nuevo visor de informes Markdown en el hub /informes. Los archivos .md del directorio public/informes/<carpeta>/ se renderizan dinámicamente en rutas de tipo /informes/ver/<carpeta>--<nombre> con estilo consistente del workspace (patrón equivalente a /supercontext/reports).
Previamente, solo se soportaban informes .html en el hub. Esta feature amplía el soporte a Markdown, automatizando:
- Escaneo de
.mden el build (alongside.html) - Extracción de título del primer encabezado
# - Extracción de fecha del nombre del archivo (patrón
YYYY-MM-DD) - Renderización con
markeden una página Astro dinámica
Componente principal: /informes/ver/[slug].astro
Ubicación: src/pages/informes/ver/[slug].astro
Funcionalidad:
- Rutas dinámicas: generadas con
getStaticPaths()durante build, una por cada.mdenpublic/informes/. - Parámetro slug: formato
<carpeta>--<nombre>(ej.reportes--auditoria-2026). - Props: recibe
dir(carpeta) yfile(nombre del archivo.md).
Lectura y renderización
1. Lee archivo: `public/informes/<dir>/<file>`
2. Parsea con marked.parse() → HTML
3. Extrae título: regex sobre primer `^# ` del markdown
4. Extrae fecha: regex sobre patrón `YYYY-MM-DD` en el nombre
5. Renderiza en SecondaryLayout con estilo global .report-body
Estilos globales
Clase .report-body define:
- Tipografía: h1–h4 con escalas, h2 subrayado con
border-bottom - Párrafos y listas con spacing consistente
- Links en
var(--accent, #2962ff)con hover <code>inline con fondo overlay y padding<pre>con bg elevated y border suave- Blockquotes con border-left y color muted
- Tablas con collapse + bordes soft
- Imágenes responsive (
max-width: 100%)
Componentes auxiliares
- SecondaryLayout: layout secundario que envuelve el contenido (mismo usado en
/supercontext/reports). - Botón “Ver raw”: enlace a
/informes/<dir>/<file>para descargar markdown original. - Migajas: breadcrumb “Volver a Informes” con estilo de link muted.
Cambio en el escáner: src/pages/informes.astro
La página de listado (/informes) ahora:
- Acepta extensiones: reconoce tanto
.htmlcomo.md(antes solo.html) - Rutas diferenciadas:
.html→/informes/<carpeta>/<archivo>.html(servido crudo).md→/informes/ver/<carpeta>--<nombre>(renderizado dinámico)
- Extracción de título:
.html: parsea<title>tag.md: regex^#\s+(.+)$(primer encabezado)
- Slug canónico: siempre el nombre sin extensión (
.mdo.html)
Flujo de build
Verificado en local (commit message):
- ✅ Build con archivo
.mdde prueba → hub genera entry + visor renderiza OK - ✅ Build sin archivos
.md→ ruta latente, build completa (2171 páginas)
Estructura de datos en el hub
La sección /informes del hub lista informes bajo estructura:
informes:
- tipo: <carpeta o TIPO_POR_CARPETA[carpeta]>
titulo: <extraído de <title> o # >
slug: <nombre sin ext>
fecha: <extraído del nombre si patrón YYYY-MM-DD>
ruta: </informes/... o /informes/ver/...>
sinRegistrar: true
Ejemplo con .md:
{
"tipo": "reportes",
"titulo": "Auditoría Integral 2026",
"slug": "auditoria-integral-2026",
"fecha": "2026-04-15",
"ruta": "/informes/ver/reportes--auditoria-integral-2026",
"sinRegistrar": true
}
Véase también
- [[feature—workspace—informes-deliberaciones]]
- [[concept—cns—markdown-render-pattern]]
- [[entity—workspace—component—secondary-layout]]
- [[workspace—informes]]