Card
Full composition
Compound API: Card.Root, Media, Header, Title, Description, Action, Content, Footer.
Notifications
A summary of changes over the past week.
You have 3 unread messages and 1 scheduled event.
tsx
import { Button } from "~/components/ui/base/button";
import { Card } from "~/components/ui/base/card";
<Card.Root class="max-w-md">
<Card.Header>
<Card.Title>Notifications</Card.Title>
<Card.Description>
A summary of changes over the past week.
</Card.Description>
</Card.Header>
<Card.Content>
<p class="text-body text-secondary-label">
You have 3 unread messages and 1 scheduled event.
</p>
</Card.Content>
<Card.Footer class="gap-2">
<Button variant="secondary" size="sm">
Later
</Button>
<Button size="sm">Open</Button>
</Card.Footer>
</Card.Root>
Header with action
Card.Action enables a two-column layout in the header (title and description on the left, action on the right).
Account
Sign in with email and password.
… form …
tsx
import { Button } from "~/components/ui/base/button";
import { Card } from "~/components/ui/base/card";
<Card.Root class="max-w-md">
<Card.Header>
<Card.Title>Account</Card.Title>
<Card.Description>Sign in with email and password.</Card.Description>
<Card.Action>
<Button
variant="secondary"
size="sm"
class="border-0 bg-transparent px-2 text-link shadow-none hover:bg-transparent hover:underline"
>
Sign up
</Button>
</Card.Action>
</Card.Header>
<Card.Content>
<p class="text-body text-secondary-label">… form …</p>
</Card.Content>
</Card.Root>
Media on top
Card.Media with variant="image" for aspect ratio and image fill; the card root has overflow-hidden.
Design systems meetup
Components, accessibility and faster delivery.
Featured
tsx
import { Badge } from "~/components/ui/base/badge";
import { Button } from "~/components/ui/base/button";
import { Card } from "~/components/ui/base/card";
<Card.Root class="max-w-sm">
<Card.Media variant="image">
<img
src="https://picsum.photos/seed/qcard/640/360"
width={640}
height={360}
alt="Event illustration"
/>
</Card.Media>
<Card.Header>
<Card.Title>Design systems meetup</Card.Title>
<Card.Description>
Components, accessibility and faster delivery.
</Card.Description>
<Card.Action>
<Badge variant="secondary">Featured</Badge>
</Card.Action>
</Card.Header>
<Card.Footer>
<Button class="w-full">Event details</Button>
</Card.Footer>
</Card.Root>
Content only
A minimal card with only Card.Content and custom padding via class.
A content-only card — custom padding via class na Card.Content.
tsx
import { Card } from "~/components/ui/base/card";
<Card.Root class="max-w-sm">
<Card.Content class="pt-6">
<p class="text-body text-label">
A content-only card — custom padding via{" "}
<code class="text-caption-1">class</code> na{" "}
<code class="text-caption-1">Card.Content</code>.
</p>
</Card.Content>
</Card.Root>
Metadata
Source: meta.generated.json (see npm run generate)
File base/card/meta.generated.json not found or path not allowed.