Skip to content

[EuiFlyout] Support hasAnimation=false for overlay flyouts#9428

Merged
mgadewoll merged 7 commits intoelastic:mainfrom
mgadewoll:flyout/support-no-animation-overlay-flyout
Mar 17, 2026
Merged

[EuiFlyout] Support hasAnimation=false for overlay flyouts#9428
mgadewoll merged 7 commits intoelastic:mainfrom
mgadewoll:flyout/support-no-animation-overlay-flyout

Conversation

@mgadewoll
Copy link
Copy Markdown
Contributor

@mgadewoll mgadewoll commented Mar 5, 2026

Summary

This PR updates EuiFlyout and EuiOverlayMask to support disabling animations for flyouts with type="overlay".
Previously the prop pushAnimation only applied to flyouts with type="push".

Changes

  • Updated EuiFlyout to apply noAnimation styles dependent on pushAnimation only and independently of type
  • Added hasAnimation on EuiFlyout (replaces deprecated pushAnimation prop)
  • Added hasAnimation prop on EuiOverlayMask to conditionally add animation styles to match behaviours when used with flyouts

Why are we making this change?

💪 Feature request: This update was requested by @justinkambic to prevent animations when re-opening previously opened flyouts.

Screenshots #

  • EuiFlyout
hasAnimation=true hasAnimation=false
Screen.Recording.2026-03-05.at.14.27.20.mov
Screen.Recording.2026-03-05.at.14.27.30.mov
Screen.Recording.2026-03-05.at.14.27.52.mov
Screen.Recording.2026-03-05.at.14.28.06.mov
  • EuiOverlayMask
hasAnimation=true hasAnimation=false
Screen.Recording.2026-03-05.at.14.28.58.mov
Screen.Recording.2026-03-05.at.14.28.49.mov

Impact to users

🟢 This is an opt-in feature. There are no changes required on consumer side.

QA

  • verify that EuiFlyout (story) with type="overlay" renders with animation when pushAnimation=true
  • verify that EuiFlyout (story) with type="overlay" renders without animation when pushAnimation=false
  • verify that EuiOverlayMask (story) renders with animation when hasAnimation=true
  • verify that EuiOverlayMask (story) renders without animation when hasAnimation=false

General checklist

  • Browser QA
    • Checked in both light and dark modes
    • Checked in both MacOS and Windows high contrast modes
    • Checked in mobile
    • Checked in Chrome, Safari, Edge, and Firefox
    • Checked for accessibility including keyboard-only and screenreader modes
  • Docs site QA
  • Code quality checklist
  • Release checklist
    • A changelog entry exists and is marked appropriately
    • If applicable, added the breaking change issue label (and filled out the breaking change checklist)
    • If the changes unblock an issue in a different repo, smoke tested carefully (see Testing EUI features in Kibana ahead of time)
  • Designer checklist
    • If applicable, file an issue to update EUI's Figma library with any corresponding UI changes. (This is an internal repo, if you are external to Elastic, ask a maintainer to submit this request)

@mgadewoll mgadewoll self-assigned this Mar 5, 2026
@mgadewoll mgadewoll force-pushed the flyout/support-no-animation-overlay-flyout branch from c5102fb to cf8c7c0 Compare March 5, 2026 13:24
@mgadewoll mgadewoll marked this pull request as ready for review March 5, 2026 14:22
@mgadewoll mgadewoll requested a review from a team as a code owner March 5, 2026 14:22
@tkajtoch tkajtoch self-requested a review March 5, 2026 14:23
@iblancof
Copy link
Copy Markdown

iblancof commented Mar 5, 2026

Thanks for adding support for disabling animations on the non-push flyouts!

One thing I was wondering about is the naming. The pushAnimation prop seems somewhat tied to the concept of the push type, so I’m not completely sure if it fits with the non-push flyouts.

@tkajtoch
Copy link
Copy Markdown
Member

tkajtoch commented Mar 5, 2026

One thing I was wondering about is the naming. The pushAnimation prop seems somewhat tied to the concept of the push type, so I’m not completely sure if it fits with the non-push flyouts.

