lighthouse 10.4.0-dev.20230724 → 10.4.0-dev.20230726

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,10 @@
1
+ export default ARIAAllowedRole;
2
+ declare class ARIAAllowedRole extends AxeAudit {
3
+ }
4
+ export namespace UIStrings {
5
+ const title: string;
6
+ const failureTitle: string;
7
+ const description: string;
8
+ }
9
+ import AxeAudit from './axe-audit.js';
10
+ //# sourceMappingURL=aria-allowed-role.d.ts.map
@@ -0,0 +1,46 @@
1
+ /**
2
+ * @license Copyright 2023 The Lighthouse Authors. All Rights Reserved.
3
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
4
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
5
+ */
6
+
7
+ /**
8
+ * @fileoverview Ensures ARIA attributes are appropriate for an element's role.
9
+ * See base class in axe-audit.js for audit() implementation.
10
+ */
11
+
12
+ import AxeAudit from './axe-audit.js';
13
+ import * as i18n from '../../lib/i18n/i18n.js';
14
+
15
+ const UIStrings = {
16
+ /** Title of an accesibility audit that evaluates if the ARIA role attributes are valid for the HTML element. This title is descriptive of the successful state and is shown to users when no user action is required. */
17
+ title: 'Values assigned to `role=""` are valid ARIA roles.',
18
+ /** Title of an accesibility audit that evaluates if the ARIA role attributes are valid for the HTML element. This title is descriptive of the failing state and is shown to users when there is a failure that needs to be addressed. */
19
+ failureTitle: 'Values assigned to `role=""` are not valid ARIA roles.',
20
+ /** Description of a Lighthouse audit that tells the user *why* they should try to pass. This is displayed after a user expands the section to see more. No character length limits. The last sentence starting with 'Learn' becomes link text to additional documentation. */
21
+ description: 'ARIA `role`s enable assistive technologies to know the role of each element on ' +
22
+ 'the web page. If the `role` values are misspelled, not existing ARIA `role` values, or ' +
23
+ 'abstract roles, then the purpose of the element will not be communicated to users of ' +
24
+ 'assistive technologies. ' +
25
+ '[Learn more about ARIA roles](https://dequeuniversity.com/rules/axe/4.7/aria-allowed-roles).',
26
+ };
27
+
28
+ const str_ = i18n.createIcuMessageFn(import.meta.url, UIStrings);
29
+
30
+ class ARIAAllowedRole extends AxeAudit {
31
+ /**
32
+ * @return {LH.Audit.Meta}
33
+ */
34
+ static get meta() {
35
+ return {
36
+ id: 'aria-allowed-role',
37
+ title: str_(UIStrings.title),
38
+ failureTitle: str_(UIStrings.failureTitle),
39
+ description: str_(UIStrings.description),
40
+ requiredArtifacts: ['Accessibility'],
41
+ };
42
+ }
43
+ }
44
+
45
+ export default ARIAAllowedRole;
46
+ export {UIStrings};
@@ -0,0 +1,10 @@
1
+ export default ImageRedundantAlt;
2
+ declare class ImageRedundantAlt extends AxeAudit {
3
+ }
4
+ export namespace UIStrings {
5
+ const title: string;
6
+ const failureTitle: string;
7
+ const description: string;
8
+ }
9
+ import AxeAudit from './axe-audit.js';
10
+ //# sourceMappingURL=image-redundant-alt.d.ts.map
@@ -0,0 +1,45 @@
1
+ /**
2
+ * @license Copyright 2023 The Lighthouse Authors. All Rights Reserved.
3
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
4
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
5
+ */
6
+
7
+ /**
8
+ * @fileoverview Ensures <img> elements have alternative text that is not repeated text.
9
+ * See base class in axe-audit.js for audit() implementation.
10
+ */
11
+
12
+ import AxeAudit from './axe-audit.js';
13
+ import * as i18n from '../../lib/i18n/i18n.js';
14
+
15
+ const UIStrings = {
16
+ /** Title of an accesibility audit that evaluates if all image elements have the alt HTML attribute that is not redundant. This title is descriptive of the successful state and is shown to users when no user action is required. */
17
+ title: 'Image elements do not have `[alt]` attributes that are redundant text.',
18
+ /** Title of an accesibility audit that evaluates if all image elements have the alt HTML attribute that is not redundant. This title is descriptive of the failing state and is shown to users when there is a failure that needs to be addressed. */
19
+ failureTitle: 'Image elements have `[alt]` attributes that are redundant text.',
20
+ /** Description of a Lighthouse audit that tells the user *why* they should try to pass. This is displayed after a user expands the section to see more. No character length limits. The last sentence starting with 'Learn' becomes link text to additional documentation. */
21
+ description: 'Informative elements should aim for short, descriptive alternative text. ' +
22
+ 'Alternative text that is exactly the same as the text adjacent to the link or image is ' +
23
+ 'potentially confusing for screen reader users, because the text will be read twice. ' +
24
+ '[Learn more about the `alt` attribute](https://dequeuniversity.com/rules/axe/4.7/image-redundant-alt).',
25
+ };
26
+
27
+ const str_ = i18n.createIcuMessageFn(import.meta.url, UIStrings);
28
+
29
+ class ImageRedundantAlt extends AxeAudit {
30
+ /**
31
+ * @return {LH.Audit.Meta}
32
+ */
33
+ static get meta() {
34
+ return {
35
+ id: 'image-redundant-alt',
36
+ title: str_(UIStrings.title),
37
+ failureTitle: str_(UIStrings.failureTitle),
38
+ description: str_(UIStrings.description),
39
+ requiredArtifacts: ['Accessibility'],
40
+ };
41
+ }
42
+ }
43
+
44
+ export default ImageRedundantAlt;
45
+ export {UIStrings};
@@ -0,0 +1,10 @@
1
+ export default LabelContentNameMismatch;
2
+ declare class LabelContentNameMismatch extends AxeAudit {
3
+ }
4
+ export namespace UIStrings {
5
+ const title: string;
6
+ const failureTitle: string;
7
+ const description: string;
8
+ }
9
+ import AxeAudit from './axe-audit.js';
10
+ //# sourceMappingURL=label-content-name-mismatch.d.ts.map
@@ -0,0 +1,44 @@
1
+ /**
2
+ * @license Copyright 2023 The Lighthouse Authors. All Rights Reserved.
3
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
4
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
5
+ */
6
+
7
+ /**
8
+ * @fileoverview Ensure that interactive elements labeled with their content have their visible label as part of their accessible name.
9
+ * See base class in axe-audit.js for audit() implementation.
10
+ */
11
+
12
+ import AxeAudit from './axe-audit.js';
13
+ import * as i18n from '../../lib/i18n/i18n.js';
14
+
15
+ const UIStrings = {
16
+ /** Title of an accesibility audit that evaluates if elements labeled through their content have their visible text as part of their accessible name. This title is descriptive of the successful state and is shown to users when no user action is required. */
17
+ title: 'Elements with visible text labels have matching accessible names.',
18
+ /** Title of an accesibility audit that evaluates if elements labeled through their content have their visible text as part of their accessible name. This title is descriptive of the failing state and is shown to users when there is a failure that needs to be addressed. */
19
+ failureTitle: 'Elements with visible text labels do not have matching accessible names.',
20
+ /** Description of a Lighthouse audit that tells the user *why* they should try to pass. This is displayed after a user expands the section to see more. No character length limits. The last sentence starting with 'Learn' becomes link text to additional documentation. */
21
+ description: 'Visible text labels that do not match the accessible name can result in a ' +
22
+ 'confusing experience for screen reader users. ' +
23
+ '[Learn more about accessible names](https://dequeuniversity.com/rules/axe/4.7/label-content-name-mismatch).',
24
+ };
25
+
26
+ const str_ = i18n.createIcuMessageFn(import.meta.url, UIStrings);
27
+
28
+ class LabelContentNameMismatch extends AxeAudit {
29
+ /**
30
+ * @return {LH.Audit.Meta}
31
+ */
32
+ static get meta() {
33
+ return {
34
+ id: 'label-content-name-mismatch',
35
+ title: str_(UIStrings.title),
36
+ failureTitle: str_(UIStrings.failureTitle),
37
+ description: str_(UIStrings.description),
38
+ requiredArtifacts: ['Accessibility'],
39
+ };
40
+ }
41
+ }
42
+
43
+ export default LabelContentNameMismatch;
44
+ export {UIStrings};
@@ -0,0 +1,10 @@
1
+ export default SkipLink;
2
+ declare class SkipLink extends AxeAudit {
3
+ }
4
+ export namespace UIStrings {
5
+ const title: string;
6
+ const failureTitle: string;
7
+ const description: string;
8
+ }
9
+ import AxeAudit from './axe-audit.js';
10
+ //# sourceMappingURL=skip-link.d.ts.map
@@ -0,0 +1,43 @@
1
+ /**
2
+ * @license Copyright 2023 The Lighthouse Authors. All Rights Reserved.
3
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
4
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
5
+ */
6
+
7
+ /**
8
+ * @fileoverview Ensures that the skip-link target is focusable.
9
+ * See base class in axe-audit.js for audit() implementation.
10
+ */
11
+
12
+ import AxeAudit from './axe-audit.js';
13
+ import * as i18n from '../../lib/i18n/i18n.js';
14
+
15
+ const UIStrings = {
16
+ /** Title of an accesibility audit that evaluates if the skip link is focusable. This title is descriptive of the successful state and is shown to users when no user action is required. */
17
+ title: 'Skip links are focusable.',
18
+ /** Title of an accesibility audit that evaluates if the skip link is focusable. This title is descriptive of the failing state and is shown to users when there is a failure that needs to be addressed. */
19
+ failureTitle: 'Skip links are not focusable.',
20
+ /** Description of a Lighthouse audit that tells the user *why* they should try to pass. This is displayed after a user expands the section to see more. No character length limits. The last sentence starting with 'Learn' becomes link text to additional documentation. */
21
+ description: 'Including a skip link can help users skip to the main content to save time. ' +
22
+ '[Learn more about skip links](https://dequeuniversity.com/rules/axe/4.7/skip-link).',
23
+ };
24
+
25
+ const str_ = i18n.createIcuMessageFn(import.meta.url, UIStrings);
26
+
27
+ class SkipLink extends AxeAudit {
28
+ /**
29
+ * @return {LH.Audit.Meta}
30
+ */
31
+ static get meta() {
32
+ return {
33
+ id: 'skip-link',
34
+ title: str_(UIStrings.title),
35
+ failureTitle: str_(UIStrings.failureTitle),
36
+ description: str_(UIStrings.description),
37
+ requiredArtifacts: ['Accessibility'],
38
+ };
39
+ }
40
+ }
41
+
42
+ export default SkipLink;
43
+ export {UIStrings};
@@ -0,0 +1,10 @@
1
+ export default TableDuplicateName;
2
+ declare class TableDuplicateName extends AxeAudit {
3
+ }
4
+ export namespace UIStrings {
5
+ const title: string;
6
+ const failureTitle: string;
7
+ const description: string;
8
+ }
9
+ import AxeAudit from './axe-audit.js';
10
+ //# sourceMappingURL=table-duplicate-name.d.ts.map
@@ -0,0 +1,44 @@
1
+ /**
2
+ * @license Copyright 2023 The Lighthouse Authors. All Rights Reserved.
3
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
4
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
5
+ */
6
+
7
+ /**
8
+ * @fileoverview Ensure that table summary and caption have different content.
9
+ * See base class in axe-audit.js for audit() implementation.
10
+ */
11
+
12
+ import AxeAudit from './axe-audit.js';
13
+ import * as i18n from '../../lib/i18n/i18n.js';
14
+
15
+ const UIStrings = {
16
+ /** Title of an accesibility audit that evaluates if tables have different content in the summary attribute and caption element. This title is descriptive of the successful state and is shown to users when no user action is required. */
17
+ title: 'Tables have different content in the summary attribute and `<caption>`.',
18
+ /** Title of an accesibility audit that evaluates if tables have different content in the summary attribute and caption element. This title is descriptive of the failing state and is shown to users when there is a failure that needs to be addressed. */
19
+ failureTitle: 'Tables have the same content in the summary attribute and `<caption>.`',
20
+ /** Description of a Lighthouse audit that tells the user *why* they should try to pass. This is displayed after a user expands the section to see more. No character length limits. The last sentence starting with 'Learn' becomes link text to additional documentation. */
21
+ description: 'The summary attribute should describe the table structure, while `<caption>` ' +
22
+ 'should have the onscreen title. Accurate table mark-up helps users of screen readers. ' +
23
+ '[Learn more about summary and caption](https://dequeuniversity.com/rules/axe/4.7/table-duplicate-name).',
24
+ };
25
+
26
+ const str_ = i18n.createIcuMessageFn(import.meta.url, UIStrings);
27
+
28
+ class TableDuplicateName extends AxeAudit {
29
+ /**
30
+ * @return {LH.Audit.Meta}
31
+ */
32
+ static get meta() {
33
+ return {
34
+ id: 'table-duplicate-name',
35
+ title: str_(UIStrings.title),
36
+ failureTitle: str_(UIStrings.failureTitle),
37
+ description: str_(UIStrings.description),
38
+ requiredArtifacts: ['Accessibility'],
39
+ };
40
+ }
41
+ }
42
+
43
+ export default TableDuplicateName;
44
+ export {UIStrings};
@@ -19,7 +19,7 @@ const UIStrings = {
19
19
  failureTitle: 'Touch targets do not have sufficient size or spacing.',
20
20
  /** Description of a Lighthouse audit that tells the user *why* they should try to pass. This is displayed after a user expands the section to see more. No character length limits. The last sentence starting with 'Learn' becomes link text to additional documentation. */
21
21
  description: 'Touch targets with sufficient size and spacing help users who may have ' +
22
- 'difficulty targeting small controls activate the targets. ' +
22
+ 'difficulty targeting small controls to activate the targets. ' +
23
23
  '[Learn more about touch targets](https://dequeuniversity.com/rules/axe/4.7/target-size).',
24
24
  };
