Cierra el eje de direccion abierto en 013ceac57.
1) LAS 49 DEMOS. Todas hacian `let dir = $state('ltr')` y se lo pasaban
explicito al componente, asi que el interruptor del topbar no movia
ninguna: la prop gana a prefs, que es el contrato. Pasan al patron de tres
estados `auto | ltr | rtl` con `auto` por defecto, que es lo que recibe un
consumidor real — sin prop, resolviendo por prefs. Elegir ltr/rtl sigue
demostrando que la prop pisa. El arnes compartido SystemAxes va al mismo
patron, y las 22 demos que lo bindean pasan a bindear el modo.
El tooltip ya tenia tres estados con '' como "inherit" — mismo concepto,
otro nombre; normalizado a `auto`.
2) LA PROSA. `<main data-uix-canvas dir="ltr" lang="en">`. La copia de la
documentacion esta escrita en ingles, asi que se DECLARA inglesa. Sin eso,
al voltear la shell a RTL el algoritmo bidi mueve la puntuacion neutra
final al extremo visual izquierdo y "What is morfo?" se lee "?What is
morfo" — bidi correcto sobre una declaracion falsa. `dir="ltr"` lo arregla
y ademas AISLA la tirada en un solo atributo: la hoja de estilos de agente
del WHATWG da `[dir=ltr i] { unicode-bidi: isolate }`, verificado en la
fuente. NO `dir="auto"`: la spec llama a su heuristica de primer-caracter
"very crude" y aqui ya sabemos la respuesta.
LO QUE ESTO NO ARREGLA, y es correcto que no lo haga: el texto ingles
DENTRO de un componente que declara rtl sigue mostrando el artefacto. El
componente hace bien en estar en rtl —es lo que pidio el usuario— y el
contenedor de arriba no entra en el. Eso solo se cierra traduciendo el
contenido de la demo o marcandolo; es la parte que las cinco librerias de
referencia dejan explicitamente al consumidor.
Verificado: check 74 = linea base exacta. smoke: las 49 rutas tocadas
PASAN; los 3 fallos de la pasada (/demos/motion, /temas,
/uix/components/card) son inestables — ninguno esta en el diff, y la
pasada sin mis cambios fallo en dos rutas DISTINTAS (/demos/cristal,
/demos/heroscrolling). En Chrome: elegir arabe voltea calendar, tabs y
slider por derivacion mientras la prosa se queda legible en ltr.
NOTA DE METODO: un `prettier --write` sobre todas las demos genero 165
ficheros y +31k lineas de ruido, y rompio dos atributos normalizando
`data-perm-mode='type="X"'` a comillas dobles. Revertido y reaplicado solo
el cambio de direccion: 49 ficheros, +357/-161.
QUEDA: `html lang` no sigue al idioma (el dir si); perm:check sin ejecutar
—el topbar ya lleva data-perm-step, lo que hace que toda ruta tenga paso.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>