Skip to content

Automated WCAG 2.1 AA a11y testing across all themes/modes - #38

Draft
sjoerdbeentjes wants to merge 41 commits into
mainfrom
feat/a11y-testing
Draft

Automated WCAG 2.1 AA a11y testing across all themes/modes#38
sjoerdbeentjes wants to merge 41 commits into
mainfrom
feat/a11y-testing

Conversation

@sjoerdbeentjes

@sjoerdbeentjes sjoerdbeentjes commented Jun 22, 2026

Copy link
Copy Markdown
Collaborator

Adds an automated WCAG 2.1 AA pipeline that sweeps every Storybook story across all themes and modes from @surfnet/tokens, in both React and Angular.

What

  • Shared config in @surfnet/storybook-config: browser-safe a11yParameters (merged into both previews, also scopes the addon-a11y panel) and a node-only runStoryA11yAudit behind a ./test-runner subpath so it never enters a preview bundle.
  • Builder-agnostic runner: @storybook/test-runner + axe-playwright against a served Storybook, so one setup covers React (Vite) and Angular (webpack). Each story is audited once per theme × mode (11 themes × 2 modes), writing a per-story JSON report.
  • Wiring: per-package test:a11y / test:a11y:ci scripts, a turbo task, a root script, and a CI step that runs report-only (continue-on-error) and uploads the JSON as an artifact.

Notes

  • CI is intentionally report-only until the token contrast backlog is triaged; flip to blocking by removing continue-on-error.

@sjoerdbeentjes
sjoerdbeentjes force-pushed the feat/a11y-testing branch 5 times, most recently from b563368 to 871c744 Compare June 22, 2026 14:18
@github-actions

github-actions Bot commented Jun 22, 2026

Copy link
Copy Markdown
Contributor

♿ Accessibility audit — WCAG 2.1 AA

⚠️ 187 finding(s) — 155 contrast (per theme·mode), 32 theme-independent · across 378 stories / 10584 audited combinations. Report-only — does not block merge.

@surfnet/curve-angular — 149 finding(s)
Badge — 3 finding(s) · color-contrast only

Default — 1 finding(s)

  • groenvermogen-nkph2
    • light#fafafa on #84cc16 · ratio 1.89 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (groenvermogen-nkph2/light)

Status List — 1 finding(s)

  • groenvermogen-nkph2
    • light#fafafa on #84cc16 · ratio 1.89 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (groenvermogen-nkph2/light)

Variants — 1 finding(s)

  • groenvermogen-nkph2
    • light#fafafa on #84cc16 · ratio 1.89 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (groenvermogen-nkph2/light)
Button — 4 finding(s) · color-contrast only

Default — 1 finding(s)

  • groenvermogen-nkph2
    • light#fafafa on #84cc16 · ratio 1.89 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (groenvermogen-nkph2/light)

Sizes — 1 finding(s)

  • groenvermogen-nkph2
    • light#fafafa on #84cc16 · ratio 1.89 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (groenvermogen-nkph2/light)

Variants — 1 finding(s)

  • groenvermogen-nkph2
    • light#fafafa on #84cc16 · ratio 1.89 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (groenvermogen-nkph2/light)

With Icon — 1 finding(s)

  • groenvermogen-nkph2
    • light#fafafa on #84cc16 · ratio 1.89 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (groenvermogen-nkph2/light)
Calendar — 113 finding(s)

Default — 28 finding(s)

  • default
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (default/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (default/dark)
  • groenvermogen-nkph2
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (groenvermogen-nkph2/light)
    • dark#575757 on #0a0a0a · ratio 2.73 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (groenvermogen-nkph2/dark)
  • shadcn-default
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (shadcn-default/light)
    • dark#575757 on #0a0a0a · ratio 2.73 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (shadcn-default/dark)
  • shadcn-default-grey-background
    • light#a4a4a4 on #f5f5f5 · ratio 2.28 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (shadcn-default-grey-background/light)
    • dark#575757 on #0a0a0a · ratio 2.73 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (shadcn-default-grey-background/dark)
  • surf-blue-purple
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-blue-purple/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-blue-purple/dark)
  • surf-blue-turquoise
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-blue-turquoise/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-blue-turquoise/dark)
  • surf-blue-yellow
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-blue-yellow/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-blue-yellow/dark)
  • surf-green
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-green/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-green/dark)
  • surf-orange
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-orange/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-orange/dark)
  • surf-orange-turquoise
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-orange-turquoise/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-orange-turquoise/dark)
  • surf-pilot
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-pilot/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-pilot/dark)
  • surf-purple
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-purple/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-purple/dark)
  • surf-purple-orange
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-purple-orange/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-purple-orange/dark)
  • surf-yellow
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-yellow/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-yellow/dark)

