Card
Used to group and present information in a structured box.
card-demo.tsx
import Image from "next/image"
import { LinkIcon, SendIcon } from "lucide-react"
import { Button } from "@/components/ui/button"
import {
Card,
CardContent,
CardDescription,
CardFooter,
CardHeader,
CardTitle,
} from "@/components/ui/card"
import { Input } from "@/components/ui/input"
import { toast } from "@/components/ui/sonner"
export function CardDemo() {
return (
<Card className="max-w-96">
<CardHeader>
<CardTitle>Invite Team Members</CardTitle>
<CardDescription>
Invite your team members to join your workspace.
</CardDescription>
</CardHeader>
<CardContent className="space-y-4">
<div className="flex gap-2">
<Input inputWrapperClassName="w-full" placeholder="Email" />
<Button className="shrink-0" size="icon">
<SendIcon />
</Button>
</div>
<div className="flex flex-col gap-2">
<p className="text-sm text-muted-foreground">
You can invite up to 10 team members. You have 8 invites left.
</p>
</div>
<div className="flex flex-col gap-4">
<h4 className="text-sm font-medium">Invited Members</h4>
<div className="flex items-center gap-2">
<Image
src="/memoji-1.png"
alt="Avatar"
width={24}
height={24}
className="size-8 rounded-full"
/>
<div className="flex flex-col text-xs">
<p className="font-medium">Karen Smith</p>
<p className="text-muted-foreground">karen@9.ui</p>
</div>
</div>
<div className="flex items-center gap-2">
<Image
src="/memoji-3.png"
alt="Avatar"
width={24}
height={24}
className="size-8 rounded-full"
/>
<div className="flex flex-col text-xs">
<p className="font-medium">Chris Williams</p>
<p className="text-muted-foreground">chris@9.ui</p>
</div>
</div>
</div>
</CardContent>
<CardFooter>
<Button
className="w-full gap-x-2"
variant="link"
onClick={() => {
toast.success("Invite link copied to clipboard")
}}
>
<LinkIcon size={16} />
Invite with link
</Button>
</CardFooter>
</Card>
)
}
Installation
npx shadcn@latest add https://9ui.dev/r/card
Usage
Imports
import {
Card,
CardContent,
CardDescription,
CardFooter,
CardHeader,
CardTitle,
} from "@/components/ui/card"
Anatomy
<Card>
<CardHeader>
<CardTitle />
<CardDescription />
</CardHeader>
<CardContent>
<CardFooter />
</Card>
Examples
With image
card-with-image.tsx
import Image from "next/image"
import { Button } from "@/components/ui/button"
import {
Card,
CardDescription,
CardFooter,
CardHeader,
CardTitle,
} from "@/components/ui/card"
export function CardWithImage() {
return (
<Card className="max-w-80">
<CardHeader>
<div className="relative aspect-video rounded-lg">
<Image
src="https://images.pexels.com/photos/1616403/pexels-photo-1616403.jpeg?auto=compress&cs=tinysrgb&w=450&h=800&dpr=2"
alt="Blog Image"
fill
className="rounded-lg"
/>
</div>
<CardTitle className="mt-2">What is 9ui?</CardTitle>
<CardDescription>
Deep dive into the 9ui components and learn how to use them in your
own projects.
</CardDescription>
</CardHeader>
<CardFooter>
<Button className="w-full">Read more</Button>
</CardFooter>
</Card>
)
}