--- title: Attachment description: Displays a file or image attachment with media, metadata, upload state, and actions. base: base component: true --- The `Attachment` component displays a file or image attachment, its media, name, and metadata, with optional actions and upload state. Use it for files and images in chat composers, message threads, and upload lists. ## Installation Command Manual ```bash npx shadcn@latest add attachment ``` Install the required shadcn/ui dependencies: ```bash npx shadcn@latest add button ``` Copy and paste the following code into your project. Update the import paths to match your project setup. ## Usage ```tsx import { Attachment, AttachmentAction, AttachmentActions, AttachmentContent, AttachmentDescription, AttachmentMedia, AttachmentTitle, } from "@/components/ui/attachment" ``` ```tsx sales-dashboard.pdf PDF · 2.4 MB ``` ## Composition Use the following composition to build an attachment: ```text Attachment ├── AttachmentMedia ├── AttachmentContent │ ├── AttachmentTitle │ └── AttachmentDescription ├── AttachmentActions │ └── AttachmentAction └── AttachmentTrigger ``` Use `AttachmentGroup` to lay out multiple attachments in a scrollable row: ```text AttachmentGroup ├── Attachment └── Attachment ``` ## Features - Icon and image media through `AttachmentMedia` - Upload states: `idle`, `uploading`, `processing`, `error`, and `done` with built-in styling and a shimmer while in progress - Three sizes and horizontal or vertical orientation - A full-card `AttachmentTrigger` that opens a link or dialog while the actions stay independently clickable - Scrollable, snapping `AttachmentGroup` with an edge fade - Customizable styling through the `className` prop on every part ## Examples ### Image Set `variant="image"` on `AttachmentMedia` and render an `` inside it. Use `orientation="vertical"` to stack the media above the content. ### States Set `state` to reflect the upload lifecycle. `uploading` and `processing` shimmer the title, and `error` switches to a destructive treatment. ### Sizes Use `size` to switch between `default`, `sm`, and `xs`. ### Group Wrap attachments in `AttachmentGroup` to lay them out in a horizontally scrollable, snapping row with an edge fade. ### Trigger Add an `AttachmentTrigger` to make the whole card open a link or dialog. It fills the card behind the actions, so the actions stay clickable. ```tsx showLineNumbers {/* media, content, actions */} } /> {/* ... */} ``` ## Accessibility `AttachmentAction` renders a `Button`, and `AttachmentTrigger` renders a real `