import { EventEmitter, OnInit, OnDestroy, AfterViewInit, ChangeDetectorRef, ElementRef } from '@angular/core';
import { FormControl, NgForm, FormGroupDirective, FormGroup } from '@angular/forms';
import { Observable } from 'rxjs';
import { ErrorStateMatcher } from '@angular/material/core';
import { SdAutocompleteDisplayDefDirective } from './autocomplete-display-def.directive';
import { MatAutocompleteTrigger } from '@angular/material/autocomplete';
import { IFormConfiguration, SdFormControl, SdViewDefDirective } from '@sd-angular/core/common';
import { MatFormFieldAppearance } from '@angular/material/form-field';
import { SdLabelDefDirective } from '@sd-angular/core/common';
import { MatTooltip } from '@angular/material/tooltip';
declare class SdAutocompleteErrotStateMatcher implements ErrorStateMatcher {
    private formControl;
    constructor(formControl: FormControl);
    isErrorState(control: FormControl | null, form: FormGroupDirective | NgForm | null): boolean;
}
export declare class SdAutocomplete<T = any> implements OnInit, OnDestroy, AfterViewInit {
    #private;
    private ref;
    private formConfig;
    autocompleteTrigger: MatAutocompleteTrigger;
    id: string;
    set name(val: string);
    appearance: MatFormFieldAppearance;
    loading: boolean;
    inputControl: SdFormControl;
    formControl: SdFormControl;
    matcher: SdAutocompleteErrotStateMatcher;
    size: 'sm' | 'lg';
    set form(val: NgForm | FormGroup);
    qcId: string;
    label: string;
    set _label(val: string);
    valueField: string;
    displayField: string;
    placeholder: string;
    set items(items: undefined | T[] | SearchFunc<T>);
    limit: number;
    filteredItems: Observable<any[]>;
    cacheChecksum: any;
    controlPlaceHolder: Observable<string | number>;
    set model(value: undefined | number | string);
    hiddenAdd: boolean;
    autocompleteDisplayDef: SdAutocompleteDisplayDefDirective;
    sdLabelDef: SdLabelDefDirective;
    actionIcon: string;
    action: EventEmitter<any>;
    modelChange: EventEmitter<any>;
    sdChange: EventEmitter<any>;
    sdAdd: EventEmitter<any>;
    set disabled(val: boolean | '');
    isRequired: boolean;
    set required(val: boolean | '');
    set validator(validator: (value: any, selectedItem?: T) => string | Promise<string>);
    disableErrorMessage: boolean;
    set _disableErrorMessage(val: boolean | '');
    input: ElementRef;
    sdView: SdViewDefDirective;
    isFocused: boolean;
    selected: Observable<T>;
    isTyping: boolean;
    copyTooltip: MatTooltip;
    copyable: boolean;
    set _copyable(val: boolean | '');
    copied: boolean;
    copyText: ((value: string, item: T) => string) | string;
    constructor(ref: ChangeDetectorRef, formConfig: IFormConfiguration);
    ngOnInit(): void;
    ngAfterViewInit(): void;
    ngOnDestroy(): void;
    onSelect: (item: T) => void;
    onFocus: () => void;
    onBlur: () => void;
    onClick: () => void;
    blur: () => void;
    focus: () => void;
    clear: ($event?: any) => void;
    onAction: ($event: Event) => void;
    onAdd: ($event: Event) => void;
    reValidate: () => void;
    onCopyText: (event: MouseEvent) => void;
}
declare type SearchFunc<T = any> = (searchText?: string, isFormValue?: boolean) => Promise<T[]> | Observable<T[]>;
export {};