Disabled Dates — 28 finding(s)

  • default
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (default/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (default/dark)
  • groenvermogen-nkph2
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (groenvermogen-nkph2/light)
    • dark#575757 on #0a0a0a · ratio 2.73 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (groenvermogen-nkph2/dark)
  • shadcn-default
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (shadcn-default/light)
    • dark#575757 on #0a0a0a · ratio 2.73 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (shadcn-default/dark)
  • shadcn-default-grey-background
    • light#a4a4a4 on #f5f5f5 · ratio 2.28 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (shadcn-default-grey-background/light)
    • dark#575757 on #0a0a0a · ratio 2.73 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (shadcn-default-grey-background/dark)
  • surf-blue-purple
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-blue-purple/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-blue-purple/dark)
  • surf-blue-turquoise
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-blue-turquoise/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-blue-turquoise/dark)
  • surf-blue-yellow
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-blue-yellow/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-blue-yellow/dark)
  • surf-green
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-green/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-green/dark)
  • surf-orange
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-orange/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-orange/dark)
  • surf-orange-turquoise
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-orange-turquoise/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-orange-turquoise/dark)
  • surf-pilot
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-pilot/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-pilot/dark)
  • surf-purple
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-purple/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-purple/dark)
  • surf-purple-orange
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-purple-orange/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-purple-orange/dark)
  • surf-yellow
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-yellow/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-yellow/dark)

Dropdown Caption — 29 finding(s)

  • Buttons must have discernible text — button-name (4.1.2) · all themes/modes
    button-name (4.1.2) violation
  • default
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (default/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (default/dark)
  • groenvermogen-nkph2
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (groenvermogen-nkph2/light)
    • dark#575757 on #0a0a0a · ratio 2.73 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (groenvermogen-nkph2/dark)
  • shadcn-default
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (shadcn-default/light)
    • dark#575757 on #0a0a0a · ratio 2.73 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (shadcn-default/dark)
  • shadcn-default-grey-background
    • light#a4a4a4 on #f5f5f5 · ratio 2.28 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (shadcn-default-grey-background/light)
    • dark#575757 on #0a0a0a · ratio 2.73 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (shadcn-default-grey-background/dark)
  • surf-blue-purple
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-blue-purple/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-blue-purple/dark)
  • surf-blue-turquoise
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-blue-turquoise/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-blue-turquoise/dark)
  • surf-blue-yellow
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-blue-yellow/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-blue-yellow/dark)
  • surf-green
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-green/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-green/dark)
  • surf-orange
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-orange/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-orange/dark)
  • surf-orange-turquoise
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-orange-turquoise/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-orange-turquoise/dark)
  • surf-pilot
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-pilot/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-pilot/dark)
  • surf-purple
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-purple/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-purple/dark)
  • surf-purple-orange
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-purple-orange/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-purple-orange/dark)
  • surf-yellow
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-yellow/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-yellow/dark)

Multiple — 28 finding(s)

  • default
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (default/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (default/dark)
  • groenvermogen-nkph2
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (groenvermogen-nkph2/light)
    • dark#575757 on #0a0a0a · ratio 2.73 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (groenvermogen-nkph2/dark)
  • shadcn-default
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (shadcn-default/light)
    • dark#575757 on #0a0a0a · ratio 2.73 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (shadcn-default/dark)
  • shadcn-default-grey-background
    • light#a4a4a4 on #f5f5f5 · ratio 2.28 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (shadcn-default-grey-background/light)
    • dark#575757 on #0a0a0a · ratio 2.73 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (shadcn-default-grey-background/dark)
  • surf-blue-purple
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-blue-purple/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-blue-purple/dark)
  • surf-blue-turquoise
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-blue-turquoise/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-blue-turquoise/dark)
  • surf-blue-yellow
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-blue-yellow/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-blue-yellow/dark)
  • surf-green
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-green/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-green/dark)
  • surf-orange
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-orange/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-orange/dark)
  • surf-orange-turquoise
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-orange-turquoise/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-orange-turquoise/dark)
  • surf-pilot
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-pilot/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-pilot/dark)
  • surf-purple
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-purple/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-purple/dark)
  • surf-purple-orange
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-purple-orange/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-purple-orange/dark)
  • surf-yellow
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-yellow/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-yellow/dark)
DataTable — 1 finding(s) · color-contrast only

