Skip to content

Commit a89c934

Browse files
committed
feat: add login method choice screen (e-mail / passkey)
1 parent 66f918d commit a89c934

2 files changed

Lines changed: 48 additions & 21 deletions

File tree

public/css/style.css

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,10 @@ a:hover { color: var(--accent-1); }
194194
padding: 48px 32px;
195195
}
196196

197+
.login-choice-btn + .login-choice-btn {
198+
margin-top: 14px;
199+
}
200+
197201
@media (max-width: 1024px) {
198202
.login-page {
199203
flex-direction: column;

public/js/app.js

Lines changed: 44 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -550,27 +550,39 @@ function renderLoginPage() {
550550
<div class="login-card">
551551
<h1 class="auth-title">Welcome back</h1>
552552
<p class="auth-subtitle">Sign in to your dashboard</p>
553-
<form id="login-form">
554-
<div class="auth-error"></div>
555-
<div class="form-group">
556-
<label for="login-email">Email</label>
557-
<input type="email" id="login-email" placeholder="your@email.com" required autocomplete="webauthn" />
558-
</div>
559-
<div class="form-group">
560-
<label for="login-password">Password</label>
561-
<input type="password" id="login-password" placeholder="••••••••" required autocomplete="current-password" />
562-
</div>
563-
<button type="submit" class="btn btn-primary btn-full" id="login-btn">
564-
Sign In
553+
554+
<div id="login-choices">
555+
<button type="button" class="btn btn-primary btn-full login-choice-btn" id="login-email-btn">
556+
<i data-lucide="mail" style="width:18px;height:18px"></i>
557+
Login with E-mail
565558
</button>
566-
<div style="position:relative;margin:20px 0;text-align:center">
567-
<span style="background:#1c1712;padding:0 14px;color:var(--text-muted);font-size:0.85rem">or</span>
568-
</div>
569-
<button type="button" class="btn btn-ghost btn-full" id="passkey-login-btn" style="border:1px solid var(--border)">
570-
<i data-lucide="fingerprint" style="width:16px;height:16px"></i>
571-
Sign in with Passkey
559+
<button type="button" class="btn btn-ghost btn-full login-choice-btn" id="login-passkey-btn" style="border:1px solid var(--border)">
560+
<i data-lucide="fingerprint" style="width:18px;height:18px"></i>
561+
Login with Passkey
572562
</button>
573-
</form>
563+
</div>
564+
565+
<div id="login-email-form" style="display:none">
566+
<div class="auth-error"></div>
567+
<form id="login-form">
568+
<div class="form-group">
569+
<label for="login-email">Email</label>
570+
<input type="email" id="login-email" placeholder="your@email.com" required autocomplete="webauthn" />
571+
</div>
572+
<div class="form-group">
573+
<label for="login-password">Password</label>
574+
<input type="password" id="login-password" placeholder="••••••••" required autocomplete="current-password" />
575+
</div>
576+
<button type="submit" class="btn btn-primary btn-full" id="login-btn">
577+
Sign In
578+
</button>
579+
</form>
580+
<button type="button" class="btn btn-ghost btn-full" id="login-back-btn" style="margin-top:12px">
581+
<i data-lucide="arrow-left" style="width:16px;height:16px"></i>
582+
Back
583+
</button>
584+
</div>
585+
574586
<div class="auth-footer">
575587
Don't have an account? <a href="/signup" id="go-register">Create one</a>
576588
</div>
@@ -579,14 +591,25 @@ function renderLoginPage() {
579591
</div>
580592
`;
581593

594+
$('#login-email-btn').addEventListener('click', () => {
595+
$('#login-choices').style.display = 'none';
596+
$('#login-email-form').style.display = 'block';
597+
initIcons();
598+
});
599+
600+
$('#login-back-btn').addEventListener('click', () => {
601+
$('#login-email-form').style.display = 'none';
602+
$('#login-choices').style.display = 'block';
603+
initIcons();
604+
});
605+
582606
$('#login-form').addEventListener('submit', handleLogin);
583-
$('#passkey-login-btn').addEventListener('click', handlePasskeyLogin);
607+
$('#login-passkey-btn').addEventListener('click', handlePasskeyLogin);
584608
$('#go-register').addEventListener('click', (e) => {
585609
e.preventDefault();
586610
navigateTo('signup');
587611
});
588612

589-
setupPasskeyAutofill();
590613
initIcons();
591614
setTimeout(initIcons, 100);
592615
}

0 commit comments

Comments
 (0)