eaa-kit 0.4.0 → 0.6.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 (64) hide show
  1. package/README.md +66 -11
  2. package/dist/astro/index.d.ts +1 -1
  3. package/dist/astro/index.js +1 -1
  4. package/dist/audit/runners/worker.js +5 -1
  5. package/dist/audit-DK2StT1_.js +2 -0
  6. package/dist/{audit-CPoZMXGM.js → audit-e_uixhPG.js} +123 -54
  7. package/dist/baseline-BscHfFSW.js +2 -0
  8. package/dist/{baseline-DB9CZGnV.js → baseline-D2qWmUC6.js} +40 -12
  9. package/dist/checklist-BtgkxMEa.js +44 -0
  10. package/dist/cli/index.js +153 -25
  11. package/dist/{collect-CFM8gEVv.js → collect-Cu1q9NTB.js} +34 -3
  12. package/dist/command-CZKp9Wi_.js +251 -0
  13. package/dist/{remediation-Dtowi2EC.js → completeness-Dwq3CPB3.js} +61 -43
  14. package/dist/{component-C3GL1Mnu.js → component-ChisoFyY.js} +1 -1
  15. package/dist/{component-DKd3EHOg.js → component-DcCn3BJS.js} +1 -1
  16. package/dist/coverage-7bQqWNfN.js +2 -0
  17. package/dist/{coverage-B4IBKMO8.js → coverage-BD2_CYns.js} +46 -8
  18. package/dist/{crawl-BiI1Lau_.js → crawl-BHkJmUkA.js} +119 -11
  19. package/dist/eleventy/index.d.ts +1 -1
  20. package/dist/eleventy/index.js +1 -1
  21. package/dist/fingerprint-BjYV_0F7.js +67 -0
  22. package/dist/{html-BGTO3ypW.js → html-Bmh7X_sM.js} +52 -30
  23. package/dist/{impact-DZt2oBCP.js → impact-luGCnN8F.js} +11 -1
  24. package/dist/index.d.ts +187 -5
  25. package/dist/index.js +3 -3
  26. package/dist/{init-DIWDE35F.js → init-BjKYttxc.js} +10 -4
  27. package/dist/{jsdom-DCpGSLfW.js → jsdom-CQar6OQS.js} +12 -4
  28. package/dist/jsdom-DMvU2h-f.js +3 -0
  29. package/dist/{json-QQuFIw1W.js → json-HJDgJp09.js} +1 -1
  30. package/dist/{json-DjEvy1nX.js → json-PNg6BeXp.js} +13 -18
  31. package/dist/load-Bc_xDGAh.js +2 -0
  32. package/dist/{load-5wRGLvub.js → load-vZdV_fD1.js} +137 -8
  33. package/dist/nuxt/index.d.ts +1 -1
  34. package/dist/nuxt/index.js +1 -1
  35. package/dist/{playwright-BWniOain.js → playwright-C-miJP2b.js} +32 -7
  36. package/dist/{pool-BMevaLWD.js → pool-dkexq5xo.js} +52 -2
  37. package/dist/{render-DrvXRCEn.js → render-CtsqR0k-.js} +150 -11
  38. package/dist/{result-DoamKFsp.js → result-DfUru6y_.js} +60 -3
  39. package/dist/review-CdMK2GpQ.js +161 -0
  40. package/dist/review-DIbOTmOM.js +2 -0
  41. package/dist/{run-DB34BSOZ.js → run-D7hdVXLA.js} +1 -1
  42. package/dist/{run-BMASMmwO.d.ts → run-YiqyQA2b.d.ts} +17 -0
  43. package/dist/{sarif-SR3_lLYd.js → sarif-BKvq_AUm.js} +25 -14
  44. package/dist/{schema-is6CGX2D.js → schema-DJSF4K05.js} +15 -1
  45. package/dist/statement/templates/es.en.md +125 -0
  46. package/dist/statement/templates/es.es.md +127 -0
  47. package/dist/statement/templates/fr.en.md +128 -0
  48. package/dist/statement/templates/fr.fr.md +131 -0
  49. package/dist/statement/templates/it.en.md +127 -0
  50. package/dist/statement/templates/it.it.md +130 -0
  51. package/dist/statement/templates/nl.en.md +125 -0
  52. package/dist/statement/templates/nl.nl.md +127 -0
  53. package/dist/{text-CKKpzkYM.js → text-BF1LHMiV.js} +22 -2
  54. package/dist/vite/index.d.ts +1 -1
  55. package/dist/vite/index.js +1 -1
  56. package/dist/webpack/index.d.ts +1 -1
  57. package/dist/webpack/index.js +1 -1
  58. package/dist/worksheet-eUjwYLxC.js +63 -0
  59. package/package.json +7 -3
  60. package/dist/audit-CpXH2Mk8.js +0 -2
  61. package/dist/baseline-22Y1NWxM.js +0 -2
  62. package/dist/command-D8l_oYbV.js +0 -77
  63. package/dist/fingerprint-DRoneAjj.js +0 -20
  64. package/dist/jsdom-4IMzv0eE.js +0 -3