Custom Toolbar — 1 finding(s)

  • groenvermogen-nkph2
    • light#fafafa on #84cc16 · ratio 1.89 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (groenvermogen-nkph2/light)
Empty — 2 finding(s) · color-contrast only

Default — 1 finding(s)

  • groenvermogen-nkph2
    • light#fafafa on #84cc16 · ratio 1.89 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (groenvermogen-nkph2/light)

With Multiple Actions — 1 finding(s)

  • groenvermogen-nkph2
    • light#fafafa on #84cc16 · ratio 1.89 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (groenvermogen-nkph2/light)
Item — 1 finding(s) · color-contrast only

With Header And Footer — 1 finding(s)

  • groenvermogen-nkph2
    • light#fafafa on #84cc16 · ratio 1.89 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (groenvermogen-nkph2/light)
NativeSelect — 5 finding(s)

Default — 1 finding(s)

  • Select element must have an accessible name — select-name · all themes/modes
    select-name violation

Disabled — 1 finding(s)

  • Select element must have an accessible name — select-name · all themes/modes
    select-name violation

Invalid — 1 finding(s)

  • Select element must have an accessible name — select-name · all themes/modes
    select-name violation

Sizes — 1 finding(s)

  • Select element must have an accessible name — select-name · all themes/modes
    select-name violation

With Option Groups — 1 finding(s)

  • Select element must have an accessible name — select-name · all themes/modes
    select-name violation
Pagination — 15 finding(s)

Numbered Pagination — 15 finding(s)

  • Buttons must have discernible text — button-name (4.1.2) · all themes/modes
    button-name (4.1.2) violation
  • default
    • dark#4a5565 on #0a0a0a · ratio 2.61 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (default/dark)
  • groenvermogen-nkph2
    • dark#4a5565 on #0a0a0a · ratio 2.61 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (groenvermogen-nkph2/dark)
  • shadcn-default
    • dark#4a5565 on #0a0a0a · ratio 2.61 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (shadcn-default/dark)
  • shadcn-default-grey-background
    • dark#4a5565 on #0a0a0a · ratio 2.61 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (shadcn-default-grey-background/dark)
  • surf-blue-purple
    • dark#4a5565 on #0a0a0a · ratio 2.61 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-blue-purple/dark)
  • surf-blue-turquoise
    • dark#4a5565 on #0a0a0a · ratio 2.61 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-blue-turquoise/dark)
  • surf-blue-yellow
    • dark#4a5565 on #0a0a0a · ratio 2.61 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-blue-yellow/dark)
  • surf-green
    • dark#4a5565 on #0a0a0a · ratio 2.61 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-green/dark)
  • surf-orange
    • dark#4a5565 on #0a0a0a · ratio 2.61 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-orange/dark)
  • surf-orange-turquoise
    • dark#4a5565 on #0a0a0a · ratio 2.61 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-orange-turquoise/dark)
  • surf-pilot
    • dark#4a5565 on #0a0a0a · ratio 2.61 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-pilot/dark)
  • surf-purple
    • dark#4a5565 on #0a0a0a · ratio 2.61 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-purple/dark)
  • surf-purple-orange
    • dark#4a5565 on #0a0a0a · ratio 2.61 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-purple-orange/dark)
  • surf-yellow
    • dark#4a5565 on #0a0a0a · ratio 2.61 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-yellow/dark)
Select — 2 finding(s)

Default — 1 finding(s)

  • Buttons must have discernible text — button-name (4.1.2) · all themes/modes
    button-name (4.1.2) violation

Grouped — 1 finding(s)

  • Buttons must have discernible text — button-name (4.1.2) · all themes/modes
    button-name (4.1.2) violation
Sidebar — 2 finding(s) · color-contrast only

Default — 2 finding(s)

  • surf-blue-yellow
    • dark#fafafa on #8a7900 · ratio 4.17 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-blue-yellow/dark)
  • surf-yellow
    • dark#fafafa on #8a7900 · ratio 4.17 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-yellow/dark)
