UploadKit
SDK@uploadkitdev/react

UploadProgressStacked

A multi-file vertical progress list inspired by iOS AirDrop. Completed rows float to the top.

A purpose-built multi-file progress list. Drop or select files, watch each row animate its own progress bar, and see completed rows float to the top with a Motion layout animation. Perfect for bulk-upload flows where users want to see their batch fly through.

Design inspiration: iOS AirDrop transfer sheet, Telegram multi-send.

motion is an optional peerDependency. Without it, rows simply stack without reordering. pnpm add motion to enable the smooth layout animation.

Drop or select files

Ready when you are.

iOS AirDrop · Telegram multi-send

Basic usage

import { UploadProgressStacked } from '@uploadkitdev/react';

export default function Page() {
  return (
    <UploadProgressStacked
      route="bulkUploader"
      maxFiles={10}
      maxSize={20 * 1024 * 1024}
      onUploadComplete={(results) => {
        console.log('Uploaded:', results.length, 'files');
      }}
    >
      Drop your bulk upload
    </UploadProgressStacked>
  );
}

Props

PropTypeDefaultDescription
routestringRequired. Route name from your file router.
acceptstring[]Accepted MIME types. Supports wildcards: 'image/*'.
maxSizenumberMaximum file size in bytes.
maxFilesnumberMaximum number of files per drop or selection.
metadataRecord<string, unknown>JSON-serializable metadata forwarded to the server.
onUploadComplete(results: UploadResult[]) => voidCalled when every accepted file has uploaded.
onUploadError(error: Error) => voidCalled once per failed file.
classNamestringAdditional CSS class(es) merged onto the outer wrapper.
childrenReactNodeCustom header title.

Behavior

  • Files upload in parallel batches of 3 (CONCURRENCY = 3).
  • Completed rows are sorted to the top. Errored rows sink below active uploads.
  • When motion is installed, reorder transitions are smooth via layout + layoutId.

Theming

VariablePurpose
--uk-bg-secondary, --uk-border, --uk-textPanel colors
--uk-progress-track, --uk-progress-fillRow progress bar colors
--uk-primaryDrag-over accent
--uk-success, --uk-errorRow tint on success / error

Accessibility

  • Header is role="button" and focusable
  • Each row is role="progressbar" with per-file aria-label
  • Respects prefers-reduced-motion — layout transitions collapse to 0.01ms

On this page