import { OnDestroy } from '@angular/core';
import { FormControl } from '@angular/forms';
import { ButtonMetadata, InputMetadata } from '../../types';
import { OrgRole } from '../../../services/org/types';
import * as i0 from "@angular/core";
interface PublicUserProfile {
    userId: string;
    handle?: string;
    name?: string;
}
/**
 * `val-invite-member-modal` — invitación de miembros a una organización.
 * Promovido desde `showcase` bajo el proceso de ADR-021.
 *
 * Busca usuarios por handle en Firestore `/profiles` (multi-select) o invita por
 * email cuando el query es un correo válido. Asigna el rol seleccionado y envía la
 * invitación vía `OrgService.inviteUser`. Excluye al usuario actual y a los
 * `existingMemberIds` de los resultados.
 *
 * Abierto vía `ModalService` — recibe `_modalRef` por `componentProps` + callback
 * `onSuccess`. Header canónico (Regla #5): sin `ion-title`, botón Cerrar texto en
 * `slot=end`, título/subtítulo en el body con `val-display`/`val-title`.
 *
 * Auto-registra sus defaults i18n (es/en) si el consumer no proveyó el namespace
 * `InviteModal`.
 */
export declare class InviteMemberModalComponent implements OnDestroy {
    private orgService;
    private auth;
    private toast;
    private errors;
    private firestore;
    private i18n;
    /** Inyectado por `ModalService.open` — referencia para cerrar desde dentro. */
    _modalRef?: {
        dismiss: (data?: unknown, role?: string) => void;
    };
    /** Organización a la que se invita. */
    orgId: string;
    /** Ids de miembros ya existentes (excluidos de los resultados). */
    existingMemberIds: string[];
    /** Callback tras enviar la(s) invitación(es) (pasado por `componentProps`). */
    onSuccess?: () => void;
    /** Namespace i18n con que la vista resuelve sus textos. */
    i18nNamespace: string;
    readonly query: import("@angular/core").WritableSignal<string>;
    readonly searching: import("@angular/core").WritableSignal<boolean>;
    readonly searchResults: import("@angular/core").WritableSignal<PublicUserProfile[]>;
    readonly selectedUsers: import("@angular/core").WritableSignal<PublicUserProfile[]>;
    readonly sending: import("@angular/core").WritableSignal<boolean>;
    readonly selectedRole: import("@angular/core").WritableSignal<string>;
    readonly availableRoles: import("@angular/core").WritableSignal<OrgRole[]>;
    readonly roleControl: FormControl<string>;
    readonly roleSelectProps: import("@angular/core").Signal<Partial<InputMetadata>>;
    readonly isEmail: import("@angular/core").Signal<boolean>;
    readonly sendButtonProps: import("@angular/core").Signal<Partial<ButtonMetadata>>;
    readonly sendSelectedProps: import("@angular/core").Signal<Partial<ButtonMetadata>>;
    private searchSubject;
    private roleSub?;
    constructor();
    onQueryChange(value: string): void;
    private loadRoles;
    roleDisplayName(role: OrgRole): string;
    onInviteByEmail(): Promise<void>;
    isSelected(userId: string): boolean;
    toggleUser(user: PublicUserProfile): void;
    onSendSelected(): Promise<void>;
    ngOnDestroy(): void;
    dismiss(): void;
    t(key: string): string;
    static ɵfac: i0.ɵɵFactoryDeclaration<InviteMemberModalComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<InviteMemberModalComponent, "val-invite-member-modal", never, { "_modalRef": { "alias": "_modalRef"; "required": false; }; "orgId": { "alias": "orgId"; "required": false; }; "existingMemberIds": { "alias": "existingMemberIds"; "required": false; }; "onSuccess": { "alias": "onSuccess"; "required": false; }; "i18nNamespace": { "alias": "i18nNamespace"; "required": false; }; }, {}, never, never, true, never>;
}
export {};
