import { EventEmitter, OnDestroy, OnInit } from '@angular/core'; import { AuthService } from '../../../services/auth'; import { ButtonMetadata, FormMetadata, FormSubmit } from '../../types'; import { ImageMetadata } from '../../atoms/image/types'; import { LoginMetadata, LoginSuccessEvent, LoginErrorEvent, MFARequiredEvent } from './types'; import * as i0 from "@angular/core"; export declare class LoginComponent implements OnInit, OnDestroy { private forms; props: LoginMetadata; onSuccess: EventEmitter; onError: EventEmitter; onMFARequired: EventEmitter; authService: AuthService; private toastService; private router; private route; private i18n; private i18nHelper; private legalLink; /** URL del sitio principal resuelta por ambiente — fallback cuando el consumer no pasa companyLink. */ get resolvedCompanyLink(): string | undefined; /** * Helper method for translating auth-related strings. * Exposed to template for dynamic text. */ t(key: string, data?: Record): string; private resendTimer; private resetResendTimer; private oauthLoadingResetTimer; isOAuthLoading: boolean; isRegisterModalOpen: boolean; isVerifyModalOpen: boolean; isForgotPasswordModalOpen: boolean; isResetPasswordModalOpen: boolean; isMFAVerifyModalOpen: boolean; private _mfaSuccessPending; private readonly resetOAuthLoadingOnReturn; pendingVerificationEmail: string; pendingResetEmail: string; resendCooldown: number; resetResendCooldown: number; get config(): Required> & LoginMetadata; /** * Logo a renderizar arriba del form. Si el consumer no pasa `logo`, cae al * default de marca del factory (`--main-logo` por app). Ver DEFAULT_LOGIN_LOGO. */ get resolvedLogo(): ImageMetadata; private _loginFormState; private _registerFormState; private _verifyFormState; private _verifyFormSectionName; private _mfaVerifyFormState; private _mfaMethod; /** Método MFA pendiente — expuesto al template para gatear el link de backup (solo TOTP). */ readonly mfaMethod: import("@angular/core").Signal<"EMAIL" | "SMS" | "TOTP">; /** A: el user togglea a "código de respaldo" (8 chars alfanuméricos) cuando perdió el 2º factor. */ readonly mfaUseBackupCode: import("@angular/core").WritableSignal; isMFAResetModalOpen: boolean; private _mfaResetStep; readonly mfaResetStep: import("@angular/core").Signal<"confirm" | "request">; private _mfaResetFormState; private _mfaResetEmail; private _forgotPasswordFormState; private _resetPasswordFormState; private _resetFormSectionName; readonly loginFormProps: import("@angular/core").Signal; readonly registerFormProps: import("@angular/core").Signal; readonly verifyFormProps: import("@angular/core").Signal; readonly mfaVerifyFormProps: import("@angular/core").Signal; readonly mfaResetRequestFormProps: import("@angular/core").Signal; readonly mfaResetConfirmFormProps: import("@angular/core").Signal; readonly forgotPasswordFormProps: import("@angular/core").Signal; readonly resetPasswordFormProps: import("@angular/core").Signal; loginHandler(event: FormSubmit): void; /** * Props del botón de un proveedor. Los OAuth pasan por `val-button` como el * resto del journey: así heredan la forma de píldora del sistema en vez de * depender de un `--border-radius` local, que era lo que los dejaba * rectangulares al lado del CTA principal. */ oauthButtonProps(provider: 'google' | 'apple' | 'microsoft' | 'facebook'): ButtonMetadata; loginWithOAuth(provider: 'google' | 'apple' | 'microsoft' | 'facebook'): void; /** Navegación pendiente a la página de login tras cerrar el modal de registro. */ private _pendingLoginNav; openRegisterModal(): void; closeRegisterModal(): void; /** * Link "¿Ya tienes cuenta?" del modal de registro. Si `props.loginRoute` está * configurado, cierra el modal y navega a la página de login; si no, solo * cierra el modal (comportamiento por defecto). */ onRegisterSwitchToLogin(): void; registerHandler(event: FormSubmit): void; openVerifyModal(email: string): void; closeVerifyModal(): void; verifyHandler(event: FormSubmit): void; resendCode(): void; openMFAVerifyModal(): void; closeMFAVerifyModal(): void; /** A: alterna entre el código TOTP (6 díg) y un código de respaldo (8 chars). */ toggleMFABackupCode(): void; openMFAResetModal(): void; closeMFAResetModal(): void; mfaResetRequestHandler(event: FormSubmit): void; mfaResetConfirmHandler(event: FormSubmit): void; verifyMFAHandler(event: FormSubmit): void; onMFAVerifyDismissed(): void; openForgotPasswordModal(): void; closeForgotPasswordModal(): void; forgotPasswordHandler(event: FormSubmit): void; openResetPasswordModal(email: string): void; closeResetPasswordModal(): void; resetPasswordHandler(event: FormSubmit): void; resendResetCode(): void; private handleLoginSuccess; private resolveQueryRedirect; private handleError; private showToast; private getErrorMessage; private startResendCooldown; private stopResendCooldown; private startResetResendCooldown; private stopResetResendCooldown; private scheduleOAuthLoadingReset; private clearOAuthLoadingResetTimer; private listenForOAuthReturn; private stopListeningForOAuthReturn; ngOnInit(): void; /** * Ionic (`IonicRouteStrategy`) no destruye la página de login al navegar * afuera — la "detach"-ea y la reutiliza si el usuario vuelve a la misma * ruta, así que `ngOnInit` no vuelve a correr. `val-form` arma su * `FormGroup` UNA sola vez en su propio `ngOnInit`; sin este hook, cerrar * sesión y volver a `/login` mostraba el email y la contraseña que la * sesión anterior había tecleado. * * `ionViewWillEnter` es el gancho de Ionic pensado exactamente para esto: * corre en CADA entrada a la vista, sea la primera vez o una reutilización * desde caché. Ionic lo invoca por duck-typing sobre cualquier componente * de la jerarquía que lo declare, sin necesidad de implementar la interfaz * `ViewWillEnter` (mismo patrón que `SelectSearchComponent` en esta lib). */ ionViewWillEnter(): void; ngOnDestroy(): void; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; }