DE INNOVACIÓN
DE SANTIAGO
Patrón canónico de título contextual para cis, cds, cochid y todos los sitios.
Primero el componente, después la variación de marca y finalmente su uso dentro de una página.
<div class="ui-sample ui-context-title" data-context-title><span class="ui-lockup"><svg class="ui-lockup__mark" viewBox="0 0 200 200" fill="none" stroke="currentColor" aria-hidden="true"><circle cx="100" cy="100" r="92" stroke-width="4"></circle><circle cx="100" cy="100" r="56" stroke-width="18"></circle></svg><strong>COMPAÑÍA<br>DE INNOVACIÓN<br>DE SANTIAGO</strong></span><span role="separator"></span><h2>Style v10</h2></div>Cada cambio visible declara su autoridad; lo que permanece canónico no se vuelve a inventar en el producto.
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 misma anatomía debe conservar lectura, foco y acciones sin cortar contenido ni crear scroll horizontal en la página.
| Dimensión | Contrato |
|---|---|
| Propietario canónico | Sistema de diseño CIS · core/core-style |
| Consumidores | CIS, CDS, COCHID y todos los sitios |
| Dependencias | HTML nativo, cis-auth para sesión |
| Estado | candidato |
Patrón propuesto. 0 implementaciones observadas en 0 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 propuesto |
| Implementaciones | 0 implementaciones observadas |
| Repositorios | Ningún repositorio observado |
| 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 |
| actual |
| móvil |
| sin sesión |
Copia el bloque completo; después cambia contenido y destinos, no su anatomía.
<div class="ui-sample ui-context-title" data-context-title><span class="ui-lockup"><svg class="ui-lockup__mark" viewBox="0 0 200 200" fill="none" stroke="currentColor" aria-hidden="true"><circle cx="100" cy="100" r="92" stroke-width="4"></circle><circle cx="100" cy="100" r="56" stroke-width="18"></circle></svg><strong>COMPAÑÍA<br>DE INNOVACIÓN<br>DE SANTIAGO</strong></span><span role="separator"></span><h2>Style v10</h2></div>Copia el bloque completo; después cambia contenido y destinos, no su anatomía.
<div class="ui-sample ui-context-title border border-slate-300 bg-white p-4 text-slate-950" data-context-title><span class="ui-lockup"><svg class="ui-lockup__mark h-auto w-full" viewBox="0 0 200 200" fill="none" stroke="currentColor" aria-hidden="true"><circle cx="100" cy="100" r="92" stroke-width="4"></circle><circle cx="100" cy="100" r="56" stroke-width="18"></circle></svg><strong>COMPAÑÍA<br>DE INNOVACIÓN<br>DE SANTIAGO</strong></span><span role="separator"></span><h2>Style v10</h2></div>Copia el bloque completo; después cambia contenido y destinos, no su anatomía.
const NAME_LINES = ["COMPAÑÍA", "DE INNOVACIÓN", "DE SANTIAGO"];
export interface ContextTitleProps {
/** Nombre de la sección o herramienta que se muestra junto al lockup. */
title?: string;
/** Nombre de la Compañía, una línea por elemento. */
nameLines?: string[];
className?: string;
}
/**
* Título contextual: lockup de la Compañía, separador y nombre de la sección o herramienta en curso; encabeza vistas internas.
*
* @example <ContextTitle title="Style v10" />
* @example <ContextTitle title="Cuenta" />
*/
export function ContextTitle({ title = "Style v10", nameLines = NAME_LINES, className }: ContextTitleProps) {
return (
<div className={["ui-context-title", className].filter(Boolean).join(" ")} data-context-title>
<span className="ui-lockup">
<svg className="ui-lockup__mark" viewBox="0 0 200 200" fill="none" stroke="currentColor" aria-hidden="true"><circle cx="100" cy="100" r="92" strokeWidth="4"></circle><circle cx="100" cy="100" r="56" strokeWidth="18"></circle></svg>
{nameLines.length ? <strong>{nameLines.flatMap((linea, i) => (i ? [<br key={i} />, linea] : [linea]))}</strong> : null}
</span>
{title ? <><span role="separator"></span><h2>{title}</h2></> : null}
</div>
);
}