-
Notifications
You must be signed in to change notification settings - Fork 124
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
V1.5 Alert #2746
base: main
Are you sure you want to change the base?
V1.5 Alert #2746
Conversation
dc913f4
to
32c8b1b
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for your submission!
The main Alert component is represented by https://github.com/cybersemics/em/blob/main/src/components/Popup.tsx. https://github.com/cybersemics/em/blob/main/src/components/Alert.tsx is a HOC that mainly just handles fade in/out. By circumventing Popup.tsx we're losing some key functionality:
- Cross-browser support for position: fixed
- Swipe-to-dismiss functionality
- Multicursor support
- Import Files special handling.
The goal is to re-style the alert without losing any of the existing functionality. I would suggest duplicating https://github.com/cybersemics/em/blob/main/src/components/Popup.tsx and using that as a starting point. The only other component that uses it is
em/src/components/CommandPalette.tsx
Line 469 in 42b1ef5
<Popup |
Let me know if this makes sense!
await click('[data-testid=close-button]') | ||
await hide('[data-testid=alert]') |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Could we add an ✗ that appears in the upper right corner on hover to dismiss the alert? I realize the mockup did not account for the close functionality on desktop.
I'm okay if this is + time.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes I can add it.
Should font size and padding still follow these? const fontSize = useSelector(state => state.fontSize)
const padding = useSelector(state => state.fontSize / 2 + 2) |
d314aae
to
5db2fb0
Compare
I'll update the puppeteer snapshot once the styling has been confirmed. |
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
Let's go with scaling the |
Sounds good! |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for the PR, @yangchristina!
Quick note: Please include a PR description explaining the goals of the change. I have the design document for these UI/UX changes, but it would still be nice to know a bit more about which particular parts the PR is changing.
1. The "x" button does not close the alert
The "x" button appears correctly on hover (although it's a bit small, IMO), but clicking it does not dismiss the alert popup.
Screen.Recording.2025-01-06.at.5.45.20.PM.mov
2. Confusing cursor pointer on icons
This might be intentional and a non-issue, but it was confusing to me that the cursor changes to a pointer when hovering over the icon. Normally, the pointer is reserve for clickable items that cause an action, but this icon is not clickable.
Screen.Recording.2025-01-06.at.5.46.31.PM.mov
On mobile, I have a few questions that I would just like to clarify (cc @raineorshine).
A) Should the alert be centered, or is it intended to be on the right side of the screen? I don't see a mobile design for the alert in Figma.
B) Should the alert still fade out / dismiss while I'm actively dragging it?
C) Should the alert be dismissed by dragging it up/down, or left/right? I'm fine with either, but my initial "training" as a user made me assume that it would be dismissed by dragging it left/right.
alert.mp4
@trevinhofmann Here's the figma, it is supposed to centred. There aren't mocks for the 'x', so I didn't know how large to make it. I can make it larger. @raineorshine what size would be good? |
e144a97
to
6e9ecf6
Compare
@raineorshine for the 'x' button, should it only show when |
Centered
I don't think it needs to fade out while actively dragging it. I'm basing this on the current behavior in
Since it shows up at the bottom of the screen, my tendency is to dismiss it by dragging it down. Let's stick with down for now, but I definitely understand the left/right tendency as well. I'd love to do some user testing on this to see what is most intuitive for most people.
We can follow the mockup for Tip: https://www.figma.com/design/g0osrpkb5dhY0qPxW9mWjB/Em-UX?node-id=227-886&t=qhUgnmnLKgPDUViF-4 A couple points:
|
Does this look around right? The icon in the mocks is thinner than the text, but Spacing wise, using text is less exact for vertical padding. @raineorshine what do you think of switching the close button to the svg icon in the figma mocks instead of the text character? |
That does look close to the mockup, although I didn't anticipate how it would look with a single-line alert. I don't think the vertical centering looks great for a close button, which is expected to be in the upper right. I was thinking more like this: Or we could move it to the corner in a circle, which I think looks a bit better: I could ask Ahmad to do a mockup of the latter so you have more exact proportions to work with. I'm fine with using SVG for it if that helps. |
The alert is also used for ongoing states such as drag-and-drop, multicursor, import progress, etc. I'm afraid that if the keyboard covers the alert, the user won't have this feedback. Another problem is the inverse: If the user triggers an alert while the keyboard is up, and then closes the keyboard, the alert is left floating in the middle of the screen. In both cases we do need a true position: fixed at the bottom of the viewport, above the keyboard. Instead of using const { innerHeight, virtualKeyboardHeight } = viewportStore.useState()
I haven't tested it at multiple font sizes, but looks great so far! A few suggestions:
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hi, @yangchristina! I will delay reviewing for now until you have a chance to address the latest feedback from @raineorshine. Please let me know when this is ready again for review, and I'll be happy to have another look. Thank you!
@raineorshine |
Thanks for the update. I didn't realize If that doesn't work, or if you need additional guidance, @trevinhofmann can work with you on a solution. Thanks! |
@raineorshine actually it kinda works sometimes? There was one point where the alert was actually working, but now it's back to not really working. (didn't make any code changes, just seems really inconsistent) Screen.Recording.2025-01-30.at.12.35.13.AM.mov |
Here's another example of it being really inconsistent. I'm not sure if it's just a problem with the simulator. From the logs, Screen.Recording.2025-01-30.at.12.39.15.AM.mov |
That is strange. Some ideas:
There is also a question of timing. We don't want the Alert position to be delayed, and it's probably not possible for it to smoothly animate down with the keyboard. Our best bet is probably to have the Alert snap to the bottom as soon as the keyboard is closed. The keyboard should cover the alert while animating out of view. Then the Alert will be in its place at the bottom of the screen. However, it's not really possible to design the correct behavior when you are getting inconsistent behavior, so I would focus on understanding the cause of the inconsistency first. There is usually another variable we are not aware of that is affecting the behavior. Hope that helps! |
@raineorshine I don't really have a way of running this on an actual phone. (I don't use an iphone and even if I did I don't know how I'd connect that phone to em's localhost) |
No problem, one of us can verify that. It's unlikely that it's the problem, but it doesn't hurt to verify base assumptions when inconsistent behavior is observed. |
@raineorshine that would be great, thanks! |
Can confirm this. It does update when keyboard changes.
How can I resize on ios devices? |
Running the latest on a physical iPhone, I see the same functionality. It looks close to working, but there is a lagging update to the positioning when the keyboard is opened/closed. I will be able to look into this more later today. alert-lag.mp4 |
You would rotate from portrait to landscape. XCode Simulator has an option to do this also. |
When the keyboard is closed, you may need to "anticipate" the upcoming screen height in order to render the alert at the bottom instead of animating it down. That’s the tricky part. |
For the sake of debugging, I:
a-popup-1.mp4I made the style text quite small to ensure it fits, but it should still be visible in the video when expanded. This debugging revealed that:
I'm not well informed on the history/reasoning for the As a (very tentative) fix, this commit removes the With that change added (and making the alert permanent for demo purposes), the alert seems to be correctly positioned. There is still a delay when closing the keyboard, but that may be unavoidable. It seems that Safari does not trigger the resize event until the keyboard fully closes. a-popup-2.mp4 |
Thank you for the additional testing @trevinhofmann!
As far as I know, Demo: https://s5ntpd.csb.app/ Let me know if you are seeing something different. I've worked on the problem at various times over the years and have not been able to find a proper solution. Most recently I generalized and factored out the the position: fixed functionality into the
That's too bad. I don't think the delay is really acceptable from a UX perspective. The alert floating in the middle of the screen looks pretty bad. I was thinking about the challenge of "anticipating" the next height, and perhaps the better approach is to simply hide the alert while the virtual keyboard is closing. We could hide it on blur (or global Let me know what you think. Thanks! |
Ah! That makes sense. I see the issue when scrolling. In that case, we'll need to fix the calculations for
That makes sense to me! @yangchristina -- Would you like to work on the above two changes? Otherwise, I will be available to attempt them later today. |
@trevinhofmann Sorry for responding late. Position absolute is already being handled though, so that shouldn't be the issue.
|
No problem! I'm suspicious that some part of the I will let you take the first attempt at resolving this, but please let me know if you are stuck and would like some help. Thank you! |
Sounds good, thanks! Do you happen to have the code for the debugging somewhere? If it's not too inconvenient, would love to see how you did this. |
Fixed! Yes, my calculations for
UX wise it seems fine to me to have a delay when you are opening the keyboard, but not when you are closing it. The delay when opening is essentially the same as hiding the alert a bit before showing it again. But for closing, having it float in the middle of the screen is more bothersome and looks like a bug. The original scope of this alert was just supposed to include styling, so changing the way it shows on keyboard close is out of scope. |
I'm not sure why, but ColorPicker tests aren't failing for me locally. |
You are correct! Sorry for the confusion. I clearly documented that wrong at some point. This might be the source of other bugs if there is any more code that is assuming the wrong behavior of
Yes, I agree.
Thanks, agreed. @trevinhofmann Could you possibly do this part since you are familiar with the problem? I would prefer do it all in one PR so that we can avoid the layout problem getting into
Nothing changed with it, but I've been noticing a lot more GitHub Actions failures due to this snapshot test. I have temporarily disabled it in d936436 until we can get to the bottom of it. Thanks. |
No description provided.