import { ActionCardMetadata } from '../../molecules/action-card/types';
import { ActionHeaderMetadata } from '../../molecules/action-header/types';
import { PageLinksMetadata } from '../../molecules/page-links/types';
import { ButtonMetadata } from '../../types';
import { DeviceInfo, SessionInfo } from '../../../services/auth/types';
import { SecurityViewConfig } from './types';
import * as i0 from "@angular/core";
/**
 * `val-security-view` — vista Seguridad full-feature autocontenida (organism).
 *
 * Promovida desde `showcase` bajo el proceso de ADR-021. Reúne en una sola vista:
 *  - **Sesiones activas** — única vista user-facing de "dónde tengo sesión".
 *    Lista inline (limit 3) + modal "Ver todas" (`val-session-list-modal`) +
 *    revoke individual / revoke-all (con confirmación).
 *  - **Action-cards** — cambiar contraseña, cambiar email y MFA (cada una abre
 *    el modal correspondiente de la lib).
 *  - **Políticas legales** — links resueltos vía `LegalLinkService` (apps
 *    satélite apuntan al main site).
 *
 * Deep-links del email (gateados por `config.handleDeepLinks`, default `true`):
 *  - `?token=...&action=...` → modal `val-login-attempt-modal` (autorizar/bloquear
 *    el nuevo acceso).
 *  - `?mfaCode=...` → abre el modal MFA con el código pre-cargado.
 *
 * NO renderiza ion-content — vive dentro de val-page-wrapper.
 *
 * Auto-registra sus defaults i18n (es/en) en el constructor si el consumer no
 * proveyó el namespace configurado (default `Settings.Security`).
 */
export declare class SecurityViewComponent {
    private nav;
    private i18n;
    private deviceService;
    private legalLink;
    private toast;
    private errors;
    private router;
    private route;
    private sessionService;
    private modalService;
    private confirmDialog;
    /**
     * Config vía @Input (object-first). Si no se pasa, se cae al route data
     * `securityConfig` (poblado por `provideValtechSecurityRoutes`).
     * `resolvedConfig` mergea con los defaults — `@Input` gana sobre route data.
     */
    config?: SecurityViewConfig;
    readonly resolvedConfig: import("@angular/core").Signal<Required<Omit<SecurityViewConfig, "onMfaCompleted">> & Pick<SecurityViewConfig, "onMfaCompleted">>;
    /** Namespace i18n resuelto (capturado para llamadas no-reactivas). */
    private get ns();
    /**
     * Lista de dispositivos del user. No se renderiza — solo alimenta el modal
     * de confirmación de inicio de sesión (`handleActionTokenFromUrl`) para
     * resolver un label legible desde el `targetId` del token.
     */
    protected devices: import("@angular/core").WritableSignal<DeviceInfo[]>;
    readonly sessions: import("@angular/core").WritableSignal<SessionInfo[]>;
    readonly sessionsLoading: import("@angular/core").WritableSignal<boolean>;
    readonly isChangeEmailModalOpen: import("@angular/core").WritableSignal<boolean>;
    readonly isChangePasswordModalOpen: import("@angular/core").WritableSignal<boolean>;
    readonly isMfaModalOpen: import("@angular/core").WritableSignal<boolean>;
    /** Código MFA del deep-link `/verify` — pre-carga el modal en confirmación. */
    readonly mfaPrefillCode: import("@angular/core").WritableSignal<string>;
    readonly pageTitle: import("@angular/core").Signal<string>;
    readonly pageDescription: import("@angular/core").Signal<string>;
    readonly quickActionsTitle: import("@angular/core").Signal<string>;
    readonly policiesTitle: import("@angular/core").Signal<string>;
    readonly hasActionCards: import("@angular/core").Signal<boolean>;
    readonly actionCards: import("@angular/core").Signal<ActionCardMetadata[]>;
    /**
     * Fuente única de links legales del producto. Se resuelven vía
     * `LegalLinkService` — apps satélite apuntan al main site, el main site los
     * deja relativos.
     */
    readonly policyLinksProps: import("@angular/core").Signal<PageLinksMetadata>;
    readonly sessionsTitle: import("@angular/core").Signal<string>;
    readonly sessionsEmptyLabel: import("@angular/core").Signal<string>;
    readonly sessionsThis: import("@angular/core").Signal<string>;
    readonly hasOtherSessions: import("@angular/core").Signal<boolean>;
    /** Sesiones ordenadas: current primero, resto por createdAt desc. */
    readonly sortedSessions: import("@angular/core").Signal<SessionInfo[]>;
    /** Limit de sesiones mostradas inline. Si total > limit, "Ver todas" abre modal. */
    private readonly VISIBLE_LIMIT;
    readonly visibleSessions: import("@angular/core").Signal<SessionInfo[]>;
    readonly hasMoreSessions: import("@angular/core").Signal<boolean>;
    /** Titulo con count: "Sesiones activas (4)". Sin count si N=0. */
    readonly sessionsTitleWithCount: import("@angular/core").Signal<string>;
    readonly revokeOneButtonProps: import("@angular/core").Signal<Partial<ButtonMetadata>>;
    readonly viewAllButtonProps: import("@angular/core").Signal<Partial<ButtonMetadata>>;
    /** Action-header de Sesiones: title + count + boton "Cerrar todas las demas". */
    readonly sessionsHeader: import("@angular/core").Signal<ActionHeaderMetadata>;
    constructor();
    /**
     * Llega vía link del email de "nuevo acceso" (`?token=...`). Valida el token
     * (sin ejecutar) y levanta el modal de confirmación. El bloqueo solo se
     * ejecuta si el user confirma "no fui yo" dentro del modal.
     */
    private handleActionTokenFromUrl;
    private toastTokenInvalid;
    loadDevices(): Promise<void>;
    onActionClick(action: ActionCardMetadata): void;
    onMfaModalDismissed(): void;
    /**
     * El user llegó vía link del email, confirmó MFA en el modal. Cerramos el
     * modal y, si hay hook `onMfaCompleted`, lo invocamos; si no, navegamos al
     * `homeRoute` configurado — quedarse en Settings → Security daría la
     * sensación de "tarea inconclusa" cuando el flow ya terminó.
     */
    onMfaEnabledViaDeeplink(): void;
    /**
     * Deep-link `/verify?...&verify-code=` → redirige a esta vista con `?mfaCode=`.
     * Abre el modal MFA con el código pre-cargado en el paso de confirmación.
     */
    private handleMfaCodeFromUrl;
    protected describeDevice(d: DeviceInfo): string;
    protected formatDate(iso?: string): string;
    private toastOk;
    /** Icono según device: phone si UA mobile, sino laptop. */
    deviceIcon(s: SessionInfo): string;
    formatSessionMeta(s: SessionInfo): string;
    onRevokeOne(sessionId: string): Promise<void>;
    onRevokeAll(): Promise<void>;
    /** Abre modal con la lista completa. Cada revoke pasa por `onRevoke`. */
    openSessionsModal(): Promise<void>;
    private loadSessions;
    /** Lee del namespace configurado. */
    protected tt(key: string): string;
    static ɵfac: i0.ɵɵFactoryDeclaration<SecurityViewComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<SecurityViewComponent, "val-security-view", never, { "config": { "alias": "config"; "required": false; }; }, {}, never, never, true, never>;
}
