Componentmedia
Rsvp Card
Invitation RSVP card with attending toggle and wax stamp.
Preview
Live Preview

25%
Premium Headphones
$299$399
Jordan Daisy
Product Designer
AvailableRemote

The Future of Design Systems
Alex Rivera8 min read
Oc
t 14
Tech Conference 2026
21:00
Berlin Arena
Invoice #INV-2026-0987draft
Date: 2026-09-15Due: 2026-10-15
| Item | Qty | Price |
|---|---|---|
| Design Services | 1 | $150 |
| Development Hours | 5 | $100 |
SubtotalNaN
Tax (10%)NaN
TotalNaN
THERMAL RECEIPT#I0C9KN
Design Consultation$150
Development Hours$200
Total$385.00
Thank you for your purchase!
Subtotal$377.00
Tax$30.16
Total$407.16
Color
Size
✓✓✓✓✓✓
Order #102938Processing
Design Services1x
Development5x
VIP
LOYALTY TIER
$100
Jordan Daisy
Happy Birthday!
J
Jordan Daisy
Product Designer
UX
Badge: EMP-8942
Wedding Reception
Please confirm your attendance
Installation
Tokens guide →Add to your project via CLI (zero dependencies, code you own):
npx bigbullui add rsvp-cardOr install the full npm package:
npm install bigbulluiUsage
import { RsvpCard } from "@/components/ui/rsvp-card";
<RsvpCard />Source code
rsvp-card.tsxZero dependencies (only React + utils). Copy and paste directly into your project:
"use client";
import * as React from "react";
import { cn } from "./lib/utils";
export interface RsvpCardProps {
eventTitle: string;
attending?: boolean;
onToggle?: (attending: boolean) => void;
className?: string;
}
const CheckEnter = "rsvp-check-enter";
const FadeIn = "rsvp-fade-in";
export function RsvpCard({
eventTitle,
attending = false,
onToggle,
className,
}: RsvpCardProps) {
return (
<div
className={cn(
"rounded-lg border border-foreground bg-card text-card-foreground p-6 transition-all duration-300 hover:translate-y-1 hover:shadow-lg motion-reduce:transition-none motion-reduce:translate-y-0 motion-reduce:shadow-none",
className
)}
>
<div className="flex items-start gap-4">
{/* Checkmark / toggle */}
<button
onClick={() => onToggle?.(!attending)}
className={cn(
"flex size-8 rounded-full border-2 border-dashed border-border items-center justify-center cursor-pointer transition-colors duration-150",
attending && "bg-accent text-accent",
!attending && "hover:bg-accent hover:text-accent-foreground",
CheckEnter
)}
>
{attending ? (
<svg width="1em" height="1em" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true">
<path d="M9 16l6-6l6 6l-1.41-1.41L11 13.17l4.29-4.31L15 9l-6-6-6 6z" />
</svg>
) : (
<svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" aria-hidden="true">
<rect x="3" y="3" width="18" height="18" rx="2" ry="2" />
<path d="M9 9V9m9 0h2" />
</svg>
)}
</button>
{/* Event info */}
<div className="flex-1">
<h3 className="font-medium line-clamp-1">{eventTitle}</h3>
<p className="text-sm text-muted-foreground line-clamp-1 mt-1">
Please confirm your attendance
</p>
</div>
</div>
</div>
);
}Props
| Prop | Type | Description |
|---|---|---|
| eventTitle | string | Event name (required). |
| attending | boolean | Controlled RSVP state. |
| onToggle | (attending: boolean) => void | RSVP toggle callback. |