Textarea
Un texte multiligne qui grandit en douceur selon ce que vous écrivez, entre un nombre minimal et maximal de lignes, avec compteurs, validation et raccourci d’envoi.
Grows with your text, then scrolls.
pnpm dlx shadcn@latest add https://hextaui.com/r/textarea.jsonAjoute le composant, les tokens de thème HextaUI et les composants HextaUI dont il dépend.
Ajoutez les tokens de thème à votre CSS global, si ce n’est pas déjà fait.
Installez les dépendances.
pnpm add @base-ui/react class-variance-authority cnCopiez et collez le code suivant dans votre projet.
components/ui/textarea.tsx components/ui/input.tsx components/ui/number-flow.tsx lib/motion.ts Mettez à jour les chemins d’import selon la configuration de votre projet.
La boîte grandit avec votre texte, en s'adoucissant à chaque nouvelle ligne au lieu de sauter, de minRows jusqu'à maxRows, puis défile. La saisie n'est jamais retardée par l'animation.
Envoyer avec un raccourci
submitOnShortcut envoie le formulaire avec ⌘ + Enter ou Ctrl + Enter. Enter seul commence toujours une nouvelle ligne.
Compteur de caractères
Avec maxLength dans un Field, FieldCounter compte pendant la saisie et réagit quand vous atteignez la limite.
Lignes
minRows et maxRows définissent où la croissance commence et s'arrête.
Taille fixe
autoResize={false} garde une hauteur fixe avec une poignée de redimensionnement vertical.
États
Désactivé, en lecture seule et invalide. Les textareas invalides tremblent quand l'envoi d'un formulaire échoue.
De droite à gauche
Le texte, le placeholder et le curseur de saisie suivent le sens de lecture.
| Touche | Action |
|---|---|
| Enter | Commence une nouvelle ligne. |
| ⌘Enter | Envoie le formulaire, avec submitOnShortcut. Ctrl + Enter sous Windows et Linux. |
- Donnez-lui un label avec
FieldLabelouaria-label. - Sur écran tactile, le texte fait au moins 16px, pour qu'iOS ne zoome pas au focus.
- Le raccourci attend pendant qu'une méthode de saisie compose, si bien que confirmer un mot japonais ou chinois n'envoie jamais le message.
- Avec la réduction des animations, la boîte se redimensionne instantanément.
| Prop | Type | Par défaut |
|---|---|---|
autoResizeS'agrandit avec le texte au lieu d'avoir une hauteur fixe. | boolean | true |
minRows | number | 3 |
maxRows | number | 10 |
submitOnShortcutEnvoie le formulaire parent avec ⌘/Ctrl + Enter. | boolean | false |
shakeTremble quand l'envoi d'un formulaire le trouve invalide. | boolean | true |
| Attribut | Description |
|---|---|
data-slot="textarea" | Le textarea. |
data-autoresize | Présent quand il grandit avec son texte. |
--textarea-min-rows / --textarea-max-rows | Défini d'après minRows et maxRows. |
- InputUn champ de saisie texte en trois tailles, avec états invalide et lecture seule, style de validation natif et police tactile de 16px pour que les téléphones ne zooment jamais.
- useAutosizeAgrandit un textarea selon ce que vous écrivez, entre sa hauteur minimale et maximale, en animant chaque changement sans jamais toucher au texte.
- useComposedRefConserve une ref vers votre propre élément tout en la transmettant à la ref passée par le parent.
- useInvalidShakeFait vibrer un contrôle de formulaire lorsqu’une tentative d’envoi le trouve invalide, et jamais pendant que quelqu’un tape encore.
- CalendarUne grille de dates pour la sélection simple, de plage et multiple, avec des mois qui défilent, des aperçus de plage et des jours à taille tactile.
- CheckboxUne case à cocher dont la coche se dessine, avec des parents indéterminés, des groupes et des libellés qui partagent son survol.
Utilisé dans les blocks
Des blocks qui s’appuient sur Textarea.
- TeamMembres d’équipe et invitations pour les paramètres d’espace de travail d’un produit d’IA. Un compteur de places qui prévisualise les invitations en cours de saisie, une zone d’invitation qui transforme une liste collée en chips vérifiées, des membres avec rôles, recherche, filtres et tri, des invitations en attente avec délais avant renvoi et liens copiables, le transfert de propriété avec confirmation saisie, et la suppression avec annulation.
- Tool CallsMontrez ce que fait un agent, une ligne par étape. Les lectures et recherches se replient en un court résumé, tandis que les modifications, commandes, approbations et erreurs restent visibles. Chaque étape s’ouvre sur une vraie vue : le fichier, le diff, le terminal ou les résultats. Tous les états d’outil d’AI SDK sont couverts, y compris les approbations avec un motif à donner en échange.