@the-bearded-bear/claude-craft 8.8.1 → 8.8.2

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 (79) hide show
  1. package/Dev/i18n/de/Angular/commands/check-compliance.md +218 -168
  2. package/Dev/i18n/de/Common/agents/refactoring-specialist.md +146 -69
  3. package/Dev/i18n/de/Common/commands/add-technology.md +166 -68
  4. package/Dev/i18n/de/Common/commands/setup-ci.md +216 -33
  5. package/Dev/i18n/de/Laravel/commands/check-compliance.md +223 -115
  6. package/Dev/i18n/de/Python/checklists/new-feature.md +319 -44
  7. package/Dev/i18n/de/React/rules/02-architecture.md +483 -322
  8. package/Dev/i18n/de/React/rules/03-coding-standards.md +584 -368
  9. package/Dev/i18n/de/Symfony/commands/check-compliance.md +186 -114
  10. package/Dev/i18n/de/Symfony/rules/07-testing-symfony.md +679 -10
  11. package/Dev/i18n/de/UIUX/commands/a11y-component.md +284 -26
  12. package/Dev/i18n/de/UIUX/commands/design-tokens.md +199 -35
  13. package/Dev/i18n/de/UIUX/commands/user-flow.md +179 -16
  14. package/Dev/i18n/de/VueJS/commands/check-compliance.md +227 -102
  15. package/Dev/i18n/es/Angular/commands/check-compliance.md +217 -167
  16. package/Dev/i18n/es/Common/commands/add-technology.md +158 -60
  17. package/Dev/i18n/es/Laravel/commands/check-compliance.md +223 -115
  18. package/Dev/i18n/es/React/commands/check-testing.md +263 -169
  19. package/Dev/i18n/es/ReactNative/commands/check-testing.md +256 -198
  20. package/Dev/i18n/es/Symfony/commands/check-compliance.md +189 -117
  21. package/Dev/i18n/es/Symfony/commands/check-testing.md +301 -102
  22. package/Dev/i18n/es/Symfony/commands/migration-plan.md +267 -34
  23. package/Dev/i18n/es/UIUX/commands/a11y-component.md +274 -16
  24. package/Dev/i18n/es/UIUX/commands/design-tokens.md +186 -22
  25. package/Dev/i18n/es/UIUX/commands/user-flow.md +173 -10
  26. package/Dev/i18n/es/VueJS/commands/check-compliance.md +227 -102
  27. package/Dev/i18n/fr/Angular/commands/check-compliance.md +217 -167
  28. package/Dev/i18n/fr/Common/commands/ralph-run.md +138 -60
  29. package/Dev/i18n/fr/Laravel/commands/check-compliance.md +223 -115
  30. package/Dev/i18n/fr/React/commands/check-architecture.md +370 -53
  31. package/Dev/i18n/fr/React/commands/check-code-quality.md +454 -64
  32. package/Dev/i18n/fr/React/commands/check-testing.md +476 -102
  33. package/Dev/i18n/fr/Symfony/commands/check-compliance.md +188 -116
  34. package/Dev/i18n/fr/VueJS/commands/check-compliance.md +227 -102
  35. package/Dev/i18n/pt/Angular/commands/check-compliance.md +225 -175
  36. package/Dev/i18n/pt/Common/agents/ralph-conductor.md +211 -30
  37. package/Dev/i18n/pt/Common/commands/add-technology.md +149 -51
  38. package/Dev/i18n/pt/Common/commands/ralph-run.md +239 -35
  39. package/Dev/i18n/pt/Flutter/commands/analyze-performance.md +331 -46
  40. package/Dev/i18n/pt/Flutter/commands/check-compliance.md +234 -29
  41. package/Dev/i18n/pt/Flutter/commands/generate-feature.md +526 -51
  42. package/Dev/i18n/pt/Flutter/commands/generate-widget.md +515 -27
  43. package/Dev/i18n/pt/Flutter/commands/golden-update.md +322 -46
  44. package/Dev/i18n/pt/Flutter/commands/localization-check.md +278 -37
  45. package/Dev/i18n/pt/Laravel/commands/check-compliance.md +212 -104
  46. package/Dev/i18n/pt/React/commands/accessibility-check.md +151 -42
  47. package/Dev/i18n/pt/React/commands/bundle-analyze.md +300 -25
  48. package/Dev/i18n/pt/React/commands/check-architecture.md +369 -34
  49. package/Dev/i18n/pt/React/commands/check-code-quality.md +440 -34
  50. package/Dev/i18n/pt/React/commands/check-compliance.md +232 -62
  51. package/Dev/i18n/pt/React/commands/check-security.md +370 -31
  52. package/Dev/i18n/pt/React/commands/check-testing.md +473 -43
  53. package/Dev/i18n/pt/React/commands/generate-component.md +454 -19
  54. package/Dev/i18n/pt/React/commands/generate-hook.md +425 -24
  55. package/Dev/i18n/pt/React/commands/storybook-story.md +520 -35
  56. package/Dev/i18n/pt/ReactNative/commands/app-size.md +358 -387
  57. package/Dev/i18n/pt/ReactNative/commands/check-code-quality.md +246 -75
  58. package/Dev/i18n/pt/ReactNative/commands/check-compliance.md +191 -85
  59. package/Dev/i18n/pt/ReactNative/commands/check-security.md +363 -115
  60. package/Dev/i18n/pt/ReactNative/commands/check-testing.md +269 -79
  61. package/Dev/i18n/pt/ReactNative/commands/generate-screen.md +491 -324
  62. package/Dev/i18n/pt/ReactNative/commands/native-module.md +539 -82
  63. package/Dev/i18n/pt/ReactNative/commands/store-prepare.md +429 -185
  64. package/Dev/i18n/pt/ReactNative/rules/02-architecture.md +1084 -31
  65. package/Dev/i18n/pt/Symfony/commands/check-compliance.md +195 -123
  66. package/Dev/i18n/pt/UIUX/commands/a11y-audit.md +208 -24
  67. package/Dev/i18n/pt/UIUX/commands/a11y-component.md +281 -23
  68. package/Dev/i18n/pt/UIUX/commands/design-tokens.md +197 -33
  69. package/Dev/i18n/pt/UIUX/commands/user-flow.md +183 -20
  70. package/Dev/i18n/pt/VueJS/commands/check-compliance.md +228 -103
  71. package/Dev/i18n/pt/Workflow/commands/analyze.md +147 -146
  72. package/Dev/i18n/pt/Workflow/commands/design.md +205 -204
  73. package/Dev/i18n/pt/Workflow/commands/implement.md +184 -184
  74. package/Project/i18n/de/Sprint/commands/dev.md +339 -86
  75. package/Project/i18n/es/Sprint/commands/dev.md +342 -91
  76. package/Project/i18n/pt/Sprint/commands/dev.md +343 -92
  77. package/bundles/cursor/.cursorrules +1 -1
  78. package/bundles/windsurf/.windsurfrules +1 -1
  79. package/package.json +1 -1
