Result
Terminal outcome screen for a finished flow: payment confirmed, form submitted, order received. Animates a drawn checkmark and a staggered text reveal on mount.
Default
Pass title and description and Result builds the header for you. The default slot stays yours, so whatever you put there renders straight after it.
Payment successful
Your order is confirmed. A receipt is on its way to your inbox.
Statuses
success draws the checkmark stroke. pending, info, and error swap the tint and the glyph, and animate the media without the draw.
Payment successful
Your order is confirmed.
Payment processing
This usually takes a moment.
You are all set
This form accepts one response.
Payment declined
No charge was made to your card.
Composed
Skip the title and description props and write the parts yourself when the outcome needs more than a header, for example a summary block between the message and the buttons.
Order confirmed
We will email you when it ships.
With a reference
ResultReference renders the order or booking code under the description. It is layout only, so bring your own copy button.
Booking received
Keep this reference handy, you will need it at check-in.
BK-8241-QXSizes
size scales the media and the title together. Use lg for a screen that is nothing but the outcome, sm for a card or a dialog.
Size sm
The media and the title scale together, so the block keeps its proportions.
Size default
The media and the title scale together, so the block keeps its proportions.
Size lg
The media and the title scale together, so the block keeps its proportions.
Media variants
soft tints the circle with the status color, muted keeps it neutral, plain drops the circle and leaves the glyph. Pass icon to use any Iconify name instead of the built-in check.
Soft
Circle tinted by status.
Muted
Neutral circle, no status color.
Plain
Glyph only, no circle.
Custom icon
Any Iconify name. Animates in without the stroke draw.
Without animation
Set animate to false where something else already animates the entrance, such as a dialog that scales in. The reveal is pure CSS, so it also collapses on its own for users who ask for reduced motion.
Message sent
We reply within one business day.
Anatomy
Import all parts and piece them together.
<script setup>
import {
Result,
ResultActions,
ResultContent,
ResultDescription,
ResultHeader,
ResultMedia,
ResultReference,
ResultTitle,
} from "@/components/ui/result";
</script>
<template>
<Result>
<ResultHeader>
<ResultMedia />
<ResultTitle />
<ResultDescription />
</ResultHeader>
<ResultReference />
<ResultContent />
<ResultActions />
</Result>
</template>API Reference
Result
ResultMedia
ResultTitle
ResultReference
ResultHeader / ResultDescription / ResultContent / ResultActions
Accessibility
Keyboard shortcuts and ARIA behavior.
- ResultHeader carries role=status, so the media, title, and description are announced once when the outcome renders. Set announce to false if the surrounding page already announces it.
- role=status sits on the header rather than the root on purpose: it implies aria-atomic, so on the root a screen reader would re-read the entire summary whenever anything below it changed.
- The media is aria-hidden. The status is carried by the title text, never by color or icon alone.
- Both animations collapse under prefers-reduced-motion, and neither is required for the content to be visible, so the outcome is readable before hydration.