# search-field — ficha de auditoría (RE-AUDITADA 2026-07-07, profundidad piloto) - **Familia**: fields (input de texto especializado) · **Método**: solo análisis; evidencia por dimensión · demos fuera - **Capas leídas**: [morfo](../../../src/uix/morfo/components/search-field.ts) completo (8 partes verificadas) · [soma types](../../../src/uix/soma/components/search-field/types.ts) completo · provider dirigido (debounce :38-116) · wrapper eidos leído · pack sema ✓ existe - **Máquina**: PASS con `R-1.3` · tests ✓ · README ×2 ✓ ## Dimensiones (evidencia leída) | # | Dimensión | Estado | Evidencia | |---|---|---|---| | 1 | Composición | ✓ | Partes compositivas (Icon/Input/LoadingIndicator/ClearTrigger); Input bloquea passthrough de `value/onchange` vía `Without` (types :105-108) — el provider posee el valor | | 2 | Naming | ✓ con heterogeneidad de tipado | `value/onValueChange` ✓; **`onSubmit: (value)=>void` y `onClear: ()=>void` en crudo** mientras onValueChange usa `OnChangeFn` (types :43-47) — tipado de callbacks heterogéneo → fila en _naming; `debounceMs` (sufijo-unidad, :74); `clearOnEscape` (:50) | | 3 | Coherencia semántica | ✓ mejor que el trío | `commit-submit` + **`commit-reset`** (morfo :14-34) — buscar Y limpiar suenan; nota: target=`provider` mientras el trío targetea `input` (convención de target a unificar, menor) | | 4 | API | ✓ ejemplar | Doble camino documentado con razón (live vs formal, types :29-32); debounce con semántica precisa (valor síncrono, callback diferido, flush en clear/submit, :68-74); interacción aria-label↔Field.Label documentada (:82-86) | | 5 | Tokens | ✓ con dup | `height-{k}` duplicada (SYS-6); resto canónico | | 6 | Sema | ✓ | `expression: 'pack'` + pack existente — submit/reset con carácter | | 7 | Animaciones | ✓ | Sin keyframes; LoadingIndicator = spinner del sistema | | 8 | Contrato morfo | **2 hallazgos** | **F-1**: `apg: combobox` (:9) pero NO hay popup/listbox (8 partes verificadas) — el patrón real es `role=searchbox` (:73); cita APG errónea. **F-2**: LoadingIndicator con `aria-hidden='true'` **Y** `aria-live='polite'` juntos (:113-116) — se anulan (un nodo hidden no anuncia); elegir uno. Flags focused/empty/loading en provider (:49-51) ✓ superficie de estado rica. Escape condicional DECLARADO en morfo (`when: prop-truthy clearOnEscape`, :95-99) ✓ elegante | | 9 | A11y | ✓ con F-2 | aria-label vía `translationRef` con fallback (:82-84 — mecanismo i18n en el contrato ✓); aria-invalid condicional | | 10 | Theming | hallazgo R-1.3 | `data-readonly` declarado (:46,:77) SIN estilo — contrato visual incompleto (máquina); focus outline puro → SYS-5 | | 11 | Composición interna | ✓ | Participa de Field.Provider (OR-merge documentado, types :26-27, :52) | | 12 | Estados | ✓ | disabled/readonly/required/invalid + focused/empty/loading proyectados | | 13 | Runtime | ✓ **ejemplar** | Debounce vía `TimerHandle` de uix.timers con clave namespaced `soma:search-field:{id}:debounce` (provider :71,:115-116) + **cancel al desmontar** (regla A6 citada, :107-109) — el patrón de disciplina que la dimensión pide | | 14 | Docs+tests | ✓ | README ×2, suite ✓ | | 15 | i18n | ✓ | texts morfo (label + clear); translationRef en aria | ## Hallazgos y propuestas | ID | Hallazgo | Propuesta | |---|---|---| | **F-1** | Cita APG errónea (combobox sin popup) | Cambiar a la referencia correcta (searchbox no tiene patrón APG propio → usar la regla "sin patrón + razón" que saldrá de SYS para media-player/drag-drop) | | **F-2** | `aria-hidden` + `aria-live` juntos en LoadingIndicator — se anulan | Decidir la intención: si debe ANUNCIAR "buscando…", quitar aria-hidden y dar texto sr-only; si es decorativo, quitar aria-live | | **F-3** | readonly sin estilo (R-1.3) | Tratamiento único de familia (composición Field, SYS-6) | | **F-4** | Tipado de callbacks heterogéneo (OnChangeFn vs crudo) | Normalizar en el veredicto de _naming (propuesta: OnChangeFn para todo callback de dato; crudo solo para señales sin payload) | | **F-5** | `height-{k}` duplicada | SYS-6 | ## Escalan al sistema _naming (tipado de callbacks + debounceMs + target-de-evento provider-vs-input) · SYS-5 · SYS-6 · regla APG-sin-patrón (con media-player/drag-drop). ## Veredictos *(pendiente — checkpoint post-barrido)*