docs(direction): 9.15, censo de canonizacion — 38 canonicos, 11 fuera de la norma

El censo de 6.12 estaba incompleto: contaba los wrappers con default duro pero
no los que resuelven en el provider (4) ni los que no exponen dir (7). Ninguno
esta roto hoy — verificado que number-field y scroll-area estampan lo mismo —
pero quedan dos decisiones: mover la cadena al wrapper, y si los 7 sin prop
deben exponerla.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
alpha-0.1-dir-prefs
dev 2 months ago
parent 7b306ae5d7
commit 8cda5fd252

@ -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.

Loading…
Cancel
Save

Powered by TurnKey Linux.