--- type: Frontend Guideline status: APPROVED owner: πŸ–ŒοΈ UI/UX Designer reviewed_by: 🎨 Frontend Expert last_update: 2026-04-03 related: - docs/06_Frontend/Navigation_V3_Screen-Baum_und_Back-Stack.md - docs/04_Agents/Roadmaps/UIUX_Roadmap.md --- # Entscheidungsrichtlinie β€” Editier-Formulare Ziel: Klare, implementierbare Regeln, wann wir ein Edit als AlertDialog, als dedizierten Fullscreen oder als Sliding Panel (Modal Bottom/Side Sheet) umsetzen. Grundlage: Navigation V3, High‑Density Desktop UX, Offline‑First. Leitsatz: Kontext bewahren, kognitive Last minimieren, sichere Eingaben (Undo/Cancel) bevorzugen. --- ## TL;DR β€” Entscheidungsmatrix - AlertDialog (modal, klein) - Felder: ≀ 3 (einfache Felder: Text, Toggle, Single Select) - Keine abhΓ€ngigen Validierungen/Async‑Laden - Sofortige Aktion, geringe Tragweite, seltene Nutzung - Dauer des Vorgangs < 20 s - Back‑Stack: kein Eintrag (Schließen kehrt zum Ursprungs‑Screen) - Sliding Panel (Side/Bottom Sheet) - Felder: 3–8, mittlere KomplexitΓ€t, evtl. Sektionen - Kontext muss sichtbar bleiben (Liste/Detail im Hintergrund relevant) - Leichte AbhΓ€ngigkeiten erlaubt (z. B. abhΓ€ngige Selects), klare Inline‑Validierung - Dauer 20–60 s - Back‑Stack: kein Eintrag; Reopen ΓΌber denselben Trigger - Fullscreen Edit (eigener Screen) - Felder: > 8 oder mehrere Sektionen/Steps - Starke AbhΓ€ngigkeiten, Validierungen, asynchrone Daten (z. B. Lookup Reiter/Pferd) - Kritische Aktion mit grâßerer Tragweite (z. B. StammdatenΓ€nderung) - BenΓΆtigt volle Tastatur‑Fokusstrecke, Hotkeys, Review/Preview - Dauer > 60 s - Back‑Stack: eigener Eintrag; ZurΓΌck fΓΌhrt sicher zurΓΌck, Unsaved‑Changes‑Guard aktiv Hinweis: Auf Desktop bevorzugen wir Side Sheet (rechts) als β€žKontext‑Erhalt bei mittlerer KomplexitΓ€tβ€œ. --- ## Do/Don’t (Auszug) - Don’t: Mehr als 3 Eingabefelder in AlertDialogs stapeln β†’ fΓΌhrt zu Scrollen/Übersehen. - Do: Kurze BestΓ€tigungen/Umbenennen/Flag toggeln als Dialog lΓΆsen. - Don’t: Async‑Suchfelder im Dialog (z. B. Reiter‑Lookup) β†’ Side Sheet oder Fullscreen. - Do: Unsaved‑Changes vor Navigation abfangen (Confirm‑Dialog, kein Stack‑Eintrag fΓΌr Modal/Sheet; V3‑Regel). --- ## Beispiel A β€” Reiter bearbeiten (Side Sheet empfohlen) Kontext: Edit von Stammdaten, typ. 4–7 Felder (Name, Lizenzklasse, Verein, Notizen, aktiv). Liste/Detail im Blick behalten (Suche, Auswahl vergleichen). ASCII‑Wireframe (Desktop, Right Side Sheet ~420–520 px): ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ AppContent (z. B. Reiter‑Liste) β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ Side Sheet ─────────────┐ β”‚ Suche [__________] Filter [v] β–’ βœ• β”‚β”‚ Reiter bearbeiten βœ• β”‚ │───────────────────────────────────────────────────────────────────────────────────────││──────────────────────────────────────│ β”‚ β–Έ Mayer, Anna | Lizenz B | Verein X β”‚β”‚ Name [ Anna Mayer ] β”‚ β”‚ β–Έ KΓΆnig, Tom | Lizenz A | Verein Y β”‚β”‚ Lizenzklasse [ A v ] β”‚ β”‚ β–Έ … β”‚β”‚ Verein [ Suche… πŸ”Ž ] β”‚ β”‚ β”‚β”‚ Aktiv [ βœ“ ] β”‚ β”‚ β”‚β”‚ Notizen [ ............. ] β”‚ β”‚ β”‚β”‚ β”‚ β”‚ β”‚β”‚ ← Abbrechen Speichern β†’ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` Interaktion: - Γ–ffnen: Button β€žBearbeitenβ€œ in Zeile/Karte β†’ Side Sheet schiebt von rechts ein. - Validierung inline; Verein‑Lookup als Such‑DropDown (debounced, Offline‑Cache). - Schließen: ESC/βœ•/Abbrechen; bei Γ„nderungen Confirm‑Dialog (Unsaved‑Changes‑Guard). --- ## Beispiel B β€” Pferd bearbeiten (Fullscreen empfohlen) Kontext: Mehr Felder und AbhΓ€ngigkeiten (Name, Jahrgang, Geschlecht, Rasse, Besitzer/Verein, Registrier‑Nrn., Notizen). Teilweise Lookups, ggf. Bild. ASCII‑Wireframe (Dedicated Screen): ``` TopBar: ← Pferd bearbeiten [Abbrechen] [Speichern] Breadcrumb: Reiter & Pferde > Pferd.Detail > Edit β”Œβ”€ MeldestelleCard: Stammdaten ───────────────────────────────────────────────────────┐ β”‚ Name [ ....................... ] Jahrgang [ 20__ ] Geschlecht [v] β”‚ β”‚ Rasse [ ....................... ] Farbe [ ..... ] β”‚ β”‚ Registrier‑Nr. [ ....................... ] Chip‑Nr. [ ..... ] β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”Œβ”€ MeldestelleCard: Zuordnung ────────────────────────────────────────────────────────┐ β”‚ Besitzer [ Suche Person/Verein πŸ”Ž ] Verein [ Suche Verein πŸ”Ž ] β”‚ β”‚ Lizenzzuordnung [ None v ] (Info‑Badge zu Regeln) β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”Œβ”€ Notizen ────────────────────────────────────────────────────────────────────────────┐ β”‚ [ Mehrzeiliges Textfeld ………………………………………… ] β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` Interaktion: - Eigener Screen mit vollem Tastatur‑Support, Fokus‑Reihenfolge, Hotkeys (Ctrl+S speichert). - Unsaved‑Changes‑Guard auf Back/Navi, Validierung vor Speichern, Fehler an Feldern. --- ## Komponenten & States (fΓΌr Frontend) - Reusable: `MeldestelleCard`, `SectionHeader`, `FormRow`, `PrimaryButton`, `SecondaryButton`, `StatusBadge`. - Validation: Inline (per Field), Summary oben optional; Disabled Save wenn kritisch. - Loading: Per‑Field Spinner bei Lookups; Gesamtscreen nie blockieren. - Accessibility: Tab‑Order, sichtbare Fokus‑Ringe, Labels neben/ΓΌber Feldern (Dichte abhΓ€ngig). --- ## Navigation & Back‑Stack (V3‑KonformitΓ€t) - Dialog/Sheet: Kein eigener Stack‑Eintrag; Schließen fΓΌhrt zum Ursprungs‑Screen zurΓΌck. - Fullscreen: Eigener Stack‑Eintrag. Deep‑Link baut synthetische Eltern auf (siehe V3). - Vor Navigation prΓΌfen: Unsaved‑Changes β†’ Confirm‑Dialog. --- ## Entscheidung als Regel (pseudocode) ``` if fieldCount <= 3 and complexity == low and noAsyncLookups: use AlertDialog elif 3 < fieldCount <= 8 and complexity in {low, medium} and contextRelevant: use SideSheet (preferred on Desktop) else: use FullscreenEdit ``` --- ## βœ… Freigabe & Verbindlichkeit | Kriterium | Entscheidung | |--------------------|---------------------------------------------------------------------------------------------------------------------------------------| | **Status** | **APPROVED** β€” verbindliche Design-Richtlinie ab 2026-04-03 | | **Reviewed by** | 🎨 Frontend Expert (bestΓ€tigt durch Implementierung von `ReiterProfilEditDialog` und `PferdProfilEditDialog` gemÀß Side-Sheet-Muster) | | **GΓΌltig fΓΌr** | Alle Edit-Formulare im Meldestelle-Desktop-MVP | | **Ausnahmen** | MΓΌssen explizit im jeweiligen Feature-Ticket begrΓΌndet und dokumentiert werden | | **NΓ€chste Review** | Bei EinfΓΌhrung der Web-App / PWA (andere Interaktionsparadigmen mΓΆglich) | ### Anwendung auf bestehende Screens (Mapping) | Screen / Entity | Felder (ca.) | Async-Lookup | Empfehlung | Umgesetzt | |-------------------|--------------|---------------|-------------|------------------------------------------------| | Veranstalter Edit | 4–5 | Nein | Side Sheet | βœ… (Dialog) | | Reiter Edit | 5–7 | Ja (Verein) | Side Sheet | βœ… | | Pferd Edit | 8–10 | Ja (Besitzer) | Fullscreen | βœ… (Dialog β€” Migration zu Fullscreen empfohlen) | | Verein Edit | 3–4 | Nein | Side Sheet | ⬜ offen | | FunktionΓ€r Edit | 3–4 | Nein | Side Sheet | ⬜ offen | | Bewerb Edit | 6–8 | Ja | Side Sheet | ⬜ offen | | Turnier Edit | 4–5 | Nein | Side Sheet | ⬜ offen | | Abteilung Edit | 3–4 | Nein | AlertDialog | ⬜ offen | > **Hinweis Pferd:** Der bestehende `PferdProfilEditDialog` ΓΌberschreitet mit 8–10 Feldern und Async-Lookups die > Dialog-Grenze. Migration zu Fullscreen-Edit ist fΓΌr Sprint C-1 vorgesehen.