@@ -1,11 +1,11 @@
1
1
  ---
2
- description: Komponenten-Barrierefreiheit-Spezifikation
2
+ description: Barrierefreiheits-Spezifikation für Komponenten
3
3
  argument-hint: [arguments]
4
4
  ---
5
5
 
6
- # Komponenten-Barrierefreiheit-Spezifikation
6
+ # Barrierefreiheits-Spezifikation für Komponenten
7
7
 
8
- Du bist ein zertifizierter Barrierefreiheit-Experte. Du musst vollständige Barrierefreiheit-Spezifikationen für eine UI-Komponente erstellen.
8
+ Sie sind ein zertifizierter Barrierefreiheitsexperte. Sie müssen vollständige Barrierefreiheitsspezifikationen für eine UI-Komponente erstellen.
9
9
 
10
10
  ## Argumente
11
11
  $ARGUMENTS
@@ -14,42 +14,52 @@ Argumente:
14
14
  - Komponentenname
15
15
  - (Optional) Typ: button, input, modal, dropdown, tabs, accordion, tooltip, etc.
16
16
 
17
- Beispiel: `/uiux:a11y-component Modal` oder `/uiux:a11y-component "Datumsauswahl" typ:input`
17
+ Beispiel: `/uiux:a11y-component Modal` oder `/uiux:a11y-component "Datumsauswahl" type:input`
18
18
 
