import { AfterViewInit, ChangeDetectorRef, ElementRef, EventEmitter, OnChanges, OnDestroy, OnInit, SimpleChanges, TemplateRef, TrackByFunction } from '@angular/core';
import { ControlValueAccessor, FormControl } from '@angular/forms';
import { Observable } from 'rxjs';
import { RecordCombobox } from '../../models/combobox/record-combobox';
import * as i0 from "@angular/core";
export declare class LibComboboxReworkComponent<T = RecordCombobox> implements ControlValueAccessor, OnInit, AfterViewInit, OnDestroy, OnChanges {
    private _cdr;
    private _elementRef;
    private mutationObserver;
    /** Valor interno do componente */
    private _value;
    private _list$;
    private _search$;
    private _onTouched;
    private _onChange;
    private _destroy$;
    get list(): T[];
    set list(value: T[]);
    placeholder: string;
    searchPlaceholder: string;
    noResultsText: string;
    disabled: boolean;
    multiple: boolean;
    innerFilter: boolean;
    customLabel: string;
    customValue: string;
    optionTemplate?: TemplateRef<any>;
    leftButtonTemplate?: TemplateRef<any>;
    rightButtonTemplate?: TemplateRef<any>;
    toggleButton?: ElementRef<HTMLButtonElement>;
    selectionChange: EventEmitter<any>;
    filterChange: EventEmitter<any>;
    filterButtonClick: EventEmitter<string | null>;
    selectedValues: T[] | null;
    get value(): T | T[] | null;
    set value(val: T | T[] | null);
    invalid: boolean;
    isOpen: boolean;
    searchControl: FormControl<string | null>;
    filteredItems$: Observable<T[]>;
    compare: (a: T, b: T) => boolean;
    displayWith: (item: T) => string;
    displayValue(): string;
    trackByFn: TrackByFunction<T | any>;
    constructor(_cdr: ChangeDetectorRef, _elementRef: ElementRef);
    ngOnInit(): void;
    ngAfterViewInit(): void;
    ngAfterContentInit(): void;
    ngOnChanges(changes: SimpleChanges): void;
    ngOnDestroy(): void;
    onResize(): void;
    private filterItems;
    select(item: T, emitEvent?: boolean): void;
    isSelected(item: T): boolean;
    /**
     * "Harmoniza" um valor primitivo de "ID" e encontra o seu item correspondente na lista
     * @param val Valor a ser resolvido
     * @returns O valor infromado, o item correspondente encontrado ou null
    */
    private resolveValue;
    /** Formata o valor de retorno com base na configuração de retorno */
    private formatReturn;
    writeValue(obj: any, emitEvent?: boolean): void;
    registerOnChange(fn: (value: T | T[] | null) => void): void;
    registerOnTouched(fn: () => void): void;
    setDisabledState?(isDisabled: boolean): void;
    toggleDropdown(): void;
    closeDropdown(): void;
    onBlurOutside(event: FocusEvent): void;
    /** Define a largura máxima em pixels com base na largura do container pai
     *
     * Esta abordagem foi necessária pois o elemento em questão constantemente aumentava sua largura para acomodar o seu valor interno, independente das regras CSS impostas.
     *
     * A solução mais rápida era definir uma largura em pixels fixa na inicialização, o que não é o ideal por questões de responsividade, portanto este método é chamado em caso de resize da tela também
    */
    private setMaxWidth;
    private registerObserver;
    private checkInvalidClass;
    static ɵfac: i0.ɵɵFactoryDeclaration<LibComboboxReworkComponent<any>, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<LibComboboxReworkComponent<any>, "lib-combobox-rework", never, { "list": { "alias": "list"; "required": true; }; "placeholder": { "alias": "placeholder"; "required": false; }; "searchPlaceholder": { "alias": "searchPlaceholder"; "required": false; }; "noResultsText": { "alias": "noResultsText"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "multiple": { "alias": "multiple"; "required": false; }; "innerFilter": { "alias": "innerFilter"; "required": false; }; "customLabel": { "alias": "customLabel"; "required": false; }; "customValue": { "alias": "customValue"; "required": false; }; }, { "selectionChange": "selectionChange"; "filterChange": "filterChange"; "filterButtonClick": "filterButtonClick"; }, ["optionTemplate", "leftButtonTemplate", "rightButtonTemplate"], never, true, never>;
}
