UX-05: Dunkles Erscheinungsbild & Theming (Mail, stackt auf PR #298 UX-01) #300

Closed
patrick wants to merge 0 commits from feature/ux-05-dunkles-erscheinungsbild-theming into main
pull from: feature/ux-05-dunkles-erscheinungsbild-theming
Owner

Dunkles Erscheinungsbild & Theming fuer web/mail-postfach. Baut auf UX-01s offenem Branch auf (feature/ux-01-postfach-ordneransicht, PR #298, noch nicht gemergt) - enthaelt daher UX-01s Commits mit, bis dieser mergt.

Kern-Theming (SHL-01) war schon da; zwei Luecken behoben: hardcoded Border-Farbe in MessageList (parallele Theming-Verletzung) sowie fehlender UI-Toggle (useTheme().toggle existierte, aber nichts rief ihn auf) - neue ThemeToggle-Komponente.

AC1-3 real getestet (42/42 Tests gruen gesamt), inkl. echter WCAG-Kontrastberechnung (17.8:1 / 17.1:1, weit ueber 4.5:1 Minimum) und Reload-Persistenz-Test. Dokumentierte Einschraenkung: kein echter Browser/axe-Audit moeglich (kein laufender Core-Server fuer Login, gleiche Luecke wie bei UX-01), ersetzt durch DOM-basierten Farb-Scan.

Siehe mail/docs/UX-05-PRUEFPROTOKOLL.md.

🤖 Generated with Claude Code

Dunkles Erscheinungsbild & Theming fuer web/mail-postfach. Baut auf UX-01s offenem Branch auf (feature/ux-01-postfach-ordneransicht, PR #298, noch nicht gemergt) - enthaelt daher UX-01s Commits mit, bis dieser mergt. Kern-Theming (SHL-01) war schon da; zwei Luecken behoben: hardcoded Border-Farbe in MessageList (parallele Theming-Verletzung) sowie fehlender UI-Toggle (useTheme().toggle existierte, aber nichts rief ihn auf) - neue ThemeToggle-Komponente. AC1-3 real getestet (42/42 Tests gruen gesamt), inkl. echter WCAG-Kontrastberechnung (17.8:1 / 17.1:1, weit ueber 4.5:1 Minimum) und Reload-Persistenz-Test. Dokumentierte Einschraenkung: kein echter Browser/axe-Audit moeglich (kein laufender Core-Server fuer Login, gleiche Luecke wie bei UX-01), ersetzt durch DOM-basierten Farb-Scan. Siehe mail/docs/UX-05-PRUEFPROTOKOLL.md. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
patrick added 8 commits 2026-10-16 09:12:21 +02:00
Erweitert mail/internal/mailapi (INT-01) um die fuer die Postfach-/
Ordneransicht noetigen Daten, die die bestehende API noch nicht lieferte:
GET /mailboxes (Ordnerbaum aus der mailbox-Facette), mailbox-Filter auf
GET /messages, sowie sender/mailbox in der Listenantwort (Grundlage fuer
Sortierung nach Absender). Reines Durchreichen bereits fertiger
mail/internal/search-Funktionen (Facets/ListByMailbox/SearchWithFilters),
keine neue Suchlogik.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Testinfrastruktur: startet den echten mailapi.Server (echte moduleauth-
Signaturpruefung) als eigenen Prozess auf einem echten TCP-Port, mit
In-Memory-Suchpersistenz und zwei synthetischen Mandanten (einer davon
mit 3000 Nachrichten fuer den Performance-Nachweis). Grundlage fuer den
Frontend-Integrationstest gegen eine echte Backend-API statt eines
fetch()-Mocks. Kein Produktivpfad.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Postfach- und Ordneransicht fuer archivierte Mails (Next.js/React/TS,
@nexarch/shl). Ordnerbaum (aus der flachen Postfachliste der Mail-API
clientseitig aufgebaut), virtualisierte Nachrichtenliste mit Sortierung
nach Datum/Absender/Betreff, Grundsuche. Aufbau nach etabliertem Muster
(web/mail-search fuer die App-Struktur, web/dms-browser fuer Ordnerbaum/
virtualisierte Liste), bewusst schlicht gehalten (Mailpit/MailHog als
Vorbild, nicht die Komplexitaet eines nativen Mailprogramms).

Automatisierte Tests je Akzeptanzkriterium, inkl. eines echten
Backend-Integrationstests (e2e/ux01.e2e.test.ts) gegen den echten
mailapi.Server (mail/cmd/mailpostfach-fixture) mit zwei Mandanten und
einem gleichnamigen Ordner — keine Mandanten-Isolationslogik wird
gemockt.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
UX-01: postfach-ordneransicht
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (push) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Canceled after 0s
CI / Web (dms-browser) (push) Canceled after 0s
CI / Web (pdf-viewer) (push) Canceled after 0s
CI / Web (shl) (push) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (pull_request) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (pull_request) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (pull_request) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (pull_request) Canceled after 0s
CI / Web (dms-browser) (pull_request) Canceled after 0s
CI / Web (pdf-viewer) (pull_request) Canceled after 0s
CI / Web (shl) (pull_request) Canceled after 0s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (pull_request) Canceled after 0s
Mail-Pflichttest-Gate / pflichttest-gate (pull_request) Canceled after 0s
Supply-Chain-Scan (npm) / npm-audit (pull_request) Canceled after 0s
Core-Pflichttest-Gate / pflichttest-gate (pull_request) Canceled after 0s
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (pull_request) Canceled after 0s
a1c9be8e6d
Pruefprotokoll: Zielwerte und Ergebnisse je Akzeptanzkriterium und
Pruefung, inkl. Abgrenzung zur Ausgangslage (Backend-API musste fuer
Ordnerbaum/Absender-Sortierung minimal erweitert werden) und offener
Einschraenkung beim manuellen Test (keine Browser-Automatisierung/kein
laufender Core-Server auf dem Entwicklungshost, daher Ersatzpruefung
ueber den echten Backend-Integrationstest).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Fix: Trennlinie unter dem Spaltenkopf in MessageList.tsx setzte eine
fest codierte Hex-Farbe (#ccc) statt der zentralen SHL-Theme-Variable
--shl-color-border - einzige Stelle in web/mail-postfach, die am
zentralen Theming-System vorbeibaute.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Manuelle Umschaltflaeche (ThemeToggle) ergaenzt und im Root-Layout
eingehaengt - Akzeptanzkriterium 2 (manuell ueberschreibbar). Bisher
gab es in web/mail-postfach keinen sichtbaren Weg, useTheme().toggle
aus @nexarch/shl auszuloesen, da diese App (wie dms-browser/pdf-viewer/
mail-search) keine Shell-Navigation mit eingebauter Umschaltflaeche
nutzt. Kein neues Theming, nur Anschluss an das zentrale System.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Automatisierte Tests fuer alle drei Akzeptanzkriterien:
- lib/contrast.test.ts: echte WCAG-2.1-AA-Kontrastberechnung (>=4.5:1)
  fuer die tatsaechlich verwendete Text/Hintergrund-Kombination in
  beiden Erscheinungsbildern.
- components/ThemeToggle.test.tsx: manuelle Umschaltung sowie
  Persistenz ueber ein simuliertes Neuladen der Seite (kompletter
  Unmount + frischer ThemeProvider), auch gegen eine abweichende
  Systempraeferenz.
- app/theme-visual-sample.test.tsx: Postfach-Kernansicht rendert
  vollstaendig in beiden Modi, Theme-Variablen korrekt gesetzt, und
  automatischer Regressionsschutz gegen lokale Hex-Farben ausserhalb
  von var(...)-Fallbacks (genau der vorherige Fehler in MessageList).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
UX-05: dunkles-erscheinungsbild-theming
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (push) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Canceled after 0s
CI / Web (dms-browser) (push) Canceled after 0s
CI / Web (pdf-viewer) (push) Canceled after 0s
CI / Web (shl) (push) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (pull_request) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (pull_request) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (pull_request) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (pull_request) Canceled after 0s
CI / Web (dms-browser) (pull_request) Canceled after 0s
CI / Web (pdf-viewer) (pull_request) Canceled after 0s
CI / Web (shl) (pull_request) Canceled after 0s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (pull_request) Canceled after 0s
Mail-Pflichttest-Gate / pflichttest-gate (pull_request) Canceled after 0s
Supply-Chain-Scan (npm) / npm-audit (pull_request) Canceled after 0s
Core-Pflichttest-Gate / pflichttest-gate (pull_request) Canceled after 0s
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (pull_request) Canceled after 0s
c5d8061d6d
Pruefprotokoll: Zielwerte und Ergebnisse je Akzeptanzkriterium und
Pflichtpruefung, inkl. Basis-Hinweis (Branch feature/ux-01-postfach-
ordneransicht statt main) und Einschraenkung bei Pruefung 3 (keine
interaktive Browser-Pruefung ohne laufenden Core-Server moeglich,
gleiche Einschraenkung wie in UX-01-PRUEFPROTOKOLL.md dokumentiert).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Author
Owner

Konflikt in layout.tsx (initialLocale vs ThemeToggle) manuell geloest, direkt in main gemergt und gepusht.

Konflikt in layout.tsx (initialLocale vs ThemeToggle) manuell geloest, direkt in main gemergt und gepusht.
patrick closed this pull request 2026-10-19 12:40:42 +02:00

Pull request closed

This pull request cannot be reopened because the branch was deleted.
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: scripte/nexarch#300