import { ElementRef, OnInit, QueryList, EventEmitter, ChangeDetectorRef } from '@angular/core';
import { CancelableEventArgs } from '../core/utils';
import { IgxSelectionAPIService } from '../core/selection';
import { OverlaySettings } from '../services';
import { IToggleView } from '../core/navigation';
import { IgxToggleDirective } from '../directives/toggle/toggle.directive';
import { ISelectionEventArgs, Navigate } from './drop-down.common';
/** @hidden TODO: refactor */
export declare abstract class IgxDropDownBase implements OnInit, IToggleView {
    protected elementRef: ElementRef;
    protected cdr: ChangeDetectorRef;
    protected selection: IgxSelectionAPIService;
    private _initiallySelectedItem;
    protected _focusedItem: any;
    private _width;
    private _height;
    private _id;
    protected children: QueryList<IgxDropDownItemBase>;
    protected toggleDirective: IgxToggleDirective;
    /**
     * Emitted when item selection is changing, before the selection completes
     *
     * ```html
     * <igx-drop-down (onSelection)='handleSelection()'></igx-drop-down>
     * ```
     */
    onSelection: EventEmitter<ISelectionEventArgs>;
    /**
     * Emitted before the dropdown is opened
     *
     * ```html
     * <igx-drop-down (onOpening)='handleOpening()'></igx-drop-down>
     * ```
     */
    onOpening: EventEmitter<CancelableEventArgs>;
    /**
     * Emitted after the dropdown is opened
     *
     * ```html
     * <igx-drop-down (onOpened)='handleOpened()'></igx-drop-down>
     * ```
     */
    onOpened: EventEmitter<void>;
    /**
     * Emitted before the dropdown is closed
     *
     * ```html
     * <igx-drop-down (onClosing)='handleClosing()'></igx-drop-down>
     * ```
     */
    onClosing: EventEmitter<CancelableEventArgs>;
    /**
     * Emitted after the dropdown is closed
     *
     * ```html
     * <igx-drop-down (onClosed)='handleClosed()'></igx-drop-down>
     * ```
     */
    onClosed: EventEmitter<void>;
    /**
     *  Gets the width of the drop down
     *
     * ```typescript
     * // get
     * let myDropDownCurrentWidth = this.dropdown.width;
     * ```
     */
    /**
    * Sets the width of the drop down
    *
    * ```html
    * <!--set-->
    * <igx-drop-down [width]='160px'></igx-drop-down>
    * ```
    */
    width: any;
    /**
     * Gets the height of the drop down
     *
     * ```typescript
     * // get
     * let myDropDownCurrentHeight = this.dropdown.height;
     * ```
     */
    /**
    * Sets the height of the drop down
    *
    * ```html
    * <!--set-->
    * <igx-drop-down [height]='400px'></igx-drop-down>
    * ```
    */
    height: any;
    /**
     * Gets/sets whether items take focus. Disabled by default.
     * When enabled, drop down items gain tab index and are focused when active -
     * this includes activating the selected item when opening the drop down and moving with keyboard navigation.
     *
     * Note: Keep that focus shift in mind when using the igxDropDownItemNavigation directive
     * and ensure it's placed either on each focusable item or a common ancestor to allow it to handle keyboard events.
     *
     * ```typescript
     * // get
     * let dropDownAllowsItemFocus = this.dropdown.allowItemsFocus;
     * ```
     *
     * ```html
     * <!--set-->
     * <igx-drop-down [allowItemsFocus]='true'></igx-drop-down>
     * ```
     */
    allowItemsFocus: boolean;
    /**
     * Gets the drop down's id
     *
     * ```typescript
     * // get
     * let myDropDownCurrentId = this.dropdown.id;
     * ```
     */
    /**
    * Sets the drop down's id
    *
    * ```html
    * <!--set-->
    * <igx-drop-down [id]='newDropDownId'></igx-drop-down>
    * ```
    */
    id: string;
    cssClass: string;
    /**
     * Gets/Sets the drop down's container max height.
     *
     * ```typescript
     * // get
     * let maxHeight = this.dropdown.maxHeight;
     * ```
     *
     * ```html
     * <!--set-->
     * <igx-drop-down [maxHeight]='200px'></igx-drop-down>
     * ```
     */
    maxHeight: any;
    /**
     * Gets if the dropdown is collapsed
     *
     * ```typescript
     * let isCollapsed = this.dropdown.collapsed;
     * ```
     */
    readonly collapsed: boolean;
    /**
     * Get currently selected item
     *
     * ```typescript
     * let currentItem = this.dropdown.selectedItem;
     * ```
     */
    readonly selectedItem: any;
    /**
     * Get all non-header items
     *
     * ```typescript
     * let myDropDownItems = this.dropdown.items;
     * ```
     */
    readonly items: IgxDropDownItemBase[];
    /**
     * Get all header items
     *
     * ```typescript
     * let myDropDownHeaderItems = this.dropdown.headers;
     * ```
     */
    readonly headers: IgxDropDownItemBase[];
    /**
     * Get dropdown html element
     *
     * ```typescript
     * let myDropDownElement = this.dropdown.element;
     * ```
     */
    readonly element: any;
    /**
     * @hidden
     * @internal
     */
    disableTransitions: boolean;
    /**
     * Get dropdown's html element of it scroll container
     */
    protected readonly scrollContainer: any;
    constructor(elementRef: ElementRef, cdr: ChangeDetectorRef, selection: IgxSelectionAPIService);
    /**
     * Select an item by index
     * @param index of the item to select
     */
    setSelectedItem(index: number): void;
    /**
     * Opens the dropdown
     *
     * ```typescript
     * this.dropdown.open();
     * ```
     */
    open(overlaySettings?: OverlaySettings): void;
    /**
     * Closes the dropdown
     *
     * ```typescript
     * this.dropdown.close();
     * ```
     */
    close(): void;
    /**
     * Toggles the dropdown
     *
     * ```typescript
     * this.dropdown.toggle();
     * ```
     */
    toggle(overlaySettings?: OverlaySettings): void;
    /**
     * @hidden
     */
    /**
    * @hidden
    */
    focusedItem: IgxDropDownItemBase;
    /**
     * @hidden
     */
    protected navigate(direction: Navigate, currentIndex?: number): void;
    /**
     * @hidden
     */
    navigateFirst(): void;
    /**
     * @hidden
     */
    navigateLast(): void;
    /**
     * @hidden
     */
    navigateNext(): void;
    /**
     * @hidden
     */
    navigatePrev(): void;
    /**
     * @hidden
     */
    ngOnInit(): void;
    /**
     * @hidden
     */
    onToggleOpening(e: CancelableEventArgs): void;
    /**
     * @hidden
     */
    onToggleOpened(): void;
    /**
     * @hidden
     */
    onToggleClosing(e: CancelableEventArgs): void;
    /**
     * @hidden
     */
    onToggleClosed(): void;
    /**
     * @hidden
     */
    protected scrollToItem(item: IgxDropDownItemBase): void;
    protected scrollToHiddenItem(newItem: IgxDropDownItemBase): void;
    /**
     * @hidden
     */
    selectItem(item: IgxDropDownItemBase, event?: any): void;
    /**
     * @hidden
     */
    protected changeSelectedItem(newSelection?: IgxDropDownItemBase): boolean;
    /**
     * @hidden
     */
    protected calculateScrollPosition(item: IgxDropDownItemBase): number;
    private getNearestSiblingFocusableItemIndex;
    /**
     * @hidden
     * @internal
     */
    navigateItem(newIndex: number, direction?: Navigate): void;
    /**
     * @hidden
     */
    getFirstSelectableItem(): IgxDropDownItemBase;
}
/**
 * The `<igx-drop-down-item>` is a container intended for row items in
 * a `<igx-drop-down>` container.
 */
