|
|
|
|
# Continue
|
|
|
|
|
|
|
|
|
|
Fecha de corte: 2026-05-15. Rama: `active-uix`.
|
|
|
|
|
|
|
|
|
|
Actualizacion 2026-05-15:
|
|
|
|
|
|
|
|
|
|
- Auditoria Soma/Eidos ampliada aplicada por fases y empujada:
|
|
|
|
|
- Cobertura nueva para Select, Popover, Toast y RangeCalendar.
|
|
|
|
|
- Las clases runtime internas `DialogProvider`, `DrawerProvider` y
|
|
|
|
|
`PopoverProvider` dejan de exportarse desde los barrels publicos; los
|
|
|
|
|
wrappers siguen usandolas por import directo.
|
|
|
|
|
- `computeCommandScore` sigue reexportado desde Command por DX, pero el
|
|
|
|
|
algoritmo vive como `computeFuzzyScore` en `src/libs/strings`.
|
|
|
|
|
- `table-core` se mueve a `src/libs/datagrid` con su test.
|
|
|
|
|
- `form-core` se mueve a `src/libs/forms`, usa el Standard Schema comun de
|
|
|
|
|
`src/libs/standard-schema.ts`, elimina la copia local de Soma y anade tests
|
|
|
|
|
de dirty/touched/reset, issues y submit async.
|
|
|
|
|
- Inventario de Soma actualizado: ya no lista como planned componentes que
|
|
|
|
|
existen en el arbol activo.
|
|
|
|
|
- `SelectType`/`ScrollAlignment` y el resto de tipos publicos de componentes
|
|
|
|
|
salen de `types.ts`; los barrels ya no exportan contratos desde
|
|
|
|
|
`*-provider.svelte.ts` (excepto el wrapper Svelte publico de Select).
|
|
|
|
|
- `Dismissal` y `SafePolygon` usan `uix.timers` cuando Soma lo tiene
|
|
|
|
|
disponible, con fallback nativo solo para uso standalone fuera de UIX.
|
|
|
|
|
- Cobertura nueva para Combobox: selección single/multiple, `inputValue` y
|
|
|
|
|
filtrado de items disabled.
|
|
|
|
|
- Cobertura nueva para DatePicker, DateRangePicker y TimePicker: registro
|
|
|
|
|
runtime, cierre controlado tras selección y escritura de sliders de hora al
|
|
|
|
|
valor compartido.
|
|
|
|
|
- Cobertura nueva para TimeRangePicker: valores por endpoint, sliders y cierre
|
|
|
|
|
al completar ambos extremos.
|
|
|
|
|
- Cobertura nueva para TimeRangeField: validación de rango y foco de label
|
|
|
|
|
via `ActiveDom`.
|
|
|
|
|
- Cobertura nueva para TimeField: validación, sync de segmentos 12h y commit
|
|
|
|
|
solo cuando los segmentos de tiempo renderizados estan completos.
|
|
|
|
|
- Correccion TimeField: el announcer se inicializa con `$effect` en vez de
|
|
|
|
|
`onMount()` dentro de la clase, y `datetime` separa
|
|
|
|
|
`areAllTimeSegmentsFilledDOM(...)` del helper de fecha.
|
|
|
|
|
- Cobertura nueva para DateRangeField: validación de rango y foco de label
|
|
|
|
|
via `ActiveDom`.
|
|
|
|
|
- Cobertura ampliada para DateFieldProvider: validación, sync de segmentos
|
|
|
|
|
date/time y commit solo cuando los segmentos renderizados estan completos.
|
|
|
|
|
- Correccion DateField: el announcer se inicializa con `$effect` en vez de
|
|
|
|
|
`onMount()` dentro de la clase.
|
|
|
|
|
- Cobertura nueva para VirtualList: cálculo de ventana, `scrollToIndex` y
|
|
|
|
|
compensación anti-jump.
|
|
|
|
|
- Correccion VirtualList: la compensación de mediciones dinámicas sobre
|
|
|
|
|
viewports internos pasa por `ActiveDom.scrollTo(...)` y usa
|
|
|
|
|
`scrollOffset + delta` como fuente reactiva.
|
|
|
|
|
- Cobertura nueva para VirtualGrid: cálculo de ventana 2D y `scrollToCell`
|
|
|
|
|
via `ActiveDom`.
|
|
|
|
|
- Cobertura nueva para NumberField: parsing localizable, teclado spinbutton,
|
|
|
|
|
triggers, props ARIA y scrubber.
|
|
|
|
|
- Correccion NumberField: el root expone `dir` efectivo (`prop -> prefs`) en
|
|
|
|
|
lugar del prop crudo.
|
|
|
|
|
- Cobertura nueva para FileUpload: aceptación/rechazo de ficheros, dropzone,
|
|
|
|
|
input oculto, items, progress, remove y clear.
|
|
|
|
|
- Cobertura nueva para ColorField: commit por segmentos, edición hex con
|
|
|
|
|
teclado, selector de formato, input oculto y foco de label via `ActiveDom`.
|
|
|
|
|
- Cobertura nueva para ColorPicker: helpers de canales, trigger/value/hidden,
|
|
|
|
|
area 2D, slider de canal y swatches con commit/cierre.
|
|
|
|
|
- Cobertura nueva para NavigationMenu: timers UIX de apertura/cierre,
|
|
|
|
|
enlace item/trigger/content, foco por teclado, list y link props.
|
|
|
|
|
- Cobertura nueva para TreeGrid: expansión, selección/rango, filas visibles
|
|
|
|
|
bajo ancestros colapsados, navegación, row/cell/header y expand trigger.
|
|
|
|
|
- Cobertura nueva para DropdownMenu: trigger open/close, scoping de items,
|
|
|
|
|
item select, checkbox/radio groups, submenu delayed/open y group/separator.
|
|
|
|
|
- Cobertura nueva para ContextMenu: apertura por `contextmenu` con anchor
|
|
|
|
|
virtual, scoping de items, item select, checkbox/radio, submenu delayed/open
|
|
|
|
|
y group/separator.
|
|
|
|
|
- Cobertura nueva para Menubar: coordinación de menús hermanos, hover-follow,
|
|
|
|
|
navegación horizontal entre triggers y cambio de menú desde content.
|
|
|
|
|
- Cobertura nueva para Listbox: props ARIA root, selección, navegación,
|
|
|
|
|
typeahead, indicador de item y grupos.
|
|
|
|
|
- Cobertura nueva para TreeView: expansión/selección, navegación root,
|
|
|
|
|
typeahead, props de ramas/hojas y partes auxiliares.
|
|
|
|
|
- Cobertura nueva para Accordion: modo single/multiple, eventos open/close
|
|
|
|
|
por item, navegación de triggers y props de header/content.
|
|
|
|
|
- Cobertura nueva para Checkbox: commits check/uncheck, estado indeterminate,
|
|
|
|
|
hidden input y sincronización con CheckboxGroup.
|
|
|
|
|
- Cobertura nueva para RadioGroup: roving tabindex, selección síncrona,
|
|
|
|
|
navegación con auto-select, hidden input y guardas readonly/disabled.
|
|
|
|
|
- Cobertura nueva para Switch: commit-toggle runtime, keyboard, hidden input,
|
|
|
|
|
integración con FieldProvider y thumb.
|
|
|
|
|
- Cobertura nueva para Toggle: commit-toggle runtime, attrs DOM via
|
|
|
|
|
`ActiveDom`, integración con FieldProvider y guardas readonly/disabled.
|
|
|
|
|
- Cobertura nueva para ToggleGroup: modos single/multiple, roving tabindex y
|
|
|
|
|
navegación de items saltando disabled.
|
|
|
|
|
- Cobertura nueva para Tabs: registro de trigger/content, activacion
|
|
|
|
|
automatic/manual, navegacion roving, fallback tab stop y partes
|
|
|
|
|
list/content/indicator.
|
|
|
|
|
- Cobertura nueva para Slider: contrato provider/range/thumb/tick,
|
|
|
|
|
snapping/clamping, drag pointer confirmado y teclado de thumb.
|
|
|
|
|
- Cobertura nueva para Progress y Meter: `data-value/data-min/data-max`
|
|
|
|
|
emitidos por morfo/runtime, estados derivados e indicador sincronizado.
|
|
|
|
|
- Cobertura nueva para Collapsible: refs cruzadas trigger/content, eventos
|
|
|
|
|
`expand/collapse` y guardas disabled.
|
|
|
|
|
- Cobertura nueva para Clipboard: copia via `uix.clipboard`, reset con
|
|
|
|
|
`uix.timers`, labels traducidos/override y errores `onError`.
|
|
|
|
|
- Cobertura nueva para Tooltip: delay/close con `uix.timers`, skip-delay
|
|
|
|
|
de grupo, focus/blur, disabled y partes trigger/content/arrow.
|
|
|
|
|
- Cobertura nueva para Field: wiring de partes/ARIA, input guardado por
|
|
|
|
|
disabled/readonly e integración con parent Form.
|
|
|
|
|
- Cobertura nueva para SearchField: props root/input/clear, input/submit/
|
|
|
|
|
clear, foco y OR-merge con Field.
|
|
|
|
|
- Cobertura nueva para Pagination: rangos/ellipsis, clamp reactivo, slice,
|
|
|
|
|
triggers prev/next, item selected y disabled global.
|
|
|
|
|
- Cobertura nueva para Breadcrumb: label/labelledby, separator, link current
|
|
|
|
|
con mirror al item y ellipsis decorativo/interactivo.
|
|
|
|
|
- Validado por fase:
|
|
|
|
|
- `npm run check` -> 0 errores, 0 warnings.
|
|
|
|
|
- `npm run test` -> 214 archivos, 2190 tests OK.
|
|
|
|
|
- tests focales de Select/Popover/Toast/RangeCalendar -> 11 tests OK.
|
|
|
|
|
- tests focales Dialog/Drawer/Popover/Select -> 10 tests OK.
|
|
|
|
|
- `command-provider.svelte.test.ts` -> 2 tests OK.
|
|
|
|
|
- `$libs/datagrid/table-core.svelte.test.ts` -> 8 tests OK.
|
|
|
|
|
- `$libs/forms/form-core.svelte.test.ts` -> 3 tests OK.
|
|
|
|
|
- `combobox-provider.svelte.test.ts` -> 3 tests OK.
|
|
|
|
|
- tests focales DatePicker/DateRangePicker/TimePicker -> 7 tests OK.
|
|
|
|
|
- `time-range-picker-provider.svelte.test.ts` -> 3 tests OK.
|
|
|
|
|
- `time-range-field-provider.svelte.test.ts` -> 3 tests OK.
|
|
|
|
|
- `time-field-provider.svelte.test.ts` -> 3 tests OK.
|
|
|
|
|
- `date-range-field-provider.svelte.test.ts` -> 3 tests OK.
|
|
|
|
|
- `date-field-provider.svelte.test.ts` -> 7 tests OK.
|
|
|
|
|
- `virtual-list-provider.svelte.test.ts` -> 3 tests OK.
|
|
|
|
|
- `virtual-grid-provider.svelte.test.ts` -> 2 tests OK.
|
|
|
|
|
- `number-field-provider.svelte.test.ts` -> 4 tests OK.
|
|
|
|
|
- `file-upload-provider.svelte.test.ts` -> 4 tests OK.
|
|
|
|
|
- `color-field-provider.svelte.test.ts` -> 4 tests OK.
|
|
|
|
|
- `color-picker-provider.svelte.test.ts` -> 4 tests OK.
|
|
|
|
|
- `navigation-menu-provider.svelte.test.ts` -> 4 tests OK.
|
|
|
|
|
- `tree-grid-provider.svelte.test.ts` -> 4 tests OK.
|
|
|
|
|
- `dropdown-menu-provider.svelte.test.ts` -> 6 tests OK.
|
|
|
|
|
- `context-menu-provider.svelte.test.ts` -> 6 tests OK.
|
|
|
|
|
- `menubar-provider.svelte.test.ts` -> 4 tests OK.
|
|
|
|
|
- `listbox-provider.svelte.test.ts` -> 4 tests OK.
|
|
|
|
|
- `tree-view-provider.svelte.test.ts` -> 4 tests OK.
|
|
|
|
|
- `accordion-provider.svelte.test.ts` -> 4 tests OK.
|
|
|
|
|
- `checkbox-provider.svelte.test.ts` -> 4 tests OK.
|
|
|
|
|
- `radio-group-provider.svelte.test.ts` -> 4 tests OK.
|
|
|
|
|
- `switch-provider.svelte.test.ts` -> 5 tests OK.
|
|
|
|
|
- `toggle-provider.svelte.test.ts` -> 4 tests OK.
|
|
|
|
|
- `toggle-group-provider.svelte.test.ts` -> 4 tests OK.
|
|
|
|
|
- `tabs-provider.svelte.test.ts` -> 4 tests OK.
|
|
|
|
|
- `slider-provider.svelte.test.ts` -> 4 tests OK.
|
|
|
|
|
- `progress-provider.svelte.test.ts` + `meter-provider.svelte.test.ts`
|
|
|
|
|
-> 4 tests OK.
|
|
|
|
|
- `collapsible-provider.svelte.test.ts` -> 3 tests OK.
|
|
|
|
|
- `clipboard-provider.svelte.test.ts` -> 2 tests OK.
|
|
|
|
|
- `tooltip-provider.svelte.test.ts` -> 3 tests OK.
|
|
|
|
|
- `field-provider.svelte.test.ts` -> 3 tests OK.
|
|
|
|
|
- `search-field-provider.svelte.test.ts` -> 3 tests OK.
|
|
|
|
|
- `pagination-provider.svelte.test.ts` -> 3 tests OK.
|
|
|
|
|
- `breadcrumb-provider.svelte.test.ts` -> 3 tests OK.
|
|
|
|
|
- guardia `rg "from './.*provider\\.svelte'" src/uix/soma/components -g 'exports.ts'`
|
|
|
|
|
-> solo queda `select/components/select-provider.svelte`, que es wrapper
|
|
|
|
|
publico, no runtime provider.
|
|
|
|
|
- Commits nuevos empujados:
|
|
|
|
|
- `a3bcb66c` — `Refresh UIX audit follow-up docs`
|
|
|
|
|
- `25870b4e` — `Expand Soma component coverage`
|
|
|
|
|
- `e1a21269` — `Hide internal Soma provider classes from barrels`
|
|
|
|
|
- `4829ce13` — `Move command scorer to shared strings lib`
|
|
|
|
|
- `02c1fb43` — `Move table core to datagrid lib`
|
|
|
|
|
- `d319ec6b` — `Move form core to forms lib`
|
|
|
|
|
- `701f83d6` — `Document Soma coverage and domain lib split`
|
|
|
|
|
- `3050d273` — `Align Select public types and Soma inventory`
|
|
|
|
|
- `eaeebd69` — `Route Soma layer timers through UIX scheduler`
|
|
|
|
|
- `9fa00fa2` — `Move Soma public types out of providers`
|
|
|
|
|
- `05f87dc4` — `Add Combobox provider coverage`
|
|
|
|
|
|
|
|
|
|
- Auditoria UIX post-Soma/Eidos aplicada parcialmente:
|
|
|
|
|
- `SoundChannel` ya no usa `document.addEventListener/removeEventListener`
|
|
|
|
|
directamente para el unlock listener; consume una superficie DOM inyectada
|
|
|
|
|
compatible con `ActiveDom.listen(...)` y `ActiveDom.getDocument(...)`.
|
|
|
|
|
- Se rompe el ciclo type-only `sema/types.ts <-> sema-map.ts` moviendo ids,
|
|
|
|
|
signatures y overrides de canales a `src/uix/sema/channels.ts`.
|
|
|
|
|
- Se rompe el ciclo type-only de Floating moviendo `Side`, `Align`,
|
|
|
|
|
`Boundary`, `SIDE_OPTIONS` y `ALIGN_OPTIONS` a
|
|
|
|
|
`src/uix/soma/layers/floating/placement.ts`.
|
|
|
|
|
- Tests iniciales añadidos para los puntos de mayor riesgo de Soma:
|
|
|
|
|
Dialog, Drawer, Command, Calendar y DateField.
|
|
|
|
|
- Validado:
|
|
|
|
|
- `npm run check` -> 0 errores, 0 warnings.
|
|
|
|
|
- `npx vitest run src/uix/sema src/uix/soma/layers/floating` -> 117 tests OK.
|
|
|
|
|
- `npx vitest run` focal de los 5 nuevos tests Soma -> 16 tests OK.
|
|
|
|
|
- Commits nuevos empujados:
|
|
|
|
|
- `802ebce6` — `Tighten sema channel and floating contracts`
|
|
|
|
|
- `c6d24eee` — `Add high-risk Soma provider tests`
|
|
|
|
|
- `Intent` queda como vocabulario unico en `src/uix/intent.ts`. No existen
|
|
|
|
|
alias `EidosIntent`, `UixIntent`, `ToastIntent` ni `SemaIntent`; Sema usa
|
|
|
|
|
`IntentBinding` / `IntentPolicy` cuando necesita especializar el contrato
|
|
|
|
|
del evento, pero el intent canonico no pertenece a una capa concreta.
|
|
|
|
|
- `MorfoData` valida nombres `data-*`: solo acepta atributos publicos
|
|
|
|
|
lowercase kebab-case; `data-_*` queda reservado para estado privado del
|
|
|
|
|
provider y no puede declararse en morfo.
|
|
|
|
|
- `frontend` queda eliminado del arbol activo: no hay `src/arts/frontend`,
|
|
|
|
|
factory `defineActiveFrontend`, alias `$frontend`, ruta `/active/docs/fend`
|
|
|
|
|
ni servicio `services.frontend`. Las referencias documentales restantes son
|
|
|
|
|
notas explicitas de retirada o usos genericos de la palabra frontend.
|
|
|
|
|
- `themeDimension(...)` y `densityDimension(...)` fueron retiradas del catalogo
|
|
|
|
|
publico de `$prefs`. Las preferencias visuales `theme/mode/density` son
|
|
|
|
|
entradas de `ActiveEidos`; `prefs` mantiene solo dimensiones transversales o
|
|
|
|
|
custom via primitivas genericas.
|
|
|
|
|
- `SemaActiveChannel` fue eliminado. La unica fuente publica para canales es
|
|
|
|
|
`SemaChannelId`.
|
|
|
|
|
- Verificaciones ejecutadas despues de la retirada:
|
|
|
|
|
- `npm run check` -> 0 errores, 0 warnings.
|
|
|
|
|
- `npm run test` -> 165 archivos, 2002 tests OK.
|
|
|
|
|
- Commits nuevos empujados:
|
|
|
|
|
- `a4cbe0c0` — `Tighten intent and morfo contracts`
|
|
|
|
|
- `fbacd113` — `Remove frontend art`
|
|
|
|
|
- `68dd40ef` — `Remove visual prefs dimensions`
|
|
|
|
|
|
|
|
|
|
Actualizacion 2026-05-14:
|
|
|
|
|
|
|
|
|
|
- Revision post-cambios aplicada. La supuesta perdida de proyeccion cross-modal
|
|
|
|
|
queda resuelta como aclaracion de ownership: la proyeccion vive en
|
|
|
|
|
`arts/prefs` mediante `createActivePrefsDomProjection(...)`, no en
|
|
|
|
|
`ActiveUix`.
|
|
|
|
|
- Documentacion de ecosistema actualizada en `src/uix/*` y `src/arts/*`:
|
|
|
|
|
ownership de prefs/proyeccion/Eidos, naming canonico (`langs`, `events`,
|
|
|
|
|
`active-app`, `storage`, `connection`, `session`, `cache`, `timer`,
|
|
|
|
|
`logger`) y marcas historicas en docs de diseno antiguas.
|
|
|
|
|
- Archivos documentales de revision retirados. Las conclusiones vigentes quedan
|
|
|
|
|
absorbidas por `src/uix/active_architecture.md`, los README de capa y
|
|
|
|
|
`src/uix/contracts.ts`.
|
|
|
|
|
- Limpieza Eidos CSS/runtime aplicada: `index.css` ya solo importa fonts,
|
|
|
|
|
`generated/base.css`, `archetypes.css`, `events.css` y recipes activas.
|
|
|
|
|
Se retiraron CSS historicos de `contracts/`, `themes/base/`,
|
|
|
|
|
`tokens/motion.css`, `tokens/index.css` y los token files de componentes.
|
|
|
|
|
- Migracion Eidos recipe tokens aplicada: los aliases `--{component}-*`
|
|
|
|
|
viven en `EidosConfig.recipes`, el tema base los define en
|
|
|
|
|
`src/uix/eidos/lib/recipes/base.ts`, y `generated/base.css` los publica
|
|
|
|
|
desde `npm run generate:eidos-css`.
|
|
|
|
|
- Superficie de consulta de recipes aplicada: `ActiveEidos.listRecipes()` y
|
|
|
|
|
`getRecipeTokens(component)` exponen aliases para editores de theme sin
|
|
|
|
|
inspeccionar CSS ni devolver handles mutables del config interno.
|
|
|
|
|
- La shell `/uix` ya no carga fuentes remotas; reutiliza las fuentes locales
|
|
|
|
|
de Eidos (`Instrument Sans`, `Azeret Mono`) para que las validaciones
|
|
|
|
|
Playwright no dependan de red externa.
|
|
|
|
|
- `src/uix/contracts.test.ts` ahora incluye guardias de regresion para que
|
|
|
|
|
`ActiveUix` no vuelva a bootear Soma/Eidos, los providers Soma no usen
|
|
|
|
|
`registerContract/registerPart`, y la shell `/uix` no escriba `prefs.theme`.
|
|
|
|
|
- Naming `langs`: constantes runtime y diagnosticos ya usan `langs` /
|
|
|
|
|
`langs.mono`; se corrigieron menciones documentales residuales `[lang]` y
|
|
|
|
|
`lang.mono`.
|
|
|
|
|
- Contrato directo fuera de `ActiveUix` aclarado: `EngineSemantic` con visual
|
|
|
|
|
activo necesita `dom` o `projector` y falla con `SemaConfigError` si faltan;
|
|
|
|
|
`ADom` directo solo usa `disabledDom` cuando el caller lo pide.
|
|
|
|
|
- `src/arts/prefs/README.md` reescrito al modelo actual schema-based. Se
|
|
|
|
|
elimina la arquitectura historica de capabilities como guia principal; las
|
|
|
|
|
dimensiones visuales `theme/mode/density` pertenecen a `ActiveEidos`.
|
|
|
|
|
- `src/uix/morfo/README.md` actualizado: fija `translations`, `commonRef`,
|
|
|
|
|
registro via `registerMorfo` y `soma.runtime(...)` como contrato vigente.
|
|
|
|
|
- `frontend` retirado como artefacto: no queda factory, alias ni ruta activa.
|
|
|
|
|
- Validacion global ejecutada: `npm run check`, tests focales UIX/arts y
|
|
|
|
|
`npm run build` pasan. Solo queda el warning de chunks grandes del build.
|
|
|
|
|
- Eidos general queda cerrado sin tocar componentes: no hay `EngineEidos`,
|
|
|
|
|
wrapper `Eidos`, `eidos/engine` ni `eidos/core/headless`; se anade guardia
|
|
|
|
|
de regresion en `contracts.test.ts`.
|
|
|
|
|
- `recipes` queda como `RecipeTokenSet` plano por decision: subir a tipo
|
|
|
|
|
estructurado solo cuando exista builder/consumer real que lo necesite.
|
|
|
|
|
- Commits nuevos empujados:
|
|
|
|
|
- `694eb5c5` — `Clarify prefs projection contract`
|
|
|
|
|
- `223cdf9e` — `Align sema docs with channel ownership`
|
|
|
|
|
- `3dc775f4` — `Update UIX architecture notes`
|
|
|
|
|
- `b1215549` — `Fix UIX docs theme and popover dismiss`
|
|
|
|
|
- `6da10987` — `Prune legacy Eidos CSS runtime`
|
|
|
|
|
- `d822597f` — `Generate Eidos recipe tokens from config`
|
|
|
|
|
- `65958538` — `Expose Eidos recipe token queries`
|
|
|
|
|
- `4233be62` — `Update UIX continuation notes`
|
|
|
|
|
- `2df58074` — `Use local fonts in UIX docs`
|
|
|
|
|
- `8ad04714` — `Refresh UIX architecture docs`
|
|
|
|
|
- `e2ba371b` — `Add UIX architecture regression guards`
|
|
|
|
|
- `71e05765` — `Align langs diagnostic wording`
|
|
|
|
|
- `607dfdbb` — `Clarify direct UIX service contracts`
|
|
|
|
|
- `475ac775` — `Refresh prefs architecture docs`
|
|
|
|
|
- `35958a49` — `Clarify morfo translation contract`
|
|
|
|
|
- `bd37e5dd` — `Clarify legacy frontend density docs`
|
|
|
|
|
- Validado de nuevo:
|
|
|
|
|
- `npx vitest run src/uix/contracts.test.ts src/arts/prefs/test/dom-projection.test.ts src/uix/active-uix/active-uix.svelte.test.ts src/uix/eidos/active-eidos.test.ts src/uix/soma/runtime.svelte.test.ts` -> 79 tests OK.
|
|
|
|
|
- `npx vitest run src/uix/sema/engine.test.ts src/uix/soma/runtime.svelte.test.ts` -> 48 tests OK.
|
|
|
|
|
- `npx vitest run src/uix/eidos/active-eidos-config.test.ts src/uix/eidos/generated-css.test.ts src/uix/eidos/active-eidos.test.ts src/uix/contracts.test.ts` -> 52 tests OK.
|
|
|
|
|
- `npm run check` -> 0 errores, 0 warnings.
|
|
|
|
|
- `npx vitest run src/uix/contracts.test.ts` -> 12 tests OK.
|
|
|
|
|
- `npm run check` tras wording `langs` -> 0 errores, 0 warnings.
|
|
|
|
|
- Playwright `/uix`: toggle dark actualiza `html[data-theme="base-dark"]`,
|
|
|
|
|
`html[data-mode="dark"]` y mantiene `html[data-density="comfortable"]`;
|
|
|
|
|
sin `pageerror`, sin errores de consola y sin `requestfailed`.
|
|
|
|
|
|
|
|
|
|
## Estado validado
|
|
|
|
|
|
|
|
|
|
- `ActiveUix` ya no crea ni conoce `Soma` ni `Eidos`.
|
|
|
|
|
- Solo `ActiveApp` y `createActiveUix(...)` standalone crean servicios compartidos.
|
|
|
|
|
- `attachActiveUix(app)` reutiliza servicios de `ActiveApp` y falla temprano si faltan `langs` o `dom`.
|
|
|
|
|
- El servicio runtime de traducciones se llama `langs`. No confundir:
|
|
|
|
|
- `prefs.language` alimenta `langs`.
|
|
|
|
|
- `prefs.locale` alimenta `format`.
|
|
|
|
|
- `prefs.direction`, `prefs.motion`, `prefs.sound` y `prefs.haptic` se
|
|
|
|
|
proyectan mediante `createActivePrefsDomProjection(...)`.
|
|
|
|
|
- `events` es el nombre publico del motor perceptivo en `ActiveUix`; `semantic` queda solo como payload de `morfo.events[].semantic`.
|
|
|
|
|
- `ActiveEidos` queda aplanado: no existe engine visual separado ni directorio `engine` bajo Eidos.
|
|
|
|
|
- Los helpers de configuracion/render/persistencia de Eidos viven en `src/uix/eidos/lib`.
|
|
|
|
|
- `ActiveEidos` asume configuracion, validacion, contrato CSS, render, persistencia y scope visual.
|
|
|
|
|
- Shells UIX deben pasar modo/densidad visuales a `ActiveEidos` mediante
|
|
|
|
|
`modeSource`/`densitySource`; no escribir `prefs.theme`.
|
|
|
|
|
- Los componentes Eidos siguen congelados salvo orden explicita.
|
|
|
|
|
|
|
|
|
|
Validaciones ejecutadas en esta fase:
|
|
|
|
|
|
|
|
|
|
- `npx vitest run src/uix/eidos/active-eidos.test.ts src/uix/eidos/active-eidos-config.test.ts` -> 37 tests OK.
|
|
|
|
|
- `npx vitest run src/arts/adom/test/active-dom.test.ts src/uix/soma/runtime.svelte.test.ts src/uix/morfo/registry.test.ts src/uix/sema/resolver.test.ts src/uix/sema/chans/sound.test.ts src/uix/sema/chans/visual.test.ts src/uix/eidos/active-eidos.test.ts src/uix/eidos/active-eidos-config.test.ts src/uix/contracts.test.ts` -> 115 tests OK.
|
|
|
|
|
- `npm run check` -> 0 errores, 0 warnings.
|
|
|
|
|
|
|
|
|
|
## Arquitectura acordada
|
|
|
|
|
|
|
|
|
|
La regla central queda asi:
|
|
|
|
|
|
|
|
|
|
```text
|
|
|
|
|
ActiveApp o ActiveUix standalone crean servicios.
|
|
|
|
|
ActiveUix expone servicios y prefs.
|
|
|
|
|
Morfo declara contrato y translations.
|
|
|
|
|
Soma consume ActiveUix/Soma scope y transcribe morfo al DOM via uix.dom.
|
|
|
|
|
Sema/events emite ocurrencias perceptivas; no debe inventar servicios.
|
|
|
|
|
ActiveEidos consume ActiveUix y resuelve config/tokens/CSS runtime.
|
|
|
|
|
Los componentes no crean servicios compartidos.
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
`portal` queda como preferencia/target generico de `ActiveUix`; Soma lo adapta
|
|
|
|
|
a su `portalTo`. No usar nombres como `somaPortalTo` en `ActiveUix`.
|
|
|
|
|
|
|
|
|
|
## P1 cerrado
|
|
|
|
|
|
|
|
|
|
1. Ownership DOM P1 cerrado.
|
|
|
|
|
- Corregido: `TextSelection` ya escribe/restaura `user-select` via `ActiveDom.apply`.
|
|
|
|
|
- Corregido: announcers/live regions de Soma y descripciones ocultas de date/time
|
|
|
|
|
usan `ActiveDom.writeNode/writeText/removeNode`.
|
|
|
|
|
- Correcto: `ActiveUix` prefs, `SomaRuntime`, `VisualChannel`/`DomSignalProjector`
|
|
|
|
|
y `ActiveEidos` usan `ActiveDom`.
|
|
|
|
|
- Barrido P1 sin escrituras directas de produccion restantes; quedan lecturas DOM
|
|
|
|
|
y fixtures de tests.
|
|
|
|
|
2. Tabla de contratos minimos cerrada como codigo/tests:
|
|
|
|
|
`src/uix/contracts.ts` + `src/uix/contracts.test.ts` cubren `ActiveUix`,
|
|
|
|
|
`SomaRuntime`, `EngineSemantic/events`, `ActiveEidos` y `Morfo`.
|
|
|
|
|
3. Sema queda purgado de las slices visuales `motion`, `color` y `presence`.
|
|
|
|
|
El mapa canonico resuelve solo `hold`, `sound` y `haptic`; Eidos reacciona
|
|
|
|
|
visualmente a `data-event-*` y a sus propios tokens CSS.
|
|
|
|
|
4. Naming `langs` revisado en mensajes/docs/tipos principales. Quedan solo
|
|
|
|
|
usos tecnicos validos (`<script lang="ts">`, `v.langRef(...)`) o menciones
|
|
|
|
|
historicas explicitas.
|
|
|
|
|
5. `attachActiveUix(app)` no crea sustitutos si faltan servicios requeridos.
|
|
|
|
|
6. `SoundChannel` ya no registra listeners globales en el constructor; prima
|
|
|
|
|
el contexto en `prepare()` solo cuando una senal sonora entra en el gesto.
|
|
|
|
|
7. `createActivePrefsDomProjection(...)` proyecta `dir`, `data-motion`,
|
|
|
|
|
`data-sound` y `data-haptic`; `ActiveEidos` proyecta `data-theme`,
|
|
|
|
|
`data-mode` y `data-density`.
|
|
|
|
|
8. `SomaRuntime`, `registerMorfo` y `applyMapOverrides` tienen optimizaciones
|
|
|
|
|
basicas de churn/copia aplicadas.
|
|
|
|
|
9. `frontend` retirado; `ActiveApp` ya no puede declarar un servicio visual
|
|
|
|
|
shell heredado.
|
|
|
|
|
10. `themeDimension`/`densityDimension` retiradas; el catalogo `$prefs` no
|
|
|
|
|
ofrece dimensiones visuales UIX.
|
|
|
|
|
|
|
|
|
|
## Pendiente P2
|
|
|
|
|
|
|
|
|
|
1. Soma: la API canonica publica de parte es `runtime.part(...)`.
|
|
|
|
|
`registerContract(...)` ya no se llama desde Soma; `registerMorfo(...)` lo
|
|
|
|
|
registra todo. `createAttrs(...)` queda solo como helper tipado para
|
|
|
|
|
`querySelector`/tooling, no como mecanismo runtime.
|
|
|
|
|
2. Morfo: los atributos `data-*` con valor libre ya se modelan con
|
|
|
|
|
`emit: 'value'`; `progress/meter` declaran `data-value`, `data-min` y
|
|
|
|
|
`data-max` en morfo y `SomaRuntime` lo cubre con test dedicado.
|
|
|
|
|
3. Morfo translations: mantener `translations` en el morfo, `commonRef` para
|
|
|
|
|
textos compartidos y `langs.ts` solo como constantes imperativas legacy.
|
|
|
|
|
4. Frontend/ActiveApp: cerrado. `frontend` no existe como artefacto activo ni
|
|
|
|
|
como servicio opt-in. Las preferencias transversales se proyectan desde
|
|
|
|
|
`arts/prefs`; las visuales pertenecen a `ActiveEidos`.
|
|
|
|
|
5. ActiveApp docs: actualizado que `langs`, `dom`, `format` y `events` son
|
|
|
|
|
servicios opt-in; no hay servicio visual shell heredado.
|
|
|
|
|
|
|
|
|
|
## Eidos cerrado para modulo general
|
|
|
|
|
|
|
|
|
|
1. Primitivas visuales sin tocar componentes: `layout` ya queda incorporado
|
|
|
|
|
al `EidosConfig` con `containerWidth`, `containerPaddingInline`,
|
|
|
|
|
`contentWidth` y `aspectRatio`, y se genera en CSS/contrato como
|
|
|
|
|
`--container-width-*`, `--container-padding-inline`, `--content-width-*`
|
|
|
|
|
y `--aspect-ratio-*`.
|
|
|
|
|
2. Mantener `EidosConfig` como authoring object persistible y CSS-only como
|
|
|
|
|
modo valido mediante `themeSource: 'css'`.
|
|
|
|
|
3. Density queda como primitive bridge: `scale`, `spaceScale`, `controlScale`
|
|
|
|
|
y `contentScale` para `compact`, `comfortable`, `spacious`; `ActiveEidos`
|
|
|
|
|
proyecta `data-density` y Eidos publica aliases activos como
|
|
|
|
|
`--density-space-scale`.
|
|
|
|
|
4. `src/uix/eidos/generated/base.css` queda como primer artefacto CSS generado
|
|
|
|
|
desde `EidosConfig` base mediante `npm run generate:eidos-css`; `index.css`
|
|
|
|
|
lo importa como foundation estatica.
|
|
|
|
|
5. Cerrado: los tokens per-component de las recipes activas quedan como
|
|
|
|
|
aliases estables y authorables en `EidosConfig.recipes`.
|
|
|
|
|
6. Los CSS historicos de `contracts/` y `themes/base/` quedan retirados del
|
|
|
|
|
arbol activo. El contrato se publica desde `ActiveEidos.getCssContract()` /
|
|
|
|
|
`renderContractCss()` y el base desde `generated/base.css`.
|
|
|
|
|
7. `tokens/` ya no forma parte del entrypoint estatico. Las recipes CSS
|
|
|
|
|
consumen los mismos custom properties, pero los valores salen de
|
|
|
|
|
`generated/base.css`.
|
|
|
|
|
8. `ActiveEidos.listRecipes()` y `getRecipeTokens(component)` exponen los
|
|
|
|
|
aliases para editores de theme sin leer CSS. El tipado plano de `recipes`
|
|
|
|
|
es intencional mientras no haya builder/consumer estructurado.
|
|
|
|
|
9. No reintroducir engine visual separado, carpeta `engine`, ni wrapper `Eidos` sin
|
|
|
|
|
contrato propio.
|
|
|
|
|
|
|
|
|
|
## Pendiente de limpieza
|
|
|
|
|
|
|
|
|
|
- Validacion navegador `/uix` cerrada despues de mover recipe tokens y retirar
|
|
|
|
|
fuentes remotas: carga sin `requestfailed`, sin errores de consola y el
|
|
|
|
|
toggle dark sigue aplicando `data-theme`, `data-mode` y estilos visuales.
|
|
|
|
|
- Siguiente foco recomendado: reauditar componentes Eidos option C solo cuando
|
|
|
|
|
se autorice explicitamente. No mezclar esa fase con runtime ni arquitectura
|
|
|
|
|
general.
|
|
|
|
|
- Warnings de toast resueltos; `npm run check` queda en 0 errores / 0 warnings.
|
|
|
|
|
- No commitear logs temporales: `.codex-vite-dialog*.log`, `debug.log`, `md`.
|
|
|
|
|
- Antes de seguir con componentes, releer `src/uix/active_architecture.md`,
|
|
|
|
|
`src/uix/active-uix/README.md`, `src/uix/eidos/README.md`,
|
|
|
|
|
`src/uix/soma/README.md` y este archivo.
|