@wcag-checkr/ci 1.0.5 → 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-BEvsunVd.js → ErrorBoundary-BR92Lj44.js} +7 -7
- package/dist/assets/{content-script.ts-DYFeeoQ7.js → content-script.ts-CsBWyYDh.js} +1 -1
- package/dist/assets/{content-script.ts-loader-BfRK3cgW.js → content-script.ts-loader-H5dU9ywW.js} +1 -1
- package/dist/assets/{copy-ai-fixer-prompt-BGVCe4rw.js → copy-ai-fixer-prompt-C1_vIDjJ.js} +2 -2
- package/dist/assets/{devtools-panel-u5jtM9F8.js → devtools-panel-BLRs10mv.js} +1 -1
- package/dist/assets/{diff-RnwNJg4F.js → diff-Dc5xUcCG.js} +1 -1
- package/dist/assets/{parallel-tab-flow-BkUw-Upm.js → parallel-tab-flow-CUZjStzy.js} +1 -1
- package/dist/assets/{rubric-config-client-BsVz-WQ6.js → rubric-config-client-CwStR9EG.js} +1 -1
- package/dist/assets/{scheduled-audit-runner-DsCClQxp.js → scheduled-audit-runner-J6cea_BZ.js} +224 -216
- package/dist/assets/{service-worker.ts-zB1w9Pur.js → service-worker.ts-D7lljTTB.js} +2 -2
- package/dist/assets/side-panel-CINviz_y.js +4 -0
- package/dist/assets/{site-report-renderer-CqDo4iRO.js → site-report-renderer-xmbCubzM.js} +71 -63
- package/dist/devtools/panel.html +4 -4
- package/dist/manifest.json +4 -4
- package/dist/service-worker-loader.js +1 -1
- package/dist/side-panel/side-panel.html +6 -6
- package/package.json +1 -1
- package/dist/assets/side-panel-BSnFvHzW.js +0 -4
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import{
|
|
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;">
|
|
@@ -19,16 +19,16 @@ import{U as y,aN as C,aO as R}from"./scheduled-audit-runner-DsCClQxp.js";import"
|
|
|
19
19
|
${["critical","serious","moderate","minor"].map(o=>`
|
|
20
20
|
<div style="background:#1e293b;padding:10px 14px;border-radius:6px;">
|
|
21
21
|
<div style="font-size:11px;color:#94a3b8;text-transform:uppercase;letter-spacing:0.06em;">${o}</div>
|
|
22
|
-
<div style="font-size:24px;font-weight:700;color:${$[o]};">${
|
|
22
|
+
<div style="font-size:24px;font-weight:700;color:${$[o]};">${p[o]}</div>
|
|
23
23
|
</div>
|
|
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{U as y,aN as C,aO as R}from"./scheduled-audit-runner-DsCClQxp.js";import"
|
|
|
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{U as y,aN as C,aO as R}from"./scheduled-audit-runner-DsCClQxp.js";import"
|
|
|
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,22 +62,29 @@ import{U as y,aN as C,aO as R}from"./scheduled-audit-runner-DsCClQxp.js";import"
|
|
|
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
|
+
</p>
|
|
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
|
+
${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>':""}
|
|
67
74
|
</p>
|
|
68
75
|
</section>
|
|
69
|
-
`}function
|
|
76
|
+
`}function j(e,t=!1){const a=t?"Top lawsuit-target findings":"Top site-wide violations";if(e.length===0)return`
|
|
70
77
|
<section style="margin-bottom:24px;">
|
|
71
78
|
<h2 style="margin:0 0 8px;font-size:18px;">${a}</h2>
|
|
72
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>
|
|
73
80
|
</section>
|
|
74
|
-
`;const s=e.slice(0,20).map(
|
|
81
|
+
`;const s=e.slice(0,20).map(n=>`
|
|
75
82
|
<tr style="border-top:1px solid #e2e8f0;">
|
|
76
|
-
<td style="padding:8px 12px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;">${n
|
|
77
|
-
<td style="padding:8px 12px;">${
|
|
78
|
-
<td style="padding:8px 12px;text-align:right;font-weight:600;">${
|
|
79
|
-
<td style="padding:8px 12px;text-align:right;">${
|
|
80
|
-
<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>
|
|
81
88
|
</tr>
|
|
82
89
|
`).join("");return`
|
|
83
90
|
<section style="margin-bottom:24px;">
|
|
@@ -98,55 +105,55 @@ import{U as y,aN as C,aO as R}from"./scheduled-audit-runner-DsCClQxp.js";import"
|
|
|
98
105
|
<tbody>${s}</tbody>
|
|
99
106
|
</table>
|
|
100
107
|
</section>
|
|
101
|
-
`}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=`
|
|
102
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;">
|
|
103
|
-
<span style="color:#64748b;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;min-width:28px;">${
|
|
104
|
-
${a?
|
|
110
|
+
<span style="color:#64748b;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;min-width:28px;">${d+1}</span>
|
|
111
|
+
${a?T(a.perUrlLetter[o.url]??"A"):O(o.grade)}
|
|
105
112
|
${a?"":h(o.risk)}
|
|
106
113
|
<!-- rc.390 — URL is plain text here (the page-open link moved into the
|
|
107
114
|
expanded detail). An <a> inside <summary> is nested-interactive +
|
|
108
115
|
a sub-24px touch target. -->
|
|
109
116
|
<span
|
|
110
117
|
style="font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;color:#475569;flex:1;word-break:break-all;"
|
|
111
|
-
>${
|
|
118
|
+
>${i(o.url)}</span>
|
|
112
119
|
<span style="font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;color:#475569;white-space:nowrap;">
|
|
113
|
-
${
|
|
120
|
+
${r.length>0?`<strong style="color:#b91c1c;">${r.length} axe</strong>`:'<span style="color:#475569;">0 axe</span>'}
|
|
114
121
|
${c.length>0?` · <strong style="color:#b91c1c;">${c.length} walkthru</strong>`:g.length>0?` · <span style="color:#15803d;">${g.length} ✓ack</span>`:""}
|
|
115
122
|
</span>
|
|
116
123
|
<span style="color:#475569;font-size:11px;white-space:nowrap;">${v(o.durationMs)}</span>
|
|
117
|
-
</summary>`;if(!m)return`<details>${b}</details>`;const w=o.error?`<p style="color:#dc2626;font-size:13px;margin:0;padding:8px 12px 0;">⚠ ${
|
|
118
|
-
<h4 style="margin:12px 12px 4px;font-size:13px;color:#475569;">Axe findings (${
|
|
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?"":`
|
|
125
|
+
<h4 style="margin:12px 12px 4px;font-size:13px;color:#475569;">Axe findings (${r.length})</h4>
|
|
119
126
|
<ul style="margin:0;padding:0 12px 8px 28px;font-size:12px;line-height:1.5;">
|
|
120
|
-
${
|
|
127
|
+
${r.map(l=>`
|
|
121
128
|
<li style="margin-bottom:4px;">
|
|
122
|
-
<span style="display:inline-block;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-weight:600;color:${f[
|
|
123
|
-
<code style="background:#f1f5f9;padding:1px 4px;border-radius:2px;">${
|
|
124
|
-
${
|
|
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>`:""}
|
|
125
132
|
<br>
|
|
126
|
-
<span style="color:#475569;">${
|
|
127
|
-
<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>
|
|
128
135
|
</li>
|
|
129
136
|
`).join("")}
|
|
130
137
|
</ul>`,A=c.length===0?"":`
|
|
131
138
|
<h4 style="margin:12px 12px 4px;font-size:13px;color:#475569;">AI walkthrough findings (${c.length})</h4>
|
|
132
139
|
<ul style="margin:0;padding:0 12px 8px 28px;font-size:12px;line-height:1.5;">
|
|
133
|
-
${c.map(
|
|
140
|
+
${c.map(l=>`
|
|
134
141
|
<li style="margin-bottom:6px;">
|
|
135
|
-
<span style="display:inline-block;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-weight:600;color:${
|
|
136
|
-
<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>
|
|
137
144
|
<br>
|
|
138
|
-
<span style="color:#475569;">${
|
|
145
|
+
<span style="color:#475569;">${i(l.reasoning)}</span>
|
|
139
146
|
</li>
|
|
140
147
|
`).join("")}
|
|
141
148
|
</ul>`,z=g.length===0?"":`
|
|
142
149
|
<h4 style="margin:12px 12px 4px;font-size:13px;color:#059669;">Human verified (${g.length})</h4>
|
|
143
150
|
<ul style="margin:0;padding:0 12px 8px 28px;font-size:12px;line-height:1.5;color:#065f46;">
|
|
144
|
-
${g.map(
|
|
145
|
-
<li><code style="background:#ecfdf5;padding:1px 4px;border-radius:2px;">${
|
|
151
|
+
${g.map(l=>`
|
|
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>
|
|
146
153
|
`).join("")}
|
|
147
154
|
</ul>`,M=`
|
|
148
155
|
<div style="padding:8px 12px 12px;font-size:12px;color:#475569;">
|
|
149
|
-
<a href="${
|
|
156
|
+
<a href="${i(o.url)}" target="_blank" rel="noopener noreferrer"
|
|
150
157
|
style="color:#1d4ed8;font-weight:600;display:inline-block;padding:4px 0;">Open this page in a new tab →</a><br>
|
|
151
158
|
Then use the wcagcheckr side panel for per-finding acknowledgements and re-runs.
|
|
152
159
|
</div>`;return`
|
|
@@ -168,10 +175,10 @@ import{U as y,aN as C,aO as R}from"./scheduled-audit-runner-DsCClQxp.js";import"
|
|
|
168
175
|
in a new browser tab.
|
|
169
176
|
</p>
|
|
170
177
|
<div style="border:1px solid #e2e8f0;border-radius:6px;overflow:hidden;font-size:13px;">
|
|
171
|
-
${
|
|
178
|
+
${p}
|
|
172
179
|
</div>
|
|
173
180
|
</section>
|
|
174
|
-
`}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`
|
|
175
182
|
<section style="margin-top:24px;padding:16px 18px;border:1px solid #cbd5e1;border-radius:8px;background:#f8fafc;">
|
|
176
183
|
<h2 style="margin:0 0 8px;font-size:16px;color:#0f172a;">
|
|
177
184
|
Criteria still needing your judgment
|
|
@@ -181,45 +188,45 @@ import{U as y,aN as C,aO as R}from"./scheduled-audit-runner-DsCClQxp.js";import"
|
|
|
181
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.
|
|
182
189
|
</p>
|
|
183
190
|
<ol style="margin:0;padding-left:18px;font-size:12px;color:#0f172a;">
|
|
184
|
-
${t.map(s=>{const
|
|
185
|
-
<span style="display:inline-block;padding:1px 6px;border-radius:3px;background:${
|
|
186
|
-
<code style="font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;">WCAG ${
|
|
187
|
-
<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>
|
|
188
195
|
</li>`}).join("")}
|
|
189
196
|
</ol>
|
|
190
197
|
</section>
|
|
191
|
-
`}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`
|
|
192
199
|
<section style="margin-bottom:24px;">
|
|
193
200
|
<h2 style="margin:0 0 8px;font-size:18px;">Pages by lawsuit-target grade</h2>
|
|
194
|
-
${["A","C","D","F"].map(o=>{const
|
|
201
|
+
${["A","C","D","F"].map(o=>{const d=n[o],r=d/a*100;return`
|
|
195
202
|
<div style="display:flex;align-items:center;gap:10px;font-size:13px;margin:4px 0;">
|
|
196
203
|
<div style="width:24px;font-weight:700;color:${u[o]};font-family:ui-monospace,SFMono-Regular,Menlo,monospace;">${o}</div>
|
|
197
204
|
<div style="flex:1;background:#e2e8f0;border-radius:3px;height:18px;overflow:hidden;">
|
|
198
|
-
<div style="height:100%;width:${
|
|
205
|
+
<div style="height:100%;width:${r}%;background:${u[o]};"></div>
|
|
199
206
|
</div>
|
|
200
|
-
<div style="width:60px;text-align:right;color:#475569;">${
|
|
207
|
+
<div style="width:60px;text-align:right;color:#475569;">${d} page${d===1?"":"s"}</div>
|
|
201
208
|
</div>`}).join("")}
|
|
202
209
|
</section>
|
|
203
210
|
`}return`
|
|
204
211
|
<section style="margin-bottom:24px;">
|
|
205
212
|
<h2 style="margin:0 0 8px;font-size:18px;">Pages by grade</h2>
|
|
206
|
-
${["A","B","C","D","F"].map(
|
|
213
|
+
${["A","B","C","D","F"].map(n=>{const p=e.pagesByGrade[n],o=p/a*100;return`
|
|
207
214
|
<div style="display:flex;align-items:center;gap:10px;font-size:13px;margin:4px 0;">
|
|
208
|
-
<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>
|
|
209
216
|
<div style="flex:1;background:#e2e8f0;border-radius:3px;height:18px;overflow:hidden;">
|
|
210
|
-
<div style="height:100%;width:${o}%;background:${x[
|
|
217
|
+
<div style="height:100%;width:${o}%;background:${x[n]};"></div>
|
|
211
218
|
</div>
|
|
212
|
-
<div style="width:60px;text-align:right;color:#475569;">${
|
|
219
|
+
<div style="width:60px;text-align:right;color:#475569;">${p} page${p===1?"":"s"}</div>
|
|
213
220
|
</div>
|
|
214
221
|
`}).join("")}
|
|
215
222
|
</section>
|
|
216
|
-
`}function
|
|
217
|
-
<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()}.
|
|
218
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>
|
|
219
226
|
<html lang="en">
|
|
220
227
|
<head>
|
|
221
228
|
<meta charset="utf-8" />
|
|
222
|
-
<title>${
|
|
229
|
+
<title>${s}</title>
|
|
223
230
|
<meta name="generator" content="wcagcheckr — site mode${t?" (lawsuit-target lens)":""}" />
|
|
224
231
|
<style>
|
|
225
232
|
body { margin: 0; background: #f8fafc; color: #0f172a; font: 14px/1.5 ui-sans-serif, system-ui, -apple-system, sans-serif; }
|
|
@@ -235,14 +242,15 @@ import{U as y,aN as C,aO as R}from"./scheduled-audit-runner-DsCClQxp.js";import"
|
|
|
235
242
|
</head>
|
|
236
243
|
<body>
|
|
237
244
|
<main class="container">
|
|
238
|
-
${
|
|
239
|
-
${
|
|
240
|
-
${
|
|
241
|
-
${
|
|
242
|
-
${
|
|
245
|
+
${U(e,t)}
|
|
246
|
+
${j(n,!!t)}
|
|
247
|
+
${p}
|
|
248
|
+
${o}
|
|
249
|
+
${B(e,t)}
|
|
250
|
+
${W(e.pages,d,t)}
|
|
243
251
|
<footer style="margin-top:32px;padding-top:16px;border-top:1px solid #e2e8f0;color:#475569;font-size:12px;">
|
|
244
|
-
${
|
|
252
|
+
${r}
|
|
245
253
|
</footer>
|
|
246
254
|
</main>
|
|
247
255
|
</body>
|
|
248
|
-
</html>`}export{
|
|
256
|
+
</html>`}export{X as renderSiteReportHtml};
|
package/dist/devtools/panel.html
CHANGED
|
@@ -3,17 +3,17 @@
|
|
|
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">
|
|
10
10
|
<link rel="modulepreload" crossorigin href="/assets/ai-usage-log-CYuyLsU4.js">
|
|
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
|
-
<link rel="modulepreload" crossorigin href="/assets/diff-
|
|
14
|
-
<link rel="modulepreload" crossorigin href="/assets/scheduled-audit-runner-
|
|
13
|
+
<link rel="modulepreload" crossorigin href="/assets/diff-Dc5xUcCG.js">
|
|
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": {
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
"content_scripts": [
|
|
38
38
|
{
|
|
39
39
|
"js": [
|
|
40
|
-
"assets/content-script.ts-loader-
|
|
40
|
+
"assets/content-script.ts-loader-H5dU9ywW.js"
|
|
41
41
|
],
|
|
42
42
|
"matches": [
|
|
43
43
|
"<all_urls>"
|
|
@@ -61,13 +61,13 @@
|
|
|
61
61
|
"axe.min.js",
|
|
62
62
|
"assets/preload-helper-D7HrI6pR.js",
|
|
63
63
|
"assets/crash-reporter-KD5f4utB.js",
|
|
64
|
-
"assets/diff-
|
|
64
|
+
"assets/diff-Dc5xUcCG.js",
|
|
65
65
|
"assets/_commonjsHelpers-Cpj98o6Y.js",
|
|
66
66
|
"assets/custom-rules-CAe0nbES.js",
|
|
67
67
|
"assets/design-system-audit-DpxJrxnb.js",
|
|
68
68
|
"assets/reflow-analyzer-DNgBX8N_.js",
|
|
69
69
|
"assets/dom-criterion-analyzers-DoUaJV5C.js",
|
|
70
|
-
"assets/content-script.ts-
|
|
70
|
+
"assets/content-script.ts-CsBWyYDh.js"
|
|
71
71
|
],
|
|
72
72
|
"use_dynamic_url": false
|
|
73
73
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import './assets/service-worker.ts-
|
|
1
|
+
import './assets/service-worker.ts-D7lljTTB.js';
|
|
@@ -4,20 +4,20 @@
|
|
|
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">
|
|
11
11
|
<link rel="modulepreload" crossorigin href="/assets/ai-usage-log-CYuyLsU4.js">
|
|
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
|
-
<link rel="modulepreload" crossorigin href="/assets/diff-
|
|
15
|
-
<link rel="modulepreload" crossorigin href="/assets/scheduled-audit-runner-
|
|
14
|
+
<link rel="modulepreload" crossorigin href="/assets/diff-Dc5xUcCG.js">
|
|
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",
|