Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

EuiSkeleton components #6502

Merged
merged 36 commits into from
Jan 27, 2023

Conversation

AndreaDellaValle
Copy link
Contributor

Summary

Hello folks 👋
I've previously left a comment in this discussion here because like some of you I'm in the need of a proper Skeleton component, so with this draft PR I'm trying to revive the discussion with an actual testable proposal.

Context

I've checked others design system skeletons and tried to reshape them for the EUI use case (from basic apps to very complex back-office dashboards) while trying to avoid overdoing it, otherwise it's better to directly switch to a 'skeleton' prop for every component as suggested in the discussion linked.

Proposal

The basic implementation can be within a ternary operator à la Material UI just to say

myCondition 
  ? <EuiSkeletonCircle size="s" /> 
  : <EuiAvatar size="s" />

I know it's not the fanciest way, but it was also the fastest to show you a working example, we can discuss about a wrapper solution or similar once the component variants will be agreed.

Skeleton Component Structure

  • placed under the Display section
  • 4 variants:
    • Circle
    • Text (ex: EuiLoadingContent)
    • Heading
    • Item: generic all-around to cover images, icons, logo, badges, others...by setting height width and radius
  • removal of the EuiLoadingContent component [BREAKING] (but still alive in this draft)

Missing (but willing to include):

  • Table skeletons
  • Line thickness props for SkeletonText
  • Animation styles (the current one does not scale properly within dimension, it became too big)

Request

General feedback on this first draft, and especially about:

  • Overall effectiveness
  • Developer experience
  • The 4 components structure (too few? too much? too much manual effort during implementation?)
  • The props of the single components
  • Naming

I'm leaving some screenshots and records but you can also checkout this branch and testing it:
https://user-images.githubusercontent.com/15049973/209408005-8a0ccc19-8ec7-42bc-9f86-6c9a75936473.mov

SkeletonCircle props:
Screenshot 2022-12-23 at 22 39 44

SkeletonText props:
Screenshot 2022-12-23 at 22 40 00

SkeletonHeading props:
Screenshot 2022-12-23 at 22 40 27

SkeletonItem props:
Screenshot 2022-12-23 at 22 40 54

QA

General checklist

I'll go trough the entire checklist once requirements will be reviewed and approved.
Tests and styles are in TODO state as well, also the code here and there it's still a mess, any advice is welcome.

@kibanamachine
Copy link

Since this is a community submitted pull request, a Jenkins build has not been kicked off automatically. Can an Elastic organization member please verify the contents of this patch and then kick off a build manually?

@cla-checker-service
Copy link

cla-checker-service bot commented Dec 23, 2022

💚 CLA has been signed

@elizabetdev
Copy link
Contributor

jenkins test this

@kibanamachine
Copy link

Preview documentation changes for this PR: https://eui.elastic.co/pr_6502/

Copy link
Contributor

@elizabetdev elizabetdev left a comment

Choose a reason for hiding this comment

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

Thanks @AndreaDellaValle,

This PR is looking great. I like your approach for the implementation:

myCondition 
  ? <EuiSkeletonCircle size="s" /> 
  : <EuiAvatar size="s" />

I'm a product designer on EUI team and my review is more focused on design aspects.

General feedback on this first draft.

  • Overall effectiveness: I have nothing to say. It looks great.
  • Developer experience: The DX looks good. The EUI team can then follow up with some usage guidelines. And we can also consider adding a more complex demo where we showcase a progessive loading of contents. But what you have looks great to merge.
  • The 4 components structure: I think for now it is a good start. We can consider adding more components in the future. Only in case, it is really necessary.
  • The props of the single components: I left some comments directly in the code.
  • Naming: I left some comments directly in the code.

Let me know if you need any help.

@cee-chen cee-chen changed the title Feature/skeleton EuiSkeleton components Jan 10, 2023
@cee-chen cee-chen changed the base branch from main to feature/skeletons January 10, 2023 17:40
@cee-chen
Copy link
Contributor

@AndreaDellaValle it looks like we still need you to sign the CLA (under the email address tied to your GitHub commits) - if you could take a look at that in addition to Elizabet's feedback items, that'd be super appreciated! ❤️ Thank you for your amazing contribution - as a heads up, we'll merge it into a feature branch in order to add more docs before releasing it.

@AndreaDellaValle
Copy link
Contributor Author

AndreaDellaValle commented Jan 10, 2023

