ultra11y 2.22.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.
Files changed (153) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +223 -0
  3. package/docker/Dockerfile +7 -0
  4. package/docker/package.json +9 -0
  5. package/docker/runner.mjs +23 -0
  6. package/package.json +73 -0
  7. package/scripts/bench.mjs +151 -0
  8. package/scripts/build-act-corpus.mjs +143 -0
  9. package/scripts/build-adjudication.mjs +503 -0
  10. package/scripts/build-pack-rgaa.mjs +397 -0
  11. package/scripts/build-standards.mjs +548 -0
  12. package/scripts/copy-bundle.mjs +39 -0
  13. package/scripts/import-pack.mjs +107 -0
  14. package/scripts/sync-engine.mjs +84 -0
  15. package/scripts/sync-version.mjs +43 -0
  16. package/scripts/ultra11y.mjs +52739 -0
  17. package/scripts/vendor/act-testcases.json +12297 -0
  18. package/scripts/vendor/rgaa/SOURCE.json +8 -0
  19. package/scripts/vendor/rgaa/criteres.json +4144 -0
  20. package/scripts/vendor/rgaa/glossaire.json +480 -0
  21. package/scripts/vendor/wcag-2.2-fr.json +82 -0
  22. package/scripts/vendor/wcag-2.2-sc-universe.json +950 -0
  23. package/scripts/vendor/wcag-2.2-sc.json +574 -0
  24. package/scripts/verify-rgaa-source.mjs +126 -0
  25. package/scripts/verify-skill-bundle.mjs +91 -0
  26. package/skills/review-a11y/SKILL.md +123 -0
  27. package/skills/review-a11y/scripts/ultra11y.mjs +52739 -0
  28. package/skills/ultra11y/SKILL.md +292 -0
  29. package/skills/ultra11y/references/act.md +163 -0
  30. package/skills/ultra11y/references/adjudication.md +599 -0
  31. package/skills/ultra11y/references/audit.md +100 -0
  32. package/skills/ultra11y/references/authoring.md +37 -0
  33. package/skills/ultra11y/references/automation.md +113 -0
  34. package/skills/ultra11y/references/correction.md +41 -0
  35. package/skills/ultra11y/references/criteria.md +129 -0
  36. package/skills/ultra11y/references/cross-file.md +82 -0
  37. package/skills/ultra11y/references/dynamic.md +152 -0
  38. package/skills/ultra11y/references/false-positives.md +81 -0
  39. package/skills/ultra11y/references/fix.md +46 -0
  40. package/skills/ultra11y/references/focus-and-logic.md +64 -0
  41. package/skills/ultra11y/references/forbidden-patterns.md +61 -0
  42. package/skills/ultra11y/references/forms-and-errors.md +147 -0
  43. package/skills/ultra11y/references/guidance.md +55 -0
  44. package/skills/ultra11y/references/judgment.md +90 -0
  45. package/skills/ultra11y/references/media-and-motion.md +116 -0
  46. package/skills/ultra11y/references/methodology.md +72 -0
  47. package/skills/ultra11y/references/naming.md +117 -0
  48. package/skills/ultra11y/references/orchestration.md +44 -0
  49. package/skills/ultra11y/references/packs.md +193 -0
  50. package/skills/ultra11y/references/prd.md +104 -0
  51. package/skills/ultra11y/references/rendered.md +110 -0
  52. package/skills/ultra11y/references/scale.md +49 -0
  53. package/skills/ultra11y/references/standards.md +97 -0
  54. package/skills/ultra11y/references/structure.md +138 -0
  55. package/skills/ultra11y/references/verify.md +88 -0
  56. package/skills/ultra11y/references/widgets.md +106 -0
  57. package/skills/ultra11y/scripts/ultra11y.mjs +52739 -0
  58. package/src/act.ts +441 -0
  59. package/src/adjudicate.ts +630 -0
  60. package/src/aria.ts +230 -0
  61. package/src/audit.ts +396 -0
  62. package/src/auditor.ts +399 -0
  63. package/src/autofill.ts +102 -0
  64. package/src/axe-map.ts +294 -0
  65. package/src/baseline.ts +75 -0
  66. package/src/capture.ts +182 -0
  67. package/src/check.ts +243 -0
  68. package/src/cli.ts +1927 -0
  69. package/src/color.ts +102 -0
  70. package/src/config.ts +182 -0
  71. package/src/crawl.ts +75 -0
  72. package/src/criteria.ts +183 -0
  73. package/src/data/adjudication.json +770 -0
  74. package/src/data/guidance/rgaa.json +2395 -0
  75. package/src/data/standards/rgaa.glossary.json +478 -0
  76. package/src/data/standards/rgaa.json +3454 -0
  77. package/src/data/wcag-universe.json +530 -0
  78. package/src/data/wcag.json +1178 -0
  79. package/src/discover.ts +203 -0
  80. package/src/fix/codemods.ts +76 -0
  81. package/src/fix/diff.ts +64 -0
  82. package/src/fix/edits.ts +126 -0
  83. package/src/fix.ts +215 -0
  84. package/src/gh.ts +214 -0
  85. package/src/glob.ts +206 -0
  86. package/src/graph/build.ts +114 -0
  87. package/src/graph/engine-resolve.ts +0 -0
  88. package/src/graph/graph.ts +126 -0
  89. package/src/graph/imports.ts +359 -0
  90. package/src/graph/resolve.ts +73 -0
  91. package/src/graph/tsconfig.ts +113 -0
  92. package/src/grounding.ts +119 -0
  93. package/src/guidance/index.ts +45 -0
  94. package/src/guidance/types.ts +36 -0
  95. package/src/init.ts +113 -0
  96. package/src/mcp/handlers.ts +388 -0
  97. package/src/mcp/http.ts +260 -0
  98. package/src/mcp/prompts.ts +183 -0
  99. package/src/mcp/protocol.ts +187 -0
  100. package/src/mcp/resources.ts +136 -0
  101. package/src/mcp/server.ts +228 -0
  102. package/src/mcp/stdio.ts +119 -0
  103. package/src/mcp/tools.ts +347 -0
  104. package/src/messages.ts +1011 -0
  105. package/src/name.ts +174 -0
  106. package/src/orchestrate-templates.ts +231 -0
  107. package/src/orchestrate.ts +186 -0
  108. package/src/output.ts +108 -0
  109. package/src/pack.ts +187 -0
  110. package/src/parse/html.ts +258 -0
  111. package/src/parse/jsx-ast.ts +67 -0
  112. package/src/parse/jsx-bridge.ts +247 -0
  113. package/src/parse/jsx.ts +19 -0
  114. package/src/parse/source.ts +75 -0
  115. package/src/prd.ts +406 -0
  116. package/src/project-lock.ts +42 -0
  117. package/src/render.ts +307 -0
  118. package/src/report.ts +399 -0
  119. package/src/rules/colors.ts +125 -0
  120. package/src/rules/cross-registry.ts +264 -0
  121. package/src/rules/cross-rule.ts +83 -0
  122. package/src/rules/forms.ts +590 -0
  123. package/src/rules/frames.ts +33 -0
  124. package/src/rules/headings.ts +227 -0
  125. package/src/rules/images.ts +200 -0
  126. package/src/rules/links.ts +193 -0
  127. package/src/rules/mandatory.ts +173 -0
  128. package/src/rules/multimedia.ts +77 -0
  129. package/src/rules/navigation.ts +190 -0
  130. package/src/rules/presentation.ts +75 -0
  131. package/src/rules/registry.ts +57 -0
  132. package/src/rules/rule.ts +122 -0
  133. package/src/rules/scripts-aria.ts +636 -0
  134. package/src/rules/tables.ts +264 -0
  135. package/src/rules/timing.ts +55 -0
  136. package/src/sample.ts +176 -0
  137. package/src/scan-local.ts +866 -0
  138. package/src/scan.ts +538 -0
  139. package/src/standards/derive.ts +195 -0
  140. package/src/standards/index.ts +31 -0
  141. package/src/standards/pack-rules.ts +111 -0
  142. package/src/standards/pack.ts +81 -0
  143. package/src/standards/registry.ts +100 -0
  144. package/src/standards/types.ts +202 -0
  145. package/src/standards/validate.ts +544 -0
  146. package/src/standards/vocabulary.ts +75 -0
  147. package/src/types.ts +355 -0
  148. package/src/util.ts +32 -0
  149. package/src/vendor/codeindex-engine.d.mts +1009 -0
  150. package/src/vendor/codeindex-engine.mjs +13701 -0
  151. package/src/vendor/engine.meta.json +9 -0
  152. package/src/verify.ts +275 -0
  153. package/src/wcag.ts +128 -0
