import { AbstractControl, FormControl, FormControlState, FormControlStatus, ValidatorFn } from '@angular/forms';
import { Observable } from 'rxjs';
export interface FormControlExtended<TValue = any, DATA = any> extends FormControl<TValue> {
    extended: true;
    status$: Observable<FormControlStatus>;
    invalid$: Observable<boolean>;
    valid$: Observable<boolean>;
    value$: Observable<TValue | undefined>;
    error$: Observable<string | undefined>;
    hasValue$: Observable<boolean>;
    empty$: Observable<boolean>;
    selectedItems$: Observable<any[] | undefined>;
    selectedItems: any[] | undefined;
    readonly$: Observable<boolean>;
    readonly: boolean;
    disabled$: Observable<boolean>;
    enabled$: Observable<boolean>;
    touched$: Observable<boolean>;
    dirty$: Observable<boolean>;
    showError$: Observable<boolean>;
    displayText$: Observable<string | undefined>;
    displayText: string | undefined;
    displayControl: FormControl<string | undefined | null>;
    data$: Observable<DATA | undefined>;
    data: DATA | undefined;
    customError?: string;
    setReadonly: (value: boolean) => FormControlExtended<TValue, DATA>;
    setDisplayText: (value: any | undefined) => FormControlExtended<TValue>;
    setSelectedItems: (value: any[] | undefined) => FormControlExtended<TValue, DATA>;
    setCustomError: (value: string | undefined) => FormControlExtended<TValue, DATA>;
    setDisabled: (value: boolean) => FormControlExtended<TValue, DATA>;
    getValue: () => TValue | null;
    setData: (value: DATA | undefined) => FormControlExtended<TValue, DATA>;
    emitStatus: () => void;
}
export declare function formControl<T, DATA = any>(value?: FormControlState<T> | T | null, validators?: ValidatorFn | ValidatorFn[], nullable?: boolean): FormControlExtended<T, DATA>;
export declare function isFormControlExtended(control: AbstractControl | FormControl | FormControlExtended): control is FormControlExtended;
