import { useState, useRef } from "react"; interface UseDragDropOptions { onDrop?: (files: FileList) => void; } export function useDragDrop(options: UseDragDropOptions = {}) { const [isDragOver, setIsDragOver] = useState(false); const dragCounterRef = useRef(0); const handleDragEnter = (e: React.DragEvent) => { e.preventDefault(); dragCounterRef.current += 1; if (!isDragOver) { setIsDragOver(true); } }; const handleDragOver = (e: React.DragEvent) => { e.preventDefault(); }; const handleDragLeave = (e: React.DragEvent) => { e.preventDefault(); dragCounterRef.current -= 1; if (dragCounterRef.current === 0) { setIsDragOver(false); } }; const handleDrop = (e: React.DragEvent) => { e.preventDefault(); setIsDragOver(false); dragCounterRef.current = 0; if (options.onDrop && e.dataTransfer.files) { options.onDrop(e.dataTransfer.files); } }; const dragProps = { onDragEnter: handleDragEnter, onDragOver: handleDragOver, onDragLeave: handleDragLeave, onDrop: handleDrop, }; return { isDragOver, dragProps, }; }