@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.js CHANGED
@@ -1,5 +1,5 @@
1
1
  let U = /* @__PURE__ */ new WeakMap();
2
- function Le() {
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 Te() {
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 = Re(t);
134
+ const e = Ce(t);
135
135
  return B.set(t, e), e;
136
136
  }
137
- function Re(t) {
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 Ce = /* @__PURE__ */ new Set([
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 Ne(t) {
268
+ function Me(t) {
269
269
  const a = t.trim().toLowerCase().replace(/[\u201C\u201D\u2018\u2019\u00AB\u00BB]/g, "");
270
- return Ce.has(a);
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 Me() {
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 De() {
336
+ function $e() {
337
337
  V = /* @__PURE__ */ new WeakMap();
338
338
  }
339
- function $e(t) {
339
+ function He(t) {
340
340
  return t.replace(/\\/g, "\\\\").replace(/"/g, '\\"');
341
341
  }
342
- const He = [
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 Pe(t) {
352
+ function ze(t) {
353
353
  const a = t.tagName.toLowerCase();
354
- for (const n of He) {
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}="${$e(i)}"]`;
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(Pe(i)), n.length >= 2) {
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 Un(t) {
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 ze = /* @__PURE__ */ new Set([
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"]), Fe = /* @__PURE__ */ new Set([
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
- ]), je = /* @__PURE__ */ new Set([
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
- ]), We = {
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
- }, Ue = {
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 Be() {
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-") && !ze.has(c.name)) {
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 (Fe.has(c.name)) {
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 (je.has(c.name)) {
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 && We[d]) {
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 = Ue[c];
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 Oe() {
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 Ve(t) {
820
+ function _e(t) {
821
821
  const a = G.get(t);
822
822
  if (a !== void 0) return a;
823
- const e = _e(t);
823
+ const e = Ge(t);
824
824
  return G.set(t, e), e;
825
825
  }
826
- function _e(t) {
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 Ge = /* @__PURE__ */ new Set(["IMG", "PICTURE", "VIDEO", "SVG"]);
846
- function Ye(t) {
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 = Xe(t);
849
+ const e = Ke(t);
850
850
  return Y.set(t, e), e;
851
851
  }
852
- function Xe(t) {
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)) && Ge.has(i.tagName)) {
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 Ke(t) {
869
+ function Je(t) {
870
870
  const a = parseFloat(t);
871
871
  return t.endsWith("pt") ? a * (4 / 3) : a;
872
872
  }
873
- function Je(t) {
874
- const a = w(t), e = Ke(a.fontSize), n = parseInt(a.fontWeight) || (a.fontWeight === "bold" ? 700 : 400);
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 Bn(t, a) {
878
+ function Vn(t, a) {
879
879
  $.set(t, a), X.delete(t);
880
880
  }
881
- function Qe(t, a) {
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 Ze(t) {
893
+ function et(t) {
894
894
  return t.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
895
895
  }
896
- function et(t) {
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 += Ze(a[n]) : e += "(.+?)";
900
+ n % 2 === 0 ? e += et(a[n]) : e += "(.+?)";
901
901
  return e += "$", new RegExp(e);
902
902
  }
903
- function tt(t, a) {
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: et(r),
914
+ regex: tt(r),
915
915
  translated: s
916
916
  });
917
917
  return e.set(a, o), o;
918
918
  }
919
- function at(t, a, e) {
920
- const n = tt(e, t);
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 = at(e.ruleId, e.message, a);
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 nt = {
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 it(t) {
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 ot = {
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 (!it(n)) {
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
- }, rt = {
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
- }, st = {
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
- }, lt = ["image", "picture", "photo", "graphic", "icon", "img"], ct = {
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 = lt.filter((o) => n.split(/\s+/).includes(o));
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
- }, dt = {
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 ut(t) {
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 mt = {
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" || ut(n)) continue;
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
- }, pt = {
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 On(t) {
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 = ht(e);
1257
+ const i = bt(e);
1258
1258
  return i || null;
1259
1259
  }
1260
- function ht(t) {
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 && bt(c, s, l) && n.push({
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 bt(t, a, e) {
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 gt = {
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
- }, ft = E(gt), vt = [
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(", "), yt = /* @__PURE__ */ new Set([
1475
+ ].join(", "), wt = /* @__PURE__ */ new Set([
1476
1476
  "checkbox",
1477
1477
  "menuitemcheckbox",
1478
1478
  "menuitemradio",
1479
1479
  "radio",
1480
1480
  "switch"
1481
- ]), wt = /* @__PURE__ */ new Set([
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 At(t) {
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 && yt.has(a) || (t instanceof HTMLInputElement || t instanceof HTMLTextAreaElement) && !(a && wt.has(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 xt = {
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, ${vt}`);
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 (!At(o)) {
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
- }, kt = {
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
- }, St = {
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
- }, It = {
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
- }, Et = /* @__PURE__ */ new Set([
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
- ]), qt = /* @__PURE__ */ new Set([
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
- ]), Lt = /* @__PURE__ */ new Set(["home", "work", "mobile", "fax", "pager"]), Tt = /* @__PURE__ */ new Set(["shipping", "billing"]), Rt = /* @__PURE__ */ new Set(["webauthn"]);
1701
- function Ct(t) {
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 && Tt.has(a[e]) && e++;
1705
+ a[e].startsWith("section-") && e++, e < a.length && Rt.has(a[e]) && e++;
1706
1706
  let n = !1;
1707
- if (e < a.length && Lt.has(a[e]) && (n = !0, e++), e >= a.length) return !1;
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 !Et.has(i) || n && !qt.has(i) ? !1 : (e++, e < a.length && Rt.has(a[e]) && e++, e === a.length);
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 Nt = {
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 && (Ct(n) || a.push({
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 Mt = {
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
- }, Dt = {
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
- }, $t = {
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
- }, Ht = E($t), Pt = /* @__PURE__ */ new Set([
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
- ]), zt = {
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 (!Pt.has(n)) continue;
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
- }, Ft = /* @__PURE__ */ new Set([
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
- ]), jt = /* @__PURE__ */ new Set([
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
- ]), Wt = {
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 Ut(t, a) {
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 = Wt[e]) == null ? void 0 : r.has(n)) ?? !1;
1945
+ return !e || !n ? !1 : ((r = Ut[e]) == null ? void 0 : r.has(n)) ?? !1;
1946
1946
  }
1947
- function Bt(t) {
1947
+ function Ot(t) {
1948
1948
  var i;
1949
1949
  const a = t.tagName.toLowerCase();
1950
- if (Ft.has(a))
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 && jt.has(e)) return !0;
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 Ot(t) {
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 Vt = {
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) && Bt(r)) {
1976
+ if (!b(r) && Ot(r)) {
1977
1977
  if (o.length > 0) {
1978
1978
  const s = o[o.length - 1];
1979
- Ut(s, r) || a.push({
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
- Ot(r) && o.push(r);
1987
+ Vt(r) && o.push(r);
1988
1988
  }
1989
1989
  r = i.nextNode();
1990
1990
  }
1991
1991
  return a;
1992
1992
  }
1993
- }, _t = {
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
- }, Gt = {
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
- }, Yt = {
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"]', Xt = {
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
- }, Kt = {
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
- }, Jt = {
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
- }, Qt = {
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
- }, Zt = {
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
- }, ea = {
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
- }, ta = {
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
- }, aa = {
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
- }, na = {
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
- }, ia = {
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
- }, oa = {
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
- }, ra = E(oa), sa = {
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
- }, la = {
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
- }, ca = E(la), da = {
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
- }, ua = {
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
- }, ma = {
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
- }, pa = {
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 ha = {
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
- }, ba = {
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
- }, ga = {
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
- }, fa = {
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
- }, va = {
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
- }, ya = {
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
- }, wa = E(ya), Aa = {
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
- }, xa = E(Aa), ka = {
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
- }, Sa = {
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) => Ne(s)) && o.length > 0 && a.push({
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
- }, Ia = {
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
- }, Ea = {
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
- }, qa = {
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
- }, La = {
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 = qa[n];
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 Ta(t) {
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 Ra = {
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: Ta(e)
2808
+ context: Ra(e)
2809
2809
  });
2810
2810
  }
2811
2811
  return a;
2812
2812
  }
2813
- }, Ca = {
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
- }, Na = /* @__PURE__ */ new Set([
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
- ]), Ma = {
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 = Ca[n];
2922
+ const i = Na[n];
2923
2923
  if (i)
2924
2924
  for (const o of e.attributes) {
2925
- if (!o.name.startsWith("aria-") || Na.has(o.name) || i.has(o.name)) continue;
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
- }, Da = /* @__PURE__ */ new Set([
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 $a(t) {
3061
+ function Ha(t) {
3062
3062
  var e;
3063
3063
  const a = t.tagName.toLowerCase();
3064
- if (Da.has(a))
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 Ha = {
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 = $a(n);
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
- }, Pa = /* @__PURE__ */ new Set([
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 za(t, a) {
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 Fa = {
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 = za(n, o);
3197
- if (r === "pass" || r === "empty" && Pa.has(i)) continue;
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
- }, ja = {
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 Wa(t) {
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 Ua = {
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
- }, Ba = E(Ua), Oa = {
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" || !Wa(i)) continue;
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
- }, Va = {
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
- }, _a = {
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
- }, Ga = {
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
- }, Ya = {
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
- }, Xa = {
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
- }, Ka = {
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
- }, Ja = {
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
- }, Qa = {
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
- }, Za = {
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
- }, en = [
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(", "), tn = [
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(en) && a.push("element is focusable");
3525
- for (const e of tn)
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 an = {
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
- }, nn = {
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 on(t) {
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 rn = {
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: on(e)
3621
+ context: rn(e)
3622
3622
  });
3623
3623
  }
3624
3624
  return a;
3625
3625
  }
3626
- }, sn = {
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
- }, ln = /* @__PURE__ */ new Set([
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
- ]), cn = /* @__PURE__ */ new Set([
3660
+ ]), dn = /* @__PURE__ */ new Set([
3661
3661
  "inline",
3662
3662
  "inline-block",
3663
3663
  "inline-flex",
3664
3664
  "inline-grid"
3665
3665
  ]);
3666
- function dn(t) {
3666
+ function un(t) {
3667
3667
  let a = t.parentElement;
3668
3668
  for (; a; ) {
3669
3669
  const e = w(a).display;
3670
- if (ln.has(e))
3671
- return un(a) ? a : null;
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 un(t) {
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 mn(t, a) {
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 pn(t, a, e) {
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 hn = {
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 (!cn.has(i)) continue;
3762
- const o = dn(e);
3761
+ if (!dn.has(i)) continue;
3762
+ const o = un(e);
3763
3763
  if (!o) continue;
3764
3764
  const r = w(o);
3765
- if (pn(e, n, r)) continue;
3766
- const s = D(n.color), l = mn(o);
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
- }, bn = {
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
- }, gn = new Set(
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
- ), fn = new Set(
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
- ), vn = /^[a-z]{2,8}(-[a-z0-9]{1,8})*$/i;
3820
+ ), yn = /^[a-z]{2,8}(-[a-z0-9]{1,8})*$/i;
3821
3821
  function ke(t) {
3822
- if (!vn.test(t)) return !1;
3822
+ if (!yn.test(t)) return !1;
3823
3823
  const a = t.split("-")[0].toLowerCase();
3824
- return a.length === 2 ? gn.has(a) : a.length === 3 ? !fn.has(a) : !1;
3824
+ return a.length === 2 ? fn.has(a) : a.length === 3 ? !vn.has(a) : !1;
3825
3825
  }
3826
- const yn = {
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 wn = {
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
- }, An = {
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
- }, xn = {
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
- }, kn = {
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
- }, Sn = {
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
- }, In = {
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
- }, En = {
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"], qn = {
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
- }, Ln = {
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
- }, Tn = {
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
- }, Rn = /* @__PURE__ */ new Set([
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 Cn(t) {
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 Nn(t, a) {
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 Mn(t) {
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 Dn(t) {
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" || Mn(e)) return !0;
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 $n(t) {
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 Hn = {
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 Pn(t) {
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 = Hn[a[1]];
4270
- if (n === void 0 || Pn(a[2]) !== n) return !1;
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 zn(t) {
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 Fn(t) {
4287
+ function jn(t) {
4288
4288
  return t.closest("select") !== null;
4289
4289
  }
4290
- const jn = {
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), Rn.has(r.tagName))) continue;
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" || Fn(r) || Cn(r) || Nn(r, t) || Dn(r)) continue;
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 || $n(r) < 0.1) continue;
4309
+ if (parseFloat(l.opacity) === 0 || Hn(r) < 0.1) continue;
4310
4310
  const p = l.textShadow;
4311
- if (p && p !== "none" && p !== "initial" || zn(r)) continue;
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 || Ye(r)) continue;
4316
- const h = Ve(r);
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 = Je(r) ? 3 : 4.5;
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), qe = be(h);
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: ${qe} rgb(${h.join(", ")}), ratio: ${k}:1, required: ${x}:1`
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
- fa,
4339
+ ga,
4341
4340
  va,
4342
- wa,
4343
- xa,
4341
+ ya,
4342
+ Aa,
4343
+ ka,
4344
4344
  // Images
4345
- nt,
4346
- ot,
4345
+ it,
4347
4346
  rt,
4348
4347
  st,
4349
- ct,
4348
+ lt,
4350
4349
  dt,
4351
- mt,
4350
+ ut,
4352
4351
  pt,
4353
- ft,
4352
+ ht,
4353
+ vt,
4354
4354
  // Forms
4355
- xt,
4356
4355
  kt,
4357
4356
  St,
4358
4357
  It,
4359
- Nt,
4358
+ Et,
4360
4359
  Mt,
4361
4360
  Dt,
4361
+ $t,
4362
4362
  // Keyboard
4363
- Ht,
4364
- zt,
4365
- Vt,
4363
+ Pt,
4364
+ Ft,
4366
4365
  _t,
4367
4366
  Gt,
4368
- // Structure
4369
4367
  Yt,
4370
- ga,
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
- ra,
4383
- da,
4381
+ oa,
4384
4382
  sa,
4385
- ca,
4383
+ ua,
4384
+ la,
4385
+ da,
4386
4386
  // ARIA
4387
- Sa,
4388
4387
  Ia,
4389
4388
  Ea,
4390
- La,
4391
- Ma,
4392
- Ha,
4393
- Fa,
4389
+ qa,
4390
+ Ta,
4391
+ Da,
4392
+ Pa,
4394
4393
  ja,
4395
- Ba,
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
- an,
4407
- Ra,
4405
+ en,
4408
4406
  nn,
4407
+ Ca,
4408
+ on,
4409
4409
  // Links
4410
- rn,
4411
4410
  sn,
4412
- hn,
4413
- // Language
4411
+ ln,
4414
4412
  bn,
4415
- yn,
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
- // Media
4424
+ // Parsing
4427
4425
  Ln,
4426
+ // Media
4428
4427
  Tn,
4428
+ Rn,
4429
4429
  // Color
4430
- jn
4431
- ];
4432
- let Q = [], Ie = /* @__PURE__ */ new Set(), I, C;
4433
- function Vn(t) {
4434
- t.additionalRules && (Q = t.additionalRules), t.disabledRules && (Ie = new Set(t.disabledRules)), "locale" in t && (I = t.locale || void 0), C = void 0;
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) => !Ie.has(e.id)).concat(Q);
4439
- return I ? (C = Qe(a, I), C) : a;
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 _n(t) {
4442
- Ee();
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 Ee() {
4463
- Me(), Le(), Te(), Oe(), Be(), De();
4483
+ function qe() {
4484
+ De(), Te(), Re(), Ve(), Oe(), $e();
4464
4485
  }
4465
- function Gn(t) {
4486
+ function Xn(t) {
4466
4487
  var n;
4467
- Ee();
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 Wn = new Map(Se.map((t) => [t.id, t]));
4482
- function Yn(t) {
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 = Wn.get(t);
4506
+ const a = Bn.get(t);
4486
4507
  return a || Q.find((e) => e.id === t);
4487
4508
  }
4488
- const Xn = {
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
- }, Kn = {
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
- Ee as clearAllCaches,
4663
- Be as clearAriaAttrAuditCache,
4664
- Me as clearAriaHiddenCache,
4665
- Oe as clearColorCaches,
4666
- Le as clearComputedRoleCache,
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
- Vn as configureRules,
4669
- _n as createChunkedAudit,
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
- Yn as getRuleById,
4698
+ Kn as getRuleById,
4677
4699
  m as getSelector,
4678
4700
  b as isAriaHidden,
4679
- Ne as isValidRole,
4680
- Xn as localeEn,
4681
- Kn as localeEs,
4682
- Un as querySelectorShadowAware,
4683
- Bn as registerLocale,
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
- Gn as runAudit,
4707
+ Xn as runAudit,
4686
4708
  Ae as translateViolations,
4687
- On as validateDeclarativeRule
4709
+ _n as validateDeclarativeRule
4688
4710
  };