LearnNewsExamplesServices
Frontmatter
id9626
titleEpic: Grid Unified Scrolling & VDOM Orchestration
stateClosed
labels
epicaiarchitecturegrid
assigneestobiu
createdAtApr 2, 2026, 10:17 AM
updatedAtApr 3, 2026, 12:52 AM
githubUrlhttps://github.com/neomjs/neo/issues/9626
authortobiu
commentsCount1
parentIssue9486
subIssues
9627 Grid Multi-Body: Introduce `grid.View` and Flatten `grid.Body` DOM
9628 Grid Multi-Body: Map Physical Heights and Transfer Vertical Scrolling
9629 Grid Multi-Body: Implement Atomic VDOM Orchestration Layer
9630 Grid: Implement Main-Thread Addon Hover Synchronization
9631 Grid: Enable Horizontal Scrolling via Locked Regions
9632 Grid: Restore Row Scroll Pinning and Update Drag E2E Tests
9633 Grid: Rename bodyWrapper to view
9634 Grid Container: Remove redundent grid wrapper node
subIssuesCompleted8
subIssuesTotal8
blockedBy[]
blocking[]
closedAtApr 3, 2026, 12:52 AM

Epic: Grid Unified Scrolling & VDOM Orchestration

Closedepicaiarchitecturegrid
tobiu
tobiu commented on Apr 2, 2026, 10:17 AM

This epic tracks the architectural pivot of the Grid Multi-Body structure to a unified vertical scrolling mechanism and centralized VDOM orchestration.

The Problem

Currently, the Grid V2 splits the grid into three independent scrolling bodies (bodyStart, body, bodyEnd) that sync their offsets dynamically. However, since they update their VDOM payloads independently via their own calculation loops, the larger center body (with more unlocked columns) requires more time to calculate delta patches than the start/end bodies. This results in staggered, non-deterministic VDOM updates arriving on the main thread, leading to horizontal tearing and jitter during rapid scrolling.

The Solution: grid.View

We are flattening the child grid.Body components to be strictly full-height data strips (no internal scrolling, no stretchers). We introduce a new overarching orchestrator class, neo.grid.View (acting as the unified bodyWrapper), which manages vertical scrolling natively.

This grid.View class will take over the createViewData calculation cycle. During a scroll event, the View calculates the new row index limits and instructs all internal bodies to update their view data silently (silent: true). Once all sub-grids are prepared, the View triggers a single, unified VDOM update (this.update({updateDepth: -1})), guaranteeing that the entire scroll state is painted atomically by the compositor thread.

tobiu assigned to @tobiu on Apr 2, 2026, 10:17 AM
tobiu added the epic label on Apr 2, 2026, 10:17 AM
tobiu added the ai label on Apr 2, 2026, 10:17 AM
tobiu added the architecture label on Apr 2, 2026, 10:17 AM
tobiu added the grid label on Apr 2, 2026, 10:17 AM
tobiu added parent issue #9486 on Apr 2, 2026, 10:17 AM
tobiu added sub-issue #9627 on Apr 2, 2026, 10:20 AM
tobiu added sub-issue #9628 on Apr 2, 2026, 10:20 AM
tobiu added sub-issue #9629 on Apr 2, 2026, 10:20 AM
tobiu
tobiu Apr 2, 2026, 10:41 AM

All 3 architectural phases for unified vertical scrolling and atomic VDOM updates have been completed successfully. The Grid is fully transformed to top-down orchestration.

tobiu closed this issue on Apr 2, 2026, 10:41 AM
tobiu reopened this issue on Apr 2, 2026, 10:49 AM
tobiu cross-referenced by #9630 on Apr 2, 2026, 11:27 AM
tobiu added sub-issue #9630 on Apr 2, 2026, 11:28 AM
tobiu cross-referenced by #9631 on Apr 2, 2026, 12:11 PM
tobiu cross-referenced by #9632 on Apr 2, 2026, 12:12 PM
tobiu added sub-issue #9631 on Apr 2, 2026, 12:12 PM
tobiu added sub-issue #9632 on Apr 2, 2026, 12:12 PM
tobiu cross-referenced by #9633 on Apr 2, 2026, 3:06 PM
tobiu added sub-issue #9633 on Apr 2, 2026, 3:06 PM
tobiu cross-referenced by #9634 on Apr 2, 2026, 3:55 PM
tobiu added sub-issue #9634 on Apr 2, 2026, 3:56 PM
tobiu closed this issue on Apr 3, 2026, 12:52 AM