feat(auth): add resend verification email to registration screen

- Add prominent email verification success UI with resend button
- Show resend verification option when registration fails with "not verified" error
- Improve form spacing with space-y-4 for better visual consistency
- Add translations for resend verification in all languages (de, en, fr, it, es)
- Update all 13 app register pages to pass onResendVerification prop

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Till-JS 2026-02-01 12:44:28 +01:00
parent 1c6505890d
commit d703ccfd80
20 changed files with 236 additions and 18 deletions

View file

@ -29,6 +29,10 @@
async function handleSignUp(email: string, password: string) {
return authStore.signUp(email, password);
}
async function handleResendVerification(email: string) {
return authStore.resendVerificationEmail(email);
}
</script>
<svelte:head>
@ -40,6 +44,7 @@
logo={CalendarLogo}
primaryColor="#0ea5e9"
onSignUp={handleSignUp}
onResendVerification={handleResendVerification}
{goto}
successRedirect={redirectTo}
loginPath="/login"

View file

@ -29,6 +29,10 @@
async function handleSignUp(email: string, password: string) {
return authStore.signUp(email, password);
}
async function handleResendVerification(email: string) {
return authStore.resendVerificationEmail(email);
}
</script>
<svelte:head>
@ -40,6 +44,7 @@
logo={ChatLogo}
primaryColor="#0ea5e9"
onSignUp={handleSignUp}
onResendVerification={handleResendVerification}
{goto}
successRedirect={redirectTo}
loginPath="/login"

View file

@ -26,6 +26,10 @@
async function handleSignUp(email: string, password: string) {
return authStore.signUp(email, password);
}
async function handleResendVerification(email: string) {
return authStore.resendVerificationEmail(email);
}
</script>
<svelte:head>
@ -37,6 +41,7 @@
logo={ContactsLogo}
primaryColor="#3b82f6"
onSignUp={handleSignUp}
onResendVerification={handleResendVerification}
{goto}
successRedirect={redirectTo}
loginPath="/login"

View file

@ -16,6 +16,10 @@
async function handleValidateReferralCode(code: string) {
return authStore.validateReferralCode(code);
}
async function handleResendVerification(email: string) {
return authStore.resendVerificationEmail(email);
}
</script>
<RegisterPage
@ -23,6 +27,7 @@
logo={ManaCoreLogo}
primaryColor="#6366f1"
onSignUp={handleSignUp}
onResendVerification={handleResendVerification}
onValidateReferralCode={handleValidateReferralCode}
{initialReferralCode}
baseSignupCredits={25}

View file

@ -8,6 +8,10 @@
async function handleSignUp(email: string, password: string) {
return authStore.signUp(email, password);
}
async function handleResendVerification(email: string) {
return authStore.resendVerificationEmail(email);
}
</script>
<RegisterPage
@ -15,6 +19,7 @@
logo={ManaDeckLogo}
primaryColor="#8b5cf6"
onSignUp={handleSignUp}
onResendVerification={handleResendVerification}
{goto}
successRedirect="/decks"
loginPath="/login"

View file

@ -23,6 +23,10 @@
async function handleSignUp(email: string, password: string) {
return authStore.signUp(email, password);
}
async function handleResendVerification(email: string) {
return authStore.resendVerificationEmail(email);
}
</script>
<svelte:head>
@ -34,6 +38,7 @@
logo={NutriPhiLogo}
primaryColor="#22C55E"
onSignUp={handleSignUp}
onResendVerification={handleResendVerification}
{goto}
successRedirect={redirectTo}
loginPath="/login"

View file

@ -11,6 +11,10 @@
async function handleSignUp(email: string, password: string) {
return authStore.signUp(email, password);
}
async function handleResendVerification(email: string) {
return authStore.resendVerificationEmail(email);
}
</script>
<svelte:head>
@ -22,6 +26,7 @@
logo={PictureLogo}
primaryColor="#3b82f6"
onSignUp={handleSignUp}
onResendVerification={handleResendVerification}
{goto}
successRedirect="/app/gallery"
loginPath="/auth/login"

View file

@ -15,6 +15,10 @@
async function handleSignUp(email: string, password: string) {
return auth.register(email, password);
}
async function handleResendVerification(email: string) {
return auth.resendVerificationEmail(email);
}
</script>
<svelte:head>
@ -26,6 +30,7 @@
logo={PresiLogo}
primaryColor="#f97316"
onSignUp={handleSignUp}
onResendVerification={handleResendVerification}
{goto}
successRedirect="/"
loginPath="/login"

View file

@ -24,6 +24,10 @@
async function handleSignUp(email: string, password: string) {
return authStore.signUp(email, password);
}
async function handleResendVerification(email: string) {
return authStore.resendVerificationEmail(email);
}
</script>
<svelte:head>
@ -35,6 +39,7 @@
logo={QuestionsLogo}
primaryColor="#8b5cf6"
onSignUp={handleSignUp}
onResendVerification={handleResendVerification}
{goto}
successRedirect={redirectTo}
loginPath="/login"

View file

@ -24,6 +24,10 @@
async function handleSignUp(email: string, password: string) {
return authStore.signUp(email, password);
}
async function handleResendVerification(email: string) {
return authStore.resendVerificationEmail(email);
}
</script>
<svelte:head>
@ -35,6 +39,7 @@
logo={SkillTreeLogo}
primaryColor="#10b981"
onSignUp={handleSignUp}
onResendVerification={handleResendVerification}
{goto}
successRedirect={redirectTo}
loginPath="/login"

View file

@ -13,6 +13,10 @@
async function handleSignUp(email: string, password: string) {
return authStore.signUp(email, password);
}
async function handleResendVerification(email: string) {
return authStore.resendVerificationEmail(email);
}
</script>
<svelte:head>
@ -24,6 +28,7 @@
logo={ManaIcon}
primaryColor="#3b82f6"
onSignUp={handleSignUp}
onResendVerification={handleResendVerification}
{goto}
successRedirect="/files"
loginPath="/login"

View file

@ -28,6 +28,10 @@
async function handleSignUp(email: string, password: string) {
return authStore.signUp(email, password);
}
async function handleResendVerification(email: string) {
return authStore.resendVerificationEmail(email);
}
</script>
<svelte:head>
@ -39,6 +43,7 @@
logo={TodoLogo}
primaryColor="#8b5cf6"
onSignUp={handleSignUp}
onResendVerification={handleResendVerification}
{goto}
successRedirect={redirectTo}
loginPath="/login"

View file

@ -13,6 +13,10 @@
async function handleSignUp(email: string, password: string) {
return authStore.signUp(email, password);
}
async function handleResendVerification(email: string) {
return authStore.resendVerificationEmail(email);
}
</script>
<svelte:head>
@ -24,6 +28,7 @@
logo={ZitareLogo}
primaryColor="#f59e0b"
onSignUp={handleSignUp}
onResendVerification={handleResendVerification}
{goto}
successRedirect="/"
loginPath="/login"