Actualizado · Fuente: DTPM · posiciones GPS de buses
Frescura.
Patrón canónico de frescura para cochid, periodismo2, situación y admin.
Verlo por niveles
Primero el componente, después la variación de marca y finalmente su uso dentro de una página.
Datos atrasados · Fuente: DTPM · posiciones GPS de buses
Actualizado · Fuente: DTPM · posiciones GPS de buses
Ver y copiar el código de este render
<p class="ui-sample" data-freshness="true"><strong class="badge badge--ok">Actualizado</strong> <time dateTime="2026-08-25T18:24:40-04:00">18:24:40 CLT</time> · <span>Fuente: DTPM · posiciones GPS de buses</span></p>Variaciones por marca y sitio
Cada cambio visible declara su autoridad; lo que permanece canónico no se vuelve a inventar en el producto.
COCHID
Autoridad: core-style/DECISIONES.md M15 y LOGOS-CANONICOS.mdActualizado · Fuente: DTPM · posiciones GPS de buses
Cambia en esta marca
- Cuadrado azul y namebrand de tres líneas
- Azul COCHID en selección, capas y series
Permanece canónico
- Estructura y semántica comunes
- Fuentes, unidades y alternativa tabular
Compañía de Innovación de Santiago
Autoridad: CONSTITUTION.md + LOGOS-CANONICOS.mdDatos atrasados · Fuente: DTPM · posiciones GPS de buses
Cambia en esta marca
- Navegación y contenido propios del servicio
- Acento reservado para acciones y datos
Permanece canónico
- Mark CIS y namebrand de tres líneas
- IBM Plex Sans, foco, espaciado y anatomía
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
- Frescura no tiene una implementación vigente demostrada; sus ejemplos son material candidato.
- Cambio propuesto
- Publicar en r19 el contrato de Frescura para Patrón canónico de frescura para cochid, periodismo2, situación y admin.
- Qué ocurre si respondes No
- Frescura queda fuera de r19 y sus ejemplos siguen sólo como evidencia pendiente de reformulación.
Preparando comparación histórica…
Antes / r19
La comparación convierte una regla abstracta en una diferencia visible y verificable.
Actualizado · Fuente: DTPM · posiciones GPS de buses
- Incluye fuente, período, unidad y alternativa tabular.
- Usa escalas comparables y distingue cero de ausencia.
- No encierres una cifra aislada en una tarjeta decorativa.
- No declares estados o tendencias que no provienen de datos reales.
Responsive
La misma anatomía debe conservar lectura, foco y acciones sin cortar contenido ni crear scroll horizontal en la página.
Actualizado · Fuente: DTPM · posiciones GPS de buses
Datos atrasados · Fuente: DTPM · posiciones GPS de buses
Cobertura
| Dimensión | Contrato |
|---|---|
| Propietario canónico | Sistema de diseño CIS y COCHID · core/core-style |
| Consumidores | COCHID, Periodismo2, Situación y Admin |
| Dependencias | cochid-graphs cuando corresponde |
| Estado | candidato |
Evidencia de adopción
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 |
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 |
|---|
| con datos |
| sin datos |
| cargando |
| error |
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.
<p class="ui-sample" data-freshness="true"><strong class="badge badge--ok">Actualizado</strong> <time dateTime="2026-08-25T18:24:40-04:00">18:24:40 CLT</time> · <span>Fuente: DTPM · posiciones GPS de buses</span></p>Código TAILWIND
Copia el bloque completo; después cambia contenido y destinos, no su anatomía.
<p class="ui-sample border border-slate-300 bg-white p-4 text-slate-950" data-freshness="true"><strong class="badge badge--ok">Actualizado</strong> <time dateTime="2026-08-25T18:24:40-04:00">18:24:40 CLT</time> · <span>Fuente: DTPM · posiciones GPS de buses</span></p>Código REACT
Copia el bloque completo; después cambia contenido y destinos, no su anatomía.
/** Tono del estado: `ok` al día, `warn` atrasado, `err` sin datos o con la carga fallida, `neutral` sin tono. */
export type FreshnessTone = "ok" | "warn" | "err" | "neutral";
export interface FreshnessProps {
/** Marca los datos como atrasados: cambia el texto por defecto a «Datos atrasados», el tono a `warn` y emite `data-stale`. */
stale?: boolean;
/** Texto del estado; por defecto «Actualizado» o «Datos atrasados» según `stale`; vacío lo oculta. */
label?: string;
/** Tono de la insignia del estado; por defecto `ok`, o `warn` con `stale`. */
tone?: FreshnessTone;
/** Momento de la última actualización en ISO 8601 con zona horaria (atributo `dateTime`). */
dateTime?: string;
/** Texto visible de ese momento: hora local o tiempo relativo («hace 47 min»); vacío oculta el `<time>`. */
time?: string;
/** Origen de los datos, con su prefijo («Fuente: …»); vacío lo oculta. */
source?: string;
className?: string;
}
const FRESHNESS_CLASES: Record<FreshnessTone, string> = {
ok: "badge badge--ok",
warn: "badge badge--warn",
err: "badge badge--err",
neutral: "badge",
};
/**
* Línea de frescura que dice cuándo se actualizó un dato en vivo y de dónde viene, para tableros y páginas con datos que cambian.
*
* El estado va en texto dentro de una insignia con tono. Con `stale` avisa que los datos están atrasados; `dateTime` conserva el momento exacto aunque el texto visible sea relativo.
*
* @example <Freshness dateTime="2026-08-25T18:24:40-04:00" time="18:24:40 CLT" source="Fuente: DTPM · posiciones GPS de buses" />
* @example <Freshness stale dateTime="2026-08-25T18:24:40-04:00" time="hace 47 min" />
*/
export function Freshness({
stale = false,
label,
tone,
dateTime = "2026-08-25T18:24:40-04:00",
time = "18:24:40 CLT",
source = "Fuente: DTPM · posiciones GPS de buses",
className,
}: FreshnessProps) {
const estado = label ?? (stale ? "Datos atrasados" : "Actualizado");
const tono = tone ?? (stale ? "warn" : "ok");
return (
<p className={className} data-freshness data-stale={stale || undefined}>
{estado ? <strong className={FRESHNESS_CLASES[tono]}>{estado}</strong> : null}
{estado && time ? " " : null}
{time ? <time dateTime={dateTime || undefined}>{time}</time> : null}
{source ? <>{estado || time ? " · " : null}<span>{source}</span></> : null}
</p>
);
}