Skip to content

Comments

[UEPR-483] "Choose a Sprite" and "Choose a Backdrop" keyboard accessibility#433

Open
kbangelov wants to merge 20 commits intoscratchfoundation:release/UEPR-297-accessibility-improvementsfrom
kbangelov:task/uepr-483-choose-a-sprite-and-backdrop-accessibility
Open

[UEPR-483] "Choose a Sprite" and "Choose a Backdrop" keyboard accessibility#433
kbangelov wants to merge 20 commits intoscratchfoundation:release/UEPR-297-accessibility-improvementsfrom
kbangelov:task/uepr-483-choose-a-sprite-and-backdrop-accessibility

Conversation

@kbangelov
Copy link
Contributor

@kbangelov kbangelov commented Feb 3, 2026

Resolves

https://scratchfoundation.atlassian.net/browse/UEPR-483

Proposed Changes

  • Adds keyboard navigation logic.
  • UI bug: tooltips don't refresh in case of first open or shift+tab-ing back to the menu.

Reason for Changes

Part of accessibility initiative for Scratch.

@kbangelov kbangelov requested a review from a team as a code owner February 3, 2026 14:18
@adzhindzhi adzhindzhi changed the base branch from develop to release/accessibility-improvements February 6, 2026 09:27
@kbangelov kbangelov force-pushed the release/accessibility-improvements branch 2 times, most recently from e37597f to f2902ce Compare February 13, 2026 09:00
@kbangelov kbangelov changed the base branch from release/accessibility-improvements to release/UEPR-297-accessibility-improvements February 13, 2026 10:10
@kbangelov kbangelov requested a review from adzhindzhi February 16, 2026 11:20
@kbangelov kbangelov requested a review from adzhindzhi February 17, 2026 11:00
@kbangelov kbangelov requested a review from adzhindzhi February 18, 2026 10:55
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Improves keyboard accessibility for the “Choose a Sprite” / “Choose a Backdrop” action menus in Scratch GUI as part of the accessibility initiative (UEPR-483).

Changes:

  • Refactors ActionMenu from a class component to a hook-based functional component and adds keyboard navigation/focus handling.
  • Updates ActionMenu button styling to show focus state similar to hover.
  • Minor test/comment and formatting cleanup.

Reviewed changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 5 comments.

File Description
packages/scratch-gui/test/integration/sounds.test.js Adds a clarifying comment for the keyboard shortcuts integration test.
packages/scratch-gui/src/components/stage-selector/stage-selector.jsx Removes an extraneous blank line in the moreButtons config.
packages/scratch-gui/src/components/action-menu/action-menu.jsx Implements keyboard navigation + refactors ActionMenu to hooks/memoization.
packages/scratch-gui/src/components/action-menu/action-menu.css Adds :focus styling to match hover for action menu buttons.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Copy link
Contributor

@adzhindzhi adzhindzhi left a comment

Choose a reason for hiding this comment

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

Looks good to me! 👍

Copy link
Contributor

@KManolov3 KManolov3 left a comment

Choose a reason for hiding this comment

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

Looks mostly good, left a comment on an edge case. Thanks for migrating the action menu to React hook syntax!

isOpen: true,
forceHide: false
});

Copy link
Contributor

Choose a reason for hiding this comment

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

Nitpick: there's now an empty line between the comment and the code it's referring to

}, CLOSE_DELAY);
}, []);

const clickDelayer = useCallback(
Copy link
Contributor

Choose a reason for hiding this comment

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

This looks like it slightly differs in behavior from production:

  • on production, when we open and close the sprite modal, the action menu is closed
  • with this change, when we open and close the sprite modal, the action menu is still open

I am not averse to the updated behavior, as it aligns with the "return focus to previously selected element when you navigate out of a modal".

However there are some visually unpleasant cases:

  • if I open the "Upload a sprite" menu from the action button, the menu closes after a timeout, but if I navigate out of the upload dialog which it opens, it reopens the menu, but the label shows on the bottom
  • same for other actions

I am open to suggestions for what the most consistent behavior (and the least effort change) would be.

As a fallback, keeping the production behavior (and possibly making sure the inner menu items are also unselected, so that no inconsistent label appears) can be an option for this case (so, blur out of the focused action menu, but keep the focus, so that TAB would return to the same / next item).

Image

Copy link
Contributor

Choose a reason for hiding this comment

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

Additionally, the behavior when clicking "Surprise" has changed here - it unfocuses the action menu entirely, while on production it blurs, but keeps the focus on the menu item.

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.

3 participants