ai-ccesibility 0.1.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 +595 -0
- package/LICENSE +21 -0
- package/README.md +233 -0
- package/USAGE.md +498 -0
- package/dist/server.d.ts +2 -0
- package/dist/server.js +2177 -0
- package/dist/server.js.map +1 -0
- package/package.json +84 -0
package/USAGE.md
ADDED
|
@@ -0,0 +1,498 @@
|
|
|
1
|
+
# Guía de Uso - AI-ccesibility
|
|
2
|
+
|
|
3
|
+
Esta guía proporciona ejemplos prácticos de cómo usar las herramientas de accesibilidad desde Cursor o Claude Desktop.
|
|
4
|
+
|
|
5
|
+
## Contenido
|
|
6
|
+
|
|
7
|
+
- [Casos de Uso Comunes](#casos-de-uso-comunes)
|
|
8
|
+
- [Ejemplos por Herramienta](#ejemplos-por-herramienta)
|
|
9
|
+
- [Prompts Efectivos](#prompts-efectivos)
|
|
10
|
+
- [Interpretación de Resultados](#interpretación-de-resultados)
|
|
11
|
+
- [Workflows Recomendados](#workflows-recomendados)
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Casos de Uso Comunes
|
|
16
|
+
|
|
17
|
+
### 1. Auditoría Rápida de una Página Web
|
|
18
|
+
|
|
19
|
+
**Prompt:**
|
|
20
|
+
```
|
|
21
|
+
Analiza la accesibilidad de https://mi-sitio.com usando todas las herramientas disponibles
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
**¿Qué herramienta se usará?**
|
|
25
|
+
→ `analyze-all` (axe-core + Pa11y en paralelo)
|
|
26
|
+
|
|
27
|
+
**Resultado esperado:**
|
|
28
|
+
- Issues combinados y deduplicados
|
|
29
|
+
- Agrupados por criterio WCAG
|
|
30
|
+
- Con contexto humano enriquecido
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
### 2. Análisis Profundo con una Herramienta Específica
|
|
35
|
+
|
|
36
|
+
**Prompt:**
|
|
37
|
+
```
|
|
38
|
+
Usa solo axe-core para analizar https://mi-sitio.com y dame un reporte detallado
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
**¿Qué herramienta se usará?**
|
|
42
|
+
→ `analyze-with-axe`
|
|
43
|
+
|
|
44
|
+
**Ventaja:**
|
|
45
|
+
Resultados más rápidos, metadata específica de axe-core.
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
### 3. Análisis de HTML Local o en Desarrollo
|
|
50
|
+
|
|
51
|
+
**Prompt:**
|
|
52
|
+
```
|
|
53
|
+
Revisa este HTML para problemas de accesibilidad:
|
|
54
|
+
<form>
|
|
55
|
+
<input type="text" placeholder="Nombre">
|
|
56
|
+
<button>Enviar</button>
|
|
57
|
+
</form>
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
**¿Qué herramienta se usará?**
|
|
61
|
+
→ `analyze-all` o `analyze-with-axe`
|
|
62
|
+
|
|
63
|
+
**Issues típicos que encontrará:**
|
|
64
|
+
- Falta de `<label>` asociado al input (WCAG 1.3.1)
|
|
65
|
+
- Button sin `type="submit"` explícito
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
### 4. Linting Estático de Componentes Vue
|
|
70
|
+
|
|
71
|
+
**Prompt:**
|
|
72
|
+
```
|
|
73
|
+
Analiza los problemas de accesibilidad en src/components/LoginForm.vue
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
**¿Qué herramienta se usará?**
|
|
77
|
+
→ `analyze-with-eslint`
|
|
78
|
+
|
|
79
|
+
**Issues típicos:**
|
|
80
|
+
- `v-if` en elementos interactivos sin `tabindex`
|
|
81
|
+
- Eventos `@click` sin `@keydown` equivalente
|
|
82
|
+
- Imágenes sin `alt`
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
### 5. Comparación de Herramientas
|
|
87
|
+
|
|
88
|
+
**Prompt:**
|
|
89
|
+
```
|
|
90
|
+
Compara los resultados de axe-core y Pa11y en https://ejemplo.com
|
|
91
|
+
¿Qué diferencias encuentran?
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
**¿Qué herramienta se usará?**
|
|
95
|
+
→ `analyze-all` con campo `individualResults`
|
|
96
|
+
|
|
97
|
+
**Útil para:**
|
|
98
|
+
- Validar falsos positivos
|
|
99
|
+
- Entender diferencias entre herramientas
|
|
100
|
+
- Decisiones sobre qué tool usar en CI/CD
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## Ejemplos por Herramienta
|
|
105
|
+
|
|
106
|
+
### `analyze-with-axe`
|
|
107
|
+
|
|
108
|
+
#### Ejemplo 1: Análisis básico
|
|
109
|
+
```
|
|
110
|
+
Analiza con axe-core: https://example.com
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
#### Ejemplo 2: Solo criterios WCAG AA
|
|
114
|
+
```
|
|
115
|
+
Analiza https://example.com con axe-core, nivel WCAG AA únicamente
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
#### Ejemplo 3: Esperar carga de contenido dinámico
|
|
119
|
+
```
|
|
120
|
+
Analiza https://spa-app.com con axe-core, esperando a que aparezca el selector #main-content
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
**Input equivalente:**
|
|
124
|
+
```json
|
|
125
|
+
{
|
|
126
|
+
"url": "https://spa-app.com",
|
|
127
|
+
"options": {
|
|
128
|
+
"wcagLevel": "AA",
|
|
129
|
+
"browser": {
|
|
130
|
+
"waitForSelector": "#main-content"
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
### `analyze-with-pa11y`
|
|
139
|
+
|
|
140
|
+
#### Ejemplo 1: Análisis con warnings
|
|
141
|
+
```
|
|
142
|
+
Analiza https://example.com con Pa11y incluyendo warnings
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
#### Ejemplo 2: Solo errores críticos
|
|
146
|
+
```
|
|
147
|
+
Usa Pa11y para analizar https://example.com excluyendo warnings y notices
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
**Input equivalente:**
|
|
151
|
+
```json
|
|
152
|
+
{
|
|
153
|
+
"url": "https://example.com",
|
|
154
|
+
"options": {
|
|
155
|
+
"standard": "WCAG21AA",
|
|
156
|
+
"includeWarnings": false,
|
|
157
|
+
"includeNotices": false
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
---
|
|
163
|
+
|
|
164
|
+
### `analyze-with-eslint`
|
|
165
|
+
|
|
166
|
+
#### Ejemplo 1: Analizar archivo único
|
|
167
|
+
```
|
|
168
|
+
Revisa problemas de accesibilidad en src/components/Header.vue
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
#### Ejemplo 2: Analizar directorio completo
|
|
172
|
+
```
|
|
173
|
+
Analiza todos los archivos Vue en src/components/ para problemas de accesibilidad
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
#### Ejemplo 3: Código inline
|
|
177
|
+
```
|
|
178
|
+
¿Este componente Vue tiene problemas de accesibilidad?
|
|
179
|
+
<template>
|
|
180
|
+
<div @click="handleClick">Click me</div>
|
|
181
|
+
</template>
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
**Issues esperados:**
|
|
185
|
+
- `no-static-element-interactions`: div no interactivo con evento click
|
|
186
|
+
- Falta de `role="button"` y manejo de teclado
|
|
187
|
+
|
|
188
|
+
---
|
|
189
|
+
|
|
190
|
+
### `analyze-all`
|
|
191
|
+
|
|
192
|
+
#### Ejemplo 1: Análisis completo
|
|
193
|
+
```
|
|
194
|
+
Haz un análisis completo de accesibilidad de https://mi-landing.com
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
#### Ejemplo 2: Sin deduplicación
|
|
198
|
+
```
|
|
199
|
+
Analiza https://example.com con axe-core y Pa11y, muéstrame TODOS los issues sin deduplicar
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
**Input equivalente:**
|
|
203
|
+
```json
|
|
204
|
+
{
|
|
205
|
+
"url": "https://example.com",
|
|
206
|
+
"tools": ["axe-core", "pa11y"],
|
|
207
|
+
"options": {
|
|
208
|
+
"deduplicateResults": false
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
---
|
|
214
|
+
|
|
215
|
+
## Prompts Efectivos
|
|
216
|
+
|
|
217
|
+
### ✅ Buenos Prompts
|
|
218
|
+
|
|
219
|
+
#### Específicos y con contexto
|
|
220
|
+
```
|
|
221
|
+
Analiza la página de checkout en https://tienda.com/checkout
|
|
222
|
+
y prioriza los issues que afecten a usuarios de lectores de pantalla
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
#### Con restricciones claras
|
|
226
|
+
```
|
|
227
|
+
Dame solo los issues críticos (severity: critical) de https://example.com
|
|
228
|
+
que tengan esfuerzo de corrección bajo (remediationEffort: low)
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
#### Solicitan interpretación
|
|
232
|
+
```
|
|
233
|
+
Analiza https://formulario.com y explícame cuáles son los 3 problemas
|
|
234
|
+
más urgentes de resolver y por qué
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
#### Con objetivos de negocio
|
|
238
|
+
```
|
|
239
|
+
Vamos a lanzar la web en 2 días. Analiza https://pre-prod.com
|
|
240
|
+
y dime qué issues debo arreglar SÍ o SÍ antes del lanzamiento
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
---
|
|
244
|
+
|
|
245
|
+
### ❌ Prompts Mejorables
|
|
246
|
+
|
|
247
|
+
#### Demasiado vagos
|
|
248
|
+
```
|
|
249
|
+
¿Mi sitio es accesible?
|
|
250
|
+
```
|
|
251
|
+
**Mejor:** Especifica la URL y qué aspectos te preocupan.
|
|
252
|
+
|
|
253
|
+
#### Sin contexto de acción
|
|
254
|
+
```
|
|
255
|
+
Analiza https://example.com
|
|
256
|
+
```
|
|
257
|
+
**Mejor:** Añade qué quieres hacer con los resultados.
|
|
258
|
+
|
|
259
|
+
#### Mezclando tipos de análisis
|
|
260
|
+
```
|
|
261
|
+
Analiza https://example.com y también src/components/*.vue
|
|
262
|
+
```
|
|
263
|
+
**Mejor:** Haz dos análisis separados (web vs código fuente).
|
|
264
|
+
|
|
265
|
+
---
|
|
266
|
+
|
|
267
|
+
## Interpretación de Resultados
|
|
268
|
+
|
|
269
|
+
### Campos Clave en los Issues
|
|
270
|
+
|
|
271
|
+
```json
|
|
272
|
+
{
|
|
273
|
+
"ruleId": "image-alt",
|
|
274
|
+
"severity": "serious",
|
|
275
|
+
"wcag": {
|
|
276
|
+
"criterion": "1.1.1",
|
|
277
|
+
"level": "A",
|
|
278
|
+
"principle": "perceivable"
|
|
279
|
+
},
|
|
280
|
+
"priority": "critical",
|
|
281
|
+
"remediationEffort": "low",
|
|
282
|
+
"affectedUsers": ["screen-reader", "low-vision"]
|
|
283
|
+
}
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
### Cómo Priorizar
|
|
287
|
+
|
|
288
|
+
#### Matriz de Priorización
|
|
289
|
+
|
|
290
|
+
| Priority | Effort | Acción |
|
|
291
|
+
|----------|--------|--------|
|
|
292
|
+
| **Critical** | **Low** | 🔥 **Fix inmediatamente** |
|
|
293
|
+
| **Critical** | Medium/High | 📅 Planificar para próximo sprint |
|
|
294
|
+
| **High** | **Low** | ✅ Quick wins - hacer pronto |
|
|
295
|
+
| Medium/Low | High | 📝 Backlog - evaluar vs impacto |
|
|
296
|
+
|
|
297
|
+
#### Ejemplo de Triage
|
|
298
|
+
|
|
299
|
+
**Prompt:**
|
|
300
|
+
```
|
|
301
|
+
Del análisis anterior, muéstrame:
|
|
302
|
+
1. Issues críticos con esfuerzo bajo (arreglar hoy)
|
|
303
|
+
2. Issues high con esfuerzo bajo (arreglar esta semana)
|
|
304
|
+
3. El resto agrupado por principio WCAG
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
---
|
|
308
|
+
|
|
309
|
+
## Workflows Recomendados
|
|
310
|
+
|
|
311
|
+
### Workflow 1: Pre-Deploy Check
|
|
312
|
+
|
|
313
|
+
```
|
|
314
|
+
1. Analiza https://staging.mi-app.com con todas las herramientas
|
|
315
|
+
2. Filtra solo issues críticos y de alto impacto
|
|
316
|
+
3. Si hay issues críticos → bloquear deploy
|
|
317
|
+
4. Si solo hay issues medium/low → registrar en backlog y deployar
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
**Prompt sugerido:**
|
|
321
|
+
```
|
|
322
|
+
Analiza staging.mi-app.com y dime si hay algún issue crítico
|
|
323
|
+
que justifique retrasar el deploy
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
---
|
|
327
|
+
|
|
328
|
+
### Workflow 2: Code Review de PRs
|
|
329
|
+
|
|
330
|
+
```
|
|
331
|
+
1. Desarrollador crea PR con cambios en componentes Vue
|
|
332
|
+
2. Analizar archivos modificados con ESLint
|
|
333
|
+
3. Si hay issues severity serious/critical → request changes
|
|
334
|
+
4. Si solo hay warnings → aprobar con comentarios
|
|
335
|
+
```
|
|
336
|
+
|
|
337
|
+
**Prompt sugerido:**
|
|
338
|
+
```
|
|
339
|
+
Analiza estos componentes modificados en el PR:
|
|
340
|
+
- src/components/PaymentForm.vue
|
|
341
|
+
- src/components/AddressInput.vue
|
|
342
|
+
|
|
343
|
+
¿Hay algo que deba corregirse antes de hacer merge?
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
---
|
|
347
|
+
|
|
348
|
+
### Workflow 3: Auditoría Periódica
|
|
349
|
+
|
|
350
|
+
```
|
|
351
|
+
1. Cada sprint, analizar la web de producción
|
|
352
|
+
2. Comparar con análisis anterior
|
|
353
|
+
3. Identificar regresiones (nuevos issues)
|
|
354
|
+
4. Priorizar fixes para próximo sprint
|
|
355
|
+
```
|
|
356
|
+
|
|
357
|
+
**Prompt sugerido:**
|
|
358
|
+
```
|
|
359
|
+
Analiza https://produccion.com y compara con el análisis
|
|
360
|
+
del mes pasado. ¿Hemos introducido nuevos problemas?
|
|
361
|
+
```
|
|
362
|
+
|
|
363
|
+
---
|
|
364
|
+
|
|
365
|
+
### Workflow 4: Formación del Equipo
|
|
366
|
+
|
|
367
|
+
```
|
|
368
|
+
1. Analizar una página con issues variados
|
|
369
|
+
2. Revisar campo humanContext de cada issue
|
|
370
|
+
3. Entender ejemplos del mundo real
|
|
371
|
+
4. Aplicar soluciones sugeridas (suggestedActions)
|
|
372
|
+
```
|
|
373
|
+
|
|
374
|
+
**Prompt sugerido:**
|
|
375
|
+
```
|
|
376
|
+
Analiza https://demo.com y explícame en detalle
|
|
377
|
+
el issue WCAG 1.1.1 (Contenido no textual):
|
|
378
|
+
- Qué usuarios afecta
|
|
379
|
+
- Ejemplo real de cómo les impacta
|
|
380
|
+
- Cómo corregirlo paso a paso
|
|
381
|
+
```
|
|
382
|
+
|
|
383
|
+
---
|
|
384
|
+
|
|
385
|
+
## Tips Avanzados
|
|
386
|
+
|
|
387
|
+
### 1. Análisis de SPA con Lazy Loading
|
|
388
|
+
|
|
389
|
+
```json
|
|
390
|
+
{
|
|
391
|
+
"url": "https://spa-app.com",
|
|
392
|
+
"options": {
|
|
393
|
+
"browser": {
|
|
394
|
+
"waitForSelector": "[data-loaded='true']",
|
|
395
|
+
"waitForTimeout": 5000
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
```
|
|
400
|
+
|
|
401
|
+
### 2. Viewport Móvil
|
|
402
|
+
|
|
403
|
+
```json
|
|
404
|
+
{
|
|
405
|
+
"url": "https://responsive-site.com",
|
|
406
|
+
"options": {
|
|
407
|
+
"browser": {
|
|
408
|
+
"viewport": {
|
|
409
|
+
"width": 375,
|
|
410
|
+
"height": 667
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
```
|
|
416
|
+
|
|
417
|
+
### 3. Excluir Reglas Específicas
|
|
418
|
+
|
|
419
|
+
Útil si tienes un falso positivo conocido:
|
|
420
|
+
|
|
421
|
+
```json
|
|
422
|
+
{
|
|
423
|
+
"url": "https://example.com",
|
|
424
|
+
"options": {
|
|
425
|
+
"excludeRules": ["color-contrast"]
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
```
|
|
429
|
+
|
|
430
|
+
---
|
|
431
|
+
|
|
432
|
+
## Preguntas Frecuentes
|
|
433
|
+
|
|
434
|
+
### ¿Qué herramienta usar en CI/CD?
|
|
435
|
+
|
|
436
|
+
- **Para web deployada:** `analyze-all` (cobertura máxima)
|
|
437
|
+
- **Para código Vue:** `analyze-with-eslint` (rápido, sin browser)
|
|
438
|
+
|
|
439
|
+
### ¿Cómo manejar falsos positivos?
|
|
440
|
+
|
|
441
|
+
1. Verifica con segunda herramienta
|
|
442
|
+
2. Revisa `confidence` score (< 0.8 puede ser falso positivo)
|
|
443
|
+
3. Usa `excludeRules` si es falso positivo confirmado
|
|
444
|
+
|
|
445
|
+
### ¿Puedo analizar sitios con login?
|
|
446
|
+
|
|
447
|
+
Actualmente no. Las herramientas analizan la página pública. Para análisis autenticado, considera:
|
|
448
|
+
- Configurar browser compartido con cookies
|
|
449
|
+
- Usar HTML capturado post-login
|
|
450
|
+
|
|
451
|
+
---
|
|
452
|
+
|
|
453
|
+
## Ejemplos de Respuestas Típicas
|
|
454
|
+
|
|
455
|
+
### Respuesta con Context Enriquecido
|
|
456
|
+
|
|
457
|
+
```json
|
|
458
|
+
{
|
|
459
|
+
"ruleId": "image-alt",
|
|
460
|
+
"message": "Images must have alternate text",
|
|
461
|
+
"humanContext": "**Contenido no textual (WCAG 1.1.1 - Nivel A)**\n\nTodo contenido no textual debe tener una alternativa de texto que cumpla el mismo propósito.\n\n**Impacto en usuarios:**\nLos usuarios de lectores de pantalla no pueden acceder a la información transmitida por imágenes...",
|
|
462
|
+
"suggestedActions": [
|
|
463
|
+
"Añadir atributo alt descriptivo a imágenes",
|
|
464
|
+
"Usar aria-label para iconos decorativos con función"
|
|
465
|
+
],
|
|
466
|
+
"affectedUsers": ["screen-reader", "low-vision"],
|
|
467
|
+
"priority": "critical",
|
|
468
|
+
"remediationEffort": "low"
|
|
469
|
+
}
|
|
470
|
+
```
|
|
471
|
+
|
|
472
|
+
### Issues Agrupados por WCAG
|
|
473
|
+
|
|
474
|
+
```json
|
|
475
|
+
{
|
|
476
|
+
"issuesByWCAG": {
|
|
477
|
+
"1.1.1": [
|
|
478
|
+
{ "ruleId": "image-alt", ... },
|
|
479
|
+
{ "ruleId": "input-image-alt", ... }
|
|
480
|
+
],
|
|
481
|
+
"2.1.1": [
|
|
482
|
+
{ "ruleId": "button-name", ... }
|
|
483
|
+
]
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
```
|
|
487
|
+
|
|
488
|
+
---
|
|
489
|
+
|
|
490
|
+
## Recursos Adicionales
|
|
491
|
+
|
|
492
|
+
- **WCAG Quick Reference:** https://www.w3.org/WAI/WCAG21/quickref/
|
|
493
|
+
- **MDN Accessibility:** https://developer.mozilla.org/en-US/docs/Web/Accessibility
|
|
494
|
+
- **WAI-ARIA Authoring Practices:** https://www.w3.org/WAI/ARIA/apg/
|
|
495
|
+
|
|
496
|
+
---
|
|
497
|
+
|
|
498
|
+
¿Tienes dudas? Revisa el [README.md](./README.md) o abre un issue en el repositorio.
|
package/dist/server.d.ts
ADDED