eslint-plugin-fluentui-jsx-a11y 2.0.0-alpha.1
Install from the command line:
Learn more about npm packages
$ npm install @microsoft/eslint-plugin-fluentui-jsx-a11y@2.0.0-alpha.1
Install via package.json:
"@microsoft/eslint-plugin-fluentui-jsx-a11y": "2.0.0-alpha.1"
About this version
A set of eslint rules against FluentUI to prevent common accessibility issues.
Finally! Lint rules against React props.
Covers hard-coded string props and variables for props.
<Label htmlFor="some-id">Some Label</Label>
<Input id="some-id" />
<Label htmlFor={someId}>Some Label</Label>
<Input id={someId} />
Rules for FluentUI v9 end in -v9
. Fluent UI React v9
Rules for v8 have no ending.
Developed and maintained by the Microsoft Research Ireland Accessibility V-Team.
You'll first need to install ESLint:
# npm
npm install eslint --save-dev
# yarn
yarn add eslint --dev
Next, install @microsoft/eslint-plugin-fluentui-jsx-a11y:
# npm
npm install @microsoft/eslint-plugin-fluentui-jsx-a11y --save-dev
# yarn
yarn add @microsoft/eslint-plugin-fluentui-jsx-a11y --dev
Or add this package to your package.json
file:
"devDependencies": {
"@microsoft/eslint-plugin-fluentui-jsx-a11y": "1.0.0"
}
And then you can run
npm install
You will need to add the plugin to your .eslintrc
configuration file.
As we support both v8 and v9 right now, you will need to add the rules individually to the rules section.
V9 Suggested Configuration:
{
"root": true,
"parser": "@typescript-eslint/parser",
"parserOptions": {
"ecmaVersion": 2018,
"sourceType": "module"
},
"plugins": [
"@typescript-eslint",
"react-hooks",
"@microsoft/fluentui-jsx-a11y"
],
"extends": [
"eslint:recommended",
"plugin:@typescript-eslint/eslint-recommended",
"plugin:react/recommended",
"plugin:@typescript-eslint/recommended",
"plugin:@microsoft/fluentui-jsx-a11y/recommended"
],
"rules": {
"react-hooks/rules-of-hooks": "error",
"react-hooks/exhaustive-deps": "warn",
"react/prop-types": "off",
},
This plugin does a static code analysis of the React JSX to spot accessibility issues in apps built with FluentUI. That way, common accessibility issues are detected before the pull request stage and will be prevented from being checked into a code base.
As the plugin can only catch errors in static source code, please use it in combination with @axe-core/react to test the accessibility of the rendered DOM. Consider these tools just as one step of a larger a11y testing process and always test your apps with assistive technology.
We also recomend that you use this plugin in conjuction with the eslint-plugin-jsx-a11y plugin. Please configure eslint-plugin-jsx-a11y to work with FluentUI components.
Example:
{
"settings": {
"jsx-a11y": {
"components": {
"Button": "button",
"Image": "img"
}
}
}
}
This plugin was generated with The ESLint generator for Yeoman: eslint/generator-eslint.
yo eslint:plugin
If you want to create a new ESLint rule, make sure you're in the top-level directory of an ESLint repo clone or an ESLint plugin and type:
yo eslint:rule
This project may contain trademarks or logos for projects, products, or services. Authorized use of Microsoft trademarks or logos is subject to and must follow Microsoft's Trademark & Brand Guidelines. Use of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship. Any use of third-party trademarks or logos are subject to those third-party's policies.
💼 Configurations enabled in.
✅ Set in the recommended
configuration.
🔧 Automatically fixable by the --fix
CLI option.
Name | Description | 💼 | 🔧 | |
---|---|---|---|---|
accordion-header-needs-labelling-v9 | The accordion header is a button and it needs an accessibile name e.g. text content, aria-label, aria-labelledby. | ✅ | ||
accordion-item-needs-header-and-panel-v9 | An AccordionItem needs exactly one header and one panel | ✅ | ||
avatar-needs-name-v9 | Accessibility: Avatar must have an accessible labelling: name, aria-label, aria-labelledby | ✅ | ||
breadcrumb-needs-labelling-v9 | All interactive elements must have an accessible name | ✅ | ||
checkbox-needs-labelling-v9 | Accessibility: Checkbox without label must have an accessible and visual label: aria-labelledby | ✅ | ||
combobox-needs-labelling-v9 | All interactive elements must have an accessible name | ✅ | ||
compound-button-needs-labelling-v9 | Accessibility: Compound buttons must have accessible labelling: title, aria-label, aria-labelledby, aria-describedby | ✅ | ||
dropdown-needs-labelling-v9 | Accessibility: Dropdown menu must have an id and it needs to be linked via htmlFor of a Label | ✅ | ||
icon-text-content-button-does-not-need-aria | Accessibility: an image button with text content does not need aria labelling. The button already has an accessible name and the aria-label or aria-labelledby will override the text content for screen reader users. | ✅ | ||
image-button-missing-aria | Accessibility: Image buttons must have accessible labelling: aria-label, aria-labelledby, aria-describedby | ✅ | ||
image-button-missing-aria-v9 | Accessibility: Image buttons must have accessible labelling: title, aria-label, aria-labelledby, aria-describedby | ✅ | ||
image-button-prefer-aria-over-title-attribute | Accessibility: prefer wai-aria over title or placeholder attributes. Title/placeholder can be used in addition to wai-aria. aria-label, aria-labelledby, aria-describedby | ✅ | ||
image-link-missing-aria-v9 | Accessibility: Image links must have an accessible name | ✅ | 🔧 | |
input-missing-label-v9 | Accessibility: Input fields must have accessible labelling: aria-label, aria-labelledby or an associated label | ✅ | ||
menu-item-needs-labelling-v9 | Accessibility: MenuItem without label must have an accessible and visual label: aria-labelledby | ✅ | ||
no-empty-buttons | Accessibility: buttons must either text content or accessible labelling | ✅ | ||
no-empty-buttons-v9 | Accessibility: Button, ToggleButton, SplitButton, MenuButton, CompoundButton must either text content or icon or child component | ✅ | ||
no-empty-components-v9 | FluentUI components should not be empty | ✅ | ||
object-literal-button-no-missing-aria | Accessibility: Object literal image buttons must have accessible labelling: aria-label, aria-labelledby, aria-describedby | ✅ | ||
prefer-aria-over-title-attribute-v9 | The title attribute is not consistently read by screen readers, and its behavior can vary depending on the screen reader and the user's settings. | ✅ | 🔧 | |
radio-button-missing-label-v9 | Accessibility: Radio button without label must have an accessible and visual label: aria-labelledby | ✅ | ||
radiogroup-missing-label-v9 | Accessibility: RadioGroup without label must have an accessible and visual label: aria-labelledby | ✅ | ||
spin-button-needs-labelling-v9 | Accessibility: SpinButtons must have an accessible label | ✅ | ||
spin-button-unrecommended-labelling-v9 | Accessibility: Unrecommended accessibility labelling - SpinButton | ✅ | ||
switch-needs-labelling-v9 | Accessibility: Switch must have an accessible label | ✅ | ||
text-area-missing-label-v9 | Accessibility: Textarea must have an accessible name | ✅ | ||
text-content-button-does-not-need-aria | Accessibility: a button with text content does not need aria labelling. The button already has an accessible name and the aria-label will override the text content for screen reader users. | ✅ | ||
toolbar-missing-aria-v9 | Accessibility: Toolbars need accessible labelling: aria-label or aria-labelledby | ✅ | ||
tooltip-not-recommended-v9 | Accessibility: Prefer text content or aria over a tooltip for these components MenuItem, SpinButton | ✅ |
Details
- eslint-plugin-fluentui-jsx-a11y
- microsoft
- 4 months ago
- MIT
- 15 dependencies
Assets
- eslint-plugin-fluentui-jsx-a11y-2.0.0-alpha.1.tgz
Download activity
- Total downloads 0
- Last 30 days 0
- Last week 0
- Today 0