[Flyout System] Fix body padding when overlay flyout is subsequent to push flyout #2
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
Closes elastic#9159
The fix makes push padding conditional on managed state and active ownership. Only the active push flyout applies body padding, and as soon as it becomes inactive (e.g., when an overlay flyout takes over), the code synchronously clears that padding and its related CSS variable. Moving the padding logic into
useLayoutEffectensures the body is updated before paint and before any measurement by scroll-lock utilities, eliminating race conditions and layout shifts.Additionally, the changes coordinate scroll locking with push state. A mutation observer tracks whether push padding is present; overlay flyouts only enable scroll lock when no push padding remains. This prevents conflicts between push and overlay sessions, guarantees the page is “unpushed” when switching to overlay, and avoids visual flicker or inconsistent measurements.
Screenshots
Before
After
Checklist