# 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 |