import { AfterViewInit, DoCheck, ElementRef, OnChanges, OnDestroy, SimpleChanges } from '@angular/core';
import { Observable } from 'rxjs';
import { PoMultiselectOption } from './interfaces/po-multiselect-option.interface';
import { PoMultiselectBaseComponent } from './po-multiselect-base.component';
import { PoMultiselectFilterService } from './po-multiselect-filter.service';
import { PoMultiselectOptionTemplateDirective } from './po-multiselect-option-template/po-multiselect-option-template.directive';
import { PoHelperComponent } from '../../po-helper';
/**
 * @docsExtends PoMultiselectBaseComponent
 *
 * @example
 *
 * <example name="po-multiselect-basic" title="PO Multiselect Basic">
 *   <file name="sample-po-multiselect-basic/sample-po-multiselect-basic.component.html"> </file>
 *   <file name="sample-po-multiselect-basic/sample-po-multiselect-basic.component.ts"> </file>
 * </example>
 *
 * <example name="po-multiselect-labs" title="PO Multiselect Labs">
 *   <file name="sample-po-multiselect-labs/sample-po-multiselect-labs.component.html"> </file>
 *   <file name="sample-po-multiselect-labs/sample-po-multiselect-labs.component.ts"> </file>
 * </example>
 *
 * <example name="po-multiselect-vacation" title="PO Multiselect - Vacation">
 *   <file name="sample-po-multiselect-vacation/sample-po-multiselect-vacation.component.html"> </file>
 *   <file name="sample-po-multiselect-vacation/sample-po-multiselect-vacation.component.ts"> </file>
 * </example>
 *
 * <example name="po-multiselect-vacation-reactive-form" title="PO Multiselect - Vacation Reactive Form">
 *   <file name="sample-po-multiselect-vacation-reactive-form/sample-po-multiselect-vacation-reactive-form.component.html"> </file>
 *   <file name="sample-po-multiselect-vacation-reactive-form/sample-po-multiselect-vacation-reactive-form.component.ts"> </file>
 * </example>
 *
 * <example name="po-multiselect-template" title="PO Multiselect - Template">
 *   <file name="sample-po-multiselect-template/sample-po-multiselect-template.component.html"> </file>
 *   <file name="sample-po-multiselect-template/sample-po-multiselect-template.component.ts"> </file>
 *   <file name="sample-po-multiselect-template/sample-po-multiselect-template.component.css"> </file>
 * </example>
 *
 * <example name="po-multiselect-heroes" title="PO Multiselect - Heroes - using API">
 *   <file name="sample-po-multiselect-heroes/sample-po-multiselect-heroes.component.html"> </file>
 *   <file name="sample-po-multiselect-heroes/sample-po-multiselect-heroes.component.ts"> </file>
 *   <file name="sample-po-multiselect-heroes/sample-po-multiselect-heroes.service.ts"> </file>
 * </example>
 *
 * <example name="po-multiselect-any-array" title="PO Multiselect - Array Any">
 *   <file name="sample-po-multiselect-any-array/sample-po-multiselect-any-array.component.html"> </file>
 *   <file name="sample-po-multiselect-any-array/sample-po-multiselect-any-array.component.ts"> </file>
 * </example>
 *
 */
export declare class PoMultiselectComponent extends PoMultiselectBaseComponent implements AfterViewInit, DoCheck, OnDestroy, OnChanges {
    private readonly renderer;
    private readonly changeDetector;
    private readonly el;
    private readonly controlPosition;
    defaultService: PoMultiselectFilterService;
    multiselectOptionTemplate: PoMultiselectOptionTemplateDirective;
    dropdownElement: ElementRef;
    dropdown: any;
    iconElement: ElementRef;
    outerContainer: ElementRef;
    helperEl?: PoHelperComponent;
    literalsTag: any;
    dropdownIcon: string;
    dropdownOpen: boolean;
    initialized: boolean;
    hasMoreTag: boolean;
    timeoutResize: any;
    visibleElement: boolean;
    containerWidth: number;
    private subscription;
    private enterCloseTag;
    private initCalculateItems;
    private isCalculateVisibleItems;
    private cacheOptions;
    private focusOnTag;
    constructor();
    ngAfterViewInit(): void;
    ngOnChanges(changes: SimpleChanges): void;
    ngDoCheck(): void;
    ngOnDestroy(): void;
    emitAdditionalHelp(): void;
    /**
     * Função que atribui foco ao componente.
     *
     * Para utilizá-la é necessário ter a instância do componente no DOM, podendo ser utilizado o ViewChild da seguinte forma:
     *
     * ```
     * import { PoMultiselectComponent } from '@po-ui/ng-components';
     *
     * ...
     *
     * @ViewChild(PoMultiselectComponent, { static: true }) multiselect: PoMultiselectComponent;
     *
     * focusMultiselect() {
     *   this.multiselect.focus();
     * }
     * ```
     */
    focus(): void;
    getAdditionalHelpTooltip(): string;
    getInputWidth(): number;
    getTagsWidth(): any[];
    getErrorPattern(): string;
    hasInvalidClass(): any;
    calculateVisibleItems(): void;
    changeItems(changedItems: any): void;
    updateVisibleItems(): void;
    debounceResize(): void;
    onBlur(event: any): void;
    onKeyDown(event?: any): void;
    toggleDropdownVisibility(): void;
    onKeyDownDropdown(event: KeyboardEvent, index: number): void;
    openDropdown(toOpen: any): void;
    controlDropdownVisibility(toOpen: boolean): void;
    scrollToSelectedOptions(): void;
    setVisibleOptionsDropdown(options: any): void;
    changeSearch(event: any): void;
    focusOnFirstItem(): void;
    closeTag(value: any, event: any): void;
    /**
     * Método que exibe `p-helper` ou executa a ação definida em `p-helper{eventOnClick}` ou em `p-additionalHelp`.
     * Para isso, será necessário configurar uma tecla de atalho utilizando o evento `p-keydown`.
     *
     * > Exibe ou oculta o conteúdo do componente `po-helper` quando o componente estiver com foco.
     *
     * ```
     * // Exemplo com p-label e p-helper
     * <po-multiselect
     *  #multiselect
     *  ...
     *  p-label="Label do multiselect"
     *  [p-helper]="helperOptions"
     *  (p-keydown)="onKeyDown($event, multiselect)"
     * ></po-multiselect>
     * ```
     * ```
     * ...
     * onKeyDown(event: KeyboardEvent, inp: PoMultiselectComponent): void {
     *  if (event.code === 'F9') {
     *    inp.showAdditionalHelp();
     *  }
     * }
     * ```
     */
    showAdditionalHelp(): boolean;
    wasClickedOnToggle(event: MouseEvent): void;
    applyFilter(value?: string): Observable<Array<PoMultiselectOption | any>>;
    setHelper(label?: string, additionalHelpTooltip?: string): {
        hideAdditionalHelp: boolean;
        helperSettings?: any;
    };
    private applyFilterInFirstClick;
    private setOptionsByApplyFilter;
    private adjustContainerPosition;
    private close;
    private focusOnNextTag;
    private focusOnRemoveTag;
    handleKeyboardNavigationTag(initialIndex?: number): void;
    private setTabIndex;
    private handleArrowLeft;
    private handleArrowRight;
    private handleKeyDown;
    private initializeTagRemoveElements;
    private initializeListeners;
    private isAdditionalHelpEventTriggered;
    private readonly onScroll;
    private open;
    private removeListeners;
    private setContainerWidth;
    private setPositionDropdown;
}
