@wcag-checkr/ci 1.0.6 → 1.0.7
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/assets/{ErrorBoundary-BUfYkgHC.js → ErrorBoundary-BR92Lj44.js} +7 -7
- package/dist/assets/{copy-ai-fixer-prompt-GJko3z85.js → copy-ai-fixer-prompt-C1_vIDjJ.js} +2 -2
- package/dist/assets/{devtools-panel-dSf5eGcb.js → devtools-panel-BLRs10mv.js} +1 -1
- package/dist/assets/{parallel-tab-flow-BA2RFhq3.js → parallel-tab-flow-CUZjStzy.js} +1 -1
- package/dist/assets/{rubric-config-client-DdzebA2H.js → rubric-config-client-CwStR9EG.js} +1 -1
- package/dist/assets/{scheduled-audit-runner-Dt5Kd0e2.js → scheduled-audit-runner-J6cea_BZ.js} +154 -147
- package/dist/assets/{service-worker.ts-DWuUAcja.js → service-worker.ts-D7lljTTB.js} +2 -2
- package/dist/assets/{side-panel-CGBuTVjL.js → side-panel-CINviz_y.js} +3 -3
- package/dist/assets/{site-report-renderer-B5PQ3qCU.js → site-report-renderer-xmbCubzM.js} +54 -50
- package/dist/devtools/panel.html +3 -3
- package/dist/manifest.json +1 -1
- package/dist/service-worker-loader.js +1 -1
- package/dist/side-panel/side-panel.html +5 -5
- package/package.json +1 -1
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import{aT as C,_ as y,aU as R,aV as S,G as F}from"./scheduled-audit-runner-
|
|
1
|
+
import{aT as C,_ as y,aU as R,aV as S,G as F,aW as I,aX as G}from"./scheduled-audit-runner-J6cea_BZ.js";import"./preload-helper-D7HrI6pR.js";import"./crash-reporter-KD5f4utB.js";import"./diff-Dc5xUcCG.js";import"./ai-usage-log-CYuyLsU4.js";const x={A:"#15803d",B:"#4d7c0f",C:"#a16207",D:"#dc2626",F:"#7f1d1d"},D={low:"#15803d",moderate:"#a16207",high:"#dc2626",critical:"#7f1d1d"},f={critical:"#7f1d1d",serious:"#dc2626",moderate:"#a16207",minor:"#4d7c0f"},$={critical:"#fca5a5",serious:"#fdba74",moderate:"#fcd34d",minor:"#bef264"};function i(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function v(e){if(e<1e3)return`${e}ms`;const t=Math.round(e/100)/10;if(t<60)return`${t}s`;const a=Math.floor(t/60),s=Math.round(t-a*60);return`${a}m ${s}s`}function O(e){return`<span style="display:inline-block;background:${x[e]};color:#fff;font-weight:700;padding:2px 10px;border-radius:4px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;">${e}</span>`}const u={A:"#047857",C:"#a16207",D:"#c2410c",F:"#be123c"};function T(e){return`<span style="display:inline-block;background:${u[e]};color:#fff;font-weight:700;padding:2px 10px;border-radius:4px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;">${e}</span>`}function L(e){return y(e.findingGroups??[]).map(t=>{const a=[...new Set(t.pages.map(s=>s.url))];return{ruleId:t.ruleId,description:t.axeDescription,impact:t.impact,urlsAffected:a.length,totalOccurrences:t.totalOccurrences,sampleUrls:a.slice(0,5)}}).sort((t,a)=>a.urlsAffected-t.urlsAffected||a.totalOccurrences-t.totalOccurrences)}function h(e){return`<span style="display:inline-block;background:${D[e]};color:#fff;font-weight:600;padding:2px 10px;border-radius:12px;font-size:11px;text-transform:uppercase;letter-spacing:0.05em;">${e}</span>`}function _(e){return`<span style="display:inline-block;background:${f[e]};color:#fff;font-weight:600;padding:1px 8px;border-radius:10px;font-size:11px;">${e}</span>`}function U(e,t){var s;const a=`
|
|
2
2
|
${e.pagesAudited} page${e.pagesAudited===1?"":"s"} audited
|
|
3
3
|
${e.pagesFailed>0?`· <span style="color:#fca5a5;">${e.pagesFailed} failed</span>`:""}
|
|
4
4
|
· ${v(e.totalDurationMs)}
|
|
5
|
-
· started ${new Date(e.startedAt).toLocaleString()}`;if(t){const
|
|
5
|
+
· started ${new Date(e.startedAt).toLocaleString()}`;if(t){const n=y(e.findingGroups??[]),p={critical:0,serious:0,moderate:0,minor:0};for(const o of n)p[o.impact]+=1;return`
|
|
6
6
|
<section style="background:#0f172a;color:#fff;padding:32px 40px;border-radius:8px;margin-bottom:24px;">
|
|
7
7
|
<div style="display:flex;align-items:flex-start;justify-content:space-between;gap:24px;flex-wrap:wrap;">
|
|
8
8
|
<div>
|
|
9
9
|
<p style="margin:0 0 8px;font-size:13px;color:#94a3b8;text-transform:uppercase;letter-spacing:0.08em;">Lawsuit-target risk · whole site</p>
|
|
10
|
-
<h1 style="margin:0 0 6px;font-size:24px;">${
|
|
10
|
+
<h1 style="margin:0 0 6px;font-size:24px;">${i(e.startUrl)}</h1>
|
|
11
11
|
<p style="margin:0;font-size:13px;color:#cbd5e1;">${a}</p>
|
|
12
12
|
</div>
|
|
13
13
|
<div style="text-align:right;">
|
|
@@ -24,11 +24,11 @@ import{aT as C,_ as y,aU as R,aV as S,G as F}from"./scheduled-audit-runner-Dt5Kd
|
|
|
24
24
|
`).join("")}
|
|
25
25
|
<div style="background:#1e293b;padding:10px 14px;border-radius:6px;">
|
|
26
26
|
<div style="font-size:11px;color:#94a3b8;text-transform:uppercase;letter-spacing:0.06em;">Lawsuit-target findings</div>
|
|
27
|
-
<div style="font-size:24px;font-weight:700;color:${
|
|
27
|
+
<div style="font-size:24px;font-weight:700;color:${n.length>0?"#fca5a5":"#fff"};">${n.length}</div>
|
|
28
28
|
</div>
|
|
29
29
|
</div>
|
|
30
30
|
<p style="margin:18px 0 0;font-size:12px;color:#cbd5e1;line-height:1.5;">
|
|
31
|
-
<strong>${
|
|
31
|
+
<strong>${i(t.tier)} risk.</strong> ${i(t.headline)}<br/>
|
|
32
32
|
This is a <strong>lawsuit-target exposure</strong> grade — how easily automated demand-letter scanners flag this site — <strong>not</strong> a WCAG conformance grade. For a full WCAG 2.1 AA assessment across every criterion, switch to Power or Dev mode in the extension.
|
|
33
33
|
</p>
|
|
34
34
|
</section>
|
|
@@ -37,7 +37,7 @@ import{aT as C,_ as y,aU as R,aV as S,G as F}from"./scheduled-audit-runner-Dt5Kd
|
|
|
37
37
|
<div style="display:flex;align-items:flex-start;justify-content:space-between;gap:24px;flex-wrap:wrap;">
|
|
38
38
|
<div>
|
|
39
39
|
<p style="margin:0 0 8px;font-size:13px;color:#94a3b8;text-transform:uppercase;letter-spacing:0.08em;">Site-wide audit</p>
|
|
40
|
-
<h1 style="margin:0 0 6px;font-size:24px;">${
|
|
40
|
+
<h1 style="margin:0 0 6px;font-size:24px;">${i(e.startUrl)}</h1>
|
|
41
41
|
<p style="margin:0;font-size:13px;color:#cbd5e1;">${a}</p>
|
|
42
42
|
</div>
|
|
43
43
|
<div style="text-align:right;">
|
|
@@ -46,10 +46,10 @@ import{aT as C,_ as y,aU as R,aV as S,G as F}from"./scheduled-audit-runner-Dt5Kd
|
|
|
46
46
|
</div>
|
|
47
47
|
</div>
|
|
48
48
|
<div style="margin-top:20px;display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:12px;">
|
|
49
|
-
${["critical","serious","moderate","minor"].map(
|
|
49
|
+
${["critical","serious","moderate","minor"].map(n=>`
|
|
50
50
|
<div style="background:#1e293b;padding:10px 14px;border-radius:6px;">
|
|
51
|
-
<div style="font-size:11px;color:#94a3b8;text-transform:uppercase;letter-spacing:0.06em;">${
|
|
52
|
-
<div style="font-size:24px;font-weight:700;color:${$[
|
|
51
|
+
<div style="font-size:11px;color:#94a3b8;text-transform:uppercase;letter-spacing:0.06em;">${n}</div>
|
|
52
|
+
<div style="font-size:24px;font-weight:700;color:${$[n]};">${e.totals[n]}</div>
|
|
53
53
|
</div>
|
|
54
54
|
`).join("")}
|
|
55
55
|
<div style="background:#1e293b;padding:10px 14px;border-radius:6px;">
|
|
@@ -62,25 +62,29 @@ import{aT as C,_ as y,aU as R,aV as S,G as F}from"./scheduled-audit-runner-Dt5Kd
|
|
|
62
62
|
</div>
|
|
63
63
|
</div>
|
|
64
64
|
<p style="margin:18px 0 0;font-size:12px;color:#cbd5e1;line-height:1.5;">
|
|
65
|
-
<strong>Grade:</strong> ${
|
|
66
|
-
<strong>Risk:</strong> ${
|
|
65
|
+
<strong>Grade:</strong> ${i(R(e.siteGrade,{moderateCount:e.totals.moderate,blockingCriteriaCount:((s=e.blockingCriteria)==null?void 0:s.length)??0}))}<br/>
|
|
66
|
+
<strong>Risk:</strong> ${i(S[e.siteRisk])}
|
|
67
67
|
</p>
|
|
68
68
|
<p style="margin:14px 0 0;padding:12px 14px;background:#0f172a;border:1px solid #334155;border-radius:6px;font-size:11px;color:#94a3b8;line-height:1.6;">
|
|
69
|
-
${
|
|
69
|
+
${i(F)}
|
|
70
|
+
</p>
|
|
71
|
+
<p style="margin:10px 0 0;font-size:12px;color:#cbd5e1;">
|
|
72
|
+
<strong>Audit rigor:</strong> ${i(I(e.auditSettings))}
|
|
73
|
+
${G(e.auditSettings)?'<br/><span style="color:#fca5a5;font-weight:600;">⚠ Thin audit — single state, single run, or AI off. This grade reflects a LIMITED audit; a fuller run surfaces more. Not a thorough conformance assessment.</span>':""}
|
|
70
74
|
</p>
|
|
71
75
|
</section>
|
|
72
|
-
`}function
|
|
76
|
+
`}function j(e,t=!1){const a=t?"Top lawsuit-target findings":"Top site-wide violations";if(e.length===0)return`
|
|
73
77
|
<section style="margin-bottom:24px;">
|
|
74
78
|
<h2 style="margin:0 0 8px;font-size:18px;">${a}</h2>
|
|
75
79
|
<p style="color:#16a34a;font-weight:500;">${t?"No findings of the kind automated demand-letter scanners commonly flag (missing alt text, low contrast, unlabeled controls, missing page language/title, link/button names). That keeps this site off the easy-target list — but it is not a WCAG conformance claim. For a full WCAG 2.1 AA assessment across every criterion, switch to Power or Dev mode.":"No violations detected across the layers that ran: axe-core (rule-based automation), wcagcheckr DOM analyzers (state-matrix + structural heuristics), AI walkthroughs (keyboard / vision / DOM-walk over 6 hard-to-automate criteria), and cross-page comparators (consistency criteria on crawls). All 50 applicable WCAG 2.1 AA criteria have at least one evaluation path here. Some criteria still benefit from human spot-checks: caption accuracy, audio-description quality, sensory cues, and complex screen-reader narrative — see the manual checklist if pursuing a formal conformance claim."}</p>
|
|
76
80
|
</section>
|
|
77
|
-
`;const s=e.slice(0,20).map(
|
|
81
|
+
`;const s=e.slice(0,20).map(n=>`
|
|
78
82
|
<tr style="border-top:1px solid #e2e8f0;">
|
|
79
|
-
<td style="padding:8px 12px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;">${n
|
|
80
|
-
<td style="padding:8px 12px;">${
|
|
81
|
-
<td style="padding:8px 12px;text-align:right;font-weight:600;">${
|
|
82
|
-
<td style="padding:8px 12px;text-align:right;">${
|
|
83
|
-
<td style="padding:8px 12px;font-size:13px;color:#475569;">${n
|
|
83
|
+
<td style="padding:8px 12px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;">${i(n.ruleId)}</td>
|
|
84
|
+
<td style="padding:8px 12px;">${_(n.impact)}</td>
|
|
85
|
+
<td style="padding:8px 12px;text-align:right;font-weight:600;">${n.urlsAffected}</td>
|
|
86
|
+
<td style="padding:8px 12px;text-align:right;">${n.totalOccurrences}</td>
|
|
87
|
+
<td style="padding:8px 12px;font-size:13px;color:#475569;">${i(n.description)}</td>
|
|
84
88
|
</tr>
|
|
85
89
|
`).join("");return`
|
|
86
90
|
<section style="margin-bottom:24px;">
|
|
@@ -101,33 +105,33 @@ import{aT as C,_ as y,aU as R,aV as S,G as F}from"./scheduled-audit-runner-Dt5Kd
|
|
|
101
105
|
<tbody>${s}</tbody>
|
|
102
106
|
</table>
|
|
103
107
|
</section>
|
|
104
|
-
`}function
|
|
108
|
+
`}function W(e,t,a){const s=new Map;for(const o of t)if(!o.needsReview)for(const d of o.pages){const r=s.get(d.url)??[];r.push({ruleId:o.ruleId,impact:o.impact,selector:d.selector,description:o.axeDescription,wcagCriterion:o.wcagCriterion}),s.set(d.url,r)}const n={critical:0,serious:1,moderate:2,minor:3};for(const o of s.values())o.sort((d,r)=>(n[d.impact]??99)-(n[r.impact]??99));const p=e.map((o,d)=>{const r=s.get(o.url)??[],c=a?[]:o.walkthroughFindings??[],g=a?[]:o.walkthroughAcknowledgements??[],m=r.length+c.length>0||g.length>0||!!o.error,b=`
|
|
105
109
|
<summary style="cursor:${m?"pointer":"default"};list-style:${m?"revert":"none"};padding:10px 12px;display:flex;align-items:center;gap:12px;border-top:1px solid #e2e8f0;">
|
|
106
110
|
<span style="color:#64748b;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;min-width:28px;">${d+1}</span>
|
|
107
|
-
${a?
|
|
111
|
+
${a?T(a.perUrlLetter[o.url]??"A"):O(o.grade)}
|
|
108
112
|
${a?"":h(o.risk)}
|
|
109
113
|
<!-- rc.390 — URL is plain text here (the page-open link moved into the
|
|
110
114
|
expanded detail). An <a> inside <summary> is nested-interactive +
|
|
111
115
|
a sub-24px touch target. -->
|
|
112
116
|
<span
|
|
113
117
|
style="font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;color:#475569;flex:1;word-break:break-all;"
|
|
114
|
-
>${
|
|
118
|
+
>${i(o.url)}</span>
|
|
115
119
|
<span style="font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;color:#475569;white-space:nowrap;">
|
|
116
120
|
${r.length>0?`<strong style="color:#b91c1c;">${r.length} axe</strong>`:'<span style="color:#475569;">0 axe</span>'}
|
|
117
121
|
${c.length>0?` · <strong style="color:#b91c1c;">${c.length} walkthru</strong>`:g.length>0?` · <span style="color:#15803d;">${g.length} ✓ack</span>`:""}
|
|
118
122
|
</span>
|
|
119
123
|
<span style="color:#475569;font-size:11px;white-space:nowrap;">${v(o.durationMs)}</span>
|
|
120
|
-
</summary>`;if(!m)return`<details>${b}</details>`;const w=o.error?`<p style="color:#dc2626;font-size:13px;margin:0;padding:8px 12px 0;">⚠ ${
|
|
124
|
+
</summary>`;if(!m)return`<details>${b}</details>`;const w=o.error?`<p style="color:#dc2626;font-size:13px;margin:0;padding:8px 12px 0;">⚠ ${i(o.error)}</p>`:"",k=r.length===0?"":`
|
|
121
125
|
<h4 style="margin:12px 12px 4px;font-size:13px;color:#475569;">Axe findings (${r.length})</h4>
|
|
122
126
|
<ul style="margin:0;padding:0 12px 8px 28px;font-size:12px;line-height:1.5;">
|
|
123
127
|
${r.map(l=>`
|
|
124
128
|
<li style="margin-bottom:4px;">
|
|
125
|
-
<span style="display:inline-block;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-weight:600;color:${f[l.impact]??"#475569"};margin-right:6px;">${
|
|
126
|
-
<code style="background:#f1f5f9;padding:1px 4px;border-radius:2px;">${
|
|
127
|
-
${l.wcagCriterion?` · <span style="color:#64748b;">${
|
|
129
|
+
<span style="display:inline-block;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-weight:600;color:${f[l.impact]??"#475569"};margin-right:6px;">${i(l.impact)}</span>
|
|
130
|
+
<code style="background:#f1f5f9;padding:1px 4px;border-radius:2px;">${i(l.ruleId)}</code>
|
|
131
|
+
${l.wcagCriterion?` · <span style="color:#64748b;">${i(l.wcagCriterion)}</span>`:""}
|
|
128
132
|
<br>
|
|
129
|
-
<span style="color:#475569;">${
|
|
130
|
-
<code style="font-size:11px;color:#475569;word-break:break-all;">${
|
|
133
|
+
<span style="color:#475569;">${i(l.description)}</span><br>
|
|
134
|
+
<code style="font-size:11px;color:#475569;word-break:break-all;">${i(l.selector)}</code>
|
|
131
135
|
</li>
|
|
132
136
|
`).join("")}
|
|
133
137
|
</ul>`,A=c.length===0?"":`
|
|
@@ -135,21 +139,21 @@ import{aT as C,_ as y,aU as R,aV as S,G as F}from"./scheduled-audit-runner-Dt5Kd
|
|
|
135
139
|
<ul style="margin:0;padding:0 12px 8px 28px;font-size:12px;line-height:1.5;">
|
|
136
140
|
${c.map(l=>`
|
|
137
141
|
<li style="margin-bottom:6px;">
|
|
138
|
-
<span style="display:inline-block;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-weight:600;color:${l.verdict==="fail"?f.serious:f.moderate};margin-right:6px;">${
|
|
139
|
-
<code style="background:#f1f5f9;padding:1px 4px;border-radius:2px;">${
|
|
142
|
+
<span style="display:inline-block;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-weight:600;color:${l.verdict==="fail"?f.serious:f.moderate};margin-right:6px;">${i(l.verdict)}</span>
|
|
143
|
+
<code style="background:#f1f5f9;padding:1px 4px;border-radius:2px;">${i(l.criterionId)}</code>
|
|
140
144
|
<br>
|
|
141
|
-
<span style="color:#475569;">${
|
|
145
|
+
<span style="color:#475569;">${i(l.reasoning)}</span>
|
|
142
146
|
</li>
|
|
143
147
|
`).join("")}
|
|
144
148
|
</ul>`,z=g.length===0?"":`
|
|
145
149
|
<h4 style="margin:12px 12px 4px;font-size:13px;color:#059669;">Human verified (${g.length})</h4>
|
|
146
150
|
<ul style="margin:0;padding:0 12px 8px 28px;font-size:12px;line-height:1.5;color:#065f46;">
|
|
147
151
|
${g.map(l=>`
|
|
148
|
-
<li><code style="background:#ecfdf5;padding:1px 4px;border-radius:2px;">${
|
|
152
|
+
<li><code style="background:#ecfdf5;padding:1px 4px;border-radius:2px;">${i(l.criterionId)}</code> — original AI verdict: ${i(l.verdict)}; human verification recorded.</li>
|
|
149
153
|
`).join("")}
|
|
150
154
|
</ul>`,M=`
|
|
151
155
|
<div style="padding:8px 12px 12px;font-size:12px;color:#475569;">
|
|
152
|
-
<a href="${
|
|
156
|
+
<a href="${i(o.url)}" target="_blank" rel="noopener noreferrer"
|
|
153
157
|
style="color:#1d4ed8;font-weight:600;display:inline-block;padding:4px 0;">Open this page in a new tab →</a><br>
|
|
154
158
|
Then use the wcagcheckr side panel for per-finding acknowledgements and re-runs.
|
|
155
159
|
</div>`;return`
|
|
@@ -174,7 +178,7 @@ import{aT as C,_ as y,aU as R,aV as S,G as F}from"./scheduled-audit-runner-Dt5Kd
|
|
|
174
178
|
${p}
|
|
175
179
|
</div>
|
|
176
180
|
</section>
|
|
177
|
-
`}function
|
|
181
|
+
`}function E(e){const t=e.blockingCriteria??[];if(t.length===0)return"";const a={untested:{label:"no evidence",bg:"#64748b"},inconclusive:{label:"inconclusive",bg:"#a16207"},failing:{label:"failing",bg:"#dc2626"}};return`
|
|
178
182
|
<section style="margin-top:24px;padding:16px 18px;border:1px solid #cbd5e1;border-radius:8px;background:#f8fafc;">
|
|
179
183
|
<h2 style="margin:0 0 8px;font-size:16px;color:#0f172a;">
|
|
180
184
|
Criteria still needing your judgment
|
|
@@ -184,17 +188,17 @@ import{aT as C,_ as y,aU as R,aV as S,G as F}from"./scheduled-audit-runner-Dt5Kd
|
|
|
184
188
|
These WCAG 2.1 AA criteria do not yet have affirmative pass/N/A evidence. Open the extension side panel and expand the "Coverage gaps" panel under the grade to record a verdict for each. Once every blocker has a verdict, the site grade lifts to A.
|
|
185
189
|
</p>
|
|
186
190
|
<ol style="margin:0;padding-left:18px;font-size:12px;color:#0f172a;">
|
|
187
|
-
${t.map(s=>{const
|
|
188
|
-
<span style="display:inline-block;padding:1px 6px;border-radius:3px;background:${
|
|
189
|
-
<code style="font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;">WCAG ${
|
|
190
|
-
<span style="color:#334155;">— ${
|
|
191
|
+
${t.map(s=>{const n=a[s.state];return`<li style="margin-bottom:6px;">
|
|
192
|
+
<span style="display:inline-block;padding:1px 6px;border-radius:3px;background:${n.bg};color:#fff;font-size:10px;font-weight:600;text-transform:lowercase;">${i(n.label)}</span>
|
|
193
|
+
<code style="font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;">WCAG ${i(s.criterionId)}</code>
|
|
194
|
+
<span style="color:#334155;">— ${i(s.title)}</span>
|
|
191
195
|
</li>`}).join("")}
|
|
192
196
|
</ol>
|
|
193
197
|
</section>
|
|
194
|
-
`}function
|
|
198
|
+
`}function B(e,t){const a=e.pages.length||1;if(t){const n={A:0,C:0,D:0,F:0};for(const o of e.pages)n[t.perUrlLetter[o.url]??"A"]+=1;return`
|
|
195
199
|
<section style="margin-bottom:24px;">
|
|
196
200
|
<h2 style="margin:0 0 8px;font-size:18px;">Pages by lawsuit-target grade</h2>
|
|
197
|
-
${["A","C","D","F"].map(o=>{const d=
|
|
201
|
+
${["A","C","D","F"].map(o=>{const d=n[o],r=d/a*100;return`
|
|
198
202
|
<div style="display:flex;align-items:center;gap:10px;font-size:13px;margin:4px 0;">
|
|
199
203
|
<div style="width:24px;font-weight:700;color:${u[o]};font-family:ui-monospace,SFMono-Regular,Menlo,monospace;">${o}</div>
|
|
200
204
|
<div style="flex:1;background:#e2e8f0;border-radius:3px;height:18px;overflow:hidden;">
|
|
@@ -206,18 +210,18 @@ import{aT as C,_ as y,aU as R,aV as S,G as F}from"./scheduled-audit-runner-Dt5Kd
|
|
|
206
210
|
`}return`
|
|
207
211
|
<section style="margin-bottom:24px;">
|
|
208
212
|
<h2 style="margin:0 0 8px;font-size:18px;">Pages by grade</h2>
|
|
209
|
-
${["A","B","C","D","F"].map(
|
|
213
|
+
${["A","B","C","D","F"].map(n=>{const p=e.pagesByGrade[n],o=p/a*100;return`
|
|
210
214
|
<div style="display:flex;align-items:center;gap:10px;font-size:13px;margin:4px 0;">
|
|
211
|
-
<div style="width:24px;font-weight:700;color:${x[
|
|
215
|
+
<div style="width:24px;font-weight:700;color:${x[n]};font-family:ui-monospace,SFMono-Regular,Menlo,monospace;">${n}</div>
|
|
212
216
|
<div style="flex:1;background:#e2e8f0;border-radius:3px;height:18px;overflow:hidden;">
|
|
213
|
-
<div style="height:100%;width:${o}%;background:${x[
|
|
217
|
+
<div style="height:100%;width:${o}%;background:${x[n]};"></div>
|
|
214
218
|
</div>
|
|
215
219
|
<div style="width:60px;text-align:right;color:#475569;">${p} page${p===1?"":"s"}</div>
|
|
216
220
|
</div>
|
|
217
221
|
`}).join("")}
|
|
218
222
|
</section>
|
|
219
|
-
`}function
|
|
220
|
-
<br/>This report covers <strong>only</strong> the issues automated demand-letter scanners commonly flag (the lawsuit-target lens). It is <strong>not</strong> a WCAG 2.1 AA conformance assessment — for that, switch the extension to Power or Dev mode, which grades every applicable criterion across all pages.`:`Generated by wcagcheckr · site-mode crawl from ${
|
|
223
|
+
`}function X(e,t,a){const s=t?`Lawsuit-target risk · ${i(e.startUrl)}`:`WCAG site audit · ${i(e.startUrl)}`,n=t?L(e):e.topViolations,p=t?"":E(e),o=t?"":C(a??[],i),d=t?y(e.findingGroups??[]):e.findingGroups??[],r=t?`Generated by wcagcheckr · owner / lawsuit-target lens · site-mode crawl from ${i(e.startUrl)} · finished ${new Date(e.finishedAt).toLocaleString()}.
|
|
224
|
+
<br/>This report covers <strong>only</strong> the issues automated demand-letter scanners commonly flag (the lawsuit-target lens). It is <strong>not</strong> a WCAG 2.1 AA conformance assessment — for that, switch the extension to Power or Dev mode, which grades every applicable criterion across all pages.`:`Generated by wcagcheckr · site-mode crawl from ${i(e.startUrl)} · finished ${new Date(e.finishedAt).toLocaleString()}.
|
|
221
225
|
<br/>Three evaluation layers: <strong>axe-core</strong> (rule-based automation), <strong>wcagcheckr DOM analyzers</strong> (state-matrix iteration + structural heuristics for criteria axe doesn't cover), and <strong>AI walkthroughs</strong> (real keyboard input + screenshot-by-screenshot judgment for the 6 criteria neither rule-based nor static-DOM analysis can decide). All 50 applicable WCAG 2.1 AA criteria have an evaluation path here; criteria that depend on content meaning — caption accuracy, audio-description quality, alt-text semantic correctness, complex screen-reader narrative — benefit from human spot-checks before a formal conformance claim. See MANUAL_A11Y_CHECKLIST.md for the recommended human checks.`;return`<!doctype html>
|
|
222
226
|
<html lang="en">
|
|
223
227
|
<head>
|
|
@@ -238,15 +242,15 @@ import{aT as C,_ as y,aU as R,aV as S,G as F}from"./scheduled-audit-runner-Dt5Kd
|
|
|
238
242
|
</head>
|
|
239
243
|
<body>
|
|
240
244
|
<main class="container">
|
|
241
|
-
${
|
|
242
|
-
${
|
|
245
|
+
${U(e,t)}
|
|
246
|
+
${j(n,!!t)}
|
|
243
247
|
${p}
|
|
244
248
|
${o}
|
|
245
|
-
${
|
|
246
|
-
${
|
|
249
|
+
${B(e,t)}
|
|
250
|
+
${W(e.pages,d,t)}
|
|
247
251
|
<footer style="margin-top:32px;padding-top:16px;border-top:1px solid #e2e8f0;color:#475569;font-size:12px;">
|
|
248
252
|
${r}
|
|
249
253
|
</footer>
|
|
250
254
|
</main>
|
|
251
255
|
</body>
|
|
252
|
-
</html>`}export{
|
|
256
|
+
</html>`}export{X as renderSiteReportHtml};
|
package/dist/devtools/panel.html
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="UTF-8" />
|
|
5
5
|
<title>wcagcheckr</title>
|
|
6
|
-
<script type="module" crossorigin src="/assets/devtools-panel-
|
|
6
|
+
<script type="module" crossorigin src="/assets/devtools-panel-BLRs10mv.js"></script>
|
|
7
7
|
<link rel="modulepreload" crossorigin href="/assets/modulepreload-polyfill-B5Qt9EMX.js">
|
|
8
8
|
<link rel="modulepreload" crossorigin href="/assets/_commonjsHelpers-Cpj98o6Y.js">
|
|
9
9
|
<link rel="modulepreload" crossorigin href="/assets/crash-reporter-KD5f4utB.js">
|
|
@@ -11,9 +11,9 @@
|
|
|
11
11
|
<link rel="modulepreload" crossorigin href="/assets/styles-CLV9y-Ki.js">
|
|
12
12
|
<link rel="modulepreload" crossorigin href="/assets/preload-helper-D7HrI6pR.js">
|
|
13
13
|
<link rel="modulepreload" crossorigin href="/assets/diff-Dc5xUcCG.js">
|
|
14
|
-
<link rel="modulepreload" crossorigin href="/assets/scheduled-audit-runner-
|
|
14
|
+
<link rel="modulepreload" crossorigin href="/assets/scheduled-audit-runner-J6cea_BZ.js">
|
|
15
15
|
<link rel="modulepreload" crossorigin href="/assets/design-system-audit-DpxJrxnb.js">
|
|
16
|
-
<link rel="modulepreload" crossorigin href="/assets/ErrorBoundary-
|
|
16
|
+
<link rel="modulepreload" crossorigin href="/assets/ErrorBoundary-BR92Lj44.js">
|
|
17
17
|
<link rel="stylesheet" crossorigin href="/assets/styles-BJICDw6s.css">
|
|
18
18
|
</head>
|
|
19
19
|
<body class="bg-slate-50">
|
package/dist/manifest.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"manifest_version": 3,
|
|
3
3
|
"name": "wcagcheckr",
|
|
4
4
|
"description": "Audit your real site for WCAG issues across hover, focus, dark mode & RTL states — baselines surface only NEW violations.",
|
|
5
|
-
"version": "1.0.
|
|
5
|
+
"version": "1.0.7",
|
|
6
6
|
"author": "Locustware",
|
|
7
7
|
"homepage_url": "https://wcagcheckr.com",
|
|
8
8
|
"icons": {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import './assets/service-worker.ts-
|
|
1
|
+
import './assets/service-worker.ts-D7lljTTB.js';
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
<meta charset="UTF-8" />
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
6
|
<title>WCAG Component Auditor</title>
|
|
7
|
-
<script type="module" crossorigin src="/assets/side-panel-
|
|
7
|
+
<script type="module" crossorigin src="/assets/side-panel-CINviz_y.js"></script>
|
|
8
8
|
<link rel="modulepreload" crossorigin href="/assets/modulepreload-polyfill-B5Qt9EMX.js">
|
|
9
9
|
<link rel="modulepreload" crossorigin href="/assets/_commonjsHelpers-Cpj98o6Y.js">
|
|
10
10
|
<link rel="modulepreload" crossorigin href="/assets/crash-reporter-KD5f4utB.js">
|
|
@@ -12,12 +12,12 @@
|
|
|
12
12
|
<link rel="modulepreload" crossorigin href="/assets/styles-CLV9y-Ki.js">
|
|
13
13
|
<link rel="modulepreload" crossorigin href="/assets/preload-helper-D7HrI6pR.js">
|
|
14
14
|
<link rel="modulepreload" crossorigin href="/assets/diff-Dc5xUcCG.js">
|
|
15
|
-
<link rel="modulepreload" crossorigin href="/assets/scheduled-audit-runner-
|
|
15
|
+
<link rel="modulepreload" crossorigin href="/assets/scheduled-audit-runner-J6cea_BZ.js">
|
|
16
16
|
<link rel="modulepreload" crossorigin href="/assets/design-system-audit-DpxJrxnb.js">
|
|
17
|
-
<link rel="modulepreload" crossorigin href="/assets/ErrorBoundary-
|
|
18
|
-
<link rel="modulepreload" crossorigin href="/assets/copy-ai-fixer-prompt-
|
|
17
|
+
<link rel="modulepreload" crossorigin href="/assets/ErrorBoundary-BR92Lj44.js">
|
|
18
|
+
<link rel="modulepreload" crossorigin href="/assets/copy-ai-fixer-prompt-C1_vIDjJ.js">
|
|
19
19
|
<link rel="modulepreload" crossorigin href="/assets/tier-config-client-CT-oOti3.js">
|
|
20
|
-
<link rel="modulepreload" crossorigin href="/assets/rubric-config-client-
|
|
20
|
+
<link rel="modulepreload" crossorigin href="/assets/rubric-config-client-CwStR9EG.js">
|
|
21
21
|
<link rel="stylesheet" crossorigin href="/assets/styles-BJICDw6s.css">
|
|
22
22
|
<link rel="stylesheet" crossorigin href="/assets/side-panel-Cq-w2yTn.css">
|
|
23
23
|
</head>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wcag-checkr/ci",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.7",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Headless wcagcheckr accessibility audit runner for CI/CD pipelines. Drives the wcagcheckr Chrome extension via Playwright, runs full-page audits across the state matrix (108 combinations: hover, focus, dark mode, RTL, breakpoints), outputs JSON / SARIF / JUnit, exits with severity-aware codes.",
|
|
6
6
|
"license": "UNLICENSED",
|