Card Layout
Display queued files as individual cards in a responsive grid layout.
Drag & drop files here
var uploader = new MultipleUpload(el, {
uploadUrl: '/api/upload',
onFileAdded: function(task) {
var card = createFileCard(task);
grid.appendChild(card);
},
onTaskProgress: function(task, pct) {
updateCardProgress(task.id, pct);
},
onTaskComplete: function(task) {
markCardDone(task.id);
}
});
Rendering the queue yourself
This is the headless pattern: the component handles selection, validation, transport, retry and progress, while the callbacks — onFileAdded, onTaskProgress, onTaskComplete — give you the events to build whatever UI you want from. Cards, a table, rows in an existing list: none of it requires overriding the component's CSS.
What you take on
Everything the built-in queue was doing for you: showing failures, offering retry, reporting why a file was rejected, and keeping the whole thing usable from a keyboard. Worth it when the upload UI has to sit inside an existing design system; a lot of work to reproduce when it does not.