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

37 lines
3.0 KiB

feat(audit): component re-audit + fixes P0–P5 (P4 complete, P5 in progress) Re-audit of the whole component catalog at pilot depth (91 fichas + the checkpoint verdicts in docs/audit/components/) and the executed fix packages. - P0–P3: doctrine (sema participation, CANON §3 intent, component-guide §5 + API naming, §32 outline), guards (morfo-vocabulary-check S10/S11d, component-audit A-3.1/A-1.4/S9, eidos-lint classHooks), morfo contracts (role=application removed ×4, aria-selected off the Day, drp translationRef, field data-state prune, pin-input commit-set, media-player renames), 13 new sema packs + 12 morfos family-default → pack. - P4 (N1–N10) COMPLETE: selectionMode (select/combobox/toggle-group/calendar); onValueCommit terminal-callback norm (pin-input/search/password/textarea + date/time/color-field add); typed validation reason + onInvalid (tags-input, css-field); index/onIndexChange (carousel); deselectable; openDelay/ groupSkipDelay; allowCustomValue; defaultValue prune. - P5 (in progress): S1 class-hooks codemod (22 hooks → data-attrs across cropper/button/image-picker/toggle/image-adjustments); S5 outline remnant in field.css; depth pass (data-depth=overlay on tooltip/toast/float-panel); touch-rows (--touch-target token, decoupled ::before hit-slop, area-not-visual, 44 AAA). S6 (Field composition) + S8 (calendar-surface) pending. Verification: errors-outside-(alpha|words|palabras|chronos) == 59 (baseline); morfo-vocabulary-check exit 0; eidos-lint class-hooks/invalid 0 on touched components; per-component vitest suites green. Handoff + remaining plan: docs/process/continue-audit-fixes-2026-07.md Excluded (broken by the N1 rename, left broken per user decision, not staged): words/**, palabras/**, chronos, web/routes/alpha/**. Reconciliation pending: the touch-rows ::before for checkbox/switch reverses changelog §37's earlier pseudo-element rejection (WCAG-overlap) that had routed markers to a labeled-row/Field task — flagged for the user in the handoff. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
3 months ago
# time-range-field — ficha de auditoría (RE-AUDITADA 2026-07-07, profundidad piloto)
- **Familia**: fields (rango de horas; dos endpoints TimeField) · **Método**: solo análisis; evidencia por dimensión · demos fuera
- **Capas leídas**: [morfo](../../../src/uix/morfo/components/time-range-field.ts) (63 líneas; censo `semantic:`=0, **`apg:`=0**) · [soma types](../../../src/uix/soma/components/time-range-field/types.ts) superficie · arquitectura de delegación verificada en el gemelo [date-range-field](date-range-field.md) (mismo patrón per-endpoint)
- **Máquina**: **NEEDS-WORK** — `E-2.3` (falta README eidos) · `R-1.3` (`data-readonly` sin estilo) · `R-1.4` (**`data-invalid` sin estilo**)
## Dimensiones (evidencia leída)
| # | Dimensión | Estado | Evidencia |
|---|---|---|---|
| 1 | Composición | ✓ | Mismo patrón del gemelo: cada Input = TimeField completo por endpoint; 0 eventos propios = delegación by-design |
| 2 | Naming | ✓ | `value: TimeRange` + `onValueChange` + `onStartValueChange`/`onEndValueChange` — coherente con date-range ✓ |
| 3 | Coherencia semántica | condicionada + cuestión de diseño | Delegada a time-field (que SÍ tiene commit-set ✓, 1 evento)… **pero time-field no tiene pack** → este range entero suena a default crudo mientras date-range suena tuneado: la asimetría SYS-3 en su forma más visible. Comparte con el gemelo la falta de evento rango-completo (F-1 conjunta) |
| 8 | Contrato morfo | **gap menor** | **F-2**: SIN cita `apg:` — su gemelo cita spinbutton y time-field single también; una línea de asimetría documental |
| 12 | Estados | **hallazgo doble (máquina)** | R-1.3 readonly Y **R-1.4 invalid** sin materializar — el único de la familia donde INVALID tampoco pinta: un rango inválido (end < start) valida en soma pero NO SE VE → F-3 prioritario |
| 14 | Docs | gap | Sin README eidos (E-2.3) |
| 4-7, 9-11, 13, 15 | | heredan del single | Wrapper de composición |
## Hallazgos y propuestas
| ID | Hallazgo | Propuesta |
|---|---|---|
| **F-1** | Sin evento de rango-completo (compartida con date-range F-1) | Misma decisión, mismo fix para ambos ranges |
| **F-2** | Sin cita APG (gemelo y single la tienen) | Añadir `apg: spinbutton` — una línea; verificar por qué el guard F-1.x no lo cazó |
| **F-3** | `data-invalid` sin estilo (R-1.4) — la validación de rango existe y no pinta | Materializar invalid (border `--{c}-border-invalid` como el gemelo) — y a largo plazo vía composición Field (SYS-6) |
| **F-4** | readonly sin estilo (R-1.3) | Censo de familia ×4 |
| **F-5** | README eidos ausente | SYS-4 |
| **F-6** | Compuesto SIN `expression` declarada (canon `'delegated'` existe; primos pickers lo usan) | Añadir `expression: 'delegated'` — SYS-11, mismo pase que el gemelo |
## Escalan al sistema
SYS-3 (el range hace VISIBLE la asimetría del trío: gemelos que suenan distinto) · SYS-4 · SYS-6 · censos R-1.3/R-1.4.
## Veredictos
*(pendiente — checkpoint post-barrido)*

Powered by TurnKey Linux.