Skip to content

Upload

Upload

A file upload component with drag-and-drop support and file previews.

Import

import { Upload } from '@primitivekit/react';

Basic Usage

<Upload 
  label="Upload File"
  onChange={(files) => console.log(files)}
/>

Multiple Files

<Upload 
  label="Upload Files"
  multiple
  onChange={(files) => console.log(files)}
/>

Accept Types

// Images only
<Upload 
  label="Upload Image"
  accept="image/*"
/>

// PDFs only
<Upload 
  label="Upload PDF"
  accept=".pdf"
/>

// Multiple types
<Upload 
  label="Upload Document"
  accept=".pdf,.doc,.docx"
/>

Max File Size

<Upload 
  label="Upload File"
  maxSize={5 * 1024 * 1024} // 5MB
  onError={(error) => alert(error)}
/>

With Preview

<Upload 
  label="Upload Image"
  accept="image/*"
  showPreview
  onChange={(files) => console.log(files)}
/>

Drag and Drop

<Upload 
  label="Drop files here"
  dragAndDrop
  multiple
  onChange={(files) => console.log(files)}
/>

Controlled Upload

import { useState } from 'react';

function ControlledUpload() {
  const [files, setFiles] = useState<File[]>([]);

  return (
    <div>
      <Upload 
        label="Upload Files"
        multiple
        onChange={setFiles}
        showPreview
      />
      <p>Selected: {files.length} files</p>
    </div>
  );
}

Props

PropTypeDefaultDescription
labelstring-Upload label
acceptstring-Accepted file types
multiplebooleanfalseAllow multiple files
maxSizenumber-Max file size (bytes)
maxFilesnumber-Max number of files
dragAndDropbooleanfalseEnable drag and drop
showPreviewbooleanfalseShow file previews
onChangefunction-File change handler
onErrorfunction-Error handler
disabledbooleanfalseDisable upload

Customization

<Upload
  label="Custom upload"
  style={{
    '--upload-border-color': 'rgba(100, 100, 200, 1)',
    '--upload-border-style': 'dashed',
    '--upload-border-radius': '12px',
    '--upload-bg-color': 'rgba(240, 240, 255, 1)',
    '--upload-padding': '32px',
  }}
/>

Accessibility

  • ✅ Keyboard navigation
  • ✅ Screen reader support
  • ✅ Focus indicators
  • ✅ Error announcements

Related Components