# editable — ficha de auditoría (RE-AUDITADA 2026-07-07, profundidad piloto) - **Familia**: fields (texto in-place preview↔edit) · **Método**: solo análisis; evidencia por dimensión · demos fuera - **Capas leídas**: [morfo](../../../src/uix/morfo/components/editable.ts) completo (1-110+) · [soma types](../../../src/uix/soma/components/editable/types.ts) completo · provider dirigido (autoResize :30,:374-377) · pack ✓ - **Máquina**: PASS limpio · tests ✓ (con 1 error de tipos en la línea base de `check` — `data-editing` indexado, a absorber en fixes) · README ×2 ✓ ## Dimensiones (evidencia leída) | # | Dimensión | Estado | Evidencia | | --- | -------------------- | -------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | 1 | Composición | ✓ | Area/Control/Preview/Input/EditTrigger(+Submit/Cancel) compositivos | | 2 | Naming | **4 datos de censo** | **`defaultValue`** (types :16-21 — PRIMER uncontrolled-initial del catálogo, doc React-style "read once at mount") → ¿canon o redundante con `$bindable(inicial)`? · par `onValueChange` (cambia el comprometido) + `onValueCommit` (cada commit) :60-63 — distinción sutil que el resto no hace · **`onValueRevert: () => void`** crudo SIN payload (:64-65 — encaja la regla "crudo solo señal sin dato" ✓) · `editing/onEditingChange` par bindable ✓ | | 3 | Coherencia semántica | ✓ | `shift-enter-mode` (shift, sin intent — cambio de contexto ✓) · `commit-save` affirm · `commit-cancel` **neutral** (commit exige intent por política de familia; neutral es correcto — verificado contra la doctrina) | | 4 | API | ✓ rica | `activationMode: focus\|click\|dblclick\|none` + `submitMode: enter\|blur\|both\|none` (:32-49); `selectOnFocus`; hidden-input por `name` (:26-27) | | 5 | Tokens | ✓ | Recipe canónico | | 6 | Sema | ✓ | Pack ✓ (enter/save/cancel con carácter) | | 7 | Animaciones | ✓ | Sin keyframes | | 8 | Contrato morfo | ✓ | Preview `role='textbox'` en div (patrón Chakra/Ark del valor-como-textbox-readonly, :102-110); `data-editing/empty/placeholder-shown` flags; aria-required/invalid condicionales | | 9 | A11y | ✓ | Activación por foco accesible por defecto; triggers con textos | | 10 | Theming | ✓ | Focus o5 → censo SYS-5; state-hover preview ✓ tier neutro | | 11 | Composición interna | verificar | Como tags-input: sin mención de OR-merge con Field en types → verificación dirigida (pass SYS-6) | | 12 | Estados | ✓ con gap menor | editing/empty/disabled/readonly/invalid ✓; **F-1**: `maxLength` (:54-55) SIN señal de overflow (0 hits) — textarea tiene el contrato `signal-warn-count-overflow` untilFix para lo mismo | | 13 | Runtime | ✓ **por diseño** | `autoResize` dimensiona por `ch` desde el valor + `min-width: 2ch` (provider :374-377) — **cero medición de DOM** (evita la clase de reflow de textarea F-1 por construcción); el contraste correcto: ch para una línea, medición-diferida para multilínea | | 14 | Docs+tests | ✓ | README ×2, suite ✓ (+ el error de tipos baseline a absorber) | | 15 | i18n | ✓ | texts morfo | ## Hallazgos y propuestas | ID | Hallazgo | Propuesta | | ------- | ------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | | **F-1** | `maxLength` sin contrato de overflow (asimetría con textarea) | Adoptar `signal-warn-count-overflow` del hermano (untilFix + persistent-trace) o documentar por qué no aplica al in-place | | **F-2** | `defaultValue` — patrón uncontrolled único en el catálogo | Veredicto \_naming: ¿se canoniza (y entonces quién más lo necesita) o se poda (el `$bindable(inicial)` de Svelte 5 cubre el caso)? | | **F-3** | Error de tipos preexistente en su suite (baseline check) | Fix trivial en fase de fixes | | **F-4** | Participación Field sin documentar | Verificación dirigida (con tags-input) | ## Escalan al sistema \_naming (defaultValue · el par Change/Commit · Revert crudo ✓ como regla) · patrón "ch-sizing vs medición-diferida" como doctrina de autoResize (exportable). ## Veredictos _(pendiente — checkpoint post-barrido)_