Skip to content

feat: Add basic support for generating ARIA labels and roles for blocks#9696

Open
gonfunko wants to merge 9 commits intov13from
puccini
Open

feat: Add basic support for generating ARIA labels and roles for blocks#9696
gonfunko wants to merge 9 commits intov13from
puccini

Conversation

@gonfunko
Copy link
Copy Markdown
Contributor

The basics

The details

Resolves

Fixes #9685

Proposed Changes

This PR adds basic support for adding ARIA roles and labels to blocks. It backports the existing behavior from the screenreader branch, with heavy refactoring to improve readability and maintainability.

Future Work

Labeling will be substantially improved by field subclasses customizing their labeling. Those changes will be automatically incorporated; this PR uses the newly-introduced APIs to get appropriate field labels.

Additionally, label generation should be tweaked once Inputs have support for overriding labeling to use those APIs.

When support for detailed readout keyboard shortcuts and "where am I" shortcuts are added, methods to compute labels for the full tree leading up to a block (specified in the design doc) should be added.

@gonfunko gonfunko requested a review from a team as a code owner April 10, 2026 15:44
@gonfunko gonfunko requested a review from maribethb April 10, 2026 15:44
@github-actions github-actions bot added the PR: feature Adds a feature label Apr 10, 2026
* @param input The Input to compute a description/context label for.
* @param lookback If true, will use fields on the previous row to compute a
* label for the given input if it has no fields itself.
* @returns An accessibility label for the given input, or undefined if one
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

This doesn't match reality, should this method join the array and return it as string?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Doing that loses some of the commas in the full block readout. I think I'd kind of prefer to have this always return a list, and not export it?

aria.setState(this.getSvgRoot(), aria.State.LABEL, computeARIALabel(this));
configureARIARole(this);
}
}
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I think BlockSvg needs a method called getAriaLabel that internally calls the aria composer. It has to be public because we'll call it from various places such as shortcuts and plugins may also want to call it (imagine someone writes a plugin that adds some accessibility feature for blocks i can't think of right now). adding the method in BlockSvg will allow us to keep the aria composer fully internal as it will be totally transparent to anyone outside the library.

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

Labels

PR: feature Adds a feature

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants