Saltar al contenido
Sistema Meridiano v3.4.0

8. Catálogo de componentes UI

Todo componente interactivo define seis estados obligatorios: reposo, hover, activo (pressed), foco visible, deshabilitado y error (cuando aplica). El foco es siempre un anillo de 2px en Azul Meridiano con desplazamiento de 2px. Deshabilitado reduce opacidad a 50% y quita sombra, nunca solo "gris más claro" sin diferencia estructural.

8.1 Botones

Variante Fondo Texto Borde Cuándo
Primario Azul Meridiano Lienzo La acción principal; máximo uno por vista
Secundario Lienzo Tinta 1px Niebla Acciones de apoyo
Terciario / fantasma Transparente Azul Meridiano Acciones de baja jerarquía, dentro de tablas
Destructivo Error Lienzo Borrar, eliminar; siempre con confirmación
  • Métricas (densidad cómoda): altura 40px, padding 12×24, radio-md, peso 600, tamaño cuerpo.
  • Hover: fondo pasa al tono activo (azul-700). Activo: igual + escala 0.98 con resorte-suave.
  • Icono opcional a la izquierda (20px, separación espacio-xs). Botón de solo icono: 40×40, con tooltip y aria-label.
  • La etiqueta es un verbo que nombra el resultado: "Guardar cambios", no "Aceptar".

8.2 Campos de entrada

  • Anatomía: etiqueta arriba (peso 500, etiqueta), campo, texto de ayuda o error debajo (cuerpo pequeño).
  • Métricas: altura 40px, padding horizontal 12px, radio-md, borde 1px Niebla, fondo Lienzo.
  • Foco: borde Azul Meridiano + anillo. Error: borde Error + mensaje con icono; el mensaje dice cómo corregir.
  • La etiqueta nunca desaparece (no usar placeholder como etiqueta). El placeholder es ejemplo de formato, opcional: "ejemplo@dominio.com".
  • Campos de área de texto: mínimo 3 líneas, redimensionable vertical.

8.3 Select, combos y autocompletar

  • Misma métrica que campos. Chevron de 16px a la derecha.
  • Menú desplegado: elevación 2, radio-md, opciones de 40px, opción activa con fondo Azul suave y texto Azul oscuro.
  • Más de 10 opciones → añadir filtro de búsqueda. Más de 50 → autocompletar asíncrono.

8.4 Checkbox, radio y switch

Control Forma Métrica Cuándo
Checkbox Cuadrado radio-sm 18×18 Selección múltiple; estado indeterminado para "algunos"
Radio Círculo 18×18 Selección única entre 2-5 opciones visibles
Switch Píldora radio-full 40×22 Encendido/apagado con efecto inmediato, sin botón Guardar

Marcado: fondo Azul Meridiano, check Lienzo. Etiqueta siempre a la derecha y clicable. Si la opción requiere "Guardar", usar checkbox, no switch.

8.5 Tablas de datos

  • Elevación 0: borde 1px Niebla, sin sombra. Radio-none o radio-md solo en el contenedor.
  • Encabezado: fondo Bruma, peso 600, etiqueta, alineado como su columna.
  • Texto a la izquierda, números a la derecha y en cifras tabulares, fechas en formato ISO o local consistente.
  • Filas: 40px (cómoda) o 32px (compacta); zebra opcional con Bruma; hover Bruma; selección Azul suave.
  • Columnas ordenables con indicador de dirección; orden activo visible.
  • Más de 25-50 filas → paginación o scroll virtual. Acciones por fila como botones terciarios o menú de tres puntos.
  • Celdas vacías muestran "—", nunca quedan en blanco.

8.6 Tarjetas y tarjetas KPI

  • Tarjeta: fondo base, borde 1px Niebla, radio-md, elevación 1, padding espacio-lg.
  • Tarjeta KPI: etiqueta (texto secundario, etiqueta) → cifra (Título 1-Display, cifras tabulares) → variación con flecha y color funcional (▲ Éxito, ▼ Error) + período de comparación. Una métrica por tarjeta.
  • Si la tarjeta es clicable, toda su superficie lo es y el hover eleva a nivel 2.

8.7 Pestañas (tabs)

  • Subrayado de 2px Azul Meridiano en la activa; inactivas en texto secundario.
  • Altura 40px, separación espacio-lg, sin cajas alrededor de cada pestaña.
  • Máximo 7 pestañas; el contenido de cada una debe ser independiente. Para alternar vistas de un mismo dato (tabla/gráfico), usar un control segmentado: contenedor Bruma radio-md con segmento activo Lienzo y elevación 1.

8.8 Modales y diálogos

  • Radio-lg, elevación 3 (material translúcido con respaldo sólido), ancho máximo 480px (confirmación) o 640px (formulario).
  • Anatomía: título (Título 3) → cuerpo → acciones a la derecha (secundario "Cancelar" + primario).
  • Overlay oscurece el fondo 40-50%. Escape y clic fuera cierran, salvo pérdida de datos (entonces pedir confirmación).
  • El foco entra al modal, queda atrapado dentro y vuelve al disparador al cerrar.
  • Un modal nunca abre otro modal. Flujos largos → página o asistente.

