@@ -358,6 +358,10 @@ class Blocks {
358358 this . _checkBoundsScheduled = false ;
359359 // Cached drag group computed once on mousedown, reused during pressmove
360360 this . _cachedDragGroup = null ;
361+ // Blocks in the active drag group are exempt from viewport culling
362+ // during the drag to avoid "pop-in" when off-screen siblings are
363+ // dragged into view. Cleared on pressup/mouseout.
364+ this . _dragActiveGroup = null ;
361365 // Cached top-block map for moveAllBlocksExcept edge-scroll
362366 this . _topBlockCache = null ;
363367 // Throttle timestamp for edge-scroll calls
@@ -3555,7 +3559,19 @@ class Blocks {
35553559 // Support viewport culling via _viewportVisible (eye icon takes priority).
35563560 myBlock . container . _origIsVisible = myBlock . container . isVisible ;
35573561 myBlock . container . isVisible = function ( ) {
3558- if ( ! myBlock . _viewportVisible ) return false ;
3562+ if ( ! myBlock . _viewportVisible ) {
3563+ // During a drag, show blocks in the active drag group even
3564+ // if they are off-screen, so the user sees the entire stack
3565+ // follow the cursor smoothly instead of "popping in" on release.
3566+ if (
3567+ myBlock . blocks &&
3568+ myBlock . blocks . _dragActiveGroup &&
3569+ myBlock . blocks . _dragActiveGroup . has ( myBlock . blockIndex )
3570+ ) {
3571+ return this . _origIsVisible . call ( this ) ;
3572+ }
3573+ return false ;
3574+ }
35593575 return this . _origIsVisible . call ( this ) ;
35603576 } ;
35613577
@@ -4036,6 +4052,7 @@ class Blocks {
40364052 */
40374053 this . clearCachedDragGroup = ( ) => {
40384054 this . _cachedDragGroup = null ;
4055+ this . _dragActiveGroup = null ;
40394056 } ;
40404057
40414058 /**
0 commit comments