La escala de barrio permite comparar cambios que se pierden en un promedio comunal.
Cómo se midió
El análisis usa la misma unidad, período y cobertura para cada observación. Los vacíos se distinguen de los ceros.
Patrón canónico de cuerpo de artículo para periodismo2, comentario, editorial sebastián y lepp.
Primero el componente, después la variación de marca y finalmente su uso dentro de una página.
La escala de barrio permite comparar cambios que se pierden en un promedio comunal.
El análisis usa la misma unidad, período y cobertura para cada observación. Los vacíos se distinguen de los ceros.
La escala de barrio permite comparar cambios que se pierden en un promedio comunal.
El análisis usa la misma unidad, período y cobertura para cada observación. Los vacíos se distinguen de los ceros.
La escala de barrio permite comparar cambios que se pierden en un promedio comunal.
El análisis usa la misma unidad, período y cobertura para cada observación. Los vacíos se distinguen de los ceros.
<article class="ui-sample ui-content" data-article-body><p>La escala de barrio permite comparar cambios que se pierden en un promedio comunal.</p><h3>Cómo se midió</h3><p>El análisis usa la misma unidad, período y cobertura para cada observación. Los vacíos se distinguen de los ceros.</p><p><a href="#fuente">Consulta la serie y su metodología</a>.</p></article>Cada cambio visible declara su autoridad; lo que permanece canónico no se vuelve a inventar en el producto.
La escala de barrio permite comparar cambios que se pierden en un promedio comunal.
El análisis usa la misma unidad, período y cobertura para cada observación. Los vacíos se distinguen de los ceros.
La escala de barrio permite comparar cambios que se pierden en un promedio comunal.
El análisis usa la misma unidad, período y cobertura para cada observación. Los vacíos se distinguen de los ceros.
Compara la propuesta con cortes reales del repositorio. La ausencia de una muestra se declara y nunca se reconstruye de memoria.
Preparando comparación histórica…
La comparación convierte una regla abstracta en una diferencia visible y verificable.
La escala de barrio permite comparar cambios que se pierden en un promedio comunal.
El análisis usa la misma unidad, período y cobertura para cada observación. Los vacíos se distinguen de los ceros.
La prosa completa usa una voz técnica.La misma anatomía debe conservar lectura, foco y acciones sin cortar contenido ni crear scroll horizontal en la página.
La escala de barrio permite comparar cambios que se pierden en un promedio comunal.
El análisis usa la misma unidad, período y cobertura para cada observación. Los vacíos se distinguen de los ceros.
La escala de barrio permite comparar cambios que se pierden en un promedio comunal.
El análisis usa la misma unidad, período y cobertura para cada observación. Los vacíos se distinguen de los ceros.
| Dimensión | Contrato |
|---|---|
| Propietario canónico | Sistema de diseño CIS y equipo editorial · core/core-style |
| Consumidores | Periodismo2, Comentario, Editorial Sebastián y LEPP |
| Dependencias | prosa canónica, metadatos editoriales |
| Estado | candidato |
Patrón observado. 6 implementaciones observadas en 3 repositorios.
La observación demuestra uso existente; la aceptación canónica sigue dependiendo de esta ficha y de su propietario.
| Dato | Resultado |
|---|---|
| Clasificación | Patrón observado |
| Implementaciones | 6 implementaciones observadas |
| Repositorios | cds/cis/periodismo2-frontend, cochid/cochid-datos, cochid/cochid-lex |
| Snapshot | kit/componentes/componentes-observados.json |
El inventario conserva repositorio, archivo fuente y criterio de asociación. Observar una implementación no la convierte automáticamente en canónica.
| Estado requerido |
|---|
| base |
| destacado |
| archivo |
| contenido largo |
Copia el bloque completo; después cambia contenido y destinos, no su anatomía.
<article class="ui-sample ui-content" data-article-body><p>La escala de barrio permite comparar cambios que se pierden en un promedio comunal.</p><h3>Cómo se midió</h3><p>El análisis usa la misma unidad, período y cobertura para cada observación. Los vacíos se distinguen de los ceros.</p><p><a href="#fuente">Consulta la serie y su metodología</a>.</p></article>Copia el bloque completo; después cambia contenido y destinos, no su anatomía.
<article class="ui-sample ui-content border border-slate-300 bg-white p-4 text-slate-950 grid gap-3" data-article-body><p>La escala de barrio permite comparar cambios que se pierden en un promedio comunal.</p><h3>Cómo se midió</h3><p>El análisis usa la misma unidad, período y cobertura para cada observación. Los vacíos se distinguen de los ceros.</p><p><a class="underline underline-offset-4" href="#fuente">Consulta la serie y su metodología</a>.</p></article>Copia el bloque completo; después cambia contenido y destinos, no su anatomía.
import type { ReactNode } from "react";
export interface ArticleBodySection {
/** Título de la sección, en `<h3>`; la primera sección suele no tenerlo. */
title?: string;
/** Párrafos de la sección, en orden; un párrafo vacío se omite. */
paragraphs: string[];
}
export interface ArticleBodyLink {
/** Texto del enlace; vacío omite el párrafo de cierre. */
label: string;
href: string;
}
const SECTIONS: ArticleBodySection[] = [
{ paragraphs: ["La escala de barrio permite comparar cambios que se pierden en un promedio comunal."] },
{
title: "Cómo se midió",
paragraphs: ["El análisis usa la misma unidad, período y cobertura para cada observación. Los vacíos se distinguen de los ceros."],
},
];
const LINK: ArticleBodyLink = { label: "Consulta la serie y su metodología", href: "#fuente" };
export interface ArticleBodyProps {
/** Secciones del texto: título opcional y párrafos. */
sections?: ArticleBodySection[];
/** Enlace de cierre a la fuente o la metodología, como último párrafo terminado en punto; `null` lo omite. */
link?: ArticleBodyLink | null;
/** Cuerpo libre ya maquetado (por ejemplo, el resultado de un MDX); si lo pasas, reemplaza `sections` y `link`. Vacío vuelve a `sections`. */
children?: ReactNode;
className?: string;
}
/**
* Cuerpo de artículo con párrafos, subtítulos y enlace final a la fuente; contiene el texto principal de una nota o informe.
*
* @example <ArticleBody sections={[{ paragraphs: ["La escala de barrio permite comparar cambios."] }, { title: "Qué cambió", paragraphs: ["El análisis usa la misma unidad."] }]} link={{ label: "Consulta la serie y su metodología", href: "/series/barrios" }} />
* @example <ArticleBody>{contenidoMdx}</ArticleBody>
*/
export function ArticleBody({ sections = SECTIONS, link = LINK, children, className }: ArticleBodyProps) {
const libre = !(children == null || children === false || children === "");
const bloques = sections.flatMap((section, i) => [
...(section.title ? [<h3 key={`h-${i}`}>{section.title}</h3>] : []),
...section.paragraphs.filter(Boolean).map((texto, j) => <p key={`p-${i}-${j}`}>{texto}</p>),
]);
const cierre = link?.label ? (
<p>
<a href={link.href}>{link.label}</a>.
</p>
) : null;
if (!libre && !bloques.length && !cierre) return null;
return (
<article className={["ui-content", className].filter(Boolean).join(" ")} data-article-body>
{libre ? children : <>{bloques}{cierre}</>}
</article>
);
}