25
25
 
@@ -234,6 +234,7 @@ const defaultConfig = {
234
234
  'manual/pwa-each-page-has-url',
235
235
  'accessibility/accesskeys',
236
236
  'accessibility/aria-allowed-attr',
237
+ 'accessibility/aria-allowed-role',
237
238
  'accessibility/aria-command-name',
238
239
  'accessibility/aria-dialog-name',
239
240
  'accessibility/aria-hidden-body',
@@ -268,8 +269,10 @@ const defaultConfig = {
268
269
  'accessibility/html-xml-lang-mismatch',
269
270
  'accessibility/identical-links-same-purpose',
270
271
  'accessibility/image-alt',
272
+ 'accessibility/image-redundant-alt',
271
273
  'accessibility/input-button-name',
272
274
  'accessibility/input-image-alt',
275
+ 'accessibility/label-content-name-mismatch',
273
276
  'accessibility/label',
274
277
  'accessibility/landmark-one-main',
275
278
  'accessibility/link-name',
@@ -280,7 +283,9 @@ const defaultConfig = {
280
283
  'accessibility/meta-viewport',
281
284
  'accessibility/object-alt',
282
285
  'accessibility/select-name',
286
+ 'accessibility/skip-link',
283
287
  'accessibility/tabindex',
288
+ 'accessibility/table-duplicate-name',
284
289
  'accessibility/table-fake-caption',
285
290
  'accessibility/target-size',
286
291
  'accessibility/td-has-header',
@@ -505,60 +510,65 @@ const defaultConfig = {
505
510
  supportedModes: ['navigation', 'snapshot'],
506
511
  // Audit weights are meant to match the aXe scoring system of
507
512
  // minor, moderate, serious, and critical.
508
- // See the audits listed at dequeuniversity.com/rules/axe/4.1.
513
+ // See the audits listed at dequeuniversity.com/rules/axe/4.7.
509
514
  // Click on an audit and check the right hand column to see its severity.
510
515
  auditRefs: [
511
- {id: 'accesskeys', weight: 3, group: 'a11y-navigation'},
516
+ {id: 'accesskeys', weight: 7, group: 'a11y-navigation'},
512
517
  {id: 'aria-allowed-attr', weight: 10, group: 'a11y-aria'},
513
- {id: 'aria-command-name', weight: 3, group: 'a11y-aria'},
514
- {id: 'aria-dialog-name', weight: 3, group: 'a11y-aria'},
518
+ {id: 'aria-allowed-role', weight: 1, group: 'a11y-aria'},
519
+ {id: 'aria-command-name', weight: 7, group: 'a11y-aria'},
520
+ {id: 'aria-dialog-name', weight: 7, group: 'a11y-aria'},
515
521
  {id: 'aria-hidden-body', weight: 10, group: 'a11y-aria'},
516
- {id: 'aria-hidden-focus', weight: 3, group: 'a11y-aria'},
517
- {id: 'aria-input-field-name', weight: 3, group: 'a11y-aria'},
518
- {id: 'aria-meter-name', weight: 3, group: 'a11y-aria'},
519
- {id: 'aria-progressbar-name', weight: 3, group: 'a11y-aria'},
522
+ {id: 'aria-hidden-focus', weight: 7, group: 'a11y-aria'},
523
+ {id: 'aria-input-field-name', weight: 7, group: 'a11y-aria'},
524
+ {id: 'aria-meter-name', weight: 7, group: 'a11y-aria'},
525
+ {id: 'aria-progressbar-name', weight: 7, group: 'a11y-aria'},
520
526
  {id: 'aria-required-attr', weight: 10, group: 'a11y-aria'},
521
527
  {id: 'aria-required-children', weight: 10, group: 'a11y-aria'},
522
528
  {id: 'aria-required-parent', weight: 10, group: 'a11y-aria'},
523
- {id: 'aria-roles', weight: 10, group: 'a11y-aria'},
524
- {id: 'aria-text', weight: 3, group: 'a11y-aria'},
525
- {id: 'aria-toggle-field-name', weight: 3, group: 'a11y-aria'},
526
- {id: 'aria-tooltip-name', weight: 3, group: 'a11y-aria'},
527
- {id: 'aria-treeitem-name', weight: 3, group: 'a11y-aria'},
529
+ {id: 'aria-roles', weight: 7, group: 'a11y-aria'},
530
+ {id: 'aria-text', weight: 7, group: 'a11y-aria'},
531
+ {id: 'aria-toggle-field-name', weight: 7, group: 'a11y-aria'},
532
+ {id: 'aria-tooltip-name', weight: 7, group: 'a11y-aria'},
533
+ {id: 'aria-treeitem-name', weight: 7, group: 'a11y-aria'},
528
534
  {id: 'aria-valid-attr-value', weight: 10, group: 'a11y-aria'},
529
535
  {id: 'aria-valid-attr', weight: 10, group: 'a11y-aria'},
530
536
  {id: 'button-name', weight: 10, group: 'a11y-names-labels'},
531
- {id: 'bypass', weight: 3, group: 'a11y-navigation'},
532
- {id: 'color-contrast', weight: 3, group: 'a11y-color-contrast'},
533
- {id: 'definition-list', weight: 3, group: 'a11y-tables-lists'},
534
- {id: 'dlitem', weight: 3, group: 'a11y-tables-lists'},
535
- {id: 'document-title', weight: 3, group: 'a11y-names-labels'},
536
- {id: 'duplicate-id-active', weight: 3, group: 'a11y-navigation'},
537
+ {id: 'bypass', weight: 7, group: 'a11y-navigation'},
538
+ {id: 'color-contrast', weight: 7, group: 'a11y-color-contrast'},
539
+ {id: 'definition-list', weight: 7, group: 'a11y-tables-lists'},
540
+ {id: 'dlitem', weight: 7, group: 'a11y-tables-lists'},
541
+ {id: 'document-title', weight: 7, group: 'a11y-names-labels'},
542
+ {id: 'duplicate-id-active', weight: 7, group: 'a11y-navigation'},
537
543
  {id: 'duplicate-id-aria', weight: 10, group: 'a11y-aria'},
538
- {id: 'form-field-multiple-labels', weight: 2, group: 'a11y-names-labels'},
539
- {id: 'frame-title', weight: 3, group: 'a11y-names-labels'},
540
- {id: 'heading-order', weight: 2, group: 'a11y-navigation'},
541
- {id: 'html-has-lang', weight: 3, group: 'a11y-language'},
542
- {id: 'html-lang-valid', weight: 3, group: 'a11y-language'},
543
- {id: 'html-xml-lang-mismatch', weight: 2, group: 'a11y-language'},
544
+ {id: 'form-field-multiple-labels', weight: 3, group: 'a11y-names-labels'},
545
+ {id: 'frame-title', weight: 7, group: 'a11y-names-labels'},
546
+ {id: 'heading-order', weight: 3, group: 'a11y-navigation'},
547
+ {id: 'html-has-lang', weight: 7, group: 'a11y-language'},
548
+ {id: 'html-lang-valid', weight: 7, group: 'a11y-language'},
549
+ {id: 'html-xml-lang-mismatch', weight: 3, group: 'a11y-language'},
544
550
  {id: 'image-alt', weight: 10, group: 'a11y-names-labels'},
551
+ {id: 'image-redundant-alt', weight: 1, group: 'a11y-names-labels'},
545
552
  {id: 'input-button-name', weight: 10, group: 'a11y-names-labels'},
546
553
  {id: 'input-image-alt', weight: 10, group: 'a11y-names-labels'},
547
- {id: 'label', weight: 10, group: 'a11y-names-labels'},
548
- {id: 'link-in-text-block', weight: 3, group: 'a11y-color-contrast'},
549
- {id: 'link-name', weight: 3, group: 'a11y-names-labels'},
550
- {id: 'list', weight: 3, group: 'a11y-tables-lists'},
551
- {id: 'listitem', weight: 3, group: 'a11y-tables-lists'},
554
+ {id: 'label-content-name-mismatch', weight: 7, group: 'a11y-names-labels'},
555
+ {id: 'label', weight: 7, group: 'a11y-names-labels'},
556
+ {id: 'link-in-text-block', weight: 7, group: 'a11y-color-contrast'},
557
+ {id: 'link-name', weight: 7, group: 'a11y-names-labels'},
558
+ {id: 'list', weight: 7, group: 'a11y-tables-lists'},
559
+ {id: 'listitem', weight: 7, group: 'a11y-tables-lists'},
552
560
  {id: 'meta-refresh', weight: 10, group: 'a11y-best-practices'},
553
561
  {id: 'meta-viewport', weight: 10, group: 'a11y-best-practices'},
554
- {id: 'object-alt', weight: 3, group: 'a11y-names-labels'},
555
- {id: 'select-name', weight: 3, group: 'a11y-names-labels'},
556
- {id: 'tabindex', weight: 3, group: 'a11y-navigation'},
557
- {id: 'table-fake-caption', weight: 3, group: 'a11y-tables-lists'},
562
+ {id: 'object-alt', weight: 7, group: 'a11y-names-labels'},
563
+ {id: 'select-name', weight: 7, group: 'a11y-names-labels'},
564
+ {id: 'skip-link', weight: 3, group: 'a11y-names-labels'},
565
+ {id: 'tabindex', weight: 7, group: 'a11y-navigation'},
566
+ {id: 'table-duplicate-name', weight: 1, group: 'a11y-tables-lists'},
567
+ {id: 'table-fake-caption', weight: 7, group: 'a11y-tables-lists'},
558
568
  {id: 'td-has-header', weight: 10, group: 'a11y-tables-lists'},
559
- {id: 'td-headers-attr', weight: 3, group: 'a11y-tables-lists'},
560
- {id: 'th-has-data-cells', weight: 3, group: 'a11y-tables-lists'},
561
- {id: 'valid-lang', weight: 3, group: 'a11y-language'},
569
+ {id: 'td-headers-attr', weight: 7, group: 'a11y-tables-lists'},
570
+ {id: 'th-has-data-cells', weight: 7, group: 'a11y-tables-lists'},
571
+ {id: 'valid-lang', weight: 7, group: 'a11y-language'},
562
572
  {id: 'video-caption', weight: 10, group: 'a11y-audio-video'},
563
573
  // Manual audits
564
574
  {id: 'logical-tab-order', weight: 0},
@@ -15,7 +15,7 @@ export function isValidArtifactDependency(dependent: LH.Config.AnyGathererDefn,
15
15
  */
16
16
  export function assertValidPluginName(config: LH.Config, pluginName: string): void;
17
17
  /**
18
- * Throws an error if the provided object does not implement the required Fraggle Rock gatherer interface.
18
+ * Throws an error if the provided object does not implement the required gatherer interface.
19
19
  * @param {LH.Config.AnyArtifactDefn} artifactDefn
20
20
  */
21
21
  export function assertValidArtifact(artifactDefn: LH.Config.AnyArtifactDefn): void;
@@ -24,7 +24,7 @@ export function assertValidArtifact(artifactDefn: LH.Config.AnyArtifactDefn): vo
24
24
  * @param {LH.Config.ResolvedConfig['navigations']} navigationsDefn
25
25
  * @return {{warnings: string[]}}
26
26
  */
27
- export function assertValidFRNavigations(navigationsDefn: LH.Config.ResolvedConfig['navigations']): {
27
+ export function assertValidNavigations(navigationsDefn: LH.Config.ResolvedConfig['navigations']): {
28
28
  warnings: string[];
29
29
  };
30
30
  /**
@@ -46,7 +46,7 @@ function assertValidPluginName(config, pluginName) {
46
46
  }
47
47
 
48
48
  /**
49
- * Throws an error if the provided object does not implement the required Fraggle Rock gatherer interface.
49
+ * Throws an error if the provided object does not implement the required gatherer interface.
50
50
  * @param {LH.Config.AnyArtifactDefn} artifactDefn
51
51
  */
52
52
  function assertValidArtifact(artifactDefn) {
@@ -73,7 +73,7 @@ function assertValidArtifact(artifactDefn) {
73
73
  * @param {LH.Config.ResolvedConfig['navigations']} navigationsDefn
74
74
  * @return {{warnings: string[]}}
75
75
  */
76
- function assertValidFRNavigations(navigationsDefn) {
76
+ function assertValidNavigations(navigationsDefn) {
77
77
  if (!navigationsDefn || !navigationsDefn.length) return {warnings: []};
78
78
 
79
79
  /** @type {string[]} */
@@ -248,7 +248,7 @@ function assertArtifactTopologicalOrder(navigations) {
248
248
  * @return {{warnings: string[]}}
249
249
  */
250
250
  function assertValidConfig(resolvedConfig) {
251
- const {warnings} = assertValidFRNavigations(resolvedConfig.navigations);
251
+ const {warnings} = assertValidNavigations(resolvedConfig.navigations);
252
252
 
253
253
  /** @type {Set<string>} */
254
254
  const artifactIds = new Set();
@@ -303,7 +303,7 @@ export {
303
303
  isValidArtifactDependency,
304
304
  assertValidPluginName,
305
305
  assertValidArtifact,
306
- assertValidFRNavigations,
306
+ assertValidNavigations,
307
307
  assertValidAudit,
308
308
  assertValidCategories,
309
309
  assertValidSettings,
@@ -31,7 +31,6 @@ class NetworkMonitor extends NetworkMonitorEventEmitter {
31
31
  /** @type {Array<LH.Crdp.Page.Frame>} */
32
32
  _frameNavigations = [];
33
33
 
34
- // TODO(FR-COMPAT): switch to real TargetManager when legacy removed.
35
34
  /** @param {LH.Gatherer.Driver['targetManager']} targetManager */
36
35
  constructor(targetManager) {
37
36
  super();
@@ -41,6 +41,7 @@ async function runA11yChecks() {
41
41
  // Consider http://go/prcpg for expert review of the aXe rules.
42
42
  'accesskeys': {enabled: true},
43
43
  'area-alt': {enabled: false},
44
+ 'aria-allowed-role': {enabled: true},
44
45
  'aria-dialog-name': {enabled: true},
45
46
  'aria-roledescription': {enabled: false},
46
47
  'aria-treeitem-name': {enabled: true},
@@ -54,7 +55,9 @@ async function runA11yChecks() {
54
55
  'heading-order': {enabled: true},
55
56
  'html-xml-lang-mismatch': {enabled: true},
56
57
  'identical-links-same-purpose': {enabled: true},
58
+ 'image-redundant-alt': {enabled: true},
57
59
  'input-button-name': {enabled: true},
60
+ 'label-content-name-mismatch': {enabled: true},
58
61
  'landmark-one-main': {enabled: true},
59
62
  'link-in-text-block': {enabled: true},
60
63
  'marquee': {enabled: false},
@@ -66,8 +69,10 @@ async function runA11yChecks() {
66
69
  'scrollable-region-focusable': {enabled: false},
67
70
  'select-name': {enabled: true},
68
71
  'server-side-image-map': {enabled: false},
72
+ 'skip-link': {enabled: true},
69
73
  'svg-img-alt': {enabled: false},
70
74
  'tabindex': {enabled: true},
75
+ 'table-duplicate-name': {enabled: true},
71
76
  'table-fake-caption': {enabled: true},
72
77
  'target-size': {enabled: true},
73
78
  'td-has-header': {enabled: true},
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "lighthouse",
3
3
  "type": "module",
4
- "version": "10.4.0-dev.20230724",
4
+ "version": "10.4.0-dev.20230726",
5
5
  "description": "Automated auditing, performance metrics, and best practices for the web.",
6
6
  "main": "./core/index.js",
7
7
  "bin": {
@@ -17,6 +17,15 @@
17
17
  "core/audits/accessibility/aria-allowed-attr.js | title": {
18
18
  "message": "`[aria-*]` attributes match their roles"
19
19
  },
20
+ "core/audits/accessibility/aria-allowed-role.js | description": {
21
+ "message": "ARIA `role`s enable assistive technologies to know the role of each element on the web page. If the `role` values are misspelled, not existing ARIA `role` values, or abstract roles, then the purpose of the element will not be communicated to users of assistive technologies. [Learn more about ARIA roles](https://dequeuniversity.com/rules/axe/4.7/aria-allowed-roles)."
22
+ },
23
+ "core/audits/accessibility/aria-allowed-role.js | failureTitle": {
24
+ "message": "Values assigned to `role=\"\"` are not valid ARIA roles."
25
+ },
26
+ "core/audits/accessibility/aria-allowed-role.js | title": {
27
+ "message": "Values assigned to `role=\"\"` are valid ARIA roles."
28
+ },
20
29
  "core/audits/accessibility/aria-command-name.js | description": {
21
30
  "message": "When an element doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. [Learn how to make command elements more accessible](https://dequeuniversity.com/rules/axe/4.7/aria-command-name)."
22
31
  },
@@ -326,6 +335,15 @@
326
335
  "core/audits/accessibility/image-alt.js | title": {
327
336
  "message": "Image elements have `[alt]` attributes"
328
337
  },
338
+ "core/audits/accessibility/image-redundant-alt.js | description": {
339
+ "message": "Informative elements should aim for short, descriptive alternative text. Alternative text that is exactly the same as the text adjacent to the link or image is potentially confusing for screen reader users, because the text will be read twice. [Learn more about the `alt` attribute](https://dequeuniversity.com/rules/axe/4.7/image-redundant-alt)."
340
+ },
341
+ "core/audits/accessibility/image-redundant-alt.js | failureTitle": {
342
+ "message": "Image elements have `[alt]` attributes that are redundant text."
343
+ },
344
+ "core/audits/accessibility/image-redundant-alt.js | title": {
345
+ "message": "Image elements do not have `[alt]` attributes that are redundant text."
346
+ },
329
347
  "core/audits/accessibility/input-button-name.js | description": {
330
348
  "message": "Adding discernable and accessible text to input buttons may help screen reader users understand the purpose of the input button. [Learn more about input buttons](https://dequeuniversity.com/rules/axe/4.7/input-button-name)."
331
349
  },
@@ -344,6 +362,15 @@
344
362
  "core/audits/accessibility/input-image-alt.js | title": {
345
363
  "message": "`<input type=\"image\">` elements have `[alt]` text"
346
364
  },
365
+ "core/audits/accessibility/label-content-name-mismatch.js | description": {
366
+ "message": "Visible text labels that do not match the accessible name can result in a confusing experience for screen reader users. [Learn more about accessible names](https://dequeuniversity.com/rules/axe/4.7/label-content-name-mismatch)."
367
+ },
368
+ "core/audits/accessibility/label-content-name-mismatch.js | failureTitle": {
369
+ "message": "Elements with visible text labels do not have matching accessible names."
370
+ },
371
+ "core/audits/accessibility/label-content-name-mismatch.js | title": {
372
+ "message": "Elements with visible text labels have matching accessible names."
373
+ },
347
374
  "core/audits/accessibility/label.js | description": {
348
375
  "message": "Labels ensure that form controls are announced properly by assistive technologies, like screen readers. [Learn more about form element labels](https://dequeuniversity.com/rules/axe/4.7/label)."
349
376
  },
@@ -434,6 +461,15 @@
434
461
  "core/audits/accessibility/select-name.js | title": {
435
462
  "message": "Select elements have associated label elements."
436
463
  },
464
+ "core/audits/accessibility/skip-link.js | description": {
465
+ "message": "Including a skip link can help users skip to the main content to save time. [Learn more about skip links](https://dequeuniversity.com/rules/axe/4.7/skip-link)."
466
+ },
467
+ "core/audits/accessibility/skip-link.js | failureTitle": {
468
+ "message": "Skip links are not focusable."
469
+ },
470
+ "core/audits/accessibility/skip-link.js | title": {
471
+ "message": "Skip links are focusable."
472
+ },
437
473
  "core/audits/accessibility/tabindex.js | description": {
438
474
  "message": "A value greater than 0 implies an explicit navigation ordering. Although technically valid, this often creates frustrating experiences for users who rely on assistive technologies. [Learn more about the `tabindex` attribute](https://dequeuniversity.com/rules/axe/4.7/tabindex)."
439
475
  },
@@ -443,6 +479,15 @@
443
479
  "core/audits/accessibility/tabindex.js | title": {
444
480
  "message": "No element has a `[tabindex]` value greater than 0"
445
481
  },
482
+ "core/audits/accessibility/table-duplicate-name.js | description": {
483
+ "message": "The summary attribute should describe the table structure, while `<caption>` should have the onscreen title. Accurate table mark-up helps users of screen readers. [Learn more about summary and caption](https://dequeuniversity.com/rules/axe/4.7/table-duplicate-name)."
484
+ },
485
+ "core/audits/accessibility/table-duplicate-name.js | failureTitle": {
486
+ "message": "Tables have the same content in the summary attribute and `<caption>.`"
487
+ },
488
+ "core/audits/accessibility/table-duplicate-name.js | title": {
489
+ "message": "Tables have different content in the summary attribute and `<caption>`."
490
+ },
446
491
  "core/audits/accessibility/table-fake-caption.js | description": {
447
492
  "message": "Screen readers have features to make navigating tables easier. Ensuring that tables use the actual caption element instead of cells with the `[colspan]` attribute may improve the experience for screen reader users. [Learn more about captions](https://dequeuniversity.com/rules/axe/4.7/table-fake-caption)."
448
493
  },
@@ -453,7 +498,7 @@
453
498
  "message": "Tables use `<caption>` instead of cells with the `[colspan]` attribute to indicate a caption."
454
499
  },
455
500
  "core/audits/accessibility/target-size.js | description": {
456
- "message": "Touch targets with sufficient size and spacing help users who may have difficulty targeting small controls activate the targets. [Learn more about touch targets](https://dequeuniversity.com/rules/axe/4.7/target-size)."
501
+ "message": "Touch targets with sufficient size and spacing help users who may have difficulty targeting small controls to activate the targets. [Learn more about touch targets](https://dequeuniversity.com/rules/axe/4.7/target-size)."
457
502
  },
458
503
  "core/audits/accessibility/target-size.js | failureTitle": {
459
504
  "message": "Touch targets do not have sufficient size or spacing."
@@ -17,6 +17,15 @@
17
17
  "core/audits/accessibility/aria-allowed-attr.js | title": {
18
18
  "message": "`[aria-*]` ât́t̂ŕîb́ût́êś m̂át̂ćĥ t́ĥéîŕ r̂ól̂éŝ"
19
19
  },
20
+ "core/audits/accessibility/aria-allowed-role.js | description": {
21
+ "message": "ÂŔÎÁ `role`ŝ én̂áb̂ĺê áŝśîśt̂ív̂é t̂éĉh́n̂ól̂óĝíêś t̂ó k̂ńôẃ t̂h́ê ŕôĺê óf̂ éâćĥ él̂ém̂én̂t́ ôń t̂h́ê ẃêb́ p̂áĝé. Îf́ t̂h́ê `role` v́âĺûéŝ ár̂é m̂íŝśp̂él̂ĺêd́, n̂ót̂ éx̂íŝt́îńĝ ÁR̂ÍÂ `role` v́âĺûéŝ, ór̂ áb̂śt̂ŕâćt̂ ŕôĺêś, t̂h́êń t̂h́ê ṕûŕp̂óŝé ôf́ t̂h́ê él̂ém̂én̂t́ ŵíl̂ĺ n̂ót̂ b́ê ćôḿm̂ún̂íĉát̂éd̂ t́ô úŝér̂ś ôf́ âśŝíŝt́îv́ê t́êćĥńôĺôǵîéŝ. [Ĺêár̂ń m̂ór̂é âb́ôút̂ ÁR̂ÍÂ ŕôĺêś](https://dequeuniversity.com/rules/axe/4.7/aria-allowed-roles)."
22
+ },
23
+ "core/audits/accessibility/aria-allowed-role.js | failureTitle": {
24
+ "message": "V̂ál̂úêś âśŝíĝńêd́ t̂ó `role=\"\"` âŕê ńôt́ v̂ál̂íd̂ ÁR̂ÍÂ ŕôĺêś."
25
+ },
26
+ "core/audits/accessibility/aria-allowed-role.js | title": {
27
+ "message": "V̂ál̂úêś âśŝíĝńêd́ t̂ó `role=\"\"` âŕê v́âĺîd́ ÂŔÎÁ r̂ól̂éŝ."
28
+ },
20
29
  "core/audits/accessibility/aria-command-name.js | description": {
21
30
  "message": "Ŵh́êń âń êĺêḿêńt̂ d́ôéŝń't̂ h́âv́ê án̂ áĉćêśŝíb̂ĺê ńâḿê, śĉŕêén̂ ŕêád̂ér̂ś âńn̂óûńĉé ît́ ŵít̂h́ â ǵêńêŕîć n̂ám̂é, m̂ák̂ín̂ǵ ît́ ûńûśâb́l̂é f̂ór̂ úŝér̂ś ŵh́ô ŕêĺŷ ón̂ śĉŕêén̂ ŕêád̂ér̂ś. [L̂éâŕn̂ h́ôẃ t̂ó m̂ák̂é ĉóm̂ḿâńd̂ él̂ém̂én̂t́ŝ ḿôŕê áĉćêśŝíb̂ĺê](https://dequeuniversity.com/rules/axe/4.7/aria-command-name)."
22
31
  },
@@ -326,6 +335,15 @@
326
335
  "core/audits/accessibility/image-alt.js | title": {
327
336
  "message": "Îḿâǵê él̂ém̂én̂t́ŝ h́âv́ê `[alt]` át̂t́r̂íb̂út̂éŝ"
328
337
  },
338
+ "core/audits/accessibility/image-redundant-alt.js | description": {
339
+ "message": "Îńf̂ór̂ḿât́îv́ê él̂ém̂én̂t́ŝ śĥóûĺd̂ áîḿ f̂ór̂ śĥór̂t́, d̂éŝćr̂íp̂t́îv́ê ál̂t́êŕn̂át̂ív̂é t̂éx̂t́. Âĺt̂ér̂ńât́îv́ê t́êx́t̂ t́ĥát̂ íŝ éx̂áĉt́l̂ý t̂h́ê śâḿê áŝ t́ĥé t̂éx̂t́ âd́ĵáĉén̂t́ t̂ó t̂h́ê ĺîńk̂ ór̂ ím̂áĝé îś p̂ót̂én̂t́îál̂ĺŷ ćôńf̂úŝín̂ǵ f̂ór̂ śĉŕêén̂ ŕêád̂ér̂ úŝér̂ś, b̂éĉáûśê t́ĥé t̂éx̂t́ ŵíl̂ĺ b̂é r̂éâd́ t̂ẃîćê. [Ĺêár̂ń m̂ór̂é âb́ôút̂ t́ĥé `alt` ât́t̂ŕîb́ût́ê](https://dequeuniversity.com/rules/axe/4.7/image-redundant-alt)."
340
+ },
341
+ "core/audits/accessibility/image-redundant-alt.js | failureTitle": {
342
+ "message": "Îḿâǵê él̂ém̂én̂t́ŝ h́âv́ê `[alt]` át̂t́r̂íb̂út̂éŝ t́ĥát̂ ár̂é r̂éd̂ún̂d́âńt̂ t́êx́t̂."
343
+ },
344
+ "core/audits/accessibility/image-redundant-alt.js | title": {
345
+ "message": "Îḿâǵê él̂ém̂én̂t́ŝ d́ô ńôt́ ĥáv̂é `[alt]` ât́t̂ŕîb́ût́êś t̂h́ât́ âŕê ŕêd́ûńd̂án̂t́ t̂éx̂t́."
346
+ },
329
347
  "core/audits/accessibility/input-button-name.js | description": {
330
348
  "message": "Âd́d̂ín̂ǵ d̂íŝćêŕn̂áb̂ĺê án̂d́ âćĉéŝśîb́l̂é t̂éx̂t́ t̂ó îńp̂út̂ b́ût́t̂ón̂ś m̂áŷ h́êĺp̂ śĉŕêén̂ ŕêád̂ér̂ úŝér̂ś ûńd̂ér̂śt̂án̂d́ t̂h́ê ṕûŕp̂óŝé ôf́ t̂h́ê ín̂ṕût́ b̂út̂t́ôń. [L̂éâŕn̂ ḿôŕê áb̂óût́ îńp̂út̂ b́ût́t̂ón̂ś](https://dequeuniversity.com/rules/axe/4.7/input-button-name)."
331
349
  },
@@ -344,6 +362,15 @@
344
362
  "core/audits/accessibility/input-image-alt.js | title": {
345
363
  "message": "`<input type=\"image\">` êĺêḿêńt̂ś ĥáv̂é `[alt]` t̂éx̂t́"
346
364
  },
365
+ "core/audits/accessibility/label-content-name-mismatch.js | description": {
366
+ "message": "V̂íŝíb̂ĺê t́êx́t̂ ĺâb́êĺŝ t́ĥát̂ d́ô ńôt́ m̂át̂ćĥ t́ĥé âćĉéŝśîb́l̂é n̂ám̂é ĉán̂ ŕêśûĺt̂ ín̂ á ĉón̂f́ûśîńĝ éx̂ṕêŕîén̂ćê f́ôŕ ŝćr̂éêń r̂éâd́êŕ ûśêŕŝ. [Ĺêár̂ń m̂ór̂é âb́ôút̂ áĉćêśŝíb̂ĺê ńâḿêś](https://dequeuniversity.com/rules/axe/4.7/label-content-name-mismatch)."
367
+ },
368
+ "core/audits/accessibility/label-content-name-mismatch.js | failureTitle": {
369
+ "message": "Êĺêḿêńt̂ś ŵít̂h́ v̂íŝíb̂ĺê t́êx́t̂ ĺâb́êĺŝ d́ô ńôt́ ĥáv̂é m̂át̂ćĥín̂ǵ âćĉéŝśîb́l̂é n̂ám̂éŝ."
370
+ },
371
+ "core/audits/accessibility/label-content-name-mismatch.js | title": {
372
+ "message": "Êĺêḿêńt̂ś ŵít̂h́ v̂íŝíb̂ĺê t́êx́t̂ ĺâb́êĺŝ h́âv́ê ḿât́ĉh́îńĝ áĉćêśŝíb̂ĺê ńâḿêś."
373
+ },
347
374
  "core/audits/accessibility/label.js | description": {
348
375
  "message": "L̂áb̂él̂ś êńŝúr̂é t̂h́ât́ f̂ór̂ḿ ĉón̂t́r̂ól̂ś âŕê án̂ńôún̂ćêd́ p̂ŕôṕêŕl̂ý b̂ý âśŝíŝt́îv́ê t́êćĥńôĺôǵîéŝ, ĺîḱê śĉŕêén̂ ŕêád̂ér̂ś. [L̂éâŕn̂ ḿôŕê áb̂óût́ f̂ór̂ḿ êĺêḿêńt̂ ĺâb́êĺŝ](https://dequeuniversity.com/rules/axe/4.7/label)."
349
376
  },
@@ -434,6 +461,15 @@
434
461
  "core/audits/accessibility/select-name.js | title": {
435
462
  "message": "Ŝél̂éĉt́ êĺêḿêńt̂ś ĥáv̂é âśŝóĉíât́êd́ l̂áb̂él̂ él̂ém̂én̂t́ŝ."
436
463
  },
464
+ "core/audits/accessibility/skip-link.js | description": {
465
+ "message": "Îńĉĺûd́îńĝ á ŝḱîṕ l̂ín̂ḱ ĉán̂ h́êĺp̂ úŝér̂ś ŝḱîṕ t̂ó t̂h́ê ḿâín̂ ćôńt̂én̂t́ t̂ó ŝáv̂é t̂ím̂é. [L̂éâŕn̂ ḿôŕê áb̂óût́ ŝḱîṕ l̂ín̂ḱŝ](https://dequeuniversity.com/rules/axe/4.7/skip-link)."
466
+ },
467
+ "core/audits/accessibility/skip-link.js | failureTitle": {
468
+ "message": "Ŝḱîṕ l̂ín̂ḱŝ ár̂é n̂ót̂ f́ôćûśâb́l̂é."
469
+ },
470
+ "core/audits/accessibility/skip-link.js | title": {
471
+ "message": "Ŝḱîṕ l̂ín̂ḱŝ ár̂é f̂óĉúŝáb̂ĺê."
472
+ },
437
473
  "core/audits/accessibility/tabindex.js | description": {
438
474
  "message": "Â v́âĺûé ĝŕêát̂ér̂ t́ĥán̂ 0 ím̂ṕl̂íêś âń êx́p̂ĺîćît́ n̂áv̂íĝát̂íôń ôŕd̂ér̂ín̂ǵ. Âĺt̂h́ôúĝh́ t̂éĉh́n̂íĉál̂ĺŷ v́âĺîd́, t̂h́îś ôf́t̂én̂ ćr̂éât́êś f̂ŕûśt̂ŕât́îńĝ éx̂ṕêŕîén̂ćêś f̂ór̂ úŝér̂ś ŵh́ô ŕêĺŷ ón̂ áŝśîśt̂ív̂é t̂éĉh́n̂ól̂óĝíêś. [L̂éâŕn̂ ḿôŕê áb̂óût́ t̂h́ê `tabindex` át̂t́r̂íb̂út̂é](https://dequeuniversity.com/rules/axe/4.7/tabindex)."
439
475
  },
@@ -443,6 +479,15 @@
443
479
  "core/audits/accessibility/tabindex.js | title": {
444
480
  "message": "N̂ó êĺêḿêńt̂ h́âś â `[tabindex]` v́âĺûé ĝŕêát̂ér̂ t́ĥán̂ 0"
445
481
  },
482
+ "core/audits/accessibility/table-duplicate-name.js | description": {
483
+ "message": "T̂h́ê śûḿm̂ár̂ý ât́t̂ŕîb́ût́ê śĥóûĺd̂ d́êśĉŕîb́ê t́ĥé t̂áb̂ĺê śt̂ŕûćt̂úr̂é, ŵh́îĺê `<caption>` śĥóûĺd̂ h́âv́ê t́ĥé ôńŝćr̂éêń t̂ít̂ĺê. Áĉćûŕât́ê t́âb́l̂é m̂ár̂ḱ-ûṕ ĥél̂ṕŝ úŝér̂ś ôf́ ŝćr̂éêń r̂éâd́êŕŝ. [Ĺêár̂ń m̂ór̂é âb́ôút̂ śûḿm̂ár̂ý âńd̂ ćâṕt̂íôń](https://dequeuniversity.com/rules/axe/4.7/table-duplicate-name)."
484
+ },
485
+ "core/audits/accessibility/table-duplicate-name.js | failureTitle": {
486
+ "message": "T̂áb̂ĺêś ĥáv̂é t̂h́ê śâḿê ćôńt̂én̂t́ îń t̂h́ê śûḿm̂ár̂ý ât́t̂ŕîb́ût́ê án̂d́ `<caption>.`"
487
+ },
488
+ "core/audits/accessibility/table-duplicate-name.js | title": {
489
+ "message": "T̂áb̂ĺêś ĥáv̂é d̂íf̂f́êŕêńt̂ ćôńt̂én̂t́ îń t̂h́ê śûḿm̂ár̂ý ât́t̂ŕîb́ût́ê án̂d́ `<caption>`."
490
+ },
446
491
  "core/audits/accessibility/table-fake-caption.js | description": {
447
492
  "message": "Ŝćr̂éêń r̂éâd́êŕŝ h́âv́ê f́êát̂úr̂éŝ t́ô ḿâḱê ńâv́îǵât́îńĝ t́âb́l̂éŝ éâśîér̂. Én̂śûŕîńĝ t́ĥát̂ t́âb́l̂éŝ úŝé t̂h́ê áĉt́ûál̂ ćâṕt̂íôń êĺêḿêńt̂ ín̂śt̂éâd́ ôf́ ĉél̂ĺŝ ẃît́ĥ t́ĥé `[colspan]` ât́t̂ŕîb́ût́ê ḿâý îḿp̂ŕôv́ê t́ĥé êx́p̂ér̂íêńĉé f̂ór̂ śĉŕêén̂ ŕêád̂ér̂ úŝér̂ś. [L̂éâŕn̂ ḿôŕê áb̂óût́ ĉáp̂t́îón̂ś](https://dequeuniversity.com/rules/axe/4.7/table-fake-caption)."
448
493
  },
@@ -453,7 +498,7 @@
453
498
  "message": "T̂áb̂ĺêś ûśê `<caption>` ín̂śt̂éâd́ ôf́ ĉél̂ĺŝ ẃît́ĥ t́ĥé `[colspan]` ât́t̂ŕîb́ût́ê t́ô ín̂d́îćât́ê á ĉáp̂t́îón̂."
454
499
  },
455
500
  "core/audits/accessibility/target-size.js | description": {
456
- "message": "T̂óûćĥ t́âŕĝét̂ś ŵít̂h́ ŝúf̂f́îćîén̂t́ ŝíẑé âńd̂ śp̂áĉín̂ǵ ĥél̂ṕ ûśêŕŝ ẃĥó m̂áŷ h́âv́ê d́îf́f̂íĉúl̂t́ŷ t́âŕĝét̂ín̂ǵ ŝḿâĺl̂ ćôńt̂ŕôĺŝ áĉt́îv́ât́ê t́ĥé t̂ár̂ǵêt́ŝ. [Ĺêár̂ń m̂ór̂é âb́ôút̂ t́ôúĉh́ t̂ár̂ǵêt́ŝ](https://dequeuniversity.com/rules/axe/4.7/target-size)."
501
+ "message": "T̂óûćĥ t́âŕĝét̂ś ŵít̂h́ ŝúf̂f́îćîén̂t́ ŝíẑé âńd̂ śp̂áĉín̂ǵ ĥél̂ṕ ûśêŕŝ ẃĥó m̂áŷ h́âv́ê d́îf́f̂íĉúl̂t́ŷ t́âŕĝét̂ín̂ǵ ŝḿâĺl̂ ćôńt̂ŕôĺŝ t́ô áĉt́îv́ât́ê t́ĥé t̂ár̂ǵêt́ŝ. [Ĺêár̂ń m̂ór̂é âb́ôút̂ t́ôúĉh́ t̂ár̂ǵêt́ŝ](https://dequeuniversity.com/rules/axe/4.7/target-size)."
457
502
  },
458
503
  "core/audits/accessibility/target-size.js | failureTitle": {
459
504
  "message": "T̂óûćĥ t́âŕĝét̂ś d̂ó n̂ót̂ h́âv́ê śûf́f̂íĉíêńt̂ śîźê ór̂ śp̂áĉín̂ǵ."
package/tsconfig.json CHANGED
@@ -41,7 +41,6 @@
41
41
  "core/test/config/budget-test.js",
42
42
  "core/test/config/config-helpers-test.js",
43
43
  "core/test/config/config-plugin-test.js",
44
- "core/test/legacy/config/config-test.js",
45
44
  "core/test/config/default-config-test.js",
46
45
  "core/test/gather/driver/wait-for-condition-test.js",
47
46
  "core/test/gather/gatherers/accessibility-test.js",
@@ -57,8 +57,8 @@ declare module Gatherer {
57
57
  gatherMode: GatherMode;
58
58
  /** The connection to the page being analyzed. */
59
59
  driver: Driver;
60
- /** The Puppeteer page handle. Will be undefined in legacy navigation mode. */
61
- page?: Puppeteer.Page;
60
+ /** The Puppeteer page handle. */
61
+ page: Puppeteer.Page;
62
62
  /** The set of base artifacts that are always collected. */
63
63
  baseArtifacts: BaseArtifacts;
64
64
  /** The cached results of computed artifacts. */
@@ -71,7 +71,7 @@ export type ScreenEmulationSettings = {
71
71
  disableStorageReset?: boolean;
72
72
  /** Flag indicating that Lighthouse should pause after page load to wait for the user's permission to continue the audit. */
73
73
  debugNavigation?: boolean;
74
- /** If set to true, will skip the initial navigation to about:blank. This option is ignored when using the legacy navigation runner. */
74
+ /** If set to true, will skip the initial navigation to about:blank. */
75
75
  skipAboutBlank?: boolean;
76
76
  /** If set to true, gatherers should avoid any behavior that may be destructive to the page state. (e.g. extra navigations, resizing the viewport) */
77
77
  usePassiveGathering?: boolean;