-
-
Notifications
You must be signed in to change notification settings - Fork 9.5k
Addon-a11y: Replace element
parameter with context
#31036
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
Conversation
View your CI Pipeline Execution ↗ for commit e91d788.
☁️ Nx Cloud last updated this comment at |
code/addons/a11y/src/a11yRunner.ts
Outdated
const context: ContextSpec = DEFAULT_CONTEXT; | ||
|
||
if (input.context) { | ||
// 1. if context exists, but it's not an object with include or exclude, it's an implicit include to be used directly | ||
if ( | ||
!( | ||
typeof input.context === 'object' && | ||
('include' in input.context || 'exclude' in input.context) | ||
) | ||
) { | ||
context.include = input.context as ContextProp; | ||
} else if (typeof input.context === 'object' && 'include' in input.context) { | ||
// 2. if context.include exists, use it | ||
context.include = input.context.include as ContextProp; | ||
} | ||
|
||
// 3. if context.exclude exists, merge it with the default exclude | ||
if ( | ||
typeof input.context === 'object' && | ||
'exclude' in input.context && | ||
input.context.exclude !== undefined | ||
) { | ||
context.exclude = (DEFAULT_CONTEXT.exclude as any).concat(input.context.exclude); | ||
} |
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.
If we didn't wanted to exclude the internal Storybook elements like .sb-wrapper
- because they are excluded by default because they have display: none
- then we wouldn't need this logic at all and could just pass in the context directly to axe.
I'm fine with either.
…pport-axe-context-api
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.
10 file(s) reviewed, 4 comment(s)
Edit PR Review Bot Settings | Greptile
code/lib/cli-storybook/src/automigrate/fixes/addon-a11y-parameters.ts
Outdated
Show resolved
Hide resolved
code/lib/cli-storybook/src/automigrate/helpers/addon-a11y-parameters.test.ts
Outdated
Show resolved
Hide resolved
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.
I didn't thoroughly review the automigrations but otherwise this is fine. I like that you added the stories and tests.
Closes #30947
What I did
Replaced the
a11y.element
parameter with aa11y.context
, which more closely aligns with axe-core's context API: https://github.com/dequelabs/axe-core/blob/develop/doc/context.mdIt doesn't support
Node
norNodeList
, because trying to do something like:Would try to get the element when the stories module is loaded, way before the story is rendered, so the DOM element wouldn't exist. Therefore we only support the more basic string-based options, which should be enough for all use cases.
I also excluded a handful of internal elements that Storybook includes by default to all previews.
Checklist for Contributors
Testing
The changes in this PR are covered in the following automated tests:
Manual testing
This section is mandatory for all contributions. If you believe no manual test is necessary, please state so explicitly. Thanks!
Documentation
MIGRATION.MD
Checklist for Maintainers
When this PR is ready for testing, make sure to add
ci:normal
,ci:merged
orci:daily
GH label to it to run a specific set of sandboxes. The particular set of sandboxes can be found incode/lib/cli-storybook/src/sandbox-templates.ts
Make sure this PR contains one of the labels below:
Available labels
bug
: Internal changes that fixes incorrect behavior.maintenance
: User-facing maintenance tasks.dependencies
: Upgrading (sometimes downgrading) dependencies.build
: Internal-facing build tooling & test updates. Will not show up in release changelog.cleanup
: Minor cleanup style change. Will not show up in release changelog.documentation
: Documentation only changes. Will not show up in release changelog.feature request
: Introducing a new feature.BREAKING CHANGE
: Changes that break compatibility in some way with current major version.other
: Changes that don't fit in the above categories.🦋 Canary release
This pull request has been released as version
0.0.0-pr-31036-sha-81a9cd5f
. Try it out in a new sandbox by runningnpx storybook@0.0.0-pr-31036-sha-81a9cd5f sandbox
or in an existing project withnpx storybook@0.0.0-pr-31036-sha-81a9cd5f upgrade
.More information
0.0.0-pr-31036-sha-81a9cd5f
jeppe/support-axe-context-api
81a9cd5f
1743628934
)To request a new release of this pull request, mention the
@storybookjs/core
team.core team members can create a new canary release here or locally with
gh workflow run --repo storybookjs/storybook canary-release-pr.yml --field pr=31036
Greptile Summary
This PR updates the a11y addon to replace the deprecated 'element' parameter with 'context', aligning it with axe-core’s context API and preventing premature DOM queries.
code/addons/a11y/src/a11yRunner.ts
to throw errors for deprecated 'element' usage.code/addons/a11y/src/params.ts
to support only allowed string-based inputs.MIGRATION.md
for users.code/core/src/preview-errors.ts
for misconfiguration.code/lib/cli-storybook/src/automigrate/fixes
and helpers.