AppResult
A full-page or section outcome screen — success confirmations, verifications, and error states.
<app-result status="success" title="Order confirmed" subtitle="Order #12345 will ship tomorrow." />An outcome screen is the moment after an action completes — a checkout success, a verification done, or an error (403/404/500). Distinct from <app-empty-state> (which is a card/section "nothing here yet"), this is a self-contained result panel with a prominent status, heading, supporting message, and usually one or two actions.
The status attribute picks a default icon and colour. Numeric statuses (403, 404, 500) render the code as a large figure for immediate scannability.
Playground
Every attribute, live. Each change re-renders the real tag helper on the server, so the markup underneath is the exact call that produced the result above it.
Status outcomes
The five standard outcomes: success, error, warning, info, and numeric error codes.
Order confirmed
Show code
<app-result status="success" title="Order confirmed"
subtitle="Order #12345 will ship tomorrow.">
<app-button variant="primary">View order</app-button>
</app-result>
Payment declined
Show code
<app-result status="error" title="Payment declined"
subtitle="Your card was declined. Please check your details and try again.">
<app-button variant="primary">Try again</app-button>
</app-result>
Page not found
Show code
<app-result status="404" title="Page not found"
subtitle="This page has been moved or no longer exists.">
<app-button variant="primary">Go home</app-button>
</app-result>
High risk detected
Show code
<app-result status="warning" title="High risk detected"
subtitle="This action cannot be undone. Review the details carefully.">
<app-button variant="danger">I understand, proceed</app-button>
<app-button variant="secondary">Cancel</app-button>
</app-result>
Verification in progress
Show code
<app-result status="info" title="Verification in progress"
subtitle="We're checking your details. This usually takes a few minutes." />
Custom icons
Override the status-default icon.
Milestone reached!
Show code
<app-result status="success" icon="sparkles" title="Milestone reached!"
subtitle="You've completed your first 10 tasks." />
Extra content
Add detail or guidance below the actions.
Email verified
A confirmation link has been sent to your inbox for future sign-ins.
Show code
<app-result status="success" title="Email verified"
subtitle="Your email address is now confirmed.">
<app-button variant="primary">Continue to dashboard</app-button>
<p style="margin-top:16px;">A confirmation link has been sent to your inbox for future sign-ins.</p>
</app-result>
When to use
Use it when
- A self-contained outcome screen after a major action completes (checkout, signup, verification).
- An error state (403/404/500) needs a prominent, scannable presentation.
- A confirmation or warning warrants its own full-screen or modal moment.
Reach for something else when
- A transient message dismisses on its own. → Toast
- A section-scoped "nothing here yet" inside a card or modal. → AppEmptyState
- An inline alert about a validation error or status change. → AppAlert
- A persistent announcement bar across the whole page. → AppBanner
Every option
The whole surface of the component, one cell per value — every status, icon overrides on both the named and numeric statuses, and every content composition.
status — all seven values
status="success"
Success
status="error"
Error
status="warning"
Warning
status="info"
Info
status="403"
Something went wrong
status="404"
Something went wrong
status="500"
Something went wrong
icon override
status="404" (no override — code figure, no icon)Page not found
status="404" icon="zap" (override wins over the code figure)Off exploring
status="success" icon="sparkles" (override replaces the default glyph)Milestone reached!
icon as a node — React-only (icon accepts a ReactNode); Razor's icon is a Bootstrap Icons name string only
Custom icon node
content composition
(no attributes) — default icon only, no title blocktitle onlyDone
title + subtitleOrder confirmed
title + subtitle + actions (inner content)
Order confirmed
title + subtitle + actions + <app-result-extra> (full composition)
Order confirmed
A confirmation email has been sent.
title as a node — React-only (icon/title/subtitle accept ReactNode); Razor's title is a plain string
Success!
long title and subtitle (overflow / wrap check)
This is a deliberately long title to check how the heading wraps inside a narrow result panel
class="checkout-result" — caller class appendedDone
Attributes
| Attribute | Type | Default | Description |
|---|---|---|---|
| status | string | info | The outcome status: 'success'|'error'|'warning'|'info'|'403'|'404'|'500'. Picks a default icon and tone; numeric statuses render as a large code figure. |
| title | string | — | The heading — what happened. |
| subtitle | string | — | Supporting message below the title. |
| icon | string | — | Override the status-default icon (Bootstrap Icons name). React-only: also accepts a node — Razor's icon is a name string only. |
| (content) | markup | — | Inner content renders below the subtitle as the actions slot — usually one or two app-buttons. Matches React's actions prop. |
| app-result-extra | markup | — | A nested tag whose content renders below the actions as the extra slot. Matches React's children prop. |
| class | string | — | Extra classes on the result container, appended to the component's own classes. Matches React's className prop. |