Frontmatter
| id | 9630 |
| title | Grid: Implement Main-Thread Addon Hover Synchronization |
| state | Closed |
| labels | enhancementaiperformancegrid |
| assignees | tobiu |
| createdAt | Apr 2, 2026, 11:27 AM |
| updatedAt | Apr 2, 2026, 11:57 AM |
| githubUrl | https://github.com/neomjs/neo/issues/9630 |
| author | tobiu |
| commentsCount | 1 |
| parentIssue | 9626 |
| subIssues | [] |
| subIssuesCompleted | 0 |
| subIssuesTotal | 0 |
| blockedBy | [] |
| blocking | [] |
| closedAt | Apr 2, 2026, 11:57 AM |
Grid: Implement Main-Thread Addon Hover Synchronization
Closedenhancementaiperformancegrid
tobiu added parent issue #9626 on Apr 2, 2026, 11:28 AM

tobiu
Apr 2, 2026, 11:57 AM
Development is complete. Hover sync has been stabilized by aggressively removing .neo-hover artifact classes natively, moving to a fully event-driven workflow (using resumeHover with timeout()), and documenting the architecture following the 'Anchor & Echo' Knowledge Base Enhancement Strategy. Changes have been pushed to dev.
tobiu assigned to @tobiu on Apr 2, 2026, 11:57 AM
tobiu closed this issue on Apr 2, 2026, 11:57 AM
This is an architecture sub-task for Epic #9626.
Problem Description
The transition to a multi-body grid architecture means that a single logical row is now split across up to three physical grid bodies (Start, Center, End). Native SCSS
:hoverstates only apply to the DOM nodes within a single grid body, resulting in disconnected highlighting when a user hovers over a segmented row.To maintain perfect GPU scrolling performance and eliminate CSS bundle bloat, we need a hyper-optimized Main-Thread mechanism to synchronize these hover states.
Proposed Solution
Introduce the
Neo.main.addon.GridRowHoverSyncaddon to systematically delegate native pointer events across multiple grid bodies with zero layout thrashing.mousemovecoordination. It relies purely on the browser's nativemouseover/mouseoutevent propagation. It perfectly complementspointer-events: nonevirtualization by letting the Browser GPU handle the lifecycle natively when a scroll buffer terminates.relatedTargetBailout: The Addon diffs thee.relatedTargetdynamically. If the pointer navigates within the boundaries of an identicaldata-record-id, it bypasses DOM mutations entirely, resulting in exactly zero unnecessary class toggles.GridContainer.hasLockedColumnsto ensure pristine 0-JS overhead when developers configure a traditional single-body Grid layout, gracefully defaulting to legacy SCSS native behavior.