diff --git a/frontend/src/desktop/DesktopDocumentCard.jsx b/frontend/src/desktop/DesktopDocumentCard.jsx index 8919c87..7bb23f8 100644 --- a/frontend/src/desktop/DesktopDocumentCard.jsx +++ b/frontend/src/desktop/DesktopDocumentCard.jsx @@ -107,7 +107,6 @@ const DesktopDocumentCard = ({ draggable data-desk-tag-chip="true" onPointerDownCapture={(event) => { - event.stopPropagation(); onDocTagPointerDown(event, doc, tag); }} onDragStart={(event) => onDocTagDragStart(event, doc, tag)} diff --git a/frontend/src/desktop/DesktopWorkspace.css b/frontend/src/desktop/DesktopWorkspace.css index 2973471..17157cf 100644 --- a/frontend/src/desktop/DesktopWorkspace.css +++ b/frontend/src/desktop/DesktopWorkspace.css @@ -260,7 +260,6 @@ .tag-chip--draggable.is-drag-hidden { opacity: 0.4; - pointer-events: none; } .desk-item__tags .tag-chip { diff --git a/frontend/src/desktop/tags/useDeskTagInteractions.js b/frontend/src/desktop/tags/useDeskTagInteractions.js index f412b3e..b1c4e7b 100644 --- a/frontend/src/desktop/tags/useDeskTagInteractions.js +++ b/frontend/src/desktop/tags/useDeskTagInteractions.js @@ -146,7 +146,6 @@ export const useDeskTagInteractions = ({ ); const handleDocTagPointerDown = useCallback((event, doc, tag) => { - event.stopPropagation(); if (!doc || !tag) { pendingDocTagDragRef.current = null; return; @@ -263,7 +262,6 @@ export const useDeskTagInteractions = ({ if (!event?.dataTransfer || !doc || !tag) { return; } - event.stopPropagation(); event.dataTransfer.effectAllowed = 'move'; writeTagTransferData(event.dataTransfer, tag, doc.id); diff --git a/frontend/src/desktop/useDocumentDrag.js b/frontend/src/desktop/useDocumentDrag.js index 3fc1a84..0a73d49 100644 --- a/frontend/src/desktop/useDocumentDrag.js +++ b/frontend/src/desktop/useDocumentDrag.js @@ -8,6 +8,14 @@ const DRAG_HYSTERESIS_PX = 4; const DRAG_HYSTERESIS_SQUARED = DRAG_HYSTERESIS_PX * DRAG_HYSTERESIS_PX; const EDGE_COLLISION_THRESHOLD = 0.5; +const getEventTargetElement = (event) => { + if (typeof Element === 'undefined' || !event) { + return null; + } + const candidate = event.target || (event.nativeEvent ? event.nativeEvent.target : null); + return candidate instanceof Element ? candidate : null; +}; + const useDocumentDrag = (options = {}) => { const { engine, @@ -139,6 +147,10 @@ const useDocumentDrag = (options = {}) => { const handlePointerDown = useCallback( (event, docIdInput, options = {}) => { + const targetElement = getEventTargetElement(event); + if (targetElement && typeof targetElement.closest === 'function' && targetElement.closest('[data-desk-tag-chip="true"]')) { + return; + } preventAll(event); const docId = docIdInput != null ? docIdInput : null;