@a11yst/reporters 1.0.0

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.
Files changed (67) hide show
  1. package/LICENSE +373 -0
  2. package/README.md +78 -0
  3. package/dist/assets.d.ts +3 -0
  4. package/dist/assets.d.ts.map +1 -0
  5. package/dist/assets.js +271 -0
  6. package/dist/assets.js.map +1 -0
  7. package/dist/baseline-report.d.ts +25 -0
  8. package/dist/baseline-report.d.ts.map +1 -0
  9. package/dist/baseline-report.js +426 -0
  10. package/dist/baseline-report.js.map +1 -0
  11. package/dist/finding-groups.d.ts +14 -0
  12. package/dist/finding-groups.d.ts.map +1 -0
  13. package/dist/finding-groups.js +77 -0
  14. package/dist/finding-groups.js.map +1 -0
  15. package/dist/finding-source-report.d.ts +21 -0
  16. package/dist/finding-source-report.d.ts.map +1 -0
  17. package/dist/finding-source-report.js +134 -0
  18. package/dist/finding-source-report.js.map +1 -0
  19. package/dist/github/escape.d.ts +13 -0
  20. package/dist/github/escape.d.ts.map +1 -0
  21. package/dist/github/escape.js +37 -0
  22. package/dist/github/escape.js.map +1 -0
  23. package/dist/github/generate.d.ts +3 -0
  24. package/dist/github/generate.d.ts.map +1 -0
  25. package/dist/github/generate.js +140 -0
  26. package/dist/github/generate.js.map +1 -0
  27. package/dist/github/source-location.d.ts +4 -0
  28. package/dist/github/source-location.d.ts.map +1 -0
  29. package/dist/github/source-location.js +69 -0
  30. package/dist/github/source-location.js.map +1 -0
  31. package/dist/github/types.d.ts +42 -0
  32. package/dist/github/types.d.ts.map +1 -0
  33. package/dist/github/types.js +18 -0
  34. package/dist/github/types.js.map +1 -0
  35. package/dist/html.d.ts +8 -0
  36. package/dist/html.d.ts.map +1 -0
  37. package/dist/html.js +562 -0
  38. package/dist/html.js.map +1 -0
  39. package/dist/index.d.ts +24 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +33 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/markdown/escape.d.ts +5 -0
  44. package/dist/markdown/escape.d.ts.map +1 -0
  45. package/dist/markdown/escape.js +27 -0
  46. package/dist/markdown/escape.js.map +1 -0
  47. package/dist/markdown/generate.d.ts +3 -0
  48. package/dist/markdown/generate.d.ts.map +1 -0
  49. package/dist/markdown/generate.js +498 -0
  50. package/dist/markdown/generate.js.map +1 -0
  51. package/dist/markdown/links.d.ts +4 -0
  52. package/dist/markdown/links.d.ts.map +1 -0
  53. package/dist/markdown/links.js +30 -0
  54. package/dist/markdown/links.js.map +1 -0
  55. package/dist/markdown/types.d.ts +71 -0
  56. package/dist/markdown/types.d.ts.map +1 -0
  57. package/dist/markdown/types.js +2 -0
  58. package/dist/markdown/types.js.map +1 -0
  59. package/dist/profile-evidence.d.ts +21 -0
  60. package/dist/profile-evidence.d.ts.map +1 -0
  61. package/dist/profile-evidence.js +211 -0
  62. package/dist/profile-evidence.js.map +1 -0
  63. package/dist/validation.d.ts +10 -0
  64. package/dist/validation.d.ts.map +1 -0
  65. package/dist/validation.js +96 -0
  66. package/dist/validation.js.map +1 -0
  67. package/package.json +43 -0
