Skip to content

fix: keep notifications and recovery UI above deep modal stacks (#3095)#3097

Open
JuliaMV wants to merge 1 commit into
developfrom
fix/3095-notification-zindex-above-modal
Open

fix: keep notifications and recovery UI above deep modal stacks (#3095)#3097
JuliaMV wants to merge 1 commit into
developfrom
fix/3095-notification-zindex-above-modal

Conversation

@JuliaMV
Copy link
Copy Markdown
Collaborator

@JuliaMV JuliaMV commented May 15, 2026

Summary

  • Fixes #3095: with many stacked layers (e.g. large grids of tooltips/buttons), modal z-index could exceed the old fixed snackbar value (100500), so notifications appeared behind the modal.
  • Snackbar / notification host stacking now follows uuiLayout.getTopOverlayZIndex(), keeping the previous value as a minimum so existing apps do not regress.
  • LayoutContext exposes a stable top-overlay index based on registered layers; ErrorHandler recovery ModalBlocker uses the same source instead of a hardcoded z-index.

Issue link:

3095

@JuliaMV JuliaMV requested review from MSt1ch, cpoftea and i-runets May 15, 2026 12:11
@github-actions
Copy link
Copy Markdown

Generated by: track-bundle-size
Generated at: Fri, 15 May 2026 12:17:08 GMT
Bundle size diff (in kBytes). Not gzipped. Both CSS & JS included.
Baseline: v6.3.1 (2025-12-03)
CI Status: ok

Module Baseline Size
(v6.3.1)
Size Diff Within
Threshold
Threshold
(min - max)
templateApp 693.09 699.98 +6.89
js:+4.96
css:+1.93
🆗 623.78 - 762.39
@epam/app 5586.96 5526.92 -60.04
js:-60.41
css:+0.37
🆗 5028.26 - 6145.65
@epam/electric 5.04 5.04 0
js:0
css:0
🆗 4.53 - 5.54
@epam/promo 55.61 55.57 -0.05
js:0
css:-0.05
🆗 50.05 - 61.17
@epam/uui-extra 0.21 0.21 0
js:0
css:0
🆗 0.19 - 0.23
@epam/loveship 92.81 96.24 +3.43
js:+3.48
css:-0.05
🆗 83.53 - 102.09
@epam/uui-components 257.49 261.27 +3.77
js:+2.25
css:+1.52
🆗 231.75 - 283.25
@epam/uui-core 324.75 329.55 +4.8
js:+4.8
css:0
🆗 292.27 - 357.23
@epam/uui-db 41.63 41.72 +0.08
js:+0.08
css:0
🆗 37.47 - 45.8
@epam/uui-docs 181.03 194.73 +13.71
js:+13.71
css:0
🆗 162.92 - 199.13
@epam/uui-editor 174.1 173.28 -0.82
js:-0.82
css:+0
🆗 156.69 - 191.51
@epam/uui-timeline 75.5 75.49 -0.01
js:0
css:0
🆗 67.95 - 83.05
@epam/uui 527.51 548.47 +20.96
js:+4.3
css:+16.66
🆗 474.76 - 580.26
new sizes (raw)

To set the sizes as a new baseline, you can copy/paste next content to the uui-build/config/bundleSizeBaseLine.json and commit the file.

{
  "version": "6.4.4",
  "timestamp": "2026-05-15",
  "sizes": {
    "templateApp": {
      "css": 259446,
      "js": 457328
    },
    "@epam/app": {
      "css": 720897,
      "js": 4938667
    },
    "@epam/electric": {
      "css": 2275,
      "js": 2883
    },
    "@epam/promo": {
      "css": 47756,
      "js": 9145
    },
    "@epam/uui-extra": {
      "css": 0,
      "js": 213
    },
    "@epam/loveship": {
      "css": 55330,
      "js": 43218
    },
    "@epam/uui-components": {
      "css": 25157,
      "js": 242379
    },
    "@epam/uui-core": {
      "css": 0,
      "js": 337461
    },
    "@epam/uui-db": {
      "css": 0,
      "js": 42718
    },
    "@epam/uui-docs": {
      "css": 2152,
      "js": 197255
    },
    "@epam/uui-editor": {
      "css": 12954,
      "js": 164486
    },
    "@epam/uui-timeline": {
      "css": 2199,
      "js": 75104
    },
    "@epam/uui": {
      "css": 215800,
      "js": 345831
    }
  }
}

Generated by: generate-components-api
CI Status: error

Total amount of exported types/props without JSDoc comments

Amount
Types 338 (+0) 🆗
Props 221 (+1) ⛔
New missing comments
NOTE: It's either a new exported types/props without JSDoc, or it's an existing code from which you deleted the JSDoc comments.
Types:
- <empty>
Props:
- @epam/uui-components:SnackbarProps/zIndex

const { style: rawStyle, ...restRawProps } = rawProps;
const rootStyle = this.props.zIndex !== undefined || rawStyle
? {
...(typeof rawStyle === 'object' && rawStyle ? (rawStyle as React.CSSProperties) : {}),
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we can skip this check for rawStyles type and just do this:

const rootStyle = rawStyle || this.props.zIndex !== undefined
    ? {
        ...(rawStyle ?? {}),
        ...(this.props.zIndex !== undefined ? { zIndex: this.props.zIndex } : {}),
    }
    : undefined;

rawStyle is already typed as React.CSSProperties(inherits from IHasRawProps<React.HTMLAttributes<HTMLDivElement>>), and from what I can see, UUI rarely does this kind of check.

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.

Notifications are displayed behind modal windows when there are a lot of layered components on the page

2 participants