Data Entryduskmoonimplemented8 demos

Upload

Upload collects files with validation, file-list management, and custom request hooks.

Import@duskmoon-dev/components/upload
10API sections
33documented props
6behavior scenarios
Key API
acceptactionbeforeUploadcustomRequestdefaultFileListdisabled

Usage

When to use

  • Use it inside forms, filters, settings, and any workflow that captures user input.
  • Prefer controlled props when the value must stay synchronized with application state.

Implementation notes

StylesheetImport @duskmoon-dev/components/styles.css once in the app or docs shell.
StateStart with default props for static examples, then switch to controlled props when state must be shared.
ThemeThe preview inherits the active DuskMoon data-theme value from the docs layout.

Features

Controlled and uncontrolled usage

Documents default values, value props, and change callbacks for form integration.

Validation state

Surfaces status, size, disabled, and option data patterns where the component supports them.

Primary API surface

Upload is most often configured through `accept`, `action`, `beforeUpload`, `customRequest`.

Covered behavior

Renders trigger, hidden input, and default file list

Feature Demos

Feature demos are authored for the component page, then supplemented with behavior scenarios from the component test coverage.

Preview

Basic usage

authored

Import the component stylesheet and Upload from its package subpath, then render it with the core props.

Source
import "@duskmoon-dev/components/styles.css";
import { Upload } from "@duskmoon-dev/components/upload";

export function Example() {
  return (<Upload
  action="/api/upload"
>
  DuskMoon Upload
</Upload>);
}
Preview

Renders trigger, hidden input, and default file list

test-backed

Upload scenario from the component test coverage: renders trigger, hidden input, and default file list.

Source
import "@duskmoon-dev/components/styles.css";
import { Upload } from "@duskmoon-dev/components/upload";

export function UploadRendersTriggerHiddenInputDemo() {
  return (<Upload
  // Renders trigger, hidden input, and default file list
  action="/api/upload"
>
  DuskMoon Upload
</Upload>);
}
Preview

Adds selected files and emits onChange

test-backed

Upload scenario from the component test coverage: adds selected files and emits onchange.

Source
import "@duskmoon-dev/components/styles.css";
import { Upload } from "@duskmoon-dev/components/upload";

export function UploadAddsSelectedFilesAndDemo() {
  return (<Upload
  // Adds selected files and emits onChange
  action="/api/upload"
>
  DuskMoon Upload
</Upload>);
}
Preview

Supports beforeUpload false and LIST_IGNORE

test-backed

Upload scenario from the component test coverage: supports beforeupload false and list_ignore.

Source
import "@duskmoon-dev/components/styles.css";
import { Upload } from "@duskmoon-dev/components/upload";

export function UploadSupportsBeforeUploadFalseAndDemo() {
  return (<Upload
  // Supports beforeUpload false and LIST_IGNORE
  action="/api/upload"
>
  DuskMoon Upload
</Upload>);
}
Preview

Uses customRequest progress and success callbacks

test-backed

Upload scenario from the component test coverage: uses customrequest progress and success callbacks.

Source
import "@duskmoon-dev/components/styles.css";
import { Upload } from "@duskmoon-dev/components/upload";

export function UploadUsesCustomRequestProgressAndDemo() {
  return (<Upload
  // Uses customRequest progress and success callbacks
  action="/api/upload"
>
  DuskMoon Upload
</Upload>);
}
Preview

Calls preview and removes files

test-backed

Upload scenario from the component test coverage: calls preview and removes files.

Source
import "@duskmoon-dev/components/styles.css";
import { Upload } from "@duskmoon-dev/components/upload";

export function UploadCallsPreviewAndRemovesDemo() {
  return (<Upload
  // Calls preview and removes files
  action="/api/upload"
>
  DuskMoon Upload
</Upload>);
}
Preview

Renders dragger dropzone and accepts dropped files

test-backed

Upload scenario from the component test coverage: renders dragger dropzone and accepts dropped files.

