Saltar al contenido
Índice de Kit UI
Kit UI Componentes

Medio incorporado.

Patrón canónico de medio incorporado para cochid-graphs, mapas, periodismo2 y firmas y documentos.

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
Registro de Santiago01:42 · subtítulos disponibles
16%
Fuente: Archivo Círculo de SantiagoLeer transcripción
Nivel 2Compañía de Innovación de Santiago · variación
Entrevista a vecinos12:05 · sin subtítulos
64%
Fuente: Archivo municipal
Nivel 3Dentro de una página
Sitio · sección
Registro de Santiago01:42 · subtítulos disponibles
16%
Fuente: Archivo Círculo de SantiagoLeer transcripción
Ver y copiar el código de este render
HTML del nivel canónico
<figure class="ui-sample ui-embed" data-embed="media"><div class="ui-embed__frame ui-embed__frame--wide ui-media-demo" role="group" aria-label="Reproductor de archivo audiovisual"><button class="btn btn--primary" type="button" aria-label="Reproducir archivo">Reproducir</button><div><strong>Registro de Santiago</strong><span>01:42 · subtítulos disponibles</span></div><progress value="16" max="100">16%</progress></div><figcaption><span>Fuente: Archivo Círculo de Santiago</span><a href="#transcripcion">Leer transcripción</a></figcaption></figure>

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
Registro de Santiago01:42 · subtítulos disponibles
16%
Fuente: Archivo Círculo de SantiagoLeer transcripción

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
Entrevista a vecinos12:05 · sin subtítulos
64%
Fuente: Archivo municipal

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
Medio incorporado no tiene una implementación vigente demostrada; sus ejemplos son material candidato.
Cambio propuesto
Publicar en r19 el contrato de Medio incorporado para Patrón canónico de medio incorporado para cochid-graphs, mapas, periodismo2 y firmas y documentos.
Qué ocurre si respondes No
Medio incorporado 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
Registro de Santiago01:42 · subtítulos disponibles
16%
Fuente: Archivo Círculo de SantiagoLeer transcripción
  • Mantén proporción, título accesible, fuente y vista completa.
  • Proporciona consentimiento y fallback cuando depende de terceros.
Antes · problema observadoAnti-ejemplo no interactivo
Contenido incorporadoRectángulo vacío sin fuente, fallback ni vista completa
  • No cargues terceros sin política CSP y privacidad.
  • No dejes un rectángulo vacío cuando falla el origen.

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
Registro de Santiago01:42 · subtítulos disponibles
16%
Fuente: Archivo Círculo de SantiagoLeer transcripción
1280 pxEscritorio
Entrevista a vecinos12:05 · sin subtítulos
64%
Fuente: Archivo municipal

Cobertura

DimensiónContrato
Propietario canónicoSistema de diseño CIS y servicio productor · core/core-style
Consumidorescochid-graphs, Mapas, Periodismo2 y Firmas y Documentos
DependenciasCSP, sandbox, fallback enlazable
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
cargando
disponible
bloqueado
error
sin JavaScript

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
<figure class="ui-sample ui-embed" data-embed="media"><div class="ui-embed__frame ui-embed__frame--wide ui-media-demo" role="group" aria-label="Reproductor de archivo audiovisual"><button class="btn btn--primary" type="button" aria-label="Reproducir archivo">Reproducir</button><div><strong>Registro de Santiago</strong><span>01:42 · subtítulos disponibles</span></div><progress value="16" max="100">16%</progress></div><figcaption><span>Fuente: Archivo Círculo de Santiago</span><a href="#transcripcion">Leer transcripción</a></figcaption></figure>

Código TAILWIND

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