@@ -0,0 +1,530 @@
1
+ {
2
+ "wcagVersion": "2.2",
3
+ "source": "https://www.w3.org/TR/WCAG22/",
4
+ "criteriaSource": "https://github.com/w3c/wcag",
5
+ "provenance": "Full WCAG 2.x SC universe (all levels incl. AAA, and the removed 4.1.1 Parsing) fetched from raw.githubusercontent.com/w3c/wcag@main on 2026-07-29 via `node scripts/build-standards.mjs --refresh-universe`. Classification: core-AA = ships in src/data/wcag.json (the shipped WCAG 2.2 AA core); out-of-core = WCAG AAA; removed = obsolete (4.1.1).",
6
+ "criteria": [
7
+ {
8
+ "id": "1.1.1",
9
+ "title": "Non-text Content",
10
+ "level": "A",
11
+ "status": "core-AA"
12
+ },
13
+ {
14
+ "id": "1.2.1",
15
+ "title": "Audio-only and Video-only (Prerecorded)",
16
+ "level": "A",
17
+ "status": "core-AA"
18
+ },
19
+ {
20
+ "id": "1.2.2",
21
+ "title": "Captions (Prerecorded)",
22
+ "level": "A",
23
+ "status": "core-AA"
24
+ },
25
+ {
26
+ "id": "1.2.3",
27
+ "title": "Audio Description or Media Alternative (Prerecorded)",
28
+ "level": "A",
29
+ "status": "core-AA"
30
+ },
31
+ {
32
+ "id": "1.2.4",
33
+ "title": "Captions (Live)",
34
+ "level": "AA",
35
+ "status": "core-AA"
36
+ },
37
+ {
38
+ "id": "1.2.5",
39
+ "title": "Audio Description (Prerecorded)",
40
+ "level": "AA",
41
+ "status": "core-AA"
42
+ },
43
+ {
44
+ "id": "1.2.6",
45
+ "title": "Sign Language (Prerecorded)",
46
+ "level": "AAA",
47
+ "status": "out-of-core"
48
+ },
49
+ {
50
+ "id": "1.2.7",
51
+ "title": "Extended Audio Description (Prerecorded)",
52
+ "level": "AAA",
53
+ "status": "out-of-core"
54
+ },
55
+ {
56
+ "id": "1.2.8",
57
+ "title": "Media Alternative (Prerecorded)",
58
+ "level": "AAA",
59
+ "status": "out-of-core"
60
+ },
61
+ {
62
+ "id": "1.2.9",
63
+ "title": "Audio-only (Live)",
64
+ "level": "AAA",
65
+ "status": "out-of-core"
66
+ },
67
+ {
68
+ "id": "1.3.1",
69
+ "title": "Info and Relationships",
70
+ "level": "A",
71
+ "status": "core-AA"
72
+ },
73
+ {
74
+ "id": "1.3.2",
75
+ "title": "Meaningful Sequence",
76
+ "level": "A",
77
+ "status": "core-AA"
78
+ },
79
+ {
80
+ "id": "1.3.3",
81
+ "title": "Sensory Characteristics",
82
+ "level": "A",
83
+ "status": "core-AA"
84
+ },
85
+ {
86
+ "id": "1.3.4",
87
+ "title": "Orientation",
88
+ "level": "AA",
89
+ "status": "core-AA"
90
+ },
91
+ {
92
+ "id": "1.3.5",
93
+ "title": "Identify Input Purpose",
94
+ "level": "AA",
95
+ "status": "core-AA"
96
+ },
97
+ {
98
+ "id": "1.3.6",
99
+ "title": "Identify Purpose",
100
+ "level": "AAA",
101
+ "status": "out-of-core"
102
+ },
103
+ {
104
+ "id": "1.4.1",
105
+ "title": "Use of Color",
106
+ "level": "A",
107
+ "status": "core-AA"
108
+ },
109
+ {
110
+ "id": "1.4.2",
111
+ "title": "Audio Control",
112
+ "level": "A",
113
+ "status": "core-AA"
114
+ },
115
+ {
116
+ "id": "1.4.3",
117
+ "title": "Contrast (Minimum)",
118
+ "level": "AA",
119
+ "status": "core-AA"
120
+ },
121
+ {
122
+ "id": "1.4.4",
123
+ "title": "Resize Text",
124
+ "level": "AA",
125
+ "status": "core-AA"
126
+ },
127
+ {
128
+ "id": "1.4.5",
129
+ "title": "Images of Text",
130
+ "level": "AA",
131
+ "status": "core-AA"
132
+ },
133
+ {
134
+ "id": "1.4.6",
135
+ "title": "Contrast (Enhanced)",
136
+ "level": "AAA",
137
+ "status": "out-of-core"
138
+ },
139
+ {
140
+ "id": "1.4.7",
141
+ "title": "Low or No Background Audio",
142
+ "level": "AAA",
143
+ "status": "out-of-core"
144
+ },
145
+ {
146
+ "id": "1.4.8",
147
+ "title": "Visual Presentation",
148
+ "level": "AAA",
149
+ "status": "out-of-core"
150
+ },
151
+ {
152
+ "id": "1.4.9",
153
+ "title": "Images of Text (No Exception)",
154
+ "level": "AAA",
155
+ "status": "out-of-core"
156
+ },
157
+ {
158
+ "id": "1.4.10",
159
+ "title": "Reflow",
160
+ "level": "AA",
161
+ "status": "core-AA"
162
+ },
163
+ {
164
+ "id": "1.4.11",
165
+ "title": "Non-text Contrast",
166
+ "level": "AA",
167
+ "status": "core-AA"
168
+ },
169
+ {
170
+ "id": "1.4.12",
171
+ "title": "Text Spacing",
172
+ "level": "AA",
173
+ "status": "core-AA"
174
+ },
175
+ {
176
+ "id": "1.4.13",
177
+ "title": "Content on Hover or Focus",
178
+ "level": "AA",
179
+ "status": "core-AA"
180
+ },
181
+ {
182
+ "id": "2.1.1",
183
+ "title": "Keyboard",
184
+ "level": "A",
185
+ "status": "core-AA"
186
+ },
187
+ {
188
+ "id": "2.1.2",
189
+ "title": "No Keyboard Trap",
190
+ "level": "A",
191
+ "status": "core-AA"
192
+ },
193
+ {
194
+ "id": "2.1.3",
195
+ "title": "Keyboard (No Exception)",
196
+ "level": "AAA",
197
+ "status": "out-of-core"
198
+ },
199
+ {
200
+ "id": "2.1.4",
201
+ "title": "Character Key Shortcuts",
202
+ "level": "A",
203
+ "status": "core-AA"
204
+ },
205
+ {
206
+ "id": "2.2.1",
207
+ "title": "Timing Adjustable",
208
+ "level": "A",
209
+ "status": "core-AA"
210
+ },
211
+ {
212
+ "id": "2.2.2",
213
+ "title": "Pause, Stop, Hide",
214
+ "level": "A",
215
+ "status": "core-AA"
216
+ },
217
+ {
218
+ "id": "2.2.3",
219
+ "title": "No Timing",
220
+ "level": "AAA",
221
+ "status": "out-of-core"
222
+ },
223
+ {
224
+ "id": "2.2.4",
225
+ "title": "Interruptions",
226
+ "level": "AAA",
227
+ "status": "out-of-core"
228
+ },
229
+ {
230
+ "id": "2.2.5",
231
+ "title": "Re-authenticating",
232
+ "level": "AAA",
233
+ "status": "out-of-core"
234
+ },
235
+ {
236
+ "id": "2.2.6",
237
+ "title": "Timeouts",
238
+ "level": "AAA",
239
+ "status": "out-of-core"
240
+ },
241
+ {
242
+ "id": "2.3.1",
243
+ "title": "Three Flashes or Below Threshold",
244
+ "level": "A",
245
+ "status": "core-AA"
246
+ },
247
+ {
248
+ "id": "2.3.2",
249
+ "title": "Three Flashes",
250
+ "level": "AAA",
251
+ "status": "out-of-core"
252
+ },
253
+ {
254
+ "id": "2.3.3",
255
+ "title": "Animation from Interactions",
256
+ "level": "AAA",
257
+ "status": "out-of-core"
258
+ },
259
+ {
260
+ "id": "2.4.1",
261
+ "title": "Bypass Blocks",
262
+ "level": "A",
263
+ "status": "core-AA"
264
+ },
265
+ {
266
+ "id": "2.4.2",
267
+ "title": "Page Titled",
268
+ "level": "A",
269
+ "status": "core-AA"
270
+ },
271
+ {
272
+ "id": "2.4.3",
273
+ "title": "Focus Order",
274
+ "level": "A",
275
+ "status": "core-AA"
276
+ },
277
+ {
278
+ "id": "2.4.4",
279
+ "title": "Link Purpose (In Context)",
280
+ "level": "A",
281
+ "status": "core-AA"
282
+ },
283
+ {
284
+ "id": "2.4.5",
285
+ "title": "Multiple Ways",
286
+ "level": "AA",
287
+ "status": "core-AA"
288
+ },
289
+ {
290
+ "id": "2.4.6",
291
+ "title": "Headings and Labels",
292
+ "level": "AA",
293
+ "status": "core-AA"
294
+ },
295
+ {
296
+ "id": "2.4.7",
297
+ "title": "Focus Visible",
298
+ "level": "AA",
299
+ "status": "core-AA"
300
+ },
301
+ {
302
+ "id": "2.4.8",
303
+ "title": "Location",
304
+ "level": "AAA",
305
+ "status": "out-of-core"
306
+ },
307
+ {
308
+ "id": "2.4.9",
309
+ "title": "Link Purpose (Link Only)",
310
+ "level": "AAA",
311
+ "status": "out-of-core"
312
+ },
313
+ {
314
+ "id": "2.4.10",
315
+ "title": "Section Headings",
316
+ "level": "AAA",
317
+ "status": "out-of-core"
318
+ },
319
+ {
320
+ "id": "2.4.11",
321
+ "title": "Focus Not Obscured (Minimum)",
322
+ "level": "AA",
323
+ "status": "core-AA"
324
+ },
325
+ {
326
+ "id": "2.4.12",
327
+ "title": "Focus Not Obscured (Enhanced)",
328
+ "level": "AAA",
329
+ "status": "out-of-core"
330
+ },
331
+ {
332
+ "id": "2.4.13",
333
+ "title": "Focus Appearance",
334
+ "level": "AAA",
335
+ "status": "out-of-core"
336
+ },
337
+ {
338
+ "id": "2.5.1",
339
+ "title": "Pointer Gestures",
340
+ "level": "A",
341
+ "status": "core-AA"
342
+ },
343
+ {
344
+ "id": "2.5.2",
345
+ "title": "Pointer Cancellation",
346
+ "level": "A",
347
+ "status": "core-AA"
348
+ },
349
+ {
350
+ "id": "2.5.3",
351
+ "title": "Label in Name",
352
+ "level": "A",
353
+ "status": "core-AA"
354
+ },
355
+ {
356
+ "id": "2.5.4",
357
+ "title": "Motion Actuation",
358
+ "level": "A",
359
+ "status": "core-AA"
360
+ },
361
+ {
362
+ "id": "2.5.5",
363
+ "title": "Target Size (Enhanced)",
364
+ "level": "AAA",
365
+ "status": "out-of-core"
366
+ },
367
+ {
368
+ "id": "2.5.6",
369
+ "title": "Concurrent Input Mechanisms",
370
+ "level": "AAA",
371
+ "status": "out-of-core"
372
+ },
373
+ {
374
+ "id": "2.5.7",
375
+ "title": "Dragging Movements",
376
+ "level": "AA",
377
+ "status": "core-AA"
378
+ },
379
+ {
380
+ "id": "2.5.8",
381
+ "title": "Target Size (Minimum)",
382
+ "level": "AA",
383
+ "status": "core-AA"
384
+ },
385
+ {
386
+ "id": "3.1.1",
387
+ "title": "Language of Page",
388
+ "level": "A",
389
+ "status": "core-AA"
390
+ },
391
+ {
392
+ "id": "3.1.2",
393
+ "title": "Language of Parts",
394
+ "level": "AA",
395
+ "status": "core-AA"
396
+ },
397
+ {
398
+ "id": "3.1.3",
399
+ "title": "Unusual Words",
400
+ "level": "AAA",
401
+ "status": "out-of-core"
402
+ },
403
+ {
404
+ "id": "3.1.4",
405
+ "title": "Abbreviations",
406
+ "level": "AAA",
407
+ "status": "out-of-core"
408
+ },
409
+ {
410
+ "id": "3.1.5",
411
+ "title": "Reading Level",
412
+ "level": "AAA",
413
+ "status": "out-of-core"
414
+ },
415
+ {
416
+ "id": "3.1.6",
417
+ "title": "Pronunciation",
418
+ "level": "AAA",
419
+ "status": "out-of-core"
420
+ },
421
+ {
422
+ "id": "3.2.1",
423
+ "title": "On Focus",
424
+ "level": "A",
425
+ "status": "core-AA"
426
+ },
427
+ {
428
+ "id": "3.2.2",
429
+ "title": "On Input",
430
+ "level": "A",
431
+ "status": "core-AA"
432
+ },
433
+ {
434
+ "id": "3.2.3",
435
+ "title": "Consistent Navigation",
436
+ "level": "AA",
437
+ "status": "core-AA"
438
+ },
439
+ {
440
+ "id": "3.2.4",
441
+ "title": "Consistent Identification",
442
+ "level": "AA",
443
+ "status": "core-AA"
444
+ },
445
+ {
446
+ "id": "3.2.5",
447
+ "title": "Change on Request",
448
+ "level": "AAA",
449
+ "status": "out-of-core"
450
+ },
451
+ {
452
+ "id": "3.2.6",
453
+ "title": "Consistent Help",
454
+ "level": "A",
455
+ "status": "core-AA"
456
+ },
457
+ {
458
+ "id": "3.3.1",
459
+ "title": "Error Identification",
460
+ "level": "A",
461
+ "status": "core-AA"
462
+ },
463
+ {
464
+ "id": "3.3.2",
465
+ "title": "Labels or Instructions",
466
+ "level": "A",
467
+ "status": "core-AA"
468
+ },
469
+ {
470
+ "id": "3.3.3",
471
+ "title": "Error Suggestion",
472
+ "level": "AA",
473
+ "status": "core-AA"
474
+ },
475
+ {
476
+ "id": "3.3.4",
477
+ "title": "Error Prevention (Legal, Financial, Data)",
478
+ "level": "AA",
479
+ "status": "core-AA"
480
+ },
481
+ {
482
+ "id": "3.3.5",
483
+ "title": "Help",
484
+ "level": "AAA",
485
+ "status": "out-of-core"
486
+ },
487
+ {
488
+ "id": "3.3.6",
489
+ "title": "Error Prevention (All)",
490
+ "level": "AAA",
491
+ "status": "out-of-core"
492
+ },
493
+ {
494
+ "id": "3.3.7",
495
+ "title": "Redundant Entry",
496
+ "level": "A",
497
+ "status": "core-AA"
498
+ },
499
+ {
500
+ "id": "3.3.8",
501
+ "title": "Accessible Authentication (Minimum)",
502
+ "level": "AA",
503
+ "status": "core-AA"
504
+ },
505
+ {
506
+ "id": "3.3.9",
507
+ "title": "Accessible Authentication (Enhanced)",
508
+ "level": "AAA",
509
+ "status": "out-of-core"
510
+ },
511
+ {
512
+ "id": "4.1.1",
513
+ "title": "Parsing (Obsolete and removed)",
514
+ "level": "",
515
+ "status": "removed"
516
+ },
517
+ {
518
+ "id": "4.1.2",
519
+ "title": "Name, Role, Value",
520
+ "level": "A",
521
+ "status": "core-AA"
522
+ },
523
+ {
524
+ "id": "4.1.3",
525
+ "title": "Status Messages",
526
+ "level": "AA",
527
+ "status": "core-AA"
528
+ }
529
+ ]
530
+ }