@accesslint/core 0.5.0 → 0.5.1
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.
- package/dist/index.cjs +5 -5
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.iife.js +5 -5
- package/dist/index.js +327 -305
- package/dist/rules/index.d.ts +6 -3
- package/dist/rules/index.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
let U = /* @__PURE__ */ new WeakMap();
|
|
2
|
-
function
|
|
2
|
+
function Te() {
|
|
3
3
|
U = /* @__PURE__ */ new WeakMap();
|
|
4
4
|
}
|
|
5
5
|
function ve(t) {
|
|
@@ -125,16 +125,16 @@ function N(t) {
|
|
|
125
125
|
return U.set(t, n), n;
|
|
126
126
|
}
|
|
127
127
|
let B = /* @__PURE__ */ new WeakMap();
|
|
128
|
-
function
|
|
128
|
+
function Re() {
|
|
129
129
|
B = /* @__PURE__ */ new WeakMap();
|
|
130
130
|
}
|
|
131
131
|
function v(t) {
|
|
132
132
|
const a = B.get(t);
|
|
133
133
|
if (a !== void 0) return a;
|
|
134
|
-
const e =
|
|
134
|
+
const e = Ce(t);
|
|
135
135
|
return B.set(t, e), e;
|
|
136
136
|
}
|
|
137
|
-
function
|
|
137
|
+
function Ce(t) {
|
|
138
138
|
var o, r, s, l, p;
|
|
139
139
|
const a = t.getAttribute("aria-labelledby");
|
|
140
140
|
if (a) {
|
|
@@ -181,7 +181,7 @@ function Re(t) {
|
|
|
181
181
|
}
|
|
182
182
|
return t instanceof HTMLImageElement || t instanceof HTMLAreaElement ? ((l = t.alt) == null ? void 0 : l.trim()) ?? "" : t instanceof HTMLInputElement && t.type === "image" ? ((p = t.alt) == null ? void 0 : p.trim()) ?? "" : "";
|
|
183
183
|
}
|
|
184
|
-
const
|
|
184
|
+
const Ne = /* @__PURE__ */ new Set([
|
|
185
185
|
"alert",
|
|
186
186
|
"alertdialog",
|
|
187
187
|
"application",
|
|
@@ -265,9 +265,9 @@ const Ce = /* @__PURE__ */ new Set([
|
|
|
265
265
|
"treegrid",
|
|
266
266
|
"treeitem"
|
|
267
267
|
]);
|
|
268
|
-
function
|
|
268
|
+
function Me(t) {
|
|
269
269
|
const a = t.trim().toLowerCase().replace(/[\u201C\u201D\u2018\u2019\u00AB\u00BB]/g, "");
|
|
270
|
-
return
|
|
270
|
+
return Ne.has(a);
|
|
271
271
|
}
|
|
272
272
|
function q(t) {
|
|
273
273
|
let a = t;
|
|
@@ -278,7 +278,7 @@ function q(t) {
|
|
|
278
278
|
return !1;
|
|
279
279
|
}
|
|
280
280
|
let O = /* @__PURE__ */ new WeakMap();
|
|
281
|
-
function
|
|
281
|
+
function De() {
|
|
282
282
|
O = /* @__PURE__ */ new WeakMap();
|
|
283
283
|
}
|
|
284
284
|
function b(t) {
|
|
@@ -333,13 +333,13 @@ function A(t) {
|
|
|
333
333
|
return a;
|
|
334
334
|
}
|
|
335
335
|
let V = /* @__PURE__ */ new WeakMap();
|
|
336
|
-
function
|
|
336
|
+
function $e() {
|
|
337
337
|
V = /* @__PURE__ */ new WeakMap();
|
|
338
338
|
}
|
|
339
|
-
function
|
|
339
|
+
function He(t) {
|
|
340
340
|
return t.replace(/\\/g, "\\\\").replace(/"/g, '\\"');
|
|
341
341
|
}
|
|
342
|
-
const
|
|
342
|
+
const Pe = [
|
|
343
343
|
"data-testid",
|
|
344
344
|
"data-test-id",
|
|
345
345
|
"data-cy",
|
|
@@ -349,12 +349,12 @@ const He = [
|
|
|
349
349
|
"for",
|
|
350
350
|
"aria-label"
|
|
351
351
|
];
|
|
352
|
-
function
|
|
352
|
+
function ze(t) {
|
|
353
353
|
const a = t.tagName.toLowerCase();
|
|
354
|
-
for (const n of
|
|
354
|
+
for (const n of Pe) {
|
|
355
355
|
const i = t.getAttribute(n);
|
|
356
356
|
if (i != null && i.length > 0 && i.length < 100)
|
|
357
|
-
return `${a}[${n}="${
|
|
357
|
+
return `${a}[${n}="${He(i)}"]`;
|
|
358
358
|
}
|
|
359
359
|
const e = t.parentElement;
|
|
360
360
|
if (e) {
|
|
@@ -375,7 +375,7 @@ function z(t) {
|
|
|
375
375
|
n.unshift(`#${CSS.escape(i.id)}`);
|
|
376
376
|
break;
|
|
377
377
|
}
|
|
378
|
-
if (n.unshift(
|
|
378
|
+
if (n.unshift(ze(i)), n.length >= 2) {
|
|
379
379
|
const o = n.join(" > ");
|
|
380
380
|
try {
|
|
381
381
|
const r = a.querySelectorAll(o);
|
|
@@ -410,7 +410,7 @@ function m(t) {
|
|
|
410
410
|
const i = e.map((r, s) => (s === 0 ? "" : r.delimiter) + r.selector).join("");
|
|
411
411
|
return V.set(t, i), i;
|
|
412
412
|
}
|
|
413
|
-
function
|
|
413
|
+
function On(t) {
|
|
414
414
|
const a = [], e = [];
|
|
415
415
|
let n = t;
|
|
416
416
|
for (; n; ) {
|
|
@@ -447,7 +447,7 @@ function u(t) {
|
|
|
447
447
|
const a = t.outerHTML;
|
|
448
448
|
return a.length > 200 ? a.slice(0, 200) + "..." : a;
|
|
449
449
|
}
|
|
450
|
-
const
|
|
450
|
+
const Fe = /* @__PURE__ */ new Set([
|
|
451
451
|
"aria-activedescendant",
|
|
452
452
|
"aria-atomic",
|
|
453
453
|
"aria-autocomplete",
|
|
@@ -512,7 +512,7 @@ const ze = /* @__PURE__ */ new Set([
|
|
|
512
512
|
"aria-multiselectable",
|
|
513
513
|
"aria-readonly",
|
|
514
514
|
"aria-required"
|
|
515
|
-
]), te = /* @__PURE__ */ new Set(["aria-checked", "aria-pressed"]),
|
|
515
|
+
]), te = /* @__PURE__ */ new Set(["aria-checked", "aria-pressed"]), je = /* @__PURE__ */ new Set([
|
|
516
516
|
"aria-colcount",
|
|
517
517
|
"aria-colindex",
|
|
518
518
|
"aria-colspan",
|
|
@@ -522,7 +522,7 @@ const ze = /* @__PURE__ */ new Set([
|
|
|
522
522
|
"aria-rowindex",
|
|
523
523
|
"aria-rowspan",
|
|
524
524
|
"aria-setsize"
|
|
525
|
-
]),
|
|
525
|
+
]), We = /* @__PURE__ */ new Set([
|
|
526
526
|
"aria-valuemax",
|
|
527
527
|
"aria-valuemin",
|
|
528
528
|
"aria-valuenow"
|
|
@@ -554,7 +554,7 @@ const ze = /* @__PURE__ */ new Set([
|
|
|
554
554
|
"suggestion",
|
|
555
555
|
"term",
|
|
556
556
|
"time"
|
|
557
|
-
]),
|
|
557
|
+
]), Ue = {
|
|
558
558
|
abbr: !0,
|
|
559
559
|
bdi: !0,
|
|
560
560
|
bdo: !0,
|
|
@@ -582,7 +582,7 @@ const ze = /* @__PURE__ */ new Set([
|
|
|
582
582
|
u: !0,
|
|
583
583
|
var: !0,
|
|
584
584
|
wbr: !0
|
|
585
|
-
},
|
|
585
|
+
}, Be = {
|
|
586
586
|
alert: /* @__PURE__ */ new Set(["aria-disabled", "aria-errormessage", "aria-haspopup", "aria-invalid"]),
|
|
587
587
|
article: /* @__PURE__ */ new Set(["aria-disabled", "aria-errormessage", "aria-haspopup", "aria-invalid"]),
|
|
588
588
|
banner: /* @__PURE__ */ new Set(["aria-disabled", "aria-errormessage", "aria-haspopup", "aria-invalid"]),
|
|
@@ -616,7 +616,7 @@ const ze = /* @__PURE__ */ new Set([
|
|
|
616
616
|
tooltip: /* @__PURE__ */ new Set(["aria-disabled", "aria-errormessage", "aria-haspopup", "aria-invalid"])
|
|
617
617
|
};
|
|
618
618
|
let T = null, R = null;
|
|
619
|
-
function
|
|
619
|
+
function Oe() {
|
|
620
620
|
T = null, R = null;
|
|
621
621
|
}
|
|
622
622
|
function J(t) {
|
|
@@ -634,7 +634,7 @@ function J(t) {
|
|
|
634
634
|
let s, l;
|
|
635
635
|
const p = () => (s === void 0 && (s = m(o), l = u(o)), { selector: s, html: l });
|
|
636
636
|
for (const c of o.attributes)
|
|
637
|
-
if (c.name.startsWith("aria-") && !
|
|
637
|
+
if (c.name.startsWith("aria-") && !Fe.has(c.name)) {
|
|
638
638
|
const d = p();
|
|
639
639
|
a.push({
|
|
640
640
|
ruleId: "aria-valid-attr",
|
|
@@ -671,7 +671,7 @@ function J(t) {
|
|
|
671
671
|
message: `${c.name} must be "true", "false", or "mixed", got "${d}".`
|
|
672
672
|
});
|
|
673
673
|
}
|
|
674
|
-
} else if (
|
|
674
|
+
} else if (je.has(c.name)) {
|
|
675
675
|
if (d === "" || !/^-?\d+$/.test(d)) {
|
|
676
676
|
const h = p();
|
|
677
677
|
e.push({
|
|
@@ -682,7 +682,7 @@ function J(t) {
|
|
|
682
682
|
message: `${c.name} must be an integer, got "${d}".`
|
|
683
683
|
});
|
|
684
684
|
}
|
|
685
|
-
} else if (
|
|
685
|
+
} else if (We.has(c.name)) {
|
|
686
686
|
if (d === "" || isNaN(Number(d))) {
|
|
687
687
|
const h = p();
|
|
688
688
|
e.push({
|
|
@@ -712,7 +712,7 @@ function J(t) {
|
|
|
712
712
|
}
|
|
713
713
|
if (!b(o)) {
|
|
714
714
|
const c = (i = o.getAttribute("role")) == null ? void 0 : i.trim().toLowerCase(), d = o.tagName.toLowerCase();
|
|
715
|
-
if (!c &&
|
|
715
|
+
if (!c && Ue[d]) {
|
|
716
716
|
const h = o.hasAttribute("aria-label"), g = o.hasAttribute("aria-labelledby");
|
|
717
717
|
if (h || g) {
|
|
718
718
|
const f = p();
|
|
@@ -738,7 +738,7 @@ function J(t) {
|
|
|
738
738
|
});
|
|
739
739
|
}
|
|
740
740
|
}
|
|
741
|
-
const h =
|
|
741
|
+
const h = Be[c];
|
|
742
742
|
if (h) {
|
|
743
743
|
for (const g of o.attributes)
|
|
744
744
|
if (g.name.startsWith("aria-") && h.has(g.name)) {
|
|
@@ -760,7 +760,7 @@ function J(t) {
|
|
|
760
760
|
return T = new WeakRef(t), R = { validAttr: a, validAttrValue: e, prohibitedAttr: n }, R;
|
|
761
761
|
}
|
|
762
762
|
let _ = /* @__PURE__ */ new WeakMap(), G = /* @__PURE__ */ new WeakMap(), Y = /* @__PURE__ */ new WeakMap();
|
|
763
|
-
function
|
|
763
|
+
function Ve() {
|
|
764
764
|
_ = /* @__PURE__ */ new WeakMap(), G = /* @__PURE__ */ new WeakMap(), Y = /* @__PURE__ */ new WeakMap();
|
|
765
765
|
}
|
|
766
766
|
function w(t) {
|
|
@@ -817,13 +817,13 @@ function D(t) {
|
|
|
817
817
|
);
|
|
818
818
|
return o ? [parseInt(o[1]), parseInt(o[2]), parseInt(o[3])] : null;
|
|
819
819
|
}
|
|
820
|
-
function
|
|
820
|
+
function _e(t) {
|
|
821
821
|
const a = G.get(t);
|
|
822
822
|
if (a !== void 0) return a;
|
|
823
|
-
const e =
|
|
823
|
+
const e = Ge(t);
|
|
824
824
|
return G.set(t, e), e;
|
|
825
825
|
}
|
|
826
|
-
function
|
|
826
|
+
function Ge(t) {
|
|
827
827
|
let a = t;
|
|
828
828
|
for (; a; ) {
|
|
829
829
|
const e = w(a), n = e.backgroundImage;
|
|
@@ -842,20 +842,20 @@ function _e(t) {
|
|
|
842
842
|
}
|
|
843
843
|
return [255, 255, 255];
|
|
844
844
|
}
|
|
845
|
-
const
|
|
846
|
-
function
|
|
845
|
+
const Ye = /* @__PURE__ */ new Set(["IMG", "PICTURE", "VIDEO", "SVG"]);
|
|
846
|
+
function Xe(t) {
|
|
847
847
|
const a = Y.get(t);
|
|
848
848
|
if (a !== void 0) return a;
|
|
849
|
-
const e =
|
|
849
|
+
const e = Ke(t);
|
|
850
850
|
return Y.set(t, e), e;
|
|
851
851
|
}
|
|
852
|
-
function
|
|
852
|
+
function Ke(t) {
|
|
853
853
|
let a = t, e = !1;
|
|
854
854
|
for (; a; ) {
|
|
855
855
|
const n = w(a).position;
|
|
856
856
|
if ((n === "absolute" || n === "fixed") && (e = !0), a !== t && n !== "static") {
|
|
857
857
|
for (const i of a.children)
|
|
858
|
-
if (!(i === t || i.contains(t)) &&
|
|
858
|
+
if (!(i === t || i.contains(t)) && Ye.has(i.tagName)) {
|
|
859
859
|
if (e) return !0;
|
|
860
860
|
const o = w(i).position;
|
|
861
861
|
if (o === "absolute" || o === "fixed") return !0;
|
|
@@ -866,19 +866,19 @@ function Xe(t) {
|
|
|
866
866
|
}
|
|
867
867
|
return !1;
|
|
868
868
|
}
|
|
869
|
-
function
|
|
869
|
+
function Je(t) {
|
|
870
870
|
const a = parseFloat(t);
|
|
871
871
|
return t.endsWith("pt") ? a * (4 / 3) : a;
|
|
872
872
|
}
|
|
873
|
-
function
|
|
874
|
-
const a = w(t), e =
|
|
873
|
+
function Qe(t) {
|
|
874
|
+
const a = w(t), e = Je(a.fontSize), n = parseInt(a.fontWeight) || (a.fontWeight === "bold" ? 700 : 400);
|
|
875
875
|
return e >= 23.5 || e >= 18.5 && n >= 700;
|
|
876
876
|
}
|
|
877
877
|
const $ = /* @__PURE__ */ new Map();
|
|
878
|
-
function
|
|
878
|
+
function Vn(t, a) {
|
|
879
879
|
$.set(t, a), X.delete(t);
|
|
880
880
|
}
|
|
881
|
-
function
|
|
881
|
+
function Ze(t, a) {
|
|
882
882
|
const e = $.get(a);
|
|
883
883
|
return e ? t.map((n) => {
|
|
884
884
|
const i = e[n.id];
|
|
@@ -890,17 +890,17 @@ function Qe(t, a) {
|
|
|
890
890
|
}) : t;
|
|
891
891
|
}
|
|
892
892
|
const X = /* @__PURE__ */ new Map();
|
|
893
|
-
function
|
|
893
|
+
function et(t) {
|
|
894
894
|
return t.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
895
895
|
}
|
|
896
|
-
function
|
|
896
|
+
function tt(t) {
|
|
897
897
|
const a = t.split(/\{(\d+)\}/);
|
|
898
898
|
let e = "^";
|
|
899
899
|
for (let n = 0; n < a.length; n++)
|
|
900
|
-
n % 2 === 0 ? e +=
|
|
900
|
+
n % 2 === 0 ? e += et(a[n]) : e += "(.+?)";
|
|
901
901
|
return e += "$", new RegExp(e);
|
|
902
902
|
}
|
|
903
|
-
function
|
|
903
|
+
function at(t, a) {
|
|
904
904
|
let e = X.get(t);
|
|
905
905
|
if (e || (e = /* @__PURE__ */ new Map(), X.set(t, e)), e.has(a)) return e.get(a);
|
|
906
906
|
const n = $.get(t);
|
|
@@ -911,13 +911,13 @@ function tt(t, a) {
|
|
|
911
911
|
const o = [];
|
|
912
912
|
for (const [r, s] of Object.entries(i.messages))
|
|
913
913
|
o.push({
|
|
914
|
-
regex:
|
|
914
|
+
regex: tt(r),
|
|
915
915
|
translated: s
|
|
916
916
|
});
|
|
917
917
|
return e.set(a, o), o;
|
|
918
918
|
}
|
|
919
|
-
function
|
|
920
|
-
const n =
|
|
919
|
+
function nt(t, a, e) {
|
|
920
|
+
const n = at(e, t);
|
|
921
921
|
if (!n) return a;
|
|
922
922
|
for (const { regex: i, translated: o } of n) {
|
|
923
923
|
const r = a.match(i);
|
|
@@ -931,7 +931,7 @@ function at(t, a, e) {
|
|
|
931
931
|
}
|
|
932
932
|
function Ae(t, a) {
|
|
933
933
|
return $.has(a) ? t.map((e) => {
|
|
934
|
-
const n =
|
|
934
|
+
const n = nt(e.ruleId, e.message, a);
|
|
935
935
|
return n === e.message ? e : { ...e, message: n };
|
|
936
936
|
}) : t;
|
|
937
937
|
}
|
|
@@ -963,7 +963,7 @@ function oe(t) {
|
|
|
963
963
|
}
|
|
964
964
|
return !1;
|
|
965
965
|
}
|
|
966
|
-
const
|
|
966
|
+
const it = {
|
|
967
967
|
id: "img-alt",
|
|
968
968
|
wcag: ["1.1.1"],
|
|
969
969
|
level: "A",
|
|
@@ -1012,7 +1012,7 @@ const nt = {
|
|
|
1012
1012
|
return a;
|
|
1013
1013
|
}
|
|
1014
1014
|
};
|
|
1015
|
-
function
|
|
1015
|
+
function ot(t) {
|
|
1016
1016
|
var o, r, s;
|
|
1017
1017
|
const a = t.getAttribute("aria-labelledby");
|
|
1018
1018
|
if (a) {
|
|
@@ -1029,7 +1029,7 @@ function it(t) {
|
|
|
1029
1029
|
const i = (s = t.getAttribute("title")) == null ? void 0 : s.trim();
|
|
1030
1030
|
return i || "";
|
|
1031
1031
|
}
|
|
1032
|
-
const
|
|
1032
|
+
const rt = {
|
|
1033
1033
|
id: "svg-img-alt",
|
|
1034
1034
|
wcag: ["1.1.1"],
|
|
1035
1035
|
level: "A",
|
|
@@ -1040,7 +1040,7 @@ const ot = {
|
|
|
1040
1040
|
const a = [], e = 'svg[role="img"], [role="graphics-document"], [role="graphics-symbol"]';
|
|
1041
1041
|
for (const n of t.querySelectorAll(e)) {
|
|
1042
1042
|
if (b(n)) continue;
|
|
1043
|
-
if (!
|
|
1043
|
+
if (!ot(n)) {
|
|
1044
1044
|
const o = n.getAttribute("role");
|
|
1045
1045
|
a.push({
|
|
1046
1046
|
ruleId: "svg-img-alt",
|
|
@@ -1053,7 +1053,7 @@ const ot = {
|
|
|
1053
1053
|
}
|
|
1054
1054
|
return a;
|
|
1055
1055
|
}
|
|
1056
|
-
},
|
|
1056
|
+
}, st = {
|
|
1057
1057
|
id: "input-image-alt",
|
|
1058
1058
|
wcag: ["1.1.1", "4.1.2"],
|
|
1059
1059
|
level: "A",
|
|
@@ -1072,7 +1072,7 @@ const ot = {
|
|
|
1072
1072
|
});
|
|
1073
1073
|
return a;
|
|
1074
1074
|
}
|
|
1075
|
-
},
|
|
1075
|
+
}, lt = {
|
|
1076
1076
|
id: "image-redundant-alt",
|
|
1077
1077
|
wcag: [],
|
|
1078
1078
|
level: "A",
|
|
@@ -1104,7 +1104,7 @@ const ot = {
|
|
|
1104
1104
|
}
|
|
1105
1105
|
return a;
|
|
1106
1106
|
}
|
|
1107
|
-
},
|
|
1107
|
+
}, ct = ["image", "picture", "photo", "graphic", "icon", "img"], dt = {
|
|
1108
1108
|
id: "image-alt-redundant-words",
|
|
1109
1109
|
wcag: [],
|
|
1110
1110
|
level: "A",
|
|
@@ -1117,7 +1117,7 @@ const ot = {
|
|
|
1117
1117
|
for (const e of t.querySelectorAll("img[alt]")) {
|
|
1118
1118
|
const n = e.getAttribute("alt").toLowerCase();
|
|
1119
1119
|
if (!n) continue;
|
|
1120
|
-
const i =
|
|
1120
|
+
const i = ct.filter((o) => n.split(/\s+/).includes(o));
|
|
1121
1121
|
i.length > 0 && a.push({
|
|
1122
1122
|
ruleId: "image-alt-redundant-words",
|
|
1123
1123
|
selector: m(e),
|
|
@@ -1129,7 +1129,7 @@ const ot = {
|
|
|
1129
1129
|
}
|
|
1130
1130
|
return a;
|
|
1131
1131
|
}
|
|
1132
|
-
},
|
|
1132
|
+
}, ut = {
|
|
1133
1133
|
id: "area-alt",
|
|
1134
1134
|
wcag: ["1.1.1", "4.1.2"],
|
|
1135
1135
|
level: "A",
|
|
@@ -1151,7 +1151,7 @@ const ot = {
|
|
|
1151
1151
|
return a;
|
|
1152
1152
|
}
|
|
1153
1153
|
};
|
|
1154
|
-
function
|
|
1154
|
+
function mt(t) {
|
|
1155
1155
|
var i, o;
|
|
1156
1156
|
const a = t.getAttribute("aria-labelledby");
|
|
1157
1157
|
if (a) {
|
|
@@ -1166,7 +1166,7 @@ function ut(t) {
|
|
|
1166
1166
|
const n = (o = t.getAttribute("title")) == null ? void 0 : o.trim();
|
|
1167
1167
|
return n || "";
|
|
1168
1168
|
}
|
|
1169
|
-
const
|
|
1169
|
+
const pt = {
|
|
1170
1170
|
id: "object-alt",
|
|
1171
1171
|
wcag: ["1.1.1"],
|
|
1172
1172
|
level: "A",
|
|
@@ -1186,7 +1186,7 @@ const mt = {
|
|
|
1186
1186
|
}
|
|
1187
1187
|
i = i.parentElement;
|
|
1188
1188
|
}
|
|
1189
|
-
if (o || n.getAttribute("role") === "presentation" || n.getAttribute("role") === "none" ||
|
|
1189
|
+
if (o || n.getAttribute("role") === "presentation" || n.getAttribute("role") === "none" || mt(n)) continue;
|
|
1190
1190
|
const r = n.getAttribute("data") || "";
|
|
1191
1191
|
if (!((n.getAttribute("type") || "").startsWith("image/") || /\.(png|jpg|jpeg|gif|svg|webp|bmp|ico)$/i.test(r))) {
|
|
1192
1192
|
const p = n.querySelector("img[alt]");
|
|
@@ -1202,7 +1202,7 @@ const mt = {
|
|
|
1202
1202
|
}
|
|
1203
1203
|
return a;
|
|
1204
1204
|
}
|
|
1205
|
-
},
|
|
1205
|
+
}, ht = {
|
|
1206
1206
|
id: "role-img-alt",
|
|
1207
1207
|
wcag: ["1.1.1"],
|
|
1208
1208
|
level: "A",
|
|
@@ -1224,7 +1224,7 @@ const mt = {
|
|
|
1224
1224
|
return a;
|
|
1225
1225
|
}
|
|
1226
1226
|
};
|
|
1227
|
-
function
|
|
1227
|
+
function _n(t) {
|
|
1228
1228
|
if (typeof t != "object" || t === null)
|
|
1229
1229
|
return "Rule spec must be an object";
|
|
1230
1230
|
const a = t;
|
|
@@ -1254,10 +1254,10 @@ function On(t) {
|
|
|
1254
1254
|
return "Rule must have a wcag array";
|
|
1255
1255
|
if (typeof a.level != "string" || !["A", "AA"].includes(a.level))
|
|
1256
1256
|
return "Rule must have level A or AA";
|
|
1257
|
-
const i =
|
|
1257
|
+
const i = bt(e);
|
|
1258
1258
|
return i || null;
|
|
1259
1259
|
}
|
|
1260
|
-
function
|
|
1260
|
+
function bt(t) {
|
|
1261
1261
|
switch (t.type) {
|
|
1262
1262
|
case "selector-exists":
|
|
1263
1263
|
return null;
|
|
@@ -1314,7 +1314,7 @@ function E(t) {
|
|
|
1314
1314
|
for (const p of e.querySelectorAll(t.selector)) {
|
|
1315
1315
|
if (a && b(p)) continue;
|
|
1316
1316
|
const c = p.getAttribute(r);
|
|
1317
|
-
c !== null &&
|
|
1317
|
+
c !== null && gt(c, s, l) && n.push({
|
|
1318
1318
|
ruleId: t.id,
|
|
1319
1319
|
selector: m(p),
|
|
1320
1320
|
html: u(p),
|
|
@@ -1431,7 +1431,7 @@ function E(t) {
|
|
|
1431
1431
|
}
|
|
1432
1432
|
};
|
|
1433
1433
|
}
|
|
1434
|
-
function
|
|
1434
|
+
function gt(t, a, e) {
|
|
1435
1435
|
switch (a) {
|
|
1436
1436
|
case ">":
|
|
1437
1437
|
return parseFloat(t) > e;
|
|
@@ -1449,7 +1449,7 @@ function bt(t, a, e) {
|
|
|
1449
1449
|
return !1;
|
|
1450
1450
|
}
|
|
1451
1451
|
}
|
|
1452
|
-
const
|
|
1452
|
+
const ft = {
|
|
1453
1453
|
id: "server-side-image-map",
|
|
1454
1454
|
selector: "img[ismap], input[type='image'][ismap]",
|
|
1455
1455
|
check: { type: "selector-exists" },
|
|
@@ -1460,7 +1460,7 @@ const gt = {
|
|
|
1460
1460
|
level: "A",
|
|
1461
1461
|
guidance: "Server-side image maps (using ismap attribute) send click coordinates to the server, which is inaccessible to keyboard users and screen readers who can't precisely click specific regions. Replace with client-side image maps (<map> with <area> elements) that provide keyboard access and accessible names, or use linked images/buttons instead.",
|
|
1462
1462
|
prompt: "Explain that the ismap attribute should be removed and the functionality replaced with a client-side <map> element with <area> children, or separate linked images/buttons."
|
|
1463
|
-
},
|
|
1463
|
+
}, vt = E(ft), yt = [
|
|
1464
1464
|
'[role="checkbox"]',
|
|
1465
1465
|
'[role="combobox"]',
|
|
1466
1466
|
'[role="listbox"]',
|
|
@@ -1472,13 +1472,13 @@ const gt = {
|
|
|
1472
1472
|
'[role="spinbutton"]',
|
|
1473
1473
|
'[role="switch"]',
|
|
1474
1474
|
'[role="textbox"]'
|
|
1475
|
-
].join(", "),
|
|
1475
|
+
].join(", "), wt = /* @__PURE__ */ new Set([
|
|
1476
1476
|
"checkbox",
|
|
1477
1477
|
"menuitemcheckbox",
|
|
1478
1478
|
"menuitemradio",
|
|
1479
1479
|
"radio",
|
|
1480
1480
|
"switch"
|
|
1481
|
-
]),
|
|
1481
|
+
]), At = /* @__PURE__ */ new Set([
|
|
1482
1482
|
"combobox",
|
|
1483
1483
|
"listbox",
|
|
1484
1484
|
"searchbox",
|
|
@@ -1486,10 +1486,10 @@ const gt = {
|
|
|
1486
1486
|
"spinbutton",
|
|
1487
1487
|
"textbox"
|
|
1488
1488
|
]);
|
|
1489
|
-
function
|
|
1489
|
+
function xt(t) {
|
|
1490
1490
|
var r, s, l, p;
|
|
1491
1491
|
const a = (r = t.getAttribute("role")) == null ? void 0 : r.trim().toLowerCase();
|
|
1492
|
-
if (a &&
|
|
1492
|
+
if (a && wt.has(a) || (t instanceof HTMLInputElement || t instanceof HTMLTextAreaElement) && !(a && At.has(a)))
|
|
1493
1493
|
return v(t);
|
|
1494
1494
|
const n = t.getAttribute("aria-labelledby");
|
|
1495
1495
|
if (n) {
|
|
@@ -1523,7 +1523,7 @@ function At(t) {
|
|
|
1523
1523
|
}
|
|
1524
1524
|
return "";
|
|
1525
1525
|
}
|
|
1526
|
-
const
|
|
1526
|
+
const kt = {
|
|
1527
1527
|
id: "label",
|
|
1528
1528
|
wcag: ["4.1.2"],
|
|
1529
1529
|
level: "A",
|
|
@@ -1532,12 +1532,12 @@ const xt = {
|
|
|
1532
1532
|
prompt: `This form field has no accessible label. Based on the context (input type, name attribute, placeholder, or surrounding elements), suggest adding a <label for="id"> element with descriptive text, or an aria-label attribute. The label should describe what information the user should enter, not the field type. For example: 'Email address', 'Search', 'Phone number'.`,
|
|
1533
1533
|
run(t) {
|
|
1534
1534
|
var i;
|
|
1535
|
-
const a = [], n = t.querySelectorAll(`input:not([type="hidden"]):not([type="submit"]):not([type="button"]):not([type="reset"]):not([type="image"]), textarea, select, ${
|
|
1535
|
+
const a = [], n = t.querySelectorAll(`input:not([type="hidden"]):not([type="submit"]):not([type="button"]):not([type="reset"]):not([type="image"]), textarea, select, ${yt}`);
|
|
1536
1536
|
for (const o of n) {
|
|
1537
1537
|
if (b(o) || q(o) || (o instanceof HTMLInputElement || o instanceof HTMLTextAreaElement || o instanceof HTMLSelectElement || o instanceof HTMLButtonElement) && o.disabled || o.closest("fieldset[disabled]") || o.getAttribute("aria-disabled") === "true") continue;
|
|
1538
1538
|
const r = (i = o.getAttribute("role")) == null ? void 0 : i.trim().toLowerCase();
|
|
1539
1539
|
if (r === "presentation" || r === "none") continue;
|
|
1540
|
-
if (!
|
|
1540
|
+
if (!xt(o)) {
|
|
1541
1541
|
const l = [], p = o.tagName.toLowerCase(), c = o.getAttribute("type");
|
|
1542
1542
|
c && p === "input" && l.push(`type: ${c}`);
|
|
1543
1543
|
const d = o.getAttribute("name");
|
|
@@ -1557,7 +1557,7 @@ const xt = {
|
|
|
1557
1557
|
}
|
|
1558
1558
|
return a;
|
|
1559
1559
|
}
|
|
1560
|
-
},
|
|
1560
|
+
}, St = {
|
|
1561
1561
|
id: "form-field-multiple-labels",
|
|
1562
1562
|
wcag: [],
|
|
1563
1563
|
level: "A",
|
|
@@ -1589,7 +1589,7 @@ const xt = {
|
|
|
1589
1589
|
}
|
|
1590
1590
|
return a;
|
|
1591
1591
|
}
|
|
1592
|
-
},
|
|
1592
|
+
}, It = {
|
|
1593
1593
|
id: "select-name",
|
|
1594
1594
|
wcag: ["4.1.2"],
|
|
1595
1595
|
level: "A",
|
|
@@ -1608,7 +1608,7 @@ const xt = {
|
|
|
1608
1608
|
});
|
|
1609
1609
|
return a;
|
|
1610
1610
|
}
|
|
1611
|
-
},
|
|
1611
|
+
}, Et = {
|
|
1612
1612
|
id: "input-button-name",
|
|
1613
1613
|
wcag: ["4.1.2"],
|
|
1614
1614
|
level: "A",
|
|
@@ -1633,7 +1633,7 @@ const xt = {
|
|
|
1633
1633
|
}
|
|
1634
1634
|
return a;
|
|
1635
1635
|
}
|
|
1636
|
-
},
|
|
1636
|
+
}, qt = /* @__PURE__ */ new Set([
|
|
1637
1637
|
"off",
|
|
1638
1638
|
"on",
|
|
1639
1639
|
"name",
|
|
@@ -1688,7 +1688,7 @@ const xt = {
|
|
|
1688
1688
|
"impp",
|
|
1689
1689
|
"url",
|
|
1690
1690
|
"photo"
|
|
1691
|
-
]),
|
|
1691
|
+
]), Lt = /* @__PURE__ */ new Set([
|
|
1692
1692
|
"tel",
|
|
1693
1693
|
"tel-country-code",
|
|
1694
1694
|
"tel-national",
|
|
@@ -1697,18 +1697,18 @@ const xt = {
|
|
|
1697
1697
|
"tel-extension",
|
|
1698
1698
|
"email",
|
|
1699
1699
|
"impp"
|
|
1700
|
-
]),
|
|
1701
|
-
function
|
|
1700
|
+
]), Tt = /* @__PURE__ */ new Set(["home", "work", "mobile", "fax", "pager"]), Rt = /* @__PURE__ */ new Set(["shipping", "billing"]), Ct = /* @__PURE__ */ new Set(["webauthn"]);
|
|
1701
|
+
function Nt(t) {
|
|
1702
1702
|
const a = t.toLowerCase().split(/\s+/).filter(Boolean);
|
|
1703
1703
|
if (a.length === 0) return !0;
|
|
1704
1704
|
let e = 0;
|
|
1705
|
-
a[e].startsWith("section-") && e++, e < a.length &&
|
|
1705
|
+
a[e].startsWith("section-") && e++, e < a.length && Rt.has(a[e]) && e++;
|
|
1706
1706
|
let n = !1;
|
|
1707
|
-
if (e < a.length &&
|
|
1707
|
+
if (e < a.length && Tt.has(a[e]) && (n = !0, e++), e >= a.length) return !1;
|
|
1708
1708
|
const i = a[e];
|
|
1709
|
-
return !
|
|
1709
|
+
return !qt.has(i) || n && !Lt.has(i) ? !1 : (e++, e < a.length && Ct.has(a[e]) && e++, e === a.length);
|
|
1710
1710
|
}
|
|
1711
|
-
const
|
|
1711
|
+
const Mt = {
|
|
1712
1712
|
id: "autocomplete-valid",
|
|
1713
1713
|
wcag: ["1.3.5"],
|
|
1714
1714
|
level: "AA",
|
|
@@ -1720,7 +1720,7 @@ const Nt = {
|
|
|
1720
1720
|
for (const e of t.querySelectorAll("[autocomplete]")) {
|
|
1721
1721
|
if (b(e) || e instanceof HTMLElement && e.style.display === "none" || e.disabled || e.getAttribute("aria-disabled") === "true") continue;
|
|
1722
1722
|
const n = e.getAttribute("autocomplete").trim();
|
|
1723
|
-
n && (
|
|
1723
|
+
n && (Nt(n) || a.push({
|
|
1724
1724
|
ruleId: "autocomplete-valid",
|
|
1725
1725
|
selector: m(e),
|
|
1726
1726
|
html: u(e),
|
|
@@ -1754,7 +1754,7 @@ function K(t) {
|
|
|
1754
1754
|
}
|
|
1755
1755
|
return a;
|
|
1756
1756
|
}
|
|
1757
|
-
const
|
|
1757
|
+
const Dt = {
|
|
1758
1758
|
id: "label-content-name-mismatch",
|
|
1759
1759
|
wcag: [],
|
|
1760
1760
|
level: "A",
|
|
@@ -1801,7 +1801,7 @@ const Mt = {
|
|
|
1801
1801
|
}
|
|
1802
1802
|
return a;
|
|
1803
1803
|
}
|
|
1804
|
-
},
|
|
1804
|
+
}, $t = {
|
|
1805
1805
|
id: "label-title-only",
|
|
1806
1806
|
wcag: [],
|
|
1807
1807
|
level: "A",
|
|
@@ -1834,7 +1834,7 @@ const Mt = {
|
|
|
1834
1834
|
}
|
|
1835
1835
|
return a;
|
|
1836
1836
|
}
|
|
1837
|
-
},
|
|
1837
|
+
}, Ht = {
|
|
1838
1838
|
id: "tabindex",
|
|
1839
1839
|
selector: "[tabindex]",
|
|
1840
1840
|
check: { type: "attribute-value", attribute: "tabindex", operator: ">", value: 0 },
|
|
@@ -1846,7 +1846,7 @@ const Mt = {
|
|
|
1846
1846
|
tags: ["best-practice"],
|
|
1847
1847
|
guidance: "Positive tabindex values force elements to the front of the tab order regardless of DOM position, creating unpredictable navigation for keyboard users. Use tabindex='0' to add elements to the natural tab order, or tabindex='-1' to make elements programmatically focusable but not in tab order. Rely on DOM order for tab sequence.",
|
|
1848
1848
|
prompt: "Change the positive tabindex value to tabindex='0' and rely on DOM order for tab sequence instead."
|
|
1849
|
-
},
|
|
1849
|
+
}, Pt = E(Ht), zt = /* @__PURE__ */ new Set([
|
|
1850
1850
|
"div",
|
|
1851
1851
|
"span",
|
|
1852
1852
|
"p",
|
|
@@ -1873,7 +1873,7 @@ const Mt = {
|
|
|
1873
1873
|
"tr",
|
|
1874
1874
|
"td",
|
|
1875
1875
|
"th"
|
|
1876
|
-
]),
|
|
1876
|
+
]), Ft = {
|
|
1877
1877
|
id: "focus-order-semantics",
|
|
1878
1878
|
wcag: [],
|
|
1879
1879
|
tags: ["best-practice"],
|
|
@@ -1885,7 +1885,7 @@ const Mt = {
|
|
|
1885
1885
|
const a = [];
|
|
1886
1886
|
for (const e of t.querySelectorAll('[tabindex="0"]')) {
|
|
1887
1887
|
const n = e.tagName.toLowerCase();
|
|
1888
|
-
if (!
|
|
1888
|
+
if (!zt.has(n)) continue;
|
|
1889
1889
|
e.getAttribute("role") || a.push({
|
|
1890
1890
|
ruleId: "focus-order-semantics",
|
|
1891
1891
|
selector: m(e),
|
|
@@ -1896,7 +1896,7 @@ const Mt = {
|
|
|
1896
1896
|
}
|
|
1897
1897
|
return a;
|
|
1898
1898
|
}
|
|
1899
|
-
},
|
|
1899
|
+
}, jt = /* @__PURE__ */ new Set([
|
|
1900
1900
|
"a",
|
|
1901
1901
|
"audio",
|
|
1902
1902
|
"button",
|
|
@@ -1905,7 +1905,7 @@ const Mt = {
|
|
|
1905
1905
|
"select",
|
|
1906
1906
|
"textarea",
|
|
1907
1907
|
"video"
|
|
1908
|
-
]),
|
|
1908
|
+
]), Wt = /* @__PURE__ */ new Set([
|
|
1909
1909
|
"button",
|
|
1910
1910
|
"checkbox",
|
|
1911
1911
|
"combobox",
|
|
@@ -1929,7 +1929,7 @@ const Mt = {
|
|
|
1929
1929
|
"tabpanel",
|
|
1930
1930
|
"textbox",
|
|
1931
1931
|
"treeitem"
|
|
1932
|
-
]),
|
|
1932
|
+
]), Ut = {
|
|
1933
1933
|
grid: /* @__PURE__ */ new Set(["gridcell", "row", "columnheader", "rowheader"]),
|
|
1934
1934
|
listbox: /* @__PURE__ */ new Set(["option"]),
|
|
1935
1935
|
menu: /* @__PURE__ */ new Set(["menuitem", "menuitemcheckbox", "menuitemradio"]),
|
|
@@ -1939,26 +1939,26 @@ const Mt = {
|
|
|
1939
1939
|
tree: /* @__PURE__ */ new Set(["treeitem"]),
|
|
1940
1940
|
treegrid: /* @__PURE__ */ new Set(["gridcell", "row", "columnheader", "rowheader", "treeitem"])
|
|
1941
1941
|
};
|
|
1942
|
-
function
|
|
1942
|
+
function Bt(t, a) {
|
|
1943
1943
|
var i, o, r;
|
|
1944
1944
|
const e = (i = t.getAttribute("role")) == null ? void 0 : i.toLowerCase(), n = (o = a.getAttribute("role")) == null ? void 0 : o.toLowerCase();
|
|
1945
|
-
return !e || !n ? !1 : ((r =
|
|
1945
|
+
return !e || !n ? !1 : ((r = Ut[e]) == null ? void 0 : r.has(n)) ?? !1;
|
|
1946
1946
|
}
|
|
1947
|
-
function
|
|
1947
|
+
function Ot(t) {
|
|
1948
1948
|
var i;
|
|
1949
1949
|
const a = t.tagName.toLowerCase();
|
|
1950
|
-
if (
|
|
1950
|
+
if (jt.has(a))
|
|
1951
1951
|
return a === "a" && !t.hasAttribute("href") ? !1 : a === "audio" || a === "video" ? t.hasAttribute("controls") : !(a === "img" && !t.hasAttribute("usemap") || a === "input" && t.type === "hidden" || t.disabled);
|
|
1952
1952
|
const e = (i = t.getAttribute("role")) == null ? void 0 : i.toLowerCase();
|
|
1953
|
-
if (e &&
|
|
1953
|
+
if (e && Wt.has(e)) return !0;
|
|
1954
1954
|
const n = t.getAttribute("tabindex");
|
|
1955
1955
|
return n !== null && n !== "-1" || t.getAttribute("contenteditable") === "true";
|
|
1956
1956
|
}
|
|
1957
|
-
function
|
|
1957
|
+
function Vt(t) {
|
|
1958
1958
|
const a = t.tagName.toLowerCase();
|
|
1959
1959
|
return !!(a === "a" && t.hasAttribute("href") || a === "button" && !t.disabled);
|
|
1960
1960
|
}
|
|
1961
|
-
const
|
|
1961
|
+
const _t = {
|
|
1962
1962
|
id: "nested-interactive",
|
|
1963
1963
|
wcag: ["4.1.2"],
|
|
1964
1964
|
level: "A",
|
|
@@ -1973,10 +1973,10 @@ const Vt = {
|
|
|
1973
1973
|
for (; r; ) {
|
|
1974
1974
|
for (; o.length > 0 && !o[o.length - 1].contains(r); )
|
|
1975
1975
|
o.pop();
|
|
1976
|
-
if (!b(r) &&
|
|
1976
|
+
if (!b(r) && Ot(r)) {
|
|
1977
1977
|
if (o.length > 0) {
|
|
1978
1978
|
const s = o[o.length - 1];
|
|
1979
|
-
|
|
1979
|
+
Bt(s, r) || a.push({
|
|
1980
1980
|
ruleId: "nested-interactive",
|
|
1981
1981
|
selector: m(r),
|
|
1982
1982
|
html: u(r),
|
|
@@ -1984,13 +1984,13 @@ const Vt = {
|
|
|
1984
1984
|
message: `Interactive element <${r.tagName.toLowerCase()}> is nested inside <${s.tagName.toLowerCase()}>.`
|
|
1985
1985
|
});
|
|
1986
1986
|
}
|
|
1987
|
-
|
|
1987
|
+
Vt(r) && o.push(r);
|
|
1988
1988
|
}
|
|
1989
1989
|
r = i.nextNode();
|
|
1990
1990
|
}
|
|
1991
1991
|
return a;
|
|
1992
1992
|
}
|
|
1993
|
-
},
|
|
1993
|
+
}, Gt = {
|
|
1994
1994
|
id: "scrollable-region-focusable",
|
|
1995
1995
|
wcag: ["2.1.1"],
|
|
1996
1996
|
level: "A",
|
|
@@ -2028,7 +2028,7 @@ const Vt = {
|
|
|
2028
2028
|
}
|
|
2029
2029
|
return a;
|
|
2030
2030
|
}
|
|
2031
|
-
},
|
|
2031
|
+
}, Yt = {
|
|
2032
2032
|
id: "accesskeys",
|
|
2033
2033
|
wcag: [],
|
|
2034
2034
|
level: "A",
|
|
@@ -2058,7 +2058,7 @@ const Vt = {
|
|
|
2058
2058
|
});
|
|
2059
2059
|
return a;
|
|
2060
2060
|
}
|
|
2061
|
-
},
|
|
2061
|
+
}, Xt = {
|
|
2062
2062
|
id: "heading-order",
|
|
2063
2063
|
wcag: [],
|
|
2064
2064
|
level: "A",
|
|
@@ -2083,7 +2083,7 @@ const Vt = {
|
|
|
2083
2083
|
}
|
|
2084
2084
|
return a;
|
|
2085
2085
|
}
|
|
2086
|
-
}, H = 'article, aside, main, nav, section, [role="article"], [role="complementary"], [role="main"], [role="navigation"], [role="region"]', le = 'main, [role="main"], header, [role="banner"], footer, [role="contentinfo"], nav, [role="navigation"], aside, [role="complementary"], section[aria-label], section[aria-labelledby], [role="region"][aria-label], [role="region"][aria-labelledby], form[aria-label], form[aria-labelledby], [role="form"][aria-label], [role="form"][aria-labelledby], [role="search"]',
|
|
2086
|
+
}, H = 'article, aside, main, nav, section, [role="article"], [role="complementary"], [role="main"], [role="navigation"], [role="region"]', le = 'main, [role="main"], header, [role="banner"], footer, [role="contentinfo"], nav, [role="navigation"], aside, [role="complementary"], section[aria-label], section[aria-labelledby], [role="region"][aria-label], [role="region"][aria-labelledby], form[aria-label], form[aria-labelledby], [role="form"][aria-label], [role="form"][aria-labelledby], [role="search"]', Kt = {
|
|
2087
2087
|
id: "landmark-one-main",
|
|
2088
2088
|
wcag: [],
|
|
2089
2089
|
level: "A",
|
|
@@ -2107,7 +2107,7 @@ const Vt = {
|
|
|
2107
2107
|
message: "Page has multiple main landmarks."
|
|
2108
2108
|
})) : [];
|
|
2109
2109
|
}
|
|
2110
|
-
},
|
|
2110
|
+
}, Jt = {
|
|
2111
2111
|
id: "landmark-no-duplicate-banner",
|
|
2112
2112
|
wcag: [],
|
|
2113
2113
|
level: "A",
|
|
@@ -2127,7 +2127,7 @@ const Vt = {
|
|
|
2127
2127
|
})
|
|
2128
2128
|
), a;
|
|
2129
2129
|
}
|
|
2130
|
-
},
|
|
2130
|
+
}, Qt = {
|
|
2131
2131
|
id: "landmark-no-duplicate-contentinfo",
|
|
2132
2132
|
wcag: [],
|
|
2133
2133
|
level: "A",
|
|
@@ -2147,7 +2147,7 @@ const Vt = {
|
|
|
2147
2147
|
})
|
|
2148
2148
|
), a;
|
|
2149
2149
|
}
|
|
2150
|
-
},
|
|
2150
|
+
}, Zt = {
|
|
2151
2151
|
id: "landmark-no-duplicate-main",
|
|
2152
2152
|
wcag: [],
|
|
2153
2153
|
level: "A",
|
|
@@ -2167,7 +2167,7 @@ const Vt = {
|
|
|
2167
2167
|
})
|
|
2168
2168
|
), a;
|
|
2169
2169
|
}
|
|
2170
|
-
},
|
|
2170
|
+
}, ea = {
|
|
2171
2171
|
id: "landmark-banner-is-top-level",
|
|
2172
2172
|
wcag: [],
|
|
2173
2173
|
level: "A",
|
|
@@ -2187,7 +2187,7 @@ const Vt = {
|
|
|
2187
2187
|
});
|
|
2188
2188
|
return a;
|
|
2189
2189
|
}
|
|
2190
|
-
},
|
|
2190
|
+
}, ta = {
|
|
2191
2191
|
id: "landmark-contentinfo-is-top-level",
|
|
2192
2192
|
wcag: [],
|
|
2193
2193
|
level: "A",
|
|
@@ -2207,7 +2207,7 @@ const Vt = {
|
|
|
2207
2207
|
});
|
|
2208
2208
|
return a;
|
|
2209
2209
|
}
|
|
2210
|
-
},
|
|
2210
|
+
}, aa = {
|
|
2211
2211
|
id: "landmark-main-is-top-level",
|
|
2212
2212
|
wcag: [],
|
|
2213
2213
|
level: "A",
|
|
@@ -2229,7 +2229,7 @@ const Vt = {
|
|
|
2229
2229
|
}
|
|
2230
2230
|
return a;
|
|
2231
2231
|
}
|
|
2232
|
-
},
|
|
2232
|
+
}, na = {
|
|
2233
2233
|
id: "landmark-complementary-is-top-level",
|
|
2234
2234
|
wcag: [],
|
|
2235
2235
|
level: "A",
|
|
@@ -2251,7 +2251,7 @@ const Vt = {
|
|
|
2251
2251
|
}
|
|
2252
2252
|
return a;
|
|
2253
2253
|
}
|
|
2254
|
-
},
|
|
2254
|
+
}, ia = {
|
|
2255
2255
|
id: "landmark-unique",
|
|
2256
2256
|
wcag: [],
|
|
2257
2257
|
level: "A",
|
|
@@ -2287,7 +2287,7 @@ const Vt = {
|
|
|
2287
2287
|
}
|
|
2288
2288
|
return a;
|
|
2289
2289
|
}
|
|
2290
|
-
},
|
|
2290
|
+
}, oa = {
|
|
2291
2291
|
id: "region",
|
|
2292
2292
|
wcag: [],
|
|
2293
2293
|
level: "A",
|
|
@@ -2312,7 +2312,7 @@ const Vt = {
|
|
|
2312
2312
|
}
|
|
2313
2313
|
return a;
|
|
2314
2314
|
}
|
|
2315
|
-
},
|
|
2315
|
+
}, ra = {
|
|
2316
2316
|
id: "list",
|
|
2317
2317
|
selector: "ul, ol",
|
|
2318
2318
|
check: { type: "child-invalid", allowedChildren: ["li", "script", "template"], allowedChildRoles: ["listitem"] },
|
|
@@ -2323,7 +2323,7 @@ const Vt = {
|
|
|
2323
2323
|
level: "A",
|
|
2324
2324
|
guidance: "Screen readers announce list structure ('list with 5 items') based on proper markup. Placing non-<li> elements directly inside <ul> or <ol> breaks this structure. Wrap content in <li> elements, or if you need wrapper divs for styling, restructure your CSS to style the <li> elements directly.",
|
|
2325
2325
|
prompt: "Explain how to restructure this element within the list properly."
|
|
2326
|
-
},
|
|
2326
|
+
}, sa = E(ra), la = {
|
|
2327
2327
|
id: "dlitem",
|
|
2328
2328
|
wcag: ["1.3.1"],
|
|
2329
2329
|
level: "A",
|
|
@@ -2342,7 +2342,7 @@ const Vt = {
|
|
|
2342
2342
|
});
|
|
2343
2343
|
return a;
|
|
2344
2344
|
}
|
|
2345
|
-
},
|
|
2345
|
+
}, ca = {
|
|
2346
2346
|
id: "definition-list",
|
|
2347
2347
|
selector: "dl",
|
|
2348
2348
|
check: { type: "child-invalid", allowedChildren: ["dt", "dd", "div", "script", "template"] },
|
|
@@ -2353,7 +2353,7 @@ const Vt = {
|
|
|
2353
2353
|
level: "A",
|
|
2354
2354
|
guidance: "Definition lists have strict content requirements. Only <dt> (terms), <dd> (definitions), and <div> (for grouping dt/dd pairs) are valid children. Other elements break the list structure for screen readers. Move invalid elements outside the <dl>, or restructure using proper definition list markup.",
|
|
2355
2355
|
prompt: "Explain whether to move this element outside the <dl> or convert it to dt/dd."
|
|
2356
|
-
},
|
|
2356
|
+
}, da = E(ca), ua = {
|
|
2357
2357
|
id: "listitem",
|
|
2358
2358
|
wcag: ["1.3.1"],
|
|
2359
2359
|
level: "A",
|
|
@@ -2378,7 +2378,7 @@ const Vt = {
|
|
|
2378
2378
|
}
|
|
2379
2379
|
return a;
|
|
2380
2380
|
}
|
|
2381
|
-
},
|
|
2381
|
+
}, ma = {
|
|
2382
2382
|
id: "document-title",
|
|
2383
2383
|
wcag: ["2.4.2"],
|
|
2384
2384
|
level: "A",
|
|
@@ -2408,7 +2408,7 @@ const Vt = {
|
|
|
2408
2408
|
}
|
|
2409
2409
|
return [];
|
|
2410
2410
|
}
|
|
2411
|
-
},
|
|
2411
|
+
}, pa = {
|
|
2412
2412
|
id: "bypass",
|
|
2413
2413
|
wcag: [],
|
|
2414
2414
|
level: "A",
|
|
@@ -2439,7 +2439,7 @@ const Vt = {
|
|
|
2439
2439
|
context: `Missing: ${i.join(", ")}`
|
|
2440
2440
|
}];
|
|
2441
2441
|
}
|
|
2442
|
-
},
|
|
2442
|
+
}, ha = {
|
|
2443
2443
|
id: "page-has-heading-one",
|
|
2444
2444
|
wcag: [],
|
|
2445
2445
|
level: "A",
|
|
@@ -2477,7 +2477,7 @@ function xe(t) {
|
|
|
2477
2477
|
const a = t.getAttribute("width"), e = t.getAttribute("height");
|
|
2478
2478
|
return (a === "0" || a === "1") && (e === "0" || e === "1");
|
|
2479
2479
|
}
|
|
2480
|
-
const
|
|
2480
|
+
const ba = {
|
|
2481
2481
|
id: "frame-title",
|
|
2482
2482
|
wcag: ["4.1.2"],
|
|
2483
2483
|
level: "A",
|
|
@@ -2502,7 +2502,7 @@ const ha = {
|
|
|
2502
2502
|
}
|
|
2503
2503
|
return a;
|
|
2504
2504
|
}
|
|
2505
|
-
},
|
|
2505
|
+
}, ga = {
|
|
2506
2506
|
id: "frame-title-unique",
|
|
2507
2507
|
wcag: ["4.1.2"],
|
|
2508
2508
|
level: "A",
|
|
@@ -2533,7 +2533,7 @@ const ha = {
|
|
|
2533
2533
|
});
|
|
2534
2534
|
return a;
|
|
2535
2535
|
}
|
|
2536
|
-
},
|
|
2536
|
+
}, fa = {
|
|
2537
2537
|
id: "empty-heading",
|
|
2538
2538
|
wcag: [],
|
|
2539
2539
|
level: "A",
|
|
@@ -2563,7 +2563,7 @@ const ha = {
|
|
|
2563
2563
|
}
|
|
2564
2564
|
return a;
|
|
2565
2565
|
}
|
|
2566
|
-
},
|
|
2566
|
+
}, va = {
|
|
2567
2567
|
id: "meta-viewport",
|
|
2568
2568
|
wcag: ["1.4.4"],
|
|
2569
2569
|
level: "AA",
|
|
@@ -2599,7 +2599,7 @@ const ha = {
|
|
|
2599
2599
|
}
|
|
2600
2600
|
return a;
|
|
2601
2601
|
}
|
|
2602
|
-
},
|
|
2602
|
+
}, ya = {
|
|
2603
2603
|
id: "meta-refresh",
|
|
2604
2604
|
wcag: ["2.2.1", "2.2.4", "3.2.5"],
|
|
2605
2605
|
level: "A",
|
|
@@ -2630,7 +2630,7 @@ const ha = {
|
|
|
2630
2630
|
}
|
|
2631
2631
|
return [];
|
|
2632
2632
|
}
|
|
2633
|
-
},
|
|
2633
|
+
}, wa = {
|
|
2634
2634
|
id: "blink",
|
|
2635
2635
|
selector: "blink",
|
|
2636
2636
|
check: { type: "selector-exists" },
|
|
@@ -2641,7 +2641,7 @@ const ha = {
|
|
|
2641
2641
|
level: "A",
|
|
2642
2642
|
guidance: "Blinking content can cause seizures in users with photosensitive epilepsy and is distracting for users with attention disorders. The <blink> element is deprecated and should never be used. If you need to draw attention to content, use less intrusive methods like color, borders, or icons.",
|
|
2643
2643
|
prompt: "Suggest static alternatives to the blinking effect."
|
|
2644
|
-
},
|
|
2644
|
+
}, Aa = E(wa), xa = {
|
|
2645
2645
|
id: "marquee",
|
|
2646
2646
|
selector: "marquee",
|
|
2647
2647
|
check: { type: "selector-exists" },
|
|
@@ -2652,7 +2652,7 @@ const ha = {
|
|
|
2652
2652
|
level: "A",
|
|
2653
2653
|
guidance: "Scrolling or moving content is difficult for many users to read, especially those with cognitive or visual disabilities. The <marquee> element is deprecated. Replace scrolling text with static content. If content must scroll, provide pause/stop controls and ensure it stops after 5 seconds.",
|
|
2654
2654
|
prompt: "Suggest static alternatives or accessible carousel patterns."
|
|
2655
|
-
},
|
|
2655
|
+
}, ka = E(xa), Sa = {
|
|
2656
2656
|
id: "p-as-heading",
|
|
2657
2657
|
wcag: [],
|
|
2658
2658
|
level: "A",
|
|
@@ -2679,7 +2679,7 @@ const ha = {
|
|
|
2679
2679
|
}
|
|
2680
2680
|
return a;
|
|
2681
2681
|
}
|
|
2682
|
-
},
|
|
2682
|
+
}, Ia = {
|
|
2683
2683
|
id: "aria-roles",
|
|
2684
2684
|
wcag: ["4.1.2"],
|
|
2685
2685
|
level: "A",
|
|
@@ -2690,7 +2690,7 @@ const ha = {
|
|
|
2690
2690
|
const a = [];
|
|
2691
2691
|
for (const e of t.querySelectorAll("[role]")) {
|
|
2692
2692
|
const o = e.getAttribute("role").replace(/[\u201C\u201D\u2018\u2019\u00AB\u00BB]/g, "").split(/\s+/).filter(Boolean);
|
|
2693
|
-
!o.some((s) =>
|
|
2693
|
+
!o.some((s) => Me(s)) && o.length > 0 && a.push({
|
|
2694
2694
|
ruleId: "aria-roles",
|
|
2695
2695
|
selector: m(e),
|
|
2696
2696
|
html: u(e),
|
|
@@ -2700,7 +2700,7 @@ const ha = {
|
|
|
2700
2700
|
}
|
|
2701
2701
|
return a;
|
|
2702
2702
|
}
|
|
2703
|
-
},
|
|
2703
|
+
}, Ea = {
|
|
2704
2704
|
id: "aria-valid-attr",
|
|
2705
2705
|
wcag: ["4.1.2"],
|
|
2706
2706
|
level: "A",
|
|
@@ -2710,7 +2710,7 @@ const ha = {
|
|
|
2710
2710
|
run(t) {
|
|
2711
2711
|
return J(t).validAttr;
|
|
2712
2712
|
}
|
|
2713
|
-
},
|
|
2713
|
+
}, qa = {
|
|
2714
2714
|
id: "aria-valid-attr-value",
|
|
2715
2715
|
wcag: ["4.1.2"],
|
|
2716
2716
|
level: "A",
|
|
@@ -2720,7 +2720,7 @@ const ha = {
|
|
|
2720
2720
|
run(t) {
|
|
2721
2721
|
return J(t).validAttrValue;
|
|
2722
2722
|
}
|
|
2723
|
-
},
|
|
2723
|
+
}, La = {
|
|
2724
2724
|
checkbox: ["aria-checked"],
|
|
2725
2725
|
combobox: ["aria-expanded"],
|
|
2726
2726
|
heading: ["aria-level"],
|
|
@@ -2734,7 +2734,7 @@ const ha = {
|
|
|
2734
2734
|
slider: ["aria-valuenow"],
|
|
2735
2735
|
spinbutton: ["aria-valuenow"],
|
|
2736
2736
|
switch: ["aria-checked"]
|
|
2737
|
-
},
|
|
2737
|
+
}, Ta = {
|
|
2738
2738
|
id: "aria-required-attr",
|
|
2739
2739
|
wcag: ["4.1.2"],
|
|
2740
2740
|
level: "A",
|
|
@@ -2745,7 +2745,7 @@ const ha = {
|
|
|
2745
2745
|
const a = [];
|
|
2746
2746
|
for (const e of t.querySelectorAll("[role]")) {
|
|
2747
2747
|
if (b(e) || e instanceof HTMLElement && e.style.display === "none") continue;
|
|
2748
|
-
const n = e.getAttribute("role").trim().toLowerCase(), i =
|
|
2748
|
+
const n = e.getAttribute("role").trim().toLowerCase(), i = La[n];
|
|
2749
2749
|
if (i && !(n === "checkbox" && e instanceof HTMLInputElement && e.type === "checkbox") && !(n === "radio" && e instanceof HTMLInputElement && e.type === "radio") && !(n === "option" && e instanceof HTMLOptionElement) && !(n === "heading" && /^h[1-6]$/i.test(e.tagName))) {
|
|
2750
2750
|
if (n === "separator") {
|
|
2751
2751
|
const o = e.getAttribute("tabindex");
|
|
@@ -2769,7 +2769,7 @@ const ha = {
|
|
|
2769
2769
|
return a;
|
|
2770
2770
|
}
|
|
2771
2771
|
};
|
|
2772
|
-
function
|
|
2772
|
+
function Ra(t) {
|
|
2773
2773
|
var o, r, s;
|
|
2774
2774
|
const a = [], e = t.className;
|
|
2775
2775
|
e && typeof e == "string" && e.trim() && a.push(`Classes: ${e.trim().slice(0, 100)}`);
|
|
@@ -2786,7 +2786,7 @@ function Ta(t) {
|
|
|
2786
2786
|
return a.length > 0 ? a.join(`
|
|
2787
2787
|
`) : void 0;
|
|
2788
2788
|
}
|
|
2789
|
-
const
|
|
2789
|
+
const Ca = {
|
|
2790
2790
|
id: "button-name",
|
|
2791
2791
|
wcag: ["4.1.2"],
|
|
2792
2792
|
level: "A",
|
|
@@ -2805,12 +2805,12 @@ const Ra = {
|
|
|
2805
2805
|
html: u(e),
|
|
2806
2806
|
impact: "critical",
|
|
2807
2807
|
message: "Button has no discernible text.",
|
|
2808
|
-
context:
|
|
2808
|
+
context: Ra(e)
|
|
2809
2809
|
});
|
|
2810
2810
|
}
|
|
2811
2811
|
return a;
|
|
2812
2812
|
}
|
|
2813
|
-
},
|
|
2813
|
+
}, Na = {
|
|
2814
2814
|
alert: /* @__PURE__ */ new Set(["aria-atomic", "aria-busy", "aria-live", "aria-relevant"]),
|
|
2815
2815
|
alertdialog: /* @__PURE__ */ new Set(["aria-describedby", "aria-modal"]),
|
|
2816
2816
|
application: /* @__PURE__ */ new Set(["aria-activedescendant", "aria-disabled", "aria-errormessage", "aria-expanded", "aria-haspopup", "aria-invalid"]),
|
|
@@ -2882,7 +2882,7 @@ const Ra = {
|
|
|
2882
2882
|
tree: /* @__PURE__ */ new Set(["aria-activedescendant", "aria-disabled", "aria-errormessage", "aria-invalid", "aria-multiselectable", "aria-orientation", "aria-required"]),
|
|
2883
2883
|
treegrid: /* @__PURE__ */ new Set(["aria-activedescendant", "aria-colcount", "aria-disabled", "aria-errormessage", "aria-invalid", "aria-multiselectable", "aria-orientation", "aria-readonly", "aria-required", "aria-rowcount"]),
|
|
2884
2884
|
treeitem: /* @__PURE__ */ new Set(["aria-checked", "aria-disabled", "aria-expanded", "aria-haspopup", "aria-level", "aria-posinset", "aria-selected", "aria-setsize"])
|
|
2885
|
-
},
|
|
2885
|
+
}, Ma = /* @__PURE__ */ new Set([
|
|
2886
2886
|
"aria-atomic",
|
|
2887
2887
|
"aria-busy",
|
|
2888
2888
|
"aria-controls",
|
|
@@ -2906,7 +2906,7 @@ const Ra = {
|
|
|
2906
2906
|
"aria-roledescription",
|
|
2907
2907
|
"aria-braillelabel",
|
|
2908
2908
|
"aria-brailleroledescription"
|
|
2909
|
-
]),
|
|
2909
|
+
]), Da = {
|
|
2910
2910
|
id: "aria-allowed-attr",
|
|
2911
2911
|
wcag: ["4.1.2"],
|
|
2912
2912
|
level: "A",
|
|
@@ -2919,10 +2919,10 @@ const Ra = {
|
|
|
2919
2919
|
if (b(e)) continue;
|
|
2920
2920
|
const n = N(e);
|
|
2921
2921
|
if (!n) continue;
|
|
2922
|
-
const i =
|
|
2922
|
+
const i = Na[n];
|
|
2923
2923
|
if (i)
|
|
2924
2924
|
for (const o of e.attributes) {
|
|
2925
|
-
if (!o.name.startsWith("aria-") ||
|
|
2925
|
+
if (!o.name.startsWith("aria-") || Ma.has(o.name) || i.has(o.name)) continue;
|
|
2926
2926
|
const r = i.size > 0 ? [...i].join(", ") : "none (only global ARIA attributes)";
|
|
2927
2927
|
a.push({
|
|
2928
2928
|
ruleId: "aria-allowed-attr",
|
|
@@ -2936,7 +2936,7 @@ const Ra = {
|
|
|
2936
2936
|
}
|
|
2937
2937
|
return a;
|
|
2938
2938
|
}
|
|
2939
|
-
},
|
|
2939
|
+
}, $a = /* @__PURE__ */ new Set([
|
|
2940
2940
|
"base",
|
|
2941
2941
|
"col",
|
|
2942
2942
|
"colgroup",
|
|
@@ -3058,10 +3058,10 @@ const Ra = {
|
|
|
3058
3058
|
video: /* @__PURE__ */ new Set(["application"]),
|
|
3059
3059
|
wbr: /* @__PURE__ */ new Set(["none", "presentation"])
|
|
3060
3060
|
};
|
|
3061
|
-
function
|
|
3061
|
+
function Ha(t) {
|
|
3062
3062
|
var e;
|
|
3063
3063
|
const a = t.tagName.toLowerCase();
|
|
3064
|
-
if (
|
|
3064
|
+
if ($a.has(a))
|
|
3065
3065
|
return "none";
|
|
3066
3066
|
if (a === "a" && t.hasAttribute("href"))
|
|
3067
3067
|
return L["a[href]"];
|
|
@@ -3073,7 +3073,7 @@ function $a(t) {
|
|
|
3073
3073
|
}
|
|
3074
3074
|
return L[a] || "any";
|
|
3075
3075
|
}
|
|
3076
|
-
const
|
|
3076
|
+
const Pa = {
|
|
3077
3077
|
id: "aria-allowed-role",
|
|
3078
3078
|
wcag: ["4.1.2"],
|
|
3079
3079
|
level: "A",
|
|
@@ -3089,7 +3089,7 @@ const Ha = {
|
|
|
3089
3089
|
if (!i) continue;
|
|
3090
3090
|
const o = ve(n);
|
|
3091
3091
|
if (o && i === o) continue;
|
|
3092
|
-
const r =
|
|
3092
|
+
const r = Ha(n);
|
|
3093
3093
|
r === "none" ? a.push({
|
|
3094
3094
|
ruleId: "aria-allowed-role",
|
|
3095
3095
|
selector: m(n),
|
|
@@ -3123,7 +3123,7 @@ const Ha = {
|
|
|
3123
3123
|
tablist: [["tab"]],
|
|
3124
3124
|
tree: [["treeitem", "group"]],
|
|
3125
3125
|
treegrid: [["row", "rowgroup"]]
|
|
3126
|
-
},
|
|
3126
|
+
}, za = /* @__PURE__ */ new Set([
|
|
3127
3127
|
"doc-bibliography",
|
|
3128
3128
|
"doc-endnotes",
|
|
3129
3129
|
"grid",
|
|
@@ -3151,7 +3151,7 @@ const Ha = {
|
|
|
3151
3151
|
tab: ["tablist"],
|
|
3152
3152
|
treeitem: ["tree", "group"]
|
|
3153
3153
|
};
|
|
3154
|
-
function
|
|
3154
|
+
function Fa(t, a) {
|
|
3155
3155
|
var r;
|
|
3156
3156
|
const e = ((r = t.getAttribute("aria-owns")) == null ? void 0 : r.split(/\s+/)) || [], n = t.ownerDocument, i = /* @__PURE__ */ new Set();
|
|
3157
3157
|
let o = !1;
|
|
@@ -3174,7 +3174,7 @@ function za(t, a) {
|
|
|
3174
3174
|
if (!s.some((l) => i.has(l))) return "fail";
|
|
3175
3175
|
return "pass";
|
|
3176
3176
|
}
|
|
3177
|
-
const
|
|
3177
|
+
const ja = {
|
|
3178
3178
|
id: "aria-required-children",
|
|
3179
3179
|
wcag: ["1.3.1"],
|
|
3180
3180
|
level: "A",
|
|
@@ -3193,8 +3193,8 @@ const Fa = {
|
|
|
3193
3193
|
const l = n.tagName.toLowerCase();
|
|
3194
3194
|
if (l === "input" || l === "textarea") continue;
|
|
3195
3195
|
}
|
|
3196
|
-
const o = ce[i], r =
|
|
3197
|
-
if (r === "pass" || r === "empty" &&
|
|
3196
|
+
const o = ce[i], r = Fa(n, o);
|
|
3197
|
+
if (r === "pass" || r === "empty" && za.has(i)) continue;
|
|
3198
3198
|
const s = o.map((l) => l.join(" or ")).join(", ");
|
|
3199
3199
|
a.push({
|
|
3200
3200
|
ruleId: "aria-required-children",
|
|
@@ -3206,7 +3206,7 @@ const Fa = {
|
|
|
3206
3206
|
}
|
|
3207
3207
|
return a;
|
|
3208
3208
|
}
|
|
3209
|
-
},
|
|
3209
|
+
}, Wa = {
|
|
3210
3210
|
id: "aria-required-parent",
|
|
3211
3211
|
wcag: ["1.3.1"],
|
|
3212
3212
|
level: "A",
|
|
@@ -3256,7 +3256,7 @@ const Fa = {
|
|
|
3256
3256
|
"embed",
|
|
3257
3257
|
"area[href]"
|
|
3258
3258
|
].join(", ");
|
|
3259
|
-
function
|
|
3259
|
+
function Ua(t) {
|
|
3260
3260
|
let a = t;
|
|
3261
3261
|
const e = t.ownerDocument, n = e.defaultView;
|
|
3262
3262
|
for (; a && a !== e.body; ) {
|
|
@@ -3269,7 +3269,7 @@ function Wa(t) {
|
|
|
3269
3269
|
}
|
|
3270
3270
|
return !0;
|
|
3271
3271
|
}
|
|
3272
|
-
const
|
|
3272
|
+
const Ba = {
|
|
3273
3273
|
id: "aria-hidden-body",
|
|
3274
3274
|
selector: 'body[aria-hidden="true"]',
|
|
3275
3275
|
check: { type: "selector-exists" },
|
|
@@ -3281,7 +3281,7 @@ const Ua = {
|
|
|
3281
3281
|
guidance: "Setting aria-hidden='true' on the body element hides all page content from assistive technologies, making the page completely inaccessible to screen reader users. Remove aria-hidden from the body element. If you need to hide content temporarily (e.g., behind a modal), use aria-hidden on specific sections instead.",
|
|
3282
3282
|
prompt: "Instruct to remove aria-hidden='true' from the body element.",
|
|
3283
3283
|
skipAriaHidden: !1
|
|
3284
|
-
},
|
|
3284
|
+
}, Oa = E(Ba), Va = {
|
|
3285
3285
|
id: "aria-hidden-focus",
|
|
3286
3286
|
wcag: ["4.1.2"],
|
|
3287
3287
|
level: "A",
|
|
@@ -3297,7 +3297,7 @@ const Ua = {
|
|
|
3297
3297
|
for (const i of n)
|
|
3298
3298
|
if (i instanceof HTMLElement) {
|
|
3299
3299
|
const o = i.getAttribute("tabindex");
|
|
3300
|
-
if (o === "-1" || i.disabled || i instanceof HTMLInputElement && i.type === "hidden" || !
|
|
3300
|
+
if (o === "-1" || i.disabled || i instanceof HTMLInputElement && i.type === "hidden" || !Ua(i)) continue;
|
|
3301
3301
|
const r = i.tagName.toLowerCase();
|
|
3302
3302
|
let s;
|
|
3303
3303
|
o !== null ? s = `has tabindex="${o}"` : r === "a" && i.hasAttribute("href") ? s = "is a link with href" : r === "button" ? s = "is a <button>" : r === "input" ? s = `is an <input type="${i.type}">` : r === "select" ? s = "is a <select>" : r === "textarea" ? s = "is a <textarea>" : r === "iframe" ? s = "is an <iframe>" : s = `is a natively focusable <${r}>`;
|
|
@@ -3314,7 +3314,7 @@ const Ua = {
|
|
|
3314
3314
|
}
|
|
3315
3315
|
return a;
|
|
3316
3316
|
}
|
|
3317
|
-
},
|
|
3317
|
+
}, _a = {
|
|
3318
3318
|
id: "aria-command-name",
|
|
3319
3319
|
wcag: ["4.1.2"],
|
|
3320
3320
|
level: "A",
|
|
@@ -3340,7 +3340,7 @@ const Ua = {
|
|
|
3340
3340
|
}
|
|
3341
3341
|
return a;
|
|
3342
3342
|
}
|
|
3343
|
-
},
|
|
3343
|
+
}, Ga = {
|
|
3344
3344
|
id: "aria-input-field-name",
|
|
3345
3345
|
wcag: ["4.1.2"],
|
|
3346
3346
|
level: "A",
|
|
@@ -3361,7 +3361,7 @@ const Ua = {
|
|
|
3361
3361
|
}
|
|
3362
3362
|
return a;
|
|
3363
3363
|
}
|
|
3364
|
-
},
|
|
3364
|
+
}, Ya = {
|
|
3365
3365
|
id: "aria-toggle-field-name",
|
|
3366
3366
|
wcag: ["4.1.2"],
|
|
3367
3367
|
level: "A",
|
|
@@ -3382,7 +3382,7 @@ const Ua = {
|
|
|
3382
3382
|
}
|
|
3383
3383
|
return a;
|
|
3384
3384
|
}
|
|
3385
|
-
},
|
|
3385
|
+
}, Xa = {
|
|
3386
3386
|
id: "aria-meter-name",
|
|
3387
3387
|
wcag: ["4.1.2"],
|
|
3388
3388
|
level: "A",
|
|
@@ -3403,7 +3403,7 @@ const Ua = {
|
|
|
3403
3403
|
}
|
|
3404
3404
|
return a;
|
|
3405
3405
|
}
|
|
3406
|
-
},
|
|
3406
|
+
}, Ka = {
|
|
3407
3407
|
id: "aria-progressbar-name",
|
|
3408
3408
|
wcag: ["4.1.2"],
|
|
3409
3409
|
level: "A",
|
|
@@ -3424,7 +3424,7 @@ const Ua = {
|
|
|
3424
3424
|
}
|
|
3425
3425
|
return a;
|
|
3426
3426
|
}
|
|
3427
|
-
},
|
|
3427
|
+
}, Ja = {
|
|
3428
3428
|
id: "aria-dialog-name",
|
|
3429
3429
|
wcag: ["4.1.2"],
|
|
3430
3430
|
level: "A",
|
|
@@ -3445,7 +3445,7 @@ const Ua = {
|
|
|
3445
3445
|
}
|
|
3446
3446
|
return a;
|
|
3447
3447
|
}
|
|
3448
|
-
},
|
|
3448
|
+
}, Qa = {
|
|
3449
3449
|
id: "aria-tooltip-name",
|
|
3450
3450
|
wcag: ["4.1.2"],
|
|
3451
3451
|
level: "A",
|
|
@@ -3466,7 +3466,7 @@ const Ua = {
|
|
|
3466
3466
|
}
|
|
3467
3467
|
return a;
|
|
3468
3468
|
}
|
|
3469
|
-
},
|
|
3469
|
+
}, Za = {
|
|
3470
3470
|
id: "aria-treeitem-name",
|
|
3471
3471
|
wcag: ["4.1.2"],
|
|
3472
3472
|
level: "A",
|
|
@@ -3487,7 +3487,7 @@ const Ua = {
|
|
|
3487
3487
|
}
|
|
3488
3488
|
return a;
|
|
3489
3489
|
}
|
|
3490
|
-
},
|
|
3490
|
+
}, en = {
|
|
3491
3491
|
id: "aria-prohibited-attr",
|
|
3492
3492
|
wcag: ["4.1.2"],
|
|
3493
3493
|
level: "A",
|
|
@@ -3497,14 +3497,14 @@ const Ua = {
|
|
|
3497
3497
|
run(t) {
|
|
3498
3498
|
return J(t).prohibitedAttr;
|
|
3499
3499
|
}
|
|
3500
|
-
},
|
|
3500
|
+
}, tn = [
|
|
3501
3501
|
"a[href]",
|
|
3502
3502
|
"button:not([disabled])",
|
|
3503
3503
|
'input:not([disabled]):not([type="hidden"])',
|
|
3504
3504
|
"select:not([disabled])",
|
|
3505
3505
|
"textarea:not([disabled])",
|
|
3506
3506
|
'[tabindex]:not([tabindex="-1"])'
|
|
3507
|
-
].join(", "),
|
|
3507
|
+
].join(", "), an = [
|
|
3508
3508
|
"aria-atomic",
|
|
3509
3509
|
"aria-busy",
|
|
3510
3510
|
"aria-controls",
|
|
@@ -3521,15 +3521,15 @@ const Ua = {
|
|
|
3521
3521
|
];
|
|
3522
3522
|
function me(t) {
|
|
3523
3523
|
const a = [];
|
|
3524
|
-
t.matches(
|
|
3525
|
-
for (const e of
|
|
3524
|
+
t.matches(tn) && a.push("element is focusable");
|
|
3525
|
+
for (const e of an)
|
|
3526
3526
|
if (t.hasAttribute(e)) {
|
|
3527
3527
|
a.push(`has ${e}`);
|
|
3528
3528
|
break;
|
|
3529
3529
|
}
|
|
3530
3530
|
return (t.hasAttribute("aria-label") || t.hasAttribute("aria-labelledby")) && a.push("has accessible name"), a;
|
|
3531
3531
|
}
|
|
3532
|
-
const
|
|
3532
|
+
const nn = {
|
|
3533
3533
|
id: "presentation-role-conflict",
|
|
3534
3534
|
wcag: ["4.1.2"],
|
|
3535
3535
|
level: "A",
|
|
@@ -3562,7 +3562,7 @@ const an = {
|
|
|
3562
3562
|
}
|
|
3563
3563
|
return a;
|
|
3564
3564
|
}
|
|
3565
|
-
},
|
|
3565
|
+
}, on = {
|
|
3566
3566
|
id: "summary-name",
|
|
3567
3567
|
wcag: ["4.1.2"],
|
|
3568
3568
|
level: "A",
|
|
@@ -3584,7 +3584,7 @@ const an = {
|
|
|
3584
3584
|
return a;
|
|
3585
3585
|
}
|
|
3586
3586
|
};
|
|
3587
|
-
function
|
|
3587
|
+
function rn(t) {
|
|
3588
3588
|
var i, o;
|
|
3589
3589
|
const a = [], e = t.getAttribute("href");
|
|
3590
3590
|
e && a.push(`href: ${e}`);
|
|
@@ -3601,7 +3601,7 @@ function on(t) {
|
|
|
3601
3601
|
return a.length > 0 ? a.join(`
|
|
3602
3602
|
`) : void 0;
|
|
3603
3603
|
}
|
|
3604
|
-
const
|
|
3604
|
+
const sn = {
|
|
3605
3605
|
id: "link-name",
|
|
3606
3606
|
wcag: ["2.4.4", "4.1.2"],
|
|
3607
3607
|
level: "A",
|
|
@@ -3618,12 +3618,12 @@ const rn = {
|
|
|
3618
3618
|
html: u(e),
|
|
3619
3619
|
impact: "serious",
|
|
3620
3620
|
message: "Link has no discernible text.",
|
|
3621
|
-
context:
|
|
3621
|
+
context: rn(e)
|
|
3622
3622
|
});
|
|
3623
3623
|
}
|
|
3624
3624
|
return a;
|
|
3625
3625
|
}
|
|
3626
|
-
},
|
|
3626
|
+
}, ln = {
|
|
3627
3627
|
id: "skip-link",
|
|
3628
3628
|
wcag: ["2.4.1"],
|
|
3629
3629
|
level: "A",
|
|
@@ -3649,7 +3649,7 @@ const rn = {
|
|
|
3649
3649
|
}
|
|
3650
3650
|
return a;
|
|
3651
3651
|
}
|
|
3652
|
-
},
|
|
3652
|
+
}, cn = /* @__PURE__ */ new Set([
|
|
3653
3653
|
"block",
|
|
3654
3654
|
"flex",
|
|
3655
3655
|
"grid",
|
|
@@ -3657,23 +3657,23 @@ const rn = {
|
|
|
3657
3657
|
"table-cell",
|
|
3658
3658
|
"list-item",
|
|
3659
3659
|
"flow-root"
|
|
3660
|
-
]),
|
|
3660
|
+
]), dn = /* @__PURE__ */ new Set([
|
|
3661
3661
|
"inline",
|
|
3662
3662
|
"inline-block",
|
|
3663
3663
|
"inline-flex",
|
|
3664
3664
|
"inline-grid"
|
|
3665
3665
|
]);
|
|
3666
|
-
function
|
|
3666
|
+
function un(t) {
|
|
3667
3667
|
let a = t.parentElement;
|
|
3668
3668
|
for (; a; ) {
|
|
3669
3669
|
const e = w(a).display;
|
|
3670
|
-
if (
|
|
3671
|
-
return
|
|
3670
|
+
if (cn.has(e))
|
|
3671
|
+
return mn(a) ? a : null;
|
|
3672
3672
|
a = a.parentElement;
|
|
3673
3673
|
}
|
|
3674
3674
|
return null;
|
|
3675
3675
|
}
|
|
3676
|
-
function
|
|
3676
|
+
function mn(t) {
|
|
3677
3677
|
const a = t.ownerDocument.createTreeWalker(
|
|
3678
3678
|
t,
|
|
3679
3679
|
NodeFilter.SHOW_TEXT
|
|
@@ -3693,7 +3693,7 @@ function un(t) {
|
|
|
3693
3693
|
}
|
|
3694
3694
|
return new RegExp("\\p{L}{2,}", "u").test(e);
|
|
3695
3695
|
}
|
|
3696
|
-
function
|
|
3696
|
+
function pn(t, a) {
|
|
3697
3697
|
const e = t.ownerDocument.createTreeWalker(
|
|
3698
3698
|
t,
|
|
3699
3699
|
NodeFilter.SHOW_TEXT
|
|
@@ -3714,7 +3714,7 @@ function mn(t, a) {
|
|
|
3714
3714
|
}
|
|
3715
3715
|
return null;
|
|
3716
3716
|
}
|
|
3717
|
-
function
|
|
3717
|
+
function hn(t, a, e) {
|
|
3718
3718
|
const n = e.textDecorationLine || e.textDecoration || "", i = a.textDecorationLine || a.textDecoration || "";
|
|
3719
3719
|
if ((i.includes("underline") || i.includes("line-through")) && i !== n)
|
|
3720
3720
|
return !0;
|
|
@@ -3746,7 +3746,7 @@ function j(t) {
|
|
|
3746
3746
|
function pe(t, a, e) {
|
|
3747
3747
|
return "#" + [t, a, e].map((n) => n.toString(16).padStart(2, "0")).join("");
|
|
3748
3748
|
}
|
|
3749
|
-
const
|
|
3749
|
+
const bn = {
|
|
3750
3750
|
id: "link-in-text-block",
|
|
3751
3751
|
wcag: ["1.4.1"],
|
|
3752
3752
|
level: "A",
|
|
@@ -3758,12 +3758,12 @@ const hn = {
|
|
|
3758
3758
|
for (const e of t.querySelectorAll("a[href]")) {
|
|
3759
3759
|
if (b(e) || !A(e).trim() || e.closest('nav, header, footer, [role="navigation"], [role="banner"], [role="contentinfo"]')) continue;
|
|
3760
3760
|
const n = w(e), i = n.display || "inline";
|
|
3761
|
-
if (!
|
|
3762
|
-
const o =
|
|
3761
|
+
if (!dn.has(i)) continue;
|
|
3762
|
+
const o = un(e);
|
|
3763
3763
|
if (!o) continue;
|
|
3764
3764
|
const r = w(o);
|
|
3765
|
-
if (
|
|
3766
|
-
const s = D(n.color), l =
|
|
3765
|
+
if (hn(e, n, r)) continue;
|
|
3766
|
+
const s = D(n.color), l = pn(o);
|
|
3767
3767
|
if (!s || !l) continue;
|
|
3768
3768
|
const p = M(...s), c = M(...l), d = we(p, c);
|
|
3769
3769
|
if (d < 1.1 || d >= 3) continue;
|
|
@@ -3779,7 +3779,7 @@ const hn = {
|
|
|
3779
3779
|
}
|
|
3780
3780
|
return a;
|
|
3781
3781
|
}
|
|
3782
|
-
},
|
|
3782
|
+
}, gn = {
|
|
3783
3783
|
id: "html-has-lang",
|
|
3784
3784
|
wcag: ["3.1.1"],
|
|
3785
3785
|
level: "A",
|
|
@@ -3813,17 +3813,17 @@ const hn = {
|
|
|
3813
3813
|
}
|
|
3814
3814
|
return [];
|
|
3815
3815
|
}
|
|
3816
|
-
},
|
|
3816
|
+
}, fn = new Set(
|
|
3817
3817
|
"aa ab ae af ak am an ar as av ay az ba be bg bh bi bm bn bo br bs ca ce ch co cr cs cu cv cy da de dv dz ee el en eo es et eu fa ff fi fj fo fr fy ga gd gl gn gu gv ha he hi ho hr ht hu hy hz ia id ie ig ii ik io is it iu ja jv ka kg ki kj kk kl km kn ko kr ks ku kv kw ky la lb lg li ln lo lt lu lv mg mh mi mk ml mn mr ms mt my na nb nd ne ng nl nn no nr nv ny oc oj om or os pa pi pl ps pt qu rm rn ro ru rw sa sc sd se sg si sk sl sm sn so sq sr ss st su sv sw ta te tg th ti tk tl tn to tr ts tt tw ty ug uk ur uz ve vi vo wa wo xh yi yo za zh zu".split(" ")
|
|
3818
|
-
),
|
|
3818
|
+
), vn = new Set(
|
|
3819
3819
|
"aar abk afr aka amh ara arg asm ava ave aym aze bak bam bel ben bih bis bod bos bre bul cat ces cha che chu chv cor cos cre cym dan deu div dzo ell eng epo est eus ewe fao fas fij fin fra fry ful gla gle glg glv grn guj hat hau hbs heb her hin hmo hrv hun hye ibo iii iku ile ina ind ipk isl ita jav jpn kal kan kas kat kau kaz khm kik kin kir kom kon kor kua kur lao lat lav lim lin lit ltz lub lug mah mal mar mkd mlg mlt mon mri msa mya nau nav nbl nde ndo nep nld nno nob nor nya oci oji ori orm oss pan pli pol por pus que roh ron run rus sag san sin slk slv sme smo sna snd som sot spa sqi srd srp ssw sun swa swe tah tam tat tel tgk tgl tha tir ton tsn tso tuk tur twi uig ukr urd uzb ven vie vol wln wol xho yid yor zha zho zul".split(" ")
|
|
3820
|
-
),
|
|
3820
|
+
), yn = /^[a-z]{2,8}(-[a-z0-9]{1,8})*$/i;
|
|
3821
3821
|
function ke(t) {
|
|
3822
|
-
if (!
|
|
3822
|
+
if (!yn.test(t)) return !1;
|
|
3823
3823
|
const a = t.split("-")[0].toLowerCase();
|
|
3824
|
-
return a.length === 2 ?
|
|
3824
|
+
return a.length === 2 ? fn.has(a) : a.length === 3 ? !vn.has(a) : !1;
|
|
3825
3825
|
}
|
|
3826
|
-
const
|
|
3826
|
+
const wn = {
|
|
3827
3827
|
id: "html-lang-valid",
|
|
3828
3828
|
wcag: ["3.1.1"],
|
|
3829
3829
|
level: "A",
|
|
@@ -3874,7 +3874,7 @@ function he(t) {
|
|
|
3874
3874
|
}
|
|
3875
3875
|
return !1;
|
|
3876
3876
|
}
|
|
3877
|
-
const
|
|
3877
|
+
const An = {
|
|
3878
3878
|
id: "valid-lang",
|
|
3879
3879
|
wcag: ["3.1.2"],
|
|
3880
3880
|
level: "AA",
|
|
@@ -3906,7 +3906,7 @@ const wn = {
|
|
|
3906
3906
|
}
|
|
3907
3907
|
return a;
|
|
3908
3908
|
}
|
|
3909
|
-
},
|
|
3909
|
+
}, xn = {
|
|
3910
3910
|
id: "html-xml-lang-mismatch",
|
|
3911
3911
|
wcag: ["3.1.1"],
|
|
3912
3912
|
level: "A",
|
|
@@ -3929,7 +3929,7 @@ const wn = {
|
|
|
3929
3929
|
}
|
|
3930
3930
|
return [];
|
|
3931
3931
|
}
|
|
3932
|
-
},
|
|
3932
|
+
}, kn = {
|
|
3933
3933
|
id: "td-headers-attr",
|
|
3934
3934
|
wcag: ["1.3.1"],
|
|
3935
3935
|
level: "A",
|
|
@@ -3968,7 +3968,7 @@ const wn = {
|
|
|
3968
3968
|
}
|
|
3969
3969
|
return a;
|
|
3970
3970
|
}
|
|
3971
|
-
},
|
|
3971
|
+
}, Sn = {
|
|
3972
3972
|
id: "th-has-data-cells",
|
|
3973
3973
|
wcag: ["1.3.1"],
|
|
3974
3974
|
level: "A",
|
|
@@ -3990,7 +3990,7 @@ const wn = {
|
|
|
3990
3990
|
}
|
|
3991
3991
|
return a;
|
|
3992
3992
|
}
|
|
3993
|
-
},
|
|
3993
|
+
}, In = {
|
|
3994
3994
|
id: "td-has-header",
|
|
3995
3995
|
wcag: ["1.3.1"],
|
|
3996
3996
|
level: "A",
|
|
@@ -4043,7 +4043,7 @@ const wn = {
|
|
|
4043
4043
|
}
|
|
4044
4044
|
return a;
|
|
4045
4045
|
}
|
|
4046
|
-
},
|
|
4046
|
+
}, En = {
|
|
4047
4047
|
id: "scope-attr-valid",
|
|
4048
4048
|
wcag: ["1.3.1"],
|
|
4049
4049
|
level: "A",
|
|
@@ -4066,7 +4066,7 @@ const wn = {
|
|
|
4066
4066
|
}
|
|
4067
4067
|
return a;
|
|
4068
4068
|
}
|
|
4069
|
-
},
|
|
4069
|
+
}, qn = {
|
|
4070
4070
|
id: "empty-table-header",
|
|
4071
4071
|
wcag: [],
|
|
4072
4072
|
level: "A",
|
|
@@ -4089,7 +4089,7 @@ const wn = {
|
|
|
4089
4089
|
}
|
|
4090
4090
|
return a;
|
|
4091
4091
|
}
|
|
4092
|
-
}, W = ["aria-labelledby", "aria-describedby", "aria-controls", "aria-owns", "aria-flowto"],
|
|
4092
|
+
}, W = ["aria-labelledby", "aria-describedby", "aria-controls", "aria-owns", "aria-flowto"], Ln = {
|
|
4093
4093
|
id: "duplicate-id-aria",
|
|
4094
4094
|
wcag: ["4.1.2"],
|
|
4095
4095
|
level: "A",
|
|
@@ -4137,7 +4137,7 @@ Referenced by: ${p}` : ""}`
|
|
|
4137
4137
|
}
|
|
4138
4138
|
return a;
|
|
4139
4139
|
}
|
|
4140
|
-
},
|
|
4140
|
+
}, Tn = {
|
|
4141
4141
|
id: "video-caption",
|
|
4142
4142
|
wcag: ["1.2.2"],
|
|
4143
4143
|
level: "A",
|
|
@@ -4158,7 +4158,7 @@ Referenced by: ${p}` : ""}`
|
|
|
4158
4158
|
}
|
|
4159
4159
|
return a;
|
|
4160
4160
|
}
|
|
4161
|
-
},
|
|
4161
|
+
}, Rn = {
|
|
4162
4162
|
id: "audio-caption",
|
|
4163
4163
|
wcag: ["1.2.1"],
|
|
4164
4164
|
level: "A",
|
|
@@ -4180,7 +4180,7 @@ Referenced by: ${p}` : ""}`
|
|
|
4180
4180
|
}
|
|
4181
4181
|
return a;
|
|
4182
4182
|
}
|
|
4183
|
-
},
|
|
4183
|
+
}, Cn = /* @__PURE__ */ new Set([
|
|
4184
4184
|
"SCRIPT",
|
|
4185
4185
|
"STYLE",
|
|
4186
4186
|
"NOSCRIPT",
|
|
@@ -4199,10 +4199,10 @@ Referenced by: ${p}` : ""}`
|
|
|
4199
4199
|
function be([t, a, e]) {
|
|
4200
4200
|
return "#" + [t, a, e].map((n) => n.toString(16).padStart(2, "0")).join("");
|
|
4201
4201
|
}
|
|
4202
|
-
function
|
|
4202
|
+
function Nn(t) {
|
|
4203
4203
|
return t instanceof HTMLInputElement || t instanceof HTMLTextAreaElement || t instanceof HTMLSelectElement || t instanceof HTMLButtonElement ? t.disabled : !!(t.closest("fieldset[disabled]") || t.getAttribute("aria-disabled") === "true");
|
|
4204
4204
|
}
|
|
4205
|
-
function
|
|
4205
|
+
function Mn(t, a) {
|
|
4206
4206
|
if (t.tagName !== "LABEL") return !1;
|
|
4207
4207
|
const e = t, n = e.htmlFor;
|
|
4208
4208
|
if (n) {
|
|
@@ -4214,7 +4214,7 @@ function Nn(t, a) {
|
|
|
4214
4214
|
const o = e.id;
|
|
4215
4215
|
return !!(o && a.querySelector(`[aria-labelledby~="${o}"][aria-disabled="true"]`));
|
|
4216
4216
|
}
|
|
4217
|
-
function
|
|
4217
|
+
function Dn(t) {
|
|
4218
4218
|
const a = t.clip;
|
|
4219
4219
|
if (a && a.startsWith("rect(")) {
|
|
4220
4220
|
const n = a.match(/[\d.]+/g);
|
|
@@ -4228,17 +4228,17 @@ function Mn(t) {
|
|
|
4228
4228
|
}
|
|
4229
4229
|
return !1;
|
|
4230
4230
|
}
|
|
4231
|
-
function
|
|
4231
|
+
function $n(t) {
|
|
4232
4232
|
if (b(t)) return !0;
|
|
4233
4233
|
let a = t;
|
|
4234
4234
|
for (; a; ) {
|
|
4235
4235
|
const e = w(a);
|
|
4236
|
-
if (e.display === "none" || e.visibility === "hidden" ||
|
|
4236
|
+
if (e.display === "none" || e.visibility === "hidden" || Dn(e)) return !0;
|
|
4237
4237
|
a = a.parentElement;
|
|
4238
4238
|
}
|
|
4239
4239
|
return !1;
|
|
4240
4240
|
}
|
|
4241
|
-
function
|
|
4241
|
+
function Hn(t) {
|
|
4242
4242
|
let a = 1, e = t;
|
|
4243
4243
|
for (; e; ) {
|
|
4244
4244
|
const n = w(e), i = parseFloat(n.opacity);
|
|
@@ -4246,7 +4246,7 @@ function $n(t) {
|
|
|
4246
4246
|
}
|
|
4247
4247
|
return a;
|
|
4248
4248
|
}
|
|
4249
|
-
const
|
|
4249
|
+
const Pn = {
|
|
4250
4250
|
grayscale: 0,
|
|
4251
4251
|
blur: 0,
|
|
4252
4252
|
"hue-rotate": 0,
|
|
@@ -4257,7 +4257,7 @@ const Hn = {
|
|
|
4257
4257
|
saturate: 1,
|
|
4258
4258
|
opacity: 1
|
|
4259
4259
|
};
|
|
4260
|
-
function
|
|
4260
|
+
function zn(t) {
|
|
4261
4261
|
const a = parseFloat(t);
|
|
4262
4262
|
return isNaN(a) ? NaN : t.trim().endsWith("%") ? a / 100 : a;
|
|
4263
4263
|
}
|
|
@@ -4266,12 +4266,12 @@ function fe(t) {
|
|
|
4266
4266
|
let a, e = !1;
|
|
4267
4267
|
for (ge.lastIndex = 0; a = ge.exec(t); ) {
|
|
4268
4268
|
e = !0;
|
|
4269
|
-
const n =
|
|
4270
|
-
if (n === void 0 ||
|
|
4269
|
+
const n = Pn[a[1]];
|
|
4270
|
+
if (n === void 0 || zn(a[2]) !== n) return !1;
|
|
4271
4271
|
}
|
|
4272
4272
|
return e;
|
|
4273
4273
|
}
|
|
4274
|
-
function
|
|
4274
|
+
function Fn(t) {
|
|
4275
4275
|
let a = t;
|
|
4276
4276
|
for (; a; ) {
|
|
4277
4277
|
const e = w(a), n = e.filter;
|
|
@@ -4284,10 +4284,10 @@ function zn(t) {
|
|
|
4284
4284
|
}
|
|
4285
4285
|
return !1;
|
|
4286
4286
|
}
|
|
4287
|
-
function
|
|
4287
|
+
function jn(t) {
|
|
4288
4288
|
return t.closest("select") !== null;
|
|
4289
4289
|
}
|
|
4290
|
-
const
|
|
4290
|
+
const Wn = {
|
|
4291
4291
|
id: "color-contrast",
|
|
4292
4292
|
wcag: ["1.4.3"],
|
|
4293
4293
|
level: "AA",
|
|
@@ -4302,29 +4302,29 @@ const jn = {
|
|
|
4302
4302
|
for (; o = n.nextNode(); ) {
|
|
4303
4303
|
if (!o.textContent || !o.textContent.trim()) continue;
|
|
4304
4304
|
const r = o.parentElement;
|
|
4305
|
-
if (!r || i.has(r) || (i.add(r),
|
|
4305
|
+
if (!r || i.has(r) || (i.add(r), Cn.has(r.tagName))) continue;
|
|
4306
4306
|
const s = r.tagName;
|
|
4307
|
-
if (s === "BODY" || s === "HTML" ||
|
|
4307
|
+
if (s === "BODY" || s === "HTML" || jn(r) || Nn(r) || Mn(r, t) || $n(r)) continue;
|
|
4308
4308
|
const l = w(r);
|
|
4309
|
-
if (parseFloat(l.opacity) === 0 ||
|
|
4309
|
+
if (parseFloat(l.opacity) === 0 || Hn(r) < 0.1) continue;
|
|
4310
4310
|
const p = l.textShadow;
|
|
4311
|
-
if (p && p !== "none" && p !== "initial" ||
|
|
4311
|
+
if (p && p !== "none" && p !== "initial" || Fn(r)) continue;
|
|
4312
4312
|
const c = D(l.color);
|
|
4313
4313
|
if (!c) continue;
|
|
4314
4314
|
const d = l.color.match(/rgba\(.+?,\s*([\d.]+)\s*\)/) || l.color.match(/rgba?\(.+?\/\s*([\d.]+%?)\s*\)/);
|
|
4315
|
-
if (d && (d[1].endsWith("%") ? parseFloat(d[1]) / 100 : parseFloat(d[1])) === 0 ||
|
|
4316
|
-
const h =
|
|
4315
|
+
if (d && (d[1].endsWith("%") ? parseFloat(d[1]) / 100 : parseFloat(d[1])) === 0 || Xe(r)) continue;
|
|
4316
|
+
const h = _e(r);
|
|
4317
4317
|
if (!h) continue;
|
|
4318
|
-
const g = M(c[0], c[1], c[2]), f = M(h[0], h[1], h[2]), y = we(g, f), x =
|
|
4318
|
+
const g = M(c[0], c[1], c[2]), f = M(h[0], h[1], h[2]), y = we(g, f), x = Qe(r) ? 3 : 4.5;
|
|
4319
4319
|
if (y < x) {
|
|
4320
|
-
const k = Math.round(y * 100) / 100, P = be(c),
|
|
4320
|
+
const k = Math.round(y * 100) / 100, P = be(c), Le = be(h);
|
|
4321
4321
|
a.push({
|
|
4322
4322
|
ruleId: "color-contrast",
|
|
4323
4323
|
selector: m(r),
|
|
4324
4324
|
html: u(r),
|
|
4325
4325
|
impact: "serious",
|
|
4326
4326
|
message: `Insufficient color contrast ratio of ${k}:1 (required ${x}:1).`,
|
|
4327
|
-
context: `foreground: ${P} rgb(${c.join(", ")}), background: ${
|
|
4327
|
+
context: `foreground: ${P} rgb(${c.join(", ")}), background: ${Le} rgb(${h.join(", ")}), ratio: ${k}:1, required: ${x}:1`
|
|
4328
4328
|
});
|
|
4329
4329
|
}
|
|
4330
4330
|
}
|
|
@@ -4332,44 +4332,43 @@ const jn = {
|
|
|
4332
4332
|
}
|
|
4333
4333
|
}, Se = [
|
|
4334
4334
|
// Document Structure
|
|
4335
|
-
ua,
|
|
4336
4335
|
ma,
|
|
4337
4336
|
pa,
|
|
4338
4337
|
ha,
|
|
4339
4338
|
ba,
|
|
4340
|
-
|
|
4339
|
+
ga,
|
|
4341
4340
|
va,
|
|
4342
|
-
|
|
4343
|
-
|
|
4341
|
+
ya,
|
|
4342
|
+
Aa,
|
|
4343
|
+
ka,
|
|
4344
4344
|
// Images
|
|
4345
|
-
|
|
4346
|
-
ot,
|
|
4345
|
+
it,
|
|
4347
4346
|
rt,
|
|
4348
4347
|
st,
|
|
4349
|
-
|
|
4348
|
+
lt,
|
|
4350
4349
|
dt,
|
|
4351
|
-
|
|
4350
|
+
ut,
|
|
4352
4351
|
pt,
|
|
4353
|
-
|
|
4352
|
+
ht,
|
|
4353
|
+
vt,
|
|
4354
4354
|
// Forms
|
|
4355
|
-
xt,
|
|
4356
4355
|
kt,
|
|
4357
4356
|
St,
|
|
4358
4357
|
It,
|
|
4359
|
-
|
|
4358
|
+
Et,
|
|
4360
4359
|
Mt,
|
|
4361
4360
|
Dt,
|
|
4361
|
+
$t,
|
|
4362
4362
|
// Keyboard
|
|
4363
|
-
|
|
4364
|
-
|
|
4365
|
-
Vt,
|
|
4363
|
+
Pt,
|
|
4364
|
+
Ft,
|
|
4366
4365
|
_t,
|
|
4367
4366
|
Gt,
|
|
4368
|
-
// Structure
|
|
4369
4367
|
Yt,
|
|
4370
|
-
|
|
4371
|
-
ka,
|
|
4368
|
+
// Structure
|
|
4372
4369
|
Xt,
|
|
4370
|
+
fa,
|
|
4371
|
+
Sa,
|
|
4373
4372
|
Kt,
|
|
4374
4373
|
Jt,
|
|
4375
4374
|
Qt,
|
|
@@ -4379,20 +4378,20 @@ const jn = {
|
|
|
4379
4378
|
aa,
|
|
4380
4379
|
na,
|
|
4381
4380
|
ia,
|
|
4382
|
-
|
|
4383
|
-
da,
|
|
4381
|
+
oa,
|
|
4384
4382
|
sa,
|
|
4385
|
-
|
|
4383
|
+
ua,
|
|
4384
|
+
la,
|
|
4385
|
+
da,
|
|
4386
4386
|
// ARIA
|
|
4387
|
-
Sa,
|
|
4388
4387
|
Ia,
|
|
4389
4388
|
Ea,
|
|
4390
|
-
|
|
4391
|
-
|
|
4392
|
-
|
|
4393
|
-
|
|
4389
|
+
qa,
|
|
4390
|
+
Ta,
|
|
4391
|
+
Da,
|
|
4392
|
+
Pa,
|
|
4394
4393
|
ja,
|
|
4395
|
-
|
|
4394
|
+
Wa,
|
|
4396
4395
|
Oa,
|
|
4397
4396
|
Va,
|
|
4398
4397
|
_a,
|
|
@@ -4403,43 +4402,65 @@ const jn = {
|
|
|
4403
4402
|
Ja,
|
|
4404
4403
|
Qa,
|
|
4405
4404
|
Za,
|
|
4406
|
-
|
|
4407
|
-
Ra,
|
|
4405
|
+
en,
|
|
4408
4406
|
nn,
|
|
4407
|
+
Ca,
|
|
4408
|
+
on,
|
|
4409
4409
|
// Links
|
|
4410
|
-
rn,
|
|
4411
4410
|
sn,
|
|
4412
|
-
|
|
4413
|
-
// Language
|
|
4411
|
+
ln,
|
|
4414
4412
|
bn,
|
|
4415
|
-
|
|
4413
|
+
// Language
|
|
4414
|
+
gn,
|
|
4416
4415
|
wn,
|
|
4417
4416
|
An,
|
|
4418
|
-
// Tables
|
|
4419
4417
|
xn,
|
|
4418
|
+
// Tables
|
|
4420
4419
|
kn,
|
|
4421
4420
|
Sn,
|
|
4422
4421
|
In,
|
|
4423
4422
|
En,
|
|
4424
|
-
// Parsing
|
|
4425
4423
|
qn,
|
|
4426
|
-
//
|
|
4424
|
+
// Parsing
|
|
4427
4425
|
Ln,
|
|
4426
|
+
// Media
|
|
4428
4427
|
Tn,
|
|
4428
|
+
Rn,
|
|
4429
4429
|
// Color
|
|
4430
|
-
|
|
4431
|
-
]
|
|
4432
|
-
|
|
4433
|
-
|
|
4434
|
-
|
|
4430
|
+
Wn
|
|
4431
|
+
], Un = /* @__PURE__ */ new Set([
|
|
4432
|
+
"aria-allowed-role",
|
|
4433
|
+
"aria-progressbar-name",
|
|
4434
|
+
"aria-prohibited-attr",
|
|
4435
|
+
"aria-required-children",
|
|
4436
|
+
"aria-required-parent",
|
|
4437
|
+
"aria-roles",
|
|
4438
|
+
"aria-tooltip-name",
|
|
4439
|
+
"aria-valid-attr",
|
|
4440
|
+
"autocomplete-valid",
|
|
4441
|
+
"definition-list",
|
|
4442
|
+
"dlitem",
|
|
4443
|
+
"duplicate-id-aria",
|
|
4444
|
+
"link-in-text-block",
|
|
4445
|
+
"list",
|
|
4446
|
+
"listitem",
|
|
4447
|
+
"scrollable-region-focusable",
|
|
4448
|
+
"svg-img-alt",
|
|
4449
|
+
"td-has-header",
|
|
4450
|
+
"th-has-data-cells",
|
|
4451
|
+
"valid-lang"
|
|
4452
|
+
]);
|
|
4453
|
+
let Q = [], Ie = /* @__PURE__ */ new Set(), Ee = /* @__PURE__ */ new Set(), I, C;
|
|
4454
|
+
function Gn(t) {
|
|
4455
|
+
t.additionalRules && (Q = t.additionalRules), t.disabledRules && (Ie = new Set(t.disabledRules)), t.enabledRules && (Ee = new Set(t.enabledRules)), "locale" in t && (I = t.locale || void 0), C = void 0;
|
|
4435
4456
|
}
|
|
4436
4457
|
function Z() {
|
|
4437
4458
|
if (C) return C;
|
|
4438
|
-
const a = Se.filter((e) =>
|
|
4439
|
-
return I ? (C =
|
|
4459
|
+
const a = Se.filter((e) => Ie.has(e.id) ? !1 : Ee.has(e.id) ? !0 : !Un.has(e.id)).concat(Q);
|
|
4460
|
+
return I ? (C = Ze(a, I), C) : a;
|
|
4440
4461
|
}
|
|
4441
|
-
function
|
|
4442
|
-
|
|
4462
|
+
function Yn(t) {
|
|
4463
|
+
qe();
|
|
4443
4464
|
const a = Z(), e = I, n = [];
|
|
4444
4465
|
let i = 0;
|
|
4445
4466
|
return {
|
|
@@ -4459,12 +4480,12 @@ function _n(t) {
|
|
|
4459
4480
|
}
|
|
4460
4481
|
};
|
|
4461
4482
|
}
|
|
4462
|
-
function
|
|
4463
|
-
|
|
4483
|
+
function qe() {
|
|
4484
|
+
De(), Te(), Re(), Ve(), Oe(), $e();
|
|
4464
4485
|
}
|
|
4465
|
-
function
|
|
4486
|
+
function Xn(t) {
|
|
4466
4487
|
var n;
|
|
4467
|
-
|
|
4488
|
+
qe();
|
|
4468
4489
|
const a = Z(), e = [];
|
|
4469
4490
|
for (const i of a)
|
|
4470
4491
|
try {
|
|
@@ -4478,14 +4499,14 @@ function Gn(t) {
|
|
|
4478
4499
|
ruleCount: a.length
|
|
4479
4500
|
};
|
|
4480
4501
|
}
|
|
4481
|
-
const
|
|
4482
|
-
function
|
|
4502
|
+
const Bn = new Map(Se.map((t) => [t.id, t]));
|
|
4503
|
+
function Kn(t) {
|
|
4483
4504
|
if (I)
|
|
4484
4505
|
return Z().find((n) => n.id === t);
|
|
4485
|
-
const a =
|
|
4506
|
+
const a = Bn.get(t);
|
|
4486
4507
|
return a || Q.find((e) => e.id === t);
|
|
4487
4508
|
}
|
|
4488
|
-
const
|
|
4509
|
+
const Jn = {
|
|
4489
4510
|
"document-title": { description: "Documents must have a <title> element to provide users with an overview of content.", guidance: "Screen reader users rely on page titles to identify and navigate between tabs/windows. Add a descriptive <title> element in <head> that summarizes the page purpose. Keep titles unique across the site, placing specific content before the site name (e.g., 'Contact Us - Acme Corp').", messages: { "Document <title> element is empty.": "Document <title> element is empty.", "Document is missing a <title> element.": "Document is missing a <title> element." } },
|
|
4490
4511
|
bypass: { description: "Page must have a mechanism to bypass repeated blocks of content.", guidance: 'Keyboard users must be able to skip repetitive content like navigation. Provide a skip link at the top of the page that links to the main content (e.g., <a href="#main">Skip to main content</a>), or use a <main> landmark. Screen readers can jump directly to landmarks, so a properly marked-up <main> element satisfies this requirement.', messages: { "Page has no mechanism to bypass repeated content. Add a <main> landmark or skip link.": "Page has no mechanism to bypass repeated content. Add a <main> landmark or skip link." } },
|
|
4491
4512
|
"page-has-heading-one": { description: "Page should contain a level-one heading.", guidance: "A level-one heading (<h1> or role='heading' with aria-level='1') helps users understand the page topic and provides a landmark for screen reader navigation. Each page should have exactly one h1 that describes the main content, typically matching or similar to the page title.", messages: { "Page does not contain a level-one heading.": "Page does not contain a level-one heading." } },
|
|
@@ -4571,7 +4592,7 @@ const Xn = {
|
|
|
4571
4592
|
"video-caption": { description: "Video elements must have captions via <track kind='captions'>.", guidance: "Captions provide text alternatives for audio content in videos, benefiting deaf users and those who cannot hear audio. Add a <track> element with kind='captions' pointing to a WebVTT caption file. Captions should include both dialogue and important sound effects.", messages: { "Video element has no captions track.": "Video element has no captions track." } },
|
|
4572
4593
|
"audio-caption": { description: "Audio elements should have a text alternative or transcript.", guidance: "Audio-only content like podcasts or recordings needs a text alternative for deaf users. Provide a transcript either on the same page or linked nearby. The transcript should include all spoken content and descriptions of relevant sounds.", messages: { "Audio element has no transcript or text alternative. Add a transcript or track element.": "Audio element has no transcript or text alternative. Add a transcript or track element." } },
|
|
4573
4594
|
"color-contrast": { description: "Text elements must have sufficient color contrast against the background.", guidance: "WCAG SC 1.4.3 requires a contrast ratio of at least 4.5:1 for normal text and 3:1 for large text (>=24px or >=18.66px bold). Increase the contrast by darkening the text or lightening the background, or vice versa.", messages: { "Insufficient color contrast ratio of {0}:1 (required {1}:1).": "Insufficient color contrast ratio of {0}:1 (required {1}:1)." } }
|
|
4574
|
-
},
|
|
4595
|
+
}, Qn = {
|
|
4575
4596
|
"document-title": { description: "Los documentos deben tener un elemento <title> para proporcionar a los usuarios una vista general del contenido.", guidance: "Los usuarios de lectores de pantalla dependen de los títulos de página para identificar y navegar entre pestañas/ventanas. Agregue un elemento <title> descriptivo en <head> que resuma el propósito de la página. Mantenga los títulos únicos en todo el sitio, colocando el contenido específico antes del nombre del sitio (por ejemplo, 'Contáctenos - Acme Corp').", messages: { "Document <title> element is empty.": "El elemento <title> del documento está vacío.", "Document is missing a <title> element.": "Al documento le falta un elemento <title>." } },
|
|
4576
4597
|
bypass: { description: "La página debe tener un mecanismo para omitir bloques de contenido repetidos.", guidance: 'Los usuarios de teclado deben poder omitir contenido repetitivo como la navegación. Proporcione un enlace de salto en la parte superior de la página que enlace al contenido principal (por ejemplo, <a href="#main">Saltar al contenido principal</a>), o use un landmark <main>. Los lectores de pantalla pueden saltar directamente a los landmarks, por lo que un elemento <main> correctamente marcado satisface este requisito.', messages: { "Page has no mechanism to bypass repeated content. Add a <main> landmark or skip link.": "La página no tiene un mecanismo para omitir contenido repetido. Agregue un landmark <main> o un enlace de salto." } },
|
|
4577
4598
|
"page-has-heading-one": { description: "La página debe contener un encabezado de nivel uno.", guidance: "Un encabezado de nivel uno (<h1> o role='heading' con aria-level='1') ayuda a los usuarios a comprender el tema de la página y proporciona un punto de referencia para la navegación con lector de pantalla. Cada página debe tener exactamente un h1 que describa el contenido principal, típicamente coincidiendo o similar al título de la página.", messages: { "Page does not contain a level-one heading.": "La página no contiene un encabezado de nivel uno." } },
|
|
@@ -4659,30 +4680,31 @@ const Xn = {
|
|
|
4659
4680
|
"color-contrast": { description: "Los elementos de texto deben tener suficiente contraste de color contra el fondo.", guidance: "WCAG SC 1.4.3 requiere una relación de contraste de al menos 4.5:1 para texto normal y 3:1 para texto grande (>=24px o >=18.66px en negrita). Aumente el contraste oscureciendo el texto o aclarando el fondo, o viceversa.", messages: { "Insufficient color contrast ratio of {0}:1 (required {1}:1).": "Relación de contraste de color insuficiente de {0}:1 (requerido {1}:1)." } }
|
|
4660
4681
|
};
|
|
4661
4682
|
export {
|
|
4662
|
-
|
|
4663
|
-
|
|
4664
|
-
|
|
4665
|
-
|
|
4666
|
-
|
|
4683
|
+
qe as clearAllCaches,
|
|
4684
|
+
Oe as clearAriaAttrAuditCache,
|
|
4685
|
+
De as clearAriaHiddenCache,
|
|
4686
|
+
Ve as clearColorCaches,
|
|
4687
|
+
Te as clearComputedRoleCache,
|
|
4667
4688
|
E as compileDeclarativeRule,
|
|
4668
|
-
|
|
4669
|
-
|
|
4689
|
+
Gn as configureRules,
|
|
4690
|
+
Yn as createChunkedAudit,
|
|
4691
|
+
Un as defaultDisabledRuleIds,
|
|
4670
4692
|
v as getAccessibleName,
|
|
4671
4693
|
A as getAccessibleTextContent,
|
|
4672
4694
|
Z as getActiveRules,
|
|
4673
4695
|
N as getComputedRole,
|
|
4674
4696
|
u as getHtmlSnippet,
|
|
4675
4697
|
ve as getImplicitRole,
|
|
4676
|
-
|
|
4698
|
+
Kn as getRuleById,
|
|
4677
4699
|
m as getSelector,
|
|
4678
4700
|
b as isAriaHidden,
|
|
4679
|
-
|
|
4680
|
-
|
|
4681
|
-
|
|
4682
|
-
|
|
4683
|
-
|
|
4701
|
+
Me as isValidRole,
|
|
4702
|
+
Jn as localeEn,
|
|
4703
|
+
Qn as localeEs,
|
|
4704
|
+
On as querySelectorShadowAware,
|
|
4705
|
+
Vn as registerLocale,
|
|
4684
4706
|
Se as rules,
|
|
4685
|
-
|
|
4707
|
+
Xn as runAudit,
|
|
4686
4708
|
Ae as translateViolations,
|
|
4687
|
-
|
|
4709
|
+
_n as validateDeclarativeRule
|
|
4688
4710
|
};
|