Hello @cee-chen 😀

I've signed the agreement for the third time (the last try was some minutes ago) and finally I can see that the check is green and we can move on ^_^

I take advantage of this comment to confirm that I'll take care of the CR pointed out by @miukimiu also.
I'll start working on this first CR and we will see in the next ones 👋

Thanks to both of you for the feedback and the instructions!

PS: sorry for closing/reopening the PR, it was a mistake.

@kibanamachine
Copy link

Preview documentation changes for this PR: https://eui.elastic.co/pr_6502/

@cee-chen
Copy link
Contributor

cee-chen commented Jan 24, 2023

Hey @AndreaDellaValle! I've pushed up the size/scaling updates as well as some minor improvement and cleanup feedback items (should all have been atomically committed and have explanations in each git commit message - please let me know if anything doesn't make sense).

This is looking super great and I'm very excited for it! I'm signing off for today but have some very minor docs work I'd like to do left (playground, copy passes, and finally, updating EuiLoadingContent to dogfood EuiSkeletonText + deprecating it and recommending devs use EuiSkeletonText). I can either take another pass at it tomorrow, or I'd also fine merging this PR into the feature branch as-is and continuing to fine tune docs after. This is very very close though!

EDIT: apologies for the force push, I totally f-ed up my merges. Completely my bad - hopefully did it quickly enough that it didn't screw up your local.

- in favor of calling `euiTitle`'s font utils and grabbing `lineHeight` directly from it
- should exist in the base styles instead

+ bonus - DRY out `logicalSizeCSS` to only require 1 input if both sides are the same
…stead

The reason for this is performance - Emotion generates a completely new hash/className for every single possible permutation of width/height passed to it. We want to avoid this for wildcard prop-based styles and use inline styles instead
+ cover all props

+ prefer RTL over Enzyme (part of ongoing migration)

+ fix type issue found during testing
@AndreaDellaValle AndreaDellaValle marked this pull request as ready for review January 24, 2023 12:47
@AndreaDellaValle
Copy link
Contributor Author

AndreaDellaValle commented Jan 24, 2023

Thank you for the amazing work @cee-chen ! You basically put in place everything that was missing and much more 🎊
Self-talking commits are super clear, I've understood some theme utilities that I was not getting and I'm still deep diving into them to better understand EUI.
Today during my lunch break I simply completed the example for the EuiSkeletonRectangle by adding the toggle.

I was putting this on ready for review but I found a bug on Safari 🐞 that is not rendering the border-radius so I'll take care of this issue later after work (and it was affecting the EuiLoadingContent as well).
Also, I'll try to go through all the other checks in the next few evenings if you agree with that 😉

EDIT: I can work on Figma components as well, but I don't know how to share them with you.

General checklist

  • Checked in both light and dark modes
  • Checked in mobile
  • Checked in Chrome, Safari, Edge, and Firefox > Safari border radius issue
  • Props have proper autodocs (using @default if default values are missing) and playground toggles
  • Added documentation
    - [ ] Checked Code Sandbox works for any docs examples
  • Added or updated jest and cypress tests
    - [ ] Checked for breaking changes and labeled appropriately
  • Checked for accessibility including keyboard-only and screenreader modes
  • Updated the Figma library counterpart
  • A changelog entry exists and is marked appropriately

Emotion conversion checklist

  • Does it work?
  • Output CSS matches the previous CSS / as expected in browsers
  • Rendered className reads as expected in snapshots and in browsers
    - [ ] Checked component playground (class components wrapped in withEuiTheme need to pass true as the second argument to its propUtilityForPlayground in src-docs/src/views/{component}/playground.js)
     
  • Unit tests
  • shouldRenderCustomStyles() test was added and passes with parent component and any nested childProps (e.g. tooltipProps)
    - [ ] Removed any mount()ed snapshots in favor of render() or a more specific assertion
     
  • Sass/Emotion conversion process
    - [ ] Converted all global Sass vars/mixins to JS (e.g. $euiSize to euiTheme.size.base)
    - [ ] Removed or converted component-specific Sass vars/mixins to exported JS versions, listed removals in changelog, and manually updated our theme JSON files
  • Simplified calc() to mathWithUnits if possible (if mixing different unit types, this may not be possible)
    - [ ] Added an @warn deprecation message within the global_styling/mixins/{component}.scss file
    - [ ] Removed component from src/components/index.scss
    - [ ] Deleted any src/amsterdam/overrides/{component}.scss files (styles within should have been converted to the baseline Emotion styles)
     
  • CSS tech debt
  • Reduced specificity where possible (usually by reducing nesting and class name chaining)
  • Wrapped all animations or transitions in euiCanAnimate
  • Used gap property to add margin between items if using flex
  • Converted side specific padding, margin, and position to -inline and -block logical properties (check inline styles as well as CSS)
     
  • Extras/nice-to-have
  • Documentation pass:
    • Converted any remaining .js docs files to TS
    • Misc cleanup of docs code (e.g. combine imports to single from '../src', replace <React.Fragment> with <>)
      - [ ] Check for issues in the backlog that could be a quick fix for that component
      - [ ] Optional component/code cleanup: consider splitting up the component into multiple children if it's overly verbose or difficult to reason about

