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-onlydata-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. Defaultinfo(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→catalogInfo; 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
warningentra (7º valor): el dossier señalaba su ausencia como decisión explícita; mapea natural al glifo del tierrisk.data-status≠ intent perceptivo: nombra la situación; el recipe lo mapea a color de rol SOLO para el glifo (los tokensrecipes.result.{status}-colorson 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.cssen 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):Mediaconoce elstatusdel 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 |