export declare abstract class IgxDropDownItemBase {
    dropDown: IgxDropDownBase;
    protected elementRef: ElementRef;
    /**
     * @hidden
     */
    protected _isFocused: boolean;
    /**
     * @hidden
     */
    readonly itemID: void;
    /**
     * Gets/sets the value of the item if the item is databound
     *
     * ```typescript
     * // usage in IgxDropDownItemComponent
     * // get
     * let mySelectedItemValue = this.dropdown.selectedItem.value;
     *
     * // set
     * let mySelectedItem = this.dropdown.selectedItem;
     * mySelectedItem.value = { id: 123, name: 'Example Name' }
     *
     * // usage in IgxComboItemComponent
     * // get
     * let myComboItemValue = this.combo.items[0].value;
     * ```
     */
    value: any;
    /**
     * @hidden
     */
    readonly itemStyle: boolean;
    /**
     * Gets if the item is the currently selected one in the dropdown
     *
     * ```typescript
     *  let mySelectedItem = this.dropdown.selectedItem;
     *  let isMyItemSelected = mySelectedItem.isSelected; // true
     * ```
     */
    readonly isSelected: boolean;
    /**
     * @hidden
     */
    readonly selectedStyle: boolean;
    /**
     * Sets/gets if the given item is focused
     * ```typescript
     *  let mySelectedItem = this.dropdown.selectedItem;
     *  let isMyItemFocused = mySelectedItem.isFocused;
     * ```
     */
    /**
    * ```html
    *  <igx-drop-down-item *ngFor="let item of items" isFocused={{!item.isFocused}}>
    *      <div>
    *          {{item.field}}
    *      </div>
    *  </igx-drop-down-item>
    * ```
    */
    isFocused: boolean;
    /**
     * Sets/gets if the given item is header
     * ```typescript
     *  // get
     *  let mySelectedItem = this.dropdown.selectedItem;
     *  let isMyItemHeader = mySelectedItem.isHeader;
     * ```
     *
     * ```html
     *  <!--set-->
     *  <igx-dropdown-item *ngFor="let item of items">
     *      <div *ngIf="items.indexOf(item) === 5; then item.isHeader = true">
     *          {{item.field}}
*           </div>
     *  </igx-drop-down-item>
     * ```
     */
    isHeader: boolean;
    /**
     * Sets/gets if the given item is disabled
     *
     * ```typescript
     *  // get
     *  let mySelectedItem = this.dropdown.selectedItem;
     *  let myItemIsDisabled = mySelectedItem.disabled;
     * ```
     *
     * ```html
     *  <igx-drop-down-item *ngFor="let item of items" disabled={{!item.disabled}}>
     *      <div>
     *          {{item.field}}
     *      </div>
     *  </igx-drop-down-item>
     * ```
     */
    disabled: boolean;
    /**
     * @hidden
     */
    readonly setTabIndex: number;
    /**
     * Gets item index
     * @hidden
     */
    readonly index: number;
    /**
     * Gets item element height
     * @hidden
     */
    readonly elementHeight: number;
    /**
     * Get item html element
     * @hidden
     */
    readonly element: ElementRef<any>;
    constructor(dropDown: IgxDropDownBase, elementRef: ElementRef);
    /**
     * @hidden
     */
    clicked(event: any): void;
    /**
     * @hidden
     */
    markItemSelected(): void;
}
