import { CommonFormControl, TrackFn } from '@alauda/ui';
import { ChangeDetectorRef, TemplateRef } from '@angular/core';
import { FormGroupDirective } from '@angular/forms';
import { BehaviorSubject, Observable } from 'rxjs';
import * as i0 from "@angular/core";
export interface SearchableSelectorOption {
    value: unknown;
    label: string;
    filterValue?: string;
    resource?: unknown;
}
export type SearchableSelectorFetcher = (params: unknown, keyword: string) => Observable<SearchableSelectorOption[]>;
export declare class SearchableSelectorLabelDirective {
    static ɵfac: i0.ɵɵFactoryDeclaration<SearchableSelectorLabelDirective, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<SearchableSelectorLabelDirective, "[aclSearchableSelectorLabel]", never, {}, {}, never, never, false, never>;
}
export declare class SearchableSelectorOptionDirective {
    static ɵfac: i0.ɵɵFactoryDeclaration<SearchableSelectorOptionDirective, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<SearchableSelectorOptionDirective, "[aclSearchableSelectorOption]", never, {}, {}, never, never, false, never>;
}
export declare class SearchableSelectorComponent extends CommonFormControl<unknown> {
    private readonly parentForm;
    get errorState(): boolean;
    fetcher: SearchableSelectorFetcher;
    fetcher$: Observable<SearchableSelectorFetcher>;
    allowCreate: boolean;
    placeholder: string;
    trackFn: TrackFn<unknown>;
    params: unknown;
    params$: Observable<unknown>;
    multi: boolean;
    clearable: boolean;
    disableFn: (option: SearchableSelectorOption, params?: unknown) => boolean;
    disableParams: unknown;
    disableTooltip: string;
    labelTemplate: TemplateRef<unknown>;
    optionTemplate: TemplateRef<unknown>;
    keyword$$: BehaviorSubject<string>;
    loading: boolean;
    data$: Observable<SearchableSelectorOption[]>;
    constructor(parentForm: FormGroupDirective, cdr: ChangeDetectorRef);
    defaultTrackFn: (value: string) => string;
    filterFn: (keyword: string, option: {
        label: string;
        labelContext: {
            $implicit: SearchableSelectorOption;
        };
        value: unknown;
    }) => boolean;
    filterChange(keyword: string): void;
    getLabel(value: string, data: SearchableSelectorOption[]): string;
    static ɵfac: i0.ɵɵFactoryDeclaration<SearchableSelectorComponent, [{ optional: true; }, null]>;
    static ɵcmp: i0.ɵɵComponentDeclaration<SearchableSelectorComponent, "acl-searchable-selector", never, { "fetcher": { "alias": "fetcher"; "required": false; }; "allowCreate": { "alias": "allowCreate"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "trackFn": { "alias": "trackFn"; "required": false; }; "params": { "alias": "params"; "required": false; }; "multi": { "alias": "multi"; "required": false; }; "clearable": { "alias": "clearable"; "required": false; }; "disableFn": { "alias": "disableFn"; "required": false; }; "disableParams": { "alias": "disableParams"; "required": false; }; "disableTooltip": { "alias": "disableTooltip"; "required": false; }; }, {}, ["labelTemplate", "optionTemplate"], never, false, never>;
}