I agree. We don't want to introduce a breaking change because of this small improvement, but I think it would be worth having a simple animation prop that's in sync with the existing pushAnimation

@mgadewoll
Copy link
Copy Markdown
Contributor Author

One thing I was wondering about is the naming. The pushAnimation prop seems somewhat tied to the concept of the push type, so I’m not completely sure if it fits with the non-push flyouts.

I agree. We don't want to introduce a breaking change because of this small improvement, but I think it would be worth having a simple animation prop that's in sync with the existing pushAnimation

As you correctly mentioned, I didn't want to introduce a breaking change here.
I agree as well, that the naming isn't the best but it's kind of ok - imho - considering the animation is pushing the flyout into the view 😅

If we feel strongly about this, then adding an additional prop can be an option and we would deprecate pushAnimation and remove it fully after a reasonable deprecation period.

@iblancof
Copy link
Copy Markdown

iblancof commented Mar 5, 2026

One thing I was wondering about is the naming. The pushAnimation prop seems somewhat tied to the concept of the push type, so I’m not completely sure if it fits with the non-push flyouts.

I agree. We don't want to introduce a breaking change because of this small improvement, but I think it would be worth having a simple animation prop that's in sync with the existing pushAnimation

As you correctly mentioned, I didn't want to introduce a breaking change here. I agree as well, that the naming isn't the best but it's kind of ok - imho - considering the animation is pushing the flyout into the view 😅

If we feel strongly about this, then adding an additional prop can be an option and we would deprecate pushAnimation and remove it fully after a reasonable deprecation period.

Thanks for the quick feedback! I’m happy with whichever direction we decide to go, I just wanted to mention the naming in case it’s something worth considering 👍🏻

Copy link
Copy Markdown
Contributor

@justinkambic justinkambic left a comment

Choose a reason for hiding this comment

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

This LGTM. I did have a few nits or recommendations, but ultimately you all are the maintainers and thank you for working on this so quickly.

I did some practical verification via the storybook. I haven't stood up EUI DX in a while; you all have done some incredible work maturing the project since then. 👏

Image

@mgadewoll mgadewoll force-pushed the flyout/support-no-animation-overlay-flyout branch from 9c37802 to 7af1402 Compare March 6, 2026 08:51
@mgadewoll mgadewoll changed the title [EuiFlyout] Support pushAnimation=false for overlay flyouts [EuiFlyout] Support hasAnimation=false for overlay flyouts Mar 6, 2026
@mgadewoll
Copy link
Copy Markdown
Contributor Author

mgadewoll commented Mar 6, 2026

ℹ️ Added hasAnimation prop and a deprecation note for pushAnimation in aafd5bf. (deprecation schedule)

Copy link
Copy Markdown
Member

@tkajtoch tkajtoch left a comment

Choose a reason for hiding this comment

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

Thank you for deprecating the pushAnimation prop! Code changes look great and everything works as expected.

@mgadewoll mgadewoll force-pushed the flyout/support-no-animation-overlay-flyout branch from 93aae2b to 0e34c52 Compare March 17, 2026 09:59
@mgadewoll
Copy link
Copy Markdown
Contributor Author

ℹ️ Rebased with latest main.

@mgadewoll mgadewoll enabled auto-merge (squash) March 17, 2026 10:00
@elasticmachine
Copy link
Copy Markdown
Collaborator

💚 Build Succeeded

History

cc @mgadewoll

@elasticmachine
Copy link
Copy Markdown
Collaborator

💚 Build Succeeded

History

cc @mgadewoll

@mgadewoll mgadewoll merged commit 5ff6c07 into elastic:main Mar 17, 2026
5 checks passed
weronikaolejniczak added a commit to elastic/kibana that referenced this pull request Apr 1, 2026
## Dependency updates

- `@elastic/eui` - v113.3.0 ⏩ v114.0.0
- `@elastic/eui-theme-borealis` - v6.2.0 ⏩ v7.0.0
- `@elastic/eslint-plugin-eui` - v2.10.0 ⏩ v2.11.0

