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/src/uix/eidos/components/result/README.md

6.9 KiB

Result

Terminal flow/page state: an operation or route resolved and this surface reports how. Built 2026-07-21 as F1.3 of the blocks initiative (docs/process/PLAN-blocks.md); reference floor fixed by the research dossier (docs/process/RESEARCH-blocks-references.md §P3) under the E-2 rule (parity floor = v1).

Baseline

  • Classification: passive display (eidos-native, scope: ['eidos']). No soma provider, no sema pack. Shares EmptyState's skeleton deliberately — EmptyState describes ABSENCE of data, Result reports an OUTCOME; one layout language, two contracts.
  • Anatomy: Result (root, eidos-only data-status) → .Media (status default or full replacement) + .Title (real <h{level}>, default h2) + .Description (measure 45ch) + .Actions (label → role="group") + .Extra (detail block, left-aligned).
  • Status vocabulary (7 = AntD parity, semantically named): success | error | info | warning | forbidden | not-found | server-error. Default info (AntD default; undefined default = contract smell).
  • Default media composes the doctrinal glyph map — no local intent→icon table (icon/intent.ts doctrine): success→IntentIcon fulfill (sealed completion) · error→threat · warning→risk · info→catalog Info; the HTTP situations render a big NEUTRAL mono code (403/404/500) — situations, not failures (AntD never paints 404 red).
  • No size axis by design: Result is page-level (AntD parity).

Comparativa

Ref Equivalente Qué adoptamos Qué no
AntD Result la única ref de primera clase el enum de 7 (con warning), default info, extra como bloque de detalle, icon-override vía children, HTTP en neutro '403'|'404'|'500' stringly-typed (renombrados semánticos); su ilustración propietaria (cero assets horneados)
Tailwind Plus 404 Pages páginas de error (marketing) la anatomía code-eyebrow + heading + CTA (nuestro data-result-code) dumps congelados por página
Chakra / Polaris / Radix / Ark — (ninguno lo shippea) la confirmación de que el esqueleto correcto es el del empty-state —
Flowbite 404/500/maintenance como blocks maintenance queda para el block error-page (F3.9), no para este componente —

Decisiones

  • warning entra (7º valor): el dossier señalaba su ausencia como decisión explícita; mapea natural al glifo del tier risk.
  • data-status ≠ intent perceptivo: nombra la situación; el recipe lo mapea a color de rol SOLO para el glifo (los tokens recipes.result.{status}-color son forwarders de rol retintables). El texto nunca depende del color.
  • HTTP en neutro: 403/404/500 son situaciones — código grande mono muted, jamás rojo (doctrina AntD ratificada por el dossier).
  • Title default h2 (EmptyState: h3): Result suele SER la página. La diferencia es deliberada y está documentada en ambos README.
  • Esqueleto duplicado conscientemente: el layout centrado (~30 líneas) se repite en result.css en vez de crear una capa CSS compartida para 2 consumidores — los recipes divergen ya (glyph display-scale, código HTTP, extra izquierdo) y la independencia lee mejor que la indirección. Revisable si aparece un tercer consumidor del esqueleto.
  • Context local eidos-only (context.ts): Media conoce el status del root sin re-pasarlo; getter reactivo, nunca snapshot.

Passive justification

Result declares 0 events because the outcome it reports already happened BEFORE this surface rendered: the perceptual signal belonged to the operation that resolved (its form's commit, its toast, its dialog). Result is the report, not the occurrence. The composed Buttons in .Actions own the next step's behavior and sema. No keyboard contract, no state machine, no ARIA obligations beyond the optional named actions group — same passive class as banner / empty-state.

Sema events

None (see Passive justification). SemaPanel in the demo renders the justified empty state.

Gaps

Gap Disposition
Focus/announce tras navegación SPA (mover foco al título o live region polite) diferir — es cableado del APP (routing), no del componente; patrón documentado en la tab A11y de la demo; ninguna referencia lo implementa tampoco. Candidato a doctrina de blocks cuando error-page (F3.9) lo componga
Variante maintenance diferir al block error-page (F3.9) — es una página, no un status del componente (doctrina Flowbite)
Eje size (Result compacto en modal) diferir — AntD no lo tiene (suelo cumplido); si un consumidor real lo pide, se añade con la misma mecánica que EmptyState
Ilustraciones por status descartar — cero assets horneados; Media con children reemplaza el default entero

Powered by TurnKey Linux.