@@ -0,0 +1,127 @@
1
+ # Accessibility Statement
2
+
3
+ {{ provider.legalName }} is committed to making the website {{ site.name }} accessible in
4
+ accordance with Legislative Decree 82 of 27 May 2022, which transposes Directive (EU)
5
+ 2019/882 (the European Accessibility Act) into Italian law and amends Law 4 of 9 January
6
+ 2004 (the Stanca Act). Its provisions apply from 28 June 2025.
7
+
8
+ This accessibility statement applies to {{ site.url }}.
9
+
10
+ ## Compliance status
11
+
12
+ {{#if compliance.isCompliant}}
13
+ This website is fully compliant with {{ compliance.standard }}.
14
+ {{/if}}
15
+ {{#if compliance.isPartiallyCompliant}}
16
+ This website is partially compliant with {{ compliance.standard }}. The content listed in
17
+ the following section is not accessible, for the reasons given.
18
+ {{/if}}
19
+ {{#if compliance.isNonCompliant}}
20
+ This website is not compliant with {{ compliance.standard }}. The content listed in the
21
+ following section is not accessible, for the reasons given.
22
+ {{/if}}
23
+
24
+ ## Non-accessible content
25
+
26
+ {{#if hasKnownIssues}}
27
+ {{#each compliance.knownIssues}}
28
+ - {{ description }}
29
+ {{#if standards}}
30
+ Requirement affected: {{ standards }}
31
+ {{/if}}
32
+ {{#if pageList}}
33
+ Pages affected: {{ pageList }}{{#if hasMorePages}} and {{ morePages }} more{{/if}}
34
+ {{/if}}
35
+ {{#if isDisproportionateBurden}}
36
+ Reason: disproportionate burden.
37
+ {{/if}}
38
+ {{#if isOutOfScope}}
39
+ Reason: the content falls outside the scope of Legislative Decree 82/2022.
40
+ {{/if}}
41
+ {{#if isFixPlanned}}
42
+ Reason: the barrier is known and is being addressed.
43
+ {{/if}}
44
+ {{#if remedyByFormatted}}
45
+ Expected to be resolved by: {{ remedyByFormatted }}
46
+ {{/if}}
47
+ {{#if isFromAudit}}
48
+ Detected by automated testing (axe-core, rule {{ ruleId }}); describe it in your own words.
49
+ {{/if}}
50
+ {{/each}}
51
+ {{/if}}
52
+ {{#if hasNoKnownIssues}}
53
+ No non-accessible content was known at the time of assessment.
54
+ {{/if}}
55
+
56
+ ## Preparation of this statement
57
+
58
+ This statement was prepared on {{ compliance.assessedOnFormatted }}.
59
+
60
+ {{#if compliance.isSelfAssessment}}
61
+ It is based on a self-assessment carried out by {{ provider.legalName }}.
62
+ {{/if}}
63
+ {{#if compliance.isExternalAudit}}
64
+ It is based on an assessment carried out by a third party.
65
+ {{/if}}
66
+
67
+ {{#if audit.isSinglePage}}
68
+ The automated test run of {{ audit.checkedOnFormatted }} covered one page of this website.
69
+ {{/if}}
70
+ {{#if audit.isMultiPage}}
71
+ The automated test run of {{ audit.checkedOnFormatted }} covered {{ audit.pages }}
72
+ pages of this website.
73
+ {{/if}}
74
+ {{#if audit.needsReviewIsSingle}}
75
+ One further rule check requires a manual decision.
76
+ {{/if}}
77
+ {{#if audit.needsReviewIsPlural}}
78
+ {{ audit.needsReview }} further rule checks require a manual decision.
79
+ {{/if}}
80
+ {{#if audit.notEvaluatedIsSingle}}
81
+ One rule check could not be decided by the tool that was used; it is not reported as met.
82
+ {{/if}}
83
+ {{#if audit.notEvaluatedIsPlural}}
84
+ {{ audit.notEvaluated }} rule checks could not be decided by the tool that was used; they
85
+ are not reported as met.
86
+ {{/if}}
87
+ {{#if hasAudit}}
88
+
89
+ {{/if}}
90
+ The assessment relies in part on automated testing. Automated tools detect only a subset
91
+ of possible barriers; they are not a substitute for manual testing or for testing with
92
+ assistive technologies.
93
+
94
+ ## Feedback and contact
95
+
96
+ Found a barrier, or need information in an accessible format? Please get in touch:
97
+
98
+ - Email: {{ provider.email }}
99
+ {{#if provider.feedbackUrl}}
100
+ - Contact form: {{ provider.feedbackUrl }}
101
+ {{/if}}
102
+ {{#if provider.phone}}
103
+ - Phone: {{ provider.phone }}
104
+ {{/if}}
105
+ {{#if provider.address}}
106
+ - Address: {{ provider.address }}
107
+ {{/if}}
108
+
109
+ We aim to respond to your feedback promptly.
110
+
111
+ ## Enforcement procedure
112
+
113
+ If you are not satisfied with our response, you can report the barrier to the Agency for
114
+ Digital Italy (AgID), the authority supervising the accessibility of services within the
115
+ scope of Legislative Decree 82/2022.
116
+
117
+ Agenzia per l'Italia digitale
118
+ https://www.agid.gov.it
119
+
120
+ Private providers of public-facing services whose average turnover over the last three
121
+ years exceeds €500 million publish and update an accessibility declaration on AgID's own
122
+ model, by 23 September each year. This document does not stand in for that declaration.
123
+
124
+ ---
125
+
126
+ This statement was generated with eaa-kit and is not legal advice. Review it before
127
+ publishing, and have it checked by a lawyer if in doubt.
@@ -0,0 +1,130 @@
1
+ # Dichiarazione di accessibilità
2
+
3
+ {{ provider.legalName }} si impegna a rendere accessibile il sito {{ site.name }} in
4
+ conformità al decreto legislativo 27 maggio 2022, n. 82, che recepisce la direttiva (UE)
5
+ 2019/882 (European Accessibility Act) e modifica la legge 9 gennaio 2004, n. 4 (legge
6
+ Stanca). Le relative disposizioni si applicano dal 28 giugno 2025.
7
+
8
+ Questa dichiarazione di accessibilità si riferisce a {{ site.url }}.
9
+
10
+ ## Stato di conformità
11
+
12
+ {{#if compliance.isCompliant}}
13
+ Questo sito è pienamente conforme a {{ compliance.standard }}.
14
+ {{/if}}
15
+ {{#if compliance.isPartiallyCompliant}}
16
+ Questo sito è parzialmente conforme a {{ compliance.standard }}. I contenuti elencati nella
17
+ sezione seguente non sono accessibili, per i motivi indicati.
18
+ {{/if}}
19
+ {{#if compliance.isNonCompliant}}
20
+ Questo sito non è conforme a {{ compliance.standard }}. I contenuti elencati nella sezione
21
+ seguente non sono accessibili, per i motivi indicati.
22
+ {{/if}}
23
+
24
+ ## Contenuti non accessibili
25
+
26
+ {{#if hasKnownIssues}}
27
+ {{#each compliance.knownIssues}}
28
+ - {{ description }}
29
+ {{#if standards}}
30
+ Requisito interessato: {{ standards }}
31
+ {{/if}}
32
+ {{#if pageList}}
33
+ Pagine interessate: {{ pageList }}{{#if hasMorePages}} e altre {{ morePages }}{{/if}}
34
+ {{/if}}
35
+ {{#if isDisproportionateBurden}}
36
+ Motivo: onere sproporzionato.
37
+ {{/if}}
38
+ {{#if isOutOfScope}}
39
+ Motivo: il contenuto non rientra nell'ambito di applicazione del d.lgs. 82/2022.
40
+ {{/if}}
41
+ {{#if isFixPlanned}}
42
+ Motivo: la barriera è nota ed è in corso di correzione.
43
+ {{/if}}
44
+ {{#if remedyByFormatted}}
45
+ Correzione prevista entro il: {{ remedyByFormatted }}
46
+ {{/if}}
47
+ {{#if isFromAudit}}
48
+ Rilevato da un test automatico (axe-core, regola {{ ruleId }}); da riformulare con parole proprie.
49
+ {{/if}}
50
+ {{/each}}
51
+ {{/if}}
52
+ {{#if hasNoKnownIssues}}
53
+ Al momento della valutazione non risultavano contenuti non accessibili.
54
+ {{/if}}
55
+
56
+ ## Redazione della presente dichiarazione
57
+
58
+ Questa dichiarazione è stata redatta il {{ compliance.assessedOnFormatted }}.
59
+
60
+ {{#if compliance.isSelfAssessment}}
61
+ Si basa su un'autovalutazione svolta da {{ provider.legalName }}.
62
+ {{/if}}
63
+ {{#if compliance.isExternalAudit}}
64
+ Si basa su una valutazione svolta da terzi.
65
+ {{/if}}
66
+
67
+ {{#if audit.isSinglePage}}
68
+ Il test automatico del {{ audit.checkedOnFormatted }} ha riguardato una pagina di questo
69
+ sito.
70
+ {{/if}}
71
+ {{#if audit.isMultiPage}}
72
+ Il test automatico del {{ audit.checkedOnFormatted }} ha riguardato {{ audit.pages }}
73
+ pagine di questo sito.
74
+ {{/if}}
75
+ {{#if audit.needsReviewIsSingle}}
76
+ Un'ulteriore verifica di regola richiede una valutazione manuale.
77
+ {{/if}}
78
+ {{#if audit.needsReviewIsPlural}}
79
+ Altre {{ audit.needsReview }} verifiche di regole richiedono una valutazione manuale.
80
+ {{/if}}
81
+ {{#if audit.notEvaluatedIsSingle}}
82
+ Per una verifica di regola lo strumento utilizzato non ha raggiunto un esito; non viene
83
+ presentata come soddisfatta.
84
+ {{/if}}
85
+ {{#if audit.notEvaluatedIsPlural}}
86
+ Per {{ audit.notEvaluated }} verifiche di regole lo strumento utilizzato non ha raggiunto
87
+ un esito; non vengono presentate come soddisfatte.
88
+ {{/if}}
89
+ {{#if hasAudit}}
90
+
91
+ {{/if}}
92
+ La valutazione si basa anche su test automatici. Gli strumenti automatici rilevano solo una
93
+ parte delle barriere possibili; non sostituiscono né una verifica manuale né una verifica
94
+ con tecnologie assistive.
95
+
96
+ ## Riscontri e contatti
97
+
98
+ Ha incontrato una barriera, o le serve un'informazione in forma accessibile? Ci scriva:
99
+
100
+ - E-mail: {{ provider.email }}
101
+ {{#if provider.feedbackUrl}}
102
+ - Modulo di contatto: {{ provider.feedbackUrl }}
103
+ {{/if}}
104
+ {{#if provider.phone}}
105
+ - Telefono: {{ provider.phone }}
106
+ {{/if}}
107
+ {{#if provider.address}}
108
+ - Indirizzo: {{ provider.address }}
109
+ {{/if}}
110
+
111
+ Ci impegniamo a rispondere in tempi brevi.
112
+
113
+ ## Procedura di attuazione
114
+
115
+ Se la risposta non è soddisfacente, può segnalare la barriera all'Agenzia per l'Italia
116
+ digitale (AgID), autorità di vigilanza sull'accessibilità dei servizi che rientrano
117
+ nell'ambito del d.lgs. 82/2022.
118
+
119
+ Agenzia per l'Italia digitale
120
+ https://www.agid.gov.it
121
+
122
+ I soggetti privati che offrono servizi al pubblico con un fatturato medio, negli ultimi tre
123
+ anni di attività, superiore a 500 milioni di euro pubblicano e aggiornano ogni anno, entro
124
+ il 23 settembre, una dichiarazione di accessibilità secondo il modello AgID. Questo
125
+ documento non sostituisce quella dichiarazione.
126
+
127
+ ---
128
+
129
+ Questa dichiarazione è stata generata con eaa-kit e non costituisce consulenza legale. La
130
+ rilegga prima di pubblicarla e, in caso di dubbio, la faccia verificare da un legale.
@@ -0,0 +1,125 @@
1
+ # Accessibility Statement
2
+
3
+ {{ provider.legalName }} is committed to making the website {{ site.name }} accessible in
4
+ accordance with the Implementatiewet toegankelijkheidsvoorschriften producten en diensten,
5
+ which transposes Directive (EU) 2019/882 (the European Accessibility Act) into Dutch law.
6
+ It has been in force since 28 June 2025.
7
+
8
+ This accessibility statement applies to {{ site.url }}.
9
+
10
+ ## Compliance status
11
+
12
+ {{#if compliance.isCompliant}}
13
+ This website is fully compliant with {{ compliance.standard }}.
14
+ {{/if}}
15
+ {{#if compliance.isPartiallyCompliant}}
16
+ This website is partially compliant with {{ compliance.standard }}. The content listed in
17
+ the following section is not accessible, for the reasons given.
18
+ {{/if}}
19
+ {{#if compliance.isNonCompliant}}
20
+ This website is not compliant with {{ compliance.standard }}. The content listed in the
21
+ following section is not accessible, for the reasons given.
22
+ {{/if}}
23
+
24
+ ## Non-accessible content
25
+
26
+ {{#if hasKnownIssues}}
27
+ {{#each compliance.knownIssues}}
28
+ - {{ description }}
29
+ {{#if standards}}
30
+ Requirement affected: {{ standards }}
31
+ {{/if}}
32
+ {{#if pageList}}
33
+ Pages affected: {{ pageList }}{{#if hasMorePages}} and {{ morePages }} more{{/if}}
34
+ {{/if}}
35
+ {{#if isDisproportionateBurden}}
36
+ Reason: disproportionate burden.
37
+ {{/if}}
38
+ {{#if isOutOfScope}}
39
+ Reason: the content falls outside the scope of this Act.
40
+ {{/if}}
41
+ {{#if isFixPlanned}}
42
+ Reason: the barrier is known and is being addressed.
43
+ {{/if}}
44
+ {{#if remedyByFormatted}}
45
+ Expected to be resolved by: {{ remedyByFormatted }}
46
+ {{/if}}
47
+ {{#if isFromAudit}}
48
+ Detected by automated testing (axe-core, rule {{ ruleId }}); describe it in your own words.
49
+ {{/if}}
50
+ {{/each}}
51
+ {{/if}}
52
+ {{#if hasNoKnownIssues}}
53
+ No non-accessible content was known at the time of assessment.
54
+ {{/if}}
55
+
56
+ ## Preparation of this statement
57
+
58
+ This statement was prepared on {{ compliance.assessedOnFormatted }}.
59
+
60
+ {{#if compliance.isSelfAssessment}}
61
+ It is based on a self-assessment carried out by {{ provider.legalName }}.
62
+ {{/if}}
63
+ {{#if compliance.isExternalAudit}}
64
+ It is based on an assessment carried out by a third party.
65
+ {{/if}}
66
+
67
+ {{#if audit.isSinglePage}}
68
+ The automated test run of {{ audit.checkedOnFormatted }} covered one page of this website.
69
+ {{/if}}
70
+ {{#if audit.isMultiPage}}
71
+ The automated test run of {{ audit.checkedOnFormatted }} covered {{ audit.pages }}
72
+ pages of this website.
73
+ {{/if}}
74
+ {{#if audit.needsReviewIsSingle}}
75
+ One further rule check requires a manual decision.
76
+ {{/if}}
77
+ {{#if audit.needsReviewIsPlural}}
78
+ {{ audit.needsReview }} further rule checks require a manual decision.
79
+ {{/if}}
80
+ {{#if audit.notEvaluatedIsSingle}}
81
+ One rule check could not be decided by the tool that was used; it is not reported as met.
82
+ {{/if}}
83
+ {{#if audit.notEvaluatedIsPlural}}
84
+ {{ audit.notEvaluated }} rule checks could not be decided by the tool that was used; they
85
+ are not reported as met.
86
+ {{/if}}
87
+ {{#if hasAudit}}
88
+
89
+ {{/if}}
90
+ The assessment relies in part on automated testing. Automated tools detect only a subset
91
+ of possible barriers; they are not a substitute for manual testing or for testing with
92
+ assistive technologies.
93
+
94
+ ## Feedback and contact
95
+
96
+ Found a barrier, or need information in an accessible format? Please get in touch:
97
+
98
+ - Email: {{ provider.email }}
99
+ {{#if provider.feedbackUrl}}
100
+ - Contact form: {{ provider.feedbackUrl }}
101
+ {{/if}}
102
+ {{#if provider.phone}}
103
+ - Phone: {{ provider.phone }}
104
+ {{/if}}
105
+ {{#if provider.address}}
106
+ - Address: {{ provider.address }}
107
+ {{/if}}
108
+
109
+ We aim to respond to your feedback promptly.
110
+
111
+ ## Enforcement procedure
112
+
113
+ If you are not satisfied with our response, you can report the matter to the supervisor.
114
+ Supervision is split between several authorities: for services such as web shops and
115
+ customer support it is the Autoriteit Consument & Markt (ACM), and for products such as
116
+ smartphones, e-readers and payment terminals the Rijksinspectie Digitale Infrastructuur
117
+ (RDI).
118
+
119
+ Autoriteit Consument & Markt
120
+ https://www.acm.nl
121
+
122
+ ---
123
+
124
+ This statement was generated with eaa-kit and is not legal advice. Review it before
125
+ publishing, and have it checked by a lawyer if in doubt.
@@ -0,0 +1,127 @@
1
+ # Toegankelijkheidsverklaring
2
+
3
+ {{ provider.legalName }} zet zich in om de website {{ site.name }} toegankelijk te maken,
4
+ in overeenstemming met de Implementatiewet toegankelijkheidsvoorschriften producten en
5
+ diensten, waarmee richtlijn (EU) 2019/882 (European Accessibility Act) in Nederlands recht
6
+ is omgezet. De wet geldt sinds 28 juni 2025.
7
+
8
+ Deze toegankelijkheidsverklaring geldt voor {{ site.url }}.
9
+
10
+ ## Nalevingsstatus
11
+
12
+ {{#if compliance.isCompliant}}
13
+ Deze website voldoet volledig aan {{ compliance.standard }}.
14
+ {{/if}}
15
+ {{#if compliance.isPartiallyCompliant}}
16
+ Deze website voldoet gedeeltelijk aan {{ compliance.standard }}. De inhoud die hieronder
17
+ staat is niet toegankelijk, om de genoemde redenen.
18
+ {{/if}}
19
+ {{#if compliance.isNonCompliant}}
20
+ Deze website voldoet niet aan {{ compliance.standard }}. De inhoud die hieronder staat is
21
+ niet toegankelijk, om de genoemde redenen.
22
+ {{/if}}
23
+
24
+ ## Niet-toegankelijke inhoud
25
+
26
+ {{#if hasKnownIssues}}
27
+ {{#each compliance.knownIssues}}
28
+ - {{ description }}
29
+ {{#if standards}}
30
+ Betrokken eis: {{ standards }}
31
+ {{/if}}
32
+ {{#if pageList}}
33
+ Betrokken pagina's: {{ pageList }}{{#if hasMorePages}} en {{ morePages }} andere{{/if}}
34
+ {{/if}}
35
+ {{#if isDisproportionateBurden}}
36
+ Reden: onevenredige last.
37
+ {{/if}}
38
+ {{#if isOutOfScope}}
39
+ Reden: de inhoud valt buiten het toepassingsgebied van deze wet.
40
+ {{/if}}
41
+ {{#if isFixPlanned}}
42
+ Reden: de drempel is bekend en wordt verholpen.
43
+ {{/if}}
44
+ {{#if remedyByFormatted}}
45
+ Verwacht verholpen op: {{ remedyByFormatted }}
46
+ {{/if}}
47
+ {{#if isFromAudit}}
48
+ Vastgesteld met een geautomatiseerde test (axe-core, regel {{ ruleId }}); beschrijf dit in eigen woorden.
49
+ {{/if}}
50
+ {{/each}}
51
+ {{/if}}
52
+ {{#if hasNoKnownIssues}}
53
+ Op het moment van de beoordeling was er geen niet-toegankelijke inhoud bekend.
54
+ {{/if}}
55
+
56
+ ## Opstelling van deze verklaring
57
+
58
+ Deze verklaring is opgesteld op {{ compliance.assessedOnFormatted }}.
59
+
60
+ {{#if compliance.isSelfAssessment}}
61
+ Zij berust op een zelfbeoordeling door {{ provider.legalName }}.
62
+ {{/if}}
63
+ {{#if compliance.isExternalAudit}}
64
+ Zij berust op een beoordeling door een derde partij.
65
+ {{/if}}
66
+
67
+ {{#if audit.isSinglePage}}
68
+ De geautomatiseerde test van {{ audit.checkedOnFormatted }} betrof één pagina van deze
69
+ website.
70
+ {{/if}}
71
+ {{#if audit.isMultiPage}}
72
+ De geautomatiseerde test van {{ audit.checkedOnFormatted }} betrof {{ audit.pages }}
73
+ pagina's van deze website.
74
+ {{/if}}
75
+ {{#if audit.needsReviewIsSingle}}
76
+ Voor één andere regelcontrole is een menselijke beoordeling nodig.
77
+ {{/if}}
78
+ {{#if audit.needsReviewIsPlural}}
79
+ Voor {{ audit.needsReview }} andere regelcontroles is een menselijke beoordeling nodig.
80
+ {{/if}}
81
+ {{#if audit.notEvaluatedIsSingle}}
82
+ Bij één regelcontrole kwam het gebruikte gereedschap niet tot een uitkomst; die wordt niet
83
+ als voldaan gepresenteerd.
84
+ {{/if}}
85
+ {{#if audit.notEvaluatedIsPlural}}
86
+ Bij {{ audit.notEvaluated }} regelcontroles kwam het gebruikte gereedschap niet tot een
87
+ uitkomst; die worden niet als voldaan gepresenteerd.
88
+ {{/if}}
89
+ {{#if hasAudit}}
90
+
91
+ {{/if}}
92
+ De beoordeling berust mede op geautomatiseerd testen. Geautomatiseerde gereedschappen
93
+ vinden maar een deel van de mogelijke drempels; zij vervangen geen handmatige test en geen
94
+ test met hulptechnologie.
95
+
96
+ ## Reactie en contact
97
+
98
+ Een drempel tegengekomen, of informatie nodig in een toegankelijke vorm? Laat het ons
99
+ weten:
100
+
101
+ - E-mail: {{ provider.email }}
102
+ {{#if provider.feedbackUrl}}
103
+ - Contactformulier: {{ provider.feedbackUrl }}
104
+ {{/if}}
105
+ {{#if provider.phone}}
106
+ - Telefoon: {{ provider.phone }}
107
+ {{/if}}
108
+ {{#if provider.address}}
109
+ - Adres: {{ provider.address }}
110
+ {{/if}}
111
+
112
+ Wij streven ernaar snel te reageren.
113
+
114
+ ## Handhavingsprocedure
115
+
116
+ Bent u niet tevreden met onze reactie, dan kunt u een melding doen bij de toezichthouder.
117
+ Het toezicht is over meerdere toezichthouders verdeeld: voor diensten zoals webwinkels en
118
+ klantenservice is dat de Autoriteit Consument & Markt (ACM), voor producten zoals
119
+ smartphones, e-readers en betaalautomaten de Rijksinspectie Digitale Infrastructuur (RDI).
120
+
121
+ Autoriteit Consument & Markt
122
+ https://www.acm.nl
123
+
124
+ ---
125
+
126
+ Deze verklaring is gemaakt met eaa-kit en is geen juridisch advies. Lees haar na voordat u
127
+ haar publiceert en laat haar bij twijfel juridisch toetsen.
@@ -18,9 +18,21 @@ function escapeText(value) {
18
18
  function escapeAttribute(value) {
19
19
  return escapeText(value).replace(/"/g, """).replace(/'/g, "'");
20
20
  }
21
+ /**
22
+ * The plurals this package's own output actually uses, where an `s` is wrong.
23
+ *
24
+ * Deliberately a short list rather than a pluralisation library: this is the
25
+ * vocabulary of a handful of report lines, and every entry here was added
26
+ * because something printed "2 entrys" or "4 criterions" at somebody.
27
+ */
28
+ const IRREGULAR = {
29
+ entry: "entries",
30
+ criterion: "criteria"
31
+ };
21
32
  /** `plural(1, 'page')` is `page`, `plural(2, 'page')` is `pages`. */
22
33
  function plural(value, noun) {
23
- return value === 1 ? noun : `${noun}s`;
34
+ if (value === 1) return noun;
35
+ return IRREGULAR[noun] ?? `${noun}s`;
24
36
  }
25
37
  /** `count(2, 'page')` is `2 pages`. */
26
38
  function count(value, noun) {
@@ -39,5 +51,13 @@ function collapse(html, max) {
39
51
  function standardsReference(successCriteria, enClauses) {
40
52
  return [...successCriteria.map((criterion) => `WCAG ${criterion}`), ...enClauses.map((clause) => `EN 301 549 ${clause}`)].join(", ");
41
53
  }
54
+ /**
55
+ * A date as the ISO day this package records everywhere it writes one: the day
56
+ * a baseline entry was accepted, and the day a criterion was reviewed. Always
57
+ * UTC, so two people on either side of a date line write the same file.
58
+ */
59
+ function isoDate(date) {
60
+ return date.toISOString().slice(0, 10);
61
+ }
42
62
  //#endregion
43
- export { plural as a, escapeText as i, count as n, standardsReference as o, escapeAttribute as r, collapse as t };
63
+ export { isoDate as a, escapeText as i, count as n, plural as o, escapeAttribute as r, standardsReference as s, collapse as t };
@@ -1,4 +1,4 @@
1
- import { n as IntegrationOptions, t as BuildAuditError } from "../run-BMASMmwO.js";
1
+ import { n as IntegrationOptions, t as BuildAuditError } from "../run-YiqyQA2b.js";
2
2
  //#region src/vite/index.d.ts
3
3
  interface EaaKitPluginOptions extends IntegrationOptions {
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { n as auditBuild, t as BuildAuditError } from "../run-DB34BSOZ.js";
1
+ import { n as auditBuild, t as BuildAuditError } from "../run-D7hdVXLA.js";
2
2
  import path from "node:path";
3
3
  //#region src/vite/index.ts
4
4
  function eaaKit(options = {}) {
@@ -1,4 +1,4 @@
1
- import { n as IntegrationOptions, t as BuildAuditError } from "../run-BMASMmwO.js";
1
+ import { n as IntegrationOptions, t as BuildAuditError } from "../run-YiqyQA2b.js";
2
2
  //#region src/webpack/index.d.ts
3
3
  /** The part of a webpack compilation this reads. */
4
4
  interface CompilationLike {
@@ -1,4 +1,4 @@
1
- import { n as auditBuild, r as stderrLogger, t as BuildAuditError } from "../run-DB34BSOZ.js";
1
+ import { n as auditBuild, r as stderrLogger, t as BuildAuditError } from "../run-D7hdVXLA.js";
2
2
  import path from "node:path";
3
3
  //#region src/webpack/index.ts
4
4
  var EaaKitWebpackPlugin = class {
@@ -0,0 +1,63 @@
1
+ import { n as DEFAULT_TAGS } from "./result-DfUru6y_.js";
2
+ import { a as rulesByCriterion, o as manualCheckFor, s as understandingUrl, t as WCAG22_AA_CRITERIA } from "./coverage-BD2_CYns.js";
3
+ //#region src/audit/worksheet.ts
4
+ function buildWorksheet(options) {
5
+ const rules = rulesByCriterion(options.tags ?? DEFAULT_TAGS);
6
+ const unautomatable = WCAG22_AA_CRITERIA.filter((criterion) => (rules.get(criterion.number) ?? []).length === 0);
7
+ const lines = [
8
+ "# Manual accessibility review",
9
+ "",
10
+ `Of the ${WCAG22_AA_CRITERIA.length} WCAG 2.2 success criteria at Levels A and AA,`,
11
+ `**${unautomatable.length} have no automated rule at all**: no engine, this one included, can`,
12
+ "reach a verdict on them. They are the part of conformance a person has to do, and this is",
13
+ "the list of them.",
14
+ "",
15
+ `Record what you find in \`${options.recordPath}\`, which is the file \`eaa-kit audit --review\``,
16
+ "reads. Ticking a box below records nothing: this document is generated from the record and",
17
+ "never read back into it.",
18
+ "",
19
+ "For each criterion, set `result` to one of:",
20
+ "",
21
+ "- `met` — you checked it and the site meets it.",
22
+ "- `not-met` — you checked it and it does not. Say what is wrong in `note`.",
23
+ "- `not-applicable` — there is nothing on this site the criterion applies to. Not the same",
24
+ " as `met`, and never counted as though it were.",
25
+ "- `unreviewed` — nobody has looked yet. What every entry starts as.",
26
+ "",
27
+ "Set `reviewedOn` to the day you checked it. An entry with no date cannot be shown to still",
28
+ "hold, and an audit run with `--review-max-age` will not count it.",
29
+ ""
30
+ ];
31
+ lines.push("## Criteria no automated rule can reach", "", "These are the review. Nothing in any eaa-kit report says anything about them.", "");
32
+ for (const criterion of unautomatable) lines.push(...criterionEntry(criterion, [], options.review));
33
+ lines.push("## Criteria an audit can reach", "", "An audit reaches these when the rules below actually match something on the site. A run", "that found nothing to check has not shown the criterion is met, so they are worth a look", "too — and where this engine could not decide a rule, the check to do by hand is named.", "");
34
+ for (const criterion of WCAG22_AA_CRITERIA) {
35
+ const forCriterion = rules.get(criterion.number) ?? [];
36
+ if (forCriterion.length === 0) continue;
37
+ lines.push(...criterionEntry(criterion, forCriterion, options.review));
38
+ }
39
+ lines.push("---", "", "A completed review is not a compliance statement, and this tool cannot check that anything", "recorded here is true. It records what somebody says they checked, which is the same", "standing as the claims in the statement it generates.", "");
40
+ return lines.join("\n");
41
+ }
42
+ function criterionEntry(criterion, rules, review) {
43
+ const entry = review?.criteria[criterion.number];
44
+ const lines = [`- [${entry !== void 0 && entry.result !== "unreviewed" ? "x" : " "}] **${criterion.number} ${criterion.title}** (Level ${criterion.level})`];
45
+ const url = understandingUrl(criterion.number);
46
+ if (url !== void 0) lines.push(` What it requires: ${url}`);
47
+ if (rules.length > 0) {
48
+ lines.push(` Rules that touch it: ${rules.join(", ")}`);
49
+ for (const rule of rules) {
50
+ const manual = manualCheckFor(rule);
51
+ if (manual !== void 0) lines.push(` ${rule}: ${manual.check}`);
52
+ }
53
+ }
54
+ if (entry !== void 0 && entry.result !== "unreviewed") {
55
+ const on = entry.reviewedOn === void 0 ? "no date recorded" : `on ${entry.reviewedOn}`;
56
+ lines.push(` Recorded: ${entry.result} (${on})`);
57
+ if (entry.note !== void 0) lines.push(` Note: ${entry.note}`);
58
+ }
59
+ lines.push("");
60
+ return lines;
61
+ }
62
+ //#endregion
63
+ export { buildWorksheet };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "eaa-kit",
3
- "version": "0.4.0",
4
- "description": "WCAG 2.2 AA auditor and EU accessibility statement generator (EAA / BFSG / BaFG). Audits a static build or a running site from the command line.",
3
+ "version": "0.6.0",
4
+ "description": "WCAG 2.2 AA auditor and EU accessibility statement generator for seven countries (AT, DE, CH, ES, FR, IT, NL). Audits a static build or a running site from the command line.",
5
5
  "type": "module",
6
6
  "license": "MIT",
7
7
  "repository": {
@@ -19,6 +19,10 @@
19
19
  "eaa",
20
20
  "bfsg",
21
21
  "barrierefreiheit",
22
+ "accessibility-statement",
23
+ "en-301-549",
24
+ "rgaa",
25
+ "agid",
22
26
  "axe-core",
23
27
  "cli"
24
28
  ],
@@ -75,7 +79,7 @@
75
79
  "typecheck": "tsc --noEmit",
76
80
  "lint": "biome check .",
77
81
  "format": "biome check --write .",
78
- "smoke": "pnpm build && node dist/cli/index.js audit tests/fixtures/site --include about/** --format json && node dist/cli/index.js audit tests/fixtures/site --include \"about/**\" \"blog/**\" \"drafts/**\" \"legacy.htm\" --concurrency 2 && node dist/cli/index.js audit tests/fixtures/site --include about/** --format html && node dist/cli/index.js audit tests/fixtures/site --baseline examples/baseline.json && node -e \"import('./dist/astro/index.js').then(m => { const i = m.default(); if (i.name !== 'eaa-kit' || typeof i.hooks['astro:build:done'] !== 'function') { throw new Error('astro entry point is not an integration') } console.log('astro entry ok') })\" && node dist/cli/index.js statement --config examples/eaa.config.json && node dist/cli/index.js statement --config examples/eaa.config.json --audit examples/report.json --format html && node dist/cli/index.js audit tests/fixtures/site --include about/** --format json --output .eaa-kit/smoke-base.json && node dist/cli/index.js audit tests/fixtures/site --include about/** --format json --output .eaa-kit/smoke-head.json && node dist/cli/index.js diff .eaa-kit/smoke-base.json .eaa-kit/smoke-head.json --format json",
82
+ "smoke": "pnpm build && node dist/cli/index.js audit tests/fixtures/site --include about/** --format json && node dist/cli/index.js audit tests/fixtures/site --include \"about/**\" \"blog/**\" \"drafts/**\" \"legacy.htm\" --concurrency 2 && node dist/cli/index.js audit tests/fixtures/site --include about/** --format html && node dist/cli/index.js audit tests/fixtures/site --baseline examples/baseline.json && node -e \"import('./dist/astro/index.js').then(m => { const i = m.default(); if (i.name !== 'eaa-kit' || typeof i.hooks['astro:build:done'] !== 'function') { throw new Error('astro entry point is not an integration') } console.log('astro entry ok') })\" && node dist/cli/index.js baseline tests/fixtures/site --output .eaa-kit/smoke-baseline.json && node dist/cli/index.js baseline tests/fixtures/site --output .eaa-kit/smoke-baseline.json --prune && node dist/cli/index.js checklist --record .eaa-kit/smoke-review.json --output .eaa-kit/smoke-review.md && node dist/cli/index.js audit tests/fixtures/site --include about/** --review .eaa-kit/smoke-review.json --coverage && node dist/cli/index.js statement --config examples/eaa.config.json && node dist/cli/index.js statement --config examples/eaa.config.json --audit examples/report.json --format html && node dist/cli/index.js audit tests/fixtures/site --include about/** --format json --output .eaa-kit/smoke-base.json && node dist/cli/index.js audit tests/fixtures/site --include about/** --format json --output .eaa-kit/smoke-head.json && node dist/cli/index.js diff .eaa-kit/smoke-base.json .eaa-kit/smoke-head.json --format json",
79
83
  "examples": "pnpm build && node scripts/generate-examples.mjs",
80
84
  "test:packaged": "pnpm build && node scripts/test-packaged.mjs"
81
85
  },
@@ -1,2 +0,0 @@
1
- import { n as runAuditCommand } from "./audit-CPoZMXGM.js";
2
- export { runAuditCommand };
@@ -1,2 +0,0 @@
1
- import { a as readBaseline, r as applyBaseline, t as BaselineError } from "./baseline-DB9CZGnV.js";
2
- export { BaselineError, applyBaseline, readBaseline };