---

## Package updates

### [`v114.0.0`](https://github.com/elastic/eui/releases/v114.0.0)

- Fixed the clipping of `EuiFlyout` overlay mask to the container bounds
when the `container` prop is provided, so the mask no longer covers the
full viewport for app-scoped flyouts.
([#9512](elastic/eui#9512))
- Updated `EuiFlyout` to support `pushAnimation` prop for
`type="overlay"` ([#9428](elastic/eui#9428))
- Added `hasAnimation` prop on `EuiFlyout` (replaces `pushAnimation`)
([#9428](elastic/eui#9428))
- Added `hasAnimation` prop on `EuiOverlayMask` to conditionally add
animation styles ([#9428](elastic/eui#9428))
- Added `historyKey` prop (type `symbol`) to `EuiFlyout` and the flyout
manager API to support scoped flyout history.
([#9413](elastic/eui#9413))
- Only flyouts sharing the same `Symbol` reference share Back button
navigation and history entries; omitting `historyKey` gives each session
its own isolated history group.
- `ACTION_CLOSE_ALL` now closes only the current history group rather
than all open flyouts.

**Bug fixes**

- Fixed `EuiTreeView` expanded nodes clipping content and causing
sibling overlap when children exceed viewport height
([#9510](elastic/eui#9510))
- Fixed `EuiDataGrid` scroll bouncing back to the focused element in
certain cases ([#9453](elastic/eui#9453))
- Fixed support for intraword underscores in `EuiMarkdownFormat`
([#9408](elastic/eui#9408))

**Deprecations**

- Deprecated `pushAnimation` prop on `EuiFlyout`. Use `hasAnimation`
instead. ([#9428](elastic/eui#9428))

**Breaking changes**

- Removed `severity.assistance` color token
([#9507](elastic/eui#9507))
- Removed assistance datavis color tokens:
([#9507](elastic/eui#9507))
  - `vis.euiColorVisAssistance`
  - `vis.euiColorVis10`
  - `vis.euiColorVis11`
  - `vis.euiColorVisText10`
  - `vis.euiColorVisText11`
  - `vis.euiColorVisBehindText10`
  - `vis.euiColorVisBehindText11`
- The positional signature of `FlyoutManagerApi.addFlyout` and the
flyout store's `addFlyout` now includes `historyKey` before the
`iconType`/`minWidth` arguments. Call sites that pass arguments
positionally must be updated (or switched to named parameters) to
account for this new parameter ordering.
([#9413](elastic/eui#9413))

**Accessibility**

- Fixed `aria-label` not being applied to `EuiColorPicker`'s input
element ([#9436](elastic/eui#9436))

### @elastic/eui-theme-borealis v7.0.0

**Breaking changes**

- Removed `severity.assistance` color token
([#9507](elastic/eui#9507))
- Removed assistance datavis color tokens:
([#9507](elastic/eui#9507))
  - `vis.euiColorVisAssistance`
  - `vis.euiColorVis10`
  - `vis.euiColorVis11`
  - `vis.euiColorVisText10`
  - `vis.euiColorVisText11`
  - `vis.euiColorVisBehindText10`
  - `vis.euiColorVisBehindText11`

### @elastic/eslint-plugin-eui v2.11.0

- Updated `no-unnamed-interactive-element` to include checking
`EuiColorPicker` ([#9436](elastic/eui#9436))

---------

Co-authored-by: Timothy Sullivan <tsullivan@elastic.co>
Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
Co-authored-by: Weronika Olejniczak <32842468+weronikaolejniczak@users.noreply.github.com>
Co-authored-by: Weronika Olejniczak <weronika.olejniczak@elastic.co>
eokoneyo pushed a commit to davismcphee/kibana that referenced this pull request Apr 2, 2026
## Dependency updates

- `@elastic/eui` - v113.3.0 ⏩ v114.0.0
- `@elastic/eui-theme-borealis` - v6.2.0 ⏩ v7.0.0
- `@elastic/eslint-plugin-eui` - v2.10.0 ⏩ v2.11.0

---

## Package updates

### [`v114.0.0`](https://github.com/elastic/eui/releases/v114.0.0)

- Fixed the clipping of `EuiFlyout` overlay mask to the container bounds
when the `container` prop is provided, so the mask no longer covers the
full viewport for app-scoped flyouts.
([elastic#9512](elastic/eui#9512))
- Updated `EuiFlyout` to support `pushAnimation` prop for
`type="overlay"` ([elastic#9428](elastic/eui#9428))
- Added `hasAnimation` prop on `EuiFlyout` (replaces `pushAnimation`)
([elastic#9428](elastic/eui#9428))
- Added `hasAnimation` prop on `EuiOverlayMask` to conditionally add
animation styles ([elastic#9428](elastic/eui#9428))
- Added `historyKey` prop (type `symbol`) to `EuiFlyout` and the flyout
manager API to support scoped flyout history.
([elastic#9413](elastic/eui#9413))
- Only flyouts sharing the same `Symbol` reference share Back button
navigation and history entries; omitting `historyKey` gives each session
its own isolated history group.
- `ACTION_CLOSE_ALL` now closes only the current history group rather
than all open flyouts.

**Bug fixes**

- Fixed `EuiTreeView` expanded nodes clipping content and causing
sibling overlap when children exceed viewport height
([elastic#9510](elastic/eui#9510))
- Fixed `EuiDataGrid` scroll bouncing back to the focused element in
certain cases ([elastic#9453](elastic/eui#9453))
- Fixed support for intraword underscores in `EuiMarkdownFormat`
([elastic#9408](elastic/eui#9408))

**Deprecations**

- Deprecated `pushAnimation` prop on `EuiFlyout`. Use `hasAnimation`
instead. ([elastic#9428](elastic/eui#9428))

**Breaking changes**

- Removed `severity.assistance` color token
([elastic#9507](elastic/eui#9507))
- Removed assistance datavis color tokens:
([elastic#9507](elastic/eui#9507))
  - `vis.euiColorVisAssistance`
  - `vis.euiColorVis10`
  - `vis.euiColorVis11`
  - `vis.euiColorVisText10`
  - `vis.euiColorVisText11`
  - `vis.euiColorVisBehindText10`
  - `vis.euiColorVisBehindText11`
- The positional signature of `FlyoutManagerApi.addFlyout` and the
flyout store's `addFlyout` now includes `historyKey` before the
`iconType`/`minWidth` arguments. Call sites that pass arguments
positionally must be updated (or switched to named parameters) to
account for this new parameter ordering.
([elastic#9413](elastic/eui#9413))

**Accessibility**

- Fixed `aria-label` not being applied to `EuiColorPicker`'s input
element ([elastic#9436](elastic/eui#9436))

### @elastic/eui-theme-borealis v7.0.0

**Breaking changes**

- Removed `severity.assistance` color token
([elastic#9507](elastic/eui#9507))
- Removed assistance datavis color tokens:
([elastic#9507](elastic/eui#9507))
  - `vis.euiColorVisAssistance`
  - `vis.euiColorVis10`
  - `vis.euiColorVis11`
  - `vis.euiColorVisText10`
  - `vis.euiColorVisText11`
  - `vis.euiColorVisBehindText10`
  - `vis.euiColorVisBehindText11`

### @elastic/eslint-plugin-eui v2.11.0

- Updated `no-unnamed-interactive-element` to include checking
`EuiColorPicker` ([elastic#9436](elastic/eui#9436))

---------

Co-authored-by: Timothy Sullivan <tsullivan@elastic.co>
Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
Co-authored-by: Weronika Olejniczak <32842468+weronikaolejniczak@users.noreply.github.com>
Co-authored-by: Weronika Olejniczak <weronika.olejniczak@elastic.co>
paulinashakirova pushed a commit to paulinashakirova/kibana that referenced this pull request Apr 2, 2026
## Dependency updates

- `@elastic/eui` - v113.3.0 ⏩ v114.0.0
- `@elastic/eui-theme-borealis` - v6.2.0 ⏩ v7.0.0
- `@elastic/eslint-plugin-eui` - v2.10.0 ⏩ v2.11.0

---

## Package updates

### [`v114.0.0`](https://github.com/elastic/eui/releases/v114.0.0)

- Fixed the clipping of `EuiFlyout` overlay mask to the container bounds
when the `container` prop is provided, so the mask no longer covers the
full viewport for app-scoped flyouts.
([elastic#9512](elastic/eui#9512))
- Updated `EuiFlyout` to support `pushAnimation` prop for
`type="overlay"` ([elastic#9428](elastic/eui#9428))
- Added `hasAnimation` prop on `EuiFlyout` (replaces `pushAnimation`)
([elastic#9428](elastic/eui#9428))
- Added `hasAnimation` prop on `EuiOverlayMask` to conditionally add
animation styles ([elastic#9428](elastic/eui#9428))
- Added `historyKey` prop (type `symbol`) to `EuiFlyout` and the flyout
manager API to support scoped flyout history.
([elastic#9413](elastic/eui#9413))
- Only flyouts sharing the same `Symbol` reference share Back button
navigation and history entries; omitting `historyKey` gives each session
its own isolated history group.
- `ACTION_CLOSE_ALL` now closes only the current history group rather
than all open flyouts.

**Bug fixes**

- Fixed `EuiTreeView` expanded nodes clipping content and causing
sibling overlap when children exceed viewport height
([elastic#9510](elastic/eui#9510))
- Fixed `EuiDataGrid` scroll bouncing back to the focused element in
certain cases ([elastic#9453](elastic/eui#9453))
- Fixed support for intraword underscores in `EuiMarkdownFormat`
([elastic#9408](elastic/eui#9408))

**Deprecations**

- Deprecated `pushAnimation` prop on `EuiFlyout`. Use `hasAnimation`
instead. ([elastic#9428](elastic/eui#9428))

**Breaking changes**

- Removed `severity.assistance` color token
([elastic#9507](elastic/eui#9507))
- Removed assistance datavis color tokens:
([elastic#9507](elastic/eui#9507))
  - `vis.euiColorVisAssistance`
  - `vis.euiColorVis10`
  - `vis.euiColorVis11`
  - `vis.euiColorVisText10`
  - `vis.euiColorVisText11`
  - `vis.euiColorVisBehindText10`
  - `vis.euiColorVisBehindText11`
- The positional signature of `FlyoutManagerApi.addFlyout` and the
flyout store's `addFlyout` now includes `historyKey` before the
`iconType`/`minWidth` arguments. Call sites that pass arguments
positionally must be updated (or switched to named parameters) to
account for this new parameter ordering.
([elastic#9413](elastic/eui#9413))

**Accessibility**

- Fixed `aria-label` not being applied to `EuiColorPicker`'s input
element ([elastic#9436](elastic/eui#9436))

### @elastic/eui-theme-borealis v7.0.0

**Breaking changes**

- Removed `severity.assistance` color token
([elastic#9507](elastic/eui#9507))
- Removed assistance datavis color tokens:
([elastic#9507](elastic/eui#9507))
  - `vis.euiColorVisAssistance`
  - `vis.euiColorVis10`
  - `vis.euiColorVis11`
  - `vis.euiColorVisText10`
  - `vis.euiColorVisText11`
  - `vis.euiColorVisBehindText10`
  - `vis.euiColorVisBehindText11`

### @elastic/eslint-plugin-eui v2.11.0

- Updated `no-unnamed-interactive-element` to include checking
`EuiColorPicker` ([elastic#9436](elastic/eui#9436))

---------

Co-authored-by: Timothy Sullivan <tsullivan@elastic.co>
Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
Co-authored-by: Weronika Olejniczak <32842468+weronikaolejniczak@users.noreply.github.com>
Co-authored-by: Weronika Olejniczak <weronika.olejniczak@elastic.co>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

support-duty-flywheel Label for PRs, see eui-private #310

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants