H1
customLorem Ipsum
import { H1 } from "@/components/ui/typography"
<H1>Lorem Ipsum</H1>H2
customLorem Ipsum
import { H2 } from "@/components/ui/typography"
<H2>Lorem Ipsum</H2>H3
customLorem Ipsum
import { H3 } from "@/components/ui/typography"
<H3>Lorem Ipsum</H3>H4
customLorem Ipsum
import { H4 } from "@/components/ui/typography"
<H4>Lorem Ipsum</H4>H5
customLorem Ipsum
import { H5 } from "@/components/ui/typography"
<H5>Lorem Ipsum</H5>H6
customLorem Ipsum
import { H6 } from "@/components/ui/typography"
<H6>Lorem Ipsum</H6>Paragraph
customLorem Ipsum
import { P } from "@/components/ui/typography"
<P>Lorem Ipsum</P>List - Unordered
custom- Item 1
- Item 2
- Item 3
import { List, ListItem } from "@/components/ui/typography"
<List variant="unordered">
<ListItem>Item 1</ListItem>
</List>List - Ordered
custom- Item 1
- Item 2
- Item 3
import { List, ListItem } from "@/components/ui/typography"
<List variant="ordered">
<ListItem>Item 1</ListItem>
</List>Blockquote
customLorem Ipsum
import { Blockquote } from "@/components/ui/typography"
<Blockquote>Lorem Ipsum</Blockquote>Caption
customimport { Caption } from "@/components/ui/typography"
<Caption>Photo by...</Caption>Badge
shadcnBadgeSecondaryDestructiveOutline
import { Badge } from "@/components/ui/badge"
<div className="flex w-full flex-wrap justify-center gap-2">
<Badge>Badge</Badge>
<Badge variant="secondary">Secondary</Badge>
<Badge variant="destructive">Destructive</Badge>
<Badge variant="outline">Outline</Badge>
</div>Avatar
shadcnCN
import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"
<Avatar>
<AvatarImage src="https://github.com/shadcn.png" />
<AvatarFallback>CN</AvatarFallback>
</Avatar>Link
shadcnimport Link from "next/link"
import { Button } from "@/components/ui/button"
<Button variant="link" nativeButton={false} render={<Link href="#" />}>
View Documentation
</Button>Dropdown
shadcnimport { Button } from "@/components/ui/button"
import { DropdownMenu, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger } from "@/components/ui/dropdown-menu"
<DropdownMenu>
<DropdownMenuTrigger render={<Button variant="outline" />}>Open Menu</DropdownMenuTrigger>
<DropdownMenuContent>
<DropdownMenuGroup>
<DropdownMenuLabel>My Account</DropdownMenuLabel>
<DropdownMenuSeparator />
<DropdownMenuItem>Profile</DropdownMenuItem>
<DropdownMenuItem>Settings</DropdownMenuItem>
<DropdownMenuItem>Billing</DropdownMenuItem>
</DropdownMenuGroup>
</DropdownMenuContent>
</DropdownMenu>Input
shadcnWe will never share your email.
import { Field, FieldDescription, FieldLabel } from "@/components/ui/field"
import { Input } from "@/components/ui/input"
<Field>
<FieldLabel htmlFor="email-demo">Email</FieldLabel>
<Input id="email-demo" type="email" placeholder="name@example.com" />
<FieldDescription>
We will never share your email.
</FieldDescription>
</Field>Select
shadcnimport { Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectTrigger, SelectValue } from "@/components/ui/select"
<Select defaultValue="starter">
<SelectTrigger className="w-full max-w-xs">
<SelectValue placeholder="Choose a plan" />
</SelectTrigger>
<SelectContent>
<SelectGroup>
<SelectLabel>Plans</SelectLabel>
<SelectItem value="starter">Starter</SelectItem>
<SelectItem value="pro">Pro</SelectItem>
<SelectItem value="enterprise">Enterprise</SelectItem>
</SelectGroup>
</SelectContent>
</Select>Textarea
shadcnimport { Textarea } from "@/components/ui/textarea"
<Textarea placeholder="Type your message here." />Checkbox
shadcnimport { Checkbox } from "@/components/ui/checkbox"
import { Label } from "@/components/ui/label"
<div className="flex items-center gap-3">
<Checkbox id="terms" defaultChecked />
<Label htmlFor="terms">Accept terms and conditions</Label>
</div>Tabs
shadcnOverview content.
import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"
<Tabs defaultValue="overview">
<TabsList>
<TabsTrigger value="overview">Overview</TabsTrigger>
<TabsTrigger value="analytics">Analytics</TabsTrigger>
</TabsList>
<TabsContent value="overview">Overview content.</TabsContent>
<TabsContent value="analytics">Analytics content.</TabsContent>
</Tabs>Accordion
shadcnimport { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from "@/components/ui/accordion"
<Accordion>
<AccordionItem value="item-1">
<AccordionTrigger>Is it accessible?</AccordionTrigger>
<AccordionContent>Yes. It follows WAI-ARIA patterns.</AccordionContent>
</AccordionItem>
</Accordion>Slider
shadcnimport { Slider } from "@/components/ui/slider"
<Slider defaultValue={[40]} max={100} step={1} />Modal
shadcnimport { Button } from "@/components/ui/button"
import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, DialogTrigger } from "@/components/ui/dialog"
<Dialog>
<DialogTrigger render={<Button variant="outline" />}>Open Modal</DialogTrigger>
<DialogContent>
<DialogHeader>
<DialogTitle>Edit profile</DialogTitle>
<DialogDescription>Make changes to your profile and save when done.</DialogDescription>
</DialogHeader>
</DialogContent>
</Dialog>Pagination
shadcnimport { Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious } from "@/components/ui/pagination"
<Pagination>
<PaginationContent>
<PaginationItem><PaginationPrevious href="#" /></PaginationItem>
<PaginationItem><PaginationLink href="#" isActive>1</PaginationLink></PaginationItem>
<PaginationItem><PaginationLink href="#">2</PaginationLink></PaginationItem>
<PaginationItem><PaginationEllipsis /></PaginationItem>
<PaginationItem><PaginationNext href="#" /></PaginationItem>
</PaginationContent>
</Pagination>File Upload
shadcnimport { Input } from "@/components/ui/input"
<Input type="file" />Carousel - 1 Visible
shadcnSlide 1
Slide 2
Slide 3
Slide 4
import { Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious } from "@/components/ui/carousel"
<Carousel opts={{ align: "start", loop: true }} className="mx-auto w-full">
<CarouselContent>
{Array.from({ length: 4 }).map((_, index) => (
<CarouselItem key={`single-view-slide-${index + 1}`} className="basis-full">
<div className="rounded-lg border bg-white p-6 text-center text-sm">Slide {index + 1}</div>
</CarouselItem>
))}
</CarouselContent>
<CarouselPrevious className="left-2" />
<CarouselNext className="right-2" />
</Carousel>Carousel - 4 Visible
shadcnSlide 1
Slide 2
Slide 3
Slide 4
Slide 5
Slide 6
Slide 7
Slide 8
import { Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious } from "@/components/ui/carousel"
<Carousel opts={{ align: "start", loop: true }} className="mx-auto w-full">
<CarouselContent>
{Array.from({ length: 8 }).map((_, index) => (
<CarouselItem key={`slide-${index + 1}`} className="basis-full md:basis-1/2 lg:basis-1/4">
<div className="rounded-lg border bg-white p-6 text-center text-sm">Slide {index + 1}</div>
</CarouselItem>
))}
</CarouselContent>
<CarouselPrevious className="left-2" />
<CarouselNext className="right-2" />
</Carousel>Table
shadcn| Invoice | Status | Method | Amount |
|---|---|---|---|
| INV001 | Paid | Credit Card | $250.00 |
import { Table, TableBody, TableCaption, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table"
<Table>
<TableCaption>A list of your recent invoices.</TableCaption>
<TableHeader>
<TableRow>
<TableHead className="w-[100px]">Invoice</TableHead>
<TableHead>Status</TableHead>
<TableHead>Method</TableHead>
<TableHead className="text-right">Amount</TableHead>
</TableRow>
</TableHeader>
<TableBody>
<TableRow>
<TableCell className="font-medium">INV001</TableCell>
<TableCell>Paid</TableCell>
<TableCell>Credit Card</TableCell>
<TableCell className="text-right">$250.00</TableCell>
</TableRow>
</TableBody>
</Table>Artwork Card
customimport { ArtworkCard } from "@/components/ui/widget"
const picks = [...artworks].sort(() => Math.random() - 0.5).slice(0, 2)
<div className="flex flex-wrap gap-4">
{picks.map((artwork) => (
<ArtworkCard
key={artwork.title}
imageSrc={artwork.imageSrc}
imageAlt={artwork.imageAlt}
title={artwork.title}
artist={artwork.artist}
dimensions={artwork.dimensions}
priceLine={artwork.priceLine}
className="max-w-sm"
/>
))}
</div>