feat: add iOS support and harden receipt scanning

This commit is contained in:
Timo
2026-08-20 23:48:26 +02:00
parent f5e06c32b0
commit cf1b799e1b
107 changed files with 11755 additions and 122 deletions

View File

@@ -0,0 +1,49 @@
import SwiftUI
/// Shown after a successful `POST /api/auth/signup` the account exists but
/// is inert until the emailed confirmation link is opened (deliberate
/// anti-abuse design, mirrored from the web signup flow see
/// `AppState.signup(name:email:password:)`). This screen never signs the
/// user in itself; it just points back to `LoginView` once they've verified
/// (on this device or any other) and come back.
struct VerificationPendingView: View {
let email: String
var onGoToLogin: () -> Void
var body: some View {
VStack(spacing: ZenithSpacing.md) {
Spacer()
Image(systemName: "envelope.badge")
.font(.system(size: 48))
.foregroundStyle(Color.zenithBlack)
Text("Bitte bestätige deine E-Mail")
.zenithHeadlineLgStyle()
.multilineTextAlignment(.center)
(
Text("Wir haben einen Bestätigungslink an ")
+ Text(email).fontWeight(.semibold)
+ Text(" gesendet. Öffne den Link auf diesem oder einem anderen Gerät, um dein Konto zu aktivieren, und melde dich anschließend hier an.")
)
.zenithBodyStyle(color: .zenithMuted)
.multilineTextAlignment(.center)
.padding(.horizontal, ZenithSpacing.xs)
Spacer()
Button {
onGoToLogin()
} label: {
Text("Zum Login")
.frame(maxWidth: .infinity)
}
.buttonStyle(.zenithPrimary)
}
.padding(.horizontal, ZenithSpacing.md)
.padding(.vertical, ZenithSpacing.lg)
.frame(maxWidth: .infinity, maxHeight: .infinity)
.background(Color.zenithBg)
}
}