import { ElementRef, EventEmitter, OnChanges, Renderer2, SimpleChanges } from '@angular/core';
import { AbstractControl } from '@angular/forms';
import { PoFieldValidateModel } from '../po-field-validate.model';
import { PoSelectOptionGroup } from './po-select-option-group.interface';
import { PoSelectOption } from './po-select-option.interface';
import { PoHelperComponent, PoHelperOptions } from '../../po-helper';
/**
* @docsExtends PoFieldValidateModel
*
* @example
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
* @description
*
* O componente po-select exibe uma lista de valores e permite que o usuário selecione um desses valores.
* Os valores listados podem ser fixos ou dinâmicos de acordo com a necessidade do desenvolvedor, dando mais flexibilidade ao componente.
* O po-select não permite que o usuário informe um valor diferente dos valores listados, isso garante a consistência da informação.
* O po-select não permite que sejam passados valores duplicados, undefined e null para as opções, excluindo-os da lista.
*
* > Ao passar um valor para o _model_ que não está na lista de opções, o mesmo será definido como `undefined`.
*
* Também existe a possibilidade de utilizar um _template_ para a exibição dos itens da lista,
* veja mais em **[p-combo-option-template](/documentation/po-combo-option-template)**.
*
* > Obs: o template **[p-select-option-template](/documentation/po-select-option-template)** será depreciado na versão 14.x.x.
*
* #### Tokens customizáveis
*
* É possível alterar o estilo do componente usando os seguintes tokens (CSS):
*
* > Para maiores informações, acesse o guia [Personalizando o Tema Padrão com Tokens CSS](https://po-ui.io/guides/theme-customization).
*
* | Propriedade | Descrição | Valor Padrão |
* |----------------------------------------|-------------------------------------------------------|-------------------------------------------------|
* | **Default Values** | | |
* | `--font-family` | Família tipográfica usada | `var(--font-family-theme)` |
* | `--font-size` | Tamanho da fonte | `var(--font-size-default)` |
* | `--text-color-empty` | Cor do placeholder | `var(--color-neutral-light-30)` |
* | `--color` | Cor da borda | `var(--color-neutral-dark-70)` |
* | `--background` | Cor de background | `var(--color-neutral-light-05)` |
* | `--text-color` | Cor do texto | `var(--color-neutral-dark-90)` |
* | `--padding-horizontal` | Preenchimento horizontal | `0.5em` |
* | `--padding-vertical` | Preenchimento vertical | `0.7em` |
* | `--field-container-title-justify` | Alinhamento horizontal do título (`justify-content`) | `space-between` |
* | `--field-container-title-flex` | Flex do título (`flex`) | `1 auto` |
* | **Hover** | | |
* | `--color-hover` | Cor principal no estado hover | `var(--color-brand-01-dark)` |
* | `--background-hover` | Cor de background no estado hover | `var(--color-brand-01-lighter)` |
* | **Focused** | | |
* | `--outline-color-focused` | Cor do outline do estado de focus | `var(--color-action-focus)` |
* | `--color-focused` | Cor da borda no estado de focus | `var(--color-action-default)` |
* | **Disabled** | | |
* | `--color-disabled` | Cor principal no estado disabled | `var(--color-neutral-light-30)` |
* | `--background-color-disabled` | Cor de background no estado disabled | `var(--color-neutral-light-20)` |
*
*/
export declare class PoSelectComponent extends PoFieldValidateModel implements OnChanges {
private readonly el;
renderer: Renderer2;
selectElement: ElementRef;
helperEl?: PoHelperComponent;
/**
* @optional
*
* @description
*
* Evento disparado ao sair do campo.
*/
blur: EventEmitter;
/**
* @optional
*
* @description
*
* Função para atualizar o ngModel do componente, necessário quando não for utilizado dentro da tag form.
*
* Na versão 12.2.0 do Angular a verificação `strictTemplates` vem true como default. Portanto, para utilizar
* two-way binding no componente deve se utilizar da seguinte forma:
*
* ```
*
* ```
*/
ngModelChange: EventEmitter;
/**
* @optional
*
* @description
*
* Indica que o campo será somente para leitura.
*
* @default `false`
*/
readonly: boolean;
/**
* @optional
*
* @description
* Define se o título do campo será exibido de forma compacta.
*
* Quando habilitado (`true`), o modo compacto afeta o conjunto composto por:
* - `po-label`
* - `p-requirement (showRequired)`
* - `po-helper`
*
* Ou seja, todos os elementos relacionados ao título do campo
* (rótulo, indicador de obrigatoriedade e componente auxiliar) passam
* a seguir o comportamento de layout compacto.
*
* Também é possível definir esse comportamento de forma global,
* uma única vez, na folha de estilo geral da aplicação, por meio
* da customização dos tokens CSS:
*
* - `--field-container-title-justify`
* - `--field-container-title-flex`
*
* Exemplo:
*
* ```
* :root {
* --field-container-title-justify: flex-start;
* --field-container-title-flex: 0 1 auto;
* }
* ```
*
* Dessa forma, o layout compacto passa a ser o padrão da aplicação,
* sem a necessidade de definir a propriedade individualmente em cada campo.
*
* @default `false`
*/
compactLabel: import("@angular/core").InputSignalWithTransform;
/** Mensagem que aparecerá enquanto nenhuma opção estiver selecionada. */
placeholder?: string;
displayValue: any;
id: string;
modelValue: any;
selectedValue: any;
optionsDefault: any[];
listGroupOptions: any[];
optionWithoutGroup: any[];
isSafari: boolean;
protected onModelTouched: any;
private _fieldLabel?;
private _fieldValue?;
private _loading;
private _options;
private _size?;
private _initialSize?;
/**
* Nesta propriedade deve ser definido uma coleção de objetos que implementam a interface `PoSelectOption`,
* ou uma coleção de objetos dentro de grupos diferentes, que seriam da interface `PoSelectOptionGroup`.
*
* Caso esta lista estiver vazia, o model será `undefined`.
*
* > Essa propriedade é imutável, ou seja, sempre que quiser atualizar a lista de opções disponíveis
* atualize a referência do objeto:
*
* ```
* // atualiza a referência do objeto garantindo a atualização do template
* this.options = [...this.options, { value: 'x', label: 'Nova opção' }];
*
* // evite, pois não atualiza a referência do objeto podendo gerar atrasos na atualização do template
* this.options.push({ value: 'x', label: 'Nova opção' });
* ```
*
* > Para coleção de objetos dentro de grupos distintos será exibido a label e opções somente se a propriedade `options` possua valores.
* Sendo assim, a estrutura seguiria dessa forma:
*
* ```
* this.options = [{
* label: 'Opções',
* options: [
* { value: 1, label: 'opção 1' },
* { value: 2, label: 'opção 2' }
* ],
* }];
* ```
*
* É possível a utilização de opções agrupadas e desagrupadas em conjunto, porém será feita a ordenação de exibir as opções
* desagrupadas acima.
*
*/
set options(options: Array);
get options(): Array;
/**
* @optional
*
* @description
* Deve ser informado o nome da propriedade do objeto que será utilizado para a conversão dos itens apresentados na lista do componente
* (`p-options`), esta propriedade será responsável pelo texto de apresentação de cada item da lista.
*
* @default `label`
*/
set fieldLabel(value: string);
get fieldLabel(): string;
/**
* @optional
*
* @description
* Deve ser informado o nome da propriedade do objeto que será utilizado para a conversão dos itens apresentados na lista do componente
* (`p-options`), esta propriedade será responsável pelo valor de cada item da lista.
*
* @default `value`
*/
set fieldValue(value: string);
/**
* @docsPrivate
*
* Determinar se o valor do compo deve retorna objeto do tipo {value: any, label: any}
*/
controlValueWithLabel?: boolean;
get fieldValue(): string;
/**
* @optional
*
* @description
* Exibe um ícone de carregamento no lado direito do campo para sinalizar que uma operação está em andamento.
*
* @default `false`
*/
set loading(value: boolean);
get loading(): boolean;
get isDisabled(): boolean;
/**
* @optional
*
* @description
*
* Define o tamanho do componente:
* - `small`: altura do input como 32px (disponível apenas para acessibilidade AA).
* - `medium`: altura do input como 44px.
*
* > Caso a acessibilidade AA não esteja configurada, o tamanho `medium` será mantido.
* Para mais detalhes, consulte a documentação do [po-theme](https://po-ui.io/documentation/po-theme).
*
* @default `medium`
*/
set size(value: string);
get size(): string;
/**
* @optional
*
* @description
*
* Define as opções do componente de ajuda (po-helper) que será exibido ao lado do label quando a propriedade `p-label` for definida, ou, ao lado do componente na ausência da propriedade `p-label`.
* > Para mais informações acesse: https://po-ui.io/documentation/po-helper.
*
* > Ao configurar esta propriedade, o antigo ícone de ajuda adicional (`p-additional-help-tooltip` e `p-additional-help`) será ignorado.
*/
poHelperComponent: import("@angular/core").InputSignal;
/**
* @optional
*
* @description
*
* Habilita a quebra automática do texto da propriedade `p-label`. Quando `p-label-text-wrap` for verdadeiro, o texto que excede
* o espaço disponível é transferido para a próxima linha em pontos apropriados para uma
* leitura clara.
*
* @default `false`
*/
labelTextWrap: import("@angular/core").InputSignal;
constructor();
ngOnChanges(changes: SimpleChanges): void;
protected onThemeChange(): 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 { PoSelectComponent } from '@po-ui/ng-components';
*
* ...
*
* @ViewChild(PoSelectComponent, { static: true }) select: PoSelectComponent;
*
* focusSelect() {
* this.select.focus();
* }
* ```
*/
focus(): void;
getErrorPattern(): string;
hasInvalidClass(): any;
mapSizeToIcon(size: string): string;
onBlur(event: any): void;
onSelectChange(value: any): void;
onUpdateOptions(): void;
updateValues(option: any): void;
onWriteValue(value: any): void;
extraValidation(c: AbstractControl): {
[key: string]: any;
};
isItemGroup(item: PoSelectOption | PoSelectOptionGroup | any): boolean;
onKeyDown(event: KeyboardEvent): void;
registerOnTouched(fn: 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
*
* ```
* ```typescript
* onKeyDown(event: KeyboardEvent, inp: PoSelectComponent): void {
* if (event.code === 'F9') {
* inp.showAdditionalHelp();
* }
* }
* ```
*/
showAdditionalHelp(): boolean;
setHelper(label?: string, additionalHelpTooltip?: string): {
hideAdditionalHelp: boolean;
helperSettings?: any;
};
private isEqual;
private findOptionValue;
private getValueUpdate;
private getValueWrite;
private transformInArray;
private separateOptions;
private validateOptions;
private applySizeBasedOnA11y;
}