@ -1236,3 +1236,44 @@ El grip además mentía en RTL: `cursor: nwse-resize` (↘↖) y los chevrones a
dieron el float-panel por revisado **midiendo sólo la POSICIÓN del panel** .
Nadie tocó el resize. Verificar un componente con gestos no es medir su
geometría en reposo — hay que **ejercitar cada gesto que ofrece** .
### 9.15 · Censo de canonización — NO está todo normalizado
Pregunta del usuario: «¿todos los componentes han canonizado la forma de
obtener el `dir` ?». **No.** §6.12 dijo que `rating-group` y
`natural-time-picker` eran «los DOS únicos que quedaron fuera; los otros 36 sí
usan `activeDir` ». **Ese censo estaba incompleto** : contó los wrappers con
default duro, no los que resuelven en OTRO sitio.
Medido: **106 componentes en soma · 38 con el wrapper canónico**
(`dir: activeDir(() => dir, soma)`) · **11 fuera de la norma** , en dos grupos
de naturaleza distinta.
**Grupo A — exponen `dir` pero resuelven en el PROVIDER (4)**
`css-field` · `listbox` · `navigation-menu` · `number-field` . El wrapper pasa
la prop CRUDA (`readableActive(() => dir)`) y el provider hace
`opts.dir.current ?? prefs.getDir() ?? 'ltr'` — la cadena duplicada, al revés
del reparto que fijó `013ceac57` .
⚠️ Verificado que **hoy son equivalentes** : con el toggle en `auto` + árabe,
`number-field` estampa `dir="rtl"` y el canónico `scroll-area` también. La
sospecha de incumplimiento observable era FALSA y se retira.
Pero hay una divergencia **latente** : `listbox` y `navigation-menu` estampan
`assertedDir` (distinguen «afirmado» de «resuelto») mientras `css-field` y
`number-field` estampan el RESUELTO. En una app cuyo esquema de prefs no
declare dirección, `getDir()` devuelve `undefined` y ahí los primeros omiten el
atributo y los segundos estampan `'ltr'` — el defecto que `013ceac57` arregló
en 33 componentes, superviviente en 2.
**Grupo B — no exponen `dir` en absoluto (7)**
`drawer` · `float-panel` · `grid-list` · `tag-group` · `tree-grid` ·
`virtual-grid` · `virtual-list` . Leen `soma.prefs.getDir()` directamente. Es
coherente con el contrato **con el eslabón de prop ausente** , y por eso ninguno
está roto. Pero es una **asimetría de API** : 38 componentes dejan fijar la
dirección de su subárbol con una prop y estos 7 no.
Ninguno de los 11 es un defecto de comportamiento hoy. Son dos decisiones
pendientes: (a) mover la cadena al wrapper en los 4 del grupo A —refactor
mecánico, y de paso cierra la divergencia latente de 2—, y (b) si los 7 del
grupo B deben exponer `dir` , que es superficie pública.