Sistema de diseño unificado para aplicaciones de salud
Bienvenido al Design System
Este es el sistema de diseño oficial de MKClínico v3, una biblioteca de componentes UI consistente y reutilizable diseñada específicamente para aplicaciones del sector salud. Proporciona un lenguaje visual unificado que garantiza coherencia en toda la plataforma.
Todos los componentes están construidos con CSS puro utilizando variables CSS personalizables, sin dependencias de frameworks. Esto permite una integración sencilla en cualquier proyecto web.
Esta guía interactiva es una app Next.js que documenta el DS (maquetación interna con Tailwind); el paquete consumible para tus productos es el CSS del DS (CDN o copia local) más las clases documentadas aquí, no el código de layout de la guía.
Quickstart IA + persona (~5 minutos)
Guía corta para pedirle a una IA una primera pantalla con el DS, sin leer toda la documentación.
1. Objetivo
Código HTML o JSX usando solo clases del MKClinico, listo para pegar, con textos de ejemplo en tono clínico/administrativo.
2. CSS del DS (si aplica)
¿Tu app ya carga mkclinico-ui? Salta al paso 3. Si no, enlaza el CSS o descarga los archivos desde Recursos para IA.
Tip: la misma URL ya va dentro del prompt del paso 3; este bloque sirve para copiarla rápido al HTML.
Opcional: adjunta mkclinico-ai-context-lite.md (resumen) o mkclinico-ai-context.md (completo).
3. Prompt oficial
Mismo texto que en Recursos para IA. Pégalo como primer mensaje del chat; no hace falta leerlo entero antes de copiar.
Si ya trabajas a menudo con el DS y en cada hilo adjuntas el lite o el contexto completo, puedes usar el prompt diario (simplificado) en Recursos para IA — es más corto y da por fijadas las reglas del archivo.
Ver texto completo del prompt
ROL
Eres asistente de front-end para MKClinico (MasterKey). Tu salida debe usar solo el Design System documentado en la guía MKClinico.
REGLAS (obligatorias)
- Usa únicamente clases y variables del DS (mkclinico-ui / guía). No inventes tokens ni estilos sueltos.
- El <link> al CDN (o copia local del CSS) solo aplica estilos en el navegador; los nombres de clase y la estructura HTML salen de la guía o del contexto .md adjunto (mkclinico-ai-context-lite.md o completo) — no intentes deducirlos únicamente del .min.css.
- Proyecto solo HTML/CSS: incluye <link rel="stylesheet" href="https://cdnmk3.masterkey.cl/assets/css/mkclinico-ui.min.css"> y adjunta el contexto .md a la IA; usa markup documentado, sin imports @/app/... de la guía Next.js.
- Monorepo de la guía Next.js: no añadas el link; los estilos ya están cargados. Ahí sí puedes usar componentes React del repo (LayoutPantalla, InputRut, etc.) donde estén documentados.
- Entrega código listo para pegar y, al final, una línea con las clases/componentes DS que usaste.
- Si en el repo existe mkclinico-ai-context.md, úsalo como referencia ampliada; para una primera pasada corta, opcional mkclinico-ai-context-lite.md.
- Ejemplos de texto: dominio clínico/administrativo (pacientes, citas, fichas) cuando toque.
- Demos en la guía (rutas /demo-*): úsalos como referencia de **composición** (orden de bloques y clases DS). No copies como producto el estado, hooks o rutas del código Next de la guía si el destino es otro proyecto; entrega **markup + clases** (y el link al CDN en HTML suelto). Índice: guía Layout y pantallas → Demos a pantalla completa (#demos-pantalla-completa).
- Pedido vago («copia el demo», «igual que el demo» sin más): no interpretes como clonar el repo. Si no nombran ruta, pide **una** aclaración: qué demo de la guía (rutas que empiezan por /demo-, p. ej. /demo-layout) o usa la que ya aparezca en el mensaje/hilo. Luego replica solo composición + clases DS; datos de ejemplo clínicos genéricos; sin API ni navegación real.
- Funcionalidad que no estaba en la primera entrega (agregar/quitar ítems, pestañas dinámicas, scroll, etc.): el demo sigue siendo referencia de UX/comportamiento; la implementación la escribe el proyecto en su lenguaje o stack. No están obligados a copiar el código React de la guía. **Díselo al usuario en una frase** cuando pida eso y entrega la lógica en el stack que indique (o pseudocódigo mínimo), manteniendo clases y tokens del DS en cada estado.
A PARTIR DE AHÍ
Sigue el pedido concreto que te hace la persona (pantalla, formulario, tabla, etc.).
4. Tu pedido concreto
En el mismo hilo, envía la TAREA (qué pantalla o componente quieres). Puedes copiar el ejemplo y editarlo.
Ver ejemplo de pedido (listado pacientes)
TAREA
Generar un panel con título "Pacientes" y un botón de acción principal "Nuevo paciente" (btn-primario btn-md). Debajo, una tabla del DS con columnas de ejemplo: Nombre, RUT, Estado; filas de muestra y estado vacío si aplica.
COMPLETA (sustituye por tu caso)
Título real, nombre del botón y columnas que necesitas: …
•DS real: clases o componentes documentados (p. ej. btn btn-primario btn-md, panel-principal, LayoutPantalla en este repo).
•Sin inventar: nada de utilidades visuales fuera del DS en entregables tipo HTML + CDN.
•Cierre: una línea al final listando qué clases o componentes del DS usó la IA.
•Textos: ejemplos coherentes con el dominio (pacientes, citas, fichas) si es pantalla de producto.
Recursos para IA y uso sin CDN
Descargas para trabajar con IAs y para integrar sin CDN.
Mínimo recomendado para IA:
mkclinico-ui.min.css
mkclinico-ai-context-lite.md
integracion-producto-demos-y-version.md
Con IAs, el CSS no sustituye el .md (detalle en el lite, CDN frente a contexto).
Los archivos .md indican que los demos /demo-* son referencia de composición (orden de bloques); las IAs deben copiar estructura y clases del DS, no la lógica de la guía Next.js. Misma idea para personas en Para desarrolladores → Demos como referencia de composición.
Adjunta al chat como mínimo Contexto IA lite + Integración con producto. Si la tarea es más compleja, añade también el contexto completo (el lite explica CDN frente a contexto).
Copia el prompt base debajo; si el contexto ya va en el hilo, el prompt diario basta.
Sin CDN:<link rel="stylesheet" href="/ruta/mkclinico-ui.min.css">
Atajos: prompts por tipo de tarea
Esquema fijo: TAREA, DEBE INCLUIR / NO HAGAS, COMPLETA. Abre el desplegable para revisar.
Listado con tabla
Ver vista previa del prompt
TAREA
Generar una pantalla de listado en MKClinico usando el Design System.
DEBE INCLUIR
- LayoutPantalla con título visible y un botón de acción principal (btn-primario).
- Una tabla con tabla-container y tabla del DS; columnas de ejemplo: Nombre, RUT, Estado; mostrar filas de ejemplo y estado vacío.
- Botones secundarios con btn-secundario donde corresponda.
NO HAGAS
- Inventar clases fuera del DS ni ignorar --tabla-cols si la tabla usa grid del sistema.
COMPLETA (borra la línea y escribe tu caso)
Columnas reales y dominio (ej. pacientes, médicos): …
Formulario de alta
Ver vista previa del prompt
TAREA
Generar un formulario de alta en MKClinico dentro de LayoutPantalla.
DEBE INCLUIR
- Campos con input-con-titulo-campo (mínimo: nombre, RUT, teléfono, correo).
- Al menos un control de opción (checkbox, radio o switch) si encaja en el flujo.
- Footer fijo o claro con Guardar (btn-primario) y Cancelar (btn-secundario).
NO HAGAS
- Omitir estados input-error / input-warning del DS si el flujo pide validación visible.
COMPLETA (borra la línea y escribe tu caso)
Campos obligatorios, textos de etiqueta y si hay advertencia o error de ejemplo: …
Modal de confirmación
Ver vista previa del prompt
TAREA
Generar un modal de confirmación en MKClinico (HTML o JSX con clases del DS; ver guía Modales).
DEBE INCLUIR
- Overlay y estructura de modal de confirmación del DS.
- Título, mensaje breve y dos botones: btn-modal-primario y btn-modal-secundario.
- Textos en español, tono clínico/administrativo neutro.
NO HAGAS
- Mezclar con el patrón de modal informativo (con X) si aquí debe ser solo confirmación.
COMPLETA (borra la línea y escribe tu caso)
Título, texto del cuerpo y etiquetas exactas de los dos botones: …
Instalación CDN
Agregar el Design System a tu proyecto en segundos
Desarrollo (Normal)
Incluye todos los estilos sin minificar. Ideal para desarrollo y debugging.
Producción (Minificado)
Versión optimizada y comprimida. Recomendado para producción.
Recetas por tarea
Atajos para casos frecuentes: enlace al artículo de la guía, demo a pantalla completa cuando exista y un snippet mínimo listo para copiar. Complementa el Quickstart IA + persona y los prompts de Recursos para IA.
Pedido vago: replicar un demo
Cuando solo dicen «copia el demo» o equivalente: la IA debe pedir qué ruta /demo-* si no está claro, y devolver composición + clases DS (no el código Next completo). Pega este bloque como TAREA o combínalo con el prompt base.
TAREA
Replicar la composición de un demo MKClinico (Design System) según la guía / mkclinico-ai-context-lite.md.
DEBE
- Misma jerarquía de bloques y clases DS que el demo indicado abajo (solo maqueta: markup + clases documentadas).
- Datos de ejemplo clínicos genéricos (pacientes, citas, etc.).
- Si el destino NO es el monorepo de la guía: HTML + <link rel="stylesheet" href="https://cdnmk3.masterkey.cl/assets/css/mkclinico-ui.min.css"> al inicio.
NO
- Copiar hooks, estado, rutas ni lógica del código fuente Next.js de la guía.
- Inventar clases que no estén en el contexto .md.
INDICA EL DEMO (una ruta)
Ej.: /demo-formato-2 | /demo-nuevo-formulario-herramientas | /demo-contenedor-plantillas | /demo-layout | /demo-constructor-formulario | …
NOTA (funcionalidad después)
Si luego piden interacción que no venía en esta TAREA: el demo sigue siendo referencia de UX/comportamiento; la implementación la escribe su proyecto en su stack. La IA debe decírselo al usuario en una frase y mantener clases DS.
Pantalla con shell (layout)
Navbar lateral, barra superior y panel principal con título y botón de acción. En React, preferir el componente LayoutPantalla.
Tabla con columnas alineadas mediante --tabla-cols y celdas de acción (ver, editar, eliminar). La demo de layout muestra el shell; la estructura de tabla está en la guía.
Campos con etiqueta, estados de error y advertencia del DS. La demo a pantalla completa sugiere /demo-contenedor-plantillas (maqueta de ficha + lienzo). Pantallas tipo armador (paleta + rejilla): guía Layout → constructor de formulario y demo /demo-constructor-formulario (React en este repo; no confundir con solo HTML+CDN sin contexto .md).
<divclass="input-con-titulo-campo"><labelclass="input-con-titulo-label"for="campo-nombre">Nombrecompleto</label><inputid="campo-nombre"class="input-campo"type="text"placeholder="Ej. Ana Pérez"/></div><!--input-error/input-warningenelinputsegúnvalidación-->
Modal de confirmación
Diálogo sin botón de cierre en X: título, mensaje y dos acciones (btn-modal-primario / btn-modal-secundario). No hay ruta demo dedicada; el artículo incluye vista previa y código.
Las clases siguen una nomenclatura consistente (ejemplo botones: siempre la base btn + variante + tamaño):
.btn→ Base obligatoria en botones del DS
.btn-primario→ Variante (color/intención)
.btn-md→ Modificador de tamaño
.activo→ Modificador de estado (en otros patrones)
Compatibilidad
Compatible con todos los navegadores modernos:
Chrome 90+
Firefox 88+
Safari 14+
Edge 90+
Cargando sección…
Cargando sección…
Cargando sección…
Cargando sección…
Cargando sección…
Cargando sección…
Cargando sección…
Cargando sección…
Cargando sección…
ESC
Escribe para buscar componentes...
Fundamentos (Tokens)
Paleta de Colores
Variables CSS del sistema de diseño. Haz clic en el color para copiar su valor hex; haz clic en el chip inferior para copiar var(--nombre) listo para usar en CSS.
✓ AAContraste ≥ 4.5:1 — texto normal sobre blanco△ AA+Contraste ≥ 3:1 — texto grande o UI sobre blanco✗No pasa WCAG AA — usar solo como fondo o decoración
Familia Primaria
Brand Colors
Primario#118b95
var(--color-primario)△ AA+ 4.1:1
Primario Hover#0c6f74
var(--color-primario-hover)✓ AA 5.9:1
Familia de Bordes
Borders
Borde Suave#dcf4f7
var(--color-borde-suave)✗ 1.1:1
Borde Claro#a4e6ea
var(--color-borde-claro)✗ 1.4:1
Borde#639297
var(--color-borde)△ AA+ 3.4:1
Familia de Superficies
Backgrounds
Fondo General#fdfdfd
var(--color-fondo-general)✗ 1.0:1
Fondo Tab#FBFFFF
var(--color-fondo-tab)✗ 1.0:1
Superficie Botón#f5feff
var(--color-superficie-boton)✗ 1.0:1
Superficie#e8fafc
var(--color-superficie)✗ 1.1:1
Fondo Ficha#E3FBFF
var(--color-fondo-ficha)✗ 1.1:1
Familia Amarilla
Accent
Acento amarillo y tinte suave para fondos. En exports Figma suelen aparecer como --amarillo y --Amarillo-16 (alias de --color-amarillo y --color-amarillo-suave). No sustituyen la advertencia naranja (--color-advertencia).
Amarillo#FFCD29
var(--color-amarillo)✗ 1.5:1
Amarillo — fondo suave#FFFDDF
var(--color-amarillo-suave)✗ 1.0:1
Familia de Alertas
Alerts
Éxito Suavergba(3, 152, 85, 0.16)
var(--color-exito-suave)rgba
Éxito#039855
var(--color-exito)△ AA+ 3.7:1
Advertencia Suavergba(234, 109, 0, 0.1)
var(--color-advertencia-suave)rgba
Advertencia#EA6D00
var(--color-advertencia)△ AA+ 3.1:1
Error Suavergba(217, 45, 32, 0.1)
var(--color-error-suave)rgba
Error#D92D20
var(--color-error)✓ AA 4.8:1
Estados de entidad
Status
Colores que indican el estado de un registro (activo / inactivo). Se usan en badges, switches y botones deshabilitados.
Colores de borde y fondo del estado activo de las etiquetas .etiqueta-triaje. Uso: Visualización → Estados — Etiquetas triaje ESI. El borde de ESI1 coincide con --color-error (Familia de Alertas); el verde ESI #70BE44 es distinto del token --color-exito (#039855). En :root hay alias Figma (--azul-ESI, --verde-ESI, --Amarillo-ESI, --Naranjo-ESI, --Rojo-100, --Advertencia-16) que apuntan a estos tokens o a equivalentes ya existentes.
Triaje — azul ESI (borde)#0164ae
var(--color-etiqueta-triaje-esi5-borde)✓ AA 6.1:1
Triaje — azul ESI (fondo activo)rgba(1, 100, 174, 0.2)
Lima/amarillo para filas de resumen con riesgo medio (card escala de valoración). Ver Visualización → Estados.
Riesgo medio — borde#D6E164
var(--color-riesgo-medio-borde)✗ 1.4:1
Riesgo medio — fondo#F9FDD0
var(--color-riesgo-medio-fondo)✗ 1.1:1
Colores de Texto
Typography
Texto Oscuro#333333
var(--color-texto-oscuro)✓ AA 12.6:1
Texto Regular#565656
var(--color-texto)✓ AA 7.3:1
Placeholder#b2b2b2
var(--color-placeholder)✗ 2.1:1
Texto Resaltado#0d5e65
var(--color-texto-resaltado)✓ AA 7.5:1
Uso en código
Tipografía
Sistema de texto con diferentes tamaños y estilos
Los tamaños del sistema usan rem en CSS para que escalen con las preferencias del usuario y mejoren responsividad y accesibilidad. Ver también la nota en Radio de borde sobre dónde usar px vs rem.
Título Principal
Título Principal (36px/Semibold)
Subtítulos
Subtítulo Medium (24px/Medium)
Subtítulo Semibold (20px/Semibold)
Subtítulo (20px/Medium)
Subtítulo Volver (20px/Medium/Underline)
Subtítulo Small Bold (18px/Semibold)
Subtítulo Small (18px/Medium)
Subtítulo Small Regular (18px/Regular)
Texto Body
Texto Body Medium (16px/Medium)
Texto Body (16px/Regular)
Texto Body Link (16px/Medium/Underline)
Texto Mínimo
Texto Mínimo Medium (14px/Medium)
Texto Mínimo (14px/Regular)
Texto Mínimo Link (14px/Medium/Underline)
Colores de Texto
Texto oscuro (#333333)
Texto con color estándar (#565656)
Texto placeholder (#b2b2b2)
Texto resaltado (#0d5e65)
Familia tipográfica
El sistema usa Inter como fuente principal, cargada desde Google Fonts vía next/font/google. La variable CSS --font-inter está disponible globalmente en todos los componentes.
app/layout.tsx — Cómo está configurada
HTML
import{Inter}from'next/font/google';
constinter=Inter({
variable:'--font-inter',
subsets:['latin'],
weight:['400','500','600','700'],
});
//Aplicarenel<body>:
<bodyclassName={inter.variable+ " antialiased"}>
styles/componentes.css — Cómo se usa en CSS
HTML
/*Usarlavariableencualquiercomponente*/
font-family:var(--font-inter),sans-serif;
¿Quieres cambiar la fuente?
En app/layout.tsx, reemplaza Inter por la nueva fuente de Google Fonts.
Mantén el mismo nombre de variable --font-inter para no tocar el CSS, o renómbrala y actualiza todas las ocurrencias en componentes.css.
Ajusta los weight que necesites según los pesos disponibles de la nueva fuente.
Radio de borde (Border radius)
Tokens de border-radius del sistema. Usar var(--radius-*) en CSS para mantener consistencia. La variable --radio-grande se mantiene por compatibilidad (14px).
Unidades (px vs rem)
En border-radius y otros valores puramente decorativos (bordes finos, sombras, iconos de tamaño fijo) no es crítico usar rem; px es aceptable y el sistema mezcla ambos. Donde sí se recomienda rem o medidas relativas es en tipografía, espaciado (padding, margin) y tamaños de contenedores que deban escalar con el usuario o con el viewport para una mejor responsividad y accesibilidad.
Variable CSS
Valor
Uso típico
4px
Alertas, breadcrumb, etiquetas, botón eliminar
6px
Inputs, cards pequeñas, botones sm, dropdown
8px
Cards, botones, tabs, tabla, etiqueta removible
10px
Botones primarios, inputs con título, contenedores
12px
Panel principal
0.875rem (14px)
Contenedores / áreas grandes (compatibilidad)
1.25rem (20px)
Modal contenido, paneles
2.5rem (40px)
Modal overlay, contenedores principales
100px
Pills, badges redondeados, paginación
50%
50%
Círculos (avatar, indicadores)
Acciones (Buttons)
Botones Principales
Botones primarios, secundarios y terciarios para diferentes jerarquías de acciones
Botón Primario
Clase base: .btn-primario
Estados interactivos: Hover (fondo más oscuro), Active/Press (sombra interna que simula presión), Focus (borde de enfoque), Disabled (apariencia desactivada), Loading (spinner animado con cursor wait)
Botón Secundario
Clase base: .btn-secundario
Botón Terciario
Clase base: .btn-terciario
Botón estilo texto con subrayado permanente. Cambia de color en hover (primario-hover) y press (primario-oscuro). Usa .btn-terciario-sm para versión de 14px. Ideal para acciones terciarias o links dentro de la interfaz.
Variantes de Tamaño
Botones xs (24px), small (32px), de ancho completo y botones para modales
Cómo se construye un botón
Los botones combinan un tipo con un modificador de dimensión. El tipo define el color y estilo visual; el modificador define el tamaño. Nunca usar un modificador solo — siempre acompañado del tipo.
Modificador
Dimensión resultante
Ejemplo de uso
btn-xs
24px alto; ancho según texto (padding horizontal)
btn-secundario btn-xs
btn-sm
32px alto; ancho según texto (padding horizontal)
btn-primario btn-sm
btn-md
40px alto
btn-primario btn-md
btn-full
50px alto × 560px ancho fijo
btn-primario btn-full
btn-icono-sm
75×32px fijo (compacto; texto corto o solo ícono)
btn-secundario btn-icono-sm
sin modificador
btn-primario = 50px / btn-secundario = 40px
btn-primario
Botones XS (24px)
Variante compacta para acciones de apoyo en barras, listados o etiquetas accionables.
Usa .btn-xs para altura de 24px. Combínalo con .btn-secundario o .btn-primario según el contexto.
Botones Small (32px)
A la misma altura (32px) corresponden dos modificadores distintos: btn-sm cuando el botón debe crecer con el texto, y btn-icono-sm cuando necesitas un bloque fijo 75×32px (etiqueta muy corta o solo ícono). No son intercambiables al buscar la clase en el catálogo.
1. Ancho según texto — btn-sm
Tablas, formularios o acciones con etiqueta larga: el ancho sigue al contenido (mismo alto 32px).
Copiar modificador:
2. Tamaño fijo 75×32px — btn-icono-sm
Misma altura que btn-sm, pero caja de 75px de ancho (texto breve o botón solo con ícono en celdas o barras compactas).
Copiar modificador:
Resumen: .btn-sm + .btn-primario / .btn-secundario para altura 32px y ancho fluido; .btn-icono-sm para el compacto 75×32px.
Botones Medium (40px)
Usa .btn-md para botones de 40px de altura con border-radius de 10px. El botón secundario tiene 40px por defecto. Combínalo con .btn-primario para reducir su altura de 50px a 40px. El primario medium usa el mismo hover (--color-primario-hover) y active que el primario estándar.
Botones Full (560x50px)
Usa .btn-full para botones de ancho fijo de 560px (35rem) con 50px (3.125rem) de altura. Combínalo con .btn-primario.
Botones Especiales
Botones de filtro, retroceso y con íconos
Botón Filtro
DefaultActivo
Usa .activo para estado seleccionado. El contador se agrega con .btn-filtro-count
Botón Volver
NormalPlaceholder (inactivo)
Botones de Ícono
Editar
Editar activo
Ver
Ver activo
Eliminar
Clase CSS
Para qué sirve
Botón cuadrado 40×40px para íconos SVG (editar, ver, etc.)
Estado resaltado — fondo suave teal con borde
Variante destructiva — hover con borde y texto rojo
Todos los botones de ícono usan .btn-icono. Agrega .activo para el estado resaltado. Usa .btn-icono-eliminar para acciones destructivas.
Botones eliminar
Cuatro variantes para acciones de eliminar. Sin padding el ícono se ve más grande; con padding (btn-eliminar-suave) el ícono queda más pequeño dentro del recuadro. Todas usan íconos del catálogo (eliminar-md / eliminar-sm).
Cuadrado (sin padding)
Default
Hover
Cuadrado con padding
Default
Hover
Circular 32px
Default
Hover
Circular XS 20px
Default
Hover
Clase CSS
Para qué sirve
Cuadrado sin padding 28×28 — ícono más grande, hover con borde rojo sutil
Estado hover/activo del cuadrado sin padding
Cuadrado con padding 40×40 — ícono eliminar-lg 16×17, borde rojo sutil y hover con borde #D92D20
Estado hover/activo del cuadrado con padding
Cuadrado — borde suave, hover con fondo rojo claro
Estado hover/activo del cuadrado
Circular 32px — mismo comportamiento que cuadrado
Estado hover/activo del circular
Circular XS 20px — para espacios reducidos
Estado hover/activo del XS
Tooltip de acción
Botón contextual que aparece como tooltip (ej. "Eliminar herramienta"). Borde suave, fondo blanco y sombra teal. Hover con fondo claro y borde más prominente.
Filtro por rango (disparador + panel en la app; HTML/CSS en el DS)
.filtro-rango-fecha-disparador
Sistema de estados y tamaños (clases CSS)
Las clases de tamaño (input-campo--m, input-campo--l) se combinan con input-campo. En cambio, input-warning e input-error son clases independientes que reemplazan a input-campo, no se combinan con ella.
Clase
Qué hace
Ejemplo correcto
input-campo
Base — campo por defecto
class="input-campo"
input-warning
Borde naranja (advertencia)
class="input-warning"
input-error
Borde rojo (error)
class="input-error"
input-campo--m
Tamaño medium (288×40px)
class="input-campo input-campo--m"
input-campo--l
Tamaño large (384×40px)
class="input-campo input-campo--l"
Inputs Básicos
Campos de entrada estándar con variantes de tamaño: default (30px), cantidad (60×30), alto M/L (40px). InputBasico, <Input /> o clases CSS.
1. Componente InputBasico
Variantes: default (100% × 30px), cantidad (60×30px, texto centrado; suele usarse con type="number"), m (288×40px), l (384×40px). Warning/error con icono fuera a la derecha.
Default (100% × 30px)
Variante M (288px × 40px)
Variante M con warning
Variante M con error
Variante L (384px × 40px)
Variante L con warning
Variante L con error
Deshabilitado
Con disabled el contenedor usa .input-deshabilitado: borde --color-texto, fondo --color-estado-inactivo, texto y placeholder --color-placeholder, border-radius: 8px. Tipografía: default y cantidad 14px medium; M y L 18px medium (maqueta Figma).
Default deshabilitado
Cantidad deshabilitada
M y L deshabilitados
Warning deshabilitado (prioriza estilo inactivo)
Input cantidad (60×30)
Props (InputBasico)
Prop
Tipo
Descripción
placeholder
string
Texto cuando el campo está vacío
variant
"default" | "cantidad" | "m" | "l"
Tamaño: 100%×30, cantidad 60×30 centrado, m 288×40, l 384×40 (no mezclar cantidad con m/l; con cantidad, status error se ignora)
status
"default" | "warning" | "error"
Estado visual (borde normal, naranja o rojo)
value
string
Valor controlado
onChange
(value: string) => void
Callback al cambiar el valor
disabled
boolean
Deshabilita el campo; añade .input-deshabilitado (borde --color-texto, fondo --color-estado-inactivo, texto/placeholder --color-placeholder; 14px en fila 30px, 18px en M/L). No expone aria-invalid aunque status="error".
type
string
Tipo HTML del input (text, password, etc.)
2. Componente Input
Props (Input)
Prop
Tipo
Descripción
placeholder
string
Texto cuando el campo está vacío
state
"default" | "warning" | "error"
Estado visual (borde normal, naranja o rojo)
onChange
(value: string) => void
Callback al cambiar el valor
disabled
boolean
Deshabilita el campo
value
string
Valor controlado
3. Clases CSS
Default (30px altura, 100% ancho)
Placeholder
Variante cantidad (60px × 30px)
Variante M (288px × 40px)
Placeholder
Variante L (384px × 40px, texto 16px normal)
Placeholder
Input Warning
Input Error
Clase CSS
Para qué sirve
Campo base — 30px altura, 100% ancho
Cantidad — 60×30px, padding 0 12px, texto centrado, placeholder --color-placeholder; no combinar con --m/--l; sin estado error (advertencia sí con input-warning).
Variante M — 288px × 40px
Variante L — 384px × 40px, texto 16px
Estado advertencia — borde naranja
Estado error — borde rojo
Deshabilitado — sobre input-campo / input-warning / input-error + input[disabled] dentro; borde --color-texto, fondo --color-estado-inactivo, texto/placeholder --color-placeholder, radio 8px. Tipografía 14px medium (default/cantidad) o 18px medium (M/L).
Combinar tipo base con modificadores de tamaño. InputBasico con disabled aplica .input-deshabilitado automáticamente; en HTML puro, clase en el contenedor + disabled en el input (o solo :has(.input-campo-input:disabled)).
Input con Título
Campo con etiqueta arriba. Orden por tamaño: 62px; 208×64; 288×64; 384×64. Deshabilitado al final (mismo cromado que InputBasico con .input-deshabilitado en el contenedor o disabled en el input).
Input con título (62px)
Default
Título sección
Título sección
Título sección
Input con título 208×64 (campo 192px)
Default
Subtitulo Medium 18
Subtitulo Medium 18
Subtitulo Medium 18
Input con título 288×64 (campo 288px)
Default
Subtitulo Medium 18
Subtitulo Medium 18
Subtitulo Medium 18
Input con título 384×64 (campo 384px)
Default
Subtitulo Medium 18
Subtitulo Medium 18
Subtitulo Medium 18
Deshabilitado
Contenedor .input-deshabilitado o disabled en el input; warning/error pasan al cromado inactivo. Campo 30px: 14px medium; campo 40px: 18px medium.
62px — default / warning + ícono
Título sección
Título sección
208×64
Subtitulo Medium 18
288×64
Subtitulo Medium 18
384×64
Subtitulo Medium 18
Clase CSS
Para qué sirve
Contenedor: título arriba y campo abajo. Altura 62px. El ancho lo define el padre.
Texto que va encima del campo.
Área donde el usuario escribe.
Mismo campo con borde naranja.
Mismo campo con borde rojo.
Variante estrecha: 208px de ancho (campo 192px), altura 64px.
Título de la variante 208px.
Campo de texto de la variante 208px.
Borde naranja.
Borde rojo.
Variante mediana: 288px de ancho, altura 64px.
Título de la variante 288px.
Campo de texto de la variante 288px.
Borde naranja.
Borde rojo.
Variante más ancha: 384px de ancho, altura 64px. La clase usa «alto» = ancho del bloque.
Título de la variante 384px.
Campo de texto de la variante 384px.
Borde naranja.
Borde rojo.
En el contenedor raíz (.input-con-titulo, .input-con-titulo-208, etc.) junto con disabled en el input; o solo disabled (aplica :has). Mismos tokens que inputs básicos.
Hay cuatro tamaños: estándar (62px alto), 208px ancho, 288px ancho y 384px ancho (clase .input-con-titulo-alto). En cada uno se usa el prefijo correspondiente y se añade -label, -campo y, si aplica, -campo-warning o -campo-error. Deshabilitado: clase input-deshabilitado en ese mismo contenedor raíz + disabled en el input (en 208/288/alto el input va dentro del -campo).
Input con Título y Botón Editar
Campo de entrada con etiqueta superior y botón de editar interno (altura total 62px). Deshabilitado: clase input-deshabilitado en el contenedor + disabled en el input (cromado alineado a inputs básicos; ícono editar atenuado).
Default
Título sección
Deshabilitado
Título sección
Clase CSS
Para qué sirve
Contenedor principal — 62px, flex space-between, gap 20px
Label 16px font-weight 500
Campo de texto 30px altura
Botón editar 40×40px, ícono 16×16px centrado
Opcional en el contenedor input-con-titulo-editar + input disabled; ícono atenuado y sin pointer-events.
El campo usa justify-content: space-between con gap de 20px.
Input con Título Horizontal
Variante de input con el título al lado izquierdo en lugar de arriba. El layout horizontal usa flex con gap de 16px y el input tiene un ancho fijo de 340px.
Título sección
Título sección
Título sección
Clase CSS
Para qué sirve
Contenedor — flex, gap 16px
Label 16px font-weight 500
Campo default — 340px × 30px, borde #639297
Estado advertencia — borde naranja 1px
Estado error — borde rojo 1px
Layout horizontal con flex, gap 16px. Input padding 6px 12px.
Título horizontal + cantidad (60×30)
Modificador input-titulo-horizontal--cantidad: el texto a la izquierda y el campo .input-campo--cantidad (en React, InputBasico variant="cantidad") justo después del título, con el mismo gap 16px que el input horizontal estándar (sin repartir el ancho al máximo). Altura de fila 30px. Útil para listas de ítems con cantidad.
Título
Título
Título
Clase CSS
Para qué sirve
Modificador en el mismo contenedor que .input-titulo-horizontal: título y cantidad contiguos (gap 16px); label con ellipsis si el texto es largo
Opcional: flex, align-items center, gap 8px, shrink 0 — cantidad + ícono de estado a la derecha
Campo de teléfono con selector de país (bandera + código + desplegable) a la izquierda y placeholder para el número.
Default (288px)
Variante L (384px, área número 288px)
Clase CSS
Para qué sirve
Contenedor principal — 288px por defecto
Bloque selector de país (bandera + código + flecha)
Área bandera
Código de país (+56, etc.)
Ícono desplegable
Contenedor del input de número
Input de número
Wrapper interno
Lista desplegable de países
Opción de país
Variante ancha — 384px, área número 288px
Props: placeholder, onChange(value) (dialCode, number, full), variant("default" | "l"). Componente funcional con desplegable de países (Chile, Argentina, México, etc.). Clases en styles/componentes.css y mkclinico-ui.css. Props: placeholder, onChange(value) (value.dialCode, value.number, value.full), variant ("default" 288px, "l" 384px con área número 288px).
Input RUT
Campo para RUT chileno con bloque a la izquierda (etiqueta RUT + flecha o selector RUT/PASS) y formato automático 00.000.000-0 cuando el tipo es RUT.
Default (288px)
RUT
Variante L (384px)
RUT
RUT o pasaporte (`permitePasaporte`)
Clase CSS
Para qué sirve
Contenedor principal — 288px × 40px por defecto
Bloque izquierdo 80px (etiqueta RUT + flecha)
Texto etiqueta RUT
Ícono flecha
Campo de texto con formato 00.000.000-0
Variante ancha — contenedor 384px
Contenedor con selector RUT/PASS integrado (`permitePasaporte`)
Prefijo con `<select>` nativo estilizado
Select de tipo de documento (apariencia DS, flecha SVG)
Valor de solo lectura; el selector sigue activo (`valorSoloLectura` + `permitePasaporte`)
Campo de fecha con icono de calendario a la izquierda. Usa input type="date" nativo.
Variante S (192px)Default (288px)Variante L (384px)
Clase CSS
Para qué sirve
Contenedor principal — 288px × 40px por defecto
Bloque izquierdo 56px con el ícono de calendario
Área de texto de fecha (input type="date" nativo)
Modificador pequeño — contenedor 192px
Modificador grande — contenedor 384px, área fecha 320px
Calendario Picker
Selector de fechas compacto (300×248px) con tres estados de día: hoy, disponible y seleccionado. Ideal para agendas y selección de turnos.
Abril 2026
LUNMARMIEJUEVIESABDOM
Hoy1Disponible1Selección
Clase CSS
Para qué sirve
Contenedor principal — 300×248px, borde --color-borde, radius 10px
Fila de navegación con flechas y mes/año
Botón flecha prev/next — teal, sin borde
Texto mes y año — 16px 500 teal
Línea divisoria bajo el encabezado
Grid 7 columnas con los nombres de día
Celda de nombre de día (LUN … DOM)
Grid 7 columnas para las celdas de día
Celda de día base — 14px regular
Modificador hoy — punto teal bajo el número
Modificador disponible — círculo borde teal
Modificador seleccionado — fondo teal sólido, texto blanco
Día fuera del mes actual — color placeholder, no clickeable
Fila de leyenda inferior
Punto indicador Hoy en la leyenda
Número con círculo indicador Disponible en la leyenda
Número sin decoración indicador Selección en la leyenda
Filtro rango de fechas (disparador)
Patrón aparte de Input Calendario (una sola fecha nativa). Clic en el disparador (ícono o texto) abre el panel 442×290px (exterior; columnas 140+300); clic fuera o Esc lo cierra (solo en esta demo de la guía).
Demo: abrir y cerrar panel
Envuelve disparador + panel en .filtro-rango-fecha-ancla y posiciona el panel con .filtro-rango-fecha-panel-pos (absolute, margin-top: -2px; ancla inline-flex — borde superior continuo en acceso + principal; el disparador sin borde inferior al abrir (:has), como la maqueta de referencia).
Variantes del texto del disparador (cerrado)
Vacío (placeholder)
Una fecha seleccionada
Rango parcial (inicio + placeholder fin)
Clase CSS
Para qué sirve
Envoltorio con position relative e inline-block: ancla el panel bajo el disparador (max-width 100%).
Posición: absolute, right 0, top 100%, margin-top -2px, z-index 1060. Ancla: inline-flex columna (sin hueco bajo el disparador). Envoltorio panel sin border-top; columnas con border-top. :has quita border-bottom del disparador.
Contenedor del trigger cerrado: inline-flex, 30px alto, borde --color-borde, radius-xs, min-width ~280px. Puede ser <button> (clic en ícono + texto a la vez).
Rail 48px, fondo --color-superficie, separador 1px a la derecha; ícono calendario centrado.
Área de texto: 16px regular --color-texto, liga off; ellipsis. Si el disparador es <button> padre, usar <span> con esta clase.
Columna Acceso rápido: 140px; flex columna; título + marco lista blanco; bordes 1px --color-borde (T continua con principal; :has en ancla).
Título «Acceso rápido»: 14px medium --peso-medio, --color-primario (equiv. Figma Títulos-y-botones), var(--font-inter), liga 0.
Caja blanca (--color-fondo-general) con borde --color-borde-suave y --radius-md; flex 1; overflow visible (sin scroll interno en el panel 442×290).
Lista ul sin viñetas: columna, gap 2px; va dentro del marco de acceso.
Botón opción: 14px regular --color-texto, var(--font-inter), liga 0; white-space nowrap (ej. «Últimos 7 días» / «Últimos 30 días» en una línea); padding 6×8; hover/activa como antes.
Estado seleccionado (equivale a aria-current="true" en el botón).
Columna derecha 300px: flex columna stretch, gap 10px; cabecera mes + marco calendario + pie Aplicar; border-left none.
Fila flechas ‹ › y título mes centrado (flex space-between).
Botón 24×24 aprox., teal, sin borde; hover fondo --color-superficie.
Mes/año: 14px --peso-medio, --color-primario, liga 0; flex 1, texto centrado en la cabecera.
Área rejilla: flex 1; sin borde lateral; líneas 277×1px --color-borde-claro arriba/abajo (::before/::after); token --filtro-rango-fecha-calendario-linea-ancho; semana + malla.
Cabecera 7 columnas (LUN…DOM): grid 7×1; tipografía en .filtro-rango-fecha-calendario-semana-dia.
Etiqueta día semana: 14px regular --color-texto-oscuro (equiv. Figma Negro), var(--font-inter), liga 0.
Grid 7 columnas; column-gap 0; row-gap 0.125rem; align-items center; role="grid" en la app.
Celda día base 14px --color-texto; --vacío / --fuera. Hover, focus-visible y .--activo: 20px alto, fondo --color-superficie, 3px radius, width 100% (ref. maqueta 108px). Rango en bloque: .filtro-rango-fecha-calendario-rango-track.
155px ancho; padding-inline 0; alto calc(2px + fila-util); rejilla interna align-items stretch; align-self center en la malla; overflow hidden; tabular-nums.
height 100% + aspect-ratio 1; first/last justify-self start/end; fondo --color-borde-suave (coincide con el arco del borde).
Días entre extremos: flex 1, --color-texto, --peso-regular.
Pie columna derecha: flex justify-end; botón Aplicar con .btn .btn-secundario .btn-sm + .filtro-rango-fecha-btn-aplicar.
Modificador sobre secundario sm: 32px alto, padding 12×16, gap 12px, borde --color-borde, fondo --color-fondo-general, sombra teal 10% (maqueta).
Input con Búsqueda
Campo de búsqueda con ícono integrado
Campo con lupa (HTML + CSS del DS)
Misma lógica que el buscador inteligente: con texto aparece la X roja (--color-error) para borrar; vacío, la lupa a la derecha. En esta guía se usa el componente InputBusquedaIcono (clases del CDN). Variantes: sizesm | md | ancho400 | lg | 50 | 60 (ancho400 = 400×40px ref., resto alturas con tope 300px).
Variante ancha (400px)
Clase CSS
Para qué sirve
Contenedor flex del buscador con lupa (por defecto max 300×40 ref.; variantes altura -sm … -60; :focus-within teal)
Suma max-width 25rem (400px); combinar con .input-busqueda-icono-md (o base) para 400×40 ref. En React: size="ancho400"
Campo dentro del contenedor (sin borde; placeholder --color-placeholder; hereda tipografía del contenedor)
Lupa a la derecha cuando el campo está vacío (p. ej. 16×16 vía CSS)
Botón borrar cuando hay texto (X 12×12 fill --color-error); mismo criterio que .buscador-inteligente-limpiar
Buscador Inteligente
Misma caja visual que el campo con lupa (40px, texto 14px, lupa teal, X roja al escribir). Dropdown de resultados debajo. Ancho amplio: prop className="buscador-inteligente-container--ancho-400".
Variante ancha (400px)
Estado Warning
Con hasWarning el componente aplica borde como input warning e incluye el ícono al lado: patrón DS campo-con-icono-estado-fila + buscador-inteligente-fila-warning (campo e ícono como hermanos, no un solo componente “todo en uno”).
Clase CSS
Para qué sirve
Patrón genérico (grid): control `minmax(0,1fr)` + columna ícono; `align-items: center` y gap 8px. Con `hasWarning` en buscador, la misma clase + `buscador-inteligente-fila-warning` usa **flex** para la fila (misma intención visual que el input + ícono)
Con `hasWarning`: flex + gap 8px; el campo mantiene el mismo **max-width** que sin warning (p. ej. `--ancho-345` = 345px en demo constructor); el ícono va aparte
Envoltorio del PNG **advertencia-contorno** (23×20): ancho fijo y **min-height 40px** alineado al campo alto; reutilizable junto a input L o buscador
Imagen del ícono dentro del envoltorio anterior (estado warning)
Envoltorio posicionado; max 300px (o --ancho-400 + lista al mismo ancho)
Modificador: max-width 25rem (400px) en contenedor, campo y resultados
Modificador: max-width 19.375rem (310px) — otras maquetas
Área clic y arrastrar para adjuntar archivos (no es variante de botón) y fila de previsualización del archivo ya cargado. Ícono dropzone: subir-archivo-nube; previsualización: archivo-hoja-calculo vía iconoDataUrl.
Default (maqueta ~460×40 px)
Previsualización de archivo cargado
Fila ~280 px de ancho (responsive: max-width: 100%), fondo --color-superficie, nombre como enlace subrayado en teal. El tamaño del archivo usa 14 px (mínimo legible del DS; el mock en Figma proponía 13 px). Quitar archivo: .btn-eliminar-xs + eliminar.
Archivo cargado
800 KB
Zona de arrastre y tarjeta etiqueta
Conjunto de tres estados para un mismo slot de contenido (200 × 130 px): placeholder de arrastre con borde punteado, tarjeta por defecto con borde suave, y tarjeta activa con borde teal, sombra y botón eliminar.
Área de contenido flexible (flex: 1) dentro de la tarjeta.
Posiciona btn-eliminar-circular en esquina inferior derecha (absolute, 8px offset). Solo visual en tarjeta-etiqueta--activa.
Controles de Formulario
Switches, Checkboxes y Radio Buttons
Switch
Switch (40px)
Switch SM (32px)
Switch Vista (tarjeta / lista)
Control para alternar entre vista de tarjetas y vista de lista/tabla. El botón activo muestra borde y sombra; el inactivo es transparente. Con disabled, el contenedor usa borde y fondo atenuados; los íconos pasan a gris placeholder y los botones no son accionables.
Tarjeta activa
Lista activa
Deshabilitado
Clase CSS
Para qué sirve
Contenedor del toggle de vista (grupo de botones)
Modificador en el contenedor cuando no se puede cambiar de vista (borde placeholder, fondo gris suave)
Botón individual de vista (tarjeta o lista)
Botón de vista activo — borde destacado y sombra (teal en estado habilitado)
Comportamiento mutuamente excluyente (una opción activa con color, la otra en estado neutro). La opción inactiva usa etiqueta-categoria (borde var(--Stroke-imputs), texto var(--Negro), 14px regular). La activa usa etiqueta-registro o etiqueta-lectura según corresponda. Envolvente: grupo-switch-etiqueta-categoria (role="group" + aria-label). Cada control: button con aria-pressed. Estilos: 93-estados.css.
Clase CSS
Para qué sirve
Contenedor del conmutador (grupo de botones; role="group" y aria-label recomendados).
Opción inactiva — borde suave, texto en color negro, 14px regular (estado neutro).
Opción activa con acento de Registro (fondo y borde; combinar con aria-pressed).
Opción activa con acento de Lectura (fondo y borde; combinar con aria-pressed).
Item herramienta
Fila de lista arrastrable con handle y toggle. Estado activo con sombra teal y borde más prominente. Usar dentro de listas configurables donde el usuario puede reordenar y activar/desactivar herramientas o secciones.
Por defecto
Nombre herramienta
Activo / seleccionado
Nombre herramienta
Ancho: 100% (339px en Figma, pero se adapta al contenedor). Alto: 40px. El modificador .item-herramienta--activo aplica borde teal y sombra de selección.
Drag & Drop
Clases preparatorias para implementar reordenamiento con cualquier librería de drag & drop (dnd-kit, react-beautiful-dnd, etc.). El CSS maneja los estados visuales; la lógica de reorden queda en el JS.
Clase CSS
Para qué sirve
Cursor grab — indica que el ítem es arrastrable
Ítem original mientras se arrastra — opacidad 0.4
Clon que sigue al cursor — sombra + rotación 2°
Indicador de drop — línea teal en el borde superior
Indicador de drop — línea teal en el borde inferior
Aplicar al contenedor durante el drag — bloquea selección de texto
Item herramienta con checkbox
Fila compacta con etiqueta y checkbox a la derecha (maqueta 160×41 px, Figma): padding 10px 12px 10px 7px, border-radius 3px, borde 2px--color-borde-suave (Stroke-imputs) en top/right/bottom y franja izquierda 24px del mismo color (border-left-width: 24px), fondo --color-fondo-general. El asa item-herramienta-checkbox-asa va centrado sobre la franja (position: absolute, caja 29×32 px). Con item-herramienta-checkbox item-herramienta-checkbox--activo (clases juntas): 200×40 px, padding 10px 12px (simétrico), borde Stroke 1px, radius 3px, sombra doble --transparencia-foto (menú / fondo / tarjetas); fila justify-content: space-between con item-herramienta-checkbox-grupo-inicio (asa + etiqueta) y el checkbox; el asa en activo va sin borde ni fondo (solo el ícono de puntos), con el trazo 10×16 alineado al padding izquierdo 12px de Figma (align-items: flex-start en la columna del asa para no centrar el img en la caja 29×32). Para reordenar, usa los mismos sufijos DnD que en Item herramienta con prefijo item-herramienta-checkbox--(p. ej. --draggable) y el contenedor item-herramienta-list--dragging. En pantallas reales conviene un button type="button" con aria-label dentro de item-herramienta-checkbox-asa al conectar DnD.
Repos: absolute, centrado en franja 24px, 29×32, padding y gap; sin borde/fondo. Con .item-herramienta-checkbox--activo: static en flujo, 29×32 ref., align-items flex-start (img 10×16 al borde del padding 12px), sin borde ni fondo
Solo con --activo: agrupa asa + .item-herramienta-checkbox-inicio para justify-content: space-between respecto al checkbox
Cursor grab (misma regla que item-herramienta--draggable)
Ítem original mientras se arrastra
Clon que sigue al cursor
Indicador de drop — línea superior
Indicador de drop — línea inferior
Fila herramienta con eliminar
Variante 200×40 px, border-radius 6px y borde suave 2px en la fila. La zona del asa item-herramienta-fila-eliminar-asa es una franja de 29px al alto de la fila (fondo --color-superficie-boton, separador derecho 1px suave; en --activo el trazo usa --color-borde), distinta del item-herramienta-checkbox-asa en fila checkbox activo (solo ícono, sin franja con fondo). En reposo con papelera: botón btn-eliminar-xs + ícono eliminar12×13. Otra variante en reposo solo reordena (item-herramienta-fila-eliminar--draggable) sinbtn-eliminar-xs. El modificador item-herramienta-fila-eliminar--activo es el estado resaltado sin papelera (borde Stroke 1px y sombra menú/tarjetas). DnD: item-herramienta-fila-eliminar--draggable, etc.
Con papelera
Selección
Sin papelera (reordenar)
Selección
Activo / sin papelera
Selección
Clase CSS
Para qué sirve
Franja asa 29px, alto de la fila: padding 0 8px 0 10px, fondo --color-superficie-boton, border-right 1px suave (--activo: --color-borde)
Seleccionado: borde 1px --color-borde, sombra --sombra-menu-fondo-tarjetas; sin btn-eliminar-xs
Cursor grab
Ítem original mientras se arrastra
Clon que sigue al cursor
Indicador de drop — línea superior
Indicador de drop — línea inferior
Selector de acciones rápidas
Control para agregar y gestionar atajos de acción. Tiene tres estados: vacío, con un ítem y con múltiples ítems (carrusel con flechas).
Vacío
Acciones rápidas
Con un ítem
Acciones rápidas
Carrusel (múltiples ítems)
Clase CSS
Para qué sirve
Contenedor principal — 322px × 60px
Texto "Acciones rápidas" cuando no hay ítems
Botón + para agregar una nueva acción
Ítem de acción individual con ícono
Botón de eliminar posicionado sobre el ítem (usa btn-eliminar-xs)
Navegación anterior/siguiente; atributo disabled cuando no hay más contenido en ese sentido (estilo :disabled: opacidad, sin hover de borde)
Modificador en estado carrusel: altura fija 60px, radio 12px, justify-content space-between; ítems y + en 40×40px; gap 12px; área scroll solo padding horizontal
Solo ítems con badge; scroll horizontal; padding 10px 12px + margen vertical -10px (aire para badge/hover sin recorte por overflow-x). Fila carrusel: space-between
Ancho fijo: 322px. Alto: 60px. El badge de eliminar usa .selector-acciones-item-badge (fondo --color-blanco, borde suave). En carrusel, .selector-acciones-carrusel-scroll envuelve solo los ítems; el botón + es hermano (no entra en el scroll).
Checkbox
Checkbox (20px)
Checkbox deshabilitado
Checkbox Small (16px)
Checkbox Small deshabilitado
Radio Button
RadioButton Small (16px)
RadioButton Small seleccionado
RadioButton Small deshabilitado
RadioButton (20px)
RadioButton deshabilitado
Icono
Card interactivo con checkbox interno - 50px de altura
Usa componente Checkbox interno. Clases: checkbox-internovector-icon. Usa .activo para resaltar
Grupo con Checkbox
Grupo de opciones con título, checkboxes y celda eliminable. Incluye variante warning (borde naranja) y enlace opcional "Agregar opción".
Esto es un título
Opción 1
Opción 2
Opción 3
Opción 1
Clase CSS
Para qué sirve
Contenedor principal del grupo (488px max, 20px padding)
Título del grupo
Fila que agrupa checkbox + celda
Checkbox a la izquierda
Estado marcado del checkbox
Celda derecha con texto + botón eliminar (384px)
Variante warning — borde outline naranja
Ícono de advertencia fuera del input (SVG 23×20)
Botón eliminar dentro de la celda
Estado visible del botón (solo cuando fila está marcada)
Contenedor del enlace 'Agregar opción'
Grupo con Radio
Grupo de opciones con título, radio buttons y celda eliminable. Incluye variante warning (borde naranja) y enlace opcional "Agregar opción".
Esto es un título
Opción 1
Opción 2
Opción 3
Opción 1
Clase CSS
Para qué sirve
Contenedor principal del grupo (488px max, 20px padding)
Título del grupo
Fila que agrupa radio button + celda
Radio button en estado no seleccionado
Radio button en estado seleccionado
Celda derecha con texto + botón eliminar (384px)
Variante warning — borde outline naranja
Ícono de advertencia fuera del input (SVG 23×20)
Botón eliminar dentro de la celda
Estado visible del botón (solo cuando fila está marcada)
Contenedor del enlace 'Agregar opción' (alineado a la derecha)
Fila con etiqueta y opciones radio
Una sola fila: texto a la izquierda y dos o más radios con .control-label a la derecha. Ancho máximo de referencia 505px. En la maqueta, la fila 2 es el estado por defecto (borde suave); la fila 1 es cómo debe verse al hacer hover (borde --color-borde + sombra exterior --transparencia-foto). En producto solo hace falta :hover; aquí la primera fila usa .guia-fila-control-radio-preview-hover para fijar esa vista en la guía. Sin hover: foco por teclado o .fila-control-radio--resaltada pueden mostrar sombra interior teal.
1 — aspecto al hover (vista previa estática; en app: :hover)
Segunda clase solo en la guía: congela el aspecto de :hover para capturas; en apps usar solo :hover
Opcional: sombra interior + borde fuerte sin :hover (p. ej. fila activa en lista); con :hover gana la sombra exterior
Texto izquierdo — 16px medium, color texto oscuro
Grupo de opciones a la derecha (flex, gap 16px / 24px)
Fila control radio — bloque ancho (antecedentes)
Contenedor en columna (referencia 686px: width: 100% + max-width: 686px), padding 16px, gap 10px, border-radius 8px, para cabecera tipo «Quirúrgico» + contenido debajo. Reutiliza .fila-control-radio-etiqueta y .fila-control-radio-opciones dentro de .fila-control-radio-bloque-cabecera. Por defecto (sin :hover): borde 1px--color-borde-suave (#DCF4F7), fondo --color-fondo-general (#FDFDFD) — también con el bloque desplegado (--si-activo). Con «No refiere» activo, añade .fila-control-radio-bloque--no-refiere: en :hover borde 2px--color-borde y sombra --transparencia-foto. Sin --no-refiere (colapsado o con --si-activo), :hover = borde 1px--color-borde + misma sombra exterior. Con Sí y contenido visible, añade .fila-control-radio-bloque--si-activo en app (marca estado); la caja sigue el mismo ciclo reposo / hover.
1 — Por defecto (maqueta: sin hover ni clases guía)
Quirúrgico
2 — Vista fija: hover con «No refiere» (solo guía, guia-fila-control-radio-bloque-preview-hover-no)
Buscador bajo cabecera (Sí activo): 300×30px ref., max-width 100%; padding 0 20px; gap 10px; radius 6px (--radius-sm); borde 1px --color-borde; fondo --color-fondo-general
Input dentro de .fila-control-radio-bloque-busqueda (14px medium, placeholder --color-placeholder)
Lupa 17×17 en el buscador del bloque (SVG maqueta, fill/stroke #639297)
Envuelve marca teal + recuadro; flex fila, gap 10px, max-width 652px (2+10+640 ref.)
Línea teal FUERA del recuadro, a la izquierda: 2×48px, border-radius pill (--radius-full), --color-borde-claro (#A4E6EA, equiv. linea-divisoria)
Recuadro de opción bajo el buscador: 640×46px ref., max-width 100%; padding 8px 12px; radius 4px (--radius-xs); borde 1px --color-borde; fondo --color-fondo-general
Contenedor flex (texto + acciones) dentro del recuadro; space-between, gap 10px
Fila flex, justify-content flex-start: segmentos + | agrupados a la izquierda; flex 1 deja el aire entre el texto y el botón eliminar
Segmento: flex 0 1 auto (ancho al contenido, no crece), ellipsis si falta espacio
Separador |: 14px regular, --color-placeholder (#B2B2B2), margin 0 10px (10px a izq. y der. del pipe)
Con «No refiere» (u opción negativa): :hover → borde 2px --color-borde + sombra --transparencia-foto
Con «Sí» y contenido visible: marca estado en app; caja = 1px suave en reposo y :hover 1px + sombra (igual que bloque sin desplegar)
Opcional: sombra interior sin hover; no pisa previews guía hover-no / hover-si
Solo guía: aspecto hover con --no-refiere
Solo guía: congela :hover 1px + sombra (bloque sin --no-refiere; usar con --si-activo si es desplegado)
Dropdown Multi-select
Cuatro variantes; ancho sm / md / lg = 200, 300 y 400px (clases dropdown, dropdown--md, dropdown--lg). El trigger y el buscador interno (variante con showSearch) miden 40px de alto. El pie Agregar nuevo es opcional: usa showAddButton={false} cuando la lista esté cerrada y solo debas elegir entre opciones existentes; con showAddButton={true} (valor por defecto del componente) y onAdd cuando el flujo permita crear o añadir ítems.
Con checkboxes y pie «Agregar nuevo»
sm — 200px
Texto
Texto
Texto
Texto
Texto
md — 300px
Texto
Texto
Texto
Texto
Texto
lg — 400px
Texto
Texto
Texto
Texto
Texto
Con checkboxes, sin botón agregar (lista cerrada)
Misma interacción multi-select; el panel termina en la última fila (sin .dropdown-footer).
Variante del dropdown de 62px con label superior, siguiendo el patrón de input-con-titulo. Se activa pasando la prop title al componente Dropdown.
Default
Título
Texto
Texto
Texto
Texto
Warning
Título
Texto
Texto
Texto
Texto
Clase CSS
Para qué sirve
Contenedor con label superior (62px de alto total)
Label superior del dropdown
Variante con borde/estado advertencia
Dropdown sin título
Mismos estilos que el dropdown con título pero sin label superior. Se activa con la prop sinTitulo.
Texto
Texto
Texto
Texto
Clase CSS
Para qué sirve
Dropdown sin label superior (mismo ancho que con título)
Dropdown editable (sin título)
Igual a la variante con título pero sin label superior. Se activa pasando onDelete sin la prop title. Usa sinTitulo para la clase dropdown--sin-titulo. Por defecto el ícono por fila es la papelera (itemAccionIcono="eliminar"); con itemAccionIcono="editar" se muestra el lápiz.
Opción 1
Opción 2
Opción 3
Clase CSS
Para qué sirve
Contenedor base
Con onDelete: acción por fila + pie «Agregar»
Sin label superior (prop sinTitulo)
Papelera roja — default del Dropdown si no pasas itemAccionIcono
DropdownListadoPanel — listado en panel o card
Por defecto aplica sinTitulo, ancho y itemAccionIcono="editar". El lápiz por fila solo se muestra al pasar el cursor por la opción (o con foco de teclado en la fila o en el botón). La callback sigue siendo onDelete. Ver también Feedback → Card de herramienta desplegable.
Opción 1
Opción 2
Opción 3
Clase CSS
Para qué sirve
Envoltorio del componente (estilos de fila solo aquí)
Maqueta ancha colapsada — default de DropdownListadoPanel
Lápiz por fila — visible solo en hover/foco de fila (solo bajo .dropdown-listado-panel)
Dropdown con título — opciones añadidas
Variante editable: cada opción lleva a la derecha el lápiz compacto (itemAccionIcono="editar"); con itemAccionIcono="eliminar"se muestra la papelera. Al pie aparece "Agregar opción". Se activa con onDelete y showAddButton.
Papelera roja — itemAccionIcono="eliminar" (default del Dropdown compacto sin prop)
Input de Código de Verificación
Celda de un solo dígito para ingresar códigos OTP o de verificación. Se usan en fila, una celda por dígito.
Default (sin foco)
-
-
-
-
-
-
Activo / con foco
-
-
-
-
-
-
Clase CSS
Para qué sirve
Celda de un dígito — cuadrado, borde, centrado
Estado con foco — borde/sombra resaltada
Íconos SVG
Íconos
Haz clic en cualquier parte de la tarjeta del ícono para copiar su código SVG al portapapeles (o la referencia del asset, si el ícono es un PNG en /public).
Navegación (menú)8 íconos
Íconos tarjeta mapa cama8 íconos
Cerrar / Cancelar5 íconos
CRUD (Crear, Editar, Eliminar)15 íconos
Estado / Feedback11 íconos
Dirección / Flechas10 íconos
Vista / Búsqueda11 íconos
Archivo / Datos8 íconos
Usuario4 íconos
Controles12 íconos
Elementos visuales CSS
No son SVG — se construyen con HTML + CSS del design system.
n°
N° de paso40 × 40 · CSS
Visualización (Data Display)
Estados
Indicadores de estado: .estado-activo, .estado-inactivo, .badge-activo, .badge-inactivo, .badge-advertencia, .etiqueta-categoria, .etiqueta-registro, .etiqueta-lectura, .etiqueta-datos, .etiqueta-datos-default, .etiqueta-triaje. El conmutador Registro / Lectura (.grupo-switch-etiqueta-categoria) está en Entradas → Controles.
Íconos tarjeta mapa cama (celdas)
Misma sombra que menú activo / etiquetas (--Sombra-seleccion): exterior 2px 2px 4px e interior 2px -2px 12px inset. Borde y fondo: --color-borde / --color-fondo-general; en alerta: --color-error y fondo --color-icono-tarjeta-mapa-cama-alerta-fondo con glifo en blanco. Los SVG del catálogo están en Íconos → Tarjeta mapa cama.
Área del glifo 20×20 px (.icono-tarjeta-mapa-cama-img object-fit contain)
Área del glifo 28×28 px
Borde --color-error, fondo --color-icono-tarjeta-mapa-cama-alerta-fondo; glifo blanco vía filter en .icono-tarjeta-mapa-cama-img
Permite overflow visible para el disco de aviso
Disco --color-error, texto n° blanco (esquina superior derecha)
Imagen del ícono del catálogo (data URL); en --alerta recibe filter para blanco
Estados con punto indicador
Estado ActivoEstado Inactivo
Badges de estado
ActivoInactivoPendiente
Etiqueta categoría (Registro)
Uso en grupo conmutado (Registro / Lectura): Entradas → Controles — Switch Registro / Lectura. Chip compacto (20px de alto) para tipo de registro u otra categoría morada. Tokens: --color-etiqueta-registro-texto, --color-etiqueta-registro-borde, --color-etiqueta-registro-fondo (y sombra inferior en --color-etiqueta-registro-sombra-inferior). Espaciado horizontal: --sds-size-space-200.
Registro
Etiqueta categoría (Lectura)
Uso en grupo conmutado (Registro / Lectura): Entradas → Controles — Switch Registro / Lectura. Misma estructura que Registro (20px alto); sombras inset distintas (superior centrada 0 3px 12px). Tokens: --color-etiqueta-lectura-texto, --color-etiqueta-lectura-borde, --color-etiqueta-lectura-fondo, --color-etiqueta-lectura-sombra-inferior.
Lectura
Etiquetas de datos
Etiquetas de filtro. La clase base etiqueta-datos es el estado por defecto. Agregar etiqueta-datos--activo para el estado seleccionado.
Por defectoEtiqueta000ActivoEtiqueta000
Etiquetas triaje ESI
Filtros por nivel con caja fija 100×30 px, padding 0 12px, justify-content: space-between, radius 8px, borde 2px y fondo --color-fondo-general (Figma blanco-final) según nivel: azul ESI #0164AE, verde #70BE44, amarillo #E8D810, naranjo #FA8C2C, rojo #D92D20 (tokens --color-etiqueta-triaje-*-borde). Texto 16px regular; contador .etiqueta-triaje-valor (600). Activo: etiqueta-triaje--activo + fondo rgba por nivel (--color-etiqueta-triaje-*-fondo-activo) y sombra --etiqueta-triaje-sombra-activo (Figma --Sombra-seleccion). «Sin categorizar» en reposo: 0 4px 16px--color-advertencia-suave (Advertencia-16); con etiqueta-triaje--ancha si el texto es largo.
Todos00Todos00
ESI500ESI500
ESI400ESI400
ESI300ESI300
ESI200ESI200
ESI100ESI100
Sin categorizar00Sin categorizar00
Clase CSS
Para qué sirve
Base 100×30, padding 0 12px, space-between, radius 8px, borde 2px (--etiqueta-triaje-borde), fondo --color-fondo-general
Etiqueta izquierda: 16px regular, ellipsis si falta espacio
Mismo borde naranjo ESI; reposo: sombra 0 4px 16px --color-advertencia-suave; activo: fondo naranjo 20% + sombra selección
width auto; min-width 100px; max-width 100%
Etiquetas ESI relleno (texto claro)
Variante compacta con fondo sólido y texto blanco (--color-blanco), distinta del filtro .etiqueta-triaje (100×30, borde 2px, fondo general). Tamaño grande: 40×20 px, border-radius: 5px, borde 1px en tono claro por nivel (--color-etiqueta-esi-relleno-*-borde), cuerpo 14px seminegrita. Tamaño pequeño: clase etiqueta-esi-relleno--sm — alto 16px, padding: 2px 4px 0, texto 10px seminegrita, line-height: 1 (centrado vertical con la caja 16px; excepción al mínimo 14px del DS en este badge; tipografía heredada de la app, no Inter). Niveles: etiqueta-esi-relleno--esi-1 … --esi-5.
Grande
ESI1ESI2ESI3ESI4ESI5
Pequeña
ESI1ESI2ESI3ESI4ESI5
Clase CSS
Para qué sirve
Base: flex 40×20, radius 5px, borde 1px (--esi-relleno-borde), fondo (--esi-relleno-fondo), texto --color-blanco, 14px seminegrita; por defecto nivel 1
Etiquetas riesgo mapa de cama (CAÍDAS / BRADEN / CUDYR)
Pastillas 20px de alto, border-radius: 5px, borde 1px, texto 14px seminegrita y --color-blanco. Combinar siempre la base etiqueta-mapa-cama-riesgo con un modificador --caidas, --braden o --cudyr. En Card box con paciente, el componente añade también las clases card-box-paciente-completa-etiqueta-riesgo* (Feedback → Contenedores). Tokens: --color-etiqueta-mapa-cama-caidas-fondo|borde, --color-etiqueta-mapa-cama-braden-* (alineados a ESI relleno nivel 1), --color-etiqueta-mapa-cama-cudyr-*. Tipografía: heredada de la app (no Inter).
CAÍDASBRADENCUDYR
Clase CSS
Para qué sirve
Base compartida (con modificador): inline-flex, alto 20px, radius 5px, borde 1px y fondo vía variables locales del modificador, texto blanco 14px seminegrita, line-height 1
Fondo #E8D810 (Amarillo-ESI), borde #FAF7CF; ancho fijo 60px; sin padding horizontal
Fondo #70BE44 (verde-ESI), borde #E2F2DA; ancho automático; padding horizontal 6px
Etiqueta removible
Chip con fondo azul claro e ícono de cerrar. Usar para mostrar filtros o selecciones activas que el usuario puede eliminar.
DefaultEtiquetaDeshabilitadaEtiqueta
Card resumen de paciente
Card compacta con nombre, etiqueta de habitación, datos clave en fila y chevron para expandir contenido adicional. Usar el componente React CardPacienteResumen (layout horizontal por defecto) para mantener la lógica de expansión.
Nombre Apellido ApellidoHAB103A
Edad26|Admisión/Cargo caja18135|PrevisiónFonasa
Variante con datos en columna
Mismo CardPacienteResumen con datos apilados: layout="vertical". El nombre Card resumen de paciente en la guía corresponde solo al bloque anterior (fila horizontal). Para el nombre en dos líneas, incluir \n en la cadena de la prop nombre.
Nombre Nombre
Apellido ApellidoHAB103A
Edad26Admisión/Cargo caja18135PrevisiónFonasa
Card escala de valoración (cabecera + contenedor)
Resumen de escalas o riesgos: barra con título e íconos, y cuerpo con filas. Estilos en styles/partials/10-contenedores.css. El desglose de clases (cabecera, contenedor, celdas) está en la tabla de clases bajo el demo.
Envoltorio.escala-valoracion-card engloba cabecera y cuerpo; sin gap entre hermanos, para que no se vea una franja entre la barra y el listado.
Cada fila (grid de 3 columnas). Plantilla min(100%, 9.5rem) · 1fr · auto: etiqueta con ancho fijo (token --escala-valoracion-etiqueta-ancho), texto de riesgo al inicio de la columna central (misma alineación entre filas), puntuación a la derecha. Ejemplo de acento: fila bajo riesgo / éxito con borde y fondo vía --color-exito.
Color por fila. Clases con prefijo escala-valoracion-fila--y sufijo exito, advertencia, error o riesgo-medio; tokens típicos --color-error y, en riesgo medio, --color-riesgo-medio-borde / --color-riesgo-medio-fondo. Listado copiable en la tabla de clases.
Escala de valoración
BRADEN
Bajo riesgo15
J.H Downtown
Riesgo alto9
E.T.E
Muy alto riesgo11
Cudyr
Riesgo medio11
Clase CSS
Para qué sirve
Envoltorio de la card — flex columna, gap 0, max 460px; envuelve cabecera + contenedor sin separación entre ambos
Barra superior — flex flex-start, align-items center; acciones margin-left auto; padding 6 vert. / 16 izq. / 20 der. (fila más baja que 10+40+10 con btn global); width min(100%,460px); bordes sup/L/R 2px --color-borde-suave; fondo --color-superficie; radio sup. --radius-md
Título — 16px medium, line-height 1.2, flex + align-items center, --color-texto-resaltado, font-feature-settings liga off
Zona de íconos — inline-flex, gap 6px; .btn-icono compacto 32×32, padding 4px, radio --radius-sm; hover sin borde/fondo (solo opacidad img/svg)
Cuerpo — flex columna, gap 8px, padding 16px, min-height 200px, fondo --color-fondo-general, bordes L/R/B 2px --color-borde-suave, radio inf. 8px
Fila — grid 3 cols min(100%, --escala-valoracion-etiqueta-ancho) | 1fr | auto; column-gap --escala-valoracion-fila-gap-tras-riesgo; misma X de inicio del riesgo entre filas
Columna izquierda — solo el nombre (.escala-valoracion-fila-etiqueta); ancho del grid; width 100% para ellipsis
Variante bajo riesgo / éxito — radio --radius-xs, borde 1px --color-exito, fondo --color-exito-suave
Variante riesgo alto / advertencia — misma estructura que --exito; radio --radius-xs, borde 1px --color-advertencia (#EA6D00), fondo --color-advertencia-suave
Variante muy alto riesgo / error — misma estructura; radio --radius-xs, borde 1px --color-error (#D92D20), fondo rgba(217,45,32,0.16) equiv. Figma Error-16
Variante riesgo medio — radio --radius-xs, borde 1px --color-riesgo-medio-borde (#D6E164), fondo --color-riesgo-medio-fondo (#F9FDD0)
Nombre de la escala — 14px medium, --color-texto-oscuro, ellipsis si supera la columna (--escala-valoracion-etiqueta-ancho en :root); gap 10px (ícono + texto)
Nivel de riesgo — columna central 1fr; 14px regular, --color-texto, alineado al inicio (text-align left) para alinear entre filas
Puntuación — tercera columna; 14px medium, --color-texto, text-align right
Etiqueta de Habitación
HAB103A
Ejemplos de uso:
•HAB 103A
•BOX 15
Tablas
Componentes de tabla modulares para visualización de datos estructurados
La tabla es CSS-first
Todo el estilo visual está en mkclinico-ui.css. Para replicarla solo se necesita HTML + las clases del DS - no hace falta ningún framework ni componente React. El único comportamiento que requiere JavaScript es el despliegue/colapso de filas hijas.
Componentes React disponibles
Para proyectos Next.js/React, el repositorio incluye envoltorios en app/components/tabla/: TablaContainer, TablaHeader, TablaRow, TablaRowChild y TablaActions. Generan la misma estructura HTML y clases que se muestran en esta sección.
Clase CSS
Para qué sirve
Envoltorio exterior - fondo teal claro, border-radius 20px, padding 12x16px y scroll horizontal; el padding evita que sombras/bordes de filas se recorten. Siempre obligatorio.
Fila de encabezado. Hereda el grid de .tabla. La primera celda va vacía (columna del chevron).
Fila de datos. Hereda el grid. Añadir .fila-activa para el estado expandido.
Celda individual (div o button). Una por cada columna definida en --tabla-cols.
En una tabla-row (o tabla-row-hijo / cabecera): una sola celda cruza todo el ancho del grid (--tabla-cols). Úsala para vacío, carga o error sin columnas vacías.
Filas hijas tras fila-activa - sin borde superior; padding vertical compacto.
Fila hija individual. Usa --tabla-cols-hijo (mismo grid sin columna del chevron).
Variante con switch
Columna 1
Columna 2
Columna 3
Ver
Editar
Estado
Eliminar
Título columna 1
Esto es un nombre usuario 2
00/00/0000
Título columna 1
Esto es un nombre usuario 2
00/00/0000
Título columna 1
Esto es un nombre usuario 2
00/00/0000
Título columna 1
Esto es un nombre usuario 2
00/00/0000
Haz clic en el chevron para desplegar/colapsar las filas hijas
Variante con badge
Columna 1
Columna 2
Columna 3
Ver
Estado
Editar
Eliminar
Título columna 1
Esto es un nombre usuario 2
00/00/0000
Inactivo
Título columna 1
Esto es un nombre usuario 2
00/00/0000
Activo
Título columna 1
Esto es un nombre usuario 2
00/00/0000
Inactivo
Título columna 1
Esto es un nombre usuario 2
00/00/0000
Activo
Haz clic en el chevron para desplegar/colapsar las filas hijas
Variante con menú de acciones (⋮)
Una sola columna de acciones al final: btn-opciones btn-opciones--sm con el ícono opciones-sm del catálogo.
Añade tabla--acciones-menu a .tabla. Grilla base: chevron, tres columnas de datos a 1fr y 88px para el menú. Ejemplo de pista:
40px 1fr 1fr 1fr 88px
Más columnas, HTML: define --tabla-cols y --tabla-cols-hijo en el mismo .tabla.
Más columnas, React: TablaContainer con variant="acciones-menu" y, si ajustas la grilla, cols y colsHijo.
Nombre
Espacio clínico al que pertenece
Tipo de unidad
Cobro estadía
Acciones
Esto es un título
Esto es un nombre usuario
Esto es un nombre
hola
Esto es un título
Esto es un nombre usuario
Esto es un nombre
hola
Esto es un título
Esto es un nombre usuario
Esto es un nombre
hola
Esto es un título
Esto es un nombre usuario
Esto es un nombre
hola
Esto es un título
Esto es un nombre usuario
Esto es un nombre
hola
Esto es un título
Esto es un nombre usuario
Esto es un nombre
hola
El menú contextual (editar, eliminar, etc.) lo implementa la aplicación; el disparador queda accesible con aria-haspopup="menu".
Variante con filas reordenables (asa de arrastre)
Cada tabla-row sigue la tarjeta de la maqueta. Con el modificador tabla--filas-ordenables aparece la columna de asa, el grid y la cabecera; el reorden lo resuelve JavaScript (p. ej. dnd-kit). Las medidas y el CSS puro están en el partial de estilos — aquí solo un mapa de lectura, sin repetir cada propiedad en recuadro.
Fila (tabla-row).56px de alto (3,5 rem), caja con borde, radio 8px; solo relleno derecho 24px y sin relleno vertical para que el asa ocupe todo el alto. Borde 1px; borde y fondo con --color-borde-suave y --color-fondo-general. Celdas de texto: relleno vertical 8px; celdas en columna, centrado y 10px de separación entre líneas.
Asa. Bloque tabla-dnd-asa-area a toda la altura y 29px de ancho, línea a la derecha, color de fondo con --color-superficie-boton. Contiene el botón tabla-asa-arrastre (ícono de arrastre en el set de guía).
Layout. Plantilla fija: 29px 1fr 1fr 1fr 88px — títulos y celdas a la izquierda. Cabecera: 16px medium, color vía --color-texto-oscuro (ligaduras desactivadas, interlínea normal). Columna Estado en 1fr con el badge al inicio; 12px de hueco entre Tipo criterio y Estado. En el tabla-header, el bloque tabla-dnd-asa-area vacío solo mantiene la cuadrícula: sin relleno de color ni bordes visibles.
Fila al reordenar. Aplica tabla-row--orden-seleccionada mientras dura el contexto de orden, no fila-activa (hijos).
Más abajo, al final de «Tablas / Variantes», la tabla de clases resume en una línea nombres como tabla--filas-ordenables y DnD.
Nombre de regla
Tipo criterio
Estado
Editar
Urgencias
Profesional, zona
Activo
Urgencias
Profesional, zona
Activo
Urgencias
Profesional, zona
Inactivo
Urgencias
Profesional, zona
Activo
Urgencias
Profesional, zona
Inactivo
Tabla solo texto (sin chevron ni acciones)
Para listados de solo lectura con varias columnas de texto (p. ej. historial de diagnósticos), usa la misma estructura tabla-container / tabla / tabla-header / tabla-row / tabla-cell. Define --tabla-cols con un ancho por cada celda (sin celda vacía inicial si no hay chevron). La clase tabla--solo-texto ajusta el hover para listados no clicables: cursor por defecto y sin subir el peso de la segunda columna (en la tabla estándar esa celda suele ser el título cuando existe chevron). En React: TablaContainer variant="solo-texto" + cols con la grilla deseada; el markup HTML sigue siendo la referencia si no usas TablaRow prefabricado.
Fecha
Diagnóstico
Tipo
Profesional
Especialidad
15/03/2026
Hipertensión arterial esencial
Principal
Dra. Ana Morales
Medicina interna
02/02/2026
Control postoperatorio
Seguimiento
Dr. Luis Paredes
Cirugía general
18/01/2026
Dermatitis de contacto
Principal
Dra. Carla Núñez
Dermatología
Clase CSS
Para qué sirve
Fila de datos. Hereda el grid de .tabla. Estado hover automático por CSS.
Estado expandido - borde teal en L invertida; borde inferior transparente encaja con .tabla-row-hijos (margin-top negativo cancela el gap del .tabla).
Tras fila-activa: solo bordes izq/der/abajo (sin border-top, evita línea que cruza el marco). Padding 6px; overflow visible.
Fila hija individual. Usa --tabla-cols-hijo (mismo grid sin la columna del chevron).
Una columna de acción final 88px con menú ⋮ (.btn-opciones--sm + ícono opciones-sm). Por defecto tres columnas de datos 1fr; añade más 1fr y actualiza --tabla-cols / --tabla-cols-hijo (o cols / colsHijo en TablaContainer).
Orden manual: grid 29px 1fr 1fr 1fr 88px; DnD + asa; cabecera y filas alineadas a la izquierda; Estado en 1fr; +12px entre Tipo criterio y Estado.
Solo columnas de datos (sin chevron/acciones): definir --tabla-cols con un valor por celda. Hover con cursor por defecto y sin refuerzo de peso en la 2.ª columna.
Panel de listados compactos: max-width 1020px, padding 10×12px, gap 12px, border 2px solid --color-borde-suave, border-radius 8px, fondo --color-fondo-general. Con tabla--compacta-codigo (variant compacta-codigo), tabla--compacta-linea (variant compacta-linea), tabla--diagnostico-checks (variant diagnostico-checks), tabla--diagnostico-lista (variant diagnostico-lista) o tabla--diagnostico-lista-examenes (variant diagnostico-lista-examenes).
Listado jerárquico: fondo --color-fondo-general; cuerpo 16px (--tamano-h4) regular --color-texto, font-feature-settings 'liga' 0; cabecera --tamano-texto-min semibold teal; filas ~28px min.; hovers y guía anidada ver bloques siguientes.
Mismo panel y tipografía que compacta-codigo, sin chevron: dos columnas de texto (minmax 0 1fr) + 40px acción. Hover fila --color-superficie + radio xs. Botón .tabla-accion-linea-boton en la última celda: ícono opcional al hover/foco (puntero fino).
Botón ícono compacto (32×28) en tabla--compacta-linea y tabla--diagnostico-lista; color primario; hover --color-superficie-boton; foco visible teal; en puntero fino puede ir opacity 0 hasta hover/fila.
Cabecera como listado jerárquico (títulos teal --peso-medio 500, --tamano-texto-min); dos columnas datos + GES/ENO/Quirúrgico centrados; grid minmax(0,1fr) minmax(0,1.5fr) + tres minmax(4.5rem,1fr); column-gap --tabla-diagnostico-col-gap (1rem); celdas min-width 0 para wrap; gap vertical 10px; inset 6px.
Misma cabecera/cuerpo/hover/resaltado que tabla--diagnostico-checks; grid cuatro columnas: Fecha | Diagnóstico | Especialidad | 40px acción (.tabla-accion-linea-boton). --tabla-cols por defecto minmax(0,6.5rem) minmax(0,1fr) minmax(0,1fr) 40px.
Misma cabecera/cuerpo/hover/resaltado que tabla--diagnostico-lista, sin columna de acción; grid cuatro columnas texto: Fecha | Tipos de exámenes-áreas | Nombre del profesional | Especialidad. --tabla-cols por defecto minmax(0,6.5rem) minmax(0,1fr) minmax(0,1fr) minmax(0,1fr).
Variante sin chevron para T. espera / ESI / Nombre paciente / Edad / Acción. Incluye etiqueta .etiqueta-esi-relleno (tamaño grande), patrón de nombre con avatar (.tabla-pacientes-categorizacion-nombre) y botón .btn-secundario.btn-xs en la última columna; mantiene hover de la tabla estándar y estado activo sin despliegue.
Lista de urgencias/triage: 11 columnas (ESI | Paciente | Edad | Sexo | H. Llegada | Box | Tiempos | Motivo | Diagnóstico | Profesional | Destino); grid 50px 1fr 56px 56px 80px 90px 120px 1fr 1fr 1fr 80px; filas auto-height para acomodar celda Tiempos de 4 líneas; min-width 56rem (scroll en viewports estrechos). CSS puro, sin variant en TablaContainer todavía.
Badge de estado base para tabla--agenda: inline-flex, 22px alto, padding 0 8px, border-radius 8px, borde 1px, fondo --color-fondo-general. Añadir modificador semántico.
Modificador semántico: borde --color-borde-suave (neutro). Igual estilo visual que los demás estados.
Modificador semántico: borde --color-borde-suave (neutro). Mismo aspecto visual; diferenciación solo por texto.
Modificador semántico: borde --color-borde-suave (neutro). Mismo aspecto visual; diferenciación solo por texto.
Modificador semántico: borde --color-borde-suave (neutro). Mismo aspecto visual; diferenciación solo por texto.
Botón-link para el estado 'No ha llegado': apariencia none, color --color-primario, text-decoration underline. Accionable (marcar llegada). Sin badge.
Variante para filas sin hijos: min-width min-content en .tabla y cabecera/fila para cubrir todo el grid; column-gap --tabla-fila-expandida-col-gap (0.625rem). Hover en filas sin .fila-activa: borde --color-borde y sombra como tabla estándar. .fila-activa: radio 8, borde 2px y sombra fija.
Estado de fila seleccionada para esta variante (sin fila hija ni desplegable).
Contenedor inline-flex del nombre + avatar (gap 12px, min-width 0).
Avatar circular 32×32 con borde suave y object-fit cover.
Texto del nombre con recorte por elipsis para evitar quiebres de fila.
SVG 16×16, un <path> (check en círculo); fill: var(--color-primario). Criterio negativo: .tabla-diagnostico-marca-guion.
Guión horizontal 10×2px, --color-primario, centrado en celda criterio (sustituto visual del check).
Modificador en tabla--diagnostico-checks, tabla--diagnostico-lista y tabla--diagnostico-lista-examenes: fondo --color-superficie-boton y radio xs (fila seleccionada / ejemplo).
Subfila sin chevron: primera celda vacía (40px); Código/Nombre/Grupo alineados al grid como el padre (--tabla-compacta-row-inset-izq en cabecera y filas).
Modificador de .tabla-row-hijos en tabla--compacta-codigo: grilla alineada al padre; interior .tabla-anidada-bajo-nombre con barra ::before (cápsula junto a nombres de examen).
Lista (ul) columna Nombre (3 / 4); padding-left calc(1.823px + 9px); ::before cápsula; li: mismo cuerpo que filas (16px, --color-texto, liga off); li hover --color-superficie-boton.
Bloque visual del asa (29px de ancho border-box; alto 100% de la fila; en ordenables solo borde derecho; fondo superficie-boton; radio 8px 0 0 8px).
Botón dentro del área DnD; grab/grabbing; foco visible teal; aria-label por fila.
Borde y sombra tipo hover persistente — foco o fila elegida antes de arrastrar. No usar para expandir hijos (eso es fila-activa).
Estructura HTML base (fila sin hijos)
Filas expandibles (con hijos)
Añadir fila-activa al tabla-row activa el estado expandido. El contenedor tabla-row-hijos debe colocarse inmediatamente después. Solo JavaScript necesita gestionar la clase y mostrar/ocultar el contenedor.
¿Cómo agregar o quitar columnas?
La tabla usa una variable CSS (--tabla-cols) que define cuántas columnas hay y qué tan anchas son. Para cambiar el número de columnas hay que hacer dos cosas al mismo tiempo: actualizar esa variable y agregar o quitar la celda correspondiente en el header y en cada fila.
Regla de oro: el número de valores en --tabla-cols debe ser exactamente igual al número de celdas (tabla-cell) en el encabezado y en cada fila. Si no coinciden, las columnas se desalinean.
Referencia de anchos por tipo de columna
40px- Chevron (siempre la primera, no tocar)
1fr- Columna de texto (se reparte el espacio)
88px- Ícono de acción (ver, editar, eliminar)
90px- Switch (toggle on/off)
128px- Badge de estado (ej. "Activo")
Pasos para agregar una columna nueva
1En el elemento .tabla, agrega el ancho de la nueva columna a --tabla-cols en la posición correcta.
2Agrega un <div class="tabla-cell"> en el tabla-header con el título de la columna.
3Agrega un <div class="tabla-cell"> en la misma posición en cada fila (tabla-row).
Ejemplo: agregar una 4ª columna de texto y un badge
Patrón aparte de la tabla estándar del DS: el cuerpo del listado va sobre --color-fondo-general (#FDFDFD) para que resalten el hover teal y la guía de exámenes. La fila desplegada no lleva barra lateral; solo tabla-anidada-bajo-nombre añade la barra cápsula (::before) junto a los nombres de examen. Incluye filas padre con chevron, subfilas con tabla-row--compacta-hija (sin chevron; el código en la misma columna que el padre) y detalle bajo Nombre con tabla-row-hijos--detalle-nombre + tabla-anidada-bajo-nombre. Panel: tabla-container--panel-inferior (border: 2px solid var(--color-borde-suave), border-radius: 8px). React: TablaContainer variant="compacta-codigo".
Código
Nombre
Grupo
LAB-204
Perfil lipídico
Laboratorio
LAB-204-A
Hemograma completo
Laboratorio
IMG-118
Radiografía de tórax
Imagenología
Listado compacto (dos columnas y acción)
Mismo marco y criterio visual que el listado jerárquico (código, nombre, grupo)tabla-container--panel-inferior + tipografía de cabecera y cuerpo, pero sin chevron ni filas anidadas: dos columnas de texto y una tercera de 40px para una acción con ícono (p. ej. imprimir). El hover de fila usa --color-superficie como en el listado compacto. En escritorio con puntero fino, el ícono puede mostrarse solo al pasar el ratón o al tener foco en la fila; en táctil permanece visible. React: TablaContainer variant="compacta-linea". Grid por defecto: minmax(0, 1fr) minmax(0, 1fr) 40px (--tabla-cols).
Receta
Tipo
N° 64538
Medicamento
N° 406521
Magistral
N° 123543
Medicamento
Diagnóstico con marcas (panel inferior)
Mismo marco que el listado jerárquico: tabla-container--panel-inferior + tabla--diagnostico-checks. La cabecera sigue el mismo criterio que el listado jerárquico (sin banda de color, solo línea inferior y títulos teal a peso medio 500): Código, Nombre del diagnóstico, GES, ENO, Quirúrgico (las tres últimas centradas). Entre columnas usa column-gap (--tabla-diagnostico-col-gap, 1rem) y las celdas de texto llevan min-width: 0 para que el nombre haga salto de línea y se reduzca el scroll horizontal. En el cuerpo, cada criterio lleva el check 16×16 (tabla-diagnostico-check-marca) o un guión teal (tabla-diagnostico-marca-guion). Fila de ejemplo resaltada: tabla-row--diagnostico-resaltada. React: TablaContainer variant="diagnostico-checks".
Código
Nombre del diagnóstico
GES
ENO
Quirúrgico
Código diagnóstico
Diagnóstico
Código diagnóstico
Diagnóstico
Código diagnóstico
Diagnóstico
Código diagnóstico
Diagnóstico
Código diagnóstico
Diagnóstico
Código diagnóstico
Diagnóstico
Código diagnóstico
Diagnóstico
Código diagnóstico
Diagnóstico
Diagnóstico — listado con acción (panel inferior)
Mismo marco y criterios tipográficos que Diagnóstico con marcas: tabla-container--panel-inferior + tabla--diagnostico-lista. Cuatro columnas: Fecha, Diagnóstico, Especialidad y una columna fija de acción (40px) con .tabla-accion-linea-boton (ícono imprimir del catálogo). Hover de fila: fondo --color-superficie y border-radius: var(--radius-xs), igual que la variante con marcas. React: TablaContainer variant="diagnostico-lista".
Fecha
Diagnóstico
Especialidad
00/00/0000
Diagnóstico
Especialidad
00/00/0000
Diagnóstico
Especialidad
00/00/0000
Diagnóstico
Especialidad
Listado: fecha, tipos de examen, profesional y especialidad (panel inferior)
Misma base que Diagnóstico — listado con acción (panel, cabecera teal, hover de fila), pero sin columna de acción ni botón de imprimir. Cuatro columnas de texto: Fecha, Tipos de exámenes-áreas, Nombre del profesional y Especialidad. Clases: tabla-container--panel-inferior + tabla--diagnostico-lista-examenes. React: TablaContainer variant="diagnostico-lista-examenes".
Fecha
Tipos de exámenes-áreas
Nombre del profesional
Especialidad
00/00/0000
Tipos de exámenes-áreas
Nombre del profesional
Especialidad
00/00/0000
Tipos de exámenes-áreas
Nombre del profesional
Especialidad
00/00/0000
Tipos de exámenes-áreas
Nombre del profesional
Especialidad
00/00/0000
Tipos de exámenes-áreas
Nombre del profesional
Especialidad
00/00/0000
Tipos de exámenes-áreas
Nombre del profesional
Especialidad
00/00/0000
Tipos de exámenes-áreas
Nombre del profesional
Especialidad
00/00/0000
Tipos de exámenes-áreas
Nombre del profesional
Especialidad
00/00/0000
Tipos de exámenes-áreas
Nombre del profesional
Especialidad
00/00/0000
Tipos de exámenes-áreas
Nombre del profesional
Especialidad
00/00/0000
Tipos de exámenes-áreas
Nombre del profesional
Especialidad
00/00/0000
Tipos de exámenes-áreas
Nombre del profesional
Especialidad
00/00/0000
Tipos de exámenes-áreas
Nombre del profesional
Especialidad
00/00/0000
Tipos de exámenes-áreas
Nombre del profesional
Especialidad
00/00/0000
Tipos de exámenes-áreas
Nombre del profesional
Especialidad
00/00/0000
Tipos de exámenes-áreas
Nombre del profesional
Especialidad
Pacientes con acción de categorización
Variante orientada a listado clínico rápido con cinco columnas: T. espera, ESI, Nombre paciente (avatar + texto), Edad y Acción. Usa tabla--pacientes-categorizacion y, en la columna ESI, etiqueta-esi-relleno etiqueta-esi-relleno--esi-1 en tamaño grande cuando exista categorización. En la última columna, botón btn-secundario btn-xs con texto Asignar cuando la fila tiene ESI, o Categorizar cuando no tiene ESI. Mantiene estado :hover y agrega .tabla-row--pacientes-categorizacion-activa para selección visual, sin filas hijas ni desplegable.
T. espera
ESI
Nombre paciente
Edad
Acción
Hora
ESI1
Nombre paciente
Edad
Hora
ESI1
Nombre paciente
Edad
Hora
Nombre paciente
Edad
Hora
ESI1
Nombre paciente
Edad
Hora
Nombre paciente
Edad
Hora
ESI1
Nombre paciente
Edad
Fila expandida sin hijos
Variante para escenarios donde no se despliegan tabla-row-hijos. La tabla usa tabla--fila-expandida y, al marcar la fila como fila-activa, la tarjeta queda completa (radio 8px, borde 2px y sombra), sin el corte inferior de la tabla expandible clásica. Las demás filas muestran hover con borde y sombra como una tabla-row estándar. El ejemplo incluye una fila con flecha + ícono bebé rosa (fila activa), una con flecha + bebé celeste y una fila simple.
RUT/Pasaporte
Admisión
Nombre paciente
Fecha de ingreso
Pieza/cama
Diagnóstico
Previsión
Médico
Alta
10.456.970-8
10021004
Gonzalez Morales Gabriela PazGonzalez González Bruno Andrés
20/10/2026 12:0021/10/2026 5:30
202/A
PARTO UNICO ESPONTANEO, SIN OTRA ESPECIFICACION
FonasaFonasa
María Antonieta RubilarMaría Antonieta Rubilar
18.234.567-1
38403841
Silva Ramírez MartinaSilva Peña Tomás
02/11/2026 9:1503/11/2026 8:00
305/B
CEFALEA, NO ESPECIFICADA
FonasaFonasa
Patricio Lagos MendozaPatricio Lagos Mendoza
10.456.970-8
1004
Gonzalez González Bruno Andrés
21/10/2026 5:30
202/A
CATARATA TRAUMÁTICA
Fonasa
María Antonieta Rubilar
Agenda de consultas
Variante de 14 columnas para la vista de agenda diaria: Modalidad, H. Llegada, H. Reserva, T. Espera, RUT/DNI, Paciente, Edad, Sexo, Previsión, Sobrecupo, Espontáneo, Área médica, Obs. y Estado. Usa tabla--agenda; sin chevron. La fila seleccionada lleva tabla-row--agenda-activa. Los estados se muestran con badge-agenda-estado + modificador (--confirmado / --atendido / --ausente / --en-espera), excepto “No ha llegado” que usa el botón-link tabla-agenda-no-llego.
Modalidad
H. Llegada
H. Reserva
T. Espera
RUT/DNI
Paciente
Edad
Sexo
Previsión
Sobrecupo
Espontáneo
Área médica
Obs.
Estado
00:00
00:00
00 min.
11.111.111-1
Gabriela Paz González
23a 3m
F
FONASA
NO
NO
Consulta
CL20MCBCCP
Confirmado
00:00
00:00
00 min.
11.111.111-1
Gabriela Paz González
23a 3m
F
FONASA
NO
NO
Consulta
CL20MCBCCP
Atendido
00:00
00:00
00 min.
11.111.111-1
Gabriela Paz González
23a 3m
F
FONASA
NO
NO
Consulta
CL20MCBCCP
Ausente
00:00
00:00
00 min.
11.111.111-1
Gabriela Paz González
23a 3m
F
FONASA
NO
NO
Consulta
CL20MCBCCP
En espera
00:00
00:00
00 min.
11.111.111-1
Gabriela Paz González
23a 3m
F
FONASA
NO
NO
Consulta
CL20MCBCCP
00:00
00:00
00 min.
11.111.111-1
Gabriela Paz González
23a 3m
F
FONASA
NO
NO
Consulta
CL20MCBCCP
Confirmado
00:00
00:00
00 min.
11.111.111-1
Gabriela Paz González
23a 3m
F
FONASA
NO
NO
Consulta
CL20MCBCCP
00:00
00:00
00 min.
11.111.111-1
Gabriela Paz González
23a 3m
F
FONASA
NO
NO
Consulta
CL20MCBCCP
Atendido
00:00
00:00
00 min.
11.111.111-1
Gabriela Paz González
23a 3m
F
FONASA
NO
NO
Consulta
CL20MCBCCP
En espera
Lista de urgencias / triage
Variante de 11 columnas para listados clínicos de urgencias: ESI, Paciente, Edad, Sexo, H. Llegada, Box, Tiempos, Motivo, Diagnóstico, Profesional y Destino. Usa tabla--urgencias; las filas tienen altura automática para acomodar la celda Tiempos con cuatro líneas apiladas. El badge ESI usa etiqueta-esi-relleno etiqueta-esi-relleno--esi-{1..5}. La fila seleccionada lleva tabla-row--urgencias-activa (borde teal 2px perimetral).
ESI
Paciente
Edad
Sexo
H. Llegada
Box
Tiempos
Motivo
Diagnóstico
Profesional
Destino
ESI3
Nombre paciente
Edad
M
00:00
Espera:00:00Box:00:00Tratamiento:00:00Total:00:00
Motivo de consulta
Diagnóstico
Nombre profesional
Destino
ESI4
Nombre paciente
Edad
F
00:00
N° Box
Espera:00:00Box:00:00Tratamiento:00:00Total:00:00
Motivo de consulta
Diagnóstico
Nombre profesional
Destino
ESI1
Nombre paciente
Edad
M
00:00
Espera:00:00Box:00:00Tratamiento:00:00Total:00:00
Motivo de consulta
Diagnóstico
Nombre profesional
Destino
ESI2
Nombre paciente
Edad
F
00:00
N° Box
Espera:00:00Box:00:00Tratamiento:00:00Total:00:00
Motivo de consulta
Diagnóstico
Nombre profesional
Destino
ESI5
Nombre paciente
Edad
M
00:00
N° Box
Espera:00:00Box:00:00Tratamiento:00:00Total:00:00
Motivo de consulta
Diagnóstico
Nombre profesional
Destino
ESI3
Nombre paciente
Edad
F
00:00
Espera:00:00Box:00:00Tratamiento:00:00Total:00:00
Motivo de consulta
Diagnóstico
Nombre profesional
Destino
Estado vacío
Se usa cuando la tabla no tiene filas que mostrar. Reemplaza las filas dentro de tabla-container.
Columna 1
Columna 2
Columna 3
Ver
Editar
Estado
Eliminar
No hay datos para mostrar
Vacío, carga o error en una fila (cabecera visible)
Si mantienes tabla-header y muestras un solo mensaje en una tabla-row, usa unatabla-cell con la clase tabla-cell--span-todas (equiv. a grid-column: 1 / -1 en el grid del DS). Así el texto ocupa todo el ancho de --tabla-cols y no quedan columnas vacías. Las utilidades col-span-full de Tailwind no aplican a este grid si no comparte el mismo contexto. Con tabla--filas-ordenables, el DS permite que esa fila crezca en altura si el mensaje es más alto que 56px.
Nombre
Tipo
Fecha
Acciones
Cargando datos…
Lista de Datos con Columnas
Componente de lista con filas de 30px y múltiples columnas de datos. Incluye headers posicionados en la parte superior.
Columna1
Columna2
Columna3
Texto largo columna 1
Texto
Texto Col3
Texto largo columna 1
Texto
Texto Col3
Texto largo columna 1
Texto
Texto Col3
Texto largo columna 1
Texto
Texto Col3
Clase CSS
Para qué sirve
Contenedor principal — 169px alto; headers 18.34% y filas 81.66%
Fila de encabezados posicionados en la parte superior
Cada celda de encabezado — 16px, font-weight 500, #565656
Contenedor de las filas de datos
Fila de datos — 30px altura, borde #639297, padding 8px, gap 20px
Base para celdas de columna (combinar con lista-datos-col-1/2/3)
Columna 1 — ancho fijo 138px; texto 14px #b2b2b2
Columna 2 — ancho fijo 40px
Columna 3 — ancho fijo 64px
Ícono de acción (ej. eliminar) — 10×11px, color #D92D20
Contenedor de 169px con headers (18.34%) y filas (81.66%). Cada fila tiene 30px de altura con borde #639297, padding 8px y gap 20px. Columnas con anchos fijos: col-1 (138px), col-2 (40px), col-3 (64px). El icono de eliminar tiene 10px × 11px en color rojo #D92D20. Los textos son de 14px en #b2b2b2 y los headers de 16px con font-weight 500 en #565656.
Fila de listado (texto + acción)
Fila compacta (alto mínimo ~38px, padding vertical 9px) con dos textos (inicio y centro) y zona opcional para ícono o botón a la derecha. Referencia de ancho 718px; en pantallas estrechas usa width: 100% con max-width: 44.875rem.
Min Regular 14Min Regular 14
Min Regular 14Min Regular 14
Fila anterior: clase listado-fila--activa (borde 2px, mismo criterio que :hover / :focus-within).
Foco, scroll y portabilidad: el componente React enfoca el primer nodo al montar. Para que un contenedor con scroll (por ejemplo un main con overflow-y-auto) no desplace la vista al cargar la página, el código usa focus({ preventScroll: true }) en el primer foco y scrollIntoView({ block: 'nearest' }) en los siguientes (navegación con teclado). Si copias el árbol a otra aplicación, conviene mantener ese comportamiento; el detalle está documentado en el JSDoc de app/components/Tree.tsx.
Clase CSS
Para qué sirve
Contenedor principal del árbol; layout en columna con gap entre nodos.
Elemento base de cada nodo; estructura, foco y hover del ítem.
Variante visual para nodos raíz (estilo tipo pill del DS).
Fila interna del nodo con texto, icono/chevron y acciones.
Contenedor de descendientes con guía vertical e indentación.
Botón para crear nodo raíz en la cabecera del árbol.
Paginación
Componente para navegar entre múltiples páginas de contenido
Playground Interactivo
Página actual: 1 de 10
Ejemplo: 3 páginas
Props
paginaActual→ Página actual (1-indexed)
totalPaginas→ Total de páginas disponibles
onCambioPagina→ Callback cuando se selecciona una página
maxBotones→ Número máximo de botones a mostrar (default: 5)
Retroalimentación (Feedback)
Alertas
Componentes de alerta para mostrar mensajes de error, advertencia, éxito e información
Alerta de Error
Alerta de error
Ejemplos de mensajes:
•Los datos ingresados ya existen
•Las contraseñas no coinciden
Alerta de Advertencia
Alerta de advertencia
Ejemplos de mensajes:
•¡Faltan datos!
Alerta de Éxito
Alerta de éxito
Ejemplos de mensajes:
•Actualizado
•Guardado
•Enlace de verificación enviado a tu correo
•Archivo cargado exitosamente
Sombras de Alerta
Estilos de sombra para diferentes tipos de alertas
Sombra Error
Sombra Advertencia
Sombra Éxito
Sombra Info
Sombras de Contenedores
Sombras para paneles, menús y contenedores del sistema
Sombra Menú Activo
Sombra Fondo Tarjetas
Sombra Contenedor
Sombra Modal
Contenedores
Paneles y cards del sistema
Panel Principal
Panel Principal
Contenedor principal con borde y sombra
Uso dentro del layout:panel-principal no define altura ni espaciado exterior. Siempre debe ir envuelto en area-principal, que aplica el espaciado responsivo del sistema (16px → 24px → 40px).
Contenedor de la vista previa
Contenedor con título teal y área de contenido blanca con sombra. Uso típico: preview de plantillas o formularios.
Esto es un titulo
Clase CSS
Para qué sirve
Contenedor principal con título teal y área de contenido
Barra de título en teal con texto centrado
Área blanca con sombra para mostrar la preview
Marco vertical (393×870)
Marco vertical con referencia Figma 393×870 — maquetas tipo panel o dispositivo. Bordes, padding, tipografía, modificadores: tabla de clases bajo el ejemplo; aquí solo lo que condiciona el uso.
Variables--contenedor-marco-vertical-ancho / --alto en :root (rem), redefinibles en el mismo nodo.
Scroll — no en el trazo del marco; en hijos (p. ej. nav-herramientas-scroll) o, si hace falta, en la página.
Mismo patrón en constructor 2 columnas (clases demo-formulario-constructor-*): /demo-nuevo-formulario-herramientas (solo LayoutPantalla + contenido).
Contenido del marco.
Clase CSS
Para qué sirve
Ref. Figma 393×870 en rem; borde 1px --color-borde-suave; fondo --color-superficie; radius --radius-xl; padding 24px arriba y lados, 45px abajo; texto 20px semibold teal, liga desactivada; alto al contenido, sin scroll en el teal; ajusta con --contenedor-marco-vertical-ancho / --alto
Alto fijo (ref. 870px) con --contenedor-marco-vertical-alto; combina con --ancho en el elemento si cambias la proporción
Declara altura al contenido (mismo criterio que el default; útil al apilar herramientas)
Contenedor con cabecera y cuerpo
Bloque cabecera + cuerpo para una herramienta en lienzo (título arriba, contenido abajo). Un solo borde en la raíz; cabecera y cuerpo solo cambian fondo. Nombres de clase, medidas y variantes: tabla de clases bajo las vistas previas.
Tamaño — ancho al contenedor padre; alto según contenido o, si el layout es una columna con altura fija, flex: 1 en el cuerpo.
Estados — --activo (DnD, asa, editar/eliminar, indicadores en vértices; los puntos llevan pointer-events: none por defecto). --warning: sin editar en el cuerpo; con --activo el marco sigue en advertencia y cambian los asideros (detalle en tabla). Cuerpo vacío con --vacio; quítalo al tener datos reales.
Cabecera — dos btn-icono o menú ⋮; no mezclar con asa DnD salvo que producto lo defina (ver tabla).
Solo guía — --referencia-maqueta fija el tamaño del demo; en la app no aplica.
Por defecto (reposo):
Nombre herramienta
Placeholder
Variante warning (con --activo para eliminar y asa DnD; sin editar):
Ancla derecha para un btn-opciones--sm (3+ acciones vía menú contextual)
Título 16px medium, --color-primario-oscuro
Área de contenido (position relative; sin borde; flex 1 1 auto); radio inferior interior alineado al marco
Cuerpo vacío: fila placeholder + editar + eliminar salvo en --warning (quitar --vacio al escribir)
Texto tipo placeholder (14px regular --color-placeholder)
Label editar 20×20 (control-input-oculto); visible solo con --activo y sin --warning en la raíz
Eliminar circular 32px (Estados); hover borde --color-borde; esq. inf. der.; solo con --activo
En la raíz: borde exterior 3px + 4 círculos en vértices + asa DnD vía .contenedor-cabecera-cuerpo-asa-arrastre; muestra editar y eliminar
Envoltorio del ícono arrastrar (10×16); solo visible con --activo; cursor grab
Opcional: max-width 483px; min-height 312px solo en el cuerpo
Copia el esqueleto (raíz, cabecera, título, cuerpo). Modificadores y piezas: tabla de clases de arriba.
Contenedor lienzo de plantillas
Marco ancho fluido para vistas de plantillas. Criterios clave; el desglose por clase (tokens y medidas) está en la tabla de clases bajo el ejemplo.
Marco: contenedor-lienzo-plantillas
Altura mínima clamp(14rem, 42vh, 30rem) (se adapta al viewport frente a una Figma fija).
Borde 2pxvar(--color-borde-suave), fondo #F5FEFF (relleno suave del DS), radio var(--tamano-h4) (1rem).
1rem (16px) de aire entre el trazo del marco y el panel blanco interior.
Panel: contenedor-lienzo-plantillas-contenido
Ancho 100% dentro del marco; min-height clamp(12rem, 36vh, 801px).
Borde 1pxvar(--color-borde-suave), fondo var(--color-fondo-general), sombra con var(--transparencia-foto) (doble, ver tabla).
Demo a pantalla completa
/demo-contenedor-plantillas — LayoutPantalla con omitirPanelPrincipal (sin panel-principal), cabecera con Card resumen de paciente (CardPacienteResumen), cuerpo con DemoFormularioMaquetaCuerpo y modoBarra="oculta".
Contenido de ejemplo dentro del panel (crece en altura si lo necesitas).
Clase CSS
Para qué sirve
Lienzo fluido: width 100%, min-width 0, min-height clamp(14rem, 42vh, 30rem), padding 1rem entre marco y panel blanco, border-radius --tamano-h4, border 2px --color-borde-suave, fondo #F5FEFF
Panel interior: width 100%, max-width 100%, min-height clamp(12rem, 36vh, 801px), border-radius --radius-xl, border 1px --color-borde-suave, fondo --color-fondo-general, box-shadow 4px/−4px 12px --transparencia-foto (doble); fluido dentro del padding del marco teal
Vista previa de herramienta (cuestionario)
Patrón de secciones, preguntas y opciones con radio (y columna opcional Observación) para mostrar dentro de contenedor-vista-previa-contenido. No sustituye al contenedor shell: puedes seguir usando el marco vacío para otras previews.
Vista previa de la herramienta
Sección 1
Pregunta 1
Observación:
Pregunta 2
Observación:
Pregunta 3
Sección 2
Pregunta 1
Pregunta 2
Observación:
Clase CSS
Para qué sirve
Raíz del patrón dentro del área blanca — padding 24px (1.5rem); flex columna; overflow y radio --radius-md
Envuelve todas las .seccion (flex columna); sin bordes propios — L/R/B del bloque los pintan título y cuerpo + ::before entre secciones
Agrupa una sección; :not(:first-of-type)::before — franja 2px con border-left/right 1px --color-borde y fondo --color-fondo-general (aire tras el cuerpo anterior, trazo lateral continuo)
Cabecera — border 1px solid --color-borde (Stroke #639297); fondo --color-primario; 1.ª sección radio sup. 8px; 2.ª+ sin radio
Contenedor de preguntas — border-radius 0 0 4px (--radius-xs); border-left/right/bottom 1px --color-borde; sin border-top; :not(:last-of-type) → border-radius 0; overflow hidden
Cabecera de pregunta — fondo superficie; border-top 1px --color-borde-suave; margin-bottom 2px antes de .opciones; separación con la pregunta anterior: margin-bottom 2px de la última .fila de .opciones; texto --color-texto-resaltado, 14px, peso 500, line-height normal
Lista de filas — cada .fila lleva margin-bottom 2px tras su border-bottom (aire antes del siguiente bloque)
Fila 24px (content-box) + border-bottom 1px Stroke-inputs + margin-bottom 2px (no pega con la fila o sección de abajo)
Modificador: opción + observación; separador vertical en observación (::before 24px alto, border-left 0.6px --color-borde). En columna apilada, border-bottom suave en main
Celda texto + control — height 24px, padding 0×16px, line-height 1; `RadioButton` / `Checkbox` en `sm`; el borde inferior de la fila va a los 24px + margin 2px debajo
Vista previa de herramienta (cuestionario con checkbox)
Misma estructura y clases CSS que la variante con radio: cada pregunta agrupa las opciones con CheckboxGroup (role="group" + aria-label) y Checkbox en size="sm". La tipografía de la etiqueta sigue aplicando .vista-previa-cuestionario .control-label span.text-sm.
Vista previa de la herramienta
Sección 1
Pregunta 1
Observación:
Pregunta 2
Observación:
Pregunta 3
Sección 2
Pregunta 1
Pregunta 2
Observación:
Clase CSS
Para qué sirve
Exportado desde Checkbox.tsx — envoltorio con role="group" y aria-label (análogo a RadioGroup + radiogroup)
Mismas clases vista-previa-cuestionario* que la demo con radio — marco, sección, cuerpo, filas, observación
Marco de configuración
Contenedor con borde punteado y título externo. Mismo aspecto que la referencia 1035×691px en pantallas amplias (max-width: 1035px); si el ancho disponible es menor, el marco se encoge al 100% del contenedor manteniendo la proporción del viewBox (borde teal, stroke-dasharray: 10 10, rx: 7.5).
Etiqueta de texto externo sobre el borde del marco
SVG viewBox 0 0 1035 691, width 100% height auto — mismo trazo que antes, escala en móvil
Panel lateral de datos disponibles
Contenedor lateral fijo (270px) para paneles de selección o configuración de columnas. Borde teal suave de 2px, sombra activa con componente inset teal, radio var(--radius-xl) (12px) y altura mínima de 610px que crece con el contenido.
Card compacta para una herramienta: bloque de contenido (título + descripción) y CTA al pie. La estructura HTML está en el ejemplo y en Ver código; el chip copia solo la clase raíz.
Súper herramienta
Combina múltiples campos y módulos complejos en una sola pieza funcional.
Card de herramienta (lg — altura mínima ~196px)
Variante alta (card-herramienta-lg, min-height 196px). Opcional card-herramienta--plana para borde sin sombra en hover. Subclases de cabecera, menú ⋮ y textarea: ejemplo, Ver código y chip agrupado debajo.
Cabecera: título + menú btn-opciones--sm e ícono del catálogo (opciones-sm).
Cuerpo: textarea con input-campo + card-herramienta-textarea.
Cuadro de texto
Card de herramienta editable
Igual criterio que la card lg más card-herramienta-editable: la descripción queda dentro de la cabecera, bajo el título. Misma cabecera con menú ⋮. Opcional card-herramienta--plana. La clase card-herramienta-editable-acciones permanece en el DS para un patrón alternativo (acciones en fila) si se documenta aparte.
Titulo de la herramienta
Descripción de la herramienta que le asignó el usuario
Selección múltiple: card-herramienta + card-herramienta-lg + card-herramienta-checkbox (mismo contenedor de opciones que en radio).
Selección múltiple
Selecciona una o más opciones
Card de herramienta (desplegable)
Listado en panel con DropdownListadoPanel (no el Dropdown compacto de formularios). Stack: card-herramienta + lg + card-herramienta-dropdown; el panel queda en el flujo de la card.
Desplegable
Opción 1
Opción 2
Card de persona
Tarjeta persona (avatar, nombre, estado). La composición está en el ejemplo y en Ver código; el chip trae la clase raíz.
NA
Nombre Apellido Apellido
Activo
Card box paciente (vacío)
Box o habitación sin paciente (mapa de cama).
Componente CardBoxPacienteVacio. Estilos en styles/partials/10-contenedores.css; props y HTML de ejemplo en Ver código.
Ubicación — en la guía: Feedback → Contenedores → Cards, junto a la card de persona.
Caja — ref. Figma 420×231; borde --color-borde; fondo --color-fondo-general; título 18px semibold.
Por defecto — CTA .card-box-paciente-vacio-accion centrado en el cuerpo (borde discontinuo 2px, mismo criterio que botón punteado); marca PNG cruz-medica-agua-card-box en .card-box-paciente-vacio-marca; cuerpo con isolation: isolate.
Justificación o alerta — variante="justificacion-alerta", ícono justificacion-alerta-mapa-cama vía iconoDataUrl, prop mensajeJustificacion; sin marca de agua.
Bloqueado — variante="bloqueado", bloqueado-mapa-cama + mensajeBloqueado; clases .card-box-paciente-bloqueado-*; sin CTA ni marca.
Texto — mensajeJustificacion y mensajeBloqueado breves; el CSS limita título y mensajes a dos líneas con elipsis; el CTA a una línea.
Activo — prop activo o clase card-box-paciente-vacio--activo: borde 2px y sombra doble con --transparencia-foto (box-shadow, no filter).
Por defecto
Nombre box
Justificación o alerta
Nombre box
Justificación o alerta
Bloqueado
Nombre box
Bloqueado
Activo
Nombre box
Card box paciente (con datos)
Box con paciente asignado (referencia mapa de cama).
Misma altura que la card box vacía. Componente CardBoxPacienteCompleta; reglas en 10-contenedores.css y detalle en Ver código / demos de esta sección.
Cáscara — raíz sin padding; fondo --color-blanco (la vacía usa --color-fondo-general); cabecera, separador y cuerpo con márgenes ref. 20px.
Marca — .card-box-paciente-completa-marca; PNG cruz por defecto; marcaFondocardiologia / traumatologia / ninguna.
Contenido típico — triaje ESI (Estados → ESI relleno), virus-radiacion-mapa-cama, listado, pie con métricas + rejilla 2×2; íconos y cantidad en Estados → Íconos tarjeta mapa cama; sustitución vía celdasIconos / onAccionIcono.
Bloqueado — prop bloqueado: cabecera solo título; cuerpo CardBoxPacienteBloqueadoContenido + mensajeBloqueado (texto breve, mismo recorte CSS que la vacía); sin activo ni error en la raíz.
Estados — modificadores --activo / --error en la raíz.
Por defecto
Box 12
ESI1
P. García
58 años
Consulta
Dr. Ruiz
Tot.:0 m
Trat.:0
Box:0
Med.:0
2
1
Cardiología (marca de agua)
Box 12
ESI1
P. García
58 años
Consulta
Dr. Ruiz
Tot.:0 m
Trat.:0
Box:0
Med.:0
2
1
Traumatología (marca de agua)
Box 12
ESI1
P. García
58 años
Consulta
Dr. Ruiz
Tot.:0 m
Trat.:0
Box:0
Med.:0
2
1
Con imagen (por defecto)
Box 12
ESI1
P. García
58 años
Consulta
Dr. Ruiz
Tot.:0 m
Trat.:0
Box:0
Med.:0
2
1
Cardiología con imagen (por defecto)
Box 12
ESI1
P. García
58 años
Consulta
Dr. Ruiz
Tot.:0 m
Trat.:0
Box:0
Med.:0
2
1
Traumatología con imagen (por defecto)
Box 12
ESI1
P. García
58 años
Consulta
Dr. Ruiz
Tot.:0 m
Trat.:0
Box:0
Med.:0
2
1
Activo
Box 12
ESI1
P. García
58 años
Consulta
Dr. Ruiz
Tot.:0 m
Trat.:0
Box:0
Med.:0
2
1
Error (borde rojo)
Box 12
ESI1
P. García
58 años
Consulta
Dr. Ruiz
Tot.:0 m
Trat.:0
Box:0
Med.:0
2
1
Bloqueado
Box 12
Bloqueado
Etiquetas de riesgo y sin marca de agua
Marca — marcaFondo="ninguna" (sin PNG de fondo).
Cabecera — etiquetasRiesgoCabecera + clases etiqueta-mapa-cama-riesgo / card-box-paciente-completa-etiqueta-riesgo; catálogo en Estados → Etiquetas riesgo mapa de cama.
Métricas — tercera fila opcional eva / sato2 en Ver código.
Box 12
CAÍDASBRADENCUDYR
P. García
58 años
Consulta
Dr. Ruiz
Tot.:0 m
Trat.:0
EVA:4
Box:0
Med.:0
SpO₂:95%
2
1
Ícono bebé / triaje junto al nombre
Prop — iconoAgregarBebeTriaje: "niña" ( agregar-triaje-esi-rosa) o "niño" (agregar-triaje-esi).
Layout — ícono a la derecha del nombre en .card-box-paciente-completa-nombre-fila; mismo bloque de etiquetas que el demo anterior.
Box 12
CAÍDASBRADENCUDYR
P. García
58 años
Consulta
Dr. Ruiz
Tot.:0 m
Trat.:0
EVA:4
Box:0
Med.:0
SpO₂:95%
2
1
Divisor
Líneas divisoras para separar contenido
Utilidades
Clases auxiliares para funcionalidades comunes
Utilidades de scroll: se aplican al mismo nodo que recorta con overflow-y: auto u overflow-x: auto (y, si aplica, un tope de alto o ancho). El DS solo aporta el aspecto de la barra o su ocultación; el layout del contenedor lo resuelves aparte.
Mismo nodo — clases y overflow en un solo elemento, no en un contenedor “vacío” sin scroll.
Qué deja el DS — grosor, colores y reglas de motor (WebKit, Firefox) que figuran en Ver código o en componentes.css.
Scrollbar fino
Ajusta un carril y un pulgar finos (~4px) al DS; en Firefox, equivalente con scrollbar-width: thin y color del pulgar. Misma línea que otras piezas con scroll (p. ej. .nav-herramientas-scroll en la paleta). Detalle (hex, hover): CSS del token o Ver código.
Dónde — la clase va en el contenedor que hace scroll.
Chip — el nombre de clase; el cuerpo del esqueleto (clases añadidas a overflow) en Ver código.
Contenido con scroll personalizado
Línea 2
Línea 3
Línea 4
Línea 5
Línea 6
Línea 7
Línea 8
Ocultar scrollbar
Oculta el trazo de la barra en WebKit, en Edge antiguo y con scrollbar-width: none en Firefox. El desplazamiento con rueda, trackpad o teclado sigue activo.
Combinación — en el mismo elemento:no-scrollbar y overflow-y: auto (o overflow-x).
Chip — clase; patrón completo en Ver código.
Contenido con scroll oculto
Línea 2
Línea 3
Línea 4
Línea 5
Línea 6
Línea 7
Navegación
Navbar Vertical
Menú de navegación lateral con estado compacto y extendido al hacer hover
Demo Interactiva
Pasa el mouse sobre el navbar para ver la expansión. Click en items con submenú para expandir/colapsar.
Características:
Estado compacto (80px) - Solo iconos
Estado extendido (300px) - Texto y submenús
Expansión al hacer hover
Submenús colapsables
Estados activos visuales
Transiciones suaves CSS
Uso Básico
Props
Prop
Tipo
Descripción
items
NavItem[]
Array de items del menú
activeItemId
string?
ID del item activo
activeSubItemId
string?
ID del subitem activo
onItemClick
(itemId: string) => void
Callback al hacer click en item
onSubItemClick
(itemId, subItemId) => void
Callback al hacer click en subitem
Iconos Incluidos
IconoInicio
IconoUsuarios
IconoConfiguracion
IconoMaletin
Clases CSS
Clase CSS
Para qué sirve
Contenedor del menú lateral (flex column)
Ítem de navegación — incluye ícono y texto
Estado activo — fondo teal claro, borde izquierdo primario
Contenedor del ícono SVG del ítem
Texto del ítem — visible en estado extendido
Header de Navegación
Barra superior con búsqueda y menú de usuario
Patrón de cabeza de aplicación: búsqueda a la izquierda y bloque de perfil a la derecha, con desplegable anclado a la raíz. Estructura de clases, medidas y anclaje del panel: tabla y Ver código siguen siendo la referencia técnica.
Raíz — header-navegacion aporta el contexto de posicionamiento del menú (el panel se alinea bajo el bloque; mirar reglas de capa y offset en componentes.css y la tabla de clases).
Activo — aplica activo al contenedor de usuario y, según el montaje, al desplegable para abrir o cerrar; en producción, sustituye el script del ejemplo por tu estado o router.
Responsivo — el ancho fijo de referencia del buscador y márgenes en pantallas estrechas están en el CSS del componente; ajusta el contenedor, no repliques cifras aquí.
Tokens — abajo, una fila por variable con su uso concreto en este bloque; el set global del DS figura en Fundamentos.
Vista previa
Cerrar sesión
Esto es otra opción
LROSSIG
Clases CSS
Clase CSS
Para qué sirve
Contenedor (altura 4.375rem, position relative): contexto para anclar el desplegable del usuario.
Caja de búsqueda y estados de foco.
Entrada de texto del buscador.
Lupa 1rem × 1rem.
Bloque perfil: añade .activo con el menú abierto; el panel se ancla a la raíz .header-navegacion.
Envuelve avatar y nodo del desplegable (DOM recomendado).
Superficie circular 2.5rem; estados inactivo / activo (ver guía e HTML).
Contenedor del nombre o alias.
Una línea; elipsis según ancho. Color coordinado con estado .activo.
Panel del menú (clase .activo al mostrar; position con respecto a .header-navegacion).
Fila o celda con hover y foco.
Código (HTML)
Variables CSS en este patrón
Una fila por token. Si el mismo color actúa en capas distintas (p. ej. fondo de barra y de ítem), se resume en una sola descripción; el detalle por regla vive en el partial del componente.
Variable
Uso en el header
Fondo de la barra, caja de búsqueda, panel del desplegable e ítems en estado de reposo (según reglas en el CSS del bloque).
Línea bajo el header, fondo en hover (por ejemplo en ítems del menú).
Borde del buscador en estado normal.
Borde del panel desplegable del usuario.
Nombre y acentos con el menú cerrado; íconos y trazos en estado inactivo según la pieza.
Nombre e íconos con el menú abierto; texto de ítems al hover o foco.
Texto de ítems e íconos de apoyo.
Placeholder del campo de búsqueda.
Navegación herramientas
Lista vertical con scroll, asas de arrastre, activo e hover; variante con aviso
Listado de herramientas o secciones al costado, con el mismo criterio que en /demo-nuevo-formulario-herramientas (envoltorio shell + cromado, separación a la derecha de la barra, nodo con overflow-y: auto). Nombres de clase, alturas y DnD: tabla y Ver código.
Base DS — nav-herramientas-scroll (o nav-herramientas-scroll-warning en el mismo nodo); contenedor de ítems y estados activo / normal. Sin shell extra en pantallas mínimas.
Constructor — demo-formulario-constructor-nav-herramientas-scroll-shell + nav-herramientas-scroll con clase demo; en validación, borde naranja en el shell (--advertencia), no tapado por el panel.
DnD — clases de arrastre y drop en la tabla; el comportamiento lo define tu capa (p. ej. dnd-kit) junto a las clases.
Tokens — abajo, una fila por variable y uso en este patrón; el catálogo global sigue en Fundamentos.
Vista previa
Normal (marco vertical / constructor)
Titulo herramienta
Titulo herramienta
Titulo herramienta
Titulo herramienta
Titulo herramienta
Titulo herramienta
Titulo herramienta
Titulo herramienta
Titulo herramienta
Titulo herramienta
Con advertencia (borde en el shell)
Titulo herramienta
Titulo herramienta
Titulo herramienta
Titulo herramienta
Titulo herramienta
Clases CSS
Clase CSS
Para qué sirve
Base DS: panel con scroll (max-height por defecto 25rem), padding, barra fina. En marco/constructor va dentro del shell de demo.
Misma base con borde de aviso en el nodo. En el constructor suele usarse el shell con --advertencia.
Cromado (borde, sombra, padding-right 8px respecto a la barra), flex-1, min-h-0; ancho de ref. del demo.
Validación: borde --color-advertencia en el shell, visible bajo el scroll.
Con .nav-herramientas-scroll: área con overflow-y, sin duplicar borde; llena el shell.
Opcional con .nav-herramientas-items: gap 8px entre filas (maqueta constructor).
Columna de ítems (flex + gap según el partial).
Fila en estado de reposo.
Fila seleccionada o actual (sombreado del DS).
Asa o icono de arrastre (ancho 10px en referencia).
Título o etiqueta de la fila.
Ítem con cursor grab (preparar DnD en JS).
Opacidad reducida mientras se arrastra.
Apariencia del fantasma bajo el cursor.
Indicación de destino al soltar.
Código (HTML)
Variables CSS en este patrón
Misma lógica que en otros bloques de navegación: un token, una explicación de dónde entra en este listado. Detalle por regla: partial del componente.
Variable
Uso en el listado
Fondo del panel de scroll e ítems en estados base.
Fondo en ítem activo, hover y pista de scrollbar (según regla del bloque).
Acentos del pulgar de scrollbar y estados que lo referencian.
Borde del contenedor de scroll en variante normal.
Borde en variante aviso (nodo base o shell del constructor).
Sombras de contenedor / ítem activo cuando aplica en el partial.
Texto de ítems y etiquetas.
Sidebar Nav
Navegación vertical con ítems editables, submenús, estado activo y botón para agregar ítems.
Vista Previa
UI element nivel2
UI element nivel2
Contenido del ítem seleccionado
SidebarNavFormato2
UI element nivel1
UI element nivel1
Contenido del ítem seleccionado
Clases CSS
Clase CSS
Para qué sirve
Contenedor principal (flex column, gap 1rem entre lista y botón agregar)
Lista de ítems (`SidebarNav`); flex columna, gap 12px entre subpestañas; con `.scroll-fino` cuando hay scroll vertical; en rail con altura (p. ej. `.demo-pantalla-sidebar-rail`) hace scroll y el CTA `.btn-agregar-pestana.sidebar-nav-agregar` queda fijo abajo
Ítem de fila — `<button type="button">` cuando no hay papelera ni edición inline; `<div>` con teclado + `aria-current`/`aria-label` si hay `sidebar-nav-item-delete` o input (mismo criterio que demos y componente `SidebarNav`)
Modificador: fondo teal claro, borde izquierdo 4px primario
Modificador: estilos de edición inline cuando el ítem activo está en modo renombrar
Texto del ítem (16px medium, truncado)
Input de edición inline
Botón eliminar con papelera
Sub-ítem debajo del ítem padre
CTA «Agregar subpestaña»: mismo aspecto que *Botones especiales → Agregar pestaña* (`.btn-agregar-pestana-text`, `.btn-agregar-pestana-icon`); `.sidebar-nav-agregar` ancla layout en rail (ancho en panel-demo, etc.)
Formato 2 — estado activo (se combina con --formato2-hover)
Formato 2 — elevado al hover o cuando el ítem está activo
Formato 2 — área expandible bajo el ítem activo al hover; sin `subItems` puede ser `<button>` con **`onAddSubPestana`** (misma acción que el + del lienzo en demos)
Props
Prop
Tipo
Descripción
items
SidebarNavItemData[]
Lista de ítems a mostrar
activeId
string?
ID del ítem activo
onItemClick
(id: string) => void?
Callback al hacer clic en un ítem
onItemDelete
(id: string) => void?
Callback al eliminar un ítem
onItemRename
(id, label) => void?
Callback al renombrar. Si se omite, edición deshabilitada.
onAddItem
() => void?
Callback del botón +. Si se omite, el botón no se muestra.
Pestañas formato 1 (plantilla)
Plantilla de pestañas horizontales (componente TabItem): activo/inactivo y nombre editable al hacer doble clic. El conector inferior funde la pestaña activa con el panel de contenido.
Vista Previa
Haz clic para cambiar el tab activo. Doble clic sobre la etiqueta para editar el nombre. El botón de papelera elimina el tab. Con varias pestañas y scroll horizontal, el botón + va al final de la fila y permanece visible anclado a la derecha hasta que el scroll llega al final, donde queda junto a la última pestaña.
Pestaña 1
Pestaña 2
Pestaña 3
Contenido del tab: Pestaña 1
Código de uso (React)
Estados
La variante Advertencia usa variant="warning" en TabItem (clase tab-item--warning): bordes superiores y laterales en --color-advertencia, fondo --color-fondo-tab e ícono advertencia-relleno junto al título.
Activo
Pestaña 1
Inactivo
Pestaña 2
Advertencia
Pestaña 3
Activo con advertencia
Pestaña activa
Clases CSS
Clase CSS
Para qué sirve
Contenedor principal (75px alto, position: relative)
Modificador: borde superior 7px teal, fondo var(--Relleno-botones), sin borde inferior; sombra solo laterales + superior (integración con panel)
Variante advertencia (con --inactivo o --activo): bordes 2px --color-advertencia arriba y laterales inactivo; activo añade laterales advertencia al cuerpo teal
Fila flex etiqueta + ícono advertencia (solo con variant warning y sin edición)
Ícono 20×17 advertencia-relleno (data URL desde catálogo)
Cuerpo visible del tab (flex: 1; padding 10px 16px; inactivo padding-top 15px para alinear texto con el activo)
Etiqueta de texto (18px semibold, truncada si es larga)
Input de edición inline (mismo tamaño que la etiqueta)
Botón eliminar con icono de papelera
Botón de sub-pestaña debajo del cuerpo del tab (visible solo cuando se pasa onAddSubTab)
Rectángulo inferior que funde el tab activo con el panel
Botón + al final de la fila (70×75px, fondo var(--Relleno-botones)): dentro de .tab-row-scroll con position sticky y right 0 (visible al hacer scroll; al final queda junto a la última pestaña)
Demo guía: envoltorio de ancho completo; el scroll horizontal está en .guia-tab-item-demo-row junto con .tab-agregar
Props
Prop
Tipo
Descripción
itemId
string?
Identificador estable para scroll (p. ej. al activar la pestaña en una fila con overflow); se refleja en data-tab-item-id
label
string
Texto de la etiqueta del tab
active
boolean?
Si el tab está seleccionado (default: false)
variant
'default' | 'warning'?
Advertencia: clase tab-item--warning, bordes --color-advertencia (inactivo) o laterales advertencia si está activo; ícono junto al título.
onClick
() => void?
Callback al hacer clic en el tab
onLabelChange
(label: string) => void?
Callback al guardar un nuevo nombre. Si se omite, la edición queda deshabilitada.
onDelete
() => void?
Callback al hacer clic en el botón eliminar. Si se omite, el botón no se muestra.
onAddSubTab
() => void?
Callback del botón de sub-pestaña. Si se omite, el botón no se muestra.
subTabLabel
string?
Texto del botón de sub-pestaña (default: "Agregar sub-pestaña").
Pestañas formato 2 (plantilla)
Fila horizontal de subpestañas sobre fondo var(--Relleno-botones) (misma lógica que formato 1: scroll, + al final de la fila, panel blanco debajo). Misma fila 200×75px en todas: texto UI element nivel2, etiqueta + icono a la derecha (space-between). Inactiva: borde 2px Stroke-imputs, fondo var(--Relleno-botones), texto 400. Inactiva + advertencia: clase tab-f2-ficha-item--warning — bordes superiores y laterales 2pxvar(--color-advertencia), sin inferior, fondo var(--color-fondo-tab); slot derecho con ícono advertencia-relleno 20×17 (.tab-item-warning-icon), mismo criterio que formato 1, en lugar de la papelera. Activa: fondo blanco-final, sombra selección, texto 500, sin borde inferior con el panel.
Vista Previa
Ejemplo mínimo: dos pestañas y el botón +. Todas muestran la misma etiqueta y la papelera; solo cambia el font-weight (400 inactiva, 500 activa) y el estilo de tarjeta. Con más pestañas, las flechas desplazan la fila horizontal. El panel blanco continúa la pestaña activa.
Contenido del tab: f2-1 — panel blanco continuo bajo la pestaña activa.
Código de uso (HTML / clases)
Estados
Activo
Inactivo
Advertencia (inactiva)
Clases CSS
Clase CSS
Para qué sirve
Fila de subpestañas (flex row, gap 8px, align-items flex-end)
Base (botón); 200×75px, padding 10px 16px, space-between, gap 12px, border-radius 8px
Misma fila label + acción que activa; borde 2px var(--Stroke-imputs); fondo var(--Relleno-botones); var(--Negro) 16px / 400 Inter
Junto a --inactivo: border-radius 8px 8px 0 0; borde sup/der/izq 2px var(--color-advertencia); sin inferior; fondo var(--color-fondo-tab). Slot derecho: ícono advertencia-relleno 20×17 (clase .tab-item-warning-icon, mismo catálogo que formato 1). React: variant warning en PestanasFichaFormato2Item
Área con overflow-x auto + overflow-y visible (como `.guia-tab-item-demo-row`); último hijo `.tab-agregar` con sticky `right: 0` (mismo criterio que pestañas formato 1)
Panel blanco (blanco-final) bajo la fila; continúa la subpestaña activa
Base panel demo (reutilizada aquí con guia-tab-f2-demo-panel)
Pestañas compactas (ficha)
Variante para contenido en fichas: ancho de pestaña mín. 120px, width: auto para que el texto no se corte con puntos suspensivos. Activa:--color-primario-oscuro, 16px semibold; sin borde inferior y franja ::after que oculta la línea del panel. Inactiva:--color-texto, 14px regular. En el panel, lista-lead (“Texto:”) en #333 (--color-texto-oscuro), 16px medium; lista-cola en 14px regular.
Vista previa
Texto:Min Regular 14
Texto:Min Regular 14
Código de uso (HTML / clases)
Clase CSS
Para qué sirve
Envoltorio fluido (width 100%); alto y ancho se adaptan al contenedor; font-family con --font-geist-sans (contraste 400/600)
Fila de pestañas; align-items flex-end; gap 6px entre pestañas
Base (botón); min-width 120px, width auto; sin ellipsis en etiqueta
Sin border-bottom; ::after tapa el top-border del panel; texto 16px semibold teal
Prefijo tipo “Texto:” — 16px medium, --color-texto-oscuro (#333)
Cuerpo de línea — 14px regular, --color-texto
Layout y pantallas
Plantillas de estructura completa (contenedores, shell, áreas de contenido). Cada variación se documenta como un artículo con demo y código copiable. El consumo en otros proyectos sigue siendo el CSS del DS; los layouts en React sirven como referencia de composición.
Demos a pantalla completa
Cada ruta abre una maqueta a altura de ventana. Sirven para revisar el shell y la composición antes de llevar el patrón a otro proyecto.
Layout estándar de pantalla MKClinico. Combina NavbarVertical + Header + panel-principal en un solo componente reutilizable.
Layout de Pantalla es la base del proyecto. Define la estructura completa: sidebar, header y área de contenido. Es el punto de partida cuando se construye una pantalla desde cero.
└ .area-principal← espaciado responsivo alrededor del panel
└ .panel-principal← contenedor visual del contenido
El espaciado de .area-principal es responsivo mediante la variable --espaciado-area-principal: 16px en mobile, 24px en tablet, 40px en desktop. Si un proyecto necesita ajustarlo, sobreescribe solo la variable.
Si copias solopanel-principal sin el layout, asegúrate de envolverlo en un elemento con clase area-principal para respetar los espaciados del sistema.
Vista Previa
Pasa el mouse sobre el navbar para expandirlo. El botón de acción y el bloque de usuario son opcionales. Con usuario.opciones, un clic en el nombre o avatar abre el menú (mismo comportamiento que HeaderNavegacion).
El contenido de la pantalla va aquí: tablas, formularios, etc.
Vista previa — sin botón de acción
Sin botonAccion; con volver en layout-pantalla-cabecera-margin: el área principal usa --layout-pantalla-volver-margin-top (10px ref.) bajo el header y --layout-pantalla-volver-margin-panel (11px fijos, vía gap en area-principal--con-volver) hasta el contenedor inferior (panel o bloque sin panel).
El contenido de la pantalla va aquí: tablas, formularios, etc.
Props
Prop
Tipo
Requerida
Descripción
titulo
string?
No
Título en el panel (`h1.titulo-principal`). Si se omite o queda vacío y no hay `botonAccion`, no se muestra la cabecera del panel
fullScreen
boolean?
No
true (default): height 100vh, layout de página completa. false: height 100%, para embeber en un contenedor con altura definida.
navItems
NavItem[]
Sí
Items del menú lateral (mismo tipo que NavbarVertical)
children
ReactNode
Sí
Contenido del panel principal
activeItemId
string?
No
ID del item activo en el navbar
activeSubItemId
string?
No
ID del sub-item activo en el navbar
onItemClick
(id: string) => void?
No
Callback al hacer clic en un item del navbar
onSubItemClick
(id, subId) => void?
No
Callback al hacer clic en un sub-item del navbar
botonAccion
{ label, onClick, icono? }?
No
Botón primario arriba a la derecha del panel
volver
{ label?, onClick }?
No
«Volver» (.btn-volver) en layout-pantalla-cabecera-margin; --layout-pantalla-volver-margin-top y gap 11px (--layout-pantalla-volver-margin-panel) en area-principal--con-volver hasta el contenedor inferior.
omitirPanelPrincipal
boolean?
No
true: sin .panel-principal; el contenido va en .layout-pantalla-area-sin-panel (p. ej. lienzo de plantillas). Default false.
usuario
{ nombre, opciones? }?
No
Avatar y nombre en el header. Si `opciones` es un array no vacío (`{ label, onClick }[]`), al hacer clic se abre el menú desplegable.
buscadorPlaceholder
string?
No
Placeholder del buscador (default: "Buscar módulos")
onBuscar
(valor: string) => void?
No
Callback al escribir en el buscador del header
Clases CSS
Clase CSS
Para qué sirve
Espaciado responsivo exterior del panel (16px → 24px → 40px según viewport)
Variable CSS — sobreescribir para ajustar el espaciado en proyectos específicos
main: padding-top --layout-pantalla-volver-margin-top; lateral e inferior = --espaciado-area-principal; gap --layout-pantalla-volver-margin-panel (11px) entre franja Volver y contenedor inferior — LayoutPantalla con volver
Franja del .btn-volver — LayoutPantalla (el hueco de 11px al bloque de abajo lo define el gap del main)
Contenedor del contenido cuando `omitirPanelPrincipal`: sin borde/sombra de .panel-principal; flex column con .layout-pantalla-panel-fill
Cabecera del panel: margen bajo la fila título/CTA — LayoutPantalla
Fila título + botonAccion dentro del panel — LayoutPantalla
Modificador: solo `botonAccion` sin título — CTA alineado a la derecha — LayoutPantalla
Omitir titulo (o cadena vacía): no se renderiza la fila de cabecera del panel si tampoco hay botonAccion. Ejemplo: /demo-constructor-formulario.
Sin usuario
Omitir la prop usuario para ocultar el área de usuario en el header.
Usuario sin menú
Pasar solo nombre (sin opciones o con array vacío): se muestra avatar y nombre, pero no aparece lista al hacer clic.
Botón con ícono
Pasar botonAccion={{ label: "Nuevo", icono: <svg/>, onClick }} para mostrar ícono antes del texto.
Constructor Formulario - Paleta (izquierda)
Listado vertical al costado del constructor: asa, nombre del campo y metadatos (obligatorio / autocompletado) sobre la base de Navegación herramientas. CTA «Agregar sección»: patrón Agregar pestaña en Botones especiales. Nombres de clases, medidas y DnD: tabla, Ver código y /demo-constructor-formulario.
Raíz — demo-constructor-paleta + nav-herramientas-scroll en el mismo nodo; lista con scroll en nav-herramientas-items + demo-constructor-paleta-items-scroll.
Interactivo mínimo (reordenar paleta, soltar, chips). El producto con rejilla, colisiones y vista previa derecha está en /demo-constructor-formulario.
Maqueta mínima: arrastrar desde la paleta hacia la derecha; soltar en la zona punteada o sobre una etiqueta para el orden.
Orden — el listado de la paleta y las fichas a la derecha se mantienen alineados al reordenar.
Una por tipo — cada campo entra a lo sumo una vez en la lista derecha.
Suelta aquí: campo nuevo desde la paleta, o una etiqueta de la lista para dejarla al final
Clases CSS
El prefijo demo-constructor-paleta-* añade criterio del constructor; nav-herramientas-* comparte estados con la guía de herramientas. Detalle en la tabla.
Clase CSS
Para qué sirve
Marco opcional de la guía (preview): borde, radio, fondo y sombra alrededor de la paleta; la paleta dentro no duplica cromado.
Contenedor principal (`aside`) de la paleta; debe usarse junto con `nav-herramientas-scroll`. En CSS, `.demo-constructor-paleta.nav-herramientas-scroll` ajusta columna, scroll interno y sombra exterior.
Shell de panel con borde y sombra (compartido con *Navegación herramientas*). En la paleta se combina con `demo-constructor-paleta`.
Bloque con `overflow-y: auto` entre la lista de campos y el CTA; mantiene el scroll solo en la lista.
Contenedor flex en columna de las filas (gap entre ítems). Igual que en *Navegación herramientas*.
Opcional en el contenedor de ítems mientras hay arrastre desde la paleta (bloquea selección de texto).
Utilidad de scrollbar fina (compartida con otros listados del DS).
Zona de soltar (borde discontinuo); en la guía se usa con `useDroppable` en la vista previa interactiva. En `/demo-constructor-formulario` va al pie de la rejilla.
Estado cuando el puntero con un arrastre válido está sobre la zona de soltar.
Modificador de fila: ancho completo y alineación con el patrón de herramientas; va con `nav-herramientas-item` y `nav-herramientas-item-draggable`.
Estilo base de cada fila (fondo, radio, padding). Ver *Navegación herramientas*.
Cursor `grab` en la fila arrastrable. Ver *Navegación herramientas*.
Estado de la fila origen mientras se arrastra (opacidad reducida). Ver *Navegación herramientas*.
Estilo del clon en `DragOverlay` (sombra, ligera rotación). En la demo se combina con `demo-constructor-paleta-fila` y `demo-constructor-paleta-item--overlay`.
Modificador de la fila dentro del overlay de arrastre (demo / `DragOverlay`).
Zona de arrastre dentro del preview del overlay (demo).
Zona mango + etiqueta que recibe los listeners de arrastre (dnd-kit); el resto de la fila queda para clics en iconos.
Contenedor del ícono de asa (10×16). Ver *Navegación herramientas*.
Tipografía del nombre del campo (16px, peso 500). Ver *Navegación herramientas*.
Contenedor flex de asterisco, destellos y candado a la derecha de la fila.
Botón sin borde para alternar obligatorio / autocompletado (focus visible accesible).
Display inline de los SVG de estado en botones de la meta.
Alineación y tamaño de los iconos de estado en la meta.
CTA «Agregar sección» (patrón *Agregar pestaña* en *Botones especiales*). La paleta usa `.demo-constructor-paleta > .btn-agregar-pestana` solo para margen superior.
Texto del CTA *Agregar pestaña*.
Ícono + del CTA *Agregar pestaña*.
Esqueleto (raíz copiable)
Aside y panel con borde; CTA y filas: ver tabla.
Solo en esta guía: marco alrededor del preview.
Constructor Formulario - Vista previa (derecha)
Columna derecha del constructor: cabecera Vista previa, control Ampliar, rejilla de campos y sección Datos cuenta. Mismo prefijo demo-constructor-* que en Constructor Formulario - Paleta (izquierda). Detalle de clases y notas: tabla y Ver código; interacción con la paleta y la franja de soltar en /demo-constructor-formulario.
DnD — el componente va dentro de un DndContext que use constructorFormularioCollisionDetection (módulo bajo constructorFormulario/collisionDetection).
Datos — prop colocados (en esta guía, arranque con CANVAS_INICIAL; solo reordenar en el lienzo, sin DragOverlay de paleta).
RUT / documento — en la rejilla, variante con selector tipo documento: clase input-rut--doc-tipo (tabla y Entradas).
Vista previa
Mismo aspecto de referencia (ayuda bajo el título, tarjetas, mango de ancho, Datos cuenta en solo lectura). Aquí: reordenar en el lienzo y alternar ampliar; el arrastre desde la paleta está en la demo enlazada.
Vista previa
Arrastra desde cualquier parte del campo para reordenar. Arrastra el borde derecho para ajustar el ancho.
Sin sección
RUT/PASS *
Nombre(s) *
Primer apellido *
Segundo apellido *
Fecha de nacimiento *
Dirección
Teléfono
Email
Previsión *
Selecciona previsión
Convenio
Selecciona convenio
Datos cuenta
Definido en Zonas (solo visualización)
Motivo *
Clases CSS (guía)
En esta tabla: marco, columna, shell con scroll, RUT y accesorios. El resto del lienzo (rejilla, ítems, separador) comparte el prefijo: ver filas y la demo.
Clase CSS
Para qué sirve
Marco de la guía alrededor de la vista previa: borde, radio, sombra y tope de altura del shell de rejilla (scroll interno).
Modificador al activar ampliar en el preview de la guía: ancho 100% y `min-height` mayor que el default del marco.
Columna derecha del constructor: fondo superficie, cabecera «Vista previa» y shell del lienzo.
Contenedor con scroll del lienzo (rejilla + franja de soltar + sección Datos cuenta).
Modificador de `InputRut` con `permitePasaporte`: selector RUT/PASS en el prefijo (5.25rem, mismo criterio visual que el bloque RUT clásico 80px).
Indicador visual del mango de ancho (barra redondeada, más visible al hover/focus).
Modificador de «Datos cuenta»: opacidad y sin puntero, como bloque definido en Zonas.
Esqueleto (raíz copiable)
Raíz del componente: cabecera, shell y rejilla.
Solo en esta guía: envuelve al componente. Con Ampliar, el mismo nodo puede llevar layouts-constructor-vista-previa-marco--ampliada (ver tabla).
Modales
Cuándo usar cada tipo de modal
Tipo
Contenido
Botones
Cuándo usarlo
Modal informativo
Texto largo, listas, definiciones
Solo cierre (X)
Mostrar información de referencia que no requiere decisión del usuario
Modal de confirmación
Ícono de advertencia + pregunta corta
btn-modal-primario + btn-modal-secundario
Acciones destructivas o irreversibles (eliminar, salir sin guardar)
Modal con formulario
Inputs, selects u otros controles
Guardar + Cancelar
Captura de datos breve sin salir del contexto actual
Modal de solo lectura con contenido informativo. Sin botones de acción.
Vista previa
Titulo herramienta maestra
Definición
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco
Especificaciones
Lorem ipsum dolor sit amet
Lorem ipsum dolor sit amet
Lorem ipsum dolor sit amet, consectetur adipiscing elit
Lorem ipsum dolor sit amet, consectetur adipiscing elit
Clase CSS
Para qué sirve
Contenedor del contenido del modal — max-width 926px, fondo blanco, sombra
Título principal del modal (h2) — tipografía teal
Área de contenido desplazable (texto, listas, formularios)
Subtítulos de sección dentro del cuerpo (p o span)
Botón de cierre (X) — esquina superior derecha
Pie del modal — botones de acción (opcional en informativo)
Demo interactivo
Modal extendido
Modal informativo con más secciones de contenido.
Vista previa
Titulo herramienta
Definición
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco
Especificaciones
Lorem ipsum dolor sit amet
Lorem ipsum dolor sit amet
Lorem ipsum dolor sit amet, consectetur adipiscing elit
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Versiones
Texto texto texto
Texto texto
Texto texto
Clase CSS
Para qué sirve
Contenedor del contenido del modal — max-width 926px, fondo blanco, sombra
Título principal del modal (h2) — tipografía teal
Área de contenido desplazable (texto, listas, formularios)
Subtítulos de sección dentro del cuerpo (p o span)
Demo interactivo
Configuración de herramienta
Modal compacto para opciones de una herramienta (casillas y acción Guardar). Contenedor con borde grueso teal y sombras internas según maqueta.
Vista previa
Configuración de “Herramienta”
Clase CSS
Para qué sirve
Modificador en el contenedor .modal: 498×min 292px, fondo #FDFDFD, borde 3px --color-borde, sombras inset; título 20px semibold --Titulos-y-botones, ✕ en --color-borde
Columna de opciones (checkboxes) dentro de .modal-cuerpo — gap vertical 13px entre ítems
Demo interactivo
Modal doble contenedor
Modal ancho con dos columnas: principal (búsqueda + tabla, p. ej. tabla--diagnostico-checks en tabla-container--panel-inferior) y lateral tipo Vista previa de herramienta (modal-doble-contenedor-lateral + contenedor-vista-previa en el mismo aside). Maqueta de referencia: Asignar diagnóstico (1590×891, modal--asignar-diagnostico). Nombres y medidas: tabla; dialogClassName y React: Ver código en /demo-modal-doble-contenedor.
Diálogo — modal--doble-contenedor + modificador de producto (aquí modal--asignar-diagnostico) en el Modal (dialogClassName).
Cuerpo — modal-doble-contenedor-layout → modal-doble-contenedor-principal | modal-doble-contenedor-lateral; resumen y CTA con clases modal-doble-contenedor-asignado-* (detalle en tabla y partial).
Otras maquetas dobles — modal--certificados, modal--ordenes (misma idea de layout; caja 1705×891 en guía y demos).
Vista previa (maqueta 1590×891)
Mismo bloque que la demo, escalado al ancho del artículo. Sin interacción; para probar flujo y foco, usa la demo en pestaña.
Asignar diagnóstico
Código
Nombre del diagnóstico
GES
ENO
Quirúrgico
E10
DIABETES MELLITUS INSULINODEPENDIENTE SIN COMPLICACIONES
E11
DIABETES MELLITUS NO INSULINODEPENDIENTE CON COMPLICACIONES RENALES
E103
DIABETES MELLITUS INSULINODEPENDIENTE CON COMPLICACIONES OFTALMICAS
I10
HIPERTENSION ESENCIAL (PRIMARIA)
J18
NEUMONIA NO ESPECIFICADA
K21
ENFERMEDAD DEL REFLUJO GASTROESOFAGICO
M54
DORSALGIA
N18
ENFERMEDAD RENAL CRONICA
R07
DOLOR DE GARGANTA Y EN EL PECHO
Z00
EXAMEN MEDICO GENERAL SIN QUEJA NI DIAGNOSTICO
Maqueta fija 1590×891 px; se escala al ancho disponible. Sin interacción (referencia visual); la demo a pantalla completa abre el mismo contenido en overlay.
Clases CSS (referencia)
Reglas en styles/partials/15-modales.css. Detalle en la tabla.
Clase CSS
Para qué sirve
Modificador en el nodo .modal: ancho máx. amplio, padding relajado; estructura flex para layout en dos columnas (ver hijos en partial).
Modificador de caja 1590×891 (ref. Figma) para el flujo Asignar diagnóstico; combina con .modal--doble-contenedor.
Fila o grid principal que envuelve la columna de listado y la columna lateral.
Columna izquierda: búsqueda + tabla (p. ej. .tabla--diagnostico-checks) en panel.
Columna derecha: suele unirse con .contenedor-vista-previa (mismo shell que Feedback); título, contenido y pie.
Banda inferior del lateral (p. ej. CTA Guardar) en la maqueta de diagnóstico.
Bloque de resumen de ítems asignados dentro del lateral (estructura interna, sin borde de tarjeta propio).
Código, nombre, criterios, acciones, tipografía de oración en tablas; ver selectores bajo .modal--doble-contenedor en 15-modales.css.
Esqueleto (raíz en dialogClassName / HTML)
Nodo del diálogo en esta maqueta; modal-cuerpo y layout debajo: tabla y partial.
Edición de certificados en dos columnas: lateral (~1/3) con plantillas y acción Texto libre; principal (~2/3) con título dinámico, frase con campos en línea o área de texto y CTA Guardar. Caja del diálogo 1705×891 (fila 1609 + 48px a cada lateral). Patrón base común: Modal doble contenedor. Detalle: tabla; implementación en /demo-modal-certificados.
Diálogo — modal--doble-contenedor + modal--certificados en dialogClassName del Modal.
Cuerpo — modal-doble-contenedor-layout; aside con modal-doble-contenedor-lateral (selección) y columna modal-doble-contenedor-principal (editor con clases modal-certificados-*).
Guía visual — la maqueta de abajo es referencia; interacción en la demo.
Vista previa (maqueta 1705×891)
Mismo bloque que la demo, escalado al ancho del artículo. Sin interacción; para probar el flujo, abre la demo en pestaña.
Certificados
Certificado escolar
El día de viene el estudiante , por a las horas hasta .
Caja 1705×891 px (48px a cada lado de la fila 1609px); se escala al ancho disponible. Sin interacción; la demo a pantalla completa abre el mismo contenido en overlay.
Clases CSS (referencia)
Reglas en styles/partials/15-modales.css. Comparte layout con otros modales dobles; el detalle de certificados va en la tabla.
Clase CSS
Para qué sirve
Modificador del .modal junto a .modal--doble-contenedor: caja 1705×891, padding y columnas alineadas a la maqueta de certificados.
Contenedor flex/grid de las dos columnas (lateral + principal).
Columna de selección de plantilla (aside en la demo).
Columna del editor de título, frase con inputs o textarea «Texto libre».
Bloque de la columna lateral: etiqueta, lista de opciones tipo radio y pie con «Texto libre».
Botón-opción de plantilla; variante .modal-certificados-opcion--activa para el estado seleccionado.
Contenedor del título del certificado, hoja de campos en línea o .modal-certificados-texto-libre.
Frase con huecos editables (.modal-certificados-inline-input) o texto fijo según la plantilla.
Esqueleto (raíz en dialogClassName / HTML)
Nodo del diálogo; modal-cuerpo y layout en el partial y en la demo.
Carga de órdenes: columna principal (~2/3) con filtro, búsqueda y tabla jerárquica (tabla--compacta-codigo); columna lateral (~1/3) con resumen al estilo Vista previa de herramienta y CTA Cargar. Caja 1705×891 (mismos 48px laterales que certificados). Patrón compartido: Modal doble contenedor. Detalle: tabla; flujo en /demo-modal-ordenes.
Diálogo — modal--doble-contenedor + modal--ordenes en dialogClassName.
DOM — primero modal-doble-contenedor-principal (izquierda), luego modal-doble-contenedor-lateral (derecha) con contenedor-vista-previa y pie.
Listado — ancho lógico 1024+40+545 en el partial; clases modal-ordenes-* en lateral y filas (ver tabla y CSS).
Vista previa (maqueta 1705×891)
Mismo bloque que la demo, escalado al ancho del artículo. Sin interacción; para expandir filas o Cargar, abre la demo.
Órdenes
Ámbito del listado
Todos
Laboratorio
Imagenología
Código
Nombre
Grupo
LAB-204
Perfil lipídico
Laboratorio
LAB-204-A
Hemograma completo
Laboratorio
IMG-118
Radiografía de tórax
Imagenología
OT-09
Electrocardiograma
Otros
GLU-02
Hemoglobina glicosilada (HbA1c)
Laboratorio
BIO-11
Perfil bioquímico básico
Laboratorio
HEM-03
Recuento leucocitario con fórmula
Laboratorio
HOR-02
T4 libre
Laboratorio
URO-07
Urocultivo y antibiograma
Laboratorio
FERR-01
Ferritina
Laboratorio
LIP-14
Prueba de frutosaminas
Laboratorio
IMG-201
Ecografía abdominal
Imagenología
IMG-310
Resonancia de rodilla
Imagenología
IMG-415
Tomografía de tórax
Imagenología
OT-12
Holter de 24 h
Otros
OT-18
Espirometría simple
Otros
LAB-901
Anticuerpos anti-CCP
Laboratorio
LAB-902
Dímero D
Laboratorio
Caja 1705×891 px (48px a cada lado de la fila 1609, como certificados); se escala al ancho disponible. Sin interacción; la demo a pantalla completa abre el mismo contenido en overlay.
Clases CSS (referencia)
Reglas en styles/partials/15-modales.css. Más abajo, familia de filas y secciones del resumen: selectores bajo .modal--ordenes en el partial.
Clase CSS
Para qué sirve
Modificador del .modal con .modal--doble-contenedor: caja 1705×891, márgenes y reglas de las dos columnas (tabla + resumen).
Banda superior de la columna principal: ámbito (dropdown) + búsqueda con .input-busqueda-icono.
Contenedor de la .tabla--compacta-codigo en panel; scroll y cabecera alinean con la maqueta de órdenes.
Columna izquierda: envuelve filtros + .modal-ordenes-tabla en la demo.
Columna derecha: resumen y pie con CTA; a menudo junto a .contenedor-vista-previa en el demo.
Cuerpo del resumen (bloques, paquetes y líneas) dentro del lateral.
Jerarquía de secciones y anidación en el panel de resumen; ver partial para márgenes y títulos.
Fila de examen en el resumen (código, nombre, quitar); hover y foco en 15-modales.css.
Esqueleto (raíz en dialogClassName / HTML)
Nodo del diálogo; modal-cuerpo y layout: demo y comentarios en el partial.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco
Especificaciones
Lorem ipsum dolor sit amet
Lorem ipsum dolor sit amet
Lorem ipsum dolor sit amet, consectetur adipiscing elit
Lorem ipsum dolor sit amet, consectetur adipiscing elit
Titulo herramienta
Definición
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco
Especificaciones
Lorem ipsum dolor sit amet
Lorem ipsum dolor sit amet
Lorem ipsum dolor sit amet, consectetur adipiscing elit
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Versiones
Texto texto texto
Texto texto
Texto texto
Configuración de “Herramienta”
Modal de confirmación
Modal con ícono, mensaje centrado y dos botones de acción. Sin botón de cierre.
Vista previa
¡Atención! Perderás tu progreso
¿Estás seguro de que quieres salir?
Clase CSS
Para qué sirve
Contenedor del modal de confirmación — centrado, max-width 715px, sin botón X
Título del modal (h2) — pregunta o advertencia
Subtítulo o mensaje secundario (p) — texto centrado
Pie con los dos botones de acción
Botón principal (ej. No, continuar) — 280×50px, teal