import { AfterViewInit, EventEmitter, OnChanges, OnDestroy, OnInit, SimpleChanges } from '@angular/core';
import { AbstractControl, FormControl } from '@angular/forms';
import { RecordCombobox } from '../../models/combobox/record-combobox';
import * as i0 from "@angular/core";
/**
 * @component LibComboboxComponent
 * @selector lib-combobox
 *
 * @description
 * O componente LibComboboxComponent é projetado para fornecer aos usuários uma interface para pesquisar e selecionar itens de uma lista.
 * Ele suporta a filtragem de itens com base na entrada do usuário, permitindo uma seleção mais fácil em listas extensas.
 *
 * ## Funcionalidades:
 * - Pesquisa e filtragem de itens na lista do combobox.
 * - Seleção de itens com feedback visual.
 * - Emissão de eventos personalizados para interações do usuário, como recarregar a lista ou selecionar um item.
 * - Ajuste dinâmico da largura do dropdown para corresponder ao input principal.
 * - Inicialização de um valor selecionado, se fornecido.
 *
 * ## Inputs:
 * - `control` (FormControl | AbstractControl): Control para seleção dos valores, atualizará automaticamente o control do componente pai também
 * - `comboboxList` (RecordCombobox[]): Lista de registros que serão exibidos no combo, enquanto eles estiverem carregando será exibido um spinner
 * - `labelText` (string): Texto do rótulo que será exibido acima do combo. Caso não informado nada será exibido
 * - `disabled` (boolean): Define se o campo está desabilitado. Deve ser usado para validações de habilitação dinâmica do campo
 * - `libRequired` (boolean): Define se o campo é obrigatório, vai exibir o '*' vermelho ao lado do label (se ele estiver presente)
 * - `mainInputPlaceholder` (string): Placeholder do campo principal do combo
 * - `searchInputPlaceholder` (string): Placeholder do campo de pesquisa dentro do combo
 * - `colorTheme` ("primary" | "secondary" | "success" | "danger" | "warning" | "info" | "light" | "dark"): Define o tema de cor do componente, como "primary", "success", ou "danger"
 * - `returnRecord` (boolean): Define se o tipo de retorno ao selecionar uma opção será o Record inteiro ou apenas o ID
 *
 * ## Outputs:
 * - `onReloadList` (EventEmitter<string>): Evento emitido quando a lista precisa ser recarregada.
 */