@AndreaDellaValle AndreaDellaValle marked this pull request as draft January 24, 2023 13:08
- allow numbers as well as strings - now that we're using inline `style`s for the dimensions, React accepts numbers as well (which matches EuiImage API)

- remove image URI in favor of a picsum link

- set width/height on img to prevent page jumping
- for whatever reason, using `|` prints the line numbers in non-ascending order in the props table - using an array and `as const` fixes this, and is reusable in tests
+ improve mobile display of demos
- move EuiSkeletonCircle slightly lower in docs order - EuiSkeletonText is likely going to be more popular since it already exists

- misc copy tweaks
- since `euiLoadingStrings.ariaLabel` already exists, just reuse that instead of making our translators re-translate the same string
- note: this is already broken on prod as well for `EuiLoadingContent`
@cee-chen
Copy link
Contributor

I was putting this on ready for review but I found a bug on Safari 🐞 that is not rendering the border-radius so I'll take care of this issue later after work (and it was affecting the EuiLoadingContent as well).

AMAZING catch on this @AndreaDellaValle! Safari will be the death of me 💀 I poked at it a bit and discovered the issue is that the parent container's border-radius isn't being respected via overflow: hidden when the pseudo-element is animating through. Forcing the container to create a stacking context via z-index in f9db30c was the most benign way (i.e., least potential to interfere with custom consumer CSS) that I could see to make Safari behave. This should be working now, but more of your awesome testing/QA would be much appreciated!

EDIT: I can work on Figma components as well, but I don't know how to share them with you.

No worries on this one, we usually have our designers handle this - @miukimiu can likely grab it.

I'll go through the checklist as well and strike off or delete items that don't apply to this PR. Thanks again for your amazing work!! 🎉 🎉 I've pushed up all the PR feedback/changes I wanted to see personally, and think this is ready to merge. I'll handle deprecating EuiLoadingContent in a separate PR from this in order to keep this PR more manageable.

@AndreaDellaValle
Copy link
Contributor Author

Great fixes on the fly @cee-chen !
Yes Safari is a nightmare when it comes to CSS 🎃 (I call it the 'new IE')
Thank you for the detailed explanation on your stacking context fix also!

This should be working now, but more of your awesome testing/QA would be much appreciated!

For sure! I already saw some minors on the playgrounds but I think I can handle them on the fly tonight after dinner.
I will try to check everything before closing this btw.

I also think that Skeletons for EuiBasicTable and other tabular data display will be a different animal to handle in a new PR, so yes, we're pretty close to the ready for review state 🤓

@AndreaDellaValle
Copy link
Contributor Author

AndreaDellaValle commented Jan 26, 2023

