import { type EventEmitter } from '../../stencil-public-runtime';
import { type FormValidationState } from '../../shared/utils/form';
import type { InputValidationChangeDetail, InputValidator } from '../input/input.types';
import type { TextareaResize, TextareaWrap } from './textarea.types';
/**
* O `br-textarea` captura textos longos em múltiplas linhas em formulários.
*
* Configure `label`, `placeholder`, `maxlength` e `state` para validação. Use `show-counter` para exibir o contador de caracteres restantes.
*
* ```html
*
* ```
*
* Em formulários HTML, o componente integra-se via `ElementInternals`, participando da validação nativa com `required`.
*
* ### Quando usar
*
* - Mensagens, comentários, justificativas, descrições ou textos extensos.
*
* ### Quando evitar
*
* - Dados curtos de linha única (nome, CPF, e-mail): use `br-input`.
*
* Consulte as [diretrizes de design do GovBR](https://www.gov.br/ds/components/textarea?tab=designer).
*
* @category Formulários
* @status stable
* @slot default - Slot para texto adicional ou instruções a serem exibidos junto ao textarea.
* @slot feedback - Mensagem de validação, normalmente um `br-message`.
* @slot validation-loading - Indicador exibido durante validação assíncrona.
*
* @part container - Contêiner visual principal.
* @part label - Rótulo do textarea.
* @part textarea - Elemento textarea nativo.
* @part counter - Contêiner do contador.
* @part counter-text - Texto do contador.
* @part helper - Contêiner do conteúdo auxiliar do slot default.
* @part feedback - Contêiner da mensagem de validação.
*/
export declare class Textarea {
elementInternals: ElementInternals;
formDisabledCallback(disabled: boolean): void;
formResetCallback(): void;
formStateRestoreCallback(state: string | File | FormData | null): void;
el: HTMLBrTextareaElement;
/** Comprimento atual derivado do valor do textarea. */
private get currentLength();
formDisabled: boolean;
/**
* Indica se o slot padrão possui conteúdo.
*/
hasDefaultSlot: boolean;
hasFeedbackSlot: boolean;
hasValidationLoadingSlot: boolean;
isValidating: boolean;
validatorMessage: string | null;
/**
* Valor exibido no textarea.
* Pode ser alterado pelo usuário se a propriedade `readonly` não estiver ativa.
*/
value: string;
/**
* Texto exibido como rótulo do input.
*/
readonly label: string;
/**
* Texto exibido dentro do input quando está vazio, fornecendo uma dica ou sugestão ao usuário.
*/
readonly placeholder: string;
/**
* Texto alternativo para acessibilidade quando não há label visível.
* Fornece um rótulo para tecnologias assistivas sem exibir visualmente.
*/
readonly ariaLabel: string;
/**
* Identificador único.
* Caso não seja fornecido, um ID gerado automaticamente será usado.
*/
readonly customId: string;
/**
* Nome do campo para identificação no formulário.
* Necessário para participação correta no envio de formulários e integração com frameworks.
*/
readonly name: string;
/**
* Indica se o textarea está desabilitado. Quando verdadeiro, o usuário não pode interagir com o campo.
*/
readonly disabled: boolean;
/**
* Se verdadeiro, o input é obrigatório e deve ser preenchido antes que o formulário possa ser enviado.
*/
readonly required: boolean;
/** Impede edição sem remover o campo do envio do formulário. */
readonly readonly: boolean;
/** Número mínimo de caracteres necessário para o valor ser válido. Deve ser um inteiro não negativo; valores inválidos usam 0. */
readonly minlength: number;
/**
* Número máximo de caracteres permitidos no textarea. Se definido como 0, não há limite.
* Deve ser um inteiro não negativo; valores inválidos usam 0.
*/
readonly maxlength: number;
/**
* Mostra o contador com a quantidade máxima de caracteres.
*/
readonly showCounter: boolean;
/**
* Define o estado visual do componente, podendo ser 'danger', 'success' ou 'warning'. Valores inválidos não aplicam estado.
*/
readonly state: 'danger' | 'success' | 'warning';
/** Estado de feedback. Quando informado, tem precedência sobre `state`; valores inválidos não aplicam estado. */
readonly feedbackState?: 'danger' | 'success' | 'warning';
/**
* Regra síncrona ou assíncrona executada no `change` ou por `validate()`.
* Pode consultar um serviço remoto; o componente controla apenas loading,
* validade e a precedência do resultado mais recente.
*
* @example
* ```js
* const textarea = document.querySelector('br-textarea');
* textarea.validator = (value) =>
* value.trim().length >= 20 ? null : 'Informe pelo menos 20 caracteres';
* ```
*/
readonly validator?: InputValidator | string;
/**
* Ajusta a densidade do componente, podendo ser 'small', 'medium' ou 'large'.
* Valores inválidos usam `medium`.
*/
readonly density: 'small' | 'medium' | 'large';
/**
* Se verdadeiro, o rótulo e o input estarão na mesma linha (layout inline).
* @deprecated Use `inline`.
*/
readonly isInline: boolean;
/** Exibe rótulo e controle em linha. Quando informada, tem precedência sobre `isInline`. */
readonly inline?: boolean;
/**
* Número de linhas visíveis no textarea.
* Define a altura do componente em relação ao número de linhas de texto exibidas.
* Deve ser um inteiro positivo; valores inválidos são ignorados.
*/
readonly rows: number;
/**
* Número de colunas (caracteres) visíveis no textarea.
* Define a largura do componente em relação ao número de caracteres por linha.
* Deve ser um inteiro positivo; valores inválidos são ignorados.
*/
readonly cols: number;
/**
* Ajusta automaticamente a altura ao conteúdo sem exibir rolagem vertical.
* Quando ativo, o componente controla a dimensão vertical; `resize="vertical"`
* e `resize="both"` passam a se comportar como `none`, enquanto
* `resize="horizontal"` continua disponível.
*/
readonly autoGrow: boolean;
/**
* Define os eixos que a pessoa usuária pode redimensionar manualmente.
* Quando omitida, preserva o comportamento nativo atual do navegador.
* Valores inválidos são ignorados.
*/
readonly resize?: TextareaResize;
/**
* Encaminha a política nativa de quebra de linha ao `