|
|
5 months ago | |
|---|---|---|
| .. | ||
| components | 5 months ago | |
| svelte | 5 months ago | |
| README.md | 5 months ago | |
| active-uix.svelte.test.ts | 5 months ago | |
| active-uix.svelte.ts | 5 months ago | |
| errors.ts | 5 months ago | |
| index.ts | 5 months ago | |
| prefs.ts | 5 months ago | |
| services.ts | 5 months ago | |
| types.ts | 5 months ago | |
README.md
ActiveUix
active-uix es la raiz de composicion de UIX. Su responsabilidad no es ser
otra capa de comportamiento, sino entregar a morfo, soma, sema y eidos
los servicios minimos que necesitan sin que los componentes conozcan
ActiveApp directamente.
Handoff 2026-05-13
La regla de ownership queda cerrada:
Solo los composition roots crean servicios compartidos. Si hay
ActiveApp,attachActiveUix(app)consume sus servicios y falla si falta alguno requerido. Si no hay app,createActiveUix(...)es el composition root local y crea los servicios/prefs de UIX.morfo,soma,sema,eidosy los componentes no creandom,langs,prefs,formatni equivalentes.
La auditoria de naming empieza a cerrarse asi: events es el nombre publico
del motor perceptivo en ActiveUix y tambien el nombre del servicio que
defineUixServices(...) registra en ActiveApp. semantic queda reservado
para el payload declarativo de morfo.events[].semantic, no para servicios
runtime. morfo.translations queda como catalogo declarativo owned por el
componente. prefs es el unico nombre para preferencias: ActiveUix expone
el ActivePrefs bruto y las capas inferiores consumen vistas acotadas cuando
no deben mutar.
Boot paths actuales
createActiveUix(options) compone un runtime standalone:
- crea
logger,timers,busyprefs; - el
bususacreateSvelteEngineBus({ logger, clock: timers.clock }), igual queActiveApp, para que los listeners corran bajountrack; - crea
langs,domodisabledDom,formatyeventssegun opciones; - conserva
portalcomo target generico de portales para que cada capa lo adapte a su API sin acoplaractive-uixa esa capa; - registra traducciones comunes y
morfo.translations.
attachActiveUix(app, options) se adjunta a un ActiveApp externo:
- reutiliza
app.prefs,app.langs,app.domyapp.formatsi existe; - exige
app.langsyapp.dom; si faltan, lanza error de configuracion; - no vuelve a suscribir
langsaprefs.language: esa conexion pertenece adefineActiveLangsdentro deActiveApp; - registra traducciones comunes y
morfo.translations; - no posee el lifecycle del
app.
Contratos actuales
| Modulo | Minimo requerido | Opcional | Fallback si falta | Error si falta |
|---|---|---|---|---|
ActiveUix standalone |
langs config |
format, events, portal, dom:false |
crea prefs, core services y, si dom:false, disabledDom local |
falta config langs |
ActiveUix attach |
app.prefs, app.langs, app.dom |
app.format, app event engine, portal |
ninguno para servicios requeridos | falta langs o dom en app |
SomaRuntime |
dom desde ActiveUix |
event engine, langs, format |
ninguno propio | morfo/event/part inexistente |
Sema desde ActiveUix |
dom/projector inyectado por ActiveUix |
sound, haptic |
ninguno propio de servicios UIX | por definir para uso directo fuera de ActiveUix |
Eidos |
dom si applyDom |
langs, format, prefs, mode/density sources |
applyDom:false permite render/serializar sin DOM |
falta dom con applyDom activo |
ADom |
superficie ActiveDom |
breakpoints/window | disabledDom en UIX |
por definir fuera de UIX |
Decisiones cerradas y riesgos abiertos
dom:falsesolo degrada en standalone:ActiveUixexpone undisabledDomlocal y no deja a Sema/events caer a escrituras directas.- En attach mode no hay creacion compensatoria: si la app no tiene
dom,attachActiveUix(app)falla. - Standalone usa el mismo bus Svelte-aware que
ActiveApp. - Attach mode no duplica la suscripcion
prefs.language -> langs. langsno eslocale:prefs.languagealimenta traducciones;prefs.localealimenta formatos.prefs.directiones la preferencia efectiva de direccion;html[dir]es solo su proyeccion DOM.- Los wrappers/componentes no deben ser el lugar donde se resuelvan estas politicas. Primero se cierra el contrato de la raiz activa.
frontendno es capa obligatoria de UIX. Queda como servicio legacy opt-in deActiveApp.ActiveUixno proyecta preferencias al DOM:arts/prefsproyecta lo transversal yActiveEidosproyecta lo visual.ActiveUixno crea ni conoceSomaniEidos:Soma.create(...)crea su scope ySoma.runtime(...);ActiveEidos.create(...)crea el scope visual si la app necesita CSS runtime.
Regla de trabajo vigente
Tras cerrar P1, siguen vigentes estas restricciones:
- no tocar
src/uix/eidos/components/*; - no crear nuevas fachadas internas;
- no introducir
Engine*/Active*por simetria decorativa; - cualquier cambio debe justificar que contrato minimo aclara.