Tabs — 1 finding(s) · color-contrast only

Default — 1 finding(s)

  • groenvermogen-nkph2
    • light#fafafa on #84cc16 · ratio 1.89 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (groenvermogen-nkph2/light)
@surfnet/curve-react — 38 finding(s)
Badge — 3 finding(s) · color-contrast only

Default — 1 finding(s)

  • groenvermogen-nkph2
    • light#fafafa on #84cc16 · ratio 1.89 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (groenvermogen-nkph2/light)

Status List — 1 finding(s)

  • groenvermogen-nkph2
    • light#fafafa on #84cc16 · ratio 1.89 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (groenvermogen-nkph2/light)

Variants — 1 finding(s)

  • groenvermogen-nkph2
    • light#fafafa on #84cc16 · ratio 1.89 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (groenvermogen-nkph2/light)
Button — 4 finding(s) · color-contrast only

Default — 1 finding(s)

  • groenvermogen-nkph2
    • light#fafafa on #84cc16 · ratio 1.89 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (groenvermogen-nkph2/light)

Sizes — 1 finding(s)

  • groenvermogen-nkph2
    • light#fafafa on #84cc16 · ratio 1.89 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (groenvermogen-nkph2/light)

Variants — 1 finding(s)

  • groenvermogen-nkph2
    • light#fafafa on #84cc16 · ratio 1.89 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (groenvermogen-nkph2/light)

With Icon — 1 finding(s)

  • groenvermogen-nkph2
    • light#fafafa on #84cc16 · ratio 1.89 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (groenvermogen-nkph2/light)
Card — 1 finding(s) · color-contrast only

Default — 1 finding(s)

  • groenvermogen-nkph2
    • light#fafafa on #84cc16 · ratio 1.89 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (groenvermogen-nkph2/light)
Combobox — 1 finding(s)

Multiple — 1 finding(s)

  • Buttons must have discernible text — button-name (4.1.2) · all themes/modes
    button-name (4.1.2) violation
DataTable — 1 finding(s) · color-contrast only

Custom Toolbar — 1 finding(s)

  • groenvermogen-nkph2
    • light#fafafa on #84cc16 · ratio 1.89 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (groenvermogen-nkph2/light)
Empty — 2 finding(s) · color-contrast only

Default — 1 finding(s)

  • groenvermogen-nkph2
    • light#fafafa on #84cc16 · ratio 1.89 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (groenvermogen-nkph2/light)

With Multiple Actions — 1 finding(s)

  • groenvermogen-nkph2
    • light#fafafa on #84cc16 · ratio 1.89 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (groenvermogen-nkph2/light)
Item — 2 finding(s)

Group — 1 finding(s)

  • Certain ARIA roles must contain particular children — aria-required-children · all themes/modes
    aria-required-children violation

With Header And Footer — 1 finding(s)

  • groenvermogen-nkph2
    • light#fafafa on #84cc16 · ratio 1.89 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (groenvermogen-nkph2/light)
NativeSelect — 2 finding(s)

Disabled — 1 finding(s)

  • Select element must have an accessible name — select-name · all themes/modes
    select-name violation

Invalid — 1 finding(s)

  • Select element must have an accessible name — select-name · all themes/modes
    select-name violation
Pagination — 1 finding(s)

NumberedPagination — 1 finding(s)

  • Buttons must have discernible text — button-name (4.1.2) · all themes/modes
    button-name (4.1.2) violation
Resizable — 1 finding(s)

Composed Layout — 1 finding(s)

  • Scrollable region must have keyboard access — scrollable-region-focusable · all themes/modes
    scrollable-region-focusable violation
Select — 3 finding(s)

Default — 1 finding(s)

  • Buttons must have discernible text — button-name (4.1.2) · all themes/modes
    button-name (4.1.2) violation

Disabled — 1 finding(s)

  • Buttons must have discernible text — button-name (4.1.2) · all themes/modes
    button-name (4.1.2) violation

Grouped — 1 finding(s)

  • Buttons must have discernible text — button-name (4.1.2) · all themes/modes
    button-name (4.1.2) violation
Sidebar — 2 finding(s) · color-contrast only

Default — 2 finding(s)

  • surf-blue-yellow
    • dark#fafafa on #8a7900 · ratio 4.17 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-blue-yellow/dark)
  • surf-yellow
    • dark#fafafa on #8a7900 · ratio 4.17 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-yellow/dark)
