fix: correctly interpret empty aria- attribute (#11325)

* fix: correctly interpret empty aria- attribute

* changeset

* huh

* only suggest default value for boolean/tristate attributes

* adjust messages, disallow empty strings

* gah
pull/11340/head
Rich Harris 1 year ago committed by GitHub
parent 9a887f8dab
commit 8e43e9aae0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -0,0 +1,5 @@
---
'svelte': patch
---
fix: correctly interpret empty aria- attribute

@ -44,11 +44,11 @@
## a11y_incorrect_aria_attribute_type ## a11y_incorrect_aria_attribute_type
> The value of '%attribute%' must be of type %type% > The value of '%attribute%' must be a %type%
## a11y_incorrect_aria_attribute_type_boolean ## a11y_incorrect_aria_attribute_type_boolean
> The value of '%attribute%' must be either 'true' or 'false' > The value of '%attribute%' must be either 'true' or 'false'. It cannot be empty
## a11y_incorrect_aria_attribute_type_id ## a11y_incorrect_aria_attribute_type_id

@ -103,7 +103,7 @@ function has_disabled_attribute(attribute_map) {
const aria_disabled_attr = attribute_map.get('aria-disabled'); const aria_disabled_attr = attribute_map.get('aria-disabled');
if (aria_disabled_attr) { if (aria_disabled_attr) {
const aria_disabled_attr_value = get_static_value(aria_disabled_attr); const aria_disabled_attr_value = get_static_value(aria_disabled_attr);
if (aria_disabled_attr_value === true) { if (aria_disabled_attr_value === 'true') {
return true; return true;
} }
} }
@ -601,20 +601,19 @@ function is_parent(parent, elements) {
*/ */
function validate_aria_attribute_value(attribute, name, schema, value) { function validate_aria_attribute_value(attribute, name, schema, value) {
const type = schema.type; const type = schema.type;
const is_string = typeof value === 'string';
if (value === null) return; if (value === null) return;
if (value === true) value = 'true'; // TODO this is actually incorrect, and we should fix it if (value === true) value = '';
if (type === 'boolean' && value !== 'true' && value !== 'false') { if (type === 'boolean' && value !== 'true' && value !== 'false') {
w.a11y_incorrect_aria_attribute_type_boolean(attribute, name); w.a11y_incorrect_aria_attribute_type_boolean(attribute, name);
} else if (type === 'integer' && !Number.isInteger(+value)) { } else if (type === 'integer' && (value === '' || !Number.isInteger(+value))) {
w.a11y_incorrect_aria_attribute_type_integer(attribute, name); w.a11y_incorrect_aria_attribute_type_integer(attribute, name);
} else if (type === 'number' && isNaN(+value)) { } else if (type === 'number' && (value === '' || isNaN(+value))) {
w.a11y_incorrect_aria_attribute_type(attribute, name, 'number'); w.a11y_incorrect_aria_attribute_type(attribute, name, 'number');
} else if ((type === 'string' || type === 'id') && !is_string) { } else if ((type === 'string' || type === 'id') && value === '') {
w.a11y_incorrect_aria_attribute_type(attribute, name, 'string'); w.a11y_incorrect_aria_attribute_type(attribute, name, 'non-empty string');
} else if (type === 'idlist' && !is_string) { } else if (type === 'idlist' && value === '') {
w.a11y_incorrect_aria_attribute_type_idlist(attribute, name); w.a11y_incorrect_aria_attribute_type_idlist(attribute, name);
} else if (type === 'token') { } else if (type === 'token') {
const values = (schema.values ?? []).map((value) => value.toString()); const values = (schema.values ?? []).map((value) => value.toString());

@ -134,22 +134,22 @@ export function a11y_img_redundant_alt(node) {
} }
/** /**
* The value of '%attribute%' must be of type %type% * The value of '%attribute%' must be a %type%
* @param {null | NodeLike} node * @param {null | NodeLike} node
* @param {string} attribute * @param {string} attribute
* @param {string} type * @param {string} type
*/ */
export function a11y_incorrect_aria_attribute_type(node, attribute, type) { export function a11y_incorrect_aria_attribute_type(node, attribute, type) {
w(node, "a11y_incorrect_aria_attribute_type", `The value of '${attribute}' must be of type ${type}`); w(node, "a11y_incorrect_aria_attribute_type", `The value of '${attribute}' must be a ${type}`);
} }
/** /**
* The value of '%attribute%' must be either 'true' or 'false' * The value of '%attribute%' must be either 'true' or 'false'. It cannot be empty
* @param {null | NodeLike} node * @param {null | NodeLike} node
* @param {string} attribute * @param {string} attribute
*/ */
export function a11y_incorrect_aria_attribute_type_boolean(node, attribute) { export function a11y_incorrect_aria_attribute_type_boolean(node, attribute) {
w(node, "a11y_incorrect_aria_attribute_type_boolean", `The value of '${attribute}' must be either 'true' or 'false'`); w(node, "a11y_incorrect_aria_attribute_type_boolean", `The value of '${attribute}' must be either 'true' or 'false'. It cannot be empty`);
} }
/** /**

@ -1,7 +1,7 @@
[ [
{ {
"code": "a11y_incorrect_aria_attribute_type_boolean", "code": "a11y_incorrect_aria_attribute_type_boolean",
"message": "The value of 'aria-disabled' must be either 'true' or 'false'", "message": "The value of 'aria-disabled' must be either 'true' or 'false'. It cannot be empty",
"start": { "start": {
"line": 5, "line": 5,
"column": 8 "column": 8
@ -13,7 +13,7 @@
}, },
{ {
"code": "a11y_incorrect_aria_attribute_type_boolean", "code": "a11y_incorrect_aria_attribute_type_boolean",
"message": "The value of 'aria-disabled' must be either 'true' or 'false'", "message": "The value of 'aria-disabled' must be either 'true' or 'false'. It cannot be empty",
"start": { "start": {
"line": 6, "line": 6,
"column": 8 "column": 8

@ -1,7 +1,6 @@
<div aria-level="yes"></div> <div aria-level="yes"></div>
<div aria-level="no"></div> <div aria-level="no"></div>
<div aria-level={`abc`}></div> <div aria-level={`abc`}></div>
<div aria-level={true}></div>
<div aria-level></div> <div aria-level></div>
<div aria-level={"false"}></div> <div aria-level={"false"}></div>
<div aria-level={!"false"}></div> <div aria-level={!"false"}></div>

@ -27,11 +27,11 @@
"code": "a11y_incorrect_aria_attribute_type_integer", "code": "a11y_incorrect_aria_attribute_type_integer",
"message": "The value of 'aria-level' must be an integer", "message": "The value of 'aria-level' must be an integer",
"start": { "start": {
"line": 5, "line": 4,
"column": 5 "column": 5
}, },
"end": { "end": {
"line": 5, "line": 4,
"column": 15 "column": 15
} }
} }

@ -2,6 +2,6 @@
<div aria-valuemax="no"></div> <div aria-valuemax="no"></div>
<div aria-valuemax={`abc`}></div> <div aria-valuemax={`abc`}></div>
<div aria-valuemax={true}></div> <div aria-valuemax={true}></div>
<div aria-valuemax></div> <div aria-valuemax="true"></div>
<div aria-valuemax={'false'}></div> <div aria-valuemax={'false'}></div>
<div aria-valuemax={!'false'}></div> <div aria-valuemax={!'false'}></div>

@ -1,7 +1,7 @@
[ [
{ {
"code": "a11y_incorrect_aria_attribute_type", "code": "a11y_incorrect_aria_attribute_type",
"message": "The value of 'aria-valuemax' must be of type number", "message": "The value of 'aria-valuemax' must be a number",
"start": { "start": {
"line": 1, "line": 1,
"column": 5 "column": 5
@ -13,7 +13,7 @@
}, },
{ {
"code": "a11y_incorrect_aria_attribute_type", "code": "a11y_incorrect_aria_attribute_type",
"message": "The value of 'aria-valuemax' must be of type number", "message": "The value of 'aria-valuemax' must be a number",
"start": { "start": {
"line": 2, "line": 2,
"column": 5 "column": 5
@ -25,14 +25,14 @@
}, },
{ {
"code": "a11y_incorrect_aria_attribute_type", "code": "a11y_incorrect_aria_attribute_type",
"message": "The value of 'aria-valuemax' must be of type number", "message": "The value of 'aria-valuemax' must be a number",
"start": { "start": {
"line": 5, "line": 5,
"column": 5 "column": 5
}, },
"end": { "end": {
"line": 5, "line": 5,
"column": 18 "column": 25
} }
} }
] ]

@ -1,4 +1,4 @@
<div aria-label></div> <div aria-label="true"></div>
<div aria-label={true}></div> <div aria-label={true}></div>
<div aria-label={false}></div> <div aria-label={false}></div>
<div aria-label={1234}></div> <div aria-label={1234}></div>

@ -1,14 +1 @@
[ []
{
"code": "a11y_incorrect_aria_attribute_type",
"message": "The value of 'aria-label' must be of type string",
"start": {
"line": 1,
"column": 5
},
"end": {
"line": 1,
"column": 15
}
}
]

@ -1,6 +1,6 @@
<div aria-sort=""></div> <div aria-sort=""></div>
<div aria-sort="incorrect"></div> <div aria-sort="incorrect"></div>
<div aria-sort></div> <div aria-sort="true"></div>
<div aria-sort={true}></div> <div aria-sort={true}></div>
<div aria-sort={"false"}></div> <div aria-sort={"false"}></div>
<div aria-sort="ascending descending"></div> <div aria-sort="ascending descending"></div>

@ -32,7 +32,7 @@
}, },
"end": { "end": {
"line": 3, "line": 3,
"column": 14 "column": 21
} }
}, },
{ {

@ -1,6 +1,6 @@
<div aria-relevant=""></div> <div aria-relevant=""></div>
<div aria-relevant="foobar"></div> <div aria-relevant="foobar"></div>
<div aria-relevant></div> <div aria-relevant="true"></div>
<div aria-relevant={true}></div> <div aria-relevant={true}></div>
<div aria-relevant={"false"}></div> <div aria-relevant={"false"}></div>
<div aria-relevant="additions removals_"></div> <div aria-relevant="additions removals_"></div>

@ -32,7 +32,7 @@
}, },
"end": { "end": {
"line": 3, "line": 3,
"column": 18 "column": 25
} }
}, },
{ {

@ -57,7 +57,7 @@
<input on:click={noop} type="hidden" /> <input on:click={noop} type="hidden" />
<!-- svelte-ignore a11y_no_static_element_interactions --> <!-- svelte-ignore a11y_no_static_element_interactions -->
<div on:click={noop} aria-hidden></div> <div on:click={noop} aria-hidden="true"></div>
<!-- svelte-ignore a11y_no_static_element_interactions --> <!-- svelte-ignore a11y_no_static_element_interactions -->
<div on:click={noop} aria-hidden="true"></div> <div on:click={noop} aria-hidden="true"></div>
<!-- svelte-ignore a11y_no_static_element_interactions --> <!-- svelte-ignore a11y_no_static_element_interactions -->

@ -1,2 +1,2 @@
<h1></h1> <h1></h1>
<h2 aria-hidden>invisible header</h2> <h2 aria-hidden="true">invisible header</h2>

@ -20,7 +20,7 @@
}, },
"end": { "end": {
"line": 2, "line": 2,
"column": 15 "column": 22
} }
} }
] ]

@ -1,5 +1,5 @@
<img src="foo" alt="Foo eating a sandwich." /> <img src="foo" alt="Foo eating a sandwich." />
<img src="bar" aria-hidden alt="Picture of me taking a photo of an image" /> <img src="bar" aria-hidden="true" alt="Picture of me taking a photo of an image" />
<img src="foo" alt="Photo of foo being weird." /> <img src="foo" alt="Photo of foo being weird." />
<img src="bar" alt="Image of me at a bar!" /> <img src="bar" alt="Image of me at a bar!" />
<img src="foo" alt="Picture of baz fixing a bug." /> <img src="foo" alt="Picture of baz fixing a bug." />

@ -1,6 +1,6 @@
<!-- VALID --> <!-- VALID -->
<div aria-hidden role="button" on:keypress={() => {}}></div> <div aria-hidden="true" role="button" on:keypress={() => {}}></div>
<div aria-disabled role="button" on:keypress={() => {}}></div> <div aria-disabled="true" role="button" on:keypress={() => {}}></div>
<div disabled role="button" on:keypress={() => {}}></div> <div disabled role="button" on:keypress={() => {}}></div>
<div role="presentation" on:keypress={() => {}}></div> <div role="presentation" on:keypress={() => {}}></div>
<button on:click={() => {}}></button> <button on:click={() => {}}></button>

@ -2,6 +2,5 @@
<video></video> <video></video>
<video><track /></video> <video><track /></video>
<audio></audio> <audio></audio>
<video aria-hidden></video>
<video aria-hidden="false"></video>
<video aria-hidden="true"></video> <video aria-hidden="true"></video>
<video aria-hidden="false"></video>

@ -23,18 +23,6 @@
"line": 3 "line": 3
} }
}, },
{
"code": "a11y_media_has_caption",
"end": {
"column": 27,
"line": 5
},
"message": "`<video>` elements must have a `<track kind=\"captions\">`",
"start": {
"column": 0,
"line": 5
}
},
{ {
"code": "a11y_media_has_caption", "code": "a11y_media_has_caption",
"end": { "end": {

@ -83,11 +83,11 @@
<div role="menu"></div> <div role="menu"></div>
<div role="menubar"></div> <div role="menubar"></div>
<div role="menuitem"></div> <div role="menuitem"></div>
<div role="menuitemcheckbox" aria-checked></div> <div role="menuitemcheckbox" aria-checked="true"></div>
<div role="menuitemradio" aria-checked></div> <div role="menuitemradio" aria-checked="true"></div>
<div role="option" aria-selected></div> <div role="option" aria-selected="true"></div>
<div role="progressbar"></div> <div role="progressbar"></div>
<div role="radio" aria-checked></div> <div role="radio" aria-checked="true"></div>
<div role="radiogroup"></div> <div role="radiogroup"></div>
<div role="row"></div> <div role="row"></div>
<div role="rowheader"></div> <div role="rowheader"></div>
@ -95,7 +95,7 @@
<div role="searchbox"></div> <div role="searchbox"></div>
<div role="slider" aria-valuenow={0}></div> <div role="slider" aria-valuenow={0}></div>
<div role="spinbutton"></div> <div role="spinbutton"></div>
<div role="switch" aria-checked></div> <div role="switch" aria-checked="true"></div>
<div role="tab"></div> <div role="tab"></div>
<div role="textbox"></div> <div role="textbox"></div>
<div role="treeitem" aria-selected={true}></div> <div role="treeitem" aria-selected={true}></div>

@ -1,7 +1,7 @@
<!-- VALID --> <!-- VALID -->
<div role="presentation" on:mouseup={() => {}}></div> <div role="presentation" on:mouseup={() => {}}></div>
<div role="button" tabindex="-1" on:click={() => {}} on:keypress={() => {}}></div> <div role="button" tabindex="-1" on:click={() => {}} on:keypress={() => {}}></div>
<div role="listitem" aria-hidden on:click={() => {}} on:keypress={() => {}}></div> <div role="listitem" aria-hidden="true" on:click={() => {}} on:keypress={() => {}}></div>
<button on:click={() => {}}></button> <button on:click={() => {}}></button>
<h1 contenteditable="true" on:keydown={() => {}}>Heading</h1> <h1 contenteditable="true" on:keydown={() => {}}>Heading</h1>
<h1>Heading</h1> <h1>Heading</h1>

@ -9,39 +9,39 @@
<dir role="menu"></dir> <dir role="menu"></dir>
<dl role="menubar"></dl> <dl role="menubar"></dl>
<dfn role="menuitem"></dfn> <dfn role="menuitem"></dfn>
<dt role="menuitemcheckbox" aria-checked></dt> <dt role="menuitemcheckbox" aria-checked="true"></dt>
<fieldset role="menuitemradio" aria-checked></fieldset> <fieldset role="menuitemradio" aria-checked="true"></fieldset>
<figure> <figure>
<figcaption role="menuitemradio" aria-checked></figcaption> <figcaption role="menuitemradio" aria-checked="true"></figcaption>
</figure> </figure>
<figure role="option" aria-selected></figure> <figure role="option" aria-selected="true"></figure>
<footer role="radio" aria-checked></footer> <footer role="radio" aria-checked="true"></footer>
<form role="radiogroup"></form> <form role="radiogroup"></form>
<h1 role="rowheader">Button</h1> <h1 role="rowheader">Button</h1>
<h2 role="scrollbar" aria-controls={[]} aria-valuenow={0}>Button</h2> <h2 role="scrollbar" aria-controls={[]} aria-valuenow={0}>Button</h2>
<h3 role="searchbox">Button</h3> <h3 role="searchbox">Button</h3>
<h4 role="slider" aria-valuenow={0}>Button</h4> <h4 role="slider" aria-valuenow={0}>Button</h4>
<h5 role="spinbutton">Button</h5> <h5 role="spinbutton">Button</h5>
<h6 role="switch" aria-checked>Button</h6> <h6 role="switch" aria-checked="true">Button</h6>
<hr role="tab" /> <hr role="tab" />
<img role="tabpanel" alt="tabpanel" /> <img role="tabpanel" alt="tabpanel" />
<label role="textbox"></label> <label role="textbox"></label>
<legend role="toolbar"></legend> <legend role="toolbar"></legend>
<li role="tree"></li> <li role="tree"></li>
<main role="treegrid"></main> <main role="treegrid"></main>
<mark role="treeitem" aria-selected></mark> <mark role="treeitem" aria-selected="true"></mark>
<marquee role="doc-backlink"></marquee> <marquee role="doc-backlink"></marquee>
<menu role="doc-biblioref"></menu> <menu role="doc-biblioref"></menu>
<meter role="doc-glossref"></meter> <meter role="doc-glossref"></meter>
<nav role="doc-noteref"></nav> <nav role="doc-noteref"></nav>
<ol role="button"></ol> <ol role="button"></ol>
<optgroup role="treeitem" aria-selected></optgroup> <optgroup role="treeitem" aria-selected="true"></optgroup>
<output role="treegrid"></output> <output role="treegrid"></output>
<p role="columnheader"></p> <p role="columnheader"></p>
<pre role="tree"></pre> <pre role="tree"></pre>
<progress role="combobox" aria-controls={[]} aria-expanded></progress> <progress role="combobox" aria-controls={[]} aria-expanded="true"></progress>
<ruby role="toolbar"></ruby> <ruby role="toolbar"></ruby>
<section role="radio" aria-label="radio" aria-checked></section> <section role="radio" aria-label="radio" aria-checked="true"></section>
<table role="menu"></table> <table role="menu"></table>
<tbody role="searchbox"></tbody> <tbody role="searchbox"></tbody>
<tfoot role="listbox"></tfoot> <tfoot role="listbox"></tfoot>
@ -82,11 +82,11 @@
<div role="menu"></div> <div role="menu"></div>
<div role="menubar"></div> <div role="menubar"></div>
<div role="menuitem"></div> <div role="menuitem"></div>
<div role="menuitemcheckbox" aria-checked></div> <div role="menuitemcheckbox" aria-checked="true"></div>
<div role="menuitemradio" aria-checked></div> <div role="menuitemradio" aria-checked="true"></div>
<div role="option" aria-selected></div> <div role="option" aria-selected="true"></div>
<div role="progressbar"></div> <div role="progressbar"></div>
<div role="radio" aria-checked></div> <div role="radio" aria-checked="true"></div>
<div role="radiogroup"></div> <div role="radiogroup"></div>
<div role="row"></div> <div role="row"></div>
<div role="rowheader"></div> <div role="rowheader"></div>
@ -94,11 +94,11 @@
<div role="searchbox"></div> <div role="searchbox"></div>
<div role="slider" aria-valuenow={0}></div> <div role="slider" aria-valuenow={0}></div>
<div role="spinbutton"></div> <div role="spinbutton"></div>
<div role="switch" aria-checked></div> <div role="switch" aria-checked="true"></div>
<div role="tab"></div> <div role="tab"></div>
<div role="textbox"></div> <div role="textbox"></div>
<div role="treeitem" aria-selected={true}></div> <div role="treeitem" aria-selected={true}></div>
<body role="combobox" aria-controls={[]} aria-expanded></body> <body role="combobox" aria-controls={[]} aria-expanded="true"></body>
<td role="button"></td> <td role="button"></td>
<!-- VALID: HTML elements attributed with a non-interactive role --> <!-- VALID: HTML elements attributed with a non-interactive role -->

@ -128,7 +128,7 @@
}, },
"end": { "end": {
"line": 12, "line": 12,
"column": 46 "column": 53
} }
}, },
{ {
@ -140,7 +140,7 @@
}, },
"end": { "end": {
"line": 13, "line": 13,
"column": 55 "column": 62
} }
}, },
{ {
@ -152,7 +152,7 @@
}, },
"end": { "end": {
"line": 15, "line": 15,
"column": 60 "column": 67
} }
}, },
{ {
@ -164,7 +164,7 @@
}, },
"end": { "end": {
"line": 17, "line": 17,
"column": 45 "column": 52
} }
}, },
{ {
@ -176,7 +176,7 @@
}, },
"end": { "end": {
"line": 18, "line": 18,
"column": 43 "column": 50
} }
}, },
{ {
@ -260,7 +260,7 @@
}, },
"end": { "end": {
"line": 25, "line": 25,
"column": 42 "column": 49
} }
}, },
{ {
@ -356,7 +356,7 @@
}, },
"end": { "end": {
"line": 32, "line": 32,
"column": 43 "column": 50
} }
}, },
{ {
@ -440,7 +440,7 @@
}, },
"end": { "end": {
"line": 38, "line": 38,
"column": 51 "column": 58
} }
}, },
{ {
@ -488,7 +488,7 @@
}, },
"end": { "end": {
"line": 42, "line": 42,
"column": 70 "column": 77
} }
}, },
{ {
@ -512,7 +512,7 @@
}, },
"end": { "end": {
"line": 44, "line": 44,
"column": 64 "column": 71
} }
}, },
{ {

@ -1,9 +1,9 @@
<!-- INVALID --> <!-- INVALID -->
<a aria-setsize="0" href="/">Link</a> <a aria-setsize="0" href="/">Link</a>
<area aria-pressed alt="" /> <area aria-pressed="true" alt="" />
<article aria-autocomplete="inline"></article> <article aria-autocomplete="inline"></article>
<aside aria-modal></aside> <aside aria-modal="true"></aside>
<body aria-invalid></body> <body aria-invalid="true"></body>
<button aria-valuemax="0"></button> <button aria-valuemax="0"></button>
<datalist aria-valuenow="0"></datalist> <datalist aria-valuenow="0"></datalist>
<dd aria-rowindex="0"></dd> <dd aria-rowindex="0"></dd>
@ -12,149 +12,149 @@
<details aria-orientation="undefined"></details> <details aria-orientation="undefined"></details>
<dt aria-valuemin="0"></dt> <dt aria-valuemin="0"></dt>
<fieldset aria-orientation="undefined"></fieldset> <fieldset aria-orientation="undefined"></fieldset>
<form aria-disabled></form> <form aria-disabled="true"></form>
<h1 aria-selected>H1</h1> <h1 aria-selected="true">H1</h1>
<h2 aria-selected>H2</h2> <h2 aria-selected="true">H2</h2>
<h3 aria-expanded>H3</h3> <h3 aria-expanded="true">H3</h3>
<h4 aria-valuemin="0">H4</h4> <h4 aria-valuemin="0">H4</h4>
<h5 aria-readonly>H5</h5> <h5 aria-readonly="true">H5</h5>
<h6 aria-valuemin="0">H6</h6> <h6 aria-valuemin="0">H6</h6>
<hr aria-required /> <hr aria-required="true" />
<img aria-level="0" alt="invalid aria" /> <img aria-level="0" alt="invalid aria" />
<li aria-required></li> <li aria-required="true"></li>
<link aria-rowcount="0" /> <link aria-rowcount="0" />
<menu aria-valuemin="0"></menu> <menu aria-valuemin="0"></menu>
<meter aria-colspan="0"></meter> <meter aria-colspan="0"></meter>
<nav aria-valuetext=""></nav> <nav aria-valuetext="x"></nav>
<ol aria-sort="none"></ol> <ol aria-sort="none"></ol>
<option aria-invalid></option> <option aria-invalid="true"></option>
<optgroup aria-sort="none"></optgroup> <optgroup aria-sort="none"></optgroup>
<output aria-multiline></output> <output aria-multiline="true"></output>
<progress aria-rowcount="0"></progress> <progress aria-rowcount="0"></progress>
<section aria-invalid></section> <section aria-invalid="true"></section>
<summary aria-rowcount="0"></summary> <summary aria-rowcount="0"></summary>
<tbody aria-colspan="0"></tbody> <tbody aria-colspan="0"></tbody>
<textarea aria-valuenow="0"></textarea> <textarea aria-valuenow="0"></textarea>
<tfoot aria-required></tfoot> <tfoot aria-required="true"></tfoot>
<thead aria-valuemin="0"></thead> <thead aria-valuemin="0"></thead>
<tr aria-pressed></tr> <tr aria-pressed="true"></tr>
<ul aria-multiselectable></ul> <ul aria-multiselectable="true"></ul>
<div role="alert" aria-colspan="0"></div> <div role="alert" aria-colspan="0"></div>
<div role="alertdialog" aria-autocomplete="inline"></div> <div role="alertdialog" aria-autocomplete="inline"></div>
<div role="application" aria-required></div> <div role="application" aria-required="true"></div>
<div role="article" aria-multiline></div> <div role="article" aria-multiline="true"></div>
<div role="banner" aria-autocomplete="inline"></div> <div role="banner" aria-autocomplete="inline"></div>
<div role="blockquote" aria-valuetext=""></div> <div role="blockquote" aria-valuetext="x"></div>
<div role="button" aria-colspan="0"></div> <div role="button" aria-colspan="0"></div>
<div role="caption" aria-setsize="0"></div> <div role="caption" aria-setsize="0"></div>
<div role="cell" aria-multiline></div> <div role="cell" aria-multiline="true"></div>
<div role="checkbox" aria-multiline aria-checked></div> <div role="checkbox" aria-multiline="true" aria-checked="true"></div>
<div role="code" aria-invalid></div> <div role="code" aria-invalid="true"></div>
<div role="columnheader" aria-colcount="0"></div> <div role="columnheader" aria-colcount="0"></div>
<div role="combobox" aria-multiselectable aria-controls={[]} aria-expanded></div> <div role="combobox" aria-multiselectable="true" aria-controls={[]} aria-expanded="true"></div>
<div role="complementary" aria-readonly></div> <div role="complementary" aria-readonly="true"></div>
<div role="contentinfo" aria-valuetext=""></div> <div role="contentinfo" aria-valuetext="x"></div>
<div role="definition" aria-multiline></div> <div role="definition" aria-multiline="true"></div>
<div role="deletion" aria-expanded></div> <div role="deletion" aria-expanded="true"></div>
<div role="dialog" aria-multiline></div> <div role="dialog" aria-multiline="true"></div>
<div role="directory" aria-rowcount="0"></div> <div role="directory" aria-rowcount="0"></div>
<div role="document" aria-valuemin="0"></div> <div role="document" aria-valuemin="0"></div>
<div role="emphasis" aria-rowindex="0"></div> <div role="emphasis" aria-rowindex="0"></div>
<div role="feed" aria-colindex="0"></div> <div role="feed" aria-colindex="0"></div>
<div role="figure" aria-valuemax="0"></div> <div role="figure" aria-valuemax="0"></div>
<div role="form" aria-readonly></div> <div role="form" aria-readonly="true"></div>
<div role="generic" aria-valuemax="0"></div> <div role="generic" aria-valuemax="0"></div>
<div role="grid" aria-checked></div> <div role="grid" aria-checked="true"></div>
<div role="gridcell" aria-level="0"></div> <div role="gridcell" aria-level="0"></div>
<div role="group" aria-colspan="0"></div> <div role="group" aria-colspan="0"></div>
<div role="heading" aria-activedescendant="id" tabindex="-1" aria-level="0"></div> <div role="heading" aria-activedescendant="id" tabindex="-1" aria-level="0"></div>
<div role="insertion" aria-errormessage="error"></div> <div role="insertion" aria-errormessage="error"></div>
<div role="link" aria-multiline></div> <div role="link" aria-multiline="true"></div>
<div role="list" aria-selected></div> <div role="list" aria-selected="true"></div>
<div role="listbox" aria-haspopup></div> <div role="listbox" aria-haspopup="true"></div>
<div role="listitem" aria-activedescendant="id" tabindex="-1"></div> <div role="listitem" aria-activedescendant="id" tabindex="-1"></div>
<div role="log" aria-required></div> <div role="log" aria-required="true"></div>
<div role="main" aria-sort="none"></div> <div role="main" aria-sort="none"></div>
<div role="marquee" aria-autocomplete="inline"></div> <div role="marquee" aria-autocomplete="inline"></div>
<div role="math" aria-multiline></div> <div role="math" aria-multiline="true"></div>
<div role="menu" aria-checked></div> <div role="menu" aria-checked="true"></div>
<div role="menubar" aria-errormessage="error"></div> <div role="menubar" aria-errormessage="error"></div>
<div role="menuitem" aria-checked></div> <div role="menuitem" aria-checked="true"></div>
<div role="menuitemcheckbox" aria-pressed aria-checked="false"></div> <div role="menuitemcheckbox" aria-pressed="true" aria-checked="false"></div>
<div role="menuitemradio" aria-rowspan="0" aria-checked="false"></div> <div role="menuitemradio" aria-rowspan="0" aria-checked="false"></div>
<div role="meter" aria-valuenow="0" aria-haspopup></div> <div role="meter" aria-valuenow="0" aria-haspopup="true"></div>
<div role="navigation" aria-expanded></div> <div role="navigation" aria-expanded="true"></div>
<div role="none" aria-placeholder=""></div> <div role="none" aria-placeholder="x"></div>
<div role="note" aria-modal></div> <div role="note" aria-modal="true"></div>
<div role="option" aria-selected aria-valuemax="0"></div> <div role="option" aria-selected="true" aria-valuemax="0"></div>
<div role="paragraph" aria-level="0"></div> <div role="paragraph" aria-level="0"></div>
<div role="presentation" aria-disabled></div> <div role="presentation" aria-disabled="true"></div>
<div role="progressbar" aria-expanded></div> <div role="progressbar" aria-expanded="true"></div>
<div role="radio" aria-checked aria-rowindex="0"></div> <div role="radio" aria-checked="true" aria-rowindex="0"></div>
<div role="radiogroup" aria-valuenow="0"></div> <div role="radiogroup" aria-valuenow="0"></div>
<div role="region" aria-rowspan="0"></div> <div role="region" aria-rowspan="0"></div>
<div role="row" aria-required></div> <div role="row" aria-required="true"></div>
<div role="rowgroup" aria-expanded></div> <div role="rowgroup" aria-expanded="true"></div>
<div role="rowheader" aria-activedescendant="id" tabindex="0"></div> <div role="rowheader" aria-activedescendant="id" tabindex="0"></div>
<div role="scrollbar" aria-controls={[]} aria-valuenow="0" aria-rowspan="0"></div> <div role="scrollbar" aria-controls={[]} aria-valuenow="0" aria-rowspan="0"></div>
<div role="search" aria-autocomplete="inline"></div> <div role="search" aria-autocomplete="inline"></div>
<div role="searchbox" aria-colindex="0"></div> <div role="searchbox" aria-colindex="0"></div>
<div role="separator" aria-sort="none"></div> <div role="separator" aria-sort="none"></div>
<div role="slider" aria-valuenow="0" aria-placeholder=""></div> <div role="slider" aria-valuenow="0" aria-placeholder="x"></div>
<div role="spinbutton" aria-posinset="0"></div> <div role="spinbutton" aria-posinset="0"></div>
<div role="status" aria-valuemin="0"></div> <div role="status" aria-valuemin="0"></div>
<div role="strong" aria-valuemin="0"></div> <div role="strong" aria-valuemin="0"></div>
<div role="subscript" aria-colcount="0"></div> <div role="subscript" aria-colcount="0"></div>
<div role="superscript" aria-level="0"></div> <div role="superscript" aria-level="0"></div>
<div role="switch" aria-checked aria-valuenow="0"></div> <div role="switch" aria-checked="true" aria-valuenow="0"></div>
<div role="tab" aria-required></div> <div role="tab" aria-required="true"></div>
<div role="table" aria-modal></div> <div role="table" aria-modal="true"></div>
<div role="tablist" aria-setsize="0"></div> <div role="tablist" aria-setsize="0"></div>
<div role="tabpanel" aria-multiselectable></div> <div role="tabpanel" aria-multiselectable="true"></div>
<div role="term" aria-posinset="0"></div> <div role="term" aria-posinset="0"></div>
<div role="textbox" aria-colspan="0"></div> <div role="textbox" aria-colspan="0"></div>
<div role="time" aria-selected></div> <div role="time" aria-selected="true"></div>
<div role="timer" aria-sort="none"></div> <div role="timer" aria-sort="none"></div>
<div role="toolbar" aria-valuetext=""></div> <div role="toolbar" aria-valuetext="x"></div>
<div role="tooltip" aria-multiline></div> <div role="tooltip" aria-multiline="true"></div>
<div role="tree" aria-expanded></div> <div role="tree" aria-expanded="true"></div>
<div role="treegrid" aria-level="0"></div> <div role="treegrid" aria-level="0"></div>
<div role="treeitem" aria-selected aria-activedescendant="id" tabindex="-1"></div> <div role="treeitem" aria-selected="true" aria-activedescendant="id" tabindex="-1"></div>
<div role="doc-abstract" aria-colindex="0"></div> <div role="doc-abstract" aria-colindex="0"></div>
<div role="doc-acknowledgments" aria-setsize="0"></div> <div role="doc-acknowledgments" aria-setsize="0"></div>
<div role="doc-afterword" aria-modal></div> <div role="doc-afterword" aria-modal="true"></div>
<div role="doc-appendix" aria-activedescendant="id" tabindex="-1"></div> <div role="doc-appendix" aria-activedescendant="id" tabindex="-1"></div>
<div role="doc-backlink" aria-colspan="0"></div> <div role="doc-backlink" aria-colspan="0"></div>
<div role="doc-biblioentry" aria-valuemax="0"></div> <div role="doc-biblioentry" aria-valuemax="0"></div>
<div role="doc-bibliography" aria-level="0"></div> <div role="doc-bibliography" aria-level="0"></div>
<div role="doc-biblioref" aria-checked></div> <div role="doc-biblioref" aria-checked="true"></div>
<div role="doc-chapter" aria-required></div> <div role="doc-chapter" aria-required="true"></div>
<div role="doc-colophon" aria-setsize="0"></div> <div role="doc-colophon" aria-setsize="0"></div>
<div role="doc-conclusion" aria-colindex="0"></div> <div role="doc-conclusion" aria-colindex="0"></div>
<div role="doc-cover" aria-modal></div> <div role="doc-cover" aria-modal="true"></div>
<div role="doc-credit" aria-selected></div> <div role="doc-credit" aria-selected="true"></div>
<div role="doc-credits" aria-orientation="undefined"></div> <div role="doc-credits" aria-orientation="undefined"></div>
<div role="doc-dedication" aria-level="0"></div> <div role="doc-dedication" aria-level="0"></div>
<div role="doc-endnote" aria-checked></div> <div role="doc-endnote" aria-checked="true"></div>
<div role="doc-endnotes" aria-colcount="0"></div> <div role="doc-endnotes" aria-colcount="0"></div>
<div role="doc-epigraph" aria-multiline></div> <div role="doc-epigraph" aria-multiline="true"></div>
<div role="doc-epilogue" aria-colcount="0"></div> <div role="doc-epilogue" aria-colcount="0"></div>
<div role="doc-errata" aria-sort="none"></div> <div role="doc-errata" aria-sort="none"></div>
<div role="doc-example" aria-multiselectable></div> <div role="doc-example" aria-multiselectable="true"></div>
<div role="doc-footnote" aria-rowcount="0"></div> <div role="doc-footnote" aria-rowcount="0"></div>
<div role="doc-foreword" aria-valuenow="0"></div> <div role="doc-foreword" aria-valuenow="0"></div>
<div role="doc-glossary" aria-valuetext=""></div> <div role="doc-glossary" aria-valuetext="x"></div>
<div role="doc-glossref" aria-placeholder=""></div> <div role="doc-glossref" aria-placeholder="x"></div>
<div role="doc-index" aria-rowcount="0"></div> <div role="doc-index" aria-rowcount="0"></div>
<div role="doc-introduction" aria-pressed></div> <div role="doc-introduction" aria-pressed="true"></div>
<div role="doc-noteref" aria-valuenow="0"></div> <div role="doc-noteref" aria-valuenow="0"></div>
<div role="doc-notice" aria-selected></div> <div role="doc-notice" aria-selected="true"></div>
<div role="doc-pagebreak" aria-rowcount="0"></div> <div role="doc-pagebreak" aria-rowcount="0"></div>
<div role="doc-pagelist" aria-modal></div> <div role="doc-pagelist" aria-modal="true"></div>
<div role="doc-part" aria-setsize="0"></div> <div role="doc-part" aria-setsize="0"></div>
<div role="doc-preface" aria-orientation="undefined"></div> <div role="doc-preface" aria-orientation="undefined"></div>
<div role="doc-prologue" aria-required></div> <div role="doc-prologue" aria-required="true"></div>
<div role="doc-pullquote" aria-rowcount="0"></div> <div role="doc-pullquote" aria-rowcount="0"></div>
<div role="doc-qna" aria-setsize="0"></div> <div role="doc-qna" aria-setsize="0"></div>
<div role="doc-subtitle" aria-rowindex="0"></div> <div role="doc-subtitle" aria-rowindex="0"></div>
@ -164,208 +164,208 @@
<!-- input and menuitem have different implicit roles based on different type attributes, and thus different valid and invalid props --> <!-- input and menuitem have different implicit roles based on different type attributes, and thus different valid and invalid props -->
<!-- INVALID --> <!-- INVALID -->
<input type="text" aria-rowspan="0" /> <!-- implicit role: textbox --> <input type="text" aria-rowspan="0" /> <!-- implicit role: textbox -->
<input type="tel" aria-pressed /> <!-- implicit role: textbox --> <input type="tel" aria-pressed="true" /> <!-- implicit role: textbox -->
<input type="url" aria-level="0" /> <!-- implicit role: textbox --> <input type="url" aria-level="0" /> <!-- implicit role: textbox -->
<input type="email" aria-pressed /> <!-- implicit role: textbox --> <input type="email" aria-pressed="true" /> <!-- implicit role: textbox -->
<input type="search" aria-valuetext="text" /> <!-- implicit role: searchbox --> <input type="search" aria-valuetext="text" /> <!-- implicit role: searchbox -->
<input type="text" list={['id']} aria-valuemin="0" /> <!-- implicit role: combobox --> <input type="text" list={['id']} aria-valuemin="0" /> <!-- implicit role: combobox -->
<input type="tel" list={['id']} aria-colspan="0" /> <!-- implicit role: combobox --> <input type="tel" list={['id']} aria-colspan="0" /> <!-- implicit role: combobox -->
<input type="url" list={['id']} aria-posinset="0" /> <!-- implicit role: combobox --> <input type="url" list={['id']} aria-posinset="0" /> <!-- implicit role: combobox -->
<input type="email" list={['id']} aria-modal /> <!-- implicit role: combobox --> <input type="email" list={['id']} aria-modal="true" /> <!-- implicit role: combobox -->
<input type="search" list={['id']} aria-rowindex="0" /> <!-- implicit role: combobox --> <input type="search" list={['id']} aria-rowindex="0" /> <!-- implicit role: combobox -->
<input type="image" alt="some text" aria-valuemax="0" /> <!-- implicit role: button --> <input type="image" alt="some text" aria-valuemax="0" /> <!-- implicit role: button -->
<input type="reset" aria-modal /> <!-- implicit role: button --> <input type="reset" aria-modal="true" /> <!-- implicit role: button -->
<input type="submit" aria-placeholder="placeholder" /> <!-- implicit role: button --> <input type="submit" aria-placeholder="placeholder" /> <!-- implicit role: button -->
<input type="checkbox" aria-rowindex="0" /> <!-- implicit role: checkbox --> <input type="checkbox" aria-rowindex="0" /> <!-- implicit role: checkbox -->
<input type="radio" aria-valuetext="text" /> <!-- implicit role: radio --> <input type="radio" aria-valuetext="text" /> <!-- implicit role: radio -->
<input type="range" aria-checked /> <!-- implicit role: slider --> <input type="range" aria-checked="true" /> <!-- implicit role: slider -->
<menuitem type="command" aria-colindex="0"></menuitem> <!-- implicit role: menuitem --> <menuitem type="command" aria-colindex="0"></menuitem> <!-- implicit role: menuitem -->
<menuitem type="checkbox" aria-colcount="0"></menuitem> <!-- implicit role: menuitemcheckbox --> <menuitem type="checkbox" aria-colcount="0"></menuitem> <!-- implicit role: menuitemcheckbox -->
<menuitem type="radio" aria-placeholder="placeholder"></menuitem> <!-- implicit role: menuitemradio --> <menuitem type="radio" aria-placeholder="placeholder"></menuitem> <!-- implicit role: menuitemradio -->
<!-- VALID --> <!-- VALID -->
<a aria-keyshortcuts="" href="/">Link</a> <a aria-keyshortcuts="x" href="/">Link</a>
<area aria-expanded alt="" /> <area aria-expanded="true" alt="" />
<article aria-dropeffect="none"></article> <article aria-dropeffect="none"></article>
<aside aria-keyshortcuts=""></aside> <aside aria-keyshortcuts="x"></aside>
<body aria-labelledby="id"></body> <body aria-labelledby="id"></body>
<button aria-hidden></button> <button aria-hidden="true"></button>
<datalist aria-activedescendant="id" tabindex="0"></datalist> <datalist aria-activedescendant="id" tabindex="0"></datalist>
<dd aria-labelledby="id"></dd> <dd aria-labelledby="id"></dd>
<dfn aria-details="id"></dfn> <dfn aria-details="id"></dfn>
<dialog aria-keyshortcuts=""></dialog> <dialog aria-keyshortcuts="x"></dialog>
<details aria-keyshortcuts=""></details> <details aria-keyshortcuts="x"></details>
<dt aria-hidden></dt> <dt aria-hidden="true"></dt>
<fieldset aria-owns="id"></fieldset> <fieldset aria-owns="id"></fieldset>
<form aria-keyshortcuts=""></form> <form aria-keyshortcuts="x"></form>
<h1 aria-keyshortcuts="">H1</h1> <h1 aria-keyshortcuts="x">H1</h1>
<h2 aria-controls={[]}>H2</h2> <h2 aria-controls={[]}>H2</h2>
<h3 aria-controls={[]}>H3</h3> <h3 aria-controls={[]}>H3</h3>
<h4 aria-details="id">H4</h4> <h4 aria-details="id">H4</h4>
<h5 aria-grabbed>H5</h5> <h5 aria-grabbed="true">H5</h5>
<h6 aria-grabbed>H6</h6> <h6 aria-grabbed="true">H6</h6>
<hr aria-relevant="all" /> <hr aria-relevant="all" />
<img aria-flowto="id" alt="Valid aria role" /> <img aria-flowto="id" alt="Valid aria role" />
<li aria-label=""></li> <li aria-label="x"></li>
<link aria-hidden /> <link aria-hidden="true" />
<menu aria-roledescription=""></menu> <menu aria-roledescription="x"></menu>
<meter aria-valuemin="0"></meter> <meter aria-valuemin="0"></meter>
<nav aria-labelledby="id"></nav> <nav aria-labelledby="id"></nav>
<ol aria-grabbed></ol> <ol aria-grabbed="true"></ol>
<option aria-selected></option> <option aria-selected="true"></option>
<optgroup aria-hidden></optgroup> <optgroup aria-hidden="true"></optgroup>
<output aria-dropeffect="none"></output> <output aria-dropeffect="none"></output>
<progress aria-hidden></progress> <progress aria-hidden="true"></progress>
<section aria-details="id"></section> <section aria-details="id"></section>
<summary aria-controls={[]}></summary> <summary aria-controls={[]}></summary>
<tbody aria-controls={[]}></tbody> <tbody aria-controls={[]}></tbody>
<textarea aria-busy></textarea> <textarea aria-busy="true"></textarea>
<tfoot aria-labelledby="id"></tfoot> <tfoot aria-labelledby="id"></tfoot>
<thead aria-flowto="id"></thead> <thead aria-flowto="id"></thead>
<tr aria-describedby="id"></tr> <tr aria-describedby="id"></tr>
<ul aria-dropeffect="none"></ul> <ul aria-dropeffect="none"></ul>
<div role="alert" aria-owns="id"></div> <div role="alert" aria-owns="id"></div>
<div role="alertdialog" aria-busy></div> <div role="alertdialog" aria-busy="true"></div>
<div role="application" aria-invalid></div> <div role="application" aria-invalid="true"></div>
<div role="article" aria-atomic></div> <div role="article" aria-atomic="true"></div>
<div role="banner" aria-grabbed></div> <div role="banner" aria-grabbed="true"></div>
<div role="blockquote" aria-busy></div> <div role="blockquote" aria-busy="true"></div>
<div role="button" aria-busy></div> <div role="button" aria-busy="true"></div>
<div role="caption" aria-grabbed></div> <div role="caption" aria-grabbed="true"></div>
<div role="cell" aria-rowindex="0"></div> <div role="cell" aria-rowindex="0"></div>
<div role="checkbox" aria-checked aria-details="id"></div> <div role="checkbox" aria-checked="true" aria-details="id"></div>
<div role="code" aria-keyshortcuts=""></div> <div role="code" aria-keyshortcuts="x"></div>
<div role="columnheader" aria-rowspan="0"></div> <div role="columnheader" aria-rowspan="0"></div>
<div role="combobox" aria-invalid aria-controls={[]} aria-expanded></div> <div role="combobox" aria-invalid="true" aria-controls={[]} aria-expanded="true"></div>
<div role="complementary" aria-label=""></div> <div role="complementary" aria-label="x"></div>
<div role="contentinfo" aria-dropeffect="none"></div> <div role="contentinfo" aria-dropeffect="none"></div>
<div role="definition" aria-grabbed></div> <div role="definition" aria-grabbed="true"></div>
<div role="deletion" aria-busy></div> <div role="deletion" aria-busy="true"></div>
<div role="dialog" aria-flowto="id"></div> <div role="dialog" aria-flowto="id"></div>
<div role="directory" aria-controls={[]}></div> <div role="directory" aria-controls={[]}></div>
<div role="document" aria-grabbed></div> <div role="document" aria-grabbed="true"></div>
<div role="emphasis" aria-atomic></div> <div role="emphasis" aria-atomic="true"></div>
<div role="feed" aria-atomic></div> <div role="feed" aria-atomic="true"></div>
<div role="figure" aria-busy></div> <div role="figure" aria-busy="true"></div>
<div role="form" aria-roledescription=""></div> <div role="form" aria-roledescription="x"></div>
<div role="generic" aria-current></div> <div role="generic" aria-current="true"></div>
<div role="grid" aria-busy></div> <div role="grid" aria-busy="true"></div>
<div role="gridcell" aria-relevant="all"></div> <div role="gridcell" aria-relevant="all"></div>
<div role="group" aria-busy></div> <div role="group" aria-busy="true"></div>
<div role="heading" aria-level="" aria-flowto="id"></div> <div role="heading" aria-level="" aria-flowto="id"></div>
<div role="img" aria-grabbed></div> <div role="img" aria-grabbed="true"></div>
<div role="insertion" aria-roledescription=""></div> <div role="insertion" aria-roledescription="x"></div>
<div role="link" aria-owns="id"></div> <div role="link" aria-owns="id"></div>
<div role="list" aria-labelledby="id"></div> <div role="list" aria-labelledby="id"></div>
<div role="listbox" aria-current></div> <div role="listbox" aria-current="true"></div>
<div role="listitem" aria-controls={[]}></div> <div role="listitem" aria-controls={[]}></div>
<div role="log" aria-controls={[]}></div> <div role="log" aria-controls={[]}></div>
<div role="main" aria-keyshortcuts=""></div> <div role="main" aria-keyshortcuts="x"></div>
<div role="marquee" aria-labelledby="id"></div> <div role="marquee" aria-labelledby="id"></div>
<div role="math" aria-labelledby="id"></div> <div role="math" aria-labelledby="id"></div>
<div role="menu" aria-atomic></div> <div role="menu" aria-atomic="true"></div>
<div role="menubar" aria-grabbed></div> <div role="menubar" aria-grabbed="true"></div>
<div role="menuitem" aria-grabbed></div> <div role="menuitem" aria-grabbed="true"></div>
<div role="menuitemcheckbox" aria-checked aria-controls={[]}></div> <div role="menuitemcheckbox" aria-checked="true" aria-controls={[]}></div>
<div role="menuitemradio" aria-checked aria-grabbed></div> <div role="menuitemradio" aria-checked="true" aria-grabbed="true"></div>
<div role="meter" aria-valuenow="0" aria-valuetext=""></div> <div role="meter" aria-valuenow="0" aria-valuetext="x"></div>
<div role="navigation" aria-controls={[]}></div> <div role="navigation" aria-controls={[]}></div>
<div role="none" undefined></div> <div role="none" undefined></div>
<div role="note" aria-hidden></div> <div role="note" aria-hidden="true"></div>
<div role="option" aria-selected aria-describedby="id"></div> <div role="option" aria-selected="true" aria-describedby="id"></div>
<div role="paragraph" aria-grabbed></div> <div role="paragraph" aria-grabbed="true"></div>
<div role="presentation" aria-relevant="all"></div> <div role="presentation" aria-relevant="all"></div>
<div role="progressbar" aria-valuemin="0"></div> <div role="progressbar" aria-valuemin="0"></div>
<div role="radio" aria-checked aria-roledescription=""></div> <div role="radio" aria-checked="true" aria-roledescription="x"></div>
<div role="radiogroup" aria-required></div> <div role="radiogroup" aria-required="true"></div>
<div role="region" aria-roledescription=""></div> <div role="region" aria-roledescription="x"></div>
<div role="row" aria-posinset="0"></div> <div role="row" aria-posinset="0"></div>
<div role="rowgroup" aria-busy></div> <div role="rowgroup" aria-busy="true"></div>
<div role="rowheader" aria-label=""></div> <div role="rowheader" aria-label="x"></div>
<div role="scrollbar" aria-controls={[]} aria-valuenow="0" aria-relevant="all"></div> <div role="scrollbar" aria-controls={[]} aria-valuenow="0" aria-relevant="all"></div>
<div role="search" aria-grabbed></div> <div role="search" aria-grabbed="true"></div>
<div role="searchbox" aria-dropeffect="none"></div> <div role="searchbox" aria-dropeffect="none"></div>
<div role="separator" aria-roledescription=""></div> <div role="separator" aria-roledescription="x"></div>
<div role="slider" aria-valuenow="0" aria-relevant="all"></div> <div role="slider" aria-valuenow="0" aria-relevant="all"></div>
<div role="spinbutton" aria-required></div> <div role="spinbutton" aria-required="true"></div>
<div role="status" aria-label=""></div> <div role="status" aria-label="x"></div>
<div role="strong" aria-keyshortcuts=""></div> <div role="strong" aria-keyshortcuts="x"></div>
<div role="subscript" aria-keyshortcuts=""></div> <div role="subscript" aria-keyshortcuts="x"></div>
<div role="superscript" aria-live="off"></div> <div role="superscript" aria-live="off"></div>
<div role="switch" aria-checked aria-roledescription=""></div> <div role="switch" aria-checked="true" aria-roledescription="x"></div>
<div role="tab" aria-flowto="id"></div> <div role="tab" aria-flowto="id"></div>
<div role="table" aria-rowcount="0"></div> <div role="table" aria-rowcount="0"></div>
<div role="tablist" aria-atomic></div> <div role="tablist" aria-atomic="true"></div>
<div role="tabpanel" aria-labelledby="id"></div> <div role="tabpanel" aria-labelledby="id"></div>
<div role="term" aria-details="id"></div> <div role="term" aria-details="id"></div>
<div role="textbox" aria-hidden></div> <div role="textbox" aria-hidden="true"></div>
<div role="time" aria-label=""></div> <div role="time" aria-label="x"></div>
<div role="timer" aria-hidden></div> <div role="timer" aria-hidden="true"></div>
<div role="toolbar" aria-roledescription=""></div> <div role="toolbar" aria-roledescription="x"></div>
<div role="tooltip" aria-owns="id"></div> <div role="tooltip" aria-owns="id"></div>
<div role="tree" aria-errormessage="error"></div> <div role="tree" aria-errormessage="error"></div>
<div role="treegrid" aria-details="id"></div> <div role="treegrid" aria-details="id"></div>
<div role="treeitem" aria-selected="true" aria-dropeffect="none"></div> <div role="treeitem" aria-selected="true" aria-dropeffect="none"></div>
<div role="doc-abstract" aria-label=""></div> <div role="doc-abstract" aria-label="x"></div>
<div role="doc-acknowledgments" aria-controls={[]}></div> <div role="doc-acknowledgments" aria-controls={[]}></div>
<div role="doc-afterword" aria-flowto="id"></div> <div role="doc-afterword" aria-flowto="id"></div>
<div role="doc-appendix" aria-describedby="id"></div> <div role="doc-appendix" aria-describedby="id"></div>
<div role="doc-backlink" aria-dropeffect="none"></div> <div role="doc-backlink" aria-dropeffect="none"></div>
<div role="doc-biblioentry" aria-roledescription=""></div> <div role="doc-biblioentry" aria-roledescription="x"></div>
<div role="doc-bibliography" aria-labelledby="id"></div> <div role="doc-bibliography" aria-labelledby="id"></div>
<div role="doc-biblioref" aria-haspopup></div> <div role="doc-biblioref" aria-haspopup="true"></div>
<div role="doc-chapter" aria-controls={[]}></div> <div role="doc-chapter" aria-controls={[]}></div>
<div role="doc-colophon" aria-expanded></div> <div role="doc-colophon" aria-expanded="true"></div>
<div role="doc-conclusion" aria-dropeffect="none"></div> <div role="doc-conclusion" aria-dropeffect="none"></div>
<div role="doc-cover" aria-controls={[]}></div> <div role="doc-cover" aria-controls={[]}></div>
<div role="doc-credit" aria-haspopup></div> <div role="doc-credit" aria-haspopup="true"></div>
<div role="doc-credits" aria-describedby="id"></div> <div role="doc-credits" aria-describedby="id"></div>
<div role="doc-dedication" aria-roledescription=""></div> <div role="doc-dedication" aria-roledescription="x"></div>
<div role="doc-endnote" aria-errormessage="error"></div> <div role="doc-endnote" aria-errormessage="error"></div>
<div role="doc-endnotes" aria-owns="id"></div> <div role="doc-endnotes" aria-owns="id"></div>
<div role="doc-epigraph" aria-controls={[]}></div> <div role="doc-epigraph" aria-controls={[]}></div>
<div role="doc-epilogue" aria-relevant="all"></div> <div role="doc-epilogue" aria-relevant="all"></div>
<div role="doc-errata" aria-keyshortcuts=""></div> <div role="doc-errata" aria-keyshortcuts="x"></div>
<div role="doc-example" aria-invalid></div> <div role="doc-example" aria-invalid="true"></div>
<div role="doc-footnote" aria-labelledby="id"></div> <div role="doc-footnote" aria-labelledby="id"></div>
<div role="doc-foreword" aria-expanded></div> <div role="doc-foreword" aria-expanded="true"></div>
<div role="doc-glossary" aria-grabbed></div> <div role="doc-glossary" aria-grabbed="true"></div>
<div role="doc-glossref" aria-haspopup></div> <div role="doc-glossref" aria-haspopup="true"></div>
<div role="doc-index" aria-controls={[]}></div> <div role="doc-index" aria-controls={[]}></div>
<div role="doc-introduction" aria-labelledby="id"></div> <div role="doc-introduction" aria-labelledby="id"></div>
<div role="doc-noteref" aria-details="id"></div> <div role="doc-noteref" aria-details="id"></div>
<div role="doc-notice" aria-owns="id"></div> <div role="doc-notice" aria-owns="id"></div>
<div role="doc-pagebreak" aria-owns="id"></div> <div role="doc-pagebreak" aria-owns="id"></div>
<div role="doc-pagelist" aria-disabled></div> <div role="doc-pagelist" aria-disabled="true"></div>
<div role="doc-part" aria-relevant="all"></div> <div role="doc-part" aria-relevant="all"></div>
<div role="doc-preface" aria-label=""></div> <div role="doc-preface" aria-label="x"></div>
<div role="doc-prologue" aria-invalid></div> <div role="doc-prologue" aria-invalid="true"></div>
<div role="doc-pullquote" undefined></div> <div role="doc-pullquote" undefined></div>
<div role="doc-qna" aria-errormessage="error"></div> <div role="doc-qna" aria-errormessage="error"></div>
<div role="doc-subtitle" aria-errormessage="error"></div> <div role="doc-subtitle" aria-errormessage="error"></div>
<div role="doc-tip" aria-owns="id"></div> <div role="doc-tip" aria-owns="id"></div>
<div role="doc-toc" aria-expanded></div> <div role="doc-toc" aria-expanded="true"></div>
<!-- input and menuitem have different implicit roles based on different type attributes, and thus different valid and invalid props --> <!-- input and menuitem have different implicit roles based on different type attributes, and thus different valid and invalid props -->
<!-- VALID --> <!-- VALID -->
<input type="text" aria-labelledby="id" /> <!-- implicit role: textbox --> <input type="text" aria-labelledby="id" /> <!-- implicit role: textbox -->
<input type="tel" aria-readonly /> <!-- implicit role: textbox --> <input type="tel" aria-readonly="true" /> <!-- implicit role: textbox -->
<input type="url" aria-errormessage="id" /> <!-- implicit role: textbox --> <input type="url" aria-errormessage="id" /> <!-- implicit role: textbox -->
<input type="email" aria-details="id" /> <!-- implicit role: textbox --> <input type="email" aria-details="id" /> <!-- implicit role: textbox -->
<input type="searchbox" aria-owns="id" /> <!-- implicit role: searchbox --> <input type="searchbox" aria-owns="id" /> <!-- implicit role: searchbox -->
<input type="text" list={['id']} aria-keyshortcuts="key" /> <!-- implicit role: combobox --> <input type="text" list={['id']} aria-keyshortcuts="key" /> <!-- implicit role: combobox -->
<input type="tel" list={['id']} aria-readonly /> <!-- implicit role: combobox --> <input type="tel" list={['id']} aria-readonly="true" /> <!-- implicit role: combobox -->
<input type="url" list={['id']} aria-label="label" /> <!-- implicit role: combobox --> <input type="url" list={['id']} aria-label="label" /> <!-- implicit role: combobox -->
<input type="email" list={['id']} aria-activedescendant="id" /> <!-- implicit role: combobox --> <input type="email" list={['id']} aria-activedescendant="id" /> <!-- implicit role: combobox -->
<input type="search" list={['id']} aria-dropeffect="none" /> <!-- implicit role: combobox --> <input type="search" list={['id']} aria-dropeffect="none" /> <!-- implicit role: combobox -->
<input type="image" alt="some text" aria-pressed /> <!-- implicit role: button --> <input type="image" alt="some text" aria-pressed="true" /> <!-- implicit role: button -->
<input type="reset" aria-expanded /> <!-- implicit role: button --> <input type="reset" aria-expanded="true" /> <!-- implicit role: button -->
<input type="submit" aria-disabled /> <!-- implicit role: button --> <input type="submit" aria-disabled="true" /> <!-- implicit role: button -->
<input type="checkbox" aria-controls="id" /> <!-- implicit role: checkbox --> <input type="checkbox" aria-controls="id" /> <!-- implicit role: checkbox -->
<input type="radio" aria-atomic /> <!-- implicit role: radio --> <input type="radio" aria-atomic="true" /> <!-- implicit role: radio -->
<input type="range" aria-hidden /> <!-- implicit role: slider --> <input type="range" aria-hidden="true" /> <!-- implicit role: slider -->
<menuitem type="command" aria-live="off"></menuitem> <!-- implicit role: menuitem --> <menuitem type="command" aria-live="off"></menuitem> <!-- implicit role: menuitem -->
<menuitem type="checkbox" aria-relevant="all"></menuitem> <!-- implicit role: menuitemcheckbox --> <menuitem type="checkbox" aria-relevant="all"></menuitem> <!-- implicit role: menuitemcheckbox -->
<menuitem type="radio" aria-required></menuitem> <!-- implicit role: menuitemradio --> <menuitem type="radio" aria-required="true"></menuitem> <!-- implicit role: menuitemradio -->

@ -14,7 +14,7 @@
{ {
"code": "a11y_role_supports_aria_props_implicit", "code": "a11y_role_supports_aria_props_implicit",
"end": { "end": {
"column": 18, "column": 25,
"line": 3 "line": 3
}, },
"message": "The attribute 'aria-pressed' is not supported by the role 'link'. This role is implicit on the element `<area>`", "message": "The attribute 'aria-pressed' is not supported by the role 'link'. This role is implicit on the element `<area>`",
@ -38,7 +38,7 @@
{ {
"code": "a11y_role_supports_aria_props_implicit", "code": "a11y_role_supports_aria_props_implicit",
"end": { "end": {
"column": 17, "column": 24,
"line": 5 "line": 5
}, },
"message": "The attribute 'aria-modal' is not supported by the role 'complementary'. This role is implicit on the element `<aside>`", "message": "The attribute 'aria-modal' is not supported by the role 'complementary'. This role is implicit on the element `<aside>`",
@ -50,7 +50,7 @@
{ {
"code": "a11y_role_supports_aria_props_implicit", "code": "a11y_role_supports_aria_props_implicit",
"end": { "end": {
"column": 18, "column": 25,
"line": 6 "line": 6
}, },
"message": "The attribute 'aria-invalid' is not supported by the role 'document'. This role is implicit on the element `<body>`", "message": "The attribute 'aria-invalid' is not supported by the role 'document'. This role is implicit on the element `<body>`",
@ -158,7 +158,7 @@
{ {
"code": "a11y_role_supports_aria_props_implicit", "code": "a11y_role_supports_aria_props_implicit",
"end": { "end": {
"column": 19, "column": 26,
"line": 15 "line": 15
}, },
"message": "The attribute 'aria-disabled' is not supported by the role 'form'. This role is implicit on the element `<form>`", "message": "The attribute 'aria-disabled' is not supported by the role 'form'. This role is implicit on the element `<form>`",
@ -170,7 +170,7 @@
{ {
"code": "a11y_role_supports_aria_props_implicit", "code": "a11y_role_supports_aria_props_implicit",
"end": { "end": {
"column": 17, "column": 24,
"line": 16 "line": 16
}, },
"message": "The attribute 'aria-selected' is not supported by the role 'heading'. This role is implicit on the element `<h1>`", "message": "The attribute 'aria-selected' is not supported by the role 'heading'. This role is implicit on the element `<h1>`",
@ -182,7 +182,7 @@
{ {
"code": "a11y_role_supports_aria_props_implicit", "code": "a11y_role_supports_aria_props_implicit",
"end": { "end": {
"column": 17, "column": 24,
"line": 17 "line": 17
}, },
"message": "The attribute 'aria-selected' is not supported by the role 'heading'. This role is implicit on the element `<h2>`", "message": "The attribute 'aria-selected' is not supported by the role 'heading'. This role is implicit on the element `<h2>`",
@ -194,7 +194,7 @@
{ {
"code": "a11y_role_supports_aria_props_implicit", "code": "a11y_role_supports_aria_props_implicit",
"end": { "end": {
"column": 17, "column": 24,
"line": 18 "line": 18
}, },
"message": "The attribute 'aria-expanded' is not supported by the role 'heading'. This role is implicit on the element `<h3>`", "message": "The attribute 'aria-expanded' is not supported by the role 'heading'. This role is implicit on the element `<h3>`",
@ -218,7 +218,7 @@
{ {
"code": "a11y_role_supports_aria_props_implicit", "code": "a11y_role_supports_aria_props_implicit",
"end": { "end": {
"column": 17, "column": 24,
"line": 20 "line": 20
}, },
"message": "The attribute 'aria-readonly' is not supported by the role 'heading'. This role is implicit on the element `<h5>`", "message": "The attribute 'aria-readonly' is not supported by the role 'heading'. This role is implicit on the element `<h5>`",
@ -242,7 +242,7 @@
{ {
"code": "a11y_role_supports_aria_props_implicit", "code": "a11y_role_supports_aria_props_implicit",
"end": { "end": {
"column": 17, "column": 24,
"line": 22 "line": 22
}, },
"message": "The attribute 'aria-required' is not supported by the role 'separator'. This role is implicit on the element `<hr>`", "message": "The attribute 'aria-required' is not supported by the role 'separator'. This role is implicit on the element `<hr>`",
@ -266,7 +266,7 @@
{ {
"code": "a11y_role_supports_aria_props_implicit", "code": "a11y_role_supports_aria_props_implicit",
"end": { "end": {
"column": 17, "column": 24,
"line": 24 "line": 24
}, },
"message": "The attribute 'aria-required' is not supported by the role 'listitem'. This role is implicit on the element `<li>`", "message": "The attribute 'aria-required' is not supported by the role 'listitem'. This role is implicit on the element `<li>`",
@ -314,7 +314,7 @@
{ {
"code": "a11y_role_supports_aria_props_implicit", "code": "a11y_role_supports_aria_props_implicit",
"end": { "end": {
"column": 22, "column": 23,
"line": 28 "line": 28
}, },
"message": "The attribute 'aria-valuetext' is not supported by the role 'navigation'. This role is implicit on the element `<nav>`", "message": "The attribute 'aria-valuetext' is not supported by the role 'navigation'. This role is implicit on the element `<nav>`",
@ -338,7 +338,7 @@
{ {
"code": "a11y_role_supports_aria_props_implicit", "code": "a11y_role_supports_aria_props_implicit",
"end": { "end": {
"column": 20, "column": 27,
"line": 30 "line": 30
}, },
"message": "The attribute 'aria-invalid' is not supported by the role 'option'. This role is implicit on the element `<option>`", "message": "The attribute 'aria-invalid' is not supported by the role 'option'. This role is implicit on the element `<option>`",
@ -362,7 +362,7 @@
{ {
"code": "a11y_role_supports_aria_props_implicit", "code": "a11y_role_supports_aria_props_implicit",
"end": { "end": {
"column": 22, "column": 29,
"line": 32 "line": 32
}, },
"message": "The attribute 'aria-multiline' is not supported by the role 'status'. This role is implicit on the element `<output>`", "message": "The attribute 'aria-multiline' is not supported by the role 'status'. This role is implicit on the element `<output>`",
@ -386,7 +386,7 @@
{ {
"code": "a11y_role_supports_aria_props_implicit", "code": "a11y_role_supports_aria_props_implicit",
"end": { "end": {
"column": 21, "column": 28,
"line": 34 "line": 34
}, },
"message": "The attribute 'aria-invalid' is not supported by the role 'region'. This role is implicit on the element `<section>`", "message": "The attribute 'aria-invalid' is not supported by the role 'region'. This role is implicit on the element `<section>`",
@ -434,7 +434,7 @@
{ {
"code": "a11y_role_supports_aria_props_implicit", "code": "a11y_role_supports_aria_props_implicit",
"end": { "end": {
"column": 20, "column": 27,
"line": 38 "line": 38
}, },
"message": "The attribute 'aria-required' is not supported by the role 'rowgroup'. This role is implicit on the element `<tfoot>`", "message": "The attribute 'aria-required' is not supported by the role 'rowgroup'. This role is implicit on the element `<tfoot>`",
@ -458,7 +458,7 @@
{ {
"code": "a11y_role_supports_aria_props_implicit", "code": "a11y_role_supports_aria_props_implicit",
"end": { "end": {
"column": 16, "column": 23,
"line": 40 "line": 40
}, },
"message": "The attribute 'aria-pressed' is not supported by the role 'row'. This role is implicit on the element `<tr>`", "message": "The attribute 'aria-pressed' is not supported by the role 'row'. This role is implicit on the element `<tr>`",
@ -470,7 +470,7 @@
{ {
"code": "a11y_role_supports_aria_props_implicit", "code": "a11y_role_supports_aria_props_implicit",
"end": { "end": {
"column": 24, "column": 31,
"line": 41 "line": 41
}, },
"message": "The attribute 'aria-multiselectable' is not supported by the role 'list'. This role is implicit on the element `<ul>`", "message": "The attribute 'aria-multiselectable' is not supported by the role 'list'. This role is implicit on the element `<ul>`",
@ -506,7 +506,7 @@
{ {
"code": "a11y_role_supports_aria_props", "code": "a11y_role_supports_aria_props",
"end": { "end": {
"column": 37, "column": 44,
"line": 45 "line": 45
}, },
"message": "The attribute 'aria-required' is not supported by the role 'application'", "message": "The attribute 'aria-required' is not supported by the role 'application'",
@ -518,7 +518,7 @@
{ {
"code": "a11y_role_supports_aria_props", "code": "a11y_role_supports_aria_props",
"end": { "end": {
"column": 34, "column": 41,
"line": 46 "line": 46
}, },
"message": "The attribute 'aria-multiline' is not supported by the role 'article'", "message": "The attribute 'aria-multiline' is not supported by the role 'article'",
@ -542,7 +542,7 @@
{ {
"code": "a11y_role_supports_aria_props", "code": "a11y_role_supports_aria_props",
"end": { "end": {
"column": 40, "column": 41,
"line": 48 "line": 48
}, },
"message": "The attribute 'aria-valuetext' is not supported by the role 'blockquote'", "message": "The attribute 'aria-valuetext' is not supported by the role 'blockquote'",
@ -578,7 +578,7 @@
{ {
"code": "a11y_role_supports_aria_props", "code": "a11y_role_supports_aria_props",
"end": { "end": {
"column": 31, "column": 38,
"line": 51 "line": 51
}, },
"message": "The attribute 'aria-multiline' is not supported by the role 'cell'", "message": "The attribute 'aria-multiline' is not supported by the role 'cell'",
@ -590,7 +590,7 @@
{ {
"code": "a11y_role_supports_aria_props", "code": "a11y_role_supports_aria_props",
"end": { "end": {
"column": 35, "column": 42,
"line": 52 "line": 52
}, },
"message": "The attribute 'aria-multiline' is not supported by the role 'checkbox'", "message": "The attribute 'aria-multiline' is not supported by the role 'checkbox'",
@ -602,7 +602,7 @@
{ {
"code": "a11y_role_supports_aria_props", "code": "a11y_role_supports_aria_props",
"end": { "end": {
"column": 29, "column": 36,
"line": 53 "line": 53
}, },
"message": "The attribute 'aria-invalid' is not supported by the role 'code'", "message": "The attribute 'aria-invalid' is not supported by the role 'code'",
@ -626,7 +626,7 @@
{ {
"code": "a11y_role_supports_aria_props", "code": "a11y_role_supports_aria_props",
"end": { "end": {
"column": 41, "column": 48,
"line": 55 "line": 55
}, },
"message": "The attribute 'aria-multiselectable' is not supported by the role 'combobox'", "message": "The attribute 'aria-multiselectable' is not supported by the role 'combobox'",
@ -638,7 +638,7 @@
{ {
"code": "a11y_role_supports_aria_props", "code": "a11y_role_supports_aria_props",
"end": { "end": {
"column": 39, "column": 46,
"line": 56 "line": 56
}, },
"message": "The attribute 'aria-readonly' is not supported by the role 'complementary'", "message": "The attribute 'aria-readonly' is not supported by the role 'complementary'",
@ -650,7 +650,7 @@
{ {
"code": "a11y_role_supports_aria_props", "code": "a11y_role_supports_aria_props",
"end": { "end": {
"column": 41, "column": 42,
"line": 57 "line": 57
}, },
"message": "The attribute 'aria-valuetext' is not supported by the role 'contentinfo'", "message": "The attribute 'aria-valuetext' is not supported by the role 'contentinfo'",
@ -662,7 +662,7 @@
{ {
"code": "a11y_role_supports_aria_props", "code": "a11y_role_supports_aria_props",
"end": { "end": {
"column": 37, "column": 44,
"line": 58 "line": 58
}, },
"message": "The attribute 'aria-multiline' is not supported by the role 'definition'", "message": "The attribute 'aria-multiline' is not supported by the role 'definition'",
@ -674,7 +674,7 @@
{ {
"code": "a11y_role_supports_aria_props", "code": "a11y_role_supports_aria_props",
"end": { "end": {
"column": 34, "column": 41,
"line": 59 "line": 59
}, },
"message": "The attribute 'aria-expanded' is not supported by the role 'deletion'", "message": "The attribute 'aria-expanded' is not supported by the role 'deletion'",
@ -686,7 +686,7 @@
{ {
"code": "a11y_role_supports_aria_props", "code": "a11y_role_supports_aria_props",
"end": { "end": {
"column": 33, "column": 40,
"line": 60 "line": 60
}, },
"message": "The attribute 'aria-multiline' is not supported by the role 'dialog'", "message": "The attribute 'aria-multiline' is not supported by the role 'dialog'",
@ -758,7 +758,7 @@
{ {
"code": "a11y_role_supports_aria_props", "code": "a11y_role_supports_aria_props",
"end": { "end": {
"column": 30, "column": 37,
"line": 66 "line": 66
}, },
"message": "The attribute 'aria-readonly' is not supported by the role 'form'", "message": "The attribute 'aria-readonly' is not supported by the role 'form'",
@ -782,7 +782,7 @@
{ {
"code": "a11y_role_supports_aria_props", "code": "a11y_role_supports_aria_props",
"end": { "end": {
"column": 29, "column": 36,
"line": 68 "line": 68
}, },
"message": "The attribute 'aria-checked' is not supported by the role 'grid'", "message": "The attribute 'aria-checked' is not supported by the role 'grid'",
@ -842,7 +842,7 @@
{ {
"code": "a11y_role_supports_aria_props", "code": "a11y_role_supports_aria_props",
"end": { "end": {
"column": 31, "column": 38,
"line": 73 "line": 73
}, },
"message": "The attribute 'aria-multiline' is not supported by the role 'link'", "message": "The attribute 'aria-multiline' is not supported by the role 'link'",
@ -854,7 +854,7 @@
{ {
"code": "a11y_role_supports_aria_props", "code": "a11y_role_supports_aria_props",
"end": { "end": {
"column": 30, "column": 37,
"line": 74 "line": 74
}, },
"message": "The attribute 'aria-selected' is not supported by the role 'list'", "message": "The attribute 'aria-selected' is not supported by the role 'list'",
@ -866,7 +866,7 @@
{ {
"code": "a11y_role_supports_aria_props", "code": "a11y_role_supports_aria_props",
"end": { "end": {
"column": 33, "column": 40,
"line": 75 "line": 75
}, },
"message": "The attribute 'aria-haspopup' is not supported by the role 'listbox'", "message": "The attribute 'aria-haspopup' is not supported by the role 'listbox'",
@ -890,7 +890,7 @@
{ {
"code": "a11y_role_supports_aria_props", "code": "a11y_role_supports_aria_props",
"end": { "end": {
"column": 29, "column": 36,
"line": 77 "line": 77
}, },
"message": "The attribute 'aria-required' is not supported by the role 'log'", "message": "The attribute 'aria-required' is not supported by the role 'log'",
@ -926,7 +926,7 @@
{ {
"code": "a11y_role_supports_aria_props", "code": "a11y_role_supports_aria_props",
"end": { "end": {
"column": 31, "column": 38,
"line": 80 "line": 80
}, },
"message": "The attribute 'aria-multiline' is not supported by the role 'math'", "message": "The attribute 'aria-multiline' is not supported by the role 'math'",
@ -938,7 +938,7 @@
{ {
"code": "a11y_role_supports_aria_props", "code": "a11y_role_supports_aria_props",
"end": { "end": {
"column": 29, "column": 36,
"line": 81 "line": 81
}, },
"message": "The attribute 'aria-checked' is not supported by the role 'menu'", "message": "The attribute 'aria-checked' is not supported by the role 'menu'",
@ -962,7 +962,7 @@
{ {
"code": "a11y_role_supports_aria_props", "code": "a11y_role_supports_aria_props",
"end": { "end": {
"column": 33, "column": 40,
"line": 83 "line": 83
}, },
"message": "The attribute 'aria-checked' is not supported by the role 'menuitem'", "message": "The attribute 'aria-checked' is not supported by the role 'menuitem'",
@ -974,7 +974,7 @@
{ {
"code": "a11y_role_supports_aria_props", "code": "a11y_role_supports_aria_props",
"end": { "end": {
"column": 41, "column": 48,
"line": 84 "line": 84
}, },
"message": "The attribute 'aria-pressed' is not supported by the role 'menuitemcheckbox'", "message": "The attribute 'aria-pressed' is not supported by the role 'menuitemcheckbox'",
@ -998,7 +998,7 @@
{ {
"code": "a11y_role_supports_aria_props", "code": "a11y_role_supports_aria_props",
"end": { "end": {
"column": 49, "column": 56,
"line": 86 "line": 86
}, },
"message": "The attribute 'aria-haspopup' is not supported by the role 'meter'", "message": "The attribute 'aria-haspopup' is not supported by the role 'meter'",
@ -1010,7 +1010,7 @@
{ {
"code": "a11y_role_supports_aria_props", "code": "a11y_role_supports_aria_props",
"end": { "end": {
"column": 36, "column": 43,
"line": 87 "line": 87
}, },
"message": "The attribute 'aria-expanded' is not supported by the role 'navigation'", "message": "The attribute 'aria-expanded' is not supported by the role 'navigation'",
@ -1022,7 +1022,7 @@
{ {
"code": "a11y_role_supports_aria_props", "code": "a11y_role_supports_aria_props",
"end": { "end": {
"column": 36, "column": 37,
"line": 88 "line": 88
}, },
"message": "The attribute 'aria-placeholder' is not supported by the role 'none'", "message": "The attribute 'aria-placeholder' is not supported by the role 'none'",
@ -1034,7 +1034,7 @@
{ {
"code": "a11y_role_supports_aria_props", "code": "a11y_role_supports_aria_props",
"end": { "end": {
"column": 27, "column": 34,
"line": 89 "line": 89
}, },
"message": "The attribute 'aria-modal' is not supported by the role 'note'", "message": "The attribute 'aria-modal' is not supported by the role 'note'",
@ -1046,12 +1046,12 @@
{ {
"code": "a11y_role_supports_aria_props", "code": "a11y_role_supports_aria_props",
"end": { "end": {
"column": 50, "column": 57,
"line": 90 "line": 90
}, },
"message": "The attribute 'aria-valuemax' is not supported by the role 'option'", "message": "The attribute 'aria-valuemax' is not supported by the role 'option'",
"start": { "start": {
"column": 33, "column": 40,
"line": 90 "line": 90
} }
}, },
@ -1070,7 +1070,7 @@
{ {
"code": "a11y_role_supports_aria_props", "code": "a11y_role_supports_aria_props",
"end": { "end": {
"column": 38, "column": 45,
"line": 92 "line": 92
}, },
"message": "The attribute 'aria-disabled' is not supported by the role 'presentation'", "message": "The attribute 'aria-disabled' is not supported by the role 'presentation'",
@ -1082,7 +1082,7 @@
{ {
"code": "a11y_role_supports_aria_props", "code": "a11y_role_supports_aria_props",
"end": { "end": {
"column": 37, "column": 44,
"line": 93 "line": 93
}, },
"message": "The attribute 'aria-expanded' is not supported by the role 'progressbar'", "message": "The attribute 'aria-expanded' is not supported by the role 'progressbar'",
@ -1094,12 +1094,12 @@
{ {
"code": "a11y_role_supports_aria_props", "code": "a11y_role_supports_aria_props",
"end": { "end": {
"column": 48, "column": 55,
"line": 94 "line": 94
}, },
"message": "The attribute 'aria-rowindex' is not supported by the role 'radio'", "message": "The attribute 'aria-rowindex' is not supported by the role 'radio'",
"start": { "start": {
"column": 31, "column": 38,
"line": 94 "line": 94
} }
}, },
@ -1130,7 +1130,7 @@
{ {
"code": "a11y_role_supports_aria_props", "code": "a11y_role_supports_aria_props",
"end": { "end": {
"column": 29, "column": 36,
"line": 97 "line": 97
}, },
"message": "The attribute 'aria-required' is not supported by the role 'row'", "message": "The attribute 'aria-required' is not supported by the role 'row'",
@ -1142,7 +1142,7 @@
{ {
"code": "a11y_role_supports_aria_props", "code": "a11y_role_supports_aria_props",
"end": { "end": {
"column": 34, "column": 41,
"line": 98 "line": 98
}, },
"message": "The attribute 'aria-expanded' is not supported by the role 'rowgroup'", "message": "The attribute 'aria-expanded' is not supported by the role 'rowgroup'",
@ -1214,7 +1214,7 @@
{ {
"code": "a11y_role_supports_aria_props", "code": "a11y_role_supports_aria_props",
"end": { "end": {
"column": 56, "column": 57,
"line": 104 "line": 104
}, },
"message": "The attribute 'aria-placeholder' is not supported by the role 'slider'", "message": "The attribute 'aria-placeholder' is not supported by the role 'slider'",
@ -1286,19 +1286,19 @@
{ {
"code": "a11y_role_supports_aria_props", "code": "a11y_role_supports_aria_props",
"end": { "end": {
"column": 49, "column": 56,
"line": 110 "line": 110
}, },
"message": "The attribute 'aria-valuenow' is not supported by the role 'switch'", "message": "The attribute 'aria-valuenow' is not supported by the role 'switch'",
"start": { "start": {
"column": 32, "column": 39,
"line": 110 "line": 110
} }
}, },
{ {
"code": "a11y_role_supports_aria_props", "code": "a11y_role_supports_aria_props",
"end": { "end": {
"column": 29, "column": 36,
"line": 111 "line": 111
}, },
"message": "The attribute 'aria-required' is not supported by the role 'tab'", "message": "The attribute 'aria-required' is not supported by the role 'tab'",
@ -1310,7 +1310,7 @@
{ {
"code": "a11y_role_supports_aria_props", "code": "a11y_role_supports_aria_props",
"end": { "end": {
"column": 28, "column": 35,
"line": 112 "line": 112
}, },
"message": "The attribute 'aria-modal' is not supported by the role 'table'", "message": "The attribute 'aria-modal' is not supported by the role 'table'",
@ -1334,7 +1334,7 @@
{ {
"code": "a11y_role_supports_aria_props", "code": "a11y_role_supports_aria_props",
"end": { "end": {
"column": 41, "column": 48,
"line": 114 "line": 114
}, },
"message": "The attribute 'aria-multiselectable' is not supported by the role 'tabpanel'", "message": "The attribute 'aria-multiselectable' is not supported by the role 'tabpanel'",
@ -1370,7 +1370,7 @@
{ {
"code": "a11y_role_supports_aria_props", "code": "a11y_role_supports_aria_props",
"end": { "end": {
"column": 30, "column": 37,
"line": 117 "line": 117
}, },
"message": "The attribute 'aria-selected' is not supported by the role 'time'", "message": "The attribute 'aria-selected' is not supported by the role 'time'",
@ -1394,7 +1394,7 @@
{ {
"code": "a11y_role_supports_aria_props", "code": "a11y_role_supports_aria_props",
"end": { "end": {
"column": 37, "column": 38,
"line": 119 "line": 119
}, },
"message": "The attribute 'aria-valuetext' is not supported by the role 'toolbar'", "message": "The attribute 'aria-valuetext' is not supported by the role 'toolbar'",
@ -1406,7 +1406,7 @@
{ {
"code": "a11y_role_supports_aria_props", "code": "a11y_role_supports_aria_props",
"end": { "end": {
"column": 34, "column": 41,
"line": 120 "line": 120
}, },
"message": "The attribute 'aria-multiline' is not supported by the role 'tooltip'", "message": "The attribute 'aria-multiline' is not supported by the role 'tooltip'",
@ -1418,7 +1418,7 @@
{ {
"code": "a11y_role_supports_aria_props", "code": "a11y_role_supports_aria_props",
"end": { "end": {
"column": 30, "column": 37,
"line": 121 "line": 121
}, },
"message": "The attribute 'aria-expanded' is not supported by the role 'tree'", "message": "The attribute 'aria-expanded' is not supported by the role 'tree'",
@ -1442,12 +1442,12 @@
{ {
"code": "a11y_role_supports_aria_props", "code": "a11y_role_supports_aria_props",
"end": { "end": {
"column": 61, "column": 68,
"line": 123 "line": 123
}, },
"message": "The attribute 'aria-activedescendant' is not supported by the role 'treeitem'", "message": "The attribute 'aria-activedescendant' is not supported by the role 'treeitem'",
"start": { "start": {
"column": 35, "column": 42,
"line": 123 "line": 123
} }
}, },
@ -1478,7 +1478,7 @@
{ {
"code": "a11y_role_supports_aria_props", "code": "a11y_role_supports_aria_props",
"end": { "end": {
"column": 36, "column": 43,
"line": 126 "line": 126
}, },
"message": "The attribute 'aria-modal' is not supported by the role 'doc-afterword'", "message": "The attribute 'aria-modal' is not supported by the role 'doc-afterword'",
@ -1538,7 +1538,7 @@
{ {
"code": "a11y_role_supports_aria_props", "code": "a11y_role_supports_aria_props",
"end": { "end": {
"column": 38, "column": 45,
"line": 131 "line": 131
}, },
"message": "The attribute 'aria-checked' is not supported by the role 'doc-biblioref'", "message": "The attribute 'aria-checked' is not supported by the role 'doc-biblioref'",
@ -1550,7 +1550,7 @@
{ {
"code": "a11y_role_supports_aria_props", "code": "a11y_role_supports_aria_props",
"end": { "end": {
"column": 37, "column": 44,
"line": 132 "line": 132
}, },
"message": "The attribute 'aria-required' is not supported by the role 'doc-chapter'", "message": "The attribute 'aria-required' is not supported by the role 'doc-chapter'",
@ -1586,7 +1586,7 @@
{ {
"code": "a11y_role_supports_aria_props", "code": "a11y_role_supports_aria_props",
"end": { "end": {
"column": 32, "column": 39,
"line": 135 "line": 135
}, },
"message": "The attribute 'aria-modal' is not supported by the role 'doc-cover'", "message": "The attribute 'aria-modal' is not supported by the role 'doc-cover'",
@ -1598,7 +1598,7 @@
{ {
"code": "a11y_role_supports_aria_props", "code": "a11y_role_supports_aria_props",
"end": { "end": {
"column": 36, "column": 43,
"line": 136 "line": 136
}, },
"message": "The attribute 'aria-selected' is not supported by the role 'doc-credit'", "message": "The attribute 'aria-selected' is not supported by the role 'doc-credit'",
@ -1634,7 +1634,7 @@
{ {
"code": "a11y_role_supports_aria_props", "code": "a11y_role_supports_aria_props",
"end": { "end": {
"column": 36, "column": 43,
"line": 139 "line": 139
}, },
"message": "The attribute 'aria-checked' is not supported by the role 'doc-endnote'", "message": "The attribute 'aria-checked' is not supported by the role 'doc-endnote'",
@ -1658,7 +1658,7 @@
{ {
"code": "a11y_role_supports_aria_props", "code": "a11y_role_supports_aria_props",
"end": { "end": {
"column": 39, "column": 46,
"line": 141 "line": 141
}, },
"message": "The attribute 'aria-multiline' is not supported by the role 'doc-epigraph'", "message": "The attribute 'aria-multiline' is not supported by the role 'doc-epigraph'",
@ -1694,7 +1694,7 @@
{ {
"code": "a11y_role_supports_aria_props", "code": "a11y_role_supports_aria_props",
"end": { "end": {
"column": 44, "column": 51,
"line": 144 "line": 144
}, },
"message": "The attribute 'aria-multiselectable' is not supported by the role 'doc-example'", "message": "The attribute 'aria-multiselectable' is not supported by the role 'doc-example'",
@ -1730,7 +1730,7 @@
{ {
"code": "a11y_role_supports_aria_props", "code": "a11y_role_supports_aria_props",
"end": { "end": {
"column": 42, "column": 43,
"line": 147 "line": 147
}, },
"message": "The attribute 'aria-valuetext' is not supported by the role 'doc-glossary'", "message": "The attribute 'aria-valuetext' is not supported by the role 'doc-glossary'",
@ -1742,7 +1742,7 @@
{ {
"code": "a11y_role_supports_aria_props", "code": "a11y_role_supports_aria_props",
"end": { "end": {
"column": 44, "column": 45,
"line": 148 "line": 148
}, },
"message": "The attribute 'aria-placeholder' is not supported by the role 'doc-glossref'", "message": "The attribute 'aria-placeholder' is not supported by the role 'doc-glossref'",
@ -1766,7 +1766,7 @@
{ {
"code": "a11y_role_supports_aria_props", "code": "a11y_role_supports_aria_props",
"end": { "end": {
"column": 41, "column": 48,
"line": 150 "line": 150
}, },
"message": "The attribute 'aria-pressed' is not supported by the role 'doc-introduction'", "message": "The attribute 'aria-pressed' is not supported by the role 'doc-introduction'",
@ -1790,7 +1790,7 @@
{ {
"code": "a11y_role_supports_aria_props", "code": "a11y_role_supports_aria_props",
"end": { "end": {
"column": 36, "column": 43,
"line": 152 "line": 152
}, },
"message": "The attribute 'aria-selected' is not supported by the role 'doc-notice'", "message": "The attribute 'aria-selected' is not supported by the role 'doc-notice'",
@ -1814,7 +1814,7 @@
{ {
"code": "a11y_role_supports_aria_props", "code": "a11y_role_supports_aria_props",
"end": { "end": {
"column": 35, "column": 42,
"line": 154 "line": 154
}, },
"message": "The attribute 'aria-modal' is not supported by the role 'doc-pagelist'", "message": "The attribute 'aria-modal' is not supported by the role 'doc-pagelist'",
@ -1850,7 +1850,7 @@
{ {
"code": "a11y_role_supports_aria_props", "code": "a11y_role_supports_aria_props",
"end": { "end": {
"column": 38, "column": 45,
"line": 157 "line": 157
}, },
"message": "The attribute 'aria-required' is not supported by the role 'doc-prologue'", "message": "The attribute 'aria-required' is not supported by the role 'doc-prologue'",
@ -1934,7 +1934,7 @@
{ {
"code": "a11y_role_supports_aria_props_implicit", "code": "a11y_role_supports_aria_props_implicit",
"end": { "end": {
"column": 30, "column": 37,
"line": 167 "line": 167
}, },
"message": "The attribute 'aria-pressed' is not supported by the role 'textbox'. This role is implicit on the element `<input>`", "message": "The attribute 'aria-pressed' is not supported by the role 'textbox'. This role is implicit on the element `<input>`",
@ -1958,7 +1958,7 @@
{ {
"code": "a11y_role_supports_aria_props_implicit", "code": "a11y_role_supports_aria_props_implicit",
"end": { "end": {
"column": 32, "column": 39,
"line": 169 "line": 169
}, },
"message": "The attribute 'aria-pressed' is not supported by the role 'textbox'. This role is implicit on the element `<input>`", "message": "The attribute 'aria-pressed' is not supported by the role 'textbox'. This role is implicit on the element `<input>`",
@ -2018,7 +2018,7 @@
{ {
"code": "a11y_role_supports_aria_props_implicit", "code": "a11y_role_supports_aria_props_implicit",
"end": { "end": {
"column": 44, "column": 51,
"line": 174 "line": 174
}, },
"message": "The attribute 'aria-modal' is not supported by the role 'combobox'. This role is implicit on the element `<input>`", "message": "The attribute 'aria-modal' is not supported by the role 'combobox'. This role is implicit on the element `<input>`",
@ -2054,7 +2054,7 @@
{ {
"code": "a11y_role_supports_aria_props_implicit", "code": "a11y_role_supports_aria_props_implicit",
"end": { "end": {
"column": 30, "column": 37,
"line": 177 "line": 177
}, },
"message": "The attribute 'aria-modal' is not supported by the role 'button'. This role is implicit on the element `<input>`", "message": "The attribute 'aria-modal' is not supported by the role 'button'. This role is implicit on the element `<input>`",
@ -2102,7 +2102,7 @@
{ {
"code": "a11y_role_supports_aria_props_implicit", "code": "a11y_role_supports_aria_props_implicit",
"end": { "end": {
"column": 32, "column": 39,
"line": 181 "line": 181
}, },
"message": "The attribute 'aria-checked' is not supported by the role 'slider'. This role is implicit on the element `<input>`", "message": "The attribute 'aria-checked' is not supported by the role 'slider'. This role is implicit on the element `<input>`",
@ -2146,5 +2146,17 @@
"column": 23, "column": 23,
"line": 184 "line": 184
} }
},
{
"code": "a11y_incorrect_aria_attribute_type_integer",
"end": {
"column": 33,
"line": 256
},
"message": "The value of 'aria-level' must be an integer",
"start": {
"column": 20,
"line": 256
}
} }
] ]

Loading…
Cancel
Save