fix: render notification dropdown via portal for true always-on-top

The notification dropdown was trapped inside .shell-header's stacking
context (created by backdrop-filter). Even with z-index: 9999, it
remained below any element with a higher root-level z-index such as
modal overlays (1000), dialog overlays (1000), and fullscreen
terminals (1000).

- Render the dropdown via ReactDOM.createPortal into document.body
  so it escapes all parent stacking contexts.
- Dynamically measure the bell button's bounding rect to position
  the dropdown correctly with position: fixed.
- Update click-outside handler to also ignore clicks on the bell
  button itself.
- Add window resize listener to keep dropdown aligned.
- Change .notification-dropdown from position: absolute to fixed.

Quality gates: tsc --noEmit (pass), build (pass)
This commit is contained in:
Developer
2026-06-05 08:45:36 +00:00
parent 8d51877afa
commit 6aea83bf17
2 changed files with 79 additions and 55 deletions
+1 -3
View File
@@ -4670,9 +4670,7 @@ a:active,
}
.notification-dropdown {
position: absolute;
top: calc(100% + 6px);
right: 0;
position: fixed;
width: 360px;
max-width: calc(100vw - 2rem);
max-height: 480px;