8.9 Toasts y notificaciones

  • Posición: esquina inferior izquierda o superior derecha, consistente por producto. Elevación 2, radio-md.
  • Anatomía: icono de estado + mensaje de una línea + acción opcional ("Deshacer") + cierre.
  • Color por borde izquierdo de 3px y por icono funcional; el fondo permanece neutro (Lienzo) para no gritar.
  • Auto-cierre: 5 s informativos, 8 s con acción; los errores persisten hasta que el usuario los cierre.
  • Entrada con resorte-estándar desde el borde; máximo 3 visibles apilados.

8.10 Badges y etiquetas de estado

  • Píldora radio-full o radio-sm, etiqueta, peso 500, padding 2×8.
  • Versión tenue (defecto): fondo funcional suave + texto funcional oscuro. Ej.: Activo = fondo Éxito-fondo, texto Éxito.
  • Nunca color solo: el texto del badge nombra el estado.

8.11 Navegación

  • Sidebar (app shell): 240-280px, fondo Bruma o Carbón, ítems de 40px con icono 20px + etiqueta, ítem activo con fondo Azul suave + texto Azul oscuro + barra de 3px al borde. Colapsable a 64px (solo iconos con tooltip). Agrupación con encabezados de sección en etiqueta mayúscula pequeña.
  • Topbar: 56-64px, logo + búsqueda global + acciones + avatar. Elevación 0 con borde inferior.
  • Breadcrumbs: cuerpo pequeño, separador "/", último elemento en texto principal sin enlace.
  • Paginación: botones 32-40px, página activa con fondo Azul Meridiano, mostrar "1 … 4 5 6 … 20" y total de resultados.
  • Máximo dos niveles de navegación visibles a la vez.

8.12 Tooltips y popovers

  • Tooltip: fondo Tinta, texto Lienzo, etiqueta, radio-sm, padding 4×8, elevación 2, retardo de aparición ~400 ms. Solo texto breve; nunca contenido esencial ni interactivo.
  • Popover: fondo Lienzo, borde Niebla, radio-md, elevación 2; puede contener controles; se cierra con Escape y clic fuera.

8.13 Acordeones

  • Encabezado de 48px con chevron a la derecha que rota 180° (resorte-suave); borde inferior 1px Niebla entre ítems.
  • Para contenido opcional o secundario. El contenido crítico nunca se esconde en acordeón.

8.14 Progreso, carga y skeleton

Indicador Cuándo
Spinner (20-24px) Esperas < 3 s o acciones locales (botón en estado cargando)
Skeleton Carga de página o tarjeta: bloques Niebla con pulso suave que imitan el layout final
Barra de progreso Procesos medibles > 3 s; con porcentaje o paso "2 de 5"

El botón en estado cargando muestra spinner + verbo en progreso ("Guardando…") y queda deshabilitado para evitar doble envío.

(v3.1) En el rango expresivo (dial > 0), el indicador de carga puede ser una forma que ondula con morphing suave en lugar del spinner clásico; con movimiento reducido vuelve al spinner estático con pulso de opacidad.

8.15 Avatares

  • Círculo (radio-full): 24, 32, 40px. Sin foto: iniciales sobre fondo Azul suave, texto Azul oscuro.
  • Grupos: solapados −8px, máximo 4 + "+N".

8.16 Formularios (composición)

  • Una columna siempre; los formularios multicolumna se leen peor y fallan en móvil.
  • Ancho máximo del campo proporcional al dato: código postal corto, dirección largo.
  • Agrupación por secciones con Título 3 y separación espacio-2xl.
  • Campos obligatorios: marcar los opcionales con "(opcional)", no los obligatorios con asterisco.
  • Validación: al perder foco (blur) para formato, al enviar para lo global; nunca mientras se teclea, salvo confirmación positiva (disponibilidad de usuario).
  • Errores al enviar: resumen al inicio con anclas + mensaje en cada campo (patrón GOV.UK).
  • Botón primario al final alineado con los campos; el verbo nombra el resultado ("Crear cuenta").

8.17 Grupo de botones y botón dividido (nuevo en v3.1)

  • Grupo de botones: 2-5 acciones relacionadas del mismo nivel, unidas en un contenedor con radio-md externo y separadores internos de 1px Niebla (o separación de 2px en el rango expresivo). Solo una variante por grupo (todos secundarios o todos terciarios). Para selección exclusiva usar el control segmentado (§8.7), no un grupo.
  • Botón dividido (split button): acción principal a la izquierda + chevron a la derecha que despliega variantes de la misma acción ("Guardar" | "Guardar y cerrar", "Guardar como…"). El segmento del chevron tiene su propio foco y aria-haspopup. Solo cuando las variantes comparten verbo; si son acciones distintas, usar menú de tres puntos.

8.18 Botón de acción flotante (FAB) y barra flotante (nuevo en v3.1)

  • FAB: la acción creadora dominante en apps móviles ("Nueva tarea"). 56×56px (44px mínimo el dibujo), radio-lg o full, fondo Azul Meridiano, elevación 2, fijo abajo a la derecha con margen espacio-lg. Máximo uno por pantalla; nunca en escritorio con app shell (allí el primario vive en la topbar o el contenido).
  • Menú FAB: si el FAB agrupa 2-4 acciones de creación, al pulsarlo se expande con morphing en una pila de acciones etiquetadas; Escape o tocar fuera lo repliega.
  • Barra de herramientas flotante: grupo de 3-6 controles contextuales que flota sobre el contenido (material entintado, radio-full, elevación 2), aparece con la selección y desaparece con ella. Ejemplo: negrita/cursiva/enlace sobre texto seleccionado.