import { useState } from 'react'; export interface UseDropZoneProps { onChange: (event: React.DragEvent) => void; } export interface UseDropZoneReturn { onDragStart: (event: React.DragEvent) => void; onDragEnter: (event: React.DragEvent) => void; onDragLeave: (event: React.DragEvent) => void; onDragOver: (event: React.DragEvent) => void; onDrop: (event: React.DragEvent) => void; inDropZone: boolean; } export function useDropZone({ onChange }: UseDropZoneProps): UseDropZoneReturn { const [inDropZone, setInDropZone] = useState(false); const onDragStart = (event: React.DragEvent) => { event.dataTransfer.clearData(); }; const onDragEnter = (event: React.DragEvent) => { event.preventDefault(); event.stopPropagation(); }; const onDragLeave = (event: React.DragEvent) => { event.preventDefault(); event.stopPropagation(); setInDropZone(false); }; const onDragOver = (event: React.DragEvent) => { event.preventDefault(); event.stopPropagation(); event.dataTransfer.dropEffect = 'copy'; setInDropZone(true); }; const onDrop = (event: React.DragEvent) => { event.preventDefault(); event.stopPropagation(); setInDropZone(false); onChange(event); }; return { onDragStart, onDragEnter, onDragLeave, onDragOver, onDrop, inDropZone, }; }