Saltar al contenido
Índice de Kit UI
Kit UI Componentes

Estado.

Patrón canónico de estado 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
Operativo
Nivel 2Compañía de Innovación de Santiago · variación
Degradado
Nivel 3Dentro de una página
Sitio · sección
Operativo
Ver y copiar el código de este render
HTML del nivel canónico
<span class="ui-sample badge badge--ok" data-status="operativo"><span aria-hidden="true">●</span> Operativo</span>

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
Operativo

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
Degradado

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
Estado tiene 10 implementaciones observadas en 7 repositorios: cds/cis/cis-admin, cds/cis/cis-inbox, cds/cis/cis-usaia, cochid/cochid-datos, cochid/cochid-lex, cochid/cochid-mundial, cochid/cochid-santiago-pocket.
Cambio propuesto
Publicar en r19 el contrato de Estado para Patrón canónico de estado para cochid, periodismo2, situación y admin.
Qué ocurre si respondes No
No se adopta el contrato r19 de Estado; las 10 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
Operativo
  • 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
Operativo
1280 pxEscritorio
Degradado

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 observado. 10 implementaciones observadas en 7 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
Implementaciones10 implementaciones observadas
Repositorioscds/cis/cis-admin, cds/cis/cis-inbox, cds/cis/cis-usaia, cochid/cochid-datos, cochid/cochid-lex, cochid/cochid-mundial, cochid/cochid-santiago-pocket
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
<span class="ui-sample badge badge--ok" data-status="operativo"><span aria-hidden="true">●</span> Operativo</span>

Código TAILWIND

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

Código de referencia
<span class="ui-sample badge badge--ok border border-slate-300 bg-white p-4 text-slate-950" data-status="operativo"><span aria-hidden="true">●</span> Operativo</span>

Código REACT

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

Código de referencia
/** Estados con icono y tono propios. Se acepta cualquier otro valor de `status`: sin `icon`, se muestra sin símbolo. */
export type StatusBadgeStatus = "operativo" | "degradado" | "interrumpido";

/** Tono de la insignia: `ok` operativo, `warn` degradado o en revisión, `err` interrumpido o con falla, `neutral` sin tono. */
export type StatusBadgeTone = "ok" | "warn" | "err" | "neutral";

export interface StatusBadgeProps {
  /** Estado del servicio o proceso; va en `data-status`. */
  status?: StatusBadgeStatus | (string & {});
  /** Texto visible; por defecto, el estado con mayúscula inicial. */
  label?: string;
  /** Símbolo decorativo antes del texto (● operativo, △ degradado, ✕ interrumpido); con texto vacío no se dibuja. */
  icon?: string;
  /** Tono de la insignia; sin valor se deduce de `status` (operativo: `ok`; degradado, parcial, pendiente: `warn`; interrumpido, caído, falló: `err`) y si no lo reconoce es `neutral`. */
  tone?: StatusBadgeTone;
  className?: string;
}

const ICONOS: Partial<Record<string, string>> = { operativo: "●", degradado: "△", interrumpido: "✕" };

const STATUS_BADGE_TONOS: Partial<Record<string, StatusBadgeTone>> = {
  operativo: "ok",
  activo: "ok",
  degradado: "warn",
  parcial: "warn",
  pendiente: "warn",
  "en revisión": "warn",
  mantenimiento: "warn",
  interrumpido: "err",
  "caído": "err",
  "falló": "err",
  fallido: "err",
};

const STATUS_BADGE_CLASES: Record<StatusBadgeTone, string> = {
  ok: "badge badge--ok",
  warn: "badge badge--warn",
  err: "badge badge--err",
  neutral: "badge",
};

/**
 * Insignia de estado de un servicio, proceso o fuente de datos (operativo, degradado, interrumpido) para tableros y listados.
 *
 * El estado se lee en el texto; el tono (`badge--ok`, `badge--warn`, `badge--err`) y el símbolo, que cambia de forma según el estado, lo refuerzan. El símbolo va con `aria-hidden`.
 *
 * @example <StatusBadge status="degradado" />
 * @example <StatusBadge status="interrumpido" label="Interrumpido desde 18:24" />
 */
export function StatusBadge({ status = "operativo", label, icon, tone, className }: StatusBadgeProps) {
  const texto = label ?? status.charAt(0).toUpperCase() + status.slice(1);
  const simbolo = icon ?? ICONOS[status];
  const tono = tone ?? STATUS_BADGE_TONOS[status.toLowerCase()] ?? "neutral";
  return (
    <span className={[STATUS_BADGE_CLASES[tono], className].filter(Boolean).join(" ")} data-status={status}>
      {simbolo ? <><span aria-hidden="true">{simbolo}</span>{texto ? " " : null}</> : null}
      {texto}
    </span>
  );
}