Assuming that these kinds of tests are far more comprehensive if executed with some tool like Playwright (that I'm still not using... 🥲), I've tested both the rendering and the docs playgrounds and they're looking pretty good to me:

  • Edge on Win10
  • Safari on MacOS
  • Firefox on MacOS
  • Chrome on MacOS

There are some micro minors that are confined to the playgrounds but that I think are not relevant:

  • for EuiSkeletonText it does not limit the range of lines like the component do, and numbers are rendered in sparse order
  • for EuiSkeletonTitle props seems not to render the precise exact size (x and xs behaves the same)
    (After a first check they seem related more to the way playground behave than our configuration, and I haven't found hotfix for them, maybe I can check more and open an issue).

I'm asking for the review formally to @cee-chen in order to follow the standard process (but you already saw everything I think), and if you want to involve other reviewers they are more than welcome 🤠

Thank you again
PS: If for some reason, you need Figma components also, I'm at your disposal 🧑‍🎨

@AndreaDellaValle AndreaDellaValle marked this pull request as ready for review January 26, 2023 22:07
Copy link
Contributor

@cee-chen cee-chen left a comment

Choose a reason for hiding this comment

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

Woohoo! Let's ship it. Very excited for this to land (hopefully by next Tuesday's release!)

for EuiSkeletonText it does not limit the range of lines like the component do, and numbers are rendered in sparse order

For what it's worth we have several other components (with limited number inputs) that behave this way, so I'm not super worried about it. It's something we'd need to enhance our playground controls for in a separate PR.

@cee-chen cee-chen merged commit 8d1265b into elastic:feature/skeletons Jan 27, 2023
cee-chen added a commit that referenced this pull request Jan 27, 2023
* Setup EuiSkeleton files and folders structure

* Moved Skeleton under the Display side menu category

* Component variants setup

* feat: skeleton setup [text, rect, circle]

* feat: added skeleton item draft and other minors

* chore: renamed sizes

* feat: added Heading in favor of Rect component

* Update src-docs/src/views/skeleton/skeleton_example.js

Co-authored-by: Elizabet Oliveira <[email protected]>

* Update src-docs/src/views/skeleton/skeleton_example.js

Co-authored-by: Elizabet Oliveira <[email protected]>

* Update src-docs/src/views/skeleton/skeleton_example.js

Co-authored-by: Elizabet Oliveira <[email protected]>

* chore: wrapped p with EuiText and indentation

* chore: removed useless styles

* chore: centralized and renamed skeleton animation keyfram

* refactor: renamed euiSkeletonHeading to euiSkeletonTitle and updated sizes with euiTitle ones

* chore: renamed EuiSkeletonItem to EuiSkeletonRectangle

* Remove hard-coded `euiSkeletonTitleStyles` heights map

- in favor of calling `euiTitle`'s font utils and grabbing `lineHeight` directly from it

* [docs] Add EuiSwitch toggle to EuiSkeletonTitle tests

- this toggle help demonstrates to consumers how to conditionally switch from loading to non-loading components, and also allows us to test heights

* Add `size` prop to `EuiSkeletonText`

+ add calculations & offsets to account for text scale

+ update docs to allow changing size & toggle between text to test visual behavior

* [docs] Add loading toggle for EuiSkeletonCircle

+ prettier fixes

* [PR feedback] Fix incorrect BEM naming; remove extra modifier classes

- BEM: `__` should only be used for children/descendants, and these are parent-level styles and should use regular camelCasing

- modifier classes removal: we're moving away from setting these extra CSS classes, which do not have any actual CSS tied to them (since we're using Emotion CSS-in-JS instead). The top-level className remains as an API for consumers to hook into for overrides if needed.

* [PR feedback] DRY out all `aria`/a11y attributes to reusable helper

- not all components were correctly receiving all the aria attrs they should have been - this helper fixes that

* [PR feedback] Rename` _skeleton` to `utils`, DRY out repeated gradient CSS

- `utils` better matches naming/architecture convention in other components (+ ignore i18n complaint)

+ tweak gradient size and animation for circle and rectangle components to look a bit better

+ rename global animation to a more generic name/usage

* [PR feedback] DRY out repeated CSS between modifiers
- should exist in the base styles instead

+ bonus - DRY out `logicalSizeCSS` to only require 1 input if both sides are the same

* [PR feedback] Avoid dynamic wildcard Emotion classes - use `style` instead

The reason for this is performance - Emotion generates a completely new hash/className for every single possible permutation of width/height passed to it. We want to avoid this for wildcard prop-based styles and use inline styles instead

* [PR feedback] Improve/add unit tests

+ cover all props

+ prefer RTL over Enzyme (part of ongoing migration)

+ fix type issue found during testing

* [docs] Add toggle to EuiSkeletonRectangle example

* [PR feedback] EuiSkeletonRectangle tweaks

- allow numbers as well as strings - now that we're using inline `style`s for the dimensions, React accepts numbers as well (which matches EuiImage API)

- remove image URI in favor of a picsum link

- set width/height on img to prevent page jumping

* [PR feedback] Tweak EuiSkeletonText typing

- for whatever reason, using `|` prints the line numbers in non-ascending order in the props table - using an array and `as const` fixes this, and is reusable in tests

