Frontmatter
| id | 9489 |
| title | Grid Multi-Body: Decoupled Horizontal Scroller & Main Thread Sync |
| state | Closed |
| labels | enhancementaigrid |
| assignees | tobiu |
| createdAt | Mar 16, 2026, 7:16 PM |
| updatedAt | Mar 31, 2026, 5:02 PM |
| githubUrl | https://github.com/neomjs/neo/issues/9489 |
| author | tobiu |
| commentsCount | 1 |
| parentIssue | 9486 |
| subIssues | [] |
| subIssuesCompleted | 0 |
| subIssuesTotal | 0 |
| blockedBy | [] |
| blocking | [] |
| closedAt | Mar 31, 2026, 5:02 PM |
Grid Multi-Body: Decoupled Horizontal Scroller & Main Thread Sync
Closedenhancementaigrid
tobiu added parent issue #9486 on Mar 16, 2026, 7:16 PM
tobiu assigned to @tobiu on Mar 17, 2026, 7:59 PM

tobiu
Mar 31, 2026, 5:02 PM
Resolved. The decoupled horizontal scroller has been structurally integrated alongside the multi-body wrapper architecture, and the GridHorizontalScrollSync Main Thread Addon has been refactored to translate its scrolling output to both the bodyCenter and the headerCenter. Furthermore, trackpad physics (wheel events) and drag-to-scroll functionalities have been seamlessly bridged back to the new architecture via #9613.
tobiu closed this issue on Mar 31, 2026, 5:02 PM
Phase 3 of the Multi-Body Epic (#9486).
To guarantee zero vertical jitter, the V2 architecture places the Center SubGrid inside an outer wrapper that handles vertical scrolling. This pushes the native horizontal scrollbar of the Center SubGrid to the absolute bottom of the virtualized data (e.g., 500,000px down), making it unusable.
We must build a decoupled, "fake" horizontal scrollbar that stays pinned to the bottom of the visible grid viewport.
Requirements:
Neo.grid.HorizontalScrollerComponent:<div style="overflow-x: auto"><div style="width: {TotalCenterColumnsWidth}px"></div></div>grid.Containerbody wrapper (e.g., just above the Footer Toolbar).GridHorizontalScrollSync):HorizontalScrollerand the DOM nodes of theCenter SubGridandCenter Header.scrolllistener to the fake scroller.centerSubGridNode.scrollLeft = scrollLeftandcenterHeaderNode.scrollLeft = scrollLeft.HorizontalScrollershould only render/be visible if theCenter SubGridactually requires horizontal scrolling (i.e., total center column width > available center viewport width).