# UIX Documento corto de posicionamiento arquitectónico para `src/uix`. > **Visión de conjunto**: para entender las cuatro capas (morfo, soma, sema, > eidos) en una sola lectura — motivaciones y articulación incluidas — ir a > [active_architecture.md](./active_architecture.md). Este README mantiene la > introducción más narrativa. > > **Convenciones doctrinales del API** (intent ↔ color, subset por componente, > root visual con partes attached en eidos, sound prepare-time priming): viven en > [`src/docs/GUIA_IMPLEMENTACION_SEMAUIX.md`](../docs/GUIA_IMPLEMENTACION_SEMAUIX.md). > Autoritativo para todo wrapper / migración nueva. UIX no intenta ser "otra librería de componentes". La apuesta es más ambiciosa y estructural: **separar capas que casi todos los frameworks actuales mantienen mezcladas**. En la mayoría de sistemas de UI, estas cosas viven pegadas: - contrato público del DOM - comportamiento headless - accesibilidad - semántica del evento - capa visual - motores modales (sound, haptic, motion) - integración con servicios de app UIX intenta partir ese bloque en piezas con fronteras fuertes. --- ## 1. La idea central UIX modela la interfaz como varias capas cooperando, no como un único componente gigante que hace todo a la vez. ```text App ├─ servicios transversales (active-app) │ └─ adom, langs, format, ... └─ componentes └─ capa estructural / semántica / comportamental / visual ``` La intuición: - la estructura pública del componente no es lo mismo que su comportamiento - la semántica de un evento no es lo mismo que su materialización - el DOM activo no es lo mismo que utilidades DOM puras - la app no debería acoplar motores modales entre sí UIX pone nombres y contratos explícitos a esas separaciones. --- ## 2. Las capas de UIX ### `Morfo` (`src/uix/morfo/`) Contrato estructural cross-layer del componente. Define `parts`, `data-*`, ARIA, foco, teclado, eventos y, cuando el texto pertenece al contrato, `translations` del componente. No es prose ni runtime — es la forma canónica pública. Ver: [morfo/README.md](./morfo/README.md) ### `Sema` / Events (`src/uix/sema/`) Vocabulario semántico y orquestación de eventos perceptivos. `sema` queda como nombre historico de la carpeta; la superficie publica de `ActiveUix` usa `events`. - familias canónicas (8): `contact`, `commit`, `signal`, `handle`, `emerge`, `shift`, `sustain`, `delegate` - intents canónicos: `neutral`, `affirm`, `fulfill`, `risk`, `threat`, `loss` - `uix.events.emit(signal)` para que el provider publique ocurrencias - registry de canales (`VisualChannel`, `SoundChannel`, `HapticChannel`) - `src/uix/sema/channels.ts` como fuente unica de ids, signatures y overrides de canales - `src/uix/sema/sounds.ts` como repositorio nominal unico de sonidos sintéticos, `.wav` externos y recetas dinámicas - semántica secuencial estricta del `VisualChannel`: prepara `data-event-*` mediante un proyector DOM, mantiene durante el `hold` y limpia ANTES de resolver la Promise Sema no decide qué ocurrió (eso lo decide el provider). Solo orquesta la ocurrencia y la despacha a los canales registrados. Ver: [sema/README.md](./sema/README.md) ### `Soma` (`src/uix/soma/`) Capa headless de comportamiento: estado, contexto, a11y, keyboard / pointer / focus, emisión de eventos. Soma no conoce la implementación concreta de los engines modales. Su trabajo es emitir hechos del componente, no materializarlos. Ver: [soma/README.md](./soma/README.md), [soma/SOMA_ARCHITECTURE.md](./soma/SOMA_ARCHITECTURE.md) ### `Eidos` (`src/uix/eidos/`) Capa visual: tokens, themes, recipes CSS por componente, archetype rules, event reactions y **wrappers Svelte** sobre los providers headless de soma con las props visuales (variant, size, block, iconOnly, icon, checkMark). El modulo general queda aplanado en `ActiveEidos`: - `ActiveEidos` — runtime activo/contexto visual creado por `ActiveEidos.create(...)`. Gestiona configuracion visual, primitivas, roles canonicos, themes, validacion, generacion de CSS y persistencia. Con servicios de `ActiveUix`, recibe `dom`, `langs`, `prefs` y `format`; `mode` y `density` llegan por fuentes explicitas o defaults propios. Inyecta `