diff --git a/continue.md b/continue.md index c4926bd01..45c9ff216 100644 --- a/continue.md +++ b/continue.md @@ -101,6 +101,33 @@ Actualizacion Eidos recipes 2026-05-16: - Revisar tokens declarados pero no usados para separar: reserva doctrinal intencional vs residuo de CSS legacy. +Actualizacion Eidos auditoria Kimi 2026-05-16: + +- Hallazgos corregidos: + - `tabs-indicator.svelte` pasa de `onMount` a `$effect` con cleanup ligado + al `ref`. Nota: `onMount` no es incompatible con Svelte 5, pero `$effect` + encaja mejor aqui porque el observer depende del elemento enlazado. + - Icono `folder-root.svelte` exportado como `FolderRoot` y catalogado como + `folder-root` / `FolderRoot`; se elimina el falso `FolderProvider`. + - Comentario de `toggle.svelte` corregido: Eidos expone ``, no + ``. + - Helpers repetidos de `eidos/lib` centralizados en `utils.ts`: + `clonePlain`, `isPlainRecord`, `hasOwn`, `toKebab`. + - `isPlainRecord` queda unificado como objeto literal o null-prototype; no + acepta arrays ni instancias de clase. +- Hallazgos evaluados pero no aplicados: + - `dialog.svelte` y `drawer.svelte` no necesitan `data-size` en el root: + sus props visuales viven en `Content`; `variant`/`direction` son headless + y ya los proyecta Soma/Morfo. + - `icon.svelte` mantiene `class` como prop DOM idiomatica; cambiar a + `className` seria menos natural en Svelte y no resuelve un bug real. + - `StyleBlockManager`, builder de recipes y action separada para Tabs + quedan como refactors posibles, no P0/P1. +- Validacion: + - `npm run check` -> 0 errores, 0 warnings. + - `npx vitest run src/uix/eidos` -> 4 archivos, 56 tests OK. + - `npm run test` -> 233 archivos, 2270 tests OK. + Actualizacion 2026-05-16: - Barrido de wrappers publicos Soma frente a providers cerrado: diff --git a/src/uix/eidos/components/icon/categories.ts b/src/uix/eidos/components/icon/categories.ts index c6925d159..604d7d878 100644 --- a/src/uix/eidos/components/icon/categories.ts +++ b/src/uix/eidos/components/icon/categories.ts @@ -950,7 +950,7 @@ export const iconCategories: IconCategory[] = [ { name: 'folder-dot', pascal: 'FolderDot' }, { name: 'folder-kanban', pascal: 'FolderKanban' }, { name: 'folder-open-dot', pascal: 'FolderOpenDot' }, - { name: 'folder-provider', pascal: 'FolderProvider' }, + { name: 'folder-root', pascal: 'FolderRoot' }, { name: 'form', pascal: 'Form' }, { name: 'gallery-horizontal', pascal: 'GalleryHorizontal' }, { name: 'gallery-horizontal-end', pascal: 'GalleryHorizontalEnd' }, @@ -1425,7 +1425,7 @@ export const iconCategories: IconCategory[] = [ { name: 'folder-output', pascal: 'FolderOutput' }, { name: 'folder-pen', pascal: 'FolderPen' }, { name: 'folder-plus', pascal: 'FolderPlus' }, - { name: 'folder-provider', pascal: 'FolderProvider' }, + { name: 'folder-root', pascal: 'FolderRoot' }, { name: 'folder-search', pascal: 'FolderSearch' }, { name: 'folder-search-2', pascal: 'FolderSearch2' }, { name: 'folder-symlink', pascal: 'FolderSymlink' }, diff --git a/src/uix/eidos/components/icon/index.ts b/src/uix/eidos/components/icon/index.ts index 946bdaf0a..72f97e590 100644 --- a/src/uix/eidos/components/icon/index.ts +++ b/src/uix/eidos/components/icon/index.ts @@ -706,7 +706,7 @@ export { default as FolderOpenDot } from './lib/folder-open-dot.svelte'; export { default as FolderOutput } from './lib/folder-output.svelte'; export { default as FolderPen } from './lib/folder-pen.svelte'; export { default as FolderPlus } from './lib/folder-plus.svelte'; -export { default as FolderProvider } from './lib/folder-root.svelte'; +export { default as FolderRoot } from './lib/folder-root.svelte'; export { default as FolderSearch } from './lib/folder-search.svelte'; export { default as FolderSearch2 } from './lib/folder-search-2.svelte'; export { default as FolderSymlink } from './lib/folder-symlink.svelte'; diff --git a/src/uix/eidos/components/tabs/tabs-indicator.svelte b/src/uix/eidos/components/tabs/tabs-indicator.svelte index ab69a0b08..4bec20897 100644 --- a/src/uix/eidos/components/tabs/tabs-indicator.svelte +++ b/src/uix/eidos/components/tabs/tabs-indicator.svelte @@ -15,7 +15,6 @@ * `prefers-reduced-motion: reduce` by skipping the transition (still * snaps to the active trigger). */ - import { onMount } from 'svelte'; import { composeInlineStyle } from '$uix/eidos/lib/style'; import * as Tabs from '$soma/components/tabs'; import type { TabsIndicatorProps } from './types'; @@ -54,7 +53,7 @@ ); const mergedStyle = $derived(composeInlineStyle(style, geometryStyle)); - onMount(() => { + $effect(() => { const el = ref; if (!el) return; const list = el.parentElement; @@ -78,7 +77,10 @@ return () => { mo.disconnect(); ro.disconnect(); - if (rafId !== null) cancelAnimationFrame(rafId); + if (rafId !== null) { + cancelAnimationFrame(rafId); + rafId = null; + } }; }); diff --git a/src/uix/eidos/components/toggle/toggle.svelte b/src/uix/eidos/components/toggle/toggle.svelte index bbb6a8d5f..3d55b9462 100644 --- a/src/uix/eidos/components/toggle/toggle.svelte +++ b/src/uix/eidos/components/toggle/toggle.svelte @@ -1,6 +1,6 @@