Apia saysThe Drag-and-Drop API moves elements and files via dragstart/dragover/drop events.
Set draggable="true", stash data in dragstart (e.dataTransfer.setData), and crucially call e.preventDefault() in dragover so the drop zone accepts the drop — then read the data in drop. File drops expose e.dataTransfer.files. The missing dragover preventDefault is the #1 "drop doesn't work" bug.
Power-ups you unlock
draggable="true" + dragstart stashes data
dragover MUST preventDefault to allow drop
drop reads dataTransfer (and .files for files)
Most bugs: missing dragover preventDefault
Legacy Larry attacks — common mistakes
Forgetting preventDefault in dragover
Storing objects in dataTransfer (strings only)
No visual feedback during drag
Boss battleMake a draggable chip drop into a zone (remember the dragover preventDefault).