The Item
component is a straightforward flex container that can house nearly any type of content. Use it to display a title, description, and actions. Group it with the ItemGroup
component to create a list of items.
You can pretty much achieve the same result with the div
element and some classes, but I've built this so many times that I decided to create a component for it. Now I use it all the time.
Component item-demo
not found in registry.
Installation
npx shadcn@latest add item
Usage
import {
Item,
ItemActions,
ItemContent,
ItemDescription,
ItemFooter,
ItemHeader,
ItemMedia,
ItemTitle,
} from "@/components/ui/item"
<Item>
<ItemHeader>Item Header</ItemHeader>
<ItemMedia />
<ItemContent>
<ItemTitle>Item</ItemTitle>
<ItemDescription>Item</ItemDescription>
</ItemContent>
<ItemActions />
<ItemFooter>Item Footer</ItemFooter>
</Item>
Item vs Field
Use Field
if you need to display a form input such as a checkbox, input, radio, or select.
If you only need to display content such as a title, description, and actions, use Item
.
Examples
Variants
Component item-variant
not found in registry.
Size
The Item
component has different sizes for different use cases. For example, you can use the sm
size for a compact item or the default
size for a standard item.
Component item-size
not found in registry.
Icon
Component item-icon
not found in registry.
Avatar
Component item-avatar
not found in registry.
Image
Component item-image
not found in registry.
Group
Component item-group
not found in registry.
Header
Component item-header
not found in registry.
Link
To render an item as a link, use the asChild
prop. The hover and focus states will be applied to the anchor element.
Component item-link
not found in registry.
<Item asChild>
<a href="/dashboard">
<ItemMedia />
<ItemContent>
<ItemTitle>Dashboard</ItemTitle>
<ItemDescription>Overview of your account and activity.</ItemDescription>
</ItemContent>
<ItemActions />
</a>
</Item>
Dropdown
Component item-dropdown
not found in registry.
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" | "default" |
asChild | boolean | false |
<Item size="" variant="">
<ItemMedia />
<ItemContent>
<ItemTitle>Item</ItemTitle>
<ItemDescription>Item</ItemDescription>
</ItemContent>
<ItemActions />
</Item>
You can use the asChild
prop to render a custom component as the item, for example a link. The hover and focus states will be applied to the custom component.
import {
Item,
ItemContent,
ItemDescription,
ItemMedia,
ItemTitle,
} from "@/components/ui/item"
export function ItemLink() {
return (
<Item asChild>
<a href="/dashboard">
<ItemMedia variant="icon">
<Home />
</ItemMedia>
<ItemContent>
<ItemTitle>Dashboard</ItemTitle>
<ItemDescription>
Overview of your account and activity.
</ItemDescription>
</ItemContent>
</a>
</Item>
)
}
ItemGroup
The ItemGroup
component is a container that groups related items together with consistent styling.
Prop | Type | Default |
---|---|---|
className | string |
<ItemGroup>
<Item />
<Item />
</ItemGroup>
ItemSeparator
The ItemSeparator
component is a separator that separates items in the item group.
Prop | Type | Default |
---|---|---|
className | string |
<ItemGroup>
<Item />
<ItemSeparator />
<Item />
</ItemGroup>
ItemMedia
Use the ItemMedia
component to display media content such as icons, images, or avatars.
Prop | Type | Default |
---|---|---|
variant | "default" | "icon" | "image" | "default" |
className | string |
<ItemMedia variant="icon">
<Icon />
</ItemMedia>
<ItemMedia variant="image">
<img src="..." alt="..." />
</ItemMedia>
ItemContent
The ItemContent
component wraps the title and description of the item.
You can skip ItemContent
if you only need a title.
Prop | Type | Default |
---|---|---|
className | string |
<ItemContent>
<ItemTitle>Item</ItemTitle>
<ItemDescription>Item</ItemDescription>
</ItemContent>
ItemTitle
Use the ItemTitle
component to display the title of the item.
Prop | Type | Default |
---|---|---|
className | string |
<ItemTitle>Item Title</ItemTitle>
ItemDescription
Use the ItemDescription
component to display the description of the item.
Prop | Type | Default |
---|---|---|
className | string |
<ItemDescription>Item description</ItemDescription>
ItemActions
Use the ItemActions
component to display action buttons or other interactive elements.
Prop | Type | Default |
---|---|---|
className | string |
<ItemActions>
<Button>Action</Button>
<Button>Action</Button>
</ItemActions>
ItemHeader
Use the ItemHeader
component to display a header in the item.
Prop | Type | Default |
---|---|---|
className | string |
<ItemHeader>Item Header</ItemHeader>
ItemFooter
Use the ItemFooter
component to display a footer in the item.
Prop | Type | Default |
---|---|---|
className | string |
<ItemFooter>Item Footer</ItemFooter>