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 `