mirror of
https://github.com/shadcn-ui/ui.git
synced 2026-06-22 20:25:44 +00:00
* feat: add field.tsx and update blocks * feat: add input group * feat: implement button group * fix * fix * wip * fix: button group * feat: update field * fix * feat * feat: cooked * fix * chore: build registry * feat: add kbd component * chore: update input group demo * feat: update kbd component * feat: add empty * feat: add spinner * refactor: input group * feat: blocks * fix * fix: app sidebar * feat: add label to app sidebar * fix * fix * fix * fix * fix * feat * feat * fix * docs: button group * feat: add docs * docs: kbd * docs: empty * fix * docs * docs * feat: add sink link * fix * fix * docs * feat: add new page * fix * fix * fix * fix * fix * fix * feat: add registration form * fix: chat settings * fix * fix preview * fix examples * feat: add changelog * fix * fix * fix * fix * fix * feat(www): add t3 versions * chore: build registry * fix * fix * fix * feat: inline code examples for llm * fix * feat: home * fix * fix * fix * fix * fix * chore: changelog * fix * fix * fix * fix: callout * fix
318 lines
7.0 KiB
Plaintext
318 lines
7.0 KiB
Plaintext
---
|
|
title: Item
|
|
description: A versatile component that you can use to display any content.
|
|
component: true
|
|
---
|
|
|
|
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.
|
|
|
|
<ComponentPreview name="item-demo" className="[&_.preview]:p-4" />
|
|
|
|
## Installation
|
|
|
|
<CodeTabs>
|
|
|
|
<TabsList>
|
|
<TabsTrigger value="cli">CLI</TabsTrigger>
|
|
<TabsTrigger value="manual">Manual</TabsTrigger>
|
|
</TabsList>
|
|
<TabsContent value="cli">
|
|
|
|
```bash
|
|
npx shadcn@latest add item
|
|
```
|
|
|
|
</TabsContent>
|
|
|
|
<TabsContent value="manual">
|
|
|
|
<Steps>
|
|
|
|
<Step>Copy and paste the following code into your project.</Step>
|
|
|
|
<ComponentSource name="item" title="components/ui/item.tsx" />
|
|
|
|
<Step>Update the import paths to match your project setup.</Step>
|
|
|
|
</Steps>
|
|
|
|
</TabsContent>
|
|
|
|
</CodeTabs>
|
|
|
|
## Usage
|
|
|
|
```tsx showLineNumbers
|
|
import {
|
|
Item,
|
|
ItemActions,
|
|
ItemContent,
|
|
ItemDescription,
|
|
ItemFooter,
|
|
ItemHeader,
|
|
ItemMedia,
|
|
ItemTitle,
|
|
} from "@/components/ui/item"
|
|
```
|
|
|
|
```tsx showLineNumbers
|
|
<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
|
|
|
|
<ComponentPreview name="item-variant" className="[&_.preview]:p-4" />
|
|
|
|
### 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.
|
|
|
|
<ComponentPreview name="item-size" className="[&_.preview]:p-4" />
|
|
|
|
### Icon
|
|
|
|
<ComponentPreview name="item-icon" className="[&_.preview]:p-4" />
|
|
|
|
### Avatar
|
|
|
|
<ComponentPreview name="item-avatar" className="[&_.preview]:p-4" />
|
|
|
|
### Image
|
|
|
|
<ComponentPreview name="item-image" className="[&_.preview]:p-4" />
|
|
|
|
### Group
|
|
|
|
<ComponentPreview name="item-group" className="[&_.preview]:p-4" />
|
|
|
|
### Header
|
|
|
|
<ComponentPreview name="item-header" className="[&_.preview]:p-4" />
|
|
|
|
### Link
|
|
|
|
To render an item as a link, use the `asChild` prop. The hover and focus states will be applied to the anchor element.
|
|
|
|
<ComponentPreview name="item-link" className="[&_.preview]:p-4" />
|
|
|
|
```tsx showLineNumbers
|
|
<Item asChild>
|
|
<a href="/dashboard">
|
|
<ItemMedia />
|
|
<ItemContent>
|
|
<ItemTitle>Dashboard</ItemTitle>
|
|
<ItemDescription>Overview of your account and activity.</ItemDescription>
|
|
</ItemContent>
|
|
<ItemActions />
|
|
</a>
|
|
</Item>
|
|
```
|
|
|
|
### Dropdown
|
|
|
|
<ComponentPreview name="item-dropdown" className="[&_.preview]:p-4" />
|
|
|
|
## 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` |
|
|
|
|
```tsx
|
|
<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.
|
|
|
|
```tsx showLineNumbers
|
|
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` | |
|
|
|
|
```tsx
|
|
<ItemGroup>
|
|
<Item />
|
|
<Item />
|
|
</ItemGroup>
|
|
```
|
|
|
|
### ItemSeparator
|
|
|
|
The `ItemSeparator` component is a separator that separates items in the item group.
|
|
|
|
| Prop | Type | Default |
|
|
| ----------- | -------- | ------- |
|
|
| `className` | `string` | |
|
|
|
|
```tsx
|
|
<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` | |
|
|
|
|
```tsx
|
|
<ItemMedia variant="icon">
|
|
<Icon />
|
|
</ItemMedia>
|
|
```
|
|
|
|
```tsx
|
|
<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` | |
|
|
|
|
```tsx
|
|
<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` | |
|
|
|
|
```tsx
|
|
<ItemTitle>Item Title</ItemTitle>
|
|
```
|
|
|
|
### ItemDescription
|
|
|
|
Use the `ItemDescription` component to display the description of the item.
|
|
|
|
| Prop | Type | Default |
|
|
| ----------- | -------- | ------- |
|
|
| `className` | `string` | |
|
|
|
|
```tsx
|
|
<ItemDescription>Item description</ItemDescription>
|
|
```
|
|
|
|
### ItemActions
|
|
|
|
Use the `ItemActions` component to display action buttons or other interactive elements.
|
|
|
|
| Prop | Type | Default |
|
|
| ----------- | -------- | ------- |
|
|
| `className` | `string` | |
|
|
|
|
```tsx
|
|
<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` | |
|
|
|
|
```tsx
|
|
<ItemHeader>Item Header</ItemHeader>
|
|
```
|
|
|
|
### ItemFooter
|
|
|
|
Use the `ItemFooter` component to display a footer in the item.
|
|
|
|
| Prop | Type | Default |
|
|
| ----------- | -------- | ------- |
|
|
| `className` | `string` | |
|
|
|
|
```tsx
|
|
<ItemFooter>Item Footer</ItemFooter>
|
|
```
|