LearnNewsExamplesServices
Frontmatter
id19279
titleA popped-out grid is not constrained to its popup window, so it never scrolls or virtualizes
stateClosed
labels
bugaidashboard
assigneesneo-opus-grace
createdAtSep 26, 2026, 3:08 PM
updatedAtSep 26, 2026, 3:48 PM
githubUrlhttps://github.com/neomjs/neo/issues/19279
authorneo-opus-grace
commentsCount0
parentIssuenull
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]
closedAtSep 26, 2026, 3:48 PM

A popped-out grid is not constrained to its popup window, so it never scrolls or virtualizes

neo-opus-grace
neo-opus-grace commented on Sep 26, 2026, 3:08 PM

Context

WorkstationPopOutHoverSyncNL › a scroll in the popped-out Feed grid suspends and resumes hover sync in the popup, and the opener hears nothing has been red in every #17844 census:

the first scroll imports the hover-sync addon into the popup window   (15 s poll)

Probed at dev 6fa2bf084d, headless, after the Feed pane's header-action pop-out:

  • The popup window's innerHeight is 240.
  • The popped-out grid view (.neo-grid-view) has clientHeight 1800, equal to its scrollHeight, with overflowY: scroll.
  • mouse.wheel(0, 120) over the view leaves scrollTop at 0 in both the DOM and the worker (scrollManager.scrollTop).
  • Grid and scroll-manager windowIds are the popup's (Container#afterSetWindowId propagates), so routing is not the cause.

The Problem

The grid view in the popup is sized to its content, not to the window. It never overflows, so it never scrolls, no scroll event reaches grid.ScrollManager, and the hover-sync addon the spec waits for is never imported. The same unconstrained height defeats the grid's row virtualization in a popup: its buffer sizes to an 1,800 px view, and a large store would render far more rows than the window can show. The spec's red is the visible edge of that.

The Architectural Reality

  • In the opener, the same grid sits in a height-constrained dock slot and scrolls (the spec's warm-up scroll passes and imports the addon there).
  • Unmeasured: which container between the popup's viewport and the grid drops the height constraint (vessel viewport, dock host, card body or pane).

The Fix

Find the unconstrained link and give the popped-out pane the popup's height, so the grid view fills the window and scrolls inside it. The spec then needs no change.

Acceptance Criteria

  • AC-1: in a popped-out Feed pane, the grid view's clientHeight fits the popup window, and a wheel scrolls it (scrollTop > 0).
  • AC-2: WorkstationPopOutHoverSyncNL passes (headless, --workers=1, runtime root bound).
  • AC-3: a regression arm pins the constraint (the view's height follows the window, not the rows).

Out of Scope

  • The pop-out window's requested size (#19224).
  • #19273 (a closed pop-out not returning its pane).

Related

#17844 (census) · #19224 (the popup's size comes from its request) · src/grid/ScrollManager.mjs (suspendGridRowHoverSyncAddon)

Origin Session ID: 81d1894c-d8fd-4192-8350-42e32eb0101e Retrieval Hint: "popped-out grid view unconstrained height popup window never scrolls hover sync addon virtualization"

tobiu referenced in commit 7438c33 - "fix(workstation): a popped-out pane's dock host fits the popup window again (#19279) (#19280) on Sep 26, 2026, 3:48 PM
tobiu closed this issue on Sep 26, 2026, 3:48 PM