test(timetable): axe-core zero-violation a11y enforcement (Step 11)

Three jsdom axe scans covering the user-facing surface of the canvas.
The scans surfaced two real a11y bugs which are fixed in this same
commit:

  1. PerformancePopover — VProgressLinear (advancing aggregate) had no
     accessible name. Added aria-label that announces "X van Y secties
     afgerond (N%)".
  2. AddPerformanceDialog — the icon-only close button (×) was missing
     aria-label. Added 'Sluiten'.

Test scenarios:
  - PerformanceBlock with focus
  - PerformancePopover open
  - AddPerformanceDialog open

Page-level axe rules (region, page-has-heading-one, landmark-one-main,
color-contrast) are disabled for fragment scans — they only make sense
on a full page, and color-contrast resolution is jsdom-blind. Both are
covered by Playwright CT in TEST-INFRA-001 / TEST-VISUAL-001.

Test count: 380 → 383.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-09 03:53:16 +02:00
parent b65969c459
commit 66a6f7ddc3
3 changed files with 163 additions and 0 deletions

View File

@@ -117,6 +117,7 @@ defineExpose({ form, errors, submit })
icon="tabler-x"
variant="text"
size="small"
aria-label="Sluiten"
@click="emit('update:modelValue', false)"
/>
</VCardTitle>

View File

@@ -113,6 +113,7 @@ function close(): void {
</div>
<VProgressLinear
:model-value="advancing.pct"
:aria-label="`Advancing voortgang: ${advancing.done} van ${advancing.total} secties afgerond (${advancing.pct}%)`"
color="primary"
height="6"
rounded