# 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. > > **Hand-off de continuación**: el estado actual de migración y los próximos > pasos viven en `CLAUDE.md` (raíz del repo), sección "Session hand-off". > > **Convenciones doctrinales del API** (intent ↔ color, subset por componente, > root visual con partes attached en eidos, sound eager-init): viven en > [`src/docs/sema-implementation-guide.md`](../docs/sema-implementation-guide.md) > Parte IV. 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, vibra, 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, lang, frontend, 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, `langs` del componente. No es prose ni runtime — es la forma canónica pública. Ver: [morfo/README.md](./morfo/README.md) ### `Sema` (`src/uix/sema/`) Vocabulario semántico y orquestación de señales perceptivas. - familias canónicas: `contact`, `commit`, `signal`, `handle`, `emerge`, `shift`, `sustain` - intents canónicos: `neutral`, `affirm`, `fulfill`, `risk`, `threat`, `loss` - `SemanticEngine.emit(signal)` para que el provider publique ocurrencias - registry de canales (`VisualChannel`, `SoundChannel`, futuro `VibraChannel`) - semántica secuencial estricta del `VisualChannel`: escribe `data-event-*`, mantiene durante el `hold`, 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 esta partido en dos piezas: - `EngineEidos` — configuracion visual pura: primitivas, roles canonicos, themes, validacion y generacion de CSS. - `ActiveEidos` — runtime activo conectado a `ActiveUix`: resuelve el theme desde `frontend` e inyecta los `