accessibility-hub 0.3.0 → 0.4.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.
- package/EXAMPLES.md +81 -2
- package/README.md +69 -2
- package/USAGE.md +57 -0
- package/dist/server.js +309 -276
- package/dist/server.js.map +1 -1
- package/package.json +2 -1
package/EXAMPLES.md
CHANGED
|
@@ -341,7 +341,85 @@ Ejemplos concretos de inputs y outputs para cada herramienta MCP.
|
|
|
341
341
|
|
|
342
342
|
---
|
|
343
343
|
|
|
344
|
-
### Ejemplo 3: Análisis
|
|
344
|
+
### Ejemplo 3: Análisis con APCA (WCAG 3.0 Draft)
|
|
345
|
+
|
|
346
|
+
**Input:**
|
|
347
|
+
```json
|
|
348
|
+
{
|
|
349
|
+
"url": "https://example.com",
|
|
350
|
+
"options": {
|
|
351
|
+
"contrastAlgorithm": "APCA"
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
```
|
|
355
|
+
|
|
356
|
+
**Output:**
|
|
357
|
+
```json
|
|
358
|
+
{
|
|
359
|
+
"success": true,
|
|
360
|
+
"target": "https://example.com",
|
|
361
|
+
"wcagLevel": "AA",
|
|
362
|
+
"issueCount": 2,
|
|
363
|
+
"issues": [
|
|
364
|
+
{
|
|
365
|
+
"id": "contrast-0",
|
|
366
|
+
"ruleId": "color-contrast",
|
|
367
|
+
"tool": "contrast-analyzer",
|
|
368
|
+
"severity": "serious",
|
|
369
|
+
"wcag": {
|
|
370
|
+
"criterion": "1.4.3",
|
|
371
|
+
"level": "AA",
|
|
372
|
+
"principle": "perceivable",
|
|
373
|
+
"title": "Contrast (APCA - WCAG 3.0 Draft)"
|
|
374
|
+
},
|
|
375
|
+
"location": {
|
|
376
|
+
"selector": "p.subtitle",
|
|
377
|
+
"snippet": "<p class=\"subtitle\">Low contrast text</p>"
|
|
378
|
+
},
|
|
379
|
+
"message": "APCA lightness 52.3Lc does not meet requirements (75Lc required for body text)",
|
|
380
|
+
"humanContext": "Users with low vision or color blindness may have difficulty reading this text. The current APCA lightness of 52.3Lc is below the threshold of 75Lc.",
|
|
381
|
+
"suggestedActions": [
|
|
382
|
+
"Increase APCA lightness to at least 75Lc",
|
|
383
|
+
"Consider using #4a4a4a as the text color"
|
|
384
|
+
],
|
|
385
|
+
"contrastData": {
|
|
386
|
+
"foreground": "rgb(140, 140, 140)",
|
|
387
|
+
"background": "rgb(255, 255, 255)",
|
|
388
|
+
"currentRatio": 52.3,
|
|
389
|
+
"requiredRatio": 75,
|
|
390
|
+
"isLargeText": false,
|
|
391
|
+
"fontSize": 16,
|
|
392
|
+
"fontWeight": 400,
|
|
393
|
+
"suggestedFix": {
|
|
394
|
+
"foreground": "#4a4a4a",
|
|
395
|
+
"background": "#ffffff",
|
|
396
|
+
"newRatio": 75.2
|
|
397
|
+
}
|
|
398
|
+
},
|
|
399
|
+
"affectedUsers": ["low-vision", "color-blind"]
|
|
400
|
+
}
|
|
401
|
+
],
|
|
402
|
+
"summary": {
|
|
403
|
+
"total": 20,
|
|
404
|
+
"passing": 18,
|
|
405
|
+
"failing": 2,
|
|
406
|
+
"byTextSize": {
|
|
407
|
+
"normalText": { "passing": 15, "failing": 2 },
|
|
408
|
+
"largeText": { "passing": 3, "failing": 0 }
|
|
409
|
+
}
|
|
410
|
+
},
|
|
411
|
+
"duration": 1234
|
|
412
|
+
}
|
|
413
|
+
```
|
|
414
|
+
|
|
415
|
+
**Nota sobre APCA:**
|
|
416
|
+
- `currentRatio` y `requiredRatio` usan valores Lc (Lightness contrast) en lugar de ratios
|
|
417
|
+
- Umbrales: texto body (75Lc), texto grande (60Lc), no-texto (45Lc)
|
|
418
|
+
- APCA es más preciso perceptualmente pero aún experimental
|
|
419
|
+
|
|
420
|
+
---
|
|
421
|
+
|
|
422
|
+
### Ejemplo 4: Análisis de sección específica
|
|
345
423
|
|
|
346
424
|
**Input:**
|
|
347
425
|
```json
|
|
@@ -356,7 +434,7 @@ Ejemplos concretos de inputs y outputs para cada herramienta MCP.
|
|
|
356
434
|
|
|
357
435
|
---
|
|
358
436
|
|
|
359
|
-
### Ejemplo
|
|
437
|
+
### Ejemplo 5: HTML con análisis de contraste
|
|
360
438
|
|
|
361
439
|
**Input:**
|
|
362
440
|
```json
|
|
@@ -627,6 +705,7 @@ Ejemplos concretos de inputs y outputs para cada herramienta MCP.
|
|
|
627
705
|
| **Velocidad** | ~2-3s | ~2s | ~1-2s |
|
|
628
706
|
| **Falsos positivos** | Pocos | Moderados | Muy pocos |
|
|
629
707
|
| **Sugerencias de fix** | - | - | ✅ Colores |
|
|
708
|
+
| **APCA (WCAG 3.0)** | - | - | ✅ Experimental |
|
|
630
709
|
|
|
631
710
|
---
|
|
632
711
|
|
package/README.md
CHANGED
|
@@ -97,7 +97,7 @@ Analiza una página web o contenido HTML usando Pa11y.
|
|
|
97
97
|
|
|
98
98
|
### `analyze-contrast`
|
|
99
99
|
|
|
100
|
-
Analiza una página web o contenido HTML para detectar problemas de contraste de color según WCAG 2.1.
|
|
100
|
+
Analiza una página web o contenido HTML para detectar problemas de contraste de color según WCAG 2.1. Soporta el algoritmo estándar WCAG 2.1 y el nuevo APCA (WCAG 3.0 draft).
|
|
101
101
|
|
|
102
102
|
**Parámetros:**
|
|
103
103
|
|
|
@@ -105,6 +105,7 @@ Analiza una página web o contenido HTML para detectar problemas de contraste de
|
|
|
105
105
|
|-----------|------|-----------|-------------|
|
|
106
106
|
| `url` | string | url o html | URL de la página a analizar |
|
|
107
107
|
| `html` | string | url o html | Contenido HTML raw a analizar |
|
|
108
|
+
| `options.contrastAlgorithm` | "WCAG21" \| "APCA" | No | Algoritmo de contraste: WCAG21 (estándar) o APCA (WCAG 3.0 draft - experimental). Default: WCAG21 |
|
|
108
109
|
| `options.wcagLevel` | "AA" \| "AAA" | No | Nivel WCAG: AA (4.5:1 normal, 3:1 grande) o AAA (7:1 normal, 4.5:1 grande). Default: AA |
|
|
109
110
|
| `options.suggestFixes` | boolean | No | Sugerir correcciones de color (default: true) |
|
|
110
111
|
| `options.includePassingElements` | boolean | No | Incluir elementos que pasan en los resultados (default: false) |
|
|
@@ -113,7 +114,14 @@ Analiza una página web o contenido HTML para detectar problemas de contraste de
|
|
|
113
114
|
| `options.browser.viewport` | object | No | Dimensiones del viewport |
|
|
114
115
|
| `options.browser.ignoreHTTPSErrors` | boolean | No | Ignorar errores de certificado SSL (default: false) |
|
|
115
116
|
|
|
116
|
-
**
|
|
117
|
+
**Algoritmos de contraste:**
|
|
118
|
+
|
|
119
|
+
| Algoritmo | Descripción | Umbrales |
|
|
120
|
+
|-----------|-------------|----------|
|
|
121
|
+
| **WCAG21** | Estándar actual. Usa ratios de luminancia relativa. | AA: 4.5:1 (normal), 3:1 (grande). AAA: 7:1 (normal), 4.5:1 (grande) |
|
|
122
|
+
| **APCA** | Borrador WCAG 3.0. Usa perceptual lightness (Lc). Más preciso para texto. | Texto body: 75Lc, texto grande: 60Lc, elementos no-texto: 45Lc |
|
|
123
|
+
|
|
124
|
+
**Ejemplo de respuesta (WCAG21):**
|
|
117
125
|
|
|
118
126
|
```json
|
|
119
127
|
{
|
|
@@ -167,10 +175,67 @@ Analiza una página web o contenido HTML para detectar problemas de contraste de
|
|
|
167
175
|
}
|
|
168
176
|
```
|
|
169
177
|
|
|
178
|
+
**Ejemplo de respuesta (APCA):**
|
|
179
|
+
|
|
180
|
+
```json
|
|
181
|
+
{
|
|
182
|
+
"success": true,
|
|
183
|
+
"target": "https://example.com",
|
|
184
|
+
"wcagLevel": "AA",
|
|
185
|
+
"issueCount": 1,
|
|
186
|
+
"issues": [
|
|
187
|
+
{
|
|
188
|
+
"id": "contrast-0",
|
|
189
|
+
"ruleId": "color-contrast",
|
|
190
|
+
"tool": "contrast-analyzer",
|
|
191
|
+
"severity": "serious",
|
|
192
|
+
"wcag": {
|
|
193
|
+
"criterion": "1.4.3",
|
|
194
|
+
"level": "AA",
|
|
195
|
+
"principle": "perceivable",
|
|
196
|
+
"title": "Contrast (APCA - WCAG 3.0 Draft)"
|
|
197
|
+
},
|
|
198
|
+
"location": {
|
|
199
|
+
"selector": "p.subtitle",
|
|
200
|
+
"snippet": "<p class=\"subtitle\">Texto de ejemplo</p>"
|
|
201
|
+
},
|
|
202
|
+
"message": "APCA lightness 45.2Lc does not meet requirements (75Lc required for body text)",
|
|
203
|
+
"contrastData": {
|
|
204
|
+
"foreground": "rgb(150, 150, 150)",
|
|
205
|
+
"background": "rgb(255, 255, 255)",
|
|
206
|
+
"currentRatio": 45.2,
|
|
207
|
+
"requiredRatio": 75,
|
|
208
|
+
"isLargeText": false,
|
|
209
|
+
"fontSize": 16,
|
|
210
|
+
"fontWeight": 400,
|
|
211
|
+
"suggestedFix": {
|
|
212
|
+
"foreground": "#5a5a5a",
|
|
213
|
+
"background": "#ffffff",
|
|
214
|
+
"newRatio": 75.1
|
|
215
|
+
}
|
|
216
|
+
},
|
|
217
|
+
"affectedUsers": ["low-vision", "color-blind"]
|
|
218
|
+
}
|
|
219
|
+
],
|
|
220
|
+
"summary": {
|
|
221
|
+
"total": 15,
|
|
222
|
+
"passing": 14,
|
|
223
|
+
"failing": 1
|
|
224
|
+
},
|
|
225
|
+
"duration": 1234
|
|
226
|
+
}
|
|
227
|
+
```
|
|
228
|
+
|
|
170
229
|
**Criterios WCAG:**
|
|
171
230
|
- 1.4.3 Contraste (Mínimo) - Nivel AA
|
|
172
231
|
- 1.4.6 Contraste (Mejorado) - Nivel AAA
|
|
173
232
|
|
|
233
|
+
**APCA (Accessible Perceptual Contrast Algorithm):**
|
|
234
|
+
- Algoritmo perceptual más preciso, parte del borrador de WCAG 3.0
|
|
235
|
+
- Mide "lightness contrast" (Lc) en lugar de ratios
|
|
236
|
+
- Considera la dirección del contraste (texto claro sobre oscuro vs oscuro sobre claro)
|
|
237
|
+
- Experimental: aún no es un estándar oficial
|
|
238
|
+
|
|
174
239
|
### `analyze-mixed` ⭐
|
|
175
240
|
|
|
176
241
|
**Tool de síntesis para análisis web** que ejecuta axe-core y Pa11y en paralelo y combina los resultados.
|
|
@@ -403,6 +468,7 @@ Una vez configurado, puedes usar prompts como:
|
|
|
403
468
|
- "Compara los resultados de axe-core y Pa11y en mi landing page" (usa analyze-mixed)
|
|
404
469
|
- "Verifica el contraste de colores de mi página web" (usa analyze-contrast)
|
|
405
470
|
- "Analiza si los colores de texto cumplen con WCAG AAA" (usa analyze-contrast con wcagLevel: AAA)
|
|
471
|
+
- "Analiza el contraste usando el algoritmo APCA" (usa analyze-contrast con contrastAlgorithm: APCA)
|
|
406
472
|
|
|
407
473
|
### Desarrollo Local
|
|
408
474
|
|
|
@@ -457,5 +523,6 @@ Si estás desarrollando o contribuyendo al proyecto, puedes usar rutas locales e
|
|
|
457
523
|
- `@axe-core/puppeteer` - Integración axe-core con Puppeteer
|
|
458
524
|
- `axe-core` - Motor de análisis de accesibilidad
|
|
459
525
|
- `pa11y` - Herramienta de testing de accesibilidad
|
|
526
|
+
- `colorjs.io` - Librería de colores con soporte para WCAG 2.1 y APCA
|
|
460
527
|
- `zod` - Validación de schemas
|
|
461
528
|
- `pino` - Logging estructurado
|
package/USAGE.md
CHANGED
|
@@ -101,6 +101,23 @@ Verifica si los colores de texto de https://mi-sitio.com cumplen con WCAG AA
|
|
|
101
101
|
|
|
102
102
|
---
|
|
103
103
|
|
|
104
|
+
### 6. Análisis con APCA (WCAG 3.0 Draft)
|
|
105
|
+
|
|
106
|
+
**Prompt:**
|
|
107
|
+
```
|
|
108
|
+
Analiza el contraste de https://mi-sitio.com usando el algoritmo APCA
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
**¿Qué herramienta se usará?**
|
|
112
|
+
→ `analyze-contrast` con `contrastAlgorithm: "APCA"`
|
|
113
|
+
|
|
114
|
+
**Resultado esperado:**
|
|
115
|
+
- Lightness contrast (Lc) en lugar de ratios
|
|
116
|
+
- Umbrales: 75Lc (texto body), 60Lc (texto grande), 45Lc (no-texto)
|
|
117
|
+
- Sugerencias de colores optimizadas para percepción visual
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
104
121
|
## Ejemplos por Herramienta
|
|
105
122
|
|
|
106
123
|
### `analyze-with-axe`
|
|
@@ -214,6 +231,26 @@ Muéstrame el contraste de todos los elementos, incluyendo los que pasan
|
|
|
214
231
|
}
|
|
215
232
|
```
|
|
216
233
|
|
|
234
|
+
#### Ejemplo 5: Análisis con APCA
|
|
235
|
+
```
|
|
236
|
+
Analiza el contraste usando el algoritmo APCA (más preciso para percepción visual)
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
**Input equivalente:**
|
|
240
|
+
```json
|
|
241
|
+
{
|
|
242
|
+
"url": "https://example.com",
|
|
243
|
+
"options": {
|
|
244
|
+
"contrastAlgorithm": "APCA"
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
**Nota:** APCA usa valores de lightness (Lc) en lugar de ratios. Los umbrales son:
|
|
250
|
+
- Texto body: 75Lc
|
|
251
|
+
- Texto grande: 60Lc
|
|
252
|
+
- Elementos no-texto: 45Lc
|
|
253
|
+
|
|
217
254
|
---
|
|
218
255
|
|
|
219
256
|
### `analyze-mixed`
|
|
@@ -468,6 +505,26 @@ Analiza solo el contraste de una parte de la página:
|
|
|
468
505
|
}
|
|
469
506
|
```
|
|
470
507
|
|
|
508
|
+
### 6. Análisis con APCA (WCAG 3.0 Draft)
|
|
509
|
+
|
|
510
|
+
Para proyectos que quieren prepararse para WCAG 3.0:
|
|
511
|
+
|
|
512
|
+
```json
|
|
513
|
+
{
|
|
514
|
+
"url": "https://example.com",
|
|
515
|
+
"options": {
|
|
516
|
+
"contrastAlgorithm": "APCA",
|
|
517
|
+
"suggestFixes": true
|
|
518
|
+
}
|
|
519
|
+
}
|
|
520
|
+
```
|
|
521
|
+
|
|
522
|
+
**Diferencias APCA vs WCAG21:**
|
|
523
|
+
- **APCA** mide "lightness contrast" (Lc), más preciso perceptualmente
|
|
524
|
+
- **APCA** considera la polaridad (texto claro sobre oscuro vs oscuro sobre claro)
|
|
525
|
+
- **APCA** es experimental (borrador WCAG 3.0)
|
|
526
|
+
- **WCAG21** sigue siendo el estándar legal/normativo actual
|
|
527
|
+
|
|
471
528
|
---
|
|
472
529
|
|
|
473
530
|
## Preguntas Frecuentes
|