Saltar al contenido
Índice de Kit UI
Kit UI Componentes

Encabezado de página.

Patrón canónico de encabezado de página para periodismo2, comentario, editorial sebastián y lepp.

Verlo por niveles

Primero el componente, después la variación de marca y finalmente su uso dentro de una página.

Nivel 1Componente canónico

Componentes

Patrones canónicos con ejemplos y código copiable.

Nivel 3Dentro de una página
Sitio · sección

Componentes

Patrones canónicos con ejemplos y código copiable.

Ver y copiar el código de este render
HTML del nivel canónico
<header class="ui-sample ui-content" data-page-header="true"><h2>Componentes</h2><p>Patrones canónicos con ejemplos y código copiable.</p><nav aria-label="Acciones de página"><a class="btn btn--primary" href="#accion">Abrir inventario</a></nav></header>

Variaciones por marca y sitio

Cada cambio visible declara su autoridad; lo que permanece canónico no se vuelve a inventar en el producto.

comentario.cl

Comentario

Autoridad: CANON.md + decisión editorial de producto

Componentes

Patrones canónicos con ejemplos y código copiable.

Cambia en esta marca

  • Namebrand comentario.cl en celeste
  • Mayor ancho de prosa e imágenes editoriales

Permanece canónico

  • Chrome, foco y controles canónicos
  • Autoría, fecha, fuente y jerarquía semántica
circulodesantiago.cl

Editorial Sebastián

Autoridad: Feedback de revisión r14 + capa CDS

Catálogo de datos

Series, mapas y documentos publicados por COCHID.

Cambia en esta marca

  • Editorial Sebastián en rojo, con E y S mayúsculas
  • Atribución societaria a Círculo de Santiago

Permanece canónico

  • Caja normal y espaciado legible
  • Anatomía editorial y accesibilidad canónicas

Comparación histórica recuperable

Compara la propuesta con cortes reales del repositorio. La ausencia de una muestra se declara y nunca se reconstruye de memoria.

Estado actual
Encabezado de página tiene 43 implementaciones observadas en 13 repositorios: cds/cds-www-next, cds/cds-www-staging, cds/cis/cis-ui, cds/cis/cis-usaia, cds/cis/firmasydocumentos, cds/cis/situacion-www, cis/cis-docs, cis/cis-matriz, cis/cis-procesos, cis/cis-proyectos, cis/cis-qualitas, cis/cis-www, cis/projects/lepp/lepp-frontend.
Cambio propuesto
Publicar en r19 el contrato de Encabezado de página para Patrón canónico de encabezado de página para periodismo2, comentario, editorial sebastián y lepp.
Qué ocurre si respondes No
No se adopta el contrato r19 de Encabezado de página; las 43 implementaciones observadas permanecen sin migración.

Preparando comparación histórica…

Antes / r19

La comparación convierte una regla abstracta en una diferencia visible y verificable.

r19 · correctoContrato canónico renderizado

Componentes

Patrones canónicos con ejemplos y código copiable.

  • Prioriza título, evidencia, autoría y una prosa legible.
  • Usa el namebrand y el color editorial propios sin alterar el canon.
Antes · problema observadoAnti-ejemplo no interactivo
NUEVO · DESTACADO · LECTURAUn título subordinado a etiquetasLa prosa completa usa una voz técnica.
  • No llenes la página de epígrafes o etiquetas redundantes.
  • No uses JetBrains Mono como voz editorial ni prosa principal.

Responsive

La misma anatomía debe conservar lectura, foco y acciones sin cortar contenido ni crear scroll horizontal en la página.

320 pxMóvil y zoom

Componentes

Patrones canónicos con ejemplos y código copiable.

1280 pxEscritorio

Catálogo de datos

Series, mapas y documentos publicados por COCHID.

Cobertura

DimensiónContrato
Propietario canónicoSistema de diseño CIS y equipo editorial · core/core-style
ConsumidoresPeriodismo2, Comentario, Editorial Sebastián y LEPP
Dependenciasprosa canónica, metadatos editoriales
Estadocandidato

Evidencia de adopción

Patrón observado. 43 implementaciones observadas en 13 repositorios.

La observación demuestra uso existente; la aceptación canónica sigue dependiendo de esta ficha y de su propietario.

DatoResultado
ClasificaciónPatrón observado
Implementaciones43 implementaciones observadas
Repositorioscds/cds-www-next, cds/cds-www-staging, cds/cis/cis-ui, cds/cis/cis-usaia, cds/cis/firmasydocumentos, cds/cis/situacion-www, cis/cis-docs, cis/cis-matriz, cis/cis-procesos, cis/cis-proyectos, cis/cis-qualitas, cis/cis-www, cis/projects/lepp/lepp-frontend
Snapshotkit/componentes/componentes-observados.json

