# File Upload A component for uploading files with drag-and-drop and browse support. ```tsx import { FileUpload } from '@skeletonlabs/skeleton-react'; export default function Default() { return ( Label Browse Files {(fileUpload) => fileUpload.acceptedFiles.map((file) => ( {file.name} {file.size} bytes )) } ); } ``` ## Custom Content Supply your own text and icons within the dropzone. ```tsx import { FileUpload } from '@skeletonlabs/skeleton-react'; import { FileIcon } from 'lucide-react'; export default function Default() { return ( Select file or drag here. Browse Files {(fileUpload) => fileUpload.acceptedFiles.map((file) => ( {file.name} {file.size} bytes )) } ); } ``` ## Disabled ```tsx import { FileUpload } from '@skeletonlabs/skeleton-react'; export default function Disabled() { return ( Browse Files {(fileUpload) => fileUpload.acceptedFiles.map((file) => ( {file.name} {file.size} bytes )) } ); } ``` ## Button Only ```tsx import { FileUpload } from '@skeletonlabs/skeleton-react'; export default function Button() { return ( Browse Files ); } ``` ## Clear Files Use the [Provider Pattern](/docs/get-started/fundamentals#provider-pattern) to gain access to the `clearFiles` method. ```tsx import { FileUpload, useFileUpload } from '@skeletonlabs/skeleton-react'; export default function ClearFiles() { const fileUpload = useFileUpload({ defaultAcceptedFiles: [new File(['file'], 'example.png', { type: 'image/png' })], }); return (
Browse Files {(fileUpload) => fileUpload.acceptedFiles.map((file) => ( {file.name} {file.size} bytes )) }
); } ``` ## Direction ```tsx import { FileUpload } from '@skeletonlabs/skeleton-react'; export default function Dir() { return ( Label Browse Files {(fileUpload) => fileUpload.acceptedFiles.map((file) => ( {file.name} {file.size} bytes )) } ); } ``` ## API Reference ### FileUploadRootProps | Property | Default | Type | Description | | --------------------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | | name? | - | string \| undefined | The name of the underlying file input | | ids? | - | Partial\<\{ root: string; dropzone: string; hiddenInput: string; trigger: string; label: string; item: (id: string) => string; itemName: (id: string) => string; itemSizeText: (id: string) => string; itemPreview: (id: string) => string; }> \| undefined | The ids of the elements. Useful for composition. | | translations? | - | IntlTranslations \| undefined | The localized messages to use. | | accept? | - | Record\ \| FileMimeType \| FileMimeType\[] \| undefined | The accept file types | | disabled? | - | boolean \| undefined | Whether the file input is disabled | | required? | - | boolean \| undefined | Whether the file input is required | | allowDrop? | true | boolean \| undefined | Whether to allow drag and drop in the dropzone element | | maxFileSize? | Infinity | number \| undefined | The maximum file size in bytes | | minFileSize? | 0 | number \| undefined | The minimum file size in bytes | | maxFiles? | 1 | number \| undefined | The maximum number of files | | preventDocumentDrop? | true | boolean \| undefined | Whether to prevent the drop event on the document | | validate? | - | ((file: File, details: FileValidateDetails) => FileError\[] \| null) \| undefined | Function to validate a file | | defaultAcceptedFiles? | - | File\[] \| undefined | The default accepted files when rendered. Use when you don't need to control the accepted files of the input. | | acceptedFiles? | - | File\[] \| undefined | The controlled accepted files | | onFileChange? | - | ((details: FileChangeDetails) => void) \| undefined | Function called when the value changes, whether accepted or rejected | | onFileAccept? | - | ((details: FileAcceptDetails) => void) \| undefined | Function called when the file is accepted | | onFileReject? | - | ((details: FileRejectDetails) => void) \| undefined | Function called when the file is rejected | | capture? | - | "user" \| "environment" \| undefined | The default camera to use when capturing media | | directory? | - | boolean \| undefined | Whether to accept directories, only works in webkit browsers | | invalid? | - | boolean \| undefined | Whether the file input is invalid | | transformFiles? | - | ((files: File\[]) => Promise\) \| undefined | Function to transform the accepted files to apply transformations | | locale? | "en-US" | string \| undefined | The current locale. Based on the BCP 47 definition. | | dir? | "ltr" | "ltr" \| "rtl" \| undefined | The document's text/writing direction. | | getRootNode? | - | (() => ShadowRoot \| Node \| Document) \| undefined | A root node to correctly resolve document in custom environments. E.x.: Iframes, Electron. | | element? | - | ((attributes: HTMLAttributes\<"div">) => Element) \| undefined | Render the element yourself | ### FileUploadRootProviderProps | Property | Default | Type | Description | | -------- | ------- | -------------------------------------------------------------- | --------------------------- | | value | - | FileUploadApi\ | - | | element? | - | ((attributes: HTMLAttributes\<"div">) => Element) \| undefined | Render the element yourself | ### FileUploadRootContextProps | Property | Default | Type | Description | | -------- | ------- | ---------------------------------------------------- | ----------- | | children | - | (fileUpload: FileUploadApi\) => ReactNode | - | ### FileUploadLabelProps | Property | Default | Type | Description | | -------- | ------- | ---------------------------------------------------------------- | --------------------------- | | element? | - | ((attributes: HTMLAttributes\<"label">) => Element) \| undefined | Render the element yourself | ### FileUploadDropzoneProps | Property | Default | Type | Description | | -------- | ------- | -------------------------------------------------------------- | --------------------------- | | element? | - | ((attributes: HTMLAttributes\<"div">) => Element) \| undefined | Render the element yourself | ### FileUploadTriggerProps | Property | Default | Type | Description | | -------- | ------- | ----------------------------------------------------------------- | --------------------------- | | element? | - | ((attributes: HTMLAttributes\<"button">) => Element) \| undefined | Render the element yourself | ### FileUploadHiddenInputProps | Property | Default | Type | Description | | -------- | ------- | ---------------------------------------------------------------- | --------------------------- | | element? | - | ((attributes: HTMLAttributes\<"input">) => Element) \| undefined | Render the element yourself | ### FileUploadItemGroupProps | Property | Default | Type | Description | | -------- | ------- | ------------------------------------------------------------- | --------------------------- | | element? | - | ((attributes: HTMLAttributes\<"ul">) => Element) \| undefined | Render the element yourself | ### FileUploadItemProps | Property | Default | Type | Description | | -------- | ------- | ------------------------------------------------------------- | --------------------------- | | file | - | File | - | | type? | - | ItemType \| undefined | - | | element? | - | ((attributes: HTMLAttributes\<"li">) => Element) \| undefined | Render the element yourself | ### FileUploadItemNameProps | Property | Default | Type | Description | | -------- | ------- | -------------------------------------------------------------- | --------------------------- | | element? | - | ((attributes: HTMLAttributes\<"div">) => Element) \| undefined | Render the element yourself | ### FileUploadItemSizeTextProps | Property | Default | Type | Description | | -------- | ------- | -------------------------------------------------------------- | --------------------------- | | element? | - | ((attributes: HTMLAttributes\<"div">) => Element) \| undefined | Render the element yourself | ### FileUploadItemDeleteTriggerProps | Property | Default | Type | Description | | -------- | ------- | ----------------------------------------------------------------- | --------------------------- | | element? | - | ((attributes: HTMLAttributes\<"button">) => Element) \| undefined | Render the element yourself |