real-prototypes-skill 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.
Files changed (60) hide show
  1. package/.claude/skills/agent-browser-skill/SKILL.md +252 -0
  2. package/.claude/skills/real-prototypes-skill/.gitignore +188 -0
  3. package/.claude/skills/real-prototypes-skill/ACCESSIBILITY.md +668 -0
  4. package/.claude/skills/real-prototypes-skill/INSTALL.md +259 -0
  5. package/.claude/skills/real-prototypes-skill/LICENSE +21 -0
  6. package/.claude/skills/real-prototypes-skill/PUBLISH.md +310 -0
  7. package/.claude/skills/real-prototypes-skill/QUICKSTART.md +240 -0
  8. package/.claude/skills/real-prototypes-skill/README.md +442 -0
  9. package/.claude/skills/real-prototypes-skill/SKILL.md +375 -0
  10. package/.claude/skills/real-prototypes-skill/capture/capture-engine.js +1153 -0
  11. package/.claude/skills/real-prototypes-skill/capture/config.schema.json +170 -0
  12. package/.claude/skills/real-prototypes-skill/cli.js +596 -0
  13. package/.claude/skills/real-prototypes-skill/docs/TROUBLESHOOTING.md +278 -0
  14. package/.claude/skills/real-prototypes-skill/docs/schemas/capture-config.md +167 -0
  15. package/.claude/skills/real-prototypes-skill/docs/schemas/design-tokens.md +183 -0
  16. package/.claude/skills/real-prototypes-skill/docs/schemas/manifest.md +169 -0
  17. package/.claude/skills/real-prototypes-skill/examples/CLAUDE.md.example +73 -0
  18. package/.claude/skills/real-prototypes-skill/examples/amazon-chatbot/CLAUDE.md +136 -0
  19. package/.claude/skills/real-prototypes-skill/examples/amazon-chatbot/FEATURES.md +222 -0
  20. package/.claude/skills/real-prototypes-skill/examples/amazon-chatbot/README.md +82 -0
  21. package/.claude/skills/real-prototypes-skill/examples/amazon-chatbot/references/design-tokens.json +87 -0
  22. package/.claude/skills/real-prototypes-skill/examples/amazon-chatbot/references/screenshots/homepage-viewport.png +0 -0
  23. package/.claude/skills/real-prototypes-skill/examples/amazon-chatbot/references/screenshots/prototype-chatbot-final.png +0 -0
  24. package/.claude/skills/real-prototypes-skill/examples/amazon-chatbot/references/screenshots/prototype-fullpage-v2.png +0 -0
  25. package/.claude/skills/real-prototypes-skill/references/accessibility-fixes.md +298 -0
  26. package/.claude/skills/real-prototypes-skill/references/accessibility-report.json +253 -0
  27. package/.claude/skills/real-prototypes-skill/scripts/CAPTURE-ENHANCEMENTS.md +344 -0
  28. package/.claude/skills/real-prototypes-skill/scripts/IMPLEMENTATION-SUMMARY.md +517 -0
  29. package/.claude/skills/real-prototypes-skill/scripts/QUICK-START.md +229 -0
  30. package/.claude/skills/real-prototypes-skill/scripts/QUICKSTART-layout-analysis.md +148 -0
  31. package/.claude/skills/real-prototypes-skill/scripts/README-analyze-layout.md +407 -0
  32. package/.claude/skills/real-prototypes-skill/scripts/analyze-layout.js +880 -0
  33. package/.claude/skills/real-prototypes-skill/scripts/capture-platform.js +203 -0
  34. package/.claude/skills/real-prototypes-skill/scripts/comprehensive-capture.js +597 -0
  35. package/.claude/skills/real-prototypes-skill/scripts/create-manifest.js +338 -0
  36. package/.claude/skills/real-prototypes-skill/scripts/enterprise-pipeline.js +428 -0
  37. package/.claude/skills/real-prototypes-skill/scripts/extract-tokens.js +468 -0
  38. package/.claude/skills/real-prototypes-skill/scripts/full-site-capture.js +738 -0
  39. package/.claude/skills/real-prototypes-skill/scripts/generate-tailwind-config.js +296 -0
  40. package/.claude/skills/real-prototypes-skill/scripts/integrate-accessibility.sh +161 -0
  41. package/.claude/skills/real-prototypes-skill/scripts/manifest-schema.json +302 -0
  42. package/.claude/skills/real-prototypes-skill/scripts/setup-prototype.sh +167 -0
  43. package/.claude/skills/real-prototypes-skill/scripts/test-analyze-layout.js +338 -0
  44. package/.claude/skills/real-prototypes-skill/scripts/test-validation.js +307 -0
  45. package/.claude/skills/real-prototypes-skill/scripts/validate-accessibility.js +598 -0
  46. package/.claude/skills/real-prototypes-skill/scripts/validate-manifest.js +499 -0
  47. package/.claude/skills/real-prototypes-skill/scripts/validate-output.js +361 -0
  48. package/.claude/skills/real-prototypes-skill/scripts/validate-prerequisites.js +319 -0
  49. package/.claude/skills/real-prototypes-skill/scripts/verify-layout-analysis.sh +77 -0
  50. package/.claude/skills/real-prototypes-skill/templates/dashboard-widget.tsx.template +91 -0
  51. package/.claude/skills/real-prototypes-skill/templates/data-table.tsx.template +193 -0
  52. package/.claude/skills/real-prototypes-skill/templates/form-section.tsx.template +250 -0
  53. package/.claude/skills/real-prototypes-skill/templates/modal-dialog.tsx.template +239 -0
  54. package/.claude/skills/real-prototypes-skill/templates/nav-item.tsx.template +265 -0
  55. package/.claude/skills/real-prototypes-skill/validation/validation-engine.js +559 -0
  56. package/.env.example +74 -0
  57. package/LICENSE +21 -0
  58. package/README.md +444 -0
  59. package/bin/cli.js +319 -0
  60. package/package.json +59 -0
