Requirements:
- Specify allowed drop zones
- Not impede :hover state on container
- Uses mouse events for circumventing drawbacks, instead of native the drag and drop api
- Layer-awareness: most recently dragged most forward, least recently dragged most back
- High overlap sensitivity (small overlap causes a re-ordering) even for non-asymmetric siblings (siblings of different sizes)
- various lifetime events + Fire click event if mouse button is released before first mousemove
- Revert on spill
- Remove on spill
- Copying on drop + Unidirectional copying on drop
- Don't go out of view
- Drag with handle
- Animation on re-ordering
- Snapping drop preview