/** * @fileoverview Login Form Component for Rantii * @author retoor * @description User authentication form with validation * @keywords login, form, authentication, credentials, signin */ import { BaseComponent } from './base-component.js'; class LoginForm extends BaseComponent { init() { this.isLoading = false; this.render(); this.bindEvents(); } render() { this.setHtml(`

Sign In

Enter your DevRant credentials

`); } bindEvents() { const form = this.$('form'); if (form) { this.on(form, 'submit', this.handleSubmit); } } async handleSubmit(e) { e.preventDefault(); if (this.isLoading) return; const username = this.$('#login-username').value.trim(); const password = this.$('#login-password').value; const remember = this.$('#login-remember').checked; if (!username || !password) { this.showError('Please enter username and password'); return; } this.setLoading(true); this.hideError(); try { const result = await this.getAuth()?.login(username, password, remember); if (result?.success) { this.emit('login-success', { user: result.user }); this.getRouter()?.goHome(); } else { this.showError(result?.error || 'Login failed'); } } catch (error) { this.showError('Connection error. Please try again.'); } finally { this.setLoading(false); } } setLoading(loading) { this.isLoading = loading; this.render(); this.bindEvents(); } showError(message) { const errorEl = this.$('.form-error'); if (errorEl) { errorEl.textContent = message; errorEl.hidden = false; } } hideError() { const errorEl = this.$('.form-error'); if (errorEl) { errorEl.hidden = true; } } reset() { const form = this.$('form'); if (form) { form.reset(); } this.hideError(); } } customElements.define('login-form', LoginForm); export { LoginForm };