27 KiB
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,DrawerProvideryPopoverProviderdejan de exportarse desde los barrels publicos; los wrappers siguen usandolas por import directo. computeCommandScoresigue reexportado desde Command por DX, pero el algoritmo vive comocomputeFuzzyScoreensrc/libs/strings.table-corese mueve asrc/libs/datagridcon su test.form-corese mueve asrc/libs/forms, usa el Standard Schema comun desrc/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/ScrollAlignmenty el resto de tipos publicos de componentes salen detypes.ts; los barrels ya no exportan contratos desde*-provider.svelte.ts(excepto el wrapper Svelte publico de Select).DismissalySafePolygonusanuix.timerscuando Soma lo tiene disponible, con fallback nativo solo para uso standalone fuera de UIX.- Cobertura nueva para Combobox: selección single/multiple,
inputValuey 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
$effecten vez deonMount()dentro de la clase, ydatetimeseparaareAllTimeSegmentsFilledDOM(...)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
$effecten vez deonMount()dentro de la clase. - Cobertura nueva para VirtualList: cálculo de ventana,
scrollToIndexy compensación anti-jump. - Correccion VirtualList: la compensación de mediciones dinámicas sobre
viewports internos pasa por
ActiveDom.scrollTo(...)y usascrollOffset + deltacomo fuente reactiva. - Cobertura nueva para VirtualGrid: cálculo de ventana 2D y
scrollToCellviaActiveDom. - Cobertura nueva para NumberField: parsing localizable, teclado spinbutton, triggers, props ARIA y scrubber.
- Correccion NumberField: el root expone
direfectivo (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
contextmenucon 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-maxemitidos por morfo/runtime, estados derivados e indicador sincronizado. - Cobertura nueva para Collapsible: refs cruzadas trigger/content, eventos
expand/collapsey guardas disabled. - Cobertura nueva para Clipboard: copia via
uix.clipboard, reset conuix.timers, labels traducidos/override y erroresonError. - 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.
- Cobertura nueva para Toolbar: roving focus, focusin, group single/multiple y separator.
- Cobertura nueva para Stepper: conteo/estado de steps, attrs runtime, selección lineal/no lineal, teclado y prev/next/completed.
- Cobertura nueva para ScrollArea: medición de overflow, viewport, visibilidad/timers de scrollbar, track click, thumb y corner.
- Cobertura nueva para Splitter: registro de paneles, clamp, collapse/expand y resize por pointer/teclado con attrs ARIA/data.
- Cobertura nueva para PinInput: props del input oculto, merge con Field, patrón/paste, completion y estado de celdas/caret.
- Cobertura nueva para RatingGroup: slider attrs, merge con Field, half hover/click, clearable y teclado LTR/RTL.
- Cobertura nueva para TagGroup: labels/root grid, roving por DOM renderizado, selección/removal, link y remove button.
- Cobertura nueva para Announce: alternancia polite/assertive, timers UIX, regiones ARIA declarativas y uso standalone.
- Cobertura nueva para Feed: attrs APG feed/article/title, navegación PageUp/PageDown, threads anidados y sentinel IntersectionObserver.
- Cobertura nueva para TagsInput: add/paste/blur, navegación de tags, delete/clear triggers y props de input/control.
- Cobertura nueva para Editable: activación preview/trigger, foco via
ActiveDom, commit/cancel por teclado/blur y guards disabled/readonly. - Cobertura nueva para AlertDialog: contratos action/cancel, labels traducidos/override y cierre delegado al Dialog base.
- Cobertura nueva para Carousel: detección de slides, navegación por
trigger/teclado, props de partes e intervalos autoplay via
uix.timers. - Validado por fase:
npm run check-> 0 errores, 0 warnings.npm run test-> 227 archivos, 2229 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.toolbar-provider.svelte.test.ts-> 3 tests OK.stepper-provider.svelte.test.ts-> 3 tests OK.scroll-area-provider.svelte.test.ts-> 3 tests OK.splitter-provider.svelte.test.ts-> 3 tests OK.pin-input-provider.svelte.test.ts-> 3 tests OK.rating-group-provider.svelte.test.ts-> 3 tests OK.tag-group-provider.svelte.test.ts-> 3 tests OK.announce-provider.svelte.test.ts-> 3 tests OK.feed-provider.svelte.test.ts-> 3 tests OK.tags-input-provider.svelte.test.ts-> 3 tests OK.editable-provider.svelte.test.ts-> 3 tests OK.alert-dialog-provider.svelte.test.ts-> 2 tests OK.carousel-provider.svelte.test.ts-> 3 tests OK.- guardia
rg "from './.*provider\\.svelte'" src/uix/soma/components -g 'exports.ts'-> solo quedaselect/components/select-provider.svelte, que es wrapper publico, no runtime provider.
- Commits nuevos empujados:
a3bcb66c—Refresh UIX audit follow-up docs25870b4e—Expand Soma component coveragee1a21269—Hide internal Soma provider classes from barrels4829ce13—Move command scorer to shared strings lib02c1fb43—Move table core to datagrid libd319ec6b—Move form core to forms lib701f83d6—Document Soma coverage and domain lib split3050d273—Align Select public types and Soma inventoryeaeebd69—Route Soma layer timers through UIX scheduler9fa00fa2—Move Soma public types out of providers05f87dc4—Add Combobox provider coverage
-
Auditoria UIX post-Soma/Eidos aplicada parcialmente:
SoundChannelya no usadocument.addEventListener/removeEventListenerdirectamente para el unlock listener; consume una superficie DOM inyectada compatible conActiveDom.listen(...)yActiveDom.getDocument(...).- Se rompe el ciclo type-only
sema/types.ts <-> sema-map.tsmoviendo ids, signatures y overrides de canales asrc/uix/sema/channels.ts. - Se rompe el ciclo type-only de Floating moviendo
Side,Align,Boundary,SIDE_OPTIONSyALIGN_OPTIONSasrc/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 runfocal de los 5 nuevos tests Soma -> 16 tests OK.
- Commits nuevos empujados:
802ebce6—Tighten sema channel and floating contractsc6d24eee—Add high-risk Soma provider tests
-
Intentqueda como vocabulario unico ensrc/uix/intent.ts. No existen aliasEidosIntent,UixIntent,ToastIntentniSemaIntent; Sema usaIntentBinding/IntentPolicycuando necesita especializar el contrato del evento, pero el intent canonico no pertenece a una capa concreta. -
MorfoDatavalida nombresdata-*: solo acepta atributos publicos lowercase kebab-case;data-_*queda reservado para estado privado del provider y no puede declararse en morfo. -
frontendqueda eliminado del arbol activo: no haysrc/arts/frontend, factorydefineActiveFrontend, alias$frontend, ruta/active/docs/fendni servicioservices.frontend. Las referencias documentales restantes son notas explicitas de retirada o usos genericos de la palabra frontend. -
themeDimension(...)ydensityDimension(...)fueron retiradas del catalogo publico de$prefs. Las preferencias visualestheme/mode/densityson entradas deActiveEidos;prefsmantiene solo dimensiones transversales o custom via primitivas genericas. -
SemaActiveChannelfue eliminado. La unica fuente publica para canales esSemaChannelId. -
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 contractsfbacd113—Remove frontend art68dd40ef—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/prefsmediantecreateActivePrefsDomProjection(...), no enActiveUix. - Documentacion de ecosistema actualizada en
src/uix/*ysrc/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 ysrc/uix/contracts.ts. - Limpieza Eidos CSS/runtime aplicada:
index.cssya solo importa fonts,generated/base.css,archetypes.css,events.cssy recipes activas. Se retiraron CSS historicos decontracts/,themes/base/,tokens/motion.css,tokens/index.cssy los token files de componentes. - Migracion Eidos recipe tokens aplicada: los aliases
--{component}-*viven enEidosConfig.recipes, el tema base los define ensrc/uix/eidos/lib/recipes/base.ts, ygenerated/base.csslos publica desdenpm run generate:eidos-css. - Superficie de consulta de recipes aplicada:
ActiveEidos.listRecipes()ygetRecipeTokens(component)exponen aliases para editores de theme sin inspeccionar CSS ni devolver handles mutables del config interno. - La shell
/uixya 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.tsahora incluye guardias de regresion para queActiveUixno vuelva a bootear Soma/Eidos, los providers Soma no usenregisterContract/registerPart, y la shell/uixno escribaprefs.theme.- Naming
langs: constantes runtime y diagnosticos ya usanlangs/langs.mono; se corrigieron menciones documentales residuales[lang]ylang.mono. - Contrato directo fuera de
ActiveUixaclarado:EngineSemanticcon visual activo necesitadomoprojectory falla conSemaConfigErrorsi faltan;ADomdirecto solo usadisabledDomcuando el caller lo pide. src/arts/prefs/README.mdreescrito al modelo actual schema-based. Se elimina la arquitectura historica de capabilities como guia principal; las dimensiones visualestheme/mode/densitypertenecen aActiveEidos.src/uix/morfo/README.mdactualizado: fijatranslations,commonRef, registro viaregisterMorfoysoma.runtime(...)como contrato vigente.frontendretirado como artefacto: no queda factory, alias ni ruta activa.- Validacion global ejecutada:
npm run check, tests focales UIX/arts ynpm run buildpasan. Solo queda el warning de chunks grandes del build. - Eidos general queda cerrado sin tocar componentes: no hay
EngineEidos, wrapperEidos,eidos/enginenieidos/core/headless; se anade guardia de regresion encontracts.test.ts. recipesqueda comoRecipeTokenSetplano por decision: subir a tipo estructurado solo cuando exista builder/consumer real que lo necesite.- Commits nuevos empujados:
694eb5c5—Clarify prefs projection contract223cdf9e—Align sema docs with channel ownership3dc775f4—Update UIX architecture notesb1215549—Fix UIX docs theme and popover dismiss6da10987—Prune legacy Eidos CSS runtimed822597f—Generate Eidos recipe tokens from config65958538—Expose Eidos recipe token queries4233be62—Update UIX continuation notes2df58074—Use local fonts in UIX docs8ad04714—Refresh UIX architecture docse2ba371b—Add UIX architecture regression guards71e05765—Align langs diagnostic wording607dfdbb—Clarify direct UIX service contracts475ac775—Refresh prefs architecture docs35958a49—Clarify morfo translation contractbd37e5dd—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 checktras wordinglangs-> 0 errores, 0 warnings.- Playwright
/uix: toggle dark actualizahtml[data-theme="base-dark"],html[data-mode="dark"]y mantienehtml[data-density="comfortable"]; sinpageerror, sin errores de consola y sinrequestfailed.
Estado validado
ActiveUixya no crea ni conoceSomaniEidos.- Solo
ActiveAppycreateActiveUix(...)standalone crean servicios compartidos. attachActiveUix(app)reutiliza servicios deActiveAppy falla temprano si faltanlangsodom.- El servicio runtime de traducciones se llama
langs. No confundir:prefs.languagealimentalangs.prefs.localealimentaformat.prefs.direction,prefs.motion,prefs.soundyprefs.hapticse proyectan mediantecreateActivePrefsDomProjection(...).
eventses el nombre publico del motor perceptivo enActiveUix;semanticqueda solo como payload demorfo.events[].semantic.ActiveEidosqueda aplanado: no existe engine visual separado ni directorioenginebajo Eidos.- Los helpers de configuracion/render/persistencia de Eidos viven en
src/uix/eidos/lib. ActiveEidosasume configuracion, validacion, contrato CSS, render, persistencia y scope visual.- Shells UIX deben pasar modo/densidad visuales a
ActiveEidosmediantemodeSource/densitySource; no escribirprefs.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:
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
- Ownership DOM P1 cerrado.
- Corregido:
TextSelectionya escribe/restaurauser-selectviaActiveDom.apply. - Corregido: announcers/live regions de Soma y descripciones ocultas de date/time
usan
ActiveDom.writeNode/writeText/removeNode. - Correcto:
ActiveUixprefs,SomaRuntime,VisualChannel/DomSignalProjectoryActiveEidosusanActiveDom. - Barrido P1 sin escrituras directas de produccion restantes; quedan lecturas DOM y fixtures de tests.
- Corregido:
- Tabla de contratos minimos cerrada como codigo/tests:
src/uix/contracts.ts+src/uix/contracts.test.tscubrenActiveUix,SomaRuntime,EngineSemantic/events,ActiveEidosyMorfo. - Sema queda purgado de las slices visuales
motion,colorypresence. El mapa canonico resuelve solohold,soundyhaptic; Eidos reacciona visualmente adata-event-*y a sus propios tokens CSS. - Naming
langsrevisado en mensajes/docs/tipos principales. Quedan solo usos tecnicos validos (<script lang="ts">,v.langRef(...)) o menciones historicas explicitas. attachActiveUix(app)no crea sustitutos si faltan servicios requeridos.SoundChannelya no registra listeners globales en el constructor; prima el contexto enprepare()solo cuando una senal sonora entra en el gesto.createActivePrefsDomProjection(...)proyectadir,data-motion,data-soundydata-haptic;ActiveEidosproyectadata-theme,data-modeydata-density.SomaRuntime,registerMorfoyapplyMapOverridestienen optimizaciones basicas de churn/copia aplicadas.frontendretirado;ActiveAppya no puede declarar un servicio visual shell heredado.themeDimension/densityDimensionretiradas; el catalogo$prefsno ofrece dimensiones visuales UIX.
Pendiente P2
- 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 paraquerySelector/tooling, no como mecanismo runtime. - Morfo: los atributos
data-*con valor libre ya se modelan conemit: 'value';progress/meterdeclarandata-value,data-minydata-maxen morfo ySomaRuntimelo cubre con test dedicado. - Morfo translations: mantener
translationsen el morfo,commonRefpara textos compartidos ylangs.tssolo como constantes imperativas legacy. - Frontend/ActiveApp: cerrado.
frontendno existe como artefacto activo ni como servicio opt-in. Las preferencias transversales se proyectan desdearts/prefs; las visuales pertenecen aActiveEidos. - ActiveApp docs: actualizado que
langs,dom,formatyeventsson servicios opt-in; no hay servicio visual shell heredado.
Eidos cerrado para modulo general
- Primitivas visuales sin tocar componentes:
layoutya queda incorporado alEidosConfigconcontainerWidth,containerPaddingInline,contentWidthyaspectRatio, y se genera en CSS/contrato como--container-width-*,--container-padding-inline,--content-width-*y--aspect-ratio-*. - Mantener
EidosConfigcomo authoring object persistible y CSS-only como modo valido mediantethemeSource: 'css'. - Density queda como primitive bridge:
scale,spaceScale,controlScaleycontentScaleparacompact,comfortable,spacious;ActiveEidosproyectadata-densityy Eidos publica aliases activos como--density-space-scale. src/uix/eidos/generated/base.cssqueda como primer artefacto CSS generado desdeEidosConfigbase mediantenpm run generate:eidos-css;index.csslo importa como foundation estatica.- Cerrado: los tokens per-component de las recipes activas quedan como
aliases estables y authorables en
EidosConfig.recipes. - Los CSS historicos de
contracts/ythemes/base/quedan retirados del arbol activo. El contrato se publica desdeActiveEidos.getCssContract()/renderContractCss()y el base desdegenerated/base.css. tokens/ya no forma parte del entrypoint estatico. Las recipes CSS consumen los mismos custom properties, pero los valores salen degenerated/base.css.ActiveEidos.listRecipes()ygetRecipeTokens(component)exponen los aliases para editores de theme sin leer CSS. El tipado plano derecipeses intencional mientras no haya builder/consumer estructurado.- No reintroducir engine visual separado, carpeta
engine, ni wrapperEidossin contrato propio.
Pendiente de limpieza
- Validacion navegador
/uixcerrada despues de mover recipe tokens y retirar fuentes remotas: carga sinrequestfailed, sin errores de consola y el toggle dark sigue aplicandodata-theme,data-modey 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 checkqueda 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.mdy este archivo.