{"_id":"@ariada-org/wcag-rules-extended","name":"@ariada-org/wcag-rules-extended","dist-tags":{"latest":"0.1.0"},"versions":{"0.1.0":{"name":"@ariada-org/wcag-rules-extended","version":"0.1.0","description":"EAA 2025-ready WCAG 2.2 AA rule packs extending axe-core. Open source under EUPL-1.2.","license":"EUPL-1.2","type":"module","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./rules":{"types":"./dist/rules/index.d.ts","import":"./dist/rules/index.js"}},"dependencies":{"@ariada-org/penalty-estimator":"0.1.0","@ariada-org/evidence-emitter":"0.1.0","@ariada-org/statement-generator":"0.1.0"},"peerDependencies":{"axe-core":"^4.10.0"},"devDependencies":{"@axe-core/playwright":"^4.11.3","@playwright/test":"^1.60.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/typescript-checker":"^9.6.1","@stryker-mutator/vitest-runner":"^9.6.1","@types/node":"^22.10.0","@vitest/coverage-v8":"^2.1.8","axe-core":"^4.10.2","esbuild":"^0.28.0","eslint":"^9.17.0","happy-dom":"^20.8.9","rimraf":"^6.0.1","typescript":"^5.7.2","vitest":"^4.1.0","@ariada-org/test-fixtures":"0.2.0"},"engines":{"node":">=22"},"keywords":["accessibility","a11y","wcag","wcag-2.2","axe-core","eaa","european-accessibility-act","eupl"],"homepage":"https://ariada.org/wcag-rules-extended","repository":{"type":"git","url":"git+https://github.com/ariada-org/ariada.git","directory":"packages/wcag-rules-extended"},"bugs":{"url":"https://github.com/ariada-org/ariada/issues"},"author":{"name":"Alekszandr Bricskin","email":"git@ariada.org","url":"Agonist Development AB"},"publishConfig":{"access":"public","provenance":true},"scripts":{"build":"tsc -p tsconfig.json","typecheck":"tsc -p tsconfig.json --noEmit","lint":"eslint src test","test":"vitest run","test:watch":"vitest","test:coverage":"vitest run --coverage","test:e2e":"playwright test","test:e2e:ui":"playwright test --ui","test:e2e:debug":"playwright test --debug","test:property":"vitest run src/__property__/","test:mutation":"stryker run","test:mutation:report":"open reports/mutation/mutation.html","ip-guard":"bash scripts/oss-ip-guard.sh --all","clean":"rimraf dist coverage"},"_id":"@ariada-org/wcag-rules-extended@0.1.0","_integrity":"sha512-Vh//hvZd6TtjiDH5exZyZCtwkCtbwl9sg1M8u5EQOP2zBTfBCTu3ot6iY0OuZbMKoJSxeMR4cDVd4805vM3mQA==","_resolved":"/tmp/62ed2acd9a4eb3327def95a79490f492/ariada-org-wcag-rules-extended-0.1.0.tgz","_from":"file:ariada-org-wcag-rules-extended-0.1.0.tgz","_nodeVersion":"22.22.3","_npmVersion":"10.9.8","dist":{"integrity":"sha512-Vh//hvZd6TtjiDH5exZyZCtwkCtbwl9sg1M8u5EQOP2zBTfBCTu3ot6iY0OuZbMKoJSxeMR4cDVd4805vM3mQA==","shasum":"e2b23f3e65e6d6523e5c751a0817f5a89168a03a","tarball":"https://registry.npmjs.org/@ariada-org/wcag-rules-extended/-/wcag-rules-extended-0.1.0.tgz","fileCount":251,"unpackedSize":408902,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ariada-org%2fwcag-rules-extended@0.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIB7DEBIb5AjkcW39EY7tFI6vcwHFdOjVD6q2c1a2IF36AiBFVFaCajzWw5h+3EqJF3rvOzJb5TlNZROZNz7DvTzmFQ=="}]},"_npmUser":{"name":"agonist","email":"ab@agonist.ai"},"directories":{},"maintainers":[{"name":"agonist","email":"ab@agonist.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/wcag-rules-extended_0.1.0_1781536578009_0.7018814706438177"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-15T15:16:17.824Z","0.1.0":"2026-06-15T15:16:18.152Z","modified":"2026-06-15T15:16:18.603Z"},"maintainers":[{"name":"agonist","email":"ab@agonist.ai"}],"description":"EAA 2025-ready WCAG 2.2 AA rule packs extending axe-core. Open source under EUPL-1.2.","homepage":"https://ariada.org/wcag-rules-extended","keywords":["accessibility","a11y","wcag","wcag-2.2","axe-core","eaa","european-accessibility-act","eupl"],"repository":{"type":"git","url":"git+https://github.com/ariada-org/ariada.git","directory":"packages/wcag-rules-extended"},"author":{"name":"Alekszandr Bricskin","email":"git@ariada.org","url":"Agonist Development AB"},"bugs":{"url":"https://github.com/ariada-org/ariada/issues"},"license":"EUPL-1.2","readme":"<!-- SPDX-FileCopyrightText: 2025-2026 Agonist Development AB -->\n<!-- SPDX-License-Identifier: CC-BY-SA-4.0 -->\n\n# @ariada-org/wcag-rules-extended\n\nEAA 2025-aligned WCAG 2.2 AA rule packs that extend axe-core with EU-specific checks.\n\n[![License: EUPL-1.2](https://img.shields.io/badge/license-EUPL--1.2-blue)](LICENSE)\n[![CI](https://github.com/ariada-org/ariada/actions/workflows/ci.yml/badge.svg)](https://github.com/ariada-org/ariada/actions/workflows/ci.yml)\n[![REUSE compliant](https://img.shields.io/badge/REUSE-3.3%20compliant-brightgreen)](https://reuse.software/)\n\n## Quick-start\n\n```bash\nnpm install --save-dev @ariada-org/wcag-rules-extended axe-core\n```\n\n```ts\nimport axe from \"axe-core\";\nimport { addEaaRules } from \"@ariada-org/wcag-rules-extended\";\n\naddEaaRules(axe); // register 31 EAA-aligned rules\nconst results = await axe.run(); // standard axe-core API\n```\n\n`axe-core` is a peer dependency (not bundled). Node ≥ 22.\n\n## What this package does\n\nThe European Accessibility Act (EAA — Directive (EU) 2019/882, enforceable since 28 June 2025) requires WCAG 2.2 AA conformance plus sector-specific obligations for e-commerce checkout, banking, and accessibility-statement publication. The upstream [axe-core](https://github.com/dequelabs/axe-core) ruleset covers WCAG 2.2 AA generically; it does not implement EAA Annex I sector checks or Nordic-locale national-transposition requirements.\n\nThis package adds three rule packs that close that gap. Each rule cites its WCAG 2.2 Success Criterion (SC), the corresponding EN 301 549 v3.2.1 clause, and the EAA Annex I § it implements. Rules are registered through the documented `axe.configure({ rules, checks })` API — no axe-core source modification, no monkey-patching.\n\nThe package also re-exports three sibling helpers (`emitVpat`, `generateStatement`, `estimatePenalty`) so a single scanner run can produce VPAT 2.5 JSON, an EN 301 549 §11 conformance report, a Nordic accessibility-statement HTML file, and a per-jurisdiction penalty exposure estimate.\n\n## What this package does NOT do\n\nIt does not run a browser, host a scanner, or talk to any external service. It exposes rule and check definitions plus a small `addEaaRules(axe)` helper. The caller drives axe-core in whatever environment they already use (CI, Playwright, Puppeteer, `@axe-core/cli`, a browser extension). It does not attempt to grade conformance for non-Nordic jurisdictions beyond the EU-level Directive baseline.\n\n## API summary\n\n| Export                                     | Signature                                        | Use                                                              |\n| ------------------------------------------ | ------------------------------------------------ | ---------------------------------------------------------------- |\n| `addEaaRules(axe)`                         | `(axe: AxeLikeConfigurable) => void`             | Register all 31 rules + checks on a given axe instance           |\n| `eaaConfig()`                              | `() => { rules, checks }`                        | Return a config object for manual `axe.configure(...)`           |\n| `ecommerceCheckoutRules` / `Checks`        | `RuleDefinition[]` / `CheckDefinition[]`         | Pack A — 11 rules, EAA Annex I §I.3                              |\n| `statementRules` / `Checks`                | `RuleDefinition[]` / `CheckDefinition[]`         | Pack B — 10 rules, EAA Annex I §I.1 + Directive 2016/2102 art. 7 |\n| `bankingRules` / `Checks`                  | `RuleDefinition[]` / `CheckDefinition[]`         | Pack C — 10 rules, EAA Annex I §I.4 + Nordic-locale patterns     |\n| `allRules` / `allChecks`                   | `RuleDefinition[]` / `CheckDefinition[]`         | Aggregate across all three packs                                 |\n| `emitVpat`, `emitEn301549`, `emitDosLagen` | re-export from `@ariada-org/evidence-emitter`    | Generate compliance artefacts from violations                    |\n| `generateStatement`                        | re-export from `@ariada-org/statement-generator` | Render an accessibility-statement HTML/MDX file                  |\n| `estimatePenalty`, `listJurisdictions`     | re-export from `@ariada-org/penalty-estimator`   | Per-jurisdiction fine exposure estimate                          |\n\nFull rule catalogue with per-rule SC + clause + § mapping: [`docs/rules/INDEX.md`](docs/rules/INDEX.md). Methodology in [`docs/METHODOLOGY.md`](docs/METHODOLOGY.md).\n\n## Regulatory mapping\n\n- WCAG 2.2 AA — implements SC 1.3.1, 1.4.3, 2.4.6, 3.3.2, 3.3.4, 3.3.7, 4.1.2, 4.1.3 (full list per rule in `docs/rules/INDEX.md`)\n- EN 301 549 v3.2.1 — §6.5.1 (numeric input), §9.1.3.5 (identify input purpose), §9.3.3.4 (error prevention), §11.7 (user preferences)\n- Directive (EU) 2019/882 (EAA) Annex I — §I.1 statement, §I.3 e-commerce checkout, §I.4 banking\n- Directive (EU) 2016/2102 art. 7 — accessibility-statement template for public-sector bodies\n- National transpositions — Lag (2018:1937) DOS-lagen (SE), forskrift om universell utforming (NO), webtilgængelighed-bekendtgørelsen (DK), saavutettavuuslaki (FI)\n\n## Tests + verification\n\nThe package ships **31 rules** (11 checkout + 10 statement + 10 banking), with **693 individual tests across 38 test files** (vitest). This includes 2 property-based suites via fast-check (`src/__property__/banking-rules.property.test.ts`, `src/__property__/helpers.property.test.ts`), an axe-core integration suite (`test/axe-core-integration.test.ts`), and an EU real-world fixture suite (`test/eu-real-world-fixtures.test.ts`).\n\nReproduce locally: `pnpm test` for the full run, `pnpm test --reporter=verbose` for the per-file breakdown, `pnpm test:coverage` for coverage, `pnpm test:mutation` for Stryker mutation testing.\n\n## Sibling packages\n\n- [`@ariada-org/core-engine`](../core-engine) — runtime-agnostic scanner engine\n- [`@ariada-org/evidence-emitter`](../ariada-evidence-emitter) — VPAT / EN 301 549 / DOS-lagen JSON emitters\n- [`@ariada-org/statement-generator`](../ariada-statement-generator) — EN 301 549 §7 accessibility-statement HTML/MDX\n\n## License\n\nEUPL-1.2 — see [LICENSE](LICENSE). axe-core (MPL-2.0) attribution in [NOTICE](NOTICE).\n","readmeFilename":"README.md","_rev":"1-1649bd2e4d7b3bb9a16963a0dcdeac87"}