testaro-issues 0.1.0

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,2248 @@
1
+ //#region src/index.d.ts
2
+ interface Issue {
3
+ summary: string;
4
+ why: string;
5
+ wcag: string;
6
+ weight: number;
7
+ max?: number;
8
+ }
9
+ interface IssueRuleGroup {
10
+ invariant: string[];
11
+ variable: string[];
12
+ }
13
+ interface RuleEntry {
14
+ issueID: IssueID;
15
+ quality: number;
16
+ what: string;
17
+ }
18
+ interface ToolRules {
19
+ invariant: Record<string, RuleEntry>;
20
+ variable: Record<string, RuleEntry>;
21
+ }
22
+ type IssueID = keyof typeof issuesData;
23
+ declare const issuesData: {
24
+ readonly ignorable: {
25
+ readonly summary: 'ignorable';
26
+ readonly why: 'No known impact, because the test is unreliable or invalid';
27
+ readonly wcag: '';
28
+ readonly weight: 1;
29
+ };
30
+ readonly duplicateAttribute: {
31
+ readonly summary: 'duplicate attribute';
32
+ readonly why: 'Browser processes the document improperly';
33
+ readonly wcag: '4.1.1';
34
+ readonly weight: 2;
35
+ };
36
+ readonly duplicateID: {
37
+ readonly summary: 'ID not unique';
38
+ readonly why: 'User may be pointed to the wrong item';
39
+ readonly wcag: '4.1.1';
40
+ readonly weight: 4;
41
+ };
42
+ readonly roleNoText: {
43
+ readonly summary: 'no role-required name';
44
+ readonly why: 'User cannot get help understanding an item';
45
+ readonly wcag: '4.1.2';
46
+ readonly weight: 4;
47
+ };
48
+ readonly progressNoText: {
49
+ readonly summary: 'progress bar not named';
50
+ readonly why: 'User cannot get help understanding the state of a process';
51
+ readonly wcag: '4.1.2';
52
+ readonly weight: 4;
53
+ };
54
+ readonly componentNoText: {
55
+ readonly summary: 'interactive component not named';
56
+ readonly why: 'User cannot get help understanding a custom item';
57
+ readonly wcag: '4.1.2';
58
+ readonly weight: 4;
59
+ };
60
+ readonly regionNoText: {
61
+ readonly summary: 'region not named';
62
+ readonly why: 'User cannot get help surveying the parts of the document';
63
+ readonly wcag: '4.1.2';
64
+ readonly weight: 4;
65
+ };
66
+ readonly headingImageNoText: {
67
+ readonly summary: 'heading image not named';
68
+ readonly why: 'User cannot get help understanding an image used as a heading';
69
+ readonly wcag: '1.1.1';
70
+ readonly weight: 4;
71
+ };
72
+ readonly inputNoText: {
73
+ readonly summary: 'input not named';
74
+ readonly why: 'User cannot get help on what information to enter in a form item';
75
+ readonly wcag: '4.1.2';
76
+ readonly weight: 4;
77
+ };
78
+ readonly inputOnlyPlaceholder: {
79
+ readonly summary: 'input has placeholder instead of name';
80
+ readonly why: 'User cannot get reliable help on what information to enter in a form item';
81
+ readonly wcag: '4.1.2';
82
+ readonly weight: 3;
83
+ };
84
+ readonly placeholderPlusAria: {
85
+ readonly summary: 'element has competing placeholder attributes';
86
+ readonly why: 'User gets conflicting help on what information to enter in a form item';
87
+ readonly wcag: '4.1.2';
88
+ readonly weight: 3;
89
+ };
90
+ readonly imageButtonNoText: {
91
+ readonly summary: 'image button not named';
92
+ readonly why: 'User cannot get help understanding an image used as a button';
93
+ readonly wcag: '1.1.1';
94
+ readonly weight: 4;
95
+ };
96
+ readonly imageInputNoText: {
97
+ readonly summary: 'image input not named';
98
+ readonly why: 'User cannot get help understanding an image used as a submission button';
99
+ readonly wcag: '1.1.1';
100
+ readonly weight: 4;
101
+ };
102
+ readonly figureNoText: {
103
+ readonly summary: 'figure not named';
104
+ readonly why: 'User cannot get help on the topic of a figure';
105
+ readonly wcag: '1.1.1';
106
+ readonly weight: 4;
107
+ };
108
+ readonly imageNoText: {
109
+ readonly summary: 'image not named';
110
+ readonly why: 'User cannot get help to know what is in an image';
111
+ readonly wcag: '1.1.1';
112
+ readonly weight: 4;
113
+ };
114
+ readonly svgNoText: {
115
+ readonly summary: 'SVG image not named';
116
+ readonly why: 'User cannot get help to know what is in an image';
117
+ readonly wcag: '1.1.1';
118
+ readonly weight: 4;
119
+ };
120
+ readonly imageTextSpaces: {
121
+ readonly summary: 'image name contains only spacing characters';
122
+ readonly why: 'User cannot get help understanding an image';
123
+ readonly wcag: '1.1.1';
124
+ readonly weight: 4;
125
+ };
126
+ readonly imageTextImage: {
127
+ readonly summary: 'image name contains image';
128
+ readonly why: 'User is redundantly told an image is an image';
129
+ readonly wcag: '1.1.1';
130
+ readonly weight: 1;
131
+ };
132
+ readonly decorativeAlt: {
133
+ readonly summary: 'decorative image is named';
134
+ readonly why: 'User gets an uninformative image description or misses an informative image';
135
+ readonly wcag: '1.1.1';
136
+ readonly weight: 1;
137
+ };
138
+ readonly imageTextBad: {
139
+ readonly summary: 'image named with filename';
140
+ readonly why: 'Helper gives a user the filename of an image instead of describing it';
141
+ readonly wcag: '1.1.1';
142
+ readonly weight: 3;
143
+ };
144
+ readonly imageTextRisk: {
145
+ readonly summary: 'image dubiously named';
146
+ readonly why: 'Helper may describe an image inadequately';
147
+ readonly wcag: '1.1.1';
148
+ readonly weight: 1;
149
+ };
150
+ readonly sourceEmpty: {
151
+ readonly summary: 'src empty';
152
+ readonly why: 'Image, audio, or video to be shown cannot be found';
153
+ readonly wcag: '1.3.1';
154
+ readonly weight: 4;
155
+ };
156
+ readonly borderBad: {
157
+ readonly summary: 'CSS border invalid';
158
+ readonly why: 'Border is displayed improperly';
159
+ readonly wcag: '4.1';
160
+ readonly weight: 4;
161
+ };
162
+ readonly flexBad: {
163
+ readonly summary: 'CSS flex invalid';
164
+ readonly why: 'Content is displayed improperly';
165
+ readonly wcag: '4.1';
166
+ readonly weight: 4;
167
+ };
168
+ readonly paddingBad: {
169
+ readonly summary: 'CSS padding invalid';
170
+ readonly why: 'Content is displayed improperly';
171
+ readonly wcag: '4.1';
172
+ readonly weight: 4;
173
+ };
174
+ readonly gapBad: {
175
+ readonly summary: 'CSS padding invalid';
176
+ readonly why: 'Content is displayed improperly';
177
+ readonly wcag: '4.1';
178
+ readonly weight: 4;
179
+ };
180
+ readonly backgroundBad: {
181
+ readonly summary: 'CSS background invalid';
182
+ readonly why: 'Background is displayed improperly';
183
+ readonly wcag: '4.1';
184
+ readonly weight: 4;
185
+ };
186
+ readonly backgroundImageBad: {
187
+ readonly summary: 'background image invalid';
188
+ readonly why: 'Background image is displayed improperly';
189
+ readonly wcag: '4.1';
190
+ readonly weight: 4;
191
+ };
192
+ readonly imagesSameAlt: {
193
+ readonly summary: 'nearby images have same alt';
194
+ readonly why: 'User cannot get help differentiating two adjacent images';
195
+ readonly wcag: '1.1.1';
196
+ readonly weight: 1;
197
+ };
198
+ readonly imageTextLong: {
199
+ readonly summary: 'image alt long';
200
+ readonly why: 'Helper gives a user an overly verbose explanation of an image';
201
+ readonly wcag: '1.1.1';
202
+ readonly weight: 2;
203
+ };
204
+ readonly imageBanned: {
205
+ readonly summary: 'image prohibited';
206
+ readonly why: 'Browser fails to display an image';
207
+ readonly wcag: '1.4';
208
+ readonly weight: 3;
209
+ };
210
+ readonly titleLong: {
211
+ readonly summary: 'title long';
212
+ readonly why: 'Hovering makes an overly verbose explanation pop up';
213
+ readonly wcag: '3.1.5';
214
+ readonly weight: 2;
215
+ };
216
+ readonly titleNotText: {
217
+ readonly summary: 'title contains ASCII art';
218
+ readonly why: 'Hovering makes a hard-to-understand explanation pop up';
219
+ readonly wcag: '3.1.5';
220
+ readonly weight: 2;
221
+ };
222
+ readonly decorativeImageRisk: {
223
+ readonly summary: 'image dubiously marked decorative';
224
+ readonly why: 'Helper ignores an image that is apparently informative';
225
+ readonly wcag: '1.1.1';
226
+ readonly weight: 1;
227
+ };
228
+ readonly decorativeElementExposed: {
229
+ readonly summary: 'decorative element exposed';
230
+ readonly why: 'Helper alerts a user to an uninformative image';
231
+ readonly wcag: '1.3.1';
232
+ readonly weight: 2;
233
+ };
234
+ readonly pageLanguage: {
235
+ readonly summary: 'page language missing';
236
+ readonly why: 'Speaking helper may mispronounce the document text';
237
+ readonly wcag: '3.1.1';
238
+ readonly weight: 4;
239
+ readonly max: 1;
240
+ };
241
+ readonly pageLanguageBad: {
242
+ readonly summary: 'page language invalid';
243
+ readonly why: 'Speaking helper may mispronounce the document text';
244
+ readonly wcag: '3.1.1';
245
+ readonly weight: 4;
246
+ readonly max: 1;
247
+ };
248
+ readonly elementLanguageBad: {
249
+ readonly summary: 'element language invalid';
250
+ readonly why: 'Speaking helper may mispronounce the text of an item';
251
+ readonly wcag: '3.1.2';
252
+ readonly weight: 4;
253
+ };
254
+ readonly languageChange: {
255
+ readonly summary: 'language change invalid';
256
+ readonly why: 'Speaking helper may mispronounce the text of an item';
257
+ readonly wcag: '3.1.2';
258
+ readonly weight: 3;
259
+ };
260
+ readonly dialogNoText: {
261
+ readonly summary: 'dialog not named';
262
+ readonly why: 'User cannot get help explaining a pop-up window';
263
+ readonly wcag: '4.1.2';
264
+ readonly weight: 4;
265
+ };
266
+ readonly objectNoText: {
267
+ readonly summary: 'object not named';
268
+ readonly why: 'User cannot get help explaining a custom item';
269
+ readonly wcag: '1.1.1';
270
+ readonly weight: 4;
271
+ };
272
+ readonly objectTextRisk: {
273
+ readonly summary: 'object dubiously named';
274
+ readonly why: 'Helper may explain a custom item inadequately';
275
+ readonly wcag: '1.1.1';
276
+ readonly weight: 1;
277
+ };
278
+ readonly objectAudioRisk: {
279
+ readonly summary: 'non-audio element plays audio?';
280
+ readonly why: 'User may get inadequate help consuming audio content';
281
+ readonly wcag: '1.1.1';
282
+ readonly weight: 1;
283
+ };
284
+ readonly appletNoText: {
285
+ readonly summary: 'applet not named';
286
+ readonly why: 'User cannot get help on how to use a custom item';
287
+ readonly wcag: '1.1.1';
288
+ readonly weight: 4;
289
+ };
290
+ readonly imageMapNoText: {
291
+ readonly summary: 'image map not named';
292
+ readonly why: 'User cannot get help on the topic of an interactive image';
293
+ readonly wcag: '1.1.1';
294
+ readonly weight: 4;
295
+ };
296
+ readonly imageMapAreaNoText: {
297
+ readonly summary: 'image map area not named';
298
+ readonly why: 'User cannot get help on how to use an interactive image';
299
+ readonly wcag: '1.1.1';
300
+ readonly weight: 4;
301
+ };
302
+ readonly customKeyboardRisk: {
303
+ readonly summary: 'custom button keyboard-inoperable?';
304
+ readonly why: 'Custom item may prevent a keyboard-only user from operating it';
305
+ readonly wcag: '2.1.1';
306
+ readonly weight: 1;
307
+ };
308
+ readonly objectBlurKeyboardRisk: {
309
+ readonly summary: 'object not keyboard-blurrable?';
310
+ readonly why: 'Custom item may trap a keyboard-only user';
311
+ readonly wcag: '2.1.1';
312
+ readonly weight: 1;
313
+ };
314
+ readonly eventKeyboardRisk: {
315
+ readonly summary: 'event not keyboard-triggerable?';
316
+ readonly why: 'Keyboard-only user may be unable to perform an action';
317
+ readonly wcag: '2.1.1';
318
+ readonly weight: 1;
319
+ };
320
+ readonly internalLinkBroken: {
321
+ readonly summary: 'internal link broken';
322
+ readonly why: 'User cannot reach a promised document location';
323
+ readonly wcag: '1.3.1';
324
+ readonly weight: 4;
325
+ };
326
+ readonly labelForBad: {
327
+ readonly summary: 'label referent ineligible';
328
+ readonly why: 'User cannot get help understanding an item in a form';
329
+ readonly wcag: '1.3.1';
330
+ readonly weight: 4;
331
+ };
332
+ readonly controlIDInLabelBad: {
333
+ readonly summary: 'label contains control with nonmatching ID';
334
+ readonly why: 'User cannot get help understanding an item in a form';
335
+ readonly wcag: '1.3.1';
336
+ readonly weight: 4;
337
+ };
338
+ readonly nonLabelableRole: {
339
+ readonly summary: 'aria-label on non-labelable role';
340
+ readonly why: 'User is misinformed about an item';
341
+ readonly wcag: '1.3.1';
342
+ readonly weight: 1;
343
+ };
344
+ readonly ariaLabelWrongRisk: {
345
+ readonly summary: 'dubious aria-label';
346
+ readonly why: 'User may fail to get help understanding an item in a form';
347
+ readonly wcag: '1.3.1';
348
+ readonly weight: 1;
349
+ };
350
+ readonly activeDescendantBadID: {
351
+ readonly summary: 'aria-activedescendant invalid';
352
+ readonly why: 'Keyboard-only user cannot reach an item in a menu';
353
+ readonly wcag: '1.3.1';
354
+ readonly weight: 4;
355
+ };
356
+ readonly governedBadID: {
357
+ readonly summary: 'aria-controls or -owns invalid';
358
+ readonly why: 'Keyboard-only user cannot reach an item';
359
+ readonly wcag: '1.3.1';
360
+ readonly weight: 4;
361
+ };
362
+ readonly descriptionBadID: {
363
+ readonly summary: 'aria-describedby invalid';
364
+ readonly why: 'User cannot get help understanding an item in detail';
365
+ readonly wcag: '1.3.1';
366
+ readonly weight: 4;
367
+ };
368
+ readonly labelConfusionRisk: {
369
+ readonly summary: 'label location dubious';
370
+ readonly why: 'User may fail to notice the explanation of an item in a form';
371
+ readonly wcag: '3.3.2';
372
+ readonly weight: 1;
373
+ };
374
+ readonly labelBadID: {
375
+ readonly summary: 'label reference invalid';
376
+ readonly why: 'User cannot get help understanding an item in a form';
377
+ readonly wcag: '1.3.1';
378
+ readonly weight: 4;
379
+ };
380
+ readonly haspopupBad: {
381
+ readonly summary: 'aria-haspopup invalid';
382
+ readonly why: 'Keyboard-only user cannot operate a custom tool';
383
+ readonly wcag: '1.3.1';
384
+ readonly weight: 4;
385
+ };
386
+ readonly applicationRisk: {
387
+ readonly summary: 'dubious application role';
388
+ readonly why: 'User actions may have unexpected effects';
389
+ readonly wcag: '1.3.1';
390
+ readonly weight: 1;
391
+ };
392
+ readonly directionRisk: {
393
+ readonly summary: 'dubious direction';
394
+ readonly why: 'Item may behave incorrectly';
395
+ readonly wcag: '1.3.2';
396
+ readonly weight: 1;
397
+ };
398
+ readonly clickOnly: {
399
+ readonly summary: 'name dubiously mouse-specific';
400
+ readonly why: 'User may misunderstand how to activate a link';
401
+ readonly wcag: '2.4.4';
402
+ readonly weight: 1;
403
+ };
404
+ readonly linkNoText: {
405
+ readonly summary: 'link not named';
406
+ readonly why: 'User cannot get help understanding what a link points to';
407
+ readonly wcag: '2.4.4';
408
+ readonly weight: 4;
409
+ };
410
+ readonly imageLinkNoText: {
411
+ readonly summary: 'image link not named';
412
+ readonly why: 'User cannot get help understanding what a link points to';
413
+ readonly wcag: '2.4.4';
414
+ readonly weight: 4;
415
+ };
416
+ readonly linkImageTextURL: {
417
+ readonly summary: 'text alternative of link image a URL';
418
+ readonly why: 'User cannot understand what a link points to';
419
+ readonly wcag: '2.4.4';
420
+ readonly weight: 3;
421
+ };
422
+ readonly linkBrokenRisk: {
423
+ readonly summary: 'link incomplete';
424
+ readonly why: 'User may fail to reach a promised location';
425
+ readonly wcag: '1.3.1';
426
+ readonly weight: 2;
427
+ };
428
+ readonly linkElNoHref: {
429
+ readonly summary: 'link element href missing';
430
+ readonly why: 'User cannot reach a promised location';
431
+ readonly wcag: '4.1';
432
+ readonly weight: 3;
433
+ };
434
+ readonly linkElNoSource: {
435
+ readonly summary: 'link element href or imagesrcset missing';
436
+ readonly why: 'User cannot reach a promised location';
437
+ readonly wcag: '4.1';
438
+ readonly weight: 3;
439
+ };
440
+ readonly destinationNotURL: {
441
+ readonly summary: 'link destination not URL';
442
+ readonly why: 'Helper cannot properly explain a link to a user';
443
+ readonly wcag: '1.3.1';
444
+ readonly weight: 1;
445
+ };
446
+ readonly destinationLink: {
447
+ readonly summary: 'link href missing';
448
+ readonly why: 'Helper cannot properly explain a link to a user';
449
+ readonly wcag: '1.3.1';
450
+ readonly weight: 2;
451
+ };
452
+ readonly emailLinkBad: {
453
+ readonly summary: 'Microsoft will bounce email from link';
454
+ readonly why: 'User cannot send email';
455
+ readonly wcag: '2.4.4';
456
+ readonly weight: 4;
457
+ };
458
+ readonly abbreviationNoTitle: {
459
+ readonly summary: 'abbr title missing';
460
+ readonly why: 'User cannot get help understanding an abbreviation';
461
+ readonly wcag: '3.1.4';
462
+ readonly weight: 4;
463
+ };
464
+ readonly editableHow: {
465
+ readonly summary: 'contenteditable element incomplete';
466
+ readonly why: 'User cannot get help on how to edit editable content';
467
+ readonly wcag: '1.3.1';
468
+ readonly weight: 3;
469
+ };
470
+ readonly textAreaNoText: {
471
+ readonly summary: 'text area not named';
472
+ readonly why: 'User cannot get help on what information to enter in a form item';
473
+ readonly wcag: '1.3.1';
474
+ readonly weight: 4;
475
+ };
476
+ readonly linkAltSame: {
477
+ readonly summary: 'link image alt duplicative';
478
+ readonly why: 'Helper repeats the explanation of a link';
479
+ readonly wcag: '1.1.1';
480
+ readonly weight: 2;
481
+ };
482
+ readonly linkTextsSame: {
483
+ readonly summary: 'links named identically';
484
+ readonly why: 'User cannot get help differentiating links';
485
+ readonly wcag: '2.4.4';
486
+ readonly weight: 2;
487
+ };
488
+ readonly linkConfusionRisk: {
489
+ readonly summary: 'links dubiously share name';
490
+ readonly why: 'User may be unable to get help differentiating links';
491
+ readonly wcag: '2.4.4';
492
+ readonly weight: 1;
493
+ };
494
+ readonly linksNoNav: {
495
+ readonly summary: 'links not grouped as nav';
496
+ readonly why: 'User cannot get help identifying links as a navigation tool';
497
+ readonly wcag: '1.3.1';
498
+ readonly weight: 2;
499
+ };
500
+ readonly linkPair: {
501
+ readonly summary: 'adjacent links not combined';
502
+ readonly why: 'Keyboard-only user expends extra effort to skip a link';
503
+ readonly wcag: '2.4.4';
504
+ readonly weight: 2;
505
+ };
506
+ readonly linkPairRisk: {
507
+ readonly summary: 'text and image link may merit combination';
508
+ readonly why: 'Keyboard-only user may expend extra effort to skip a link';
509
+ readonly wcag: '2.4.4';
510
+ readonly weight: 1;
511
+ };
512
+ readonly linkNameRisk: {
513
+ readonly summary: 'image link text suspect';
514
+ readonly why: 'Keyboard-only user may misunderstand the effect of following a link';
515
+ readonly wcag: '2.4.4';
516
+ readonly weight: 1;
517
+ };
518
+ readonly pageNewWindow: {
519
+ readonly summary: 'page immediately opens window';
520
+ readonly why: 'User promised a document gets another document, too';
521
+ readonly wcag: '3.2.5';
522
+ readonly weight: 3;
523
+ readonly max: 1;
524
+ };
525
+ readonly newTabSurprise: {
526
+ readonly summary: 'tab-opening link action unstated';
527
+ readonly why: 'Following a link opens a new window, surprising a user';
528
+ readonly wcag: '3.2.5';
529
+ readonly weight: 3;
530
+ };
531
+ readonly newTabSurpriseRisk: {
532
+ readonly summary: 'tab-opening link action unstated?';
533
+ readonly why: 'Following a link opens a new window, possibly surprising a user';
534
+ readonly wcag: '3.2.5';
535
+ readonly weight: 1;
536
+ };
537
+ readonly selectNavSurpriseRisk: {
538
+ readonly summary: 'navigating selection-change action unstated?';
539
+ readonly why: 'Changing a selected option opens a new window, possibly surprising a user';
540
+ readonly wcag: '3.2.5';
541
+ readonly weight: 1;
542
+ };
543
+ readonly preselectedOption: {
544
+ readonly summary: 'no default option';
545
+ readonly why: 'User may risk erroneously submitting a form';
546
+ readonly wcag: '4.1.2';
547
+ readonly weight: 1;
548
+ };
549
+ readonly selectBad: {
550
+ readonly summary: 'select element invalid';
551
+ readonly why: 'User cannot properly select among options';
552
+ readonly wcag: '4.1.2';
553
+ readonly weight: 4;
554
+ };
555
+ readonly buttonAlt: {
556
+ readonly summary: 'button has alt';
557
+ readonly why: 'User cannot get help explaing a button';
558
+ readonly wcag: '4.1.2';
559
+ readonly weight: 4;
560
+ };
561
+ readonly buttonNoContent: {
562
+ readonly summary: 'button name not visible';
563
+ readonly why: 'User cannot get help explaining a button';
564
+ readonly wcag: '4.1.2';
565
+ readonly weight: 1;
566
+ };
567
+ readonly buttonNoText: {
568
+ readonly summary: 'button not named';
569
+ readonly why: 'User cannot get help explaining a button';
570
+ readonly wcag: '4.1.2';
571
+ readonly weight: 4;
572
+ };
573
+ readonly menuItemNoText: {
574
+ readonly summary: 'menu item not named';
575
+ readonly why: 'User cannot get help explaing a menu item';
576
+ readonly wcag: '4.1.2';
577
+ readonly weight: 4;
578
+ };
579
+ readonly parentMissing: {
580
+ readonly summary: 'parent missing';
581
+ readonly why: 'Keyboard-only user cannot operate a custom tool';
582
+ readonly wcag: '1.3.1';
583
+ readonly weight: 4;
584
+ };
585
+ readonly descendantMissing: {
586
+ readonly summary: 'descendant missing';
587
+ readonly why: 'Keyboard-only user cannot operate a custom tool';
588
+ readonly wcag: '1.3.1';
589
+ readonly weight: 4;
590
+ };
591
+ readonly presentationChild: {
592
+ readonly summary: 'presentation element has child';
593
+ readonly why: 'Keyboard-only user cannot reach an item intended to be reachable';
594
+ readonly wcag: '1.3.1';
595
+ readonly weight: 4;
596
+ };
597
+ readonly svgImageNoText: {
598
+ readonly summary: 'svg image not named';
599
+ readonly why: 'User cannot get help understanding an image';
600
+ readonly wcag: '1.1.1';
601
+ readonly weight: 4;
602
+ };
603
+ readonly svgLabelID: {
604
+ readonly summary: 'svg label referent invalid';
605
+ readonly why: 'User cannot get help understanding an image';
606
+ readonly wcag: '1.1.1';
607
+ readonly weight: 4;
608
+ };
609
+ readonly cssBansPageRotate: {
610
+ readonly summary: 'CSS bans page rotation';
611
+ readonly why: 'User must read sideways after rotating a device';
612
+ readonly wcag: '1.3.4';
613
+ readonly weight: 4;
614
+ };
615
+ readonly cssBansElementRotate: {
616
+ readonly summary: 'CSS bans element rotation';
617
+ readonly why: 'User must read sideways after rotating a device';
618
+ readonly wcag: '1.3.4';
619
+ readonly weight: 4;
620
+ };
621
+ readonly orientationRisk: {
622
+ readonly summary: 'orientation issues not testable';
623
+ readonly why: 'User may need to read sideways after rotating a device';
624
+ readonly wcag: '1.3.4';
625
+ readonly weight: 1;
626
+ readonly max: 1;
627
+ };
628
+ readonly metaBansZoom: {
629
+ readonly summary: 'meta bans zoom';
630
+ readonly why: 'User cannot adjust the document size for readability';
631
+ readonly wcag: '1.4.4';
632
+ readonly weight: 4;
633
+ readonly max: 1;
634
+ };
635
+ readonly fontSizeAbsolute: {
636
+ readonly summary: 'font size absolute';
637
+ readonly why: 'User cannot adjust the text size for readability';
638
+ readonly wcag: '1.4.4';
639
+ readonly weight: 2;
640
+ };
641
+ readonly fontSmall: {
642
+ readonly summary: 'font small';
643
+ readonly why: 'Text is difficult to read';
644
+ readonly wcag: '1.4';
645
+ readonly weight: 3;
646
+ };
647
+ readonly horizontalSpacingFrozen: {
648
+ readonly summary: 'horizontal text spacing frozen';
649
+ readonly why: 'User cannot adjust the horizontal text spacing for readability';
650
+ readonly wcag: '1.4.12';
651
+ readonly weight: 4;
652
+ };
653
+ readonly verticalSpacingFrozen: {
654
+ readonly summary: 'vertical text spacing frozen';
655
+ readonly why: 'User cannot adjust the vertical text spacing for readability';
656
+ readonly wcag: '1.4.12';
657
+ readonly weight: 4;
658
+ };
659
+ readonly lineHeightAbsolute: {
660
+ readonly summary: 'line height absolute';
661
+ readonly why: 'User cannot adjust the line height of text for readability';
662
+ readonly wcag: '1.4.12';
663
+ readonly weight: 2;
664
+ };
665
+ readonly lineHeightLow: {
666
+ readonly summary: 'line height low';
667
+ readonly why: 'Text is difficult to read';
668
+ readonly wcag: '1.4.8';
669
+ readonly weight: 2;
670
+ };
671
+ readonly lineHeightBad: {
672
+ readonly summary: 'line height misdefined';
673
+ readonly why: 'Text is difficult to read';
674
+ readonly wcag: '1.4.8';
675
+ readonly weight: 4;
676
+ };
677
+ readonly overflowHidden: {
678
+ readonly summary: 'overflow hidden';
679
+ readonly why: 'User cannot enlarge the text for readability';
680
+ readonly wcag: '1.4.4';
681
+ readonly weight: 4;
682
+ };
683
+ readonly overflowHiddenRisk: {
684
+ readonly summary: 'overflow hidden?';
685
+ readonly why: 'User may be unable to enlarge the text for readability';
686
+ readonly wcag: '1.4.4';
687
+ readonly weight: 1;
688
+ };
689
+ readonly boxSizeAbsolute: {
690
+ readonly summary: 'box size absolute';
691
+ readonly why: 'User cannot enlarge the content of an item for readability';
692
+ readonly wcag: '1.4.4';
693
+ readonly weight: 3;
694
+ };
695
+ readonly elementBad: {
696
+ readonly summary: 'nonexistent element';
697
+ readonly why: 'User cannot understand the content';
698
+ readonly wcag: '4.1.2';
699
+ readonly weight: 4;
700
+ };
701
+ readonly titleBad: {
702
+ readonly summary: 'title attribute invalid';
703
+ readonly why: 'User gets too little, too much, or repeated help explaining an item';
704
+ readonly wcag: '1.3.1';
705
+ readonly weight: 1;
706
+ };
707
+ readonly baseElementMissing: {
708
+ readonly summary: 'base element missing where required';
709
+ readonly why: 'Browser cannot find a needed external resource';
710
+ readonly wcag: '1.3.1';
711
+ readonly weight: 4;
712
+ };
713
+ readonly linkElementMisplaced: {
714
+ readonly summary: 'link element invalid';
715
+ readonly why: 'Document fails to get a needed external resource';
716
+ readonly wcag: '1.3.1';
717
+ readonly weight: 4;
718
+ };
719
+ readonly linkElementBad: {
720
+ readonly summary: 'link element invalid';
721
+ readonly why: 'Document fails to get a needed external resource';
722
+ readonly wcag: '1.3.1';
723
+ readonly weight: 4;
724
+ };
725
+ readonly metaBad: {
726
+ readonly summary: 'meta invalid';
727
+ readonly why: 'Document fails to include needed data';
728
+ readonly wcag: '1.3.1';
729
+ readonly weight: 3;
730
+ };
731
+ readonly metaMisplaced: {
732
+ readonly summary: 'meta element in invalid location';
733
+ readonly why: 'Document fails to provide needed data';
734
+ readonly wcag: '1.3.1';
735
+ readonly weight: 4;
736
+ };
737
+ readonly stylesheetBanned: {
738
+ readonly summary: 'stylesheet prohibited';
739
+ readonly why: 'Browser displays the document improperly';
740
+ readonly wcag: '1.4';
741
+ readonly weight: 3;
742
+ };
743
+ readonly scriptNotDeferrable: {
744
+ readonly summary: 'script element invalidly deferred';
745
+ readonly why: 'Browser processes the document improperly';
746
+ readonly wcag: '1.3.1';
747
+ readonly weight: 4;
748
+ };
749
+ readonly scriptBanned: {
750
+ readonly summary: 'script prohibited';
751
+ readonly why: 'Browser processes the document improperly';
752
+ readonly wcag: '4.1';
753
+ readonly weight: 3;
754
+ };
755
+ readonly scriptElementBad: {
756
+ readonly summary: 'script element invalid';
757
+ readonly why: 'Browser processes the document improperly';
758
+ readonly wcag: '1.3.1';
759
+ readonly weight: 4;
760
+ };
761
+ readonly specRulesScriptBad: {
762
+ readonly summary: 'speculation rules script element invalid';
763
+ readonly why: 'Document navigation performs poorly';
764
+ readonly wcag: '1.3.1';
765
+ readonly weight: 1;
766
+ };
767
+ readonly itemIDBad: {
768
+ readonly summary: 'itemid invalid';
769
+ readonly why: 'User cannot get help to identify a referent';
770
+ readonly wcag: '1.3.1';
771
+ readonly weight: 4;
772
+ };
773
+ readonly itemTypeBad: {
774
+ readonly summary: 'itemtype invalid';
775
+ readonly why: 'User cannot get help on the definition of a term';
776
+ readonly wcag: '1.3.1';
777
+ readonly weight: 4;
778
+ };
779
+ readonly iframeTitleBad: {
780
+ readonly summary: 'iframe not named';
781
+ readonly why: 'User cannot get help on the topic of an embedded document';
782
+ readonly wcag: '4.1.2';
783
+ readonly weight: 4;
784
+ };
785
+ readonly roleBad: {
786
+ readonly summary: 'role invalid';
787
+ readonly why: 'User cannot get help on the nature of an item';
788
+ readonly wcag: '4.1.2';
789
+ readonly weight: 3;
790
+ };
791
+ readonly roleHierarchyBad: {
792
+ readonly summary: 'ancestor and descendant roles incompatible';
793
+ readonly why: 'User may misunderstand or be blocked from exposure to an item';
794
+ readonly wcag: '4.1.2';
795
+ readonly weight: 4;
796
+ };
797
+ readonly roleRedundant: {
798
+ readonly summary: 'role redundant';
799
+ readonly why: 'Document includes unnecessary code';
800
+ readonly wcag: '4.1.2';
801
+ readonly weight: 1;
802
+ };
803
+ readonly roleConfusion: {
804
+ readonly summary: 'role assigned instead of implicit';
805
+ readonly why: 'User may misunderstand the purpose of an item';
806
+ readonly wcag: '4.1.2';
807
+ readonly weight: 1;
808
+ };
809
+ readonly dirBad: {
810
+ readonly summary: 'dir invalid';
811
+ readonly why: 'Item may behave improperly';
812
+ readonly wcag: '4.1.2';
813
+ readonly weight: 1;
814
+ };
815
+ readonly attributeBad: {
816
+ readonly summary: 'attribute invalid';
817
+ readonly why: 'Item behaves improperly';
818
+ readonly wcag: '1.3.1';
819
+ readonly weight: 4;
820
+ };
821
+ readonly sizesAttributeBad: {
822
+ readonly summary: 'sizes attribute invalid';
823
+ readonly why: 'Item behaves improperly';
824
+ readonly wcag: '1.3.1';
825
+ readonly weight: 4;
826
+ };
827
+ readonly attributeValueBad: {
828
+ readonly summary: 'attribute value invalid';
829
+ readonly why: 'Item behaves improperly';
830
+ readonly wcag: '1.3.1';
831
+ readonly weight: 4;
832
+ };
833
+ readonly attributeValueRisk: {
834
+ readonly summary: 'attribute value bad?';
835
+ readonly why: 'Item may behave improperly';
836
+ readonly wcag: '4.1.2';
837
+ readonly weight: 1;
838
+ };
839
+ readonly attributeMissing: {
840
+ readonly summary: 'attribute missing';
841
+ readonly why: 'Item behaves improperly';
842
+ readonly wcag: '4.1.2';
843
+ readonly weight: 4;
844
+ };
845
+ readonly roleMissing: {
846
+ readonly summary: 'role missing';
847
+ readonly why: 'Item behaves improperly';
848
+ readonly wcag: '4.1.2';
849
+ readonly weight: 3;
850
+ };
851
+ readonly roleMissingRisk: {
852
+ readonly summary: 'role missing?';
853
+ readonly why: 'Item may behave improperly';
854
+ readonly wcag: '4.1.2';
855
+ readonly weight: 1;
856
+ };
857
+ readonly ariaMissing: {
858
+ readonly summary: 'aria attribute missing';
859
+ readonly why: 'Item behaves improperly';
860
+ readonly wcag: '4.1.2';
861
+ readonly weight: 4;
862
+ };
863
+ readonly ariaMissingRisk: {
864
+ readonly summary: 'aria attribute missing?';
865
+ readonly why: 'Item may behave improperly';
866
+ readonly wcag: '4.1.2';
867
+ readonly weight: 2;
868
+ };
869
+ readonly ariaAttributeBad: {
870
+ readonly summary: 'aria attribute invalid';
871
+ readonly why: 'Item behavior violates user expectations';
872
+ readonly wcag: '4.1.2';
873
+ readonly weight: 4;
874
+ };
875
+ readonly ariaRedundant: {
876
+ readonly summary: 'aria attribute redundant';
877
+ readonly why: 'Document includes unnecessary code';
878
+ readonly wcag: '4.1.2';
879
+ readonly weight: 1;
880
+ };
881
+ readonly ariaVersusHTML: {
882
+ readonly summary: 'aria and HTML attributes have conflicting value';
883
+ readonly why: 'User gets erroneous help with content';
884
+ readonly wcag: '4.1.2';
885
+ readonly weight: 4;
886
+ };
887
+ readonly ariaReferenceBad: {
888
+ readonly summary: 'aria reference invalid';
889
+ readonly why: 'Item behavior violates user expectations';
890
+ readonly wcag: '1.3.1';
891
+ readonly weight: 4;
892
+ };
893
+ readonly autocompleteBad: {
894
+ readonly summary: 'autocomplete invalid';
895
+ readonly why: 'User cannot get help entering personal information in a form item';
896
+ readonly wcag: '1.3.5';
897
+ readonly weight: 3;
898
+ };
899
+ readonly autocompleteNone: {
900
+ readonly summary: 'autocomplete missing';
901
+ readonly why: 'User cannot get help entering personal information in a form';
902
+ readonly wcag: '1.3.5';
903
+ readonly weight: 4;
904
+ };
905
+ readonly autocompleteRisk: {
906
+ readonly summary: 'autocomplete dubious';
907
+ readonly why: 'User may fail to get help entering personal information in a form item';
908
+ readonly wcag: '1.3.5';
909
+ readonly weight: 1;
910
+ };
911
+ readonly requirementBad: {
912
+ readonly summary: 'requirement invalid';
913
+ readonly why: 'User may fail to get help determining whether a form item must be completed';
914
+ readonly wcag: '1.3.5';
915
+ readonly weight: 4;
916
+ };
917
+ readonly requirementRedundant: {
918
+ readonly summary: 'requirement redundant';
919
+ readonly why: 'Help determining whether a form item must be completed is at risk of corruption';
920
+ readonly wcag: '1.3.5';
921
+ readonly weight: 1;
922
+ };
923
+ readonly contrastAA: {
924
+ readonly summary: 'contrast poor';
925
+ readonly why: 'Content is difficult to understand';
926
+ readonly wcag: '1.4.3';
927
+ readonly weight: 4;
928
+ };
929
+ readonly contrastAAA: {
930
+ readonly summary: 'text contrast improvable';
931
+ readonly why: 'Content is not easy to understand';
932
+ readonly wcag: '1.4.6';
933
+ readonly weight: 1;
934
+ };
935
+ readonly contrastRisk: {
936
+ readonly summary: 'text contrast not testable';
937
+ readonly why: 'Text may be difficult to read';
938
+ readonly wcag: '1.4.3';
939
+ readonly weight: 1;
940
+ };
941
+ readonly infoNeedsColor: {
942
+ readonly summary: 'color the only classifier?';
943
+ readonly why: 'Categories are indistinguishable';
944
+ readonly wcag: '1.4.1';
945
+ readonly weight: 1;
946
+ };
947
+ readonly colorNamedRisk: {
948
+ readonly summary: 'color perception required?';
949
+ readonly why: 'Content is impossible to perceive under some conditions';
950
+ readonly wcag: '1.4.1';
951
+ readonly weight: 1;
952
+ };
953
+ readonly sensoryDependenceRisk: {
954
+ readonly summary: 'instruction requires particular sense?';
955
+ readonly why: 'Content is impossible to perceive under some conditions';
956
+ readonly wcag: '1.4.1';
957
+ readonly weight: 1;
958
+ };
959
+ readonly idEmpty: {
960
+ readonly summary: 'ID empty';
961
+ readonly why: 'Item behaves improperly';
962
+ readonly wcag: '1.3.1';
963
+ readonly weight: 4;
964
+ };
965
+ readonly targetEmpty: {
966
+ readonly summary: 'target empty';
967
+ readonly why: 'Item is displayed improperly';
968
+ readonly wcag: '1.3.1';
969
+ readonly weight: 4;
970
+ };
971
+ readonly headingsEmbedded: {
972
+ readonly summary: 'heading within a heading';
973
+ readonly why: 'User cannot understand the page organization';
974
+ readonly wcag: '4.1.2';
975
+ readonly weight: 4;
976
+ };
977
+ readonly headingEmpty: {
978
+ readonly summary: 'heading empty';
979
+ readonly why: 'User cannot get help on the topic of a part of the document';
980
+ readonly wcag: '2.4.6';
981
+ readonly weight: 3;
982
+ };
983
+ readonly headingOfNothing: {
984
+ readonly summary: 'heading heads nothing';
985
+ readonly why: 'Helper misdescribes the document';
986
+ readonly wcag: '1.3.1';
987
+ readonly weight: 2;
988
+ };
989
+ readonly typeBad: {
990
+ readonly summary: 'type invalid';
991
+ readonly why: 'Document styles are at risk of corruption';
992
+ readonly wcag: '1.3.1';
993
+ readonly weight: 4;
994
+ };
995
+ readonly typeRedundant: {
996
+ readonly summary: 'type redundant';
997
+ readonly why: 'Document includes unnecessary code';
998
+ readonly wcag: '1.3.1';
999
+ readonly weight: 1;
1000
+ };
1001
+ readonly imageTextRedundant: {
1002
+ readonly summary: 'image name redundant';
1003
+ readonly why: 'Helper repeats the explanation of an image';
1004
+ readonly wcag: '1.1.1';
1005
+ readonly weight: 1;
1006
+ };
1007
+ readonly decorativeTitle: {
1008
+ readonly summary: 'decorative element has title';
1009
+ readonly why: 'Hovering-produced information is denied to a keyboard-only user';
1010
+ readonly wcag: '1.3.1';
1011
+ readonly weight: 2;
1012
+ };
1013
+ readonly titleRedundant: {
1014
+ readonly summary: 'title attribute redundant';
1015
+ readonly why: 'Helper repeats the explanation of an item';
1016
+ readonly wcag: '1.3.1';
1017
+ readonly weight: 1;
1018
+ };
1019
+ readonly titleEmpty: {
1020
+ readonly summary: 'title attribute empty';
1021
+ readonly why: 'Hovering does not get the promised explanation of an item';
1022
+ readonly wcag: '1.3.1';
1023
+ readonly weight: 1;
1024
+ };
1025
+ readonly docTypeMissing: {
1026
+ readonly summary: 'DOCTYPE missing';
1027
+ readonly why: 'Browser processes the document improperly';
1028
+ readonly wcag: '1.3.1';
1029
+ readonly weight: 4;
1030
+ readonly max: 1;
1031
+ };
1032
+ readonly docTypeMisplaced: {
1033
+ readonly summary: 'DOCTYPE in invalid location';
1034
+ readonly why: 'Browser processes the document improperly';
1035
+ readonly wcag: '1.3.1';
1036
+ readonly weight: 4;
1037
+ readonly max: 1;
1038
+ };
1039
+ readonly docTypeBad: {
1040
+ readonly summary: 'DOCTYPE invalid';
1041
+ readonly why: 'Browser processes the document improperly';
1042
+ readonly wcag: '1.3.1';
1043
+ readonly weight: 3;
1044
+ readonly max: 1;
1045
+ };
1046
+ readonly pageTitleBad: {
1047
+ readonly summary: 'page title invalid';
1048
+ readonly why: 'Browser processes the document improperly';
1049
+ readonly wcag: '1.3.1';
1050
+ readonly weight: 3;
1051
+ readonly max: 1;
1052
+ };
1053
+ readonly pageTitle: {
1054
+ readonly summary: 'page title missing';
1055
+ readonly why: 'User is not informed of the topic of the document';
1056
+ readonly wcag: '2.4.2';
1057
+ readonly weight: 4;
1058
+ readonly max: 1;
1059
+ };
1060
+ readonly headElementsBad: {
1061
+ readonly summary: 'element in head invalid';
1062
+ readonly why: 'Browser processes the document improperly';
1063
+ readonly wcag: '4.1.1';
1064
+ readonly weight: 3;
1065
+ };
1066
+ readonly headingLevelSkip: {
1067
+ readonly summary: 'heading level skipped';
1068
+ readonly why: 'Helper misdescribes the document';
1069
+ readonly wcag: '1.3.1';
1070
+ readonly weight: 2;
1071
+ };
1072
+ readonly headingStructure: {
1073
+ readonly summary: 'heading structure illogical';
1074
+ readonly why: 'Helper misdescribes the document';
1075
+ readonly wcag: '1.3.1';
1076
+ readonly weight: 2;
1077
+ };
1078
+ readonly headingConfusion: {
1079
+ readonly summary: 'heading names repeated';
1080
+ readonly why: 'User cannot differentiate parts of the document';
1081
+ readonly wcag: '1.3.1';
1082
+ readonly weight: 2;
1083
+ };
1084
+ readonly headingMisuseRisk: {
1085
+ readonly summary: 'heading used for styling?';
1086
+ readonly why: 'User cannot understand the document structure';
1087
+ readonly wcag: '1.3.1';
1088
+ readonly weight: 2;
1089
+ };
1090
+ readonly headingNone: {
1091
+ readonly summary: 'headings missing';
1092
+ readonly why: 'User cannot survey parts of the document';
1093
+ readonly wcag: '1.3.1';
1094
+ readonly weight: 3;
1095
+ readonly max: 1;
1096
+ };
1097
+ readonly h1Not1: {
1098
+ readonly summary: 'not exactly 1 h1 heading';
1099
+ readonly why: 'User cannot understand the topic of the document';
1100
+ readonly wcag: '1.3.1';
1101
+ readonly weight: 2;
1102
+ readonly max: 1;
1103
+ };
1104
+ readonly h1Not1st: {
1105
+ readonly summary: 'h1 not 1st heading';
1106
+ readonly why: 'User cannot understand the topic of the document';
1107
+ readonly wcag: '1.3.1';
1108
+ readonly weight: 3;
1109
+ readonly max: 1;
1110
+ };
1111
+ readonly docHeadingNotH1: {
1112
+ readonly summary: 'primary heading not h1';
1113
+ readonly why: 'User cannot understand the topic of the document';
1114
+ readonly wcag: '1.3.1';
1115
+ readonly weight: 2;
1116
+ readonly max: 1;
1117
+ };
1118
+ readonly articleHeadingless: {
1119
+ readonly summary: 'article heading missing';
1120
+ readonly why: 'User cannot understand the topic of a part of the document';
1121
+ readonly wcag: '1.3.1';
1122
+ readonly weight: 1;
1123
+ };
1124
+ readonly sectionHeadingless: {
1125
+ readonly summary: 'section heading missing';
1126
+ readonly why: 'User cannot understand the topic of a part of the document';
1127
+ readonly wcag: '1.3.1';
1128
+ readonly weight: 1;
1129
+ };
1130
+ readonly headingLength: {
1131
+ readonly summary: 'heading abnormally long';
1132
+ readonly why: 'User has difficulty understanding the topic of a part of the document';
1133
+ readonly wcag: '1.3.1';
1134
+ readonly weight: 1;
1135
+ };
1136
+ readonly blockQuoteShort: {
1137
+ readonly summary: 'block quote abnormally short';
1138
+ readonly why: 'Content can be made easier to read';
1139
+ readonly wcag: '1.4.8';
1140
+ readonly weight: 1;
1141
+ };
1142
+ readonly justification: {
1143
+ readonly summary: 'text fully justified';
1144
+ readonly why: 'Text is difficult to read';
1145
+ readonly wcag: '1.4.8';
1146
+ readonly weight: 2;
1147
+ };
1148
+ readonly justificationRisk: {
1149
+ readonly summary: 'justification undefined?';
1150
+ readonly why: 'Text may be difficult to read';
1151
+ readonly wcag: '1.4.8';
1152
+ readonly weight: 1;
1153
+ };
1154
+ readonly nonSemanticText: {
1155
+ readonly summary: 'semantic properties represented with styles';
1156
+ readonly why: 'User cannot get help to fully understand the text';
1157
+ readonly wcag: '1.3.1';
1158
+ readonly weight: 2;
1159
+ };
1160
+ readonly hrConfusionRisk: {
1161
+ readonly summary: 'hr misused';
1162
+ readonly why: 'User cannot get help on the nature of segments of the document';
1163
+ readonly wcag: '1.3.1';
1164
+ readonly weight: 1;
1165
+ };
1166
+ readonly pseudoCodeRisk: {
1167
+ readonly summary: 'pre use dubious';
1168
+ readonly why: 'User may be unable to get help to fully understand the text';
1169
+ readonly wcag: '1.3.1';
1170
+ readonly weight: 1;
1171
+ };
1172
+ readonly pseudoParagraphRisk: {
1173
+ readonly summary: 'double br use dubious';
1174
+ readonly why: 'User may be unable to get help to fully understand the text';
1175
+ readonly wcag: '1.3.1';
1176
+ readonly weight: 1;
1177
+ };
1178
+ readonly pseudoHeadingRisk: {
1179
+ readonly summary: 'heading-like styles dubious';
1180
+ readonly why: 'User may be unable to understand the topic of a part of the document';
1181
+ readonly wcag: '1.3.1';
1182
+ readonly weight: 1;
1183
+ };
1184
+ readonly pseudoLinkScriptRisk: {
1185
+ readonly summary: 'script used instead of link';
1186
+ readonly why: 'Link may misbehave';
1187
+ readonly wcag: '1.3.1';
1188
+ readonly weight: 1;
1189
+ };
1190
+ readonly pseudoLinkUnderlineRisk: {
1191
+ readonly summary: 'underlining dubious';
1192
+ readonly why: 'User may be misled into believing some text is a link';
1193
+ readonly wcag: '1.3.1';
1194
+ readonly weight: 1;
1195
+ };
1196
+ readonly listChild: {
1197
+ readonly summary: 'list child invalid';
1198
+ readonly why: 'User cannot get help on which items are in a list';
1199
+ readonly wcag: '1.3.1';
1200
+ readonly weight: 4;
1201
+ };
1202
+ readonly listItemOrphan: {
1203
+ readonly summary: 'list item orphan';
1204
+ readonly why: 'User cannot get help on whether an item is in a list';
1205
+ readonly wcag: '1.3.1';
1206
+ readonly weight: 4;
1207
+ };
1208
+ readonly descriptionOrphan: {
1209
+ readonly summary: 'description list orphan';
1210
+ readonly why: 'User cannot get help on whether an item is in a list';
1211
+ readonly wcag: '1.3.1';
1212
+ readonly weight: 4;
1213
+ };
1214
+ readonly descriptionOrder: {
1215
+ readonly summary: 'description list misordered';
1216
+ readonly why: 'User cannot get help on the structure of a list';
1217
+ readonly wcag: '1.3.1';
1218
+ readonly weight: 4;
1219
+ };
1220
+ readonly pseudoList: {
1221
+ readonly summary: 'list-like br use dubious';
1222
+ readonly why: 'User cannot get help recognizing a list of items';
1223
+ readonly wcag: '1.3.1';
1224
+ readonly weight: 1;
1225
+ };
1226
+ readonly pseudoListRisk: {
1227
+ readonly summary: 'list not marked as such?';
1228
+ readonly why: 'User may be unable to get help on which items are in lists';
1229
+ readonly wcag: '1.3.1';
1230
+ readonly weight: 1;
1231
+ };
1232
+ readonly pseudoOrderedListRisk: {
1233
+ readonly summary: 'ordered list not coded as such?';
1234
+ readonly why: 'User may be unable to get help on whether a list is ordered';
1235
+ readonly wcag: '1.3.1';
1236
+ readonly weight: 1;
1237
+ };
1238
+ readonly pseudoNavList: {
1239
+ readonly summary: 'nav links not list';
1240
+ readonly why: 'User cannot get help recognizing a list of navigation links';
1241
+ readonly wcag: '1.3.1';
1242
+ readonly weight: 2;
1243
+ };
1244
+ readonly pseudoQuoteRisk: {
1245
+ readonly summary: 'quotation miscoded?';
1246
+ readonly why: 'User may be unable to get help identifying a quotation';
1247
+ readonly wcag: '3.2.4';
1248
+ readonly weight: 1;
1249
+ };
1250
+ readonly nonQuoteRisk: {
1251
+ readonly summary: 'nonquotation coded as block quote?';
1252
+ readonly why: 'User may misunderstand text as a quotation';
1253
+ readonly wcag: '3.2.4';
1254
+ readonly weight: 1;
1255
+ };
1256
+ readonly selectNoText: {
1257
+ readonly summary: 'select not named';
1258
+ readonly why: 'User cannot get help on the topic of a list of options';
1259
+ readonly wcag: '4.1.2';
1260
+ readonly weight: 3;
1261
+ };
1262
+ readonly optionNoText: {
1263
+ readonly summary: 'option not named';
1264
+ readonly why: 'User cannot get help to understand an option';
1265
+ readonly wcag: '4.1.2';
1266
+ readonly weight: 4;
1267
+ };
1268
+ readonly selectFlatRisk: {
1269
+ readonly summary: 'option groups not marked?';
1270
+ readonly why: 'User may be unable to get help recognizing groups of options';
1271
+ readonly wcag: '1.3.1';
1272
+ readonly weight: 1;
1273
+ };
1274
+ readonly noOptionFocusable: {
1275
+ readonly summary: 'no option focusable';
1276
+ readonly why: 'Keyboard-only user cannot choose an option';
1277
+ readonly wcag: '2.1.1';
1278
+ readonly weight: 1;
1279
+ };
1280
+ readonly accessKeyDuplicate: {
1281
+ readonly summary: 'duplicate access key';
1282
+ readonly why: 'Keyboard shortcut does not reliably trigger the intended action';
1283
+ readonly wcag: '1.3.1';
1284
+ readonly weight: 3;
1285
+ };
1286
+ readonly fieldSetMissing: {
1287
+ readonly summary: 'fieldset missing';
1288
+ readonly why: 'User cannot get help recognizing a group of related form items';
1289
+ readonly wcag: '1.3.1';
1290
+ readonly weight: 2;
1291
+ };
1292
+ readonly fieldSetRisk: {
1293
+ readonly summary: 'fieldset missing?';
1294
+ readonly why: 'User may be unable to get help recognizing a group of related form items';
1295
+ readonly wcag: '1.3.1';
1296
+ readonly weight: 1;
1297
+ };
1298
+ readonly legendMisplaced: {
1299
+ readonly summary: 'legend location invalid';
1300
+ readonly why: 'User cannot get help on the topic of a group of form items';
1301
+ readonly wcag: '4.1.2';
1302
+ readonly weight: 4;
1303
+ };
1304
+ readonly legendMissing: {
1305
+ readonly summary: 'legend missing';
1306
+ readonly why: 'User cannot get help on the topic of a group of form items';
1307
+ readonly wcag: '4.1.2';
1308
+ readonly weight: 2;
1309
+ };
1310
+ readonly groupName: {
1311
+ readonly summary: 'group not named';
1312
+ readonly why: 'User cannot get help on the topic of a group of form items';
1313
+ readonly wcag: '4.1.2';
1314
+ readonly weight: 3;
1315
+ };
1316
+ readonly layoutTable: {
1317
+ readonly summary: 'table misused';
1318
+ readonly why: 'Helper misinforms a user about whether items are cells of a table';
1319
+ readonly wcag: '1.3.1';
1320
+ readonly weight: 2;
1321
+ };
1322
+ readonly tabularTableless: {
1323
+ readonly summary: 'table not marked as such';
1324
+ readonly why: 'Helper misinforms a user about whether items are cells of a table';
1325
+ readonly wcag: '1.3.1';
1326
+ readonly weight: 3;
1327
+ };
1328
+ readonly tableColumnsVary: {
1329
+ readonly summary: 'table column counts vary';
1330
+ readonly why: 'User cannot get help on the dimensions of a table';
1331
+ readonly wcag: '1.3.1';
1332
+ readonly weight: 3;
1333
+ };
1334
+ readonly tableCaption: {
1335
+ readonly summary: 'table caption missing';
1336
+ readonly why: 'User cannot get help on the topic of a table';
1337
+ readonly wcag: '1.3.1';
1338
+ readonly weight: 1;
1339
+ };
1340
+ readonly tableCaptionLoc: {
1341
+ readonly summary: 'table caption location invalid';
1342
+ readonly why: 'User cannot get help on the topic of a table';
1343
+ readonly wcag: '1.3.1';
1344
+ readonly weight: 3;
1345
+ };
1346
+ readonly tableCapSum: {
1347
+ readonly summary: 'table summary duplicative';
1348
+ readonly why: 'Helper informs a user repetitively about the topic of a table';
1349
+ readonly wcag: '1.3.1';
1350
+ readonly weight: 2;
1351
+ };
1352
+ readonly tableSum: {
1353
+ readonly summary: 'table summary empty';
1354
+ readonly why: 'User cannot get help summarizing a table';
1355
+ readonly wcag: '1.3.1';
1356
+ readonly weight: 4;
1357
+ };
1358
+ readonly tableLabelID: {
1359
+ readonly summary: 'table aria-labelledby invalid';
1360
+ readonly why: 'User cannot get help on the topic of a table';
1361
+ readonly wcag: '1.3.1';
1362
+ readonly weight: 4;
1363
+ };
1364
+ readonly tableDescriptionID: {
1365
+ readonly summary: 'table aria-describedby invalid';
1366
+ readonly why: 'User cannot get help on the topic of a table';
1367
+ readonly wcag: '1.3.1';
1368
+ readonly weight: 4;
1369
+ };
1370
+ readonly cellHeadersNotInferrable: {
1371
+ readonly summary: 'cell headers not inferrable';
1372
+ readonly why: 'User cannot get help on relationships in a table';
1373
+ readonly wcag: '1.3.1';
1374
+ readonly weight: 4;
1375
+ };
1376
+ readonly cellHeadersOutsideTable: {
1377
+ readonly summary: 'cell headers outside table';
1378
+ readonly why: 'User cannot get help on relationships in a table';
1379
+ readonly wcag: '1.3.1';
1380
+ readonly weight: 4;
1381
+ };
1382
+ readonly cellHeadersAmbiguityRisk: {
1383
+ readonly summary: 'cell headers ambiguous?';
1384
+ readonly why: 'User may be unable to get help on relationships in a table';
1385
+ readonly wcag: '1.3.1';
1386
+ readonly weight: 2;
1387
+ };
1388
+ readonly tableHeaderless: {
1389
+ readonly summary: 'table headers missing';
1390
+ readonly why: 'User cannot get help on relationships in a table';
1391
+ readonly wcag: '1.3.1';
1392
+ readonly weight: 3;
1393
+ };
1394
+ readonly tableCellHeaderless: {
1395
+ readonly summary: 'table-cell header missing';
1396
+ readonly why: 'User cannot get help on the topic of a table cell';
1397
+ readonly wcag: '1.3.1';
1398
+ readonly weight: 3;
1399
+ };
1400
+ readonly tableHeaderCellless: {
1401
+ readonly summary: 'table-header cell missing';
1402
+ readonly why: 'User cannot get help on relationships in a table';
1403
+ readonly wcag: '1.3.1';
1404
+ readonly weight: 4;
1405
+ };
1406
+ readonly TableHeaderScopeRisk: {
1407
+ readonly summary: 'Table scope ambiguous?';
1408
+ readonly why: 'User may be unable to get help on relationships in a table';
1409
+ readonly wcag: '1.3.1';
1410
+ readonly weight: 1;
1411
+ };
1412
+ readonly tableHeaderEmpty: {
1413
+ readonly summary: 'table header empty';
1414
+ readonly why: 'User cannot get help on relationships in a table';
1415
+ readonly wcag: '1.3.1';
1416
+ readonly weight: 2;
1417
+ };
1418
+ readonly tableHead: {
1419
+ readonly summary: 'thead missing';
1420
+ readonly why: 'User cannot get help on parts of a table';
1421
+ readonly wcag: '1.3.1';
1422
+ readonly weight: 1;
1423
+ };
1424
+ readonly tableBody: {
1425
+ readonly summary: 'tbody missing';
1426
+ readonly why: 'User cannot get help on parts of a table';
1427
+ readonly wcag: '1.3.1';
1428
+ readonly weight: 1;
1429
+ };
1430
+ readonly tableEmbedded: {
1431
+ readonly summary: 'table embedded in table';
1432
+ readonly why: 'User cannot get help on relationships in a table';
1433
+ readonly wcag: '1.3.1';
1434
+ readonly weight: 2;
1435
+ };
1436
+ readonly divInTable: {
1437
+ readonly summary: 'div embedded in table';
1438
+ readonly why: 'Blocks of content within a table cell may confuse a user';
1439
+ readonly wcag: '1.4';
1440
+ readonly weight: 1;
1441
+ };
1442
+ readonly formInTable: {
1443
+ readonly summary: 'form embedded in table';
1444
+ readonly why: 'Navigation in a form may confuse a keyboard-only user';
1445
+ readonly wcag: '2.1.1';
1446
+ readonly weight: 1;
1447
+ };
1448
+ readonly inputInTable: {
1449
+ readonly summary: 'input embedded in table';
1450
+ readonly why: 'Entry of data in a form may confuse a keyboard-only user';
1451
+ readonly wcag: '2.1.1';
1452
+ readonly weight: 1;
1453
+ };
1454
+ readonly tableHeading: {
1455
+ readonly summary: 'heading located in table';
1456
+ readonly why: 'Complex relationships in a table may confuse a user';
1457
+ readonly wcag: '1.3.1';
1458
+ readonly weight: 1;
1459
+ };
1460
+ readonly controlNoText: {
1461
+ readonly summary: 'control not named';
1462
+ readonly why: 'User cannot get help on how to operate a form item';
1463
+ readonly wcag: '1.3.1';
1464
+ readonly weight: 4;
1465
+ };
1466
+ readonly controlLabelInvisible: {
1467
+ readonly summary: 'control label invisible';
1468
+ readonly why: 'User cannot understand how to operate a form item';
1469
+ readonly wcag: '2.4.6';
1470
+ readonly weight: 4;
1471
+ };
1472
+ readonly inputLabelInvisibleRisk: {
1473
+ readonly summary: 'input label invisible?';
1474
+ readonly why: 'User cannot understand where to enter information';
1475
+ readonly wcag: '2.4.6';
1476
+ readonly weight: 1;
1477
+ };
1478
+ readonly titleAsLabel: {
1479
+ readonly summary: 'control has title instead of label';
1480
+ readonly why: 'User cannot get help on how to operate a form item';
1481
+ readonly wcag: '2.4.6';
1482
+ readonly weight: 3;
1483
+ };
1484
+ readonly visibleLabelNotInName: {
1485
+ readonly summary: 'visible label not in name';
1486
+ readonly why: 'User cannot get help choosing a form control to operate';
1487
+ readonly wcag: '2.5.3';
1488
+ readonly weight: 3;
1489
+ };
1490
+ readonly targetSmall: {
1491
+ readonly summary: 'target small';
1492
+ readonly why: 'User cannot reliably choose an item to click or tap';
1493
+ readonly wcag: '2.5.5';
1494
+ readonly weight: 1;
1495
+ };
1496
+ readonly targetTiny: {
1497
+ readonly summary: 'target very small';
1498
+ readonly why: 'User cannot reliably choose an item to click or tap';
1499
+ readonly wcag: '2.5.8';
1500
+ readonly weight: 3;
1501
+ };
1502
+ readonly targetsNear: {
1503
+ readonly summary: 'small targets too near to each other';
1504
+ readonly why: 'User cannot reliably choose an item to click or tap';
1505
+ readonly wcag: '2.5.8';
1506
+ readonly weight: 3;
1507
+ };
1508
+ readonly visibleBulk: {
1509
+ readonly summary: 'large visible-element count';
1510
+ readonly why: 'User cannot easily find items in the document';
1511
+ readonly wcag: '2.4';
1512
+ readonly weight: 1;
1513
+ readonly max: 1;
1514
+ };
1515
+ readonly activeEmbedding: {
1516
+ readonly summary: 'control child of link or button';
1517
+ readonly why: 'User cannot reliably choose an item to click or tap';
1518
+ readonly wcag: '2.5.5';
1519
+ readonly weight: 3;
1520
+ };
1521
+ readonly unfocusability: {
1522
+ readonly summary: 'element not focusable';
1523
+ readonly why: 'Keyboard-only user cannot choose an item to operate';
1524
+ readonly wcag: '2.1.1';
1525
+ readonly weight: 4;
1526
+ };
1527
+ readonly focusDiscrepancy: {
1528
+ readonly summary: 'Tab-focusable elements wrong';
1529
+ readonly why: 'Item selections by a keyboard-only user are useless or impossible';
1530
+ readonly wcag: '2.1.1';
1531
+ readonly weight: 4;
1532
+ };
1533
+ readonly focusIndicationBad: {
1534
+ readonly summary: 'focus indication poor';
1535
+ readonly why: 'Keyboard-only user cannot choose an item to operate';
1536
+ readonly wcag: '2.4.7';
1537
+ readonly weight: 4;
1538
+ };
1539
+ readonly focusIndicationImprovable: {
1540
+ readonly summary: 'focus indication improvable';
1541
+ readonly why: 'Keyboard-only user cannot easily choose an item to operate';
1542
+ readonly wcag: '2.4.7';
1543
+ readonly weight: 2;
1544
+ };
1545
+ readonly focusIndicationRisk: {
1546
+ readonly summary: 'focus indication poor?';
1547
+ readonly why: 'Keyboard-only user cannot choose an item to operate';
1548
+ readonly wcag: '2.4.7';
1549
+ readonly weight: 1;
1550
+ };
1551
+ readonly boxInvisibleRisk: {
1552
+ readonly summary: 'border or outline invisible?';
1553
+ readonly why: 'User cannot perceive the boundary of an item';
1554
+ readonly wcag: '2.5.8';
1555
+ readonly weight: 1;
1556
+ };
1557
+ readonly allCaps: {
1558
+ readonly summary: 'all-capital text';
1559
+ readonly why: 'Text is difficult to read';
1560
+ readonly wcag: '3.1.5';
1561
+ readonly weight: 1;
1562
+ };
1563
+ readonly allItalics: {
1564
+ readonly summary: 'all-italic text';
1565
+ readonly why: 'Text is difficult to read';
1566
+ readonly wcag: '3.1.5';
1567
+ readonly weight: 1;
1568
+ };
1569
+ readonly textDistortion: {
1570
+ readonly summary: 'text distortion';
1571
+ readonly why: 'Text is difficult to read';
1572
+ readonly wcag: '3.1.5';
1573
+ readonly weight: 1;
1574
+ };
1575
+ readonly noLandmarks: {
1576
+ readonly summary: 'no landmarks';
1577
+ readonly why: 'User cannot get help on how the document is organized';
1578
+ readonly wcag: '1.3.6';
1579
+ readonly weight: 2;
1580
+ readonly max: 1;
1581
+ };
1582
+ readonly contentBeyondLandmarks: {
1583
+ readonly summary: 'content beyond landmarks';
1584
+ readonly why: 'User cannot get help on how some of the document is organized';
1585
+ readonly wcag: '1.3.6';
1586
+ readonly weight: 1;
1587
+ };
1588
+ readonly footerNotTop: {
1589
+ readonly summary: 'footer child of landmark';
1590
+ readonly why: 'User cannot get help on how some of the document is organized';
1591
+ readonly wcag: '1.3.6';
1592
+ readonly weight: 1;
1593
+ };
1594
+ readonly asideNotTop: {
1595
+ readonly summary: 'aside child of landmark';
1596
+ readonly why: 'User cannot get help on how some of the document is organized';
1597
+ readonly wcag: '1.3.6';
1598
+ readonly weight: 2;
1599
+ };
1600
+ readonly mainNotTop: {
1601
+ readonly summary: 'main child of landmark';
1602
+ readonly why: 'User cannot get help on how some of the document is organized';
1603
+ readonly wcag: '1.3.6';
1604
+ readonly weight: 2;
1605
+ };
1606
+ readonly mainConfusion: {
1607
+ readonly summary: 'mains not distinctly named';
1608
+ readonly why: 'User cannot get help on how some of the document is organized';
1609
+ readonly wcag: '1.3.6';
1610
+ readonly weight: 3;
1611
+ };
1612
+ readonly mainNone: {
1613
+ readonly summary: 'main missing';
1614
+ readonly why: 'User cannot get help on how some of the document is organized';
1615
+ readonly wcag: '1.3.6';
1616
+ readonly weight: 2;
1617
+ readonly max: 1;
1618
+ };
1619
+ readonly mainNot1: {
1620
+ readonly summary: 'multiple mains';
1621
+ readonly why: 'User cannot get help on how some of the document is organized';
1622
+ readonly wcag: '1.3.6';
1623
+ readonly weight: 2;
1624
+ readonly max: 1;
1625
+ };
1626
+ readonly bannerNot1: {
1627
+ readonly summary: 'multiple banners';
1628
+ readonly why: 'User cannot get help on how some of the document is organized';
1629
+ readonly wcag: '1.3.6';
1630
+ readonly weight: 2;
1631
+ readonly max: 1;
1632
+ };
1633
+ readonly bannerNotTop: {
1634
+ readonly summary: 'banner child of landmark';
1635
+ readonly why: 'User cannot get help on how some of the document is organized';
1636
+ readonly wcag: '1.3.6';
1637
+ readonly weight: 2;
1638
+ };
1639
+ readonly footerConfusion: {
1640
+ readonly summary: 'contentinfos not distinctly named';
1641
+ readonly why: 'User cannot get help on how some of the document is organized';
1642
+ readonly wcag: '1.3.6';
1643
+ readonly weight: 3;
1644
+ };
1645
+ readonly footerNot1: {
1646
+ readonly summary: 'multiple contentinfos';
1647
+ readonly why: 'User cannot get help on how some of the document is organized';
1648
+ readonly wcag: '1.3.6';
1649
+ readonly weight: 2;
1650
+ readonly max: 1;
1651
+ };
1652
+ readonly landmarkConfusion: {
1653
+ readonly summary: 'landmarks not distinctly named';
1654
+ readonly why: 'User cannot get help on how some of the document is organized';
1655
+ readonly wcag: '1.3.6';
1656
+ readonly weight: 3;
1657
+ };
1658
+ readonly documentConfusion: {
1659
+ readonly summary: 'document elements not distinctly named';
1660
+ readonly why: 'User cannot get help on how some of the document is organized';
1661
+ readonly wcag: '1.3.6';
1662
+ readonly weight: 3;
1663
+ };
1664
+ readonly formsNested: {
1665
+ readonly summary: 'form nested in another form';
1666
+ readonly why: 'User cannot predict effect of actions in a form';
1667
+ readonly wcag: '4.1';
1668
+ readonly weight: 4;
1669
+ };
1670
+ readonly formConfusion: {
1671
+ readonly summary: 'forms not distinctly named';
1672
+ readonly why: 'User cannot get help on how some of the document is organized';
1673
+ readonly wcag: '1.3.6';
1674
+ readonly weight: 3;
1675
+ };
1676
+ readonly applicationNoText: {
1677
+ readonly summary: 'application not named';
1678
+ readonly why: 'User cannot get help on how some of the document is organized';
1679
+ readonly wcag: '1.3.6';
1680
+ readonly weight: 4;
1681
+ };
1682
+ readonly applicationConfusion: {
1683
+ readonly summary: 'applications not distinctly named';
1684
+ readonly why: 'User cannot get help on how some of the document is organized';
1685
+ readonly wcag: '1.3.6';
1686
+ readonly weight: 3;
1687
+ };
1688
+ readonly asideConfusion: {
1689
+ readonly summary: 'asides not distinctly named';
1690
+ readonly why: 'User cannot get help on how some of the document is organized';
1691
+ readonly wcag: '1.3.6';
1692
+ readonly weight: 3;
1693
+ };
1694
+ readonly bannerConfusion: {
1695
+ readonly summary: 'banners not distinctly named';
1696
+ readonly why: 'User cannot get help on how some of the document is organized';
1697
+ readonly wcag: '1.3.6';
1698
+ readonly weight: 3;
1699
+ };
1700
+ readonly navConfusion: {
1701
+ readonly summary: 'navigations not distinctly named';
1702
+ readonly why: 'User cannot get help on how some of the document is organized';
1703
+ readonly wcag: '1.3.6';
1704
+ readonly weight: 3;
1705
+ };
1706
+ readonly landmarkInNav: {
1707
+ readonly summary: 'invalid landmark child of navigation role';
1708
+ readonly why: 'User cannot get help on how some of the document is organized';
1709
+ readonly wcag: '1.3.6';
1710
+ readonly weight: 4;
1711
+ };
1712
+ readonly regionConfusion: {
1713
+ readonly summary: 'regions not distinctly named';
1714
+ readonly why: 'User cannot get help on how some of the document is organized';
1715
+ readonly wcag: '1.3.6';
1716
+ readonly weight: 3;
1717
+ };
1718
+ readonly searchConfusion: {
1719
+ readonly summary: 'searches not distinctly named';
1720
+ readonly why: 'User cannot get help on how some of the document is organized';
1721
+ readonly wcag: '1.3.6';
1722
+ readonly weight: 3;
1723
+ };
1724
+ readonly complementaryNoText: {
1725
+ readonly summary: 'complementary not named';
1726
+ readonly why: 'User cannot get help on how some of the document is organized';
1727
+ readonly wcag: '1.3.6';
1728
+ readonly weight: 1;
1729
+ };
1730
+ readonly labelNoText: {
1731
+ readonly summary: 'label not named';
1732
+ readonly why: 'User cannot get help on the topic of a form item';
1733
+ readonly wcag: '1.3.1';
1734
+ readonly weight: 4;
1735
+ };
1736
+ readonly focusableOperable: {
1737
+ readonly summary: 'element focusability and operability conflict';
1738
+ readonly why: 'Keyboard-only user cannot operate an item';
1739
+ readonly wcag: '2.1.1';
1740
+ readonly weight: 3;
1741
+ };
1742
+ readonly focusableRole: {
1743
+ readonly summary: 'focusable element not active';
1744
+ readonly why: 'Keyboard-only user cannot navigate properly to the operable items';
1745
+ readonly wcag: '4.1.2';
1746
+ readonly weight: 3;
1747
+ };
1748
+ readonly focusableHidden: {
1749
+ readonly summary: 'focusable element hidden';
1750
+ readonly why: 'Keyboard-only user cannot navigate properly to the operable items';
1751
+ readonly wcag: '4.1.2';
1752
+ readonly weight: 4;
1753
+ };
1754
+ readonly focusedAway: {
1755
+ readonly summary: 'element beyond display when focused';
1756
+ readonly why: 'Keyboard-only user cannot navigate properly to the operable items';
1757
+ readonly wcag: '1.4.10';
1758
+ readonly weight: 3;
1759
+ };
1760
+ readonly focusableDescendants: {
1761
+ readonly summary: 'presentational child focusable';
1762
+ readonly why: 'Keyboard-only user cannot navigate properly to the operable items';
1763
+ readonly wcag: '4.1.2';
1764
+ readonly weight: 4;
1765
+ };
1766
+ readonly datalistRef: {
1767
+ readonly summary: 'ambiguous or missing datalist reference';
1768
+ readonly why: 'User cannot get help on the permitted input values';
1769
+ readonly wcag: '3.3.2';
1770
+ readonly weight: 4;
1771
+ };
1772
+ readonly multipleLabelees: {
1773
+ readonly summary: 'labeled element ambiguous';
1774
+ readonly why: 'User cannot get help on the topic of a form item';
1775
+ readonly wcag: '1.3.1';
1776
+ readonly weight: 4;
1777
+ };
1778
+ readonly labeledHidden: {
1779
+ readonly summary: 'control hidden but labeled';
1780
+ readonly why: 'Document includes unnecessary code';
1781
+ readonly wcag: '1.3.1';
1782
+ readonly weight: 1;
1783
+ };
1784
+ readonly contentHidden: {
1785
+ readonly summary: 'page hidden';
1786
+ readonly why: 'User cannot get the document content';
1787
+ readonly wcag: '2.4.7';
1788
+ readonly weight: 4;
1789
+ readonly max: 1;
1790
+ };
1791
+ readonly hideFailureRisk: {
1792
+ readonly summary: 'false aria-hidden value risky';
1793
+ readonly why: 'User may be misled by erroneously hidden or revealed document content';
1794
+ readonly wcag: '2.4.6';
1795
+ readonly weight: 1;
1796
+ };
1797
+ readonly negativeIndent: {
1798
+ readonly summary: 'negative text-indent';
1799
+ readonly why: 'Helper may hide content from a user';
1800
+ readonly wcag: '4.1';
1801
+ readonly weight: 3;
1802
+ };
1803
+ readonly frameSandboxRisk: {
1804
+ readonly summary: 'iframe sandbox attributes risky';
1805
+ readonly why: 'Document may be unsafe to use';
1806
+ readonly wcag: '4.1';
1807
+ readonly weight: 2;
1808
+ };
1809
+ readonly hoverIndication: {
1810
+ readonly summary: 'hover indication poor';
1811
+ readonly why: 'User cannot explore the document reliably with a mouse';
1812
+ readonly wcag: '3.3.2';
1813
+ readonly weight: 3;
1814
+ };
1815
+ readonly hoverSurprise: {
1816
+ readonly summary: 'hovering changes content';
1817
+ readonly why: 'User cannot explore the document reliably with a mouse';
1818
+ readonly wcag: '3.2.5';
1819
+ readonly weight: 1;
1820
+ };
1821
+ readonly formSurpriseRisk: {
1822
+ readonly summary: 'form interaction changes content?';
1823
+ readonly why: 'User experiences unexpected document change when using a form';
1824
+ readonly wcag: '3.2.5';
1825
+ readonly weight: 1;
1826
+ };
1827
+ readonly labelClash: {
1828
+ readonly summary: 'label types incompatible';
1829
+ readonly why: 'User cannot get reliable help on the topics of form items';
1830
+ readonly wcag: '1.3.1';
1831
+ readonly weight: 2;
1832
+ };
1833
+ readonly labelNot1: {
1834
+ readonly summary: 'element referenced by multiple labels';
1835
+ readonly why: 'User cannot get reliable help on the topics of form items';
1836
+ readonly wcag: '1.3.1';
1837
+ readonly weight: 1;
1838
+ };
1839
+ readonly labelEmpty: {
1840
+ readonly summary: 'label empty';
1841
+ readonly why: 'User cannot get help on the topics of form items';
1842
+ readonly wcag: '1.3.1';
1843
+ readonly weight: 3;
1844
+ };
1845
+ readonly labelRisk: {
1846
+ readonly summary: 'labeling risky';
1847
+ readonly why: 'User may misunderstand a form control';
1848
+ readonly wcag: '3.3.2';
1849
+ readonly weight: 1;
1850
+ };
1851
+ readonly linkVaguenessRisk: {
1852
+ readonly summary: 'link name vague';
1853
+ readonly why: 'User may misunderstand what a link points to';
1854
+ readonly wcag: '2.4.4';
1855
+ readonly weight: 1;
1856
+ };
1857
+ readonly linkFileName: {
1858
+ readonly summary: 'link names a file instead of a purpose';
1859
+ readonly why: 'User may fail to understand what a link points to';
1860
+ readonly wcag: '2.4.4';
1861
+ readonly weight: 1;
1862
+ };
1863
+ readonly nonWebLink: {
1864
+ readonly summary: 'link to non-web resource';
1865
+ readonly why: 'Document points to harder-to-use resources';
1866
+ readonly wcag: '1.3.3';
1867
+ readonly weight: 1;
1868
+ };
1869
+ readonly linkIndication: {
1870
+ readonly summary: 'link indication poor';
1871
+ readonly why: 'User cannot differentiate a link from plain text';
1872
+ readonly wcag: '1.3.3';
1873
+ readonly weight: 2;
1874
+ };
1875
+ readonly menuNavigation: {
1876
+ readonly summary: 'menu navigation nonstandard';
1877
+ readonly why: 'Menus behave improperly for a keyboard-only user';
1878
+ readonly wcag: '2.1.1';
1879
+ readonly weight: 2;
1880
+ };
1881
+ readonly menuItemless: {
1882
+ readonly summary: 'menu items missing';
1883
+ readonly why: 'User cannot reach promised menu items';
1884
+ readonly wcag: '1.3.1';
1885
+ readonly weight: 4;
1886
+ };
1887
+ readonly tabNavigation: {
1888
+ readonly summary: 'tablist navigation nonstandard';
1889
+ readonly why: 'Tablist items behave improperly for a keyboard-only user';
1890
+ readonly wcag: '2.1.1';
1891
+ readonly weight: 2;
1892
+ };
1893
+ readonly spontaneousMotion: {
1894
+ readonly summary: 'page content moves spontaneously';
1895
+ readonly why: 'Motion-sensitive user may suffer harm';
1896
+ readonly wcag: '2.2.2';
1897
+ readonly weight: 2;
1898
+ readonly max: 1;
1899
+ };
1900
+ readonly animationLong: {
1901
+ readonly summary: 'animation long or repetitive';
1902
+ readonly why: 'Motion-sensitive user may suffer harm';
1903
+ readonly wcag: '2.2.2';
1904
+ readonly weight: 3;
1905
+ };
1906
+ readonly blink: {
1907
+ readonly summary: 'blink element';
1908
+ readonly why: 'Motion-sensitive user may suffer harm';
1909
+ readonly wcag: '2.2.2';
1910
+ readonly weight: 4;
1911
+ };
1912
+ readonly autoplay: {
1913
+ readonly summary: 'autoplay';
1914
+ readonly why: 'Motion- or noise-sensitive user may suffer harm';
1915
+ readonly wcag: '1.4.2';
1916
+ readonly weight: 2;
1917
+ };
1918
+ readonly autoplayLong: {
1919
+ readonly summary: 'autoplay long';
1920
+ readonly why: 'Motion- or noise-sensitive user may suffer harm';
1921
+ readonly wcag: '1.4.2';
1922
+ readonly weight: 2;
1923
+ };
1924
+ readonly autoplayControl: {
1925
+ readonly summary: 'autoplay control';
1926
+ readonly why: 'Motion- or noise-sensitive user may suffer harm';
1927
+ readonly wcag: '1.4.2';
1928
+ readonly weight: 2;
1929
+ };
1930
+ readonly refresh: {
1931
+ readonly summary: 'element reloads or redirects';
1932
+ readonly why: 'Document change may surprise a user';
1933
+ readonly wcag: '2.2.1';
1934
+ readonly weight: 3;
1935
+ };
1936
+ readonly parentBad: {
1937
+ readonly summary: 'parent invalid';
1938
+ readonly why: 'User cannot properly operate an item';
1939
+ readonly wcag: '1.3.1';
1940
+ readonly weight: 4;
1941
+ };
1942
+ readonly inconsistentStyles: {
1943
+ readonly summary: 'inconsistent heading, link, or button styles';
1944
+ readonly why: 'User cannot easily distinguish items of different types';
1945
+ readonly wcag: '3.2.4';
1946
+ readonly weight: 1;
1947
+ };
1948
+ readonly zIndexNotZero: {
1949
+ readonly summary: 'z-index not zero';
1950
+ readonly why: 'User cannot predict the effect of clicking';
1951
+ readonly wcag: '1.4';
1952
+ readonly weight: 1;
1953
+ };
1954
+ readonly tabIndexPositive: {
1955
+ readonly summary: 'tabindex positive';
1956
+ readonly why: 'Keyboard-only user cannot predict the navigation sequence';
1957
+ readonly wcag: '2.4.3';
1958
+ readonly weight: 1;
1959
+ };
1960
+ readonly tabIndexEmpty: {
1961
+ readonly summary: 'tabindex empty';
1962
+ readonly why: 'Keyboard-only user cannot follow the intended navigation sequence';
1963
+ readonly wcag: '1.3.1';
1964
+ readonly weight: 4;
1965
+ };
1966
+ readonly tabIndexInt: {
1967
+ readonly summary: 'tabindex not integer';
1968
+ readonly why: 'Keyboard-only user cannot follow the intended navigation sequence';
1969
+ readonly wcag: '1.3.1';
1970
+ readonly weight: 4;
1971
+ };
1972
+ readonly tabIndexExtra: {
1973
+ readonly summary: 'tabindex redundant';
1974
+ readonly why: 'Revision risks interfering with navigation by a keyboard-only user';
1975
+ readonly wcag: '1.3.1';
1976
+ readonly weight: 1;
1977
+ };
1978
+ readonly presentationGlobal: {
1979
+ readonly summary: 'global ARIA attribute nullifies presentation role';
1980
+ readonly why: 'User encounters content intended to be hidden';
1981
+ readonly wcag: '1.3.1';
1982
+ readonly weight: 1;
1983
+ };
1984
+ readonly presentationTabIndexed: {
1985
+ readonly summary: 'tabindex attribute nullifies presentation role';
1986
+ readonly why: 'User encounters content intended to be hidden';
1987
+ readonly wcag: '1.3.1';
1988
+ readonly weight: 1;
1989
+ };
1990
+ readonly avNoText: {
1991
+ readonly summary: 'audio or video caption track missing';
1992
+ readonly why: 'User cannot get help reading speech as text';
1993
+ readonly wcag: '1.2.1';
1994
+ readonly weight: 4;
1995
+ };
1996
+ readonly audioNoText: {
1997
+ readonly summary: 'audio track missing';
1998
+ readonly why: 'User cannot get help reading speech as text';
1999
+ readonly wcag: '1.2.1';
2000
+ readonly weight: 4;
2001
+ };
2002
+ readonly audioTextRisk: {
2003
+ readonly summary: 'audio not named?';
2004
+ readonly why: 'User may be unable to get help reading speech as text';
2005
+ readonly wcag: '1.2.1';
2006
+ readonly weight: 1;
2007
+ };
2008
+ readonly videoNoText: {
2009
+ readonly summary: 'video not named';
2010
+ readonly why: 'User cannot get help reading video content as text';
2011
+ readonly wcag: '1.2.2';
2012
+ readonly weight: 4;
2013
+ };
2014
+ readonly videoNoTranscript: {
2015
+ readonly summary: 'video transcript missing';
2016
+ readonly why: 'User cannot get help reading video content as text';
2017
+ readonly wcag: '1.2.2';
2018
+ readonly weight: 4;
2019
+ };
2020
+ readonly videoCaptionRisk: {
2021
+ readonly summary: 'audio or video alternatives missing?';
2022
+ readonly why: 'User may be unable to get help reading video content as text';
2023
+ readonly wcag: '1.2.2';
2024
+ readonly weight: 1;
2025
+ };
2026
+ readonly videoNoAudioDescription: {
2027
+ readonly summary: 'video audio description missing';
2028
+ readonly why: 'User cannot get help hearing video content as speech';
2029
+ readonly wcag: '1.2.1';
2030
+ readonly weight: 4;
2031
+ };
2032
+ readonly videoNoAudioTrack: {
2033
+ readonly summary: 'video audio track missing';
2034
+ readonly why: 'User cannot get help hearing video content as speech';
2035
+ readonly wcag: '1.2.1';
2036
+ readonly weight: 4;
2037
+ };
2038
+ readonly videoAlternative: {
2039
+ readonly summary: 'video alternative missing';
2040
+ readonly why: 'User cannot get help consuming a video recording as text or speech';
2041
+ readonly wcag: '1.2.1';
2042
+ readonly weight: 4;
2043
+ };
2044
+ readonly keyboardScroll: {
2045
+ readonly summary: 'element not scrollable';
2046
+ readonly why: 'Keyboard-only user cannot scroll an item';
2047
+ readonly wcag: '2.1.1';
2048
+ readonly weight: 4;
2049
+ };
2050
+ readonly positionSticky: {
2051
+ readonly summary: 'position sticky';
2052
+ readonly why: 'User may be unable to see needed content or may be forced to scroll in both dimensions';
2053
+ readonly wcag: '1.4.10';
2054
+ readonly weight: 1;
2055
+ };
2056
+ readonly scrollFocus: {
2057
+ readonly summary: 'scrollable element and children nonfocusable';
2058
+ readonly why: 'User may be unable to see all of an item without scrolling in both dimensions';
2059
+ readonly wcag: '2.1.1';
2060
+ readonly weight: 3;
2061
+ };
2062
+ readonly scrollRisk: {
2063
+ readonly summary: 'container size unit not percentage';
2064
+ readonly why: 'User may be unable to see all of an item without scrolling in both dimensions';
2065
+ readonly wcag: '1.4.10';
2066
+ readonly weight: 1;
2067
+ };
2068
+ readonly skipRepeatedContent: {
2069
+ readonly summary: 'skip method missing or invalid';
2070
+ readonly why: 'Keyboard-only user cannot easily reach the specific content of the document';
2071
+ readonly wcag: '2.4.1';
2072
+ readonly weight: 3;
2073
+ readonly max: 2;
2074
+ };
2075
+ readonly repeatedContentRisk: {
2076
+ readonly summary: 'skip method missing or invalid?';
2077
+ readonly why: 'Keyboard-only user may be unable easily to reach the specific content of the document';
2078
+ readonly wcag: '2.4.1';
2079
+ readonly weight: 1;
2080
+ readonly max: 2;
2081
+ };
2082
+ readonly submitButton: {
2083
+ readonly summary: 'form submission button missing';
2084
+ readonly why: 'User cannot easily submit a form';
2085
+ readonly wcag: '3.2.2';
2086
+ readonly weight: 3;
2087
+ };
2088
+ readonly fragmentaryNoticeRisk: {
2089
+ readonly summary: 'assertive region not atomic';
2090
+ readonly why: 'User may be unable to get help on what content has changed';
2091
+ readonly wcag: '4.1.3';
2092
+ readonly weight: 2;
2093
+ };
2094
+ readonly errorReferenceBad: {
2095
+ readonly summary: 'error reference invalid';
2096
+ readonly why: 'User cannot correct a form error';
2097
+ readonly wcag: '3.3.1';
2098
+ readonly weight: 4;
2099
+ };
2100
+ readonly noScriptRisk: {
2101
+ readonly summary: 'noscript element not equivalent?';
2102
+ readonly why: 'User who has disabled JavaScript may be denied some content';
2103
+ readonly wcag: '4.1';
2104
+ readonly weight: 1;
2105
+ };
2106
+ readonly flash: {
2107
+ readonly summary: 'flash content';
2108
+ readonly why: 'Document includes code that may not work and may jeopardize user security';
2109
+ readonly wcag: '4.1';
2110
+ readonly weight: 1;
2111
+ readonly max: 1;
2112
+ };
2113
+ readonly browserSupportRisk: {
2114
+ readonly summary: 'inputmode attribute';
2115
+ readonly why: 'Document may include code that the browser cannot process';
2116
+ readonly wcag: '4.1';
2117
+ readonly weight: 1;
2118
+ };
2119
+ readonly attributeObsolete: {
2120
+ readonly summary: 'attribute obsolete';
2121
+ readonly why: 'Document includes obsolete code that the browser may fail to process';
2122
+ readonly wcag: '4.1';
2123
+ readonly weight: 3;
2124
+ };
2125
+ readonly nonElement: {
2126
+ readonly summary: 'element unknown';
2127
+ readonly why: 'Document includes an unknown element that the browser cannot process';
2128
+ readonly wcag: '4.1';
2129
+ readonly weight: 4;
2130
+ };
2131
+ readonly elementObsolete: {
2132
+ readonly summary: 'element obsolete';
2133
+ readonly why: 'Document includes obsolete code that the browser may fail to process';
2134
+ readonly wcag: '4.1';
2135
+ readonly weight: 3;
2136
+ };
2137
+ readonly obsolete: {
2138
+ readonly summary: 'code obsolete';
2139
+ readonly why: 'Document contains code that is no longer standard';
2140
+ readonly wcag: '4.1';
2141
+ readonly weight: 3;
2142
+ };
2143
+ readonly atRuleInvalid: {
2144
+ readonly summary: 'invalid at-rule';
2145
+ readonly why: 'Document cannot be properly displayed in particular contexts';
2146
+ readonly wcag: '4.1';
2147
+ readonly weight: 3;
2148
+ };
2149
+ readonly cssInvalid: {
2150
+ readonly summary: 'CSS invalid';
2151
+ readonly why: 'Document cannot be properly displayed';
2152
+ readonly wcag: '4.1';
2153
+ readonly weight: 3;
2154
+ };
2155
+ readonly elementClosure: {
2156
+ readonly summary: 'element closure invalid';
2157
+ readonly why: 'Document contains invalid code';
2158
+ readonly wcag: '4.1.1';
2159
+ readonly weight: 3;
2160
+ };
2161
+ readonly nestingBad: {
2162
+ readonly summary: 'nesting invalid';
2163
+ readonly why: 'Document contains invalid code';
2164
+ readonly wcag: '4.1.1';
2165
+ readonly weight: 3;
2166
+ };
2167
+ readonly characterBad: {
2168
+ readonly summary: 'invalid character';
2169
+ readonly why: 'Invalid character makes the document behave incorrectly';
2170
+ readonly wcag: '4.1';
2171
+ readonly weight: 3;
2172
+ };
2173
+ readonly entityBad: {
2174
+ readonly summary: 'named character reference invalid';
2175
+ readonly why: 'User may be unable to read all the document text';
2176
+ readonly wcag: '4.1';
2177
+ readonly weight: 4;
2178
+ };
2179
+ readonly textContentBad: {
2180
+ readonly summary: 'element text content invalid';
2181
+ readonly why: 'User may be unable to read all the document text';
2182
+ readonly wcag: '4.1';
2183
+ readonly weight: 3;
2184
+ };
2185
+ readonly parseError: {
2186
+ readonly summary: 'code invalid';
2187
+ readonly why: 'Invalid code in the document may prevent a helper from working';
2188
+ readonly wcag: '4.1';
2189
+ readonly weight: 3;
2190
+ };
2191
+ readonly encodingMisdeclared: {
2192
+ readonly summary: 'text encoding wrongly declared';
2193
+ readonly why: 'User cannot read all of the text';
2194
+ readonly wcag: '3.1.3';
2195
+ readonly weight: 4;
2196
+ readonly max: 1;
2197
+ };
2198
+ readonly encodingBad: {
2199
+ readonly summary: 'text not Unicode-compliant';
2200
+ readonly why: 'User cannot read all of the text';
2201
+ readonly wcag: '3.1.3';
2202
+ readonly weight: 4;
2203
+ };
2204
+ readonly encodingPrivate: {
2205
+ readonly summary: 'text in Private Use Area';
2206
+ readonly why: 'User cannot read all of the text';
2207
+ readonly wcag: '3.1.3';
2208
+ readonly weight: 4;
2209
+ readonly max: 1;
2210
+ };
2211
+ readonly captcha2: {
2212
+ readonly summary: 'captcha2';
2213
+ readonly why: 'User is prevented from consuming the document';
2214
+ readonly wcag: '1.1.1';
2215
+ readonly weight: 1;
2216
+ readonly max: 1;
2217
+ };
2218
+ readonly fatalError: {
2219
+ readonly summary: 'fatal error';
2220
+ readonly why: 'Document prevents testing for accessibility';
2221
+ readonly wcag: '4.1';
2222
+ readonly weight: 4;
2223
+ readonly max: 1;
2224
+ };
2225
+ readonly notValidatable: {
2226
+ readonly summary: 'item makes testing inconclusive';
2227
+ readonly why: 'Item prevents a conclusive accessibility test';
2228
+ readonly wcag: '4.1';
2229
+ readonly weight: 1;
2230
+ };
2231
+ readonly svgNotValidatable: {
2232
+ readonly summary: 'SVG version not 1.1';
2233
+ readonly why: 'Item prevents testing image for accessibility';
2234
+ readonly wcag: '4.1';
2235
+ readonly weight: 1;
2236
+ };
2237
+ };
2238
+ declare const issues: Readonly<Record<string, Issue>>;
2239
+ declare const rules: Readonly<Record<string, ToolRules>>;
2240
+ declare const makeIssueRules: (ruleTable: Record<string, ToolRules>, issueTable?: Record<string, Issue>) => Record<string, Record<string, IssueRuleGroup>>;
2241
+ declare const getEditableData: () => {
2242
+ issues: Readonly<Record<string, Issue>>;
2243
+ rules: Readonly<Record<string, ToolRules>>;
2244
+ issueRules: Record<string, Record<string, IssueRuleGroup>>;
2245
+ };
2246
+ declare const issueRules: Record<string, Record<string, IssueRuleGroup>>;
2247
+ //#endregion
2248
+ export { IssueRuleGroup, getEditableData, issueRules, issues, makeIssueRules, rules };