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