upload-list
Builds Dropzone GradientSpinner List PulseLoader Skeleton UploadList


The code that drew it
A still frame holds a repeating animation at its first frame and a one-shot at its last, because a still of a moving thing is not reproducible. Run the gallery to review motion.
fn upload_list(_window: &mut Window, cx: &mut App) -> AnyElement {
let theme = cx.theme().clone();
stack(&theme)
.w(px(560.0))
.child(caption(
&theme,
"a refusal is not a failure, and only a failure is offered a retry",
))
.child(
UploadList::new("scene.uploads")
.dropzone(
Dropzone::new("scene.uploads.zone", "Drop files to attach")
.hint("PDF, PNG, or plain text")
.on_files(|_, _, _| {}),
)
.uploads([
Upload::new("brief", "brief.pdf").size("1.2 MB").done(),
Upload::new("capture", "capture.png")
.size("4.8 MB")
.uploading(0.4),
Upload::new("notes", "notes.txt").size("12 KB"),
Upload::new("archive", "archive.zip")
.size("240 MB")
.failed("The connection dropped."),
Upload::new("installer", "installer.exe")
.size("64 MB")
.refused("This zone does not take programs."),
])
.on_retry(|_, _, _| {})
.on_cancel(|_, _, _| {})
.on_remove(|_, _, _| {}),
)
.into_any_element()
}