Storage was substantially refactored on master since this branch was last
updated, so the drag and drop work is re-applied on top of the current
components rather than merged hunk by hunk:
- react-dnd is no longer a Studio dependency, so dragging now runs on
@dnd-kit/core like the rest of Studio. Pointer-driven dragging also
leaves the browser's own file drag events free for uploads, which
removes the dataTransfer sniffing the previous implementation needed.
- CustomDragLayer is replaced by dnd-kit's DragOverlay, RowIcon by the
StorageRowIcon master already extracted, and FolderMoveProgressToast by
the shared SonnerProgress toast.
- Folder moves reuse getAllItemsAlongFolder instead of walking the bucket
by hand, and the rate limit retry loop is shared with renameFolder.
- Drop validation lives in FileExplorerDnd.utils as pure functions.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016Q9CRWzLS6pPuLmfPmn5uT