/// <reference types="core-js" />
import { OnInit, OnChanges, SimpleChange, TemplateRef } from '@angular/core';
import { Observable, BehaviorSubject } from 'rxjs';
import { services } from 'typescript-angular-utilities';
import __object = services.object;
import __array = services.array;
import __guid = services.guid;
import __transform = services.transform;
import __search = services.search;
import { ValidatedInputComponent } from '../validationInput';
import { ComponentValidator } from '../../../services/componentValidator/componentValidator.service';
import { FormComponent } from '../../form/form';
import { ListHeaderTemplate, ListItemTemplate } from './templates/index';
export interface ITypeaheadListChanges {
    value: SimpleChange;
    disableSearching: SimpleChange;
    [key: string]: SimpleChange;
}
export declare class TypeaheadListComponent<T> extends ValidatedInputComponent<T[]> implements OnInit, OnChanges {
    transform: __transform.ITransform<T, string>;
    getItems: {
        (search?: string): Promise<T[]> | Observable<T[]>;
    };
    prefix: string;
    clientSearch: boolean;
    disableSearching: boolean;
    create: {
        (value: string): T;
    };
    onAdd: {
        (item: T): Promise<T> | Observable<T>;
    };
    onRemove: {
        (item: T): Promise<void> | Observable<void>;
    };
    minRequired: number;
    removalButtonText: string;
    listHeader: ListHeaderTemplate;
    listItem: ListItemTemplate;
    cachedItemsArray: T[];
    cachedItems$: BehaviorSubject<T[]>;
    transformService: __transform.ITransformService;
    searchUtility: __search.ISearchUtility;
    listItemTemplate: string;
    constructor(transformService: __transform.TransformService, rlForm: FormComponent, componentValidator: ComponentValidator, object: __object.ObjectUtility, array: __array.ArrayUtility, guid: __guid.GuidService, searchUtility: __search.SearchUtility);
    loadItems(search?: string): Observable<T[]>;
    searchItems: (search?: string) => Observable<T[]>;
    add: (item: T) => Observable<T>;
    remove: (item: T) => Observable<void>;
    ngOnInit(): void;
    ngOnChanges(changes: ITypeaheadListChanges): void;
    getDisplayName(item: T): string;
    newItemTemplate(): TemplateRef<any>;
    private filter(list, search);
    private loadCachedItems();
    private asObservable(value);
    private immediateObservable(data?);
}
