Skip to content

IBX-12552: Stacked notifications around the modal backdrop - #2090

Open
tischsoic wants to merge 5 commits into
6.0from
IBX-12552-alert-link-colour
Open

tischsoic wants to merge 5 commits into
6.0from
IBX-12552-alert-link-colour

Conversation

@tischsoic

@tischsoic tischsoic commented Sep 14, 2026

Copy link
Copy Markdown
Contributor
🎫 Issue IBX-12552

Description:

Per the design decision: notifications already on screen when a modal opens go below its backdrop, notifications raised after it opened stay above it, and everything returns to normal once the last modal closes.

They cannot be ordered within one container — .ibexa-notifications-container is position: fixed, which establishes a stacking context its children cannot leave, so a child's z-index only orders it against its siblings. Hence a second container below the backdrop, with the toasts moved between the two. The second one is offset by the height of the first, so the two keep reading as a single column with the usual 16px rhythm.

Driven by Bootstrap's show.bs.modal / hidden.bs.modal, which also covers the React Popup and Page Builder's ConfigPopup since both are built on Bootstrap's modal. Restore is additionally triggered by the backdrop leaving the document, because a popup that React unmounts dispatches its hidden event on a detached node that never reaches document. .modal.show decides when the last modal is gone — body.modal-open is written by several sources without reference counting and is cleared by whichever nested modal closes first.

Out of scope: the Universal Discovery Widget, which is a fixed overlay with its own scroll-lock class and no modal events — worth a follow-up if the same rule should apply there.

For QA:

Content → select sub-items → Move → pick the same folder. In the warning toast click "Click here for more information.": the modal opens and that toast drops behind the backdrop. Raise another notification while the modal is open (any second bulk action) — it must appear above the modal, below the dimmed one, with the two forming one column. Close the modal: everything returns to normal. Repeat with the bulk-delete confirmation popup, and with a modal opened on top of another one — the notifications only come back when the last one is closed.

Documentation:

Notifications sit at z-index 10300, far above the modal stack, so the toast
reporting a partial bulk operation stayed lit and clickable on top of the modal
its own link had opened. It now drops below the backdrop while that modal is
shown; notifications keep covering every other backdrop.

Co-Authored-By: Claude <noreply@anthropic.com>
Lowering the notifications container put every visible notification behind the
backdrop, and a single notification cannot be lowered on its own: the container
is position: fixed, so it establishes a stacking context its children cannot
leave. The notification carrying the link is marked when it is created and, while
that modal is shown, is covered with the backdrop's own colour and stops taking
pointer events; the other notifications are untouched.

Co-Authored-By: Claude <noreply@anthropic.com>
@tischsoic tischsoic changed the title IBX-12552: Let the bulk action modal cover the notifications IBX-12552: Greyed out the alert while its modal is open Sep 14, 2026
It belongs with the modal it reacts to rather than with the notifications
container, next to the other modal partials.

Co-Authored-By: Claude <noreply@anthropic.com>
tischsoic and others added 2 commits September 18, 2026 14:36
The design team settled the rule: notifications already on screen when a modal
opens go behind its backdrop, and notifications raised afterwards stay above it.
That needs real stacking rather than an overlay painted on one notification.

Co-Authored-By: Claude <noreply@anthropic.com>
Notifications that are already on screen when a modal opens move into a second
container placed below the backdrop, and return when the last modal closes;
anything raised while the modal is open is appended to the original container
and stays above it. They cannot be ordered within one container, because it is
position: fixed and so establishes a stacking context its children cannot leave.

The second container is offset by the height of the first one, so the two keep
reading as a single column. Bootstrap's own events drive it, which also covers
the React popups built on them; the backdrop leaving the document is used as the
restore trigger as well, because a popup unmounted by React dispatches its
hidden event on a detached node.

Co-Authored-By: Claude <noreply@anthropic.com>
@tischsoic tischsoic changed the title IBX-12552: Greyed out the alert while its modal is open IBX-12552: Stacked notifications around the modal backdrop Sep 18, 2026
@sonarqubecloud

Copy link
Copy Markdown

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants