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/search-field.md

44 lines
4.3 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.

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

Powered by TurnKey Linux.