UploadKit
SDK@uploadkitdev/react

UploadProgressOrbit

A circular orbit of satellites (one per file) that draw into the center as each upload completes.

Each in-flight file becomes a satellite orbiting the center. As each upload progresses, its satellite collapses toward the center until it merges at 100%. The whole ring rotates via a CSS uk-orbit-spin keyframe, giving the UI a continuous sense of motion.

Design inspiration: Arc browser toolbar, Raycast command palette.

motion is an optional peerDependency. The orbit works fine without it — the ring rotation and satellite convergence are CSS-only. Install motion if you plan to extend with custom spring transitions.

Arc · Raycast — orbital loader

Basic usage

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

export default function Page() {
  return (
    <UploadProgressOrbit
      route="bulkUploader"
      maxFiles={8}
      radius={90}
      onUploadComplete={(results) => {
        console.log('Uploaded:', results.length);
      }}
    />
  );
}

Props

PropTypeDefaultDescription
routestringRequired. Route name from your file router.
acceptstring[]Accepted MIME types.
maxSizenumberMaximum file size in bytes.
maxFilesnumberMaximum number of files per drop or selection.
metadataRecord<string, unknown>JSON-serializable metadata forwarded to the server.
radiusnumber80Orbit radius in pixels.
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.

Theming

VariablePurpose
--uk-primarySatellite color (uploading)
--uk-successSatellite color on completion
--uk-errorSatellite color on failure
--uk-bg-secondary, --uk-borderCenter disc colors

Accessibility

  • Outer container is role="progressbar" with the aggregate progress as aria-valuenow
  • Aggregate progress is the average of all in-flight file progresses
  • Focusable via keyboard; Enter and Space open the file picker
  • Respects prefers-reduced-motion — orbit rotation and satellite transitions collapse to 0.01ms

On this page