Consumidores observados

El inventario conserva repositorio, archivo fuente y criterio de asociación. Observar una implementación no la convierte automáticamente en canónica.

Estados

Estado requerido
base
destacado
archivo
contenido largo

Accesibilidad

  • Conserva nombre accesible, orden de lectura y foco visible.
  • Funciona a 320 px, con zoom de 200% y texto largo.
  • El color nunca es la única señal de estado o acción.
  • El contenido esencial permanece disponible sin JavaScript.

Código HTML

Copia el bloque completo; después cambia contenido y destinos, no su anatomía.

Código de referencia
<header class="ui-sample ui-content" data-page-header="true"><h2>Componentes</h2><p>Patrones canónicos con ejemplos y código copiable.</p><nav aria-label="Acciones de página"><a class="btn btn--primary" href="#accion">Abrir inventario</a></nav></header>

Código TAILWIND

Copia el bloque completo; después cambia contenido y destinos, no su anatomía.

Código de referencia
<header class="ui-sample ui-content border border-slate-300 bg-white p-4 text-slate-950 flex flex-wrap items-center justify-between gap-3" data-page-header="true"><h2>Componentes</h2><p>Patrones canónicos con ejemplos y código copiable.</p><nav class="flex flex-wrap items-center gap-3" aria-label="Acciones de página"><a class="btn btn--primary underline underline-offset-4" href="#accion">Abrir inventario</a></nav></header>

Código REACT

Copia el bloque completo; después cambia contenido y destinos, no su anatomía.

Código de referencia
import type { MouseEventHandler } from "react";

/** Peso visual de una acción: `primary` para la principal (una por página), `secondary` para alternativas y `quiet` para terciarias con aspecto de enlace. */
export type PageHeaderActionVariant = "primary" | "secondary" | "quiet";

export interface PageHeaderAction {
  /** Texto del enlace; vacío omite la acción. */
  label: string;
  href: string;
  /** Se llama al activar el enlace, antes de navegar. */
  onClick?: MouseEventHandler<HTMLAnchorElement>;
  /** Peso visual; por defecto la primera acción visible es `primary` y las demás `secondary`. */
  variant?: PageHeaderActionVariant;
}

const ACTIONS: PageHeaderAction[] = [{ label: "Abrir inventario", href: "#accion" }];

export interface PageHeaderProps {
  /** Título de la página. */
  title?: string;
  /** Una oración que dice qué contiene la página; vacía no se muestra. */
  description?: string;
  /** Enlaces de acción de la página; una lista vacía no emite la navegación y una acción sin texto se omite. */
  actions?: PageHeaderAction[];
  /** Nombre accesible de la navegación de acciones (`aria-label`). */
  actionsLabel?: string;
  className?: string;
}

/**
 * Encabezado de página con título, descripción breve y enlaces de acción; va al inicio de una página de índice, catálogo o sección.
 *
 * Las acciones son enlaces con forma de botón: la primera es la principal y las demás, alternativas, salvo que `variant` diga otra cosa. Las partes vacías no se emiten: sin descripción no hay párrafo y sin acciones no hay navegación.
 *
 * @example <PageHeader title="Catálogo de datos" description="Series, mapas y documentos publicados por COCHID." actions={[{ label: "Descargar catálogo", href: "/catalogo.csv" }, { label: "Ver metodología", href: "/metodologia" }]} />
 * @example <PageHeader title="Componentes" actions={[]} />
 */
export function PageHeader({
  title = "Componentes",
  description = "Patrones canónicos con ejemplos y código copiable.",
  actions = ACTIONS,
  actionsLabel = "Acciones de página",
  className,
}: PageHeaderProps) {
  const visibles = actions.filter((action) => action.label);
  if (!title && !description && !visibles.length) return null;
  return (
    <header className={["ui-content", className].filter(Boolean).join(" ")} data-page-header>
      {title ? <h2>{title}</h2> : null}
      {description ? <p>{description}</p> : null}
      {visibles.length ? (
        <nav aria-label={actionsLabel}>
          {visibles.flatMap((action, i) => {
            const variante = action.variant ?? (i === 0 ? "primary" : "secondary");
            const enlace = <a className={`btn btn--${variante}`} href={action.href} onClick={action.onClick} key={`${action.href}-${i}`}>{action.label}</a>;
            return i ? [" ", enlace] : [enlace];
          })}
        </nav>
      ) : null}
    </header>
  );
}