import { ChangeDetectorRef, ElementRef, EventEmitter, OnInit, QueryList } from '@angular/core';
import { IgxSelectionAPIService } from '../core/selection';
import { IgxToggleDirective } from '../directives/toggle/toggle.directive';
import { IgxDropDownItemBase } from './drop-down-item.component';
import { OverlaySettings } from '../services';
import { IToggleView } from '../core/navigation';
export interface ISelectionEventArgs {
    oldSelection: IgxDropDownItemBase;
    newSelection: IgxDropDownItemBase;
}
export declare enum Navigate {
    Up = -1,
    Down = 1,
}
/**
 * **Ignite UI for Angular DropDown** -
 * [Documentation](https://www.infragistics.com/products/ignite-ui-angular/angular/components/drop-down.html)
 *
 * The Ignite UI for Angular Drop Down displays a scrollable list of items which may be visually grouped and
 * supports selection of a single item. Clicking or tapping an item selects it and closes the Drop Down
 *
 * Example:
 * ```html
 * <igx-drop-down>
 *   <igx-drop-down-item *ngFor="let item of items" disabled={{item.disabled}} isHeader={{item.header}}>
 *     {{ item.value }}
 *   </igx-drop-down-item>
 * </igx-drop-down>
 * ```
 */
export declare class IgxDropDownBase implements OnInit, IToggleView {
    protected elementRef: ElementRef;
    protected cdr: ChangeDetectorRef;
    protected selectionAPI: 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<{}>;
    /**
     * Emitted after the dropdown is opened
     *
     * ```html
     * <igx-drop-down (onOpened)='handleOpened()'></igx-drop-down>
     * ```
     */
    onOpened: EventEmitter<{}>;
    /**
     * Emitted before the dropdown is closed
     *
     * ```html
     * <igx-drop-down (onClosing)='handleClosing()'></igx-drop-down>
     * ```
     */
    onClosing: EventEmitter<{}>;
    /**
     * Emitted after the dropdown is closed
     *
     * ```html
     * <igx-drop-down (onClosed)='handleClosed()'></igx-drop-down>
     * ```
     */
    onClosed: EventEmitter<{}>;
    /**
     *  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 will be able to take focus. If set to true, default value,
     * user will be able to use keyboard navigation.
     *
     * ```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;
    /**
     * 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;
    /**
     * Get dropdown html element
     */
    protected readonly scrollContainer: any;
    constructor(elementRef: ElementRef, cdr: ChangeDetectorRef, selectionAPI: 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;
    focusedItem: any;
    protected navigate(direction: Navigate, currentIndex?: number): void;
    navigateFirst(): void;
    navigateLast(): void;
    navigateNext(): void;
    navigatePrev(): void;
    /**
     * @hidden
     */
    ngOnInit(): void;
    /**
     * @hidden
     */
    onToggleOpening(): void;
    /**
     * @hidden
     */
    onToggleOpened(): void;
    /**
     * @hidden
     */
    onToggleClosing(): void;
    /**
     * @hidden
     */
    onToggleClosed(): void;
    protected scrollToItem(item: IgxDropDownItemBase): void;
    scrollToHiddenItem(newItem: IgxDropDownItemBase): void;
    selectItem(item: IgxDropDownItemBase): void;
    protected changeSelectedItem(newSelection?: IgxDropDownItemBase): void;
    protected calculateScrollPosition(item: IgxDropDownItemBase): number;
    private getNearestSiblingFocusableItemIndex(startIndex, direction);
    protected navigateItem(newIndex: number, direction?: Navigate): void;
}
export declare class IgxDropDownItemNavigationDirective {
    private element;
    dropdown: IgxDropDownComponent;
    private _target;
    constructor(element: ElementRef, dropdown: IgxDropDownComponent);
    target: IgxDropDownBase;
    onEscapeKeyDown(event: any): void;
    onSpaceKeyDown(event: any): void;
    onSpaceKeyDownIE(event: any): void;
    onEnterKeyDown(event: any): void;
    onArrowDownKeyDown(event: any): void;
    onArrowUpKeyDown(event: any): void;
    onEndKeyDown(event: any): void;
    onHomeKeyDown(event: any): void;
}
export declare class IgxDropDownComponent extends IgxDropDownBase {
    protected elementRef: ElementRef;
    protected cdr: ChangeDetectorRef;
    protected selectionAPI: IgxSelectionAPIService;
    constructor(elementRef: ElementRef, cdr: ChangeDetectorRef, selectionAPI: IgxSelectionAPIService);
}
export declare class IgxDropDownModule {
}
