Skip to content

Implement the member list with virtuoso #29869

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

Open
wants to merge 35 commits into
base: develop
Choose a base branch
from

Conversation

langleyd
Copy link
Member

@langleyd langleyd commented May 2, 2025

Fixes #30020
Fixes #29249
Fixes #30267

What's in this PR?

  • It implements the member list with virtuoso for smooth scrolling without scroll-jumps
  • Improves a11y including better keyboard navigation (up, down, home, end, pageUp, pageDown).

What does it look like?

Screen.Recording.2025-05-02.at.10.20.05.mov

Checklist

  • Tests written for new code (and old code if feasible).
  • New or updated public/exported symbols have accurate TSDoc documentation.
  • Linter and other CI checks pass.
  • I have licensed the changes to Element by completing the Contributor License Agreement (CLA)

It's more performant and feels less glitchy than the button tooltip moving around when you scroll.
langleyd added 3 commits May 8, 2025 15:57
As we have for other icon based buttons in the right panel/app
- As well as stylng cells, set the tabIndex(roving)
- Natively focus the div with .focus() so screen reader actually moves over the cells
- improve labels and roles
@langleyd langleyd marked this pull request as ready for review July 28, 2025 13:12
@langleyd langleyd requested review from a team as code owners July 28, 2025 13:12
Copy link
Member

@t3chguy t3chguy left a comment

Choose a reason for hiding this comment

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

image

Screenshot from VoiceOver on macOS

Something is going horribly wrong here, its claiming there are 29 columns, it also doesn't state that the grid cell is interactive in any way which is confusing for SR users.

It is also very chatty, stating table, X columns, Y rows on every keyboard navigation.

Roving tabindex is also misbehaving, if I navigate down to a user in e.g. position ~N with name "Bob", I then filter the list such that Bob is still visible but the list is shorter than N then trying to get back to Bob my focus just gets dropped on the container rather than any of the roving elements whereas the roving selection should remain if the previously-selected item is still present (as it is in this case) or move to the nearest next item otherwise

@@ -35,7 +35,7 @@ test.describe("Share dialog", () => {

const rightPanel = await app.toggleRoomInfoPanel();
await rightPanel.getByRole("menuitem", { name: "People" }).click();
await rightPanel.getByRole("button", { name: `${user.userId} (power 100)` }).click();
await rightPanel.getByRole("gridcell", { name: user.displayName }).click();
Copy link
Member

Choose a reason for hiding this comment

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

Not sure this is great in terms of a11y semantics, a 1-col grid is definitely not the most appropriate role set to use

Copy link
Member

@MidhunSureshR MidhunSureshR left a comment

Choose a reason for hiding this comment

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

If I page up and page down the member list, the timeline will also occasionally scroll up and down.

@t3chguy
Copy link
Member

t3chguy commented Jul 29, 2025

I'm seeing a weird issue where after I tab into a member list tile I am unable to Shift-Tab back out of the list, otherwise this is feeling better and less chatty. It does read out "group" on every line which is kind of confusing as there isn't any named group present

… focused.

Fixes the issue of not being able to shift+t
@langleyd
Copy link
Member Author

@t3chguy fixed the shift-tab issue and removed the additional "group" being read in the SR.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Crash when scrolling the room list Disinviting someone from a room breaks scrolling in the member list Jumpy scrolling inside a room members list
3 participants