import { ConnectedPositioningStrategy } from './../services/overlay/position/connected-positioning-strategy';
import { AfterViewInit, ChangeDetectorRef, ElementRef, EventEmitter, OnInit, OnDestroy, QueryList, TemplateRef } from '@angular/core';
import { ControlValueAccessor, NgControl } from '@angular/forms';
import { IgxCheckboxComponent } from '../checkbox/checkbox.component';
import { IgxSelectionAPIService } from '../core/selection';
import { IgxStringFilteringOperand, IgxBooleanFilteringOperand } from '../data-operations/filtering-condition';
import { FilteringLogic } from '../data-operations/filtering-expression.interface';
import { SortingDirection } from '../data-operations/sorting-expression.interface';
import { IForOfState } from '../directives/for-of/for_of.directive';
import { IgxDropDownItemBase } from '../drop-down/drop-down-item.component';
import { IgxComboDropDownComponent } from './combo-dropdown.component';
export declare class ComboConnectedPositionStrategy extends ConnectedPositioningStrategy {
    private _callback;
    constructor(callback: () => void);
    position(contentElement: any, size: any, document?: any, initialCall?: any): void;
}
export declare enum DataTypes {
    EMPTY = "empty",
    PRIMITIVE = "primitive",
    COMPLEX = "complex",
    PRIMARYKEY = "valueKey",
}
export declare enum IgxComboState {
    INITIAL = 0,
    VALID = 1,
    INVALID = 2,
}
export interface IComboSelectionChangeEventArgs {
    oldSelection: any[];
    newSelection: any[];
    event?: Event;
}
export interface IComboItemAdditionEvent {
    oldCollection: any[];
    addedItem: any;
    newCollection: any[];
}
export declare class IgxComboComponent implements AfterViewInit, ControlValueAccessor, OnInit, OnDestroy {
    protected elementRef: ElementRef;
    protected cdr: ChangeDetectorRef;
    protected selectionAPI: IgxSelectionAPIService;
    ngControl: NgControl;
    /**
     * @hidden
     */
    customValueFlag: boolean;
    /**
     * @hidden
     */
    defaultFallbackGroup: string;
    /**
     * @hidden
     */
    protected stringFilters: typeof IgxStringFilteringOperand;
    /**
     * @hidden
     */
    protected boolenFilters: typeof IgxBooleanFilteringOperand;
    /**
     * @hidden
     */
    protected _filteringLogic: FilteringLogic;
    /**
     * @hidden
     */
    protected _filteringExpressions: any[];
    /**
     * @hidden
     */
    protected _sortingExpressions: any[];
    /**
     * @hidden
     */
    protected _groupKey: string | number;
    /**
     * @hidden
     */
    protected _valueKey: string | number;
    /**
     * @hidden
     */
    protected _displayKey: string | number;
    private _dataType;
    private _filteredData;
    private _children;
    private _dropdownContainer;
    private _searchInput;
    private _comboInput;
    private _valid;
    private _statusChanges$;
    private _width;
    private _positionCallback;
    private _onChangeCallback;
    private overlaySettings;
    private _value;
    private _searchValue;
    constructor(elementRef: ElementRef, cdr: ChangeDetectorRef, selectionAPI: IgxSelectionAPIService, ngControl: NgControl);
    /**
     * @hidden
     */
    dropdown: IgxComboDropDownComponent;
    /**
     * @hidden
     */
    selectAllCheckbox: IgxCheckboxComponent;
    /**
     * @hidden
     */
    /**
     * @hidden
     */
    searchInput: ElementRef<HTMLInputElement>;
    /**
     * @hidden
     */
    /**
     * @hidden
     */
    comboInput: ElementRef<HTMLInputElement>;
    /**
     * @hidden
     */
    protected primitiveTemplate: TemplateRef<any>;
    /**
     * @hidden
     */
    protected complexTemplate: TemplateRef<any>;
    /**
     * @hidden
     */
    emptyTemplate: TemplateRef<any>;
    /**
     * @hidden
     */
    headerTemplate: TemplateRef<any>;
    /**
     * @hidden
     */
    footerTemplate: TemplateRef<any>;
    /**
     * @hidden
     */
    itemTemplate: TemplateRef<any>;
    /**
     * @hidden
     */
    addItemTemplate: TemplateRef<any>;
    /**
     * @hidden
     */
    headerItemTemplate: TemplateRef<any>;
    /**
     * @hidden
     */
    /**
     * @hidden
     */
    protected dropdownContainer: ElementRef;
    /**
     * @hidden
     */
    /**
     * @hidden
     */
    children: QueryList<IgxDropDownItemBase>;
    /**
     * Emitted when item selection is changing, before the selection completes
     *
     * ```html
     * <igx-combo (onSelectionChange)='handleSelection()'></igx-combo>
     * ```
     */
    onSelectionChange: EventEmitter<IComboSelectionChangeEventArgs>;
    /**
     * Emitted before the dropdown is opened
     *
     * ```html
     * <igx-combo onOpening='handleOpening()'></igx-combo>
     * ```
     */
    onOpening: EventEmitter<{}>;
    /**
     * Emitted after the dropdown is opened
     *
     * ```html
     * <igx-combo (onOpened)='handleOpened()'></igx-combo>
     * ```
     */
    onOpened: EventEmitter<{}>;
    /**
     * Emitted before the dropdown is closed
     *
     * ```html
     * <igx-combo (onClosing)='handleClosing()'></igx-combo>
     * ```
     */
    onClosing: EventEmitter<{}>;
    /**
     * Emitted after the dropdown is closed
     *
     * ```html
     * <igx-combo (onClosed)='handleClosed()'></igx-combo>
     * ```
     */
    onClosed: EventEmitter<{}>;
    /**
     * Emitted when an item is being added to the data collection
     *
     * ```html
     * <igx-combo (onAddition)='handleAdditionEvent()'></igx-combo>
     * ```
     */
    onAddition: EventEmitter<IComboItemAdditionEvent>;
    /**
     * Emitted when an the search input's input event is triggered
     *
     * ```html
     * <igx-combo (onSearchInput)='handleSearchInputEvent()'></igx-combo>
     * ```
     */
    onSearchInput: EventEmitter<{}>;
    /**
     * Emitted when new chunk of data is loaded from the virtualization
     *
     * ```html
     * <igx-combo (onDataPreLoad)='handleDataPreloadEvent()'></igx-combo>
     * ```
     */
    onDataPreLoad: EventEmitter<any>;
    /**
     * Gets/gets combo id.
     *
     * ```typescript
     * // get
     * let id = this.combo.id;
     * ```
     *
     * ```html
     * <!--set-->
     * <igx-combo [id]='combo1'></igx-combo>
     * ```
    */
    id: string;
    /**
     * Sets the style width of the element
     *
     * ```typescript
     * // get
     * let myComboWidth = this.combo.width;
     * ```
     *
     * ```html
     * <!--set-->
     * <igx-combo [width]='250px'></igx-combo>
     * ```
     */
    width: string;
    /**
     * @hidden
     */
    readonly validClass: boolean;
    /**
     * @hidden
     */
    readonly invalidClass: boolean;
    /**
     * Sets the style height of the element
     *
     * ```typescript
     * // get
     * let myComboHeight = this.combo.height;
     * ```
     *
     * ```html
     * <!--set-->
     * <igx-combo [height]='400px'></igx-combo>
     * ```
     */
    height: string;
    /**
     * Controls whether custom values can be added to the collection
     *
     * ```typescript
     * // get
     * let comboAllowsCustomValues = this.combo.allowCustomValues;
     * ```
     *
     * ```html
     * <!--set-->
     * <igx-combo [allowCustomValues]='true'></igx-combo>
     * ```
     */
    allowCustomValues: boolean;
    /**
     * Configures the drop down list height
     *
     * ```typescript
     * // get
     * let myComboItemsMaxHeight = this.combo.itemsMaxHeight;
     * ```
     *
     * ```html
     * <!--set-->
     * <igx-combo [itemsMaxHeight]='320'></igx-combo>
     * ```
    */
    itemsMaxHeight: number;
    /**
     * Configures the drop down list width
     *
     * ```typescript
     * // get
     * let myComboItemsMaxWidth = this.combo.itemsMaxWidth;
     * ```
     *
     * ```html
     * <!--set-->
     * <igx-combo [itemsMaxWidth] = '80'></igx-combo>
     * ```
     */
    itemsMaxWidth: any;
    /**
     * Configures the drop down list item height
     *
     * ```typescript
     * // get
     * let myComboItemHeight = this.combo.itemHeight;
     * ```
     *
     * ```html
     * <!--set-->
     * <igx-combo [itemHeight]='32'></igx-combo>
     * ```
     */
    itemHeight: number;
    /**
     * @hidden
     */
    filteringLogic: FilteringLogic;
    /**
     * Defines the placeholder value for the combo value field
     *
     * ```typescript
     * // get
     * let myComboPlaceholder = this.combo.placeholder;
     * ```
     *
     * ```html
     * <!--set-->
     * <igx-combo [placeholder]='newPlaceHolder'></igx-combo>
     * ```
     */
    placeholder: string;
    /**
     * Defines the placeholder value for the combo dropdown search field
     *
     * ```typescript
     * // get
     * let myComboSearchPlaceholder = this.combo.searchPlaceholder;
     * ```
     *
     * ```html
     * <!--set-->
     * <igx-combo [searchPlaceholder]='newPlaceHolder'></igx-combo>
     * ```
     */
    searchPlaceholder: string;
    /**
     * Combo data source.
     *
     * ```html
     * <!--set-->
     * <igx-combo [data]='items'></igx-combo>
     * ```
     */
    data: any[];
    /**
     * Combo value data source propery.
     *
     * ```typescript
     * // get
     * let myComboValueKey = this.combo.valueKey;
     * ```
     *
     * ```html
     * <!--set-->
     * <igx-combo [valueKey]='myKey'></igx-combo>
     * ```
     */
    valueKey: string | number;
    /**
     * Combo text data source propery.
     *
     * ```typescript
     * // get
     * let myComboDisplayKey = this.combo.displayKey;
     *
     * // set
     * this.combo.displayKey = 'val';
     *
     * ```
     *
     * ```html
     * <!--set-->
     * <igx-combo [displayKey]='mydisplayKey'></igx-combo>
     * ```
     */
    displayKey: string | number;
    /**
     * Combo item group
     *
     * ```typescript
     * // get
     * let currentGroupKey = this.combo.groupKey;
     * ```
     */
    /**
     * Combo item group
     *
     * ```html
     * <!--set-->
     * <igx-combo [groupKey]='newGroupKey'></igx-combo>
     * ```
     */
    groupKey: string | number;
    /**
     * An @Input property that enabled/disables filtering in the list. The default is `true`.
     * ```html
     *<igx-combo [filterable]="'false'">
     * ```
     */
    filterable: boolean;
    /**
     * An @Input property that set aria-labelledby attribute
     * ```html
     *<igx-combo [ariaLabelledBy]="'label1'">
     * ```
     */
    ariaLabelledBy: string;
    /**
     * An @Input property that enabled/disables combo. The default is `false`.
     * ```html
     *<igx-combo [disabled]="'true'">
     * ```
     */
    disabled: boolean;
    /**
     * An @Input property that sets how the combo will be styled.
     * The allowed values are `line`, `box`, `border` and `search`. The default is `box`.
     * ```html
     *<igx-combo [type]="'line'">
     * ```
     */
    type: string;
    /**
     * @hidden
     */
    onBlur(event: any): void;
    private _hasValidators();
    onArrowDown(evt: any): void;
    /**
     * @hidden
     */
    onArrowUp(evt: any): void;
    /**
     * @hidden
     */
    onInputClick(evt: any): void;
    /**
     * Defines the current state of the virtualized data. It contains `startIndex` and `chunkSize`
     *
     * ```typescript
     * // get
     * let state = this.combo.virtualizationState;
     * ```
    */
    /**
     * Sets the current state of the virtualized data.
     *
     * ```typescript
     * // set
     * this.combo.virtualizationState(state);
     * ```
     */
    virtualizationState: IForOfState;
    /**
     * Gets total count of the virtual data items, when using remote service.
     *
     * ```typescript
     * // get
     * let count = this.combo.totalItemCount;
     * ```
    */
    /**
     * Sets total count of the virtual data items, when using remote service.
     *
     * ```typescript
     * // set
     * this.combo.totalItemCount(remoteService.count);
     * ```
     */
    totalItemCount: number;
    /**
     * Gets if control is valid, when used in a form
     *
     * ```typescript
     * // get
     * let valid = this.combo.valid;
     * ```
    */
    /**
     * Sets valid state of the combo
     *
     * ```typescript
     * // get
     * this.combo.valid(IgxComboState.INVALID);
     * ```
     */
    valid: IgxComboState;
    /**
     * @hidden
     */
    readonly values: any[];
    /**
     * @hidden
     */
    /**
     * @hidden
     */
    filteringExpressions: any[];
    /**
     * @hidden
     */
    /**
     * @hidden
     */
    sortingExpressions: any[];
    /**
     * @hidden
     */
    protected clearSorting(field?: string | number): void;
    /**
     * Combo value
     *
     * ```typescript
     * // get
     * let comboValue = this.combo.value;
     * ```
     */
    /**
     * Combo value
     *
     * ```html
     * <!--set-->
     * <igx-combo [value]='newValue'></igx-combo>
     * ```
     */
    value: string;
    /**
     * @hidden
     */
    /**
     * @hidden
     */
    searchValue: string;
    /**
     * @hidden
     */
    /**
     * @hidden
     */
    filteredData: any[];
    /**
     * @hidden
     */
    handleKeyUp(evt: any): void;
    /**
     * @hidden
     */
    handleKeyDown(evt: any): void;
    private checkMatch();
    /**
     * @hidden
     */
    handleInputChange(event?: any): void;
    /**
     * @hidden
     */
    sort(fieldName: string | number, dir?: SortingDirection, ignoreCase?: boolean): void;
    /**
     * @hidden
     */
    getItemDataByValueKey(val: any): any;
    /**
     * @hidden
     */
    protected prepare_sorting_expression(state: any, fieldName: any, dir: any, ignoreCase: any): void;
    /**
     * @hidden
     */
    readonly dataType: string;
    private changeSelectedItem(newItem, select?);
    /**
     * @hidden
     */
    setSelectedItem(itemID: any, select?: boolean): void;
    /**
     * @hidden
     */
    isItemSelected(item: any): boolean;
    /**
     * @hidden
     */
    protected triggerSelectionChange(newSelection: any): void;
    /**
     * @hidden
     */
    triggerCheck(): void;
    /**
     * @hidden
     */
    isAddButtonVisible(): boolean;
    /**
     * @hidden
     */
    handleSelectAll(evt: any): void;
    /**
     * @hidden
     */
    addItemToCollection(): boolean;
    /**
     * @hidden
     */
    protected prepare_filtering_expression(searchVal: any, condition: any, ignoreCase: any, fieldName?: any): void;
    protected onStatusChanged(): void;
    /**
     * @hidden
     */
    filter(term: any, condition: any, ignoreCase: any, valueKey?: any): void;
    /**
     * @hidden
     */
    ngOnInit(): void;
    /**
     * @hidden
     */
    ngAfterViewInit(): void;
    ngOnDestroy(): void;
    /**
     * @hidden
     */
    dataLoading(event: any): void;
    /**
     * @hidden
     */
    writeValue(value: any): void;
    /**
     * @hidden
     */
    registerOnChange(fn: any): void;
    /**
     * @hidden
     */
    registerOnTouched(fn: any): void;
    setDisabledState(isDisabled: boolean): void;
    /**
     * @hidden
     */
    readonly template: TemplateRef<any>;
    /**
     * @hidden
     */
    readonly context: any;
    /**
     * @hidden
     */
    handleClearItems(event: any): void;
    /**
     * A method that opens/closes the dialog.
     *
     *```html
     *<button (click)="combo.toggle()>Toggle Combo</button>
     *<igx-combo #combo></igx-combo>
     *```
     */
    toggle(): void;
    /**
     * A method that opens the dialog.
     *
     *```html
     *<button (click)="combo.open()>Open Combo</button>
     *<igx-combo #combo></igx-combo>
     *```
     */
    open(): void;
    /**
     * A method that closes the dialog.
     *
     *```html
     *<button (click)="combo.close()>Close Combo</button>
     *<igx-combo #combo></igx-combo>
     *```
     */
    close(): void;
    /**
     * Gets drop down state.
     *
     * ```typescript
     * // get
     * let state = this.combo.collapsed;
     * ```
    */
    readonly collapsed: boolean;
    /**
     * Get current selection state
     * @returns Array of selected items
     * ```typescript
     * // get
     * let selectedItems = this.combo.selectedItems();
     * ```
     */
    selectedItems(): any[];
    /**
     * Select defined items
     * @param newItems new items to be selected
     * @param clearCurrentSelection if true clear previous selected items
     * ```typescript
     * // get
     * this.combo.selectItems(["New York", "New Jersey"]);
     * ```
     */
    selectItems(newItems: Array<any>, clearCurrentSelection?: boolean): void;
    /**
     * Deselect defined items
     * @param items items to deselected
     * ```typescript
     * // get
     * this.combo.deselectItems(["New York", "New Jersey"]);
     * ```
     */
    deselectItems(items: Array<any>): void;
    /**
     * Select all (filtered) items
     * @param ignoreFilter if set to true, selects all items, otherwise selects only the filtered ones.
     * ```typescript
     * // get
     * this.combo.selectAllItems();
     * ```
     */
    selectAllItems(ignoreFilter?: boolean): void;
    /**
     * Deselect all (filtered) items
     * @param ignoreFilter if set to true, deselects all items, otherwise deselects only the filtered ones.
     * ```typescript
     * // get
     * this.combo.deselectAllItems();
     * ```
     */
    deselectAllItems(ignoreFilter?: boolean): void;
}
export declare class IgxComboModule {
}