* [PR feedback] Convert docs files to Typescript

+ improve mobile display of demos

* [PR feedback] Documentation copy + order

- move EuiSkeletonCircle slightly lower in docs order - EuiSkeletonText is likely going to be more popular since it already exists

- misc copy tweaks

* [Docs] Set up playgrounds

* DRY out aria-label further

- since `euiLoadingStrings.ariaLabel` already exists, just reuse that instead of making our translators re-translate the same string

* Add fix for Safari workaround

- note: this is already broken on prod as well for `EuiLoadingContent`

* Changelog

* chore: comment typo and zero value for border radius

---------

Co-authored-by: Elizabet Oliveira <[email protected]>
Co-authored-by: Constance Chen <[email protected]>
cee-chen added a commit that referenced this pull request Jan 31, 2023
* EuiSkeleton components (#6502)

* Setup EuiSkeleton files and folders structure

* Moved Skeleton under the Display side menu category

* Component variants setup

* feat: skeleton setup [text, rect, circle]

* feat: added skeleton item draft and other minors

* chore: renamed sizes

* feat: added Heading in favor of Rect component

* Update src-docs/src/views/skeleton/skeleton_example.js

Co-authored-by: Elizabet Oliveira <[email protected]>

* Update src-docs/src/views/skeleton/skeleton_example.js

Co-authored-by: Elizabet Oliveira <[email protected]>

* Update src-docs/src/views/skeleton/skeleton_example.js

Co-authored-by: Elizabet Oliveira <[email protected]>

* chore: wrapped p with EuiText and indentation

* chore: removed useless styles

* chore: centralized and renamed skeleton animation keyfram

* refactor: renamed euiSkeletonHeading to euiSkeletonTitle and updated sizes with euiTitle ones

* chore: renamed EuiSkeletonItem to EuiSkeletonRectangle

* Remove hard-coded `euiSkeletonTitleStyles` heights map

- in favor of calling `euiTitle`'s font utils and grabbing `lineHeight` directly from it

* [docs] Add EuiSwitch toggle to EuiSkeletonTitle tests

- this toggle help demonstrates to consumers how to conditionally switch from loading to non-loading components, and also allows us to test heights

* Add `size` prop to `EuiSkeletonText`

+ add calculations & offsets to account for text scale

+ update docs to allow changing size & toggle between text to test visual behavior

* [docs] Add loading toggle for EuiSkeletonCircle

+ prettier fixes

* [PR feedback] Fix incorrect BEM naming; remove extra modifier classes

- BEM: `__` should only be used for children/descendants, and these are parent-level styles and should use regular camelCasing

- modifier classes removal: we're moving away from setting these extra CSS classes, which do not have any actual CSS tied to them (since we're using Emotion CSS-in-JS instead). The top-level className remains as an API for consumers to hook into for overrides if needed.

* [PR feedback] DRY out all `aria`/a11y attributes to reusable helper

- not all components were correctly receiving all the aria attrs they should have been - this helper fixes that

* [PR feedback] Rename` _skeleton` to `utils`, DRY out repeated gradient CSS

- `utils` better matches naming/architecture convention in other components (+ ignore i18n complaint)

+ tweak gradient size and animation for circle and rectangle components to look a bit better

+ rename global animation to a more generic name/usage

* [PR feedback] DRY out repeated CSS between modifiers
- should exist in the base styles instead

+ bonus - DRY out `logicalSizeCSS` to only require 1 input if both sides are the same

* [PR feedback] Avoid dynamic wildcard Emotion classes - use `style` instead

The reason for this is performance - Emotion generates a completely new hash/className for every single possible permutation of width/height passed to it. We want to avoid this for wildcard prop-based styles and use inline styles instead

* [PR feedback] Improve/add unit tests

+ cover all props

+ prefer RTL over Enzyme (part of ongoing migration)

+ fix type issue found during testing

* [docs] Add toggle to EuiSkeletonRectangle example

* [PR feedback] EuiSkeletonRectangle tweaks

- allow numbers as well as strings - now that we're using inline `style`s for the dimensions, React accepts numbers as well (which matches EuiImage API)

- remove image URI in favor of a picsum link

- set width/height on img to prevent page jumping

* [PR feedback] Tweak EuiSkeletonText typing