19
19
  ## Plan-Modus
20
20
 
21
- > **Der Plan-Modus ist obligatorisch.** Vor der Ausführung aktiviert Claude den Plan-Modus, um betroffenen Code zu analysieren, einen Implementierungsplan vorzuschlagen und auf Ihre Validierung zu warten, bevor Änderungen vorgenommen werden.
21
+ > **Der Plan-Modus ist obligatorisch.** Bevor Claude mit der Ausführung beginnt, aktiviert es den Plan-Modus, um den betroffenen Code zu analysieren, einen Implementierungsplan vorzuschlagen und auf Ihre Validierung zu warten, bevor Änderungen vorgenommen werden.
22
22
 
23
- ## MISSION
23
+ ## AUFTRAG
24
24
 
25
- ### Schritt 1: ARIA-Pattern identifizieren
25
+ ### Schritt 1: ARIA-Muster identifizieren
26
26
 
27
- Die ARIA Authoring Practices Guide (APG) für das entsprechende Pattern konsultieren.
27
+ Konsultieren Sie den ARIA Authoring Practices Guide (APG) für das entsprechende Muster.
28
28
 
29
29
  ### Schritt 2: Spezifikation erstellen
30
30
 
31
31
  ```
32
32
  ══════════════════════════════════════════════════════════════
33
- BARRIEREFREIHEIT-SPEZIFIKATION: {KOMPONENTEN_NAME}
33
+ BARRIEREFREIHEITSSPEZIFIKATION: {KOMPONENTENNAME}
34
34
  ══════════════════════════════════════════════════════════════
35
35
 
36
36
  Typ: {Button | Input | Dialog | Listbox | Tabs | ...}
37
- APG-Pattern: {Link zum offiziellen Pattern}
38
- Datum: {datum}
37
+ APG-Muster: {Link zum offiziellen Muster}
38
+ Datum: {date}
39
39
 
40
40
  ──────────────────────────────────────────────────────────────
41
41
  📋 HTML-SEMANTIK
42
42
  ──────────────────────────────────────────────────────────────
43
43
 
44
44
  ### Empfohlenes natives Element
45
+
45
46
  ```html
46
- <!-- Immer natives Element bevorzugen -->
47
+ <!-- Immer das native Element bevorzugen -->
47
48
  <{element} ...>
48
49
  {Inhalt}
49
50
  </{element}>
50
51
  ```
51
52
 
53
+ ### Falls eine benutzerdefinierte Komponente erforderlich ist
54
+
55
+ ```html
56
+ <div role="{role}" ...>
57
+ {Inhalt}
58
+ </div>
59
+ ```
60
+
52
61
  ### Vollständige Struktur
62
+
53
63
  ```html
54
64
  <!-- Vollständiges Beispiel mit ARIA -->
55
65
  <div
@@ -58,6 +68,7 @@ Datum: {datum}
58
68
  tabindex="0"
59
69
  >
60
70
  <span id="{id}-label">{Label}</span>
71
+ <div id="{id}-description">{Beschreibung}</div>
61
72
  {Inhalt}
62
73
  </div>
