Dropzone
boldkit/dropzoneFreeComponent
Drag-and-drop file upload with validation, progress tracking, and file list
Live preview
live · rendered by the registry
Rendered by boldkit on their own page — this is the component running, not a screenshot of it.Install it
npx shadcn@latest add https://boldkit.dev/r/dropzone.jsonSource
1/* eslint-disable react-refresh/only-export-components */2import * as React from 'react'3import { cva, type VariantProps } from 'class-variance-authority'4import { cn } from '@/lib/utils'5import { Progress } from '@/components/ui/progress'6import { Spinner } from '@/components/ui/spinner'7import { Upload, X, File, Image, FileText, FileCode, FileAudio, FileVideo } from 'lucide-react'89// Types10export interface FileRejection {11 file: File12 errors: Array<{ code: string; message: string }>13}1415export interface DropzoneState {16 isDragging: boolean17 isDisabled: boolean18 acceptedFiles: File[]19 rejectedFiles: FileRejection[]20 reset: () => void21}2223// Variants24const dropzoneVariants = cva(25 'relative flex flex-col items-center justify-center border-3 border-dashed border-foreground transition duration-200 cursor-pointer',26 {27 variants: {28 state: {29 idle: 'bg-background hover:bg-muted/30 shadow-[4px_4px_0px_hsl(var(--shadow-color))] hover:shadow-[6px_6px_0px_hsl(var(--shadow-color))] hover:translate-x-[-2px] hover:translate-y-[-2px]',30 dragging: 'border-solid border-primary bg-primary/10 scale-[1.02] shadow-[8px_8px_0px_hsl(var(--primary))]',31 disabled: 'opacity-50 cursor-not-allowed shadow-none',32 },33 variant: {34 default: 'p-8',35 compact: 'p-6',36 minimal: 'p-3 border-2',37 },38 },39 defaultVariants: {40 state: 'idle',41 variant: 'default',42 },43 }44)4546// Dropzone Props47export interface DropzoneProps48 extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children'>,49 VariantProps<typeof dropzoneVariants> {50 onFilesAccepted: (files: File[]) => void51 onFilesRejected?: (files: FileRejection[]) => void52 accept?: Record<string, string[]>53 maxSize?: number54 maxFiles?: number55 disabled?: boolean56 children?: React.ReactNode | ((state: DropzoneState) => React.ReactNode)57}5859const Dropzone = React.forwardRef<HTMLDivElement, DropzoneProps>(60 (61 {62 onFilesAccepted,63 onFilesRejected,64 accept,65 maxSize = 10 * 1024 * 1024, // 10MB default66 maxFiles = 10,67 disabled = false,68 variant,69 className,70 children,71 ...props72 },73 ref74 ) => {75 const [isDragging, setIsDragging] = React.useState(false)76 const [isFocused, setIsFocused] = React.useState(false)77 const [acceptedFiles, setAcceptedFiles] = React.useState<File[]>([])78 const [rejectedFiles, setRejectedFiles] = React.useState<FileRejection[]>([])79// … truncated
What it pulls in
npm packages
Other registry items
Files it writes
More from boldkit
All 94 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| Accordionaccordion | boldkit | Components | Free | 2 deps | |
| Alertalert | boldkit | Components | Free | 2 deps | |
| Alert Dialogalert-dialog | boldkit | Components | Free | 1 dep | |
| ASCII Shapesascii-shapes | boldkit | Components | Free | no deps | |
| Aspect Ratioaspect-ratio | boldkit | Components | Free | 1 dep | |
| Avataravatar | boldkit | Components | Free | 1 dep | |
| Badgebadge | boldkit | Components | Free | 1 dep | |
| Breadcrumbbreadcrumb | boldkit | Components | Free | 2 deps |
