[EuiPopover][EuiInputPopover] Misc fixes and CSS cleanup#7211
[EuiPopover][EuiInputPopover] Misc fixes and CSS cleanup#7211cee-chen merged 11 commits intoelastic:mainfrom
Conversation
+ convert `calc()` to `mathWithUnits` + fix missing opacity transition on drag/drop popovers
- that don't have enough enough vertical room to be top/bottom anchored
- has been broken since EuiPopover was converted to Emotion; was working with previous Sass - the transition needs to be permanently present (not just on open) for it to still work on close
- by making our conditional JS cleaner, we don't have to constantly override existing tranform/filter CSS + clarify comments/var names
- now that the default styles no longer have any transforms, this offset isn't needed whatsoever for anchored/input popovers + clean up tests to use specific assertions
- EuiInputPopovers were anchoring to the left/right when they should not be
ba16d87 to
1449880
Compare
1Copenut
left a comment
There was a problem hiding this comment.
👍 LGTM! I learned a new trick about using useMemo() to cache styles between re-renders.
Just to add a bit more context here, perf wise the memoization is probably negligible, I wanted it more for the the early |
src/components/popover/popover.tsx
Outdated
| arrowBuffer: 10, | ||
| }, | ||
| returnBoundingBox: this.props.attachToAnchor, | ||
| allowCrossAxis: !this.props.attachToAnchor, |
There was a problem hiding this comment.
@1Copenut FYI, I was thinking about this overnight and instead of tying this prop specifically to attachToAnchor, I think I'm going to make a new top-level EuiPopover prop for it and have EuiInputPopover (only) use the prop. There might be a scenario where attached anchors should flex to the cross axes, it's just that input popovers specifically should not
There was a problem hiding this comment.
@cee-chen That sounds like a good use case to split this to a top level prop.
There was a problem hiding this comment.
Skipped a dedicated docs example for it now as it feels relatively edge case 🤔 attachToAnchor doesn't have a docs section either fwiw, feels like this prop is similar in intention
|
Preview staging links for this PR:
|
💚 Build Succeeded
History
|
`v88.3.0`⏩`v88.5.0` closes #151514 --- ## [`88.5.0`](https://github.com/elastic/eui/tree/v88.5.0) - Updated `EuiCallOut` with a new `onDismiss` prop ([#7156](elastic/eui#7156)) - Added a new `renderCustomToolbar` prop to `EuiDataGrid`, which allows custom rendering of the toolbar. ([#7190](elastic/eui#7190)) - Added a new `allowResetButton` prop to `toolbarVisibility.showDisplaySelector` of `EuiDataGrid`, which allows hiding the "Reset to default" button from the display settings popover. ([#7190](elastic/eui#7190)) - Added a new `additionalDisplaySettings` prop to `toolbarVisibility.showDisplaySelector` of `EuiDataGrid`, which allows rendering extra settings inside the display settings popover. ([#7190](elastic/eui#7190)) - Updated `EuiDataGrid`'s toolbar display settings button icon ([#7190](elastic/eui#7190)) - Updated `EuiTextTruncate` with significantly improved iteration performance. Removed `measurementRenderAPI` prop, as `EuiTextTruncation` now only uses more performant canvas render API ([#7210](elastic/eui#7210)) - Updated `EuiPopover` with a new configurable `repositionToCrossAxis` prop ([#7211](elastic/eui#7211)) - Updated `EuiDatePicker` to support `compressed` input styling ([#7218](elastic/eui#7218)) - Added `gradient` and `palette` icon glyphs. ([#7220](elastic/eui#7220)) **Bug fixes** - Fixed `EuiPopover`'s missing animations on popover close ([#7211](elastic/eui#7211)) - Fixed `EuiInputPopover` anchoring to the wrong side and missing shadows on smaller screens ([#7211](elastic/eui#7211)) - Fixed `EuiSuperDatePicker` icon spacing on the quick select button ([#7217](elastic/eui#7217)) - Fixed a missing type in `EuiMarkdownEditor`'s default processing plugins ([#7221](elastic/eui#7221)) ## [`88.4.1`](https://github.com/elastic/eui/tree/v88.4.1) **Bug fixes** - Fixed missing `className`s on `EuiTextTruncate` ([#7212](elastic/eui#7212)) - Fixed `title`s on `EuiComboBox` dropdown options to always be present ([#7212](elastic/eui#7212)) - Fixed `EuiComboBox` truncation issues when search is an empty space ([#7212](elastic/eui#7212)) ## [`88.4.0`](https://github.com/elastic/eui/tree/v88.4.0) - Updated `EuiComboBox` to allow configuring text truncation behavior via `truncationProps`. These props can be set on the entire combobox as well as on on individual dropdown options. ([#7028](elastic/eui#7028)) - Updated `EuiInMemoryTable` with a new `searchFormat` prop (defaults to `eql`). When setting this prop to `text`, the built-in search bar will ignore EQL syntax and allow searching for plain strings with special characters and symbols. ([#7175](elastic/eui#7175)) **Bug fixes** - `EuiComboBox` now always shows the highlighted search text, even on truncated text ([#7028](elastic/eui#7028)) - Fixed missing i18n in `EuiSearchBar`'s default placeholder and aria-label text ([#7175](elastic/eui#7175)) - Fixed the inline compressed styles of `EuiDescriptionListTitle` to use a taller line-height for readability ([#7185](elastic/eui#7185)) - Fixed `EuiComboBox` to correctly truncate selected items when displayed as pills and plain text ([#7193](elastic/eui#7193)) **Accessibility** - Added `aria-current` attribute to `EuiTablePagination` ([#7186](elastic/eui#7186)) **CSS-in-JS conversions** - Converted `EuiDroppable` and `EuiDraggable` to Emotion; Removed `$euiDragAndDropSpacing` Sass variables ([#7187](elastic/eui#7187)) --------- Co-authored-by: Patryk Kopycinski <contact@patrykkopycinski.com> Co-authored-by: Jan Monschke <jan.monschke@elastic.co> Co-authored-by: Thomas Watson <watson@elastic.co>
Summary
As always, I recommend following along by commit because this PR has a bunch of CSS cleanups as well as fixes.
Missing close animations on standard
EuiPopoversThis broke in EuiPopover's Emotion conversion (#5977)
Fix
EuiInputPopoverflipping to horizontal anchors on screens without sufficient vertical spaceThis one's been broken since #7071 (my fault!)
QA
See above screenshots, feel free to repro on staging vs production
General checklist
- [ ] Checked in both light and dark modes- [ ] Checked for accessibility including keyboard-only and screenreader modesand cypress tests