You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
svelte-kit-vice/docs/audit/components/textarea.md

43 lines
11 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# textarea — ficha de auditoría (RE-AUDITADA 2026-07-07, profundidad piloto)
- **Familia**: fields · **Método**: solo análisis; evidencia por dimensión · demos fuera
- **Capas leídas**: [morfo](../../../src/uix/morfo/components/textarea.ts) completo (eventos+partes íntegros) · [soma types](../../../src/uix/soma/components/textarea/types.ts) completo · [provider](../../../src/uix/soma/components/textarea/textarea-provider.svelte.ts) dirigido (autosize :130-177, call-sites :238/:290/:313, oninput :306-313) · pack ✓
- **Máquina**: NEEDS-WORK — `E-2.3` (sin README eidos) · tests **0**
## Dimensiones (evidencia leída)
| # | Dimensión | Estado | Evidencia |
| --- | -------------------- | ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| 1 | Composición | ✓ | Input + Count compositivos (morfo :9-13) |
| 2 | Naming | ✓ conforme | `value/onValueChange` ✓; `onSubmit` crudo (3ª ocurrencia del patrón (b) → \_naming); `submitOn: 'enter'\|'shift+enter'\|'mod+enter'\|false` (types :5-6, :77-84 — shortcut flexible con semántica de newline documentada); `autosize/minRows/maxRows/rows/resize` |
| 3 | Coherencia semántica | ✓ **referencia** | Doctrina teclear≠commit citada VERBATIM con el incidente (morfo :25-30 — 3ª ocurrencia: canonizada de facto en la familia); **`signal-warn-count-overflow`** = signal.warn + risk con `persistence: 'untilFix'` (libro §6.2 citado), clear vía `clearTarget` al bajar del límite, y `a11ySemantic.requiresPersistentTrace` (:42-66) — segundo contrato de evento de referencia del catálogo (con el caps de password) |
| 4 | API | ✓ | Overflow: el `value` bindable NUNCA excede maxLength (types :86-91); clamp en el elemento para no saltar el cursor (provider :307-310); snippet expone count/max/isOverflow/clear (:11-26) |
| 5 | Tokens | ✓ | Sin duplicación de alturas (multiline n/a); recipe canónico |
| 6 | Sema | ✓ | Pack ✓ + los dos eventos con carácter |
| 7 | Animaciones | ✓ | Sin keyframes |
| 8 | Contrato morfo | ✓ con perla | `data-resize` ENUM con la nota del compilador documentada in-place (sin `values` sería presence-flag y el valor no llegaría a eidos — :84-92); flags autosize/focused/empty ✓; APG textbox correcto |
| 9 | A11y | ✓ | Count con `aria-live: polite` + `data-overflow` (verificado); el overflow anuncia con traza persistente por contrato |
| 10 | Theming | ✓ | Focus outline (censo SYS-5) |
| 11 | Composición interna | ✓ | OR-merge Field (types :33-35); describedBy vía field |
| 12 | Estados | ✓ | resize suprimido bajo autosize (documentado :71-74); overflow como estado proyectado |
| 13 | Runtime | **VIOLACIÓN** | **F-1**: `measureAutosize()` = write-then-read (height→auto :159, scrollHeight :173, getComputedStyle :177) llamado **SÍNCRONO en `oninput`** (:313, tras clamp+commit) y en clear (:238) y mount (:290) — **cero `dom.measure`/raf en el fichero**: reflow forzado POR TECLA con autosize activo — la clase exacta que la doctrina "[Violation] Forced reflow" prohíbe y que `uix.perf` detecta. Además reescribe el `style` attr completo (comentado :349) |
| 14 | Docs+tests | **gap doble** | Sin README eidos; **cero tests** — el contrato de overflow untilFix+clearTarget sin suite que lo proteja |
| 15 | i18n | ✓ | `count: '{{count}} of {{max}}'` interpolado (morfo :21) |
## Hallazgos y propuestas
| ID | Hallazgo | Propuesta |
| ------- | ---------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **F-1** | Autosize mide síncrono en oninput (reflow por tecla) | Diferir a frame coalescido: `dom.measure(() => …, el)` (el vehículo sancionado) — una medición por frame, no por tecla; el write (height:auto) y el read quedan dentro del mismo callback de frame. Verificable con el reflowDetector de uix.perf antes/después |
| **F-2** | Cero tests | Suite: overflow (clamp + signal untilFix + clear al bajar), submitOn ×3 modos, autosize min/max — SYS-2 |
| **F-3** | Sin README eidos | SYS-4 |
| **F-4** | `onSubmit` crudo | Veredicto \_naming |
## Escalan al sistema
**Dimensión 13 gana su primer censo real**: buscar la clase write-then-read-síncrono en el resto (scroll-area, cropper, splitter, float-panel, virtual-\* son los candidatos naturales) · SYS-2 · SYS-4 · \_naming.
## Veredictos
_(pendiente — checkpoint post-barrido)_

Powered by TurnKey Linux.