Tabs: delay activeId
updates until focus can be properly detected
#58625
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
What?
Make sure the
Tabs
component doesn't update its internalactiveId
too early.Why?
Tabs uses Ariakit internally, which uses an
activeId
property to track focus internally. In certain situations, it's possible for that internal focus to become out of sync with actual browser focus, so we update it accordingly to ensure arrow key behavior works as expected.In some cases, such as #56959, the browser focus value doesn't update quickly enough, and our internal syncing efforts lead to arrow keys not working at all, which is obviously not the desired outcome. This PR addresses such cases by delaying the update.
How?
Wrapping our existing logic in
requestAnimationFrame()
allows enough time to make sure the currently focused ID has finished updating before we check for a mismatch and update our internal focus value.Testing Instructions
Tabs
in site-editor settings #56959, as that PR demonstrates the issue we're solving the most clearly.