liferay / clay

A web implementation of the Lexicon Experience Language
http://clayui.com
Other
208 stars 483 forks source link

Update alerts stacking behavior #3737

Open ghost opened 4 years ago

ghost commented 4 years ago

Hi, we've just updated the stacking behavior in toast alerts Please, follow LEXI-987 for more info. Thanks!

marcoscv-work commented 4 years ago

Please, review comments on: https://issues.liferay.com/browse/LEXI-987


Resume

From accessibility, mobility, and animation point of view, probably the double animation (the union of disappearing animation and the rest of the alerts move them to a new place) can be more difficult to understand because you are sending much more sensory information to process, animations should help to understand, not to create more confusion or make it hard.

image

About the place to put a new communication: the common and recommended use is to show the communications down in the screen (like in a live chat), not on top of the previous communication, in the current figma if you have a limit height space, you can even lose a new notification.

More info in issue comments:

For our case and following WCAG 2.1 - 1.4.4 (AA):

1.4.4 Resize text: Except for captions and images of text, text can be resized without assistive technology up to 200 percent without loss of content or functionality. (Level AA).

It can be said that it is not accessible as a system of displaying alerts since we cannot limit the number of alerts or its size.

In detail: In a common resolution of 1280x720, in a windows SO, you have more or less 550px of vertical space available, if you use a zoom x200, the designed element is double, so you have a real space of 225px available. So we only can ensure the alert is on the screen if we put the new alerts in the bottom left corner.

Currently, this behavior works correctly from an accessibility point of view. So in order to not introduce new accessibility issues, I have the moral obligation to insist on reviewing the pattern

About the animation, I recommend applying the principle of: "Avoid using unnecessary animation" in order to help people with cognitive disabilities or mild vestibular disorder. Disappearing things are much mild than changing the order and focus of things

jbalsas commented 4 years ago

About the animation, I recommend applying the principle of: "Avoid using unnecessary animation" in order to help people with cognitive disabilities or mild vestibular disorder. Disappearing things are much mild than changing the order and focus of things

Couldn't we use prefers-reduced-motion to make that decision?

pat270 commented 4 years ago

We can put overflow: auto on the container around the alerts. It should show a scrollbar when the screen is too short.

bryceosterhaus commented 4 years ago

I just tested @pat270s suggestion and overflow seems to work fine for alerts to go off the screen. As for the order in which the elements appear, that is up to the user and how they render their <ClayAlert components within the <ClayAlert.ToastContainer> component. By default, our examples show that the newest items appear at the bottom of the list.

jbalsas commented 4 years ago

As for the order in which the elements appear, that is up to the user and how they render their <ClayAlert components within the component. By default, our examples show that the newest items appear at the bottom of the list

We are kinda the end user in DXP, as we offer a single openToast API. Product Team developers use the programmatic API to open Toasts in a unified way, so we'll need to code some of those requirements there.

marcoscv-work commented 4 years ago

We can put overflow: auto on the container around the alerts. It should show a scrollbar when the screen is too short.

That's technically works perfect, great! But the problem is rather that we are losing the possibility of seeing the alert appear in a concrete place and understand it is new. The scroll could appear but it is not a direct signal of a new alert showed up.

I had to validate this behavior with AENOR in 2012 (WCAG 2.0). And was horrible haha.

@bryceosterhaus yeah, I would say current behavior is accessible

@jbalsas prefers-reduced-motion is the best option to remove animations/transitions. Maybe we could add it to the roadmap as s global solution. I would like anyway to see it as a general design requirement in order to allow other teams to understand is important, that's only a suggestion of course!

@hold-shift @victorvalle Love you so much

kresimir-coko commented 4 years ago

Perhaps we can make the old alerts transparent/fade a bit, and perhaps add a drop shadow to the newest one. Combination of those 2 things could make enough of a difference while not adding much clutter. Not sure if that's acceptable for DXP/Lexicon

ghost commented 4 years ago

We've just updated the description on this https://issues.liferay.com/browse/LEXI-987 We updated the order of appearance in the notifications to avoid creating new accessibility solutions and so that the component is seen in very extreme resolutions, as we talked with @marcoscv-work.

ghost commented 4 years ago

Please, let us know if it meets the requirements.

victorvalle commented 4 years ago

Related to prefers-reduced-motion we have included in the documentation.

We are starting a major study on motion for lexicon and we will be taking a close look at accessibility.

jbalsas commented 4 years ago

Hey @hold-shift, @victorvalle, thanks for analyzing the feedback and continuing your work on this!!

In this case, I'd like to voice my disagreement with this decision and with @marcoscv-work. I'm not convinced the new solution is better in terms of accessibility or UX. While the new approach addresses some concerns, there are a couple of issues with it that bother me:

