fix(chat): prevent sortable sidebar drags from triggering file upload overlay

Add a custom MIME type (application/x-open-webui-drag) to intentional
chat and folder drag sources. The onDragOver handler in MessageInput
now checks for this type instead of the generic text/plain, which
SortableJS also sets during reorder operations for pinned menu items
(Notes, Workspace) and pinned Models.
This commit is contained in:
silentoplayz 2026-06-03 13:21:53 -04:00
parent 1a97751e37
commit 95ad4ad27b
4 changed files with 17 additions and 2 deletions

View file

@ -838,8 +838,13 @@
const onDragOver = (e: DragEvent) => {
e.preventDefault();
// Check if a file or a sidebar chat item is being dragged.
if (e.dataTransfer?.types?.includes('Files') || e.dataTransfer?.types?.includes('text/plain')) {
// Check if a file or a sidebar chat/folder item is being dragged.
// Use a custom MIME type to distinguish intentional drags from SortableJS reorder drags
// (e.g. Notes, Workspace, pinned Models), which also set 'text/plain'.
if (
e.dataTransfer?.types?.includes('Files') ||
e.dataTransfer?.types?.includes('application/x-open-webui-drag')
) {
dragged = true;
} else {
dragged = false;

View file

@ -88,6 +88,10 @@
} finally {
draggedOver = false;
}
// Only process the first non-file item; all share the same
// text/plain payload, so continuing would duplicate the drop.
break;
}
}
}

View file

@ -256,6 +256,7 @@
id: id
})
);
event.dataTransfer.setData('application/x-open-webui-drag', '');
dragged = true;
itemElement.style.opacity = '0.5'; // Optional: Visual cue to show it's being dragged

View file

@ -196,6 +196,10 @@
} catch (error) {
console.log('Error parsing dataTransfer:', error);
}
// Only process the first non-file item; all share the same
// text/plain payload, so continuing would duplicate the move.
break;
}
}
}
@ -233,6 +237,7 @@
id: folderId
})
);
event.dataTransfer.setData('application/x-open-webui-drag', '');
dragged = true;
folderElement.style.opacity = '0.5'; // Optional: Visual cue to show it's being dragged