FileUpload

Alpha

An accessible file upload with drag-and-drop, file validation, and screen reader announcements for file additions and errors.

Import

import { FileUpload } from "@compa11y/react";

Usage

Example.tsx
import { FileUpload, Button, Text } from "@compa11y/react";

function AvatarUpload() {
  return (
    <FileUpload accept="image/*" maxSize={5_000_000}>
      <FileUpload.Dropzone>
        <Text size="sm" color="muted">
          Drag an image here, or
        </Text>
        <FileUpload.Trigger>
          <Button variant="outline" size="sm">Browse files</Button>
        </FileUpload.Trigger>
        <Text size="xs" color="muted">Max 5MB. JPG, PNG, or GIF.</Text>
      </FileUpload.Dropzone>
      <FileUpload.FileList />
    </FileUpload>
  );
}

Features

  • Drag-and-drop dropzone with aria-dropeffect
  • File type, size, and count validation
  • Accessible file list with remove buttons
  • Screen reader announcements for add/remove/error
  • Compound component API for full layout control
  • Keyboard accessible: Enter/Space to open file picker

Props

FileUpload component props
PropTypeDefaultDescription
acceptstring-Accepted file types (e.g. '.jpg,.png,image/*')
multiplebooleanfalseAllow multiple files
maxSizenumber-Maximum file size in bytes
disabledbooleanfalseDisables the upload
onFilesChange(files: FileUploadFile[]) => void-Called when files are added or removed
errorstring-Error message

Sub-components

FileUpload.Dropzone

FileUpload.Dropzone props
PropTypeDefaultDescription
children*ReactNode-Dropzone content

FileUpload.Trigger

FileUpload.Trigger props
PropTypeDefaultDescription
children*ReactNode-Trigger button content

FileUpload.FileList

FileUpload.FileList props
PropTypeDefaultDescription
childrenReactNode-Custom file list rendering

Keyboard Interactions

Accessibility
All keyboard interactions follow WAI-ARIA best practices and work without any additional configuration.
Keyboard shortcuts for FileUpload
KeyAction
Enter / SpaceOpens the file picker dialog
TabMoves between trigger, file items, and remove buttons