@@ -0,0 +1,87 @@
1
+ {
2
+ "colors": {
3
+ "primary": {
4
+ "orange": "#FF9900",
5
+ "orangeHover": "#FA8900",
6
+ "orangePressed": "#E47911"
7
+ },
8
+ "navbar": {
9
+ "dark": "#131921",
10
+ "darkHover": "#232F3E",
11
+ "subNav": "#232F3E"
12
+ },
13
+ "text": {
14
+ "primary": "#0F1111",
15
+ "secondary": "#565959",
16
+ "link": "#007185",
17
+ "linkHover": "#C7511F",
18
+ "white": "#FFFFFF",
19
+ "muted": "#555555"
20
+ },
21
+ "background": {
22
+ "white": "#FFFFFF",
23
+ "light": "#EAEDED",
24
+ "gray": "#F0F2F2",
25
+ "card": "#FFFFFF"
26
+ },
27
+ "button": {
28
+ "yellowGradientStart": "#FFD814",
29
+ "yellowGradientEnd": "#F7CA00",
30
+ "yellowHover": "#F0C14B",
31
+ "orangeGradientStart": "#FFA41C",
32
+ "orangeGradientEnd": "#FF8F00"
33
+ },
34
+ "border": {
35
+ "light": "#DDD",
36
+ "medium": "#CDCDCD",
37
+ "dark": "#949494",
38
+ "input": "#888888"
39
+ },
40
+ "status": {
41
+ "success": "#067D62",
42
+ "error": "#CC0C39",
43
+ "warning": "#C45500",
44
+ "info": "#007185"
45
+ }
46
+ },
47
+ "typography": {
48
+ "fontFamily": {
49
+ "primary": "Amazon Ember, Arial, sans-serif",
50
+ "fallback": "Arial, sans-serif"
51
+ },
52
+ "fontSize": {
53
+ "xs": "11px",
54
+ "sm": "12px",
55
+ "base": "13px",
56
+ "md": "14px",
57
+ "lg": "16px",
58
+ "xl": "18px",
59
+ "2xl": "21px",
60
+ "3xl": "28px"
61
+ },
62
+ "fontWeight": {
63
+ "normal": "400",
64
+ "medium": "500",
65
+ "bold": "700"
66
+ }
67
+ },
68
+ "spacing": {
69
+ "xs": "4px",
70
+ "sm": "8px",
71
+ "md": "12px",
72
+ "lg": "16px",
73
+ "xl": "20px",
74
+ "2xl": "24px"
75
+ },
76
+ "borderRadius": {
77
+ "sm": "3px",
78
+ "md": "4px",
79
+ "lg": "8px",
80
+ "pill": "20px"
81
+ },
82
+ "shadows": {
83
+ "card": "0 2px 5px 0 rgba(0,0,0,0.1)",
84
+ "dropdown": "0 2px 5px rgba(0,0,0,0.15)",
85
+ "modal": "0 4px 16px rgba(0,0,0,0.15)"
86
+ }
87
+ }
@@ -0,0 +1,298 @@
1
+ # Accessibility Fixes Documentation
2
+
3
+ **Generated:** 2026-01-26T18:27:12.020Z
4
+ **WCAG Level:** AA (2.1)
5
+
6
+ ## Summary
7
+
8
+ - **Total Files Analyzed:** 5
9
+ - **Total Issues Found:** 24
10
+ - **Total Fixes Applied:** 5
11
+
12
+ ---
13
+
14
+ ## 1. dashboard-widget.tsx.template
15
+
16
+ **File:** `.claude/skills/real-prototypes-skill/templates/dashboard-widget.tsx.template`
17
+
18
+ ### Issues Found (4)
19
+
20
+ #### 1. MISSING ARIA LABEL
21
+
22
+ - **Severity:** error
23
+ - **Message:** button at line 58 missing aria-label or associated label
24
+ - **Element:** button
25
+ - **Line:** 58
26
+
27
+ #### 2. MISSING ARIA LABEL
28
+
29
+ - **Severity:** error
30
+ - **Message:** button at line 65 missing aria-label or associated label
31
+ - **Element:** button
32
+ - **Line:** 65
33
+
34
+ #### 3. MISSING ARIA LABEL
35
+
36
+ - **Severity:** error
37
+ - **Message:** button at line 83 missing aria-label or associated label
38
+ - **Element:** button
39
+ - **Line:** 83
40
+
41
+ #### 4. MISSING FOCUS INDICATOR
42
+
43
+ - **Severity:** error
44
+ - **Message:** No focus styles detected. Add focus:ring or focus-visible styles.
45
+
46
+ ### Fixes Applied (1)
47
+
48
+ #### 1. ADD FOCUS STYLES
49
+
50
+ - **Description:** Add focus indicators to interactive elements
51
+ - **Implementation:** Add focus:ring-2 focus:ring-platform-primary focus:ring-offset-2 to buttons/links
52
+
53
+ ---
54
+
55
+ ## 2. data-table.tsx.template
56
+
57
+ **File:** `.claude/skills/real-prototypes-skill/templates/data-table.tsx.template`
58
+
59
+ ### Issues Found (2)
60
+
61
+ #### 1. MISSING ARIA LABEL
62
+
63
+ - **Severity:** error
64
+ - **Message:** button at line 99 missing aria-label or associated label
65
+ - **Element:** button
66
+ - **Line:** 99
67
+
68
+ #### 2. MISSING FOCUS INDICATOR
69
+
70
+ - **Severity:** error
71
+ - **Message:** No focus styles detected. Add focus:ring or focus-visible styles.
72
+
73
+ ### Fixes Applied (1)
74
+
75
+ #### 1. ADD FOCUS STYLES
76
+
77
+ - **Description:** Add focus indicators to interactive elements
78
+ - **Implementation:** Add focus:ring-2 focus:ring-platform-primary focus:ring-offset-2 to buttons/links
79
+
80
+ ---
81
+
82
+ ## 3. form-section.tsx.template
83
+
84
+ **File:** `.claude/skills/real-prototypes-skill/templates/form-section.tsx.template`
85
+
86
+ ### Issues Found (6)
87
+
88
+ #### 1. COLOR CONTRAST
89
+
90
+ - **Severity:** warning
91
+ - **Message:** Found 1 color utilities. Manual contrast check recommended.
92
+ - **Colors:** text-red-500
93
+
94
+ #### 2. MISSING ARIA LABEL
95
+
96
+ - **Severity:** error
97
+ - **Message:** button at line 220 missing aria-label or associated label
98
+ - **Element:** button
99
+ - **Line:** 220
100
+
101
+ #### 3. MISSING ARIA LABEL
102
+
103
+ - **Severity:** error
104
+ - **Message:** button at line 230 missing aria-label or associated label
105
+ - **Element:** button
106
+ - **Line:** 230
107
+
108
+ #### 4. MISSING ARIA LABEL
109
+
110
+ - **Severity:** error
111
+ - **Message:** input at line 92 missing aria-label or associated label
112
+ - **Element:** input
113
+ - **Line:** 92
114
+
115
+ #### 5. MISSING ARIA LABEL
116
+
117
+ - **Severity:** error
118
+ - **Message:** input at line 117 missing aria-label or associated label
119
+ - **Element:** input
120
+ - **Line:** 117
121
+
122
+ #### 6. KEYBOARD NAVIGATION
123
+
124
+ - **Severity:** warning
125
+ - **Message:** Click handlers without keyboard handlers. Ensure keyboard accessibility.
126
+
127
+ ### Fixes Applied (1)
128
+
129
+ #### 1. ADD KEYBOARD HANDLERS
130
+
131
+ - **Description:** Add keyboard event handlers
132
+ - **Implementation:** Add onKeyDown={(e) => e.key === "Enter" && handleClick()} to clickable elements
133
+
134
+ ---
135
+
136
+ ## 4. modal-dialog.tsx.template
137
+
138
+ **File:** `.claude/skills/real-prototypes-skill/templates/modal-dialog.tsx.template`
139
+
140
+ ### Issues Found (7)
141
+
142
+ #### 1. COLOR CONTRAST
143
+
144
+ - **Severity:** warning
145
+ - **Message:** Found 2 color utilities. Manual contrast check recommended.
146
+ - **Colors:** bg-red-600, bg-red-700
147
+
148
+ #### 2. MISSING ARIA LABEL
149
+
150
+ - **Severity:** error
151
+ - **Message:** button at line 99 missing aria-label or associated label
152
+ - **Element:** button
153
+ - **Line:** 99
154
+
155
+ #### 3. MISSING ARIA LABEL
156
+
157
+ - **Severity:** error
158
+ - **Message:** button at line 107 missing aria-label or associated label
159
+ - **Element:** button
160
+ - **Line:** 107
161
+
162
+ #### 4. MISSING ARIA LABEL
163
+
164
+ - **Severity:** error
165
+ - **Message:** button at line 181 missing aria-label or associated label
166
+ - **Element:** button
167
+ - **Line:** 181
168
+
169
+ #### 5. MISSING ARIA LABEL
170
+
171
+ - **Severity:** error
172
+ - **Message:** button at line 190 missing aria-label or associated label
173
+ - **Element:** button
174
+ - **Line:** 190
175
+
176
+ #### 6. MISSING ARIA LABEL
177
+
178
+ - **Severity:** error
179
+ - **Message:** button at line 211 missing aria-label or associated label
180
+ - **Element:** button
181
+ - **Line:** 211
182
+
183
+ #### 7. KEYBOARD NAVIGATION
184
+
185
+ - **Severity:** warning
186
+ - **Message:** Click handlers without keyboard handlers. Ensure keyboard accessibility.
187
+
188
+ ### Fixes Applied (1)
189
+
190
+ #### 1. ADD KEYBOARD HANDLERS
191
+
192
+ - **Description:** Add keyboard event handlers
193
+ - **Implementation:** Add onKeyDown={(e) => e.key === "Enter" && handleClick()} to clickable elements
194
+
195
+ ---
196
+
197
+ ## 5. nav-item.tsx.template
198
+
199
+ **File:** `.claude/skills/real-prototypes-skill/templates/nav-item.tsx.template`
200
+
201
+ ### Issues Found (5)
202
+
203
+ #### 1. MISSING ARIA LABEL
204
+
205
+ - **Severity:** error
206
+ - **Message:** button at line 87 missing aria-label or associated label
207
+ - **Element:** button
208
+ - **Line:** 87
209
+
210
+ #### 2. MISSING ARIA LABEL
211
+
212
+ - **Severity:** error
213
+ - **Message:** button at line 114 missing aria-label or associated label
214
+ - **Element:** button
215
+ - **Line:** 114
216
+
217
+ #### 3. MISSING ARIA LABEL
218
+
219
+ - **Severity:** error
220
+ - **Message:** button at line 152 missing aria-label or associated label
221
+ - **Element:** button
222
+ - **Line:** 152
223
+
224
+ #### 4. MISSING ARIA LABEL
225
+
226
+ - **Severity:** error
227
+ - **Message:** button at line 184 missing aria-label or associated label
228
+ - **Element:** button
229
+ - **Line:** 184
230
+
231
+ #### 5. KEYBOARD NAVIGATION
232
+
233
+ - **Severity:** warning
234
+ - **Message:** Click handlers without keyboard handlers. Ensure keyboard accessibility.
235
+
236
+ ### Fixes Applied (1)
237
+
238
+ #### 1. ADD KEYBOARD HANDLERS
239
+
240
+ - **Description:** Add keyboard event handlers
241
+ - **Implementation:** Add onKeyDown={(e) => e.key === "Enter" && handleClick()} to clickable elements
242
+
243
+ ---
244
+
245
+ ## Accessibility Best Practices
246
+
247
+ ### Color Contrast
248
+ - Normal text (< 18pt): Minimum 4.5:1 contrast ratio
249
+ - Large text (≥ 18pt or ≥ 14pt bold): Minimum 3.0:1 contrast ratio
250
+ - Adjust lightness by maximum 5% to preserve design
251
+
252
+ ### Keyboard Navigation
253
+ - All interactive elements must be keyboard accessible
254
+ - Add `onKeyDown` handlers for `onClick` elements
255
+ - Use `tabIndex={0}` for custom interactive elements
256
+ - Ensure logical tab order
257
+
258
+ ### ARIA Labels
259
+ - All buttons must have accessible names (text, aria-label, or aria-labelledby)
260
+ - All links must have descriptive text
261
+ - Form inputs must have associated labels
262
+ - Use `aria-describedby` for error messages
263
+
264
+ ### Focus Indicators
265
+ - All focusable elements must have visible focus states
266
+ - Use `focus:ring-2 focus:ring-platform-primary` pattern
267
+ - Ensure focus indicators have minimum 3:1 contrast
268
+
269
+ ### Semantic HTML
270
+ - Use proper HTML elements (`<button>` not `<div onClick>`)
271
+ - Maintain heading hierarchy (h1 → h2 → h3, no skipping)
272
+ - Use landmarks (`<nav>`, `<main>`, `<footer>`)
273
+ - Use lists for list content
274
+
275
+ ### Form Accessibility
276
+ - Associate labels with inputs using `htmlFor` or `aria-label`
277
+ - Include `aria-invalid` for validation errors
278
+ - Use `aria-describedby` to link error messages
279
+ - Mark required fields with `required` or `aria-required`
280
+
281
+ ### Images
282
+ - All images must have `alt` attributes
283
+ - Use `alt=""` for decorative images
284
+ - Provide descriptive alt text for meaningful images
285
+
286
+ ---
287
+
288
+ ## Testing Recommendations
289
+
290
+ 1. **Automated Testing:** Run ESLint with accessibility plugin
291
+ 2. **Keyboard Testing:** Navigate site using only Tab, Enter, Escape
292
+ 3. **Screen Reader Testing:** Test with NVDA (Windows) or VoiceOver (Mac)
293
+ 4. **Contrast Testing:** Use browser DevTools Accessibility panel
294
+ 5. **WAVE Tool:** Run WAVE browser extension for visual feedback
295
+
296
+ ---
297
+
298
+ **Note:** All fixes preserve the original design with minimal visual changes (<1% difference).
@@ -0,0 +1,253 @@
1
+ {
2
+ "timestamp": "2026-01-26T18:27:12.016Z",
3
+ "wcagLevel": "AA",
4
+ "totalFiles": 5,
5
+ "totalIssues": 24,
6
+ "totalFixes": 5,
7
+ "results": [
8
+ {
9
+ "file": ".claude/skills/real-prototypes-skill/templates/dashboard-widget.tsx.template",
10
+ "issueCount": 4,
11
+ "fixCount": 1,
12
+ "issues": [
13
+ {
14
+ "type": "missing-aria-label",
15
+ "severity": "error",
16
+ "element": "button",
17
+ "line": 58,
18
+ "message": "button at line 58 missing aria-label or associated label"
19
+ },
20
+ {
21
+ "type": "missing-aria-label",
22
+ "severity": "error",
23
+ "element": "button",
24
+ "line": 65,
25
+ "message": "button at line 65 missing aria-label or associated label"
26
+ },
27
+ {
28
+ "type": "missing-aria-label",
29
+ "severity": "error",
30
+ "element": "button",
31
+ "line": 83,
32
+ "message": "button at line 83 missing aria-label or associated label"
33
+ },
34
+ {
35
+ "type": "missing-focus-indicator",
36
+ "severity": "error",
37
+ "message": "No focus styles detected. Add focus:ring or focus-visible styles."
38
+ }
39
+ ],
40
+ "fixes": [
41
+ {
42
+ "type": "add-focus-styles",
43
+ "description": "Add focus indicators to interactive elements",
44
+ "implementation": "Add focus:ring-2 focus:ring-platform-primary focus:ring-offset-2 to buttons/links"
45
+ }
46
+ ]
47
+ },
48
+ {
49
+ "file": ".claude/skills/real-prototypes-skill/templates/data-table.tsx.template",
50
+ "issueCount": 2,
51
+ "fixCount": 1,
52
+ "issues": [
53
+ {
54
+ "type": "missing-aria-label",
55
+ "severity": "error",
56
+ "element": "button",
57
+ "line": 99,
58
+ "message": "button at line 99 missing aria-label or associated label"
59
+ },
60
+ {
61
+ "type": "missing-focus-indicator",
62
+ "severity": "error",
63
+ "message": "No focus styles detected. Add focus:ring or focus-visible styles."
64
+ }
65
+ ],
66
+ "fixes": [
67
+ {
68
+ "type": "add-focus-styles",
69
+ "description": "Add focus indicators to interactive elements",
70
+ "implementation": "Add focus:ring-2 focus:ring-platform-primary focus:ring-offset-2 to buttons/links"
71
+ }
72
+ ]
73
+ },
74
+ {
75
+ "file": ".claude/skills/real-prototypes-skill/templates/form-section.tsx.template",
76
+ "issueCount": 6,
77
+ "fixCount": 1,
78
+ "issues": [
79
+ {
80
+ "type": "color-contrast",
81
+ "severity": "warning",
82
+ "message": "Found 1 color utilities. Manual contrast check recommended.",
83
+ "colors": [
84
+ "text-red-500"
85
+ ]
86
+ },
87
+ {
88
+ "type": "missing-aria-label",
89
+ "severity": "error",
90
+ "element": "button",
91
+ "line": 220,
92
+ "message": "button at line 220 missing aria-label or associated label"
93
+ },
94
+ {
95
+ "type": "missing-aria-label",
96
+ "severity": "error",
97
+ "element": "button",
98
+ "line": 230,
99
+ "message": "button at line 230 missing aria-label or associated label"
100
+ },
101
+ {
102
+ "type": "missing-aria-label",
103
+ "severity": "error",
104
+ "element": "input",
105
+ "line": 92,
106
+ "message": "input at line 92 missing aria-label or associated label"
107
+ },
108
+ {
109
+ "type": "missing-aria-label",
110
+ "severity": "error",
111
+ "element": "input",
112
+ "line": 117,
113
+ "message": "input at line 117 missing aria-label or associated label"
114
+ },
115
+ {
116
+ "type": "keyboard-navigation",
117
+ "severity": "warning",
118
+ "message": "Click handlers without keyboard handlers. Ensure keyboard accessibility."
119
+ }
120
+ ],
121
+ "fixes": [
122
+ {
123
+ "type": "add-keyboard-handlers",
124
+ "description": "Add keyboard event handlers",
125
+ "implementation": "Add onKeyDown={(e) => e.key === \"Enter\" && handleClick()} to clickable elements"
126
+ }
127
+ ]
128
+ },
129
+ {
130
+ "file": ".claude/skills/real-prototypes-skill/templates/modal-dialog.tsx.template",
131
+ "issueCount": 7,
132
+ "fixCount": 1,
133
+ "issues": [
134
+ {
135
+ "type": "color-contrast",
136
+ "severity": "warning",
137
+ "message": "Found 2 color utilities. Manual contrast check recommended.",
138
+ "colors": [
139
+ "bg-red-600",
140
+ "bg-red-700"
141
+ ]
142
+ },
143
+ {
144
+ "type": "missing-aria-label",
145
+ "severity": "error",
146
+ "element": "button",
147
+ "line": 99,
148
+ "message": "button at line 99 missing aria-label or associated label"
149
+ },
150
+ {
151
+ "type": "missing-aria-label",
152
+ "severity": "error",
153
+ "element": "button",
154
+ "line": 107,
155
+ "message": "button at line 107 missing aria-label or associated label"
156
+ },
157
+ {
158
+ "type": "missing-aria-label",
159
+ "severity": "error",
160
+ "element": "button",
161
+ "line": 181,
162
+ "message": "button at line 181 missing aria-label or associated label"
163
+ },
164
+ {
165
+ "type": "missing-aria-label",
166
+ "severity": "error",
167
+ "element": "button",
168
+ "line": 190,
169
+ "message": "button at line 190 missing aria-label or associated label"
170
+ },
171
+ {
172
+ "type": "missing-aria-label",
173
+ "severity": "error",
174
+ "element": "button",
175
+ "line": 211,
176
+ "message": "button at line 211 missing aria-label or associated label"
177
+ },
178
+ {
179
+ "type": "keyboard-navigation",
180
+ "severity": "warning",
181
+ "message": "Click handlers without keyboard handlers. Ensure keyboard accessibility."
182
+ }
183
+ ],
184
+ "fixes": [
185
+ {
186
+ "type": "add-keyboard-handlers",
187
+ "description": "Add keyboard event handlers",
188
+ "implementation": "Add onKeyDown={(e) => e.key === \"Enter\" && handleClick()} to clickable elements"
189
+ }
190
+ ]
191
+ },
192
+ {
193
+ "file": ".claude/skills/real-prototypes-skill/templates/nav-item.tsx.template",
194
+ "issueCount": 5,
195
+ "fixCount": 1,
196
+ "issues": [
197
+ {
198
+ "type": "missing-aria-label",
199
+ "severity": "error",
200
+ "element": "button",
201
+ "line": 87,
202
+ "message": "button at line 87 missing aria-label or associated label"
203
+ },
204
+ {
205
+ "type": "missing-aria-label",
206
+ "severity": "error",
207
+ "element": "button",
208
+ "line": 114,
209
+ "message": "button at line 114 missing aria-label or associated label"
210
+ },
211
+ {
212
+ "type": "missing-aria-label",
213
+ "severity": "error",
214
+ "element": "button",
215
+ "line": 152,
216
+ "message": "button at line 152 missing aria-label or associated label"
217
+ },
218
+ {
219
+ "type": "missing-aria-label",
220
+ "severity": "error",
221
+ "element": "button",
222
+ "line": 184,
223
+ "message": "button at line 184 missing aria-label or associated label"
224
+ },
225
+ {
226
+ "type": "keyboard-navigation",
227
+ "severity": "warning",
228
+ "message": "Click handlers without keyboard handlers. Ensure keyboard accessibility."
229
+ }
230
+ ],
231
+ "fixes": [
232
+ {
233
+ "type": "add-keyboard-handlers",
234
+ "description": "Add keyboard event handlers",
235
+ "implementation": "Add onKeyDown={(e) => e.key === \"Enter\" && handleClick()} to clickable elements"
236
+ }
237
+ ]
238
+ }
239
+ ],
240
+ "summary": {
241
+ "byType": {
242
+ "missing-aria-label": 17,
243
+ "missing-focus-indicator": 2,
244
+ "color-contrast": 2,
245
+ "keyboard-navigation": 3
246
+ },
247
+ "bySeverity": {
248
+ "error": 19,
249
+ "warning": 5,
250
+ "info": 0
251
+ }
252
+ }
253
+ }