I'm not saying we should change the decision to make me happy, but I'd like to make sure these things are accounted for in the solution before we proceed with an implementation.

PS: The stacking order moves the most motion either to the time where the alerts appear or to when they go away, so I guess it's a matter of figuring out in which of the cases it should be reduced.

ghost commented 4 years ago

I agree with the solution you propose. In fact, I was discussing it with Marcos a few days ago.

Despite how important it is to offer an accessibility solution, I believe that we have a duty to offer any solution that does not have to penalize the rest of the users' experience. I'm not too fond of the notifications moving every time a new one appears; it becomes more difficult to locate old ones. Even speaking in accessibility terms, the cognitive pattern of returning to the notification and having it remaining in the same place seems better.

I did a little research exercise, and I found examples in both directions; although I didn't find any study to support it, logic makes me go in that direction. If it's okay with you, I will do some research on this and share it as soon as I have it.

marcoscv-work commented 4 years ago

My argument tried not based on what I think because yes! or because I'm looking for information in one direction or in the other direction (I think there are in both, as always). It is based on mistakes my team and I made years ago and how other people help us to fix it during an accessibility official review.

Yes! I've insisted on the importance of not adding no useful animations so if what I think about animations in this pattern is not totally clear, I can clarify it: I do not agree about adding animation to this pattern in any direction.

In the project I mentioned we fix this problem by finally making some changes:

I think at this moment in the conversation, the last point is more relevant:

They are only some examples, but most are making appearing new notifications in the corner they decided to make show it up initially, I think is a pretty common pattern, it's like saying: "This corner is going to be used to show notifications". instead of saying: this corner!.. well.. now in the middle.. and now.. on the top!... and now, who will know you cannot see it!!!.

With Clay we could create a notification on any corner, bottom, or top, and I think we need to use a pattern good for all cases, for me, ensure a principle as robust as: "Where appeared the first notifications will appear the rest"

But I insist, if with four notifications we can lose the newest one, it is a problem. I think it is not possible to reproduce in any product I mentioned before.

Having said that! all my support for any solution you guys decide! a general scroll as Patrick mentioned, all animated.. whatever, I only tried to say the new pattern is less accessible than the current one and that probably we can improve it by keeping accessibility at the same time! :-D

marcoscv-work commented 4 years ago

Some last ideas that could fix the issue:

jbalsas commented 4 years ago

Thanks @marcoscv-work!

I think @hold-shift and @victorvalle have enough feedback now to make a final decision 😂

Whatever it is, we can implement, test to see how it behaves and iterate if necessary!

ghost commented 4 years ago

I would like to clarify that none of the proposed solutions went in the direction of just what I think. I always try to find the best solution but considering both could work, there is always a criterion behind any decision. From my criteria and experience, controlled animations enrich the user experience, and there are solutions that you can control to comply with accessibility too, but I would say it involves a bit more work. Still, of course it should be done with care. https://www.ibm.com/design/language/motion-ui/basics/

For a user without accessibility problems, for which we also design, it is easier to detect that a new notification appears when there is a slight transition that guides the eye towards what is happening (especially on large screens, the opposite case of users with accessibility issues).

I agree that introducing snackbars could solve the problem; within this context, a new snackbar replaces the previous one, and it is good practice to avoid this stacking behavior between them. https://material.io/components/snackbars#behavior.

In fact, even though we call them toast notifications, when they have a timeout, I was considering treat them as a snackbar. So, for me, one solution made more sense (regarding the order) than the other, but it would force to have 2 components, in 2 different positions, upper right corner for notifications and bottom left for snackbars.

After discussing this, we have ruled out tackling this task for now. We have an epic of accessibility and motion pending that will make us make a better decision from a system point of view.

Thanks @jbalsas and @marcoscv-work!

marcoscv-work commented 4 years ago

Thank you very much, guys!!!!

I really like animation/motion, one of my passions! I started working on motion 19 years ago (Vaillant e-Trainings, and Aena airports animation operations guidelines). And I can say it has been changing a lot during the last years!!! bit the bases are the same along all this time.

I define myself as a motion/animation passionate person and some people tell me I contradict myself when I say is better not to add animation but I really think on adding animation only when we have proves of the animation helps to understand something.

I really like global design systems because they have had to adapt to many persons and they know a lot about UI motion, I like your example because I usually use their checklist: https://www.ibm.com/design/language/motion-ui/resources#motion-evaluation-checklist

Some points I usually highlight from the checklist:

And some advice I really love on the bottom of the page:

Thanks, guys, you have a beautiful job ahead of you, cheer up!

d80wrk commented 3 years ago

There's a case to be made for a universal modal to place multiple messages in. Keep it on the screen with a dismissible icon and treat it like a slider (carousel).

In other words I guess, pagination of multiple messages. https://github.com/liferay/clay/issues/1611

Keep up the good work.