Ir para o conteúdo principal
WBC - GovBR-DS
Copiar página como Markdown para IA

Textarea

Componente estável e recomendada para novos projetos.
Anatomia, uso, comportamento visual e recomendações conceituais são mantidos pelo Padrão Digital de Governo. Esta página documenta a implementação Web Components e sua API executável.

Visão Geral

Design System

Para a documentação completa de design, incluindo diretrizes de uso, acessibilidade e exemplos visuais, consulte o Design System do GovBR.

Exemplo(s)

Desktop (100%)
Tablet - 768px
iPhone (iOS) - 390x844
Android - 360x800
Compartilhar URL
Mudar fundo
Abrir no StackBlitz
Tela cheia
HTML
Controles
JS
CSS
Console
Angular (Somente leitura)
React (Somente leitura)
Vue (Somente leitura)
Acessibilidade
Recolher controles e código
Formatar código
Resetar código para o estado inicial
Copiar para a área de transferência

Propriedades

ariaLabel

Atributoaria-label
DescriçãoTexto alternativo para acessibilidade quando não há label visível.
Fornece um rótulo para tecnologias assistivas sem exibir visualmente.
Tipostring
Valor padrão---

cols

Atributocols
DescriçãoNúmero de colunas (caracteres) visíveis no textarea.
Define a largura do componente em relação ao número de caracteres por linha.
Tiponumber
Valor padrão---

customId

Atributocustom-id
DescriçãoIdentificador único.
Caso não seja fornecido, um ID gerado automaticamente será usado.
Tipostring
Valor padrãogenerateUniqueId()

density

Atributodensity
DescriçãoAjusta a densidade do componente, podendo ser 'small', 'medium' ou 'large'.
Tipo"large" | "medium" | "small"
Valor padrão'medium'

disabled

Atributodisabled
DescriçãoIndica se o textarea está desabilitado. Quando verdadeiro, o usuário não pode interagir com o campo.
Tipoboolean
Valor padrãofalse

feedbackState

Atributofeedback-state
DescriçãoEstado de feedback canônico. Quando informado, tem precedência sobre state.
Tipo"danger" | "success" | "warning"
Valor padrão---

inline

Atributoinline
DescriçãoExibe rótulo e controle em linha. Quando informada, tem precedência sobre isInline.
Tipoboolean
Valor padrão---

isInline Componente mantido por compatibilidade; prefira a alternativa indicada na documentação.

Atributois-inline
DepreciaçãoUse inline.
DescriçãoSe verdadeiro, o rótulo e o input estarão na mesma linha (layout inline).
Tipoboolean
Valor padrãofalse

label

Atributolabel
DescriçãoTexto exibido como rótulo do input.
Tipostring
Valor padrão---

maxlength

Atributomaxlength
DescriçãoNúmero máximo de caracteres permitidos no textarea. Se definido como 0, não há limite.
Tiponumber
Valor padrão0

minlength

Atributominlength
DescriçãoNúmero mínimo de caracteres necessário para o valor ser válido.
Tiponumber
Valor padrão0

name

Atributoname
DescriçãoNome do campo para identificação no formulário.
Necessário para participação correta no envio de formulários e integração com frameworks.
Tipostring
Valor padrão---

placeholder

Atributoplaceholder
DescriçãoTexto exibido dentro do input quando está vazio, fornecendo uma dica ou sugestão ao usuário.
Tipostring
Valor padrão---

readonly

Atributoreadonly
DescriçãoImpede edição sem remover o campo do envio do formulário.
Tipoboolean
Valor padrãofalse

required

Atributorequired
DescriçãoSe verdadeiro, o input é obrigatório e deve ser preenchido antes que o formulário possa ser enviado.
Tipoboolean
Valor padrãofalse

rows

Atributorows
DescriçãoNúmero de linhas visíveis no textarea.
Define a altura do componente em relação ao número de linhas de texto exibidas.
Tiponumber
Valor padrão---

showCounter

Atributoshow-counter
DescriçãoMostra o contador com a quantidade máxima de caracteres.
Tipoboolean
Valor padrãofalse

state

Atributostate
DescriçãoDefine o estado visual do componente, podendo ser 'danger', 'success' ou 'warning'.
Tipo"danger" | "success" | "warning"
Valor padrão---

validator

Atributovalidator
DescriçãoRegra 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.
Tipo((value: string) => string | Promise<string>) | string
Valor padrão---

value

Atributovalue
DescriçãoValor exibido no textarea.
Pode ser alterado pelo usuário se a propriedade readonly não estiver ativa.
Tipostring
Valor padrão''

Slots

NomeDescrição
"default"Slot para texto adicional ou instruções a serem exibidos junto ao textarea.
"feedback"Mensagem de validação, normalmente um br-message.
"validation-loading"Indicador exibido durante validação assíncrona.

Eventos

EventoDescriçãoDepreciaçãoPropagação
brTextareaValidationChangeInforma o início e o resultado do validator; o detail contém validating, valid e message.---true
valueChange Componente mantido por compatibilidade; prefira a alternativa indicada na documentação.Valor atualizado do textareaUse o evento nativo input e leia event.target.value.true