63
74
  ```
@@ -67,76 +78,323 @@ Datum: {datum}
67
78
  ──────────────────────────────────────────────────────────────
68
79
 
69
80
  ### Erforderliche Attribute
81
+
70
82
  | Attribut | Wert | Wann | Beschreibung |
71
83
  |----------|------|------|--------------|
72
- | role | {role} | Immer (falls custom) | Definiert den Typ |
84
+ | role | {role} | Immer (falls benutzerdefiniert) | Definiert den Typ |
73
85
  | aria-label | "{text}" | Falls kein sichtbares Label | Barrierefreies Label |
86
+ | aria-labelledby | "{id}" | Falls sichtbares Label | Verweis auf Label |
74
87
 
75
88
  ### Bedingte Attribute
89
+
76
90
  | Attribut | Wert | Wann | Beschreibung |
77
91
  |----------|------|------|--------------|
78
- | aria-expanded | "true"/"false" | Falls erweiterbar | Offen/geschlossen |
79
- | aria-disabled | "true" | Falls deaktiviert | Deaktiviert |
92
+ | aria-describedby | "{id}" | Falls Beschreibung vorhanden | Verweis auf Beschreibung |
93
+ | aria-expanded | "true"/"false" | Falls erweiterbar | Geöffnet/geschlossen-Zustand |
94
+ | aria-controls | "{id}" | Falls anderes Element gesteuert wird | ID des gesteuerten Elements |
95
+ | aria-owns | "{id}" | Falls separates DOM | Eltern-Kind-Beziehung |
96
+ | aria-haspopup | "dialog"/"menu"/"listbox" | Falls Popup vorhanden | Popup-Typ |
97
+ | aria-pressed | "true"/"false" | Falls Umschalter | Gedrückt-Zustand |
98
+ | aria-selected | "true"/"false" | Falls Auswahl | Ausgewählt-Zustand |
99
+ | aria-checked | "true"/"false"/"mixed" | Falls Kontrollkästchen | Aktiviert-Zustand |
100
+ | aria-disabled | "true" | Falls deaktiviert | Deaktiviert-Zustand |
101
+ | aria-invalid | "true" | Falls Fehler | Ungültig-Zustand |
102
+ | aria-required | "true" | Falls Pflichtfeld | Pflichtfeld |
103
+ | aria-busy | "true" | Falls Laden | In Bearbeitung |
104
+ | aria-live | "polite"/"assertive" | Falls dynamisch | Änderung ankündigen |
105
+ | aria-atomic | "true" | Mit aria-live | Alles ankündigen |
106
+
107
+ ### Zustände nach Interaktion
108
+
109
+ | Zustand | ARIA-Attribute |
110
+ |---------|----------------|
111
+ | Standard | {Basisattribute} |
112
+ | Hover | Keine ARIA-Änderung |
113
+ | Fokus | Keine ARIA-Änderung |
114
+ | Erweitert | aria-expanded="true" |
115
+ | Eingeklappt | aria-expanded="false" |
116
+ | Ausgewählt | aria-selected="true" |
117
+ | Deaktiviert | aria-disabled="true" |
118
+ | Wird geladen | aria-busy="true" |
119
+ | Fehler | aria-invalid="true", aria-errormessage="{id}" |
80
120
 
81
121
  ──────────────────────────────────────────────────────────────
82
122
  ⌨️ TASTATURNAVIGATION
83
123
  ──────────────────────────────────────────────────────────────
84
124
 
125
+ ### Haupttasten
126
+
85
127
  | Taste | Aktion | Detail |
86
128
  |-------|--------|--------|
87
- | Tab | Fokus auf Komponente | Betritt Komponente |
129
+ | Tab | Fokus auf Komponente | Betritt die Komponente |
130
+ | Shift+Tab | Vorheriger Fokus | Verlässt die Komponente |
88
131
  | Enter | Aktivieren | Primäre Aktion |
89
- | Space | Aktivieren (Toggle) | Für Toggle-Buttons |
132
+ | Space | Aktivieren (Umschalten) | Für Umschalter-Schaltflächen |
90
133
  | Escape | Schließen/Abbrechen | Falls Popup/Modal |
91
- | Pfeile | Interne Navigation | In Listen |
134
+ | Pfeil oben | Vorheriges Element | Listennavigation |
135
+ | ↓ Pfeil unten | Nächstes Element | Listennavigation |
136
+ | ← Pfeil links | Vorheriges Element (horizontal) | Reiter, Schieberegler |
137
+ | → Pfeil rechts | Nächstes Element (horizontal) | Reiter, Schieberegler |
138
+ | Home | Erstes Element | Schnellnavigation |
139
+ | End | Letztes Element | Schnellnavigation |
140
+
141
+ ### Fokusverwaltung
142
+
143
+ | Situation | Verhalten |
144
+ |-----------|-----------|
145
+ | Öffnen | Fokus auf {erstes fokussierbares Element} |
146
+ | Schließen | Fokus kehrt zu {auslösendes Element} zurück |
147
+ | Interne Navigation | Wandernder tabindex ODER aria-activedescendant |
148
+ | Fokus-Trap | {Ja bei Modal / Nein bei Dropdown} |
149
+
150
+ ### Wandernder tabindex (falls zutreffend)
151
+
152
+ ```html
153
+ <!-- Immer nur ein fokussierbares Element gleichzeitig -->
154
+ <div role="tablist">
155
+ <button role="tab" tabindex="0" aria-selected="true">Reiter 1</button>
156
+ <button role="tab" tabindex="-1" aria-selected="false">Reiter 2</button>
157
+ <button role="tab" tabindex="-1" aria-selected="false">Reiter 3</button>
158
+ </div>
159
+ ```
160
+
161
+ ──────────────────────────────────────────────────────────────
162
+ 🎯 SICHTBARER FOKUS
163
+ ──────────────────────────────────────────────────────────────
164
+
165
+ ### Erforderlicher Stil (WCAG 2.4.11 AAA)
166
+
167
+ ```css
168
+ .{komponente}:focus-visible {
169
+ /* Sichtbare Umrandung */
170
+ outline: 2px solid var(--color-focus);
171
+ outline-offset: 2px;
172
+
173
+ /* Kontrastverhältnis ≥ 3:1 */
174
+ /* Fokusfläche ≥ sichtbarer Umfang */
175
+ }
176
+
177
+ /* Zurücksetzen bei Mausbedienung */
178
+ .{komponente}:focus:not(:focus-visible) {
179
+ outline: none;
180
+ }
181
+ ```
182
+
183
+ ### Überprüfungen
184
+
185
+ | Kriterium | Wert | Status |
186
+ |-----------|------|--------|
187
+ | Umrandungsdicke | ≥ 2px | ✅ |
188
+ | Umrandungskontrast | ≥ 3:1 | ✅ |
189
+ | Sichtbare Fläche | ≥ Umfang | ✅ |
190
+ | Sichtbar auf allen Hintergründen | Ja | ✅ |
92
191
 
93
192
  ──────────────────────────────────────────────────────────────
94
193
  🔊 SCREENREADER-ANKÜNDIGUNGEN
95
194
  ──────────────────────────────────────────────────────────────
96
195
 
97
- ### Bei Eintritt (Fokus)
196
+ ### Beim Eintreten (Fokus)
197
+
98
198
  ```
