Keyboard, screen readers, focus and motion.
Accessibility is built into the primitives, so every block inherits it.
Keyboard
UploadDropzoneis a focusable button: Enter or Space opens the file picker. This is the alternative to drag and drop (WCAG 2.5.7 Dragging Movements).UploadTriggerand every action are native<button>s.- The hidden file input is removed from the tab order so focus never lands on an invisible element.
- The image cropper supports arrow keys to move the crop area.
Screen readers
- A polite live region announces files added, uploads finished, failures (with the reason) and rejections.
UploadProgressis aprogressbarwitharia-valuenow,aria-valuetextand a label naming the file. Indeterminate states omitaria-valuenow.- Action buttons have explicit names: “Pause upload of video.mp4”.
- Items set
aria-busywhile work is in progress. - Every string is customizable through
messagesfor localization.
Forms
UploadField wires aria-labelledby, aria-describedby, aria-invalid and
aria-required, and uses shadcn's Field for consistent error display.
Motion
Animations are short, subtle, and disabled under prefers-reduced-motion
(motion-reduce: variants). Status is never conveyed by motion alone.
Color
Components use semantic tokens only (destructive, muted-foreground…), so contrast
follows your theme in light and dark mode. Error states pair color with an icon and text.