Dropzones, progress lists, image pickers and paste-to-upload.
Upload is one of the few interactions where the happy path is the easy half. What these get right is the rest: per-file progress, a cancel that actually aborts the request, a rejection message that names the reason, and a drop target big enough to hit. Drag-and-drop is an enhancement over a real `<input type="file">`, never a replacement.
The screen between "file uploaded" and "data imported": source columns mapped to schema fields, with a sample value under each and required fields blocking the button.
The list that follows the dropzone: complete, uploading, queued and failed rows with cancel and retry — because hiding the failure is the classic upload bug.
One big file on a connection that will drop: a bar allowed to go backwards when a chunk is retried, a time estimate that is a range or nothing, and a promise about closing the tab made before it is needed.
The limits are here rather than in the error you would otherwise meet after uploading. Rejecting a 400 MB file after transferring it is a failure of the form, not of the person.
A file that already lives at a URL does not need to be downloaded to a laptop and uploaded again. The server fetches it, which also survives the tab being closed.
Only if there is still a real file input underneath — which there is in all of these. The dropzone is a label for it, so Enter opens the picker and the browser handles the rest.
Where should validation happen?
Both ends. Client-side checks on type and size give instant feedback; the server has to repeat them, because the client check is a convenience and not a control.
Are these file upload components free to use?
All 7 are free to copy and use in your own projects, including commercial ones. A Pro licence exists for redistribution — shipping them inside a product other people buy — and the full terms are on the licence page.
How do I add one to my project?
Install it with the CLI: `npx hoverlab add file-dropzone` writes the component and its dependencies into your project. Every artifact here also has a copy button for the raw source, and an "Open in sandbox" link if you would rather try it first.