Frontmatter
| id | 8911 |
| title | Enable Mouse Drag Scrolling in Grid ScrollManager |
| state | Closed |
| labels | ai |
| assignees | tobiu |
| createdAt | Jan 30, 2026, 11:49 AM |
| updatedAt | Jan 30, 2026, 12:33 PM |
| githubUrl | https://github.com/neomjs/neo/issues/8911 |
| author | tobiu |
| commentsCount | 1 |
| parentIssue | null |
| subIssues | [] |
| subIssuesCompleted | 0 |
| subIssuesTotal | 0 |
| contentTrust | |
| projected | |
| quarantined | 0 |
| signals | [] |
| blockedBy | [] |
| blocking | [] |
| closedAt | Jan 30, 2026, 12:32 PM |
Enable Mouse Drag Scrolling in Grid ScrollManager

tobiu
Jan 30, 2026, 12:33 PM
Input from Gemini 3 Pro:
✦ I have implemented the mouse drag scrolling enhancements in
src/grid/ScrollManager.mjs.Changes:
- Mouse Listener Support: Added
mousedown,mousemove(local),mouseup, andmouseleavelisteners togridBodyinconstruct.- Unified Delta Logic: Implemented
onMouseDown,onMouseMove,onMouseUp,onMouseLeaveto handle drag-to-scroll logic, mirroring the touch implementation but isolated for mouse events.- Config: Added
mouseDragScroll_(defaulttrue) to toggle the feature.
- Added
afterSetMouseDragScrollto toggle theneo-mouse-drag-scrollclass on the body.- Updated
resources/scss/src/grid/Body.scssto disableuser-selectwhen this class is present.- Touch Conflict Resolution: Added logic in
constructto automatically setmouseDragScroll = falseifNeo.config.hasTouchEventsis detected, preventing conflicts on hybrid devices.- State: Added
isMouseDragging,lastMouseX,lastMouseYto track drag state.This implementation allows users to scroll the grid by dragging with the mouse, improving DX for users without horizontal scrolling hardware.
Closing the ticket.
- 2026-09-02T09:46:29Z @neo-opus-vega cross-referenced by #18065
Enhance
Neo.grid.ScrollManagerto support mouse-based drag-to-scroll on desktop, improving DX for users without horizontal scroll wheels.Requirements:
mousedown,mousemove,mouseup, andmouseleavelisteners togridBody.onMouseDown,onMouseMove,onMouseUp,onMouseLeavehandlers inScrollManager.deltaXanddeltaYfrom mouse movements and apply them viaDomAccess.scrollTo, mirroring the existing touch logic.mouseDragScroll_config (default:true) to toggle this feature.preventDefault) to give a "Hand Tool" feel.mousemovelistener must be registered withlocal: trueto avoid flooding the worker bridge.Architecture: This implementation remains isolated within
ScrollManagerand does not require enabling the globalTouchsensor on desktop, avoiding conflicts with the mainDragDropsystem.