|
|
# 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)*
|