99
199
  "{Label}, {Rolle}, {Zustand}"
200
+
100
201
  Beispiele:
101
- - "Absenden, Button"
202
+ - "Absenden, Schaltfläche"
102
203
  - "Hauptmenü, Menü, eingeklappt"
204
+ - "Name, Textfeld, Pflichtfeld"
205
+ - "Newsletter, Kontrollkästchen, nicht aktiviert"
103
206
  ```
104
207
 
105
- ### Während Interaktion
208
+ ### Während der Interaktion
209
+
106
210
  | Aktion | Ankündigung |
107
211
  |--------|-------------|
108
212
  | Erweiterung | "erweitert" / "eingeklappt" |
109
- | Fehler | "Fehler: {Nachricht}" |
213
+ | Auswahl | "ausgewählt" |
214
+ | Umschalten | "ein" / "aus" |
215
+ | Laden | "Wird geladen" |
216
+ | Erfolg | "{Erfolgsmeldung}" |
217
+ | Fehler | "Fehler: {Meldung}" |
218
+
219
+ ### Dynamischer Inhalt (aria-live)
220
+
221
+ ```html
222
+ <!-- Höfliche Benachrichtigungen (nicht dringend) -->
223
+ <div aria-live="polite" aria-atomic="true">
224
+ {Toast-Nachricht}
225
+ </div>
226
+
227
+ <!-- Dringende Benachrichtigungen (Fehler) -->
228
+ <div aria-live="assertive" aria-atomic="true">
229
+ {Fehlermeldung}
230
+ </div>
231
+ ```
232
+
233
+ ──────────────────────────────────────────────────────────────
234
+ 📏 KONTRAST (WCAG AAA)
235
+ ──────────────────────────────────────────────────────────────
236
+
237
+ ### Text
238
+
239
+ | Typ | Erforderliches Verhältnis | Überprüfung |
240
+ |-----|--------------------------|-------------|
241
+ | Normaler Text (< 18px) | ≥ 7:1 | {Farbe} / {Hintergrund} = {Verhältnis} |
242
+ | Großer Text (≥ 18px oder 14px fett) | ≥ 4.5:1 | {Farbe} / {Hintergrund} = {Verhältnis} |
243
+
244
+ ### UI-Elemente
245
+
246
+ | Element | Erforderliches Verhältnis | Überprüfung |
247
+ |---------|--------------------------|-------------|
248
+ | Rahmen | ≥ 3:1 | {Farbe} / {Hintergrund} = {Verhältnis} |
249
+ | Symbole | ≥ 3:1 | {Farbe} / {Hintergrund} = {Verhältnis} |
250
+ | Fokusumrandung | ≥ 3:1 | {Farbe} / {Hintergrund} = {Verhältnis} |
251
+
252
+ ### Zustände
253
+
254
+ | Zustand | Kontrastüberprüfung |
255
+ |---------|---------------------|
256
+ | Standard | ✅ {Verhältnis} |
257
+ | Hover | ✅ {Verhältnis} |
258
+ | Fokus | ✅ {Verhältnis} |
259
+ | Deaktiviert | ⚠️ Nicht erforderlich, aber empfohlen |
110
260
 
111
261
  ──────────────────────────────────────────────────────────────
112
262
  📐 TOUCH-ZIELE (WCAG 2.5.5 AAA)
113
263
  ──────────────────────────────────────────────────────────────
114
264
 
265
+ ### Mindestabmessungen
266
+
115
267
  | Kriterium | Wert | Status |
116
268
  |-----------|------|--------|
117
- | Mindestgröße | 44 × 44 CSS Pixel | ✅/❌ |
269
+ | Mindestgröße | 44 × 44 CSS-Pixel | ✅/❌ |
118
270
  | Abstand zwischen Zielen | ≥ 8px | ✅/❌ |
119
271
 
272
+ ### Implementierung
273
+
274
+ ```css
275
+ .{komponente} {
276
+ min-width: 44px;
277
+ min-height: 44px;
278
+ /* ODER Innenabstand, um 44px zu erreichen */
279
+ padding: 10px 16px; /* falls Texthöhe ~24px */
280
+ }
281
+
282
+ /* Symbol-Schaltflächen */
283
+ .{komponente}-icon {
284
+ width: 44px;
285
+ height: 44px;
286
+ display: flex;
287
+ align-items: center;
288
+ justify-content: center;
289
+ }
290
+ ```
291
+
292
+ ──────────────────────────────────────────────────────────────
293
+ 🧪 DURCHZUFÜHRENDE TESTS
294
+ ──────────────────────────────────────────────────────────────
295
+
296
+ ### Automatisiert
297
+
298
+ - [ ] axe DevTools: 0 Verstöße
299
+ - [ ] Lighthouse Barrierefreiheit: 100/100
300
+ - [ ] ESLint jsx-a11y: 0 Fehler
301
+
302
+ ### Manuell
303
+
304
+ - [ ] Vollständige Tastaturnavigation
305
+ - [ ] Sichtbarer Fokus bei jedem Schritt
306
+ - [ ] Keine Tastaturfalle
307
+ - [ ] Logische Fokusreihenfolge
308
+
309
+ ### Screenreader
310
+
311
+ - [ ] VoiceOver (macOS/iOS): korrekte Ankündigungen
312
+ - [ ] NVDA (Windows): Listen-/Tabellennavigation
313
+ - [ ] TalkBack (Android): falls mobil
314
+
315
+ ### Randfälle
316
+
317
+ - [ ] 400 % Zoom: kein Inhaltsverlust
318
+ - [ ] Hochkontrastmodus: sichtbar
319
+ - [ ] Reduzierte Bewegung: Animationen berücksichtigt
320
+
321
+ ──────────────────────────────────────────────────────────────
322
+ 💻 IMPLEMENTIERUNGSBEISPIEL
323
+ ──────────────────────────────────────────────────────────────
324
+
325
+ ```tsx
326
+ // {Component}.tsx
327
+ import { forwardRef, useId } from 'react';
328
+
329
+ interface {Component}Props {
330
+ label: string;
331
+ description?: string;
332
+ disabled?: boolean;
333
+ // ...weitere Props
334
+ }
335
+
336
+ export const {Component} = forwardRef<HTML{Element}Element, {Component}Props>(
337
+ ({ label, description, disabled, ...props }, ref) => {
338
+ const id = useId();
339
+ const descriptionId = description ? `${id}-description` : undefined;
340
+
341
+ return (
342
+ <{element}
343
+ ref={ref}
344
+ id={id}
345
+ role="{role}"
346
+ aria-label={label}
347
+ aria-describedby={descriptionId}
348
+ aria-disabled={disabled}
349
+ tabIndex={disabled ? -1 : 0}
350
+ {...props}
351
+ >
352
+ {/* Inhalt */}
353
+
354
+ {description && (
355
+ <span id={descriptionId} className="sr-only">
356
+ {description}
357
+ </span>
358
+ )}
359
+ </{element}>
360
+ );
361
+ }
362
+ );
363
+
364
+ {Component}.displayName = '{Component}';
365
+ ```
366
+
120
367
  ──────────────────────────────────────────────────────────────
121
368
  ✅ VALIDIERUNGS-CHECKLISTE
122
369
  ──────────────────────────────────────────────────────────────
123
370
 
124
371
  ### Semantik
125
- - [ ] Natives HTML-Element verwendet falls möglich
126
- - [ ] Korrekte ARIA-Rolle falls custom
372
+ - [ ] Natives HTML-Element verwendet, wenn möglich
373
+ - [ ] Korrekte ARIA-Rolle bei benutzerdefinierter Komponente
127
374
  - [ ] Logische DOM-Struktur
128
375
 
129
376
  ### ARIA
130
377
  - [ ] Erforderliche Attribute vorhanden
378
+ - [ ] Bedingte Attribute korrekt
131
379
  - [ ] Keine ARIA-Überladung (nativ > ARIA)
132
380
 
133
381
  ### Tastatur
134
382
  - [ ] Fokussierbar (passender tabindex)
135
- - [ ] Alle Aktionen per Tastatur
383
+ - [ ] Alle Aktionen per Tastatur erreichbar
136
384
  - [ ] Keine Tastaturfalle
137
385
  - [ ] Konformer sichtbarer Fokus
138
386
 
387
+ ### Ankündigungen
388
+ - [ ] Label wird bei Fokus angekündigt
389
+ - [ ] Zustände werden bei Änderung angekündigt
390
+ - [ ] Fehler mit aria-live assertive
391
+
139
392
  ### Kontrast
140
393
  - [ ] Text ≥ 7:1 (AAA)
141
394
  - [ ] UI ≥ 3:1
395
+ - [ ] Fokus ≥ 3:1
396
+
397
+ ### Touch
398
+ - [ ] Ziele ≥ 44×44px
399
+ - [ ] Abstände ≥ 8px
142
400
  ```