diff --git a/packages/web_ui/src/components/Dropzone.tsx b/packages/web_ui/src/components/Dropzone.tsx index 0af48ff4..cef95cd6 100644 --- a/packages/web_ui/src/components/Dropzone.tsx +++ b/packages/web_ui/src/components/Dropzone.tsx @@ -7,6 +7,7 @@ export function Dropzone() { const isDroppingFile = useContext(DraggingContext); return
(null); @@ -86,9 +102,24 @@ export default function SiteLayout() { onDragEnter={() => setDraggingProxy(1)} onDragLeave={() => setDraggingProxy(-1)} // Reset dragging state when dropped - onDrop={() => setDragging(0)} + onDrop={(e) => { + setDragging(0); + // Prevent dropping outside of dropzone + if (!isDropzone(e.target as HTMLElement)) { + e.preventDefault(); + e.stopPropagation(); + } + }} // Allow entire document to be a drag target - onDragOver={(e) => e.preventDefault()} + onDragOver={(e) => { + e.preventDefault(); + // Change cursor + if (isDropzone(e.target as HTMLElement)) { + e.dataTransfer.dropEffect = "copy"; + } else { + e.dataTransfer.dropEffect = "none"; + } + }} > 0}>
diff --git a/packages/web_ui/src/components/UploadButton.tsx b/packages/web_ui/src/components/UploadButton.tsx index c6c324a9..652ce9a4 100644 --- a/packages/web_ui/src/components/UploadButton.tsx +++ b/packages/web_ui/src/components/UploadButton.tsx @@ -7,6 +7,7 @@ import { DraggingContext } from "../model/is_dragging"; export default function UploadButton(props: React.ComponentProps) { const isDroppingFile = useContext(DraggingContext); return