Dropzone
retab-ui/dropzoneFreeComponent
A headless file-intake primitive with drag/drop, file input wiring, validation, controlled state, and accessibility prop getters.
Install it
npx shadcn@latest add https://ui.retab.com/r/dropzone.jsonSource
1"use client";23import * as React from "react";4import { Slot } from "@radix-ui/react-slot";56import { useKeyedMountEffect } from "@/hooks/use-keyed-mount-effect";7import {8 formatDropzoneAccept,9 parseDropzoneAccept,10 validateDropzoneFiles,11 type DropzoneAcceptRule,12 type DropzoneFileRejection,13 type DropzoneIntake,14} from "@/components/ui/dropzone-core";1516export {17 formatDropzoneAccept,18 matchesDropzoneAccept,19 parseDropzoneAccept,20 validateDropzoneFile,21 validateDropzoneFiles,22 type DropzoneAcceptRule,23 type DropzoneFileRejection,24 type DropzoneIntake,25} from "@/components/ui/dropzone-core";2627export type DropzoneFileItem = {28 id: string;29 file: File;30};3132type MaybePromise<T> = T | Promise<T>;3334export type DropzoneFilesValidatorContext = {35 acceptedFiles: File[];36 currentCount: number;37 currentFiles: DropzoneFileItem[];38 fileRejections: DropzoneFileRejection[];39};4041export type DropzoneFilesValidatorResult =42 | DropzoneFileRejection[]43 | DropzoneIntake44 | null45 | undefined46 | void;4748export type DropzoneIntakeSource = "drop" | "input" | (string & {});4950export type DropzoneIntakeDetails = {51 source: DropzoneIntakeSource;52};5354export type DropzoneOpenFileDialogOptions = {55 source?: DropzoneIntakeSource;56};5758type DropzoneDataAttributes = {59 [key: `data-${string}`]: string | undefined;60};6162type DropzoneRootGetterProps<T extends HTMLElement> = React.HTMLAttributes<T> &63 Partial<DropzoneDataAttributes>;6465type DropzoneInputGetterProps = React.ComponentPropsWithRef<"input"> &66 Partial<DropzoneDataAttributes>;6768type DropzoneTriggerGetterProps<T extends HTMLElement> =69 React.HTMLAttributes<T> &70 Partial<DropzoneDataAttributes> & {71 /** The trigger is a real `<button>`; suppress the ARIA-button polyfill. */72 native?: boolean;73 source?: DropzoneIntakeSource;74 };7576export type UseDropzoneProps = {77 accept?: string | DropzoneAcceptRule[];78 inputAccept?: string | DropzoneAcceptRule[];79 currentFileCount?: number;80 disabled?: boolean;81 dragScope?: "root" | "document";82 files?: DropzoneFileItem[];83 defaultFiles?: DropzoneFileItem[];84 maxFiles?: number;85 maxSize?: number;86 multiple?: boolean;87 onFilesChange?: (files: DropzoneFileItem[]) => void;88 onIntake?: (intake: DropzoneIntake, details: DropzoneIntakeDetails) => void;89 storeFiles?: boolean;90 validateFiles?: (91 files: File[],92 context: DropzoneFilesValidatorContext,93 ) => MaybePromise<DropzoneFilesValidatorResult>;94};9596export type UseDropzoneReturn = {97// … truncated
What it pulls in
npm packages
Other registry items
Files it writes
More from retab-ui
All 130 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| Alertalert | retab-ui | Components | Free | 1 dep | |
| Alert Dialogalert-dialog | retab-ui | Components | Free | 1 dep | |
| Aspect Ratioaspect-ratio | retab-ui | Components | Free | no deps | |
| Attachment Sidebarattachment-sidebar | retab-ui | Components | Free | 1 dep | |
| Autocompleteautocomplete | retab-ui | Components | Free | 2 deps | |
| Calendarcalendar | retab-ui | Components | Free | 2 deps | |
| Code Viewercode-viewer | retab-ui | Components | Free | 2 deps · 32 files | |
| Commandcommand | retab-ui | Components | Free | 2 deps |