package/dist/html.js ADDED
@@ -0,0 +1,562 @@
1
+ import { formatSeverityLabel, severityRank } from "@a11yst/types";
2
+ import { formatReportSourceLocation, resolveFindingReportSource, } from "./finding-source-report.js";
3
+ import { buildBaselineReportContext, renderBaselineFilters, renderBaselineFindingDataAttributes, renderBaselineLifecycleSections, renderBaselineMetadata, renderBaselineNavLinks, renderBaselineSummarySection, } from "./baseline-report.js";
4
+ import { renderProfileEvidenceSection, } from "./profile-evidence.js";
5
+ function escapeHtml(value) {
6
+ return String(value)
7
+ .replaceAll("&", "&")
8
+ .replaceAll("<", "&lt;")
9
+ .replaceAll(">", "&gt;")
10
+ .replaceAll('"', "&quot;")
11
+ .replaceAll("'", "&#39;");
12
+ }
13
+ function compareText(left, right) {
14
+ const a = left ?? "";
15
+ const b = right ?? "";
16
+ return a < b ? -1 : a > b ? 1 : 0;
17
+ }
18
+ function targetText(finding) {
19
+ return finding.target.join(" ");
20
+ }
21
+ function sortFindings(findings) {
22
+ return [...findings].sort((a, b) => severityRank(b.severity) - severityRank(a.severity) ||
23
+ compareText(a.projectName, b.projectName) ||
24
+ compareText(a.route ?? a.routeName ?? a.routeId, b.route ?? b.routeName ?? b.routeId) ||
25
+ compareText(a.viewport, b.viewport) ||
26
+ compareText(a.ruleId, b.ruleId) ||
27
+ compareText(targetText(a), targetText(b)));
28
+ }
29
+ function evidencePath(value) {
30
+ const normalized = value.replaceAll("\\", "/").replace(/^(\.\/|\/)+/, "");
31
+ const path = normalized
32
+ .split("/")
33
+ .filter((segment) => segment !== "" && segment !== "." && segment !== "..")
34
+ .map((segment) => encodeURIComponent(segment))
35
+ .join("/");
36
+ return `../${path || "evidence"}`;
37
+ }
38
+ function formatDuration(milliseconds) {
39
+ if (milliseconds < 1000)
40
+ return `${milliseconds} ms`;
41
+ return `${(milliseconds / 1000).toFixed(1)} s`;
42
+ }
43
+ function unique(values) {
44
+ return [...new Set(values.filter((value) => Boolean(value)))].sort(compareText);
45
+ }
46
+ function optionList(values) {
47
+ return values
48
+ .map((value) => `<option value="${escapeHtml(value)}">${escapeHtml(value)}</option>`)
49
+ .join("");
50
+ }
51
+ function filter(label, name, values, allLabel) {
52
+ return `<div class="filter-field">
53
+ <label for="filter-${name}">${escapeHtml(label)}</label>
54
+ <select id="filter-${name}" name="${escapeHtml(name)}">
55
+ <option value="">${escapeHtml(allLabel)}</option>
56
+ ${optionList(values)}
57
+ </select>
58
+ </div>`;
59
+ }
60
+ function detail(label, value) {
61
+ return `<div><dt>${escapeHtml(label)}</dt><dd>${escapeHtml(value || "Not available")}</dd></div>`;
62
+ }
63
+ function findingStatus(finding, runs) {
64
+ return (runs.find((run) => run.findings.some((candidate) => candidate.id === finding.id &&
65
+ candidate.fingerprint === finding.fingerprint))?.status ?? "completed");
66
+ }
67
+ function findingScreenshot(finding, runs) {
68
+ if (finding.evidence?.screenshot)
69
+ return finding.evidence.screenshot;
70
+ if (finding.evidence?.pageScreenshot)
71
+ return finding.evidence.pageScreenshot;
72
+ return runs.find((run) => run.findings.some((candidate) => candidate.id === finding.id &&
73
+ candidate.fingerprint === finding.fingerprint))?.evidence?.screenshot;
74
+ }
75
+ function renderSourceSection(finding) {
76
+ const source = resolveFindingReportSource(finding);
77
+ if (source.status === "mapped" && source.location) {
78
+ const label = source.confidence === "exact" ? "Probable source" : "Probable source";
79
+ const provenance = source.provenance?.replace(/-/g, " ") ?? "source mapping";
80
+ return `<section class="finding-source" aria-labelledby="finding-source-${finding.id}">
81
+ <h4>Source</h4>
82
+ <p>${escapeHtml(label)}: <code>${escapeHtml(formatReportSourceLocation(source.location))}</code></p>
83
+ <p>Confidence: ${escapeHtml(source.confidence ?? "unknown")}</p>
84
+ <p>Matched through ${escapeHtml(provenance)}</p>
85
+ </section>`;
86
+ }
87
+ if (source.status === "ambiguous") {
88
+ const alternatives = source.alternatives ?? [];
89
+ const items = alternatives
90
+ .map((location) => `<li><code>${escapeHtml(formatReportSourceLocation(location))}</code></li>`)
91
+ .join("");
92
+ return `<section class="finding-source" aria-labelledby="finding-source-${finding.id}">
93
+ <h4>Source</h4>
94
+ <p>Source location is ambiguous.</p>
95
+ ${items ? `<ul>${items}</ul>` : ""}
96
+ <p class="muted">Review the listed candidate locations before editing code.</p>
97
+ </section>`;
98
+ }
99
+ if (source.status === "invalid") {
100
+ return `<section class="finding-source"><h4>Source</h4><p class="muted">Source mapping is invalid for this finding.</p></section>`;
101
+ }
102
+ const route = finding.route ?? finding.flowId ?? "Not available";
103
+ return `<section class="finding-source"><h4>Source</h4><p>No source file was selected.</p><p>Context: ${escapeHtml(String(route))}</p></section>`;
104
+ }
105
+ function renderRecommendationsSection(finding) {
106
+ const recommendations = finding.recommendations;
107
+ if (!recommendations || recommendations.recommendations.length === 0) {
108
+ return "";
109
+ }
110
+ const primary = recommendations.recommendations[0];
111
+ const actions = primary.actions
112
+ .map((action) => `<li>${escapeHtml(action.title)}: ${escapeHtml(action.description)}</li>`)
113
+ .join("");
114
+ const verification = primary.verification
115
+ .map((step) => `<li>${escapeHtml(step.title)}: ${escapeHtml(step.description)}</li>`)
116
+ .join("");
117
+ const caveats = primary.caveats.map((caveat) => `<li>${escapeHtml(caveat)}</li>`).join("");
118
+ const examples = primary.examples
119
+ .map((example) => `<h5>${escapeHtml(example.title)}</h5><pre><code>${escapeHtml(example.code)}</code></pre>`)
120
+ .join("");
121
+ return `<section class="finding-recommendations" aria-labelledby="finding-recommendations-${finding.id}">
122
+ <h4>Recommendations</h4>
123
+ <p>Status: ${escapeHtml(recommendations.status)}</p>
124
+ <p>Applicability: ${escapeHtml(primary.applicability)}</p>
125
+ <p>${escapeHtml(primary.summary)}</p>
126
+ ${actions ? `<h5>Actions</h5><ol>${actions}</ol>` : ""}
127
+ ${verification ? `<h5>Verification</h5><ol>${verification}</ol>` : ""}
128
+ ${caveats ? `<h5>Caveats</h5><ul>${caveats}</ul>` : ""}
129
+ ${examples}
130
+ <p class="muted">Automated recommendations do not establish WCAG conformance or guarantee a correct fix.</p>
131
+ </section>`;
132
+ }
133
+ function renderFinding(finding, index, runs) {
134
+ const route = finding.route ?? finding.routeName ?? finding.routeId ?? "Not available";
135
+ const viewport = finding.viewport ?? "Not available";
136
+ const status = findingStatus(finding, runs);
137
+ const screenshot = findingScreenshot(finding, runs);
138
+ const description = finding.description ?? finding.message ?? "No description provided.";
139
+ const screenshotMarkup = screenshot
140
+ ? `<img class="evidence" src="${escapeHtml(evidencePath(screenshot))}" alt="${escapeHtml(`Screenshot evidence for ${finding.title} in ${finding.projectName} at ${route}`)}">`
141
+ : `<p class="muted">No screenshot evidence is available for this finding.</p>`;
142
+ return `<article class="finding finding--${finding.severity}" ${renderBaselineFindingDataAttributes(finding)}
143
+ data-status="${escapeHtml(status)}"
144
+ data-automation="${escapeHtml(finding.automation ?? "automated")}"
145
+ data-confidence="${escapeHtml(finding.confidence ?? "high")}"
146
+ aria-labelledby="finding-${index}-title">
147
+ <h3 id="finding-${index}-title">${escapeHtml(finding.title)}</h3>
148
+ <p class="severity">Severity: ${escapeHtml(formatSeverityLabel(finding.severity))}</p>
149
+ <p>${escapeHtml(description)}</p>
150
+ <dl class="metadata">
151
+ ${detail("Rule ID", finding.ruleId)}
152
+ ${detail("Project", finding.projectName)}
153
+ ${detail("Route", route)}
154
+ ${detail("Flow", finding.flowId)}
155
+ ${detail("Checkpoint", finding.checkpointId)}
156
+ ${detail("URL", finding.url)}
157
+ ${detail("Viewport", viewport)}
158
+ ${detail("Profile", finding.profile)}
159
+ ${detail("Target", finding.target.join(", "))}
160
+ ${detail("Failure summary", finding.failureSummary)}
161
+ ${detail("Standards", finding.standards.join(", "))}
162
+ ${detail("Fingerprint", finding.fingerprint)}
163
+ ${detail("Automation", finding.automation ?? "automated")}
164
+ ${detail("Confidence", finding.confidence ?? "high")}
165
+ </dl>
166
+ ${renderBaselineMetadata(finding)}
167
+ ${renderSourceSection(finding)}
168
+ ${renderRecommendationsSection(finding)}
169
+ <h4>HTML snippet</h4>
170
+ ${finding.html
171
+ ? `<pre><code>${escapeHtml(finding.html)}</code></pre>`
172
+ : `<p class="muted">No HTML snippet is available.</p>`}
173
+ ${screenshotMarkup}
174
+ </article>`;
175
+ }
176
+ function renderDiagnostics(run) {
177
+ if (run.diagnostics.length === 0) {
178
+ return `<p class="muted">No diagnostics.</p>`;
179
+ }
180
+ return `<ul class="diagnostics">${run.diagnostics
181
+ .map((diagnostic) => `<li><strong>${escapeHtml(diagnostic.severity)}: ${escapeHtml(diagnostic.code)}</strong> — ${escapeHtml(diagnostic.message)}${diagnostic.hint ? ` ${escapeHtml(diagnostic.hint)}` : ""}</li>`)
182
+ .join("")}</ul>`;
183
+ }
184
+ function isWebProject(project) {
185
+ return project.platform === "web";
186
+ }
187
+ const FIRST_CLASS_ADAPTER_IDS = new Set([
188
+ "html",
189
+ "react",
190
+ "next",
191
+ "angular",
192
+ "vue",
193
+ "nuxt",
194
+ ]);
195
+ function supportLevelLabel(project) {
196
+ if (FIRST_CLASS_ADAPTER_IDS.has(project.adapterId)) {
197
+ return "first-class";
198
+ }
199
+ if (project.framework === "unknown") {
200
+ return "unknown";
201
+ }
202
+ return "preview";
203
+ }
204
+ function collectProjectRoutes(projects) {
205
+ const rows = [];
206
+ for (const project of projects) {
207
+ for (const route of project.routes) {
208
+ rows.push({
209
+ projectName: project.name,
210
+ path: route.path,
211
+ origin: route.origin ?? "explicit",
212
+ ...(route.sourceFile !== undefined ? { sourceFile: route.sourceFile } : {}),
213
+ ...(route.pattern !== undefined ? { pattern: route.pattern } : {}),
214
+ });
215
+ }
216
+ }
217
+ return rows.sort((left, right) => compareText(left.projectName, right.projectName) ||
218
+ compareText(left.path, right.path) ||
219
+ compareText(left.origin, right.origin));
220
+ }
221
+ function collectSkippedPatterns(auditResult) {
222
+ const patterns = new Map();
223
+ for (const diagnostic of [...auditResult.plan.diagnostics, ...auditResult.diagnostics]) {
224
+ const match = /Dynamic pattern "([^"]+)"/.exec(diagnostic.message);
225
+ if (match?.[1]) {
226
+ patterns.set(match[1], {
227
+ pattern: match[1],
228
+ reason: diagnostic.message,
229
+ });
230
+ }
231
+ }
232
+ return [...patterns.values()].sort((left, right) => compareText(left.pattern, right.pattern));
233
+ }
234
+ function collectAdapterDiagnostics(auditResult) {
235
+ return [...auditResult.plan.diagnostics, ...auditResult.diagnostics].filter((diagnostic) => diagnostic.code.startsWith("NEXT_") ||
236
+ diagnostic.code.startsWith("NUXT_") ||
237
+ diagnostic.code.startsWith("ANGULAR_") ||
238
+ diagnostic.code.startsWith("HTML_") ||
239
+ diagnostic.code.startsWith("REACT_") ||
240
+ diagnostic.code.startsWith("VUE_") ||
241
+ diagnostic.code.startsWith("GENERIC_") ||
242
+ diagnostic.code.includes("ROUTE") ||
243
+ diagnostic.code.includes("ADAPTER"));
244
+ }
245
+ function readinessStrategyLabel(run) {
246
+ if (run.adapter?.readinessStrategy) {
247
+ return run.adapter.readinessStrategy;
248
+ }
249
+ const selectors = {
250
+ next: "#__next, body",
251
+ nuxt: "#__nuxt, body",
252
+ react: "#root, [data-reactroot], body",
253
+ vue: "#app, [data-v-app], body",
254
+ angular: "app-root, body",
255
+ html: "body (load)",
256
+ };
257
+ return selectors[run.framework] ?? "domcontentloaded + body";
258
+ }
259
+ function renderFrameworkIntegration(projects) {
260
+ if (projects.length === 0) {
261
+ return `<p class="muted">No web project metadata is available for this audit.</p>`;
262
+ }
263
+ const rows = projects
264
+ .map((project) => `<tr>
265
+ <td>${escapeHtml(project.name)}</td>
266
+ <td>${escapeHtml(project.framework)}</td>
267
+ <td>${escapeHtml(project.adapterId)}</td>
268
+ <td>${escapeHtml(supportLevelLabel(project))}</td>
269
+ </tr>`)
270
+ .join("");
271
+ return `<div class="table-wrap" tabindex="0">
272
+ <table>
273
+ <caption class="visually-hidden">Framework integration per configured web project</caption>
274
+ <thead>
275
+ <tr>
276
+ <th scope="col">Project</th>
277
+ <th scope="col">Framework</th>
278
+ <th scope="col">Adapter</th>
279
+ <th scope="col">Support level</th>
280
+ </tr>
281
+ </thead>
282
+ <tbody>${rows}</tbody>
283
+ </table>
284
+ </div>`;
285
+ }
286
+ function renderRouteTable(routes) {
287
+ if (routes.length === 0) {
288
+ return `<p class="muted">No resolved routes were recorded for this audit.</p>`;
289
+ }
290
+ const rows = routes
291
+ .map((route) => `<tr>
292
+ <td>${escapeHtml(route.projectName)}</td>
293
+ <td>${escapeHtml(route.path)}</td>
294
+ <td>${escapeHtml(route.origin)}</td>
295
+ <td>${escapeHtml(route.sourceFile ?? "Not available")}</td>
296
+ <td>${escapeHtml(route.pattern ?? "Not available")}</td>
297
+ </tr>`)
298
+ .join("");
299
+ return `<div class="table-wrap" tabindex="0">
300
+ <table>
301
+ <caption class="visually-hidden">Resolved routes included in the audit plan</caption>
302
+ <thead>
303
+ <tr>
304
+ <th scope="col">Project</th>
305
+ <th scope="col">Path</th>
306
+ <th scope="col">Origin</th>
307
+ <th scope="col">Source file</th>
308
+ <th scope="col">Pattern</th>
309
+ </tr>
310
+ </thead>
311
+ <tbody>${rows}</tbody>
312
+ </table>
313
+ </div>`;
314
+ }
315
+ function renderSkippedPatterns(patterns) {
316
+ if (patterns.length === 0) {
317
+ return `<p class="muted">No dynamic route patterns were skipped.</p>`;
318
+ }
319
+ return `<ul class="diagnostics">${patterns
320
+ .map((pattern) => `<li><strong>${escapeHtml(pattern.pattern)}</strong> — ${escapeHtml(pattern.reason)}${pattern.sourceFile ? ` (${escapeHtml(pattern.sourceFile)})` : ""}</li>`)
321
+ .join("")}</ul>`;
322
+ }
323
+ function renderRun(run, index, loadedEvidence) {
324
+ const route = run.kind === "flow-checkpoint"
325
+ ? `${run.flowName ?? run.flowId ?? "Flow"} — ${run.checkpointName ?? run.checkpointId ?? "checkpoint"}`
326
+ : run.route ?? run.routeName ?? run.routeId ?? "Not available";
327
+ const screenshot = run.evidence?.screenshot;
328
+ const hasStructuredEvidence = loadedEvidence?.has(run.runId) ?? false;
329
+ const evidenceAnchor = hasStructuredEvidence
330
+ ? `<p><a href="#profile-evidence">View structured profile evidence</a> for this run.</p>`
331
+ : "";
332
+ const flowDetails = run.kind === "flow-checkpoint"
333
+ ? `${detail("Flow", run.flowName ?? run.flowId)}
334
+ ${detail("Checkpoint", run.checkpointName ?? run.checkpointId)}
335
+ ${detail("Flow start", run.route)}
336
+ ${detail("Flow trace", run.flowTracePath)}`
337
+ : "";
338
+ return `<article class="run" aria-labelledby="run-${index}-title">
339
+ <h3 id="run-${index}-title">${escapeHtml(run.projectName)} — ${escapeHtml(route)}</h3>
340
+ <p class="status">Status: ${escapeHtml(run.status)}</p>
341
+ <dl class="metadata">
342
+ ${detail("Run ID", run.runId)}
343
+ ${detail("Kind", run.kind ?? "route")}
344
+ ${detail("Profile", run.profile)}
345
+ ${detail("Viewport", run.viewport?.name)}
346
+ ${detail("URL", run.url ?? run.evidence?.finalUrl)}
347
+ ${detail("Duration", formatDuration(run.durationMs))}
348
+ ${detail("Findings", String(run.findings.length))}
349
+ ${flowDetails}
350
+ ${detail("Readiness strategy", readinessStrategyLabel(run))}
351
+ ${detail("Skip reason", run.skipReason)}
352
+ </dl>
353
+ ${run.findings.length === 0
354
+ ? `<p class="muted">No findings were recorded for this run.</p>`
355
+ : ""}
356
+ ${screenshot
357
+ ? `<img class="evidence" src="${escapeHtml(evidencePath(screenshot))}" alt="${escapeHtml(`Page screenshot for ${run.projectName} at ${route}`)}">`
358
+ : `<p class="muted">No run screenshot is available.</p>`}
359
+ ${evidenceAnchor}
360
+ <h4>Diagnostics</h4>
361
+ ${renderDiagnostics(run)}
362
+ </article>`;
363
+ }
364
+ function renderProfileCoverage(auditResult) {
365
+ const summary = auditResult.profileSummary;
366
+ if (!summary) {
367
+ return `<p class="muted">Profile coverage summary is not available for this audit.</p>`;
368
+ }
369
+ const cards = summary.coverage
370
+ .filter((entry, index, all) => all.findIndex((candidate) => candidate.profile === entry.profile) === index)
371
+ .map((entry) => {
372
+ const lists = [
373
+ entry.automatedChecks.length > 0
374
+ ? `<div><h4>Automated</h4><ul>${entry.automatedChecks
375
+ .map((item) => `<li>${escapeHtml(item)}</li>`)
376
+ .join("")}</ul></div>`
377
+ : "",
378
+ entry.heuristicChecks.length > 0
379
+ ? `<div><h4>Heuristic</h4><ul>${entry.heuristicChecks
380
+ .map((item) => `<li>${escapeHtml(item)}</li>`)
381
+ .join("")}</ul></div>`
382
+ : "",
383
+ entry.manualChecks.length > 0
384
+ ? `<div><h4>Manual review still required</h4><ul>${entry.manualChecks
385
+ .map((item) => `<li>${escapeHtml(item)}</li>`)
386
+ .join("")}</ul></div>`
387
+ : "",
388
+ entry.limitations.length > 0
389
+ ? `<div><h4>Limitations</h4><ul>${entry.limitations
390
+ .map((item) => `<li>${escapeHtml(item)}</li>`)
391
+ .join("")}</ul></div>`
392
+ : "",
393
+ ].join("");
394
+ return `<article class="coverage-card coverage-card--profile">
395
+ <h3>${escapeHtml(entry.profile.toUpperCase())}</h3>
396
+ <p class="status">Status: ${escapeHtml(entry.status)}</p>
397
+ ${lists || `<p class="muted">No coverage metadata recorded.</p>`}
398
+ </article>`;
399
+ })
400
+ .join("");
401
+ const totalFindings = summary.findingsByAutomation.automated +
402
+ summary.findingsByAutomation.heuristic +
403
+ summary.findingsByAutomation["manual-review"];
404
+ return `<div class="coverage-grid coverage-grid--profiles">${cards}</div>
405
+ <dl class="metadata metadata--inline coverage-stats">
406
+ <div><dt>Findings</dt><dd>${totalFindings}</dd></div>
407
+ <div><dt>Automated</dt><dd>${summary.findingsByAutomation.automated}</dd></div>
408
+ <div><dt>Heuristic</dt><dd>${summary.findingsByAutomation.heuristic}</dd></div>
409
+ <div><dt>Generated manual checks</dt><dd>${summary.findingsByAutomation["manual-review"]}</dd></div>
410
+ <div><dt>Manual review pending</dt><dd>${summary.manualReviewPending}</dd></div>
411
+ </dl>`;
412
+ }
413
+ export function renderHtmlReport(auditResult, options = {}) {
414
+ const findings = sortFindings(auditResult.findings);
415
+ const baselineContext = buildBaselineReportContext(auditResult);
416
+ const reportId = options.auditId ?? auditResult.auditId;
417
+ const loadedEvidence = options.loadedProfileEvidence;
418
+ const title = reportId
419
+ ? `a11yst accessibility report — ${reportId}`
420
+ : "a11yst accessibility report";
421
+ const webProjects = auditResult.plan.projects.filter(isWebProject);
422
+ const routeRows = collectProjectRoutes(webProjects);
423
+ const skippedPatterns = collectSkippedPatterns(auditResult);
424
+ const adapterDiagnostics = collectAdapterDiagnostics(auditResult);
425
+ const routes = findings.map((finding) => finding.route ?? finding.routeName ?? finding.routeId ?? "Not available");
426
+ const flows = unique(findings.map((finding) => finding.flowId));
427
+ const checkpoints = unique(findings.map((finding) => finding.checkpointId));
428
+ const viewports = findings.map((finding) => finding.viewport ?? "Not available");
429
+ const statuses = findings.map((finding) => findingStatus(finding, auditResult.runs));
430
+ return `<!doctype html>
431
+ <html lang="en">
432
+ <head>
433
+ <meta charset="utf-8">
434
+ <meta name="viewport" content="width=device-width, initial-scale=1">
435
+ <title>${escapeHtml(title)}</title>
436
+ <link rel="stylesheet" href="styles.css">
437
+ <script src="report.js" defer></script>
438
+ </head>
439
+ <body>
440
+ <a class="skip-link" href="#main-content">Skip to main content</a>
441
+ <header class="site-header">
442
+ <div class="site-header__inner">
443
+ <h1>${escapeHtml(title)}</h1>
444
+ <p>Static accessibility audit results</p>
445
+ <nav aria-label="Report sections">
446
+ <ul>
447
+ <li><a href="#summary">Summary</a></li>
448
+ ${renderBaselineNavLinks(baselineContext)}
449
+ <li><a href="#framework-integration">Framework integration</a></li>
450
+ <li><a href="#findings">Findings</a></li>
451
+ <li><a href="#runs">Runs</a></li>
452
+ <li><a href="#profile-evidence">Profile evidence</a></li>
453
+ <li><a href="#coverage">Coverage</a></li>
454
+ </ul>
455
+ </nav>
456
+ </div>
457
+ </header>
458
+ <main id="main-content">
459
+ <section id="summary" aria-labelledby="summary-title">
460
+ <h2 id="summary-title">Summary</h2>
461
+ <div class="summary-grid">
462
+ <div class="summary-card"><span>Total findings</span><strong>${auditResult.summary.findingCount}</strong></div>
463
+ <div class="summary-card summary-card--critical"><span>Critical severity</span><strong>${auditResult.summary.findingsBySeverity.critical}</strong></div>
464
+ <div class="summary-card summary-card--high"><span>High severity</span><strong>${auditResult.summary.findingsBySeverity.high}</strong></div>
465
+ <div class="summary-card summary-card--medium"><span>Medium severity</span><strong>${auditResult.summary.findingsBySeverity.medium}</strong></div>
466
+ <div class="summary-card summary-card--minor"><span>Minor severity</span><strong>${auditResult.summary.findingsBySeverity.minor}</strong></div>
467
+ <div class="summary-card"><span>Completed runs</span><strong>${auditResult.summary.completedRuns}</strong></div>
468
+ <div class="summary-card"><span>Skipped runs</span><strong>${auditResult.summary.skippedRuns}</strong></div>
469
+ <div class="summary-card"><span>Failed runs</span><strong>${auditResult.summary.failedRuns}</strong></div>
470
+ ${auditResult.flowSummary
471
+ ? `<div class="summary-card"><span>Configured flows</span><strong>${auditResult.flowSummary.configuredFlows}</strong></div>
472
+ <div class="summary-card"><span>Completed checkpoints</span><strong>${auditResult.flowSummary.completedCheckpoints}</strong></div>
473
+ <div class="summary-card"><span>Skipped checkpoints</span><strong>${auditResult.flowSummary.skippedCheckpoints}</strong></div>`
474
+ : ""}
475
+ </div>
476
+ <p>Audit duration: ${escapeHtml(formatDuration(auditResult.summary.durationMs))}</p>
477
+ </section>
478
+
479
+ ${renderBaselineSummarySection(baselineContext)}
480
+
481
+ ${renderBaselineLifecycleSections(baselineContext, findings, (finding, index) => renderFinding(finding, index, auditResult.runs))}
482
+
483
+ <section id="framework-integration" aria-labelledby="framework-integration-title">
484
+ <h2 id="framework-integration-title">Framework integration</h2>
485
+ ${renderFrameworkIntegration(webProjects)}
486
+
487
+ <h3 id="route-table-title">Resolved routes</h3>
488
+ ${renderRouteTable(routeRows)}
489
+
490
+ <h3 id="skipped-patterns-title">Skipped dynamic patterns</h3>
491
+ ${renderSkippedPatterns(skippedPatterns)}
492
+
493
+ <h3 id="adapter-diagnostics-title">Adapter diagnostics</h3>
494
+ ${adapterDiagnostics.length === 0
495
+ ? `<p class="muted">No adapter diagnostics were recorded.</p>`
496
+ : `<ul class="diagnostics">${adapterDiagnostics
497
+ .map((diagnostic) => `<li><strong>${escapeHtml(diagnostic.severity)}: ${escapeHtml(diagnostic.code)}</strong> — ${escapeHtml(diagnostic.message)}${diagnostic.hint ? ` ${escapeHtml(diagnostic.hint)}` : ""}</li>`)
498
+ .join("")}</ul>`}
499
+ </section>
500
+
501
+ <section id="findings" aria-labelledby="findings-title">
502
+ <h2 id="findings-title">Findings</h2>
503
+ <form class="filters" data-report-filters>
504
+ <div class="filter-grid">
505
+ ${renderBaselineFilters(findings, baselineContext)}
506
+ ${filter("Severity", "severity", ["critical", "high", "medium", "minor"], "All severities")}
507
+ ${filter("Project", "project", unique(findings.map((finding) => finding.projectName)), "All projects")}
508
+ ${filter("Route", "route", unique(routes), "All routes")}
509
+ ${flows.length > 0 ? filter("Flow", "flow", flows, "All flows") : ""}
510
+ ${checkpoints.length > 0 ? filter("Checkpoint", "checkpoint", checkpoints, "All checkpoints") : ""}
511
+ ${filter("Viewport", "viewport", unique(viewports), "All viewports")}
512
+ ${filter("Profile", "profile", unique(findings.map((finding) => finding.profile)), "All profiles")}
513
+ ${filter("Source", "source", unique(findings.map((finding) => finding.source)), "All sources")}
514
+ ${filter("Automation", "automation", unique(findings.map((finding) => finding.automation ?? "automated")), "All automation types")}
515
+ ${filter("Confidence", "confidence", unique(findings.map((finding) => finding.confidence ?? "high")), "All confidence levels")}
516
+ ${filter("Rule", "rule", unique(findings.map((finding) => finding.ruleId)), "All rules")}
517
+ ${filter("Run status", "status", unique(statuses), "All statuses")}
518
+ </div>
519
+ <button type="reset">Clear filters</button>
520
+ </form>
521
+ <p class="result-count" data-result-count aria-live="polite">${findings.length} ${findings.length === 1 ? "finding" : "findings"} shown</p>
522
+ ${findings.length === 0
523
+ ? `<div class="empty-state"><h3>No findings</h3><p>No accessibility findings were recorded in this audit.</p></div>`
524
+ : `<div class="findings-list">${findings
525
+ .map((finding, index) => renderFinding(finding, index, auditResult.runs))
526
+ .join("")}</div>`}
527
+ </section>
528
+
529
+ <section id="runs" aria-labelledby="runs-title">
530
+ <h2 id="runs-title">Runs</h2>
531
+ ${auditResult.runs.length === 0
532
+ ? `<div class="empty-state"><h3>No runs</h3><p>No audit runs were recorded.</p></div>`
533
+ : `<div class="run-grid">${auditResult.runs
534
+ .map((run, index) => renderRun(run, index, loadedEvidence))
535
+ .join("")}</div>`}
536
+ </section>
537
+
538
+ <section id="profile-evidence" aria-labelledby="profile-evidence-title">
539
+ <h2 id="profile-evidence-title">Profile evidence</h2>
540
+ <p class="muted">Structured keyboard focus sequences and large-text before/after comparisons captured during profile runs.</p>
541
+ ${renderProfileEvidenceSection(auditResult.runs, loadedEvidence ?? new Map())}
542
+ </section>
543
+
544
+ <section id="coverage" aria-labelledby="coverage-title">
545
+ <h2 id="coverage-title">Coverage and limitations</h2>
546
+ <h3 id="profile-coverage-title">Profile coverage</h3>
547
+ ${renderProfileCoverage(auditResult)}
548
+ <div class="disclaimers">
549
+ <p>a11yst does not certify WCAG conformance.</p>
550
+ <p>Automated checks cover only part of accessibility.</p>
551
+ <p>Manual review and testing with disabled users remain necessary.</p>
552
+ </div>
553
+ </section>
554
+ </main>
555
+ <footer>
556
+ <p>Generated by a11yst${reportId ? ` for audit ${escapeHtml(reportId)}` : ""}.</p>
557
+ </footer>
558
+ </body>
559
+ </html>
560
+ `;
561
+ }
562
+ //# sourceMappingURL=html.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"html.js","sourceRoot":"","sources":["../src/html.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { AuditExecutionResult } from "@a11yst/types";
2
+ export { renderReportScript, renderReportStyles } from "./assets.js";
3
+ export { renderHtmlReport, type RenderHtmlReportOptions, } from "./html.js";
4
+ export { loadProfileEvidenceForReport, renderFocusSequenceBlock, renderLargeTextComparisonBlock, renderProfileEvidenceSection, type FocusSequenceEvidence, type LayoutComparisonEvidence, type LoadedProfileEvidence, } from "./profile-evidence.js";
5
+ export { readAuditResult, validateAuditResultDocument, } from "./validation.js";
6
+ export { generateMarkdownReport } from "./markdown/generate.js";
7
+ export type { MarkdownReportInput, MarkdownReportOptions, MarkdownReportResult, MarkdownReportDiagnostic, MarkdownReportDiagnosticCode, ReportReference, } from "./markdown/types.js";
8
+ export { generateGitHubAnnotations } from "./github/generate.js";
9
+ export type { GitHubAnnotation, GitHubAnnotationInput, GitHubAnnotationOptions, GitHubAnnotationGenerationResult, GitHubAnnotationDiagnostic, GitHubAnnotationLevel, } from "./github/types.js";
10
+ export { escapeMarkdownText, escapeMarkdownTableCell, escapeMarkdownLinkLabel, encodeMarkdownLinkTarget, } from "./markdown/escape.js";
11
+ export { escapeGitHubCommandProperty, escapeGitHubCommandMessage, serializeGitHubAnnotationCommand, } from "./github/escape.js";
12
+ export { buildFindingGroupKey, countUniqueIssues, groupFindings, type FindingGroup, } from "./finding-groups.js";
13
+ export { formatReportSourceLocation, formatSafeReportSourceLocation, sanitizeSourceUriForReport, resolveFindingRecommendationSummary, resolveFindingReportSource, } from "./finding-source-report.js";
14
+ export interface GenerateHtmlReportOptions {
15
+ auditResult: AuditExecutionResult;
16
+ outputDirectory: string;
17
+ auditId?: string;
18
+ }
19
+ export interface GeneratedHtmlReport {
20
+ indexPath: string;
21
+ assets: string[];
22
+ }
23
+ export declare function generateHtmlReport({ auditResult, outputDirectory, auditId, }: GenerateHtmlReportOptions): Promise<GeneratedHtmlReport>;
24
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAK1D,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EACL,gBAAgB,EAChB,KAAK,uBAAuB,GAC7B,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,4BAA4B,EAC5B,wBAAwB,EACxB,8BAA8B,EAC9B,4BAA4B,EAC5B,KAAK,qBAAqB,EAC1B,KAAK,wBAAwB,EAC7B,KAAK,qBAAqB,GAC3B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,eAAe,EACf,2BAA2B,GAC5B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,YAAY,EACV,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,EACpB,wBAAwB,EACxB,4BAA4B,EAC5B,eAAe,GAChB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AACjE,YAAY,EACV,gBAAgB,EAChB,qBAAqB,EACrB,uBAAuB,EACvB,gCAAgC,EAChC,0BAA0B,EAC1B,qBAAqB,GACtB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EACvB,uBAAuB,EACvB,wBAAwB,GACzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,2BAA2B,EAC3B,0BAA0B,EAC1B,gCAAgC,GACjC,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,aAAa,EACb,KAAK,YAAY,GAClB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,0BAA0B,EAC1B,8BAA8B,EAC9B,0BAA0B,EAC1B,mCAAmC,EACnC,0BAA0B,GAC3B,MAAM,4BAA4B,CAAC;AAEpC,MAAM,WAAW,yBAAyB;IACxC,WAAW,EAAE,oBAAoB,CAAC;IAClC,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,wBAAsB,kBAAkB,CAAC,EACvC,WAAW,EACX,eAAe,EACf,OAAO,GACR,EAAE,yBAAyB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAyB1D"}