diff --git a/packages/shared-auth-ui/src/pages/LoginPage.svelte b/packages/shared-auth-ui/src/pages/LoginPage.svelte index ee0ebb7c4..31d3afda0 100644 --- a/packages/shared-auth-ui/src/pages/LoginPage.svelte +++ b/packages/shared-auth-ui/src/pages/LoginPage.svelte @@ -386,7 +386,11 @@ - + {t.skipToForm} @@ -395,18 +399,18 @@ {#if isDark} @@ -417,20 +421,21 @@ {#if headerControls} - + {@render headerControls()} {/if} - + - + {#if showSuccess} @@ -439,17 +444,30 @@ {/if} - {appName} + {appName} - - + + {#if showTwoFactor} - - Zwei-Faktor-Authentifizierung - + + + Zwei-Faktor-Authentifizierung + + {useBackupCode ? 'Gib einen Backup-Code ein' : 'Gib den Code aus deiner Authenticator-App ein'} @@ -457,7 +475,10 @@ {#if error} - + {error} @@ -469,7 +490,7 @@ handleTwoFactorVerify(); }} > - + {#if !useBackupCode} - + {loading ? 'Prüfe...' : 'Bestätigen'} @@ -510,12 +540,8 @@ { useBackupCode = !useBackupCode; twoFactorCode = ''; @@ -527,12 +553,8 @@ { showTwoFactor = false; twoFactorCode = ''; @@ -544,12 +566,16 @@ {:else} {#if showVerifiedBanner} - + {t.emailVerified} (showVerifiedBanner = false)} aria-label="Close" > @@ -558,9 +584,19 @@ {/if} - - {t.title} - {t.subtitle} + + + {t.title} + + + {t.subtitle} + {#if passkeyAvailable && onSignInWithPasskey} @@ -568,8 +604,9 @@ type="button" onclick={handlePasskeySignIn} disabled={loading || showSuccess} - class="passkey-button" + class="w-full h-14 border-2 rounded-xl font-medium flex items-center justify-center gap-2 cursor-pointer transition-opacity bg-transparent hover:opacity-85 disabled:opacity-50 disabled:cursor-not-allowed" style:border-color={primaryColor} + style:color={isDark ? 'rgba(255,255,255,0.9)' : 'rgba(0,0,0,0.9)'} > Passkey - - {t.orDivider} + + {t.orDivider} {/if} {#if verificationEmailSent} - + {t.verificationEmailSent} (verificationEmailSent = false)} aria-label="Close" > @@ -607,13 +652,17 @@ {/if} {#if isLockedOut} - - + + - - Konto vorübergehend gesperrt - + + Konto vorübergehend gesperrt + Zu viele fehlgeschlagene Anmeldeversuche. {#if rateLimitCountdown > 0} Erneut versuchen in {formatCountdown(rateLimitCountdown)} @@ -623,7 +672,7 @@ goto(forgotPasswordPath)} style:color={primaryColor} > @@ -632,14 +681,19 @@ {:else if error} - + - + {error} {#if showEmailNotVerified && onResendVerification} {/if} {#if rateLimitCountdown > 0} - + Erneut versuchen in {formatCountdown(rateLimitCountdown)} {/if} @@ -664,7 +718,7 @@ aria-busy={loading} > - + {t.emailPlaceholder} - + {t.passwordPlaceholder} - + (showPassword = !showPassword)} - class="password-toggle" + class="absolute right-0 top-0 h-full w-12 flex items-center justify-center bg-transparent border-none cursor-pointer transition-opacity hover:opacity-80" + style:color={isDark ? 'rgba(255,255,255,0.5)' : 'rgba(0,0,0,0.4)'} aria-label={showPassword ? t.hidePassword : t.showPassword} > {#if showPassword} @@ -714,8 +785,11 @@ - - + + goto(forgotPasswordPath)} - class="forgot-link" + class="bg-transparent border-none cursor-pointer font-medium p-1 hover:opacity-70" style:color={primaryColor} > {t.forgotPassword} @@ -737,9 +811,10 @@ 0} - class="submit-button" + class="w-full h-14 border-2 rounded-xl font-medium flex items-center justify-center gap-2 cursor-pointer transition-opacity hover:opacity-85 disabled:opacity-50 disabled:cursor-not-allowed" style:background-color={showSuccess ? '#22c55e' : primaryColor + '60'} style:border-color={showSuccess ? '#22c55e' : primaryColor} + style:color={isDark ? '#fff' : '#000'} > {#if loading} + Login-Link an {email} gesendet! (magicLinkSent = false)} aria-label="Close" > @@ -782,7 +861,7 @@ type="button" onclick={handleSendMagicLink} disabled={sendingMagicLink || !email} - class="magic-link-button" + class="w-full bg-transparent border-none cursor-pointer font-medium text-sm p-3 text-center transition-opacity hover:opacity-70 disabled:opacity-40 disabled:cursor-not-allowed" style:color={primaryColor} > {sendingMagicLink ? 'Wird gesendet...' : 'Login-Link per E-Mail senden'} @@ -790,9 +869,17 @@ {/if} {/if} - + {t.noAccount} - goto(registerPath)} style:color={primaryColor}> + goto(registerPath)} + style:color={primaryColor} + > {t.createAccount} @@ -802,13 +889,15 @@ {#if appSlider} -
+
{useBackupCode ? 'Gib einen Backup-Code ein' : 'Gib den Code aus deiner Authenticator-App ein'} @@ -457,7 +475,10 @@
{error}
{t.emailVerified}
{t.subtitle}
+ {t.subtitle} +
{t.verificationEmailSent}
Konto vorübergehend gesperrt
Zu viele fehlgeschlagene Anmeldeversuche. {#if rateLimitCountdown > 0} Erneut versuchen in {formatCountdown(rateLimitCountdown)} @@ -623,7 +672,7 @@
Erneut versuchen in {formatCountdown(rateLimitCountdown)}
Login-Link an {email} gesendet!
{t.noAccount} - goto(registerPath)} style:color={primaryColor}> + goto(registerPath)} + style:color={primaryColor} + > {t.createAccount}