Frontmatter
| id | 9369 |
| title | [Epic] Upgrade ScrollSync for Loop-Free Two-Way Binding (Mobile & Desktop) |
| state | Closed |
| labels | enhancementepicaiarchitecture |
| assignees | tobiu |
| createdAt | Mar 7, 2026, 5:37 PM |
| updatedAt | Mar 7, 2026, 6:15 PM |
| githubUrl | https://github.com/neomjs/neo/issues/9369 |
| author | tobiu |
| commentsCount | 0 |
| parentIssue | null |
| subIssues | 9370 Upgrade ScrollSync Locking Mechanism 9371 API for Programmatic Scrolling in ScrollSync 9372 Refactor GridDragScroll to use ScrollSync API 9373 Enable Mobile Two-Way ScrollSync for Grid VerticalScrollbar 9374 Mobile UX Enhancements for Grid VerticalScrollbar (SCSS) 9375 Improve ScrollSync Lock Release Mechanism (rAF vs setTimeout) 9376 Add .neo-has-touch capability class and enhance Mobile Grid Scrollbar 9377 Define `--grid-scrollbar-touch-width` variable across all themes 9378 Extract desktop grid scrollbar width into a CSS variable 9379 Mobile Scrollbar UX: Increase touch width to 40px and theme thumb colors |
| subIssuesCompleted | 10 |
| subIssuesTotal | 10 |
| blockedBy | [] |
| blocking | [] |
| closedAt | Mar 7, 2026, 6:15 PM |
[Epic] Upgrade ScrollSync for Loop-Free Two-Way Binding (Mobile & Desktop)
tobiu cross-referenced by #9370 on Mar 7, 2026, 5:38 PM
tobiu added sub-issue #9370 on Mar 7, 2026, 5:38 PM
tobiu cross-referenced by #9371 on Mar 7, 2026, 5:39 PM
tobiu added sub-issue #9371 on Mar 7, 2026, 5:39 PM
tobiu cross-referenced by #9372 on Mar 7, 2026, 5:39 PM
tobiu added sub-issue #9372 on Mar 7, 2026, 5:39 PM
tobiu cross-referenced by #9373 on Mar 7, 2026, 5:39 PM
tobiu added sub-issue #9373 on Mar 7, 2026, 5:39 PM
tobiu cross-referenced by #9374 on Mar 7, 2026, 5:39 PM
tobiu added sub-issue #9374 on Mar 7, 2026, 5:39 PM
tobiu cross-referenced by #9375 on Mar 7, 2026, 5:54 PM
tobiu added sub-issue #9375 on Mar 7, 2026, 5:54 PM
tobiu assigned to @tobiu on Mar 7, 2026, 5:54 PM
tobiu cross-referenced by #9376 on Mar 7, 2026, 6:10 PM
tobiu added sub-issue #9376 on Mar 7, 2026, 6:10 PM
tobiu closed this issue on Mar 7, 2026, 6:15 PM
tobiu cross-referenced by #9377 on Mar 7, 2026, 6:19 PM
tobiu added sub-issue #9377 on Mar 7, 2026, 6:19 PM
tobiu cross-referenced by #9378 on Mar 7, 2026, 6:26 PM
tobiu added sub-issue #9378 on Mar 7, 2026, 6:26 PM
tobiu cross-referenced by #9379 on Mar 7, 2026, 6:56 PM
tobiu added sub-issue #9379 on Mar 7, 2026, 6:57 PM
tobiu cross-referenced by #9380 on Mar 7, 2026, 7:25 PM
The current
ScrollSync.mjsarchitecture relies on blind nativescrollevent listeners. To prevent infinite "ping-pong" feedback loops, it explicitly disables two-way synchronization on touch devices (twoWay: Neo.config.hasMouseEvents). This breaks the UX on mobile for virtualized components (like Grids with custom scrollbars), preventing users from grabbing and scrubbing the scrollbar. Furthermore, it conflicts with programmatic scrolling addons likeGridDragScrollwhich continuously mutate the DOM during momentum animations.This epic proposes upgrading
ScrollSyncto act as a stateful coordinator. By implementing an internal locking mechanism (isCoordinating), it can safely apply bidirectional scroll updates across multiple nodes and programmatic sources without triggering native event feedback loops.