import { EventEmitter, Injector, SimpleChanges, TemplateRef } from "@angular/core";
import { NgForm, NgModel } from "@angular/forms";
import { AccessControlService } from "@esfaenza/access-control";
import { LocalizationService } from "@esfaenza/localizations";
import { HTTPService } from "@esfaenza/httpservice";
import { AppState } from "@esfaenza/core/services";
import { AppSearch, ThTdProvider } from "@esfaenza/es-table";
import { ReplaySubject, Subject } from "rxjs";
import { ModalDirective } from "ngx-bootstrap/modal";
import { BaseSelectorInitialization } from "./models/BaseSelectorInitialization";
import * as i0 from "@angular/core";
export declare class BaseSelectorComponent<TSearch extends AppSearch<TItem>, TItem> {
    private injector;
    Initialized: ReplaySubject<boolean>;
    itemSearch: import("@angular/core").Signal<ModalDirective>;
    EsTableTemplate: import("@angular/core").Signal<ThTdProvider>;
    EsTableTemplateComponent: import("@angular/core").Signal<ThTdProvider>;
    FiltersTemplate: import("@angular/core").Signal<TemplateRef<any>>;
    ModalOnly: boolean;
    EntityName: string;
    searchModal: ModalDirective;
    inputChange: EventEmitter<TItem[] | TItem>;
    firstValueLoaded: EventEmitter<void>;
    protected SelectedItems: string[];
    SelectedObjects: TItem[];
    SelectedLabel: string;
    propagateChange: (_: any) => void;
    registerOnChange(fn: any): void;
    registerOnTouched(fn: any): void;
    DisplayMode: boolean;
    Readonly: boolean;
    Form: NgForm;
    Placeholder: string;
    ngModelOptions: any;
    SingleSelection: boolean;
    Required: boolean;
    Validation: boolean;
    PageSize: number;
    Navigation: boolean;
    EmitStartingValue: boolean;
    dialogVisible: EventEmitter<boolean>;
    dialogHidden: EventEmitter<boolean>;
    inputFinalized: EventEmitter<string>;
    name: string;
    searchView: TSearch;
    protected nameof: <T>(name: Extract<keyof T, string>) => string;
    subject: string;
    private searchType;
    private searchApi;
    private itemIdProperty;
    private searchIndependantProperties;
    navigationEntity: string;
    protected applyFilters(view: TSearch, firstApplication?: boolean, onlyEssentials?: boolean): void;
    protected applyIdFilter(view: TSearch, itemid?: string): void;
    protected evaluateLabel(item: TItem[]): string;
    protected loadSearchDictionaries(): Promise<void>;
    protected Initialize(): BaseSelectorInitialization<TSearch>;
    private firstApplication;
    ngControl: NgModel;
    Pristine: boolean;
    private CurrentValue;
    ac: AccessControlService;
    ValidationSubject: Subject<{
        fieldName: string;
        error: string;
    }>;
    destroyed$: Subject<void>;
    private router;
    lc: LocalizationService;
    http: HTTPService;
    state: AppState;
    private msgExts;
    private clipboardService;
    private hashingService;
    private redirectMap;
    private routesMap;
    constructor(injector: Injector);
    _outer: BaseSelectorComponent<any, any>;
    bridge(outer: BaseSelectorComponent<any, any>): void;
    ngOnInit(): Promise<void>;
    ngOnDestroy(): Promise<void>;
    ngOnChanges(changes: SimpleChanges): Promise<void>;
    resetSearch(applyFilters?: boolean): boolean;
    initStartValue(valueId: string): void;
    ensureClosed(): void;
    confirmSelection(): Promise<void>;
    sendSearch(resetPage?: boolean, selectResults?: boolean, applyOtherFilters?: boolean): boolean;
    private afterSearch;
    writeValue(obj: any): Promise<void>;
    changed(emit?: boolean): void;
    cleanSelection(): void;
    modalVisible(visible: boolean): void;
    copyToClipboard(subjectOverride?: string): boolean;
    navigate(): void;
    private SelectAll;
    static ɵfac: i0.ɵɵFactoryDeclaration<BaseSelectorComponent<any, any>, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<BaseSelectorComponent<any, any>, "base-selector", never, { "ModalOnly": { "alias": "ModalOnly"; "required": false; }; "EntityName": { "alias": "EntityName"; "required": false; }; "DisplayMode": { "alias": "DisplayMode"; "required": false; }; "Readonly": { "alias": "Readonly"; "required": false; }; "Form": { "alias": "Form"; "required": false; }; "Placeholder": { "alias": "Placeholder"; "required": false; }; "ngModelOptions": { "alias": "ngModelOptions"; "required": false; }; "SingleSelection": { "alias": "SingleSelection"; "required": false; }; "Required": { "alias": "Required"; "required": false; }; "Validation": { "alias": "Validation"; "required": false; }; "PageSize": { "alias": "PageSize"; "required": false; }; "Navigation": { "alias": "Navigation"; "required": false; }; "EmitStartingValue": { "alias": "EmitStartingValue"; "required": false; }; "name": { "alias": "name"; "required": false; }; "ValidationSubject": { "alias": "ValidationSubject"; "required": false; }; }, { "inputChange": "inputChange"; "firstValueLoaded": "firstValueLoaded"; "dialogVisible": "dialogVisible"; "dialogHidden": "dialogHidden"; "inputFinalized": "inputFinalized"; }, ["EsTableTemplate", "FiltersTemplate"], never, true, never>;
}