Código de referencia
<figure class="ui-sample ui-embed border border-slate-300 bg-white p-4 text-slate-950 grid gap-3" data-embed="media"><div class="ui-embed__frame ui-embed__frame--wide ui-media-demo" role="group" aria-label="Reproductor de archivo audiovisual"><button class="btn btn--primary border border-slate-950 px-3 py-2 focus-visible:outline-2 focus-visible:outline-offset-2 disabled:cursor-not-allowed" type="button" aria-label="Reproducir archivo">Reproducir</button><div><strong>Registro de Santiago</strong><span>01:42 · subtítulos disponibles</span></div><progress value="16" max="100">16%</progress></div><figcaption class="text-sm text-slate-600"><span>Fuente: Archivo Círculo de Santiago</span><a class="underline underline-offset-4" href="#transcripcion">Leer transcripción</a></figcaption></figure>

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";

export interface MediaEmbedProps {
  /** Nombre accesible del reproductor (`aria-label` del grupo). */
  label?: string;
  /** Texto visible del botón de reproducción. */
  playLabel?: string;
  /** Nombre accesible del botón de reproducción, más explícito que el texto visible. */
  playAriaLabel?: string;
  onPlay?: MouseEventHandler<HTMLButtonElement>;
  /** Título del audio o video. */
  title?: string;
  /** Tiempo transcurrido de la reproducción, en texto («01:42»); avanza junto con `value`. Vacío se omite. */
  time?: string;
  /** Dato secundario tras el tiempo, separado por « · »: subtítulos, idioma o calidad; vacío se omite. */
  detail?: string;
  /** Avance de la reproducción, en la misma unidad que `max`. */
  value?: number;
  /** Valor que corresponde al final de la reproducción. */
  max?: number;
  /** Texto legible del avance, como respaldo de `<progress>`; por defecto, el porcentaje redondeado (`16%`). */
  valueText?: string;
  /** Origen del archivo, con su prefijo («Fuente: …»); vacío lo oculta. */
  source?: string;
  /** Texto del enlace del pie, como la transcripción; sin él o sin `href` no se muestra. */
  linkLabel?: string;
  /** Destino del enlace del pie. */
  href?: string;
  className?: string;
}

/**
 * Reproductor de audio o video incorporado con título, tiempo, barra de avance, fuente y enlace a la transcripción; se usa para publicar una grabación dentro de una página.
 *
 * La barra usa el elemento nativo `<progress>`; el enlace a la transcripción da acceso al contenido sin reproducirlo.
 *
 * @example <MediaEmbed title="Registro de Santiago" time="02:18" value={38} onPlay={reproducir} href="/archivo/registro/transcripcion" />
 * @example <MediaEmbed title="Entrevista a vecinos" detail="sin subtítulos" source="Fuente: Archivo municipal" linkLabel="" />
 */
export function MediaEmbed({
  label = "Reproductor de archivo audiovisual",
  playLabel = "Reproducir",
  playAriaLabel = "Reproducir archivo",
  onPlay,
  title = "Registro de Santiago",
  time = "01:42",
  detail = "subtítulos disponibles",
  value = 16,
  max = 100,
  valueText,
  source = "Fuente: Archivo Círculo de Santiago",
  linkLabel = "Leer transcripción",
  href = "#transcripcion",
  className,
}: MediaEmbedProps) {
  const porcentaje = max > 0 ? Math.round(Math.min(Math.max(value / max, 0), 1) * 100) : 0;
  const avance = valueText || `${porcentaje}%`;
  const datos = [time, detail].filter(Boolean).join(" · ");
  const enlace = linkLabel && href ? <a href={href}>{linkLabel}</a> : null;
  return (
    <figure className={["ui-embed", className].filter(Boolean).join(" ")} data-embed="media">
      <div className="ui-embed__frame ui-embed__frame--wide ui-media-demo" role="group" aria-label={label || undefined}>
        <button className="btn btn--primary" type="button" aria-label={playAriaLabel || undefined} onClick={onPlay}>{playLabel}</button>
        {title || datos ? (
          <div>
            {title ? <strong>{title}</strong> : null}
            {datos ? <span>{datos}</span> : null}
          </div>
        ) : null}
        <progress value={value} max={max}>{avance}</progress>
      </div>
      {source || enlace ? (
        <figcaption>
          {source ? <span>{source}</span> : null}
          {enlace}
        </figcaption>
      ) : null}
    </figure>
  );
}