- for whatever reason, using `|` prints the line numbers in non-ascending order in the props table - using an array and `as const` fixes this, and is reusable in tests

* [PR feedback] Convert docs files to Typescript

+ improve mobile display of demos

* [PR feedback] Documentation copy + order

- move EuiSkeletonCircle slightly lower in docs order - EuiSkeletonText is likely going to be more popular since it already exists

- misc copy tweaks

* [Docs] Set up playgrounds

* DRY out aria-label further

- since `euiLoadingStrings.ariaLabel` already exists, just reuse that instead of making our translators re-translate the same string

* Add fix for Safari workaround

- note: this is already broken on prod as well for `EuiLoadingContent`

* Changelog

* chore: comment typo and zero value for border radius

---------

Co-authored-by: Elizabet Oliveira <[email protected]>
Co-authored-by: Constance Chen <[email protected]>

* Design review (#6560)

* Deprecate `EuiLoadingContent` in favor of `EuiSkeletonText` (#6557)

* Deprecate EuiLoadingContent + dogfood EuiSkeletonText

* Remove unnecessary tests

- leave a basic `is rendered` test in just to confirm the content, but should be deleted in the future

* Update documentation with deprecation notice

* changelog

* Fix Emotion styles var name

* [EuiSkeletonLoading] Improve loading accessibility and bake in `isLoading` API handling (#6562)

* Create reusable `EuiSkeletonLoading` component

- for DRYing out correct accessibility attributes, wrappers, and a simpler loading API

* Convert `EuiSkeletonText` to dogfood new `EuiSkeletonLoading` wrapper

+ update docs/example to how `isLoading`/`children` behavior

* Convert `EuiSkeletonTitle` to dogfood new `EuiSkeletonLoading` wrapper

+ update docs/example to how `isLoading`/`children` behavior

* Convert `EuiSkeletonRectangle` to dogfood new `EuiSkeletonLoading` wrapper

+ update docs/example to how `isLoading`/`children` behavior

* Convert `EuiSkeletonRectangle` to dogfood new `EuiSkeletonLoading` wrapper

+ update docs/example to how `isLoading`/`children` behavior

* Add docs example + a11y callout for `EuiSkeletonLoading`

* Fix annoying Safari bug popping up again

- the new `aria-busy` wrapper appears to make the `z-index` workaround not work, so use `isolation` (https://developer.mozilla.org/en-US/docs/Web/CSS/isolation) instead to force the necessary stacking context

* changelog

* [PR feedback] use `div` instead of `section`

(or in this case, `EuiPanel` for looks

* [PR feedback] Add `children` to playground

- Missed in #6562

- Playground still isn't perfect; but good enough for now

* Tweak default `EuiSkeletonCircle` size to match default `EuiAvatar` size

---------

Co-authored-by: Andrea Della Valle <[email protected]>
Co-authored-by: Elizabet Oliveira <[email protected]>
cee-chen pushed a commit to elastic/kibana that referenced this pull request Feb 9, 2023
## Summary

`[email protected]` ⏩ `[email protected]`

___

## [`74.1.0`](https://github.com/elastic/eui/releases/tag/v74.1.0)

- Added new `EuiSkeletonText`, `EuiSkeletonTitle`, `EuiSkeletonCircle`,
and `EuiSkeletonRectangle` components
([#6502](elastic/eui#6502))
- Updated `EuiSuperSelect` screen reader instructions to be more
specific ([#6549](elastic/eui#6549))
- Added `error` and updated `alert` glyphs to `EuiIcon`
([#6550](elastic/eui#6550))
- All `EuiSkeleton` components now accept an `isLoading` flag and
`children`, which automatically handles conditionally rendering loading
skeletons vs. loaded content (`children`)
([#6562](elastic/eui#6562))
- All `EuiSkeleton` components now accept a `contentAriaLabel` prop,
which more meaningfully describes the loaded content to screen readers
([#6562](elastic/eui#6562))
- Updated `EuiPopover` screen reader instructions for mobile and click
behaviors ([#6567](elastic/eui#6567))

**Bug fixes**

- Fixed `EuiCard` to ensure `onClick` method only runs once when `title`
contains a React node
([#6551](elastic/eui#6551))

**Deprecations**

- Deprecated `EuiLoadingContent` - use `EuiSkeletonText` instead
([#6557](elastic/eui#6557))

---------

Co-authored-by: Kibana Machine <[email protected]>
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