From b906dd4077d2261f1b1dce9e0ca360d72e54db90 Mon Sep 17 00:00:00 2001 From: dev Date: Mon, 3 Aug 2026 18:25:48 +0200 Subject: [PATCH] fix(direction): el atributo `dir` se estampaba VACIO cuando nadie lo afirmaba MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit El contrato de `013ceac57` dice que `dir` se OMITE cuando nadie ha afirmado una direccion. `6.5` habia visto `dir=""` en sidebar y tree-view sin averiguar de donde salia. Es el shorthand `{dir}`: para `dir` Svelte emite una asignacion de PROPIEDAD ademas del atributo, y con `undefined` el resultado es la cadena vacia en vez de la omision. Atrapado con un trap sobre `setAttribute` + el descriptor de la propiedad: dos escrituras, la segunda por propiedad. No estaba en el SSR (`dir=""` no aparece ni una vez en el HTML servido) — lo escribia el cliente al hidratar. Un valor invalido HEREDA, asi que nada pintaba mal; pero contradice la letra del contrato y hace que `[dir]` matchee. Arreglado con spread condicional, que si omite: {dir} -> {...dir ? { dir } : {}} - `tree-view` (eidos): el wrapper LO NECESITA cuando el valor es concreto — el recipe selecciona con `[data-tree-view-root]:dir(rtl)` y ese div es el ANCESTRO del provider que estampa el attr. Con el valor ausente hereda, que es lo correcto. - 26 demos: el arnes estandar (`data-uix-stage-area` / `data-uix-canvas-inner`). Verificado: en `auto` solo quedan `` (la proyeccion de prefs) y el provider con su valor resuelto — cero `dir=""`; en `rtl` los tres elementos lo reciben concreto; al volver a `auto` desaparece limpiamente. Las 26 rutas sirven 200 y ninguna trae `dir=""`. METODO: mi primer regex tambien matcheaba dentro de `dir={dir}` y dejo `dir={...}` — dos ficheros con parse error que `check` cazo (76 vs 74). Contar ficheros modificados NO basta; hay que mirar el diff. Co-Authored-By: Claude Opus 5 --- src/uix/eidos/components/tree-view/tree-view.svelte | 9 ++++++++- web/routes/uix/components/anchor-nav/+page.svelte | 2 +- web/routes/uix/components/aura/+page.svelte | 2 +- web/routes/uix/components/barcode/+page.svelte | 2 +- web/routes/uix/components/button/+page.svelte | 2 +- web/routes/uix/components/callout/+page.svelte | 2 +- web/routes/uix/components/chat-composer/+page.svelte | 2 +- web/routes/uix/components/chat-list/+page.svelte | 2 +- web/routes/uix/components/chat-log/+page.svelte | 2 +- web/routes/uix/components/chat-message/+page.svelte | 2 +- web/routes/uix/components/chat-typing/+page.svelte | 2 +- web/routes/uix/components/emoji-picker/+page.svelte | 2 +- web/routes/uix/components/empty-state/+page.svelte | 2 +- web/routes/uix/components/feed/+page.svelte | 2 +- web/routes/uix/components/gradient-builder/+page.svelte | 2 +- web/routes/uix/components/gradient-picker/+page.svelte | 2 +- web/routes/uix/components/media-player/+page.svelte | 2 +- .../uix/components/natural-time-picker/+page.svelte | 2 +- web/routes/uix/components/nav-tree/+page.svelte | 2 +- web/routes/uix/components/proof-of-human/+page.svelte | 2 +- web/routes/uix/components/prose/+page.svelte | 2 +- web/routes/uix/components/result/+page.svelte | 2 +- web/routes/uix/components/sidebar/+page.svelte | 2 +- web/routes/uix/components/sticky/+page.svelte | 2 +- web/routes/uix/components/table/+page.svelte | 2 +- web/routes/uix/components/tree-grid/+page.svelte | 2 +- web/routes/uix/components/tree-view/+page.svelte | 2 +- 27 files changed, 34 insertions(+), 27 deletions(-) diff --git a/src/uix/eidos/components/tree-view/tree-view.svelte b/src/uix/eidos/components/tree-view/tree-view.svelte index 2b6f736b6..f437396b3 100644 --- a/src/uix/eidos/components/tree-view/tree-view.svelte +++ b/src/uix/eidos/components/tree-view/tree-view.svelte @@ -63,6 +63,13 @@ }); +
diff --git a/web/routes/uix/components/anchor-nav/+page.svelte b/web/routes/uix/components/anchor-nav/+page.svelte index 0b44d9dff..579a6688b 100644 --- a/web/routes/uix/components/anchor-nav/+page.svelte +++ b/web/routes/uix/components/anchor-nav/+page.svelte @@ -93,7 +93,7 @@ data-density={density} data-theme={mode === 'inherit' ? undefined : mode} data-mode={mode === 'inherit' ? undefined : mode} - {dir} + {...dir ? { dir } : {}} style={`--scaling: ${scaling}; --border-width: ${borderWidth}px; display: block;`} >
diff --git a/web/routes/uix/components/aura/+page.svelte b/web/routes/uix/components/aura/+page.svelte index 0b4cfee39..803ab22e7 100644 --- a/web/routes/uix/components/aura/+page.svelte +++ b/web/routes/uix/components/aura/+page.svelte @@ -225,7 +225,7 @@ data-density={density} data-theme={mode === 'inherit' ? undefined : mode} data-mode={mode === 'inherit' ? undefined : mode} - {dir} + {...dir ? { dir } : {}} style={`--scaling: ${scaling}; --border-width: ${borderWidth}px;`} > diff --git a/web/routes/uix/components/sticky/+page.svelte b/web/routes/uix/components/sticky/+page.svelte index 3162b5e3b..47f7a1569 100644 --- a/web/routes/uix/components/sticky/+page.svelte +++ b/web/routes/uix/components/sticky/+page.svelte @@ -132,7 +132,7 @@ data-density={density} data-theme={mode === 'inherit' ? undefined : mode} data-mode={mode === 'inherit' ? undefined : mode} - {dir} + {...dir ? { dir } : {}} style={`--scaling: ${scaling}; --border-width: ${borderWidth}px; display: block;`} >
-
+
Data · Table

Table

diff --git a/web/routes/uix/components/tree-grid/+page.svelte b/web/routes/uix/components/tree-grid/+page.svelte index 8d398158f..fcb7ec86c 100644 --- a/web/routes/uix/components/tree-grid/+page.svelte +++ b/web/routes/uix/components/tree-grid/+page.svelte @@ -230,7 +230,7 @@ {/if} {/snippet} -
+
Data · TreeGrid

TreeGrid

diff --git a/web/routes/uix/components/tree-view/+page.svelte b/web/routes/uix/components/tree-view/+page.svelte index ddfd54c5b..bb91597fc 100644 --- a/web/routes/uix/components/tree-view/+page.svelte +++ b/web/routes/uix/components/tree-view/+page.svelte @@ -196,7 +196,7 @@ {/if} {/snippet} -
+
Data · TreeView

TreeView