diff --git a/app/javascript/controllers/dashboard_sortable_controller.js b/app/javascript/controllers/dashboard_sortable_controller.js index c0a0cbcca..e9ba9badf 100644 --- a/app/javascript/controllers/dashboard_sortable_controller.js +++ b/app/javascript/controllers/dashboard_sortable_controller.js @@ -22,8 +22,10 @@ export default class extends Controller { // ===== Mouse Drag Events ===== dragStart(event) { - // On touch devices, cancel native drag — use touch events with hold delay instead - if (this.isTouchDevice()) { + // If a touch interaction is in progress, cancel native drag — + // use touch events with hold delay instead. + // This avoids blocking mouse/trackpad drag on touch-capable laptops. + if (this.isTouching || this.pendingSection) { event.preventDefault(); return; } @@ -34,10 +36,6 @@ export default class extends Controller { event.dataTransfer.effectAllowed = "move"; } - isTouchDevice() { - return "ontouchstart" in window || navigator.maxTouchPoints > 0; - } - dragEnd(event) { event.currentTarget.classList.remove("opacity-50"); event.currentTarget.setAttribute("aria-grabbed", "false"); diff --git a/app/views/pages/dashboard.html.erb b/app/views/pages/dashboard.html.erb index eecc59bf3..ca3d1be56 100644 --- a/app/views/pages/dashboard.html.erb +++ b/app/views/pages/dashboard.html.erb @@ -49,6 +49,7 @@ touchstart->dashboard-sortable#touchStart touchmove->dashboard-sortable#touchMove touchend->dashboard-sortable#touchEnd + touchcancel->dashboard-sortable#touchEnd keydown->dashboard-sortable#handleKeyDown">