Métodos

checkValidity

DescriçãoRetorna true se o valor do textarea for válido, caso contrário false.
Se o textarea for inválido, dispara um evento 'invalid'.
AssinaturacheckValidity() => Promise<boolean>
Parâmetros---

getValidationState

DescriçãoRetorna um snapshot serializável da Constraint Validation API.
AssinaturagetValidationState() => Promise<FormValidationState>
Parâmetros---

reportValidity

DescriçãoRetorna true se o valor do textarea for válido, caso contrário false.
Se for inválido, exibe a mensagem de erro padrão do navegador.
AssinaturareportValidity() => Promise<boolean>
Parâmetros---

select

DescriçãoSeleciona todo o texto do controle nativo, conforme HTMLTextAreaElement.select().
Assinaturaselect() => Promise<void>
Parâmetros---

setCustomValidity

DescriçãoDefine uma mensagem de validação customizada para o textarea.
Se a mensagem for uma string vazia, o erro customizado é limpo.
AssinaturasetCustomValidity(message: string) => Promise<void>
Parâmetrosmessage:

setRangeText

DescriçãoSubstitui um intervalo de texto usando a API nativa do textarea.
AssinaturasetRangeText(replacement: string, start?: number, end?: number, selectionMode?: SelectionMode) => Promise<void>
Parâmetrosreplacement:
start:
end:
selectionMode:

setSelectionRange

DescriçãoDefine o intervalo selecionado no controle nativo.
AssinaturasetSelectionRange(start: number, end: number, direction?: "forward" | "backward" | "none") => Promise<void>
Parâmetrosstart:
end:
direction:

setValue

DescriçãoDefine um novo valor para o textarea.
AssinaturasetValue(newValue: string) => Promise<void>
ParâmetrosnewValue: - O novo valor a ser definido.

validate

DescriçãoExecuta o validator customizado e retorna se o textarea está válido.
Assinaturavalidate() => Promise<boolean>
Parâmetros---

Dependências

Depende de

Gráfico

Validação

Para o contrato geral e a matriz de componentes, consulte o guia de formulários. Esta seção documenta o contrato específico do br-textarea.

br-textarea usa required, readonly, minlength e maxlength como constraints nativas. O valor é enviado por name e pode ser consultado com getValidationState().

Para regras de domínio, passe validator como propriedade JavaScript. Ele recebe o valor textual e pode retornar uma mensagem, null para sucesso ou uma Promise:

const textarea = document.querySelector('br-textarea');
textarea.validator = (value) => value.trim().length >= 10
? null
: 'Informe pelo menos 10 caracteres.';

const valid = await textarea.validate();

Em React, Angular e Vue, use property binding (validator={fn}, [validator]="fn" ou :validator="fn"). Não use validator="..." para passar uma função nesses frameworks. A validação automática ocorre no change, nunca a cada tecla.

Durante uma validação assíncrona, o campo expõe aria-busy="true" e aceita o slot validation-loading. O resultado pode ser acompanhado por brTextareaValidationChange; mensagens podem ser fornecidas pelo slot feedback ou pelo br-message padrão.

Para uma regra adicional, chame setCustomValidity() com a mensagem em erro e uma string vazia ao corrigir. reportValidity() apresenta o erro sem emitir eventos de edição; reset e restauração retornam ao valor inicial silenciosamente.

Acessibilidade

Use um label visível e associe a mensagem de erro por aria-describedby ou aria-errormessage. O host mantém aria-invalid coerente com a validade mostrada e delega foco para o <textarea> interno.

O texto de ajuda deve explicar como corrigir o campo. Não dependa somente de cor ou placeholder para transmitir obrigatoriedade ou erro.

Eventos nativos

Elemento HTML de referência

br-textarea representa <textarea> e mantém esse elemento dentro do Shadow DOM.

Como ouvir os eventos

const textarea = document.querySelector('br-textarea');
textarea.addEventListener('input', () => console.log(textarea.value));

Eventos nativos suportados

EventoQuando ocorreBubblesComposedCancelableHostObservações
beforeinputantes da ediçãoSimSimSim, conforme a ediçãoSimPreservado pelo navegador.
changeno commit ou blurSimSimNãoSimUma ocorrência.
inputa cada ediçãoSimSimNãoSimSintético após sincronizar value.
foco e focusin/focusoutmudança de fococonforme o tipoSimNãoSimDelegação usa os eventos com bubbling.

Eventos não suportados ou ainda não caracterizados

Composição, clipboard e seleção têm propagação caracterizada com eventos construídos em Chromium; gatilhos reais e os outros engines permanecem pendentes. Escrita externa e reset são silenciosos.

Eventos customizados

valueChange é alias depreciado. Prefira input/change.

Valor, frameworks e acessibilidade

Leia event.target.value; validade e FormData pertencem ao host. HTML, React, Angular e Vue recebem os eventos padrão. O foco delegado e a edição multilinha preservam a semântica do <textarea>.

Evidência de teste

src/shared/platform-contract.e2e.tsx cobre interação real, ordem, flags, retargeting, caminho e delegação em Chromium headless.