{"version":3,"file":"index.cjs","names":[],"sources":["../../../src/hooks/useDropZone/index.ts"],"sourcesContent":["import { useEventListener } from '../useEventListener';\nimport React, { useRef, useState } from 'react';\n\n/**\n * @description `드래그 앤 드롭 이벤트`를 처리하여 `파일`을 수신할 수 있는 영역을 생성하는 커스텀 훅입니다.\n *\n * @template T - HTML 엘리먼트 타입을 지정합니다.\n * @param {(files: File[]) => void} onDrop - 파일이 드롭되었을 때 호출되는 콜백 함수입니다.\n * 드롭된 파일들의 배열을 인자로 받습니다.\n *\n * @returns {{\n *   ref: RefObject<T | null>;\n *   isDragOver: boolean;\n * }} `ref`와 `isDragOver`를 포함한 객체를 반환합니다.\n * - `ref`: 드롭 영역으로 사용할 대상 요소의 참조입니다.\n * - `isDragOver`: 드래그한 파일이 드롭 영역 위에 있는지 여부를 나타내는 불리언 값입니다.\n *\n * @example\n * ```tsx\n * const { ref, isDragOver } = useDropZone<HTMLDivElement>((files) => {\n *   console.log('Dropped files:', files);\n * });\n *\n * <div ref={ref}>\n *   DropZone\n * </div>\n * ```\n */\nexport const useDropZone = <T extends HTMLElement>(\n  onDrop: (files: File[]) => void\n): {\n  ref: React.RefObject<T | null>;\n  isDragOver: boolean;\n} => {\n  const ref = useRef<T>(null);\n  const counter = useRef(0);\n  const [isDragOver, setIsDragOver] = useState(false);\n\n  const handleDragOver = (e: DragEvent) => {\n    e.preventDefault();\n  };\n\n  const handleDragEnter = (e: DragEvent) => {\n    e.preventDefault();\n\n    counter.current += 1;\n    setIsDragOver(true);\n  };\n\n  const handleDragLeave = (e: DragEvent) => {\n    e.preventDefault();\n\n    counter.current -= 1;\n    if (counter.current === 0) {\n      setIsDragOver(false);\n    }\n  };\n\n  const handleDrop = (e: DragEvent) => {\n    e.preventDefault();\n    setIsDragOver(false);\n\n    const files = e.dataTransfer?.files;\n    onDrop(Array.from(files || []));\n  };\n\n  useEventListener(ref, 'dragover', handleDragOver);\n  useEventListener(ref, 'dragenter', handleDragEnter);\n  useEventListener(ref, 'dragleave', handleDragLeave);\n  useEventListener(ref, 'drop', handleDrop);\n\n  return { ref, isDragOver };\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BA,MAAa,eACX,WAIG;CACH,MAAM,OAAA,GAAA,MAAA,QAAgB,KAAK;CAC3B,MAAM,WAAA,GAAA,MAAA,QAAiB,EAAE;CACzB,MAAM,CAAC,YAAY,kBAAA,GAAA,MAAA,UAA0B,MAAM;CAEnD,MAAM,kBAAkB,MAAiB;EACvC,EAAE,gBAAgB;;CAGpB,MAAM,mBAAmB,MAAiB;EACxC,EAAE,gBAAgB;EAElB,QAAQ,WAAW;EACnB,cAAc,KAAK;;CAGrB,MAAM,mBAAmB,MAAiB;EACxC,EAAE,gBAAgB;EAElB,QAAQ,WAAW;EACnB,IAAI,QAAQ,YAAY,GACtB,cAAc,MAAM;;CAIxB,MAAM,cAAc,MAAiB;EACnC,EAAE,gBAAgB;EAClB,cAAc,MAAM;EAEpB,MAAM,QAAQ,EAAE,cAAc;EAC9B,OAAO,MAAM,KAAK,SAAS,EAAE,CAAC,CAAC;;CAGjC,cAAA,iBAAiB,KAAK,YAAY,eAAe;CACjD,cAAA,iBAAiB,KAAK,aAAa,gBAAgB;CACnD,cAAA,iBAAiB,KAAK,aAAa,gBAAgB;CACnD,cAAA,iBAAiB,KAAK,QAAQ,WAAW;CAEzC,OAAO;EAAE;EAAK;EAAY"}