Getting Started
Components52
- Accordion
- Alert
- Alert Dialog
- Attachment
- Badge
- Breadcrumb
- Bubble
- Button
- Button Group
- Calendar
- Card
- Checkbox
- Collapsible
- Command
- Context Menu
- Data Table
- Dialog
- Drawer
- Dropdown Menu
- Empty
- Field
- Hover Card
- Input
- Input Group
- Item
- Kbd
- Label
- Marker
- Menubar
- Message
- Message Scroller
- Pagination
- Popover
- Progress
- Questionnaire
- Radio Group
- Scroll Area
- Select
- Separator
- Sheet
- Sidebar
- Skeleton
- Slider
- Sonner
- Spinner
- Switch
- Table
- Tabs
- Textarea
- Toggle
- Toggle Group
- Tooltip
Two-factor authentication
Ask for a code from your phone when you sign in.
Tool permissions
Let Marketer read and update your storefront theme.
Products synced
1,284
import { PackageIcon, ShieldCheckIcon } from "lucide-react"
import { Button } from "@/components/ui/button"
import {
Item,
ItemActions,
ItemContent,
ItemDescription,
ItemGroup,
ItemMedia,
ItemTitle,
} from "@/components/ui/item"
export function ItemDemo() {
return (
<ItemGroup className="max-w-md">
<Item variant="outline">
<ItemMedia variant="icon">
<ShieldCheckIcon />
</ItemMedia>
<ItemContent>
<ItemTitle>Two-factor authentication</ItemTitle>
<ItemDescription>
Ask for a code from your phone when you sign in.
</ItemDescription>
</ItemContent>
<ItemActions>
<Button size="sm" variant="secondary">
Enable
</Button>
</ItemActions>
</Item>
<Item variant="muted">
<ItemContent>
<ItemTitle>Tool permissions</ItemTitle>
<ItemDescription>
Let Marketer read and update your storefront theme.
</ItemDescription>
</ItemContent>
</Item>
<Item>
<ItemMedia variant="icon">
<PackageIcon />
</ItemMedia>
<ItemContent>
<ItemTitle>Products synced</ItemTitle>
</ItemContent>
<ItemActions>
<span className="text-muted-foreground">1,284</span>
</ItemActions>
</Item>
</ItemGroup>
)
}Installation#
pnpm dlx shadcn@latest add https://ui.ikramhasan.com/r/item.json
Usage#
import {
Item,
ItemActions,
ItemContent,
ItemDescription,
ItemMedia,
ItemTitle,
} from "@/components/ui/item"<Item>
<ItemMedia variant="icon">
<Icon />
</ItemMedia>
<ItemContent>
<ItemTitle>Title</ItemTitle>
<ItemDescription>Description</ItemDescription>
</ItemContent>
<ItemActions>
<Button>Action</Button>
</ItemActions>
</Item>Examples#
App list#
S
Shopify
Products, orders and customers from your store.
Connected
M
Meta Ads
Facebook and Instagram campaigns, creatives and audiences.
import { PlusIcon } from "lucide-react"
import { Badge } from "@/components/ui/badge"
import { Button } from "@/components/ui/button"
import {
Item,
ItemActions,
ItemContent,
ItemDescription,
ItemGroup,
ItemMedia,
ItemTitle,
} from "@/components/ui/item"
export function ItemAppList() {
return (
<ItemGroup className="max-w-md">
<Item>
<ItemMedia variant="image">
<Tile letter="S" className="bg-[#5e8e3e]" />
</ItemMedia>
<ItemContent>
<ItemTitle>Shopify</ItemTitle>
<ItemDescription>
Products, orders and customers from your store.
</ItemDescription>
</ItemContent>
<ItemActions>
<Badge className="bg-success/15 text-success">Connected</Badge>
</ItemActions>
</Item>
<Item>
<ItemMedia variant="image">
<Tile letter="M" className="bg-[#1877f2]" />
</ItemMedia>
<ItemContent>
<ItemTitle>Meta Ads</ItemTitle>
<ItemDescription>
Facebook and Instagram campaigns, creatives and audiences.
</ItemDescription>
</ItemContent>
<ItemActions>
<Button size="icon" variant="secondary" aria-label="Connect Meta Ads">
<PlusIcon />
</Button>
</ItemActions>
</Item>
</ItemGroup>
)
}
// Partner apps show their own logo in a tile. These stand in for logos.
function Tile({ letter, className }: { letter: string; className: string }) {
return (
<div
className={`flex size-full items-center justify-center text-sm font-semibold text-white ${className}`}
>
{letter}
</div>
)
}Store list (links, separators)#
import { ChevronRightIcon, StoreIcon } from "lucide-react"
import {
Item,
ItemActions,
ItemContent,
ItemGroup,
ItemMedia,
ItemSeparator,
ItemTitle,
} from "@/components/ui/item"
export function ItemLinks() {
return (
<ItemGroup className="max-w-md gap-0 overflow-hidden rounded-xl border">
<Item render={<a href="#item" />} className="rounded-none">
<ItemMedia variant="icon">
<StoreIcon />
</ItemMedia>
<ItemContent>
<ItemTitle>Acme Store</ItemTitle>
</ItemContent>
<ItemActions>
<ChevronRightIcon className="size-4 text-muted-foreground" />
</ItemActions>
</Item>
<ItemSeparator className="my-0" />
<Item render={<a href="#item" />} className="rounded-none">
<ItemMedia variant="icon">
<StoreIcon />
</ItemMedia>
<ItemContent>
<ItemTitle>Acme Outlet</ItemTitle>
</ItemContent>
<ItemActions>
<ChevronRightIcon className="size-4 text-muted-foreground" />
</ItemActions>
</Item>
</ItemGroup>
)
}Sizes#
D
Size default
S
Size sm
X
Size xs
import {
Item,
ItemContent,
ItemGroup,
ItemMedia,
ItemTitle,
} from "@/components/ui/item"
export function ItemSizes() {
return (
<ItemGroup className="max-w-md">
{(["default", "sm", "xs"] as const).map((size) => (
<Item key={size} size={size} variant="outline">
<ItemMedia variant="image">
<Tile letter={size[0].toUpperCase()} className="bg-[#333333]" />
</ItemMedia>
<ItemContent>
<ItemTitle>Size {size}</ItemTitle>
</ItemContent>
</Item>
))}
</ItemGroup>
)
}
// Partner apps show their own logo in a tile. These stand in for logos.
function Tile({ letter, className }: { letter: string; className: string }) {
return (
<div
className={`flex size-full items-center justify-center text-sm font-semibold text-white ${className}`}
>
{letter}
</div>
)
}API Reference#
Item#
The main component for displaying content with media, title, description, and actions.
| Prop | Type | Default |
|---|---|---|
variant | "default" | "outline" | "muted" | "default" |
size | "default" | "sm" | "xs" | "default" |
render | React.ReactElement |
ItemGroup#
A container that groups related items together with consistent styling.
<ItemGroup>
<Item />
<Item />
</ItemGroup>ItemSeparator#
A separator between items in a group.
<ItemGroup>
<Item />
<ItemSeparator />
<Item />
</ItemGroup>ItemMedia#
Use ItemMedia to display media content such as icons, images, or avatars.
| Prop | Type | Default |
|---|---|---|
variant | "default" | "icon" | "image" | "default" |
<ItemMedia variant="icon">
<Icon />
</ItemMedia><ItemMedia variant="image">
<img src="..." alt="..." />
</ItemMedia>ItemContent#
Wraps the title and description of the item.
<ItemContent>
<ItemTitle>Title</ItemTitle>
<ItemDescription>Description</ItemDescription>
</ItemContent>ItemTitle#
Displays the title of the item.
<ItemTitle>Item Title</ItemTitle>ItemDescription#
Displays the description of the item.
<ItemDescription>Item description</ItemDescription>ItemActions#
Container for action buttons or other interactive elements.
<ItemActions>
<Button>Action</Button>
</ItemActions>ItemHeader#
Displays a header above the item content.
<Item>
<ItemHeader>Header</ItemHeader>
<ItemContent>...</ItemContent>
</Item>ItemFooter#
Displays a footer below the item content.
<Item>
<ItemContent>...</ItemContent>
<ItemFooter>Footer</ItemFooter>
</Item>