red-proto 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.
@@ -0,0 +1,77 @@
1
+ # Card
2
+
3
+ ## Beschreibung
4
+ Container für zusammengehörige Inhalte. Cards gruppieren verwandte Informationen und Aktionen zu einer logischen Einheit. Sie können statisch (reine Anzeige) oder interaktiv (klickbar, z.B. zu Detailansicht) sein.
5
+
6
+ ## Varianten
7
+
8
+ | Variante | Verwendung |
9
+ |---------------|------------------------------------------------------------------|
10
+ | `default` | Statische Inhalts-Card (kein Hover-Effekt) |
11
+ | `interactive` | Klickbare Card (gesamte Card ist Klickziel) mit Hover-Effekt |
12
+ | `compact` | Reduziertes Padding, für Listen mit vielen Cards |
13
+ | `flat` | Kein Schatten, nur Border – für Inhalte auf farbigem Hintergrund |
14
+ | `highlight` | Mit farbiger Leiste oder farbigem Hintergrund-Tint (Betonung) |
15
+
16
+ ## Aufbau (Reihenfolge im DOM)
17
+
18
+ ```
19
+ [Card-Wrapper]
20
+ [Card-Header] ← Optional: Titel + Subtitle + Header-Aktion
21
+ [Card-Media] ← Optional: Bild/Icon-Bereich oben
22
+ [Card-Body] ← Pflicht: Hauptinhalt
23
+ [Card-Footer] ← Optional: Aktionen (Buttons, Links)
24
+ ```
25
+
26
+ ## Zustände (nur bei Variant: interactive)
27
+
28
+ | Zustand | Verhalten |
29
+ |----------|------------------------------------------------------------------|
30
+ | `default`| Ruhezustand |
31
+ | `hover` | Leicht erhöhter Schatten, leichter Hintergrund-Tint |
32
+ | `focus` | Sichtbarer Focus-Ring (Keyboard-Navigation) |
33
+ | `active` | Leichter Scale-Down (0.99) oder verstärkter Schatten |
34
+
35
+ ## Visuelle Specs – Default
36
+
37
+ | Eigenschaft | Wert |
38
+ |----------------|-----------------------------|
39
+ | Hintergrund | `color-bg-surface` |
40
+ | Border | `1px color-border-default` |
41
+ | Border-Radius | `radius-lg` |
42
+ | Schatten | `shadow-card` |
43
+ | Padding Body | `spacing-6` |
44
+ | Padding Compact| `spacing-4` |
45
+
46
+ ## Visuelle Specs – Interactive (zusätzlich)
47
+
48
+ | Eigenschaft | Hover |
49
+ |-------------------|------------------------------|
50
+ | Schatten | `shadow-lg` |
51
+ | Hintergrund | leichter `color-primary-50` |
52
+ | Transition | `transition-shadow` |
53
+
54
+ ## Card-Header
55
+
56
+ - Titel: `style-h3` oder `style-h4` je nach Kontext
57
+ - Subtitle: `style-body-sm`, Farbe `color-text-secondary`
58
+ - Header-Aktion: Icon-Button rechts, oder Overflow-Menu
59
+
60
+ ## Card-Footer
61
+
62
+ - Trennlinie oben: `1px color-border-default`
63
+ - Padding: `spacing-4` `spacing-6`
64
+ - Layout: Flex, Aktionen rechts-ausgerichtet
65
+ - Max. 2 Aktionen – primary + secondary Button
66
+
67
+ ## Regeln
68
+
69
+ - Interaktive Cards haben genau EINEN Klickbereich (die gesamte Card) – keine verschachtelten Links oder Buttons innerhalb einer klickbaren Card (Ausnahme: Overflow-Menu)
70
+ - Wenn mehrere Aktionen nötig sind → Aktionen im Footer, Card selbst nicht klickbar
71
+ - Bilder in Cards: immer mit alt-Text, feste Höhe (aspect-ratio), object-fit: cover
72
+
73
+ ## Nicht verwenden wenn
74
+
75
+ - Für einzelne Kennzahlen → Stat-Komponente
76
+ - Für Formular-Felder → Form-Group
77
+ - Für Listen-Einträge mit vielen Zeilen → List-Item
@@ -0,0 +1,81 @@
1
+ # Input / Textfeld
2
+
3
+ ## Beschreibung
4
+ Einzeiliges Texteingabefeld. Verwendet für kurze Freitext-Eingaben: Name, E-Mail, Suche, Passwort, Zahlen.
5
+
6
+ ## Varianten
7
+
8
+ | Variante | Verwendung |
9
+ |-------------|------------------------------------------------------|
10
+ | `default` | Standardmäßiges Textfeld |
11
+ | `search` | Mit Lupe-Icon links, optional Clear-Button rechts |
12
+ | `password` | Maskierter Text, Toggle für Sichtbarkeit |
13
+ | `number` | Nur numerische Eingabe, optional Stepper-Buttons |
14
+
15
+ ## Zustände
16
+
17
+ | Zustand | Verhalten |
18
+ |------------|------------------------------------------------------------------------|
19
+ | `default` | Ruhezustand – Border: `color-border-default` |
20
+ | `focus` | Border: `color-border-focus` (2px), kein Box-Shadow |
21
+ | `filled` | Hat Inhalt – kein visueller Unterschied außer Content |
22
+ | `error` | Border: `color-error-500`, Fehlermeldung darunter, Error-Icon |
23
+ | `success` | Border: `color-success-500`, Checkmark-Icon (optional) |
24
+ | `disabled` | Opacity 0.5, Background: `color-bg-muted`, kein Cursor |
25
+ | `readonly` | Kein Fokus möglich, Background: `color-bg-muted`, Cursor: `default` |
26
+
27
+ ## Aufbau (Reihenfolge im DOM)
28
+
29
+ ```
30
+ [Label] ← <label> mit for-Attribut (PFLICHT, kein Placeholder-Ersatz)
31
+ [Helper-Text] ← Optional, kurze Erklärung vor dem Input
32
+ [Input-Wrapper]
33
+ [Prefix-Icon] ← Optional
34
+ [<input>]
35
+ [Suffix-Icon/Action] ← Optional (Clear, Toggle, Unit)
36
+ [Error-Message] ← Nur bei Fehler, mit role="alert" oder aria-live
37
+ ```
38
+
39
+ ## Größen
40
+
41
+ | Größe | Padding (h/v) | Font-Size | Height |
42
+ |-------|------------------------------|--------------|--------|
43
+ | `sm` | `spacing-2` / `spacing-3` | `text-sm` | 32px |
44
+ | `md` | `spacing-3` / `spacing-4` | `text-base` | 40px |
45
+ | `lg` | `spacing-4` / `spacing-4` | `text-base` | 48px |
46
+
47
+ ## Visuelle Specs
48
+
49
+ | Eigenschaft | Default | Focus | Error |
50
+ |----------------|----------------------------|---------------------------|--------------------------|
51
+ | Hintergrund | `color-neutral-0` | `color-neutral-0` | `color-error-100` |
52
+ | Border | `1px color-border-default` | `2px color-border-focus` | `1px color-error-500` |
53
+ | Border-Radius | `radius-default` | `radius-default` | `radius-default` |
54
+ | Text | `color-text-primary` | `color-text-primary` | `color-text-primary` |
55
+ | Placeholder | `color-text-disabled` | `color-text-disabled` | `color-text-disabled` |
56
+
57
+ ## Label-Regeln
58
+
59
+ - Label ist immer sichtbar – kein Placeholder als Label-Ersatz
60
+ - Pflichtfelder: Sternchen (*) im Label + aria-required="true" auf Input
61
+ - Pflichtfeld-Hinweis am Anfang des Formulars: "* Pflichtfeld"
62
+
63
+ ## Fehlermeldungen
64
+
65
+ - Inline direkt unter dem Input, nicht in Alerts oder Toasts
66
+ - Text: `color-error-700`, `text-sm`
67
+ - Kurz und präzise: "Bitte gültige E-Mail-Adresse eingeben" – nicht "Fehler"
68
+ - ID verknüpft mit Input via `aria-describedby`
69
+
70
+ ## Regeln
71
+
72
+ - Labels sind immer vergeben – niemals nur Placeholder
73
+ - Fehlermeldungen sind inline, nicht in Toasts
74
+ - Jeder Input hat ein name-Attribut
75
+ - Autocomplete-Attribute setzen (email, name, tel etc.)
76
+
77
+ ## Nicht verwenden wenn
78
+
79
+ - Längerer Freitext → Textarea
80
+ - Auswahl aus Optionen → Select oder Radio/Checkbox
81
+ - Datumsauswahl → DatePicker
@@ -0,0 +1,132 @@
1
+ # Pattern: Datenanzeige
2
+
3
+ ## Tabellen
4
+
5
+ ### Verwendung
6
+
7
+ Für strukturierte, vergleichbare Daten mit mehreren Attributen pro Zeile. Nicht für einfache Listen oder Einzel-Werte.
8
+
9
+ ### Aufbau
10
+
11
+ ```
12
+ [Table-Toolbar] ← Optional: Suche, Filter, Bulk-Aktionen, Spalten-Konfiguration
13
+ [Table-Header] ← Sticky bei langen Tabellen; sortierbare Spalten mit Icon
14
+ [Table-Body]
15
+ [Table-Row] ← Hover-Highlight; selektierbar (Checkbox links)
16
+ [Table-Cell]
17
+ [Table-Footer] ← Pagination oder "Alle X Einträge laden"
18
+ ```
19
+
20
+ ### Regeln
21
+
22
+ - Spalten-Header: `style-label`, `color-text-secondary`, sortierbar mit Up/Down-Icon
23
+ - Zahlen: rechtsbündig, gleiche Dezimalstellen pro Spalte
24
+ - Text: linksbündig
25
+ - Status/Badges: zentriert (optional)
26
+ - Leerer Zustand: Empty-State Pattern (nicht einfach leere Tabelle)
27
+ - Mobile: Horizontales Scrollen oder Card-Ansicht als Alternative
28
+ - Max. 6–8 Spalten sichtbar – mehr → Spalten ausblendbar
29
+
30
+ ### Zeilenaktionen
31
+
32
+ - Hover-Aktionen: erscheinen rechts in der Zeile beim Hover (Edit, Delete)
33
+ - Overflow-Menu: bei mehr als 2 Aktionen
34
+ - Bulk-Aktionen: erscheinen in Toolbar wenn Zeilen selektiert
35
+
36
+ ---
37
+
38
+ ## Listen
39
+
40
+ ### Einfache Liste
41
+
42
+ Für Elemente mit wenigen Attributen, keine komplexe Sortierung nötig.
43
+
44
+ ```
45
+ [List-Item]
46
+ [Leading: Icon/Avatar/Thumbnail] ← Optional
47
+ [Content]
48
+ [Primary Text] ← style-body, color-text-primary
49
+ [Secondary Text] ← style-body-sm, color-text-secondary
50
+ [Trailing: Action/Meta/Badge] ← Optional
51
+ ```
52
+
53
+ Trennlinien: `1px color-border-default` zwischen Items (nicht unter letztem Item).
54
+
55
+ ### Geordnete Liste / Rankings
56
+
57
+ - Nummerierung: konsistent ausgerichtet (rechtsbündig, gleiche Breite)
58
+ - Hervorhebung: Top 3 mit Badge oder Icon
59
+
60
+ ---
61
+
62
+ ## Badges / Tags
63
+
64
+ ### Verwendung
65
+
66
+ Kurze Status-Informationen, Kategorisierungen, Zähler.
67
+
68
+ ### Varianten
69
+
70
+ | Variante | Verwendung | Farbe |
71
+ |-------------|------------------------------------------|-----------------------------|
72
+ | `success` | Aktiv, Abgeschlossen, Online | `color-success-*` |
73
+ | `warning` | Ausstehend, In Review, Achtung | `color-warning-*` |
74
+ | `error` | Fehler, Abgelehnt, Kritisch | `color-error-*` |
75
+ | `info` | Neu, Beta, Hinweis | `color-primary-*` |
76
+ | `neutral` | Archiviert, Inaktiv, Standard | `color-neutral-*` |
77
+
78
+ ### Regeln
79
+
80
+ - Maximale Zeichenzahl: 20–25 Zeichen – mehr → Tooltip mit Volltext
81
+ - Nicht klickbar (wenn klickbar → Filter-Tag / Chip)
82
+ - Dot-Badge: Nur Farbe als Status-Indikator (immer mit sichtbarem Text-Label für Accessibility)
83
+ - Zähler-Badge: Auf Icons/Avatare für ungelesene Nachrichten etc.
84
+
85
+ ---
86
+
87
+ ## Statistik / Kennzahlen (Stat Cards)
88
+
89
+ ### Aufbau
90
+
91
+ ```
92
+ [Label / Beschreibung] ← style-body-sm, color-text-secondary
93
+ [Hauptwert] ← text-3xl oder text-4xl, font-weight-bold
94
+ [Vergleichswert / Trend] ← Optional: +12% (grün) oder -3% (rot) + Icon
95
+ ```
96
+
97
+ ### Regeln
98
+
99
+ - Trend-Indikatoren: Farbe PLUS Icon (nicht nur Farbe)
100
+ - Einheiten klar kennzeichnen: €, %, Stk., ms
101
+ - Sehr große Zahlen formatieren: 1.234.567 oder 1,2M
102
+ - Loading: Skeleton über dem gesamten Stat-Block
103
+
104
+ ---
105
+
106
+ ## Avatar / Nutzerbilder
107
+
108
+ ### Varianten
109
+
110
+ | Variante | Inhalt |
111
+ |------------|-------------------------------------------------|
112
+ | Bild | Nutzerfoto (immer mit Fallback) |
113
+ | Initials | Fallback: Initialen auf Farbhintergrund |
114
+ | Icon | Generisches User-Icon (wenn kein Name verfügbar)|
115
+
116
+ ### Größen
117
+
118
+ | Größe | Durchmesser | Verwendung |
119
+ |-------|-------------|------------------------------------|
120
+ | `xs` | 24px | In Tabellenzellen, kompakte Listen |
121
+ | `sm` | 32px | Kommentar-Avatare, Chips |
122
+ | `md` | 40px | Standard Avatar |
123
+ | `lg` | 48px | Profil-Header |
124
+ | `xl` | 64px | Profilseite, Detailansicht |
125
+ | `2xl` | 96px | Große Profilseite |
126
+
127
+ ### Regeln
128
+
129
+ - Border-Radius: `radius-full` (rund)
130
+ - Fallback-Initials: 1–2 Buchstaben, konsistente Farb-Zuweisung (z.B. Hash des Namens)
131
+ - Bild: `alt`-Attribut = Nutzername
132
+ - Avatar-Group (mehrere): überlappend, max. 4 + "+N" Anzeige
@@ -0,0 +1,148 @@
1
+ # Pattern: Feedback & Status-Kommunikation
2
+
3
+ ## Überblick
4
+
5
+ | Pattern | Wann einsetzen | Persistent? | Unterbrechend? |
6
+ |---------------|----------------------------------------------------|-------------|----------------|
7
+ | Toast/Snackbar| Kurze Bestätigung, nicht kritisch | Nein (3–5s) | Nein |
8
+ | Alert-Banner | Wichtige Info auf Page-Ebene, kein sofortiges Handeln | Ja (manuell) | Nein |
9
+ | Modal | Bestätigung nötig, kritische Entscheidung | Ja | Ja |
10
+ | Inline-Error | Formularfehler, kontextbezogene Fehler | Ja | Nein |
11
+ | Empty State | Kein Inhalt vorhanden (noch nicht oder nach Filter)| Ja | Nein |
12
+ | Skeleton | Inhalt lädt, Struktur bekannt | Nein | Nein |
13
+ | Spinner | Kurze unbekannte Ladedauer | Nein | Optional |
14
+
15
+ ---
16
+
17
+ ## Toast / Snackbar
18
+
19
+ ### Verwendung
20
+
21
+ Nach erfolgreichen Aktionen (Speichern, Löschen, Versenden) die keine weitere Bestätigung brauchen.
22
+
23
+ ### Aufbau
24
+
25
+ ```
26
+ [Icon] [Message] [Action (optional)] [Close]
27
+ ```
28
+
29
+ ### Regeln
30
+
31
+ - Position: Unten rechts (Desktop), unten zentriert (Mobile)
32
+ - Autohide: 4–5 Sekunden bei Info/Success, Fehler-Toasts manuell schließen
33
+ - Max. 3 gleichzeitig sichtbar – ältere schieben nach oben
34
+ - Varianten: `success`, `error`, `warning`, `info`
35
+ - Klickbare Aktion: max. 1 (z.B. "Rückgängig"), kurzer Text
36
+
37
+ ### Hintergrundfarben
38
+
39
+ | Variante | Hintergrund | Icon-Farbe |
40
+ |-----------|---------------------|---------------------|
41
+ | success | `color-neutral-900` | `color-success-500` |
42
+ | error | `color-error-700` | `color-neutral-0` |
43
+ | warning | `color-warning-500` | `color-neutral-900` |
44
+ | info | `color-neutral-900` | `color-primary-300` |
45
+
46
+ ---
47
+
48
+ ## Alert-Banner
49
+
50
+ ### Verwendung
51
+
52
+ Für wichtige Informationen auf Seiten-Ebene: Systemwarnungen, Hinweise die für alle Nutzer relevant sind, Bestätigungen nach Redirect.
53
+
54
+ ### Aufbau
55
+
56
+ ```
57
+ [Icon] [Titel (optional)] [Beschreibung] [Aktion (optional)] [Close (optional)]
58
+ ```
59
+
60
+ ### Regeln
61
+
62
+ - Oben auf der Seite, direkt unter dem Header
63
+ - Nicht zu viele gleichzeitig – max. 1 kritisches + 1 informationales Banner
64
+ - Varianten: `success`, `error`, `warning`, `info`
65
+ - Schließbar (X-Button) außer bei kritischen Systemmeldungen
66
+
67
+ ---
68
+
69
+ ## Modal / Dialog
70
+
71
+ ### Verwendung
72
+
73
+ - Bestätigungen für irreversible Aktionen (Löschen, Publishen)
74
+ - Komplexere Formulare die aus dem Kontext herausgelöst werden müssen
75
+ - Lightboxes / Medien-Ansichten
76
+
77
+ ### Regeln
78
+
79
+ - Fokus: wird beim Öffnen in das Modal gesetzt (erstes interaktives Element)
80
+ - Focus-Trap: Tab navigiert nur innerhalb des Modals
81
+ - Schließen: ESC-Taste, X-Button, optional Klick außerhalb (nicht bei kritischen Modals)
82
+ - Beim Schließen: Fokus kehrt zum auslösenden Element zurück
83
+ - Backdrop: semi-transparentes Overlay (`rgba(0,0,0,0.5)`)
84
+ - Max-Breite: 480px (small), 640px (default), 800px (large)
85
+ - Mobile: Drawer von unten (full width, 90vh max)
86
+
87
+ ### Bestätigungs-Modals (Danger)
88
+
89
+ ```
90
+ [Titel: "X löschen?"]
91
+ [Erklärung: "Dies kann nicht rückgängig gemacht werden."]
92
+ [Abbrechen] [Löschen]
93
+ Secondary Danger
94
+ ```
95
+
96
+ ---
97
+
98
+ ## Empty State
99
+
100
+ ### Verwendung
101
+
102
+ Wenn ein Listenbereich / Tabelle / Dashboard-Widget keine Inhalte hat – entweder weil noch nichts erstellt wurde oder der aktuelle Filter keine Treffer liefert.
103
+
104
+ ### Aufbau
105
+
106
+ ```
107
+ [Illustration oder Icon]
108
+ [Titel: "Noch keine [Objekte]"]
109
+ [Beschreibung: Was der Nutzer tun kann]
110
+ [Primäraktion: z.B. "Ersten X erstellen"]
111
+ ```
112
+
113
+ ### Regeln
114
+
115
+ - Immer eine mögliche Nächste-Aktion anbieten (wenn möglich)
116
+ - Bei leerem Filter: "Filter zurücksetzen" als Aktion
117
+ - Icon/Illustration: passend zum Kontext, nicht generisch
118
+ - Kein "Keine Daten gefunden" – erkläre WAS fehlt und WAS der User tun kann
119
+
120
+ ---
121
+
122
+ ## Skeleton Loader
123
+
124
+ ### Verwendung
125
+
126
+ Wenn die Struktur des Inhalts bekannt ist und das Laden länger als 300ms dauert.
127
+
128
+ ### Regeln
129
+
130
+ - Zeigt die Form des zukünftigen Inhalts als graue Platzhalter-Blöcke
131
+ - Animierter Shimmer-Effekt (gradient sweep) – aber `prefers-reduced-motion` beachten
132
+ - Für Text: Blöcke in variierender Breite (nicht alle gleich lang)
133
+ - Für Cards: Card-Umriss mit Platzhaltern für Bild, Titel, Text
134
+ - Kein Skeleton länger als 10 Sekunden – danach Error State
135
+
136
+ ---
137
+
138
+ ## Ladezustand (Spinner / Progress)
139
+
140
+ | Typ | Wann |
141
+ |-----------------|---------------------------------------------------|
142
+ | Inline Spinner | Button-Loading, kurze In-Component Aktionen |
143
+ | Page Spinner | Seitenübergreifende Ladeoperationen (selten) |
144
+ | Progress Bar | Upload, Prozesse mit bekannter Dauer |
145
+ | Skeleton | Inhalt lädt, Struktur bekannt |
146
+
147
+ - Page Spinner: Overlay mit Backdrop, zentrierter Spinner – NUR wenn wirklich nötig
148
+ - Spinner-Größen: 16px (inline), 24px (component), 40px (page-level)
@@ -0,0 +1,90 @@
1
+ # Pattern: Formulare
2
+
3
+ ## Grundprinzipien
4
+
5
+ - Ein Formular = eine Aufgabe (kein Mega-Form mit allem auf einmal)
6
+ - Labels immer sichtbar – kein Placeholder als Label-Ersatz
7
+ - Fehler inline, direkt bei dem Feld das betroffen ist
8
+ - Primäraktion am Ende, Abbrechen links davon (oder als Ghost-Button)
9
+
10
+ ## Formular-Aufbau
11
+
12
+ ```
13
+ [Form-Header] ← Optional: Titel + Kurzbeschreibung was der User tun wird
14
+ [Pflichtfeld-Hinweis] ← "* Pflichtfeld" – einmalig, oben
15
+ [Field-Groups] ← Zusammengehörige Felder gruppiert (optional mit Überschrift)
16
+ [Form-Field]
17
+ [Label] * ← <label> mit for-Attribut
18
+ [Helper-Text] ← Optional, kurze Erklärung (max. 1 Satz)
19
+ [Input-Komponente]
20
+ [Error-Message] ← Nur bei Fehler, aria-live="polite"
21
+ [Form-Actions] ← Primär-Button + Abbrechen/Zurück
22
+ ```
23
+
24
+ ## Feldbreiten
25
+
26
+ | Typ | Breite | Beispiel |
27
+ |------------------|--------------------------|-----------------------------------|
28
+ | Voller Block | 100% | Nachricht, Notizen, lange Felder |
29
+ | Halbe Breite | ~50% | Vorname + Nachname nebeneinander |
30
+ | Drittel / Viertel| ~33% / ~25% | PLZ, Hausnummer |
31
+ | Auto | Passt sich Inhalt an | Kurze Codes, Einheiten |
32
+
33
+ Auf Mobile: immer 100% Breite.
34
+
35
+ ## Validierung
36
+
37
+ ### Wann validieren?
38
+
39
+ | Zeitpunkt | Empfehlung |
40
+ |-----------------|-----------------------------------------------------------------|
41
+ | On Submit | Immer – zeigt alle Fehler auf einmal nach dem Absenden |
42
+ | On Blur | Für Format-Validierung (E-Mail, Datum) – nicht für Pflichtfelder|
43
+ | On Input | Nur für Passwort-Stärke oder Zeichenzähler – nicht für Fehler |
44
+
45
+ ### Fehlermeldungen
46
+
47
+ - Spezifisch: "Bitte gültige E-Mail-Adresse eingeben (z.B. name@firma.de)"
48
+ - Nicht: "Ungültige Eingabe" oder "Fehler"
49
+ - Auf Submit: Fokus auf erstes Fehler-Feld springen (scroll + focus)
50
+ - Globale Fehler (Server-Fehler): Alert-Banner über dem Formular
51
+
52
+ ## Mehrstufige Formulare (Wizard)
53
+
54
+ - Fortschrittsanzeige: Step-Indicator oben (1 von 3, 2 von 3 ...)
55
+ - Jeder Step: eigene Validierung vor dem Weiter-Klick
56
+ - Navigation: Zurück-Button behält Eingaben aus vorherigen Steps
57
+ - Letzter Step: Zusammenfassung vor dem finalen Absenden (optional)
58
+
59
+ ## Spezielle Felder
60
+
61
+ ### Passwort-Felder
62
+
63
+ - Immer Toggle für Sichtbarkeit (Eye-Icon rechts im Feld)
64
+ - Anforderungen: sichtbar als Checkliste (nicht erst nach Fehler)
65
+ - Stärken-Indikator: Progressbar, nicht nur Text
66
+
67
+ ### File Upload
68
+
69
+ - Drag & Drop + Klick-Alternative
70
+ - Erlaubte Dateitypen und Maximalgröße anzeigen (nicht erst als Fehler)
71
+ - Hochgeladene Dateien: Dateiname + Lösch-Button sichtbar
72
+ - Fortschrittsbalken bei größeren Uploads
73
+
74
+ ### Datum / Uhrzeit
75
+
76
+ - DatePicker-Komponente, kein manuelles Texteingabe-Datum-Format
77
+ - Wenn Range: Start + Ende visuell als zusammengehörig kennzeichnen
78
+ - Vergangene/gesperrte Daten: im Picker disabled, nicht nur als Validierungsfehler
79
+
80
+ ## Formular-Aktionen
81
+
82
+ ```
83
+ [Abbrechen/Zurück] [Primäraktion]
84
+ Ghost-Button Primary-Button
85
+ ```
86
+
87
+ - Abbrechen links, Primäraktion rechts (westliche Konvention)
88
+ - Abbrechen: fragt nach ungespeicherten Änderungen (Dialog) – wenn Daten verloren gehen
89
+ - Primär-Button: Loading-Zustand beim Absenden, kein Doppelklick möglich
90
+ - Destruktive Aktionen (Löschen, Unwiderrufliches): Danger-Button + Bestätigungsdialog
@@ -0,0 +1,100 @@
1
+ # Pattern: Navigation
2
+
3
+ ## Globale Navigation (Header / Top-Nav)
4
+
5
+ ### Aufbau
6
+
7
+ ```
8
+ [Header-Wrapper] ← sticky, z-index über Content
9
+ [Logo / Brand] ← Links, immer sichtbar, klickbar = Home
10
+ [Primary Nav] ← Horizontale Links (Desktop) oder Hamburger (Mobile)
11
+ [Secondary Actions] ← Suche, Notifications, User-Avatar/Menu
12
+ ```
13
+
14
+ ### Regeln
15
+
16
+ - Aktiver Navigationspunkt: `color-primary-500` Unterstrich oder Hintergrund-Tint
17
+ - Max. 5–7 Hauptnavigationspunkte – mehr → Mega-Menu oder Sidebar
18
+ - Mobile: Hamburger-Icon (3 Linien), öffnet Drawer von links oder oben
19
+ - Skip-Navigation-Link: erster Element im DOM (für Keyboard/Screen Reader)
20
+ - Sticky Header: `shadow-sticky` beim Scrollen aktivieren
21
+
22
+ ### Aktiver Zustand
23
+
24
+ | Element | Visual |
25
+ |-----------------|-------------------------------------------------|
26
+ | Link | `color-primary-600` + Unterstrichen oder Tint |
27
+ | Icon-Tab | Gefülltes Icon + `color-primary-500` Label |
28
+ | Sidebar-Item | `color-bg-muted` Hintergrund + `color-primary-600` Text |
29
+
30
+ ---
31
+
32
+ ## Sidebar-Navigation
33
+
34
+ ### Verwendung
35
+
36
+ Für Anwendungen mit vielen Bereichen oder komplexer Hierarchie.
37
+
38
+ ### Aufbau
39
+
40
+ ```
41
+ [Sidebar-Wrapper] ← Feste Breite: 240–280px; collapsible auf 64px
42
+ [App Logo / Name]
43
+ [Navigation Groups]
44
+ [Group Label] ← Optional, Uppercase, text-xs, color-text-secondary
45
+ [Nav-Item] ← Icon + Label, aktiver Zustand
46
+ [Nav-Item (mit Sub-Items)] ← Aufklappbar (Accordion)
47
+ [Bottom-Section] ← Settings, Logout, User-Info
48
+ ```
49
+
50
+ ### Regeln
51
+
52
+ - Collapsible: Im Collapsed-Zustand nur Icons mit Tooltip
53
+ - Sub-Navigation: Max. 1 Ebene Tiefe in der Sidebar
54
+ - Scrollbar: Nur wenn mehr Items als sichtbare Höhe (overflow-y: auto)
55
+
56
+ ---
57
+
58
+ ## Breadcrumb
59
+
60
+ ### Verwendung
61
+
62
+ Bei tiefen Hierarchien (ab 3 Ebenen). Nicht für flache Navigation.
63
+
64
+ ### Aufbau
65
+
66
+ ```
67
+ [Home] / [Kategorie] / [Aktuelle Seite]
68
+ ```
69
+
70
+ ### Regeln
71
+
72
+ - Trennzeichen: `/` oder `›` – konsistent
73
+ - Aktuelle Seite: Nicht klickbar, `color-text-secondary`
74
+ - Eltern-Seiten: Klickbar, `color-primary-600`
75
+ - Mobil: Nur 1–2 Levels anzeigen + "..." für ausgeblendete
76
+
77
+ ---
78
+
79
+ ## Tab-Navigation
80
+
81
+ ### Verwendung
82
+
83
+ Für die Navigation zwischen gleichwertigen Content-Bereichen innerhalb einer Seite oder eines Panels.
84
+
85
+ ### Regeln
86
+
87
+ - Max. 5–6 Tabs sichtbar – bei mehr: scrollbar oder Overflow-Dropdown
88
+ - Aktiver Tab: Unterstrich (`color-primary-500`, 2px) + `color-primary-600` Text
89
+ - Tab-Panel: `role="tabpanel"`, Tab: `role="tab"`, Wrapper: `role="tablist"`
90
+ - Keyboard: Pfeiltasten wechseln zwischen Tabs, Enter/Space aktiviert
91
+
92
+ ---
93
+
94
+ ## Back-Navigation
95
+
96
+ ### Regeln
97
+
98
+ - "<- Zurück" nur wenn nicht aus der Hauptnavigation erreichbar
99
+ - Immer expliziter Linktext, nicht nur ein Zurück-Pfeil (Screen Reader!)
100
+ - Navigiert zur vorherigen Seite (nicht Browser-Back, da ggf. abweichender State)
@@ -0,0 +1,45 @@
1
+ # Screen-Referenzen
2
+
3
+ Hier kommen Figma-Exports oder Screenshots deines Design Systems als visuelle Referenz für die Agents.
4
+
5
+ ## Ordner-Struktur
6
+
7
+ Lege Screens nach User-Flows / Bereichen in Unterordnern ab:
8
+
9
+ ```
10
+ screens/
11
+ onboarding/
12
+ 01-landing.png
13
+ 02-registration.png
14
+ 03-email-verification.png
15
+ dashboard/
16
+ 01-overview.png
17
+ 02-empty-state.png
18
+ [feature-name]/
19
+ 01-list.png
20
+ 02-detail.png
21
+ 03-create-form.png
22
+ ```
23
+
24
+ ## Benennungs-Konvention
25
+
26
+ - Numerisches Präfix für die Reihenfolge: `01-`, `02-` ...
27
+ - Beschreibender Name: was ist auf dem Screen zu sehen?
28
+ - Kein CamelCase, kein Leerzeichen: `kebab-case.png`
29
+
30
+ ## Dateiformat
31
+
32
+ - **PNG bevorzugt** – verlustfreie Qualität für UI-Details
33
+ - **JPG** – akzeptabel für bildlastige Screens
34
+ - Mindestauflösung: 1440px Breite für Desktop-Screens
35
+ - Mobile-Screens: 375px oder 390px Breite
36
+
37
+ ## Was die Agents damit machen
38
+
39
+ - `/red:proto-ux` liest die Screens als visuelle Referenz für User Flows und Komponentenstruktur
40
+ - `frontend-developer` nutzt Screens als Implementierungs-Referenz
41
+ - `ux-reviewer` vergleicht implementierte Screens mit den Referenz-Screens
42
+
43
+ ## Hinweis
44
+
45
+ Screens sind **Referenz**, kein Pixel-Perfect-Vorgabe. Die Agents sollen die Struktur, Hierarchie und das Layout verstehen – nicht jeden Pixel nachbauen. Abweichungen in der technischen Umsetzung sind okay, solange sie dem Design-Prinzip folgen.