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

12 KiB

date-field — ficha de auditoría de componente

  • Fecha: 2026-07-07 · Auditoría: componentes (piloto 2)
  • Método: solo análisis — fixes tras el barrido completo; la ficha registra hallazgos + propuestas de solución (locales y las que escalan al sistema).
  • Tier: campo compuesto (segmentos) · Morfo scope: ['soma','sema','eidos'] · Familia: fields
  • Capas: morfo · soma · eidos · sema pack ✓
  • Máquina (component:audit --only date-field): PASS — R-rules limpias. (Reglas D-* de demo excluidas — corrección de alcance 2026-07-07.)
  • Vigencia re-auditoría: ficha piloto — YA a profundidad de referencia; este retrofit solo extrae las demos del alcance.

Tabla de dimensiones

# Dimensión Estado Evidencia / nota
1 Composición vs declaración ✓ Partes compositivas (Provider/Input/Segment/Label como children); snippet segments ordenados para render libre
2 Naming de props ✓ value/onValueChange + placeholder/onPlaceholderChange (patrón bindable canónico); minValue/maxValue; readonlySegments; kind ⊥ granularity con la ortogonalidad DOCUMENTADA (consistencia de trío)
3 Coherencia semántica ✓ commit-set/commit-reset post, intent neutral (canon de fields); expression 'pack'
4 API normalizada ✓ Bindables declarados; validate/onInvalid (Standard-Schema-friendly); locale con fallback reactivo soma.langs; dir RTL invierte flechas; hourCycle con cadena de fallbacks
5 Tokens usados ✓ CSS consume SOLO sus tokens de recipe (--date-field-*) — TSC-canónico; segment-height fantasma eliminado en auditoría B.1 (antecedente resuelto)
6 Parte semántica ✓ ejemplar Pack con semaSelector tipado, targets al part input (nota de dónde estampa el engine), tunings COMPUESTOS (form.commit.soft / subtle + delta {op:'add', -80} + contour) — el patrón de doctrina exacto
7 Animaciones ✓ Transición SOLO de background con razón documentada (border-color instantáneo: el increment provoca blur/refocus y un border transicionado parpadea)
8 Contrato morfo ✓ APG spinbutton enlazado; role='group' en Input + role='spinbutton' por segmento con aria-value{min,max,now,text} completos; teclado declarado; ariaBoolean para aria-disabled con nota de por qué
9 Accesibilidad ✓ con hallazgo Labels/aria-labelledby condicionales por part-present; errorMessageId → describedby; F-1: faltan Home/End (APG spinbutton: saltar a min/max)
10 Adopción theming hallazgo doctrinal Focus = outline flush (:has(segment:focus-visible) + border swap) con razón técnica sólida — pero la doctrina §32 vigente dice "los CAMPOS quedan en box-shadow (anillo interior parametrizable)" → S-1. State-layer de segmentos vía capa compartida ✓ (data-field-segment estampado en soma)
11 Composición interna el mandato FieldProvider consumido en soma (merge) ✓ — pero sin wrapper Field a nivel DOM/eidos: [data-field][data-size] ausente (sondado en la familia), Label propio en vez de la base Field → S-2 (mandato B.1 ya registrado)
12 Estados y ciclo ✓ invalid/disabled/readonly/required en data-attrs por parte; readonlySegments granular; hidden-input para FormData (name + ISO) ✓; controlled/uncontrolled ✓
13 Disciplina runtime ✓ 0 timers/listeners crudos a nivel grep en 57KB de provider; memoria institucional dentro (incidencia range-placeholder 2026-05-20 #1 documentada con su porqué)
14 Demo testbed fuera de alcance Demos excluidas de la auditoría (corrección 2026-07-07)
15 Docs + tests ✓ README en AMBOS niveles (soma 14KB con ## Sema events; eidos 4KB) — el patrón que S-4 de button propone ratificar; tests de provider (8KB) ✓
16 i18n ✓ langs.ts propio; texts de morfo localizados; formatter por locale reactivo; tipos $libs/days (doctrina, nunca @internationalized/date)

Hallazgos y propuestas de solución — del componente

ID Hallazgo Propuesta de solución
F-1 Teclado de segmento sin Home/End (APG spinbutton los recomienda: saltar a aria-valuemin/max) Añadir { key: 'Home', action: 'set-min' } / { key: 'End', action: 'set-max' } al morfo + implementación en provider; extensivo a time-field/color-field (misma familia de segmentos)
F-2 El outline de focus lleva outline-offset: 0 hardcodeado (razonado: flush, sin hueco) y no participa --focus-ring-inner-width Sin acción si S-1 canoniza el modelo outline-flush para segment-fields (el 0 es semántica del modelo, anotarlo como literal razonado); si S-1 devuelve a box-shadow, se resuelve solo
F-3 Alturas re-declaradas: el recipe date-field duplica height-{xs..xl} = var(--size-{k}-control-height) que la familia field ya expone Cubierta por S-2 (des-duplicación de familia — mandato B.1)

Hallazgos que escalan al sistema / theming

ID Hallazgo Propuesta
S-1 Doctrina §32 vs realidad de los segment-fields: §32/changelog dicen "los campos quedan en box-shadow (anillo interior parametrizable)", pero date-field migró a outline flush con razón técnica sólida y documentada (un border/box-shadow transicionado parpadea en cada increment por el blur/refocus del segmento; el outline sobrevive forced-colors). Afecta a toda la familia de segment-fields (date/time/color y sus range) Decisión doctrinal (checkpoint post-barrido): (a) matizar §32 — text-fields = dos anillos box-shadow; segment-fields = outline flush (canonizar la razón del flicker, nota fechada en changelog §32) — recomendada; o (b) devolver los segment-fields a box-shadow resolviendo el flicker de otra forma. El barrido debe censar qué hace cada field (time/color/search/password/mask) para dimensionar
S-2 Composición Field (mandato B.1, evidencia por-componente): el soma participa de FieldProvider (merge ✓) pero el DOM no envuelve en [data-field][data-size]; Label propio; alturas duplicadas; el token de familia --field-segment-height (size-driven, TSC scope size:) no puede aterrizar hasta esto Ya mandatado en next-features.md: incorporar la base Field (wrapper + label/helper/error), token de familia con scope size:, morir las copias height-{k} y segment-height per-componente. Esta ficha aporta la lista concreta de piezas de date-field a tocar

Veredictos

(pendiente — checkpoint único post-barrido)

Powered by TurnKey Linux.