Textarea
Texto de várias linhas que cresce suavemente conforme o que você escreve, entre um número mínimo e máximo de linhas, com contadores, validação e um atalho de envio.
Grows with your text, then scrolls.
pnpm dlx shadcn@latest add https://hextaui.com/r/textarea.jsonAdiciona o componente, os tokens de tema do HextaUI e quaisquer componentes do HextaUI dos quais ele depende.
Adicione os tokens de tema ao seu CSS global, se ainda não o fez.
Instale as dependências.
pnpm add @base-ui/react class-variance-authority cnCopie e cole o código a seguir no seu projeto.
components/ui/textarea.tsx components/ui/input.tsx components/ui/number-flow.tsx lib/motion.ts Atualize os caminhos de importação para corresponder à configuração do seu projeto.
A caixa cresce com o texto, suavizando a cada nova linha em vez de saltar, de minRows até maxRows, e depois rola. A digitação nunca é atrasada pela animação.
Enviar com um atalho
submitOnShortcut envia o formulário com ⌘ + Enter ou Ctrl + Enter. Enter sozinho ainda inicia uma nova linha.
Contagem de caracteres
Com maxLength dentro de um Field, FieldCounter conta enquanto você digita e dá um aviso ao atingir o limite.
Linhas
minRows e maxRows definem onde o crescimento começa e para.
Tamanho fixo
autoResize={false} mantém uma altura fixa com uma alça de redimensionamento vertical.
Estados
Desabilitado, somente leitura e inválido. Textareas inválidos tremem quando o envio de um formulário falha.
Da direita para a esquerda
Texto, placeholder e cursor seguem a direção de leitura.
| Tecla | Ação |
|---|---|
| Enter | Inicia uma nova linha. |
| ⌘Enter | Envia o formulário, com submitOnShortcut. Ctrl + Enter no Windows e no Linux. |
- Rotule com
FieldLabelouaria-label. - Em telas touch o texto tem pelo menos 16px, para o iOS não dar zoom ao receber foco.
- O atalho espera enquanto um método de entrada está compondo, então confirmar uma palavra em japonês ou chinês nunca envia a mensagem.
- Com movimento reduzido, a caixa se redimensiona instantaneamente.
| Prop | Tipo | Padrão |
|---|---|---|
autoResizeCresce com o texto em vez de ter altura fixa. | boolean | true |
minRows | number | 3 |
maxRows | number | 10 |
submitOnShortcutEnvia o formulário pai com ⌘/Ctrl + Enter. | boolean | false |
shakeTreme quando o envio do formulário o considera inválido. | boolean | true |
| Atributo | Descrição |
|---|---|
data-slot="textarea" | O textarea. |
data-autoresize | Presente quando cresce com o texto. |
--textarea-min-rows / --textarea-max-rows | Definido a partir de minRows e maxRows. |
- InputUm campo de texto com três tamanhos, estados inválido e somente leitura, estilo de validação nativa e fonte de 16px no toque para que os celulares nunca façam zoom.
- useAutosizeFaz um textarea crescer conforme o que você escreve entre a altura mínima e a máxima, animando cada mudança sem nunca tocar no texto.
- useComposedRefMantém uma ref para o seu próprio elemento e, ao mesmo tempo, a encaminha para qualquer ref que o pai tenha passado.
- useInvalidShakeSacode um controle de formulário quando uma tentativa de envio o encontra inválido, e nunca enquanto alguém ainda está digitando.
- CalendarUma grade de datas para seleção única, de intervalo e múltipla, com meses deslizantes, prévias de intervalo e dias com tamanho adequado ao toque.
- CheckboxUma caixa de seleção cujo check é desenhado na tela, com pais indeterminados, grupos e rótulos que compartilham seu hover.
Usado em blocos
Blocos que se baseiam em Textarea.
- TeamMembros da equipe e convites para as configurações do workspace de um produto de IA. Um medidor de vagas que pré-visualiza os convites que você está digitando, uma caixa de convite que transforma uma lista colada em chips verificados, membros com funções, busca, filtros e ordenação, convites pendentes com intervalo para reenvio e links copiáveis, transferência de propriedade com confirmação digitada e remoção com desfazer.
- Tool CallsMostre o que um agente faz, uma linha por etapa. Leituras e buscas se dobram em um resumo curto, enquanto edições, comandos, aprovações e erros permanecem à vista. Cada etapa se abre em uma visão real: o arquivo, o diff, o terminal ou os resultados. Todos os estados de ferramenta do AI SDK são cobertos, incluindo aprovações com a opção de dar um motivo.