Ballmac UI home

Chat Attachment

File chips and image tiles for composers and messages, with type detection, sizes, upload progress, failed-upload retry, remove and open actions, and animated list changes.

Q3-revenue-report.pdfPDF · 2.4 MB
customers-export.csvUploading 62%
migration-notes.mdDoc · 9.6 KB
design-assets.zipFile is too large

Installation

$ pnpm dlx shadcn@latest add @ballmac/chat-attachment

Usage

import { ChatAttachment, ChatAttachmentList, attachmentKind, formatFileSize } from "@/components/ballmac/chat-attachment"

The full example is in the Code tab above.

Examples

Image tiles

Select a tile to open it.

API reference

<ChatAttachment>

PropTypeDefault
name*

File name, including its extension.

string—
size

Size in bytes.

number—
type

MIME type, such as `image/png`. Improves the icon and image detection.

string—
previewUrl

Image URL (or object URL) shown as the thumbnail for images.

string—
status

"ready" is normal, "uploading" shows progress, "error" shows the message and a retry button.

"ready" | "uploading" | "error""ready"
progress

Upload progress from 0 to 100. Leave out for an indeterminate bar.

number—
error

Shown in the error state.

string"Upload failed"
variant

"chip" is a compact row for the composer, "tile" is a square preview for messages and galleries.

"chip" | "tile""chip"
onRemove

Adds a remove button. Its label is "Remove <name>".

() => void—
onRetry

Adds a retry button in the error state.

() => void—
onOpen

Makes the attachment a button, for example to open a viewer.

() => void—

<ChatAttachmentList>

PropTypeDefault
label

Accessible name of the list.

string—

Also accepts the standard attributes of its root element.

Accessibility

KeyAction
TabReaches open, retry and remove for each file
Enter / SpaceRuns the focused action
Screen readersList of attachments, buttons named 'Remove report.pdf', and a progressbar per upload

Use with AI

<ChatAttachmentList> holds <ChatAttachment name size type previewUrl status progress onRemove onRetry onOpen variant='chip'|'tile'>. Kind and icon come from the MIME type or extension. Also exports formatFileSize and attachmentKind. With the shadcn MCP server set up (guide), ask your agent:

Add the Ballmac UI Chat Attachment (@ballmac/chat-attachment) to this project with the shadcn MCP, then use it where it fits.

Use it for

  • Files staged in a prompt input before sending
  • Attachments shown inside a sent message

Not for

  • A drag and drop upload area
  • Generic file tables

Registry JSON: https://ui.ballmac.com/r/chat-attachment.json

Credits

Free to use in personal and commercial projects.