@accesslint/core 0.6.0 → 0.6.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.iife.js +5 -5
- package/dist/index.js +255 -286
- package/dist/rules/aria/aria-hidden-rules.d.ts.map +1 -1
- package/dist/rules/forms/label.d.ts.map +1 -1
- package/dist/rules/index.d.ts.map +1 -1
- package/dist/rules/links/link-rules.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -366,7 +366,7 @@ function at(t) {
|
|
|
366
366
|
}
|
|
367
367
|
return a;
|
|
368
368
|
}
|
|
369
|
-
function
|
|
369
|
+
function B(t) {
|
|
370
370
|
if (t.id) return `#${CSS.escape(t.id)}`;
|
|
371
371
|
const a = t.getRootNode(), e = a instanceof ShadowRoot ? null : a.documentElement, n = [];
|
|
372
372
|
let i = t;
|
|
@@ -396,13 +396,13 @@ function p(t) {
|
|
|
396
396
|
for (; n; ) {
|
|
397
397
|
const o = n.getRootNode();
|
|
398
398
|
if (o instanceof ShadowRoot)
|
|
399
|
-
e.unshift({ selector:
|
|
399
|
+
e.unshift({ selector: B(n), delimiter: " >>> " }), n = o.host;
|
|
400
400
|
else {
|
|
401
401
|
const r = (s = o.defaultView) == null ? void 0 : s.frameElement;
|
|
402
402
|
if (r)
|
|
403
|
-
e.unshift({ selector:
|
|
403
|
+
e.unshift({ selector: B(n), delimiter: " >>>iframe> " }), n = r;
|
|
404
404
|
else {
|
|
405
|
-
e.unshift({ selector:
|
|
405
|
+
e.unshift({ selector: B(n), delimiter: "" });
|
|
406
406
|
break;
|
|
407
407
|
}
|
|
408
408
|
}
|
|
@@ -410,7 +410,7 @@ function p(t) {
|
|
|
410
410
|
const i = e.map((o, r) => (r === 0 ? "" : o.delimiter) + o.selector).join("");
|
|
411
411
|
return K.set(t, i), i;
|
|
412
412
|
}
|
|
413
|
-
function
|
|
413
|
+
function Ii(t) {
|
|
414
414
|
const a = [], e = [];
|
|
415
415
|
let n = t;
|
|
416
416
|
for (; n; ) {
|
|
@@ -763,7 +763,7 @@ let J = /* @__PURE__ */ new WeakMap(), Q = /* @__PURE__ */ new WeakMap(), Z = /*
|
|
|
763
763
|
function ct() {
|
|
764
764
|
J = /* @__PURE__ */ new WeakMap(), Q = /* @__PURE__ */ new WeakMap(), Z = /* @__PURE__ */ new WeakMap();
|
|
765
765
|
}
|
|
766
|
-
function
|
|
766
|
+
function x(t) {
|
|
767
767
|
let a = J.get(t);
|
|
768
768
|
return a || (a = getComputedStyle(t), J.set(t, a), a);
|
|
769
769
|
}
|
|
@@ -827,7 +827,7 @@ function Te(t) {
|
|
|
827
827
|
}
|
|
828
828
|
return 1;
|
|
829
829
|
}
|
|
830
|
-
function
|
|
830
|
+
function L(t, a, e) {
|
|
831
831
|
return [
|
|
832
832
|
Math.round(t[0] * e + a[0] * (1 - e)),
|
|
833
833
|
Math.round(t[1] * e + a[1] * (1 - e)),
|
|
@@ -843,7 +843,7 @@ function be(t) {
|
|
|
843
843
|
function dt(t) {
|
|
844
844
|
let a = t;
|
|
845
845
|
for (; a; ) {
|
|
846
|
-
const e =
|
|
846
|
+
const e = x(a), n = e.backgroundImage;
|
|
847
847
|
if (n && n !== "none" && n !== "initial") {
|
|
848
848
|
const o = e.backgroundColor;
|
|
849
849
|
return o && o !== "transparent" && o !== "rgba(0, 0, 0, 0)" && o !== "rgba(0 0 0 / 0)" ? C(o) : null;
|
|
@@ -900,12 +900,12 @@ function ht(t) {
|
|
|
900
900
|
function bt(t) {
|
|
901
901
|
let a = t, e = !1;
|
|
902
902
|
for (; a; ) {
|
|
903
|
-
const n =
|
|
903
|
+
const n = x(a).position;
|
|
904
904
|
if ((n === "absolute" || n === "fixed") && (e = !0), a !== t && n !== "static") {
|
|
905
905
|
for (const i of a.children)
|
|
906
906
|
if (!(i === t || i.contains(t)) && pt.has(i.tagName)) {
|
|
907
907
|
if (e) return !0;
|
|
908
|
-
const s =
|
|
908
|
+
const s = x(i).position;
|
|
909
909
|
if (s === "absolute" || s === "fixed") return !0;
|
|
910
910
|
}
|
|
911
911
|
if (e) break;
|
|
@@ -919,15 +919,15 @@ function gt(t) {
|
|
|
919
919
|
return t.endsWith("pt") ? a * (4 / 3) : a;
|
|
920
920
|
}
|
|
921
921
|
function ge(t) {
|
|
922
|
-
const a =
|
|
922
|
+
const a = x(t), e = gt(a.fontSize), n = parseInt(a.fontWeight) || (a.fontWeight === "bold" ? 700 : 400);
|
|
923
923
|
return e >= 23.5 || e >= 18.5 && n >= 700;
|
|
924
924
|
}
|
|
925
|
-
const
|
|
926
|
-
function
|
|
927
|
-
|
|
925
|
+
const j = /* @__PURE__ */ new Map();
|
|
926
|
+
function Ei(t, a) {
|
|
927
|
+
j.set(t, a), ee.delete(t);
|
|
928
928
|
}
|
|
929
929
|
function ft(t, a) {
|
|
930
|
-
const e =
|
|
930
|
+
const e = j.get(a);
|
|
931
931
|
return e ? t.map((n) => {
|
|
932
932
|
const i = e[n.id];
|
|
933
933
|
return i ? {
|
|
@@ -951,7 +951,7 @@ function yt(t) {
|
|
|
951
951
|
function wt(t, a) {
|
|
952
952
|
let e = ee.get(t);
|
|
953
953
|
if (e || (e = /* @__PURE__ */ new Map(), ee.set(t, e)), e.has(a)) return e.get(a);
|
|
954
|
-
const n =
|
|
954
|
+
const n = j.get(t);
|
|
955
955
|
if (!n) return;
|
|
956
956
|
const i = n[a];
|
|
957
957
|
if (!(i != null && i.messages))
|
|
@@ -978,12 +978,12 @@ function At(t, a, e) {
|
|
|
978
978
|
return a;
|
|
979
979
|
}
|
|
980
980
|
function Me(t, a) {
|
|
981
|
-
return
|
|
981
|
+
return j.has(a) ? t.map((e) => {
|
|
982
982
|
const n = At(e.ruleId, e.message, a);
|
|
983
983
|
return n === e.message ? e : { ...e, message: n };
|
|
984
984
|
}) : t;
|
|
985
985
|
}
|
|
986
|
-
function
|
|
986
|
+
function V(t) {
|
|
987
987
|
var s, o;
|
|
988
988
|
const a = [], e = t.closest("a");
|
|
989
989
|
if (e) {
|
|
@@ -1036,7 +1036,7 @@ const xt = {
|
|
|
1036
1036
|
html: u(e),
|
|
1037
1037
|
impact: "critical",
|
|
1038
1038
|
message: 'Image has whitespace-only alt text. Use alt="" for decorative images or provide descriptive text.',
|
|
1039
|
-
context:
|
|
1039
|
+
context: V(e)
|
|
1040
1040
|
});
|
|
1041
1041
|
continue;
|
|
1042
1042
|
}
|
|
@@ -1046,7 +1046,7 @@ const xt = {
|
|
|
1046
1046
|
html: u(e),
|
|
1047
1047
|
impact: "critical",
|
|
1048
1048
|
message: "Image element missing alt attribute.",
|
|
1049
|
-
context:
|
|
1049
|
+
context: V(e)
|
|
1050
1050
|
});
|
|
1051
1051
|
}
|
|
1052
1052
|
for (const e of t.querySelectorAll('[role="img"]:not(img):not(svg)'))
|
|
@@ -1056,7 +1056,7 @@ const xt = {
|
|
|
1056
1056
|
html: u(e),
|
|
1057
1057
|
impact: "critical",
|
|
1058
1058
|
message: 'Element with role="img" has no accessible name. Add aria-label or aria-labelledby.',
|
|
1059
|
-
context:
|
|
1059
|
+
context: V(e)
|
|
1060
1060
|
});
|
|
1061
1061
|
return a;
|
|
1062
1062
|
}
|
|
@@ -1155,7 +1155,7 @@ const St = {
|
|
|
1155
1155
|
}
|
|
1156
1156
|
return a;
|
|
1157
1157
|
}
|
|
1158
|
-
},
|
|
1158
|
+
}, qt = ["image", "picture", "photo", "graphic", "icon", "img"], Lt = {
|
|
1159
1159
|
id: "accesslint-015",
|
|
1160
1160
|
wcag: [],
|
|
1161
1161
|
level: "A",
|
|
@@ -1168,7 +1168,7 @@ const St = {
|
|
|
1168
1168
|
for (const e of t.querySelectorAll("img[alt]")) {
|
|
1169
1169
|
const n = e.getAttribute("alt").toLowerCase();
|
|
1170
1170
|
if (!n) continue;
|
|
1171
|
-
const i =
|
|
1171
|
+
const i = qt.filter((s) => n.split(/\s+/).includes(s));
|
|
1172
1172
|
i.length > 0 && a.push({
|
|
1173
1173
|
ruleId: "accesslint-015",
|
|
1174
1174
|
selector: p(e),
|
|
@@ -1276,7 +1276,7 @@ const Tt = {
|
|
|
1276
1276
|
return a;
|
|
1277
1277
|
}
|
|
1278
1278
|
};
|
|
1279
|
-
function
|
|
1279
|
+
function qi(t) {
|
|
1280
1280
|
if (typeof t != "object" || t === null)
|
|
1281
1281
|
return "Rule spec must be an object";
|
|
1282
1282
|
const a = t;
|
|
@@ -1335,7 +1335,7 @@ function I(t, a, e) {
|
|
|
1335
1335
|
}
|
|
1336
1336
|
return n;
|
|
1337
1337
|
}
|
|
1338
|
-
function
|
|
1338
|
+
function q(t) {
|
|
1339
1339
|
const a = t.skipAriaHidden !== !1;
|
|
1340
1340
|
return {
|
|
1341
1341
|
id: t.id,
|
|
@@ -1513,7 +1513,7 @@ const Dt = {
|
|
|
1513
1513
|
level: "A",
|
|
1514
1514
|
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.",
|
|
1515
1515
|
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."
|
|
1516
|
-
}, Ft =
|
|
1516
|
+
}, Ft = q(Dt), Pt = [
|
|
1517
1517
|
'[role="checkbox"]',
|
|
1518
1518
|
'[role="combobox"]',
|
|
1519
1519
|
'[role="listbox"]',
|
|
@@ -1576,7 +1576,7 @@ function jt(t) {
|
|
|
1576
1576
|
}
|
|
1577
1577
|
return "";
|
|
1578
1578
|
}
|
|
1579
|
-
const
|
|
1579
|
+
const Ut = {
|
|
1580
1580
|
id: "accesslint-020",
|
|
1581
1581
|
actRuleIds: ["e086e5"],
|
|
1582
1582
|
wcag: ["4.1.2"],
|
|
@@ -1588,7 +1588,7 @@ const Wt = {
|
|
|
1588
1588
|
var i;
|
|
1589
1589
|
const a = [], n = t.querySelectorAll(`input:not([type="hidden"]):not([type="submit"]):not([type="button"]):not([type="reset"]):not([type="image"]), textarea, select, ${Pt}`);
|
|
1590
1590
|
for (const s of n) {
|
|
1591
|
-
if (b(s) || T(s)
|
|
1591
|
+
if (b(s) || T(s)) continue;
|
|
1592
1592
|
const o = (i = s.getAttribute("role")) == null ? void 0 : i.trim().toLowerCase();
|
|
1593
1593
|
if (o === "presentation" || o === "none") continue;
|
|
1594
1594
|
if (!jt(s)) {
|
|
@@ -1611,7 +1611,7 @@ const Wt = {
|
|
|
1611
1611
|
}
|
|
1612
1612
|
return a;
|
|
1613
1613
|
}
|
|
1614
|
-
},
|
|
1614
|
+
}, Wt = {
|
|
1615
1615
|
id: "accesslint-021",
|
|
1616
1616
|
wcag: [],
|
|
1617
1617
|
level: "A",
|
|
@@ -1902,7 +1902,7 @@ const Qt = {
|
|
|
1902
1902
|
tags: ["best-practice"],
|
|
1903
1903
|
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.",
|
|
1904
1904
|
prompt: "Change the positive tabindex value to tabindex='0' and rely on DOM order for tab sequence instead."
|
|
1905
|
-
}, ta =
|
|
1905
|
+
}, ta = q(ea), aa = /* @__PURE__ */ new Set([
|
|
1906
1906
|
"div",
|
|
1907
1907
|
"span",
|
|
1908
1908
|
"p",
|
|
@@ -2063,13 +2063,13 @@ const da = {
|
|
|
2063
2063
|
if (s === "body" || s === "html") continue;
|
|
2064
2064
|
const o = i.getAttribute("role");
|
|
2065
2065
|
if (o === "presentation" || o === "none") continue;
|
|
2066
|
-
const r =
|
|
2066
|
+
const r = x(i), l = r.overflowX, m = r.overflowY;
|
|
2067
2067
|
if (!(l === "scroll" || l === "auto" || m === "scroll" || m === "auto")) continue;
|
|
2068
2068
|
if (i.scrollHeight > 0 || i.clientHeight > 0) {
|
|
2069
2069
|
const f = i.scrollHeight - i.clientHeight, v = i.scrollWidth - i.clientWidth;
|
|
2070
2070
|
if (f <= 0 && v <= 0 || f < 14 && v < 14 || i.clientWidth < 64 && i.clientHeight < 64) continue;
|
|
2071
|
-
const
|
|
2072
|
-
if (
|
|
2071
|
+
const A = ((e = i.textContent) == null ? void 0 : e.trim().length) ?? 0, w = i.querySelector("img, svg, video, canvas, picture") !== null;
|
|
2072
|
+
if (A === 0 && !w) continue;
|
|
2073
2073
|
} else {
|
|
2074
2074
|
const f = r.height !== "" || r.maxHeight !== "", v = ((n = i.textContent) == null ? void 0 : n.trim().length) ?? 0;
|
|
2075
2075
|
if (!f || v <= 50) continue;
|
|
@@ -2174,7 +2174,7 @@ const da = {
|
|
|
2174
2174
|
}
|
|
2175
2175
|
return a;
|
|
2176
2176
|
}
|
|
2177
|
-
},
|
|
2177
|
+
}, U = 'article, aside, main, nav, section, [role="article"], [role="complementary"], [role="main"], [role="navigation"], [role="region"]', we = '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"]', ga = {
|
|
2178
2178
|
id: "accesslint-036",
|
|
2179
2179
|
wcag: [],
|
|
2180
2180
|
level: "A",
|
|
@@ -2207,7 +2207,7 @@ const da = {
|
|
|
2207
2207
|
guidance: "The banner landmark (typically <header>) identifies site-oriented content like logos and search. Only one top-level banner is allowed per page. If you need multiple headers, nest them inside sectioning elements (article, section, aside) where they become scoped headers rather than page-level banners.",
|
|
2208
2208
|
prompt: "Explain whether to remove this duplicate banner or nest it inside a sectioning element.",
|
|
2209
2209
|
run(t) {
|
|
2210
|
-
const a = [], e = t.querySelectorAll('header, [role="banner"]'), n = Array.from(e).filter((i) => !i.closest(
|
|
2210
|
+
const a = [], e = t.querySelectorAll('header, [role="banner"]'), n = Array.from(e).filter((i) => !i.closest(U));
|
|
2211
2211
|
return n.length > 1 && n.slice(1).forEach(
|
|
2212
2212
|
(i) => a.push({
|
|
2213
2213
|
ruleId: "accesslint-037",
|
|
@@ -2227,7 +2227,7 @@ const da = {
|
|
|
2227
2227
|
guidance: "The contentinfo landmark (typically <footer>) contains information about the page like copyright and contact info. Only one top-level contentinfo is allowed per page. Nest additional footers inside sectioning elements to scope them.",
|
|
2228
2228
|
prompt: "Explain whether to remove this duplicate footer or nest it inside a sectioning element.",
|
|
2229
2229
|
run(t) {
|
|
2230
|
-
const a = [], e = t.querySelectorAll('footer, [role="contentinfo"]'), n = Array.from(e).filter((i) => !i.closest(
|
|
2230
|
+
const a = [], e = t.querySelectorAll('footer, [role="contentinfo"]'), n = Array.from(e).filter((i) => !i.closest(U));
|
|
2231
2231
|
return n.length > 1 && n.slice(1).forEach(
|
|
2232
2232
|
(i) => a.push({
|
|
2233
2233
|
ruleId: "accesslint-038",
|
|
@@ -2269,7 +2269,7 @@ const da = {
|
|
|
2269
2269
|
run(t) {
|
|
2270
2270
|
const a = [], e = t.querySelectorAll('[role="banner"]');
|
|
2271
2271
|
for (const n of e)
|
|
2272
|
-
n.closest(
|
|
2272
|
+
n.closest(U) && a.push({
|
|
2273
2273
|
ruleId: "accesslint-040",
|
|
2274
2274
|
selector: p(n),
|
|
2275
2275
|
html: u(n),
|
|
@@ -2289,7 +2289,7 @@ const da = {
|
|
|
2289
2289
|
run(t) {
|
|
2290
2290
|
const a = [], e = t.querySelectorAll('[role="contentinfo"]');
|
|
2291
2291
|
for (const n of e)
|
|
2292
|
-
n.closest(
|
|
2292
|
+
n.closest(U) && a.push({
|
|
2293
2293
|
ruleId: "accesslint-041",
|
|
2294
2294
|
selector: p(n),
|
|
2295
2295
|
html: u(n),
|
|
@@ -2414,7 +2414,7 @@ const da = {
|
|
|
2414
2414
|
level: "A",
|
|
2415
2415
|
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.",
|
|
2416
2416
|
prompt: "Explain how to restructure this element within the list properly."
|
|
2417
|
-
},
|
|
2417
|
+
}, qa = q(Ea), La = {
|
|
2418
2418
|
id: "accesslint-048",
|
|
2419
2419
|
wcag: ["1.3.1"],
|
|
2420
2420
|
level: "A",
|
|
@@ -2444,7 +2444,7 @@ const da = {
|
|
|
2444
2444
|
level: "A",
|
|
2445
2445
|
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.",
|
|
2446
2446
|
prompt: "Explain whether to move this element outside the <dl> or convert it to dt/dd."
|
|
2447
|
-
}, Ca =
|
|
2447
|
+
}, Ca = q(Ra), Ta = {
|
|
2448
2448
|
id: "accesslint-047",
|
|
2449
2449
|
wcag: ["1.3.1"],
|
|
2450
2450
|
level: "A",
|
|
@@ -2821,7 +2821,7 @@ function De(t, a, e, n) {
|
|
|
2821
2821
|
}
|
|
2822
2822
|
for (const r of s.childNodes)
|
|
2823
2823
|
if (r.nodeType === 3 && ((o = r.textContent) != null && o.trim())) {
|
|
2824
|
-
const l = parseFloat(
|
|
2824
|
+
const l = parseFloat(x(s).fontSize);
|
|
2825
2825
|
if (l > 0 && e / l < n) return !0;
|
|
2826
2826
|
break;
|
|
2827
2827
|
}
|
|
@@ -2831,7 +2831,7 @@ function De(t, a, e, n) {
|
|
|
2831
2831
|
}
|
|
2832
2832
|
return i(t);
|
|
2833
2833
|
}
|
|
2834
|
-
function
|
|
2834
|
+
function Ua(t) {
|
|
2835
2835
|
var a;
|
|
2836
2836
|
for (const e of t.childNodes)
|
|
2837
2837
|
if (e.nodeType === 3 && ((a = e.textContent) != null && a.trim()))
|
|
@@ -2853,7 +2853,7 @@ function Pe(t) {
|
|
|
2853
2853
|
return !1;
|
|
2854
2854
|
}
|
|
2855
2855
|
function oe(t, a) {
|
|
2856
|
-
if (
|
|
2856
|
+
if (Ua(t)) return !0;
|
|
2857
2857
|
for (const e of t.children) {
|
|
2858
2858
|
const n = e.getAttribute("style") || "";
|
|
2859
2859
|
if (!new RegExp(
|
|
@@ -2884,7 +2884,7 @@ function He(t, a, e, n) {
|
|
|
2884
2884
|
}
|
|
2885
2885
|
return i;
|
|
2886
2886
|
}
|
|
2887
|
-
const
|
|
2887
|
+
const Wa = {
|
|
2888
2888
|
id: "accesslint-050",
|
|
2889
2889
|
actRuleIds: ["24afc2"],
|
|
2890
2890
|
wcag: ["1.4.12"],
|
|
@@ -2898,7 +2898,7 @@ const Ua = {
|
|
|
2898
2898
|
function Oa(t) {
|
|
2899
2899
|
let a = t, e = !1;
|
|
2900
2900
|
for (; a; ) {
|
|
2901
|
-
const n =
|
|
2901
|
+
const n = x(a);
|
|
2902
2902
|
parseFloat(n.width) > 500 && (e = !0), (n.whiteSpace === "nowrap" || n.whiteSpace === "pre") && (e = !0);
|
|
2903
2903
|
const s = n.overflowX, o = n.overflowY;
|
|
2904
2904
|
if ((s === "scroll" || s === "auto") && o !== "scroll" && o !== "auto")
|
|
@@ -2919,7 +2919,7 @@ const Ba = {
|
|
|
2919
2919
|
for (const e of t.querySelectorAll("[style]")) {
|
|
2920
2920
|
if (b(e) || !Fe(e) || Pe(e) || !oe(e, "line-height") || Oa(e)) continue;
|
|
2921
2921
|
if (e instanceof HTMLElement && e.scrollHeight > 0) {
|
|
2922
|
-
const s = parseFloat(
|
|
2922
|
+
const s = parseFloat(x(e).lineHeight);
|
|
2923
2923
|
if (s > 0 && e.scrollHeight <= s * 1.5) continue;
|
|
2924
2924
|
}
|
|
2925
2925
|
const n = $e(e, "line-height");
|
|
@@ -2963,7 +2963,7 @@ function ze(t, a) {
|
|
|
2963
2963
|
return NaN;
|
|
2964
2964
|
}
|
|
2965
2965
|
}
|
|
2966
|
-
function
|
|
2966
|
+
function z(t) {
|
|
2967
2967
|
return isNaN(t) ? !1 : (t = (t % 360 + 360) % 360, t >= 85 && t <= 95 || t >= 265 && t <= 275);
|
|
2968
2968
|
}
|
|
2969
2969
|
function _a(t) {
|
|
@@ -2972,21 +2972,21 @@ function _a(t) {
|
|
|
2972
2972
|
);
|
|
2973
2973
|
if (a) {
|
|
2974
2974
|
const i = ze(parseFloat(a[1]), a[2]);
|
|
2975
|
-
if (
|
|
2975
|
+
if (z(i)) return !0;
|
|
2976
2976
|
}
|
|
2977
2977
|
const e = t.match(
|
|
2978
2978
|
/matrix\(\s*(-?[\d.e]+)\s*,\s*(-?[\d.e]+)\s*,\s*(-?[\d.e]+)\s*,\s*(-?[\d.e]+)/i
|
|
2979
2979
|
);
|
|
2980
2980
|
if (e) {
|
|
2981
2981
|
const i = parseFloat(e[1]), s = parseFloat(e[2]), o = Math.atan2(s, i) * (180 / Math.PI);
|
|
2982
|
-
if (
|
|
2982
|
+
if (z(o)) return !0;
|
|
2983
2983
|
}
|
|
2984
2984
|
const n = t.match(
|
|
2985
2985
|
/matrix3d\(\s*(-?[\d.e]+)\s*,\s*(-?[\d.e]+)\s*,\s*(-?[\d.e]+)\s*,\s*(-?[\d.e]+)\s*,\s*(-?[\d.e]+)\s*,\s*(-?[\d.e]+)/i
|
|
2986
2986
|
);
|
|
2987
2987
|
if (n) {
|
|
2988
2988
|
const i = parseFloat(n[1]), s = parseFloat(n[2]), o = Math.atan2(s, i) * (180 / Math.PI);
|
|
2989
|
-
if (
|
|
2989
|
+
if (z(o)) return !0;
|
|
2990
2990
|
}
|
|
2991
2991
|
return !1;
|
|
2992
2992
|
}
|
|
@@ -2994,7 +2994,7 @@ function Ga(t) {
|
|
|
2994
2994
|
const a = t.match(/(-?[\d.]+)(deg|rad|turn|grad)/i);
|
|
2995
2995
|
if (!a) return !1;
|
|
2996
2996
|
const e = ze(parseFloat(a[1]), a[2]);
|
|
2997
|
-
return
|
|
2997
|
+
return z(e);
|
|
2998
2998
|
}
|
|
2999
2999
|
const Ya = {
|
|
3000
3000
|
id: "accesslint-053",
|
|
@@ -3042,7 +3042,7 @@ const Ya = {
|
|
|
3042
3042
|
level: "A",
|
|
3043
3043
|
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.",
|
|
3044
3044
|
prompt: "Suggest static alternatives to the blinking effect."
|
|
3045
|
-
}, Ka =
|
|
3045
|
+
}, Ka = q(Xa), Ja = {
|
|
3046
3046
|
id: "accesslint-010",
|
|
3047
3047
|
selector: "marquee",
|
|
3048
3048
|
check: { type: "selector-exists" },
|
|
@@ -3053,7 +3053,7 @@ const Ya = {
|
|
|
3053
3053
|
level: "A",
|
|
3054
3054
|
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.",
|
|
3055
3055
|
prompt: "Suggest static alternatives or accessible carousel patterns."
|
|
3056
|
-
}, Qa =
|
|
3056
|
+
}, Qa = q(Ja), Za = {
|
|
3057
3057
|
id: "accesslint-035",
|
|
3058
3058
|
wcag: [],
|
|
3059
3059
|
level: "A",
|
|
@@ -3678,7 +3678,25 @@ function vn(t) {
|
|
|
3678
3678
|
}
|
|
3679
3679
|
return !0;
|
|
3680
3680
|
}
|
|
3681
|
-
|
|
3681
|
+
function yn(t) {
|
|
3682
|
+
const a = t.ownerDocument.defaultView;
|
|
3683
|
+
if (!a) return !1;
|
|
3684
|
+
const e = a.getComputedStyle(t), n = e.position;
|
|
3685
|
+
if (n !== "absolute" && n !== "fixed") return !1;
|
|
3686
|
+
const i = parseFloat(e.top), s = parseFloat(e.left);
|
|
3687
|
+
if (!(!isNaN(i) && i < -500 || !isNaN(s) && s < -500)) return !1;
|
|
3688
|
+
const r = t.id;
|
|
3689
|
+
if (!r) return !1;
|
|
3690
|
+
const l = r.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), m = new RegExp(
|
|
3691
|
+
`getElementById\\s*\\(\\s*['"]${l}['"]\\s*\\)\\s*\\.\\s*addEventListener\\s*\\(\\s*['"]focus['"]`
|
|
3692
|
+
);
|
|
3693
|
+
for (const c of t.ownerDocument.querySelectorAll("script")) {
|
|
3694
|
+
const d = c.textContent || "";
|
|
3695
|
+
if (m.test(d) && /\.focus\s*\(/.test(d)) return !0;
|
|
3696
|
+
}
|
|
3697
|
+
return !1;
|
|
3698
|
+
}
|
|
3699
|
+
const wn = {
|
|
3682
3700
|
id: "accesslint-062",
|
|
3683
3701
|
selector: 'body[aria-hidden="true"]',
|
|
3684
3702
|
check: { type: "selector-exists" },
|
|
@@ -3690,7 +3708,7 @@ const yn = {
|
|
|
3690
3708
|
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.",
|
|
3691
3709
|
prompt: "Instruct to remove aria-hidden='true' from the body element.",
|
|
3692
3710
|
skipAriaHidden: !1
|
|
3693
|
-
},
|
|
3711
|
+
}, An = q(wn), xn = {
|
|
3694
3712
|
id: "accesslint-063",
|
|
3695
3713
|
actRuleIds: ["6cfa84"],
|
|
3696
3714
|
wcag: ["4.1.2"],
|
|
@@ -3709,7 +3727,7 @@ const yn = {
|
|
|
3709
3727
|
const s = i.getAttribute("tabindex");
|
|
3710
3728
|
if (s === "-1" || i.disabled || i instanceof HTMLInputElement && i.type === "hidden" || !vn(i)) continue;
|
|
3711
3729
|
const o = i.getAttribute("onfocus") || "";
|
|
3712
|
-
if (/\.focus\s*\(/.test(o)) continue;
|
|
3730
|
+
if (/\.focus\s*\(/.test(o) || yn(i)) continue;
|
|
3713
3731
|
const r = i.tagName.toLowerCase();
|
|
3714
3732
|
let l;
|
|
3715
3733
|
s !== null ? l = `has tabindex="${s}"` : r === "a" && i.hasAttribute("href") ? l = "is a link with href" : r === "button" ? l = "is a <button>" : r === "input" ? l = `is an <input type="${i.type}">` : r === "select" ? l = "is a <select>" : r === "textarea" ? l = "is a <textarea>" : r === "iframe" ? l = "is an <iframe>" : l = `is a natively focusable <${r}>`;
|
|
@@ -3726,7 +3744,7 @@ const yn = {
|
|
|
3726
3744
|
}
|
|
3727
3745
|
return a;
|
|
3728
3746
|
}
|
|
3729
|
-
},
|
|
3747
|
+
}, kn = {
|
|
3730
3748
|
id: "accesslint-064",
|
|
3731
3749
|
actRuleIds: ["m6b1q3"],
|
|
3732
3750
|
wcag: ["4.1.2"],
|
|
@@ -3755,7 +3773,7 @@ const yn = {
|
|
|
3755
3773
|
}
|
|
3756
3774
|
return a;
|
|
3757
3775
|
}
|
|
3758
|
-
},
|
|
3776
|
+
}, Sn = {
|
|
3759
3777
|
id: "accesslint-065",
|
|
3760
3778
|
wcag: ["4.1.2"],
|
|
3761
3779
|
level: "A",
|
|
@@ -3776,7 +3794,7 @@ const yn = {
|
|
|
3776
3794
|
}
|
|
3777
3795
|
return a;
|
|
3778
3796
|
}
|
|
3779
|
-
},
|
|
3797
|
+
}, In = {
|
|
3780
3798
|
id: "accesslint-066",
|
|
3781
3799
|
wcag: ["4.1.2"],
|
|
3782
3800
|
level: "A",
|
|
@@ -3797,7 +3815,7 @@ const yn = {
|
|
|
3797
3815
|
}
|
|
3798
3816
|
return a;
|
|
3799
3817
|
}
|
|
3800
|
-
},
|
|
3818
|
+
}, En = {
|
|
3801
3819
|
id: "accesslint-067",
|
|
3802
3820
|
wcag: ["4.1.2"],
|
|
3803
3821
|
level: "A",
|
|
@@ -3818,7 +3836,7 @@ const yn = {
|
|
|
3818
3836
|
}
|
|
3819
3837
|
return a;
|
|
3820
3838
|
}
|
|
3821
|
-
},
|
|
3839
|
+
}, qn = {
|
|
3822
3840
|
id: "accesslint-068",
|
|
3823
3841
|
wcag: ["4.1.2"],
|
|
3824
3842
|
level: "A",
|
|
@@ -3860,7 +3878,7 @@ const yn = {
|
|
|
3860
3878
|
}
|
|
3861
3879
|
return a;
|
|
3862
3880
|
}
|
|
3863
|
-
},
|
|
3881
|
+
}, Rn = {
|
|
3864
3882
|
id: "accesslint-070",
|
|
3865
3883
|
wcag: ["4.1.2"],
|
|
3866
3884
|
level: "A",
|
|
@@ -3881,7 +3899,7 @@ const yn = {
|
|
|
3881
3899
|
}
|
|
3882
3900
|
return a;
|
|
3883
3901
|
}
|
|
3884
|
-
},
|
|
3902
|
+
}, Cn = {
|
|
3885
3903
|
id: "accesslint-071",
|
|
3886
3904
|
wcag: ["4.1.2"],
|
|
3887
3905
|
level: "A",
|
|
@@ -3902,7 +3920,7 @@ const yn = {
|
|
|
3902
3920
|
}
|
|
3903
3921
|
return a;
|
|
3904
3922
|
}
|
|
3905
|
-
},
|
|
3923
|
+
}, Tn = {
|
|
3906
3924
|
id: "accesslint-072",
|
|
3907
3925
|
actRuleIds: ["kb1m8s"],
|
|
3908
3926
|
wcag: ["4.1.2"],
|
|
@@ -3913,14 +3931,14 @@ const yn = {
|
|
|
3913
3931
|
run(t) {
|
|
3914
3932
|
return ne(t).prohibitedAttr;
|
|
3915
3933
|
}
|
|
3916
|
-
},
|
|
3934
|
+
}, Mn = [
|
|
3917
3935
|
"a[href]",
|
|
3918
3936
|
"button:not([disabled])",
|
|
3919
3937
|
'input:not([disabled]):not([type="hidden"])',
|
|
3920
3938
|
"select:not([disabled])",
|
|
3921
3939
|
"textarea:not([disabled])",
|
|
3922
3940
|
'[tabindex]:not([tabindex="-1"])'
|
|
3923
|
-
].join(", "),
|
|
3941
|
+
].join(", "), Nn = [
|
|
3924
3942
|
"aria-atomic",
|
|
3925
3943
|
"aria-busy",
|
|
3926
3944
|
"aria-controls",
|
|
@@ -3937,15 +3955,15 @@ const yn = {
|
|
|
3937
3955
|
];
|
|
3938
3956
|
function Se(t) {
|
|
3939
3957
|
const a = [];
|
|
3940
|
-
t.matches(
|
|
3941
|
-
for (const e of
|
|
3958
|
+
t.matches(Mn) && a.push("element is focusable");
|
|
3959
|
+
for (const e of Nn)
|
|
3942
3960
|
if (t.hasAttribute(e)) {
|
|
3943
3961
|
a.push(`has ${e}`);
|
|
3944
3962
|
break;
|
|
3945
3963
|
}
|
|
3946
3964
|
return (t.hasAttribute("aria-label") || t.hasAttribute("aria-labelledby")) && a.push("has accessible name"), a;
|
|
3947
3965
|
}
|
|
3948
|
-
const
|
|
3966
|
+
const $n = {
|
|
3949
3967
|
id: "accesslint-073",
|
|
3950
3968
|
actRuleIds: ["46ca7f"],
|
|
3951
3969
|
wcag: ["4.1.2"],
|
|
@@ -3979,7 +3997,7 @@ const Nn = {
|
|
|
3979
3997
|
}
|
|
3980
3998
|
return a;
|
|
3981
3999
|
}
|
|
3982
|
-
},
|
|
4000
|
+
}, Dn = /* @__PURE__ */ new Set([
|
|
3983
4001
|
"button",
|
|
3984
4002
|
"checkbox",
|
|
3985
4003
|
"img",
|
|
@@ -3997,7 +4015,7 @@ const Nn = {
|
|
|
3997
4015
|
"spinbutton",
|
|
3998
4016
|
"switch",
|
|
3999
4017
|
"tab"
|
|
4000
|
-
]),
|
|
4018
|
+
]), Fn = [
|
|
4001
4019
|
"a[href]",
|
|
4002
4020
|
"button:not([disabled])",
|
|
4003
4021
|
'input:not([disabled]):not([type="hidden"])',
|
|
@@ -4009,7 +4027,7 @@ const Nn = {
|
|
|
4009
4027
|
"iframe",
|
|
4010
4028
|
"embed",
|
|
4011
4029
|
"object"
|
|
4012
|
-
].join(", "),
|
|
4030
|
+
].join(", "), Pn = {
|
|
4013
4031
|
id: "accesslint-074",
|
|
4014
4032
|
actRuleIds: ["307n5z"],
|
|
4015
4033
|
wcag: ["4.1.2"],
|
|
@@ -4021,8 +4039,8 @@ const Nn = {
|
|
|
4021
4039
|
for (const e of t.querySelectorAll("*")) {
|
|
4022
4040
|
if (b(e)) continue;
|
|
4023
4041
|
const n = F(e);
|
|
4024
|
-
if (!(!n ||
|
|
4025
|
-
for (const i of e.querySelectorAll(
|
|
4042
|
+
if (!(!n || !Dn.has(n))) {
|
|
4043
|
+
for (const i of e.querySelectorAll(Fn))
|
|
4026
4044
|
if (i !== e && !i.disabled) {
|
|
4027
4045
|
a.push({
|
|
4028
4046
|
ruleId: "accesslint-074",
|
|
@@ -4037,7 +4055,7 @@ const Nn = {
|
|
|
4037
4055
|
}
|
|
4038
4056
|
return a;
|
|
4039
4057
|
}
|
|
4040
|
-
},
|
|
4058
|
+
}, Hn = {
|
|
4041
4059
|
id: "accesslint-076",
|
|
4042
4060
|
actRuleIds: ["2t702h"],
|
|
4043
4061
|
wcag: ["4.1.2"],
|
|
@@ -4060,7 +4078,7 @@ const Nn = {
|
|
|
4060
4078
|
return a;
|
|
4061
4079
|
}
|
|
4062
4080
|
};
|
|
4063
|
-
function
|
|
4081
|
+
function zn(t) {
|
|
4064
4082
|
var i, s;
|
|
4065
4083
|
const a = [], e = t.getAttribute("href");
|
|
4066
4084
|
e && a.push(`href: ${e}`);
|
|
@@ -4077,7 +4095,7 @@ function Hn(t) {
|
|
|
4077
4095
|
return a.length > 0 ? a.join(`
|
|
4078
4096
|
`) : void 0;
|
|
4079
4097
|
}
|
|
4080
|
-
const
|
|
4098
|
+
const jn = {
|
|
4081
4099
|
id: "accesslint-077",
|
|
4082
4100
|
actRuleIds: ["c487ae"],
|
|
4083
4101
|
wcag: ["2.4.4", "4.1.2"],
|
|
@@ -4095,12 +4113,12 @@ const zn = {
|
|
|
4095
4113
|
html: u(e),
|
|
4096
4114
|
impact: "serious",
|
|
4097
4115
|
message: "Link has no discernible text.",
|
|
4098
|
-
context:
|
|
4116
|
+
context: zn(e)
|
|
4099
4117
|
});
|
|
4100
4118
|
}
|
|
4101
4119
|
return a;
|
|
4102
4120
|
}
|
|
4103
|
-
},
|
|
4121
|
+
}, Un = {
|
|
4104
4122
|
id: "accesslint-078",
|
|
4105
4123
|
wcag: ["2.4.1"],
|
|
4106
4124
|
level: "A",
|
|
@@ -4134,96 +4152,41 @@ const zn = {
|
|
|
4134
4152
|
"table-cell",
|
|
4135
4153
|
"list-item",
|
|
4136
4154
|
"flow-root"
|
|
4137
|
-
]),
|
|
4155
|
+
]), On = /* @__PURE__ */ new Set([
|
|
4138
4156
|
"inline",
|
|
4139
4157
|
"inline-block",
|
|
4140
4158
|
"inline-flex",
|
|
4141
4159
|
"inline-grid"
|
|
4142
4160
|
]);
|
|
4143
|
-
function
|
|
4161
|
+
function Bn(t) {
|
|
4144
4162
|
let a = t.parentElement;
|
|
4145
|
-
for (; a; )
|
|
4146
|
-
const e = A(a).display;
|
|
4147
|
-
if (Wn.has(e))
|
|
4148
|
-
return Bn(a) ? a : null;
|
|
4163
|
+
for (; a && !Wn.has(x(a).display); )
|
|
4149
4164
|
a = a.parentElement;
|
|
4150
|
-
|
|
4151
|
-
|
|
4152
|
-
|
|
4153
|
-
|
|
4154
|
-
|
|
4155
|
-
|
|
4156
|
-
|
|
4157
|
-
);
|
|
4158
|
-
let e = "", n;
|
|
4159
|
-
for (; n = a.nextNode(); ) {
|
|
4160
|
-
if (!n.data.trim()) continue;
|
|
4161
|
-
let i = n.parentElement, s = !1;
|
|
4162
|
-
for (; i && i !== t; ) {
|
|
4163
|
-
if (i.tagName === "A") {
|
|
4164
|
-
s = !0;
|
|
4165
|
-
break;
|
|
4166
|
-
}
|
|
4167
|
-
i = i.parentElement;
|
|
4168
|
-
}
|
|
4169
|
-
s || (e += n.data);
|
|
4170
|
-
}
|
|
4171
|
-
return new RegExp("\\p{L}{2,}", "u").test(e);
|
|
4172
|
-
}
|
|
4173
|
-
function Vn(t, a) {
|
|
4174
|
-
const e = t.ownerDocument.createTreeWalker(
|
|
4175
|
-
t,
|
|
4176
|
-
NodeFilter.SHOW_TEXT
|
|
4177
|
-
);
|
|
4178
|
-
let n;
|
|
4179
|
-
for (; n = e.nextNode(); ) {
|
|
4180
|
-
if (!n.data.trim()) continue;
|
|
4181
|
-
let i = n.parentElement, s = !1, o = i;
|
|
4182
|
-
for (; o && o !== t; ) {
|
|
4165
|
+
if (!a) return null;
|
|
4166
|
+
const e = a.ownerDocument.createTreeWalker(a, NodeFilter.SHOW_TEXT);
|
|
4167
|
+
let n = "", i = null, s;
|
|
4168
|
+
for (; s = e.nextNode(); ) {
|
|
4169
|
+
if (!s.data.trim()) continue;
|
|
4170
|
+
let o = s.parentElement, r = !1;
|
|
4171
|
+
for (; o && o !== a; ) {
|
|
4183
4172
|
if (o.tagName === "A") {
|
|
4184
|
-
|
|
4173
|
+
r = !0;
|
|
4185
4174
|
break;
|
|
4186
4175
|
}
|
|
4187
4176
|
o = o.parentElement;
|
|
4188
4177
|
}
|
|
4189
|
-
|
|
4190
|
-
return C(A(i).color);
|
|
4178
|
+
r || (n += s.data, !i && s.parentElement && (i = C(x(s.parentElement).color)));
|
|
4191
4179
|
}
|
|
4192
|
-
return null;
|
|
4180
|
+
return !i || !new RegExp("\\p{L}{2,}", "u").test(n) ? null : { block: a, textColor: i };
|
|
4193
4181
|
}
|
|
4194
|
-
function
|
|
4195
|
-
const
|
|
4196
|
-
|
|
4197
|
-
return !0;
|
|
4198
|
-
const s = parseFloat(a.borderBottomWidth) || 0, o = a.borderBottomStyle || "";
|
|
4199
|
-
if (s > 0 && o !== "none" && o !== "hidden")
|
|
4200
|
-
return !0;
|
|
4201
|
-
const r = parseFloat(a.outlineWidth) || 0, l = a.outlineStyle || "";
|
|
4202
|
-
if (r > 0 && l !== "none")
|
|
4203
|
-
return !0;
|
|
4204
|
-
const m = a.backgroundImage || "";
|
|
4205
|
-
if (m && m !== "none" && m !== "initial")
|
|
4206
|
-
return !0;
|
|
4207
|
-
const c = V(e.fontWeight), d = V(a.fontWeight);
|
|
4208
|
-
if (Math.abs(d - c) >= 300 || a.fontStyle !== e.fontStyle)
|
|
4209
|
-
return !0;
|
|
4210
|
-
const h = parseFloat(a.fontSize) || 16, g = parseFloat(e.fontSize) || 16;
|
|
4211
|
-
if (g > 0 && h / g >= 1.2)
|
|
4212
|
-
return !0;
|
|
4213
|
-
for (const f of t.querySelectorAll("*")) {
|
|
4214
|
-
const v = A(f), w = v.textDecorationLine || v.textDecoration || "";
|
|
4215
|
-
if ((w.includes("underline") || w.includes("line-through")) && w !== n || Math.abs(V(v.fontWeight) - c) >= 300)
|
|
4216
|
-
return !0;
|
|
4217
|
-
}
|
|
4218
|
-
return !1;
|
|
4182
|
+
function Ie(t, a) {
|
|
4183
|
+
const e = t.textDecorationLine || t.textDecoration || "";
|
|
4184
|
+
return (e.includes("underline") || e.includes("line-through")) && e !== a;
|
|
4219
4185
|
}
|
|
4220
|
-
function
|
|
4186
|
+
function H(t) {
|
|
4221
4187
|
return t === "bold" ? 700 : t === "normal" ? 400 : parseInt(t) || 400;
|
|
4222
4188
|
}
|
|
4223
|
-
|
|
4224
|
-
return "#" + [t, a, e].map((n) => n.toString(16).padStart(2, "0")).join("");
|
|
4225
|
-
}
|
|
4226
|
-
const Gn = {
|
|
4189
|
+
const Vn = {
|
|
4227
4190
|
id: "accesslint-079",
|
|
4228
4191
|
wcag: ["1.4.1"],
|
|
4229
4192
|
level: "A",
|
|
@@ -4234,29 +4197,40 @@ const Gn = {
|
|
|
4234
4197
|
const a = [];
|
|
4235
4198
|
for (const e of t.querySelectorAll("a[href]")) {
|
|
4236
4199
|
if (b(e) || !k(e).trim() || e.closest('nav, header, footer, [role="navigation"], [role="banner"], [role="contentinfo"]')) continue;
|
|
4237
|
-
const n =
|
|
4238
|
-
if (!
|
|
4239
|
-
const
|
|
4240
|
-
if (!
|
|
4241
|
-
const o =
|
|
4242
|
-
if (
|
|
4243
|
-
const
|
|
4244
|
-
if (
|
|
4245
|
-
|
|
4246
|
-
|
|
4247
|
-
|
|
4200
|
+
const n = x(e);
|
|
4201
|
+
if (!On.has(n.display || "inline")) continue;
|
|
4202
|
+
const i = Bn(e);
|
|
4203
|
+
if (!i) continue;
|
|
4204
|
+
const s = x(i.block), o = s.textDecorationLine || s.textDecoration || "";
|
|
4205
|
+
if (Ie(n, o) || (parseFloat(n.borderBottomWidth) || 0) > 0 && n.borderBottomStyle !== "none" && n.borderBottomStyle !== "hidden" || Math.abs(H(n.fontWeight) - H(s.fontWeight)) >= 300 || n.fontStyle !== s.fontStyle) continue;
|
|
4206
|
+
const l = parseFloat(n.fontSize) || 16, m = parseFloat(s.fontSize) || 16;
|
|
4207
|
+
if (m > 0 && l / m >= 1.2) continue;
|
|
4208
|
+
let c = !1;
|
|
4209
|
+
for (const A of e.querySelectorAll("*")) {
|
|
4210
|
+
const w = x(A);
|
|
4211
|
+
if (Ie(w, o) || Math.abs(H(w.fontWeight) - H(s.fontWeight)) >= 300) {
|
|
4212
|
+
c = !0;
|
|
4213
|
+
break;
|
|
4214
|
+
}
|
|
4215
|
+
}
|
|
4216
|
+
if (c) continue;
|
|
4217
|
+
const d = C(n.color);
|
|
4218
|
+
if (!d) continue;
|
|
4219
|
+
const h = R(...d), g = R(...i.textColor), f = ie(h, g);
|
|
4220
|
+
if (f < 1.1 || f >= 3) continue;
|
|
4221
|
+
const v = (A) => "#" + A.map((w) => w.toString(16).padStart(2, "0")).join("");
|
|
4248
4222
|
a.push({
|
|
4249
4223
|
ruleId: "accesslint-079",
|
|
4250
4224
|
selector: p(e),
|
|
4251
4225
|
html: u(e),
|
|
4252
4226
|
impact: "serious",
|
|
4253
4227
|
message: "Link in text block is not visually distinguishable from surrounding text. Add a non-color visual indicator such as an underline or border.",
|
|
4254
|
-
context: f
|
|
4228
|
+
context: `link color: ${v(d)} rgb(${d.join(", ")}), surrounding text: ${v(i.textColor)} rgb(${i.textColor.join(", ")}), ratio: ${f.toFixed(2)}:1`
|
|
4255
4229
|
});
|
|
4256
4230
|
}
|
|
4257
4231
|
return a;
|
|
4258
4232
|
}
|
|
4259
|
-
},
|
|
4233
|
+
}, _n = {
|
|
4260
4234
|
id: "accesslint-080",
|
|
4261
4235
|
actRuleIds: ["b5c3f8"],
|
|
4262
4236
|
wcag: ["3.1.1"],
|
|
@@ -4291,17 +4265,17 @@ const Gn = {
|
|
|
4291
4265
|
}
|
|
4292
4266
|
return [];
|
|
4293
4267
|
}
|
|
4294
|
-
},
|
|
4268
|
+
}, Gn = new Set(
|
|
4295
4269
|
"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(" ")
|
|
4296
|
-
),
|
|
4270
|
+
), Yn = new Set(
|
|
4297
4271
|
"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(" ")
|
|
4298
|
-
),
|
|
4272
|
+
), Xn = /^[a-z]{2,8}(-[a-z0-9]{1,8})*$/i;
|
|
4299
4273
|
function je(t) {
|
|
4300
|
-
if (!
|
|
4274
|
+
if (!Xn.test(t)) return !1;
|
|
4301
4275
|
const a = t.split("-")[0].toLowerCase();
|
|
4302
|
-
return a.length === 2 ?
|
|
4276
|
+
return a.length === 2 ? Gn.has(a) : a.length === 3 ? !Yn.has(a) : !1;
|
|
4303
4277
|
}
|
|
4304
|
-
const
|
|
4278
|
+
const Kn = {
|
|
4305
4279
|
id: "accesslint-081",
|
|
4306
4280
|
actRuleIds: ["bf051a"],
|
|
4307
4281
|
wcag: ["3.1.1"],
|
|
@@ -4353,7 +4327,7 @@ function Ee(t) {
|
|
|
4353
4327
|
}
|
|
4354
4328
|
return !1;
|
|
4355
4329
|
}
|
|
4356
|
-
const
|
|
4330
|
+
const Jn = {
|
|
4357
4331
|
id: "accesslint-082",
|
|
4358
4332
|
actRuleIds: ["de46e4"],
|
|
4359
4333
|
wcag: ["3.1.2"],
|
|
@@ -4386,7 +4360,7 @@ const Zn = {
|
|
|
4386
4360
|
}
|
|
4387
4361
|
return a;
|
|
4388
4362
|
}
|
|
4389
|
-
},
|
|
4363
|
+
}, Qn = {
|
|
4390
4364
|
id: "accesslint-083",
|
|
4391
4365
|
wcag: ["3.1.1"],
|
|
4392
4366
|
level: "A",
|
|
@@ -4409,7 +4383,7 @@ const Zn = {
|
|
|
4409
4383
|
}
|
|
4410
4384
|
return [];
|
|
4411
4385
|
}
|
|
4412
|
-
},
|
|
4386
|
+
}, Zn = {
|
|
4413
4387
|
id: "accesslint-084",
|
|
4414
4388
|
actRuleIds: ["a25f45"],
|
|
4415
4389
|
wcag: ["1.3.1"],
|
|
@@ -4449,7 +4423,7 @@ const Zn = {
|
|
|
4449
4423
|
}
|
|
4450
4424
|
return a;
|
|
4451
4425
|
}
|
|
4452
|
-
},
|
|
4426
|
+
}, ei = {
|
|
4453
4427
|
id: "accesslint-085",
|
|
4454
4428
|
actRuleIds: ["d0f69e"],
|
|
4455
4429
|
wcag: ["1.3.1"],
|
|
@@ -4472,7 +4446,7 @@ const Zn = {
|
|
|
4472
4446
|
}
|
|
4473
4447
|
return a;
|
|
4474
4448
|
}
|
|
4475
|
-
},
|
|
4449
|
+
}, ti = {
|
|
4476
4450
|
id: "accesslint-086",
|
|
4477
4451
|
wcag: ["1.3.1"],
|
|
4478
4452
|
level: "A",
|
|
@@ -4502,14 +4476,14 @@ const Zn = {
|
|
|
4502
4476
|
if (!h) continue;
|
|
4503
4477
|
const g = h.querySelector("th") !== null, f = Array.from(h.children).indexOf(d);
|
|
4504
4478
|
let v = !1;
|
|
4505
|
-
const
|
|
4506
|
-
if (
|
|
4507
|
-
const
|
|
4508
|
-
|
|
4479
|
+
const A = i.querySelector("thead");
|
|
4480
|
+
if (A) {
|
|
4481
|
+
const w = A.querySelector("tr");
|
|
4482
|
+
w && ((e = w.querySelectorAll("th, td")[f]) == null ? void 0 : e.tagName.toLowerCase()) === "th" && (v = !0);
|
|
4509
4483
|
}
|
|
4510
4484
|
if (!v) {
|
|
4511
|
-
const
|
|
4512
|
-
|
|
4485
|
+
const w = i.querySelector("tbody > tr, tr");
|
|
4486
|
+
w && ((n = w.querySelectorAll("th, td")[f]) == null ? void 0 : n.tagName.toLowerCase()) === "th" && (v = !0);
|
|
4513
4487
|
}
|
|
4514
4488
|
if (!g && !v && !m && !c) {
|
|
4515
4489
|
a.push({
|
|
@@ -4525,7 +4499,7 @@ const Zn = {
|
|
|
4525
4499
|
}
|
|
4526
4500
|
return a;
|
|
4527
4501
|
}
|
|
4528
|
-
},
|
|
4502
|
+
}, ai = {
|
|
4529
4503
|
id: "accesslint-087",
|
|
4530
4504
|
wcag: ["1.3.1"],
|
|
4531
4505
|
level: "A",
|
|
@@ -4548,7 +4522,7 @@ const Zn = {
|
|
|
4548
4522
|
}
|
|
4549
4523
|
return a;
|
|
4550
4524
|
}
|
|
4551
|
-
},
|
|
4525
|
+
}, ni = {
|
|
4552
4526
|
id: "accesslint-088",
|
|
4553
4527
|
wcag: [],
|
|
4554
4528
|
level: "A",
|
|
@@ -4571,7 +4545,7 @@ const Zn = {
|
|
|
4571
4545
|
}
|
|
4572
4546
|
return a;
|
|
4573
4547
|
}
|
|
4574
|
-
}, _ = ["aria-labelledby", "aria-describedby", "aria-controls", "aria-owns", "aria-flowto"],
|
|
4548
|
+
}, _ = ["aria-labelledby", "aria-describedby", "aria-controls", "aria-owns", "aria-flowto"], ii = {
|
|
4575
4549
|
id: "accesslint-089",
|
|
4576
4550
|
wcag: ["4.1.2"],
|
|
4577
4551
|
level: "A",
|
|
@@ -4619,7 +4593,7 @@ Referenced by: ${m}` : ""}`
|
|
|
4619
4593
|
}
|
|
4620
4594
|
return a;
|
|
4621
4595
|
}
|
|
4622
|
-
},
|
|
4596
|
+
}, si = {
|
|
4623
4597
|
id: "accesslint-090",
|
|
4624
4598
|
actRuleIds: ["eac66b"],
|
|
4625
4599
|
wcag: ["1.2.2"],
|
|
@@ -4641,7 +4615,7 @@ Referenced by: ${m}` : ""}`
|
|
|
4641
4615
|
}
|
|
4642
4616
|
return a;
|
|
4643
4617
|
}
|
|
4644
|
-
},
|
|
4618
|
+
}, oi = {
|
|
4645
4619
|
id: "accesslint-091",
|
|
4646
4620
|
actRuleIds: ["e7aa44"],
|
|
4647
4621
|
wcag: ["1.2.1"],
|
|
@@ -4664,7 +4638,7 @@ Referenced by: ${m}` : ""}`
|
|
|
4664
4638
|
}
|
|
4665
4639
|
return a;
|
|
4666
4640
|
}
|
|
4667
|
-
},
|
|
4641
|
+
}, ri = /* @__PURE__ */ new Set([
|
|
4668
4642
|
"SCRIPT",
|
|
4669
4643
|
"STYLE",
|
|
4670
4644
|
"NOSCRIPT",
|
|
@@ -4683,10 +4657,10 @@ Referenced by: ${m}` : ""}`
|
|
|
4683
4657
|
function ae([t, a, e]) {
|
|
4684
4658
|
return "#" + [t, a, e].map((n) => n.toString(16).padStart(2, "0")).join("");
|
|
4685
4659
|
}
|
|
4686
|
-
function
|
|
4660
|
+
function li(t) {
|
|
4687
4661
|
return t instanceof HTMLInputElement || t instanceof HTMLTextAreaElement || t instanceof HTMLSelectElement || t instanceof HTMLButtonElement ? t.disabled : !!(t.closest("fieldset[disabled]") || t.getAttribute("aria-disabled") === "true");
|
|
4688
4662
|
}
|
|
4689
|
-
function
|
|
4663
|
+
function ci(t, a) {
|
|
4690
4664
|
if (t.tagName !== "LABEL") return !1;
|
|
4691
4665
|
const e = t, n = e.htmlFor;
|
|
4692
4666
|
if (n) {
|
|
@@ -4698,7 +4672,7 @@ function ui(t, a) {
|
|
|
4698
4672
|
const s = e.id;
|
|
4699
4673
|
return !!(s && a.querySelector(`[aria-labelledby~="${s}"][aria-disabled="true"]`));
|
|
4700
4674
|
}
|
|
4701
|
-
function
|
|
4675
|
+
function di(t) {
|
|
4702
4676
|
const a = t.clip;
|
|
4703
4677
|
if (a && a.startsWith("rect(")) {
|
|
4704
4678
|
const n = a.match(/[\d.]+/g);
|
|
@@ -4712,25 +4686,25 @@ function mi(t) {
|
|
|
4712
4686
|
}
|
|
4713
4687
|
return !1;
|
|
4714
4688
|
}
|
|
4715
|
-
function
|
|
4689
|
+
function ui(t) {
|
|
4716
4690
|
if (b(t)) return !0;
|
|
4717
4691
|
let a = t;
|
|
4718
4692
|
for (; a; ) {
|
|
4719
|
-
const e =
|
|
4720
|
-
if (e.display === "none" || e.visibility === "hidden" ||
|
|
4693
|
+
const e = x(a);
|
|
4694
|
+
if (e.display === "none" || e.visibility === "hidden" || di(e)) return !0;
|
|
4721
4695
|
a = a.parentElement;
|
|
4722
4696
|
}
|
|
4723
4697
|
return !1;
|
|
4724
4698
|
}
|
|
4725
|
-
function
|
|
4699
|
+
function mi(t) {
|
|
4726
4700
|
let a = 1, e = t;
|
|
4727
4701
|
for (; e; ) {
|
|
4728
|
-
const n =
|
|
4702
|
+
const n = x(e), i = parseFloat(n.opacity);
|
|
4729
4703
|
isNaN(i) || (a *= i), e = e.parentElement;
|
|
4730
4704
|
}
|
|
4731
4705
|
return a;
|
|
4732
4706
|
}
|
|
4733
|
-
const
|
|
4707
|
+
const pi = {
|
|
4734
4708
|
grayscale: 0,
|
|
4735
4709
|
blur: 0,
|
|
4736
4710
|
"hue-rotate": 0,
|
|
@@ -4741,44 +4715,44 @@ const bi = {
|
|
|
4741
4715
|
saturate: 1,
|
|
4742
4716
|
opacity: 1
|
|
4743
4717
|
};
|
|
4744
|
-
function
|
|
4718
|
+
function hi(t) {
|
|
4745
4719
|
const a = parseFloat(t);
|
|
4746
4720
|
return isNaN(a) ? NaN : t.trim().endsWith("%") ? a / 100 : a;
|
|
4747
4721
|
}
|
|
4748
|
-
const
|
|
4749
|
-
function
|
|
4722
|
+
const qe = /([a-z-]+)\(([^)]*)\)/g;
|
|
4723
|
+
function Le(t) {
|
|
4750
4724
|
let a, e = !1;
|
|
4751
|
-
for (
|
|
4725
|
+
for (qe.lastIndex = 0; a = qe.exec(t); ) {
|
|
4752
4726
|
e = !0;
|
|
4753
|
-
const n =
|
|
4754
|
-
if (n === void 0 ||
|
|
4727
|
+
const n = pi[a[1]];
|
|
4728
|
+
if (n === void 0 || hi(a[2]) !== n) return !1;
|
|
4755
4729
|
}
|
|
4756
4730
|
return e;
|
|
4757
4731
|
}
|
|
4758
|
-
function
|
|
4732
|
+
function bi(t) {
|
|
4759
4733
|
let a = t;
|
|
4760
4734
|
for (; a; ) {
|
|
4761
|
-
const e =
|
|
4762
|
-
if (n && n !== "none" && n !== "initial" && !
|
|
4735
|
+
const e = x(a), n = e.filter;
|
|
4736
|
+
if (n && n !== "none" && n !== "initial" && !Le(n)) return !0;
|
|
4763
4737
|
const i = e.mixBlendMode;
|
|
4764
4738
|
if (i && i !== "normal" && i !== "initial") return !0;
|
|
4765
4739
|
const s = e.backdropFilter;
|
|
4766
|
-
if (s && s !== "none" && s !== "initial" && !
|
|
4740
|
+
if (s && s !== "none" && s !== "initial" && !Le(s)) return !0;
|
|
4767
4741
|
a = a.parentElement;
|
|
4768
4742
|
}
|
|
4769
4743
|
return !1;
|
|
4770
4744
|
}
|
|
4771
|
-
function
|
|
4745
|
+
function gi(t) {
|
|
4772
4746
|
return t.closest("select") !== null;
|
|
4773
4747
|
}
|
|
4774
|
-
function
|
|
4748
|
+
function fi(t) {
|
|
4775
4749
|
const a = t.replace(/\s/g, "");
|
|
4776
4750
|
return a ? !new RegExp("\\p{L}", "u").test(a) : !0;
|
|
4777
4751
|
}
|
|
4778
|
-
function
|
|
4752
|
+
function vi(t) {
|
|
4779
4753
|
return t.closest('[aria-disabled="true"]') !== null;
|
|
4780
4754
|
}
|
|
4781
|
-
const
|
|
4755
|
+
const yi = {
|
|
4782
4756
|
id: "accesslint-092",
|
|
4783
4757
|
actRuleIds: ["afw4f7"],
|
|
4784
4758
|
wcag: ["1.4.3"],
|
|
@@ -4787,9 +4761,9 @@ const Ai = {
|
|
|
4787
4761
|
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.",
|
|
4788
4762
|
prompt: "Suggest changing the text or background color to meet the minimum contrast ratio.",
|
|
4789
4763
|
run(t) {
|
|
4790
|
-
return
|
|
4764
|
+
return Ue(t, "accesslint-092", "AA");
|
|
4791
4765
|
}
|
|
4792
|
-
},
|
|
4766
|
+
}, wi = {
|
|
4793
4767
|
id: "accesslint-093",
|
|
4794
4768
|
actRuleIds: ["09o5cg"],
|
|
4795
4769
|
wcag: ["1.4.6"],
|
|
@@ -4797,13 +4771,13 @@ const Ai = {
|
|
|
4797
4771
|
description: "Text elements must have enhanced color contrast against the background (WCAG AAA).",
|
|
4798
4772
|
guidance: "WCAG SC 1.4.6 (AAA) requires a contrast ratio of at least 7:1 for normal text and 4.5:1 for large text (>=24px or >=18.66px bold).",
|
|
4799
4773
|
run(t) {
|
|
4800
|
-
return
|
|
4774
|
+
return Ue(t, "accesslint-093", "AAA");
|
|
4801
4775
|
}
|
|
4802
4776
|
};
|
|
4803
|
-
function
|
|
4777
|
+
function Ai(t) {
|
|
4804
4778
|
let a = t;
|
|
4805
4779
|
for (; a; ) {
|
|
4806
|
-
const e =
|
|
4780
|
+
const e = x(a), n = e.backgroundImage;
|
|
4807
4781
|
if (n && n !== "none" && n !== "initial")
|
|
4808
4782
|
return n.includes("gradient(") ? { bgImage: n, gradientEl: a } : null;
|
|
4809
4783
|
const i = e.backgroundColor;
|
|
@@ -4819,22 +4793,22 @@ function ki(t) {
|
|
|
4819
4793
|
}
|
|
4820
4794
|
return null;
|
|
4821
4795
|
}
|
|
4822
|
-
function
|
|
4796
|
+
function xi(t, a, e, n, i, s, o, r, l) {
|
|
4823
4797
|
const m = mt(r, l);
|
|
4824
4798
|
if (m.length === 0) return null;
|
|
4825
4799
|
let c = 0, d = m[0];
|
|
4826
4800
|
for (const f of m) {
|
|
4827
4801
|
let v = a;
|
|
4828
|
-
e < 1 && (v =
|
|
4829
|
-
const
|
|
4802
|
+
e < 1 && (v = L(a, f, e)), n < 1 && (v = L(v, f, n));
|
|
4803
|
+
const A = ie(
|
|
4830
4804
|
R(v[0], v[1], v[2]),
|
|
4831
4805
|
R(f[0], f[1], f[2])
|
|
4832
4806
|
);
|
|
4833
|
-
|
|
4807
|
+
A > c && (c = A, d = f);
|
|
4834
4808
|
}
|
|
4835
4809
|
if (c >= i) return null;
|
|
4836
4810
|
let h = a;
|
|
4837
|
-
e < 1 && (h =
|
|
4811
|
+
e < 1 && (h = L(a, d, e)), n < 1 && (h = L(h, d, n));
|
|
4838
4812
|
const g = Math.round(c * 100) / 100;
|
|
4839
4813
|
return {
|
|
4840
4814
|
ruleId: s,
|
|
@@ -4845,33 +4819,33 @@ function Si(t, a, e, n, i, s, o, r, l) {
|
|
|
4845
4819
|
context: `foreground: ${ae(h)} rgb(${h.join(", ")}), background: gradient, ratio: ${g}:1, required: ${i}:1`
|
|
4846
4820
|
};
|
|
4847
4821
|
}
|
|
4848
|
-
function
|
|
4822
|
+
function Ue(t, a, e) {
|
|
4849
4823
|
const n = [], i = t.body;
|
|
4850
4824
|
if (!i) return [];
|
|
4851
4825
|
const s = t.createTreeWalker(i, NodeFilter.SHOW_TEXT), o = /* @__PURE__ */ new Set();
|
|
4852
4826
|
let r;
|
|
4853
4827
|
for (; r = s.nextNode(); ) {
|
|
4854
|
-
if (!r.textContent || !r.textContent.trim() ||
|
|
4828
|
+
if (!r.textContent || !r.textContent.trim() || fi(r.textContent)) continue;
|
|
4855
4829
|
const l = r.parentElement;
|
|
4856
|
-
if (!l || o.has(l) || (o.add(l),
|
|
4830
|
+
if (!l || o.has(l) || (o.add(l), ri.has(l.tagName))) continue;
|
|
4857
4831
|
const m = l.tagName;
|
|
4858
|
-
if (m === "BODY" || m === "HTML" ||
|
|
4859
|
-
const c =
|
|
4832
|
+
if (m === "BODY" || m === "HTML" || gi(l) || li(l) || ci(l, t) || vi(l) || ui(l)) continue;
|
|
4833
|
+
const c = x(l);
|
|
4860
4834
|
if (parseFloat(c.opacity) === 0) continue;
|
|
4861
|
-
const d =
|
|
4835
|
+
const d = mi(l);
|
|
4862
4836
|
if (d < 0.1) continue;
|
|
4863
4837
|
const h = c.textShadow;
|
|
4864
|
-
if (h && h !== "none" && h !== "initial" ||
|
|
4838
|
+
if (h && h !== "none" && h !== "initial" || bi(l)) continue;
|
|
4865
4839
|
const g = C(c.color);
|
|
4866
4840
|
if (!g) continue;
|
|
4867
4841
|
const f = Te(c.color);
|
|
4868
4842
|
if (f === 0 || ht(l)) continue;
|
|
4869
4843
|
const v = e === "AAA" ? ge(l) ? 4.5 : 7 : ge(l) ? 3 : 4.5;
|
|
4870
|
-
let
|
|
4871
|
-
if (!
|
|
4872
|
-
const S =
|
|
4844
|
+
let A = be(l);
|
|
4845
|
+
if (!A) {
|
|
4846
|
+
const S = Ai(l);
|
|
4873
4847
|
if (S) {
|
|
4874
|
-
const
|
|
4848
|
+
const O = S.gradientEl.parentElement ? be(S.gradientEl.parentElement) : null, P = xi(
|
|
4875
4849
|
l,
|
|
4876
4850
|
g,
|
|
4877
4851
|
f,
|
|
@@ -4880,30 +4854,30 @@ function We(t, a, e) {
|
|
|
4880
4854
|
a,
|
|
4881
4855
|
e,
|
|
4882
4856
|
S.bgImage,
|
|
4883
|
-
|
|
4857
|
+
O ?? [255, 255, 255]
|
|
4884
4858
|
);
|
|
4885
4859
|
P && n.push(P);
|
|
4886
4860
|
}
|
|
4887
4861
|
continue;
|
|
4888
4862
|
}
|
|
4889
|
-
let
|
|
4890
|
-
f < 1 && (
|
|
4891
|
-
const W = R(
|
|
4863
|
+
let w = g;
|
|
4864
|
+
f < 1 && (w = L(g, A, f)), d < 1 && (w = L(w, A, d));
|
|
4865
|
+
const W = R(w[0], w[1], w[2]), _e = R(A[0], A[1], A[2]), ce = ie(W, _e);
|
|
4892
4866
|
if (ce < v) {
|
|
4893
|
-
const S = Math.round(ce * 100) / 100,
|
|
4867
|
+
const S = Math.round(ce * 100) / 100, O = ae(w), P = ae(A);
|
|
4894
4868
|
n.push({
|
|
4895
4869
|
ruleId: a,
|
|
4896
4870
|
selector: p(l),
|
|
4897
4871
|
html: u(l),
|
|
4898
4872
|
impact: "serious",
|
|
4899
4873
|
message: `Insufficient${e === "AAA" ? " enhanced" : ""} color contrast ratio of ${S}:1 (required ${v}:1).`,
|
|
4900
|
-
context: `foreground: ${
|
|
4874
|
+
context: `foreground: ${O} rgb(${w.join(", ")}), background: ${P} rgb(${A.join(", ")}), ratio: ${S}:1, required: ${v}:1`
|
|
4901
4875
|
});
|
|
4902
4876
|
}
|
|
4903
4877
|
}
|
|
4904
4878
|
return n;
|
|
4905
4879
|
}
|
|
4906
|
-
const
|
|
4880
|
+
const We = [
|
|
4907
4881
|
// Document Structure
|
|
4908
4882
|
Ma,
|
|
4909
4883
|
Na,
|
|
@@ -4920,14 +4894,14 @@ const Ue = [
|
|
|
4920
4894
|
St,
|
|
4921
4895
|
It,
|
|
4922
4896
|
Et,
|
|
4923
|
-
|
|
4897
|
+
Lt,
|
|
4924
4898
|
Rt,
|
|
4925
4899
|
Tt,
|
|
4926
4900
|
Mt,
|
|
4927
4901
|
Ft,
|
|
4928
4902
|
// Forms
|
|
4929
|
-
Wt,
|
|
4930
4903
|
Ut,
|
|
4904
|
+
Wt,
|
|
4931
4905
|
Ot,
|
|
4932
4906
|
Bt,
|
|
4933
4907
|
Jt,
|
|
@@ -4954,11 +4928,11 @@ const Ue = [
|
|
|
4954
4928
|
ka,
|
|
4955
4929
|
Sa,
|
|
4956
4930
|
Ia,
|
|
4957
|
-
La,
|
|
4958
|
-
Ta,
|
|
4959
4931
|
qa,
|
|
4932
|
+
Ta,
|
|
4933
|
+
La,
|
|
4960
4934
|
Ca,
|
|
4961
|
-
|
|
4935
|
+
Wa,
|
|
4962
4936
|
Ba,
|
|
4963
4937
|
Va,
|
|
4964
4938
|
Ya,
|
|
@@ -4971,66 +4945,61 @@ const Ue = [
|
|
|
4971
4945
|
pn,
|
|
4972
4946
|
gn,
|
|
4973
4947
|
fn,
|
|
4974
|
-
wn,
|
|
4975
4948
|
An,
|
|
4976
4949
|
xn,
|
|
4977
4950
|
kn,
|
|
4978
4951
|
Sn,
|
|
4979
4952
|
In,
|
|
4980
4953
|
En,
|
|
4981
|
-
Ln,
|
|
4982
4954
|
qn,
|
|
4955
|
+
Ln,
|
|
4983
4956
|
Rn,
|
|
4984
4957
|
Cn,
|
|
4985
|
-
|
|
4986
|
-
|
|
4987
|
-
rn,
|
|
4958
|
+
Tn,
|
|
4959
|
+
$n,
|
|
4988
4960
|
Pn,
|
|
4961
|
+
rn,
|
|
4962
|
+
Hn,
|
|
4989
4963
|
// Links
|
|
4990
|
-
zn,
|
|
4991
4964
|
jn,
|
|
4992
|
-
|
|
4965
|
+
Un,
|
|
4966
|
+
Vn,
|
|
4993
4967
|
// Language
|
|
4994
|
-
|
|
4968
|
+
_n,
|
|
4969
|
+
Kn,
|
|
4970
|
+
Jn,
|
|
4995
4971
|
Qn,
|
|
4972
|
+
// Tables
|
|
4996
4973
|
Zn,
|
|
4997
4974
|
ei,
|
|
4998
|
-
// Tables
|
|
4999
4975
|
ti,
|
|
5000
4976
|
ai,
|
|
5001
4977
|
ni,
|
|
4978
|
+
// Parsing
|
|
5002
4979
|
ii,
|
|
4980
|
+
// Media
|
|
5003
4981
|
si,
|
|
5004
|
-
// Parsing
|
|
5005
4982
|
oi,
|
|
5006
|
-
// Media
|
|
5007
|
-
ri,
|
|
5008
|
-
li,
|
|
5009
4983
|
// Color
|
|
5010
|
-
|
|
5011
|
-
|
|
5012
|
-
],
|
|
4984
|
+
yi,
|
|
4985
|
+
wi
|
|
4986
|
+
], ki = /* @__PURE__ */ new Set([
|
|
5013
4987
|
// No ACT mapping; disabled due to known precision issues
|
|
5014
4988
|
"accesslint-059",
|
|
5015
4989
|
"accesslint-068",
|
|
5016
4990
|
"accesslint-070",
|
|
5017
|
-
"accesslint-049",
|
|
5018
|
-
"accesslint-048",
|
|
5019
|
-
"accesslint-079",
|
|
5020
|
-
"accesslint-046",
|
|
5021
|
-
"accesslint-047",
|
|
5022
4991
|
"accesslint-086"
|
|
5023
4992
|
]);
|
|
5024
4993
|
let re = [], Oe = /* @__PURE__ */ new Set(), Be = /* @__PURE__ */ new Set(), E, D;
|
|
5025
|
-
function
|
|
4994
|
+
function Li(t) {
|
|
5026
4995
|
t.additionalRules && (re = t.additionalRules), t.disabledRules && (Oe = new Set(t.disabledRules)), t.enabledRules && (Be = new Set(t.enabledRules)), "locale" in t && (E = t.locale || void 0), D = void 0;
|
|
5027
4996
|
}
|
|
5028
4997
|
function le() {
|
|
5029
4998
|
if (D) return D;
|
|
5030
|
-
const a =
|
|
4999
|
+
const a = We.filter((e) => Oe.has(e.id) ? !1 : Be.has(e.id) ? !0 : !ki.has(e.id)).concat(re);
|
|
5031
5000
|
return E ? (D = ft(a, E), D) : a;
|
|
5032
5001
|
}
|
|
5033
|
-
function
|
|
5002
|
+
function Ri(t) {
|
|
5034
5003
|
Ve();
|
|
5035
5004
|
const a = le(), e = E, n = [];
|
|
5036
5005
|
let i = 0;
|
|
@@ -5054,7 +5023,7 @@ function Ti(t) {
|
|
|
5054
5023
|
function Ve() {
|
|
5055
5024
|
Qe(), Ge(), Ye(), ct(), lt(), Ze();
|
|
5056
5025
|
}
|
|
5057
|
-
function
|
|
5026
|
+
function Ci(t) {
|
|
5058
5027
|
var n;
|
|
5059
5028
|
Ve();
|
|
5060
5029
|
const a = le(), e = [];
|
|
@@ -5070,14 +5039,14 @@ function Mi(t) {
|
|
|
5070
5039
|
ruleCount: a.length
|
|
5071
5040
|
};
|
|
5072
5041
|
}
|
|
5073
|
-
const
|
|
5074
|
-
function
|
|
5042
|
+
const Si = new Map(We.map((t) => [t.id, t]));
|
|
5043
|
+
function Ti(t) {
|
|
5075
5044
|
if (E)
|
|
5076
5045
|
return le().find((n) => n.id === t);
|
|
5077
|
-
const a =
|
|
5046
|
+
const a = Si.get(t);
|
|
5078
5047
|
return a || re.find((e) => e.id === t);
|
|
5079
5048
|
}
|
|
5080
|
-
const
|
|
5049
|
+
const Mi = {
|
|
5081
5050
|
"accesslint-001": { 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." } },
|
|
5082
5051
|
"accesslint-002": { 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." } },
|
|
5083
5052
|
"accesslint-003": { 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." } },
|
|
@@ -5171,7 +5140,7 @@ const $i = {
|
|
|
5171
5140
|
"accesslint-053": { description: "Page orientation must not be restricted using CSS transforms.", guidance: "Users with motor disabilities may mount their device in a fixed orientation. Using CSS transforms with @media (orientation: portrait/landscape) to rotate content 90° effectively locks the page to one orientation. Remove the orientation-dependent transform and use responsive design instead.", messages: { "CSS locks page orientation via @media (orientation: {0}) with a 90° transform.": "CSS locks page orientation via @media (orientation: {0}) with a 90° transform." } },
|
|
5172
5141
|
"accesslint-074": { description: "Elements with a role that makes children presentational must not contain focusable content.", guidance: "Roles like button, checkbox, img, tab, and others make their children presentational — hidden from assistive technologies. If those children are focusable, keyboard users can reach elements that screen reader users cannot perceive. Move focusable content outside the parent or remove the focusability.", messages: { 'Focusable element inside a "{0}" role whose children are presentational.': 'Focusable element inside a "{0}" role whose children are presentational.' } },
|
|
5173
5142
|
"accesslint-032": { description: "Elements in sequential focus order must have a visible focus indicator.", guidance: "Keyboard users need to see which element has focus. Do not remove the default focus outline (outline: none) without providing an alternative visible indicator. Use :focus-visible or :focus styles to ensure focus is always perceivable.", messages: { "Focusable element has outline removed without a visible focus alternative.": "Focusable element has outline removed without a visible focus alternative." } }
|
|
5174
|
-
},
|
|
5143
|
+
}, Ni = {
|
|
5175
5144
|
"accesslint-001": { 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>." } },
|
|
5176
5145
|
"accesslint-002": { 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." } },
|
|
5177
5146
|
"accesslint-003": { 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." } },
|
|
@@ -5272,26 +5241,26 @@ export {
|
|
|
5272
5241
|
Qe as clearAriaHiddenCache,
|
|
5273
5242
|
ct as clearColorCaches,
|
|
5274
5243
|
Ge as clearComputedRoleCache,
|
|
5275
|
-
|
|
5276
|
-
|
|
5277
|
-
|
|
5278
|
-
|
|
5244
|
+
q as compileDeclarativeRule,
|
|
5245
|
+
Li as configureRules,
|
|
5246
|
+
Ri as createChunkedAudit,
|
|
5247
|
+
ki as defaultDisabledRuleIds,
|
|
5279
5248
|
y as getAccessibleName,
|
|
5280
5249
|
k as getAccessibleTextContent,
|
|
5281
5250
|
le as getActiveRules,
|
|
5282
5251
|
F as getComputedRole,
|
|
5283
5252
|
u as getHtmlSnippet,
|
|
5284
5253
|
Re as getImplicitRole,
|
|
5285
|
-
|
|
5254
|
+
Ti as getRuleById,
|
|
5286
5255
|
p as getSelector,
|
|
5287
5256
|
b as isAriaHidden,
|
|
5288
5257
|
Je as isValidRole,
|
|
5289
|
-
|
|
5290
|
-
|
|
5291
|
-
|
|
5292
|
-
|
|
5293
|
-
|
|
5294
|
-
|
|
5258
|
+
Mi as localeEn,
|
|
5259
|
+
Ni as localeEs,
|
|
5260
|
+
Ii as querySelectorShadowAware,
|
|
5261
|
+
Ei as registerLocale,
|
|
5262
|
+
We as rules,
|
|
5263
|
+
Ci as runAudit,
|
|
5295
5264
|
Me as translateViolations,
|
|
5296
|
-
|
|
5265
|
+
qi as validateDeclarativeRule
|
|
5297
5266
|
};
|