@aelig/dropzone
Dropzone
Add
pnpm dlx shadcn@latest add @aelig/dropzoneA composable file dropzone with upload status, retry, and validation helpers.
Preview
PDF or image files up to 5MB.
Usage
"use client"
import {
Dropzone,
DropZoneArea,
DropzoneDescription,
DropzoneFileList,
DropzoneFileListItem,
DropzoneMessage,
DropzoneTrigger,
useDropzone,
} from "@/components/ui/dropzone"
export function UploadDocuments() {
const dropzone = useDropzone({
validation: {
maxFiles: 3,
maxSize: 5 * 1024 * 1024,
},
onDropFile: async (file) => ({
status: "success",
result: { name: file.name },
}),
})
return (
<Dropzone {...dropzone}>
<DropzoneDescription>PDF or image files up to 5MB.</DropzoneDescription>
<DropZoneArea>
<DropzoneTrigger>Select files</DropzoneTrigger>
</DropZoneArea>
<DropzoneMessage />
<DropzoneFileList>
{dropzone.fileStatuses.map((file) => (
<DropzoneFileListItem key={file.id} file={file}>
{file.fileName}
</DropzoneFileListItem>
))}
</DropzoneFileList>
</Dropzone>
)
}Variants and options
validation
Configure maxFiles, maxSize, minSize, and accepted types.
file actions
Use remove and retry controls inside file list items.
upload state
Render pending, success, and error file states.