feat(auth): ManaAuthUI-Migration — vollständige Auth-Reise nativ

Phase 4a aus dem Native-Auth-Vollausbau-Plan.

- project.yml: ManaSwiftUI/ManaAuthUI als Package-Dep
- Sources/Core/Theme/CardsBrand.swift: Bridge zwischen CardsTheme
  (forest-HSL) und ManaBrandConfig — wird im RootView via
  .manaBrand(...) gesetzt
- Sources/App/RootView.swift: alte LoginView() durch ManaLoginView
  ersetzt, Sheets für SignUp/ForgotPassword/ResetPassword. Universal-
  Link-Handler erweitert um /auth/reset?token=… → ManaResetPasswordView
- Sources/Features/Account/LoginView.swift: gelöscht — komplett durch
  ManaLoginView aus ManaAuthUI abgedeckt
- Sources/Features/Account/AccountView.swift: Email-ändern + PW-ändern
  + Account-löschen Sheets (App-Store-Guideline 5.1.1(v) erfüllt)

BUILD SUCCEEDED gegen mana-swift-core@v1.1.0 und mana-swift-ui@v0.1.0.

Account-Sheets (Change/Delete) funktionieren erst nach Phase-3-
Server-PR (Bearer-Plugin in mana-auth) — UI ist fertig, Wire ist
fertig, Server zieht nach.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Till JS 2026-05-13 19:26:12 +02:00
parent 710ede6acd
commit da6679770b
5 changed files with 173 additions and 99 deletions

View file

@ -0,0 +1,25 @@
import ManaAuthUI
/// Brücke zwischen Cardeckys `CardsTheme` (HSL-Forest) und der
/// `ManaBrandConfig` des `ManaAuthUI`-Paketes. Wird im RootView
/// einmal als Environment-Wert gesetzt.
///
/// Wenn ManaTokens (mana-swift-core) später Theme-Variants liefert,
/// kann diese Datei durch `ManaBrandConfig.forest(appName: "Cardecky", )`
/// ersetzt werden siehe MANA_SWIFT.md Phase ε.
enum CardsBrand {
static let manaBrand = ManaBrandConfig(
appName: "Cardecky",
tagline: "Karteikarten des Vereins mana e.V.",
logoSymbol: "rectangle.stack.fill",
background: CardsTheme.background,
foreground: CardsTheme.foreground,
surface: CardsTheme.surface,
mutedForeground: CardsTheme.mutedForeground,
border: CardsTheme.border,
primary: CardsTheme.primary,
primaryForeground: CardsTheme.primaryForeground,
error: CardsTheme.error,
success: CardsTheme.success
)
}