# Continue Fecha de corte: 2026-05-17. Rama: `active-uix`. Actualizacion Eidos component migration 2026-05-17: - Inicio de la migracion Soma -> Eidos siguiendo `soma/COMPONENT_GUIDE.md` y `eidos/components/README.md`. - Componentes migrados: - `Progress`: root visual `progress.svelte`, `Progress.Indicator`, `progress.css`, `types.ts` e `index.ts` con disciplined option C. - `Meter`: root visual `meter.svelte`, `Meter.Indicator`, `meter.css`, `types.ts` e `index.ts` con disciplined option C. - Decisiones aplicadas: - Eidos no crea comportamiento: ambos wrappers envuelven `Provider` e `Indicator` publicos de Soma. - La unica prop visual anadida es `size?: ResponsiveProp<'sm' | 'md' | 'lg'>`, resuelta con `ActiveEidos.resolve(...)` y proyectada como `data-size`. - `Progress` usa el `data-state` de Soma (`indeterminate`, `loading`, `loaded`) para cargar/terminar/indeterminado. - `Meter` usa el `data-state` de Soma (`below`, `optimum`, `above`) para zonas visuales; no se anade intent ni color en Eidos. - Los tokens base viven en `THEME_BASE_RECIPE_TOKENS` y se regenero `src/uix/eidos/generated/base.css`. - Guardias actualizadas: - `component-visual-attrs.test.ts` protege `data-size` en `Progress` y `Meter`. - `scripts/eidos-lint-all.ts` reconoce `data-floating-wrapper` como marcador publico actual y retira el sufijo legacy `flat`. - `components/README.md` refleja `meter` y `progress` como migrados. - Validado: - `npx vitest run src/uix/eidos` -> 7 archivos, 84 tests OK. - `npm run check` -> 0 errores, 0 warnings. - `node --import tsx/esm scripts/eidos-lint-all.ts` -> 0 invalid, sin drift hotspots. - Segunda tanda del mismo bloque: - `Slider`: root visual `slider.svelte`, partes `Range`, `Thumb`, `Tick`, `slider.css`, `types.ts` e `index.ts` con disciplined option C. - La receta usa las posiciones inline calculadas por Soma y solo define track, range, thumb, ticks, foco, disabled y size visual. - `component-visual-attrs.test.ts`, `components/README.md`, `THEME_BASE_RECIPE_TOKENS`, `index.css` y `generated/base.css` quedan actualizados. - Validado despues de `Slider`: - `npx vitest run src/uix/eidos` -> 7 archivos, 84 tests OK. - `npm run check` -> 0 errores, 0 warnings. - `node --import tsx/esm scripts/eidos-lint-all.ts` -> 0 invalid, sin drift hotspots. - Tercera tanda del mismo bloque: - `Pagination`: root visual `pagination.svelte`, partes `PrevTrigger`, `NextTrigger`, `Item`, `Ellipsis`, `pagination.css`, `types.ts` e `index.ts`. - El root conserva el snippet de Soma con `{ pages, totalPages }` y solo anade `size` visual resuelto por `ActiveEidos`. - La receta cubre controles, estado selected, disabled, ellipsis y focus. - Validado despues de `Pagination`: - `npx vitest run src/uix/eidos` -> 7 archivos, 84 tests OK. - `npm run check` -> 0 errores, 0 warnings. - `node --import tsx/esm scripts/eidos-lint-all.ts` -> 0 invalid, sin drift hotspots. - Cuarta tanda del mismo bloque: - `RatingGroup`: root visual `rating-group.svelte`, parte `Item`, `rating-group.css`, `types.ts` e `index.ts`. - No se inventa icono/star por defecto ni API nueva; el wrapper conserva los snippets de Soma (`items` en root y `state` en item) y la receta estiliza `active`, `partial`, `inactive`, foco, vertical/horizontal y disabled. - Validado despues de `RatingGroup`: - `npx vitest run src/uix/eidos` -> 7 archivos, 84 tests OK. - `npm run check` -> 0 errores, 0 warnings. - `node --import tsx/esm scripts/eidos-lint-all.ts` -> 0 invalid, sin drift hotspots. - Quinta tanda del mismo bloque: - `SearchField`: root visual `search-field.svelte`, partes `Input`, `ClearTrigger`, `search-field.css`, `types.ts` e `index.ts`. - El wrapper conserva el snippet de Soma (`value`, `isEmpty`, `isFocused`, `clear`) y solo anade `size`. - La receta cubre contenedor, input, clear trigger, focused, invalid, empty y disabled. - Validado despues de `SearchField`: - `npx vitest run src/uix/eidos` -> 7 archivos, 84 tests OK. - `npm run check` -> 0 errores, 0 warnings. - `node --import tsx/esm scripts/eidos-lint-all.ts` -> 0 invalid, sin drift hotspots. - Siguiente bloque sugerido: - Migrar otro grupo de bajo riesgo desde Soma a Eidos: candidatos reales por morfo/soma existentes son `number-field`, `field` o `toolbar`. - Antes de tocar componentes grandes (`select`, `combobox`, `calendar`, `date-field`) conviene fijar una tabla por componente: partes Soma, props visuales Eidos, recipe tokens y attrs esperados. Actualizacion Eidos components audit 2026-05-17: - Se acometieron los hallazgos autorizados sobre `src/uix/eidos/components` sin tocar demos ni rutas `web/routes/uix`: - `Tabs` instala su contexto visual de forma sincronica durante init, no en `$effect`; los hijos `Tabs.Content` ya no pueden inicializar sin contexto. - `Tabs.Indicator` deja de observarse a si mismo con `ResizeObserver`, para evitar loops de medida provocados por sus propias escrituras inline. - `Avatar.Image` ya no arranca oculto cuando hay `src`; la visibilidad queda derivada de `src` y de la ultima URL fallida. - `Accordion.Trigger` ya no contiene `