Saltar al contenido
Índice de Kit UI
Kit UI Componentes

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.

Nivel 1Componente canónico

Actualizado · Fuente: DTPM · posiciones GPS de buses

Nivel 2Compañía de Innovación de Santiago · variación

Datos atrasados · Fuente: DTPM · posiciones GPS de buses

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

Actualizado · Fuente: DTPM · posiciones GPS de buses

Ver y copiar el código de este render
HTML del nivel canónico
<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.cl

COCHID

Autoridad: core-style/DECISIONES.md M15 y LOGOS-CANONICOS.md

Actualizado · 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
innovacionsantiago.cl

Compañía de Innovación de Santiago

Autoridad: CONSTITUTION.md + LOGOS-CANONICOS.md

Datos 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.

r19 · correctoContrato canónico renderizado

Actualizado · Fuente: DTPM · posiciones GPS de buses

  • Incluye fuente, período, unidad y alternativa tabular.
  • Usa escalas comparables y distingue cero de ausencia.
Antes · problema observadoAnti-ejemplo no interactivo
62%CONFIRMADOSin fuente, período ni denominador
  • 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.

320 pxMóvil y zoom

Actualizado · Fuente: DTPM · posiciones GPS de buses

1280 pxEscritorio

Datos atrasados · Fuente: DTPM · posiciones GPS de buses

Cobertura

DimensiónContrato
Propietario canónicoSistema de diseño CIS y COCHID · core/core-style
ConsumidoresCOCHID, Periodismo2, Situación y Admin
Dependenciascochid-graphs cuando corresponde
Estadocandidato

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.

DatoResultado
ClasificaciónPatrón propuesto
Implementaciones0 implementaciones observadas
RepositoriosNingún repositorio observado
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
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.

Código de referencia
<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.

Código de referencia
<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.

Código de referencia
/** 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>
  );
}