Source
import "@duskmoon-dev/components/styles.css";
import { Upload } from "@duskmoon-dev/components/upload";

export function UploadRendersDraggerDropzoneAndDemo() {
  return (<Upload
  // Renders dragger dropzone and accepts dropped files
  action="/api/upload"
>
  DuskMoon Upload
</Upload>);
}
Preview
Sunshine Theme
Moonlight Theme

Theme aware

authored

Docs previews inherit the DuskMoon data-theme value. Use the header switch to compare light and dark rendering.

Source
<div data-theme="sunshine">
  <Upload
  action="/api/upload"
>
  DuskMoon Upload
</Upload>
</div>

<div data-theme="moonlight">
  <Upload
  action="/api/upload"
>
  DuskMoon Upload
</Upload>
</div>

API

The API reference below lists every parsed exported type or interface for Upload. Start with `accept`, `action`, `beforeUpload`, `customRequest` for common usage.

Types: packages/components/src/components/upload/Upload.types.tsScenarios: packages/components/src/components/upload/Upload.test.tsx
UploadPropsinterface extends Omit< ComponentProps<"div">, "children" | "defaultValue" | "onChange" >
PropTypeRequiredDescription
acceptstringNoaccept configures Upload.
actionstringNoaction configures Upload.
beforeUpload(file: File, fileList: File[]) => UploadBeforeUploadResultNobeforeUpload configures Upload.
childrenReactNodeNochildren configures Upload.
customRequest(options: UploadRequestOption) => voidNocustomRequest configures Upload.
defaultFileListUploadFile[]NodefaultFileList configures Upload.
disabledbooleanNodisabled configures Upload.
fileListUploadFile[]NofileList configures Upload.
listTypeUploadListTypeNolistType configures Upload.
multiplebooleanNomultiple configures Upload.
onChange(info: UploadChangeParam) => voidNoonChange configures Upload.
onPreview(file: UploadFile) => voidNoonPreview configures Upload.
onRemove(file: UploadFile) => boolean | Promise<boolean> | voidNoonRemove configures Upload.
UploadFileinterface extends <T = unknown>
PropTypeRequiredDescription
uidstringNouid configures Upload.
namestringYesname configures Upload.
statusUploadFileStatusNostatus configures Upload.
percentnumberNopercent configures Upload.
sizenumberNosize configures Upload.
typestringNotype configures Upload.
urlstringNourl configures Upload.
thumbUrlstringNothumbUrl configures Upload.
responseTNoresponse configures Upload.
errorErrorNoerror configures Upload.
originFileObjFileNooriginFileObj configures Upload.
UploadChangeParaminterface extends <T = unknown>
PropTypeRequiredDescription
fileUploadFile<T>Yesfile configures Upload.
fileListUploadFile<T>[]YesfileList configures Upload.
eventProgressEvent | { percent?: number }Noevent configures Upload.
UploadRequestOptioninterface extends <T = unknown>
PropTypeRequiredDescription
actionstringNoaction configures Upload.
fileFileYesfile configures Upload.
filenamestringYesfilename configures Upload.
onError(error: Error) => voidNoonError configures Upload.
onProgress(event: { percent?: number }) => voidNoonProgress configures Upload.
onSuccess(response?: T) => voidNoonSuccess configures Upload.
UploadListTypetype
"text" | "picture" | "picture-card"
UploadFileStatustype
"uploading" | "done" | "error" | "removed"
UploadBeforeUploadResulttype
| boolean | File | Blob | UploadListIgnore | Promise<boolean | File | Blob | UploadListIgnore>
UploadListIgnoretype
symbol
UploadDraggerPropstype
UploadProps
UploadComponenttype
ForwardRefExoticComponent< UploadProps & RefAttributes<HTMLDivElement> > & { Dragger: ForwardRefExoticComponent< UploadDraggerProps & RefAttributes<HTMLDivElement> >