Response Card
Centered response message with standardized details, action, and optional footer.
Use ResponseCard for a terminal response to an action or route: a missing meeting, completed sign-out, verification email, or similar status page. It standardizes the centered StatusMark, title, description, details, call to action, and py-10 panel spacing.
Without footer, it renders a standalone Card. Supplying footer adds CardFrame chrome and places the footer in CardFrameFooter. Keep page positioning outside the component; use ContentCenter where the page does not have its own shell.
import { ResponseCard } from "@coss/ui/shared/response-card";Example
The first example matches Cal Video responses. The second matches authentication responses that need a secondary footer.
No meeting found
Payment successful
<ContentCenter>
<ResponseCard
status="error"
title={t("no_meeting_found")}
description={t("no_meeting_found_description")}
action={<Button size="lg">{t("go_back_home")}</Button>}
/>
</ContentCenter><ResponseCard
status="success"
title={t("payment_successful")}
description={t("email_sent_with_activation_link")}
action={
<Button
size="lg"
render={<a href={gmailUrl} rel="noreferrer" target="_blank" />}
>
{t("open_in_gmail")}
<ExternalLinkIcon aria-hidden="true" />
</Button>
}
footer={<ResendEmail />}
/>API
| Prop | Type | Notes |
|---|---|---|
title | ReactNode | Required response heading, rendered as an h1. |
description | ReactNode | Optional supporting copy or structured metadata. |
status | StatusMarkStatus | Semantic status passed to StatusMark. |
icon | ReactNode | Optional domain-specific status icon. |
children | ReactNode | Optional details between the description and action. |
action | ReactNode | Optional centered call to action. |
footer | ReactNode | Optional secondary content. Its presence wraps the card in CardFrame. |
className | string | Merged onto the outer Card or CardFrame. World-map auth pages (/auth/error, /auth/logout) pass shadow-lg/5 to match the login card. |
titleProps | { id?, "data-testid"? } | Identifiers forwarded to the heading. |
Call sites
| File | Notes |
|---|---|
apps/web/modules/videos/views/videos-no-meeting-found-single-view.tsx | Missing meeting |
apps/web/modules/videos/views/videos-meeting-not-started-single-view.tsx | Upcoming meeting |
apps/web/modules/videos/views/videos-meeting-ended-single-view.tsx | Past meeting |
apps/web/modules/bookings/views/booking-dry-run-success-view.tsx | Successful booking dry run |
apps/web/modules/auth/verify-view.tsx | Email and payment responses with resend footer |
apps/web/modules/auth/verify-email-view.tsx | Email-client choices with account actions |
apps/web/modules/auth/error-view.tsx | Authentication error |
apps/web/modules/auth/logout-view.tsx | Completed sign-out |
Example URLs
Not exhaustive — open these locally (for example, http://localhost:3000) to see the component in product.
| Path | Notes |
|---|---|
/video/no-meeting-found | Missing meeting |
/video/meeting-not-started/<uid> | Meeting has not started |
/video/meeting-ended/<uid> | Meeting has ended |
/booking/dry-run-successful | Successful booking dry run |
/auth/verify?email=<email> | Verification email sent |
/auth/verify?email=<email>&paymentStatus=paid | Payment succeeded |
/auth/verify?email=<email>&paymentStatus=failed | Payment failed |
/auth/verify-email | Account email verification |
/auth/error | Authentication error |
/auth/logout | Completed sign-out |
Source
On This Page