export declare class LibComboboxComponent implements OnInit, AfterViewInit, OnDestroy, OnChanges {
    protected textoPesquisa: string;
    protected get ariaExpanded(): boolean;
    protected set ariaExpanded(value: boolean);
    protected innerControl: FormControl;
    protected invalidControl: boolean;
    protected isRequired: boolean;
    protected invalid: boolean;
    protected dirty: boolean;
    protected touched: boolean;
    protected comboboxID: string;
    protected labelID: string;
    private _labelText;
    private _disabled?;
    private _ariaExpanded;
    private _subscription;
    private _outerControl;
    /** (obrigatório) Control para seleção dos valores, atualizará automaticamente o control do componente pai também
     * @alias 'control'
     * @type {FormControl<any> | AbstractControl<any>} */
    get control(): FormControl<unknown>;
    set control(value: FormControl<unknown> | AbstractControl<unknown>);
    /** (obrigatório) Lista de registros que serão exibidos no combo, enquanto eles estiverem carregando será exibido um spinner
     * @alias 'list'
     * @type {RecordCombobox[]} */
    list?: RecordCombobox[];
    /** (opcional) Texto do rótulo que será exibido acima do combo. Caso não informado nada será exibido
     * @type {string | null | undefined} */
    get labelText(): string | null | undefined;
    set labelText(value: string | null | undefined);
    /** (opcional) Texto ou caractere separador entre a informação de ID e LABEL
     * @example " - "
     * @type {string} */
    separator?: string;
    /** (opcional) Define se o campo é obrigatório, vai exibir o '*' vermelho ao lado do label (se ele estiver presente)
     * @type {boolean} */
    libRequired?: boolean;
    /** (opcional) Define se o campo está desabilitado. Deve ser usado para validações de habilitação dinâmica do campo
     * @type {boolean}
     * @default false */
    get disabled(): boolean;
    set disabled(value: boolean | undefined);
    /** (opcional) Placeholder do campo principal do combo
     * @alias 'mainPlaceholder'
     * @type {string}
     * @default "Selecione uma opção..." */
    mainPlaceholder?: string;
    /** (opcional) Placeholder do campo de pesquisa dentro do combo
     * @alias 'searchPlaceholder'
     * @type {string}
     * @default "Pesquisa..." */
    searchPlaceholder?: string;
    /** (opcional) Define o tema de cor do componente, como "primary", "success", ou "danger"
     * @alias 'theme'
     * @type {string}
     * @default "primary"
    */
    theme?: string;
    /** (opcional) Define se o tipo de retorno ao selecionar uma opção será o Record inteiro ou apenas o ID.
     * @type {boolean}
     * @default false
    */
    returnRecord?: boolean;
    /** (opcional) Define se o código extra chamado 'AdditionalStringProperty1' será exibido em negrito ou não.
     * @type { boolean }
     * @default true
    */
    additionalStringBold?: boolean;
    /** (opcional) Define se a mensagem de erro do input deve ser exibida ou escondida em caso de erro de valor no input.
     * @type { boolean }
     * @default true
    */
    showErrorMessage?: boolean;
    /** Evento emitido ao recarregar a lista de registros
     * @example Ao ser emitido, o componente pai pode refazer o GET da lista, por exemplo.
     * @emits EventEmitter<string> que leva o valor string da pesquisa feita para ser enviada para o GET
     * @type {EventEmitter<string>} */
    reloadListChange: EventEmitter<string>;
    /** Evento emitido ao selecionar um registro da lista do combobox
     * @example Ao ser emitido, o componente pai pode realizar uma validação com o valor selecionado.
     * @emits EventEmitter<string|number|null> que leva o valor string da pesquisa feita para ser enviada para o GET
     * @type {EventEmitter<string | number | null>} */
    changeValue: EventEmitter<RecordCombobox | string | number | null>;
    /** Evento emitido ao mudar o valor do campo de pesquisa
     * @example Ao ser emitido, o componente pai pode realizar uma validação ou nova query com o valor selecionado.
     * @emits EventEmitter<string> que leva o valor string da pesquisa feita para ser enviada para o GET
     * @type {EventEmitter<string>} */
    changePesquisa: EventEmitter<string>;
    private _mainInput;
    private _searchInput;
    private _dropdownMenu;
    constructor();
    ngOnInit(): void;
    ngAfterViewInit(): void;
    ngOnChanges(changes: SimpleChanges): void;
    ngOnDestroy(): void;
    onResize(): void;
    setValue(item: RecordCombobox): void;
    clearValue(): void;
    private updateSelectedValue;
    private changeSeparator;
    private adjustDropdownWidth;
    /** Serve para aplicar ou remover o Validator.required do controle.
     * Por padrão ele priorizará a propriedade libRequired para esta validação. */
    private setValidator;
    private setControlStatus;
    reloadList(): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<LibComboboxComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<LibComboboxComponent, "lib-combobox", never, { "control": { "alias": "control"; "required": true; }; "list": { "alias": "list"; "required": true; }; "labelText": { "alias": "labelText"; "required": false; }; "separator": { "alias": "separator"; "required": false; }; "libRequired": { "alias": "libRequired"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "mainPlaceholder": { "alias": "mainPlaceholder"; "required": false; }; "searchPlaceholder": { "alias": "searchPlaceholder"; "required": false; }; "theme": { "alias": "theme"; "required": false; }; "returnRecord": { "alias": "returnRecord"; "required": false; }; "additionalStringBold": { "alias": "additionalStringBold"; "required": false; }; "showErrorMessage": { "alias": "showErrorMessage"; "required": false; }; }, { "reloadListChange": "reloadListChange"; "changeValue": "changeValue"; "changePesquisa": "changePesquisa"; }, never, ["lib-icon[iconLeft]", "lib-icon[iconRight]", "[btnLeft]", "[btnRight]"], true, never>;
}