Slider — 6 finding(s)

Default — 1 finding(s)

  • Form elements must have labels — label · all themes/modes
    label violation

Disabled — 1 finding(s)

  • Form elements must have labels — label · all themes/modes
    label violation

Horizontal — 1 finding(s)

  • Form elements must have labels — label · all themes/modes
    label violation

Range — 1 finding(s)

  • Form elements must have labels — label · all themes/modes
    label violation

Vertical — 1 finding(s)

  • Form elements must have labels — label · all themes/modes
    label violation

With Field — 1 finding(s)

  • Form elements must have labels — label · all themes/modes
    label violation
Switch — 1 finding(s)

Default — 1 finding(s)

  • ARIA toggle fields must have an accessible name — aria-toggle-field-name · all themes/modes
    aria-toggle-field-name violation
Tabs — 1 finding(s) · color-contrast only

Default — 1 finding(s)

  • groenvermogen-nkph2
    • light#fafafa on #84cc16 · ratio 1.89 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (groenvermogen-nkph2/light)
ToggleGroup — 7 finding(s)

Default — 1 finding(s)

  • Elements must only use supported ARIA attributes — aria-allowed-attr · all themes/modes
    aria-allowed-attr violation

Disabled — 1 finding(s)

  • Elements must only use supported ARIA attributes — aria-allowed-attr · all themes/modes
    aria-allowed-attr violation

Sizes — 1 finding(s)

  • Elements must only use supported ARIA attributes — aria-allowed-

…truncated; see the a11y-reports artifact for the full list.

@sjoerdbeentjes sjoerdbeentjes linked an issue Jun 23, 2026 that may be closed by this pull request
@sjoerdbeentjes
sjoerdbeentjes force-pushed the feat/a11y-testing branch 3 times, most recently from 8b13cff to fc78595 Compare June 30, 2026 06:45
@sjoerdbeentjes
sjoerdbeentjes force-pushed the feat/a11y-testing branch 4 times, most recently from 52bcb10 to 5afc87c Compare July 1, 2026 18:46
Comment thread .github/workflows/ci.yml

# Scoped to @surfnet/storybook-config, which pins playwright, so both
# framework runs share one browser.
- name: Install Playwright Chromium

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hoe is de performance? Ik zou verwachten dat we in een CI-stap een headless browser gebruiken.

@sjoerdbeentjes
sjoerdbeentjes force-pushed the feat/a11y-testing branch 2 times, most recently from 573772a to 4c66f62 Compare July 6, 2026 07:43
github-actions Bot added a commit that referenced this pull request Jul 6, 2026
github-actions Bot added a commit that referenced this pull request Jul 6, 2026
github-actions Bot added a commit that referenced this pull request Jul 6, 2026
github-actions Bot added a commit that referenced this pull request Jul 7, 2026
github-actions Bot added a commit that referenced this pull request Jul 14, 2026
github-actions Bot added a commit that referenced this pull request Aug 25, 2026
github-actions Bot added a commit that referenced this pull request Sep 1, 2026
github-actions Bot added a commit that referenced this pull request Sep 1, 2026
github-actions Bot added a commit that referenced this pull request Sep 1, 2026
github-actions Bot added a commit that referenced this pull request Sep 1, 2026
github-actions Bot added a commit that referenced this pull request Sep 1, 2026
github-actions Bot added a commit that referenced this pull request Sep 1, 2026
github-actions Bot added a commit that referenced this pull request Sep 1, 2026
github-actions Bot added a commit that referenced this pull request Sep 1, 2026
github-actions Bot added a commit that referenced this pull request Sep 1, 2026
anneke and others added 2 commits September 8, 2026 08:40
* feat: add documentation pages in Storybook

* feat: add a11y documentation pages in Storybook #119

* feat: add AI agents/personas

* feat: expand on a11y documentation pages for structure

* feat: expand on a11y documentation pages for structure

* feat: expand on a11y documentation pages for structure

* feat: expand on a11y documentation pages for structure

* feat: expand on a11y documentation pages for structure

* Update documentation
# Conflicts:
#	packages/storybook-config/package.json
#	pnpm-lock.yaml
github-actions Bot added a commit that referenced this pull request Sep 8, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

WCAG 2.1 AA-check op alle PoC-componenten

3 participants